anki/ts/vendor.bzl
Damien Elmes 1d4b58419e add workaround for protobufjs requiring uppercase package names
I mourn the time lost trying to track this down :-(

https://github.com/protobufjs/protobuf.js/issues/1014

We can't patch the minified file in dist without essentially duplicating
it, so this change also switches from the external file to including
the src file as part of the bundle.
2021-07-10 15:24:01 +10:00

132 lines
3.7 KiB
Python

"""
Helpers to copy runtime dependencies from node_modules.
"""
load("//ts:copy.bzl", "copy_select_files")
def _npm_base_from_name(name):
return "external/npm/node_modules/{}/".format(name)
def _vendor_js_lib_impl(ctx):
base = ctx.attr.base or _npm_base_from_name(ctx.attr.name)
return copy_select_files(
ctx = ctx,
files = ctx.attr.pkg.files,
include = ctx.attr.include,
exclude = ctx.attr.exclude,
base = base,
unwanted_prefix = ctx.attr.strip_prefix,
)
vendor_js_lib = rule(
implementation = _vendor_js_lib_impl,
attrs = {
"pkg": attr.label(),
"include": attr.string_list(),
"exclude": attr.string_list(default = []),
"base": attr.string(default = ""),
"strip_prefix": attr.string(default = ""),
},
)
def pkg_from_name(name):
tail = name.split("/")[-1]
return "@npm//{0}:{1}__files".format(name, tail)
#
# These could be defined directly in BUILD files, but defining them as
# macros allows downstream projects to reuse them.
#
def copy_jquery(name = "jquery", visibility = ["//visibility:public"]):
vendor_js_lib(
name = name,
pkg = pkg_from_name(name),
include = [
"dist/jquery.min.js",
],
strip_prefix = "dist/",
visibility = visibility,
)
def copy_jquery_ui(name = "jquery-ui", visibility = ["//visibility:public"]):
vendor_js_lib(
name = name,
pkg = pkg_from_name("jquery-ui-dist"),
base = "external/npm/node_modules/jquery-ui-dist/",
include = [
"jquery-ui.min.js",
],
visibility = visibility,
)
def copy_mathjax(name = "mathjax", visibility = ["//visibility:public"]):
vendor_js_lib(
name = name,
pkg = pkg_from_name(name),
include = [
"es5/tex-chtml.js",
"es5/input/tex/extensions",
"es5/output/chtml/fonts/woff-v2",
"es5/a11y",
"es5/sre",
],
exclude = [
"es5/sre/mathmaps/mathmaps_ie.js",
],
strip_prefix = "es5/",
visibility = visibility,
)
def copy_css_browser_selector(name = "css-browser-selector", visibility = ["//visibility:public"]):
vendor_js_lib(
name = name,
pkg = pkg_from_name(name),
include = [
"css_browser_selector.min.js",
],
visibility = visibility,
)
def copy_bootstrap_js(name = "bootstrap-js", visibility = ["//visibility:public"]):
vendor_js_lib(
name = name,
pkg = pkg_from_name("bootstrap"),
include = [
"dist/js/bootstrap.bundle.min.js",
],
strip_prefix = "dist/js/",
visibility = visibility,
base = "external/npm/node_modules/bootstrap/",
)
def copy_bootstrap_css(name = "bootstrap-css", visibility = ["//visibility:public"]):
vendor_js_lib(
name = name,
pkg = pkg_from_name("bootstrap"),
include = [
"dist/css/bootstrap.min.css",
],
strip_prefix = "dist/css/",
visibility = visibility,
)
def copy_bootstrap_icons(name = "bootstrap-icons", icons = [], visibility = ["//visibility:public"]):
vendor_js_lib(
name = name,
pkg = pkg_from_name(name),
include = ["icons/{}".format(icon) for icon in icons],
strip_prefix = "icons/",
visibility = visibility,
)
def copy_mdi_icons(name = "mdi-icons", icons = [], visibility = ["//visibility:public"]):
vendor_js_lib(
name = name,
pkg = pkg_from_name("@mdi/svg"),
base = _npm_base_from_name("@mdi/svg"),
include = ["svg/{}".format(icon) for icon in icons],
strip_prefix = "svg/",
visibility = visibility,
)