perf: reduce large array concatenation (#1627)
diff --git a/npm/private/npm_import.bzl b/npm/private/npm_import.bzl index 907bdc9..2bc16a9 100644 --- a/npm/private/npm_import.bzl +++ b/npm/private/npm_import.bzl
@@ -541,12 +541,13 @@ bins = _get_bin_entries(pkg_json, rctx.attr.package) - generated_by_lines = _make_generated_by_lines(rctx.attr.package, rctx.attr.version) + generated_by_prefix = _make_generated_by_prefix(rctx.attr.package, rctx.attr.version) bazel_name = utils.bazel_name(rctx.attr.package, rctx.attr.version) rctx_files = { - "BUILD.bazel": generated_by_lines + [ + "BUILD.bazel": [ + generated_by_prefix, """load("@aspect_rules_js//npm/private:npm_package_internal.bzl", _npm_package_internal = "npm_package_internal")""", ], } @@ -565,7 +566,8 @@ package_name_no_scope = rctx.attr.package.rsplit("/", 1)[-1] for link_package in rctx.attr.link_packages.keys(): - bin_bzl = generated_by_lines + [ + bin_bzl = [ + generated_by_prefix, """load("@aspect_bazel_lib//lib:directory_path.bzl", _directory_path = "directory_path")""", """load("@aspect_rules_js//js:defs.bzl", _js_binary = "js_binary", _js_run_binary = "js_run_binary", _js_test = "js_test")""", ] @@ -616,7 +618,7 @@ build_file = paths.join(link_package, "BUILD.bazel") if build_file not in rctx_files: - rctx_files[build_file] = generated_by_lines[:] + rctx_files[build_file] = [generated_by_prefix] if rctx.attr.generate_bzl_library_targets: rctx_files[build_file].append("""load("@bazel_skylib//:bzl_library.bzl", "bzl_library")""") rctx_files[build_file].append(_BZL_LIBRARY_TMPL.format( @@ -810,9 +812,9 @@ if tmpl ] - generated_by_lines = _make_generated_by_lines(rctx.attr.package, rctx.attr.version) + generated_by_prefix = _make_generated_by_prefix(rctx.attr.package, rctx.attr.version) - rctx.file(_DEFS_BZL_FILENAME, "\n".join(generated_by_lines + npm_link_package_bzl)) + rctx.file(_DEFS_BZL_FILENAME, generated_by_prefix + "\n" + "\n".join(npm_link_package_bzl)) rctx.file("BUILD.bazel", "exports_files(%s)" % starlark_codegen_utils.to_list_attr([_DEFS_BZL_FILENAME])) @@ -861,14 +863,12 @@ bin = {paths.basename(package): bin} return bin -def _make_generated_by_lines(package, version): - return [ - "\"@generated by @aspect_rules_js//npm/private:npm_import.bzl for npm package {package}@{version}\"".format( - package = package, - version = version, - ), - "", # empty line after bzl docstring since buildifier expects this if this file is vendored in - ] +def _make_generated_by_prefix(package, version): + # empty line after bzl docstring since buildifier expects this if this file is vendored in + return "\"@generated by @aspect_rules_js//npm/private:npm_import.bzl for npm package {package}@{version}\"\n".format( + package = package, + version = version, + ) npm_import_links_lib = struct( implementation = _npm_import_links_rule_impl,
diff --git a/npm/private/npm_translate_lock_generate.bzl b/npm/private/npm_translate_lock_generate.bzl index b383460..9df0d6f 100644 --- a/npm/private/npm_translate_lock_generate.bzl +++ b/npm/private/npm_translate_lock_generate.bzl
@@ -89,10 +89,8 @@ # buildifier: disable=function-docstring def generate_repository_files(rctx, pnpm_lock_label, importers, packages, patched_dependencies, root_package, default_registry, npm_registries, npm_auth, link_workspace): - generated_by_lines = [ - "\"\"\"@generated by npm_translate_lock(name = \"{}\", pnpm_lock = \"{}\")\"\"\"".format(helpers.to_apparent_repo_name(rctx.name), utils.consistent_label_str(pnpm_lock_label)), - "", # empty line after bzl docstring since buildifier expects this if this file is vendored in - ] + # empty line after bzl docstring since buildifier expects this if this file is vendored in + generated_by_prefix = "\"\"\"@generated by npm_translate_lock(name = \"{}\", pnpm_lock = \"{}\")\"\"\"\n".format(helpers.to_apparent_repo_name(rctx.name), utils.consistent_label_str(pnpm_lock_label)) npm_imports = helpers.get_npm_imports(importers, packages, patched_dependencies, root_package, rctx.name, rctx.attr, rctx.attr.lifecycle_hooks, rctx.attr.lifecycle_hooks_execution_requirements, rctx.attr.lifecycle_hooks_use_default_shell_env, npm_registries, default_registry, npm_auth) @@ -414,11 +412,12 @@ link_package = link_package, package_json_bzl = _PACKAGE_JSON_BZL_FILENAME, ) - rctx.file(package_json_bzl_file_path, "\n".join([ + rctx.file( + package_json_bzl_file_path, _BIN_TMPL.format( repo_package_json_bzl = repo_package_json_bzl, ), - ])) + ) if len(stores_bzl) > 0: npm_link_all_packages_bzl.append(""" if is_root:""") @@ -516,8 +515,15 @@ npm_link_targets_bzl.append(""" return link_targets""") - rctx_files[rctx.attr.defs_bzl_filename] = ["\n".join(defs_bzl_header + [""] + npm_link_all_packages_bzl + [""] + npm_link_targets_bzl + [""])] - rctx_files[rctx.attr.repositories_bzl_filename] = ["\n".join(repositories_bzl)] + rctx_files[rctx.attr.defs_bzl_filename] = [ + "\n".join(defs_bzl_header), + "", + "\n".join(npm_link_all_packages_bzl), + "", + "\n".join(npm_link_targets_bzl), + "", + ] + rctx_files[rctx.attr.repositories_bzl_filename] = repositories_bzl for filename, contents in rctx.attr.additional_file_contents.items(): if not filename in rctx_files.keys(): @@ -536,4 +542,4 @@ rctx_files[filename].extend(contents) for filename, contents in rctx_files.items(): - rctx.file(filename, "\n".join(generated_by_lines + contents)) + rctx.file(filename, generated_by_prefix + "\n" + "\n".join(contents))