FlatBuffers: Memory Efficient Serialization Library
Go to file
Philipp Schrader c1e7aee489
Migrate from rules_nodejs to rules_js/rules_ts (take 2) (#7928)
* Migrate from rules_nodejs to rules_js/rules_ts (take 2)

This is the second version of patch #7923. The first version got
reverted because bazel query was failing:

    $ bazel --nosystem_rc --nohome_rc query tests(set('//...')) except tests(attr("tags", "manual", set('//...')))
    ERROR: Traceback (most recent call last):
    	File "/workdir/tests/ts/bazel_repository_test_dir/BUILD", line 6, column 22, in <toplevel>
    		npm_link_all_packages(name = "node_modules")
    	File "/var/lib/buildkite-agent/.cache/bazel/_bazel_buildkite-agent/ec321eb2cc2d0f8f91b676b6d4c66c29/external/npm/defs.bzl", line 188, column 13, in npm_link_all_packages
    		fail(msg)
    Error in fail: The npm_link_all_packages() macro loaded from @npm//:defs.bzl and called in bazel package 'tests/ts/bazel_repository_test_dir' may only be called in bazel packages that correspond to the pnpm root package '' and pnpm workspace projects ''

This was happening because the `.bazelrc` file only added
`--deleted_packages` to the `build` command. We also need it for the
`query` command. This second version of the patch fixes that.

Original commit message:

This patch migrates the current use of rules_nodejs to the new rules_js.
rules_js is the intended replacement of rules_nodejs as per this note:
https://github.com/aspect-build/rules_js#relationship-to-rules_nodejs

> rules_js is an alternative to the build_bazel_rules_nodejs Bazel module
> and accompanying npm packages hosted in
> https://github.com/bazelbuild/rules_nodejs, which is now
> unmaintained. All users are recommended to use rules_js instead.

There are a few notable changes in this patch:
1. The `flatbuffer_ts_library` macro no longer accepts a `package_name`
   attribute. This is because rules_js appears to manage the import
   naming of dependencies via top-level `npm_link_package` targets.
   Users will have to migrate.
2. I added a few more arguments to `flatbuffer_library_public()`. These
   helped with exposing esbuild to `ts/compile_flat_file.sh`.
3. I pinned the version of `typescript` in `package.json` so that
   rules_ts can download the exact same version. rules_ts doesn't know
   what to do if the version isn't exact.
4. Since rules_js uses the pnpm locking mechanism, we now have a
   `pnpm-lock.yaml` file instead of a yarn lock file.
4. I added bazel targets for a few of the existing tests in `tests/ts`.
   They can be run with `bazel test //test/ts:all`. Since there is no
   flexbuffers bazel target, I did not add a bazel target for the
   corresponding test.
5. I added a separate workspace in `tests/ts/bazel_repository_test_dir/`
   to validate that the flatbuffers code can be imported as an external
   repository. You can run the test with
   `bazel test //test/ts:bazel_repository_test`. For this to work, I
   needed to expose a non-trivial chunk of the flatbuffers code to the
   test. I achieved this through some recursive `distribution`
   filegroups. This is inspired by rules_python's workspace tests.

I did not do anything special to validate that the `gen_reflections`
parameter works the same. This patch doesn't change anything about
the TypeScript generation.

As a side note: I am not an expert with rules_js. This patch is my
attempt based on my limited understanding of the rule set.

Fixes #7817

* Fix the query

---------

Co-authored-by: Derek Bailey <derekbailey@google.com>
2023-05-03 11:48:15 -07:00
.bazelci [swift] Add bazel configuration for Swift (#7195) 2022-03-29 21:30:33 -07:00
.github Replace deprecated command with environment file (#7921) 2023-04-25 22:50:37 -07:00
CMake Allow to use functions from `BuildFlatBuffers.cmake` from a flatbuffers installation installed with CMake. (#7912) 2023-04-26 05:27:14 +00:00
android FlatBuffers Version 23.3.3 (#7852) 2023-03-03 11:46:55 -08:00
bazel [grpc] Support latest version of grpc PoC (#6338) 2021-03-25 12:12:35 -07:00
benchmarks Supported cmake 3.8 (#7801) 2023-01-29 23:00:57 -08:00
conan remove travis config (#7522) 2022-09-10 12:36:51 -07:00
dart `flat_buffers.dart`: mark const variable finals for internal Dart linters 2023-05-01 09:55:47 -07:00
docs [CS] Verifier (#7850) 2023-04-06 00:29:14 +02:00
examples/go-echo Go: make generated code more compliant to "go fmt" (#7907) 2023-04-26 05:19:07 +00:00
go Support file_identifier in Go (#7904) 2023-04-26 05:15:09 +00:00
grpc Migrate from rules_nodejs to rules_js/rules_ts (take 2) (#7928) 2023-05-03 11:48:15 -07:00
include/flatbuffers fixed some windows warnings (#7929) 2023-04-28 23:22:41 -07:00
java FlatBuffers Version 23.3.3 (#7852) 2023-03-03 11:46:55 -08:00
js [JS/TS] Rewrite flexbuffers JS to TS (#6148) 2020-10-19 13:11:35 -07:00
kotlin [Android][Kotlin] fixed build after decomission of jcenter and gradle update (#7840) 2023-03-02 23:27:06 -08:00
lobster [Lobster] file_identifier support 2022-03-08 15:39:12 -08:00
lua [Lua] manipulate byte array as string (#6624) 2021-05-07 22:57:13 -07:00
mjs [JS/TS] Modernize TypeScript / JavaScript flatbuffers support (#6095) 2020-09-17 12:21:14 -07:00
net/FlatBuffers [CS] Verifier (#7850) 2023-04-06 00:29:14 +02:00
nim [Nim] Bfbs Nim Generator (#7534) 2022-10-21 14:30:04 -04:00
php Fix PHP byte validation and reenable builds (#7670) 2022-11-29 08:12:28 -08:00
python Optionally generate Python type annotations (#7858) 2023-04-28 09:38:29 -07:00
reflection Migrate from rules_nodejs to rules_js/rules_ts (take 2) (#7928) 2023-05-03 11:48:15 -07:00
rust FlatBuffers Version 23.3.3 (#7852) 2023-03-03 11:46:55 -08:00
samples Fix go_sample.sh (#7903) 2023-04-11 12:40:00 -07:00
scripts Optionally generate Python type annotations (#7858) 2023-04-28 09:38:29 -07:00
snap use improved versioning (#6691) 2021-06-11 15:27:59 -07:00
src Migrate from rules_nodejs to rules_js/rules_ts (take 2) (#7928) 2023-05-03 11:48:15 -07:00
swift FlatBuffers Version 23.3.3 (#7852) 2023-03-03 11:46:55 -08:00
tests Migrate from rules_nodejs to rules_js/rules_ts (take 2) (#7928) 2023-05-03 11:48:15 -07:00
ts Migrate from rules_nodejs to rules_js/rules_ts (take 2) (#7928) 2023-05-03 11:48:15 -07:00
.bazelignore Migrate from rules_nodejs to rules_js/rules_ts (take 2) (#7928) 2023-05-03 11:48:15 -07:00
.bazelrc Migrate from rules_nodejs to rules_js/rules_ts (take 2) (#7928) 2023-05-03 11:48:15 -07:00
.clang-format
.clang-tidy Add clang-tidy, fix some bugpron problems. (#7708) 2022-12-14 21:58:55 -08:00
.editorconfig Editorconfig: als configure to trim whitespaces end EOL. (#7833) 2023-02-27 19:56:18 -08:00
.eslintrc.js [JS/TS] Modernize TypeScript / JavaScript flatbuffers support (#6095) 2020-09-17 12:21:14 -07:00
.gitattributes Unify line ending rules in '.editorconfig' and '.gitattributes' (#5231) 2019-03-18 12:47:07 -07:00
.gitignore Add _deps/ to gitignore 2022-11-13 12:00:07 -08:00
.npmrc Migrate from rules_nodejs to rules_js/rules_ts (take 2) (#7928) 2023-05-03 11:48:15 -07:00
BUILD.bazel Migrate from rules_nodejs to rules_js/rules_ts (take 2) (#7928) 2023-05-03 11:48:15 -07:00
CHANGELOG.md FlatBuffers Version 23.3.3 (#7852) 2023-03-03 11:46:55 -08:00
CMakeLists.txt inject no long for FBS generation to remove logs in flattests (#7926) 2023-04-28 13:40:38 -07:00
CONTRIBUTING.md
FlatBuffers.podspec FlatBuffers Version 23.3.3 (#7852) 2023-03-03 11:46:55 -08:00
Formatters.md Ran clang-format-all.sh. Removed default --style=file parameter (#6639) 2021-05-15 12:54:08 -07:00
LICENSE Rename LICENSE.txt to LICENSE (#7808) 2023-01-30 21:36:30 -08:00
Package.swift Moves swift package to root of repository so it can be used directly … (#7548) 2022-09-27 14:32:05 -07:00
Package@swift-5.5.swift Removes Dead code & regenerate code (#7744) 2023-01-06 16:40:40 -08:00
README.md README.md: PyPI case typo (#7880) 2023-03-30 13:32:16 -07:00
SECURITY.md Create Security.md 2021-05-19 11:55:50 -07:00
WORKSPACE Migrate from rules_nodejs to rules_js/rules_ts (take 2) (#7928) 2023-05-03 11:48:15 -07:00
build_defs.bzl Migrate from rules_nodejs to rules_js/rules_ts (take 2) (#7928) 2023-05-03 11:48:15 -07:00
composer.json
conanfile.py Updated remaining usages of LICENSE.txt 2023-03-03 12:01:08 -08:00
package.json Migrate from rules_nodejs to rules_js/rules_ts (take 2) (#7928) 2023-05-03 11:48:15 -07:00
pnpm-lock.yaml Migrate from rules_nodejs to rules_js/rules_ts (take 2) (#7928) 2023-05-03 11:48:15 -07:00
swift.swiftformat Removes Dead code & regenerate code (#7744) 2023-01-06 16:40:40 -08:00
tsconfig.json Simplify and fix TypeScript compilation output (#7815) 2023-02-06 13:10:20 -08:00
tsconfig.mjs.json Simplify and fix TypeScript compilation output (#7815) 2023-02-06 13:10:20 -08:00
typescript.bzl Migrate from rules_nodejs to rules_js/rules_ts (take 2) (#7928) 2023-05-03 11:48:15 -07:00

README.md

logo FlatBuffers

Build status BuildKite status Fuzzing Status OpenSSF Scorecard Join the chat at https://gitter.im/google/flatbuffers Discord Chat Twitter Follow Twitter Follow

FlatBuffers is a cross platform serialization library architected for maximum memory efficiency. It allows you to directly access serialized data without parsing/unpacking it first, while still having great forwards/backwards compatibility.

Go to our landing page to browse our documentation.

Supported operating systems

  • Windows
  • macOS
  • Linux
  • Android
  • And any others with a recent C++ compiler (C++ 11 and newer)

Supported programming languages

Code generation and runtime libraries for many popular languages.

  1. C
  2. C++ - snapcraft.io
  3. C# - nuget.org
  4. Dart - pub.dev
  5. Go - go.dev
  6. Java - Maven
  7. JavaScript - NPM
  8. Kotlin
  9. Lobster
  10. Lua
  11. PHP
  12. Python - PyPI
  13. Rust - crates.io
  14. Swift - swiftpackageindex
  15. TypeScript - NPM
  16. Nim

Versioning

FlatBuffers does not follow traditional Semver versioning (see rationale) but rather uses a format of the date of the release.

Contribution

To contribute to this project, see CONTRIBUTING.

Community

Security

Please see our Security Policy for reporting vulnerabilities.

Licensing

Flatbuffers is licensed under the Apache License, Version 2.0. See LICENSE for the full license text.