# npm packages are split into different node_modules directories based on their
# usage.
# 1. @npm (node_modules) - contains packages to run tests, check code, etc...
#    It is expected that @npm is used ONLY to run tools. No packages from @npm
#    are used by other code in gerrit.
# 2. @tools_npm (tools/node_tools/node_modules) - the tools/node_tools folder
#    contains self-written tools which are run for building and/or testing. The
#    @tools_npm directory contains all the packages needed to run this tools.
# 3. @ui_npm (polygerrit-ui/app/node_modules) - packages with source code which
#    are necessary to run polygerrit and to bundle it. Only code from these
#    packages can be included in the final bundle for polygerrit. @ui_npm folder
#    must not have devDependencies. All devDependencies must be placed in
#    @ui_dev_npm.
# 4. @ui_dev_npm (polygerrit-ui/node_modules) - devDependencies for polygerrit.
#    The packages from these folder can be used for testing, but must not be
#    included in the final bundle.
# 5. @plugins_npm (plugins/node_modules) - plugin dependencies for polygerrit
#    plugins. The packages here are expected to be used in plugins.
# Note: separation between @ui_npm and @ui_dev_npm is necessary because with
#    rules_nodejs we can't generate two external repositories from the same
#    package.json. At the same time we want to avoid accidental usages of code
#    from devDependencies in polygerrit bundle.

rules_ts_ext = use_extension("@aspect_rules_ts//ts:extensions.bzl", "ext", dev_dependency = True)
rules_ts_ext.deps(
    ts_version_from = "//:package.json",
)
use_repo(rules_ts_ext, "npm_typescript")

NODE_24_REPO = {
    "24.14.1-darwin_arm64": ("node-v24.14.1-darwin-arm64.tar.gz", "node-v24.14.1-darwin-arm64", "25495ff85bd89e2d8a24d88566d7e2f827c6b0d3d872b2cebf75371f93fcb1fe"),
    "24.14.1-darwin_amd64": ("node-v24.14.1-darwin-x64.tar.gz", "node-v24.14.1-darwin-x64", "2526230ad7d922be82d4fdb1e7ee1e84303e133e3b4b0ec4c2897ab31de0253d"),
    "24.14.1-linux_arm64": ("node-v24.14.1-linux-arm64.tar.xz", "node-v24.14.1-linux-arm64", "71e427e28b78846f201d4d5ecc30cb13d1508ca099ef3871889a1256c7d6f67e"),
    "24.14.1-linux_ppc64le": ("node-v24.14.1-linux-ppc64le.tar.xz", "node-v24.14.1-linux-ppc64le", "95bf0c8dbb73144edb79a57399f03c70af6995b78e1c632926e53e6404662ef5"),
    "24.14.1-linux_s390x": ("node-v24.14.1-linux-s390x.tar.xz", "node-v24.14.1-linux-s390x", "ed3bfbc0ff418b0ec4633f23d53a12a691717a34b041c3fbdb296c8774e5a98a"),
    "24.14.1-linux_amd64": ("node-v24.14.1-linux-x64.tar.xz", "node-v24.14.1-linux-x64", "84d38715d449447117d05c3e71acd78daa49d5b1bfa8aacf610303920c3322be"),
    "24.14.1-windows_amd64": ("node-v24.14.1-win-x64.zip", "node-v24.14.1-win-x64", "6e50ce5498c0cebc20fd39ab3ff5df836ed2f8a31aa093cecad8497cff126d70"),
}

node = use_extension("@rules_nodejs//nodejs:extensions.bzl", "node")
node.toolchain(
    name = "nodejs",
    node_repositories = NODE_24_REPO,
    node_version = "24.14.1",
)
use_repo(node, "nodejs_toolchains")
use_repo(node, "nodejs_darwin_arm64")
use_repo(node, "nodejs_darwin_amd64")
use_repo(node, "nodejs_linux_arm64")
use_repo(node, "nodejs_linux_ppc64le")
use_repo(node, "nodejs_linux_s390x")
use_repo(node, "nodejs_linux_amd64")
use_repo(node, "nodejs_windows_amd64")

pnpm = use_extension("@aspect_rules_js//npm:extensions.bzl", "pnpm")
pnpm.pnpm(pnpm_version = "10.33.3")
use_repo(pnpm, "pnpm")

npm = use_extension("@aspect_rules_js//npm:extensions.bzl", "npm")
npm.npm_translate_lock(
    name = "npm",
    data = [
        "//:package.json",
        "//:pnpm-workspace.yaml",
    ],
    pnpm_lock = "//:pnpm-lock.yaml",
    update_pnpm_lock = True,
    yarn_lock = "//:yarn.lock",
)
use_repo(npm, "npm")

# Keep no_optional=True.
# ui_npm is the browser/runtime dependency set for PolyGerrit.
# If this is removed, aspect_rules_js npm_translate_lock defaults to installing
# optionalDependencies from the full transitive graph (not just from our root
# package.json). In this repo that pulls in Resemble.js -> canvas ->
# prebuild-install/native helper packages, which changes the realized
# node_modules tree and breaks license generation.
# This differs from normal pnpm behavior, which may skip platform-unneeded
# optional deps.
npm.npm_translate_lock(
    name = "ui_npm",
    data = [
        "//polygerrit-ui/app:package.json",
        "//polygerrit-ui/app:pnpm-workspace.yaml",
    ],
    no_optional = True,
    pnpm_lock = "//polygerrit-ui/app:pnpm-lock.yaml",
    update_pnpm_lock = True,
    yarn_lock = "//polygerrit-ui/app:yarn.lock",
)
use_repo(npm, "ui_npm")

npm.npm_translate_lock(
    name = "ui_dev_npm",
    data = [
        "//polygerrit-ui:package.json",
        "//polygerrit-ui:pnpm-workspace.yaml",
    ],
    pnpm_lock = "//polygerrit-ui:pnpm-lock.yaml",
    update_pnpm_lock = True,
    yarn_lock = "//polygerrit-ui:yarn.lock",
)
use_repo(npm, "ui_dev_npm")

npm.npm_translate_lock(
    name = "tools_npm",
    data = [
        "//tools/node_tools:package.json",
        "//tools/node_tools:pnpm-workspace.yaml",
    ],
    pnpm_lock = "//tools/node_tools:pnpm-lock.yaml",
    update_pnpm_lock = True,
    yarn_lock = "//tools/node_tools:yarn.lock",
)
use_repo(npm, "tools_npm")

npm.npm_translate_lock(
    name = "plugins_npm",
    data = [
        "//plugins:package.json",
        "//plugins:pnpm-workspace.yaml",
    ],
    pnpm_lock = "//plugins:pnpm-lock.yaml",
    update_pnpm_lock = True,
    yarn_lock = "//plugins:yarn.lock",
)
use_repo(npm, "plugins_npm")
