| # gazelle:map_kind bzl_library bzl_library @bazel_lib//:bzl_library.bzl |
| load("@bazel_lib//:bzl_library.bzl", "bzl_library") |
| load("//nodejs/private:nodejs_toolchains_repo.bzl", "PLATFORMS") |
| load("//nodejs/private:user_build_settings.bzl", "user_args") |
| load(":node_toolchain_alias.bzl", "node_runtime_alias", "node_toolchain_alias") |
| |
| package(default_visibility = ["//visibility:public"]) |
| |
| bzl_library( |
| name = "providers", |
| srcs = ["providers.bzl"], |
| deps = [ |
| "//nodejs/private/providers:stamp_setting_info", |
| "//nodejs/private/providers:user_build_settings", |
| ], |
| ) |
| |
| bzl_library( |
| name = "repositories", |
| srcs = ["repositories.bzl"], |
| deps = [ |
| "//nodejs/private:node_versions", |
| "//nodejs/private:nodejs_repo_host_os_alias", |
| "//nodejs/private:nodejs_toolchains_repo", |
| "//nodejs/private:os_name", |
| ], |
| ) |
| |
| # This is the target rule authors should put in their "toolchains" |
| # attribute in order to get a node interpreter for the correct |
| # platform. |
| # See https://docs.bazel.build/versions/main/toolchains.html#writing-rules-that-use-toolchains |
| # A single binary distribution of a Node provides two different types of toolchains from the |
| # perspective of Bazel: |
| |
| # (1) The transpilation toolchain, which provides the Node runtime used to execute the transpiler |
| # (and type checker), as well as various helper tools and settings. |
| # |
| # Toolchains of this type typically have constraints on the execution platform so that their Node |
| # runtime can run the transpiler, but not on the target platform as Node transpilation outputs are |
| # platform independent. |
| # |
| # Obtain the associated NodeInfo via: |
| # ctx.toolchains["@bazel_tools//tools/jdk:toolchain_type"].nodeinfo |
| toolchain_type(name = "toolchain_type") |
| |
| # (2) The Node runtime that executable Node outputs (e.g., js_binary) will run on. |
| # |
| # Toolchains of this type typically have constraints on the target platform so that the runtime's |
| # native 'node' binary can be run there, but not on the execution platform as building an executable |
| # Node target only requires copying or symlinking the runtime, which can be done on any platform. |
| # |
| # Obtain the associated NodeRuntimeInfo via: |
| # ctx.toolchains["@bazel_tools//tools/jdk:runtime_toolchain_type"].nodeinfo |
| toolchain_type(name = "runtime_toolchain_type") |
| |
| # Points to toolchain[":runtime_toolchain_type"] |
| # Use this for executing and packaging Node applications for target platform (eg., js_binary, js_test or js_image_oci). |
| node_runtime_alias(name = "current_node_runtime") |
| |
| # Points to toolchain[":toolchain_type"] |
| # Use this for tools (eg., when action execution is needed). |
| node_toolchain_alias(name = "current_node_toolchain") |
| |
| # The platforms that are supported by the Node toolchains. |
| [ |
| platform( |
| name = key, |
| constraint_values = values.compatible_with, |
| ) |
| for key, values in PLATFORMS.items() |
| ] |
| |
| # Default arguments/flags that are passed to nodejs in all nodejs_binary and |
| # nodejs_test targets. Can be overwritten by settings |
| # --@rules_nodejs//nodejs:default_args="--flag1 --flag2" |
| user_args( |
| name = "default_args", |
| build_setting_default = "--preserve-symlinks", |
| ) |