mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-05 21:17:25 +00:00
When flatbuffers is being used from a project that has no use for
JavaScript, users encounter an error similar to the following:
ERROR: Skipping '@com_github_google_flatbuffers//:flatbuffers': error loading package '@com_github_google_flatbuffers//': Unable to find package for @npm//:defs.bzl: The repository '@npm' could not be resolved: Repository '@npm' is not defined.
WARNING: Target pattern parsing failed.
ERROR: error loading package '@com_github_google_flatbuffers//': Unable to find package for @npm//:defs.bzl: The repository '@npm' could not be resolved: Repository '@npm' is not defined.
INFO: Elapsed time: 0.023s
INFO: 0 processes.
FAILED: Build did NOT complete successfully (0 packages loaded)
currently loading: @com_github_google_flatbuffers//
That's not ideal. Users that only care about C++ for example
shouldn't be forced to deal with rules_js and friends.
This patch attempts to fix that by moving the rules_js-specific things
into the `ts` and `tests/ts` directories. This should allow
non-JavaScript projects to ignore rules_js and friends completely.
Here I basically followed the `rules_foo` example from rules_js:
https://github.com/aspect-build/rules_js/tree/main/e2e/rules_foo
The idea is that flatbuffers has its own npm dependencies regardless
of what other projects may have. This means we should not force the
user to import flatbuffers's npm dependencies. The new
`ts/repositories.bzl` file is used by dependents to import
flatbuffers's dependencies. They can still import their own
dependencies. This cleanup allowed me to move all
JavaScript-specific stuff from the top-level directory into
subdirectories.
There should be no changes in this patch in terms of functionality.
It's just a refactor of the rules_js call sites. Users will have to
add a call to the function in `ts/repositories.bzl` in their own
`WORKSPACE` file. They can use
`tests/ts/bazel_repository_test/WORKSPACE` as an example.
Co-authored-by: Derek Bailey <derekbailey@google.com>
68 lines
2.2 KiB
Python
68 lines
2.2 KiB
Python
load("@aspect_rules_js//js:defs.bzl", "js_test")
|
|
load("@aspect_rules_js//npm:defs.bzl", "npm_link_package")
|
|
load("//:typescript.bzl", "flatbuffer_ts_library")
|
|
load("//tests:defs.bzl", "flatbuffers_as_external_repo_test")
|
|
|
|
package(default_visibility = ["//visibility:private"])
|
|
|
|
# This is a copy of //ts:node_modules/flatbuffers. The rules_js-based tests
|
|
# require this target to live in the same or a parent package. Since we don't
|
|
# want to put rules_js targets in the root package, we create a copy here.
|
|
npm_link_package(
|
|
name = "node_modules/flatbuffers",
|
|
src = "//ts:flatbuffers",
|
|
root_package = "tests/ts",
|
|
)
|
|
|
|
flatbuffer_ts_library(
|
|
name = "typescript_ts_fbs",
|
|
srcs = ["typescript_keywords.fbs"],
|
|
deps = [
|
|
"//tests/ts/test_dir:include_ts_fbs",
|
|
"//tests/ts/test_dir:typescript_transitive_ts_fbs",
|
|
],
|
|
)
|
|
|
|
TEST_DATA = glob([
|
|
"my-game/*.js",
|
|
"my-game/example/*.js",
|
|
"my-game/example2/*.js",
|
|
])
|
|
|
|
TEST_UNION_VECTOR_DATA = glob([
|
|
"union_vector/*.js",
|
|
])
|
|
|
|
TEST_COMPLEX_ARRAYS_DATA = glob([
|
|
"arrays_test_complex/**/*.js",
|
|
])
|
|
|
|
# Here we're running the tests against the checked-in generated files. These
|
|
# are kept up-to-date with a CI-based mechanism. The intent of running these
|
|
# tests here via bazel is not to validate that they're up-to-date. Instead, we
|
|
# just want to make it easy to run these tests while making other changes. For
|
|
# example, this is useful when making changes to the rules_js setup to validate
|
|
# that the basic infrastructure is still working.
|
|
[js_test(
|
|
name = "%s_test" % test,
|
|
chdir = package_name(),
|
|
data = data + [
|
|
"package.json",
|
|
"//tests:test_data_copied_to_bin",
|
|
"//tests/ts:node_modules/flatbuffers",
|
|
],
|
|
entry_point = "%s.js" % test,
|
|
) for test, data in (
|
|
("JavaScriptTest", TEST_DATA),
|
|
("JavaScriptUnionVectorTest", TEST_UNION_VECTOR_DATA),
|
|
# TODO(philsc): Figure out how to run this test with flexbuffers available.
|
|
# At the moment the flexbuffer library is not exposed as a bazel target.
|
|
#("JavaScriptFlexBuffersTest", TBD_DATA)
|
|
("JavaScriptComplexArraysTest", TEST_COMPLEX_ARRAYS_DATA),
|
|
)]
|
|
|
|
flatbuffers_as_external_repo_test(
|
|
name = "bazel_repository_test",
|
|
directory = "bazel_repository_test_dir",
|
|
)
|