| """This file contains the rule to generate a license map for node modules""" | 
 |  | 
 | def _node_modules_licenses_impl(ctx): | 
 |     """Wrapper for the license-map-generator command-line tool""" | 
 |  | 
 |     node_modules_args = ctx.actions.args() | 
 |     node_modules_args.add_all(ctx.files.node_modules) | 
 |     node_modules_args.use_param_file("%s", use_always = True) | 
 |  | 
 |     licenses_texts_args = ctx.actions.args() | 
 |     licenses_texts_args.add_all(ctx.files.licenses_texts) | 
 |     licenses_texts_args.use_param_file("%s", use_always = True) | 
 |  | 
 |     ctx.actions.run( | 
 |         executable = ctx.executable._license_map_generator, | 
 |         arguments = [ctx.file.licenses_config.path, node_modules_args, licenses_texts_args, ctx.outputs.json.path], | 
 |         outputs = [ctx.outputs.json], | 
 |         inputs = depset([ctx.file.licenses_config] + ctx.files.licenses_texts, transitive = [ctx.attr.node_modules.files]), | 
 |     ) | 
 |  | 
 | # Rule to run license-map-generator.ts | 
 | # node_modules - label of npm workspace in the format @npm//:node_modules | 
 | # The output contains information about licenses for the workspace. | 
 | # licenses_texts is a list of shared licenses | 
 | # For details - see comments in the | 
 | # tools/node_tools/node_modules_licenses/license-map-generator.ts file | 
 | node_modules_licenses = rule( | 
 |     implementation = _node_modules_licenses_impl, | 
 |     attrs = { | 
 |         "node_modules": attr.label(mandatory = True), | 
 |         "licenses_texts": attr.label_list(allow_files = True, mandatory = True), | 
 |         "licenses_config": attr.label(allow_single_file = True, mandatory = True), | 
 |         "_license_map_generator": attr.label( | 
 |             default = Label("//tools/node_tools/node_modules_licenses:license-map-generator-bin"), | 
 |             executable = True, | 
 |             cfg = "host", | 
 |         ), | 
 |     }, | 
 |     outputs = { | 
 |         "json": "%{name}.json", | 
 |     }, | 
 | ) |