workspace(name = "aspect_rules_js")

# buildifier: disable=bzl-visibility
load("//js/private:dev_deps.bzl", "rules_js_dev_dependencies")

rules_js_dev_dependencies()

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_bazel_lib//lib:repositories.bzl", "register_expand_template_toolchains")

register_expand_template_toolchains()

load("@rules_nodejs//nodejs:repositories.bzl", "nodejs_register_toolchains")

# 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",
)

nodejs_register_toolchains(
    name = "node20",
    node_version = "20.11.1",
)

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")

############################################
# 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/linked_consumer:package.json",
        "//examples/linked_empty_node_modules:package.json",
        "//examples/linked_lib:package.json",
        "//examples/linked_pkg: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/npm_package/packages/pkg_d:package.json",
        "//examples/npm_package/packages/pkg_e:package.json",
        "//examples/runfiles: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/npm_package_publish: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
        # which runs the `build` package.json script: https://github.com/kubernetes-client/javascript/blob/fc681991e61c6808dd26012a2331f83671a11218/package.json#L28.
        # Here we run run build so we just run `tsc` instead of `npm run build` which ends up just running `tsc`.
        "@kubernetes/client-node": ["build"],
        # '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__"],
    },
    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 package store
    root_package = "",
    version = "8.4.0",
)

############################################
# Stardoc
load("@io_bazel_stardoc//:setup.bzl", "stardoc_repositories")

stardoc_repositories()

load("@rules_jvm_external//:repositories.bzl", "rules_jvm_external_deps")

rules_jvm_external_deps()

load("@rules_jvm_external//:setup.bzl", "rules_jvm_external_setup")

rules_jvm_external_setup()

load("@io_bazel_stardoc//:deps.bzl", "stardoc_external_deps")

stardoc_external_deps()

load("@bazel_features//:deps.bzl", "bazel_features_deps")

bazel_features_deps()

load("@stardoc_maven//:defs.bzl", stardoc_pinned_maven_install = "pinned_maven_install")

stardoc_pinned_maven_install()

# Buildifier
load("@buildifier_prebuilt//:deps.bzl", "buildifier_prebuilt_deps")

buildifier_prebuilt_deps()

load("@buildifier_prebuilt//:defs.bzl", "buildifier_prebuilt_register_toolchains")

buildifier_prebuilt_register_toolchains()

# rules_lint
load(
    "@aspect_rules_lint//format:repositories.bzl",
    "rules_lint_dependencies",
)

rules_lint_dependencies()

load("@rules_multitool//multitool:multitool.bzl", "multitool")

multitool(
    name = "multitool",
    lockfiles = [
        "@aspect_rules_lint//format:multitool.lock.json",
        "@aspect_rules_lint//lint:multitool.lock.json",
    ],
)

load("@com_grail_bazel_toolchain//toolchain:deps.bzl", "bazel_toolchain_dependencies")

bazel_toolchain_dependencies()

load("@com_grail_bazel_toolchain//toolchain:rules.bzl", "llvm_toolchain")

llvm_toolchain(
    name = "llvm_toolchain",
    llvm_version = "14.0.0",
    sha256 = {
        "darwin-aarch64": "1b8975db6b638b308c1ee437291f44cf8f67a2fb926eb2e6464efd180e843368",
        "linux-x86_64": "564fcbd79c991e93fdf75f262fa7ac6553ec1dd04622f5d7db2a764c5dc7fac6",
    },
    strip_prefix = {
        "darwin-aarch64": "clang+llvm-14.0.0-arm64-apple-darwin",
        "linux-x86_64": "clang+llvm-14.0.0-x86_64-linux-gnu",
    },
    sysroot = {
        "linux-aarch64": "@org_chromium_sysroot_linux_arm64//:sysroot",
        "linux-x86_64": "@org_chromium_sysroot_linux_x86_64//:sysroot",
        "darwin-aarch64": "@sysroot_darwin_universal//:sysroot",
        "darwin-x86_64": "@sysroot_darwin_universal//:sysroot",
    },
    urls = {
        "darwin-aarch64": ["https://github.com/aspect-forks/llvm-project/releases/download/aspect-release-14.0.0/clang+llvm-14.0.0-arm64-apple-darwin.tar.xz"],
        "linux-x86_64": ["https://github.com/aspect-forks/llvm-project/releases/download/aspect-release-14.0.0/clang+llvm-14.0.0-x86_64-linux-gnu.tar.xz"],
    },
)

load("@llvm_toolchain//:toolchains.bzl", "llvm_register_toolchains")

llvm_register_toolchains()
