From 3c7bda85b1343248c5d70c47284e23364016efc8 Mon Sep 17 00:00:00 2001 From: Jason Bedard Date: Thu, 21 Mar 2024 15:47:35 -0700 Subject: [PATCH] test: add test of empty node_modules target (#1513) Close https://github.com/aspect-build/rules_js/issues/918 --- .../npm_translate_lock_LTE4Nzc1MDcwNjU= | 5 +-- .bazelignore | 1 + .../linked_empty_node_modules/BUILD.bazel | 35 +++++++++++++++++++ examples/linked_empty_node_modules/index.js | 1 + .../linked_empty_node_modules/package.json | 4 +++ npm/private/test/npm_defs_checked.bzl | 6 ++-- pnpm-lock.yaml | 2 ++ pnpm-workspace.yaml | 1 + 8 files changed, 50 insertions(+), 5 deletions(-) create mode 100644 examples/linked_empty_node_modules/BUILD.bazel create mode 100644 examples/linked_empty_node_modules/index.js create mode 100644 examples/linked_empty_node_modules/package.json diff --git a/.aspect/rules/external_repository_action_cache/npm_translate_lock_LTE4Nzc1MDcwNjU= b/.aspect/rules/external_repository_action_cache/npm_translate_lock_LTE4Nzc1MDcwNjU= index 76155e1cd..63c2306e2 100755 --- a/.aspect/rules/external_repository_action_cache/npm_translate_lock_LTE4Nzc1MDcwNjU= +++ b/.aspect/rules/external_repository_action_cache/npm_translate_lock_LTE4Nzc1MDcwNjU= @@ -2,10 +2,10 @@ # Input hashes for repository rule npm_translate_lock(name = "npm", pnpm_lock = "//:pnpm-lock.yaml"). # This file should be checked into version control along with the pnpm-lock.yaml file. .npmrc=-2065072158 -pnpm-lock.yaml=845121446 +pnpm-lock.yaml=-2038379638 examples/npm_deps/patches/meaning-of-life@1.0.0-pnpm.patch=-442666336 package.json=-275319675 -pnpm-workspace.yaml=116986059 +pnpm-workspace.yaml=-871530930 examples/js_binary/package.json=-41174383 examples/macro/package.json=857146175 examples/npm_deps/package.json=283109008 @@ -20,6 +20,7 @@ npm/private/test/vendored/lodash-4.17.21.tgz=-1206623349 npm/private/test/npm_package/package.json=-1991705133 npm/private/test/vendored/is-odd/package.json=1041695223 npm/private/test/vendored/semver-max/package.json=578664053 +examples/linked_empty_node_modules/package.json=-1039372825 js/private/image/package.json=-1260474848 js/private/test/image/package.json=1286417612 js/private/test/js_run_devserver/package.json=-260856079 diff --git a/.bazelignore b/.bazelignore index 58871cfb7..bd95bc483 100644 --- a/.bazelignore +++ b/.bazelignore @@ -1,5 +1,6 @@ e2e/ examples/js_binary/node_modules/ +examples/linked_empty_node_modules/node_modules examples/macro/node_modules/ examples/npm_deps/node_modules/ examples/npm_package/libs/lib_a/node_modules/ diff --git a/examples/linked_empty_node_modules/BUILD.bazel b/examples/linked_empty_node_modules/BUILD.bazel new file mode 100644 index 000000000..e5a9b76a2 --- /dev/null +++ b/examples/linked_empty_node_modules/BUILD.bazel @@ -0,0 +1,35 @@ +load("@bazel_skylib//rules:build_test.bzl", "build_test") +load("//js:defs.bzl", "js_library") +load("//npm:defs.bzl", "npm_package") +load("@npm//:defs.bzl", "npm_link_all_packages") + +# Approx repro of https://github.com/aspect-build/rules_js/issues/918 + +npm_link_all_packages(name = "node_modules") + +js_library( + name = "js_lib_empty_npm", + srcs = ["index.js"], + visibility = ["//visibility:public"], + deps = [ + ":node_modules", # <--- this should work despite no deps and this being empty + ], +) + +# Exposed via npm_package() +npm_package( + name = "linked_empty_node_modules", + srcs = [ + "package.json", + ":js_lib_empty_npm", + ], + visibility = ["//visibility:public"], +) + +build_test( + name = "test", + targets = [ + ":linked_empty_node_modules", + ":node_modules", + ], +) diff --git a/examples/linked_empty_node_modules/index.js b/examples/linked_empty_node_modules/index.js new file mode 100644 index 000000000..9f9f125dd --- /dev/null +++ b/examples/linked_empty_node_modules/index.js @@ -0,0 +1 @@ +export const noop = () => {} diff --git a/examples/linked_empty_node_modules/package.json b/examples/linked_empty_node_modules/package.json new file mode 100644 index 000000000..4df0d657e --- /dev/null +++ b/examples/linked_empty_node_modules/package.json @@ -0,0 +1,4 @@ +{ + "name": "@lib/empty", + "private": true +} diff --git a/npm/private/test/npm_defs_checked.bzl b/npm/private/test/npm_defs_checked.bzl index 17224cc92..6d6b0ef37 100644 --- a/npm/private/test/npm_defs_checked.bzl +++ b/npm/private/test/npm_defs_checked.bzl @@ -1019,12 +1019,12 @@ load("@@npm__at_types_yauzl__registry.npmjs.org_at_types_yauzl_2.10.0__links//:d # buildifier: disable=function-docstring def npm_link_all_packages(name = "node_modules", imported_links = []): root_package = "" - link_packages = ["", "examples/js_binary", "examples/macro", "examples/npm_deps", "examples/npm_package/libs/lib_a", "examples/npm_package/packages/pkg_a", "examples/npm_package/packages/pkg_b", "examples/webpack_cli", "js/private/coverage/bundle", "js/private/image", "js/private/test/image", "js/private/test/js_run_devserver", "js/private/worker/src", "npm/private/test", "npm/private/test/npm_package"] + link_packages = ["", "examples/js_binary", "examples/linked_empty_node_modules", "examples/macro", "examples/npm_deps", "examples/npm_package/libs/lib_a", "examples/npm_package/packages/pkg_a", "examples/npm_package/packages/pkg_b", "examples/webpack_cli", "js/private/coverage/bundle", "js/private/image", "js/private/test/image", "js/private/test/js_run_devserver", "js/private/worker/src", "npm/private/test", "npm/private/test/npm_package"] bazel_package = native.package_name() is_root = bazel_package == root_package link = bazel_package in link_packages if not is_root and not link: - msg = "The npm_link_all_packages() macro loaded from @npm//:defs.bzl and called in bazel package '%s' may only be called in bazel packages that correspond to the pnpm root package or pnpm workspace projects. Projects are discovered from the pnpm-lock.yaml and may be missing if the lockfile is out of date. Root package: '', pnpm workspace projects: '', 'examples/js_binary', 'examples/macro', 'examples/npm_deps', 'examples/npm_package/libs/lib_a', 'examples/npm_package/packages/pkg_a', 'examples/npm_package/packages/pkg_b', 'examples/webpack_cli', 'js/private/coverage/bundle', 'js/private/image', 'js/private/test/image', 'js/private/test/js_run_devserver', 'js/private/worker/src', 'npm/private/test', 'npm/private/test/npm_package'" % native.package_name() + msg = "The npm_link_all_packages() macro loaded from @npm//:defs.bzl and called in bazel package '%s' may only be called in bazel packages that correspond to the pnpm root package or pnpm workspace projects. Projects are discovered from the pnpm-lock.yaml and may be missing if the lockfile is out of date. Root package: '', pnpm workspace projects: '', 'examples/js_binary', 'examples/linked_empty_node_modules', 'examples/macro', 'examples/npm_deps', 'examples/npm_package/libs/lib_a', 'examples/npm_package/packages/pkg_a', 'examples/npm_package/packages/pkg_b', 'examples/webpack_cli', 'js/private/coverage/bundle', 'js/private/image', 'js/private/test/image', 'js/private/test/js_run_devserver', 'js/private/worker/src', 'npm/private/test', 'npm/private/test/npm_package'" % native.package_name() fail(msg) link_targets = [] scope_targets = {} @@ -2401,7 +2401,7 @@ def npm_link_all_packages(name = "node_modules", imported_links = []): # buildifier: disable=function-docstring def npm_link_targets(name = "node_modules", package = None): - link_packages = ["", "examples/js_binary", "examples/macro", "examples/npm_deps", "examples/npm_package/libs/lib_a", "examples/npm_package/packages/pkg_a", "examples/npm_package/packages/pkg_b", "examples/webpack_cli", "js/private/coverage/bundle", "js/private/image", "js/private/test/image", "js/private/test/js_run_devserver", "js/private/worker/src", "npm/private/test", "npm/private/test/npm_package"] + link_packages = ["", "examples/js_binary", "examples/linked_empty_node_modules", "examples/macro", "examples/npm_deps", "examples/npm_package/libs/lib_a", "examples/npm_package/packages/pkg_a", "examples/npm_package/packages/pkg_b", "examples/webpack_cli", "js/private/coverage/bundle", "js/private/image", "js/private/test/image", "js/private/test/js_run_devserver", "js/private/worker/src", "npm/private/test", "npm/private/test/npm_package"] bazel_package = package if package != None else native.package_name() link = bazel_package in link_packages diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a05aab3a1..2f52e3964 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -42,6 +42,8 @@ importers: specifier: workspace:* version: link:../npm_package/packages/pkg_a + examples/linked_empty_node_modules: {} + examples/macro: devDependencies: mocha: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 7c1b19d0f..d9bac128e 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -6,6 +6,7 @@ packages: - 'examples/npm_package/packages/pkg_a' - 'examples/npm_package/packages/pkg_b' - 'examples/webpack_cli' + - 'examples/linked_empty_node_modules' - 'js/private/coverage/bundle' - 'js/private/worker/src' - 'js/private/image'