blob: 49fcf2b4f96cbf22251de6b723d4a10841ebfb4a [file]
load("@build_bazel_rules_nodejs//:index.bzl", "pkg_web")
load("@npm//@bazel/concatjs:index.bzl", "concatjs_devserver", "ts_library")
load("@npm//@bazel/protractor:index.bzl", "protractor_web_test_suite")
load("@npm//@bazel/rollup:index.bzl", "rollup_bundle")
load("@npm//@bazel/terser:index.bzl", "terser_minified")
load("@npm//@bazel/typescript:index.bzl", "ts_project")
load("@npm//html-insert-assets:index.bzl", "html_insert_assets")
load("@npm//http-server:index.bzl", "http_server")
package(default_visibility = ["//visibility:public"])
ts_library(
name = "app",
srcs = ["app.ts"],
)
concatjs_devserver(
name = "devserver",
# We'll collect all the devmode JS sources from these TypeScript libraries
deps = [":app"],
)
rollup_bundle(
name = "bundle",
entry_point = ":app.ts",
deps = [":app"],
)
terser_minified(
name = "bundle.min",
src = ":bundle",
)
_ASSETS = [
":bundle.min",
"//styles:base.css",
"//styles:test.css",
]
# Copy index.html to the output folder, adding <script> and <link> tags
html_insert_assets(
name = "inject_tags",
outs = ["index.html"],
args = [
"--out=$@",
"--html=$(execpath :index.tmpl.html)",
"--roots=$(RULEDIR)",
"--assets",
] + ["$(execpaths %s)" % a for a in _ASSETS],
data = [":index.tmpl.html"] + _ASSETS,
)
pkg_web(
name = "package",
srcs = [":inject_tags"] + _ASSETS,
)
http_server(
name = "prodserver",
data = [":package"],
templated_args = ["package"],
)
# This could also be `ts_library` but we mix them here to illustrate
ts_project(
name = "tsconfig-test",
testonly = 1,
srcs = ["app.e2e-spec.ts"],
extends = "tsconfig.json",
tsconfig = "tsconfig-test.json",
deps = [
"@npm//@types/jasmine",
"@npm//@types/node",
"@npm//protractor",
],
)
protractor_web_test_suite(
name = "prodserver_test",
srcs = ["app.e2e-spec.js"],
on_prepare = ":protractor.on-prepare.js",
server = "//:prodserver",
)
protractor_web_test_suite(
name = "devserver_test",
srcs = ["app.e2e-spec.js"],
on_prepare = ":protractor.on-prepare.js",
server = "//:devserver",
)
# Just a dummy test so that we have a test target for //... on certain bazelci platforms with bazel_integration_test
sh_test(
name = "dummy_test",
srcs = ["dummy_test.sh"],
)