blob: f61345e95aa060dae737fb1fd000ee9c37505fde [file] [log] [blame] [edit]
workspace(
# see https://docs.bazel.build/versions/main/skylark/deploying.html#workspace
name = "aspect_rules_js",
)
load("//js:dev_repositories.bzl", "rules_js_dev_dependencies")
rules_js_dev_dependencies()
load("//js:repositories.bzl", "rules_js_dependencies")
rules_js_dependencies()
load("@aspect_bazel_lib//lib:repositories.bzl", "aspect_bazel_lib_dependencies", "register_coreutils_toolchains", "register_jq_toolchains")
aspect_bazel_lib_dependencies()
register_jq_toolchains()
register_coreutils_toolchains()
load("@rules_nodejs//nodejs:repositories.bzl", "nodejs_register_toolchains")
nodejs_register_toolchains(
name = "nodejs",
node_version = "16.14.2",
)
# Alternate toolchains for testing across versions
nodejs_register_toolchains(
name = "node16",
node_version = "16.13.1",
)
nodejs_register_toolchains(
name = "node18",
node_version = "18.13.0",
)
load("@bazel_skylib//lib:unittest.bzl", "register_unittest_toolchains")
register_unittest_toolchains()
load("@aspect_bazel_lib//lib:host_repo.bzl", "host_repo")
host_repo(name = "aspect_bazel_lib_host")
############################################
# Gazelle, for generating bzl_library targets
load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies")
load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies")
go_rules_dependencies()
go_register_toolchains(version = "1.20.5")
gazelle_dependencies()
############################################
# Example npm dependencies
load("@aspect_rules_js//npm:repositories.bzl", "npm_import", "npm_translate_lock")
npm_translate_lock(
name = "npm",
bins = {
# derived from "bin" attribute in node_modules/typescript/package.json
"typescript": {
"tsc": "./bin/tsc",
"tsserver": "./bin/tsserver",
},
},
custom_postinstalls = {
"@aspect-test/c": "echo moo > cow.txt",
"@aspect-test/c@2.0.2": "echo mooo >> cow.txt",
},
data = [
"//:examples/npm_deps/patches/meaning-of-life@1.0.0-pnpm.patch",
"//:package.json",
"//:pnpm-workspace.yaml",
"//examples/js_binary:package.json",
"//examples/macro:package.json",
"//examples/npm_deps:package.json",
"//examples/npm_package/libs/lib_a:package.json",
"//examples/npm_package/packages/pkg_a:package.json",
"//examples/npm_package/packages/pkg_b:package.json",
"//examples/webpack_cli:package.json",
"//js/private/coverage/bundle:package.json",
"//js/private/image:package.json",
"//js/private/test/image:package.json",
"//js/private/test/js_run_devserver:package.json",
"//js/private/worker/src:package.json",
"//npm/private/test:package.json",
"//npm/private/test:vendored/lodash-4.17.21.tgz",
"//npm/private/test/npm_package:package.json",
"//npm/private/test/vendored/is-odd:package.json",
"//npm/private/test/vendored/semver-max:package.json",
],
generate_bzl_library_targets = True,
lifecycle_hooks = {
# we fetch @kubernetes/client-node from source and it has a `prepare` lifecycle hook that needs to be run
"@kubernetes/client-node": ["prepare"],
# 'install' hook fails as it assumes the following path to `node-pre-gyp`: ./node_modules/.bin/node-pre-gyp
# https://github.com/stultuss/protoc-gen-grpc-ts/blob/53d52a9d0e1fe3cbe930dec5581eca89b3dde807/package.json#L28
"protoc-gen-grpc@2.0.3": [],
},
lifecycle_hooks_execution_requirements = {
"*": [
"no-sandbox",
],
# If @kubernetes/client-node is not sandboxed, will fail with
# ```
# src/azure_auth.ts(97,43): error TS2575: No overload expects 2 arguments, but overloads do exist that expect either 1 or 4 arguments.
# src/azure_auth.ts(98,34): error TS2575: No overload expects 2 arguments, but overloads do exist that expect either 1 or 4 arguments.
# src/gcp_auth.ts(93,43): error TS2575: No overload expects 2 arguments, but overloads do exist that expect either 1 or 4 arguments.
# src/gcp_auth.ts(94,34): error TS2575: No overload expects 2 arguments, but overloads do exist that expect either 1 or 4 arguments.
# ```
# since a `jsonpath-plus@7.2.0` that is newer then the transitive dep `jsonpath-plus@0.19.0` is found outside of the sandbox that
# includes typings that don't match the 0.19.0 "any" usage.
"@kubernetes/client-node": [],
"@figma/nodegit": [
"no-sandbox",
"requires-network",
],
"esbuild": [
"no-sandbox",
"requires-network",
],
"segfault-handler": [
"no-sandbox",
"requires-network",
],
"puppeteer": [
"no-sandbox",
"requires-network",
],
},
npmrc = "//:.npmrc",
package_visibility = {
"unused": ["//visibility:private"],
"@mycorp/pkg-a": ["//examples:__subpackages__"],
},
patch_args = {
"*": ["-p1"],
"@gregmagolan/test-a": ["-p4"],
},
patches = {
"@gregmagolan/test-a": ["//examples/npm_deps:patches/test-a.patch"],
"@gregmagolan/test-a@0.0.1": ["//examples/npm_deps:patches/test-a@0.0.1.patch"],
"@gregmagolan/test-b": ["//examples/npm_deps:patches/test-b.patch"],
"meaning-of-life@1.0.0": ["//examples/npm_deps:patches/meaning-of-life@1.0.0-after_pnpm.patch"],
},
pnpm_lock = "//:pnpm-lock.yaml",
# Use a version that's not vendored into rules_js by providing a (version, integrity) tuple.
# curl --silent https://registry.npmjs.org/pnpm | jq '.versions["8.6.11"].dist.integrity'
pnpm_version = ("8.6.11", "sha512-jqknppuj45tDzJsLcLqkAxytBHZXIx9JTYkGNq0/7pSRggpio9wRxTDj4NA2ilOHPlJ5BVjB5Ij5dx65woMi5A=="),
public_hoist_packages = {
# Instructs the linker to hoist the ms@2.1.3 npm package to `node_modules/ms` in the `examples/npm_deps` package.
# Similar to adding `public-hoist-pattern[]=ms` in .npmrc but with control over which version to hoist and where
# to hoist it. This hoisted package can be referenced by the label `//examples/npm_deps:node_modules/ms` same as
# other direct dependencies in the `examples/npm_deps/package.json`.
"ms@2.1.3": ["examples/npm_deps"],
},
update_pnpm_lock = True,
verify_node_modules_ignored = "//:.bazelignore",
verify_patches = "//examples/npm_deps/patches:patches",
)
load("@npm//:repositories.bzl", "npm_repositories")
# Declares npm_import rules from the pnpm-lock.yaml file
npm_repositories()
# As an example, manually import a package using explicit coordinates.
# Just a demonstration of the syntax de-sugaring.
npm_import(
name = "acorn__8.4.0",
bins = {"acorn": "./bin/acorn"},
integrity = "sha512-ULr0LDaEqQrMFGyQ3bhJkLsbtrQ8QibAseGZeaSUiT/6zb9IvIkomWHJIvgvwad+hinRAgsI51JcWk2yvwyL+w==",
package = "acorn",
# Root package where to link the virtual store
root_package = "",
version = "8.4.0",
)
load("@buildifier_prebuilt//:deps.bzl", "buildifier_prebuilt_deps")
buildifier_prebuilt_deps()
load("@buildifier_prebuilt//:defs.bzl", "buildifier_prebuilt_register_toolchains")
buildifier_prebuilt_register_toolchains()
# TODO: convert to a toolchain
# Content of https://github.com/oven-sh/bun/releases/download/bun-v1.0.11/SHASUMS256.txt
_BUN_HASHES = {
"032e919c6304999931e5c029557905adb4b5932689983b521e9f5fcf457a9f2f": "bun-darwin-aarch64-profile.zip",
"c99a7f00594e551b59eb4f3ae6eb6bb55bf4ce57abc05321a6a061dba5a77cbf": "bun-darwin-aarch64.zip",
"7710e4ae8818e490dbb3d96f895c11a5a90b09af6e52e500dc4107ab74ef8839": "bun-darwin-x64-baseline-profile.zip",
"ecfa57cd58b73d2eb133fe414fd675e1ae42e1c4e71b9d8b7889579937a939ea": "bun-darwin-x64-baseline.zip",
"1eb233c759b4168c71be93abfd10dd3a52cb6864f4b1603ab98352d5db76f668": "bun-darwin-x64-profile.zip",
"f7013718bf841af3c7b5581f331d3d267f9653f56851fe71fd0aeb76585e3daf": "bun-darwin-x64.zip",
"c3fe9face160e607ef6e8acc0f6cb01624b50794850681ce0db3349ace92abe8": "bun-linux-aarch64-profile.zip",
"ffd30a0f6891a20ace2222a50823d45f92a80c3d2b33b2bcfa354bc7dc71b39b": "bun-linux-aarch64.zip",
"268e606e7fe07b30624d76d90e02270f9c48e461243cb05a5ae386d75015b151": "bun-linux-x64-baseline-profile.zip",
"6de3e07cf38c0d44654a886a99b78a97a615b563c717796ad44591a0c8304390": "bun-linux-x64-baseline.zip",
"6cc060fd9223a4567dd0364bcdab3242e585bbdd7d16e430674c9521414ebf91": "bun-linux-x64-profile.zip",
"a53f7e19c84d0b7be67858131741b3cf22f3581ac241c47f0c54552b60a71c2c": "bun-linux-x64.zip",
}
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
[
http_archive(
name = file.strip(".zip").replace("-", "_"),
build_file_content = """\
load("@bazel_skylib//rules:native_binary.bzl", "native_binary")
package(default_visibility = ["//visibility:public"])
native_binary(
name = "{}",
src = "bun",
out = "bun_exe",
)
""".format(file.strip(".zip").replace("-", "_")),
sha256 = sha,
strip_prefix = file.strip(".zip"),
url = "https://github.com/oven-sh/bun/releases/download/bun-v1.0.11/" + file,
)
for sha, file in _BUN_HASHES.items()
if file.find("-profile") == -1
]