mirror of
https://github.com/angular/angular
synced 2026-05-24 09:28:37 +00:00
196 lines
6.2 KiB
Python
196 lines
6.2 KiB
Python
"""Provides the rollup and dist file generation macro."""
|
|
|
|
load("@aspect_bazel_lib//lib:copy_to_bin.bzl", _copy_to_bin = "copy_to_bin")
|
|
load("@aspect_rules_esbuild//esbuild:defs.bzl", _esbuild = "esbuild")
|
|
load("@aspect_rules_js//npm:defs.bzl", _npm_package = "npm_package")
|
|
load("@aspect_rules_ts//ts:defs.bzl", _ts_config = "ts_config")
|
|
load("@devinfra//bazel/jasmine:jasmine.bzl", _jasmine_test = "jasmine_test")
|
|
load("@devinfra//bazel/spec-bundling:index.bzl", "spec_bundle")
|
|
load("@devinfra//bazel/ts_project:index.bzl", "strict_deps_test")
|
|
load("@rules_angular//src/ts_project:index.bzl", _ts_project = "ts_project")
|
|
load("@rules_browsers//wtr:index.bzl", "wtr_test")
|
|
load("//packages/zone.js/tools:zone_bundle.bzl", "zone_bundle")
|
|
|
|
copy_to_bin = _copy_to_bin
|
|
esbuild = _esbuild
|
|
ts_config = _ts_config
|
|
npm_package = _npm_package
|
|
|
|
def ts_project(
|
|
name,
|
|
deps = [],
|
|
srcs = [],
|
|
source_map = True,
|
|
testonly = False,
|
|
tsconfig = None,
|
|
**kwargs):
|
|
if tsconfig == None:
|
|
if native.package_name().startswith("packages/zone.js"):
|
|
tsconfig = "//packages/zone.js:tsconfig_test" if testonly else "//packages/zone.js:tsconfig_build"
|
|
else:
|
|
fail("Failing... a tsconfig value must be provided.")
|
|
|
|
_ts_project(
|
|
name,
|
|
srcs = srcs,
|
|
deps = deps,
|
|
declaration = True,
|
|
source_map = source_map,
|
|
testonly = testonly,
|
|
tsconfig = tsconfig,
|
|
**kwargs
|
|
)
|
|
|
|
strict_deps_test(
|
|
name = "%s_deps" % name,
|
|
srcs = srcs,
|
|
tsconfig = tsconfig,
|
|
deps = deps,
|
|
)
|
|
|
|
def copy_dist(module_name, module_format, output_module_name, suffix, umd):
|
|
umd_output = umd
|
|
suffix_output = suffix
|
|
if umd == "umd":
|
|
umd_output = "umd."
|
|
if suffix == "min":
|
|
suffix_output = "min."
|
|
native.genrule(
|
|
name = module_name + "." + suffix_output + "dist",
|
|
srcs = [
|
|
"//packages/zone.js:" + module_name + "-rollup." + suffix_output + module_format,
|
|
],
|
|
outs = [
|
|
output_module_name + "." + umd_output + suffix_output + "js",
|
|
],
|
|
visibility = ["//visibility:public"],
|
|
cmd = "cp $< $@",
|
|
)
|
|
|
|
def generate_rollup_bundle(bundles):
|
|
for b in bundles.items():
|
|
module_name = b[0]
|
|
rollup_config = b[1]
|
|
if rollup_config.get("entrypoint") != None:
|
|
entry_point = rollup_config.get("entrypoint")
|
|
zone_bundle(
|
|
name = module_name + "-es5-rollup",
|
|
entry_point = entry_point + ".js",
|
|
external = rollup_config.get("external"),
|
|
deps = [
|
|
"//packages/zone.js/lib:lib",
|
|
],
|
|
)
|
|
zone_bundle(
|
|
name = module_name + "-es2015-rollup",
|
|
entry_point = entry_point + ".js",
|
|
external = rollup_config.get("external"),
|
|
deps = [
|
|
"//packages/zone.js/lib:lib",
|
|
],
|
|
)
|
|
else:
|
|
zone_bundle(
|
|
name = module_name + "-es5-rollup",
|
|
entry_point = rollup_config.get("es5") + ".js",
|
|
external = rollup_config.get("external"),
|
|
deps = [
|
|
"//packages/zone.js/lib:lib",
|
|
],
|
|
)
|
|
zone_bundle(
|
|
name = module_name + "-es2015-rollup",
|
|
entry_point = rollup_config.get("es2015") + ".js",
|
|
external = rollup_config.get("external"),
|
|
deps = [
|
|
"//packages/zone.js/lib:lib",
|
|
],
|
|
)
|
|
|
|
def generate_dist(bundles, output_format, umd):
|
|
module_format = "esm.js"
|
|
if output_format == "es5":
|
|
module_format = "es5umd.js"
|
|
for b in bundles:
|
|
module_name = b[0]
|
|
copy_dist(
|
|
module_name = module_name + "-" + output_format,
|
|
module_format = module_format,
|
|
output_module_name = module_name,
|
|
suffix = "",
|
|
umd = umd,
|
|
)
|
|
copy_dist(
|
|
module_name = module_name + "-" + output_format,
|
|
module_format = module_format,
|
|
output_module_name = module_name,
|
|
suffix = "min.",
|
|
umd = umd,
|
|
)
|
|
|
|
def web_test(name, tags = [], deps = [], bootstrap = [], tsconfig = "//packages/zone.js:tsconfig_build", **kwargs):
|
|
spec_bundle(
|
|
name = "%s_bundle" % name,
|
|
testonly = True,
|
|
srcs = [tsconfig],
|
|
tsconfig = tsconfig,
|
|
bootstrap = bootstrap,
|
|
deps = deps,
|
|
tags = [
|
|
"manual",
|
|
],
|
|
config = {
|
|
"resolveExtensions": [".js", ".mjs"],
|
|
},
|
|
platform = "browser",
|
|
external = kwargs.pop("external", []),
|
|
)
|
|
|
|
wtr_test(
|
|
name = name,
|
|
deps = [":%s_bundle" % name] + kwargs.pop("data", []),
|
|
tags = tags,
|
|
**kwargs
|
|
)
|
|
|
|
def jasmine_test(name, fixed_args = [], **kwargs):
|
|
all_fixed_args = [
|
|
# Escape so that the `js_binary` launcher triggers Bash expansion.
|
|
"'**/*+(.|_)spec.js'",
|
|
"'**/*+(.|_)spec.mjs'",
|
|
"'**/*+(.|_)spec.cjs'",
|
|
] + fixed_args
|
|
|
|
_jasmine_test(
|
|
name = name,
|
|
node_modules = "//packages/zone.js:node_modules",
|
|
chdir = native.package_name(),
|
|
fixed_args = all_fixed_args,
|
|
size = kwargs.pop("size", "medium"),
|
|
**kwargs
|
|
)
|
|
|
|
def zone_compatible_jasmine_test(name, external = [], data = [], bootstrap = [], **kwargs):
|
|
spec_bundle(
|
|
name = "%s_bundle" % name,
|
|
# Specs from this attribute are filtered and will be executed. We
|
|
# add bootstrap here for discovery of the module mappings aspect.
|
|
deps = data + bootstrap,
|
|
bootstrap = bootstrap,
|
|
external = external + ["domino", "typescript"],
|
|
platform = "node",
|
|
config = {
|
|
"banner": {
|
|
"js": """import {createRequire as __cjsCompatRequire} from 'module';
|
|
const require = __cjsCompatRequire(import.meta.url);""",
|
|
},
|
|
"target": ["ES2022"],
|
|
"format": "esm",
|
|
},
|
|
)
|
|
|
|
jasmine_test(
|
|
name = name,
|
|
data = [":%s_bundle" % name],
|
|
**kwargs
|
|
)
|