From c949bd3c389a53893142e9dc0eb853153fd9f386 Mon Sep 17 00:00:00 2001 From: Jason Bedard Date: Fri, 26 Jul 2024 11:03:52 -0700 Subject: [PATCH] fix(npm): npm_link_package() in subdirectory to js_library() package (#1871) --- e2e/npm_link_package-esm/BUILD.bazel | 36 +- e2e/npm_link_package-esm/WORKSPACE | 3 +- e2e/npm_link_package-esm/lib/BUILD.bazel | 11 +- e2e/npm_link_package-esm/lib/index.mjs | 2 +- e2e/npm_link_package-esm/pkg/BUILD.bazel | 18 + e2e/npm_link_package-esm/pkg/index.mjs | 8 + e2e/npm_link_package-esm/pkg/package.json | 10 + e2e/npm_link_package-esm/src/BUILD.bazel | 2 + e2e/npm_link_package-esm/src/main.mjs | 4 + .../wrapper-lib/BUILD.bazel | 8 +- .../wrapper-lib/index.mjs | 1 + .../wrapper-lib/subdir/BUILD.bazel | 2 +- e2e/npm_link_package-rerooted/.bazelignore | 1 + e2e/npm_link_package-rerooted/.bazeliskrc | 1 + e2e/npm_link_package-rerooted/.bazelrc | 15 + e2e/npm_link_package-rerooted/.bazelversion | 1 + e2e/npm_link_package-rerooted/.npmrc | 4 + e2e/npm_link_package-rerooted/BUILD.bazel | 0 e2e/npm_link_package-rerooted/WORKSPACE | 51 +++ .../root/BUILD.bazel | 54 +++ .../root/lib/BUILD.bazel | 15 + .../root/lib/index.js | 9 + .../root/lib/package.json | 4 + .../root/package.json | 14 + .../root/pkg/BUILD.bazel | 18 + .../root/pkg/index.js | 10 + .../root/pkg/package.json | 4 + .../root/pnpm-lock.yaml | 369 ++++++++++++++++++ .../root/pnpm-workspace.yaml | 2 + .../root/src/BUILD.bazel | 34 ++ .../root/src/main.js | 45 +++ .../root/wrapper-lib/BUILD.bazel | 24 ++ .../root/wrapper-lib/index.js | 10 + .../root/wrapper-lib/subdir/BUILD.bazel | 11 + .../root/wrapper-lib/subdir/index.js | 3 + e2e/npm_link_package/BUILD.bazel | 32 ++ e2e/npm_link_package/lib/BUILD.bazel | 9 +- e2e/npm_link_package/pkg/BUILD.bazel | 18 + e2e/npm_link_package/pkg/index.js | 10 + e2e/npm_link_package/pkg/package.json | 4 + e2e/npm_link_package/src/BUILD.bazel | 2 + e2e/npm_link_package/src/main.js | 4 + e2e/npm_link_package/wrapper-lib/BUILD.bazel | 1 + e2e/npm_link_package/wrapper-lib/index.js | 2 + npm/private/npm_package_store.bzl | 6 +- 45 files changed, 872 insertions(+), 20 deletions(-) create mode 100644 e2e/npm_link_package-esm/pkg/BUILD.bazel create mode 100644 e2e/npm_link_package-esm/pkg/index.mjs create mode 100644 e2e/npm_link_package-esm/pkg/package.json create mode 100644 e2e/npm_link_package-rerooted/.bazelignore create mode 120000 e2e/npm_link_package-rerooted/.bazeliskrc create mode 100644 e2e/npm_link_package-rerooted/.bazelrc create mode 120000 e2e/npm_link_package-rerooted/.bazelversion create mode 100644 e2e/npm_link_package-rerooted/.npmrc create mode 100644 e2e/npm_link_package-rerooted/BUILD.bazel create mode 100644 e2e/npm_link_package-rerooted/WORKSPACE create mode 100644 e2e/npm_link_package-rerooted/root/BUILD.bazel create mode 100644 e2e/npm_link_package-rerooted/root/lib/BUILD.bazel create mode 100644 e2e/npm_link_package-rerooted/root/lib/index.js create mode 100644 e2e/npm_link_package-rerooted/root/lib/package.json create mode 100644 e2e/npm_link_package-rerooted/root/package.json create mode 100644 e2e/npm_link_package-rerooted/root/pkg/BUILD.bazel create mode 100644 e2e/npm_link_package-rerooted/root/pkg/index.js create mode 100644 e2e/npm_link_package-rerooted/root/pkg/package.json create mode 100644 e2e/npm_link_package-rerooted/root/pnpm-lock.yaml create mode 100644 e2e/npm_link_package-rerooted/root/pnpm-workspace.yaml create mode 100644 e2e/npm_link_package-rerooted/root/src/BUILD.bazel create mode 100644 e2e/npm_link_package-rerooted/root/src/main.js create mode 100644 e2e/npm_link_package-rerooted/root/wrapper-lib/BUILD.bazel create mode 100644 e2e/npm_link_package-rerooted/root/wrapper-lib/index.js create mode 100644 e2e/npm_link_package-rerooted/root/wrapper-lib/subdir/BUILD.bazel create mode 100644 e2e/npm_link_package-rerooted/root/wrapper-lib/subdir/index.js create mode 100644 e2e/npm_link_package/pkg/BUILD.bazel create mode 100644 e2e/npm_link_package/pkg/index.js create mode 100644 e2e/npm_link_package/pkg/package.json diff --git a/e2e/npm_link_package-esm/BUILD.bazel b/e2e/npm_link_package-esm/BUILD.bazel index 70716e867..e555fd594 100644 --- a/e2e/npm_link_package-esm/BUILD.bazel +++ b/e2e/npm_link_package-esm/BUILD.bazel @@ -1,4 +1,6 @@ +load("@aspect_bazel_lib//lib:output_files.bzl", "output_files") load("@aspect_rules_js//npm:defs.bzl", "npm_link_package") +load("@bazel_skylib//rules:build_test.bzl", "build_test") load("@foo//:@aspect-test/a/package_json.bzl", aspect_test_a_bin = "bin") load("@npm//:defs.bzl", "npm_link_all_packages") @@ -6,14 +8,44 @@ npm_link_all_packages(name = "node_modules") npm_link_package( name = "node_modules/@e2e/lib", - src = "//lib", + src = "//lib:lib_pkg", + package = "@e2e/lib", +) + +npm_link_package( + name = "node_modules/@e2e/pkg", + src = "//pkg:lib_pkg", ) npm_link_package( name = "node_modules/@e2e/wrapper-lib", - src = "//wrapper-lib", + src = "//wrapper-lib:wrapper-lib_pkg", ) aspect_test_a_bin.bin_a_test( name = "aspect_test_a_bin_test", ) + +output_files( + name = "e2e/lib-package_store_entry", + paths = [ + "node_modules/.aspect_rules_js/@e2e+lib@0.0.0/node_modules/@e2e/lib", + ], + target = ":node_modules/@e2e/lib", +) + +output_files( + name = "e2e/pkg-package_store_entry", + paths = [ + "node_modules/.aspect_rules_js/@e2e+pkg@0.0.0/node_modules/@e2e/pkg", + ], + target = ":node_modules/@e2e/pkg", +) + +build_test( + name = "package_store_targets_test", + targets = [ + ":e2e/lib-package_store_entry", + ":e2e/pkg-package_store_entry", + ], +) diff --git a/e2e/npm_link_package-esm/WORKSPACE b/e2e/npm_link_package-esm/WORKSPACE index 1bd1792c1..1f0debd8c 100644 --- a/e2e/npm_link_package-esm/WORKSPACE +++ b/e2e/npm_link_package-esm/WORKSPACE @@ -9,7 +9,7 @@ rules_js_dependencies() load("@aspect_rules_js//js:toolchains.bzl", "rules_js_register_toolchains") -rules_js_register_toolchains(node_version = "16.9.0") +rules_js_register_toolchains(node_version = "16.14.2") load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock") @@ -27,6 +27,7 @@ npm_translate_lock( lifecycle_hooks_execution_requirements = { "sharp": ["requires-network"], }, + npm_package_target_name = "{dirname}_pkg", npmrc = "//:.npmrc", pnpm_lock = "//:pnpm-lock.yaml", verify_node_modules_ignored = "//:.bazelignore", diff --git a/e2e/npm_link_package-esm/lib/BUILD.bazel b/e2e/npm_link_package-esm/lib/BUILD.bazel index 817f11a0d..09d83fd84 100644 --- a/e2e/npm_link_package-esm/lib/BUILD.bazel +++ b/e2e/npm_link_package-esm/lib/BUILD.bazel @@ -1,16 +1,15 @@ -load("@aspect_rules_js//npm:defs.bzl", "npm_package") +load("@aspect_rules_js//js:defs.bzl", "js_library") -npm_package( - name = "lib", +js_library( + name = "lib_pkg", srcs = [ "index.mjs", "package.json", ], - data = [ + visibility = ["//visibility:public"], + deps = [ # uvu is a runtime dependency of this package and should be linked into its direct dependencies # by the downstream npm_link_package "//:node_modules/uvu", ], - package = "@e2e/lib", - visibility = ["//visibility:public"], ) diff --git a/e2e/npm_link_package-esm/lib/index.mjs b/e2e/npm_link_package-esm/lib/index.mjs index b1f3f5703..ed19a11f9 100644 --- a/e2e/npm_link_package-esm/lib/index.mjs +++ b/e2e/npm_link_package-esm/lib/index.mjs @@ -1,4 +1,4 @@ -import packageJson from './package.json' +import packageJson from './package.json' assert { type: 'json' } import * as assert from 'uvu/assert' assert.is(2 + 2, 4) export const id = () => diff --git a/e2e/npm_link_package-esm/pkg/BUILD.bazel b/e2e/npm_link_package-esm/pkg/BUILD.bazel new file mode 100644 index 000000000..98e1dca4e --- /dev/null +++ b/e2e/npm_link_package-esm/pkg/BUILD.bazel @@ -0,0 +1,18 @@ +load("@aspect_rules_js//npm:defs.bzl", "npm_package") + +npm_package( + name = "lib_pkg", + srcs = [ + "index.mjs", + "package.json", + ], + data = [ + # A locally linked package as a runtime dependency + "//:node_modules/@e2e/lib", + # uvu is a runtime dependency of this package and should be linked into its direct dependencies + # by the downstream npm_link_package + "//:node_modules/uvu", + ], + package = "@e2e/pkg", + visibility = ["//visibility:public"], +) diff --git a/e2e/npm_link_package-esm/pkg/index.mjs b/e2e/npm_link_package-esm/pkg/index.mjs new file mode 100644 index 000000000..fc6bd6875 --- /dev/null +++ b/e2e/npm_link_package-esm/pkg/index.mjs @@ -0,0 +1,8 @@ +import packageJson from './package.json' assert { type: 'json' } +import * as assert from 'uvu/assert' +import * as lib from '@e2e/lib' +assert.is(2 + 2, 4) +export const id = () => + `${packageJson.name}@${ + packageJson.version ? packageJson.version : '0.0.0' + }` + lib.id() diff --git a/e2e/npm_link_package-esm/pkg/package.json b/e2e/npm_link_package-esm/pkg/package.json new file mode 100644 index 000000000..8ec2a9a30 --- /dev/null +++ b/e2e/npm_link_package-esm/pkg/package.json @@ -0,0 +1,10 @@ +{ + "name": "@e2e/pkg", + "private": true, + "type": "module", + "exports": { + ".": { + "import": "./index.mjs" + } + } +} diff --git a/e2e/npm_link_package-esm/src/BUILD.bazel b/e2e/npm_link_package-esm/src/BUILD.bazel index bd75425c3..8c5ee80c7 100644 --- a/e2e/npm_link_package-esm/src/BUILD.bazel +++ b/e2e/npm_link_package-esm/src/BUILD.bazel @@ -8,6 +8,7 @@ js_binary( "//:node_modules/@aspect-test/b", "//:node_modules/@aspect-test/c", "//:node_modules/@e2e/lib", + "//:node_modules/@e2e/pkg", "//:node_modules/@e2e/wrapper-lib", "//:node_modules/sharp", "@foo//:node_modules/@aspect-test/a", @@ -26,6 +27,7 @@ js_test( "//:node_modules/@aspect-test/b", "//:node_modules/@aspect-test/c", "//:node_modules/@e2e/lib", + "//:node_modules/@e2e/pkg", "//:node_modules/@e2e/wrapper-lib", "//:node_modules/sharp", "@foo//:node_modules/@aspect-test/a", diff --git a/e2e/npm_link_package-esm/src/main.mjs b/e2e/npm_link_package-esm/src/main.mjs index 0aca187d0..1014e9c3a 100644 --- a/e2e/npm_link_package-esm/src/main.mjs +++ b/e2e/npm_link_package-esm/src/main.mjs @@ -15,11 +15,15 @@ console.log(c.id()) import * as fp from '@e2e/lib' console.log('--@e2e/lib--') console.log(fp.id()) +import * as fpp from '@e2e/pkg' +console.log('--@e2e/pkg--') +console.log(fpp.id()) import * as wrapper from '@e2e/wrapper-lib' console.log('--@e2e/wrapper-lib--') console.log(wrapper.id()) console.log(wrapper.libId()) console.log(wrapper.subdirId()) +console.log(wrapper.pkgId()) import rulesFooA from '../../foo/node_modules/@aspect-test/a/index.js' console.log('--rulesFooA--') console.log(rulesFooA.id()) diff --git a/e2e/npm_link_package-esm/wrapper-lib/BUILD.bazel b/e2e/npm_link_package-esm/wrapper-lib/BUILD.bazel index e34390eb8..9a05b9152 100644 --- a/e2e/npm_link_package-esm/wrapper-lib/BUILD.bazel +++ b/e2e/npm_link_package-esm/wrapper-lib/BUILD.bazel @@ -7,10 +7,14 @@ js_library( name = "js", srcs = [ "index.mjs", + # NOTE: .mjs does not support index files unless it is alongside a package.json + # containing an `"exports": {".": "index.mjs"}`. + # See: https://nodejs.org/api/packages.html#exports "package.json", ], data = [ - "//lib", + "//lib:lib_pkg", + "//pkg:lib_pkg", ], visibility = ["//visibility:private"], deps = [ @@ -19,7 +23,7 @@ js_library( ) npm_package( - name = "wrapper-lib", + name = "wrapper-lib_pkg", srcs = [":js"], package = "@e2e/wrapper-lib", visibility = ["//visibility:public"], diff --git a/e2e/npm_link_package-esm/wrapper-lib/index.mjs b/e2e/npm_link_package-esm/wrapper-lib/index.mjs index 2d7f31ae9..49c75fc26 100644 --- a/e2e/npm_link_package-esm/wrapper-lib/index.mjs +++ b/e2e/npm_link_package-esm/wrapper-lib/index.mjs @@ -4,3 +4,4 @@ export const id = () => 'wrapper-lib' // See: https://nodejs.org/api/packages.html#exports export { id as subdirId } from './subdir/index.mjs' export { id as libId } from '@e2e/lib' +export { id as pkgId } from '@e2e/pkg' diff --git a/e2e/npm_link_package-esm/wrapper-lib/subdir/BUILD.bazel b/e2e/npm_link_package-esm/wrapper-lib/subdir/BUILD.bazel index 6eac1f2c6..a5fed0a79 100644 --- a/e2e/npm_link_package-esm/wrapper-lib/subdir/BUILD.bazel +++ b/e2e/npm_link_package-esm/wrapper-lib/subdir/BUILD.bazel @@ -5,7 +5,7 @@ js_library( name = "subdir", srcs = ["index.mjs"], data = [ - "//lib", + "//lib:lib_pkg", ], visibility = ["//visibility:public"], ) diff --git a/e2e/npm_link_package-rerooted/.bazelignore b/e2e/npm_link_package-rerooted/.bazelignore new file mode 100644 index 000000000..379204857 --- /dev/null +++ b/e2e/npm_link_package-rerooted/.bazelignore @@ -0,0 +1 @@ +root/node_modules/ diff --git a/e2e/npm_link_package-rerooted/.bazeliskrc b/e2e/npm_link_package-rerooted/.bazeliskrc new file mode 120000 index 000000000..0fbe20ff6 --- /dev/null +++ b/e2e/npm_link_package-rerooted/.bazeliskrc @@ -0,0 +1 @@ +../../.bazeliskrc \ No newline at end of file diff --git a/e2e/npm_link_package-rerooted/.bazelrc b/e2e/npm_link_package-rerooted/.bazelrc new file mode 100644 index 000000000..413c99502 --- /dev/null +++ b/e2e/npm_link_package-rerooted/.bazelrc @@ -0,0 +1,15 @@ +# Import Aspect bazelrc presets +try-import %workspace%/../../.aspect/bazelrc/bazel7.bazelrc +import %workspace%/../../.aspect/bazelrc/convenience.bazelrc +import %workspace%/../../.aspect/bazelrc/correctness.bazelrc +import %workspace%/../../.aspect/bazelrc/debug.bazelrc +import %workspace%/../../.aspect/bazelrc/javascript.bazelrc +import %workspace%/../../.aspect/bazelrc/performance.bazelrc + +### YOUR PROJECT SPECIFIC OPTIONS GO HERE ### + +# Load any settings & overrides specific to the current user from `.aspect/bazelrc/user.bazelrc`. +# This file should appear in `.gitignore` so that settings are not shared with team members. This +# should be last statement in this config so the user configuration is able to overwrite flags from +# this file. See https://bazel.build/configure/best-practices#bazelrc-file. +try-import %workspace%/../../.aspect/bazelrc/user.bazelrc diff --git a/e2e/npm_link_package-rerooted/.bazelversion b/e2e/npm_link_package-rerooted/.bazelversion new file mode 120000 index 000000000..96cf94962 --- /dev/null +++ b/e2e/npm_link_package-rerooted/.bazelversion @@ -0,0 +1 @@ +../../.bazelversion \ No newline at end of file diff --git a/e2e/npm_link_package-rerooted/.npmrc b/e2e/npm_link_package-rerooted/.npmrc new file mode 100644 index 000000000..5de6efae1 --- /dev/null +++ b/e2e/npm_link_package-rerooted/.npmrc @@ -0,0 +1,4 @@ +# Disabling pnpm [hoisting](https://pnpm.io/npmrc#hoist) by setting `hoist=false` is recommended on +# projects using rules_js so that pnpm outside of Bazel lays out a node_modules tree similar to what +# rules_js lays out under Bazel (without a hidden node_modules/.pnpm/node_modules) +hoist=false diff --git a/e2e/npm_link_package-rerooted/BUILD.bazel b/e2e/npm_link_package-rerooted/BUILD.bazel new file mode 100644 index 000000000..e69de29bb diff --git a/e2e/npm_link_package-rerooted/WORKSPACE b/e2e/npm_link_package-rerooted/WORKSPACE new file mode 100644 index 000000000..0eef92bb3 --- /dev/null +++ b/e2e/npm_link_package-rerooted/WORKSPACE @@ -0,0 +1,51 @@ +local_repository( + name = "aspect_rules_js", + path = "../..", +) + +load("@aspect_rules_js//js:repositories.bzl", "rules_js_dependencies") + +rules_js_dependencies() + +load("@aspect_rules_js//js:toolchains.bzl", "rules_js_register_toolchains") + +rules_js_register_toolchains(node_version = "16.14.2") + +load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock") + +npm_translate_lock( + name = "npm", + lifecycle_hooks_envs = { + "*": [ + "aspect_test_id=testc", + "BUILD_VERSION=1", + ], + # Without APPDATA environment variable, sharp install will fail because of the binary can not + # be copied to ~/.npm folder which is readonly for bazel. + "sharp": ["APPDATA=."], + }, + lifecycle_hooks_execution_requirements = { + "sharp": ["requires-network"], + }, + npm_package_target_name = "{dirname}_pkg", + npmrc = "//:.npmrc", + pnpm_lock = "//root:pnpm-lock.yaml", + verify_node_modules_ignored = "//:.bazelignore", +) + +load("@npm//:repositories.bzl", "npm_repositories") + +npm_repositories() + +local_repository( + name = "rules_foo", + path = "../rules_foo", +) + +load("@rules_foo//foo:repositories.bzl", "foo_repositories") + +foo_repositories() + +load("@foo//:npm_repositories.bzl", foo_npm_repositories = "npm_repositories") + +foo_npm_repositories() diff --git a/e2e/npm_link_package-rerooted/root/BUILD.bazel b/e2e/npm_link_package-rerooted/root/BUILD.bazel new file mode 100644 index 000000000..6261e5086 --- /dev/null +++ b/e2e/npm_link_package-rerooted/root/BUILD.bazel @@ -0,0 +1,54 @@ +load("@aspect_bazel_lib//lib:output_files.bzl", "output_files") +load("@aspect_rules_js//npm:defs.bzl", "npm_link_package") +load("@bazel_skylib//rules:build_test.bzl", "build_test") +load("@foo//:@aspect-test/a/package_json.bzl", aspect_test_a_bin = "bin") +load("@npm//:defs.bzl", "npm_link_all_packages") + +npm_link_all_packages(name = "node_modules") + +npm_link_package( + name = "node_modules/@e2e/lib", + src = "//root/lib:lib_pkg", + package = "@e2e/lib", + root_package = "root", +) + +npm_link_package( + name = "node_modules/@e2e/pkg", + src = "//root/pkg:lib_pkg", + root_package = "root", +) + +npm_link_package( + name = "node_modules/@e2e/wrapper-lib", + src = "//root/wrapper-lib:wrapper-lib_pkg", + root_package = "root", +) + +aspect_test_a_bin.bin_a_test( + name = "aspect_test_a_bin_test", +) + +output_files( + name = "e2e/lib-package_store_entry", + paths = [ + "root/node_modules/.aspect_rules_js/@e2e+lib@0.0.0/node_modules/@e2e/lib", + ], + target = ":node_modules/@e2e/lib", +) + +output_files( + name = "e2e/pkg-package_store_entry", + paths = [ + "root/node_modules/.aspect_rules_js/@e2e+pkg@0.0.0/node_modules/@e2e/pkg", + ], + target = ":node_modules/@e2e/pkg", +) + +build_test( + name = "package_store_targets_test", + targets = [ + ":e2e/lib-package_store_entry", + ":e2e/pkg-package_store_entry", + ], +) diff --git a/e2e/npm_link_package-rerooted/root/lib/BUILD.bazel b/e2e/npm_link_package-rerooted/root/lib/BUILD.bazel new file mode 100644 index 000000000..c2233cec9 --- /dev/null +++ b/e2e/npm_link_package-rerooted/root/lib/BUILD.bazel @@ -0,0 +1,15 @@ +load("@aspect_rules_js//js:defs.bzl", "js_library") + +js_library( + name = "lib_pkg", + srcs = [ + "index.js", + "package.json", + ], + visibility = ["//visibility:public"], + deps = [ + # uvu is a runtime dependency of this package and should be linked into its direct dependencies + # by the downstream npm_link_package + "//root:node_modules/uvu", + ], +) diff --git a/e2e/npm_link_package-rerooted/root/lib/index.js b/e2e/npm_link_package-rerooted/root/lib/index.js new file mode 100644 index 000000000..b4ea6934d --- /dev/null +++ b/e2e/npm_link_package-rerooted/root/lib/index.js @@ -0,0 +1,9 @@ +const packageJson = require('./package.json') +const assert = require('uvu/assert') +assert.is(2 + 2, 4) +module.exports = { + id: () => + `${packageJson.name}@${ + packageJson.version ? packageJson.version : '0.0.0' + }`, +} diff --git a/e2e/npm_link_package-rerooted/root/lib/package.json b/e2e/npm_link_package-rerooted/root/lib/package.json new file mode 100644 index 000000000..421f59696 --- /dev/null +++ b/e2e/npm_link_package-rerooted/root/lib/package.json @@ -0,0 +1,4 @@ +{ + "name": "@e2e/lib", + "private": true +} diff --git a/e2e/npm_link_package-rerooted/root/package.json b/e2e/npm_link_package-rerooted/root/package.json new file mode 100644 index 000000000..ae854800d --- /dev/null +++ b/e2e/npm_link_package-rerooted/root/package.json @@ -0,0 +1,14 @@ +{ + "name": "simple", + "dependencies": { + "@aspect-test/a": "5.0.2", + "sharp": "0.32.1", + "uvu": "0.5.6" + }, + "devDependencies": { + "@aspect-test/b": "5.0.2" + }, + "optionalDependencies": { + "@aspect-test/c": "2.0.2" + } +} diff --git a/e2e/npm_link_package-rerooted/root/pkg/BUILD.bazel b/e2e/npm_link_package-rerooted/root/pkg/BUILD.bazel new file mode 100644 index 000000000..8a42b29d0 --- /dev/null +++ b/e2e/npm_link_package-rerooted/root/pkg/BUILD.bazel @@ -0,0 +1,18 @@ +load("@aspect_rules_js//npm:defs.bzl", "npm_package") + +npm_package( + name = "lib_pkg", + srcs = [ + "index.js", + "package.json", + ], + data = [ + # A locally linked package as a runtime dependency + "//root:node_modules/@e2e/lib", + # uvu is a runtime dependency of this package and should be linked into its direct dependencies + # by the downstream npm_link_package + "//root:node_modules/uvu", + ], + package = "@e2e/pkg", + visibility = ["//visibility:public"], +) diff --git a/e2e/npm_link_package-rerooted/root/pkg/index.js b/e2e/npm_link_package-rerooted/root/pkg/index.js new file mode 100644 index 000000000..c734b7976 --- /dev/null +++ b/e2e/npm_link_package-rerooted/root/pkg/index.js @@ -0,0 +1,10 @@ +const packageJson = require('./package.json') +const assert = require('uvu/assert') +const lib = require('@e2e/lib') +assert.is(2 + 2, 4) +module.exports = { + id: () => + `${packageJson.name}@${ + packageJson.version ? packageJson.version : '0.0.0' + }` + lib.id(), +} diff --git a/e2e/npm_link_package-rerooted/root/pkg/package.json b/e2e/npm_link_package-rerooted/root/pkg/package.json new file mode 100644 index 000000000..cce489215 --- /dev/null +++ b/e2e/npm_link_package-rerooted/root/pkg/package.json @@ -0,0 +1,4 @@ +{ + "name": "@e2e/pkg", + "private": true +} diff --git a/e2e/npm_link_package-rerooted/root/pnpm-lock.yaml b/e2e/npm_link_package-rerooted/root/pnpm-lock.yaml new file mode 100644 index 000000000..a9ba5c894 --- /dev/null +++ b/e2e/npm_link_package-rerooted/root/pnpm-lock.yaml @@ -0,0 +1,369 @@ +lockfileVersion: 5.4 + +importers: + + .: + specifiers: + '@aspect-test/a': 5.0.2 + '@aspect-test/b': 5.0.2 + '@aspect-test/c': 2.0.2 + sharp: 0.32.1 + uvu: 0.5.6 + dependencies: + '@aspect-test/a': 5.0.2 + sharp: 0.32.1 + uvu: 0.5.6 + optionalDependencies: + '@aspect-test/c': 2.0.2 + devDependencies: + '@aspect-test/b': 5.0.2 + +packages: + + /@aspect-test/a/5.0.2: + resolution: {integrity: sha512-bURS+F0+tS2XPxUPbrqsTZxIre1U5ZglwzDqcOCrU7MbxuRrkO24hesgTMGJldCglwL/tiEGRlvdMndlPgRdNw==} + hasBin: true + dependencies: + '@aspect-test/b': 5.0.2 + '@aspect-test/c': 2.0.2 + '@aspect-test/d': 2.0.0_@aspect-test+c@2.0.2 + + /@aspect-test/b/5.0.2: + resolution: {integrity: sha512-I8wnJV5J0h8ui1O3K6XPq1qGHKopTl/OnvkSfor7uJ9yRCm2Qv6Tf2LsTgR2xzkgiwhA4iBwdYFwecwinF244w==} + hasBin: true + dependencies: + '@aspect-test/a': 5.0.2 + '@aspect-test/c': 2.0.2 + '@aspect-test/d': 2.0.0_@aspect-test+c@2.0.2 + + /@aspect-test/c/2.0.2: + resolution: {integrity: sha512-rMJmd3YBvY7y0jh+2m72TiAhe6dVKjMMNFFVOXFCbM233m7lsG4cq970H1C8rUsc3AcA5E/cEHlxSVffHlHD2Q==} + hasBin: true + requiresBuild: true + + /@aspect-test/d/2.0.0_@aspect-test+c@2.0.2: + resolution: {integrity: sha512-jndwr8pLUfn795uApTcXG/yZ5hV2At1aS/wo5BVLxqlVVgLoOETF/Dp4QOjMHE/SXkXFowz6Hao+WpmzVvAO0A==} + hasBin: true + peerDependencies: + '@aspect-test/c': x.x.x + dependencies: + '@aspect-test/c': 2.0.2 + + /base64-js/1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: false + + /bl/4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.1 + dev: false + + /buffer/5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: false + + /chownr/1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + dev: false + + /color-convert/2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + dev: false + + /color-name/1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: false + + /color-string/1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + dev: false + + /color/4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 + dev: false + + /decompress-response/6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + dependencies: + mimic-response: 3.1.0 + dev: false + + /deep-extend/0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + dev: false + + /dequal/2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + dev: false + + /detect-libc/2.0.1: + resolution: {integrity: sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==} + engines: {node: '>=8'} + dev: false + + /diff/5.1.0: + resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==} + engines: {node: '>=0.3.1'} + dev: false + + /end-of-stream/1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + dependencies: + once: 1.4.0 + dev: false + + /expand-template/2.0.3: + resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} + engines: {node: '>=6'} + dev: false + + /fs-constants/1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + dev: false + + /github-from-package/0.0.0: + resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} + dev: false + + /ieee754/1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: false + + /inherits/2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: false + + /ini/1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + dev: false + + /is-arrayish/0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + dev: false + + /kleur/4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + dev: false + + /lru-cache/6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + dev: false + + /mimic-response/3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + dev: false + + /minimist/1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + dev: false + + /mkdirp-classic/0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + dev: false + + /mri/1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + dev: false + + /napi-build-utils/1.0.2: + resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} + dev: false + + /node-abi/3.33.0: + resolution: {integrity: sha512-7GGVawqyHF4pfd0YFybhv/eM9JwTtPqx0mAanQ146O3FlSh3pA24zf9IRQTOsfTSqXTNzPSP5iagAJ94jjuVog==} + engines: {node: '>=10'} + dependencies: + semver: 7.5.1 + dev: false + + /node-addon-api/6.1.0: + resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} + dev: false + + /once/1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: false + + /prebuild-install/7.1.1: + resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==} + engines: {node: '>=10'} + hasBin: true + dependencies: + detect-libc: 2.0.1 + expand-template: 2.0.3 + github-from-package: 0.0.0 + minimist: 1.2.8 + mkdirp-classic: 0.5.3 + napi-build-utils: 1.0.2 + node-abi: 3.33.0 + pump: 3.0.0 + rc: 1.2.8 + simple-get: 4.0.1 + tar-fs: 2.1.1 + tunnel-agent: 0.6.0 + dev: false + + /pump/3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: false + + /rc/1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + dev: false + + /readable-stream/3.6.1: + resolution: {integrity: sha512-+rQmrWMYGA90yenhTYsLWAsLsqVC8osOw6PKE1HDYiO0gdPeKe/xDHNzIAIn4C91YQ6oenEhfYqqc1883qHbjQ==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: false + + /sade/1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + dependencies: + mri: 1.2.0 + dev: false + + /safe-buffer/5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: false + + /semver/7.5.1: + resolution: {integrity: sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: false + + /sharp/0.32.1: + resolution: {integrity: sha512-kQTFtj7ldpUqSe8kDxoGLZc1rnMFU0AO2pqbX6pLy3b7Oj8ivJIdoKNwxHVQG2HN6XpHPJqCSM2nsma2gOXvOg==} + engines: {node: '>=14.15.0'} + requiresBuild: true + dependencies: + color: 4.2.3 + detect-libc: 2.0.1 + node-addon-api: 6.1.0 + prebuild-install: 7.1.1 + semver: 7.5.1 + simple-get: 4.0.1 + tar-fs: 2.1.1 + tunnel-agent: 0.6.0 + dev: false + + /simple-concat/1.0.1: + resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} + dev: false + + /simple-get/4.0.1: + resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} + dependencies: + decompress-response: 6.0.0 + once: 1.4.0 + simple-concat: 1.0.1 + dev: false + + /simple-swizzle/0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + dependencies: + is-arrayish: 0.3.2 + dev: false + + /string_decoder/1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /strip-json-comments/2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + dev: false + + /tar-fs/2.1.1: + resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.0 + tar-stream: 2.2.0 + dev: false + + /tar-stream/2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.1 + dev: false + + /tunnel-agent/0.6.0: + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /util-deprecate/1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: false + + /uvu/0.5.6: + resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} + engines: {node: '>=8'} + hasBin: true + dependencies: + dequal: 2.0.3 + diff: 5.1.0 + kleur: 4.1.5 + sade: 1.8.1 + dev: false + + /wrappy/1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: false + + /yallist/4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: false diff --git a/e2e/npm_link_package-rerooted/root/pnpm-workspace.yaml b/e2e/npm_link_package-rerooted/root/pnpm-workspace.yaml new file mode 100644 index 000000000..2cce0eb74 --- /dev/null +++ b/e2e/npm_link_package-rerooted/root/pnpm-workspace.yaml @@ -0,0 +1,2 @@ +packages: + - '.' diff --git a/e2e/npm_link_package-rerooted/root/src/BUILD.bazel b/e2e/npm_link_package-rerooted/root/src/BUILD.bazel new file mode 100644 index 000000000..b5cb0edf4 --- /dev/null +++ b/e2e/npm_link_package-rerooted/root/src/BUILD.bazel @@ -0,0 +1,34 @@ +load("@aspect_rules_js//js:defs.bzl", "js_binary", "js_test") + +js_binary( + name = "main", + args = ["foo"], + data = [ + "//root:node_modules/@aspect-test/a", + "//root:node_modules/@aspect-test/b", + "//root:node_modules/@aspect-test/c", + "//root:node_modules/@e2e/lib", + "//root:node_modules/@e2e/pkg", + "//root:node_modules/@e2e/wrapper-lib", + "//root:node_modules/sharp", + "@foo//:node_modules/@aspect-test/a", + ], + entry_point = "main.js", +) + +js_test( + name = "test", + args = ["foo"], + data = [ + "//root:node_modules/@aspect-test/a", + "//root:node_modules/@aspect-test/b", + "//root:node_modules/@aspect-test/c", + "//root:node_modules/@e2e/lib", + "//root:node_modules/@e2e/pkg", + "//root:node_modules/@e2e/wrapper-lib", + "//root:node_modules/sharp", + "@foo//:node_modules/@aspect-test/a", + ], + entry_point = "main.js", + log_level = "info", +) diff --git a/e2e/npm_link_package-rerooted/root/src/main.js b/e2e/npm_link_package-rerooted/root/src/main.js new file mode 100644 index 000000000..6aae4a77e --- /dev/null +++ b/e2e/npm_link_package-rerooted/root/src/main.js @@ -0,0 +1,45 @@ +console.log(process.argv) +const a = require('@aspect-test/a') +console.log('--a--') +console.log(a.id()) +console.log(a.idB()) +console.log(a.idC()) +const b = require('@aspect-test/b') +console.log('--b--') +console.log(b.id()) +console.log(b.idA()) +console.log(b.idC()) +const c = require('@aspect-test/c') +console.log('--c--') +console.log(c.id()) +const fp = require('@e2e/lib') +console.log('--@e2e/lib--') +console.log(fp.id()) +const fpp = require('@e2e/pkg') +console.log('--@e2e/pkg--') +console.log(fpp.id()) +const wrapper = require('@e2e/wrapper-lib') +console.log('--@e2e/wrapper-lib--') +console.log(wrapper.id()) +console.log(wrapper.libId()) +console.log(wrapper.subdirId()) +console.log(wrapper.pkgId()) +const rulesFooA = require('../../../foo/node_modules/@aspect-test/a') +console.log('--rulesFooA--') +console.log(rulesFooA.id()) +console.log(rulesFooA.idB()) +console.log(rulesFooA.idC()) +const sharp = require('sharp') +const roundedCorners = Buffer.from( + '' +) + +const roundedCornerResizer = sharp() + .resize(200, 200) + .composite([ + { + input: roundedCorners, + blend: 'dest-in', + }, + ]) + .png() diff --git a/e2e/npm_link_package-rerooted/root/wrapper-lib/BUILD.bazel b/e2e/npm_link_package-rerooted/root/wrapper-lib/BUILD.bazel new file mode 100644 index 000000000..31730a338 --- /dev/null +++ b/e2e/npm_link_package-rerooted/root/wrapper-lib/BUILD.bazel @@ -0,0 +1,24 @@ +load("@aspect_rules_js//js:defs.bzl", "js_library") +load("@aspect_rules_js//npm:defs.bzl", "npm_package") + +# A named package depending on another named package and a js_library() + +js_library( + name = "js", + srcs = ["index.js"], + data = [ + "//root/lib:lib_pkg", + "//root/pkg:lib_pkg", + ], + visibility = ["//visibility:private"], + deps = [ + "//root/wrapper-lib/subdir", + ], +) + +npm_package( + name = "wrapper-lib_pkg", + srcs = [":js"], + package = "@e2e/wrapper-lib", + visibility = ["//visibility:public"], +) diff --git a/e2e/npm_link_package-rerooted/root/wrapper-lib/index.js b/e2e/npm_link_package-rerooted/root/wrapper-lib/index.js new file mode 100644 index 000000000..616d3ba4d --- /dev/null +++ b/e2e/npm_link_package-rerooted/root/wrapper-lib/index.js @@ -0,0 +1,10 @@ +const subdir = require('./subdir') +const lib = require('@e2e/lib') +const pkg = require('@e2e/pkg') + +module.exports = { + id: () => 'wrapper-lib', + subdirId: () => subdir.id(), + libId: () => lib.id(), + pkgId: () => pkg.id(), +} diff --git a/e2e/npm_link_package-rerooted/root/wrapper-lib/subdir/BUILD.bazel b/e2e/npm_link_package-rerooted/root/wrapper-lib/subdir/BUILD.bazel new file mode 100644 index 000000000..3a7ad3bcc --- /dev/null +++ b/e2e/npm_link_package-rerooted/root/wrapper-lib/subdir/BUILD.bazel @@ -0,0 +1,11 @@ +load("@aspect_rules_js//js:defs.bzl", "js_library") + +# A basic single-file no dependencies js_library() +js_library( + name = "subdir", + srcs = ["index.js"], + data = [ + "//root/lib:lib_pkg", + ], + visibility = ["//visibility:public"], +) diff --git a/e2e/npm_link_package-rerooted/root/wrapper-lib/subdir/index.js b/e2e/npm_link_package-rerooted/root/wrapper-lib/subdir/index.js new file mode 100644 index 000000000..c1b0b9932 --- /dev/null +++ b/e2e/npm_link_package-rerooted/root/wrapper-lib/subdir/index.js @@ -0,0 +1,3 @@ +module.exports = { + id: () => 'wrapper-lib/subdir@0.0.0', +} diff --git a/e2e/npm_link_package/BUILD.bazel b/e2e/npm_link_package/BUILD.bazel index 817a958d6..e555fd594 100644 --- a/e2e/npm_link_package/BUILD.bazel +++ b/e2e/npm_link_package/BUILD.bazel @@ -1,4 +1,6 @@ +load("@aspect_bazel_lib//lib:output_files.bzl", "output_files") load("@aspect_rules_js//npm:defs.bzl", "npm_link_package") +load("@bazel_skylib//rules:build_test.bzl", "build_test") load("@foo//:@aspect-test/a/package_json.bzl", aspect_test_a_bin = "bin") load("@npm//:defs.bzl", "npm_link_all_packages") @@ -7,6 +9,12 @@ npm_link_all_packages(name = "node_modules") npm_link_package( name = "node_modules/@e2e/lib", src = "//lib:lib_pkg", + package = "@e2e/lib", +) + +npm_link_package( + name = "node_modules/@e2e/pkg", + src = "//pkg:lib_pkg", ) npm_link_package( @@ -17,3 +25,27 @@ npm_link_package( aspect_test_a_bin.bin_a_test( name = "aspect_test_a_bin_test", ) + +output_files( + name = "e2e/lib-package_store_entry", + paths = [ + "node_modules/.aspect_rules_js/@e2e+lib@0.0.0/node_modules/@e2e/lib", + ], + target = ":node_modules/@e2e/lib", +) + +output_files( + name = "e2e/pkg-package_store_entry", + paths = [ + "node_modules/.aspect_rules_js/@e2e+pkg@0.0.0/node_modules/@e2e/pkg", + ], + target = ":node_modules/@e2e/pkg", +) + +build_test( + name = "package_store_targets_test", + targets = [ + ":e2e/lib-package_store_entry", + ":e2e/pkg-package_store_entry", + ], +) diff --git a/e2e/npm_link_package/lib/BUILD.bazel b/e2e/npm_link_package/lib/BUILD.bazel index b30f891cc..51bb51361 100644 --- a/e2e/npm_link_package/lib/BUILD.bazel +++ b/e2e/npm_link_package/lib/BUILD.bazel @@ -1,16 +1,15 @@ -load("@aspect_rules_js//npm:defs.bzl", "npm_package") +load("@aspect_rules_js//js:defs.bzl", "js_library") -npm_package( +js_library( name = "lib_pkg", srcs = [ "index.js", "package.json", ], - data = [ + visibility = ["//visibility:public"], + deps = [ # uvu is a runtime dependency of this package and should be linked into its direct dependencies # by the downstream npm_link_package "//:node_modules/uvu", ], - package = "@e2e/lib", - visibility = ["//visibility:public"], ) diff --git a/e2e/npm_link_package/pkg/BUILD.bazel b/e2e/npm_link_package/pkg/BUILD.bazel new file mode 100644 index 000000000..ebbdd7498 --- /dev/null +++ b/e2e/npm_link_package/pkg/BUILD.bazel @@ -0,0 +1,18 @@ +load("@aspect_rules_js//npm:defs.bzl", "npm_package") + +npm_package( + name = "lib_pkg", + srcs = [ + "index.js", + "package.json", + ], + data = [ + # A locally linked package as a runtime dependency + "//:node_modules/@e2e/lib", + # uvu is a runtime dependency of this package and should be linked into its direct dependencies + # by the downstream npm_link_package + "//:node_modules/uvu", + ], + package = "@e2e/pkg", + visibility = ["//visibility:public"], +) diff --git a/e2e/npm_link_package/pkg/index.js b/e2e/npm_link_package/pkg/index.js new file mode 100644 index 000000000..c734b7976 --- /dev/null +++ b/e2e/npm_link_package/pkg/index.js @@ -0,0 +1,10 @@ +const packageJson = require('./package.json') +const assert = require('uvu/assert') +const lib = require('@e2e/lib') +assert.is(2 + 2, 4) +module.exports = { + id: () => + `${packageJson.name}@${ + packageJson.version ? packageJson.version : '0.0.0' + }` + lib.id(), +} diff --git a/e2e/npm_link_package/pkg/package.json b/e2e/npm_link_package/pkg/package.json new file mode 100644 index 000000000..cce489215 --- /dev/null +++ b/e2e/npm_link_package/pkg/package.json @@ -0,0 +1,4 @@ +{ + "name": "@e2e/pkg", + "private": true +} diff --git a/e2e/npm_link_package/src/BUILD.bazel b/e2e/npm_link_package/src/BUILD.bazel index cb6afadac..94332ff2e 100644 --- a/e2e/npm_link_package/src/BUILD.bazel +++ b/e2e/npm_link_package/src/BUILD.bazel @@ -8,6 +8,7 @@ js_binary( "//:node_modules/@aspect-test/b", "//:node_modules/@aspect-test/c", "//:node_modules/@e2e/lib", + "//:node_modules/@e2e/pkg", "//:node_modules/@e2e/wrapper-lib", "//:node_modules/sharp", "@foo//:node_modules/@aspect-test/a", @@ -23,6 +24,7 @@ js_test( "//:node_modules/@aspect-test/b", "//:node_modules/@aspect-test/c", "//:node_modules/@e2e/lib", + "//:node_modules/@e2e/pkg", "//:node_modules/@e2e/wrapper-lib", "//:node_modules/sharp", "@foo//:node_modules/@aspect-test/a", diff --git a/e2e/npm_link_package/src/main.js b/e2e/npm_link_package/src/main.js index 0cd45c0a7..395d9467d 100644 --- a/e2e/npm_link_package/src/main.js +++ b/e2e/npm_link_package/src/main.js @@ -15,11 +15,15 @@ console.log(c.id()) const fp = require('@e2e/lib') console.log('--@e2e/lib--') console.log(fp.id()) +const fpp = require('@e2e/pkg') +console.log('--@e2e/pkg--') +console.log(fpp.id()) const wrapper = require('@e2e/wrapper-lib') console.log('--@e2e/wrapper-lib--') console.log(wrapper.id()) console.log(wrapper.libId()) console.log(wrapper.subdirId()) +console.log(wrapper.pkgId()) const rulesFooA = require('../../foo/node_modules/@aspect-test/a') console.log('--rulesFooA--') console.log(rulesFooA.id()) diff --git a/e2e/npm_link_package/wrapper-lib/BUILD.bazel b/e2e/npm_link_package/wrapper-lib/BUILD.bazel index ba37749ad..7f333780c 100644 --- a/e2e/npm_link_package/wrapper-lib/BUILD.bazel +++ b/e2e/npm_link_package/wrapper-lib/BUILD.bazel @@ -8,6 +8,7 @@ js_library( srcs = ["index.js"], data = [ "//lib:lib_pkg", + "//pkg:lib_pkg", ], visibility = ["//visibility:private"], deps = [ diff --git a/e2e/npm_link_package/wrapper-lib/index.js b/e2e/npm_link_package/wrapper-lib/index.js index 0a37e9af8..616d3ba4d 100644 --- a/e2e/npm_link_package/wrapper-lib/index.js +++ b/e2e/npm_link_package/wrapper-lib/index.js @@ -1,8 +1,10 @@ const subdir = require('./subdir') const lib = require('@e2e/lib') +const pkg = require('@e2e/pkg') module.exports = { id: () => 'wrapper-lib', subdirId: () => subdir.id(), libId: () => lib.id(), + pkgId: () => pkg.id(), } diff --git a/npm/private/npm_package_store.bzl b/npm/private/npm_package_store.bzl index 8b3e2a508..a794c201b 100644 --- a/npm/private/npm_package_store.bzl +++ b/npm/private/npm_package_store.bzl @@ -292,10 +292,12 @@ deps of npm_package_store must be in the same package.""" % (ctx.label.package, jsinfo = ctx.attr.src[JsInfo] # Symlink to the directory of the target that created this JsInfo - if ctx.label.workspace_name: + if ctx.label.workspace_name and ctx.label.package: symlink_path = "external/{}/{}/{}".format(ctx.label.workspace_name, ctx.label.package, package_store_directory_path) + elif ctx.label.workspace_name: + symlink_path = "external/{}/{}".format(ctx.label.workspace_name, package_store_directory_path) else: - symlink_path = "{}/{}".format(ctx.label.package or ".", package_store_directory_path) + symlink_path = package_store_directory_path # The package JsInfo including all direct and transitive sources, store info etc. js_infos.append(jsinfo)