diff --git a/e2e/pnpm_lockfiles/.bazelignore b/e2e/pnpm_lockfiles/.bazelignore index c3059a4a0..37f70f9cb 100644 --- a/e2e/pnpm_lockfiles/.bazelignore +++ b/e2e/pnpm_lockfiles/.bazelignore @@ -1,6 +1,7 @@ node_modules/ cases/node_modules projects/a/node_modules +projects/a-types/node_modules projects/b/node_modules projects/c/node_modules projects/d/node_modules diff --git a/e2e/pnpm_lockfiles/lockfile-test.bzl b/e2e/pnpm_lockfiles/lockfile-test.bzl index 85d9be2ac..16c773066 100644 --- a/e2e/pnpm_lockfiles/lockfile-test.bzl +++ b/e2e/pnpm_lockfiles/lockfile-test.bzl @@ -33,17 +33,20 @@ WKSP_FILES = { "repositories.bzl": "@REPO_NAME//:repositories.bzl", } -def lockfile_test(name = None): +def lockfile_test(npm_link_all_packages, name = None): """ Tests for a lockfile and associated targets + files generated by rules_js. Args: name: the lockfile version name + npm_link_all_packages: the npm_link_all_packages function """ lock_version = name if name else native.package_name() lock_repo = "lock-%s" % lock_version + npm_link_all_packages(name = "node_modules") + # Copy each test to this lockfile dir for test in ["patched-dependencies-test.js", "aliases-test.js"]: copy_file( diff --git a/e2e/pnpm_lockfiles/projects/a-types/BUILD.bazel b/e2e/pnpm_lockfiles/projects/a-types/BUILD.bazel new file mode 100644 index 000000000..65d85d8a5 --- /dev/null +++ b/e2e/pnpm_lockfiles/projects/a-types/BUILD.bazel @@ -0,0 +1,10 @@ +load("@aspect_rules_js//js:defs.bzl", "js_library") + +js_library( + name = "pkg", + srcs = [ + "a.d.ts", + "package.json", + ], + visibility = ["//visibility:public"], +) diff --git a/e2e/pnpm_lockfiles/projects/a-types/a.d.ts b/e2e/pnpm_lockfiles/projects/a-types/a.d.ts new file mode 100644 index 000000000..e51367dee --- /dev/null +++ b/e2e/pnpm_lockfiles/projects/a-types/a.d.ts @@ -0,0 +1 @@ +export const A: number diff --git a/e2e/pnpm_lockfiles/projects/a-types/package.json b/e2e/pnpm_lockfiles/projects/a-types/package.json new file mode 100644 index 000000000..5c09fa8d4 --- /dev/null +++ b/e2e/pnpm_lockfiles/projects/a-types/package.json @@ -0,0 +1,7 @@ +{ + "name": "a-types", + "private": true, + "dependencies": { + "@types/node": "16.18.11" + } +} diff --git a/e2e/pnpm_lockfiles/projects/b/package.json b/e2e/pnpm_lockfiles/projects/b/package.json index da16dd8db..12b206152 100644 --- a/e2e/pnpm_lockfiles/projects/b/package.json +++ b/e2e/pnpm_lockfiles/projects/b/package.json @@ -3,5 +3,9 @@ "private": true, "dependencies": { "@scoped/a": "workspace:*" + }, + "devDependencies": { + "@types/node": "16.18.11", + "a-types": "workspace:*" } } diff --git a/e2e/pnpm_lockfiles/v54/BUILD.bazel b/e2e/pnpm_lockfiles/v54/BUILD.bazel index 647dcd96c..0d1fbac79 100644 --- a/e2e/pnpm_lockfiles/v54/BUILD.bazel +++ b/e2e/pnpm_lockfiles/v54/BUILD.bazel @@ -1,6 +1,4 @@ load("@lock-v54//:defs.bzl", "npm_link_all_packages") load("//:lockfile-test.bzl", "lockfile_test") -npm_link_all_packages() - -lockfile_test() +lockfile_test(npm_link_all_packages = npm_link_all_packages) diff --git a/e2e/pnpm_lockfiles/v54/pnpm-lock.yaml b/e2e/pnpm_lockfiles/v54/pnpm-lock.yaml index 184db34c0..7ac55692f 100644 --- a/e2e/pnpm_lockfiles/v54/pnpm-lock.yaml +++ b/e2e/pnpm_lockfiles/v54/pnpm-lock.yaml @@ -95,11 +95,22 @@ importers: ../projects/a: specifiers: {} + ../projects/a-types: + specifiers: + '@types/node': 16.18.11 + dependencies: + '@types/node': registry.npmjs.org/@types/node/16.18.11 + ../projects/b: specifiers: '@scoped/a': workspace:* + '@types/node': 16.18.11 + a-types: workspace:* dependencies: '@scoped/a': link:../a + devDependencies: + '@types/node': registry.npmjs.org/@types/node/16.18.11 + a-types: link:../a-types ../projects/c: specifiers: @@ -533,7 +544,6 @@ packages: resolution: {integrity: sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@types/node/-/node-16.18.11.tgz} name: '@types/node' version: 16.18.11 - dev: true registry.npmjs.org/@types/sizzle/2.3.9: resolution: {integrity: sha512-xzLEyKB50yqCUPUJkIsrVvoWNfFUbIZI+RspLWt8u+tIW/BetMBZtgV2LY/2o+tYH8dRvQ+eoPf3NdhQCcLE2w==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.9.tgz} diff --git a/e2e/pnpm_lockfiles/v54/snapshots/defs.bzl b/e2e/pnpm_lockfiles/v54/snapshots/defs.bzl index 8924db26d..0b512d2bb 100644 --- a/e2e/pnpm_lockfiles/v54/snapshots/defs.bzl +++ b/e2e/pnpm_lockfiles/v54/snapshots/defs.bzl @@ -70,7 +70,7 @@ load("@aspect_rules_js//npm/private:npm_link_package_store.bzl", _npm_link_packa # buildifier: disable=bzl-visibility load("@aspect_rules_js//npm/private:npm_package_store.bzl", _npm_package_store = "npm_package_store") -_LINK_PACKAGES = ["", "projects/a", "projects/b", "projects/c", "projects/d", "vendored/is-number"] +_LINK_PACKAGES = ["", "projects/a", "projects/a-types", "projects/b", "projects/c", "projects/d", "vendored/is-number"] # buildifier: disable=function-docstring def npm_link_all_packages(name = "node_modules", imported_links = []): @@ -251,6 +251,20 @@ def npm_link_all_packages(name = "node_modules", imported_links = []): link_targets.append("//{}:{}/typescript".format(bazel_package, name)) link_57(name = "{}/uvu".format(name)) link_targets.append("//{}:{}/uvu".format(bazel_package, name)) + elif bazel_package == "projects/a-types": + link_17(name = "{}/@types/node".format(name)) + link_targets.append("//{}:{}/@types/node".format(bazel_package, name)) + if "@types" not in scope_targets: + scope_targets["@types"] = [link_targets[-1]] + else: + scope_targets["@types"].append(link_targets[-1]) + elif bazel_package == "projects/b": + link_17(name = "{}/@types/node".format(name)) + link_targets.append("//{}:{}/@types/node".format(bazel_package, name)) + if "@types" not in scope_targets: + scope_targets["@types"] = [link_targets[-1]] + else: + scope_targets["@types"].append(link_targets[-1]) if is_root: _npm_package_store( @@ -442,6 +456,39 @@ def npm_link_all_packages(name = "node_modules", imported_links = []): ) link_targets.append(":{}/scoped/bad".format(name)) + if is_root: + _npm_package_store( + name = ".aspect_rules_js/{}/a-types@0.0.0".format(name), + src = "//projects/a-types:pkg", + package = "a-types", + version = "0.0.0", + deps = { + "//:.aspect_rules_js/{}/@types+node@16.18.11".format(name): "@types/node", + }, + visibility = ["//visibility:public"], + tags = ["manual"], + ) + + if bazel_package in ["projects/b"]: + # terminal target for direct dependencies + _npm_link_package_store( + name = "{}/a-types".format(name), + src = "//:.aspect_rules_js/{}/a-types@0.0.0".format(name), + visibility = ["//visibility:public"], + tags = ["manual"], + ) + + # filegroup target that provides a single file which is + # package directory for use in $(execpath) and $(rootpath) + native.filegroup( + name = "{}/a-types/dir".format(name), + srcs = [":{}/a-types".format(name)], + output_group = "package_directory", + visibility = ["//visibility:public"], + tags = ["manual"], + ) + link_targets.append(":{}/a-types".format(name)) + for scope, scoped_targets in scope_targets.items(): _js_library( name = "{}/{}".format(name, scope), @@ -496,6 +543,10 @@ def npm_link_targets(name = "node_modules", package = None): link_targets.append("//{}:{}/tslib".format(bazel_package, name)) link_targets.append("//{}:{}/typescript".format(bazel_package, name)) link_targets.append("//{}:{}/uvu".format(bazel_package, name)) + elif bazel_package == "projects/a-types": + link_targets.append("//{}:{}/@types/node".format(bazel_package, name)) + elif bazel_package == "projects/b": + link_targets.append("//{}:{}/@types/node".format(bazel_package, name)) if bazel_package in [""]: link_targets.append("//{}:{}/@scoped/c".format(bazel_package, name)) @@ -511,4 +562,7 @@ def npm_link_targets(name = "node_modules", package = None): if bazel_package in [""]: link_targets.append("//{}:{}/scoped/bad".format(bazel_package, name)) + + if bazel_package in ["projects/b"]: + link_targets.append("//{}:{}/a-types".format(bazel_package, name)) return link_targets diff --git a/e2e/pnpm_lockfiles/v54/snapshots/repositories.bzl b/e2e/pnpm_lockfiles/v54/snapshots/repositories.bzl index 6ef5457f9..e2791e82e 100644 --- a/e2e/pnpm_lockfiles/v54/snapshots/repositories.bzl +++ b/e2e/pnpm_lockfiles/v54/snapshots/repositories.bzl @@ -390,13 +390,14 @@ def npm_repositories(): link_workspace = "", link_packages = { "": ["@types/node", "alias-types-node"], + "projects/a-types": ["@types/node"], + "projects/b": ["@types/node"], }, package = "@types/node", version = "16.18.11", url = "https://registry.yarnpkg.com/@types/node/-/node-16.18.11.tgz", system_tar = "", package_visibility = ["//visibility:public"], - dev = True, integrity = "sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==", transitive_closure = { "@types/node": ["16.18.11"], diff --git a/e2e/pnpm_lockfiles/v60/BUILD.bazel b/e2e/pnpm_lockfiles/v60/BUILD.bazel index 5814a53f1..e5ce7c2bc 100644 --- a/e2e/pnpm_lockfiles/v60/BUILD.bazel +++ b/e2e/pnpm_lockfiles/v60/BUILD.bazel @@ -1,6 +1,4 @@ load("@lock-v60//:defs.bzl", "npm_link_all_packages") load("//:lockfile-test.bzl", "lockfile_test") -npm_link_all_packages() - -lockfile_test() +lockfile_test(npm_link_all_packages = npm_link_all_packages) diff --git a/e2e/pnpm_lockfiles/v60/pnpm-lock.yaml b/e2e/pnpm_lockfiles/v60/pnpm-lock.yaml index 71606432f..673a89cc9 100644 --- a/e2e/pnpm_lockfiles/v60/pnpm-lock.yaml +++ b/e2e/pnpm_lockfiles/v60/pnpm-lock.yaml @@ -131,11 +131,24 @@ importers: ../projects/a: {} + ../projects/a-types: + dependencies: + '@types/node': + specifier: 16.18.11 + version: registry.npmjs.org/@types/node@16.18.11 + ../projects/b: dependencies: '@scoped/a': specifier: workspace:* version: link:../a + devDependencies: + '@types/node': + specifier: 16.18.11 + version: registry.npmjs.org/@types/node@16.18.11 + a-types: + specifier: workspace:* + version: link:../a-types ../projects/c: dependencies: @@ -573,7 +586,6 @@ packages: resolution: {integrity: sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@types/node/-/node-16.18.11.tgz} name: '@types/node' version: 16.18.11 - dev: true registry.npmjs.org/@types/sizzle@2.3.9: resolution: {integrity: sha512-xzLEyKB50yqCUPUJkIsrVvoWNfFUbIZI+RspLWt8u+tIW/BetMBZtgV2LY/2o+tYH8dRvQ+eoPf3NdhQCcLE2w==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.9.tgz} diff --git a/e2e/pnpm_lockfiles/v60/snapshots/defs.bzl b/e2e/pnpm_lockfiles/v60/snapshots/defs.bzl index 2f865b3bc..4d1cfcfb3 100644 --- a/e2e/pnpm_lockfiles/v60/snapshots/defs.bzl +++ b/e2e/pnpm_lockfiles/v60/snapshots/defs.bzl @@ -71,7 +71,7 @@ load("@aspect_rules_js//npm/private:npm_link_package_store.bzl", _npm_link_packa # buildifier: disable=bzl-visibility load("@aspect_rules_js//npm/private:npm_package_store.bzl", _npm_package_store = "npm_package_store") -_LINK_PACKAGES = ["", "projects/a", "projects/b", "projects/c", "projects/d", "vendored/is-number"] +_LINK_PACKAGES = ["", "projects/a", "projects/a-types", "projects/b", "projects/c", "projects/d", "vendored/is-number"] # buildifier: disable=function-docstring def npm_link_all_packages(name = "node_modules", imported_links = []): @@ -259,6 +259,20 @@ def npm_link_all_packages(name = "node_modules", imported_links = []): link_targets.append("//{}:{}/typescript".format(bazel_package, name)) link_58(name = "{}/uvu".format(name)) link_targets.append("//{}:{}/uvu".format(bazel_package, name)) + elif bazel_package == "projects/a-types": + link_18(name = "{}/@types/node".format(name)) + link_targets.append("//{}:{}/@types/node".format(bazel_package, name)) + if "@types" not in scope_targets: + scope_targets["@types"] = [link_targets[-1]] + else: + scope_targets["@types"].append(link_targets[-1]) + elif bazel_package == "projects/b": + link_18(name = "{}/@types/node".format(name)) + link_targets.append("//{}:{}/@types/node".format(bazel_package, name)) + if "@types" not in scope_targets: + scope_targets["@types"] = [link_targets[-1]] + else: + scope_targets["@types"].append(link_targets[-1]) if is_root: _npm_package_store( @@ -450,6 +464,39 @@ def npm_link_all_packages(name = "node_modules", imported_links = []): ) link_targets.append(":{}/scoped/bad".format(name)) + if is_root: + _npm_package_store( + name = ".aspect_rules_js/{}/a-types@0.0.0".format(name), + src = "//projects/a-types:pkg", + package = "a-types", + version = "0.0.0", + deps = { + "//:.aspect_rules_js/{}/@types+node@16.18.11".format(name): "@types/node", + }, + visibility = ["//visibility:public"], + tags = ["manual"], + ) + + if bazel_package in ["projects/b"]: + # terminal target for direct dependencies + _npm_link_package_store( + name = "{}/a-types".format(name), + src = "//:.aspect_rules_js/{}/a-types@0.0.0".format(name), + visibility = ["//visibility:public"], + tags = ["manual"], + ) + + # filegroup target that provides a single file which is + # package directory for use in $(execpath) and $(rootpath) + native.filegroup( + name = "{}/a-types/dir".format(name), + srcs = [":{}/a-types".format(name)], + output_group = "package_directory", + visibility = ["//visibility:public"], + tags = ["manual"], + ) + link_targets.append(":{}/a-types".format(name)) + for scope, scoped_targets in scope_targets.items(): _js_library( name = "{}/{}".format(name, scope), @@ -505,6 +552,10 @@ def npm_link_targets(name = "node_modules", package = None): link_targets.append("//{}:{}/tslib".format(bazel_package, name)) link_targets.append("//{}:{}/typescript".format(bazel_package, name)) link_targets.append("//{}:{}/uvu".format(bazel_package, name)) + elif bazel_package == "projects/a-types": + link_targets.append("//{}:{}/@types/node".format(bazel_package, name)) + elif bazel_package == "projects/b": + link_targets.append("//{}:{}/@types/node".format(bazel_package, name)) if bazel_package in [""]: link_targets.append("//{}:{}/@scoped/c".format(bazel_package, name)) @@ -520,4 +571,7 @@ def npm_link_targets(name = "node_modules", package = None): if bazel_package in [""]: link_targets.append("//{}:{}/scoped/bad".format(bazel_package, name)) + + if bazel_package in ["projects/b"]: + link_targets.append("//{}:{}/a-types".format(bazel_package, name)) return link_targets diff --git a/e2e/pnpm_lockfiles/v60/snapshots/repositories.bzl b/e2e/pnpm_lockfiles/v60/snapshots/repositories.bzl index 13b0c96c5..958eeedc7 100644 --- a/e2e/pnpm_lockfiles/v60/snapshots/repositories.bzl +++ b/e2e/pnpm_lockfiles/v60/snapshots/repositories.bzl @@ -408,13 +408,14 @@ def npm_repositories(): link_workspace = "", link_packages = { "": ["@types/node", "alias-types-node"], + "projects/a-types": ["@types/node"], + "projects/b": ["@types/node"], }, package = "@types/node", version = "16.18.11", url = "https://registry.yarnpkg.com/@types/node/-/node-16.18.11.tgz", system_tar = "", package_visibility = ["//visibility:public"], - dev = True, integrity = "sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==", transitive_closure = { "@types/node": ["16.18.11"], diff --git a/e2e/pnpm_lockfiles/v61/BUILD.bazel b/e2e/pnpm_lockfiles/v61/BUILD.bazel index 8af83ae39..f6f49b563 100644 --- a/e2e/pnpm_lockfiles/v61/BUILD.bazel +++ b/e2e/pnpm_lockfiles/v61/BUILD.bazel @@ -1,6 +1,4 @@ load("@lock-v61//:defs.bzl", "npm_link_all_packages") load("//:lockfile-test.bzl", "lockfile_test") -npm_link_all_packages() - -lockfile_test() +lockfile_test(npm_link_all_packages = npm_link_all_packages) diff --git a/e2e/pnpm_lockfiles/v61/pnpm-lock.yaml b/e2e/pnpm_lockfiles/v61/pnpm-lock.yaml index a5a8a932c..de2fb16ef 100644 --- a/e2e/pnpm_lockfiles/v61/pnpm-lock.yaml +++ b/e2e/pnpm_lockfiles/v61/pnpm-lock.yaml @@ -135,11 +135,24 @@ importers: ../projects/a: {} + ../projects/a-types: + dependencies: + '@types/node': + specifier: 16.18.11 + version: registry.npmjs.org/@types/node@16.18.11 + ../projects/b: dependencies: '@scoped/a': specifier: workspace:* version: link:../a + devDependencies: + '@types/node': + specifier: 16.18.11 + version: registry.npmjs.org/@types/node@16.18.11 + a-types: + specifier: workspace:* + version: link:../a-types ../projects/c: dependencies: @@ -577,7 +590,6 @@ packages: resolution: {integrity: sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@types/node/-/node-16.18.11.tgz} name: '@types/node' version: 16.18.11 - dev: true registry.npmjs.org/@types/sizzle@2.3.9: resolution: {integrity: sha512-xzLEyKB50yqCUPUJkIsrVvoWNfFUbIZI+RspLWt8u+tIW/BetMBZtgV2LY/2o+tYH8dRvQ+eoPf3NdhQCcLE2w==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.9.tgz} diff --git a/e2e/pnpm_lockfiles/v61/snapshots/defs.bzl b/e2e/pnpm_lockfiles/v61/snapshots/defs.bzl index 2f865b3bc..4d1cfcfb3 100644 --- a/e2e/pnpm_lockfiles/v61/snapshots/defs.bzl +++ b/e2e/pnpm_lockfiles/v61/snapshots/defs.bzl @@ -71,7 +71,7 @@ load("@aspect_rules_js//npm/private:npm_link_package_store.bzl", _npm_link_packa # buildifier: disable=bzl-visibility load("@aspect_rules_js//npm/private:npm_package_store.bzl", _npm_package_store = "npm_package_store") -_LINK_PACKAGES = ["", "projects/a", "projects/b", "projects/c", "projects/d", "vendored/is-number"] +_LINK_PACKAGES = ["", "projects/a", "projects/a-types", "projects/b", "projects/c", "projects/d", "vendored/is-number"] # buildifier: disable=function-docstring def npm_link_all_packages(name = "node_modules", imported_links = []): @@ -259,6 +259,20 @@ def npm_link_all_packages(name = "node_modules", imported_links = []): link_targets.append("//{}:{}/typescript".format(bazel_package, name)) link_58(name = "{}/uvu".format(name)) link_targets.append("//{}:{}/uvu".format(bazel_package, name)) + elif bazel_package == "projects/a-types": + link_18(name = "{}/@types/node".format(name)) + link_targets.append("//{}:{}/@types/node".format(bazel_package, name)) + if "@types" not in scope_targets: + scope_targets["@types"] = [link_targets[-1]] + else: + scope_targets["@types"].append(link_targets[-1]) + elif bazel_package == "projects/b": + link_18(name = "{}/@types/node".format(name)) + link_targets.append("//{}:{}/@types/node".format(bazel_package, name)) + if "@types" not in scope_targets: + scope_targets["@types"] = [link_targets[-1]] + else: + scope_targets["@types"].append(link_targets[-1]) if is_root: _npm_package_store( @@ -450,6 +464,39 @@ def npm_link_all_packages(name = "node_modules", imported_links = []): ) link_targets.append(":{}/scoped/bad".format(name)) + if is_root: + _npm_package_store( + name = ".aspect_rules_js/{}/a-types@0.0.0".format(name), + src = "//projects/a-types:pkg", + package = "a-types", + version = "0.0.0", + deps = { + "//:.aspect_rules_js/{}/@types+node@16.18.11".format(name): "@types/node", + }, + visibility = ["//visibility:public"], + tags = ["manual"], + ) + + if bazel_package in ["projects/b"]: + # terminal target for direct dependencies + _npm_link_package_store( + name = "{}/a-types".format(name), + src = "//:.aspect_rules_js/{}/a-types@0.0.0".format(name), + visibility = ["//visibility:public"], + tags = ["manual"], + ) + + # filegroup target that provides a single file which is + # package directory for use in $(execpath) and $(rootpath) + native.filegroup( + name = "{}/a-types/dir".format(name), + srcs = [":{}/a-types".format(name)], + output_group = "package_directory", + visibility = ["//visibility:public"], + tags = ["manual"], + ) + link_targets.append(":{}/a-types".format(name)) + for scope, scoped_targets in scope_targets.items(): _js_library( name = "{}/{}".format(name, scope), @@ -505,6 +552,10 @@ def npm_link_targets(name = "node_modules", package = None): link_targets.append("//{}:{}/tslib".format(bazel_package, name)) link_targets.append("//{}:{}/typescript".format(bazel_package, name)) link_targets.append("//{}:{}/uvu".format(bazel_package, name)) + elif bazel_package == "projects/a-types": + link_targets.append("//{}:{}/@types/node".format(bazel_package, name)) + elif bazel_package == "projects/b": + link_targets.append("//{}:{}/@types/node".format(bazel_package, name)) if bazel_package in [""]: link_targets.append("//{}:{}/@scoped/c".format(bazel_package, name)) @@ -520,4 +571,7 @@ def npm_link_targets(name = "node_modules", package = None): if bazel_package in [""]: link_targets.append("//{}:{}/scoped/bad".format(bazel_package, name)) + + if bazel_package in ["projects/b"]: + link_targets.append("//{}:{}/a-types".format(bazel_package, name)) return link_targets diff --git a/e2e/pnpm_lockfiles/v61/snapshots/repositories.bzl b/e2e/pnpm_lockfiles/v61/snapshots/repositories.bzl index 13b0c96c5..958eeedc7 100644 --- a/e2e/pnpm_lockfiles/v61/snapshots/repositories.bzl +++ b/e2e/pnpm_lockfiles/v61/snapshots/repositories.bzl @@ -408,13 +408,14 @@ def npm_repositories(): link_workspace = "", link_packages = { "": ["@types/node", "alias-types-node"], + "projects/a-types": ["@types/node"], + "projects/b": ["@types/node"], }, package = "@types/node", version = "16.18.11", url = "https://registry.yarnpkg.com/@types/node/-/node-16.18.11.tgz", system_tar = "", package_visibility = ["//visibility:public"], - dev = True, integrity = "sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==", transitive_closure = { "@types/node": ["16.18.11"], diff --git a/e2e/pnpm_lockfiles/v90/BUILD.bazel b/e2e/pnpm_lockfiles/v90/BUILD.bazel index e6d1703ef..a9e1d7789 100644 --- a/e2e/pnpm_lockfiles/v90/BUILD.bazel +++ b/e2e/pnpm_lockfiles/v90/BUILD.bazel @@ -1,6 +1,4 @@ load("@lock-v90//:defs.bzl", "npm_link_all_packages") load("//:lockfile-test.bzl", "lockfile_test") -npm_link_all_packages() - -lockfile_test() +lockfile_test(npm_link_all_packages = npm_link_all_packages) diff --git a/e2e/pnpm_lockfiles/v90/pnpm-lock.yaml b/e2e/pnpm_lockfiles/v90/pnpm-lock.yaml index adc4262a6..e88209463 100644 --- a/e2e/pnpm_lockfiles/v90/pnpm-lock.yaml +++ b/e2e/pnpm_lockfiles/v90/pnpm-lock.yaml @@ -132,11 +132,24 @@ importers: ../projects/a: {} + ../projects/a-types: + dependencies: + '@types/node': + specifier: 16.18.11 + version: 16.18.11 + ../projects/b: dependencies: '@scoped/a': specifier: workspace:* version: link:../a + devDependencies: + '@types/node': + specifier: 16.18.11 + version: 16.18.11 + a-types: + specifier: workspace:* + version: link:../a-types ../projects/c: dependencies: diff --git a/e2e/pnpm_lockfiles/v90/snapshots/defs.bzl b/e2e/pnpm_lockfiles/v90/snapshots/defs.bzl index 747648189..814e8b226 100644 --- a/e2e/pnpm_lockfiles/v90/snapshots/defs.bzl +++ b/e2e/pnpm_lockfiles/v90/snapshots/defs.bzl @@ -71,7 +71,7 @@ load("@aspect_rules_js//npm/private:npm_link_package_store.bzl", _npm_link_packa # buildifier: disable=bzl-visibility load("@aspect_rules_js//npm/private:npm_package_store.bzl", _npm_package_store = "npm_package_store") -_LINK_PACKAGES = ["", "projects/a", "projects/b", "projects/c", "projects/d", "vendored/is-number"] +_LINK_PACKAGES = ["", "projects/a", "projects/a-types", "projects/b", "projects/c", "projects/d", "vendored/is-number"] # buildifier: disable=function-docstring def npm_link_all_packages(name = "node_modules", imported_links = []): @@ -259,6 +259,20 @@ def npm_link_all_packages(name = "node_modules", imported_links = []): link_targets.append("//{}:{}/typescript".format(bazel_package, name)) link_58(name = "{}/uvu".format(name)) link_targets.append("//{}:{}/uvu".format(bazel_package, name)) + elif bazel_package == "projects/a-types": + link_18(name = "{}/@types/node".format(name)) + link_targets.append("//{}:{}/@types/node".format(bazel_package, name)) + if "@types" not in scope_targets: + scope_targets["@types"] = [link_targets[-1]] + else: + scope_targets["@types"].append(link_targets[-1]) + elif bazel_package == "projects/b": + link_18(name = "{}/@types/node".format(name)) + link_targets.append("//{}:{}/@types/node".format(bazel_package, name)) + if "@types" not in scope_targets: + scope_targets["@types"] = [link_targets[-1]] + else: + scope_targets["@types"].append(link_targets[-1]) if is_root: _npm_package_store( @@ -450,6 +464,39 @@ def npm_link_all_packages(name = "node_modules", imported_links = []): ) link_targets.append(":{}/scoped/bad".format(name)) + if is_root: + _npm_package_store( + name = ".aspect_rules_js/{}/a-types@0.0.0".format(name), + src = "//projects/a-types:pkg", + package = "a-types", + version = "0.0.0", + deps = { + "//:.aspect_rules_js/{}/@types+node@16.18.11".format(name): "@types/node", + }, + visibility = ["//visibility:public"], + tags = ["manual"], + ) + + if bazel_package in ["projects/b"]: + # terminal target for direct dependencies + _npm_link_package_store( + name = "{}/a-types".format(name), + src = "//:.aspect_rules_js/{}/a-types@0.0.0".format(name), + visibility = ["//visibility:public"], + tags = ["manual"], + ) + + # filegroup target that provides a single file which is + # package directory for use in $(execpath) and $(rootpath) + native.filegroup( + name = "{}/a-types/dir".format(name), + srcs = [":{}/a-types".format(name)], + output_group = "package_directory", + visibility = ["//visibility:public"], + tags = ["manual"], + ) + link_targets.append(":{}/a-types".format(name)) + for scope, scoped_targets in scope_targets.items(): _js_library( name = "{}/{}".format(name, scope), @@ -505,6 +552,10 @@ def npm_link_targets(name = "node_modules", package = None): link_targets.append("//{}:{}/tslib".format(bazel_package, name)) link_targets.append("//{}:{}/typescript".format(bazel_package, name)) link_targets.append("//{}:{}/uvu".format(bazel_package, name)) + elif bazel_package == "projects/a-types": + link_targets.append("//{}:{}/@types/node".format(bazel_package, name)) + elif bazel_package == "projects/b": + link_targets.append("//{}:{}/@types/node".format(bazel_package, name)) if bazel_package in [""]: link_targets.append("//{}:{}/@scoped/c".format(bazel_package, name)) @@ -520,4 +571,7 @@ def npm_link_targets(name = "node_modules", package = None): if bazel_package in [""]: link_targets.append("//{}:{}/scoped/bad".format(bazel_package, name)) + + if bazel_package in ["projects/b"]: + link_targets.append("//{}:{}/a-types".format(bazel_package, name)) return link_targets diff --git a/e2e/pnpm_lockfiles/v90/snapshots/repositories.bzl b/e2e/pnpm_lockfiles/v90/snapshots/repositories.bzl index 468863b49..ce9eb9898 100644 --- a/e2e/pnpm_lockfiles/v90/snapshots/repositories.bzl +++ b/e2e/pnpm_lockfiles/v90/snapshots/repositories.bzl @@ -405,6 +405,8 @@ def npm_repositories(): link_workspace = "", link_packages = { "": ["@types/node", "alias-types-node"], + "projects/a-types": ["@types/node"], + "projects/b": ["@types/node"], }, package = "@types/node", version = "16.18.11",