blob: cccb8939e4174ee46f23d79cb8ccc76ae45456e3 [file] [log] [blame]
load("@aspect_rules_ts//ts:defs.bzl", "ts_config")
load("@bazel_lib//lib:copy_to_bin.bzl", "copy_to_bin")
load("@bazel_lib//lib:copy_to_directory.bzl", "copy_to_directory")
load("@bazel_lib//lib:run_binary.bzl", "run_binary")
load("@bazel_skylib//lib:selects.bzl", "selects")
load("@jq.bzl//jq:jq.bzl", "jq_test")
load("@npm//:defs.bzl", "npm_link_all_packages")
load("@npm//:renovate/package_json.bzl", renovate_bin = "bin")
load("@npm//:web-ext/package_json.bzl", web_ext_bin = "bin")
load("@npm//:json5/package_json.bzl", json5_bin = "bin")
load("@rules_pkg//pkg:pkg.bzl", "pkg_zip")
load("@rules_shell//shell:sh_test.bzl", "sh_test")
load("//tools:bazel/swc.bzl", "swc_pkg")
load(":bzl/bundle.bzl", "extension_bundle")
load(":bzl/config.bzl", "browser", "channel", "release")
load(":bzl/copy_pkg.bzl", "copy_extension_package_to_directory")
load(":bzl/lit_localize.bzl", "expand_lit_localize_config_templates")
npm_link_all_packages()
exports_files([
".swcrc_pkg",
".swcrc_pkg_strict",
])
extension_bundle(
name = "webpack_bundle",
)
copy_to_directory(
name = "cc_dark_theme_styles",
srcs = ["//src/features/ccDarkTheme/ui/styles"],
replace_prefixes = {
"src/features/ccDarkTheme/ui/styles": "",
},
)
copy_to_directory(
name = "options_styles",
srcs = ["//src/options/ui/styles"],
replace_prefixes = {
"src/options/ui/styles": "",
},
)
copy_extension_package_to_directory(
name = "unpacked_pkg",
out = "unpacked_pkg",
webpack_bundle = ":webpack_bundle",
)
pkg_zip(
name = "pkg_zip",
srcs = [":unpacked_pkg"],
out = "twpowertools.zip",
strip_prefix = "unpacked_pkg",
visibility = ["//visibility:public"],
)
ts_config(
name = "tsconfig_base",
src = "tsconfig.base.json",
visibility = ["//:__subpackages__"],
)
copy_to_bin(
name = "vitest_config",
srcs = ["vitest.config.ts"],
visibility = ["//:__subpackages__"],
)
browser(
name = "browser",
build_setting_default = "CHROMIUM",
)
config_setting(
name = "chromium",
flag_values = {
":browser": "CHROMIUM",
},
visibility = ["//:__subpackages__"],
)
config_setting(
name = "gecko",
flag_values = {
":browser": "GECKO",
},
visibility = ["//:__subpackages__"],
)
selects.config_setting_group(
name = "mv3",
match_any = [
":chromium",
],
visibility = ["//:__subpackages__"],
)
channel(
name = "channel",
build_setting_default = "STABLE",
)
config_setting(
name = "stable",
flag_values = {
":channel": "STABLE",
},
visibility = ["//:__subpackages__"],
)
config_setting(
name = "beta",
flag_values = {
":channel": "BETA",
},
visibility = ["//:__subpackages__"],
)
config_setting(
name = "canary",
flag_values = {
":channel": "CANARY",
},
visibility = ["//:__subpackages__"],
)
release(
name = "release",
build_setting_default = False,
)
config_setting(
name = "is_release",
flag_values = {
":release": "true",
},
visibility = ["//:__subpackages__"],
)
config_setting(
name = "production",
values = {
"compilation_mode": "opt",
},
visibility = ["//:__subpackages__"],
)
config_setting(
name = "should_web_ext_lint",
flag_values = {
":browser": "GECKO",
},
values = {
"compilation_mode": "opt",
},
)
web_ext_bin.web_ext_binary(
name = "web_ext",
)
sh_test(
name = "web_ext_lint",
size = "small",
srcs = [":web_ext_lint.sh"],
args = ["$(location :web_ext)"],
data = [
":unpacked_pkg",
":web_ext",
],
env = {
"NO_UPDATE_NOTIFIER": "true",
},
target_compatible_with = select({
"//:should_web_ext_lint": [],
"//conditions:default": ["//tools/platforms:incompatible"],
}),
deps = [
"@rules_shell//shell/runfiles",
],
)
renovate_bin.renovate_config_validator_test(
name = "renovate_config_test",
size = "small",
data = [":renovate.json"],
)
expand_lit_localize_config_templates()
run_binary(
name = "version_name",
outs = ["VERSION_NAME"],
args = select({
"//:stable": ["stable"],
"//:beta": ["beta"],
"//:canary": ["canary"],
}) + select({
"//:chromium": ["chromium_mv3"],
"//:gecko": ["gecko"],
}) + [
"$(execpath VERSION_NAME)",
],
stamp = -1,
tool = "//tools/stampVersionName",
)
# NOTE: When changing a tsconfig file, make sure to change the corresponding
# swcrc file!
# This doesn't provide strong typing guarantees which can lead to bugs.
# Please consider using //:tsconfig_pkg_strict instead.
ts_config(
name = "tsconfig_pkg",
src = "tsconfig.pkg.json",
visibility = ["//:__subpackages__"],
deps = [":tsconfig_base"],
)
ts_config(
name = "tsconfig_pkg_strict",
src = "tsconfig.pkg_strict.json",
visibility = ["//:__subpackages__"],
deps = [":tsconfig_base"],
)
ts_config(
name = "tsconfig_pkg_js",
src = "tsconfig.pkg_js.json",
visibility = ["//:__subpackages__"],
deps = [":tsconfig_base"],
)
# See https://github.com/aspect-build/rules_swc/blob/f35b63d621f6ff7cd7ca194a1061f7cdd59af07e/docs/tsconfig.md#maintain-two-files
json5_bin.json5(
name = "tsconfig_pkg_json_without_comments",
srcs = ["tsconfig.pkg.json"],
outs = ["tsconfig.pkg.json_without_comments"],
args = ["tsconfig.pkg.json -o tsconfig.pkg.json_without_comments"],
)
jq_test(
name = "ensure_swcrc_pkg_is_synced_test",
file1 = ":tsconfig_pkg_json_without_comments",
file2 = ".swcrc_pkg",
filter1 = ".compilerOptions.paths",
filter2 = ".jsc.paths",
)
json5_bin.json5(
name = "tsconfig_pkg_strict_json_without_comments",
srcs = ["tsconfig.pkg_strict.json"],
outs = ["tsconfig.pkg_strict.json_without_comments"],
args = ["tsconfig.pkg_strict.json -o tsconfig.pkg_strict.json_without_comments"],
)
jq_test(
name = "ensure_swcrc_pkg_strict_is_synced_test",
file1 = ":tsconfig_pkg_strict_json_without_comments",
file2 = ".swcrc_pkg_strict",
filter1 = ".compilerOptions.paths",
filter2 = ".jsc.paths",
)