mirror of
https://github.com/angular/angular.git
synced 2026-09-14 13:54:52 +08:00
Compare commits
280 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 73ec0c61fa | |||
| d933b17170 | |||
| db53ce40c5 | |||
| 2a445923ee | |||
| 82756e8a5f | |||
| 60af2d091c | |||
| 92066f162d | |||
| 0a36f4fbc8 | |||
| 8e46fb5676 | |||
| f36cf49330 | |||
| 2409dd6530 | |||
| 2067643896 | |||
| a3bbc6dcd9 | |||
| 3c62c70caf | |||
| fb4f228d3c | |||
| bec0007c82 | |||
| 4df7301093 | |||
| a192dea677 | |||
| d29cbe885c | |||
| 1eef647236 | |||
| 9745fac73f | |||
| 7032bf0780 | |||
| 88aec875c0 | |||
| f2d20d5c50 | |||
| bd59a1a395 | |||
| c0601db72c | |||
| aa920aa89a | |||
| 6eb2f76fee | |||
| ea114a0034 | |||
| 0d88348430 | |||
| ce38759f54 | |||
| 03519968c0 | |||
| 8c8ded8d31 | |||
| f88559eb48 | |||
| c20a7eeba6 | |||
| 621013af2a | |||
| 864a96d7a6 | |||
| 458d62b7b8 | |||
| ebb3f58f4c | |||
| 1e483ebe18 | |||
| dab7198a1f | |||
| 34ccffe9ab | |||
| cfd8702747 | |||
| e56f6d2187 | |||
| 86fdcfcc0f | |||
| 00864665a3 | |||
| 78b66b236b | |||
| 049123cf6c | |||
| 7815acd125 | |||
| ae812e3936 | |||
| e044939fa9 | |||
| 86a21f5569 | |||
| c3ccaa83b4 | |||
| 6e9075e787 | |||
| 85c35cf693 | |||
| b8ed822896 | |||
| 420af8ee47 | |||
| 665d4650cd | |||
| 40c138c13d | |||
| dc23ad4978 | |||
| 3596c44e0c | |||
| 8600b3077d | |||
| 31b2716c1c | |||
| 65712b1d15 | |||
| 4881e75097 | |||
| 2f5fe32b92 | |||
| 0136eb6d34 | |||
| 6efefec55c | |||
| 371a599c8e | |||
| a02d114dae | |||
| df5e1802a3 | |||
| c142511084 | |||
| 9520a029d2 | |||
| afad500f40 | |||
| 4199a8db08 | |||
| 6d9339559c | |||
| 5769eb0bd2 | |||
| da125dbb79 | |||
| 84c1896b6b | |||
| b13783eeb6 | |||
| a908ba7a68 | |||
| 500acfcf98 | |||
| 8df1deaad5 | |||
| 9b169f60a6 | |||
| 71ee5d58cf | |||
| 0e0ec49f58 | |||
| 8d685f6997 | |||
| 32cc63c067 | |||
| eb07e5bbda | |||
| 3fa6ae1ba9 | |||
| 347e0139d5 | |||
| 425035b8fd | |||
| 6c6eaddbe2 | |||
| e43686f4d1 | |||
| ef89eb579e | |||
| 5e8159ca2a | |||
| 6700f93183 | |||
| 9e435956f8 | |||
| a06644b816 | |||
| bd20c71391 | |||
| cc5a35123d | |||
| 47045a5306 | |||
| f183129eab | |||
| b0c110ab3a | |||
| 19fe298d11 | |||
| 57f63bf471 | |||
| c0655e447a | |||
| ec286048c9 | |||
| 7c12ebb50d | |||
| 4cafb67e82 | |||
| 20b81d0647 | |||
| 3603b4dbf3 | |||
| 79554b7a39 | |||
| 6fb3b6f5ba | |||
| 8062e7113f | |||
| 7b5e073a70 | |||
| e20bfda83d | |||
| adffd3fdf7 | |||
| d9a29e426a | |||
| 3f92ea57ea | |||
| fa92cf055d | |||
| 4aab63f31e | |||
| 8d24a91c6a | |||
| a36034a135 | |||
| 12855f3805 | |||
| f62339d1d1 | |||
| d7eb429430 | |||
| 3d6315e6e8 | |||
| 5ece26a6dc | |||
| 1dc641ea30 | |||
| 592eadd7c3 | |||
| 216372316a | |||
| 7cbedba3af | |||
| 0b55b647aa | |||
| 75e623b179 | |||
| 472abd7944 | |||
| 4ff8f27bad | |||
| c9478f78a2 | |||
| 8ab50a13d7 | |||
| f689250605 | |||
| cfc224983f | |||
| ebcca47402 | |||
| 11d916dcfd | |||
| d50fa6b79e | |||
| d0631f8aa0 | |||
| cc8b76ef7c | |||
| fa5528fb5f | |||
| f612fce06f | |||
| 930af9dd26 | |||
| 7e3dad1ad2 | |||
| cf55aa031c | |||
| 079ec8c651 | |||
| 890feb9332 | |||
| a04c5387e5 | |||
| bf724a257b | |||
| e73f5e0cd8 | |||
| a8c33bf931 | |||
| 0c3389ecd9 | |||
| c06911b461 | |||
| a12a120272 | |||
| 9baefd085f | |||
| 02b9d435d1 | |||
| b342e55509 | |||
| c7b1cc0f3c | |||
| e4309d57d8 | |||
| b42ff8009c | |||
| 455e359763 | |||
| 5a72929d09 | |||
| 2e5039bb95 | |||
| 371871a077 | |||
| 449512020a | |||
| b491668207 | |||
| 2551c78cc5 | |||
| bc063b2f86 | |||
| b79ad226b2 | |||
| bc97322641 | |||
| 4cfb06086b | |||
| 933d481a0e | |||
| edea15f2c6 | |||
| a1b6610c3d | |||
| 945432e3fa | |||
| 629ebad8eb | |||
| 154ca82f7b | |||
| 0c0550b536 | |||
| 449d29b701 | |||
| 6a9b1e11c2 | |||
| 6ab9f03baf | |||
| 37a25486cf | |||
| 28f289b825 | |||
| 54d0981871 | |||
| 2efcc26bb6 | |||
| a93a1a5759 | |||
| ae29f98c20 | |||
| 02918c9b5a | |||
| 2625dc1312 | |||
| 3e490fab1b | |||
| 76b64f659c | |||
| fb7318cb86 | |||
| 08ee9b4b26 | |||
| 46c0576efe | |||
| b8a6f7491b | |||
| 8f38bbaf26 | |||
| 80dff09134 | |||
| e7b48da713 | |||
| fe0075bdea | |||
| 1d02e6ad68 | |||
| b4706cf3e8 | |||
| cc4f5e6663 | |||
| f35c46a894 | |||
| f9888d928e | |||
| c097c5fbcb | |||
| a016508768 | |||
| 164a1713d5 | |||
| 604d89eef9 | |||
| 83cec3de51 | |||
| 7a33d395b3 | |||
| 8a19bc63ea | |||
| 173dde7681 | |||
| d4b3c0b47c | |||
| e63574774e | |||
| d5cd79f885 | |||
| e683298be6 | |||
| 99597c8c57 | |||
| f99cc40c5d | |||
| 623602fc3a | |||
| b3ea67e8a7 | |||
| 31a7ce1268 | |||
| c7bc47c509 | |||
| 96c0e42e61 | |||
| f24da6baad | |||
| ea7ff35b30 | |||
| 603194ee20 | |||
| 5dadec56e6 | |||
| d75e3da429 | |||
| ebd2ddbbd1 | |||
| df36537bfd | |||
| ed48887068 | |||
| 2908eba59c | |||
| a8ce8f7fc4 | |||
| 66eb1425e2 | |||
| 61f8522410 | |||
| c0903acbd4 | |||
| 588cd3ed50 | |||
| a99d9d67f3 | |||
| 6471eafde6 | |||
| d1840419d1 | |||
| a014ca1760 | |||
| fb273f6461 | |||
| 3a18398d83 | |||
| 44c1770fc9 | |||
| 79e9e8ab77 | |||
| 3d5df576d1 | |||
| 074b794c50 | |||
| 4f52d4e474 | |||
| 716352c1b0 | |||
| 6e19a12f6d | |||
| 5d3bae283c | |||
| 6476f158aa | |||
| 420d6b3054 | |||
| c2c96639e2 | |||
| fa4798095e | |||
| 6f1a4b8217 | |||
| 23f210c0ab | |||
| a2f41703d1 | |||
| 4d61d8900d | |||
| cf17a8096d | |||
| 309b2cde51 | |||
| d366664007 | |||
| b9553882b8 | |||
| 334a740ec0 | |||
| 0a87176b74 | |||
| b6fd814542 | |||
| 4c95484c0a | |||
| b6e9a50d22 | |||
| 874f3fc4d3 | |||
| 0457b58dfe | |||
| e13d97cf7e | |||
| 955edf2afd | |||
| 1b48e65e89 | |||
| 93cc5b2210 |
+2
-1
@@ -5,9 +5,10 @@
|
||||
.git
|
||||
node_modules
|
||||
dist
|
||||
aio/content
|
||||
aio/node_modules
|
||||
aio/content/example-playground
|
||||
aio/tools/examples/shared/node_modules
|
||||
aio/tools/examples/shared/example-scaffold
|
||||
packages/bazel/node_modules
|
||||
|
||||
# All integration test node_modules folders
|
||||
|
||||
@@ -52,10 +52,32 @@ build --enable_runfiles
|
||||
build:release --workspace_status_command="yarn -s ng-dev release build-env-stamp --mode=release"
|
||||
build:release --stamp
|
||||
|
||||
# Building AIO against local Angular deps requires stamping
|
||||
# versions in Angular packages due to CLI version checks.
|
||||
build:aio_local_deps --stamp
|
||||
build:aio_local_deps --workspace_status_command="yarn -s --cwd aio local-workspace-status"
|
||||
|
||||
# Snapshots should also be stamped with version control information.
|
||||
build:snapshot-build --workspace_status_command="yarn -s ng-dev release build-env-stamp --mode=snapshot"
|
||||
build:snapshot-build --stamp
|
||||
|
||||
##########################################################
|
||||
# AIO architect build configuration #
|
||||
# See aio/angular.json for available configurations. #
|
||||
# To build with a partiular configuration: #
|
||||
# bazel build //aio:build --aio_build_config=<config> #
|
||||
# Default config is `stable``. #
|
||||
##########################################################
|
||||
build --flag_alias=aio_build_config=//aio:flag_aio_build_config
|
||||
|
||||
####################################
|
||||
# AIO first party dep substitution #
|
||||
# Turn on with #
|
||||
# --config=aio_local_deps #
|
||||
####################################
|
||||
|
||||
build:aio_local_deps --//aio:flag_aio_local_deps
|
||||
|
||||
###############################
|
||||
# Output #
|
||||
###############################
|
||||
@@ -91,6 +113,10 @@ build:remote --remote_timeout=600
|
||||
build:remote --jobs=150
|
||||
build:remote --google_default_credentials
|
||||
|
||||
# Limit the number of test jobs for on an AIO local deps build. The example tests running
|
||||
# concurrently pushes the circleci executor RAM usage to its limits.
|
||||
test:aio_local_deps --jobs=24
|
||||
|
||||
# Force remote exeuctions to consider the entire run as linux
|
||||
build:remote --cpu=k8
|
||||
build:remote --host_cpu=k8
|
||||
@@ -108,6 +134,21 @@ build:remote --project_id=internal-200822
|
||||
build:remote --remote_cache=remotebuildexecution.googleapis.com
|
||||
build:remote --remote_executor=remotebuildexecution.googleapis.com
|
||||
|
||||
# Ensure that tags like "no-remote-exec" get propagated to actions created by rules.
|
||||
# https://bazel.build/reference/command-line-reference#flag--experimental_allow_tags_propagation
|
||||
build --experimental_allow_tags_propagation
|
||||
|
||||
# Disable network access in the sandbox by default. To enable network access
|
||||
# for a particular target, use:
|
||||
#
|
||||
# load("@npm//@angular/build-tooling/bazel/remote-execution:index.bzl", "ENABLE_NETWORK")
|
||||
# my_target(
|
||||
# ...,
|
||||
# exec_properties = ENABLE_NETWORK, # Enables network in remote exec
|
||||
# tags = ["requires-network"] # Enables network in sandbox
|
||||
# )
|
||||
build --nosandbox_default_allow_network
|
||||
|
||||
##################################
|
||||
# Saucelabs tests settings #
|
||||
# Turn on these settings with #
|
||||
|
||||
@@ -12,10 +12,10 @@ build --repository_cache=/home/circleci/bazel_repository_cache
|
||||
|
||||
# Workaround https://github.com/bazelbuild/bazel/issues/3645
|
||||
# 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 "2xlarge+" class
|
||||
# https://circleci.com/docs/2.0/configuration-reference/#resource_class
|
||||
build --local_cpu_resources=20
|
||||
build --local_ram_resources=32768
|
||||
build --local_ram_resources=40960
|
||||
|
||||
# All build executed remotely should be done using our RBE configuration.
|
||||
build:remote --google_default_credentials
|
||||
|
||||
+19
-59
@@ -252,6 +252,7 @@ jobs:
|
||||
- init_environment
|
||||
|
||||
- run: yarn -s tslint
|
||||
- run: yarn -s --cwd aio lint
|
||||
- run: yarn -s ng-dev format changed $CI_GIT_BASE_REVISION --check
|
||||
- run: yarn -s ts-circular-deps:check
|
||||
- run: yarn -s ng-dev pullapprove verify
|
||||
@@ -321,26 +322,20 @@ jobs:
|
||||
webhook_url_env_var: SLACK_DEV_INFRA_CI_FAILURES_WEBHOOK_URL
|
||||
|
||||
test_aio:
|
||||
executor: test-browser-executor
|
||||
executor:
|
||||
name: test-browser-executor
|
||||
resource_class: 2xlarge+
|
||||
steps:
|
||||
- custom_attach_workspace
|
||||
- init_environment
|
||||
# Build aio
|
||||
- run: yarn --cwd aio build --progress=false
|
||||
# Lint the code
|
||||
- run: yarn --cwd aio lint
|
||||
# Run unit tests
|
||||
- run: yarn --cwd aio test --progress=false --watch=false
|
||||
# Run e2e tests
|
||||
- run: yarn --cwd aio e2e --configuration=ci
|
||||
# Run PWA-score tests
|
||||
- run: yarn --cwd aio test-pwa-score-localhost $CI_AIO_MIN_PWA_SCORE
|
||||
# Run accessibility tests
|
||||
- run: yarn --cwd aio test-a11y-score-localhost
|
||||
|
||||
# Run all aio tests
|
||||
- run:
|
||||
command: yarn --cwd aio test:ci
|
||||
no_output_timeout: 20m
|
||||
|
||||
# Check the bundle sizes.
|
||||
- run: yarn --cwd aio payload-size
|
||||
# Run unit tests for Firebase redirects
|
||||
- run: yarn --cwd aio redirects-test
|
||||
|
||||
deploy_aio:
|
||||
executor: test-browser-executor
|
||||
@@ -352,47 +347,19 @@ jobs:
|
||||
- run: yarn --cwd aio deploy-production
|
||||
|
||||
test_aio_local:
|
||||
executor: test-browser-executor
|
||||
steps:
|
||||
- custom_attach_workspace
|
||||
- init_environment
|
||||
# Build aio (with local Angular packages)
|
||||
- run: yarn --cwd aio build-local-ci
|
||||
# Run unit tests
|
||||
- run: yarn --cwd aio test --progress=false --watch=false
|
||||
# Run e2e tests
|
||||
- run: yarn --cwd aio e2e --configuration=ci
|
||||
# Run PWA-score tests
|
||||
- run: yarn --cwd aio test-pwa-score-localhost $CI_AIO_MIN_PWA_SCORE
|
||||
# Check the bundle sizes.
|
||||
- run: yarn --cwd aio payload-size aio-local
|
||||
|
||||
test_aio_tools:
|
||||
executor: default-executor
|
||||
steps:
|
||||
- custom_attach_workspace
|
||||
- init_environment
|
||||
# Install
|
||||
- run: yarn --cwd aio install --frozen-lockfile --non-interactive --cache-folder ~/.cache/yarn
|
||||
- run: yarn --cwd aio extract-cli-command-docs
|
||||
# Run tools tests
|
||||
- run: yarn --cwd aio tools-test
|
||||
- run: ./aio/aio-builds-setup/scripts/test.sh
|
||||
|
||||
test_docs_examples:
|
||||
executor:
|
||||
name: test-browser-executor
|
||||
resource_class: xlarge
|
||||
parallelism: 5
|
||||
resource_class: 2xlarge+
|
||||
steps:
|
||||
- custom_attach_workspace
|
||||
- init_environment
|
||||
# Install aio
|
||||
- run: yarn --cwd aio install --frozen-lockfile --non-interactive --cache-folder ~/.cache/yarn
|
||||
# Run examples tests. The "CIRCLE_NODE_INDEX" will be set if "parallelism" is enabled.
|
||||
# Since the parallelism is set to "5", there will be five parallel CircleCI containers.
|
||||
# with either "0", "1", etc as node index. This can be passed to the "--shard" argument.
|
||||
- run: yarn --cwd aio example-e2e --setup --local --cliSpecsConcurrency=5 --shard=${CIRCLE_NODE_INDEX}/${CIRCLE_NODE_TOTAL}
|
||||
# Run all aio tests (with local Angular packages)
|
||||
- run:
|
||||
command: yarn --cwd aio test-local:ci
|
||||
no_output_timeout: 20m
|
||||
|
||||
# Check the bundle sizes.
|
||||
- run: yarn --cwd aio payload-size aio-local
|
||||
|
||||
# This job should only be run on PR builds, where `CI_PULL_REQUEST` is not `false`.
|
||||
aio_preview:
|
||||
@@ -770,13 +737,7 @@ workflows:
|
||||
- test_aio
|
||||
- test_aio_local:
|
||||
requires:
|
||||
- build-npm-packages
|
||||
- test_aio_tools:
|
||||
requires:
|
||||
- build-npm-packages
|
||||
- test_docs_examples:
|
||||
requires:
|
||||
- build-npm-packages
|
||||
- setup
|
||||
- aio_preview:
|
||||
# Only run on PR builds. (There can be no previews for non-PR builds.)
|
||||
<<: *only_on_pull_requests
|
||||
@@ -795,7 +756,6 @@ workflows:
|
||||
- test
|
||||
# Only publish if `aio`/`docs` tests using the locally built Angular packages pass
|
||||
- test_aio_local
|
||||
- test_docs_examples
|
||||
# Get the artifacts to publish from the build-packages-dist job
|
||||
# since the publishing script expects the legacy outputs layout.
|
||||
- build-npm-packages
|
||||
|
||||
@@ -22,7 +22,7 @@ merge:
|
||||
# the g3 status will be added to your pull requests if they include files that match the patterns
|
||||
g3Status:
|
||||
# set to true to disable
|
||||
disabled: false
|
||||
disabled: true
|
||||
# the name of the status
|
||||
context: 'google3'
|
||||
# text to show when the status is pending, {{PRNumber}} will be replaced by the PR number
|
||||
@@ -32,64 +32,8 @@ merge:
|
||||
# link to use for the details
|
||||
url: 'http://go/angular/g3sync'
|
||||
# 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
|
||||
include:
|
||||
- 'LICENSE'
|
||||
- 'modules/benchmarks/**'
|
||||
- 'modules/system.d.ts'
|
||||
- 'packages/**'
|
||||
# list of patterns to ignore for the files changed by the PR
|
||||
exclude:
|
||||
- 'packages/*'
|
||||
- 'packages/bazel/*'
|
||||
- 'packages/bazel/src/*'
|
||||
- 'packages/bazel/src/api-extractor/**'
|
||||
- 'packages/bazel/src/builders/**'
|
||||
- 'packages/bazel/src/ng_module/**'
|
||||
- 'packages/bazel/src/ng_package/**'
|
||||
- 'packages/bazel/src/protractor/**'
|
||||
- 'packages/bazel/src/schematics/**'
|
||||
- 'packages/bazel/src/types_bundle/**'
|
||||
- 'packages/compiler-cli/src/ngcc/**'
|
||||
- 'packages/compiler-cli/linker/**'
|
||||
- 'packages/compiler-cli/ngcc/**'
|
||||
- 'packages/compiler-cli/src/ngtsc/sourcemaps/**'
|
||||
# 'private' mostly contains entrypoints for 3P Angular.
|
||||
# Note that 'private/migrations' _is_ used.
|
||||
- 'packages/compiler-cli/private/bazel.ts'
|
||||
- 'packages/compiler-cli/private/localize.ts'
|
||||
- 'packages/compiler-cli/private/tooling.ts'
|
||||
- 'packages/compiler-cli/private/babel.d.ts'
|
||||
# google3 defines its own binary entrypoints.
|
||||
- 'packages/compiler-cli/src/bin/**'
|
||||
- 'packages/docs/**'
|
||||
- 'packages/elements/schematics/**'
|
||||
- 'packages/examples/**'
|
||||
- 'packages/language-service/**'
|
||||
- 'packages/localize/**'
|
||||
- 'packages/private/**'
|
||||
- 'packages/service-worker/**'
|
||||
- 'packages/common/locales/generate-locales-tool/**'
|
||||
- 'packages/common/locales/index.bzl'
|
||||
- 'packages/http/**'
|
||||
- '**/.gitignore'
|
||||
- '**/.gitkeep'
|
||||
- '**/yarn.lock'
|
||||
- '**/package.json'
|
||||
- '**/third_party/**'
|
||||
- '**/tsconfig-build.json'
|
||||
- '**/tsconfig-tsec.json'
|
||||
- '**/tsconfig.json'
|
||||
- '**/rollup.config.js'
|
||||
- '**/BUILD.bazel'
|
||||
- '**/*.md'
|
||||
- 'packages/**/integrationtest/**'
|
||||
- 'packages/**/test/**'
|
||||
- 'packages/zone.js/*'
|
||||
- 'packages/zone.js/dist/**'
|
||||
- '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
|
||||
mergeConflictComment: "Hi @{{PRAuthor}}! This PR has merge conflicts due to recent upstream merges.\nPlease help to unblock it by resolving these conflicts. Thanks!"
|
||||
@@ -127,7 +71,7 @@ merge:
|
||||
- 'ci/circleci: build'
|
||||
- 'ci/circleci: lint'
|
||||
- 'ci/angular: size'
|
||||
- 'google3'
|
||||
- 'google-internal-tests'
|
||||
- 'pullapprove'
|
||||
|
||||
# the comment that will be added when the merge label is added despite failing checks, leave empty or set to false to disable
|
||||
|
||||
@@ -13,13 +13,13 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3.1.0
|
||||
- uses: angular/dev-infra/github-actions/commit-message-based-labels@c9b2ff083a50d0eac742da1e69e0cbdb98bf53dd
|
||||
- uses: angular/dev-infra/github-actions/commit-message-based-labels@d87b1b56a970132f90301624cea6b6d70b6d9489
|
||||
with:
|
||||
angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }}
|
||||
post_approval_changes:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3.1.0
|
||||
- uses: angular/dev-infra/github-actions/post-approval-changes@c9b2ff083a50d0eac742da1e69e0cbdb98bf53dd
|
||||
- uses: angular/dev-infra/github-actions/post-approval-changes@d87b1b56a970132f90301624cea6b6d70b6d9489
|
||||
with:
|
||||
angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }}
|
||||
|
||||
@@ -14,6 +14,6 @@ jobs:
|
||||
if: github.repository == 'angular/angular'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: angular/dev-infra/github-actions/feature-request@a64f3515ea822a8b228ebaab1c52e76e557a580c
|
||||
- uses: angular/dev-infra/github-actions/feature-request@d87b1b56a970132f90301624cea6b6d70b6d9489
|
||||
with:
|
||||
angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }}
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
name: Google Internal Tests Enforcement
|
||||
|
||||
on:
|
||||
pull_request_target:
|
||||
types: [opened, reopened, synchronize]
|
||||
|
||||
permissions:
|
||||
pull-requests: read
|
||||
statuses: write
|
||||
|
||||
jobs:
|
||||
trigger:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3.1.0
|
||||
- uses: angular/dev-infra/github-actions/google-internal-tests@d87b1b56a970132f90301624cea6b6d70b6d9489
|
||||
with:
|
||||
run-tests-guide-url: http://go/angular/g3sync
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
sync-config: ./.ng-dev/google-sync-config.json
|
||||
@@ -14,6 +14,6 @@ jobs:
|
||||
if: github.repository == 'angular/angular'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: angular/dev-infra/github-actions/lock-closed@c9b2ff083a50d0eac742da1e69e0cbdb98bf53dd
|
||||
- uses: angular/dev-infra/github-actions/lock-closed@d87b1b56a970132f90301624cea6b6d70b6d9489
|
||||
with:
|
||||
lock-bot-key: ${{ secrets.LOCK_BOT_PRIVATE_KEY }}
|
||||
|
||||
@@ -30,7 +30,7 @@ jobs:
|
||||
persist-credentials: false
|
||||
|
||||
- name: 'Run analysis'
|
||||
uses: ossf/scorecard-action@e363bfca00e752f91de7b7d2a77340e2e523cb18 # tag=v2.0.4
|
||||
uses: ossf/scorecard-action@99c53751e09b9529366343771cc321ec74e9bd3d # tag=v2.0.6
|
||||
with:
|
||||
results_file: results.sarif
|
||||
results_format: sarif
|
||||
@@ -39,7 +39,7 @@ jobs:
|
||||
|
||||
# Upload the results as artifacts.
|
||||
- name: 'Upload artifact'
|
||||
uses: actions/upload-artifact@3cea5372237819ed00197afe530f5a7ea3e805c8 # tag=v3.1.0
|
||||
uses: actions/upload-artifact@83fd05a356d7e2593de66fc9913b3002723633cb # tag=v3.1.1
|
||||
with:
|
||||
name: SARIF file
|
||||
path: results.sarif
|
||||
@@ -47,6 +47,6 @@ jobs:
|
||||
|
||||
# Upload the results to GitHub's code scanning dashboard.
|
||||
- name: 'Upload to code-scanning'
|
||||
uses: github/codeql-action/upload-sarif@807578363a7869ca324a79039e6db9c843e0e100 # tag=v2.1.27
|
||||
uses: github/codeql-action/upload-sarif@312e093a1892bd801f026f1090904ee8e460b9b6 # tag=v2.1.34
|
||||
with:
|
||||
sarif_file: results.sarif
|
||||
|
||||
@@ -35,7 +35,7 @@ jobs:
|
||||
- name: Generate `events.json`
|
||||
run: node aio/scripts/generate-events/index.mjs --ignore-invalid-dates
|
||||
- name: Create a PR (if necessary)
|
||||
uses: angular/dev-infra/github-actions/create-pr-for-changes@c9b2ff083a50d0eac742da1e69e0cbdb98bf53dd
|
||||
uses: angular/dev-infra/github-actions/create-pr-for-changes@d87b1b56a970132f90301624cea6b6d70b6d9489
|
||||
with:
|
||||
branch-prefix: docs-update-events
|
||||
pr-title: 'docs: update events'
|
||||
|
||||
@@ -2,6 +2,7 @@ import {CaretakerConfig} from '@angular/ng-dev';
|
||||
|
||||
/** The configuration for `ng-dev caretaker` commands. */
|
||||
export const caretaker: CaretakerConfig = {
|
||||
g3SyncConfigPath: './.ng-dev/google-sync-config.json',
|
||||
githubQueries: [
|
||||
{
|
||||
name: 'Merge Queue',
|
||||
@@ -9,7 +10,7 @@ export const caretaker: CaretakerConfig = {
|
||||
},
|
||||
{
|
||||
name: 'Merge Assistance Queue',
|
||||
query: `is:pr is:open label:"action: merge-assistance"`,
|
||||
query: `is:pr is:open label:"merge: caretaker note" label:"action: merge"`,
|
||||
},
|
||||
{
|
||||
name: 'Initial Triage Queue',
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
{
|
||||
"syncedFilePatterns": ["LICENSE", "modules/benchmarks/**", "modules/system.d.ts", "packages/**"],
|
||||
"alwaysExternalFilePatterns": [
|
||||
"packages/*",
|
||||
"packages/bazel/*",
|
||||
"packages/bazel/src/*",
|
||||
"packages/bazel/src/api-extractor/**",
|
||||
"packages/bazel/src/builders/**",
|
||||
"packages/bazel/src/ng_module/**",
|
||||
"packages/bazel/src/ng_package/**",
|
||||
"packages/bazel/src/protractor/**",
|
||||
"packages/bazel/src/schematics/**",
|
||||
"packages/bazel/src/types_bundle/**",
|
||||
"packages/compiler-cli/src/ngcc/**",
|
||||
"packages/compiler-cli/linker/**",
|
||||
"packages/compiler-cli/ngcc/**",
|
||||
"packages/compiler-cli/src/ngtsc/sourcemaps/**",
|
||||
"packages/compiler-cli/private/bazel.ts",
|
||||
"packages/compiler-cli/private/localize.ts",
|
||||
"packages/compiler-cli/private/tooling.ts",
|
||||
"packages/compiler-cli/private/babel.d.ts",
|
||||
"packages/compiler-cli/src/bin/**",
|
||||
"packages/docs/**",
|
||||
"packages/elements/schematics/**",
|
||||
"packages/examples/**",
|
||||
"packages/language-service/**",
|
||||
"packages/localize/**",
|
||||
"packages/private/**",
|
||||
"packages/service-worker/**",
|
||||
"packages/common/locales/generate-locales-tool/**",
|
||||
"packages/common/locales/index.bzl",
|
||||
"packages/http/**",
|
||||
"**/.gitignore",
|
||||
"**/.gitkeep",
|
||||
"**/yarn.lock",
|
||||
"**/package.json",
|
||||
"**/third_party/**",
|
||||
"**/tsconfig-build.json",
|
||||
"**/tsconfig-tsec.json",
|
||||
"**/tsconfig.json",
|
||||
"**/rollup.config.js",
|
||||
"**/BUILD.bazel",
|
||||
"**/*.md",
|
||||
"packages/**/integrationtest/**",
|
||||
"packages/**/test/**",
|
||||
"packages/zone.js/*",
|
||||
"packages/zone.js/dist/**",
|
||||
"packages/zone.js/doc/**",
|
||||
"packages/zone.js/example/**",
|
||||
"packages/zone.js/scripts/**"
|
||||
]
|
||||
}
|
||||
@@ -6,9 +6,6 @@ import {PullRequestConfig} from '@angular/ng-dev';
|
||||
*/
|
||||
export const pullRequest: PullRequestConfig = {
|
||||
githubApiMerge: false,
|
||||
mergeReadyLabel: 'action: merge',
|
||||
caretakerNoteLabel: 'action: caretaker note',
|
||||
commitMessageFixupLabel: 'merge: fix commit message',
|
||||
requiredBaseCommits: {
|
||||
// PRs that target either `main` or the patch branch, need to be rebased
|
||||
// on top of the latest commit message validation fix.
|
||||
|
||||
+29
-3
@@ -61,9 +61,8 @@
|
||||
|
||||
version: 3
|
||||
|
||||
availability:
|
||||
users_unavailable:
|
||||
- atscott
|
||||
# availability:
|
||||
# users_unavailable:
|
||||
|
||||
# Meta field that goes unused by PullApprove to allow for defining aliases to be
|
||||
# used throughout the config.
|
||||
@@ -326,6 +325,7 @@ groups:
|
||||
'aio/content/guide/two-way-binding.md',
|
||||
'aio/content/examples/two-way-binding/**/{*,.*}',
|
||||
'aio/content/guide/built-in-directives.md',
|
||||
'aio/content/guide/directive-composition-api.md',
|
||||
'aio/content/examples/built-in-directives/**/{*,.*}',
|
||||
'aio/content/images/guide/built-in-directives/**/{*,.*}',
|
||||
'aio/content/guide/template-reference-variables.md',
|
||||
@@ -933,6 +933,8 @@ groups:
|
||||
'aio/content/guide/migration-module-with-providers.md',
|
||||
'aio/content/guide/static-query-migration.md',
|
||||
'aio/content/guide/update-to-latest-version.md',
|
||||
'aio/content/guide/update-to-version-14.md',
|
||||
'aio/content/guide/update-to-version-15.md'
|
||||
])
|
||||
reviewers:
|
||||
users:
|
||||
@@ -1071,6 +1073,7 @@ groups:
|
||||
'aio/tests/**/{*,.*}',
|
||||
'aio/tools/**/{*,.*}',
|
||||
'aio/tools/examples/shared/boilerplate/cli/.vscode/**/{*,.*}',
|
||||
'aio/content/BUILD.bazel',
|
||||
'aio/content/images/guide/contributors-guide/**/{*,.*}',
|
||||
'aio/content/guide/contributors-guide-overview.md',
|
||||
'aio/content/guide/docs-style-guide.md',
|
||||
@@ -1083,6 +1086,28 @@ groups:
|
||||
'aio/content/guide/reviewing-content.md',
|
||||
'aio/content/guide/updating-content-github-ui.md',
|
||||
'aio/content/guide/updating-search-keywords.md',
|
||||
'aio/content/guide/doc-build-test.md',
|
||||
'aio/content/guide/doc-edit-finish.md',
|
||||
'aio/content/guide/doc-editing.md',
|
||||
'aio/content/guide/doc-github-tasks.md',
|
||||
'aio/content/guide/doc-pr-open.md',
|
||||
'aio/content/guide/doc-pr-prep.md',
|
||||
'aio/content/guide/doc-pr-update.md',
|
||||
'aio/content/guide/doc-prepare-to-edit.md',
|
||||
'aio/content/guide/doc-select-issue.md',
|
||||
'aio/content/guide/doc-tasks.md',
|
||||
'aio/content/guide/doc-update-overview.md',
|
||||
'aio/content/guide/doc-update-start.md',
|
||||
'aio/content/guide/docs-lint-errors.md',
|
||||
'aio/content/images/guide/preparing-to-edit-docs/**/{*,.*}',
|
||||
'aio/content/images/guide/github-for-docs/**/{*,.*}',
|
||||
'aio/content/images/guide/doc-update-start/**/{*,.*}',
|
||||
'aio/content/images/guide/doc-update-overview/**/{*,.*}',
|
||||
'aio/content/images/guide/doc-pr-update/**/{*,.*}',
|
||||
'aio/content/images/guide/doc-pr-prep/**/{*,.*}',
|
||||
'aio/content/images/guide/doc-pr-open/**/{*,.*}',
|
||||
'aio/content/images/guide/doc-github-tasks/**/{*,.*}',
|
||||
'aio/content/images/guide/doc-prepare-to-edit/**/{*,.*}',
|
||||
])
|
||||
reviewers:
|
||||
users:
|
||||
@@ -1138,6 +1163,7 @@ groups:
|
||||
'tools/bazel-repo-patches/**/{*,.*}',
|
||||
'tools/circular_dependency_test/**/{*,.*}',
|
||||
'tools/contributing-stats/**/{*,.*}',
|
||||
'tools/esm-loader/**/{*,.*}',
|
||||
'tools/gulp-tasks/**/{*,.*}',
|
||||
'tools/legacy-saucelabs/**/{*,.*}',
|
||||
'tools/rxjs/**/{*,.*}',
|
||||
|
||||
Vendored
+9
-21
@@ -16,7 +16,7 @@
|
||||
"remoteRoot": "${workspaceRoot}",
|
||||
"stopOnEntry": false,
|
||||
"timeout": 600000,
|
||||
"outFiles": ["${workspaceFolder}/bazel-out/**/angular/**/*.js"],
|
||||
"outFiles": ["${workspaceFolder}/dist/out/**/packages/**/*.js"]
|
||||
},
|
||||
{
|
||||
"name": "Attach to bazel test ... --config=debug (no source maps)",
|
||||
@@ -30,58 +30,46 @@
|
||||
"remoteRoot": "${workspaceRoot}",
|
||||
"stopOnEntry": false,
|
||||
"timeout": 600000,
|
||||
"outFiles": ["${workspaceFolder}/bazel-out/**/angular/**/*.js"],
|
||||
"outFiles": ["${workspaceFolder}/dist/out/**/packages/**/*.js"]
|
||||
},
|
||||
{
|
||||
"name": "IVY:packages/core/test/acceptance",
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"program": "${workspaceFolder}/node_modules/.bin/bazelisk",
|
||||
"args": [
|
||||
"test",
|
||||
"packages/core/test/acceptance",
|
||||
"--config=debug"
|
||||
],
|
||||
"args": ["test", "packages/core/test/acceptance", "--config=debug"],
|
||||
"port": 9229,
|
||||
"address": "localhost",
|
||||
"restart": true,
|
||||
"sourceMaps": true,
|
||||
"timeout": 600000,
|
||||
"outFiles": ["${workspaceFolder}/bazel-out/**/angular/**/*.js"],
|
||||
"outFiles": ["${workspaceFolder}/dist/out/**/packages/**/*.js"]
|
||||
},
|
||||
{
|
||||
"name": "IVY:packages/core/test/render3",
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"program": "${workspaceFolder}/node_modules/.bin/bazelisk",
|
||||
"args": [
|
||||
"test",
|
||||
"packages/core/test/render3",
|
||||
"--config=debug"
|
||||
],
|
||||
"args": ["test", "packages/core/test/render3", "--config=debug"],
|
||||
"port": 9229,
|
||||
"address": "localhost",
|
||||
"restart": true,
|
||||
"sourceMaps": true,
|
||||
"timeout": 600000,
|
||||
"outFiles": ["${workspaceFolder}/bazel-out/**/angular/**/*.js"],
|
||||
"outFiles": ["${workspaceFolder}/dist/out/**/packages/**/*.js"]
|
||||
},
|
||||
{
|
||||
"name": "IVY:packages/core/test",
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"program": "${workspaceFolder}/node_modules/.bin/bazelisk",
|
||||
"args": [
|
||||
"test",
|
||||
"packages/core/test",
|
||||
"--config=debug"
|
||||
],
|
||||
"args": ["test", "packages/core/test", "--config=debug"],
|
||||
"port": 9229,
|
||||
"address": "localhost",
|
||||
"restart": true,
|
||||
"sourceMaps": true,
|
||||
"timeout": 600000,
|
||||
"outFiles": ["${workspaceFolder}/bazel-out/**/angular/**/*.js"],
|
||||
},
|
||||
"outFiles": ["${workspaceFolder}/dist/out/**/packages/**/*.js"]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+13
-1
@@ -1,4 +1,5 @@
|
||||
load("//tools:defaults.bzl", "nodejs_binary")
|
||||
load("//:yarn.bzl", "YARN_PATH")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
@@ -6,12 +7,20 @@ exports_files([
|
||||
"LICENSE",
|
||||
"karma-js.conf.js",
|
||||
"browser-providers.conf.js",
|
||||
YARN_PATH,
|
||||
"scripts/ci/bazel-payload-size.sh",
|
||||
"scripts/ci/payload-size.sh",
|
||||
"scripts/ci/payload-size.js",
|
||||
"package.json",
|
||||
])
|
||||
|
||||
filegroup(
|
||||
# filegroup is needed so that this package.json file can be a dep
|
||||
# in a js_library target, which doesn't allow source file deps
|
||||
name = "package_json",
|
||||
srcs = ["package.json"],
|
||||
)
|
||||
|
||||
alias(
|
||||
name = "tsconfig.json",
|
||||
actual = "//packages:tsconfig-build.json",
|
||||
@@ -61,5 +70,8 @@ nodejs_binary(
|
||||
name = "yarn_vendored",
|
||||
data = [".yarn/releases/yarn-1.22.17.cjs"],
|
||||
entry_point = ".yarn/releases/yarn-1.22.17.cjs",
|
||||
visibility = ["//integration:__subpackages__"],
|
||||
visibility = [
|
||||
"//aio/tools/examples/shared:__pkg__",
|
||||
"//integration:__subpackages__",
|
||||
],
|
||||
)
|
||||
|
||||
+158
-120
@@ -1,17 +1,46 @@
|
||||
<a name="14.2.6"></a>
|
||||
# 14.2.6 (2022-10-12)
|
||||
<a name="15.0.2"></a>
|
||||
# 15.0.2 (2022-11-30)
|
||||
### compiler-cli
|
||||
| Commit | Type | Description |
|
||||
| -- | -- | -- |
|
||||
| [3fd176a905](https://github.com/angular/angular/commit/3fd176a9054bea6f6c4cd22e8ff3b8f63b86b637) | fix | add missing period to error message ([#47744](https://github.com/angular/angular/pull/47744)) |
|
||||
| [c3821f5ab5](https://github.com/angular/angular/commit/c3821f5ab5bf54b2c9d7868da79a742d4e4b7667) | perf | minimize filesystem calls when generating shims ([#47682](https://github.com/angular/angular/pull/47682)) |
|
||||
| [86a21f5569](https://github.com/angular/angular/commit/86a21f5569bc4b8060a882bd3d542a6c002438c7) | fix | accept inheriting the constructor from a class in a library ([#48156](https://github.com/angular/angular/pull/48156)) |
|
||||
## Special Thanks
|
||||
Alan Agius, Andrew Kushnir, Andrew Scott, Aristeidis Bampakos, Bob Watson, Charles Lyding, Joey Perrott, Joshua Morony, Mathew Berg, Paul Gschwendtner, Peter Dickten, Renan Ferro, Sri Ram, WD Snoeijer, markostanimirovic and Álvaro Martínez
|
||||
Alan Agius, Andrew Scott, Aristeidis Bampakos, Bob Watson, Derek Cormier, JoostK, Kristiyan Kostadinov, Matthieu Riegler, Paul Gschwendtner, Pawel Kozlowski, Rokas Brazdžionis, mgechev and piyush132000
|
||||
|
||||
<!-- CHANGELOG SPLIT MARKER -->
|
||||
|
||||
<a name="15.0.0-next.5"></a>
|
||||
# 15.0.0-next.5 (2022-10-05)
|
||||
<a name="15.0.1"></a>
|
||||
# 15.0.1 (2022-11-22)
|
||||
### common
|
||||
| Commit | Type | Description |
|
||||
| -- | -- | -- |
|
||||
| [930af9dd26](https://github.com/angular/angular/commit/930af9dd2607754e778922a4bb31055123229e24) | fix | Fix MockPlatformLocation events and missing onPopState implementation ([#48113](https://github.com/angular/angular/pull/48113)) |
|
||||
### forms
|
||||
| Commit | Type | Description |
|
||||
| -- | -- | -- |
|
||||
| [b342e55509](https://github.com/angular/angular/commit/b342e5550928c14ddfb33861189f67b39e163d05) | fix | don't mutate validators array ([#47830](https://github.com/angular/angular/pull/47830)) |
|
||||
| [a12a120272](https://github.com/angular/angular/commit/a12a120272024e49bd3d80d9ed1ae30dcf8622f8) | fix | FormBuilder.group return right type with shorthand parameters. ([#48084](https://github.com/angular/angular/pull/48084)) |
|
||||
### language-service
|
||||
| Commit | Type | Description |
|
||||
| -- | -- | -- |
|
||||
| [cc8b76ef7c](https://github.com/angular/angular/commit/cc8b76ef7cb908d2c95229f39bf82a13ca59570b) | fix | correctly handle host directive inputs/outputs ([#48147](https://github.com/angular/angular/pull/48147)) |
|
||||
| [a8c33bf931](https://github.com/angular/angular/commit/a8c33bf93132425a617381e4aa9a6f0e8e0ddf5b) | fix | update packages/language-service/build.sh script to work with vscode-ng-language-service's new Bazel build ([#48120](https://github.com/angular/angular/pull/48120)) |
|
||||
### router
|
||||
| Commit | Type | Description |
|
||||
| -- | -- | -- |
|
||||
| [e4309d57d8](https://github.com/angular/angular/commit/e4309d57d893e111bda3744a61630d1888ddbc02) | fix | correct type of nextState parameter in canDeactivate ([#48038](https://github.com/angular/angular/pull/48038)) |
|
||||
| [9baefd085f](https://github.com/angular/angular/commit/9baefd085fb079c312c4c03d79775a0fcff933b9) | fix | Ensure renavigating in component init works with enabledBlocking ([#48063](https://github.com/angular/angular/pull/48063)) |
|
||||
| [fa5528fb5f](https://github.com/angular/angular/commit/fa5528fb5f0fe6e4e6ea85d39e43262018520c43) | fix | restore 'history.state' on popstate even if navigationId missing ([#48033](https://github.com/angular/angular/pull/48033)) |
|
||||
## Special Thanks
|
||||
Alan Agius, Andrew Scott, Bjarki, Bob Watson, Brooke, Derek Cormier, Dylan Hunn, George Kalpakas, Greg Magolan, Ikko Ashimine, Ivan Rodriguez, Jessica Janiuk, Joe Roxbury, Joey Perrott, Kristiyan Kostadinov, Matthieu Riegler, Mikhail Savchuk, Nebojsa Cvetkovic, Pawel Kozlowski, Volodymyr and Wooshaah
|
||||
|
||||
<!-- CHANGELOG SPLIT MARKER -->
|
||||
|
||||
<a name="15.0.0"></a>
|
||||
# 15.0.0 (2022-11-16)
|
||||
|
||||
[Blog post "Angular v15 is now available"](http://goo.gle/angular-v15).
|
||||
|
||||
## Breaking Changes
|
||||
### compiler
|
||||
- Keyframes names are now prefixed with the component's "scope name".
|
||||
@@ -31,6 +60,32 @@ Alan Agius, Andrew Kushnir, Andrew Scott, Aristeidis Bampakos, Bob Watson, Charl
|
||||
- change the component's view encapsulation to the `None` or `ShadowDom`
|
||||
- define keyframes rules in global stylesheets (e.g styles.css)
|
||||
- define keyframes rules programmatically in code.
|
||||
### compiler-cli
|
||||
- Invalid constructors for DI may now report compilation errors
|
||||
|
||||
When a class inherits its constructor from a base class, the compiler may now
|
||||
report an error when that constructor cannot be used for DI purposes. This may
|
||||
either be because the base class is missing an Angular decorator such as
|
||||
`@Injectable()` or `@Directive()`, or because the constructor contains parameters
|
||||
which do not have an associated token (such as primitive types like `string`).
|
||||
These situations used to behave unexpectedly at runtime, where the class may be
|
||||
constructed without any of its constructor parameters, so this is now reported
|
||||
as an error during compilation.
|
||||
|
||||
Any new errors that may be reported because of this change can be resolved either
|
||||
by decorating the base class from which the constructor is inherited, or by adding
|
||||
an explicit constructor to the class for which the error is reported.
|
||||
- Angular compiler option `enableIvy` has been removed as Ivy is the only rendering engine.
|
||||
### core
|
||||
- Angular no longer supports Node.js versions `14.[15-19].x` and `16.[10-12].x`. Current supported versions of Node.js are `14.20.x`, `16.13.x` and `18.10.x`.
|
||||
- TypeScript versions older than 4.8 are no longer supported.
|
||||
- Existing iframe usages may have security-sensitive attributes applied as an attribute or property binding in a template or via host bindings in a directive. Such usages would require an update to ensure compliance with the new stricter rules around iframe bindings.
|
||||
- Existing iframe usages may have `src` or `srcdoc` preceding other attributes. Such usages may need to be updated to ensure compliance with the new stricter rules around iframe bindings.
|
||||
### forms
|
||||
- setDisabledState will always be called when a `ControlValueAccessor` is attached. You can opt-out with `FormsModule.withConfig` or `ReactiveFormsModule.withConfig`.
|
||||
### localize
|
||||
- - `canParse` method has been removed from all translation parsers in `@angular/localize/tools`. `analyze` should be used instead.
|
||||
- the `hint` parameter in the`parse` methods is now mandatory.
|
||||
### router
|
||||
- Previously, the `RouterOutlet` would immediately
|
||||
instantiate the component being activated during navigation. Now the
|
||||
@@ -38,7 +93,15 @@ Alan Agius, Andrew Kushnir, Andrew Scott, Aristeidis Bampakos, Bob Watson, Charl
|
||||
could affect tests which do not trigger change detection after a router
|
||||
navigation. In rarer cases, this can affect production code that relies
|
||||
on the exact timing of component availability.
|
||||
- The title property is now required on ActivatedRouteSnapshot
|
||||
- `relativeLinkResolution` is no longer configurable in
|
||||
the Router. This option was used as a means to opt out of a bug fix.
|
||||
## Deprecations
|
||||
### common
|
||||
- The `DATE_PIPE_DEFAULT_TIMEZONE` token is now deprecated in favor
|
||||
of the `DATE_PIPE_DEFAULT_OPTIONS` token, which accepts an object
|
||||
as a value and the timezone can be defined as a field (called `timezone`)
|
||||
on that object.
|
||||
### core
|
||||
- - The ability to pass an `NgModule` to the `providedIn` option for
|
||||
`@Injectable` and `InjectionToken` is now deprecated.
|
||||
@@ -54,29 +117,116 @@ Alan Agius, Andrew Kushnir, Andrew Scott, Aristeidis Bampakos, Bob Watson, Charl
|
||||
|
||||
`providedIn: 'any'` is an option with confusing semantics and is almost
|
||||
never used apart from a handful of esoteric cases internal to the framework.
|
||||
- The bit field signature of `Injector.get()` has been deprecated, in favor of the new options object.
|
||||
- The bit field signature of `TestBed.inject()` has been deprecated, in favor of the new options object.
|
||||
### router
|
||||
- The `RouterLinkWithHref` directive is deprecated, use the `RouterLink` directive instead. The `RouterLink` contains the code from the `RouterLinkWithHref` to handle elements with `href` attributes.
|
||||
### common
|
||||
| Commit | Type | Description |
|
||||
| -- | -- | -- |
|
||||
| [c0c7efaf7c](https://github.com/angular/angular/commit/c0c7efaf7c8a53c1a6f137aac960757cc804f263) | feat | add `provideLocationMocks()` function to provide Location mocks ([#47674](https://github.com/angular/angular/pull/47674)) |
|
||||
| [75e6297f09](https://github.com/angular/angular/commit/75e6297f0901cc98aea1626a138a820e68d026ec) | feat | add <link> preload tag on server for priority img ([#47343](https://github.com/angular/angular/pull/47343)) |
|
||||
| [4fde292bb5](https://github.com/angular/angular/commit/4fde292bb58f5d5bc3cf6e634f7cff9eb0d13d84) | feat | Add automatic srcset generation to ngOptimizedImage ([#47547](https://github.com/angular/angular/pull/47547)) |
|
||||
| [9483343ebf](https://github.com/angular/angular/commit/9483343ebf958297ebcb81ef313d356296a41f41) | feat | Add fill mode to NgOptimizedImage ([#47738](https://github.com/angular/angular/pull/47738)) |
|
||||
| [bdb5371033](https://github.com/angular/angular/commit/bdb5371033d8e9a110619861323e8383a32d5900) | feat | add injection token for default DatePipe configuration ([#47157](https://github.com/angular/angular/pull/47157)) |
|
||||
| [449d29b701](https://github.com/angular/angular/commit/449d29b701ee5a50e7279d44f4c3888a5d6f7e96) | fix | Add fetchpriority to ngOptimizedImage preloads ([#48010](https://github.com/angular/angular/pull/48010)) |
|
||||
| [4f52d4e474](https://github.com/angular/angular/commit/4f52d4e47416494b4054e43a0d96383bde7813ca) | fix | don't generate srcset if noopImageLoader is used ([#47804](https://github.com/angular/angular/pull/47804)) |
|
||||
| [3a18398d83](https://github.com/angular/angular/commit/3a18398d8303fb4ae1923b3a182e6abb92e3117b) | fix | Don't warn about image distortion is fill mode is enabled ([#47824](https://github.com/angular/angular/pull/47824)) |
|
||||
| [edea15f2c6](https://github.com/angular/angular/commit/edea15f2c63675e86248a25649008a10e1384334) | fix | export the IMAGE_CONFIG token ([#48051](https://github.com/angular/angular/pull/48051)) |
|
||||
| [8abf1c844c](https://github.com/angular/angular/commit/8abf1c844c656b41a604098889db76e8c63da720) | fix | fix formatting on oversized image error ([#47188](https://github.com/angular/angular/pull/47188)) |
|
||||
| [ca7bf65933](https://github.com/angular/angular/commit/ca7bf6593380fa760891d29fba5c9f61c6e9bf8b) | fix | rename `rawSrc` -> `ngSrc` in NgOptimizedImage directive ([#47362](https://github.com/angular/angular/pull/47362)) |
|
||||
| [b3879dbf14](https://github.com/angular/angular/commit/b3879dbf1470ab4f31e676f1f8909cd50d963844) | fix | support density descriptors with 2+ decimals ([#47197](https://github.com/angular/angular/pull/47197)) |
|
||||
| [fa4798095e](https://github.com/angular/angular/commit/fa4798095e3820087c4a3bccc9638c5e979315da) | fix | update size error to mention 'fill' mode ([#47797](https://github.com/angular/angular/pull/47797)) |
|
||||
| [23f210c0ab](https://github.com/angular/angular/commit/23f210c0abfb6104f4aa2f39d0efd096c2b7574d) | fix | warn if using supported CDN but not built-in loader ([#47330](https://github.com/angular/angular/pull/47330)) |
|
||||
| [945432e3fa](https://github.com/angular/angular/commit/945432e3fa2cb22ff911eda2a8ad3302a8adba5a) | fix | Warn on fill ngOptimizedImage without height ([#48036](https://github.com/angular/angular/pull/48036)) |
|
||||
### compiler
|
||||
| Commit | Type | Description |
|
||||
| -- | -- | -- |
|
||||
| [051f75648d](https://github.com/angular/angular/commit/051f75648d6065949796ac1c7ea67e71e31b011e) | fix | scope css keyframes in emulated view encapsulation ([#42608](https://github.com/angular/angular/pull/42608)) |
|
||||
| [39b72e208b](https://github.com/angular/angular/commit/39b72e208b46d80f1d9a802cebf043c2ccf3c5f2) | fix | update element schema ([#47552](https://github.com/angular/angular/pull/47552)) |
|
||||
| [48b354a83e](https://github.com/angular/angular/commit/48b354a83e6d94735a03eebb3a52c5698e7a0f44) | fix | update element schema ([#47552](https://github.com/angular/angular/pull/47552)) |
|
||||
### compiler-cli
|
||||
| Commit | Type | Description |
|
||||
| -- | -- | -- |
|
||||
| [bc54687c7b](https://github.com/angular/angular/commit/bc54687c7b91efe451aa744d2d3a15ca3524231e) | fix | exclude abstract classes from `strictInjectionParameters` requirement ([#44615](https://github.com/angular/angular/pull/44615)) |
|
||||
| [309b2cde51](https://github.com/angular/angular/commit/309b2cde51d1577d6561e826be01e2b5fce43c49) | fix | implement more host directive validations as diagnostics ([#47768](https://github.com/angular/angular/pull/47768)) |
|
||||
| [2e1dddec45](https://github.com/angular/angular/commit/2e1dddec45fef8291b1f3abce2a937e28bb75a87) | fix | support hasInvalidatedResolutions. ([#47585](https://github.com/angular/angular/pull/47585)) |
|
||||
| [19ad4987f9](https://github.com/angular/angular/commit/19ad4987f9070222bb2fb8bd07a43ed7995f602a) | fix | use @ts-ignore. ([#47636](https://github.com/angular/angular/pull/47636)) |
|
||||
| [8fcadaad48](https://github.com/angular/angular/commit/8fcadaad48b2b1328f47b7603b230445a26f95a8) | perf | cache source file for reporting type-checking diagnostics ([#47471](https://github.com/angular/angular/pull/47471)) |
|
||||
| [16f96eeabf](https://github.com/angular/angular/commit/16f96eeabf77964092b4b6a830e29f2761ffaeec) | refactor | remove `enableIvy` options ([#47346](https://github.com/angular/angular/pull/47346)) |
|
||||
### core
|
||||
| Commit | Type | Description |
|
||||
| -- | -- | -- |
|
||||
| [e3cef4a784](https://github.com/angular/angular/commit/e3cef4a7843d22fd004f1e27afcc42d0fbbef74a) | docs | deprecate `providedIn: NgModule` and `providedIn: 'any'` ([#47616](https://github.com/angular/angular/pull/47616)) |
|
||||
| [1b9fd46d14](https://github.com/angular/angular/commit/1b9fd46d14ed46f78b6d761b3917ded1f0d51e0d) | feat | add support for Node.js version 18 ([#47730](https://github.com/angular/angular/pull/47730)) |
|
||||
| [ed11a13c3c](https://github.com/angular/angular/commit/ed11a13c3c5cccb0094c1a4ff9c60ea741a42067) | feat | drop support for TypeScript 4.6 and 4.7 ([#47690](https://github.com/angular/angular/pull/47690)) |
|
||||
| [db28badfe6](https://github.com/angular/angular/commit/db28badfe67f404e81dacd7c3131af105feb3412) | feat | enable the new directive composition API ([#47642](https://github.com/angular/angular/pull/47642)) |
|
||||
| [7de1469be6](https://github.com/angular/angular/commit/7de1469be62b08037681ee9e75614fb800700ef8) | feat | introduce EnvironmentProviders wrapper type ([#47669](https://github.com/angular/angular/pull/47669)) |
|
||||
| [841c8e5138](https://github.com/angular/angular/commit/841c8e51386645d7fd26642f41952ed8f0a2dbe5) | feat | support object-based DI flags in Injector.get() ([#46761](https://github.com/angular/angular/pull/46761)) |
|
||||
| [120555a626](https://github.com/angular/angular/commit/120555a626d66523e46ce01681b11a0f38e3a40a) | feat | support object-based DI flags in TestBed.inject() ([#46761](https://github.com/angular/angular/pull/46761)) |
|
||||
| [96c0e42e61](https://github.com/angular/angular/commit/96c0e42e61b8a4fced1354da0162c06e7b029cf3) | fix | allow readonly arrays for standalone imports ([#47851](https://github.com/angular/angular/pull/47851)) |
|
||||
| [28f289b825](https://github.com/angular/angular/commit/28f289b825be7f4bf6dc5db69197741867b8ea23) | fix | hardening attribute and property binding rules for <iframe> elements ([#47964](https://github.com/angular/angular/pull/47964)) |
|
||||
| [d4b3c0b47c](https://github.com/angular/angular/commit/d4b3c0b47c32a9a664d3073164d04c0385058008) | fix | hardening rules related to the attribute order on iframe elements ([#47935](https://github.com/angular/angular/pull/47935)) |
|
||||
| [85330f3fd9](https://github.com/angular/angular/commit/85330f3fd9ac6381ce3aa18479ed8195d2ac215e) | fix | update `isDevMode` to rely on `ngDevMode` ([#47475](https://github.com/angular/angular/pull/47475)) |
|
||||
### forms
|
||||
| Commit | Type | Description |
|
||||
| -- | -- | -- |
|
||||
| [a8569e3802](https://github.com/angular/angular/commit/a8569e38029724a7d77935bccce99117a7e1aefa) | feat | export forms utility functions: isFormArray, isFormGroup… ([#47718](https://github.com/angular/angular/pull/47718)) |
|
||||
| [96b7fe93af](https://github.com/angular/angular/commit/96b7fe93af361a1cf2ea5477970f64ba6f3d8cd5) | fix | call `setDisabledState` on `ControlValueAcessor` when control is enabled ([#47576](https://github.com/angular/angular/pull/47576)) |
|
||||
| [a99d9d67f3](https://github.com/angular/angular/commit/a99d9d67f382c18b46c4c1c6765bbda445ca0b8c) | fix | don't mutate validators array ([#47830](https://github.com/angular/angular/pull/47830)) |
|
||||
| [2625dc1312](https://github.com/angular/angular/commit/2625dc13127da9f8d5fa79f1b32ad132d6656c63) | fix | Improve a very commonly viewed error message by adding a guide. ([#47969](https://github.com/angular/angular/pull/47969)) |
|
||||
| [ae29f98c20](https://github.com/angular/angular/commit/ae29f98c20390abbf84d2df312ee5e8766195d60) | fix | Runtime error pages must begin with leading zero ([#47991](https://github.com/angular/angular/pull/47991)) |
|
||||
### http
|
||||
| Commit | Type | Description |
|
||||
| -- | -- | -- |
|
||||
| [3ba99e286a](https://github.com/angular/angular/commit/3ba99e286a166d122fb334171b6a9a1e6461a724) | feat | allow for child `HttpClient`s to request via parents ([#47502](https://github.com/angular/angular/pull/47502)) |
|
||||
| [84d0d33c35](https://github.com/angular/angular/commit/84d0d33c3537f0da927e0ce449ede78ef9bebc6b) | feat | introduce `provideHttpClientTesting` provider function ([#47502](https://github.com/angular/angular/pull/47502)) |
|
||||
| [62c7a7a16e](https://github.com/angular/angular/commit/62c7a7a16e035c3a5346270dc4c5c6de85bf9137) | feat | introduce functional interceptors ([#47502](https://github.com/angular/angular/pull/47502)) |
|
||||
| [e47b129070](https://github.com/angular/angular/commit/e47b129070655f2e9eeac58bc2d0ea5648f41045) | feat | introduce the `provideHttpClient()` API ([#47502](https://github.com/angular/angular/pull/47502)) |
|
||||
| [ea16a98dfe](https://github.com/angular/angular/commit/ea16a98dfef0de33c192e328f151cca39749a488) | fix | better handle unexpected `undefined` XSRF tokens ([#47683](https://github.com/angular/angular/pull/47683)) |
|
||||
| [e7b48da713](https://github.com/angular/angular/commit/e7b48da713f32c02c096f1342ab8b0d7ec696ca5) | fix | rename `withLegacyInterceptors` to `withInterceptorsFromDi` ([#47901](https://github.com/angular/angular/pull/47901)) |
|
||||
### language-service
|
||||
| Commit | Type | Description |
|
||||
| -- | -- | -- |
|
||||
| [bebef5fb43](https://github.com/angular/angular/commit/bebef5fb43dcf54a109499d0d9dd701786c33f60) | feat | Quick fix to import a component when its selector is used ([#47088](https://github.com/angular/angular/pull/47088)) |
|
||||
| [e7ee53c541](https://github.com/angular/angular/commit/e7ee53c541da0a1f85c217354ec9901010ae0de9) | feat | support to fix invalid banana in box ([#47393](https://github.com/angular/angular/pull/47393)) |
|
||||
### localize
|
||||
| Commit | Type | Description |
|
||||
| -- | -- | -- |
|
||||
| [400a6b5e37](https://github.com/angular/angular/commit/400a6b5e3707f3939d84c659a115b75ef15d2c09) | fix | add polyfill in polyfills array instead of polyfills.ts ([#47569](https://github.com/angular/angular/pull/47569)) |
|
||||
| [b6fd814542](https://github.com/angular/angular/commit/b6fd81454207bd256a48d5726f3bd7e6ce6a489b) | fix | update ng add schematic to support Angular CLI version 15 ([#47763](https://github.com/angular/angular/pull/47763)) |
|
||||
| [d36fd3d9e4](https://github.com/angular/angular/commit/d36fd3d9e41984818af5e1aad5e3004574d837bb) | refactor | remove deprecated `canParse` method from TranslationParsers ([#47275](https://github.com/angular/angular/pull/47275)) |
|
||||
### platform-server
|
||||
| Commit | Type | Description |
|
||||
| -- | -- | -- |
|
||||
| [2908eba59c](https://github.com/angular/angular/commit/2908eba59c25e9a1fc5aa257b4a8a247db82079e) | fix | align server renderer interface with base renderer ([#47868](https://github.com/angular/angular/pull/47868)) |
|
||||
### router
|
||||
| Commit | Type | Description |
|
||||
| -- | -- | -- |
|
||||
| [7bee28d037](https://github.com/angular/angular/commit/7bee28d037a8a21a7440293b3e8c118cc93ec8c1) | feat | add a migration to remove `relativeLinkResolution` usages ([#47604](https://github.com/angular/angular/pull/47604)) |
|
||||
| [5163e3d876](https://github.com/angular/angular/commit/5163e3d876cdfd6d309d7e35aefa6f07ef62715e) | feat | Add UrlTree constructor to public API ([#47186](https://github.com/angular/angular/pull/47186)) |
|
||||
| [da58801f95](https://github.com/angular/angular/commit/da58801f95c66c201e332189af25702bdd722f3f) | feat | auto-unwrap default exports when lazy loading ([#47586](https://github.com/angular/angular/pull/47586)) |
|
||||
| [c3f857975d](https://github.com/angular/angular/commit/c3f857975d56cac6ad3939d64f76a51455159c23) | feat | make RouterOutlet name an Input so it can be set dynamically ([#46569](https://github.com/angular/angular/pull/46569)) |
|
||||
| [f73ef21442](https://github.com/angular/angular/commit/f73ef2144279b6b26902510f90ca1fccb8e166b2) | feat | merge `RouterLinkWithHref` into `RouterLink` ([#47630](https://github.com/angular/angular/pull/47630)) |
|
||||
| [16c8f55663](https://github.com/angular/angular/commit/16c8f55663c30270fcd647b1a8a20ddbc8923349) | feat | migrate `RouterLinkWithHref` references to `RouterLink` ([#47599](https://github.com/angular/angular/pull/47599)) |
|
||||
| [07017a7bd3](https://github.com/angular/angular/commit/07017a7bd30c6bb7bd1b94a9fd1b112ee68c9ced) | feat | prevent `provideRouter()` from usage in @Component ([#47669](https://github.com/angular/angular/pull/47669)) |
|
||||
| [79e9e8ab77](https://github.com/angular/angular/commit/79e9e8ab779d230f6a1df25c4ccff94b13129305) | fix | Delay router scroll event until navigated components have rendered ([#47563](https://github.com/angular/angular/pull/47563)) |
|
||||
| [6a88bad019](https://github.com/angular/angular/commit/6a88bad0192516f26a5a008c0634b73456b9447c) | fix | Ensure ActivatedRouteSnapshot#title has correct value ([#47481](https://github.com/angular/angular/pull/47481)) |
|
||||
| [7b89d95c0e](https://github.com/angular/angular/commit/7b89d95c0e7370d33f006aba8e67bafb53a2fd4f) | fix | Remove deprecated relativeLinkResolution ([#47623](https://github.com/angular/angular/pull/47623)) |
|
||||
## Special Thanks
|
||||
Alan Agius, Alex Rickabaugh, Alexander Wiebe, Andrew Kushnir, Andrew Scott, Ciprian Sauliuc, Dmytro Mezhenskyi, Dylan Hunn, George Kalpakas, Joe Martin (Crowdstaffing), Jordan, Kristiyan Kostadinov, Martin Probst, Ole M, Paul Gschwendtner, Pawel Kozlowski, dario-piotrowicz and mgechev
|
||||
Alan Agius, AleksanderBodurri, Alex Castle, Alex Rickabaugh, Andrew Kushnir, Andrew Scott, Charles Lyding, Dylan Hunn, Ferdinand Malcher, George Kalpakas, Jeremy Elbourn, Jessica Janiuk, JiaLiPassion, Joey Perrott, JoostK, Kara Erickson, Kristiyan Kostadinov, Martin Probst, Matthias Weiß, Matthieu Riegler, Paul Gschwendtner, Pawel Kozlowski, Sabareesh Kappagantu, WD Snoeijer, angular-robot[bot], arturovt, ced, dario-piotrowicz, ivanwonder and jaybell
|
||||
|
||||
<!-- CHANGELOG SPLIT MARKER -->
|
||||
|
||||
<a name="14.2.6"></a>
|
||||
# 14.2.6 (2022-10-12)
|
||||
### compiler-cli
|
||||
| Commit | Type | Description |
|
||||
| -- | -- | -- |
|
||||
| [3fd176a905](https://github.com/angular/angular/commit/3fd176a9054bea6f6c4cd22e8ff3b8f63b86b637) | fix | add missing period to error message ([#47744](https://github.com/angular/angular/pull/47744)) |
|
||||
| [c3821f5ab5](https://github.com/angular/angular/commit/c3821f5ab5bf54b2c9d7868da79a742d4e4b7667) | perf | minimize filesystem calls when generating shims ([#47682](https://github.com/angular/angular/pull/47682)) |
|
||||
## Special Thanks
|
||||
Alan Agius, Andrew Kushnir, Andrew Scott, Aristeidis Bampakos, Bob Watson, Charles Lyding, Joey Perrott, Joshua Morony, Mathew Berg, Paul Gschwendtner, Peter Dickten, Renan Ferro, Sri Ram, WD Snoeijer, markostanimirovic and Álvaro Martínez
|
||||
|
||||
<!-- CHANGELOG SPLIT MARKER -->
|
||||
|
||||
@@ -90,35 +240,6 @@ Alexander Wiebe, Ciprian Sauliuc, Dmytro Mezhenskyi, George Kalpakas, Joe Martin
|
||||
|
||||
<!-- CHANGELOG SPLIT MARKER -->
|
||||
|
||||
<a name="15.0.0-next.4"></a>
|
||||
# 15.0.0-next.4 (2022-09-28)
|
||||
## Breaking Changes
|
||||
### router
|
||||
- The title property is now required on ActivatedRouteSnapshot
|
||||
## Deprecations
|
||||
### core
|
||||
- The bit field signature of `Injector.get()` has been deprecated, in favor of the new options object.
|
||||
- The bit field signature of `TestBed.inject()` has been deprecated, in favor of the new options object.
|
||||
### core
|
||||
| Commit | Type | Description |
|
||||
| -- | -- | -- |
|
||||
| [841c8e5138](https://github.com/angular/angular/commit/841c8e51386645d7fd26642f41952ed8f0a2dbe5) | feat | support object-based DI flags in Injector.get() ([#46761](https://github.com/angular/angular/pull/46761)) |
|
||||
| [120555a626](https://github.com/angular/angular/commit/120555a626d66523e46ce01681b11a0f38e3a40a) | feat | support object-based DI flags in TestBed.inject() ([#46761](https://github.com/angular/angular/pull/46761)) |
|
||||
| [aef8d0bb02](https://github.com/angular/angular/commit/aef8d0bb020931e0b44e067b074a449fc66f6ff7) | fix | correctly check for `typeof` of undefined in `ngDevMode` check ([#47480](https://github.com/angular/angular/pull/47480)) |
|
||||
| [85330f3fd9](https://github.com/angular/angular/commit/85330f3fd9ac6381ce3aa18479ed8195d2ac215e) | fix | update `isDevMode` to rely on `ngDevMode` ([#47475](https://github.com/angular/angular/pull/47475)) |
|
||||
### language-service
|
||||
| Commit | Type | Description |
|
||||
| -- | -- | -- |
|
||||
| [e7ee53c541](https://github.com/angular/angular/commit/e7ee53c541da0a1f85c217354ec9901010ae0de9) | feat | support to fix invalid banana in box ([#47393](https://github.com/angular/angular/pull/47393)) |
|
||||
### router
|
||||
| Commit | Type | Description |
|
||||
| -- | -- | -- |
|
||||
| [6a88bad019](https://github.com/angular/angular/commit/6a88bad0192516f26a5a008c0634b73456b9447c) | fix | Ensure ActivatedRouteSnapshot#title has correct value ([#47481](https://github.com/angular/angular/pull/47481)) |
|
||||
## Special Thanks
|
||||
Alan Agius, Alex Rickabaugh, Andrew Kushnir, Andrew Scott, Ashley Hunter, Doug Parker, Jessica Janiuk, JiaLiPassion, Kristiyan Kostadinov, Rokas Brazdžionis, Simona Cotin and ivanwonder
|
||||
|
||||
<!-- CHANGELOG SPLIT MARKER -->
|
||||
|
||||
<a name="14.2.4"></a>
|
||||
# 14.2.4 (2022-09-28)
|
||||
### compiler-cli
|
||||
@@ -134,21 +255,6 @@ Alan Agius, Ashley Hunter, Doug Parker, Jessica Janiuk, JoostK, Kristiyan Kostad
|
||||
|
||||
<!-- CHANGELOG SPLIT MARKER -->
|
||||
|
||||
<a name="15.0.0-next.3"></a>
|
||||
# 15.0.0-next.3 (2022-09-21)
|
||||
### animations
|
||||
| Commit | Type | Description |
|
||||
| -- | -- | -- |
|
||||
| [d11b1d99b0](https://github.com/angular/angular/commit/d11b1d99b0af1bc6389ef0e0157c5bca8a7f951a) | fix | make sure that the useAnimation function delay is applied ([#47468](https://github.com/angular/angular/pull/47468)) |
|
||||
### compiler-cli
|
||||
| Commit | Type | Description |
|
||||
| -- | -- | -- |
|
||||
| [8fcadaad48](https://github.com/angular/angular/commit/8fcadaad48b2b1328f47b7603b230445a26f95a8) | perf | cache source file for reporting type-checking diagnostics ([#47471](https://github.com/angular/angular/pull/47471)) |
|
||||
## Special Thanks
|
||||
AleksanderBodurri, Andrew Kushnir, Andrew Scott, Bob Watson, George Kalpakas, JiaLiPassion, Joey Perrott, JoostK, Kristiyan Kostadinov, Mauro Mattos, Pawel Kozlowski, Sabareesh Kappagantu, angular-robot[bot], dario-piotrowicz, fabioemoutinho and famzila
|
||||
|
||||
<!-- CHANGELOG SPLIT MARKER -->
|
||||
|
||||
<a name="14.2.3"></a>
|
||||
# 14.2.3 (2022-09-21)
|
||||
### animations
|
||||
@@ -160,29 +266,6 @@ AleksanderBodurri, Andrew Kushnir, Andrew Scott, Bob Watson, George Kalpakas, Jo
|
||||
|
||||
<!-- CHANGELOG SPLIT MARKER -->
|
||||
|
||||
<a name="15.0.0-next.2"></a>
|
||||
# 15.0.0-next.2 (2022-09-14)
|
||||
### animations
|
||||
| Commit | Type | Description |
|
||||
| -- | -- | -- |
|
||||
| [7ec196e0fb](https://github.com/angular/angular/commit/7ec196e0fb7d73caada1f502758cab0950e3a272) | fix | make sure that the animation function delay is applied ([#47285](https://github.com/angular/angular/pull/47285)) |
|
||||
### common
|
||||
| Commit | Type | Description |
|
||||
| -- | -- | -- |
|
||||
| [ca7bf65933](https://github.com/angular/angular/commit/ca7bf6593380fa760891d29fba5c9f61c6e9bf8b) | fix | rename `rawSrc` -> `ngSrc` in NgOptimizedImage directive ([#47362](https://github.com/angular/angular/pull/47362)) |
|
||||
### core
|
||||
| Commit | Type | Description |
|
||||
| -- | -- | -- |
|
||||
| [4e10a74941](https://github.com/angular/angular/commit/4e10a7494130b9bb4772ee8f76b66675867b2145) | fix | imply @Optional flag when a default value is provided ([#47242](https://github.com/angular/angular/pull/47242)) |
|
||||
### forms
|
||||
| Commit | Type | Description |
|
||||
| -- | -- | -- |
|
||||
| [4a13210ecd](https://github.com/angular/angular/commit/4a13210ecd692aaace7f67fadf25741f3f0cc50b) | fix | don't prevent default behavior for forms with method="dialog" ([#47308](https://github.com/angular/angular/pull/47308)) |
|
||||
## Special Thanks
|
||||
Abhishek Rawat, Andrew Kushnir, Benjamin Chanudet, Bob Watson, Dylan Hunn, George Kalpakas, Ikko Ashimine, Joey Perrott, Kristiyan Kostadinov, Marc Wrobel, Mariia Subkov, Pawel Kozlowski, Sebastian, abergquist, dario-piotrowicz, onrails and vyom1611
|
||||
|
||||
<!-- CHANGELOG SPLIT MARKER -->
|
||||
|
||||
<a name="14.2.2"></a>
|
||||
# 14.2.2 (2022-09-14)
|
||||
### animations
|
||||
@@ -206,41 +289,6 @@ Abhishek Rawat, Andrew Kushnir, Benjamin Chanudet, Bob Watson, George Kalpakas,
|
||||
|
||||
<!-- CHANGELOG SPLIT MARKER -->
|
||||
|
||||
<a name="15.0.0-next.1"></a>
|
||||
# 15.0.0-next.1 (2022-09-07)
|
||||
## Breaking Changes
|
||||
### compiler-cli
|
||||
- Angular compiler option `enableIvy` has been removed as Ivy is the only rendering engine.
|
||||
### localize
|
||||
- - `canParse` method has been removed from all translation parsers in `@angular/localize/tools`. `analyze` should be used instead.
|
||||
- the `hint` parameter in the`parse` methods is now mandatory.
|
||||
### common
|
||||
| Commit | Type | Description |
|
||||
| -- | -- | -- |
|
||||
| [220d1203e6](https://github.com/angular/angular/commit/220d1203e66116bfcf69204ebac2092eb638bb75) | fix | improve formatting of image warnings ([#47299](https://github.com/angular/angular/pull/47299)) |
|
||||
| [93d7d9101e](https://github.com/angular/angular/commit/93d7d9101e56a51f1ce315b1d0e67fa02e8916d9) | fix | use DOCUMENT token to query for preconnect links ([#47353](https://github.com/angular/angular/pull/47353)) |
|
||||
### compiler
|
||||
| Commit | Type | Description |
|
||||
| -- | -- | -- |
|
||||
| [cf0c53aa1c](https://github.com/angular/angular/commit/cf0c53aa1c54bf747529a9f7899e68c71249fc9d) | fix | avoid errors for inputs with Object-builtin names ([#47220](https://github.com/angular/angular/pull/47220)) |
|
||||
### compiler-cli
|
||||
| Commit | Type | Description |
|
||||
| -- | -- | -- |
|
||||
| [16f96eeabf](https://github.com/angular/angular/commit/16f96eeabf77964092b4b6a830e29f2761ffaeec) | refactor | remove `enableIvy` options ([#47346](https://github.com/angular/angular/pull/47346)) |
|
||||
### localize
|
||||
| Commit | Type | Description |
|
||||
| -- | -- | -- |
|
||||
| [d36fd3d9e4](https://github.com/angular/angular/commit/d36fd3d9e41984818af5e1aad5e3004574d837bb) | refactor | remove deprecated `canParse` method from TranslationParsers ([#47275](https://github.com/angular/angular/pull/47275)) |
|
||||
### service-worker
|
||||
| Commit | Type | Description |
|
||||
| -- | -- | -- |
|
||||
| [e1bb638e0b](https://github.com/angular/angular/commit/e1bb638e0bc9cf2da4ba3aa8ad7b549164ad5c12) | fix | include headers in requests for assets ([#47260](https://github.com/angular/angular/pull/47260)) |
|
||||
| [a0c3326485](https://github.com/angular/angular/commit/a0c3326485548e8d9b193f5472a9b02a02d679a6) | fix | only consider GET requests as navigation requests ([#47263](https://github.com/angular/angular/pull/47263)) |
|
||||
## Special Thanks
|
||||
Alan Agius, Andrew Kushnir, Aristeidis Bampakos, Asaf M, Bingo's Code, Bob Watson, Daniel Ostrovsky, George Kalpakas, Giovanni Alberto Rivas, Jeremy Elbourn, JiaLiPassion, Jobayer Hossain, Joe Martin (Crowdstaffing), Joey Perrott, JoostK, Kara Erickson, Kristiyan Kostadinov, Maina Wycliffe, Sabareesh Kappagantu, Simona Cotin, Sonu Sindhu, Yann Provoost, abergquist, angular-robot[bot], jaybell and vyom1611
|
||||
|
||||
<!-- CHANGELOG SPLIT MARKER -->
|
||||
|
||||
<a name="14.2.1"></a>
|
||||
# 14.2.1 (2022-09-07)
|
||||
### common
|
||||
@@ -262,16 +310,6 @@ Aristeidis Bampakos, Asaf M, Bingo's Code, Bob Watson, Daniel Ostrovsky, George
|
||||
|
||||
<!-- CHANGELOG SPLIT MARKER -->
|
||||
|
||||
<a name="15.0.0-next.0"></a>
|
||||
### router
|
||||
| Commit | Type | Description |
|
||||
| -- | -- | -- |
|
||||
| [5163e3d876](https://github.com/angular/angular/commit/5163e3d876cdfd6d309d7e35aefa6f07ef62715e) | feat | Add UrlTree constructor to public API ([#47186](https://github.com/angular/angular/pull/47186)) |
|
||||
## Special Thanks
|
||||
Alan Agius, Alex Rickabaugh, Andrew Scott, Joey Perrott, Kara Erickson, Kristiyan Kostadinov and Pawel Kozlowski
|
||||
|
||||
<!-- CHANGELOG SPLIT MARKER -->
|
||||
|
||||
<a name="14.2.0"></a>
|
||||
# 14.2.0 (2022-08-25)
|
||||
### animations
|
||||
|
||||
@@ -7,6 +7,7 @@ workspace(
|
||||
)
|
||||
|
||||
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
|
||||
load("//:yarn.bzl", "YARN_LABEL")
|
||||
|
||||
# Add a patch fix for rules_webtesting v0.3.5 required for enabling runfiles on Windows.
|
||||
# TODO: Remove the http_archive for this transitive dependency when a release is cut
|
||||
@@ -24,8 +25,8 @@ http_archive(
|
||||
|
||||
http_archive(
|
||||
name = "build_bazel_rules_nodejs",
|
||||
sha256 = "c78216f5be5d451a42275b0b7dc809fb9347e2b04a68f68bad620a2b01f5c774",
|
||||
urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/5.5.2/rules_nodejs-5.5.2.tar.gz"],
|
||||
sha256 = "c29944ba9b0b430aadcaf3bf2570fece6fc5ebfb76df145c6cdad40d65c20811",
|
||||
urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/5.7.0/rules_nodejs-5.7.0.tar.gz"],
|
||||
)
|
||||
|
||||
load("@build_bazel_rules_nodejs//:repositories.bzl", "build_bazel_rules_nodejs_dependencies")
|
||||
@@ -46,9 +47,35 @@ http_archive(
|
||||
# Fetch Aspect lib for utilities like write_source_files
|
||||
http_archive(
|
||||
name = "aspect_bazel_lib",
|
||||
sha256 = "5f5f1237601d41d61608ad0b9541614935839232940010f9e62163c3e53dc1b7",
|
||||
strip_prefix = "bazel-lib-0.5.0",
|
||||
url = "https://github.com/aspect-build/bazel-lib/archive/refs/tags/v0.5.0.tar.gz",
|
||||
sha256 = "8860aab705fe9f427fbebe388bdfacf8a6b267cb3c0d71ebeaf1dcceedd29193",
|
||||
strip_prefix = "bazel-lib-1.3.0",
|
||||
url = "https://github.com/aspect-build/bazel-lib/archive/refs/tags/v1.3.0.tar.gz",
|
||||
)
|
||||
|
||||
# Download cli source from angular/cli-builds for doc generation at a specific tag or commit.
|
||||
# If the ref is a commit sha, use the full sha instead of the abbreviated form. Tags, which
|
||||
# hold an abbreviated sha by convention in cli-builds, can continue to use the short form.
|
||||
CLI_SRC_REF = "6ccbc6b4cba4fde7898b67d2e195a1ea3bf4553e"
|
||||
|
||||
http_archive(
|
||||
name = "angular_cli_src",
|
||||
build_file_content = """
|
||||
# Include files used in doc generation
|
||||
filegroup(
|
||||
name = "files_for_docgen",
|
||||
srcs = glob([
|
||||
"help/**/*.json",
|
||||
"package.json",
|
||||
]),
|
||||
visibility = ["//visibility:public"],
|
||||
)
|
||||
""",
|
||||
# Run the following command to calculate the sha256, substituting the CLI_SRC_REF
|
||||
# wget -O- -q https://github.com/angular/cli-builds/archive/{CLI_SRC_REF}.tar.gz | sha256sum
|
||||
# Alternatively, just remove the parameter and bazel debug will output the sha as a suggestion.
|
||||
sha256 = "6558e1774904719d0615f01b88368d7fe3a927ea1e54cb0436e7957bc8f6d0a6",
|
||||
strip_prefix = "cli-builds-%s" % CLI_SRC_REF,
|
||||
url = "https://github.com/angular/cli-builds/archive/%s.tar.gz" % CLI_SRC_REF,
|
||||
)
|
||||
|
||||
# Setup the Node.js toolchain.
|
||||
@@ -68,7 +95,7 @@ yarn_install(
|
||||
# Note that we add the postinstall scripts here so that the dependencies are re-installed
|
||||
# when the postinstall patches are modified.
|
||||
data = [
|
||||
"//:.yarn/releases/yarn-1.22.17.cjs",
|
||||
YARN_LABEL,
|
||||
"//:.yarnrc",
|
||||
"//:scripts/puppeteer-chromedriver-versions.js",
|
||||
"//:scripts/webdriver-manager-update.js",
|
||||
@@ -83,7 +110,7 @@ yarn_install(
|
||||
# We prefer to symlink the `node_modules` to only maintain a single install.
|
||||
# See https://github.com/angular/dev-infra/pull/446#issuecomment-1059820287 for details.
|
||||
symlink_node_modules = True,
|
||||
yarn = "//:.yarn/releases/yarn-1.22.17.cjs",
|
||||
yarn = YARN_LABEL,
|
||||
yarn_lock = "//:yarn.lock",
|
||||
)
|
||||
|
||||
@@ -92,8 +119,9 @@ yarn_install(
|
||||
# Note that we add the postinstall scripts here so that the dependencies are re-installed
|
||||
# when the postinstall patches are modified.
|
||||
data = [
|
||||
"//:.yarn/releases/yarn-1.22.17.cjs",
|
||||
YARN_LABEL,
|
||||
"//:.yarnrc",
|
||||
"//aio:tools/cli-patches/bazel-architect-output.patch",
|
||||
"//aio:tools/cli-patches/patch.js",
|
||||
],
|
||||
# Currently disabled due to:
|
||||
@@ -105,10 +133,34 @@ yarn_install(
|
||||
# We prefer to symlink the `node_modules` to only maintain a single install.
|
||||
# See https://github.com/angular/dev-infra/pull/446#issuecomment-1059820287 for details.
|
||||
symlink_node_modules = True,
|
||||
yarn = "//:.yarn/releases/yarn-1.22.17.cjs",
|
||||
yarn = YARN_LABEL,
|
||||
yarn_lock = "//aio:yarn.lock",
|
||||
)
|
||||
|
||||
yarn_install(
|
||||
name = "aio_example_deps",
|
||||
# Rename the default js_library target from "node_modules" as this obscures the
|
||||
# the source directory stamped as a filegroup in the manual BUILD contents below.
|
||||
all_node_modules_target_name = "node_modules_all",
|
||||
data = [
|
||||
YARN_LABEL,
|
||||
"//:.yarnrc",
|
||||
],
|
||||
# Disabled because, when False, yarn_install preserves the node_modules folder
|
||||
# with bin symlinks in the external repository. This is needed to link the shared
|
||||
# set of deps for example e2es.
|
||||
exports_directories_only = False,
|
||||
manual_build_file_contents = """\
|
||||
filegroup(
|
||||
name = "node_modules_files",
|
||||
srcs = ["node_modules"],
|
||||
)
|
||||
""",
|
||||
package_json = "//aio/tools/examples/shared:package.json",
|
||||
yarn = YARN_LABEL,
|
||||
yarn_lock = "//aio/tools/examples/shared:yarn.lock",
|
||||
)
|
||||
|
||||
load("@aspect_bazel_lib//lib:repositories.bzl", "aspect_bazel_lib_dependencies")
|
||||
|
||||
aspect_bazel_lib_dependencies()
|
||||
@@ -158,10 +210,10 @@ cldr_xml_data_repository(
|
||||
# sass rules
|
||||
http_archive(
|
||||
name = "io_bazel_rules_sass",
|
||||
sha256 = "0cde2dd9ff34994f27ba4d5c74d34cca3c727bf41bc6024cf66ad298a1f5e5c2",
|
||||
strip_prefix = "rules_sass-f6ceac7f5e11424880ae41f9c1a5cfd02968376c",
|
||||
sha256 = "618f0b7aae019c149ac2ff4142a66c110de116fb5c173dbeccedbaee06fc5f6d",
|
||||
strip_prefix = "rules_sass-a2fce75bcf103750f7accbf7f966ad48bcbca2d4",
|
||||
urls = [
|
||||
"https://github.com/bazelbuild/rules_sass/archive/f6ceac7f5e11424880ae41f9c1a5cfd02968376c.zip",
|
||||
"https://github.com/bazelbuild/rules_sass/archive/a2fce75bcf103750f7accbf7f966ad48bcbca2d4.zip",
|
||||
],
|
||||
)
|
||||
|
||||
@@ -169,5 +221,13 @@ http_archive(
|
||||
load("@io_bazel_rules_sass//sass:sass_repositories.bzl", "sass_repositories")
|
||||
|
||||
sass_repositories(
|
||||
yarn_script = "//:.yarn/releases/yarn-1.22.17.cjs",
|
||||
yarn_script = YARN_LABEL,
|
||||
)
|
||||
|
||||
# Register git toolchains
|
||||
register_toolchains(
|
||||
"@npm//@angular/build-tooling/bazel/git-toolchain:git_linux_toolchain",
|
||||
"@npm//@angular/build-tooling/bazel/git-toolchain:git_macos_x86_toolchain",
|
||||
"@npm//@angular/build-tooling/bazel/git-toolchain:git_macos_arm64_toolchain",
|
||||
"@npm//@angular/build-tooling/bazel/git-toolchain:git_windows_toolchain",
|
||||
)
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
# This file is used by the build system to adjust CSS and JS output to support the specified browsers below.
|
||||
# For additional information regarding the format and rule options, please see:
|
||||
# https://github.com/browserslist/browserslist#queries
|
||||
|
||||
# For the full list of supported browsers by the Angular framework, please see:
|
||||
# https://angular.io/guide/browser-support
|
||||
|
||||
# You can see what browsers were selected by your queries by running:
|
||||
# npx browserslist
|
||||
|
||||
last 1 Chrome version
|
||||
last 1 Firefox version
|
||||
last 2 Edge major versions
|
||||
last 2 Safari major versions
|
||||
last 2 iOS major versions
|
||||
Firefox ESR
|
||||
+3
-1
@@ -5,7 +5,6 @@
|
||||
/tmp
|
||||
/out-tsc
|
||||
/bazel-out
|
||||
/src/generated
|
||||
|
||||
# Node
|
||||
/node_modules
|
||||
@@ -43,6 +42,9 @@ testem.log
|
||||
# e2e
|
||||
protractor-results*.txt
|
||||
|
||||
# Example playground
|
||||
content/example-playground
|
||||
|
||||
# System files
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
|
||||
+308
-34
@@ -1,39 +1,137 @@
|
||||
load("@aio_npm//@angular-devkit/architect-cli:index.bzl", "architect", "architect_test")
|
||||
load("//tools:defaults.bzl", "npm_package_bin")
|
||||
|
||||
# The write_source_files macro is used to write bazel outputs to the source tree and test that they are up to date.
|
||||
# See: https://docs.aspect.build/aspect-build/bazel-lib/v0.5.0/docs/docs/write_source_files-docgen.html
|
||||
load("@aspect_bazel_lib//lib:write_source_files.bzl", generated_files_test = "write_source_files")
|
||||
load("@build_bazel_rules_nodejs//:index.bzl", "copy_to_bin", "npm_package_bin")
|
||||
load("//tools:defaults.bzl", "nodejs_binary")
|
||||
load("@aspect_bazel_lib//lib:copy_to_directory.bzl", "copy_to_directory")
|
||||
load(":local_packages_util.bzl", "link_local_packages", "substitute_local_package_deps")
|
||||
load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
|
||||
load("//aio/scripts:local_server_test.bzl", "local_server_test")
|
||||
load("@aio_npm//@angular/build-tooling/bazel/remote-execution:index.bzl", "ENABLE_NETWORK")
|
||||
load(":aio_targets.bzl", "aio_test")
|
||||
load("@bazel_skylib//lib:collections.bzl", "collections")
|
||||
|
||||
exports_files([
|
||||
"firebase.json",
|
||||
"ngsw-config.json",
|
||||
"ngsw-config.template.json",
|
||||
"tsconfig.json",
|
||||
])
|
||||
|
||||
# Generate ngsw-config
|
||||
npm_package_bin(
|
||||
name = "ngsw-config",
|
||||
outs = ["ngsw-config_generated.json"],
|
||||
args = ["$@"],
|
||||
tool = "//aio/scripts:build-ngsw-config",
|
||||
# If set will use first party angular deps for aio targets instead of their npm equivalent
|
||||
bool_flag(
|
||||
name = "flag_aio_local_deps",
|
||||
build_setting_default = False,
|
||||
)
|
||||
|
||||
# Write ngsw-config to the source directory and test that it's up to date
|
||||
generated_files_test(
|
||||
name = "write-ngsw-config",
|
||||
files = {
|
||||
"ngsw-config.json": ":ngsw-config",
|
||||
config_setting(
|
||||
name = "aio_local_deps",
|
||||
flag_values = {
|
||||
":flag_aio_local_deps": "true",
|
||||
},
|
||||
)
|
||||
|
||||
# Config setting controlling the AIO architect configuration to build with
|
||||
string_flag(
|
||||
name = "flag_aio_build_config",
|
||||
build_setting_default = "stable",
|
||||
values = [
|
||||
"stable",
|
||||
"rc",
|
||||
"next",
|
||||
"archive",
|
||||
],
|
||||
)
|
||||
|
||||
config_setting(
|
||||
name = "aio_build_config_stable",
|
||||
flag_values = {
|
||||
":flag_aio_build_config": "stable",
|
||||
},
|
||||
)
|
||||
|
||||
config_setting(
|
||||
name = "aio_build_config_rc",
|
||||
flag_values = {
|
||||
":flag_aio_build_config": "rc",
|
||||
},
|
||||
)
|
||||
|
||||
config_setting(
|
||||
name = "aio_build_config_next",
|
||||
flag_values = {
|
||||
":flag_aio_build_config": "next",
|
||||
},
|
||||
)
|
||||
|
||||
config_setting(
|
||||
name = "aio_build_config_archive",
|
||||
flag_values = {
|
||||
":flag_aio_build_config": "archive",
|
||||
},
|
||||
)
|
||||
|
||||
# Run dgeni generation
|
||||
npm_package_bin(
|
||||
name = "dgeni",
|
||||
# angular.io-package is a js_library target, which copies sources to $(BINDIR)
|
||||
args = ["./$(BINDIR)/aio/tools/transforms/angular.io-package"],
|
||||
data = [
|
||||
"//aio/tools/transforms/angular.io-package",
|
||||
# Dgeni typescript package crawls type definitions for Angular dependencies
|
||||
"@npm//rxjs",
|
||||
"@npm//@types/node",
|
||||
],
|
||||
env = {
|
||||
"BAZEL_DGENI_OUTPUT_PATH": "$(@D)",
|
||||
"GIT_BIN": "$(GIT_BIN_PATH)",
|
||||
},
|
||||
exec_properties = ENABLE_NETWORK,
|
||||
output_dir = True,
|
||||
stamp = "@rules_nodejs//nodejs/stamp:always",
|
||||
# Makes remote git calls to get previous versions
|
||||
tags = [
|
||||
"requires-network",
|
||||
],
|
||||
tool = "@aio_npm//dgeni/bin:dgeni",
|
||||
toolchains = [
|
||||
"@npm//@angular/build-tooling/bazel/git-toolchain:current_git_toolchain",
|
||||
],
|
||||
visibility = ["//aio/tests/deployment:__subpackages__"],
|
||||
)
|
||||
|
||||
# Copy stackblitz live examples to expected assets location
|
||||
copy_to_directory(
|
||||
name = "stackblitz",
|
||||
srcs = ["//aio/content/examples:all-stackblitz"],
|
||||
replace_prefixes = {
|
||||
"examples": "generated/live-examples",
|
||||
},
|
||||
root_paths = [
|
||||
"aio/content",
|
||||
],
|
||||
)
|
||||
|
||||
# Copy example zips to expected assets location
|
||||
copy_to_directory(
|
||||
name = "example-zips",
|
||||
srcs = ["//aio/content/examples:all-example-zips"],
|
||||
replace_prefixes = {
|
||||
"examples": "generated/zips",
|
||||
},
|
||||
root_paths = [
|
||||
"aio/content",
|
||||
],
|
||||
)
|
||||
|
||||
# All source and configuration files required to build the docs app
|
||||
APPLICATION_FILES = [
|
||||
"angular.json",
|
||||
"ngsw-config.json",
|
||||
"package.json",
|
||||
"tsconfig.app.json",
|
||||
"tsconfig.json",
|
||||
"tsconfig.worker.json",
|
||||
"security-exemptions.json",
|
||||
"//aio/src/assets",
|
||||
"//aio/src/assets/js",
|
||||
] + glob(
|
||||
["src/**/*"],
|
||||
exclude = [
|
||||
@@ -45,14 +143,20 @@ APPLICATION_FILES = [
|
||||
],
|
||||
)
|
||||
|
||||
# External dependencies from aio/package.json required to build the docs app.
|
||||
# Dependencies required to build the docs app.
|
||||
APPLICATION_DEPS = [
|
||||
":dgeni",
|
||||
":stackblitz",
|
||||
":example-zips",
|
||||
"//aio/src/generated:ngsw-config",
|
||||
"@aio_npm//@angular-devkit/build-angular",
|
||||
"@aio_npm//@angular-eslint/builder",
|
||||
"@aio_npm//@angular/animations",
|
||||
"@aio_npm//@angular/cdk",
|
||||
"@aio_npm//@angular/cli",
|
||||
"@aio_npm//@angular/common",
|
||||
"@aio_npm//@angular/compiler",
|
||||
"@aio_npm//@angular/compiler-cli",
|
||||
"@aio_npm//@angular/core",
|
||||
"@aio_npm//@angular/elements",
|
||||
"@aio_npm//@angular/forms",
|
||||
@@ -78,8 +182,9 @@ TEST_FILES = APPLICATION_FILES + [
|
||||
["src/**/*.spec.ts"],
|
||||
)
|
||||
|
||||
# External dependencies from aio/package.json required to test the docs app
|
||||
# Dependencies required to test the docs app
|
||||
TEST_DEPS = APPLICATION_DEPS + [
|
||||
"@aio_npm//@angular/build-tooling/bazel/browsers/chromium",
|
||||
"@aio_npm//@types/jasmine",
|
||||
"@aio_npm//@types/node",
|
||||
"@aio_npm//assert",
|
||||
@@ -89,28 +194,197 @@ TEST_DEPS = APPLICATION_DEPS + [
|
||||
"@aio_npm//karma-coverage",
|
||||
"@aio_npm//karma-jasmine",
|
||||
"@aio_npm//karma-jasmine-html-reporter",
|
||||
"@aio_npm//puppeteer",
|
||||
"//aio/tools:windows-chromium-path",
|
||||
]
|
||||
|
||||
architect(
|
||||
name = "build",
|
||||
args = [
|
||||
"site:build:stable",
|
||||
"--outputPath=../$(@D)",
|
||||
],
|
||||
chdir = package_name(),
|
||||
configuration_env_vars = ["NG_BUILD_CACHE"],
|
||||
data = APPLICATION_FILES + APPLICATION_DEPS,
|
||||
output_dir = True,
|
||||
# All sources, specs, and config files required to serve the app
|
||||
# and run e2e tests against it
|
||||
E2E_FILES = APPLICATION_FILES + glob(["tests/e2e/**"])
|
||||
|
||||
# Dependencies required to run the e2e tests
|
||||
E2E_DEPS = APPLICATION_DEPS + [
|
||||
"@aio_npm//@angular/build-tooling/bazel/browsers/chromium",
|
||||
"@aio_npm//@types/jasmine",
|
||||
"@aio_npm//@types/node",
|
||||
"@aio_npm//jasmine-spec-reporter",
|
||||
"@aio_npm//protractor",
|
||||
"@aio_npm//ts-node",
|
||||
"//aio/tools:windows-chromium-path",
|
||||
]
|
||||
|
||||
# Poll period for architect rules that watch for changes
|
||||
ARCHITECT_POLL_MS = 1000
|
||||
|
||||
# Stamp npm_link targets for all dependencies that correspond to a
|
||||
# first-party equivalent pacakge in angular.
|
||||
link_local_packages(all_aio_deps = collections.uniq(APPLICATION_DEPS + TEST_DEPS + E2E_DEPS))
|
||||
|
||||
copy_to_bin(
|
||||
name = "application_files_bin",
|
||||
srcs = APPLICATION_FILES,
|
||||
)
|
||||
|
||||
architect_test(
|
||||
architect(
|
||||
name = "build-app",
|
||||
args = select({
|
||||
":aio_build_config_stable": ["site:build:stable"],
|
||||
":aio_build_config_next": ["site:build:next"],
|
||||
":aio_build_config_rc": ["site:build:rc"],
|
||||
":aio_build_config_archive": ["site:build:archive"],
|
||||
}) + [
|
||||
"--output-path=build-app",
|
||||
],
|
||||
chdir = "$(RULEDIR)",
|
||||
data = [":application_files_bin"] + select({
|
||||
":aio_local_deps": substitute_local_package_deps(APPLICATION_DEPS),
|
||||
"//conditions:default": APPLICATION_DEPS,
|
||||
}),
|
||||
output_dir = True,
|
||||
# When building with local packages (--config=aio_local_deps), RBE complains about
|
||||
# the input tree being too large (> 70,000 files).
|
||||
tags = ["no-remote-exec"],
|
||||
)
|
||||
|
||||
npm_package_bin(
|
||||
name = "404-page",
|
||||
outs = ["404.html"],
|
||||
args = [
|
||||
"$(execpath src/404-body.html)",
|
||||
"$(execpath :build-app)",
|
||||
"$@",
|
||||
],
|
||||
data = [
|
||||
"src/404-body.html",
|
||||
":build-app",
|
||||
],
|
||||
tool = "//aio/scripts:build-404-page",
|
||||
)
|
||||
|
||||
# Prepare the final build artifact which substitutes a generated 404 page
|
||||
# into the architect output.
|
||||
copy_to_directory(
|
||||
name = "build",
|
||||
srcs = [
|
||||
":404-page",
|
||||
":build-app",
|
||||
],
|
||||
replace_prefixes = {
|
||||
"build-app": "",
|
||||
},
|
||||
visibility = ["//aio/scripts/deploy-to-firebase:__pkg__"],
|
||||
)
|
||||
|
||||
TEST_DATA = TEST_FILES + select({
|
||||
":aio_local_deps": substitute_local_package_deps(TEST_DEPS),
|
||||
"//conditions:default": TEST_DEPS,
|
||||
})
|
||||
|
||||
aio_test(
|
||||
name = "test",
|
||||
args = [
|
||||
"site:test",
|
||||
"--no-watch",
|
||||
],
|
||||
chdir = package_name(),
|
||||
configuration_env_vars = ["NG_BUILD_CACHE"],
|
||||
data = TEST_FILES + TEST_DEPS,
|
||||
data = TEST_DATA,
|
||||
)
|
||||
|
||||
aio_test(
|
||||
name = "test-and-watch",
|
||||
args = [
|
||||
"site:test",
|
||||
"--watch",
|
||||
"--poll=%d" % ARCHITECT_POLL_MS,
|
||||
],
|
||||
data = TEST_DATA,
|
||||
tags = [
|
||||
"ibazel_notify_changes",
|
||||
"manual",
|
||||
],
|
||||
)
|
||||
|
||||
architect_test(
|
||||
name = "e2e",
|
||||
size = "large",
|
||||
args = [
|
||||
"site:e2e",
|
||||
"--no-webdriver-update",
|
||||
"--port=0",
|
||||
],
|
||||
chdir = package_name(),
|
||||
data = E2E_FILES + select({
|
||||
":aio_local_deps": substitute_local_package_deps(E2E_DEPS),
|
||||
"//conditions:default": E2E_DEPS,
|
||||
}),
|
||||
env = {
|
||||
"CHROME_BIN": "../$(CHROMIUM)",
|
||||
"CHROMEDRIVER_BIN": "../$(CHROMEDRIVER)",
|
||||
},
|
||||
toolchains = [
|
||||
"@aio_npm//@angular/build-tooling/bazel/browsers/chromium:toolchain_alias",
|
||||
],
|
||||
)
|
||||
|
||||
# Build and serve the app. Run with ibazel to watch for changes and re-serve.
|
||||
architect(
|
||||
name = "serve",
|
||||
args = [
|
||||
"site:serve",
|
||||
"--open",
|
||||
"--poll=%d" % ARCHITECT_POLL_MS,
|
||||
"--live-reload",
|
||||
"--watch",
|
||||
],
|
||||
chdir = package_name(),
|
||||
data = APPLICATION_FILES + select({
|
||||
":aio_local_deps": substitute_local_package_deps(APPLICATION_DEPS),
|
||||
"//conditions:default": APPLICATION_DEPS,
|
||||
}),
|
||||
tags = ["ibazel_notify_changes"],
|
||||
)
|
||||
|
||||
# Build and serve the app, watch for changes, and run a fast but low-fidelity
|
||||
# rebuild when docs change. Watching and serving is a part of the node script,
|
||||
# so there is no need to run with ibazel, which would be slow as it would redo
|
||||
# the full dgeni build on each change.
|
||||
|
||||
nodejs_binary(
|
||||
name = "docs-watch",
|
||||
chdir = package_name(),
|
||||
data = APPLICATION_FILES + [
|
||||
"//aio/scripts:fast-serve-and-watch",
|
||||
] + select({
|
||||
":aio_local_deps": substitute_local_package_deps(APPLICATION_DEPS),
|
||||
"//conditions:default": APPLICATION_DEPS,
|
||||
}),
|
||||
enable_linker = True,
|
||||
entry_point = "//aio/scripts:fast-serve-and-watch.js",
|
||||
env = {
|
||||
# Have the authors package output its low-fi dgeni build
|
||||
# to a different directory in the runfiles tree because bazel
|
||||
# write-protects original dgeni runfiles. Then in angular.json
|
||||
# we list this folder last under assets so that it will
|
||||
# take precedence over the original dgeni assets, effectively
|
||||
# overwriting select sources and then serving them.
|
||||
"BAZEL_DGENI_OUTPUT_PATH": "dgeni-fast",
|
||||
},
|
||||
)
|
||||
|
||||
local_server_test(
|
||||
name = "test-a11y-score-localhost",
|
||||
args = ["LOCALHOST_URL"],
|
||||
entry_point = "//aio/scripts:test-aio-a11y",
|
||||
serve_target = ":build",
|
||||
)
|
||||
|
||||
local_server_test(
|
||||
name = "test-pwa-score-localhost",
|
||||
args = [
|
||||
"LOCALHOST_URL",
|
||||
"all:0,pwa:100",
|
||||
],
|
||||
data = [
|
||||
"//aio/scripts:audit-web-app",
|
||||
],
|
||||
entry_point = "//aio/scripts:audit-web-app-script",
|
||||
serve_target = ":build",
|
||||
)
|
||||
|
||||
+23
-47
@@ -9,56 +9,45 @@ Everything in this folder is part of the documentation project. This includes:
|
||||
<a name="developer-tasks"></a>
|
||||
## Developer tasks
|
||||
|
||||
We use [Yarn](https://yarnpkg.com) to manage the dependencies and to run build tasks.
|
||||
We use [Yarn](https://yarnpkg.com) to manage the dependencies and development tasks. Behind the scenes, [Bazel](https://bazel.build/) is used to build targets and run tests.
|
||||
You should run all these tasks from the `angular/aio` folder.
|
||||
Here are the most important tasks you might need to use:
|
||||
|
||||
* `yarn` - install all the dependencies.
|
||||
* `yarn setup` - install all the dependencies, boilerplate, stackblitz, zips and run dgeni on the docs.
|
||||
* `yarn setup-local` - same as `setup`, but build the Angular packages from the source code and use these locally built versions (instead of the ones fetched from npm) for aio and docs examples boilerplate.
|
||||
|
||||
* `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 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 lint` - check that the doc-viewer code follows our style rules.
|
||||
* `yarn test` - watch all the source files, for the doc-viewer, and run all the unit tests when any change.
|
||||
* `yarn test --watch=false` - run all the unit tests once.
|
||||
* `yarn build` - create a production build of the application.
|
||||
* `yarn build-local` - same as `build`, but uses locally built Angular packages from source code rather than from npm.
|
||||
* `yarn start` - run a development web server that watches, rebuilds, and reloads the page when there are changes to the source code or docs.
|
||||
* `yarn start-local` - same as `start`, but uses local Angular packages.
|
||||
* `yarn test` - run all the unit tests for the doc-viewer once.
|
||||
* `yarn test-local` - similar to `test`, but tests against locally built Angular packages.
|
||||
* `yarn test-and-watch` - watch all the source files for the doc-viewer, and run all the unit tests when any change.
|
||||
* `yarn e2e` - run all the e2e tests for the doc-viewer.
|
||||
* `yarn e2e-local` - similar to `e2e`, but tests against locally built Angular packages.
|
||||
* `yarn lint` - check that the doc-viewer code follows our style rules.
|
||||
|
||||
* `yarn docs` - generate all the docs from the source files.
|
||||
* `yarn docs-watch` - watch the Angular source and the docs files and run a short-circuited doc-gen for the docs that changed.
|
||||
* `yarn docs-lint` - check that the doc gen code follows our style rules.
|
||||
* `yarn docs-watch` - similar to `start`, but only watches for docs changes and uses a faster, low-fidelity build ideal for quick editing.
|
||||
* `yarn docs-test` - run the unit tests for the doc generation code.
|
||||
* `yarn docs-lint` - check that the doc gen code follows our style rules.
|
||||
|
||||
* `yarn boilerplate:add` - generate all the boilerplate code for the examples, so that they can be run locally.
|
||||
* `yarn boilerplate:remove` - remove all the boilerplate code that was added via `yarn boilerplate:add`.
|
||||
* `yarn create-example` - create a new example directory containing initial source files.
|
||||
|
||||
* `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 example-playground <exampleName>` - set up a playground to manually test an example combined with its boilerplate files
|
||||
- `--local` - link locally build Angular packages as deps
|
||||
- `--watch` - update the playground when sources change
|
||||
|
||||
* `yarn example-e2e` - run all e2e tests for examples. Available options:
|
||||
- `--setup`: generate boilerplate, force webdriver update & other setup, then run tests.
|
||||
- `--local`: run e2e tests with the local version of Angular contained in the "dist" folder.
|
||||
_Requires `--setup` in order to take effect._
|
||||
- `--local`: run e2e tests against locally built Angular packages.
|
||||
- `--filter=foo`: limit e2e tests to those containing the word "foo".
|
||||
- `--exclude=bar`: exclude e2e tests containing the word "bar".
|
||||
|
||||
> **Note for Windows users**
|
||||
>
|
||||
> Setting up the examples involves creating some [symbolic links](https://en.wikipedia.org/wiki/Symbolic_link) (see [here](./tools/examples/README.md#symlinked-node_modules) for details). On Windows, this requires to either have [Developer Mode enabled](https://blogs.windows.com/windowsdeveloper/2016/12/02/symlinks-windows-10) (supported on Windows 10 or newer) or run the setup commands as administrator.
|
||||
>
|
||||
> The affected commands are:
|
||||
> - `yarn setup` / `yarn setup-*`
|
||||
> - `yarn build` / `yarn build-*`
|
||||
> - `yarn boilerplate:add`
|
||||
> - `yarn example-e2e --setup`
|
||||
> The underlying Bazel build requires creating [symbolic links](https://en.wikipedia.org/wiki/Symbolic_link) (see [here](./tools/examples/README.md#symlinked-node_modules) for details). On Windows, this requires to either have [Developer Mode enabled](https://blogs.windows.com/windowsdeveloper/2016/12/02/symlinks-windows-10) (supported on Windows 10 or newer) or run the setup commands as administrator.
|
||||
|
||||
## Using ServiceWorker locally
|
||||
|
||||
Running `yarn start` (even when explicitly targeting production mode) does not set up the
|
||||
ServiceWorker. If you want to test the ServiceWorker locally, you can use `yarn build` and then
|
||||
serve the files in `dist/` with `yarn http-server dist -p 4200`.
|
||||
serve the files with `yarn http-server ../dist/bin/aio/build -p 4200`.
|
||||
|
||||
|
||||
## Guide to authoring
|
||||
@@ -69,7 +58,7 @@ There are two types of content in the documentation:
|
||||
API docs are generated directly from the source code.
|
||||
The source code is contained in TypeScript files, located in the `angular/packages` folder.
|
||||
Each API item may have a preceding comment, which contains JSDoc style tags and content.
|
||||
The content is written in markdown.
|
||||
The content is written in markdown. To generate docs, each package's files need to be explicitly included in the [packages/BUILD.bazel](../packages/BUILD.bazel) file under the `files_for_docgen` target.
|
||||
|
||||
* **Other content**: guides, tutorials, and other marketing material.
|
||||
All other content is written using markdown in text files, located in the `angular/aio/content` folder.
|
||||
@@ -87,7 +76,7 @@ writing guide pages, explains how to use the documentation classes and component
|
||||
|
||||
### Generating the complete docs
|
||||
|
||||
The main task for generating the docs is `yarn docs`. This will process all the source files (API and other),
|
||||
Running the `yarn build` or `yarn start` tasks will automatically generate the docs. This will process all the source files (API and other),
|
||||
extracting the documentation and generating JSON files that can be consumed by the doc-viewer.
|
||||
|
||||
### Partial doc generation for editors
|
||||
@@ -109,26 +98,13 @@ correctly.
|
||||
|
||||
The general setup is as follows:
|
||||
|
||||
* Open a terminal, ensure the dependencies are installed; run an initial doc generation; then start the doc-viewer:
|
||||
|
||||
```bash
|
||||
yarn setup
|
||||
yarn start
|
||||
```
|
||||
|
||||
* Open a second terminal and start watching the docs
|
||||
* Open a terminal, ensure the dependencies are installed, then start the doc-viewer:
|
||||
|
||||
```bash
|
||||
yarn docs-watch
|
||||
```
|
||||
|
||||
>Alternatively, try the consolidated `serve-and-sync` command that builds, watches and serves in the same terminal window
|
||||
```bash
|
||||
yarn serve-and-sync
|
||||
```
|
||||
|
||||
* Open a browser at https://localhost:4200/ and navigate to the document on which you want to work.
|
||||
You can automatically open the browser by using `yarn start -o` in the first terminal.
|
||||
* A browser will open automatically at https://localhost:4200/. Navigate to the document on which you want to work.
|
||||
|
||||
* Make changes to the page's associated doc or example files. Every time a file is saved, the doc will
|
||||
be regenerated, the app will rebuild and the page will reload.
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
load("@aio_npm//@angular-devkit/architect-cli:index.bzl", "architect_test")
|
||||
|
||||
def aio_test(name, data, args, **kwargs):
|
||||
architect_test(
|
||||
name = name,
|
||||
args = args,
|
||||
chdir = native.package_name(),
|
||||
data = data,
|
||||
env = {
|
||||
"CHROME_BIN": "../$(CHROMIUM)",
|
||||
},
|
||||
toolchains = [
|
||||
"@aio_npm//@angular/build-tooling/bazel/browsers/chromium:toolchain_alias",
|
||||
],
|
||||
**kwargs
|
||||
)
|
||||
+49
-7
@@ -6,7 +6,12 @@
|
||||
"warnings": {
|
||||
"typescriptMismatch": false
|
||||
},
|
||||
"analytics": false
|
||||
"analytics": false,
|
||||
"cache": {
|
||||
// Disable build caching as the cache folder will just be dropped
|
||||
// when run under Bazel sandboxed execution.
|
||||
"enabled": false
|
||||
}
|
||||
},
|
||||
"newProjectRoot": "projects",
|
||||
"projects": {
|
||||
@@ -32,11 +37,13 @@
|
||||
"index": "src/index.html",
|
||||
"main": "src/main.ts",
|
||||
"polyfills": "src/polyfills.ts",
|
||||
"ngswConfigPath": "ngsw-config.json",
|
||||
"ngswConfigPath": "src/generated/ngsw-config.json",
|
||||
"tsConfig": "tsconfig.app.json",
|
||||
"webWorkerTsConfig": "tsconfig.worker.json",
|
||||
"optimization": {
|
||||
"fonts": true,
|
||||
"fonts": {
|
||||
"inline": false
|
||||
},
|
||||
"scripts": true,
|
||||
"styles": {
|
||||
"inlineCritical": false,
|
||||
@@ -47,11 +54,46 @@
|
||||
"sourceMap": true,
|
||||
"namedChunks": true,
|
||||
"assets": [
|
||||
"src/assets",
|
||||
"src/pwa-manifest.json",
|
||||
"src/google385281288605d160.html",
|
||||
// Architect on Windows has difficulty service assets files within a
|
||||
// Bazel runfiles symlink forest. Using "followSymlinks" seems to
|
||||
// fix this. Note that the assets below don't need this workaround as
|
||||
// symlinked tree artifacts pointing to the output tree don't appear
|
||||
// to have the same issue.
|
||||
{
|
||||
"input": "src/generated",
|
||||
"followSymlinks": true,
|
||||
"input": "src/assets",
|
||||
"glob": "**/*",
|
||||
"output": "/assets/"
|
||||
},
|
||||
{
|
||||
"followSymlinks": true,
|
||||
"input": "src/",
|
||||
"glob": "**/pwa-manifest.json",
|
||||
"output": "/"
|
||||
},
|
||||
{
|
||||
"followSymlinks": true,
|
||||
"input": "src/",
|
||||
"glob": "**/google385281288605d160.html",
|
||||
"output": "/"
|
||||
},
|
||||
{
|
||||
"input": "stackblitz/generated",
|
||||
"output": "generated",
|
||||
"glob": "**"
|
||||
},
|
||||
{
|
||||
"input": "example-zips/generated",
|
||||
"output": "generated",
|
||||
"glob": "**"
|
||||
},
|
||||
{
|
||||
"input": "dgeni/generated",
|
||||
"output": "generated",
|
||||
"glob": "**"
|
||||
},
|
||||
{
|
||||
"input": "dgeni-fast/generated",
|
||||
"output": "generated",
|
||||
"glob": "**"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
filegroup(
|
||||
name = "content",
|
||||
srcs = glob(
|
||||
["**"],
|
||||
exclude = ["BUILD.bazel"],
|
||||
),
|
||||
)
|
||||
@@ -1,3 +0,0 @@
|
||||
/node_modules
|
||||
package.json
|
||||
yarn.lock
|
||||
@@ -1,62 +0,0 @@
|
||||
# Gathering and Viewing Usage Analytics
|
||||
|
||||
Users can opt in to share their Angular CLI usage data with [Google Analytics](https://support.google.com/analytics/answer/1008015?hl=en), using the [`ng analytics` CLI command](analytics).
|
||||
The data is also shared with the Angular team, and used to improve the CLI.
|
||||
|
||||
The gathering of CLI analytics data is disabled by default, and must be enabled at the project level by individual users.
|
||||
It cannot be enabled at the project level for all users.
|
||||
|
||||
Data gathered in this way can be viewed on the Google Analytics site, but is not automatically visible on your own organization's Analytics site.
|
||||
As an administrator for an Angular development group, you can configure your instance of Angular CLI to be able to see analytics data for your own team's usage of the Angular CLI.
|
||||
This configuration option is separate from and in addition to other usage analytics that your users may be sharing with Google.
|
||||
|
||||
## Enable access to CLI usage data
|
||||
|
||||
To configure access to your own users' CLI usage data, use the `ng config` command to add a key to your global [`angular.json` workspace configuration file](guide/workspace-config).
|
||||
The key goes under `cli.analyticsSharing` at the top level of the file, outside the `projects` sections.
|
||||
The value of the key is your organization's tracking ID, as assigned by Google Analytics.
|
||||
This ID is a string that looks like `UA-123456-12`.
|
||||
|
||||
You can choose to use a descriptive string as the key value, or be assigned a random key when you run the CLI command.
|
||||
For example, the following command adds a configuration key named "tracking".
|
||||
|
||||
<code-example format="shell" language="shell">
|
||||
|
||||
ng config --global cli.analyticsSharing.tracking UA-123456-12
|
||||
|
||||
</code-example>
|
||||
|
||||
To turn off this feature, run the following command:
|
||||
|
||||
<code-example format="shell" language="shell">
|
||||
|
||||
ng config --global cli.analyticsSharing undefined
|
||||
|
||||
</code-example>
|
||||
|
||||
## Per user tracking
|
||||
|
||||
You can add a custom user ID to the global configuration, in order to identify unique usage of commands and flags.
|
||||
If that user enables CLI analytics for their own project, your analytics display tracks and labels their individual usage.
|
||||
|
||||
<code-example format="shell" language="shell">
|
||||
|
||||
ng config --global cli.analyticsSharing.uuid SOME_USER_NAME
|
||||
|
||||
</code-example>
|
||||
|
||||
To generate a new random user ID, run the following command:
|
||||
|
||||
<code-example format="shell" language="shell">
|
||||
|
||||
ng config --global cli.analyticsSharing.uuid ""
|
||||
|
||||
</code-example>
|
||||
|
||||
<!-- links -->
|
||||
|
||||
<!-- external links -->
|
||||
|
||||
<!-- end links -->
|
||||
|
||||
@reviewed 2022-02-28
|
||||
@@ -0,0 +1,28 @@
|
||||
@name Missing value accessor
|
||||
@category runtime
|
||||
@shortDescription You must register an `NgValueAccessor` with a custom form control
|
||||
|
||||
@description
|
||||
For all custom form controls, you must register a value accessor.
|
||||
|
||||
Here's an example of how to provide one:
|
||||
|
||||
```typescript
|
||||
providers: [
|
||||
{
|
||||
provide: NG_VALUE_ACCESSOR,
|
||||
useExisting: forwardRef(() => MyInputField),
|
||||
multi: true,
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
@debugging
|
||||
As described above, your control was expected to have a value accessor, but was missing one. However, there are many different reasons this can happen in practice. Here's a listing of some known problems leading to this error.
|
||||
|
||||
1. If you **defined** a custom form control, did you remember to provide a value accessor?
|
||||
1. Did you put `ngModel` on an element with no value, or an **invalid element** (e.g. `<div [(ngModel)]="foo">`)?
|
||||
1. Are you using a custom form control declared inside an `NgModule`? if so, make sure you are **importing** the `NgModule`.
|
||||
1. Are you using `ngModel` with a third-party custom form control? Check whether that control provides a value accessor. If not, use **`ngDefaultControl`** on the control's element.
|
||||
1. Are you **testing** a custom form control? Be sure to configure your testbed to know about the control. You can do so with `Testbed.configureTestingModule`.
|
||||
1. Are you using **Nx and Module Federation** with Webpack? Your `webpack.config.js` may require [extra configuration](https://github.com/angular/angular/issues/43821#issuecomment-1054845431) to ensure the forms package is shared.
|
||||
@@ -0,0 +1,71 @@
|
||||
@name Unsafe bindings on an iframe element
|
||||
@category runtime
|
||||
@shortDescription Unsafe bindings on an iframe element
|
||||
|
||||
@description
|
||||
You see this error when Angular detects an attribute binding or a property binding on an `<iframe>` element using the following property names:
|
||||
|
||||
* sandbox
|
||||
* allow
|
||||
* allowFullscreen
|
||||
* referrerPolicy
|
||||
* csp
|
||||
* fetchPriority
|
||||
|
||||
The mentioned attributes affect the security model setup for `<iframe>`s
|
||||
and it's important to apply them before setting the `src` or `srcdoc` attributes.
|
||||
To enforce that, Angular requires these attributes to be set on `<iframe>`s as
|
||||
static attributes, so the values are set at the element creation time and they
|
||||
remain the same throughout the lifetime of an `<iframe>` instance.
|
||||
|
||||
The error is thrown when a property binding with one of the mentioned attribute names is used:
|
||||
```html
|
||||
<iframe [sandbox]="'allow-scripts'" src="..."></iframe>
|
||||
```
|
||||
|
||||
or when it's an attribute bindings:
|
||||
|
||||
```html
|
||||
<iframe [attr.sandbox]="'allow-scripts'" src="..."></iframe>
|
||||
```
|
||||
|
||||
Also, the error is thrown when a similar pattern is used in Directive's host bindings:
|
||||
|
||||
```typescript
|
||||
@Directive({
|
||||
selector: 'iframe',
|
||||
host: {
|
||||
'[sandbox]': `'allow-scripts'`,
|
||||
'[attr.sandbox]': `'allow-scripts'`,
|
||||
}
|
||||
})
|
||||
class IframeDirective {}
|
||||
```
|
||||
|
||||
@debugging
|
||||
|
||||
The error message includes the name of the component with the template where
|
||||
an `<iframe>` element with unsafe bindings is located.
|
||||
|
||||
The recommended solution is to use the mentioned attributes as static ones, for example:
|
||||
|
||||
```html
|
||||
<iframe sandbox="allow-scripts" src="..."></iframe>
|
||||
```
|
||||
|
||||
If you need to have different values for these attributes (depending on various conditions),
|
||||
you can use an `*ngIf` or an `*ngSwitch` on an `<iframe>` element:
|
||||
|
||||
```html
|
||||
<iframe *ngIf="someConditionA" sandbox="allow-scripts" src="..."></iframe>
|
||||
<iframe *ngIf="someConditionB" sandbox="allow-forms" src="..."></iframe>
|
||||
<iframe *ngIf="someConditionC" sandbox="allow-popups" src="..."></iframe>
|
||||
```
|
||||
|
||||
<!-- links -->
|
||||
|
||||
<!-- external links -->
|
||||
|
||||
<!-- end links -->
|
||||
|
||||
@reviewed 2022-05-27
|
||||
@@ -1,108 +0,0 @@
|
||||
# boilerplate files
|
||||
**/.vscode/
|
||||
**/src/environments/environment.prod.ts
|
||||
**/src/environments/environment.ts
|
||||
**/src/assets/.gitkeep
|
||||
**/src/favicon.ico
|
||||
**/src/styles.css
|
||||
**/src/systemjs-angular-loader.js
|
||||
**/src/systemjs.config.js
|
||||
**/src/tsconfig.json
|
||||
**/src/favicon.ico
|
||||
**/src/polyfills.ts
|
||||
**/src/test.ts
|
||||
**/src/tsconfig.app.json
|
||||
**/src/tsconfig.spec.json
|
||||
**/src/typings.d.ts
|
||||
**/e2e/src/app.po.ts
|
||||
**/e2e/tsconfig.e2e.json
|
||||
**/src/karma.conf.js
|
||||
**/.angular-cli.json
|
||||
**/.browserslistrc
|
||||
**/.editorconfig
|
||||
**/.gitignore
|
||||
**/angular.json
|
||||
**/tsconfig.json
|
||||
**/bs-config.e2e.json
|
||||
**/bs-config.json
|
||||
**/package.json
|
||||
**/tsconfig.json
|
||||
**/tsconfig.app.json
|
||||
**/tsconfig.spec.json
|
||||
**/karma-test-shim.js
|
||||
**/browser-test-shim.js
|
||||
**/node_modules
|
||||
**/yarn.lock
|
||||
**/package-lock.json
|
||||
|
||||
# built files
|
||||
*.map
|
||||
_test-output
|
||||
**/*.js
|
||||
dist/
|
||||
|
||||
|
||||
# special
|
||||
!/*
|
||||
!*.1.*
|
||||
!*.2.*
|
||||
!*.3.*
|
||||
*.1.js
|
||||
*.2.js
|
||||
*.3.js
|
||||
*.1.js.map
|
||||
*.2.js.map
|
||||
*.3.js.map
|
||||
!systemjs.config.*.js
|
||||
!karma-test-shim.*.js
|
||||
!copy-dist-files.js
|
||||
!i18n/angular.json
|
||||
|
||||
# AngularJS files
|
||||
!**/*.ajs.js
|
||||
**/app/**/*.ajs.js
|
||||
|
||||
# aot
|
||||
**/*.ngsummary.json
|
||||
upgrade-module/tsconfig-aot.json
|
||||
!rollup-config.js
|
||||
upgrade-module/rollup-config.js
|
||||
aot-compiler/**/*.d.ts
|
||||
aot-compiler/**/*.factory.d.ts
|
||||
upgrade-phonecat-2-hybrid/aot/**/*
|
||||
!upgrade-phonecat-2-hybrid/aot/index.html
|
||||
|
||||
# i18n
|
||||
!i18n/src/systemjs-text-plugin.js
|
||||
|
||||
# testing
|
||||
!testing/src/browser-test-shim.js
|
||||
|
||||
# webpack
|
||||
!webpack/**/config/*.js
|
||||
!webpack/**/*webpack*.js
|
||||
!webpack/src/polyfills.ts
|
||||
|
||||
# styleguide
|
||||
!styleguide/src/systemjs.custom.js
|
||||
|
||||
# stackblitz
|
||||
*stackblitz.no-link.html
|
||||
|
||||
# ngUpgrade testing
|
||||
upgrade-phonecat-1-typescript/tsconfig-aot.json
|
||||
upgrade-phonecat-1-typescript/rollup-config.js
|
||||
upgrade-phonecat-3-final/tsconfig-aot.json
|
||||
upgrade-phonecat-3-final/rollup-config.js
|
||||
!upgrade-phonecat-*/**/karma.conf.js
|
||||
!upgrade-phonecat-*/**/karma-test-shim.js
|
||||
|
||||
# schematics
|
||||
!schematics-for-libraries/projects/my-lib/package.json
|
||||
|
||||
#angular-compiler-options
|
||||
!angular-compiler-options/tsconfig.json
|
||||
!angular-compiler-options/tsconfig.app.json
|
||||
|
||||
# deprecated-example
|
||||
!deprecation-guide/angular.package.json
|
||||
@@ -0,0 +1,21 @@
|
||||
load("//aio/content/examples:examples.bzl", "EXAMPLES")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
filegroup(
|
||||
name = "examples",
|
||||
srcs = glob(
|
||||
["**"],
|
||||
exclude = ["BUILD.bazel"],
|
||||
) + ["//aio/content/examples/%s:files" % example for example in EXAMPLES.keys()],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "all-stackblitz",
|
||||
srcs = ["//aio/content/examples/%s:stackblitz" % example for example in EXAMPLES.keys() if EXAMPLES[example]["stackblitz"]],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "all-example-zips",
|
||||
srcs = ["//aio/content/examples/%s:example-zip" % example for example in EXAMPLES.keys() if EXAMPLES[example]["zip"]],
|
||||
)
|
||||
@@ -0,0 +1,7 @@
|
||||
load("//aio/content/examples:examples.bzl", "docs_example")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
docs_example(
|
||||
name = "accessibility",
|
||||
)
|
||||
@@ -1,11 +1,6 @@
|
||||
import { enableProdMode } from '@angular/core';
|
||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||
|
||||
import { AppModule } from './app/app.module';
|
||||
import { environment } from './environments/environment';
|
||||
|
||||
if (environment.production) {
|
||||
enableProdMode();
|
||||
}
|
||||
|
||||
platformBrowserDynamic().bootstrapModule(AppModule);
|
||||
platformBrowserDynamic().bootstrapModule(AppModule)
|
||||
.catch(err => console.error(err));
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
load("//aio/content/examples:examples.bzl", "docs_example")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
docs_example(
|
||||
name = "ajs-quick-reference",
|
||||
)
|
||||
@@ -1,12 +1,7 @@
|
||||
// #docregion
|
||||
import { enableProdMode } from '@angular/core';
|
||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||
|
||||
import { AppModule } from './app/app.module';
|
||||
import { environment } from './environments/environment';
|
||||
|
||||
if (environment.production) {
|
||||
enableProdMode();
|
||||
}
|
||||
|
||||
platformBrowserDynamic().bootstrapModule(AppModule);
|
||||
platformBrowserDynamic().bootstrapModule(AppModule)
|
||||
.catch(err => console.error(err));
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
load("//aio/content/examples:examples.bzl", "docs_example")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
docs_example(
|
||||
name = "angular-compiler-options",
|
||||
)
|
||||
@@ -9,9 +9,9 @@
|
||||
"cmd": "yarn",
|
||||
"args": [
|
||||
"e2e",
|
||||
"--protractor-config=e2e/protractor-puppeteer.conf.js",
|
||||
"--protractor-config=e2e/protractor-bazel.conf.js",
|
||||
"--no-webdriver-update",
|
||||
"--port={PORT}"
|
||||
"--port=0"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
@@ -1,12 +1,6 @@
|
||||
import { enableProdMode } from '@angular/core';
|
||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||
|
||||
import { AppModule } from './app/app.module';
|
||||
import { environment } from './environments/environment';
|
||||
|
||||
if (environment.production) {
|
||||
enableProdMode();
|
||||
}
|
||||
|
||||
platformBrowserDynamic().bootstrapModule(AppModule)
|
||||
.catch(err => console.error(err));
|
||||
|
||||
@@ -9,8 +9,7 @@
|
||||
"types": []
|
||||
},
|
||||
"files": [
|
||||
"src/main.ts",
|
||||
"src/polyfills.ts"
|
||||
"src/main.ts"
|
||||
],
|
||||
"include": [
|
||||
"src/**/*.d.ts"
|
||||
@@ -39,7 +38,6 @@
|
||||
"sourceMap": true,
|
||||
"declaration": false
|
||||
// #docregion angular-compiler-options-app
|
||||
},
|
||||
}
|
||||
}
|
||||
// #enddocregion angular-compiler-options-app
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
load("//aio/content/examples:examples.bzl", "docs_example")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
docs_example(
|
||||
name = "animations",
|
||||
)
|
||||
@@ -1,11 +1,6 @@
|
||||
import { enableProdMode } from '@angular/core';
|
||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||
|
||||
import { AppModule } from './app/app.module';
|
||||
import { environment } from './environments/environment';
|
||||
|
||||
if (environment.production) {
|
||||
enableProdMode();
|
||||
}
|
||||
|
||||
platformBrowserDynamic().bootstrapModule(AppModule);
|
||||
platformBrowserDynamic().bootstrapModule(AppModule)
|
||||
.catch(err => console.error(err));
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
load("//aio/content/examples:examples.bzl", "docs_example")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
docs_example(
|
||||
name = "architecture",
|
||||
)
|
||||
@@ -1,12 +1,7 @@
|
||||
// #docregion
|
||||
import { enableProdMode } from '@angular/core';
|
||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||
|
||||
import { AppModule } from './app/app.module';
|
||||
import { environment } from './environments/environment';
|
||||
|
||||
if (environment.production) {
|
||||
enableProdMode();
|
||||
}
|
||||
|
||||
platformBrowserDynamic().bootstrapModule(AppModule);
|
||||
platformBrowserDynamic().bootstrapModule(AppModule)
|
||||
.catch(err => console.error(err));
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
load("//aio/content/examples:examples.bzl", "docs_example")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
docs_example(
|
||||
name = "attribute-binding",
|
||||
)
|
||||
@@ -1,12 +1,6 @@
|
||||
import { enableProdMode } from '@angular/core';
|
||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||
|
||||
import { AppModule } from './app/app.module';
|
||||
import { environment } from './environments/environment';
|
||||
|
||||
if (environment.production) {
|
||||
enableProdMode();
|
||||
}
|
||||
|
||||
platformBrowserDynamic().bootstrapModule(AppModule)
|
||||
.catch(err => console.log(err));
|
||||
.catch(err => console.error(err));
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
load("//aio/content/examples:examples.bzl", "docs_example")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
docs_example(
|
||||
name = "attribute-directives",
|
||||
)
|
||||
@@ -1,12 +1,7 @@
|
||||
// #docregion
|
||||
import { enableProdMode } from '@angular/core';
|
||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||
|
||||
import { AppModule } from './app/app.module';
|
||||
import { environment } from './environments/environment';
|
||||
|
||||
if (environment.production) {
|
||||
enableProdMode();
|
||||
}
|
||||
|
||||
platformBrowserDynamic().bootstrapModule(AppModule);
|
||||
platformBrowserDynamic().bootstrapModule(AppModule)
|
||||
.catch(err => console.error(err));
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
load("//aio/content/examples:examples.bzl", "docs_example")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
docs_example(
|
||||
name = "binding-syntax",
|
||||
)
|
||||
@@ -1,12 +1,7 @@
|
||||
// #docregion
|
||||
import { enableProdMode } from '@angular/core';
|
||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||
|
||||
import { AppModule } from './app/app.module';
|
||||
import { environment } from './environments/environment';
|
||||
|
||||
if (environment.production) {
|
||||
enableProdMode();
|
||||
}
|
||||
|
||||
platformBrowserDynamic().bootstrapModule(AppModule);
|
||||
platformBrowserDynamic().bootstrapModule(AppModule)
|
||||
.catch(err => console.error(err));
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
load("//aio/content/examples:examples.bzl", "docs_example")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
docs_example(
|
||||
name = "bootstrapping",
|
||||
)
|
||||
@@ -1,11 +1,6 @@
|
||||
import { enableProdMode } from '@angular/core';
|
||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||
|
||||
import { AppModule } from './app/app.module';
|
||||
import { environment } from './environments/environment';
|
||||
|
||||
if (environment.production) {
|
||||
enableProdMode();
|
||||
}
|
||||
|
||||
platformBrowserDynamic().bootstrapModule(AppModule);
|
||||
platformBrowserDynamic().bootstrapModule(AppModule)
|
||||
.catch(err => console.error(err));
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
load("//aio/content/examples:examples.bzl", "docs_example")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
docs_example(
|
||||
name = "built-in-directives",
|
||||
)
|
||||
@@ -1,12 +1,6 @@
|
||||
import { enableProdMode } from '@angular/core';
|
||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||
|
||||
import { AppModule } from './app/app.module';
|
||||
import { environment } from './environments/environment';
|
||||
|
||||
if (environment.production) {
|
||||
enableProdMode();
|
||||
}
|
||||
|
||||
platformBrowserDynamic().bootstrapModule(AppModule)
|
||||
.catch(err => console.log(err));
|
||||
.catch(err => console.error(err));
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
load("//aio/content/examples:examples.bzl", "docs_example")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
docs_example(
|
||||
name = "built-in-template-functions",
|
||||
)
|
||||
@@ -1,11 +1,6 @@
|
||||
import { enableProdMode } from '@angular/core';
|
||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||
|
||||
import { AppModule } from './app/app.module';
|
||||
import { environment } from './environments/environment';
|
||||
|
||||
if (environment.production) {
|
||||
enableProdMode();
|
||||
}
|
||||
|
||||
platformBrowserDynamic().bootstrapModule(AppModule);
|
||||
platformBrowserDynamic().bootstrapModule(AppModule)
|
||||
.catch(err => console.error(err));
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
load("//aio/content/examples:examples.bzl", "docs_example")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
docs_example(
|
||||
name = "comparing-observables",
|
||||
)
|
||||
@@ -0,0 +1,7 @@
|
||||
load("//aio/content/examples:examples.bzl", "docs_example")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
docs_example(
|
||||
name = "component-interaction",
|
||||
)
|
||||
@@ -1,11 +1,6 @@
|
||||
import { enableProdMode } from '@angular/core';
|
||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||
|
||||
import { AppModule } from './app/app.module';
|
||||
import { environment } from './environments/environment';
|
||||
|
||||
if (environment.production) {
|
||||
enableProdMode();
|
||||
}
|
||||
|
||||
platformBrowserDynamic().bootstrapModule(AppModule);
|
||||
platformBrowserDynamic().bootstrapModule(AppModule)
|
||||
.catch(err => console.error(err));
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
load("//aio/content/examples:examples.bzl", "docs_example")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
docs_example(
|
||||
name = "component-overview",
|
||||
)
|
||||
@@ -1,12 +1,6 @@
|
||||
import { enableProdMode } from '@angular/core';
|
||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||
|
||||
import { AppModule } from './app/app.module';
|
||||
import { environment } from './environments/environment';
|
||||
|
||||
if (environment.production) {
|
||||
enableProdMode();
|
||||
}
|
||||
|
||||
platformBrowserDynamic().bootstrapModule(AppModule)
|
||||
.catch(err => console.error(err));
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
load("//aio/content/examples:examples.bzl", "docs_example")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
docs_example(
|
||||
name = "component-styles",
|
||||
)
|
||||
@@ -1,12 +1,7 @@
|
||||
// #docregion
|
||||
import { enableProdMode } from '@angular/core';
|
||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||
|
||||
import { AppModule } from './app/app.module';
|
||||
import { environment } from './environments/environment';
|
||||
|
||||
if (environment.production) {
|
||||
enableProdMode();
|
||||
}
|
||||
|
||||
platformBrowserDynamic().bootstrapModule(AppModule);
|
||||
platformBrowserDynamic().bootstrapModule(AppModule)
|
||||
.catch(err => console.error(err));
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
load("//aio/content/examples:examples.bzl", "docs_example")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
docs_example(
|
||||
name = "content-projection",
|
||||
)
|
||||
@@ -1,12 +1,6 @@
|
||||
import { enableProdMode } from '@angular/core';
|
||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||
|
||||
import { AppModule } from './app/app.module';
|
||||
import { environment } from './environments/environment';
|
||||
|
||||
if (environment.production) {
|
||||
enableProdMode();
|
||||
}
|
||||
|
||||
platformBrowserDynamic().bootstrapModule(AppModule)
|
||||
.catch(err => console.error(err));
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
load("//aio/content/examples:examples.bzl", "docs_example")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
docs_example(
|
||||
name = "dependency-injection-in-action",
|
||||
)
|
||||
@@ -1,12 +1,8 @@
|
||||
// #docregion
|
||||
import { enableProdMode } from '@angular/core';
|
||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||
|
||||
import { AppModule } from './app/app.module';
|
||||
import { environment } from './environments/environment';
|
||||
|
||||
if (environment.production) {
|
||||
enableProdMode();
|
||||
}
|
||||
platformBrowserDynamic().bootstrapModule(AppModule)
|
||||
.catch(err => console.error(err));
|
||||
|
||||
platformBrowserDynamic().bootstrapModule(AppModule);
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
load("//aio/content/examples:examples.bzl", "docs_example")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
docs_example(
|
||||
name = "dependency-injection",
|
||||
)
|
||||
@@ -1,11 +1,6 @@
|
||||
import { enableProdMode } from '@angular/core';
|
||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||
|
||||
import { AppModule } from './app/app.module';
|
||||
import { environment } from './environments/environment';
|
||||
|
||||
if (environment.production) {
|
||||
enableProdMode();
|
||||
}
|
||||
|
||||
platformBrowserDynamic().bootstrapModule(AppModule);
|
||||
platformBrowserDynamic().bootstrapModule(AppModule)
|
||||
.catch(err => console.error(err));
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
load("//aio/content/examples:examples.bzl", "docs_example")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
docs_example(
|
||||
name = "deprecation-guide",
|
||||
)
|
||||
@@ -1,12 +1,6 @@
|
||||
import { enableProdMode } from '@angular/core';
|
||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||
|
||||
import { AppModule } from './app/app.module';
|
||||
import { environment } from './environments/environment';
|
||||
|
||||
if (environment.production) {
|
||||
enableProdMode();
|
||||
}
|
||||
|
||||
platformBrowserDynamic().bootstrapModule(AppModule)
|
||||
.catch(err => console.error(err));
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
load("//aio/content/examples:examples.bzl", "docs_example")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
docs_example(
|
||||
name = "displaying-data",
|
||||
)
|
||||
@@ -1,12 +1,7 @@
|
||||
// #docregion
|
||||
import { enableProdMode } from '@angular/core';
|
||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||
|
||||
import { AppModule } from './app/app.module';
|
||||
import { environment } from './environments/environment';
|
||||
|
||||
if (environment.production) {
|
||||
enableProdMode();
|
||||
}
|
||||
|
||||
platformBrowserDynamic().bootstrapModule(AppModule);
|
||||
platformBrowserDynamic().bootstrapModule(AppModule)
|
||||
.catch(err => console.error(err));
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
load("//aio/content/examples:examples.bzl", "docs_example")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
docs_example(
|
||||
name = "docs-style-guide",
|
||||
)
|
||||
@@ -1,12 +1,7 @@
|
||||
// #docregion
|
||||
import { enableProdMode } from '@angular/core';
|
||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||
|
||||
import { AppModule } from './app/app.module';
|
||||
import { environment } from './environments/environment';
|
||||
|
||||
if (environment.production) {
|
||||
enableProdMode();
|
||||
}
|
||||
|
||||
platformBrowserDynamic().bootstrapModule(AppModule);
|
||||
platformBrowserDynamic().bootstrapModule(AppModule)
|
||||
.catch(err => console.error(err));
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
load("//aio/content/examples:examples.bzl", "docs_example")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
docs_example(
|
||||
name = "dynamic-component-loader",
|
||||
)
|
||||
@@ -1,12 +1,7 @@
|
||||
// #docregion
|
||||
import { enableProdMode } from '@angular/core';
|
||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||
|
||||
import { AppModule } from './app/app.module';
|
||||
import { environment } from './environments/environment';
|
||||
|
||||
if (environment.production) {
|
||||
enableProdMode();
|
||||
}
|
||||
|
||||
platformBrowserDynamic().bootstrapModule(AppModule);
|
||||
platformBrowserDynamic().bootstrapModule(AppModule)
|
||||
.catch(err => console.error(err));
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
load("//aio/content/examples:examples.bzl", "docs_example")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
docs_example(
|
||||
name = "dynamic-form",
|
||||
)
|
||||
@@ -1,12 +1,7 @@
|
||||
// #docregion
|
||||
import { enableProdMode } from '@angular/core';
|
||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||
|
||||
import { AppModule } from './app/app.module';
|
||||
import { environment } from './environments/environment';
|
||||
|
||||
if (environment.production) {
|
||||
enableProdMode();
|
||||
}
|
||||
|
||||
platformBrowserDynamic().bootstrapModule(AppModule);
|
||||
platformBrowserDynamic().bootstrapModule(AppModule)
|
||||
.catch(err => console.error(err));
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
load("//aio/content/examples:examples.bzl", "docs_example")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
docs_example(
|
||||
name = "elements",
|
||||
)
|
||||
@@ -1,11 +1,6 @@
|
||||
import { enableProdMode } from '@angular/core';
|
||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||
|
||||
import { AppModule } from './app/app.module';
|
||||
import { environment } from './environments/environment';
|
||||
|
||||
if (environment.production) {
|
||||
enableProdMode();
|
||||
}
|
||||
|
||||
platformBrowserDynamic().bootstrapModule(AppModule);
|
||||
platformBrowserDynamic().bootstrapModule(AppModule)
|
||||
.catch(err => console.error(err));
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
load("//aio/content/examples:examples.bzl", "docs_example")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
docs_example(
|
||||
name = "event-binding",
|
||||
)
|
||||
@@ -1,12 +1,6 @@
|
||||
import { enableProdMode } from '@angular/core';
|
||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||
|
||||
import { AppModule } from './app/app.module';
|
||||
import { environment } from './environments/environment';
|
||||
|
||||
if (environment.production) {
|
||||
enableProdMode();
|
||||
}
|
||||
|
||||
platformBrowserDynamic().bootstrapModule(AppModule)
|
||||
.catch(err => console.log(err));
|
||||
.catch(err => console.error(err));
|
||||
|
||||
@@ -0,0 +1,222 @@
|
||||
load("@build_bazel_rules_nodejs//:index.bzl", "npm_package_bin")
|
||||
load("@aspect_bazel_lib//lib:copy_to_directory.bzl", "copy_to_directory")
|
||||
load("//tools:defaults.bzl", "nodejs_test")
|
||||
load("//:yarn.bzl", "YARN_LABEL")
|
||||
load("//:packages.bzl", "AIO_EXAMPLE_PACKAGES", "to_package_label")
|
||||
|
||||
# This map controls which examples are included and whether or not to generate
|
||||
# a stackblitz live examples and zip archives. Keys are the example name, and values
|
||||
# take the form:
|
||||
#
|
||||
# {"stackblitz": boolean, "zip": boolean}
|
||||
#
|
||||
# Set "stackblitz" to True to generate live examples from any stackblitz config files
|
||||
# found in the example. Set "zip" to True to generate archives for any stackblitz or
|
||||
# zipper configuration file found in the example.
|
||||
#
|
||||
# To ignore an example, comment out its row.
|
||||
|
||||
EXAMPLES = {
|
||||
"accessibility": {"stackblitz": True, "zip": True},
|
||||
"ajs-quick-reference": {"stackblitz": True, "zip": True},
|
||||
"angular-compiler-options": {"stackblitz": True, "zip": True},
|
||||
"animations": {"stackblitz": True, "zip": True},
|
||||
"architecture": {"stackblitz": True, "zip": True},
|
||||
"attribute-binding": {"stackblitz": True, "zip": True},
|
||||
"attribute-directives": {"stackblitz": True, "zip": True},
|
||||
"binding-syntax": {"stackblitz": True, "zip": True},
|
||||
"bootstrapping": {"stackblitz": True, "zip": True},
|
||||
"built-in-directives": {"stackblitz": True, "zip": True},
|
||||
"built-in-template-functions": {"stackblitz": True, "zip": True},
|
||||
"comparing-observables": {"stackblitz": False, "zip": False},
|
||||
"component-interaction": {"stackblitz": True, "zip": True},
|
||||
"component-overview": {"stackblitz": True, "zip": True},
|
||||
"component-styles": {"stackblitz": True, "zip": True},
|
||||
"content-projection": {"stackblitz": True, "zip": True},
|
||||
"dependency-injection": {"stackblitz": True, "zip": True},
|
||||
"dependency-injection-in-action": {"stackblitz": True, "zip": True},
|
||||
"deprecation-guide": {"stackblitz": True, "zip": True},
|
||||
"displaying-data": {"stackblitz": True, "zip": True},
|
||||
"docs-style-guide": {"stackblitz": True, "zip": True},
|
||||
"dynamic-component-loader": {"stackblitz": True, "zip": True},
|
||||
"dynamic-form": {"stackblitz": True, "zip": True},
|
||||
"elements": {"stackblitz": True, "zip": True},
|
||||
"event-binding": {"stackblitz": True, "zip": True},
|
||||
"feature-modules": {"stackblitz": True, "zip": True},
|
||||
"form-validation": {"stackblitz": True, "zip": True},
|
||||
"forms": {"stackblitz": True, "zip": True},
|
||||
"forms-overview": {"stackblitz": True, "zip": True},
|
||||
"getting-started": {"stackblitz": True, "zip": True},
|
||||
"getting-started-v0": {"stackblitz": True, "zip": True},
|
||||
"hierarchical-dependency-injection": {"stackblitz": True, "zip": True},
|
||||
"http": {"stackblitz": True, "zip": True},
|
||||
"i18n": {"stackblitz": True, "zip": True},
|
||||
"inputs-outputs": {"stackblitz": True, "zip": True},
|
||||
"interpolation": {"stackblitz": True, "zip": True},
|
||||
"lazy-loading-ngmodules": {"stackblitz": True, "zip": True},
|
||||
"lifecycle-hooks": {"stackblitz": True, "zip": True},
|
||||
"ngcontainer": {"stackblitz": True, "zip": True},
|
||||
"ngmodules": {"stackblitz": True, "zip": True},
|
||||
"observables": {"stackblitz": False, "zip": False},
|
||||
"observables-in-angular": {"stackblitz": False, "zip": False},
|
||||
"pipes": {"stackblitz": True, "zip": True},
|
||||
"practical-observable-usage": {"stackblitz": False, "zip": False},
|
||||
"property-binding": {"stackblitz": True, "zip": True},
|
||||
"providers": {"stackblitz": True, "zip": True},
|
||||
"providers-viewproviders": {"stackblitz": True, "zip": True},
|
||||
"reactive-forms": {"stackblitz": True, "zip": True},
|
||||
"resolution-modifiers": {"stackblitz": True, "zip": True},
|
||||
"router": {"stackblitz": True, "zip": True},
|
||||
"router-tutorial": {"stackblitz": True, "zip": True},
|
||||
"routing-with-urlmatcher": {"stackblitz": True, "zip": True},
|
||||
"rx-library": {"stackblitz": False, "zip": False},
|
||||
"schematics-for-libraries": {"stackblitz": False, "zip": True},
|
||||
"security": {"stackblitz": True, "zip": True},
|
||||
"service-worker-getting-started": {"stackblitz": False, "zip": False},
|
||||
"setup": {"stackblitz": False, "zip": False},
|
||||
"structural-directives": {"stackblitz": True, "zip": True},
|
||||
"styleguide": {"stackblitz": False, "zip": False},
|
||||
"template-expression-operators": {"stackblitz": True, "zip": True},
|
||||
"template-reference-variables": {"stackblitz": True, "zip": True},
|
||||
"template-syntax": {"stackblitz": True, "zip": True},
|
||||
"testing": {"stackblitz": True, "zip": True},
|
||||
"toh-pt0": {"stackblitz": True, "zip": True},
|
||||
"toh-pt1": {"stackblitz": True, "zip": True},
|
||||
"toh-pt2": {"stackblitz": True, "zip": True},
|
||||
"toh-pt3": {"stackblitz": True, "zip": True},
|
||||
"toh-pt4": {"stackblitz": True, "zip": True},
|
||||
"toh-pt5": {"stackblitz": True, "zip": True},
|
||||
"toh-pt6": {"stackblitz": True, "zip": True},
|
||||
"two-way-binding": {"stackblitz": True, "zip": True},
|
||||
"universal": {"stackblitz": False, "zip": True},
|
||||
"upgrade-lazy-load-ajs": {"stackblitz": False, "zip": True},
|
||||
"upgrade-module": {"stackblitz": False, "zip": False},
|
||||
"upgrade-phonecat-1-typescript": {"stackblitz": False, "zip": False},
|
||||
"upgrade-phonecat-2-hybrid": {"stackblitz": False, "zip": False},
|
||||
"upgrade-phonecat-3-final": {"stackblitz": False, "zip": False},
|
||||
"user-input": {"stackblitz": True, "zip": True},
|
||||
"view-encapsulation": {"stackblitz": True, "zip": True},
|
||||
"what-is-angular": {"stackblitz": True, "zip": True},
|
||||
}
|
||||
|
||||
def docs_example(name, test = True, test_tags = [], test_exec_properties = {}, flaky = False):
|
||||
"""Stamp targets for adding boilerplate to examples, creating live examples, and creating zips.
|
||||
|
||||
Args:
|
||||
name: name of the example
|
||||
test: whether to run e2e tests
|
||||
test_tags: tags to add to the test target
|
||||
test_exec_properties: exec properties to add to the test's execution platform
|
||||
"""
|
||||
if name not in EXAMPLES:
|
||||
# buildifier: disable=print
|
||||
print("WARNING: Example '%s' is being ignored. To include it, add an entry to the EXAMPLES map in aio/content/examples/examples.bzl." % name)
|
||||
return
|
||||
|
||||
native.filegroup(
|
||||
name = "files",
|
||||
srcs = native.glob(["**"], exclude = ["BUILD.bazel"]),
|
||||
)
|
||||
|
||||
# Generate example boilerplate
|
||||
npm_package_bin(
|
||||
name = "boilerplate",
|
||||
args = ["add", native.package_name(), "$(@D)"],
|
||||
data = [":files"],
|
||||
output_dir = True,
|
||||
tool = "//aio/tools/examples:example-boilerplate",
|
||||
)
|
||||
|
||||
# Copy example files and boilerplate to the output tree
|
||||
copy_to_directory(
|
||||
name = name,
|
||||
# Prevent sorting so that boilerplate overwrites example sources
|
||||
# buildifier: do not sort
|
||||
srcs = [
|
||||
":files",
|
||||
":boilerplate",
|
||||
],
|
||||
replace_prefixes = {
|
||||
"boilerplate": "",
|
||||
"aio/tools/examples/shared": "",
|
||||
},
|
||||
allow_overwrites = True,
|
||||
)
|
||||
|
||||
stackblitz_configs = native.glob(["*stackblitz.json"])
|
||||
|
||||
if EXAMPLES[name]["stackblitz"] and len(stackblitz_configs) > 0:
|
||||
# Generate stackblitz live example(s)
|
||||
outs = [file_name.replace(".json", ".html") for file_name in stackblitz_configs]
|
||||
npm_package_bin(
|
||||
name = "stackblitz",
|
||||
args = [
|
||||
"$(execpath :%s)" % name,
|
||||
"$(RULEDIR)",
|
||||
],
|
||||
data = [":%s" % name],
|
||||
outs = outs,
|
||||
tool = "//aio/tools/stackblitz-builder:generate-stackblitz",
|
||||
)
|
||||
|
||||
zip_configs = stackblitz_configs + native.glob(["zipper.json"])
|
||||
|
||||
if EXAMPLES[name]["zip"] and len(zip_configs) > 0:
|
||||
# Generate example zip(s)
|
||||
outs = [file_name.replace("stackblitz", name).replace("zipper", name).replace(".json", ".zip") for file_name in zip_configs]
|
||||
npm_package_bin(
|
||||
name = "example-zip",
|
||||
args = [
|
||||
"$(execpath :%s)" % name,
|
||||
"$(RULEDIR)",
|
||||
],
|
||||
data = [":%s" % name],
|
||||
outs = outs,
|
||||
tool = "//aio/tools/example-zipper:generate-example-zip",
|
||||
)
|
||||
|
||||
if test:
|
||||
EXAMPLE_DEPS_WORKSPACE_NAME = "aio_example_deps"
|
||||
|
||||
LOCAL_PACKAGE_DEPS = [to_package_label(dep) for dep in AIO_EXAMPLE_PACKAGES]
|
||||
|
||||
# Local package deps are passed as args to the test script in the form "@package/name#path/to/package"
|
||||
# for the script's convenience.
|
||||
LOCAL_PACKAGE_ARGS = ["--localPackage=%s#$(rootpath %s)" % (dep, to_package_label(dep)) for dep in AIO_EXAMPLE_PACKAGES]
|
||||
|
||||
nodejs_test(
|
||||
name = "e2e",
|
||||
data = [
|
||||
":%s" % name,
|
||||
YARN_LABEL,
|
||||
"@aio_npm//@angular/build-tooling/bazel/browsers/chromium",
|
||||
"//aio/tools/examples:run-example-e2e",
|
||||
"//aio/tools:windows-chromium-path",
|
||||
# We install the whole node modules for runtime deps of e2e tests
|
||||
"@{workspace}//:node_modules_files".format(workspace = EXAMPLE_DEPS_WORKSPACE_NAME),
|
||||
] + select({
|
||||
"//aio:aio_local_deps": LOCAL_PACKAGE_DEPS,
|
||||
"//conditions:default": [],
|
||||
}),
|
||||
args = [
|
||||
"$(rootpath :%s)" % name,
|
||||
"$(rootpath %s)" % YARN_LABEL,
|
||||
EXAMPLE_DEPS_WORKSPACE_NAME,
|
||||
] + select({
|
||||
"//aio:aio_local_deps": LOCAL_PACKAGE_ARGS,
|
||||
"//conditions:default": [],
|
||||
}),
|
||||
entry_point = "//aio/tools/examples:run-example-e2e.mjs",
|
||||
env = {
|
||||
"CHROME_BIN": "$(CHROMIUM)",
|
||||
"CHROMEDRIVER_BIN": "$(CHROMEDRIVER)",
|
||||
},
|
||||
toolchains = [
|
||||
"@aio_npm//@angular/build-tooling/bazel/browsers/chromium:toolchain_alias",
|
||||
],
|
||||
exec_properties = test_exec_properties,
|
||||
flaky = flaky,
|
||||
# RBE complains about superseeding the max inputs limit (70,000) due to the
|
||||
# size of the input tree.
|
||||
tags = ["no-remote-exec"] + test_tags,
|
||||
)
|
||||
@@ -0,0 +1,7 @@
|
||||
load("//aio/content/examples:examples.bzl", "docs_example")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
docs_example(
|
||||
name = "feature-modules",
|
||||
)
|
||||
+2
-7
@@ -1,15 +1,10 @@
|
||||
import { Component, OnInit } from '@angular/core';
|
||||
import { Component } from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'app-customer-dashboard',
|
||||
templateUrl: './customer-dashboard.component.html',
|
||||
styleUrls: ['./customer-dashboard.component.css']
|
||||
})
|
||||
export class CustomerDashboardComponent implements OnInit {
|
||||
|
||||
constructor() { }
|
||||
|
||||
ngOnInit() {
|
||||
}
|
||||
export class CustomerDashboardComponent {
|
||||
|
||||
}
|
||||
|
||||
@@ -1,11 +1,6 @@
|
||||
import { enableProdMode } from '@angular/core';
|
||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||
|
||||
import { AppModule } from './app/app.module';
|
||||
import { environment } from './environments/environment';
|
||||
|
||||
if (environment.production) {
|
||||
enableProdMode();
|
||||
}
|
||||
|
||||
platformBrowserDynamic().bootstrapModule(AppModule);
|
||||
platformBrowserDynamic().bootstrapModule(AppModule)
|
||||
.catch(err => console.error(err));
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
load("//aio/content/examples:examples.bzl", "docs_example")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
docs_example(
|
||||
name = "form-validation",
|
||||
)
|
||||
@@ -1,12 +1,7 @@
|
||||
// #docregion
|
||||
import { enableProdMode } from '@angular/core';
|
||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||
|
||||
import { AppModule } from './app/app.module';
|
||||
import { environment } from './environments/environment';
|
||||
|
||||
if (environment.production) {
|
||||
enableProdMode();
|
||||
}
|
||||
|
||||
platformBrowserDynamic().bootstrapModule(AppModule);
|
||||
platformBrowserDynamic().bootstrapModule(AppModule)
|
||||
.catch(err => console.error(err));
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
load("//aio/content/examples:examples.bzl", "docs_example")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
docs_example(
|
||||
name = "forms-overview",
|
||||
)
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"tests": [
|
||||
{"cmd": "yarn", "args": ["test", "--browsers=ChromeHeadless", "--no-watch"]},
|
||||
{"cmd": "yarn", "args": ["e2e", "--configuration=production", "--protractor-config=e2e/protractor-puppeteer.conf.js", "--no-webdriver-update", "--port={PORT}"]}
|
||||
{"cmd": "yarn", "args": ["e2e", "--configuration=production", "--protractor-config=e2e/protractor-bazel.conf.js", "--no-webdriver-update", "--port=0"]}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,12 +1,6 @@
|
||||
import { enableProdMode } from '@angular/core';
|
||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||
|
||||
import { AppModule } from './app/app.module';
|
||||
import { environment } from './environments/environment';
|
||||
|
||||
if (environment.production) {
|
||||
enableProdMode();
|
||||
}
|
||||
|
||||
platformBrowserDynamic().bootstrapModule(AppModule)
|
||||
.catch(err => console.log(err));
|
||||
.catch(err => console.error(err));
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
load("//aio/content/examples:examples.bzl", "docs_example")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
docs_example(
|
||||
name = "forms",
|
||||
)
|
||||
@@ -1,12 +1,7 @@
|
||||
// #docregion
|
||||
import { enableProdMode } from '@angular/core';
|
||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||
|
||||
import { AppModule } from './app/app.module';
|
||||
import { environment } from './environments/environment';
|
||||
|
||||
if (environment.production) {
|
||||
enableProdMode();
|
||||
}
|
||||
|
||||
platformBrowserDynamic().bootstrapModule(AppModule);
|
||||
platformBrowserDynamic().bootstrapModule(AppModule)
|
||||
.catch(err => console.error(err));
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
load("//aio/content/examples:examples.bzl", "docs_example")
|
||||
load("@aio_npm//@angular/build-tooling/bazel/remote-execution:index.bzl", "ENABLE_NETWORK")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
docs_example(
|
||||
name = "getting-started-v0",
|
||||
# This example downloads and inlines resources
|
||||
test_exec_properties = ENABLE_NETWORK,
|
||||
test_tags = ["requires-network"],
|
||||
)
|
||||
@@ -1,12 +1,6 @@
|
||||
import { enableProdMode } from '@angular/core';
|
||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||
|
||||
import { AppModule } from './app/app.module';
|
||||
import { environment } from './environments/environment';
|
||||
|
||||
if (environment.production) {
|
||||
enableProdMode();
|
||||
}
|
||||
|
||||
platformBrowserDynamic().bootstrapModule(AppModule)
|
||||
.catch(err => console.error(err));
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
load("//aio/content/examples:examples.bzl", "docs_example")
|
||||
load("@aio_npm//@angular/build-tooling/bazel/remote-execution:index.bzl", "ENABLE_NETWORK")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
docs_example(
|
||||
name = "getting-started",
|
||||
# This example downloads and inlines resources
|
||||
test_exec_properties = ENABLE_NETWORK,
|
||||
test_tags = ["requires-network"],
|
||||
)
|
||||
@@ -1,12 +1,6 @@
|
||||
import { enableProdMode } from '@angular/core';
|
||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||
|
||||
import { AppModule } from './app/app.module';
|
||||
import { environment } from './environments/environment';
|
||||
|
||||
if (environment.production) {
|
||||
enableProdMode();
|
||||
}
|
||||
|
||||
platformBrowserDynamic().bootstrapModule(AppModule)
|
||||
.catch(err => console.error(err));
|
||||
|
||||
@@ -1,28 +1,37 @@
|
||||
// This tsconfig is used in the TypeScript
|
||||
// configuration guide (../guide/typescript-configuration.md)
|
||||
// configuration guide (../guide/typescript-configuration.md)
|
||||
// to display the latest default configuration
|
||||
// Note: Update with every major release to the latest default
|
||||
// #docregion
|
||||
/* To learn more about this file see: https://angular.io/config/tsconfig. */
|
||||
{
|
||||
"compileOnSave": false,
|
||||
"compilerOptions": {
|
||||
"baseUrl": "./",
|
||||
"outDir": "./dist/out-tsc",
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"strict": true,
|
||||
"noImplicitOverride": true,
|
||||
"noPropertyAccessFromIndexSignature": true,
|
||||
"noImplicitReturns": true,
|
||||
"noFallthroughCasesInSwitch": true,
|
||||
"sourceMap": true,
|
||||
"declaration": false,
|
||||
"module": "esnext",
|
||||
"moduleResolution": "node",
|
||||
"downlevelIteration": true,
|
||||
"experimentalDecorators": true,
|
||||
"moduleResolution": "node",
|
||||
"importHelpers": true,
|
||||
"target": "es2015",
|
||||
"typeRoots": [
|
||||
"node_modules/@types"
|
||||
],
|
||||
// #docregion lib
|
||||
"target": "ES2022",
|
||||
"module": "ES2022",
|
||||
"useDefineForClassFields": false,
|
||||
"lib": [
|
||||
"es2018",
|
||||
"ES2022",
|
||||
"dom"
|
||||
]
|
||||
// #enddocregion lib
|
||||
},
|
||||
"angularCompilerOptions": {
|
||||
"enableI18nLegacyMessageIdFormat": false,
|
||||
"strictInjectionParameters": true,
|
||||
"strictInputAccessModifiers": true,
|
||||
"strictTemplates": true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
load("//aio/content/examples:examples.bzl", "docs_example")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
docs_example(
|
||||
name = "hierarchical-dependency-injection",
|
||||
)
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user