blob: e6cae44281a9d9059e9df75c8d6d002037ab9b14 [file] [log] [blame] [edit]
# 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",
)