Skip to content

Commit

Permalink
fix(npm): npm_link_package() in subdirectory to js_library() package (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
jbedard authored Jul 26, 2024
1 parent 002b638 commit c949bd3
Show file tree
Hide file tree
Showing 45 changed files with 872 additions and 20 deletions.
36 changes: 34 additions & 2 deletions e2e/npm_link_package-esm/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -1,19 +1,51 @@
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 = "//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",
],
)
3 changes: 2 additions & 1 deletion e2e/npm_link_package-esm/WORKSPACE
Original file line number Diff line number Diff line change
Expand Up @@ -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")

Expand All @@ -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",
Expand Down
11 changes: 5 additions & 6 deletions e2e/npm_link_package-esm/lib/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -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"],
)
2 changes: 1 addition & 1 deletion e2e/npm_link_package-esm/lib/index.mjs
Original file line number Diff line number Diff line change
@@ -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 = () =>
Expand Down
18 changes: 18 additions & 0 deletions e2e/npm_link_package-esm/pkg/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -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"],
)
8 changes: 8 additions & 0 deletions e2e/npm_link_package-esm/pkg/index.mjs
Original file line number Diff line number Diff line change
@@ -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()
10 changes: 10 additions & 0 deletions e2e/npm_link_package-esm/pkg/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"name": "@e2e/pkg",
"private": true,
"type": "module",
"exports": {
".": {
"import": "./index.mjs"
}
}
}
2 changes: 2 additions & 0 deletions e2e/npm_link_package-esm/src/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand All @@ -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",
Expand Down
4 changes: 4 additions & 0 deletions e2e/npm_link_package-esm/src/main.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -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())
Expand Down
8 changes: 6 additions & 2 deletions e2e/npm_link_package-esm/wrapper-lib/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -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 = [
Expand All @@ -19,7 +23,7 @@ js_library(
)

npm_package(
name = "wrapper-lib",
name = "wrapper-lib_pkg",
srcs = [":js"],
package = "@e2e/wrapper-lib",
visibility = ["//visibility:public"],
Expand Down
1 change: 1 addition & 0 deletions e2e/npm_link_package-esm/wrapper-lib/index.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -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'
2 changes: 1 addition & 1 deletion e2e/npm_link_package-esm/wrapper-lib/subdir/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ js_library(
name = "subdir",
srcs = ["index.mjs"],
data = [
"//lib",
"//lib:lib_pkg",
],
visibility = ["//visibility:public"],
)
1 change: 1 addition & 0 deletions e2e/npm_link_package-rerooted/.bazelignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
root/node_modules/
1 change: 1 addition & 0 deletions e2e/npm_link_package-rerooted/.bazeliskrc
15 changes: 15 additions & 0 deletions e2e/npm_link_package-rerooted/.bazelrc
Original file line number Diff line number Diff line change
@@ -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
1 change: 1 addition & 0 deletions e2e/npm_link_package-rerooted/.bazelversion
4 changes: 4 additions & 0 deletions e2e/npm_link_package-rerooted/.npmrc
Original file line number Diff line number Diff line change
@@ -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
Empty file.
51 changes: 51 additions & 0 deletions e2e/npm_link_package-rerooted/WORKSPACE
Original file line number Diff line number Diff line change
@@ -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()
54 changes: 54 additions & 0 deletions e2e/npm_link_package-rerooted/root/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -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",
],
)
15 changes: 15 additions & 0 deletions e2e/npm_link_package-rerooted/root/lib/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -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",
],
)
9 changes: 9 additions & 0 deletions e2e/npm_link_package-rerooted/root/lib/index.js
Original file line number Diff line number Diff line change
@@ -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'
}`,
}
4 changes: 4 additions & 0 deletions e2e/npm_link_package-rerooted/root/lib/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"name": "@e2e/lib",
"private": true
}
14 changes: 14 additions & 0 deletions e2e/npm_link_package-rerooted/root/package.json
Original file line number Diff line number Diff line change
@@ -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"
}
}
Loading

0 comments on commit c949bd3

Please sign in to comment.