1""" 2Rules for building typescript flatbuffers with Bazel. 3""" 4 5load("@aspect_rules_js//js:defs.bzl", "js_library") 6load(":build_defs.bzl", "flatbuffer_library_public") 7 8DEFAULT_FLATC_TS_ARGS = [ 9 "--gen-object-api", 10 "--gen-mutable", 11 "--reflect-names", 12 "--gen-name-strings", 13 "--ts-flat-files", 14 "--keep-prefix", 15] 16 17def flatbuffer_ts_library( 18 name, 19 srcs, 20 compatible_with = None, 21 target_compatible_with = None, 22 deps = [], 23 include_paths = None, 24 flatc_args = DEFAULT_FLATC_TS_ARGS, 25 visibility = None, 26 restricted_to = None, 27 gen_reflections = False): 28 """Generates a ts_library rule for a given flatbuffer definition. 29 30 Args: 31 name: Name of the generated ts_library rule. 32 srcs: Source .fbs file(s). 33 deps: Other flatbuffer_ts_library's to depend on. Note that currently 34 you must specify all your transitive dependencies manually. 35 include_paths: Optional, list of paths the includes files can be found in. 36 flatc_args: Optional list of additional arguments to pass to flatc 37 (e.g. --gen-mutable). 38 visibility: The visibility of the generated cc_library. By default, use the 39 default visibility of the project. 40 compatible_with: Optional, The list of environments this rule can be built 41 for, in addition to default-supported environments. 42 restricted_to: Optional, The list of environments this rule can be built 43 for, instead of default-supported environments. 44 target_compatible_with: Optional, The list of target platform constraints 45 to use. 46 gen_reflections: Optional, if true this will generate the flatbuffer 47 reflection binaries for the schemas. 48 """ 49 srcs_lib = "%s_srcs" % (name) 50 out_base = [native.package_relative_label(s).name.removesuffix(".fbs") for s in srcs] 51 52 if len(srcs) != 1: 53 fail("flatbuffer_ts_library only supports one .fbs file per target currently.") 54 55 outs = ["%s_generated.cjs" % s for s in out_base] 56 includes = [d + "_includes" for d in deps] 57 reflection_name = "%s_reflection" % name if gen_reflections else "" 58 flatbuffer_library_public( 59 name = srcs_lib, 60 srcs = srcs, 61 outs = outs, 62 language_flag = "--ts", 63 includes = includes, 64 include_paths = include_paths, 65 extra_env = "ESBUILD_BIN=$(ESBUILD_BIN)", 66 flatc_args = flatc_args + ["--filename-suffix _generated"], 67 compatible_with = compatible_with, 68 restricted_to = restricted_to, 69 reflection_name = reflection_name, 70 reflection_visibility = visibility, 71 target_compatible_with = target_compatible_with, 72 flatc_path = Label("//ts:compile_flat_file"), 73 toolchains = ["@aspect_rules_esbuild//esbuild:resolved_toolchain"], 74 tools = ["@aspect_rules_esbuild//esbuild:resolved_toolchain"], 75 ) 76 js_library( 77 name = name, 78 visibility = visibility, 79 compatible_with = compatible_with, 80 restricted_to = restricted_to, 81 target_compatible_with = target_compatible_with, 82 srcs = outs, 83 ) 84 native.filegroup( 85 name = "%s_includes" % (name), 86 srcs = srcs + includes, 87 compatible_with = compatible_with, 88 restricted_to = restricted_to, 89 visibility = visibility, 90 ) 91