Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
jbedard committed Mar 28, 2024
1 parent 698ec5b commit 4115c97
Showing 1 changed file with 67 additions and 61 deletions.
128 changes: 67 additions & 61 deletions npm/private/npm_translate_lock_generate.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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(
Expand Down Expand Up @@ -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():
Expand Down

0 comments on commit 4115c97

Please sign in to comment.