test: Add bundle symbol extractor tool (#22002)

This tool will be used for extracting symbols out of bundles so that
we can assert that only whitelisted symbols are allowed.

PR Close #22002
This commit is contained in:
Miško Hevery
2018-02-02 15:08:25 -08:00
committed by Miško Hevery
parent 6435ecd3c6
commit 20a900b648
22 changed files with 1172 additions and 5 deletions

View File

@ -1,6 +1,7 @@
package(default_visibility = ["//visibility:public"])
load("//tools:defaults.bzl", "ts_library")
load("//tools/symbol-extractor:index.bzl", "js_expected_symbol_test")
load("//packages/bazel/src:ng_rollup_bundle.bzl", "ng_rollup_bundle")
load("@build_bazel_rules_nodejs//:defs.bzl", "jasmine_node_test")
@ -31,7 +32,9 @@ ts_library(
name = "test_lib",
testonly = 1,
srcs = ["domino_typings.d.ts"] + glob(["*_spec.ts"]),
deps = ["//packages:types"],
deps = [
"//packages:types",
],
)
jasmine_node_test(
@ -44,3 +47,9 @@ jasmine_node_test(
],
deps = [":test_lib"],
)
js_expected_symbol_test(
name = "symbol_test",
src = ":bundle.min_debug.js",
golden = ":bundle.golden_symbols.json",
)

View File

@ -0,0 +1,83 @@
[
{
"name": "EMPTY$1"
},
{
"name": "NO_CHANGE"
},
{
"name": "Symbol$1"
},
{
"name": "__global$1"
},
{
"name": "__self$1"
},
{
"name": "__window$1"
},
{
"name": "_renderCompCount"
},
{
"name": "_root"
},
{
"name": "canInsertNativeNode"
},
{
"name": "createLNode"
},
{
"name": "createLView"
},
{
"name": "domRendererFactory3"
},
{
"name": "enterView"
},
{
"name": "executeHooks"
},
{
"name": "findFirstRNode"
},
{
"name": "getDirectiveInstance"
},
{
"name": "getNextLNodeWithProjection"
},
{
"name": "getNextOrParentSiblingNode"
},
{
"name": "invertObject"
},
{
"name": "isProceduralRenderer"
},
{
"name": "leaveView"
},
{
"name": "locateHostElement"
},
{
"name": "noop$2"
},
{
"name": "refreshDynamicChildren"
},
{
"name": "renderComponentOrTemplate"
},
{
"name": "renderEmbeddedTemplate"
},
{
"name": "stringify$1"
}
]

View File

@ -18,10 +18,8 @@ import * as domino from 'domino';
describe('treeshaking with uglify', () => {
let content: string;
beforeAll(() => {
content = fs.readFileSync(
path.join(process.env['TEST_SRCDIR'], PACKAGE, 'bundle.min_debug.js'), UTF8);
});
const contentPath = require.resolve(path.join(PACKAGE, 'bundle.min_debug.js'));
beforeAll(() => { content = fs.readFileSync(contentPath, UTF8); });
it('should drop unused TypeScript helpers',
() => { expect(content).not.toContain('__asyncGenerator'); });