Compare commits
199 Commits
Author | SHA1 | Date | |
---|---|---|---|
78de6211e3 | |||
104c786b90 | |||
9680f4c991 | |||
e63390daf8 | |||
af99f9e98e | |||
8398f9d54c | |||
da5d91b97b | |||
ba1ef6b1a5 | |||
acebf6464e | |||
e367aa2ca5 | |||
0ee2b755e2 | |||
f213c7a643 | |||
947c076ff2 | |||
6600bea815 | |||
6cd61aeb1c | |||
581b991432 | |||
4014aab300 | |||
b523844966 | |||
8d322c89b7 | |||
08a7c6f0b5 | |||
31f06ee3f9 | |||
1c5b157f10 | |||
38fe47316c | |||
9488da0d0a | |||
5a8c560373 | |||
d8675c7e72 | |||
bf29bd95a6 | |||
1775498b40 | |||
1eea575dfc | |||
0c624b2ca7 | |||
8659451d13 | |||
2565f67956 | |||
38f4dcd5e1 | |||
6e380cff82 | |||
76a84706b6 | |||
39302ba923 | |||
1c71db846f | |||
48e4b0eb7f | |||
9fd63c3ef6 | |||
aaea3878d9 | |||
8838a1b54c | |||
e742edca78 | |||
8304343e94 | |||
2ec91443e9 | |||
be30f25da6 | |||
c426a2595f | |||
896a8a441e | |||
b1e7f4c952 | |||
d3ee9e3926 | |||
2b7116a4f3 | |||
8be20f3a3e | |||
5112669d29 | |||
3d453fe6df | |||
32a6972cdc | |||
2cd5d4c64b | |||
3248fe865f | |||
b3ea6981cd | |||
f698a6bd73 | |||
97d2673eae | |||
4e93c4f87a | |||
b5f85638f7 | |||
efd13d31fc | |||
3a45bef0e7 | |||
5b105544fc | |||
4c5cfecc56 | |||
9d2348b9af | |||
e7bca0751c | |||
45c909a237 | |||
5b76b939af | |||
261593aab1 | |||
c9ce735675 | |||
b7f95bec04 | |||
d02573d05f | |||
8ff6ed6aa3 | |||
6aaf4eac89 | |||
1d0c93622d | |||
acd6c195a0 | |||
53a9a28ec0 | |||
aa8dd74176 | |||
ed6dcce13b | |||
d170e45784 | |||
7033e7eb22 | |||
893123936b | |||
31fcb9e036 | |||
c303d44df6 | |||
73dd43170b | |||
514271ba9c | |||
8d18b49899 | |||
6b0b7d01bf | |||
079773f54e | |||
b5cb120db0 | |||
0fb78d6c94 | |||
a80a8636ba | |||
0878d67757 | |||
5e0890b3af | |||
43bac21301 | |||
4df415060b | |||
039d70efec | |||
2a71496791 | |||
617a329c24 | |||
a00eae0b62 | |||
e54dd741ef | |||
7b4c1cdbe4 | |||
5e4babeaa9 | |||
f661f460bb | |||
44f233c02c | |||
31e8a52722 | |||
e3c9f9d794 | |||
e7c4e94c9a | |||
26dc826821 | |||
287247ef05 | |||
af170d2ae9 | |||
a01ed0d7b4 | |||
a7b94783b5 | |||
789dd6a0da | |||
e5b18e810c | |||
b8f86ad7d5 | |||
6f2e8afaed | |||
699c705a8d | |||
adc869ff88 | |||
46f2dcc470 | |||
2d9c4c1d82 | |||
0757702d63 | |||
174777443d | |||
baf2d9ddbc | |||
da444984a8 | |||
84a3daf609 | |||
c88cdea9ac | |||
7b3bd219f7 | |||
dc76c14e31 | |||
0ffc1d0d21 | |||
3d1b82be67 | |||
dec7e5286f | |||
2f812f31d5 | |||
18bac15ddd | |||
a1fe52b41c | |||
033fc3e6e5 | |||
76854287e5 | |||
972550ee08 | |||
c67f490d28 | |||
edd6cb5865 | |||
7b2617f087 | |||
d9d06899f4 | |||
eccb60cd6e | |||
3420d2923a | |||
6ec91dd4ca | |||
90ddee7a71 | |||
3300331691 | |||
6f3414bd68 | |||
1b0bd6b706 | |||
cfaefa9964 | |||
a48376b26a | |||
e6d8274c38 | |||
40df016390 | |||
eee75c2eea | |||
96aefc5019 | |||
038d823943 | |||
19095835a4 | |||
b560207bf5 | |||
c5de1fb05f | |||
62a9843ed0 | |||
75a162575f | |||
5bf912599f | |||
afd76a80da | |||
bb4627786d | |||
83d67b4a83 | |||
6ba31b9b84 | |||
a1c43b39a2 | |||
af91c21fd9 | |||
c00e7ff128 | |||
3bf2f98c35 | |||
2cabced9fc | |||
b38e8674bc | |||
553f335705 | |||
dde0a32946 | |||
9789cb6507 | |||
bb1fdb6c0f | |||
44b5bf486f | |||
14bfcfb731 | |||
04ebd59961 | |||
6129cfa269 | |||
b8f269414e | |||
8ed83caa19 | |||
aebf65d0ef | |||
b667bd2224 | |||
03e8a31bf5 | |||
800e90e4ed | |||
7290053952 | |||
14890e9117 | |||
06c49b4a6b | |||
d269b111dd | |||
46b160e925 | |||
dcbc28f729 | |||
9bdffb1e5c | |||
155f40c175 | |||
8c446b05d0 | |||
2647f708b7 | |||
fa15814d75 | |||
7a62530ed1 |
@ -6,5 +6,4 @@ aio/node_modules
|
|||||||
aio/tools/examples/shared/node_modules
|
aio/tools/examples/shared/node_modules
|
||||||
integration/bazel
|
integration/bazel
|
||||||
integration/bazel-schematics/demo
|
integration/bazel-schematics/demo
|
||||||
integration/platform-server/node_modules
|
|
||||||
packages/bazel/node_modules
|
packages/bazel/node_modules
|
||||||
|
87
.bazelrc
87
.bazelrc
@ -18,8 +18,11 @@ test:debug --test_arg=--node_options=--inspect-brk --test_output=streamed --test
|
|||||||
# See https://github.com/bazelbuild/bazel/issues/4603
|
# See https://github.com/bazelbuild/bazel/issues/4603
|
||||||
build --symlink_prefix=dist/
|
build --symlink_prefix=dist/
|
||||||
|
|
||||||
|
# Disable watchfs as it causes tests to be flaky on Windows
|
||||||
|
# https://github.com/angular/angular/issues/29541
|
||||||
|
build --nowatchfs
|
||||||
|
|
||||||
# Turn off legacy external runfiles
|
# Turn off legacy external runfiles
|
||||||
build --nolegacy_external_runfiles
|
|
||||||
run --nolegacy_external_runfiles
|
run --nolegacy_external_runfiles
|
||||||
test --nolegacy_external_runfiles
|
test --nolegacy_external_runfiles
|
||||||
|
|
||||||
@ -43,7 +46,6 @@ test --incompatible_strict_action_env
|
|||||||
# This command assumes node on the path and is a workaround for
|
# This command assumes node on the path and is a workaround for
|
||||||
# https://github.com/bazelbuild/bazel/issues/4802
|
# https://github.com/bazelbuild/bazel/issues/4802
|
||||||
build:release --workspace_status_command="node ./tools/bazel_stamp_vars.js"
|
build:release --workspace_status_command="node ./tools/bazel_stamp_vars.js"
|
||||||
build:release --stamp
|
|
||||||
|
|
||||||
###############################
|
###############################
|
||||||
# Output #
|
# Output #
|
||||||
@ -60,39 +62,27 @@ test --test_output=errors
|
|||||||
# Settings for CircleCI #
|
# Settings for CircleCI #
|
||||||
################################
|
################################
|
||||||
|
|
||||||
# Bazel flags for CircleCI are in /.circleci/bazel.linux.rc and /.circleci/bazel.windows.rc
|
# Bazel flags for CircleCI are in /.circleci/bazel.rc
|
||||||
|
|
||||||
################################
|
################################
|
||||||
# Temporary Settings for Ivy #
|
# Temporary Settings for Ivy #
|
||||||
################################
|
################################
|
||||||
# To determine if the compiler used should be Ivy instead of ViewEngine, one can use `--config=ivy`
|
# to determine if the compiler used should be Ivy or ViewEngine one can use `--define=compile=aot` on
|
||||||
# on any bazel target. This is a temporary flag until codebase is permanently switched to Ivy.
|
# any bazel target. This is a temporary flag until codebase is permanently switched to Ivy.
|
||||||
build --define=angular_ivy_enabled=False
|
build --define=compile=legacy
|
||||||
|
|
||||||
build:view-engine --define=angular_ivy_enabled=False
|
###############################
|
||||||
build:ivy --define=angular_ivy_enabled=True
|
# Remote Build Execution support
|
||||||
|
# Turn on these settings with
|
||||||
|
# --config=remote
|
||||||
|
###############################
|
||||||
|
|
||||||
##################################
|
# Load default settings for Remote Build Execution.
|
||||||
# Remote Build Execution support #
|
import %workspace%/third_party/github.com/bazelbuild/bazel-toolchains/bazelrc/.bazelrc.notoolchain
|
||||||
# Turn on these settings with #
|
|
||||||
# --config=remote #
|
|
||||||
##################################
|
|
||||||
|
|
||||||
# The following --define=EXECUTOR=remote will be able to be removed
|
|
||||||
# once https://github.com/bazelbuild/bazel/issues/7254 is fixed
|
|
||||||
build:remote --define=EXECUTOR=remote
|
|
||||||
|
|
||||||
# Set a higher timeout value, just in case.
|
|
||||||
build:remote --remote_timeout=600
|
|
||||||
|
|
||||||
# Increase the default number of jobs by 50% because our build has lots of
|
# Increase the default number of jobs by 50% because our build has lots of
|
||||||
# parallelism
|
# parallelism
|
||||||
build:remote --jobs=150
|
build:remote --jobs=150
|
||||||
build:remote --google_default_credentials
|
|
||||||
|
|
||||||
# Force remote exeuctions to consider the entire run as linux
|
|
||||||
build:remote --cpu=k8
|
|
||||||
build:remote --host_cpu=k8
|
|
||||||
|
|
||||||
# Toolchain and platform related flags
|
# Toolchain and platform related flags
|
||||||
build:remote --host_javabase=@rbe_ubuntu1604_angular//java:jdk
|
build:remote --host_javabase=@rbe_ubuntu1604_angular//java:jdk
|
||||||
@ -106,21 +96,21 @@ build:remote --extra_execution_platforms=//tools:rbe_ubuntu1604-angular
|
|||||||
build:remote --host_platform=//tools:rbe_ubuntu1604-angular
|
build:remote --host_platform=//tools:rbe_ubuntu1604-angular
|
||||||
build:remote --platforms=//tools:rbe_ubuntu1604-angular
|
build:remote --platforms=//tools:rbe_ubuntu1604-angular
|
||||||
|
|
||||||
# Remote instance and caching
|
# Remote instance.
|
||||||
build:remote --remote_instance_name=projects/internal-200822/instances/default_instance
|
build:remote --remote_instance_name=projects/internal-200822/instances/default_instance
|
||||||
build:remote --project_id=internal-200822
|
build:remote --project_id=internal-200822
|
||||||
|
|
||||||
|
# Remote caching
|
||||||
build:remote --remote_cache=remotebuildexecution.googleapis.com
|
build:remote --remote_cache=remotebuildexecution.googleapis.com
|
||||||
build:remote --remote_executor=remotebuildexecution.googleapis.com
|
# By default, do not accept remote cache, to be set to true for CI based on environment
|
||||||
|
build:remote --remote_accept_cached=false
|
||||||
|
# By default, do not upload local results to cache, to be set to true for CI based on environment
|
||||||
|
build:remote --remote_upload_local_results=false
|
||||||
|
|
||||||
##################################
|
# Build Event Service Configuration
|
||||||
# Saucelabs tests settings #
|
build:remote --bes_backend=buildeventservice.googleapis.com
|
||||||
# Turn on these settings with #
|
build:remote --bes_timeout=30s
|
||||||
# --config=saucelabs #
|
build:remote --bes_results_url="https://source.cloud.google.com/results/invocations/"
|
||||||
##################################
|
|
||||||
|
|
||||||
# For saucelabs tests we don't want to enable flaky test attempts. Karma has its own integrated
|
|
||||||
# retry mechanism and we do not want to retry unnecessarily if Karma already tried multiple times.
|
|
||||||
test:saucelabs --flaky_test_attempts=1
|
|
||||||
|
|
||||||
###############################
|
###############################
|
||||||
# NodeJS rules settings
|
# NodeJS rules settings
|
||||||
@ -131,6 +121,31 @@ test:saucelabs --flaky_test_attempts=1
|
|||||||
# This allows us to avoid installing a second copy of node_modules
|
# This allows us to avoid installing a second copy of node_modules
|
||||||
common --experimental_allow_incremental_repository_updates
|
common --experimental_allow_incremental_repository_updates
|
||||||
|
|
||||||
|
# This option is changed to true in Bazel 0.27 and exposes a possible
|
||||||
|
# regression in Bazel 0.27.0.
|
||||||
|
# Error observed is in npm_package target `//packages/common/locales:package`:
|
||||||
|
# ```
|
||||||
|
# ERROR: /home/circleci/ng/packages/common/locales/BUILD.bazel:13:1: Assembling
|
||||||
|
# npm package packages/common/locales/package failed: No usable spawn strategy found
|
||||||
|
# for spawn with mnemonic SkylarkAction. Your --spawn_strategyor --strategy flags
|
||||||
|
# are probably too strict. Visit https://github.com/bazelbuild/bazel/issues/7480 for
|
||||||
|
# migration advises
|
||||||
|
# ```
|
||||||
|
# Suspect is https://github.com/bazelbuild/rules_nodejs/blob/master/internal/npm_package/npm_package.bzl#L75-L82:
|
||||||
|
# ```
|
||||||
|
# execution_requirements = {
|
||||||
|
# # Never schedule this action remotely because it's not computationally expensive.
|
||||||
|
# # It just copies files into a directory; it's not worth copying inputs and outputs to a remote worker.
|
||||||
|
# # Also don't run it in a sandbox, because it resolves an absolute path to the bazel-out directory
|
||||||
|
# # allowing the .pack and .publish runnables to work with no symlink_prefix
|
||||||
|
# # See https://github.com/bazelbuild/rules_nodejs/issues/187
|
||||||
|
# "local": "1",
|
||||||
|
# },
|
||||||
|
# ```
|
||||||
|
build --incompatible_list_based_execution_strategy_selection=false
|
||||||
|
test --incompatible_list_based_execution_strategy_selection=false
|
||||||
|
run --incompatible_list_based_execution_strategy_selection=false
|
||||||
|
|
||||||
####################################################
|
####################################################
|
||||||
# User bazel configuration
|
# User bazel configuration
|
||||||
# NOTE: This needs to be the *last* entry in the config.
|
# NOTE: This needs to be the *last* entry in the config.
|
||||||
|
@ -1,15 +0,0 @@
|
|||||||
# Settings in this file should be OS agnostic. Use the bazel.<OS>.rc files for OS specific settings.
|
|
||||||
|
|
||||||
# Don't be spammy in the logs
|
|
||||||
build --noshow_progress
|
|
||||||
|
|
||||||
# Print all the options that apply to the build.
|
|
||||||
# This helps us diagnose which options override others
|
|
||||||
# (e.g. /etc/bazel.bazelrc vs. tools/bazel.rc)
|
|
||||||
build --announce_rc
|
|
||||||
|
|
||||||
# Retry in the event of flakes, eg. https://circleci.com/gh/angular/angular/31309
|
|
||||||
test --flaky_test_attempts=2
|
|
||||||
|
|
||||||
# More details on failures
|
|
||||||
build --verbose_failures=true
|
|
@ -2,20 +2,29 @@
|
|||||||
# We do this by copying this file to /etc/bazel.bazelrc at the start of the build.
|
# We do this by copying this file to /etc/bazel.bazelrc at the start of the build.
|
||||||
# See documentation in /docs/BAZEL.md
|
# See documentation in /docs/BAZEL.md
|
||||||
|
|
||||||
# Import config items common to both Linux and Windows setups.
|
|
||||||
# https://docs.bazel.build/versions/master/guide.html#bazelrc-syntax-and-semantics
|
|
||||||
try-import %workspace%/.circleci/bazel.common.rc
|
|
||||||
|
|
||||||
# Save downloaded repositories in a location that can be cached by CircleCI. This helps us
|
# Save downloaded repositories in a location that can be cached by CircleCI. This helps us
|
||||||
# speeding up the analysis time significantly with Bazel managed node dependencies on the CI.
|
# speeding up the analysis time significantly with Bazel managed node dependencies on the CI.
|
||||||
build --repository_cache=/home/circleci/bazel_repository_cache
|
build --repository_cache=/home/circleci/bazel_repository_cache
|
||||||
|
|
||||||
|
# Don't be spammy in the logs
|
||||||
|
# TODO(gmagolan): Hide progress again once build performance improves
|
||||||
|
# Presently, CircleCI can timeout during bazel test ... with the following
|
||||||
|
# error: Too long with no output (exceeded 10m0s)
|
||||||
|
# build --noshow_progress
|
||||||
|
|
||||||
|
# Print all the options that apply to the build.
|
||||||
|
# This helps us diagnose which options override others
|
||||||
|
# (e.g. /etc/bazel.bazelrc vs. tools/bazel.rc)
|
||||||
|
build --announce_rc
|
||||||
|
|
||||||
# Workaround https://github.com/bazelbuild/bazel/issues/3645
|
# Workaround https://github.com/bazelbuild/bazel/issues/3645
|
||||||
# Bazel doesn't calculate the memory ceiling correctly when running under Docker.
|
# Bazel doesn't calculate the memory ceiling correctly when running under Docker.
|
||||||
# Limit Bazel to consuming resources that fit in CircleCI "xlarge" class
|
# Limit Bazel to consuming resources that fit in CircleCI "xlarge" class
|
||||||
# https://circleci.com/docs/2.0/configuration-reference/#resource_class
|
# https://circleci.com/docs/2.0/configuration-reference/#resource_class
|
||||||
build --local_resources=14336,8.0,1.0
|
build --local_resources=14336,8.0,1.0
|
||||||
|
|
||||||
# All build executed remotely should be done using our RBE configuration.
|
# Retry in the event of flakes, eg. https://circleci.com/gh/angular/angular/31309
|
||||||
build:remote --google_default_credentials
|
test --flaky_test_attempts=2
|
||||||
build --config=remote
|
|
||||||
|
# More details on failures
|
||||||
|
build --verbose_failures=true
|
@ -1,17 +0,0 @@
|
|||||||
# These options are enabled when running on CI
|
|
||||||
# We do this by copying this file to $env:ProgramData\bazel.bazelrc at the start of the build.
|
|
||||||
# See documentation in /docs/BAZEL.md
|
|
||||||
|
|
||||||
# Import config items common to both Linux and Windows setups.
|
|
||||||
# https://docs.bazel.build/versions/master/guide.html#bazelrc-syntax-and-semantics
|
|
||||||
try-import %workspace%/.circleci/bazel.common.rc
|
|
||||||
|
|
||||||
# Save downloaded repositories in a location that can be cached by CircleCI. This helps us
|
|
||||||
# speeding up the analysis time significantly with Bazel managed node dependencies on the CI.
|
|
||||||
build --repository_cache=C:/Users/circleci/bazel_repository_cache
|
|
||||||
|
|
||||||
# All windows jobs run on master and should use http caching
|
|
||||||
build --remote_http_cache=https://storage.googleapis.com/angular-team-cache
|
|
||||||
build --remote_accept_cached=true
|
|
||||||
build --remote_upload_local_results=true
|
|
||||||
build --google_default_credentials
|
|
File diff suppressed because it is too large
Load Diff
@ -3,6 +3,7 @@
|
|||||||
# Variables
|
# Variables
|
||||||
readonly projectDir=$(realpath "$(dirname ${BASH_SOURCE[0]})/..")
|
readonly projectDir=$(realpath "$(dirname ${BASH_SOURCE[0]})/..")
|
||||||
readonly envHelpersPath="$projectDir/.circleci/env-helpers.inc.sh";
|
readonly envHelpersPath="$projectDir/.circleci/env-helpers.inc.sh";
|
||||||
|
readonly getCommitRangePath="$projectDir/.circleci/get-commit-range.js";
|
||||||
|
|
||||||
# Load helpers and make them available everywhere (through `$BASH_ENV`).
|
# Load helpers and make them available everywhere (through `$BASH_ENV`).
|
||||||
source $envHelpersPath;
|
source $envHelpersPath;
|
||||||
@ -23,7 +24,7 @@ setPublicVar CI_BUILD_URL "$CIRCLE_BUILD_URL";
|
|||||||
# `.circleci/config.yml`. See http://chromedriver.chromium.org/downloads for a list of versions.
|
# `.circleci/config.yml`. See http://chromedriver.chromium.org/downloads for a list of versions.
|
||||||
# This variable is intended to be passed as an arg to the `webdriver-manager update` command (e.g.
|
# This variable is intended to be passed as an arg to the `webdriver-manager update` command (e.g.
|
||||||
# `"postinstall": "webdriver-manager update $CI_CHROMEDRIVER_VERSION_ARG"`).
|
# `"postinstall": "webdriver-manager update $CI_CHROMEDRIVER_VERSION_ARG"`).
|
||||||
setPublicVar CI_CHROMEDRIVER_VERSION_ARG "--versions.chrome 79.0.3945.130";
|
setPublicVar CI_CHROMEDRIVER_VERSION_ARG "--versions.chrome 75.0.3770.90";
|
||||||
setPublicVar CI_COMMIT "$CIRCLE_SHA1";
|
setPublicVar CI_COMMIT "$CIRCLE_SHA1";
|
||||||
# `CI_COMMIT_RANGE` is only used on push builds (a.k.a. non-PR, non-scheduled builds and rerun
|
# `CI_COMMIT_RANGE` is only used on push builds (a.k.a. non-PR, non-scheduled builds and rerun
|
||||||
# workflows of such builds).
|
# workflows of such builds).
|
||||||
@ -54,46 +55,36 @@ setSecretVar CI_SECRET_PAYLOAD_FIREBASE_TOKEN "$ANGULAR_PAYLOAD_TOKEN";
|
|||||||
####################################################################################################
|
####################################################################################################
|
||||||
# Define SauceLabs environment variables for CircleCI.
|
# Define SauceLabs environment variables for CircleCI.
|
||||||
####################################################################################################
|
####################################################################################################
|
||||||
setPublicVar SAUCE_USERNAME "angular-framework";
|
# In order to have a meaningful SauceLabs badge on the repo page,
|
||||||
setSecretVar SAUCE_ACCESS_KEY "0c731274ed5f-cbc9-16f4-021a-9835e39f";
|
# the angular2-ci account is used only when pushing commits to master;
|
||||||
|
# in all other cases, the regular angular-ci account is used.
|
||||||
|
if [ "${CI_PULL_REQUEST}" = "false" ] && [ "${CI_REPO_OWNER}" = "angular" ] && [ "${CI_BRANCH}" = "master" ]; then
|
||||||
|
setPublicVar SAUCE_USERNAME "angular2-ci";
|
||||||
|
setSecretVar SAUCE_ACCESS_KEY "693ebc16208a-0b5b-1614-8d66-a2662f4e";
|
||||||
|
else
|
||||||
|
setPublicVar SAUCE_USERNAME "angular-ci";
|
||||||
|
setSecretVar SAUCE_ACCESS_KEY "9b988f434ff8-fbca-8aa4-4ae3-35442987";
|
||||||
|
fi
|
||||||
# TODO(josephperrott): Remove environment variables once all saucelabs tests are via bazel method.
|
# TODO(josephperrott): Remove environment variables once all saucelabs tests are via bazel method.
|
||||||
setPublicVar SAUCE_LOG_FILE /tmp/angular/sauce-connect.log
|
setPublicVar SAUCE_LOG_FILE /tmp/angular/sauce-connect.log
|
||||||
setPublicVar SAUCE_READY_FILE /tmp/angular/sauce-connect-ready-file.lock
|
setPublicVar SAUCE_READY_FILE /tmp/angular/sauce-connect-ready-file.lock
|
||||||
setPublicVar SAUCE_PID_FILE /tmp/angular/sauce-connect-pid-file.lock
|
setPublicVar SAUCE_PID_FILE /tmp/angular/sauce-connect-pid-file.lock
|
||||||
setPublicVar SAUCE_TUNNEL_IDENTIFIER "angular-framework-${CIRCLE_BUILD_NUM}-${CIRCLE_NODE_INDEX}"
|
setPublicVar SAUCE_TUNNEL_IDENTIFIER "angular-${CIRCLE_BUILD_NUM}-${CIRCLE_NODE_INDEX}"
|
||||||
# Amount of seconds we wait for sauceconnect to establish a tunnel instance. In order to not
|
# Amount of seconds we wait for sauceconnect to establish a tunnel instance. In order to not
|
||||||
# acquire CircleCI instances for too long if sauceconnect failed, we need a connect timeout.
|
# acquire CircleCI instances for too long if sauceconnect failed, we need a connect timeout.
|
||||||
setPublicVar SAUCE_READY_FILE_TIMEOUT 120
|
setPublicVar SAUCE_READY_FILE_TIMEOUT 120
|
||||||
|
|
||||||
####################################################################################################
|
####################################################################################################
|
||||||
# Define environment variables for the `angular/components` repo unit tests job.
|
# Define environment variables for the Angular Material unit tests job.
|
||||||
####################################################################################################
|
####################################################################################################
|
||||||
# We specifically use a directory within "/tmp" here because we want the cloned repo to be
|
# We specifically use a directory within "/tmp" here because we want the cloned repo to be
|
||||||
# completely isolated from angular/angular in order to avoid any bad interactions between
|
# completely isolated from angular/angular in order to avoid any bad interactions between
|
||||||
# their separate build setups. **NOTE**: When updating the temporary directory, also update
|
# their separate build setups.
|
||||||
# the `save_cache` path configuration in `config.yml`
|
setPublicVar MATERIAL_REPO_TMP_DIR "/tmp/material2"
|
||||||
setPublicVar COMPONENTS_REPO_TMP_DIR "/tmp/angular-components-repo"
|
setPublicVar MATERIAL_REPO_URL "https://github.com/angular/material2.git"
|
||||||
setPublicVar COMPONENTS_REPO_URL "https://github.com/angular/components.git"
|
setPublicVar MATERIAL_REPO_BRANCH "master"
|
||||||
setPublicVar COMPONENTS_REPO_BRANCH "master"
|
# **NOTE**: When updating the commit SHA, also update the cache key in the CircleCI "config.yml".
|
||||||
# **NOTE**: When updating the commit SHA, also update the cache key in the CircleCI `config.yml`.
|
setPublicVar MATERIAL_REPO_COMMIT "18b9ef3f5529f0fa8f034944681486447af7b879"
|
||||||
setPublicVar COMPONENTS_REPO_COMMIT "97a7e2babbccd3dc58e7b3364004e45ed5bd9968"
|
|
||||||
|
|
||||||
|
# Source `$BASH_ENV` to make the variables available immediately.
|
||||||
####################################################################################################
|
|
||||||
# Decrypt GCP Credentials and store them as the Google default credentials.
|
|
||||||
####################################################################################################
|
|
||||||
mkdir -p "$HOME/.config/gcloud";
|
|
||||||
openssl aes-256-cbc -d -in "${projectDir}/.circleci/gcp_token" \
|
|
||||||
-md md5 -k "$CIRCLE_PROJECT_REPONAME" -out "$HOME/.config/gcloud/application_default_credentials.json"
|
|
||||||
####################################################################################################
|
|
||||||
# Set bazel configuration for CircleCI runs.
|
|
||||||
####################################################################################################
|
|
||||||
cp "${projectDir}/.circleci/bazel.linux.rc" "$HOME/.bazelrc";
|
|
||||||
|
|
||||||
####################################################################################################
|
|
||||||
####################################################################################################
|
|
||||||
## Source `$BASH_ENV` to make the variables available immediately. ##
|
|
||||||
## ***NOTE: This must remain the the last action in this script*** ##
|
|
||||||
####################################################################################################
|
|
||||||
####################################################################################################
|
|
||||||
source $BASH_ENV;
|
source $BASH_ENV;
|
||||||
|
@ -1,36 +0,0 @@
|
|||||||
#!/usr/bin/env node
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* **Usage:**
|
|
||||||
* ```
|
|
||||||
* node get-vendored-yarn-path
|
|
||||||
* ```
|
|
||||||
*
|
|
||||||
* Returns the path to the vendored `yarn.js` script, so that it can be used for setting up yarn
|
|
||||||
* aliases/symlinks and use the local, vendored yarn script instead of a globally installed one.
|
|
||||||
*
|
|
||||||
* **Context:**
|
|
||||||
* We keep a version of yarn in the repo, at `third_party/github.com/yarnpkg/`. All CI jobs should
|
|
||||||
* use that version for consistency (and easier updates). The path to the actual `yarn.js` script,
|
|
||||||
* however, changes depending on the version (e.g. `third_party/github.com/yarnpkg/v1.21.1/...`).
|
|
||||||
*
|
|
||||||
* This script infers the correct path, so that we don't have to update the path in several places,
|
|
||||||
* when we update the version of yarn in `third_party/github.com/yarnpkg/`.
|
|
||||||
*/
|
|
||||||
|
|
||||||
const {readdirSync} = require('fs');
|
|
||||||
const {normalize} = require('path');
|
|
||||||
|
|
||||||
const yarnDownloadDir = `${__dirname}/../third_party/github.com/yarnpkg/yarn/releases/download`;
|
|
||||||
const yarnVersionSubdirs = readdirSync(yarnDownloadDir);
|
|
||||||
|
|
||||||
// Based on our current process, there should be exactly one sub-directory inside
|
|
||||||
// `vendoredYarnDownloadDir` at all times. Throw, if that is not the case.
|
|
||||||
if (yarnVersionSubdirs.length !== 1) {
|
|
||||||
throw new Error(
|
|
||||||
`Expected exactly 1 yarn version in '${yarnDownloadDir}', but found ` +
|
|
||||||
`${yarnVersionSubdirs.length}: ${yarnVersionSubdirs.join(', ')}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log(normalize(`${yarnDownloadDir}/${yarnVersionSubdirs[0]}/bin/yarn.js`));
|
|
20
.circleci/setup-rbe.sh
Executable file
20
.circleci/setup-rbe.sh
Executable file
@ -0,0 +1,20 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -u -e -o pipefail
|
||||||
|
|
||||||
|
# The path of the .bazelrc.user file to update should be passed as first parameter to this script.
|
||||||
|
# This allows to setup RBE for both the Angular repo and the Material repo.
|
||||||
|
bazelrc_user="$1"
|
||||||
|
|
||||||
|
echo "Writing RBE configuration to ${bazelrc_user}"
|
||||||
|
|
||||||
|
touch ${bazelrc_user}
|
||||||
|
echo -e 'build --config=remote\n' >> ${bazelrc_user}
|
||||||
|
echo -e 'build:remote --remote_accept_cached=true\n' >> ${bazelrc_user}
|
||||||
|
echo "Reading from remote cache for bazel remote jobs."
|
||||||
|
if [[ "$CI_PULL_REQUEST" == "false" ]]; then
|
||||||
|
echo -e 'build:remote --remote_upload_local_results=true\n' >> ${bazelrc_user}
|
||||||
|
echo "Uploading local build results to remote cache."
|
||||||
|
else
|
||||||
|
echo -e 'build:remote --remote_upload_local_results=false\n' >> ${bazelrc_user}
|
||||||
|
echo "Not uploading local build results to remote cache."
|
||||||
|
fi
|
@ -1,56 +0,0 @@
|
|||||||
# Install Bazel pre-reqs on Windows
|
|
||||||
# https://docs.bazel.build/versions/master/install-windows.html
|
|
||||||
# https://docs.bazel.build/versions/master/windows.html
|
|
||||||
# Install MSYS2 and packages
|
|
||||||
choco install msys2 --version 20180531.0.0 --no-progress --package-parameters "/NoUpdate"
|
|
||||||
C:\tools\msys64\usr\bin\bash.exe -l -c "pacman --needed --noconfirm -S zip unzip patch diffutils git"
|
|
||||||
|
|
||||||
# Add PATH modifications to the Powershell profile. This is the win equivalent of .bash_profile.
|
|
||||||
# https://docs.microsoft.com/en-us/previous-versions//bb613488(v=vs.85)
|
|
||||||
new-item -path $profile -itemtype file -force
|
|
||||||
# Paths for nodejs, npm, yarn, and msys2. Use single quotes to prevent interpolation.
|
|
||||||
# Add before the original path to use msys2 instead of the installed gitbash.
|
|
||||||
Add-Content $profile '$Env:path = "${Env:ProgramFiles}\nodejs\;C:\Users\circleci\AppData\Roaming\npm\;${Env:ProgramFiles(x86)}\Yarn\bin\;C:\Users\circleci\AppData\Local\Yarn\bin\;C:\tools\msys64\usr\bin\;" + $Env:path'
|
|
||||||
# Environment variables for Bazel
|
|
||||||
Add-Content $profile '$Env:BAZEL_SH = "C:\tools\msys64\usr\bin\bash.exe"'
|
|
||||||
|
|
||||||
# Get the bazel version devdep and store it in a global var for use in the circleci job.
|
|
||||||
$bazelVersion = & ${Env:ProgramFiles}\nodejs\node.exe -e "console.log(require('./package.json').devDependencies['@bazel/bazel'])"
|
|
||||||
# This is a tricky situation: we want $bazelVersion to be evaluated but not $Env:BAZEL_VERSION.
|
|
||||||
# Formatting works https://stackoverflow.com/questions/32127583/expand-variable-inside-single-quotes
|
|
||||||
$bazelVersionGlobalVar = '$Env:BAZEL_VERSION = "{0}"' -f $bazelVersion
|
|
||||||
Add-Content $profile $bazelVersionGlobalVar
|
|
||||||
|
|
||||||
# Remove the CircleCI checkout SSH override, because it breaks cloning repositories through Bazel.
|
|
||||||
# See https://circleci.com/gh/angular/angular/401454 for an example.
|
|
||||||
# TODO: is this really needed? Maybe there's a better way. It doesn't happen on Linux or on Codefresh.
|
|
||||||
git config --global --unset url.ssh://git@github.com.insteadOf
|
|
||||||
|
|
||||||
|
|
||||||
####################################################################################################
|
|
||||||
# Decrypt GCP Credentials and store them as the Google default credentials.
|
|
||||||
####################################################################################################
|
|
||||||
mkdir ${env:APPDATA}\gcloud
|
|
||||||
openssl aes-256-cbc -d -in .circleci\gcp_token -md md5 -out "$env:APPDATA\gcloud\application_default_credentials.json" -k "$env:CIRCLE_PROJECT_REPONAME"
|
|
||||||
|
|
||||||
####################################################################################################
|
|
||||||
# Set bazel configuration for CircleCI runs.
|
|
||||||
####################################################################################################
|
|
||||||
copy .circleci\bazel.windows.rc ${Env:USERPROFILE}\.bazelrc
|
|
||||||
|
|
||||||
####################################################################################################
|
|
||||||
# Install specific version of node.
|
|
||||||
####################################################################################################
|
|
||||||
choco install nodejs --version 12.14.1 --no-progress
|
|
||||||
|
|
||||||
# These Bazel prereqs aren't needed because the CircleCI image already includes them.
|
|
||||||
# choco install yarn --version 1.16.0 --no-progress
|
|
||||||
# choco install vcredist2015 --version 14.0.24215.20170201
|
|
||||||
|
|
||||||
# We don't need VS Build Tools for the tested bazel targets.
|
|
||||||
# If it's needed again, uncomment these lines.
|
|
||||||
# VS Build Tools are needed for Bazel C++ targets (like com_google_protobuf)
|
|
||||||
# choco install visualstudio2019buildtools --version 16.1.2.0 --no-progress --package-parameters "--add Microsoft.VisualStudio.Workload.VCTools --add Microsoft.VisualStudio.Component.VC.Tools.x86.x64 --add Microsoft.Component.VC.Runtime.UCRTSDK --add Microsoft.VisualStudio.Component.Windows10SDK.17763"
|
|
||||||
# Add-Content $profile '$Env:BAZEL_VC = "${Env:ProgramFiles(x86)}\Microsoft Visual Studio\2019\BuildTools\VC\"'
|
|
||||||
# Python is needed for Bazel Python targets
|
|
||||||
# choco install python --version 3.5.1 --no-progress
|
|
@ -1,14 +0,0 @@
|
|||||||
# Use our local, vendored yarn in the global `yarn` command.
|
|
||||||
$globalYarnDir = "$HOME\AppData\Roaming\yarn"
|
|
||||||
$localYarnPath = & ${Env:ProgramFiles}\nodejs\node.exe ".\.circleci\get-vendored-yarn-path.js"
|
|
||||||
|
|
||||||
# Create a directory to put the yarn PowerShell script.
|
|
||||||
New-Item -Path "$globalYarnDir" -ItemType "directory" >$null
|
|
||||||
|
|
||||||
# Create the yarn PowerShell script (using the inferred path to the local yarn script).
|
|
||||||
Get-Content -Path ".\.circleci\windows-yarn.ps1.template" |
|
|
||||||
%{$_ -replace "{{ LOCAL_YARN_PATH_PLACEHOLDER }}", "$localYarnPath"} |
|
|
||||||
Add-Content -Path "$globalYarnDir\yarn.ps1"
|
|
||||||
|
|
||||||
# Add the directory containing the yarn PowerShell script to `PATH`.
|
|
||||||
Add-Content -Path $profile -Value ('$Env:path = "{0};" + $Env:path' -f $globalYarnDir)
|
|
@ -1,15 +0,0 @@
|
|||||||
$exe=""
|
|
||||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
|
||||||
# Fix case when both the Windows and Linux builds of Node
|
|
||||||
# are installed in the same directory
|
|
||||||
$exe=".exe"
|
|
||||||
}
|
|
||||||
$ret=0
|
|
||||||
if (Test-Path "$basedir/node$exe") {
|
|
||||||
& "$basedir/node$exe" "{{ LOCAL_YARN_PATH_PLACEHOLDER }}" $args
|
|
||||||
$ret=$LASTEXITCODE
|
|
||||||
} else {
|
|
||||||
& "node$exe" "{{ LOCAL_YARN_PATH_PLACEHOLDER }}" $args
|
|
||||||
$ret=$LASTEXITCODE
|
|
||||||
}
|
|
||||||
exit $ret
|
|
@ -1,31 +0,0 @@
|
|||||||
# VSCode Remote Development - Developing inside a Containers
|
|
||||||
|
|
||||||
This folder contains configuration files that can be used to opt into working on this repository in a [Docker container](https://www.docker.com/resources/what-container) via [VSCode](https://code.visualstudio.com/)'s Remote Development feature (see below).
|
|
||||||
|
|
||||||
Info on remote development and developing inside a container with VSCode:
|
|
||||||
- [VSCode: Remote Development](https://code.visualstudio.com/docs/remote/remote-overview)
|
|
||||||
- [VSCode: Developing inside a Container](https://code.visualstudio.com/docs/remote/containers)
|
|
||||||
- [VSCode: Remote Development FAQ](https://code.visualstudio.com/docs/remote/faq)
|
|
||||||
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
_Prerequisite: [Install Docker](https://docs.docker.com/install) on your local environment._
|
|
||||||
|
|
||||||
To get started, read and follow the instuctions in [Developing inside a Container](https://code.visualstudio.com/docs/remote/containers). The [.devcontainer/](.) directory contains pre-configured `devcontainer.json` and `Dockerfile` files, which you can use to set up remote development with a docker container.
|
|
||||||
|
|
||||||
In a nutshell, you need to:
|
|
||||||
- Install the [Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) extension.
|
|
||||||
- Copy [recommended-Dockerfile](./recommended-Dockerfile) to `Dockerfile` (and optionally tweak to suit your needs).
|
|
||||||
- Copy [recommended-devcontainer.json](./recommended-devcontainer.json) to `devcontainer.json` (and optionally tweak to suit your needs).
|
|
||||||
- Open VSCode and bring up the [Command Palette](https://code.visualstudio.com/docs/getstarted/userinterface#_command-palette).
|
|
||||||
- Type `Remote-Containers: Open Folder in Container` and choose your local clone of [angular/angular](https://github.com/angular/angular).
|
|
||||||
|
|
||||||
The `.devcontainer/devcontainer.json` and `.devcontainer/Dockerfile` files are ignored by git, so you can have your own local versions. We may occasionally update the template files ([recommended-devcontainer.json](./recommended-devcontainer.json), [recommended-Dockerfile](./recommended-Dockerfile)), in which case you will need to manually update your local copies (if desired).
|
|
||||||
|
|
||||||
|
|
||||||
## Updating `recommended-devcontainer.json` and `recommended-Dockerfile`
|
|
||||||
|
|
||||||
You can update and commit the recommended config files (which people use as basis for their local configs), if you find that something is broken, out-of-date or can be improved.
|
|
||||||
|
|
||||||
Please, keep in mind that any changes you make will potentially be used by many people on different environments. Try to keep these config files cross-platform compatible and free of personal preferences.
|
|
@ -1,6 +1,5 @@
|
|||||||
# Image metadata and config.
|
# Image metadata and config.
|
||||||
FROM circleci/node:10-browsers # Ideally, the image version should be what we use on CI.
|
FROM circleci/node:10-browsers
|
||||||
# See `executors > browsers-executor` in `.circleci/config.yml`.
|
|
||||||
|
|
||||||
LABEL name="Angular dev environment" \
|
LABEL name="Angular dev environment" \
|
||||||
description="This image can be used to create a dev environment for building Angular." \
|
description="This image can be used to create a dev environment for building Angular." \
|
||||||
@ -16,8 +15,7 @@ USER root
|
|||||||
|
|
||||||
# Configure `Node.js`/`npm` and install utilities.
|
# Configure `Node.js`/`npm` and install utilities.
|
||||||
RUN npm config --global set user root
|
RUN npm config --global set user root
|
||||||
RUN npm install --global yarn@latest # Ideally, the version should be what we use on CI.
|
RUN npm install --global yarn@1.13.0 # This needs to be in sync with what we use on CI.
|
||||||
# See `commands > overwrite_yarn` in `.circleci/config.yml`.
|
|
||||||
|
|
||||||
|
|
||||||
# Go! (And keep going.)
|
# Go! (And keep going.)
|
||||||
|
941
.github/CODEOWNERS
vendored
Normal file
941
.github/CODEOWNERS
vendored
Normal file
@ -0,0 +1,941 @@
|
|||||||
|
# ==================================================================================
|
||||||
|
# ==================================================================================
|
||||||
|
# Angular CODEOWNERS
|
||||||
|
# ==================================================================================
|
||||||
|
# ==================================================================================
|
||||||
|
#
|
||||||
|
# Configuration of code ownership and review approvals for the angular/angular repo.
|
||||||
|
#
|
||||||
|
# More info: https://help.github.com/articles/about-codeowners/
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
# ================================================
|
||||||
|
# General rules / philosophy
|
||||||
|
# ================================================
|
||||||
|
#
|
||||||
|
# - we trust that people do the right thing and not approve changes they don't feel confident reviewing
|
||||||
|
# - we use github teams so that we funnel code reviews to the most appropriate reviewer, this is why the team structure is fine-grained
|
||||||
|
# - we enforce that only approved PRs get merged to ensure that unreviewed code doesn't get accidentally merged
|
||||||
|
# - we delegate approval rights as much as possible so that we can scale better
|
||||||
|
# - each group must have at least one person, but several people are preferable to avoid a single point of failure issues
|
||||||
|
# - most file groups have one or two global approvers groups as fallbacks:
|
||||||
|
# - @angular/fw-global-approvers: for approving minor changes, large-scale refactorings, and emergency situations.
|
||||||
|
# - @angular/fw-global-approvers-for-docs-only-changes: for approving minor documentation-only changes that don't require engineering review
|
||||||
|
# - a small number of file groups have very limited number of reviewers because incorrect changes to the files they guard would have serious consequences (e.g. security, public api)
|
||||||
|
#
|
||||||
|
# Configuration nuances:
|
||||||
|
#
|
||||||
|
# - This configuration works in conjunction with the protected branch settings that require all changes to be made via pull requests with at least one approval.
|
||||||
|
# - This approval can come from an appropriate codeowner, or any repo collaborator (person with write access) if the PR is authored by a codeowner.
|
||||||
|
# - Each codeowners team must have write access to the repo, otherwise their reviews won't count.
|
||||||
|
#
|
||||||
|
# In the case of emergency, the repo administrators which include angular-caretaker can bypass this requirement.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ================================================
|
||||||
|
# GitHub username registry
|
||||||
|
# (just to make this file easier to understand)
|
||||||
|
# ================================================
|
||||||
|
|
||||||
|
# alan-agius4 - Alan Agius
|
||||||
|
# alexeagle - Alex Eagle
|
||||||
|
# alxhub - Alex Rickabaugh
|
||||||
|
# AndrewKushnir - Andrew Kushnir
|
||||||
|
# andrewseguin - Andrew Seguin
|
||||||
|
# atscott - Andrew Scott
|
||||||
|
# devversion - Paul Gschwendtner
|
||||||
|
# filipesilva - Filipe Silva
|
||||||
|
# gkalpak - George Kalpakas
|
||||||
|
# IgorMinar - Igor Minar
|
||||||
|
# JiaLiPassion - Jia Li
|
||||||
|
# josephperrott - Joey Perrott
|
||||||
|
# kapunahelewong - Kapunahele Wong
|
||||||
|
# kara - Kara Erickson
|
||||||
|
# kyliau - Keen Yee Liau
|
||||||
|
# matsko - Matias Niemelä
|
||||||
|
# mgechev - Minko Gechev
|
||||||
|
# mhevery - Misko Hevery
|
||||||
|
# petebacondarwin - Pete Bacon Darwin
|
||||||
|
# pkozlowski-opensource - Pawel Kozlowski
|
||||||
|
# robwormald - Rob Wormald
|
||||||
|
# stephenfluin - Stephen Fluin
|
||||||
|
# vikerman - Vikram Subramanian
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
######################################################################################################
|
||||||
|
#
|
||||||
|
# Team structure and memberships
|
||||||
|
# ------------------------------
|
||||||
|
#
|
||||||
|
# This section is here just because the GitHub UI is too hard to navigate and audit.
|
||||||
|
#
|
||||||
|
# Any changes to team structure or memberships must first be made in this file and only then
|
||||||
|
# implemented in the GitHub UI.
|
||||||
|
#######################################################################################################
|
||||||
|
|
||||||
|
|
||||||
|
# ===========================================================
|
||||||
|
# @angular/framework-global-approvers
|
||||||
|
# ===========================================================
|
||||||
|
# Used for approving minor changes, large-scale refactorings, and emergency situations.
|
||||||
|
# (secret team to avoid review requests, it also doesn't inherit from @angular/framework because nested teams can't be secret)
|
||||||
|
#
|
||||||
|
# - IgorMinar
|
||||||
|
# - josephperrott
|
||||||
|
# - kara
|
||||||
|
# - mhevery
|
||||||
|
|
||||||
|
|
||||||
|
# ===========================================================
|
||||||
|
# @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
# ===========================================================
|
||||||
|
# Used for approving minor documentation-only changes that don't require engineering review.
|
||||||
|
# (secret team to avoid review requests, it also doesn't inherit from @angular/framework because nested teams can't be secret)
|
||||||
|
#
|
||||||
|
# - gkalpak
|
||||||
|
# - kapunahelewong
|
||||||
|
# - petebacondarwin
|
||||||
|
|
||||||
|
|
||||||
|
# ===========================================================
|
||||||
|
# @angular/fw-animations
|
||||||
|
# ===========================================================
|
||||||
|
#
|
||||||
|
# - matsko
|
||||||
|
|
||||||
|
|
||||||
|
# ===========================================================
|
||||||
|
# @angular/tools-bazel
|
||||||
|
# ===========================================================
|
||||||
|
#
|
||||||
|
# - alexeagle
|
||||||
|
# - kyliau
|
||||||
|
# - IgorMinar
|
||||||
|
# - mgechev
|
||||||
|
|
||||||
|
|
||||||
|
# ===========================================================
|
||||||
|
# @angular/tools-cli
|
||||||
|
# ===========================================================
|
||||||
|
#
|
||||||
|
# - filipesilva
|
||||||
|
# - mgechev
|
||||||
|
# - vikerman
|
||||||
|
|
||||||
|
|
||||||
|
# ===========================================================
|
||||||
|
# @angular/fw-compiler
|
||||||
|
# ===========================================================
|
||||||
|
#
|
||||||
|
# - alxhub
|
||||||
|
|
||||||
|
|
||||||
|
# ===========================================================
|
||||||
|
# @angular/fw-ngcc
|
||||||
|
# ===========================================================
|
||||||
|
#
|
||||||
|
# - alxhub
|
||||||
|
# - gkalpak
|
||||||
|
# - petebacondarwin
|
||||||
|
|
||||||
|
|
||||||
|
# ===========================================================
|
||||||
|
# @angular/fw-core
|
||||||
|
# ===========================================================
|
||||||
|
#
|
||||||
|
# - alxhub
|
||||||
|
# - AndrewKushnir
|
||||||
|
# - kara
|
||||||
|
# - mhevery
|
||||||
|
# - pkozlowski-opensource
|
||||||
|
|
||||||
|
|
||||||
|
# ===========================================================
|
||||||
|
# @angular/fw-http
|
||||||
|
# ===========================================================
|
||||||
|
#
|
||||||
|
# - alxhub
|
||||||
|
# - IgorMinar
|
||||||
|
|
||||||
|
|
||||||
|
# ===========================================================
|
||||||
|
# @angular/fw-elements
|
||||||
|
# ===========================================================
|
||||||
|
#
|
||||||
|
# - andrewseguin
|
||||||
|
# - gkalpak
|
||||||
|
# - robwormald
|
||||||
|
|
||||||
|
|
||||||
|
# ===========================================================
|
||||||
|
# @angular/fw-forms
|
||||||
|
# ===========================================================
|
||||||
|
#
|
||||||
|
# - AndrewKushnir
|
||||||
|
|
||||||
|
|
||||||
|
# ===========================================================
|
||||||
|
# @angular/tools-language-service
|
||||||
|
# ===========================================================
|
||||||
|
#
|
||||||
|
# - kyliau
|
||||||
|
|
||||||
|
|
||||||
|
# ===========================================================
|
||||||
|
# @angular/fw-server
|
||||||
|
# ===========================================================
|
||||||
|
#
|
||||||
|
# - alxhub
|
||||||
|
# - vikerman
|
||||||
|
|
||||||
|
|
||||||
|
# ===========================================================
|
||||||
|
# @angular/fw-router
|
||||||
|
# ===========================================================
|
||||||
|
#
|
||||||
|
# - atscott
|
||||||
|
|
||||||
|
|
||||||
|
# ===========================================================
|
||||||
|
# @angular/fw-service-worker
|
||||||
|
# ===========================================================
|
||||||
|
#
|
||||||
|
# - alxhub
|
||||||
|
# - gkalpak
|
||||||
|
# - IgorMinar
|
||||||
|
|
||||||
|
|
||||||
|
# ===========================================================
|
||||||
|
# @angular/fw-upgrade
|
||||||
|
# ===========================================================
|
||||||
|
#
|
||||||
|
# - gkalpak
|
||||||
|
# - petebacondarwin
|
||||||
|
|
||||||
|
|
||||||
|
# ===========================================================
|
||||||
|
# @angular/fw-testing
|
||||||
|
# ===========================================================
|
||||||
|
#
|
||||||
|
# - vikerman
|
||||||
|
|
||||||
|
|
||||||
|
# ===========================================================
|
||||||
|
# @angular/fw-i18n
|
||||||
|
# ===========================================================
|
||||||
|
#
|
||||||
|
# - AndrewKushnir
|
||||||
|
# - mhevery
|
||||||
|
# - petebacondarwin
|
||||||
|
# - vikerman
|
||||||
|
|
||||||
|
|
||||||
|
# ===========================================================
|
||||||
|
# @angular/fw-security
|
||||||
|
# ===========================================================
|
||||||
|
#
|
||||||
|
# - IgorMinar
|
||||||
|
# - mhevery
|
||||||
|
|
||||||
|
|
||||||
|
# ===========================================================
|
||||||
|
# @angular/fw-zones
|
||||||
|
# ===========================================================
|
||||||
|
#
|
||||||
|
# - JiaLiPassion
|
||||||
|
# - mhevery
|
||||||
|
# - vikerman
|
||||||
|
|
||||||
|
|
||||||
|
# ===========================================================
|
||||||
|
# @angular/tools-benchpress
|
||||||
|
# ===========================================================
|
||||||
|
#
|
||||||
|
# - alxhub
|
||||||
|
|
||||||
|
|
||||||
|
# ===========================================================
|
||||||
|
# @angular/fw-integration
|
||||||
|
# ===========================================================
|
||||||
|
#
|
||||||
|
# - IgorMinar
|
||||||
|
# - josephperrott
|
||||||
|
# - mhevery
|
||||||
|
|
||||||
|
|
||||||
|
# ===========================================================
|
||||||
|
# @angular/docs-infra
|
||||||
|
# ===========================================================
|
||||||
|
#
|
||||||
|
# - gkalpak
|
||||||
|
# - IgorMinar
|
||||||
|
# - petebacondarwin
|
||||||
|
|
||||||
|
|
||||||
|
# ===========================================================
|
||||||
|
# @angular/fw-docs-intro
|
||||||
|
# ===========================================================
|
||||||
|
#
|
||||||
|
# - IgorMinar
|
||||||
|
# - stephenfluin
|
||||||
|
|
||||||
|
|
||||||
|
# ===========================================================
|
||||||
|
# @angular/fw-docs-observables
|
||||||
|
# ===========================================================
|
||||||
|
#
|
||||||
|
# - alxhub
|
||||||
|
|
||||||
|
|
||||||
|
# ===========================================================
|
||||||
|
# @angular/fw-docs-packaging
|
||||||
|
# ===========================================================
|
||||||
|
#
|
||||||
|
# - IgorMinar
|
||||||
|
# - vikerman
|
||||||
|
|
||||||
|
|
||||||
|
# ===========================================================
|
||||||
|
# @angular/tools-docs-libraries
|
||||||
|
# ===========================================================
|
||||||
|
#
|
||||||
|
# - alan-agius4
|
||||||
|
# - IgorMinar
|
||||||
|
# - mgechev
|
||||||
|
# - vikerman
|
||||||
|
|
||||||
|
|
||||||
|
# ===========================================================
|
||||||
|
# @angular/tools-docs-schematics
|
||||||
|
# ===========================================================
|
||||||
|
#
|
||||||
|
# - alan-agius4
|
||||||
|
# - IgorMinar
|
||||||
|
# - mgechev
|
||||||
|
# - vikerman
|
||||||
|
|
||||||
|
|
||||||
|
# ===========================================================
|
||||||
|
# @angular/fw-docs-marketing
|
||||||
|
# ===========================================================
|
||||||
|
#
|
||||||
|
# - IgorMinar
|
||||||
|
# - stephenfluin
|
||||||
|
|
||||||
|
|
||||||
|
# ===========================================================
|
||||||
|
# @angular/fw-public-api
|
||||||
|
# ===========================================================
|
||||||
|
#
|
||||||
|
# - IgorMinar
|
||||||
|
|
||||||
|
|
||||||
|
# ===========================================================
|
||||||
|
# @angular/dev-infra-framework
|
||||||
|
# ===========================================================
|
||||||
|
#
|
||||||
|
# - devversion
|
||||||
|
# - filipesilva
|
||||||
|
# - gkalpak
|
||||||
|
# - IgorMinar
|
||||||
|
# - josephperrott
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
######################################################################################################
|
||||||
|
#
|
||||||
|
# CODEOWNERS rules
|
||||||
|
# -----------------
|
||||||
|
#
|
||||||
|
# All the following rules are applied in the order specified in this file.
|
||||||
|
# The last rule that matches wins!
|
||||||
|
#
|
||||||
|
# See https://git-scm.com/docs/gitignore#_pattern_format for pattern syntax docs.
|
||||||
|
#
|
||||||
|
######################################################################################################
|
||||||
|
|
||||||
|
|
||||||
|
# ================================================
|
||||||
|
# Default Owners
|
||||||
|
# (in case no pattern matches a path in a PR - this should be treated as a bug and result in adding the path to CODEOWNERS)
|
||||||
|
# ================================================
|
||||||
|
|
||||||
|
* @IgorMinar @angular/framework-global-approvers
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ================================================
|
||||||
|
# @angular/animations
|
||||||
|
# ================================================
|
||||||
|
|
||||||
|
/packages/animations/** @angular/fw-animations @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/packages/platform-browser/animations/** @angular/fw-animations @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
/aio/content/guide/animations.md @angular/fw-animations @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/animations/** @angular/fw-animations @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/images/guide/animations/** @angular/fw-animations @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
/aio/content/guide/complex-animation-sequences.md @angular/fw-animations @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
/aio/content/guide/reusable-animations.md @angular/fw-animations @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
/aio/content/guide/route-animations.md @angular/fw-animations @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
/aio/content/guide/transition-and-triggers.md @angular/fw-animations @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ================================================
|
||||||
|
# @angular/bazel
|
||||||
|
# ================================================
|
||||||
|
|
||||||
|
/packages/bazel/** @angular/tools-bazel @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/bazel.md @angular/tools-bazel @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ================================================
|
||||||
|
# @angular/compiler
|
||||||
|
# @angular/compiler-cli
|
||||||
|
# ================================================
|
||||||
|
|
||||||
|
/packages/compiler/** @angular/fw-compiler @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/packages/examples/compiler/** @angular/fw-compiler @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/packages/compiler-cli/** @angular/fw-compiler @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/angular-compiler-options.md @angular/fw-compiler @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/aot-compiler.md @angular/fw-compiler @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/aot-metadata-errors.md @angular/fw-compiler @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ================================================
|
||||||
|
# packages/compiler-cli/ngcc/
|
||||||
|
# ================================================
|
||||||
|
|
||||||
|
/packages/compiler-cli/ngcc/** @angular/fw-ngcc @angular/framework-global-approvers
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ================================================
|
||||||
|
# Framework/cli integration
|
||||||
|
#
|
||||||
|
# a rule to control API changes between @angular/compiler-cli and @angular/cli
|
||||||
|
# ================================================
|
||||||
|
|
||||||
|
/packages/compiler-cli/src/ngtools/** @angular/tools-cli @angular/framework-global-approvers
|
||||||
|
/aio/content/guide/cli-builder.md @angular/tools-cli @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/ivy.md @angular/tools-cli @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/web-worker.md @angular/tools-cli @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ================================================
|
||||||
|
# @angular/core
|
||||||
|
# @angular/common (except @angular/common/http)
|
||||||
|
# @angular/platform-browser
|
||||||
|
# @angular/platform-browser-dynamic
|
||||||
|
# @angular/platform-webworker
|
||||||
|
# @angular/platform-webworker-dynamic
|
||||||
|
# ================================================
|
||||||
|
|
||||||
|
/packages/core/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/packages/examples/core/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/packages/common/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/packages/platform-browser/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/packages/examples/platform-browser/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/packages/platform-browser-dynamic/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/packages/platform-webworker/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/packages/platform-webworker-dynamic/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/packages/examples/common/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/packages/docs/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
/aio/content/guide/accessibility.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/accessibility/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
/aio/content/guide/architecture-components.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/architecture-modules.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/architecture-next-steps.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/architecture-services.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/architecture.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/architecture/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/images/guide/architecture/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
/aio/content/guide/attribute-directives.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/attribute-directives/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/images/guide/attribute-directives/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
/aio/content/guide/bootstrapping.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/bootstrapping/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
/aio/content/guide/cheatsheet.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
/aio/content/guide/component-interaction.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/component-interaction/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/images/guide/component-interaction/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
/aio/content/guide/component-styles.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/component-styles/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
/aio/content/guide/dependency-injection.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/dependency-injection/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/images/guide/dependency-injection/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
/aio/content/guide/dependency-injection-in-action.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/dependency-injection-in-action/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/images/guide/dependency-injection-in-action/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
/aio/content/guide/dependency-injection-navtree.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
/aio/content/guide/dependency-injection-providers.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
/aio/content/guide/displaying-data.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/displaying-data/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/images/guide/displaying-data/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
/aio/content/guide/dynamic-component-loader.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/dynamic-component-loader/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/images/guide/dynamic-component-loader/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
/aio/content/guide/entry-components.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
/aio/content/guide/feature-modules.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/feature-modules/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/images/guide/feature-modules/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
/aio/content/guide/frequent-ngmodules.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/images/guide/frequent-ngmodules/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
/aio/content/guide/hierarchical-dependency-injection.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/hierarchical-dependency-injection/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/providers-viewproviders/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/resolution-modifiers/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
/aio/content/guide/lazy-loading-ngmodules.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/lazy-loading-ngmodules/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/images/guide/lazy-loading-ngmodules/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
/aio/content/guide/lifecycle-hooks.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/lifecycle-hooks/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/images/guide/lifecycle-hooks/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
/aio/content/examples/ngcontainer/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
/aio/content/guide/ngmodules.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/ngmodules/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
/aio/content/guide/ngmodule-api.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
/aio/content/guide/ngmodule-faq.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/ngmodule-faq/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
/aio/content/guide/ngmodule-vs-jsmodule.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
/aio/content/guide/module-types.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
/aio/content/guide/template-syntax.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/built-in-template-functions/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/event-binding/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/interpolation/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/template-syntax/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/images/guide/template-syntax/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/binding-syntax/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/property-binding/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/attribute-binding/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/two-way-binding/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/built-in-directives/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/images/guide/built-in-directives/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/template-reference-variables/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/inputs-outputs/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/images/guide/inputs-outputs/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/template-expression-operators/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
/aio/content/guide/pipes.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/pipes/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/images/guide/pipes/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
/aio/content/guide/providers.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/providers/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
/aio/content/guide/singleton-services.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
/aio/content/guide/set-document-title.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/set-document-title/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/images/guide/set-document-title/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
/aio/content/guide/sharing-ngmodules.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
/aio/content/guide/structural-directives.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/structural-directives/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/images/guide/structural-directives/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
/aio/content/guide/user-input.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/user-input/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/images/guide/user-input/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ================================================
|
||||||
|
# @angular/common/http
|
||||||
|
# @angular/http
|
||||||
|
# ================================================
|
||||||
|
|
||||||
|
/packages/common/http/** @angular/fw-http @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/packages/http/** @angular/fw-http @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/packages/examples/http/** @angular/fw-http @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/http.md @angular/fw-http @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/http/** @angular/fw-http @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/images/guide/http/** @angular/fw-http @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ================================================
|
||||||
|
# @angular/elements
|
||||||
|
# ================================================
|
||||||
|
|
||||||
|
/packages/elements/** @angular/fw-elements @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/elements/** @angular/fw-elements @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/images/guide/elements/** @angular/fw-elements @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/elements.md @angular/fw-elements @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ================================================
|
||||||
|
# @angular/forms
|
||||||
|
# ================================================
|
||||||
|
|
||||||
|
/packages/forms/** @angular/fw-forms @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/packages/examples/forms/** @angular/fw-forms @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/forms.md @angular/fw-forms @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/forms/** @angular/fw-forms @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/images/guide/forms/** @angular/fw-forms @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/forms-overview.md @angular/fw-forms @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/forms-overview/** @angular/fw-forms @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/images/guide/forms-overview/** @angular/fw-forms @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/form-validation.md @angular/fw-forms @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/form-validation/** @angular/fw-forms @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/images/guide/form-validation/** @angular/fw-forms @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/dynamic-form.md @angular/fw-forms @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/dynamic-form/** @angular/fw-forms @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/images/guide/dynamic-form/** @angular/fw-forms @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/reactive-forms.md @angular/fw-forms @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/reactive-forms/** @angular/fw-forms @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/images/guide/reactive-forms/** @angular/fw-forms @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ================================================
|
||||||
|
# @angular/language-service
|
||||||
|
# ================================================
|
||||||
|
|
||||||
|
/packages/language-service/** @angular/tools-language-service @angular/framework-global-approvers
|
||||||
|
/aio/content/guide/language-service.md @angular/tools-language-service @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/images/guide/language-service/** @angular/tools-language-service @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ================================================
|
||||||
|
# @angular/platform-server
|
||||||
|
# ================================================
|
||||||
|
|
||||||
|
/packages/platform-server/** @angular/fw-server @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/universal.md @angular/fw-server @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/universal/** @angular/fw-server @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ================================================
|
||||||
|
# @angular/router
|
||||||
|
# ================================================
|
||||||
|
|
||||||
|
/packages/router/** @angular/fw-router @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/packages/examples/router/** @angular/fw-router @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/router.md @angular/fw-router @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/router/** @angular/fw-router @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/images/guide/router/** @angular/fw-router @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ================================================
|
||||||
|
# @angular/service-worker
|
||||||
|
# ================================================
|
||||||
|
|
||||||
|
/packages/service-worker/** @angular/fw-service-worker @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/packages/examples/service-worker/** @angular/fw-service-worker @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/service-worker-getting-started.md @angular/fw-service-worker @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/service-worker-getting-started/** @angular/fw-service-worker @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/app-shell.md @angular/fw-service-worker @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/service-worker-communications.md @angular/fw-service-worker @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/service-worker-config.md @angular/fw-service-worker @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/service-worker-devops.md @angular/fw-service-worker @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/service-worker-intro.md @angular/fw-service-worker @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/images/guide/service-worker/** @angular/fw-service-worker @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ================================================
|
||||||
|
# @angular/upgrade
|
||||||
|
# ================================================
|
||||||
|
|
||||||
|
/packages/upgrade/** @angular/fw-upgrade @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/packages/common/upgrade/** @angular/fw-upgrade @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/packages/examples/upgrade/** @angular/fw-upgrade @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/upgrade.md @angular/fw-upgrade @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/upgrade-lazy-load-ajs/** @angular/fw-upgrade @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/upgrade-module/** @angular/fw-upgrade @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/images/guide/upgrade/** @angular/fw-upgrade @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/upgrade-phonecat-1-typescript/** @angular/fw-upgrade @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/upgrade-phonecat-2-hybrid/** @angular/fw-upgrade @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/upgrade-phonecat-3-final/** @angular/fw-upgrade @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/upgrade-performance.md @angular/fw-upgrade @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/upgrade-setup.md @angular/fw-upgrade @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/ajs-quick-reference.md @angular/fw-upgrade @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/ajs-quick-reference/** @angular/fw-upgrade @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ================================================
|
||||||
|
# @angular/**/testing
|
||||||
|
# ================================================
|
||||||
|
|
||||||
|
testing/** @angular/fw-testing @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/testing.md @angular/fw-testing @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/testing/** @angular/fw-testing @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/images/guide/testing/** @angular/fw-testing @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ================================================
|
||||||
|
# @angular i18n
|
||||||
|
# ================================================
|
||||||
|
|
||||||
|
/packages/core/src/i18n/** @angular/fw-i18n @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/packages/core/src/render3/i18n.ts @angular/fw-i18n @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/packages/core/src/render3/i18n.md @angular/fw-i18n @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/packages/core/src/render3/interfaces/i18n.ts @angular/fw-i18n @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/packages/common/locales/** @angular/fw-i18n @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/packages/common/src/i18n/** @angular/fw-i18n @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/packages/common/src/pipes/date_pipe.ts @angular/fw-i18n @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/packages/common/src/pipes/i18n_plural_pipe.ts @angular/fw-i18n @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/packages/common/src/pipes/i18n_select_pipe.ts @angular/fw-i18n @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/packages/common/src/pipes/number_pipe.ts @angular/fw-i18n @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/packages/compiler/src/i18n/** @angular/fw-i18n @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/packages/compiler/src/render3/view/i18n/** @angular/fw-i18n @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/packages/compiler-cli/src/extract_i18n.ts @angular/fw-i18n @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/i18n.md @angular/fw-i18n @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/i18n/** @angular/fw-i18n @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
|
||||||
|
# ================================================
|
||||||
|
# @angular security
|
||||||
|
# ================================================
|
||||||
|
|
||||||
|
/packages/core/src/sanitization/** @angular/fw-security
|
||||||
|
/packages/core/test/linker/security_integration_spec.ts @angular/fw-security
|
||||||
|
/packages/compiler/src/schema/** @angular/fw-security
|
||||||
|
/packages/platform-browser/src/security/** @angular/fw-security
|
||||||
|
/aio/content/guide/security.md @angular/fw-security @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/security/** @angular/fw-security @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/images/guide/security/** @angular/fw-security @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ================================================
|
||||||
|
# zone.js
|
||||||
|
# ================================================
|
||||||
|
|
||||||
|
/packages/zone.js/** @angular/fw-zones @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
|
||||||
|
# ================================================
|
||||||
|
# benchpress
|
||||||
|
# ================================================
|
||||||
|
|
||||||
|
/packages/benchpress/** @angular/tools-benchpress @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ================================================
|
||||||
|
# /integration/*
|
||||||
|
# ================================================
|
||||||
|
|
||||||
|
/integration/** @angular/fw-integration @angular/framework-global-approvers
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ================================================
|
||||||
|
# docs-infra
|
||||||
|
# ================================================
|
||||||
|
|
||||||
|
/aio/* @angular/docs-infra @angular/framework-global-approvers
|
||||||
|
/aio/aio-builds-setup/** @angular/docs-infra @angular/framework-global-approvers
|
||||||
|
/aio/content/examples/* @angular/docs-infra @angular/framework-global-approvers
|
||||||
|
/aio/scripts/** @angular/docs-infra @angular/framework-global-approvers
|
||||||
|
/aio/src/** @angular/docs-infra @angular/framework-global-approvers
|
||||||
|
/aio/tests/** @angular/docs-infra @angular/framework-global-approvers
|
||||||
|
/aio/tools/** @angular/docs-infra @angular/framework-global-approvers
|
||||||
|
|
||||||
|
# Hidden docs
|
||||||
|
/aio/content/guide/docs-style-guide.md @angular/docs-infra @angular/framework-global-approvers
|
||||||
|
/aio/content/examples/docs-style-guide/** @angular/docs-infra @angular/framework-global-approvers
|
||||||
|
/aio/content/images/guide/docs-style-guide/** @angular/docs-infra @angular/framework-global-approvers
|
||||||
|
/aio/content/guide/visual-studio-2015.md @angular/docs-infra @angular/framework-global-approvers
|
||||||
|
/aio/content/examples/visual-studio-2015/** @angular/docs-infra @angular/framework-global-approvers
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ================================================
|
||||||
|
# Docs: getting started & tutorial
|
||||||
|
# ================================================
|
||||||
|
|
||||||
|
/aio/content/guide/setup-local.md @angular/fw-docs-intro @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/images/guide/setup-local/** @angular/fw-docs-intro @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/tutorial/** @angular/fw-docs-intro @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/images/guide/toh/** @angular/fw-docs-intro @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/toh-pt0/** @angular/fw-docs-intro @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/toh-pt1/** @angular/fw-docs-intro @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/toh-pt2/** @angular/fw-docs-intro @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/toh-pt3/** @angular/fw-docs-intro @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/toh-pt4/** @angular/fw-docs-intro @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/toh-pt5/** @angular/fw-docs-intro @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/toh-pt6/** @angular/fw-docs-intro @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/getting-started-v0/** @angular/fw-docs-intro @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/getting-started/** @angular/fw-docs-intro @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/start/** @angular/fw-docs-intro @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/images/guide/start/** @angular/fw-docs-intro @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
|
||||||
|
# ================================================
|
||||||
|
# Docs: observables
|
||||||
|
# ================================================
|
||||||
|
|
||||||
|
/aio/content/guide/observables.md @angular/fw-docs-observables @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/observables/** @angular/fw-docs-observables @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/comparing-observables.md @angular/fw-docs-observables @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/observables-in-angular.md @angular/fw-docs-observables @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/observables-in-angular/** @angular/fw-docs-observables @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/practical-observable-usage.md @angular/fw-docs-observables @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/practical-observable-usage/** @angular/fw-docs-observables @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/rx-library.md @angular/fw-docs-observables @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/rx-library/** @angular/fw-docs-observables @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ================================================
|
||||||
|
# Docs: packaging, tooling, releasing
|
||||||
|
# ================================================
|
||||||
|
|
||||||
|
/aio/content/guide/npm-packages.md @angular/fw-docs-packaging @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/browser-support.md @angular/fw-docs-packaging @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/typescript-configuration.md @angular/fw-docs-packaging @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/setup/** @angular/fw-docs-packaging @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/build.md @angular/fw-docs-packaging @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/images/guide/build/** @angular/fw-docs-packaging @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/deployment.md @angular/fw-docs-packaging @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/images/guide/deployment/** @angular/fw-docs-packaging @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/file-structure.md @angular/fw-docs-packaging @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/releases.md @angular/fw-docs-packaging @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/updating.md @angular/fw-docs-packaging @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/workspace-config.md @angular/fw-docs-packaging @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/deprecations.md @angular/fw-docs-packaging @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/migration-renderer.md @angular/fw-docs-packaging @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/migration-undecorated-classes.md @angular/fw-docs-packaging @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
|
||||||
|
# ================================================
|
||||||
|
# Docs: libraries
|
||||||
|
# ================================================
|
||||||
|
|
||||||
|
/aio/content/guide/creating-libraries.md @angular/tools-docs-libraries @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/libraries.md @angular/tools-docs-libraries @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/using-libraries.md @angular/tools-docs-libraries @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
|
||||||
|
# ================================================
|
||||||
|
# Docs: schematics
|
||||||
|
# ================================================
|
||||||
|
|
||||||
|
/aio/content/guide/schematics.md @angular/tools-docs-schematics @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/schematics-authoring.md @angular/tools-docs-schematics @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/guide/schematics-for-libraries.md @angular/tools-docs-schematics @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/images/guide/schematics/** @angular/tools-docs-schematics @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/examples/schematics-for-libraries/** @angular/tools-docs-schematics @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ================================================
|
||||||
|
# Docs: marketing
|
||||||
|
# ================================================
|
||||||
|
|
||||||
|
/aio/content/marketing/** @angular/fw-docs-marketing @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/images/bios/** @angular/fw-docs-marketing @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/images/marketing/** @angular/fw-docs-marketing @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/navigation.json @angular/fw-docs-marketing @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
/aio/content/license.md @angular/fw-docs-marketing @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ================================================
|
||||||
|
# Build, CI & Dev-infra Owners
|
||||||
|
# ================================================
|
||||||
|
|
||||||
|
/* @angular/dev-infra-framework
|
||||||
|
/.buildkite/** @angular/dev-infra-framework
|
||||||
|
/.circleci/** @angular/dev-infra-framework
|
||||||
|
/.devcontainer/** @angular/dev-infra-framework
|
||||||
|
/.github/** @angular/dev-infra-framework
|
||||||
|
/.vscode/** @angular/dev-infra-framework
|
||||||
|
/docs/BAZEL.md @angular/dev-infra-framework
|
||||||
|
/packages/* @angular/dev-infra-framework
|
||||||
|
/packages/examples/test-utils/** @angular/dev-infra-framework
|
||||||
|
/packages/private/** @angular/dev-infra-framework
|
||||||
|
/scripts/** @angular/dev-infra-framework
|
||||||
|
/third_party/** @angular/dev-infra-framework
|
||||||
|
/tools/build/** @angular/dev-infra-framework
|
||||||
|
/tools/cjs-jasmine/** @angular/dev-infra-framework
|
||||||
|
/tools/gulp-tasks/** @angular/dev-infra-framework
|
||||||
|
/tools/ngcontainer/** @angular/dev-infra-framework
|
||||||
|
/tools/npm/** @angular/dev-infra-framework
|
||||||
|
/tools/npm_workspace/** @angular/dev-infra-framework
|
||||||
|
/tools/public_api_guard/** @angular/dev-infra-framework
|
||||||
|
/tools/rxjs/** @angular/dev-infra-framework
|
||||||
|
/tools/source-map-test/** @angular/dev-infra-framework
|
||||||
|
/tools/symbol-extractor/** @angular/dev-infra-framework
|
||||||
|
/tools/testing/** @angular/dev-infra-framework
|
||||||
|
/tools/ts-api-guardian/** @angular/dev-infra-framework
|
||||||
|
/tools/tslint/** @angular/dev-infra-framework
|
||||||
|
/tools/validate-commit-message/** @angular/dev-infra-framework
|
||||||
|
/tools/yarn/** @angular/dev-infra-framework
|
||||||
|
/tools/* @angular/dev-infra-framework
|
||||||
|
*.bzl @angular/dev-infra-framework
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ================================================
|
||||||
|
# Public API
|
||||||
|
# ================================================
|
||||||
|
|
||||||
|
/tools/public_api_guard/** @angular/fw-public-api
|
||||||
|
/aio/content/guide/glossary.md @angular/fw-public-api
|
||||||
|
/aio/content/guide/styleguide.md @angular/fw-public-api
|
||||||
|
/aio/content/examples/styleguide/** @angular/fw-public-api
|
||||||
|
/aio/content/images/guide/styleguide/** @angular/fw-public-api
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ================================================
|
||||||
|
# Special cases
|
||||||
|
# ================================================
|
||||||
|
|
||||||
|
/aio/content/guide/static-query-migration.md @kara @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ================================================
|
||||||
|
# CODEOWNERS Owners owners ...
|
||||||
|
# ================================================
|
||||||
|
|
||||||
|
/.github/CODEOWNERS @IgorMinar @angular/framework-global-approvers
|
13
.github/ISSUE_TEMPLATE/7-angular-components.md
vendored
13
.github/ISSUE_TEMPLATE/7-angular-components.md
vendored
@ -1,13 +0,0 @@
|
|||||||
---
|
|
||||||
name: "\U0001F48EAngular Components"
|
|
||||||
about: Issues and feature requests for Angular Components
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑
|
|
||||||
|
|
||||||
Please file any Angular Components issues at: https://github.com/angular/components/issues/new
|
|
||||||
|
|
||||||
For the time being, we keep Angular Components issues in a separate repository.
|
|
||||||
|
|
||||||
🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑
|
|
13
.github/ISSUE_TEMPLATE/7-angular-material.md
vendored
Normal file
13
.github/ISSUE_TEMPLATE/7-angular-material.md
vendored
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
---
|
||||||
|
name: "\U0001F48EAngular Material"
|
||||||
|
about: Issues and feature requests for Angular Material
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑
|
||||||
|
|
||||||
|
Please file any Angular Material issues at: https://github.com/angular/material2/issues/new
|
||||||
|
|
||||||
|
For the time being, we keep Angular Material issues in a separate repository.
|
||||||
|
|
||||||
|
🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑
|
9
.github/angular-robot.yml
vendored
9
.github/angular-robot.yml
vendored
@ -30,7 +30,7 @@ merge:
|
|||||||
# text to show when the status is success
|
# text to show when the status is success
|
||||||
successDesc: "Does not affect google3"
|
successDesc: "Does not affect google3"
|
||||||
# link to use for the details
|
# link to use for the details
|
||||||
url: "http://go/angular/g3sync"
|
url: "http://go/angular-g3sync"
|
||||||
# list of patterns to check for the files changed by the PR
|
# list of patterns to check for the files changed by the PR
|
||||||
# this list must be manually kept in sync with google3/third_party/javascript/angular2/copy.bara.sky
|
# this list must be manually kept in sync with google3/third_party/javascript/angular2/copy.bara.sky
|
||||||
include:
|
include:
|
||||||
@ -52,7 +52,6 @@ merge:
|
|||||||
- "packages/elements/schematics/**"
|
- "packages/elements/schematics/**"
|
||||||
- "packages/examples/**"
|
- "packages/examples/**"
|
||||||
- "packages/language-service/**"
|
- "packages/language-service/**"
|
||||||
- "packages/localize/**"
|
|
||||||
- "packages/private/**"
|
- "packages/private/**"
|
||||||
- "packages/service-worker/**"
|
- "packages/service-worker/**"
|
||||||
- "**/.gitignore"
|
- "**/.gitignore"
|
||||||
@ -62,15 +61,10 @@ merge:
|
|||||||
- "**/third_party/**"
|
- "**/third_party/**"
|
||||||
- "**/tsconfig-build.json"
|
- "**/tsconfig-build.json"
|
||||||
- "**/tsconfig.json"
|
- "**/tsconfig.json"
|
||||||
- "**/rollup.config.js"
|
|
||||||
- "**/BUILD.bazel"
|
- "**/BUILD.bazel"
|
||||||
- "**/*.md"
|
- "**/*.md"
|
||||||
- "packages/**/integrationtest/**"
|
- "packages/**/integrationtest/**"
|
||||||
- "packages/**/test/**"
|
- "packages/**/test/**"
|
||||||
- "packages/zone.js/*"
|
|
||||||
- "packages/zone.js/doc/**"
|
|
||||||
- "packages/zone.js/example/**"
|
|
||||||
- "packages/zone.js/scripts/**"
|
|
||||||
|
|
||||||
# comment that will be added to a PR when there is a conflict, leave empty or set to false to disable
|
# comment that will be added to a PR when there is a conflict, leave empty or set to false to disable
|
||||||
mergeConflictComment: "Hi @{{PRAuthor}}! This PR has merge conflicts due to recent upstream merges.
|
mergeConflictComment: "Hi @{{PRAuthor}}! This PR has merge conflicts due to recent upstream merges.
|
||||||
@ -115,7 +109,6 @@ merge:
|
|||||||
- "ci/angular: size"
|
- "ci/angular: size"
|
||||||
- "cla/google"
|
- "cla/google"
|
||||||
- "google3"
|
- "google3"
|
||||||
- "pullapprove"
|
|
||||||
|
|
||||||
|
|
||||||
# the comment that will be added when the merge label is added despite failing checks, leave empty or set to false to disable
|
# the comment that will be added when the merge label is added despite failing checks, leave empty or set to false to disable
|
||||||
|
14
.github/workflows/lock-closed.yml
vendored
14
.github/workflows/lock-closed.yml
vendored
@ -1,14 +0,0 @@
|
|||||||
name: Lock closed inactive issues
|
|
||||||
|
|
||||||
on:
|
|
||||||
schedule:
|
|
||||||
# Run at 16:00 every day
|
|
||||||
- cron: '0 16 * * *'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
lock_closed:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: angular/dev-infra/github-actions/lock-closed@66462f6
|
|
||||||
with:
|
|
||||||
lock-bot-key: ${{ secrets.LOCK_BOT_PRIVATE_KEY }}
|
|
8
.gitignore
vendored
8
.gitignore
vendored
@ -3,7 +3,7 @@
|
|||||||
/dist/
|
/dist/
|
||||||
/bazel-out
|
/bazel-out
|
||||||
/integration/bazel/bazel-*
|
/integration/bazel/bazel-*
|
||||||
*.log
|
e2e_test.*
|
||||||
node_modules
|
node_modules
|
||||||
tools/gulp-tasks/cldr/cldr-data/
|
tools/gulp-tasks/cldr/cldr-data/
|
||||||
|
|
||||||
@ -12,18 +12,14 @@ pubspec.lock
|
|||||||
.c9
|
.c9
|
||||||
.idea/
|
.idea/
|
||||||
.devcontainer/*
|
.devcontainer/*
|
||||||
!.devcontainer/README.md
|
|
||||||
!.devcontainer/recommended-devcontainer.json
|
!.devcontainer/recommended-devcontainer.json
|
||||||
!.devcontainer/recommended-Dockerfile
|
!.devcontainer/recommended-Dockerfile
|
||||||
.settings/
|
.settings/
|
||||||
.vscode/launch.json
|
.vscode/launch.json
|
||||||
.vscode/settings.json
|
.vscode/settings.json
|
||||||
.vscode/tasks.json
|
|
||||||
*.swo
|
*.swo
|
||||||
modules/.settings
|
modules/.settings
|
||||||
modules/.vscode
|
modules/.vscode
|
||||||
.vimrc
|
|
||||||
.nvimrc
|
|
||||||
|
|
||||||
# Don't check in secret files
|
# Don't check in secret files
|
||||||
*secret.js
|
*secret.js
|
||||||
@ -41,5 +37,3 @@ yarn-error.log
|
|||||||
# User specific bazel settings
|
# User specific bazel settings
|
||||||
.bazelrc.user
|
.bazelrc.user
|
||||||
|
|
||||||
.notes.md
|
|
||||||
baseline.json
|
|
||||||
|
1073
.pullapprove.yml
1073
.pullapprove.yml
File diff suppressed because it is too large
Load Diff
18
.vscode/README.md
vendored
18
.vscode/README.md
vendored
@ -1,25 +1,23 @@
|
|||||||
# VSCode Configuration
|
# VSCode Configuration
|
||||||
|
|
||||||
This folder contains opt-in [Workspace Settings](https://code.visualstudio.com/docs/getstarted/settings), [Tasks](https://code.visualstudio.com/docs/editor/tasks), [Launch Configurations](https://code.visualstudio.com/Docs/editor/debugging#_launch-configurations) and [Extension Recommendations](https://code.visualstudio.com/docs/editor/extension-gallery#_workspace-recommended-extensions) that the Angular team recommends using when working on this repository.
|
This folder contains opt-in [Workspace Settings](https://code.visualstudio.com/docs/getstarted/settings) and [Extension Recommendations](https://code.visualstudio.com/docs/editor/extension-gallery#_workspace-recommended-extensions) that the Angular team recommends using when working on this repository.
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
To use the recommended configurations follow the steps below:
|
To use the recommended settings follow the steps below:
|
||||||
|
|
||||||
- install the recommneded extensions in `.vscode/extensions.json`
|
- install <https://marketplace.visualstudio.com/items?itemName=xaver.clang-format>
|
||||||
- copy (or link) `.vscode/recommended-settings.json` to `.vscode/settings.json`
|
- copy `.vscode/recommended-settings.json` to `.vscode/settings.json`
|
||||||
- copy (or link) `.vscode/recommended-launch.json` to `.vscode/launch.json`
|
|
||||||
- copy (or link) `.vscode/recommended-tasks.json` to `.vscode/tasks.json`
|
|
||||||
- restart the editor
|
- restart the editor
|
||||||
|
|
||||||
If you already have your custom workspace settings you should instead manually merge the file contents.
|
If you already have your custom workspace settings you should instead manually merge the file content.
|
||||||
|
|
||||||
This isn't an automatic process so you will need to repeat it when settings are updated.
|
This isn't an automatic process so you will need to repeat it when settings are updated.
|
||||||
|
|
||||||
To see the recommended extensions select "Extensions: Show Recommended Extensions" in the [Command Palette](https://code.visualstudio.com/docs/getstarted/userinterface#_command-palette).
|
To see the recommended extensions select "Extensions: Show Recommended Extensions" in the [Command Palette](https://code.visualstudio.com/docs/getstarted/userinterface#_command-palette).
|
||||||
|
|
||||||
## Editing `.vscode/recommended-*.json` files
|
## Editing `.vscode/recommended-settings.json`
|
||||||
|
|
||||||
If you wish to add extra configuration items please keep in mind any modifications you make here will be used by many users.
|
If you wish to add extra configuration items please keep in mind any settings you add here will be used by many users.
|
||||||
|
|
||||||
Try to keep these settings/configuations to things that help facilitate the development process and avoid altering the user workflow whenever possible.
|
Try to keep these settings to things that help facilitate the development process and avoid altering the user workflow whenever possible.
|
||||||
|
85
.vscode/recommended-launch.json
vendored
85
.vscode/recommended-launch.json
vendored
@ -1,85 +0,0 @@
|
|||||||
{
|
|
||||||
// Use IntelliSense to learn about possible attributes.
|
|
||||||
// Hover to view descriptions of existing attributes.
|
|
||||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
|
||||||
"version": "0.2.0",
|
|
||||||
"configurations": [
|
|
||||||
{
|
|
||||||
"name": "Attach to bazel test ... --config=debug",
|
|
||||||
"type": "node",
|
|
||||||
"request": "attach",
|
|
||||||
"port": 9229,
|
|
||||||
"address": "localhost",
|
|
||||||
"restart": false,
|
|
||||||
"sourceMaps": true,
|
|
||||||
"localRoot": "${workspaceRoot}",
|
|
||||||
"remoteRoot": "${workspaceRoot}",
|
|
||||||
"stopOnEntry": false,
|
|
||||||
"timeout": 600000,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Attach to bazel test ... --config=debug (no source maps)",
|
|
||||||
"type": "node",
|
|
||||||
"request": "attach",
|
|
||||||
"port": 9229,
|
|
||||||
"address": "localhost",
|
|
||||||
"restart": false,
|
|
||||||
"sourceMaps": false,
|
|
||||||
"localRoot": "${workspaceRoot}",
|
|
||||||
"remoteRoot": "${workspaceRoot}",
|
|
||||||
"stopOnEntry": false,
|
|
||||||
"timeout": 600000,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "IVY:packages/core/test/acceptance",
|
|
||||||
"type": "node",
|
|
||||||
"request": "launch",
|
|
||||||
"program": "${workspaceFolder}/node_modules/.bin/bazel",
|
|
||||||
"args": [
|
|
||||||
"test",
|
|
||||||
"--config=ivy",
|
|
||||||
"packages/core/test/acceptance",
|
|
||||||
"--config=debug"
|
|
||||||
],
|
|
||||||
"port": 9229,
|
|
||||||
"address": "localhost",
|
|
||||||
"restart": true,
|
|
||||||
"sourceMaps": true,
|
|
||||||
"timeout": 600000,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "IVY:packages/core/test/render3",
|
|
||||||
"type": "node",
|
|
||||||
"request": "launch",
|
|
||||||
"program": "${workspaceFolder}/node_modules/.bin/bazel",
|
|
||||||
"args": [
|
|
||||||
"test",
|
|
||||||
"--config=ivy",
|
|
||||||
"packages/core/test/render3",
|
|
||||||
"--config=debug"
|
|
||||||
],
|
|
||||||
"port": 9229,
|
|
||||||
"address": "localhost",
|
|
||||||
"restart": true,
|
|
||||||
"sourceMaps": true,
|
|
||||||
"timeout": 600000,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "IVY:packages/core/test",
|
|
||||||
"type": "node",
|
|
||||||
"request": "launch",
|
|
||||||
"program": "${workspaceFolder}/node_modules/.bin/bazel",
|
|
||||||
"args": [
|
|
||||||
"test",
|
|
||||||
"--config=ivy",
|
|
||||||
"packages/core/test",
|
|
||||||
"--config=debug"
|
|
||||||
],
|
|
||||||
"port": 9229,
|
|
||||||
"address": "localhost",
|
|
||||||
"restart": true,
|
|
||||||
"sourceMaps": true,
|
|
||||||
"timeout": 600000,
|
|
||||||
},
|
|
||||||
]
|
|
||||||
}
|
|
113
.vscode/recommended-tasks.json
vendored
113
.vscode/recommended-tasks.json
vendored
@ -1,113 +0,0 @@
|
|||||||
{
|
|
||||||
// See https://go.microsoft.com/fwlink/?LinkId=733558
|
|
||||||
// for the documentation about the tasks.json format
|
|
||||||
"version": "2.0.0",
|
|
||||||
"tasks": [
|
|
||||||
{
|
|
||||||
"label": "IVY:packages/core/test/...",
|
|
||||||
"type": "shell",
|
|
||||||
"command": "${workspaceFolder}/node_modules/.bin/bazel",
|
|
||||||
"args": [
|
|
||||||
"test",
|
|
||||||
"--config=ivy",
|
|
||||||
"packages/core/test",
|
|
||||||
"packages/core/test/acceptance",
|
|
||||||
"packages/core/test/render3",
|
|
||||||
],
|
|
||||||
"group": "test",
|
|
||||||
"presentation": {
|
|
||||||
"reveal": "always",
|
|
||||||
"panel": "dedicated",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"label": "VE:packages/core/test/...",
|
|
||||||
"type": "shell",
|
|
||||||
"command": "${workspaceFolder}/node_modules/.bin/bazel",
|
|
||||||
"args": [
|
|
||||||
"test",
|
|
||||||
"packages/core/test",
|
|
||||||
"packages/core/test/acceptance",
|
|
||||||
"packages/core/test/render3",
|
|
||||||
],
|
|
||||||
"group": "test",
|
|
||||||
"presentation": {
|
|
||||||
"reveal": "always",
|
|
||||||
"panel": "dedicated",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"label": "IVY:packages/core/test/acceptance",
|
|
||||||
"type": "shell",
|
|
||||||
"command": "${workspaceFolder}/node_modules/.bin/bazel",
|
|
||||||
"args": [
|
|
||||||
"test",
|
|
||||||
"--config=ivy",
|
|
||||||
"packages/core/test/acceptance",
|
|
||||||
],
|
|
||||||
"group": "test",
|
|
||||||
"presentation": {
|
|
||||||
"reveal": "always",
|
|
||||||
"panel": "dedicated",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"label": "VE:packages/core/test/acceptance",
|
|
||||||
"type": "shell",
|
|
||||||
"command": "${workspaceFolder}/node_modules/.bin/bazel",
|
|
||||||
"args": [
|
|
||||||
"test",
|
|
||||||
"packages/core/test/acceptance",
|
|
||||||
],
|
|
||||||
"group": "test",
|
|
||||||
"presentation": {
|
|
||||||
"reveal": "always",
|
|
||||||
"panel": "dedicated",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"label": "IVY:packages/core/test",
|
|
||||||
"type": "shell",
|
|
||||||
"command": "${workspaceFolder}/node_modules/.bin/bazel",
|
|
||||||
"args": [
|
|
||||||
"test",
|
|
||||||
"--config=ivy",
|
|
||||||
"packages/core/test",
|
|
||||||
],
|
|
||||||
"group": "test",
|
|
||||||
"presentation": {
|
|
||||||
"reveal": "always",
|
|
||||||
"panel": "dedicated",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"label": "VE:packages/core/test",
|
|
||||||
"type": "shell",
|
|
||||||
"command": "${workspaceFolder}/node_modules/.bin/bazel",
|
|
||||||
"args": [
|
|
||||||
"test",
|
|
||||||
"packages/core/test",
|
|
||||||
],
|
|
||||||
"group": "test",
|
|
||||||
"presentation": {
|
|
||||||
"reveal": "always",
|
|
||||||
"panel": "dedicated",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"label": "IVY:packages/core/test/render3",
|
|
||||||
"type": "shell",
|
|
||||||
"command": "${workspaceFolder}/node_modules/.bin/bazel",
|
|
||||||
"args": [
|
|
||||||
"test",
|
|
||||||
"--config=ivy",
|
|
||||||
"packages/core/test/render3",
|
|
||||||
],
|
|
||||||
"group": "test",
|
|
||||||
"presentation": {
|
|
||||||
"reveal": "always",
|
|
||||||
"panel": "dedicated",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
}
|
|
@ -1,13 +0,0 @@
|
|||||||
# Yarn Vendoring
|
|
||||||
We utilize Yarn's `yarn-path` configuration in a shared `.yarnrc` file to enforce
|
|
||||||
everyone using the same version of Yarn. Yarn checks the `.yarnrc` file to
|
|
||||||
determine if yarn should delegate the command to a vendored version at the
|
|
||||||
provided path.
|
|
||||||
|
|
||||||
## How to update
|
|
||||||
To update to the latest version of Yarn as our vendored version:
|
|
||||||
- Run this command
|
|
||||||
```sh
|
|
||||||
yarn policies set-version latest
|
|
||||||
```
|
|
||||||
- Remove the previous version
|
|
5
.yarnrc
5
.yarnrc
@ -1,5 +0,0 @@
|
|||||||
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
|
||||||
# yarn lockfile v1
|
|
||||||
|
|
||||||
|
|
||||||
yarn-path ".yarn/releases/yarn-1.21.1.js"
|
|
106
BUILD.bazel
106
BUILD.bazel
@ -19,9 +19,9 @@ filegroup(
|
|||||||
# do not sort
|
# do not sort
|
||||||
srcs = [
|
srcs = [
|
||||||
"@npm//:node_modules/core-js/client/core.js",
|
"@npm//:node_modules/core-js/client/core.js",
|
||||||
"//packages/zone.js/dist:zone.js",
|
"@npm//:node_modules/zone.js/dist/zone.js",
|
||||||
"//packages/zone.js/dist:zone-testing.js",
|
"@npm//:node_modules/zone.js/dist/zone-testing.js",
|
||||||
"//packages/zone.js/dist:task-tracking.js",
|
"@npm//:node_modules/zone.js/dist/task-tracking.js",
|
||||||
"//:test-events.js",
|
"//:test-events.js",
|
||||||
"//:shims_for_IE.js",
|
"//:shims_for_IE.js",
|
||||||
# Including systemjs because it defines `__eval`, which produces correct stack traces.
|
# Including systemjs because it defines `__eval`, which produces correct stack traces.
|
||||||
@ -47,75 +47,47 @@ filegroup(
|
|||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
# To run manually:
|
# To run a karma_web_test target locally on SauceLabs:
|
||||||
# Setup your SAUCE_USERNAME, SAUCE_ACCESS_KEY & SAUCE_TUNNEL_IDENTIFIER.
|
# 1) have SAUCE_USERNAME, SAUCE_ACCESS_KEY (and optionally a SAUCE_TUNNEL_IDENTIFIER) set in your environment
|
||||||
# If on OSX, also set SAUCE_CONNECT to the path of your `sc` binary.
|
# 2) open a sauce connection with `./scripts/saucelabs/start-tunnel.sh`
|
||||||
# environment variables and run:
|
# NOTE: start-tunnel.sh uses `node_modules/sauce-connect` which is current linux specific:
|
||||||
# ```
|
# "sauce-connect": "https://saucelabs.com/downloads/sc-4.5.3-linux.tar.gz".
|
||||||
# yarn bazel run //tools/saucelabs:sauce_service_setup
|
# On OSX or Windows you'll need to use the appropriate sauce-connect binary.
|
||||||
# yarn bazel test //:saucelabs_unit_tests --config=saucelabs --config=ivy
|
# 3) run target with `yarn bazel test --config=saucelabs <target>`
|
||||||
# ```
|
# NOTE: --config=saucelabs is required as it makes the SAUCE_XXX environment variables available to
|
||||||
# See /tools/saucelabs/README.md for more info on karma Saucelabs tests under Bazel.
|
# the action. See /.bazelrc.
|
||||||
karma_web_test(
|
karma_web_test(
|
||||||
name = "saucelabs_unit_tests",
|
name = "test_web_all",
|
||||||
# Default timeout is moderate (5min). This causes the test to be terminated while
|
|
||||||
# Saucelabs browsers keep running. Ultimately resulting in failing tests and browsers
|
|
||||||
# unnecessarily being acquired. Our specified Saucelabs idle timeout is 10min, so we use
|
|
||||||
# Bazel's long timeout (15min). This ensures that Karma can shut down properly.
|
|
||||||
timeout = "long",
|
|
||||||
karma = "//tools/saucelabs:karma-saucelabs",
|
|
||||||
tags = [
|
tags = [
|
||||||
|
"local",
|
||||||
"manual",
|
"manual",
|
||||||
"no-remote-exec",
|
|
||||||
"saucelabs",
|
"saucelabs",
|
||||||
],
|
],
|
||||||
deps = [
|
deps = [
|
||||||
"//packages/core/test/acceptance:acceptance_lib",
|
# We combine all tests into a single karma_web_test target
|
||||||
|
# as running them as seperate targets in parallel leads to too many
|
||||||
|
# browsers being acquired at once in SauceLabs and the tests flake out
|
||||||
|
# TODO: this is an example subset of tests below, add all remaining angular tests
|
||||||
|
"//packages/common/http/test:test_lib",
|
||||||
|
"//packages/common/http/testing/test:test_lib",
|
||||||
|
"//packages/common/test:test_lib",
|
||||||
|
"//packages/core/test:test_lib",
|
||||||
|
"//packages/forms/test:test_lib",
|
||||||
|
"//packages/http/test:test_lib",
|
||||||
|
"//packages/zone.js/test:karma_jasmine_test_ci",
|
||||||
|
# "//packages/router/test:test_lib",
|
||||||
|
# //packages/router/test:test_lib fails with:
|
||||||
|
# IE 11.0.0 (Windows 8.1.0.0) bootstrap should restore the scrolling position FAILED
|
||||||
|
# Expected undefined to equal 5000.
|
||||||
|
# at stack (eval code:2338:11)
|
||||||
|
# at buildExpectationResult (eval code:2305:5)
|
||||||
|
# at expectationResultFactory (eval code:858:11)
|
||||||
|
# at Spec.prototype.addExpectationResult (eval code:487:5)
|
||||||
|
# at addExpectationResult (eval code:802:9)
|
||||||
|
# at Anonymous function (eval code:2252:7)
|
||||||
|
# at Anonymous function (eval code:339:25)
|
||||||
|
# at step (eval code:133:17)
|
||||||
|
# at Anonymous function (eval code:114:50)
|
||||||
|
# at fulfilled (eval code:104:47)
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
SAUCE_TEST_SUITE_TARGETS = [
|
|
||||||
"packages/common/http/test:test_lib",
|
|
||||||
"packages/common/http/testing/test:test_lib",
|
|
||||||
"packages/common/test:test_lib",
|
|
||||||
"packages/core/test:test_lib",
|
|
||||||
"packages/forms/test:test_lib",
|
|
||||||
"packages/http/test:test_lib",
|
|
||||||
]
|
|
||||||
|
|
||||||
[
|
|
||||||
# These target runs in CI with View Engine as a Saucelabs and Bazel proof-of-concept. It's a
|
|
||||||
# subset of the legacy saucelabs tests.
|
|
||||||
karma_web_test(
|
|
||||||
name = "saucelabs_unit_tests_poc_%s" % test.replace("/", "_").replace(":", "_").replace(".", "_"),
|
|
||||||
# Default timeout is moderate (5min). This causes the test to be terminated while
|
|
||||||
# Saucelabs browsers keep running. Ultimately resulting in failing tests and browsers
|
|
||||||
# unnecessarily being acquired. Our specified Saucelabs idle timeout is 10min, so we use
|
|
||||||
# Bazel's long timeout (15min). This ensures that Karma can shut down properly.
|
|
||||||
timeout = "long",
|
|
||||||
karma = "//tools/saucelabs:karma-saucelabs",
|
|
||||||
tags = [
|
|
||||||
"exclusive",
|
|
||||||
"manual",
|
|
||||||
"no-remote-exec",
|
|
||||||
"saucelabs",
|
|
||||||
],
|
|
||||||
deps = ["//%s" % test],
|
|
||||||
)
|
|
||||||
for test in SAUCE_TEST_SUITE_TARGETS
|
|
||||||
]
|
|
||||||
|
|
||||||
# To run manually:
|
|
||||||
# Setup your SAUCE_USERNAME, SAUCE_ACCESS_KEY & SAUCE_TUNNEL_IDENTIFIER.
|
|
||||||
# If on OSX, also set SAUCE_CONNECT to the path of your `sc` binary.
|
|
||||||
# environment variables and run:
|
|
||||||
# ```
|
|
||||||
# yarn bazel run //tools/saucelabs:sauce_service_setup
|
|
||||||
# yarn bazel test //:saucelabs_unit_tests_poc_suite --config=saucelabs
|
|
||||||
# ```
|
|
||||||
# See /tools/saucelabs/README.md for more info on karma Saucelabs tests under Bazel.
|
|
||||||
test_suite(
|
|
||||||
name = "saucelabs_unit_tests_poc_suite",
|
|
||||||
tags = ["manual"],
|
|
||||||
tests = ["//:saucelabs_unit_tests_poc_%s" % test.replace("/", "_").replace(":", "_").replace(".", "_") for test in SAUCE_TEST_SUITE_TARGETS],
|
|
||||||
)
|
|
||||||
|
1364
CHANGELOG.md
1364
CHANGELOG.md
File diff suppressed because it is too large
Load Diff
@ -55,9 +55,9 @@ We want to fix all the issues as soon as possible, but before fixing a bug we ne
|
|||||||
|
|
||||||
A minimal reproduction allows us to quickly confirm a bug (or point out a coding problem) as well as confirm that we are fixing the right problem.
|
A minimal reproduction allows us to quickly confirm a bug (or point out a coding problem) as well as confirm that we are fixing the right problem.
|
||||||
|
|
||||||
We will be insisting on a minimal reproduction scenario in order to save maintainers time and ultimately be able to fix more bugs. Interestingly, from our experience, users often find coding problems themselves while preparing a minimal reproduction. We understand that sometimes it might be hard to extract essential bits of code from a larger codebase but we really need to isolate the problem before we can fix it.
|
We will be insisting on a minimal reproduction scenario in order to save maintainers time and ultimately be able to fix more bugs. Interestingly, from our experience users often find coding problems themselves while preparing a minimal reproduction. We understand that sometimes it might be hard to extract essential bits of code from a larger code-base but we really need to isolate the problem before we can fix it.
|
||||||
|
|
||||||
Unfortunately, we are not able to investigate / fix bugs without a minimal reproduction, so if we don't hear back from you, we are going to close an issue that doesn't have enough info to be reproduced.
|
Unfortunately, we are not able to investigate / fix bugs without a minimal reproduction, so if we don't hear back from you we are going to close an issue that doesn't have enough info to be reproduced.
|
||||||
|
|
||||||
You can file new issues by selecting from our [new issue templates](https://github.com/angular/angular/issues/new/choose) and filling out the issue template.
|
You can file new issues by selecting from our [new issue templates](https://github.com/angular/angular/issues/new/choose) and filling out the issue template.
|
||||||
|
|
||||||
@ -168,7 +168,7 @@ format that includes a **type**, a **scope** and a **subject**:
|
|||||||
|
|
||||||
The **header** is mandatory and the **scope** of the header is optional.
|
The **header** is mandatory and the **scope** of the header is optional.
|
||||||
|
|
||||||
Any line of the commit message cannot be longer than 100 characters! This allows the message to be easier
|
Any line of the commit message cannot be longer 100 characters! This allows the message to be easier
|
||||||
to read on GitHub as well as in various git tools.
|
to read on GitHub as well as in various git tools.
|
||||||
|
|
||||||
The footer should contain a [closing reference to an issue](https://help.github.com/articles/closing-issues-via-commit-messages/) if any.
|
The footer should contain a [closing reference to an issue](https://help.github.com/articles/closing-issues-via-commit-messages/) if any.
|
||||||
@ -201,7 +201,7 @@ Must be one of the following:
|
|||||||
* **test**: Adding missing tests or correcting existing tests
|
* **test**: Adding missing tests or correcting existing tests
|
||||||
|
|
||||||
### Scope
|
### Scope
|
||||||
The scope should be the name of the npm package affected (as perceived by the person reading the changelog generated from commit messages).
|
The scope should be the name of the npm package affected (as perceived by the person reading the changelog generated from commit messages.
|
||||||
|
|
||||||
The following is the list of supported scopes:
|
The following is the list of supported scopes:
|
||||||
|
|
||||||
@ -262,8 +262,8 @@ A detailed explanation can be found in this [document][commit-message-format].
|
|||||||
Please sign our Contributor License Agreement (CLA) before sending pull requests. For any code
|
Please sign our Contributor License Agreement (CLA) before sending pull requests. For any code
|
||||||
changes to be accepted, the CLA must be signed. It's a quick process, we promise!
|
changes to be accepted, the CLA must be signed. It's a quick process, we promise!
|
||||||
|
|
||||||
* For individuals, we have a [simple click-through form][individual-cla].
|
* For individuals we have a [simple click-through form][individual-cla].
|
||||||
* For corporations, we'll need you to
|
* For corporations we'll need you to
|
||||||
[print, sign and one of scan+email, fax or mail the form][corporate-cla].
|
[print, sign and one of scan+email, fax or mail the form][corporate-cla].
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
@ -279,6 +279,7 @@ changes to be accepted, the CLA must be signed. It's a quick process, we promise
|
|||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
|
|
||||||
[angular-group]: https://groups.google.com/forum/#!forum/angular
|
[angular-group]: https://groups.google.com/forum/#!forum/angular
|
||||||
[coc]: https://github.com/angular/code-of-conduct/blob/master/CODE_OF_CONDUCT.md
|
[coc]: https://github.com/angular/code-of-conduct/blob/master/CODE_OF_CONDUCT.md
|
||||||
[commit-message-format]: https://docs.google.com/document/d/1QrDFcIiPjSLDn3EL15IJygNPiHORgU1_OOAqWjiDU5Y/edit#
|
[commit-message-format]: https://docs.google.com/document/d/1QrDFcIiPjSLDn3EL15IJygNPiHORgU1_OOAqWjiDU5Y/edit#
|
||||||
|
2
LICENSE
2
LICENSE
@ -1,6 +1,6 @@
|
|||||||
The MIT License
|
The MIT License
|
||||||
|
|
||||||
Copyright (c) 2010-2020 Google LLC. http://angular.io/license
|
Copyright (c) 2010-2019 Google LLC. http://angular.io/license
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
72
WORKSPACE
72
WORKSPACE
@ -5,15 +5,28 @@ workspace(
|
|||||||
|
|
||||||
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
|
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
|
||||||
|
|
||||||
|
# Uncomment for local bazel rules development
|
||||||
|
#local_repository(
|
||||||
|
# name = "build_bazel_rules_nodejs",
|
||||||
|
# path = "../rules_nodejs",
|
||||||
|
#)
|
||||||
|
#local_repository(
|
||||||
|
# name = "npm_bazel_typescript",
|
||||||
|
# path = "../rules_typescript",
|
||||||
|
#)
|
||||||
|
|
||||||
# Fetch rules_nodejs so we can install our npm dependencies
|
# Fetch rules_nodejs so we can install our npm dependencies
|
||||||
http_archive(
|
http_archive(
|
||||||
name = "build_bazel_rules_nodejs",
|
name = "build_bazel_rules_nodejs",
|
||||||
sha256 = "6bcef105e75cac3c5f8212e0d0431b6ec1aaa1963e093b0091474ab98ecf29d2",
|
patch_args = ["-p1"],
|
||||||
urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/1.2.2/rules_nodejs-1.2.2.tar.gz"],
|
# Patch https://github.com/bazelbuild/rules_nodejs/pull/903
|
||||||
|
patches = ["//tools:rollup_bundle_commonjs_ignoreGlobal.patch"],
|
||||||
|
sha256 = "7c4a690268be97c96f04d505224ec4cb1ae53c2c2b68be495c9bd2634296a5cd",
|
||||||
|
urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/0.34.0/rules_nodejs-0.34.0.tar.gz"],
|
||||||
)
|
)
|
||||||
|
|
||||||
# Check the bazel version and download npm dependencies
|
# Check the bazel version and download npm dependencies
|
||||||
load("@build_bazel_rules_nodejs//:index.bzl", "check_bazel_version", "check_rules_nodejs_version", "node_repositories", "yarn_install")
|
load("@build_bazel_rules_nodejs//:defs.bzl", "check_bazel_version", "check_rules_nodejs_version", "node_repositories", "yarn_install")
|
||||||
|
|
||||||
# Bazel version must be at least the following version because:
|
# Bazel version must be at least the following version because:
|
||||||
# - 0.26.0 managed_directories feature added which is required for nodejs rules 0.30.0
|
# - 0.26.0 managed_directories feature added which is required for nodejs rules 0.30.0
|
||||||
@ -26,23 +39,44 @@ Try running `yarn bazel` instead.
|
|||||||
(If you did run that, check that you've got a fresh `yarn install`)
|
(If you did run that, check that you've got a fresh `yarn install`)
|
||||||
|
|
||||||
""",
|
""",
|
||||||
minimum_bazel_version = "2.0.0",
|
minimum_bazel_version = "0.27.0",
|
||||||
)
|
)
|
||||||
|
|
||||||
check_rules_nodejs_version(minimum_version_string = "1.2.2")
|
# The NodeJS rules version must be at least the following version 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
|
||||||
|
# - 0.26.0 Fix for data files in yarn_install and npm_install
|
||||||
|
# - 0.27.12 Adds NodeModuleSources provider for transtive npm deps support
|
||||||
|
# - 0.30.0 yarn_install now uses symlinked node_modules with new managed directories Bazel 0.26.0 feature
|
||||||
|
# - 0.31.1 entry_point attribute of nodejs_binary & rollup_bundle is now a label
|
||||||
|
# - 0.32.0 yarn_install and npm_install no longer puts build files under symlinked node_modules
|
||||||
|
# - 0.32.1 remove override of @bazel/tsetse & exclude typescript lib declarations in node_module_library transitive_declarations
|
||||||
|
# - 0.32.2 resolves bug in @bazel/hide-bazel-files postinstall step
|
||||||
|
# - 0.34.0 introduces protractor rule
|
||||||
|
check_rules_nodejs_version(minimum_version_string = "0.34.0")
|
||||||
|
|
||||||
# Setup the Node.js toolchain
|
# Setup the Node.js toolchain
|
||||||
node_repositories(
|
node_repositories(
|
||||||
node_repositories = {
|
node_repositories = {
|
||||||
"12.14.1-darwin_amd64": ("node-v12.14.1-darwin-x64.tar.gz", "node-v12.14.1-darwin-x64", "0be10a28737527a1e5e3784d3ad844d742fe8b0718acd701fd48f718fd3af78f"),
|
"10.16.0-darwin_amd64": ("node-v10.16.0-darwin-x64.tar.gz", "node-v10.16.0-darwin-x64", "6c009df1b724026d84ae9a838c5b382662e30f6c5563a0995532f2bece39fa9c"),
|
||||||
"12.14.1-linux_amd64": ("node-v12.14.1-linux-x64.tar.xz", "node-v12.14.1-linux-x64", "07cfcaa0aa9d0fcb6e99725408d9e0b07be03b844701588e3ab5dbc395b98e1b"),
|
"10.16.0-linux_amd64": ("node-v10.16.0-linux-x64.tar.xz", "node-v10.16.0-linux-x64", "1827f5b99084740234de0c506f4dd2202a696ed60f76059696747c34339b9d48"),
|
||||||
"12.14.1-windows_amd64": ("node-v12.14.1-win-x64.zip", "node-v12.14.1-win-x64", "1f96ccce3ba045ecea3f458e189500adb90b8bc1a34de5d82fc10a5bf66ce7e3"),
|
"10.16.0-windows_amd64": ("node-v10.16.0-win-x64.zip", "node-v10.16.0-win-x64", "aa22cb357f0fb54ccbc06b19b60e37eefea5d7dd9940912675d3ed988bf9a059"),
|
||||||
},
|
},
|
||||||
node_version = "12.14.1",
|
node_version = "10.16.0",
|
||||||
package_json = ["//:package.json"],
|
package_json = ["//:package.json"],
|
||||||
# Label needs to explicitly specify the current workspace name because otherwise Bazel does
|
yarn_repositories = {
|
||||||
# not provide all needed data (like "workspace_root") to the repository context.
|
"1.17.3": ("yarn-v1.17.3.tar.gz", "yarn-v1.17.3", "e3835194409f1b3afa1c62ca82f561f1c29d26580c9e220c36866317e043c6f3"),
|
||||||
vendored_yarn = "@angular//:third_party/github.com/yarnpkg/yarn/releases/download/v1.21.1",
|
},
|
||||||
|
# yarn 1.13.0 under Bazel has a regression on Windows that causes build errors on rebuilds:
|
||||||
|
# ```
|
||||||
|
# ERROR: Source forest creation failed: C:/.../fyuc5c3n/execroot/angular/external (Directory not empty)
|
||||||
|
# ```
|
||||||
|
# See https://github.com/angular/angular/pull/29431 for more information.
|
||||||
|
# It possible that versions of yarn past 1.13.0 do not have this issue, however, before
|
||||||
|
# advancing this version we need to test manually on Windows that the above error does not
|
||||||
|
# happen as the issue is not caught by CI.
|
||||||
|
yarn_version = "1.17.3",
|
||||||
)
|
)
|
||||||
|
|
||||||
yarn_install(
|
yarn_install(
|
||||||
@ -67,16 +101,18 @@ load("@npm_bazel_protractor//:package.bzl", "npm_bazel_protractor_dependencies")
|
|||||||
npm_bazel_protractor_dependencies()
|
npm_bazel_protractor_dependencies()
|
||||||
|
|
||||||
# Load karma dependencies
|
# Load karma dependencies
|
||||||
load("@npm_bazel_karma//:package.bzl", "npm_bazel_karma_dependencies")
|
load("@npm_bazel_karma//:package.bzl", "rules_karma_dependencies")
|
||||||
|
|
||||||
npm_bazel_karma_dependencies()
|
rules_karma_dependencies()
|
||||||
|
|
||||||
# Setup the rules_webtesting toolchain
|
# Setup the rules_webtesting toolchain
|
||||||
load("@io_bazel_rules_webtesting//web:repositories.bzl", "web_test_repositories")
|
load("@io_bazel_rules_webtesting//web:repositories.bzl", "web_test_repositories")
|
||||||
|
|
||||||
web_test_repositories()
|
web_test_repositories()
|
||||||
|
|
||||||
load("//tools/browsers:browser_repositories.bzl", "browser_repositories")
|
# Temporary work-around for https://github.com/angular/angular/issues/28681
|
||||||
|
# TODO(gregmagolan): go back to @io_bazel_rules_webtesting browser_repositories
|
||||||
|
load("//:browser_repositories.bzl", "browser_repositories")
|
||||||
|
|
||||||
browser_repositories()
|
browser_repositories()
|
||||||
|
|
||||||
@ -103,14 +139,14 @@ rbe_autoconfig(
|
|||||||
# Need to specify a base container digest in order to ensure that we can use the checked-in
|
# Need to specify a base container digest in order to ensure that we can use the checked-in
|
||||||
# platform configurations for the "ubuntu16_04" image. Otherwise the autoconfig rule would
|
# platform configurations for the "ubuntu16_04" image. Otherwise the autoconfig rule would
|
||||||
# need to pull the image and run it in order determine the toolchain configuration. See:
|
# need to pull the image and run it in order determine the toolchain configuration. See:
|
||||||
# https://github.com/bazelbuild/bazel-toolchains/blob/1.1.2/configs/ubuntu16_04_clang/versions.bzl
|
# https://github.com/bazelbuild/bazel-toolchains/blob/0.27.0/configs/ubuntu16_04_clang/versions.bzl
|
||||||
base_container_digest = "sha256:1ab40405810effefa0b2f45824d6d608634ccddbf06366760c341ef6fbead011",
|
base_container_digest = "sha256:94d7d8552902d228c32c8c148cc13f0effc2b4837757a6e95b73fdc5c5e4b07b",
|
||||||
# Note that if you change the `digest`, you might also need to update the
|
# Note that if you change the `digest`, you might also need to update the
|
||||||
# `base_container_digest` to make sure marketplace.gcr.io/google/rbe-ubuntu16-04-webtest:<digest>
|
# `base_container_digest` to make sure marketplace.gcr.io/google/rbe-ubuntu16-04-webtest:<digest>
|
||||||
# and marketplace.gcr.io/google/rbe-ubuntu16-04:<base_container_digest> have
|
# and marketplace.gcr.io/google/rbe-ubuntu16-04:<base_container_digest> have
|
||||||
# the same Clang and JDK installed. Clang is needed because of the dependency on
|
# the same Clang and JDK installed. Clang is needed because of the dependency on
|
||||||
# @com_google_protobuf. Java is needed for the Bazel's test executor Java tool.
|
# @com_google_protobuf. Java is needed for the Bazel's test executor Java tool.
|
||||||
digest = "sha256:0b8fa87db4b8e5366717a7164342a029d1348d2feea7ecc4b18c780bc2507059",
|
digest = "sha256:76e2e4a894f9ffbea0a0cb2fbde741b5d223d40f265dbb9bca78655430173990",
|
||||||
env = clang_env(),
|
env = clang_env(),
|
||||||
registry = "marketplace.gcr.io",
|
registry = "marketplace.gcr.io",
|
||||||
# We can't use the default "ubuntu16_04" RBE image provided by the autoconfig because we need
|
# We can't use the default "ubuntu16_04" RBE image provided by the autoconfig because we need
|
||||||
|
@ -18,8 +18,8 @@ Here are the most important tasks you might need to use:
|
|||||||
|
|
||||||
* `yarn build` - create a production build of the application (after installing dependencies, boilerplate, etc).
|
* `yarn build` - create a production build of the application (after installing dependencies, boilerplate, etc).
|
||||||
* `yarn build-local` - same as `build`, but use `setup-local` instead of `setup`.
|
* `yarn build-local` - same as `build`, but use `setup-local` instead of `setup`.
|
||||||
* `yarn build-local-with-viewengine` - same as `build-local`, but in addition also turns on `ViewEngine` mode in aio.
|
* `yarn build-with-ivy` - same as `build-local`, but in addition also turns on `ivy` mode in aio.
|
||||||
(Note: Docs examples run in `ViewEngine` mode by default. To turn on `ivy` mode in examples, see `yarn boilerplate:add` below.)
|
(Note: To turn on `ivy` mode in examples, see `yarn boilerplate:add` below.)
|
||||||
|
|
||||||
* `yarn start` - run a development web server that watches the files; then builds the doc-viewer and reloads the page, as necessary.
|
* `yarn start` - run a development web server that watches the files; then builds the doc-viewer and reloads the page, as necessary.
|
||||||
* `yarn serve-and-sync` - run both the `docs-watch` and `start` in the same console.
|
* `yarn serve-and-sync` - run both the `docs-watch` and `start` in the same console.
|
||||||
@ -34,18 +34,17 @@ Here are the most important tasks you might need to use:
|
|||||||
* `yarn docs-test` - run the unit tests for the doc generation code.
|
* `yarn docs-test` - run the unit tests for the doc generation code.
|
||||||
|
|
||||||
* `yarn boilerplate:add` - generate all the boilerplate code for the examples, so that they can be run locally.
|
* `yarn boilerplate:add` - generate all the boilerplate code for the examples, so that they can be run locally.
|
||||||
* `yarn boilerplate:add:ivy` - same as `boilerplate:add` but also turns on `ivy` mode.
|
- Add the option `--local` to use your local version of Angular contained in the "dist" folder.
|
||||||
|
- Add the option `--ivy` to turn on `ivy` mode.
|
||||||
|
|
||||||
* `yarn boilerplate:remove` - remove all the boilerplate code that was added via `yarn boilerplate:add`.
|
* `yarn boilerplate:remove` - remove all the boilerplate code that was added via `yarn boilerplate:add`.
|
||||||
* `yarn generate-stackblitz` - generate the stackblitz files that are used by the `live-example` tags in the docs.
|
* `yarn generate-stackblitz` - generate the stackblitz files that are used by the `live-example` tags in the docs.
|
||||||
* `yarn generate-zips` - generate the zip files from the examples. Zip available via the `live-example` tags in the docs.
|
* `yarn generate-zips` - generate the zip files from the examples. Zip available via the `live-example` tags in the docs.
|
||||||
|
|
||||||
* `yarn example-e2e` - run all e2e tests for examples. Available options:
|
* `yarn example-e2e` - run all e2e tests for examples
|
||||||
- `--setup`: generate boilerplate, force webdriver update & other setup, then run tests.
|
- `yarn example-e2e --setup` - force webdriver update & other setup, then run tests
|
||||||
- `--local`: run e2e tests with the local version of Angular contained in the "dist" folder.
|
- `yarn example-e2e --filter=foo` - limit e2e tests to those containing the word "foo"
|
||||||
_Requires `--setup` in order to take effect._
|
- `yarn example-e2e --setup --local` - run e2e tests with the local version of Angular contained in the "dist" folder
|
||||||
- `--ivy`: run e2e tests in `ivy` mode.
|
|
||||||
- `--filter=foo`: limit e2e tests to those containing the word "foo".
|
|
||||||
|
|
||||||
> **Note for Windows users**
|
> **Note for Windows users**
|
||||||
>
|
>
|
||||||
@ -104,7 +103,7 @@ You also want to see those changes displayed properly in the doc viewer
|
|||||||
with a quick, edit/view cycle time.
|
with a quick, edit/view cycle time.
|
||||||
|
|
||||||
For this purpose, use the `yarn docs-watch` task, which watches for changes to source files and only
|
For this purpose, use the `yarn docs-watch` task, which watches for changes to source files and only
|
||||||
re-processes the files necessary to generate the docs that are related to the file that has changed.
|
re-processes the the files necessary to generate the docs that are related to the file that has changed.
|
||||||
Since this task takes shortcuts, it is much faster (often less than 1 second) but it won't produce full
|
Since this task takes shortcuts, it is much faster (often less than 1 second) but it won't produce full
|
||||||
fidelity content. For example, links to other docs and code examples may not render correctly. This is
|
fidelity content. For example, links to other docs and code examples may not render correctly. This is
|
||||||
most particularly noticed in links to other docs and in the embedded examples, which may not always render
|
most particularly noticed in links to other docs and in the embedded examples, which may not always render
|
||||||
|
@ -34,7 +34,7 @@
|
|||||||
"shelljs": "^0.8.2",
|
"shelljs": "^0.8.2",
|
||||||
"source-map-support": "^0.5.9",
|
"source-map-support": "^0.5.9",
|
||||||
"tar-stream": "^1.6.1",
|
"tar-stream": "^1.6.1",
|
||||||
"tslib": "^1.10.0"
|
"tslib": "^1.9.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/body-parser": "^1.17.0",
|
"@types/body-parser": "^1.17.0",
|
||||||
|
@ -2444,12 +2444,7 @@ touch@^3.1.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
nopt "~1.0.10"
|
nopt "~1.0.10"
|
||||||
|
|
||||||
tslib@^1.10.0:
|
tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.3:
|
||||||
version "1.10.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a"
|
|
||||||
integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==
|
|
||||||
|
|
||||||
tslib@^1.8.0, tslib@^1.8.1:
|
|
||||||
version "1.9.3"
|
version "1.9.3"
|
||||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"
|
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"
|
||||||
|
|
||||||
|
@ -59,13 +59,7 @@
|
|||||||
"styles": [
|
"styles": [
|
||||||
"src/styles.scss"
|
"src/styles.scss"
|
||||||
],
|
],
|
||||||
"scripts": [],
|
"scripts": []
|
||||||
"budgets": [
|
|
||||||
{
|
|
||||||
"type": "anyComponentStyle",
|
|
||||||
"maximumWarning": "6kb"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"configurations": {
|
"configurations": {
|
||||||
"fast": {
|
"fast": {
|
||||||
@ -97,9 +91,6 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"serviceWorker": true
|
"serviceWorker": true
|
||||||
},
|
|
||||||
"ci": {
|
|
||||||
"progress": false
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -122,7 +113,7 @@
|
|||||||
"browserTarget": "site:build:archive"
|
"browserTarget": "site:build:archive"
|
||||||
},
|
},
|
||||||
"ci": {
|
"ci": {
|
||||||
"browserTarget": "site:build:ci"
|
"progress": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -5,5 +5,6 @@
|
|||||||
"!**/*.js",
|
"!**/*.js",
|
||||||
"!**/*.[1,2].*"
|
"!**/*.[1,2].*"
|
||||||
],
|
],
|
||||||
|
"file": "src/app/app.component.ts",
|
||||||
"tags": ["Accessibility"]
|
"tags": ["Accessibility"]
|
||||||
}
|
}
|
||||||
|
@ -89,14 +89,14 @@ describe('Animation Tests', () => {
|
|||||||
sleepFor(2000);
|
sleepFor(2000);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should be inactive with a blue background', async () => {
|
it('should be inactive with an orange background', async () => {
|
||||||
const toggleButton = statusSlider.getToggleButton();
|
const toggleButton = statusSlider.getToggleButton();
|
||||||
const container = statusSlider.getComponentContainer();
|
const container = statusSlider.getComponentContainer();
|
||||||
let text = await container.getText();
|
let text = await container.getText();
|
||||||
|
|
||||||
if (text === 'Active') {
|
if (text === 'Active') {
|
||||||
await toggleButton.click();
|
await toggleButton.click();
|
||||||
await browser.wait(async () => await container.getCssValue('backgroundColor') === inactiveColor, 3000);
|
await browser.wait(async () => await container.getCssValue('backgroundColor') === inactiveColor, 2000);
|
||||||
}
|
}
|
||||||
|
|
||||||
text = await container.getText();
|
text = await container.getText();
|
||||||
@ -106,14 +106,14 @@ describe('Animation Tests', () => {
|
|||||||
expect(bgColor).toBe(inactiveColor);
|
expect(bgColor).toBe(inactiveColor);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should be active with an orange background', async () => {
|
it('should be active with a blue background', async () => {
|
||||||
const toggleButton = statusSlider.getToggleButton();
|
const toggleButton = statusSlider.getToggleButton();
|
||||||
const container = statusSlider.getComponentContainer();
|
const container = statusSlider.getComponentContainer();
|
||||||
let text = await container.getText();
|
let text = await container.getText();
|
||||||
|
|
||||||
if (text === 'Inactive') {
|
if (text === 'Inactive') {
|
||||||
await toggleButton.click();
|
await toggleButton.click();
|
||||||
await browser.wait(async () => await container.getCssValue('backgroundColor') === activeColor, 3000);
|
await browser.wait(async () => await container.getCssValue('backgroundColor') === activeColor, 2000);
|
||||||
}
|
}
|
||||||
|
|
||||||
text = await container.getText();
|
text = await container.getText();
|
||||||
|
@ -12,12 +12,10 @@ Toggle All Animations <input type="checkbox" [checked]="!animationsDisabled" (cl
|
|||||||
<a id="auto" routerLink="/auto" routerLinkActive="active">Auto Calculation</a>
|
<a id="auto" routerLink="/auto" routerLinkActive="active">Auto Calculation</a>
|
||||||
<a id="heroes" routerLink="/heroes" routerLinkActive="active">Filter/Stagger</a>
|
<a id="heroes" routerLink="/heroes" routerLinkActive="active">Filter/Stagger</a>
|
||||||
<a id="hero-groups" routerLink="/hero-groups" routerLinkActive="active">Hero Groups</a>
|
<a id="hero-groups" routerLink="/hero-groups" routerLinkActive="active">Hero Groups</a>
|
||||||
<a id="insert-remove" routerLink="/insert-remove" routerLinkActive="active">Insert/Remove</a>
|
|
||||||
|
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<!-- #docregion route-animations-outlet -->
|
<!-- #docregion route-animations-outlet -->
|
||||||
<div [@routeAnimations]="prepareRoute(outlet)" >
|
<div [@routeAnimations]="prepareRoute(outlet)" >
|
||||||
<router-outlet #outlet="outlet"></router-outlet>
|
<router-outlet #outlet="outlet"></router-outlet>
|
||||||
</div>
|
</div>
|
||||||
<!-- #enddocregion route-animations-outlet -->
|
<!-- #enddocregion route-animations-outlet -->
|
@ -35,7 +35,6 @@ import { InsertRemoveComponent } from './insert-remove.component';
|
|||||||
{ path: 'hero-groups', component: HeroListGroupPageComponent },
|
{ path: 'hero-groups', component: HeroListGroupPageComponent },
|
||||||
{ path: 'enter-leave', component: HeroListEnterLeavePageComponent },
|
{ path: 'enter-leave', component: HeroListEnterLeavePageComponent },
|
||||||
{ path: 'auto', component: HeroListAutoCalcPageComponent },
|
{ path: 'auto', component: HeroListAutoCalcPageComponent },
|
||||||
{ path: 'insert-remove', component: InsertRemoveComponent},
|
|
||||||
{ path: 'home', component: HomeComponent, data: {animation: 'HomePage'} },
|
{ path: 'home', component: HomeComponent, data: {animation: 'HomePage'} },
|
||||||
{ path: 'about', component: AboutComponent, data: {animation: 'AboutPage'} },
|
{ path: 'about', component: AboutComponent, data: {animation: 'AboutPage'} },
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
export interface Hero {
|
export class Hero {
|
||||||
id: number;
|
id: number;
|
||||||
name: string;
|
name: string;
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,4 @@
|
|||||||
<!-- #docplaster -->
|
<!-- #docplaster -->
|
||||||
|
|
||||||
<h2>Insert/Remove</h2>
|
|
||||||
|
|
||||||
<nav>
|
<nav>
|
||||||
<button (click)="toggle()">Toggle Insert/Remove</button>
|
<button (click)="toggle()">Toggle Insert/Remove</button>
|
||||||
</nav>
|
</nav>
|
||||||
|
@ -9,10 +9,10 @@ import { trigger, transition, animate, style } from '@angular/animations';
|
|||||||
trigger('myInsertRemoveTrigger', [
|
trigger('myInsertRemoveTrigger', [
|
||||||
transition(':enter', [
|
transition(':enter', [
|
||||||
style({ opacity: 0 }),
|
style({ opacity: 0 }),
|
||||||
animate('100ms', style({ opacity: 1 })),
|
animate('5s', style({ opacity: 1 })),
|
||||||
]),
|
]),
|
||||||
transition(':leave', [
|
transition(':leave', [
|
||||||
animate('100ms', style({ opacity: 0 }))
|
animate('5s', style({ opacity: 0 }))
|
||||||
])
|
])
|
||||||
]),
|
]),
|
||||||
// #enddocregion enter-leave-trigger
|
// #enddocregion enter-leave-trigger
|
||||||
|
@ -36,6 +36,9 @@ import { transAnimation } from './animations';
|
|||||||
})
|
})
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
|
// #docregion runtime
|
||||||
|
],
|
||||||
|
// #enddocregion runtime
|
||||||
// #enddocregion reusable
|
// #enddocregion reusable
|
||||||
templateUrl: 'open-close.component.html',
|
templateUrl: 'open-close.component.html',
|
||||||
styleUrls: ['open-close.component.css']
|
styleUrls: ['open-close.component.css']
|
||||||
|
@ -5,6 +5,5 @@
|
|||||||
"!**/*.js",
|
"!**/*.js",
|
||||||
"!**/*.[1,2,3].*"
|
"!**/*.[1,2,3].*"
|
||||||
],
|
],
|
||||||
"file": "src/app/app.component.ts",
|
|
||||||
"tags": ["animations"]
|
"tags": ["animations"]
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@ import { protractor, browser, element, by, ElementFinder } from 'protractor';
|
|||||||
|
|
||||||
const nameSuffix = 'X';
|
const nameSuffix = 'X';
|
||||||
|
|
||||||
interface Hero {
|
class Hero {
|
||||||
id: number;
|
id: number;
|
||||||
name: string;
|
name: string;
|
||||||
}
|
}
|
||||||
|
@ -5,5 +5,5 @@
|
|||||||
"!**/*.js",
|
"!**/*.js",
|
||||||
"!**/*.[1].*"
|
"!**/*.[1].*"
|
||||||
],
|
],
|
||||||
"file": "src/app/hero-list.component.html"
|
"file": "src/app/app.module.ts"
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,5 @@
|
|||||||
"!**/*.js",
|
"!**/*.js",
|
||||||
"!**/*.[1,2,3].*"
|
"!**/*.[1,2,3].*"
|
||||||
],
|
],
|
||||||
"file": "src/app/highlight.directive.ts",
|
|
||||||
"tags": ["attribute", "directive"]
|
"tags": ["attribute", "directive"]
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@ import { Component, ViewChild, ElementRef } from '@angular/core';
|
|||||||
})
|
})
|
||||||
export class AppComponent {
|
export class AppComponent {
|
||||||
|
|
||||||
@ViewChild('bindingInput') bindingInput: ElementRef;
|
@ViewChild('bindingInput', { static: false }) bindingInput: ElementRef;
|
||||||
|
|
||||||
isUnchanged = true;
|
isUnchanged = true;
|
||||||
|
|
||||||
|
@ -1,48 +0,0 @@
|
|||||||
// #docregion
|
|
||||||
import { Architect } from '@angular-devkit/architect';
|
|
||||||
import { TestingArchitectHost } from '@angular-devkit/architect/testing';
|
|
||||||
import { logging, schema } from '@angular-devkit/core';
|
|
||||||
|
|
||||||
describe('Command Runner Builder', () => {
|
|
||||||
let architect: Architect;
|
|
||||||
let architectHost: TestingArchitectHost;
|
|
||||||
|
|
||||||
beforeEach(async () => {
|
|
||||||
const registry = new schema.CoreSchemaRegistry();
|
|
||||||
registry.addPostTransform(schema.transforms.addUndefinedDefaults);
|
|
||||||
|
|
||||||
// TestingArchitectHost() takes workspace and current directories.
|
|
||||||
// Since we don't use those, both are the same in this case.
|
|
||||||
architectHost = new TestingArchitectHost(__dirname, __dirname);
|
|
||||||
architect = new Architect(architectHost, registry);
|
|
||||||
|
|
||||||
// This will either take a Node package name, or a path to the directory
|
|
||||||
// for the package.json file.
|
|
||||||
await architectHost.addBuilderFromPackage('..');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('can run node', async () => {
|
|
||||||
// Create a logger that keeps an array of all messages that were logged.
|
|
||||||
const logger = new logging.Logger('');
|
|
||||||
const logs = [];
|
|
||||||
logger.subscribe(ev => logs.push(ev.message));
|
|
||||||
|
|
||||||
// A "run" can have multiple outputs, and contains progress information.
|
|
||||||
const run = await architect.scheduleBuilder('@example/command-runner:command', {
|
|
||||||
command: 'node',
|
|
||||||
args: ['--print', '\'foo\''],
|
|
||||||
}, { logger }); // We pass the logger for checking later.
|
|
||||||
|
|
||||||
// The "result" member (of type BuilderOutput) is the next output.
|
|
||||||
const output = await run.result;
|
|
||||||
|
|
||||||
// Stop the builder from running. This stops Architect from keeping
|
|
||||||
// the builder-associated states in memory, since builders keep waiting
|
|
||||||
// to be scheduled.
|
|
||||||
await run.stop();
|
|
||||||
|
|
||||||
// Expect that foo was logged
|
|
||||||
expect(logs).toContain('foo');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
// #enddocregion
|
|
@ -1,46 +0,0 @@
|
|||||||
// #docplaster
|
|
||||||
// #docregion builder, builder-skeleton, handling-output, progress-reporting
|
|
||||||
import { BuilderContext, BuilderOutput, createBuilder } from '@angular-devkit/architect';
|
|
||||||
import { JsonObject } from '@angular-devkit/core';
|
|
||||||
// #enddocregion builder-skeleton
|
|
||||||
import * as childProcess from 'child_process';
|
|
||||||
// #docregion builder-skeleton
|
|
||||||
|
|
||||||
interface Options extends JsonObject {
|
|
||||||
command: string;
|
|
||||||
args: string[];
|
|
||||||
}
|
|
||||||
|
|
||||||
export default createBuilder(commandBuilder);
|
|
||||||
|
|
||||||
function commandBuilder(
|
|
||||||
options: Options,
|
|
||||||
context: BuilderContext,
|
|
||||||
): Promise<BuilderOutput> {
|
|
||||||
// #enddocregion builder, builder-skeleton, handling-output
|
|
||||||
// #docregion report-status
|
|
||||||
context.reportStatus(`Executing "${options.command}"...`);
|
|
||||||
// #docregion builder, handling-output
|
|
||||||
const child = childProcess.spawn(options.command, options.args);
|
|
||||||
// #enddocregion builder, report-status
|
|
||||||
|
|
||||||
child.stdout.on('data', data => {
|
|
||||||
context.logger.info(data.toString());
|
|
||||||
});
|
|
||||||
child.stderr.on('data', data => {
|
|
||||||
context.logger.error(data.toString());
|
|
||||||
});
|
|
||||||
|
|
||||||
// #docregion builder
|
|
||||||
return new Promise(resolve => {
|
|
||||||
// #enddocregion builder, handling-output
|
|
||||||
context.reportStatus(`Done.`);
|
|
||||||
// #docregion builder, handling-output
|
|
||||||
child.on('close', code => {
|
|
||||||
resolve({ success: code === 0 });
|
|
||||||
});
|
|
||||||
});
|
|
||||||
// #docregion builder-skeleton
|
|
||||||
}
|
|
||||||
|
|
||||||
// #enddocregion builder, builder-skeleton, handling-output, progress-reporting
|
|
@ -1,40 +0,0 @@
|
|||||||
import { map } from 'rxjs/operators';
|
|
||||||
import { Observable } from 'rxjs';
|
|
||||||
|
|
||||||
// #docregion observable
|
|
||||||
|
|
||||||
// declare a publishing operation
|
|
||||||
const observable = new Observable<number>(observer => {
|
|
||||||
// Subscriber fn...
|
|
||||||
});
|
|
||||||
|
|
||||||
// initiate execution
|
|
||||||
observable.subscribe(() => {
|
|
||||||
// observer handles notifications
|
|
||||||
});
|
|
||||||
|
|
||||||
// #enddocregion observable
|
|
||||||
|
|
||||||
// #docregion unsubscribe
|
|
||||||
|
|
||||||
const subscription = observable.subscribe(() => {
|
|
||||||
// observer handles notifications
|
|
||||||
});
|
|
||||||
|
|
||||||
subscription.unsubscribe();
|
|
||||||
|
|
||||||
// #enddocregion unsubscribe
|
|
||||||
|
|
||||||
// #docregion error
|
|
||||||
|
|
||||||
observable.subscribe(() => {
|
|
||||||
throw Error('my error');
|
|
||||||
});
|
|
||||||
|
|
||||||
// #enddocregion error
|
|
||||||
|
|
||||||
// #docregion chain
|
|
||||||
|
|
||||||
observable.pipe(map(v => 2 * v));
|
|
||||||
|
|
||||||
// #enddocregion chain
|
|
@ -1,25 +0,0 @@
|
|||||||
// #docregion promise
|
|
||||||
// initiate execution
|
|
||||||
const promise = new Promise<number>((resolve, reject) => {
|
|
||||||
// Executer fn...
|
|
||||||
});
|
|
||||||
|
|
||||||
promise.then(value => {
|
|
||||||
// handle result here
|
|
||||||
});
|
|
||||||
|
|
||||||
// #enddocregion promise
|
|
||||||
|
|
||||||
// #docregion chain
|
|
||||||
|
|
||||||
promise.then(v => 2 * v);
|
|
||||||
|
|
||||||
// #enddocregion chain
|
|
||||||
|
|
||||||
// #docregion error
|
|
||||||
|
|
||||||
promise.then(() => {
|
|
||||||
throw Error('my error');
|
|
||||||
});
|
|
||||||
|
|
||||||
// #enddocregion error
|
|
@ -39,7 +39,7 @@ export class CountdownLocalVarParentComponent { }
|
|||||||
})
|
})
|
||||||
export class CountdownViewChildParentComponent implements AfterViewInit {
|
export class CountdownViewChildParentComponent implements AfterViewInit {
|
||||||
|
|
||||||
@ViewChild(CountdownTimerComponent)
|
@ViewChild(CountdownTimerComponent, {static: false})
|
||||||
private timerComponent: CountdownTimerComponent;
|
private timerComponent: CountdownTimerComponent;
|
||||||
|
|
||||||
seconds() { return 0; }
|
seconds() { return 0; }
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
export interface Hero {
|
export class Hero {
|
||||||
name: string;
|
name: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,6 +6,5 @@
|
|||||||
"!**/*.native.*",
|
"!**/*.native.*",
|
||||||
"!**/*.[1].*"
|
"!**/*.[1].*"
|
||||||
],
|
],
|
||||||
"file": "src/app/hero-app.component.ts",
|
|
||||||
"tags": ["CSS"]
|
"tags": ["CSS"]
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,5 @@
|
|||||||
"!**/*.js",
|
"!**/*.js",
|
||||||
"!**/*.[1].*"
|
"!**/*.[1].*"
|
||||||
],
|
],
|
||||||
"file": "src/app/app.component.ts",
|
|
||||||
"tags":["cookbook"]
|
"tags":["cookbook"]
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// #docregion
|
// #docregion
|
||||||
export interface Hero {
|
export class Hero {
|
||||||
id: number;
|
id: number;
|
||||||
name: string;
|
name: string;
|
||||||
isSecret: boolean;
|
isSecret = false;
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,5 @@
|
|||||||
"!**/*.[0,1,2,3,4].*",
|
"!**/*.[0,1,2,3,4].*",
|
||||||
"!**/dummy.module.ts"
|
"!**/dummy.module.ts"
|
||||||
],
|
],
|
||||||
"file": "src/app/app.component.ts",
|
|
||||||
"tags": ["dependency", "di"]
|
"tags": ["dependency", "di"]
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,5 @@
|
|||||||
"!**/app-ctor.component.ts",
|
"!**/app-ctor.component.ts",
|
||||||
"!**/*.[1,2,3].*"
|
"!**/*.[1,2,3].*"
|
||||||
],
|
],
|
||||||
"file": "src/app/app.component.ts",
|
|
||||||
"tags": ["Template"]
|
"tags": ["Template"]
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,8 @@
|
|||||||
{
|
{
|
||||||
"description": "Second authors style guide stackblitz (non-executing)",
|
"description": "Second authors style guide stackblitz (non-executing)",
|
||||||
"files": [
|
"files": [
|
||||||
"src/main.2.ts",
|
"src/index.2.html"
|
||||||
"src/index.2.html",
|
|
||||||
"src/styles.css"
|
|
||||||
],
|
],
|
||||||
"main": "src/index.2.html",
|
"main": "src/index.2.html",
|
||||||
"file": "src/index.html",
|
|
||||||
"tags": ["author", "style guide"]
|
"tags": ["author", "style guide"]
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
export interface Hero {
|
export class Hero {
|
||||||
id: number;
|
id: number;
|
||||||
name: string;
|
name: string;
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,5 @@
|
|||||||
"!**/*.d.ts",
|
"!**/*.d.ts",
|
||||||
"!**/*.js"
|
"!**/*.js"
|
||||||
],
|
],
|
||||||
"file": "src/app/app.component.ts",
|
|
||||||
"tags":["cookbook component"]
|
"tags":["cookbook component"]
|
||||||
}
|
}
|
||||||
|
@ -2,23 +2,21 @@
|
|||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
|
|
||||||
import { QuestionService } from './question.service';
|
import { QuestionService } from './question.service';
|
||||||
import { QuestionBase } from './question-base';
|
|
||||||
import { Observable } from 'rxjs';
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-root',
|
selector: 'app-root',
|
||||||
template: `
|
template: `
|
||||||
<div>
|
<div>
|
||||||
<h2>Job Application for Heroes</h2>
|
<h2>Job Application for Heroes</h2>
|
||||||
<app-dynamic-form [questions]="questions$ | async"></app-dynamic-form>
|
<app-dynamic-form [questions]="questions"></app-dynamic-form>
|
||||||
</div>
|
</div>
|
||||||
`,
|
`,
|
||||||
providers: [QuestionService]
|
providers: [QuestionService]
|
||||||
})
|
})
|
||||||
export class AppComponent {
|
export class AppComponent {
|
||||||
questions$: Observable<QuestionBase<any>[]>;
|
questions: any[];
|
||||||
|
|
||||||
constructor(service: QuestionService) {
|
constructor(service: QuestionService) {
|
||||||
this.questions$ = service.getQuestions();
|
this.questions = service.getQuestions();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
<option *ngFor="let opt of question.options" [value]="opt.key">{{opt.value}}</option>
|
<option *ngFor="let opt of question.options" [value]="opt.key">{{opt.value}}</option>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="errorMessage" *ngIf="!isValid">{{question.label}} is required</div>
|
<div class="errorMessage" *ngIf="!isValid">{{question.label}} is required</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -9,7 +9,7 @@ import { QuestionBase } from './question-base';
|
|||||||
templateUrl: './dynamic-form-question.component.html'
|
templateUrl: './dynamic-form-question.component.html'
|
||||||
})
|
})
|
||||||
export class DynamicFormQuestionComponent {
|
export class DynamicFormQuestionComponent {
|
||||||
@Input() question: QuestionBase<string>;
|
@Input() question: QuestionBase<any>;
|
||||||
@Input() form: FormGroup;
|
@Input() form: FormGroup;
|
||||||
get isValid() { return this.form.controls[this.question.key].valid; }
|
get isValid() { return this.form.controls[this.question.key].valid; }
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,7 @@ import { QuestionControlService } from './question-control.service';
|
|||||||
})
|
})
|
||||||
export class DynamicFormComponent implements OnInit {
|
export class DynamicFormComponent implements OnInit {
|
||||||
|
|
||||||
@Input() questions: QuestionBase<string>[] = [];
|
@Input() questions: QuestionBase<any>[] = [];
|
||||||
form: FormGroup;
|
form: FormGroup;
|
||||||
payLoad = '';
|
payLoad = '';
|
||||||
|
|
||||||
@ -23,6 +23,6 @@ export class DynamicFormComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onSubmit() {
|
onSubmit() {
|
||||||
this.payLoad = JSON.stringify(this.form.getRawValue());
|
this.payLoad = JSON.stringify(this.form.value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,8 +6,6 @@ export class QuestionBase<T> {
|
|||||||
required: boolean;
|
required: boolean;
|
||||||
order: number;
|
order: number;
|
||||||
controlType: string;
|
controlType: string;
|
||||||
type: string;
|
|
||||||
options: {key: string, value: string}[];
|
|
||||||
|
|
||||||
constructor(options: {
|
constructor(options: {
|
||||||
value?: T,
|
value?: T,
|
||||||
@ -15,8 +13,7 @@ export class QuestionBase<T> {
|
|||||||
label?: string,
|
label?: string,
|
||||||
required?: boolean,
|
required?: boolean,
|
||||||
order?: number,
|
order?: number,
|
||||||
controlType?: string,
|
controlType?: string
|
||||||
type?: string
|
|
||||||
} = {}) {
|
} = {}) {
|
||||||
this.value = options.value;
|
this.value = options.value;
|
||||||
this.key = options.key || '';
|
this.key = options.key || '';
|
||||||
@ -24,6 +21,5 @@ export class QuestionBase<T> {
|
|||||||
this.required = !!options.required;
|
this.required = !!options.required;
|
||||||
this.order = options.order === undefined ? 1 : options.order;
|
this.order = options.order === undefined ? 1 : options.order;
|
||||||
this.controlType = options.controlType || '';
|
this.controlType = options.controlType || '';
|
||||||
this.type = options.type || '';
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@ import { QuestionBase } from './question-base';
|
|||||||
export class QuestionControlService {
|
export class QuestionControlService {
|
||||||
constructor() { }
|
constructor() { }
|
||||||
|
|
||||||
toFormGroup(questions: QuestionBase<string>[] ) {
|
toFormGroup(questions: QuestionBase<any>[] ) {
|
||||||
let group: any = {};
|
let group: any = {};
|
||||||
|
|
||||||
questions.forEach(question => {
|
questions.forEach(question => {
|
||||||
|
@ -4,15 +4,15 @@ import { Injectable } from '@angular/core';
|
|||||||
import { DropdownQuestion } from './question-dropdown';
|
import { DropdownQuestion } from './question-dropdown';
|
||||||
import { QuestionBase } from './question-base';
|
import { QuestionBase } from './question-base';
|
||||||
import { TextboxQuestion } from './question-textbox';
|
import { TextboxQuestion } from './question-textbox';
|
||||||
import { of } from 'rxjs';
|
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class QuestionService {
|
export class QuestionService {
|
||||||
|
|
||||||
// TODO: get from a remote source of question metadata
|
// TODO: get from a remote source of question metadata
|
||||||
|
// TODO: make asynchronous
|
||||||
getQuestions() {
|
getQuestions() {
|
||||||
|
|
||||||
let questions: QuestionBase<string>[] = [
|
let questions: QuestionBase<any>[] = [
|
||||||
|
|
||||||
new DropdownQuestion({
|
new DropdownQuestion({
|
||||||
key: 'brave',
|
key: 'brave',
|
||||||
@ -42,6 +42,6 @@ export class QuestionService {
|
|||||||
})
|
})
|
||||||
];
|
];
|
||||||
|
|
||||||
return of(questions.sort((a, b) => a.order - b.order));
|
return questions.sort((a, b) => a.order - b.order);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,5 @@
|
|||||||
"!**/*.js",
|
"!**/*.js",
|
||||||
"!**/*.[1].*"
|
"!**/*.[1].*"
|
||||||
],
|
],
|
||||||
"file": "src/app/app.component.ts",
|
|
||||||
"tags":["cookbook"]
|
"tags":["cookbook"]
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,5 @@
|
|||||||
"!**/*.js",
|
"!**/*.js",
|
||||||
"!**/*.[1].*"
|
"!**/*.[1].*"
|
||||||
],
|
],
|
||||||
"file": "src/app/popup.service.ts",
|
|
||||||
"tags":["cookbook"]
|
"tags":["cookbook"]
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@ import {
|
|||||||
} from '@angular/forms';
|
} from '@angular/forms';
|
||||||
import { catchError, map } from 'rxjs/operators';
|
import { catchError, map } from 'rxjs/operators';
|
||||||
import { HeroesService } from './heroes.service';
|
import { HeroesService } from './heroes.service';
|
||||||
import { Observable, of } from 'rxjs';
|
import { Observable } from 'rxjs';
|
||||||
|
|
||||||
// #docregion async-validator
|
// #docregion async-validator
|
||||||
@Injectable({ providedIn: 'root' })
|
@Injectable({ providedIn: 'root' })
|
||||||
@ -19,7 +19,7 @@ export class UniqueAlterEgoValidator implements AsyncValidator {
|
|||||||
): Promise<ValidationErrors | null> | Observable<ValidationErrors | null> {
|
): Promise<ValidationErrors | null> | Observable<ValidationErrors | null> {
|
||||||
return this.heroesService.isAlterEgoTaken(ctrl.value).pipe(
|
return this.heroesService.isAlterEgoTaken(ctrl.value).pipe(
|
||||||
map(isTaken => (isTaken ? { uniqueAlterEgo: true } : null)),
|
map(isTaken => (isTaken ? { uniqueAlterEgo: true } : null)),
|
||||||
catchError(() => of(null))
|
catchError(() => null)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,5 @@
|
|||||||
"!**/*.d.ts",
|
"!**/*.d.ts",
|
||||||
"!**/*.js",
|
"!**/*.js",
|
||||||
"!**/*.[1].*"
|
"!**/*.[1].*"
|
||||||
],
|
]
|
||||||
"file": "src/app/app.component.ts"
|
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,5 @@
|
|||||||
"files":[
|
"files":[
|
||||||
"!**/*.d.ts",
|
"!**/*.d.ts",
|
||||||
"!**/*.js"
|
"!**/*.js"
|
||||||
],
|
]
|
||||||
"file": "src/app/app.component.ts"
|
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,5 @@
|
|||||||
"files":[
|
"files":[
|
||||||
"!**/*.d.ts",
|
"!**/*.d.ts",
|
||||||
"!**/*.js"
|
"!**/*.js"
|
||||||
],
|
]
|
||||||
"file": "src/app/hero-form/hero-form.component.html"
|
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,5 @@
|
|||||||
"!**/*.js",
|
"!**/*.js",
|
||||||
"!**/*.[0-9].*"
|
"!**/*.[0-9].*"
|
||||||
],
|
],
|
||||||
"file": "src/app/app.component.ts",
|
|
||||||
"tags": ["Angular", "getting started", "tutorial"]
|
"tags": ["Angular", "getting started", "tutorial"]
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
// #docplaster
|
// #docplaster
|
||||||
|
// #docregion http-client-module-import, http-client-module
|
||||||
import { NgModule } from '@angular/core';
|
import { NgModule } from '@angular/core';
|
||||||
import { BrowserModule } from '@angular/platform-browser';
|
import { BrowserModule } from '@angular/platform-browser';
|
||||||
import { RouterModule } from '@angular/router';
|
import { RouterModule } from '@angular/router';
|
||||||
// #docregion http-client-module-import
|
|
||||||
import { HttpClientModule } from '@angular/common/http';
|
import { HttpClientModule } from '@angular/common/http';
|
||||||
// #enddocregion http-client-module-import
|
// #enddocregion http-client-module-import
|
||||||
import { ReactiveFormsModule } from '@angular/forms';
|
import { ReactiveFormsModule } from '@angular/forms';
|
||||||
@ -12,6 +12,7 @@ import { TopBarComponent } from './top-bar/top-bar.component';
|
|||||||
import { ProductListComponent } from './product-list/product-list.component';
|
import { ProductListComponent } from './product-list/product-list.component';
|
||||||
import { ProductAlertsComponent } from './product-alerts/product-alerts.component';
|
import { ProductAlertsComponent } from './product-alerts/product-alerts.component';
|
||||||
import { ProductDetailsComponent } from './product-details/product-details.component';
|
import { ProductDetailsComponent } from './product-details/product-details.component';
|
||||||
|
// #enddocregion http-client-module
|
||||||
import { CartComponent } from './cart/cart.component';
|
import { CartComponent } from './cart/cart.component';
|
||||||
import { ShippingComponent } from './shipping/shipping.component';
|
import { ShippingComponent } from './shipping/shipping.component';
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// #docplaster
|
// #docplaster
|
||||||
// #docregion imports
|
// #docregion imports
|
||||||
import { Component, OnInit } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import { FormBuilder } from '@angular/forms';
|
import { FormBuilder } from '@angular/forms';
|
||||||
|
|
||||||
import { CartService } from '../cart.service';
|
import { CartService } from '../cart.service';
|
||||||
@ -12,7 +12,7 @@ import { CartService } from '../cart.service';
|
|||||||
styleUrls: ['./cart.component.css']
|
styleUrls: ['./cart.component.css']
|
||||||
})
|
})
|
||||||
// #docregion props-services, submit, inject-form-builder, checkout-form, checkout-form-group
|
// #docregion props-services, submit, inject-form-builder, checkout-form, checkout-form-group
|
||||||
export class CartComponent implements OnInit {
|
export class CartComponent {
|
||||||
items;
|
items;
|
||||||
// #enddocregion inject-form-builder
|
// #enddocregion inject-form-builder
|
||||||
checkoutForm;
|
checkoutForm;
|
||||||
@ -24,16 +24,14 @@ export class CartComponent implements OnInit {
|
|||||||
private formBuilder: FormBuilder,
|
private formBuilder: FormBuilder,
|
||||||
) {
|
) {
|
||||||
// #enddocregion inject-form-builder
|
// #enddocregion inject-form-builder
|
||||||
|
this.items = this.cartService.getItems();
|
||||||
|
|
||||||
this.checkoutForm = this.formBuilder.group({
|
this.checkoutForm = this.formBuilder.group({
|
||||||
name: '',
|
name: '',
|
||||||
address: ''
|
address: ''
|
||||||
});
|
});
|
||||||
// #docregion inject-form-builder
|
// #docregion inject-form-builder
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnInit() {
|
|
||||||
this.items = this.cartService.getItems();
|
|
||||||
}
|
|
||||||
// #enddocregion inject-form-builder, checkout-form-group
|
// #enddocregion inject-form-builder, checkout-form-group
|
||||||
|
|
||||||
// #enddocregion props-services
|
// #enddocregion props-services
|
||||||
|
@ -5,6 +5,5 @@
|
|||||||
"!**/*.js",
|
"!**/*.js",
|
||||||
"!**/*.[0-9].*"
|
"!**/*.[0-9].*"
|
||||||
],
|
],
|
||||||
"file": "src/app/product-list/product-list.component.html",
|
|
||||||
"tags": ["Angular", "getting started", "tutorial"]
|
"tags": ["Angular", "getting started", "tutorial"]
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// #docregion
|
// #docregion
|
||||||
|
|
||||||
export interface Hero {
|
export class Hero {
|
||||||
id: number;
|
id: number;
|
||||||
name: string;
|
name: string;
|
||||||
tid: string; // tax id
|
tid: string; // tax id
|
||||||
|
@ -4,6 +4,5 @@
|
|||||||
"!**/*.d.ts",
|
"!**/*.d.ts",
|
||||||
"!**/*.js"
|
"!**/*.js"
|
||||||
],
|
],
|
||||||
"file": "src/app/app.component.ts",
|
|
||||||
"tags": ["dependency", "injection"]
|
"tags": ["dependency", "injection"]
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"description": "Http Guide Testing",
|
"description": "Http Guide Testing",
|
||||||
"files":[
|
"files":[
|
||||||
"src/app/heroes/hero.ts",
|
|
||||||
"src/app/heroes/heroes.service.ts",
|
"src/app/heroes/heroes.service.ts",
|
||||||
"src/app/heroes/heroes.service.spec.ts",
|
"src/app/heroes/heroes.service.spec.ts",
|
||||||
|
|
||||||
|
@ -1,12 +1,5 @@
|
|||||||
// #docregion
|
// #docregion
|
||||||
import { enableProdMode } from '@angular/core';
|
|
||||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||||
|
|
||||||
import { AppModule } from './app/app.module';
|
import { AppModule } from './app/app.module';
|
||||||
import { environment } from './environments/environment';
|
|
||||||
|
|
||||||
if (environment.production) {
|
|
||||||
enableProdMode();
|
|
||||||
}
|
|
||||||
|
|
||||||
platformBrowserDynamic().bootstrapModule(AppModule);
|
platformBrowserDynamic().bootstrapModule(AppModule);
|
||||||
|
@ -67,7 +67,6 @@ describe('HttpClient testing', () => {
|
|||||||
httpTestingController.verify();
|
httpTestingController.verify();
|
||||||
});
|
});
|
||||||
// #enddocregion get-test
|
// #enddocregion get-test
|
||||||
|
|
||||||
it('can test HttpClient.get with matching header', () => {
|
it('can test HttpClient.get with matching header', () => {
|
||||||
const testData: Data = {name: 'Test Data'};
|
const testData: Data = {name: 'Test Data'};
|
||||||
|
|
||||||
|
@ -3,10 +3,9 @@
|
|||||||
"files":[
|
"files":[
|
||||||
"!**/*.d.ts",
|
"!**/*.d.ts",
|
||||||
"!**/*.js",
|
"!**/*.js",
|
||||||
|
|
||||||
"!src/testing/*.*",
|
"!src/testing/*.*",
|
||||||
"!src/index-specs.html",
|
"!src/index-specs.html"
|
||||||
"!src/main-specs.ts"
|
|
||||||
],
|
],
|
||||||
"file": "src/app/app.component.ts",
|
|
||||||
"tags": ["http"]
|
"tags": ["http"]
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,6 @@
|
|||||||
import { registerLocaleData } from '@angular/common';
|
import { registerLocaleData } from '@angular/common';
|
||||||
import localeFr from '@angular/common/locales/fr';
|
import localeFr from '@angular/common/locales/fr';
|
||||||
|
|
||||||
// the second parameter 'fr-FR' is optional
|
// the second parameter 'fr' is optional
|
||||||
registerLocaleData(localeFr, 'fr-FR');
|
registerLocaleData(localeFr, 'fr');
|
||||||
// #enddocregion import-locale
|
// #enddocregion import-locale
|
||||||
|
@ -18,26 +18,26 @@ describe('providers App', () => {
|
|||||||
expect(page.getTitleText()).toEqual('Lazy loading feature modules');
|
expect(page.getTitleText()).toEqual('Lazy loading feature modules');
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Customers', function() {
|
describe('Customers list', function() {
|
||||||
beforeEach(function() {
|
beforeEach(function() {
|
||||||
customersButton.click();
|
customersButton.click();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should show customers when the button is clicked', function() {
|
it('should show customers list when the button is clicked', function() {
|
||||||
let customersMessage = element(by.css('app-customers > p'));
|
let customersMessage = element(by.css('app-customer-list > p'));
|
||||||
expect(customersMessage.getText()).toBe('customers works!');
|
expect(customersMessage.getText()).toBe('customer-list works!');
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Orders', function() {
|
describe('Orders list', function() {
|
||||||
beforeEach(function() {
|
beforeEach(function() {
|
||||||
ordersButton.click();
|
ordersButton.click();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should show orders when the button is clicked', function() {
|
it('should show orders list when the button is clicked', function() {
|
||||||
let ordersMessage = element(by.css('app-orders > p'));
|
let ordersMessage = element(by.css('app-order-list > p'));
|
||||||
expect(ordersMessage.getText()).toBe('orders works!');
|
expect(ordersMessage.getText()).toBe('order-list works!');
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
@ -4,26 +4,23 @@ import { NgModule } from '@angular/core';
|
|||||||
import { Routes, RouterModule } from '@angular/router';
|
import { Routes, RouterModule } from '@angular/router';
|
||||||
|
|
||||||
|
|
||||||
// #docregion const-routes, routes-customers, routes-customers-orders
|
// #docregion const-routes
|
||||||
const routes: Routes = [
|
const routes: Routes = [
|
||||||
{
|
{
|
||||||
path: 'customers',
|
path: 'customers',
|
||||||
loadChildren: () => import('./customers/customers.module').then(m => m.CustomersModule)
|
loadChildren: () => import('./customers/customers.module').then(mod => mod.CustomersModule)
|
||||||
// #enddocregion routes-customers
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: 'orders',
|
path: 'orders',
|
||||||
loadChildren: () => import('./orders/orders.module').then(m => m.OrdersModule)
|
loadChildren: () => import('./orders/orders.module').then(mod => mod.OrdersModule)
|
||||||
// #enddocregion routes-customers-orders
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '',
|
path: '',
|
||||||
redirectTo: '',
|
redirectTo: '',
|
||||||
pathMatch: 'full'
|
pathMatch: 'full'
|
||||||
// #docregion routes-customers, routes-customers-orders
|
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
// #enddocregion const-routes, routes-customers, routes-customers-orders
|
// #enddocregion const-routes
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
|
@ -21,16 +21,16 @@ describe('AppComponent', () => {
|
|||||||
expect(app).toBeTruthy();
|
expect(app).toBeTruthy();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
it(`should have as title 'customer-app'`, async(() => {
|
it(`should have as title 'app works!'`, async(() => {
|
||||||
const fixture = TestBed.createComponent(AppComponent);
|
const fixture = TestBed.createComponent(AppComponent);
|
||||||
const app = fixture.debugElement.componentInstance;
|
const app = fixture.debugElement.componentInstance;
|
||||||
expect(app.title).toEqual('customer-app');
|
expect(app.title).toEqual('app works!');
|
||||||
}));
|
}));
|
||||||
|
|
||||||
it('should render title in a h1 tag', async(() => {
|
it('should render title in a h1 tag', async(() => {
|
||||||
const fixture = TestBed.createComponent(AppComponent);
|
const fixture = TestBed.createComponent(AppComponent);
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
const compiled = fixture.debugElement.nativeElement;
|
const compiled = fixture.debugElement.nativeElement;
|
||||||
expect(compiled.querySelector('h1').textContent).toContain('customer-app');
|
expect(compiled.querySelector('h1').textContent).toContain('app works!');
|
||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
|
@ -0,0 +1,3 @@
|
|||||||
|
<p>
|
||||||
|
customer-list works!
|
||||||
|
</p>
|
@ -1,20 +1,20 @@
|
|||||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
import { CustomersComponent } from './customers.component';
|
import { CustomerListComponent } from './customer-list.component';
|
||||||
|
|
||||||
describe('CustomerListComponent', () => {
|
describe('CustomerListComponent', () => {
|
||||||
let component: CustomersComponent;
|
let component: CustomerListComponent;
|
||||||
let fixture: ComponentFixture<CustomersComponent>;
|
let fixture: ComponentFixture<CustomerListComponent>;
|
||||||
|
|
||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
declarations: [ CustomersComponent ]
|
declarations: [ CustomerListComponent ]
|
||||||
})
|
})
|
||||||
.compileComponents();
|
.compileComponents();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
fixture = TestBed.createComponent(CustomersComponent);
|
fixture = TestBed.createComponent(CustomerListComponent);
|
||||||
component = fixture.componentInstance;
|
component = fixture.componentInstance;
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
});
|
});
|
@ -0,0 +1,15 @@
|
|||||||
|
import { Component, OnInit } from '@angular/core';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-customer-list',
|
||||||
|
templateUrl: './customer-list.component.html',
|
||||||
|
styleUrls: ['./customer-list.component.css']
|
||||||
|
})
|
||||||
|
export class CustomerListComponent implements OnInit {
|
||||||
|
|
||||||
|
constructor() { }
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -3,13 +3,13 @@
|
|||||||
import { NgModule } from '@angular/core';
|
import { NgModule } from '@angular/core';
|
||||||
import { Routes, RouterModule } from '@angular/router';
|
import { Routes, RouterModule } from '@angular/router';
|
||||||
|
|
||||||
import { CustomersComponent } from './customers.component';
|
import { CustomerListComponent } from './customer-list/customer-list.component';
|
||||||
|
|
||||||
|
|
||||||
const routes: Routes = [
|
const routes: Routes = [
|
||||||
{
|
{
|
||||||
path: '',
|
path: '',
|
||||||
component: CustomersComponent
|
component: CustomerListComponent
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
<p>
|
|
||||||
customers works!
|
|
||||||
</p>
|
|
@ -1,15 +0,0 @@
|
|||||||
import { Component, OnInit } from '@angular/core';
|
|
||||||
|
|
||||||
@Component({
|
|
||||||
selector: 'app-customers',
|
|
||||||
templateUrl: './customers.component.html',
|
|
||||||
styleUrls: ['./customers.component.css']
|
|
||||||
})
|
|
||||||
export class CustomersComponent implements OnInit {
|
|
||||||
|
|
||||||
constructor() { }
|
|
||||||
|
|
||||||
ngOnInit() {
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -3,14 +3,14 @@
|
|||||||
import { NgModule } from '@angular/core';
|
import { NgModule } from '@angular/core';
|
||||||
import { CommonModule } from '@angular/common';
|
import { CommonModule } from '@angular/common';
|
||||||
import { CustomersRoutingModule } from './customers-routing.module';
|
import { CustomersRoutingModule } from './customers-routing.module';
|
||||||
import { CustomersComponent } from './customers.component';
|
import { CustomerListComponent } from './customer-list/customer-list.component';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
CommonModule,
|
CommonModule,
|
||||||
CustomersRoutingModule
|
CustomersRoutingModule
|
||||||
],
|
],
|
||||||
declarations: [CustomersComponent]
|
declarations: [CustomerListComponent]
|
||||||
})
|
})
|
||||||
export class CustomersModule { }
|
export class CustomersModule { }
|
||||||
// #enddocregion customers-module
|
// #enddocregion customers-module
|
||||||
|
@ -0,0 +1,3 @@
|
|||||||
|
<p>
|
||||||
|
order-list works!
|
||||||
|
</p>
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user