1"""Rust WASM-bindgen rules for interfacing with bazelbuild/rules_nodejs""" 2 3load("@rules_nodejs//nodejs:providers.bzl", "DeclarationInfo", "JSModuleInfo") 4load("//wasm_bindgen/private:wasm_bindgen.bzl", "WASM_BINDGEN_ATTR", "rust_wasm_bindgen_action") 5 6def _nodejs_rust_wasm_bindgen_impl(ctx): 7 toolchain = ctx.toolchains[Label("//wasm_bindgen:toolchain_type")] 8 9 info = rust_wasm_bindgen_action( 10 ctx = ctx, 11 toolchain = toolchain, 12 wasm_file = ctx.attr.wasm_file, 13 target_output = ctx.attr.target, 14 bindgen_flags = ctx.attr.bindgen_flags, 15 ) 16 17 # Return a structure that is compatible with the deps[] of a ts_library. 18 declarations = info.ts 19 es5_sources = info.js 20 21 return [ 22 DefaultInfo( 23 files = depset([info.wasm], transitive = [info.js, info.ts]), 24 ), 25 DeclarationInfo( 26 declarations = declarations, 27 transitive_declarations = declarations, 28 type_blocklisted_declarations = depset([]), 29 ), 30 JSModuleInfo( 31 direct_sources = es5_sources, 32 sources = es5_sources, 33 ), 34 info, 35 ] 36 37nodejs_rust_wasm_bindgen = rule( 38 doc = """\ 39Generates javascript and typescript bindings for a webassembly module using [wasm-bindgen][ws] that interface with [bazelbuild/rules_nodejs][bbnjs]. 40 41[ws]: https://rustwasm.github.io/docs/wasm-bindgen/ 42[bbnjs]: https://github.com/bazelbuild/rules_nodejs 43 44An example of this rule in use can be seen at [@rules_rust//examples/wasm_bindgen/rules_js](../examples/wasm_bindgen/rules_js) 45""", 46 implementation = _nodejs_rust_wasm_bindgen_impl, 47 attrs = WASM_BINDGEN_ATTR, 48 toolchains = [ 49 str(Label("//wasm_bindgen:toolchain_type")), 50 ], 51) 52