Pete Bacon Darwin f3ccd29e7b feat(ngcc): implement a program-based entry-point finder (#37075)
This finder is designed to only process entry-points that are reachable
by the program defined by a tsconfig.json file.

It is triggered by calling `mainNgcc()` with the `findEntryPointsFromTsConfigProgram`
option set to true. It is ignored if a `targetEntryPointPath` has been
provided as well.

It is triggered from the command line by adding the `--use-program-dependencies`
option, which is also ignored if the `--target` option has been provided.

Using this option can speed up processing in cases where there is a large
number of dependencies installed but only a small proportion of the
entry-points are actually imported into the application.

PR Close #37075
2020-06-04 09:22:40 -07:00

109 lines
3.5 KiB
Python

load("@npm//@babel/cli:index.bzl", "babel")
load("//tools:defaults.bzl", "jasmine_node_test", "ts_library")
package(default_visibility = ["//visibility:public"])
ts_library(
name = "test_lib",
testonly = True,
srcs = glob(
["**/*.ts"],
exclude = ["integration/**/*.ts"],
),
deps = [
"//packages/compiler",
"//packages/compiler-cli",
"//packages/compiler-cli/ngcc",
"//packages/compiler-cli/ngcc/test/helpers",
"//packages/compiler-cli/src/ngtsc/diagnostics",
"//packages/compiler-cli/src/ngtsc/file_system",
"//packages/compiler-cli/src/ngtsc/file_system/testing",
"//packages/compiler-cli/src/ngtsc/imports",
"//packages/compiler-cli/src/ngtsc/partial_evaluator",
"//packages/compiler-cli/src/ngtsc/reflection",
"//packages/compiler-cli/src/ngtsc/testing",
"//packages/compiler-cli/src/ngtsc/transform",
"//packages/compiler-cli/src/ngtsc/translator",
"//packages/compiler-cli/test/helpers",
"@npm//@types/convert-source-map",
"@npm//convert-source-map",
"@npm//dependency-graph",
"@npm//magic-string",
"@npm//sourcemap-codec",
"@npm//typescript",
"@npm//yargs",
],
)
jasmine_node_test(
name = "test",
bootstrap = ["//tools/testing:node_no_angular_es5"],
data = [
"//packages/compiler-cli/test/ngtsc/fake_core:npm_package",
],
deps = [
":test_lib",
],
)
ts_library(
name = "integration_lib",
testonly = True,
srcs = glob(
["integration/**/*.ts"],
),
deps = [
"//packages/compiler-cli/ngcc",
"//packages/compiler-cli/ngcc/test/helpers",
"//packages/compiler-cli/src/ngtsc/file_system",
"//packages/compiler-cli/src/ngtsc/file_system/testing",
"//packages/compiler-cli/src/ngtsc/testing",
"//packages/compiler-cli/test/helpers",
"@npm//rxjs",
"@npm//typescript",
],
)
# As of version 10, the release packages do not contain esm2015 output anymore. The ngcc
# integration tests intend to test ES5 features though, so we downlevel the flat esm2015
# file to ES5 using Babel. We can then link that into the mock file system as if the Angular
# core package is still built with previous APF versions where esm5 output was shipped. This
# allows us to ensure that ngcc properly processes libraries with esm5 output. **Note**: We are
# using Babel instead of `tsc` as TypeScript does not allow us to downlevel the file without
# setting the module resolution to either `amd` or `system`. We want to preserve ES modules.
babel(
name = "fesm5_angular_core",
outs = ["fesm5_angular_core.js"],
args = [
"$(execpath //packages/core:npm_package)/fesm2015/core.js",
"--presets @babel/preset-env",
"--out-file $(execpath fesm5_angular_core.js)",
],
data = [
"//packages/core:npm_package",
"@npm//@babel/preset-env",
],
)
jasmine_node_test(
name = "integration",
timeout = "long",
bootstrap = ["//tools/testing:node_no_angular_es5"],
data = [
":fesm5_angular_core",
"//packages/common:npm_package",
"//packages/core:npm_package",
"@npm//rxjs",
],
shard_count = 4,
tags = [
# Disabled in AOT mode because we want ngcc to compile non-AOT Angular packages.
"no-ivy-aot",
],
deps = [
":integration_lib",
"@npm//canonical-path",
"@npm//convert-source-map",
],
)