build: rules_nodejs 0.26.0 & use @npm instead of @ngdeps now that downstream angular build uses angular bundles (#29063)
* removed /tools/http_server and uses http_server from rules_nodejs * updated bazel schematics to use angular bundles PR Close #29063
This commit is contained in:

committed by
Kara Erickson

parent
2edb87e7f8
commit
ea495d958f
@ -1,6 +1,6 @@
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
load("@npm_bazel_typescript//:defs.bzl", "ts_config")
|
||||
load("@npm_bazel_typescript//:index.bzl", "ts_config")
|
||||
|
||||
exports_files(["tsconfig.json"])
|
||||
|
||||
|
@ -1,15 +1,14 @@
|
||||
"""Re-export of some bazel rules with repository-wide defaults."""
|
||||
|
||||
load("@npm_bazel_karma//:defs.bzl", _ts_web_test_suite = "ts_web_test_suite")
|
||||
load("@build_bazel_rules_nodejs//:defs.bzl", _jasmine_node_test = "jasmine_node_test", _nodejs_binary = "nodejs_binary", _npm_package = "npm_package")
|
||||
load("@npm_bazel_typescript//:defs.bzl", _ts_library = "ts_library")
|
||||
load("@npm_bazel_karma//:index.bzl", _ts_web_test_suite = "ts_web_test_suite")
|
||||
load("@npm_bazel_jasmine//:index.bzl", _jasmine_node_test = "jasmine_node_test")
|
||||
load("@build_bazel_rules_nodejs//:defs.bzl", _nodejs_binary = "nodejs_binary", _npm_package = "npm_package")
|
||||
load("@npm_bazel_typescript//:index.bzl", _ts_library = "ts_library")
|
||||
load("//packages/bazel:index.bzl", _ng_module = "ng_module", _ng_package = "ng_package")
|
||||
load("//packages/bazel/src:ng_rollup_bundle.bzl", _ng_rollup_bundle = "ng_rollup_bundle")
|
||||
|
||||
_DEFAULT_TSCONFIG_BUILD = "//packages:tsconfig-build.json"
|
||||
_DEFAULT_TSCONFIG_TEST = "//packages:tsconfig-test"
|
||||
_DEFAULT_TS_TYPINGS = "@ngdeps//typescript:typescript__typings"
|
||||
_DEFAULT_KARMA_BIN = "@ngdeps//@bazel/karma/bin:karma"
|
||||
_INTERNAL_NG_MODULE_COMPILER = "//packages/bazel/src/ngc-wrapped"
|
||||
_INTERNAL_NG_MODULE_XI18N = "//packages/bazel/src/ngc-wrapped:xi18n"
|
||||
_INTERNAL_NG_PACKAGER_PACKAGER = "//packages/bazel/src/ng_package:packager"
|
||||
@ -78,11 +77,11 @@ def _default_module_name(testonly):
|
||||
|
||||
def ts_library(tsconfig = None, testonly = False, deps = [], module_name = None, **kwargs):
|
||||
"""Default values for ts_library"""
|
||||
deps = deps + ["@ngdeps//tslib"]
|
||||
deps = deps + ["@npm//tslib"]
|
||||
if testonly:
|
||||
# Match the types[] in //packages:tsconfig-test.json
|
||||
deps.append("@ngdeps//@types/jasmine")
|
||||
deps.append("@ngdeps//@types/node")
|
||||
deps.append("@npm//@types/jasmine")
|
||||
deps.append("@npm//@types/node")
|
||||
if not tsconfig:
|
||||
if testonly:
|
||||
tsconfig = _DEFAULT_TSCONFIG_TEST
|
||||
@ -96,18 +95,17 @@ def ts_library(tsconfig = None, testonly = False, deps = [], module_name = None,
|
||||
tsconfig = tsconfig,
|
||||
testonly = testonly,
|
||||
deps = deps,
|
||||
node_modules = _DEFAULT_TS_TYPINGS,
|
||||
module_name = module_name,
|
||||
**kwargs
|
||||
)
|
||||
|
||||
def ng_module(name, tsconfig = None, entry_point = None, testonly = False, deps = [], module_name = None, **kwargs):
|
||||
"""Default values for ng_module"""
|
||||
deps = deps + ["@ngdeps//tslib"]
|
||||
deps = deps + ["@npm//tslib"]
|
||||
if testonly:
|
||||
# Match the types[] in //packages:tsconfig-test.json
|
||||
deps.append("@ngdeps//@types/jasmine")
|
||||
deps.append("@ngdeps//@types/node")
|
||||
deps.append("@npm//@types/jasmine")
|
||||
deps.append("@npm//@types/node")
|
||||
if not tsconfig:
|
||||
if testonly:
|
||||
tsconfig = _DEFAULT_TSCONFIG_TEST
|
||||
@ -126,7 +124,6 @@ def ng_module(name, tsconfig = None, entry_point = None, testonly = False, deps
|
||||
deps = deps,
|
||||
compiler = _INTERNAL_NG_MODULE_COMPILER,
|
||||
ng_xi18n = _INTERNAL_NG_MODULE_XI18N,
|
||||
node_modules = _DEFAULT_TS_TYPINGS,
|
||||
module_name = module_name,
|
||||
**kwargs
|
||||
)
|
||||
@ -138,7 +135,7 @@ def ng_package(name, readme_md = None, license_banner = None, deps = [], **kwarg
|
||||
if not license_banner:
|
||||
license_banner = "//packages:license-banner.txt"
|
||||
deps = deps + [
|
||||
"@ngdeps//tslib",
|
||||
"@npm//tslib",
|
||||
]
|
||||
|
||||
_ng_package(
|
||||
@ -164,7 +161,7 @@ def ts_web_test_suite(bootstrap = [], deps = [], **kwargs):
|
||||
if not bootstrap:
|
||||
bootstrap = ["//:web_test_bootstrap_scripts"]
|
||||
local_deps = [
|
||||
"@ngdeps//node_modules/tslib:tslib.js",
|
||||
"@npm//node_modules/tslib:tslib.js",
|
||||
"//tools/rxjs:rxjs_umd_modules",
|
||||
"//tools/testing:browser",
|
||||
] + deps
|
||||
@ -172,7 +169,6 @@ def ts_web_test_suite(bootstrap = [], deps = [], **kwargs):
|
||||
_ts_web_test_suite(
|
||||
bootstrap = bootstrap,
|
||||
deps = local_deps,
|
||||
karma = _DEFAULT_KARMA_BIN,
|
||||
# Run unit tests on local Chromium by default.
|
||||
# You can exclude tests based on tags, e.g. to skip Firefox testing,
|
||||
# `yarn bazel test --test_tag_filters=-browser:firefox-local [targets]`
|
||||
@ -192,7 +188,7 @@ def nodejs_binary(data = [], **kwargs):
|
||||
_nodejs_binary(
|
||||
# Pass-thru --define=compile=foo as an environment variable
|
||||
configuration_env_vars = ["compile"],
|
||||
data = data + ["@ngdeps//source-map-support"],
|
||||
data = data + ["@npm//source-map-support"],
|
||||
**kwargs
|
||||
)
|
||||
|
||||
@ -200,28 +196,28 @@ def jasmine_node_test(deps = [], **kwargs):
|
||||
"""Default values for jasmine_node_test"""
|
||||
deps = deps + [
|
||||
# Very common dependencies for tests
|
||||
"@ngdeps//chokidar",
|
||||
"@ngdeps//domino",
|
||||
"@ngdeps//jasmine",
|
||||
"@ngdeps//jasmine-core",
|
||||
"@ngdeps//mock-fs",
|
||||
"@ngdeps//reflect-metadata",
|
||||
"@ngdeps//source-map-support",
|
||||
"@ngdeps//tslib",
|
||||
"@ngdeps//xhr2",
|
||||
"@npm//chokidar",
|
||||
"@npm//domino",
|
||||
"@npm//jasmine-core",
|
||||
"@npm//mock-fs",
|
||||
"@npm//reflect-metadata",
|
||||
"@npm//source-map-support",
|
||||
"@npm//tslib",
|
||||
"@npm//xhr2",
|
||||
]
|
||||
_jasmine_node_test(
|
||||
deps = deps,
|
||||
# Pass-thru --define=compile=foo as an environment variable
|
||||
configuration_env_vars = ["compile"],
|
||||
jasmine = "@npm//jasmine",
|
||||
**kwargs
|
||||
)
|
||||
|
||||
def ng_rollup_bundle(deps = [], **kwargs):
|
||||
"""Default values for ng_rollup_bundle"""
|
||||
deps = deps + [
|
||||
"@ngdeps//tslib",
|
||||
"@ngdeps//reflect-metadata",
|
||||
"@npm//tslib",
|
||||
"@npm//reflect-metadata",
|
||||
]
|
||||
_ng_rollup_bundle(
|
||||
deps = deps,
|
||||
|
@ -1 +0,0 @@
|
||||
# Marker this directory is a Bazel package.
|
@ -1,11 +0,0 @@
|
||||
# http-server
|
||||
|
||||
This is a simple Bazel wrapper around the http-server npm package.
|
||||
|
||||
A typical frontend project is served by a specific server.
|
||||
For Angular's example applications, our needs are simple so we can just use http-server.
|
||||
Real projects might need history-server (for router support) or even better a full-featured production server like express.
|
||||
|
||||
We modify http-server to support serving Brotli-compressed files, which end with a `.br` extension.
|
||||
This is equivalent to gzip-compression support.
|
||||
See https://github.com/alexeagle/http-server/commits/master which points to a modified ecstatic library.
|
@ -1,20 +0,0 @@
|
||||
"""Simple Bazel wrapper around npm http-server package.
|
||||
|
||||
See https://www.npmjs.com/package/http-server
|
||||
"""
|
||||
|
||||
load("@build_bazel_rules_nodejs//:defs.bzl", "nodejs_binary")
|
||||
|
||||
def http_server(templated_args = [], **kwargs):
|
||||
# By default, we pass an argument pointing the http server to the
|
||||
# package of the caller.
|
||||
# This assumes there is an index.html in the package directory.
|
||||
if not templated_args:
|
||||
templated_args = [native.package_name()]
|
||||
|
||||
nodejs_binary(
|
||||
node_modules = "@http-server_runtime_deps//:node_modules",
|
||||
entry_point = "http-server/bin/http-server",
|
||||
templated_args = templated_args,
|
||||
**kwargs
|
||||
)
|
@ -1,9 +0,0 @@
|
||||
{
|
||||
"name": "http_server",
|
||||
"version": "1.0.0",
|
||||
"main": "index.js",
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"http-server": "github:alexeagle/http-server#97205e945b69091606ed83aa0c8489e9ce65d282"
|
||||
}
|
||||
}
|
@ -1,125 +0,0 @@
|
||||
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
async@^1.5.2:
|
||||
version "1.5.2"
|
||||
resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
|
||||
|
||||
colors@1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b"
|
||||
|
||||
corser@~2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/corser/-/corser-2.0.1.tgz#8eda252ecaab5840dcd975ceb90d9370c819ff87"
|
||||
|
||||
debug@^2.2.0:
|
||||
version "2.6.9"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
|
||||
dependencies:
|
||||
ms "2.0.0"
|
||||
|
||||
"ecstatic@github:alexeagle/node-ecstatic#833f734497f72f8cf396f162f46ad48c56ddc4ca":
|
||||
version "3.2.0"
|
||||
resolved "https://codeload.github.com/alexeagle/node-ecstatic/tar.gz/833f734497f72f8cf396f162f46ad48c56ddc4ca"
|
||||
dependencies:
|
||||
he "^1.1.1"
|
||||
mime "^1.4.1"
|
||||
minimist "^1.1.0"
|
||||
url-join "^2.0.2"
|
||||
|
||||
eventemitter3@1.x.x:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508"
|
||||
|
||||
he@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
|
||||
|
||||
http-proxy@^1.8.1:
|
||||
version "1.16.2"
|
||||
resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.2.tgz#06dff292952bf64dbe8471fa9df73066d4f37742"
|
||||
dependencies:
|
||||
eventemitter3 "1.x.x"
|
||||
requires-port "1.x.x"
|
||||
|
||||
"http-server@github:alexeagle/http-server#97205e945b69091606ed83aa0c8489e9ce65d282":
|
||||
version "0.11.1"
|
||||
resolved "https://codeload.github.com/alexeagle/http-server/tar.gz/97205e945b69091606ed83aa0c8489e9ce65d282"
|
||||
dependencies:
|
||||
colors "1.0.3"
|
||||
corser "~2.0.0"
|
||||
ecstatic "github:alexeagle/node-ecstatic#833f734497f72f8cf396f162f46ad48c56ddc4ca"
|
||||
http-proxy "^1.8.1"
|
||||
opener "~1.4.0"
|
||||
optimist "0.6.x"
|
||||
portfinder "^1.0.13"
|
||||
union "~0.4.3"
|
||||
|
||||
mime@^1.4.1:
|
||||
version "1.6.0"
|
||||
resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
|
||||
|
||||
minimist@0.0.8:
|
||||
version "0.0.8"
|
||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
|
||||
|
||||
minimist@^1.1.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
|
||||
|
||||
minimist@~0.0.1:
|
||||
version "0.0.10"
|
||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
|
||||
|
||||
mkdirp@0.5.x:
|
||||
version "0.5.1"
|
||||
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
|
||||
dependencies:
|
||||
minimist "0.0.8"
|
||||
|
||||
ms@2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
|
||||
|
||||
opener@~1.4.0:
|
||||
version "1.4.3"
|
||||
resolved "https://registry.yarnpkg.com/opener/-/opener-1.4.3.tgz#5c6da2c5d7e5831e8ffa3964950f8d6674ac90b8"
|
||||
|
||||
optimist@0.6.x:
|
||||
version "0.6.1"
|
||||
resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
|
||||
dependencies:
|
||||
minimist "~0.0.1"
|
||||
wordwrap "~0.0.2"
|
||||
|
||||
portfinder@^1.0.13:
|
||||
version "1.0.13"
|
||||
resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.13.tgz#bb32ecd87c27104ae6ee44b5a3ccbf0ebb1aede9"
|
||||
dependencies:
|
||||
async "^1.5.2"
|
||||
debug "^2.2.0"
|
||||
mkdirp "0.5.x"
|
||||
|
||||
qs@~2.3.3:
|
||||
version "2.3.3"
|
||||
resolved "https://registry.yarnpkg.com/qs/-/qs-2.3.3.tgz#e9e85adbe75da0bbe4c8e0476a086290f863b404"
|
||||
|
||||
requires-port@1.x.x:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
|
||||
|
||||
union@~0.4.3:
|
||||
version "0.4.6"
|
||||
resolved "https://registry.yarnpkg.com/union/-/union-0.4.6.tgz#198fbdaeba254e788b0efcb630bc11f24a2959e0"
|
||||
dependencies:
|
||||
qs "~2.3.3"
|
||||
|
||||
url-join@^2.0.2:
|
||||
version "2.0.5"
|
||||
resolved "https://registry.yarnpkg.com/url-join/-/url-join-2.0.5.tgz#5af22f18c052a000a48d7b82c5e9c2e2feeda728"
|
||||
|
||||
wordwrap@~0.0.2:
|
||||
version "0.0.3"
|
||||
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
|
@ -1,46 +0,0 @@
|
||||
# Copyright Google Inc. All Rights Reserved.
|
||||
#
|
||||
# Use of this source code is governed by an MIT-style license that can be
|
||||
# found in the LICENSE file at https://angular.io/license
|
||||
|
||||
"Install angular source dependencies"
|
||||
|
||||
load("@build_bazel_rules_nodejs//:package.bzl", "check_rules_nodejs_version")
|
||||
load("@build_bazel_rules_nodejs//:defs.bzl", "yarn_install")
|
||||
load("@angular//packages/bazel/src:ng_setup_workspace.bzl", _ng_setup_workspace = "ng_setup_workspace")
|
||||
|
||||
def ng_setup_workspace():
|
||||
"""This repository rule should be called from your WORKSPACE file.
|
||||
|
||||
It creates some additional Bazel external repositories that are used internally
|
||||
to build angular
|
||||
"""
|
||||
|
||||
# The NodeJS rules version must be at least v0.15.3 because:
|
||||
# - 0.15.2 Re-introduced the prod_only attribute on yarn_install
|
||||
# - 0.15.3 Includes a fix for the `jasmine_node_test` rule ignoring target tags
|
||||
# - 0.16.8 Supports npm installed bazel workspaces
|
||||
check_rules_nodejs_version("0.16.8")
|
||||
|
||||
yarn_install(
|
||||
name = "ngdeps",
|
||||
package_json = "@angular//:package.json",
|
||||
yarn_lock = "@angular//:yarn.lock",
|
||||
data = ["@angular//:tools/yarn/check-yarn.js", "@angular//:tools/postinstall-patches.js"],
|
||||
# Don't install devDependencies, they are large and not used under Bazel
|
||||
prod_only = True,
|
||||
)
|
||||
|
||||
yarn_install(
|
||||
name = "ts-api-guardian_deps",
|
||||
package_json = "@angular//tools/ts-api-guardian:package.json",
|
||||
yarn_lock = "@angular//tools/ts-api-guardian:yarn.lock",
|
||||
)
|
||||
|
||||
yarn_install(
|
||||
name = "http-server_runtime_deps",
|
||||
package_json = "@angular//tools/http-server:package.json",
|
||||
yarn_lock = "@angular//tools/http-server:yarn.lock",
|
||||
)
|
||||
|
||||
_ng_setup_workspace()
|
14
tools/npm/@angular_bazel/index.js
Executable file
14
tools/npm/@angular_bazel/index.js
Executable file
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* @license
|
||||
* Copyright Google Inc. All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style license that can be
|
||||
* found in the LICENSE file at https://angular.io/license
|
||||
*/
|
||||
/**
|
||||
* @fileoverview This files is only here so that @npm//@angular/bazel/bin:ngc-wrapped
|
||||
* is a valid target as it is part of `esm5_outputs_aspect` in /packages/bazel/src/esm5.bzl
|
||||
* TODO(gregmagolan): fix esm5_outputs_aspect so that this is not required
|
||||
*/
|
||||
|
||||
throw new Error('should never be run');
|
6
tools/npm/@angular_bazel/package.json
Normal file
6
tools/npm/@angular_bazel/package.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"version": "0.0.0",
|
||||
"bin": {
|
||||
"ngc-wrapped": "./index.js"
|
||||
}
|
||||
}
|
@ -1,8 +0,0 @@
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
# Empty filegroup here so that @npm//@angular/bazel is a valid Bazel target
|
||||
# for the @angular//:@angular/bazel/ngc-wrapped target
|
||||
filegroup(
|
||||
name = "bazel",
|
||||
srcs = [],
|
||||
)
|
@ -1,8 +0,0 @@
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
# Alias here so that @npm//@bazel/typescript is a valid Bazel target
|
||||
# which is reference in npm_bazel_typescript/BUILD.bazel
|
||||
alias(
|
||||
name = "typescript",
|
||||
actual = "@ngdeps//@bazel/typescript",
|
||||
)
|
@ -1,7 +0,0 @@
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
# Alias here so that references actual in @ngdeps
|
||||
alias(
|
||||
name = "tsc_wrapped",
|
||||
actual = "@ngdeps//@bazel/typescript/bin:tsc_wrapped",
|
||||
)
|
@ -1 +0,0 @@
|
||||
# Marker file that this directory is a bazel package
|
@ -1 +0,0 @@
|
||||
workspace(name = "npm")
|
@ -4,6 +4,6 @@ filegroup(
|
||||
name = "rxjs_umd_modules",
|
||||
srcs = [
|
||||
":rxjs_shims.js",
|
||||
"@ngdeps//node_modules/rxjs:bundles/rxjs.umd.js",
|
||||
"@npm//node_modules/rxjs:bundles/rxjs.umd.js",
|
||||
],
|
||||
)
|
||||
|
@ -14,7 +14,7 @@ ts_library(
|
||||
),
|
||||
deps = [
|
||||
"//packages:types",
|
||||
"@ngdeps//typescript",
|
||||
"@npm//typescript",
|
||||
],
|
||||
)
|
||||
|
||||
@ -28,7 +28,7 @@ ts_library(
|
||||
deps = [
|
||||
":lib",
|
||||
"//packages:types",
|
||||
"@ngdeps//typescript",
|
||||
"@npm//typescript",
|
||||
],
|
||||
)
|
||||
|
||||
|
@ -18,7 +18,7 @@ def js_expected_symbol_test(name, src, golden, data = [], **kwargs):
|
||||
golden,
|
||||
Label("//tools/symbol-extractor:lib"),
|
||||
Label("@bazel_tools//tools/bash/runfiles"),
|
||||
Label("@ngdeps//typescript"),
|
||||
Label("@npm//typescript"),
|
||||
]
|
||||
entry_point = "angular/tools/symbol-extractor/cli.js"
|
||||
|
||||
|
@ -23,7 +23,7 @@ ts_library(
|
||||
"//packages/core/testing",
|
||||
"//packages/platform-server",
|
||||
"//packages/platform-server/testing",
|
||||
"@ngdeps//domino",
|
||||
"@npm//domino",
|
||||
],
|
||||
)
|
||||
|
||||
|
@ -3,7 +3,7 @@ load(
|
||||
"jasmine_node_test",
|
||||
"npm_package",
|
||||
)
|
||||
load("@npm_bazel_typescript//:defs.bzl", "ts_library")
|
||||
load("@npm_bazel_typescript//:index.bzl", "ts_library")
|
||||
|
||||
exports_files(["bin/ts-api-guardian"])
|
||||
|
||||
|
Reference in New Issue
Block a user