blob: e04ccd6184a7d0fa953075d1bf63879ccf10f89d [file]
# 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")
# The node version is read from //:.nvmrc, the cross-tool convention file
# also honored by nvm and CI -- Bazel and the yarn dev flow share one pin.
# Versions unknown to the pinned rules_nodejs release are auto-fetched and
# recorded in MODULE.bazel.lock (rules_nodejs >= 6.7.5).
node = use_extension("@rules_nodejs//nodejs:extensions.bzl", "node")
node.toolchain(node_version_from_nvmrc = "//:.nvmrc")
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")