blob: 24a6c52747baf5d300dcf2474fca6b98bb4a872b [file]
load("//:common.bzl", "ProtoCompileInfo")
NodeModuleIndexInfo = provider(fields = {
"name": "rule name",
"index": "index.js file",
})
def _get_js_variable_name(file):
name = file.basename.rstrip(".js")
# Deal with special characters here?
return name
def _get_js_output_file_name(ctx, file):
filename = file.short_path
filename = filename[len(ctx.label.package) + 1:]
return filename
def _node_module_index_impl(ctx):
compilation = ctx.attr.compilation[ProtoCompileInfo]
# Find all files to require
exports = {}
for output in compilation.outputs:
if output.path.endswith("_pb.js"):
name = _get_js_variable_name(output)
exports[name] = _get_js_output_file_name(ctx, output)
# Build file content
content = []
content.append("module.exports = {")
for name, path in exports.items():
content.append(" '%s': require('./%s')," % (name, path))
content.append("}")
# Write file
index_js = ctx.actions.declare_file("%s/index.js" % (compilation.label.name))
ctx.actions.write(
output = index_js,
content = "\n".join(content),
)
return [NodeModuleIndexInfo(
name = ctx.label.name,
index = index_js,
), DefaultInfo(
files = depset([index_js]),
)]
node_module_index = rule(
implementation = _node_module_index_impl,
attrs = {
"compilation": attr.label(
providers = [ProtoCompileInfo],
mandatory = True,
),
},
output_to_genfiles = True,
)