
rules_nodejs maintainers suggest to upgrade to upcoming rules_nodejs version 2.0.0. The new version has breaking change how loading of the external repositories work. New approach makes WORKSPACE ordering easier since we won’t need rules_nodejs install_bazel_dependencies anymore. ts_setup_workspace has been a no-op since 1.0 when requirejs was vendored for ts_devserver. Therefore ts_setup_workspace is a no-op and can be removed. Bug: Issue 13090 Change-Id: If48daa15ca31627129eab7b865971124792336cc
150 lines
5.1 KiB
Python
150 lines
5.1 KiB
Python
load("//tools/bzl:genrule2.bzl", "genrule2")
|
|
load("@npm//@bazel/rollup:index.bzl", "rollup_bundle")
|
|
|
|
def _get_ts_compiled_path(outdir, file_name):
|
|
"""Calculates the typescript output path for a file_name.
|
|
|
|
Args:
|
|
outdir: the typescript output directory (relative to polygerrit-ui/app/)
|
|
file_name: the original file name (relative to polygerrit-ui/app/)
|
|
|
|
Returns:
|
|
String - the path to the file produced by the typescript compiler
|
|
"""
|
|
if file_name.endswith(".js"):
|
|
return outdir + "/" + file_name
|
|
if file_name.endswith(".ts"):
|
|
return outdir + "/" + file_name[:-2] + "js"
|
|
fail("The file " + file_name + " has unsupported extension")
|
|
|
|
def _get_ts_output_files(outdir, srcs):
|
|
"""Calculates the files paths produced by the typescript compiler
|
|
|
|
Args:
|
|
outdir: the typescript output directory (relative to polygerrit-ui/app/)
|
|
srcs: list of input files (all paths relative to polygerrit-ui/app/)
|
|
|
|
Returns:
|
|
List of strings
|
|
"""
|
|
result = []
|
|
for f in srcs:
|
|
if f.endswith(".d.ts"):
|
|
continue
|
|
result.append(_get_ts_compiled_path(outdir, f))
|
|
return result
|
|
|
|
def compile_ts(name, srcs, ts_outdir):
|
|
"""Compiles srcs files with the typescript compiler
|
|
|
|
Args:
|
|
name: rule name
|
|
srcs: list of input files (.js, .d.ts and .ts)
|
|
ts_outdir: typescript output directory
|
|
|
|
Returns:
|
|
The list of compiled files
|
|
"""
|
|
ts_rule_name = name + "_ts_compiled"
|
|
|
|
# List of files produced by the typescript compiler
|
|
generated_js = _get_ts_output_files(ts_outdir, srcs)
|
|
|
|
# Run the compiler
|
|
native.genrule(
|
|
name = ts_rule_name,
|
|
srcs = srcs + [
|
|
":tsconfig.json",
|
|
"@ui_npm//:node_modules",
|
|
],
|
|
outs = generated_js,
|
|
cmd = " && ".join([
|
|
"$(location //tools/node_tools:tsc-bin) --project $(location :tsconfig.json) --outdir $(RULEDIR)/" + ts_outdir + " --baseUrl ./external/ui_npm/node_modules",
|
|
]),
|
|
tools = ["//tools/node_tools:tsc-bin"],
|
|
)
|
|
|
|
return generated_js
|
|
|
|
def polygerrit_bundle(name, srcs, outs, entry_point):
|
|
"""Build .zip bundle from source code
|
|
|
|
Args:
|
|
name: rule name
|
|
srcs: source files
|
|
outs: array with a single item - the output file name
|
|
entry_point: application js entry-point
|
|
"""
|
|
|
|
app_name = entry_point.split(".js")[0].split("/").pop() # eg: gr-app
|
|
|
|
native.filegroup(
|
|
name = app_name + "-full-src",
|
|
srcs = srcs + [
|
|
"@ui_npm//:node_modules",
|
|
],
|
|
)
|
|
|
|
rollup_bundle(
|
|
name = app_name + "-bundle-js",
|
|
srcs = [app_name + "-full-src"],
|
|
config_file = ":rollup.config.js",
|
|
entry_point = entry_point,
|
|
rollup_bin = "//tools/node_tools:rollup-bin",
|
|
sourcemap = "hidden",
|
|
deps = [
|
|
"@tools_npm//rollup-plugin-node-resolve",
|
|
],
|
|
)
|
|
|
|
native.filegroup(
|
|
name = name + "_app_sources",
|
|
srcs = [
|
|
app_name + "-bundle-js.js",
|
|
],
|
|
)
|
|
|
|
native.filegroup(
|
|
name = name + "_css_sources",
|
|
srcs = native.glob(["styles/**/*.css"]),
|
|
)
|
|
|
|
native.filegroup(
|
|
name = name + "_top_sources",
|
|
srcs = [
|
|
"favicon.ico",
|
|
],
|
|
)
|
|
|
|
# Preserve bower_components directory in the final directory layout to
|
|
# avoid plugins break
|
|
genrule2(
|
|
name = name,
|
|
srcs = [
|
|
name + "_app_sources",
|
|
name + "_css_sources",
|
|
name + "_top_sources",
|
|
"//lib/fonts:robotofonts",
|
|
"//lib/js:highlightjs__files",
|
|
"@ui_npm//:node_modules/@webcomponents/webcomponentsjs/webcomponents-lite.js",
|
|
"@ui_npm//@polymer/font-roboto-local",
|
|
"@ui_npm//:node_modules/@polymer/font-roboto-local/package.json",
|
|
],
|
|
outs = outs,
|
|
cmd = " && ".join([
|
|
"FONT_DIR=$$(dirname $(location @ui_npm//:node_modules/@polymer/font-roboto-local/package.json))/fonts",
|
|
"mkdir -p $$TMP/polygerrit_ui/{styles/themes,fonts/{roboto,robotomono},bower_components/{highlightjs,webcomponentsjs},elements}",
|
|
"for f in $(locations " + name + "_app_sources); do ext=$${f##*.}; cp -p $$f $$TMP/polygerrit_ui/elements/" + app_name + ".$$ext; done",
|
|
"cp $(locations //lib/fonts:robotofonts) $$TMP/polygerrit_ui/fonts/",
|
|
"for f in $(locations " + name + "_top_sources); do cp $$f $$TMP/polygerrit_ui/; done",
|
|
"for f in $(locations " + name + "_css_sources); do cp $$f $$TMP/polygerrit_ui/styles; done",
|
|
"for f in $(locations //lib/js:highlightjs__files); do cp $$f $$TMP/polygerrit_ui/bower_components/highlightjs/ ; done",
|
|
"cp $(location @ui_npm//:node_modules/@webcomponents/webcomponentsjs/webcomponents-lite.js) $$TMP/polygerrit_ui/bower_components/webcomponentsjs/webcomponents-lite.js",
|
|
"cp $$FONT_DIR/roboto/*.ttf $$TMP/polygerrit_ui/fonts/roboto/",
|
|
"cp $$FONT_DIR/robotomono/*.ttf $$TMP/polygerrit_ui/fonts/robotomono/",
|
|
"cd $$TMP",
|
|
"find . -exec touch -t 198001010000 '{}' ';'",
|
|
"zip -qr $$ROOT/$@ *",
|
|
]),
|
|
)
|