diff --git a/npm/private/npm_translate_lock_generate.bzl b/npm/private/npm_translate_lock_generate.bzl index 4d68d2414..9688c01b1 100644 --- a/npm/private/npm_translate_lock_generate.bzl +++ b/npm/private/npm_translate_lock_generate.bzl @@ -96,19 +96,6 @@ def generate_repository_files(rctx, pnpm_lock_label, importers, packages, patche 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) - repositories_bzl = [] - - if len(npm_imports) > 0: - repositories_bzl.append("""load("@aspect_rules_js//npm:repositories.bzl", "npm_import")""") - repositories_bzl.append("") - - repositories_bzl.append("# Generated npm_import repository rules corresponding to npm packages in {}".format(utils.consistent_label_str(pnpm_lock_label))) - repositories_bzl.append("# buildifier: disable=function-docstring") - repositories_bzl.append("def npm_repositories():") - if len(npm_imports) == 0: - repositories_bzl.append(" pass") - repositories_bzl.append("") - link_packages = [helpers.link_package(root_package, import_path) for import_path in importers.keys()] defs_bzl_header = ["""# buildifier: disable=bzl-visibility @@ -268,78 +255,96 @@ def npm_link_all_packages(name = "node_modules", imported_links = []): # check all links and fail if there are duplicates which can happen with public hoisting helpers.check_for_conflicting_public_links(npm_imports, rctx.attr.public_hoist_packages) + repositories_bzl = [] + + if not rctx.attr.bzlmod and len(npm_imports) > 0: + repositories_bzl.append("""load("@aspect_rules_js//npm:repositories.bzl", "npm_import")""") + repositories_bzl.append("") + + repositories_bzl.append("# Generated npm_import repository rules corresponding to npm packages in {}".format(utils.consistent_label_str(pnpm_lock_label))) + repositories_bzl.append("# buildifier: disable=function-docstring") + repositories_bzl.append("def npm_repositories():") + if rctx.attr.bzlmod: + # TODO: remove this completely once tests updated to not run under bzlmod + repositories_bzl.append(" print(\"WARNING: '%s' should NOT be invoked with bzlmod\")") + repositories_bzl.append("") + elif len(npm_imports) == 0: + repositories_bzl.append(" pass") + repositories_bzl.append("") + stores_bzl = [] links_bzl = {} links_targets_bzl = {} for (i, _import) in enumerate(npm_imports): - maybe_integrity = (""" + if not rctx.attr.bzlmod: + maybe_integrity = (""" integrity = "%s",""" % _import.integrity) if _import.integrity else "" - maybe_deps = (""" + maybe_deps = (""" deps = %s,""" % starlark_codegen_utils.to_dict_attr(_import.deps, 2)) if len(_import.deps) > 0 else "" - maybe_transitive_closure = (""" + maybe_transitive_closure = (""" transitive_closure = %s,""" % starlark_codegen_utils.to_dict_list_attr(_import.transitive_closure, 2)) if len(_import.transitive_closure) > 0 else "" - maybe_patches = (""" + maybe_patches = (""" patches = %s,""" % _import.patches) if len(_import.patches) > 0 else "" - maybe_patch_args = (""" + maybe_patch_args = (""" patch_args = %s,""" % _import.patch_args) if len(_import.patches) > 0 and len(_import.patch_args) > 0 else "" - maybe_custom_postinstall = (""" + maybe_custom_postinstall = (""" custom_postinstall = \"%s\",""" % _import.custom_postinstall) if _import.custom_postinstall else "" - maybe_lifecycle_hooks = (""" + maybe_lifecycle_hooks = (""" lifecycle_hooks = %s,""" % _import.lifecycle_hooks) if _import.run_lifecycle_hooks and _import.lifecycle_hooks else "" - maybe_lifecycle_hooks_env = (""" + maybe_lifecycle_hooks_env = (""" lifecycle_hooks_env = %s,""" % _import.lifecycle_hooks_env) if _import.run_lifecycle_hooks and _import.lifecycle_hooks_env else "" - maybe_lifecycle_hooks_execution_requirements = (""" + maybe_lifecycle_hooks_execution_requirements = (""" lifecycle_hooks_execution_requirements = %s,""" % _import.lifecycle_hooks_execution_requirements) if _import.run_lifecycle_hooks else "" - maybe_lifecycle_hooks_use_default_shell_env = (""" + maybe_lifecycle_hooks_use_default_shell_env = (""" lifecycle_hooks_use_default_shell_env = True,""") if _import.lifecycle_hooks_use_default_shell_env else "" - maybe_bins = (""" + maybe_bins = (""" bins = %s,""" % starlark_codegen_utils.to_dict_attr(_import.bins, 2)) if len(_import.bins) > 0 else "" - maybe_generate_bzl_library_targets = (""" + maybe_generate_bzl_library_targets = (""" generate_bzl_library_targets = True,""") if rctx.attr.generate_bzl_library_targets else "" - maybe_commit = (""" + maybe_commit = (""" commit = "%s",""" % _import.commit) if _import.commit else "" - maybe_npm_auth = (""" + maybe_npm_auth = (""" npm_auth = "%s",""" % _import.npm_auth) if _import.npm_auth else "" - maybe_npm_auth_basic = (""" + maybe_npm_auth_basic = (""" npm_auth_basic = "%s",""" % _import.npm_auth_basic) if _import.npm_auth_basic else "" - maybe_npm_auth_username = (""" + maybe_npm_auth_username = (""" npm_auth_username = "%s",""" % _import.npm_auth_username) if _import.npm_auth_username else "" - maybe_npm_auth_password = (""" + maybe_npm_auth_password = (""" npm_auth_password = "%s",""" % _import.npm_auth_password) if _import.npm_auth_password else "" - maybe_dev = (""" + maybe_dev = (""" dev = True,""") if _import.dev else "" - maybe_replace_package = (""" + maybe_replace_package = (""" replace_package = "%s",""" % _import.replace_package) if _import.replace_package else "" - repositories_bzl.append(_NPM_IMPORT_TMPL.format( - link_packages = starlark_codegen_utils.to_dict_attr(_import.link_packages, 2, quote_value = False), - link_workspace = link_workspace, - maybe_bins = maybe_bins, - maybe_commit = maybe_commit, - maybe_custom_postinstall = maybe_custom_postinstall, - maybe_deps = maybe_deps, - maybe_dev = maybe_dev, - maybe_generate_bzl_library_targets = maybe_generate_bzl_library_targets, - maybe_integrity = maybe_integrity, - maybe_lifecycle_hooks = maybe_lifecycle_hooks, - maybe_lifecycle_hooks_env = maybe_lifecycle_hooks_env, - maybe_lifecycle_hooks_execution_requirements = maybe_lifecycle_hooks_execution_requirements, - maybe_lifecycle_hooks_use_default_shell_env = maybe_lifecycle_hooks_use_default_shell_env, - maybe_npm_auth = maybe_npm_auth, - maybe_npm_auth_basic = maybe_npm_auth_basic, - maybe_npm_auth_password = maybe_npm_auth_password, - maybe_npm_auth_username = maybe_npm_auth_username, - maybe_patch_args = maybe_patch_args, - maybe_patches = maybe_patches, - maybe_replace_package = maybe_replace_package, - maybe_transitive_closure = maybe_transitive_closure, - name = helpers.to_apparent_repo_name(_import.name), - package = _import.package, - package_visibility = _import.package_visibility, - root_package = _import.root_package, - url = _import.url, - version = _import.version, - )) + repositories_bzl.append(_NPM_IMPORT_TMPL.format( + link_packages = starlark_codegen_utils.to_dict_attr(_import.link_packages, 2, quote_value = False), + link_workspace = link_workspace, + maybe_bins = maybe_bins, + maybe_commit = maybe_commit, + maybe_custom_postinstall = maybe_custom_postinstall, + maybe_deps = maybe_deps, + maybe_dev = maybe_dev, + maybe_generate_bzl_library_targets = maybe_generate_bzl_library_targets, + maybe_integrity = maybe_integrity, + maybe_lifecycle_hooks = maybe_lifecycle_hooks, + maybe_lifecycle_hooks_env = maybe_lifecycle_hooks_env, + maybe_lifecycle_hooks_execution_requirements = maybe_lifecycle_hooks_execution_requirements, + maybe_lifecycle_hooks_use_default_shell_env = maybe_lifecycle_hooks_use_default_shell_env, + maybe_npm_auth = maybe_npm_auth, + maybe_npm_auth_basic = maybe_npm_auth_basic, + maybe_npm_auth_password = maybe_npm_auth_password, + maybe_npm_auth_username = maybe_npm_auth_username, + maybe_patch_args = maybe_patch_args, + maybe_patches = maybe_patches, + maybe_replace_package = maybe_replace_package, + maybe_transitive_closure = maybe_transitive_closure, + name = helpers.to_apparent_repo_name(_import.name), + package = _import.package, + package_visibility = _import.package_visibility, + root_package = _import.root_package, + url = _import.url, + version = _import.version, + )) if _import.link_packages: defs_bzl_header.append( @@ -507,6 +512,7 @@ def npm_link_all_packages(name = "node_modules", imported_links = []): 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)] for filename, contents in rctx.attr.additional_file_contents.items():