diff --git a/.bazelignore b/.bazelignore new file mode 100644 index 000000000000..fe6b1f377a95 --- /dev/null +++ b/.bazelignore @@ -0,0 +1,4 @@ +node_modules +dist +aio/node_modules +aio/tools/examples/shared/node_modules diff --git a/.bazelrc b/.bazelrc new file mode 100644 index 000000000000..df393c71dcec --- /dev/null +++ b/.bazelrc @@ -0,0 +1,101 @@ +# Load any settings specific to the current user +try-import .bazelrc.user +################################ +# Settings for Angular team members only +################################ +# To enable this feature check the "Remote caching" section in docs/BAZEL.md. +build:angular-team --remote_http_cache=https://storage.googleapis.com/angular-team-cache + +############################### +# Typescript / Angular / Sass # +############################### + +# Make compilation fast, by keeping a few copies of the compilers +# running as daemons, and cache SourceFile AST's to reduce parse time. +build --strategy=TypeScriptCompile=worker +build --strategy=AngularTemplateCompile=worker + +# Enable debugging tests with --config=debug +test:debug --test_arg=--node_options=--inspect-brk --test_output=streamed --test_strategy=exclusive --test_timeout=9999 --nocache_test_results + +############################### +# Filesystem interactions # +############################### + +# Don't create symlinks like bazel-out in the project. +# These cause VSCode to traverse a massive tree, opening file handles and +# eventually a surprising failure with auto-discovery of the C++ toolchain in +# MacOS High Sierra. +# See https://github.com/bazelbuild/bazel/issues/4603 +build --symlink_prefix=/ + +# Performance: avoid stat'ing input files +build --watchfs + +# Turn off legacy external runfiles +run --nolegacy_external_runfiles +test --nolegacy_external_runfiles + +############################### +# Release support # +# Turn on these settings with # +# --config=release # +############################### + +# Releases should always be stamped with version control info +build:release --workspace_status_command=./tools/bazel_stamp_vars.sh + +############################### +# Output # +############################### + +# A more useful default output mode for bazel query +# Prints eg. "ng_module rule //foo:bar" rather than just "//foo:bar" +query --output=label_kind + +# By default, failing tests don't print any output, it goes to the log file +test --test_output=errors + +# Show which actions are run under workers, +# and print all the actions running in parallel. +# Helps to demonstrate that bazel uses all the cores on the machine. +build --experimental_ui +test --experimental_ui + +################################ +# Settings for CircleCI # +################################ + +# Bazel flags for CircleCI are in /.circleci/bazel.rc + +################################ +# Temporary Settings for Ivy # +################################ +# to determine if the compiler used should be Ivy or ViewEngine one can use `--define=compile=aot` on +# any bazel target. This is a temporary flag until codebase is permanently switched to Ivy. +build --define=compile=legacy + +############################### +# Remote Build Execution support +# Turn on these settings with +# --config=remote +############################### + +# Load default settings for Remote Build Execution +import %workspace%/third_party/github.com/bazelbuild/bazel-toolchains/bazelrc/bazel-0.20.0.bazelrc + +# Increase the default number of jobs by 50% because our build has lots of +# parallelism +build:remote --jobs=150 + +# Point to our custom execution platform; see tools/BUILD.bazel +build:remote --extra_execution_platforms=//tools:rbe_ubuntu1604-angular +build:remote --host_platform=//tools:rbe_ubuntu1604-angular +build:remote --platforms=//tools:rbe_ubuntu1604-angular + +# Remote instance. +build:remote --remote_instance_name=projects/internal-200822/instances/default_instance + +# Do not accept remote cache. +# We need to understand the security risks of using prior build artifacts. +build:remote --remote_accept_cached=false diff --git a/.buildkite/Dockerfile b/.buildkite/Dockerfile new file mode 100644 index 000000000000..d9d13f16e6ad --- /dev/null +++ b/.buildkite/Dockerfile @@ -0,0 +1,42 @@ +# Heavily based on https://github.com/StefanScherer/dockerfiles-windows/ images. +# Combines the node windowsservercore image with the Bazel Prerequisites (https://docs.bazel.build/versions/master/install-windows.html). +# msys install taken from https://github.com/StefanScherer/dockerfiles-windows/issues/30 +# VS redist install taken from https://github.com/StefanScherer/dockerfiles-windows/blob/master/apache/Dockerfile +# The nanoserver image won't work because MSYS2 does not run in it https://github.com/Alexpux/MSYS2-packages/issues/1493 + +# Before building this image, you must locally build node-windows:10.13.0-windowsservercore-1803. +# Clone https://github.com/StefanScherer/dockerfiles-windows/commit/4ce7101a766b9b880ac262479dd9126b64d656cf and build using +# docker build -t node-windows:10.13.0-windowsservercore-1803 --build-arg core=microsoft/windowsservercore:1803 --build-arg target=microsoft/windowsservercore:1803 . +FROM node-windows:10.13.0-windowsservercore-1803 + +SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"] + +# Install 7zip to extract msys2 +RUN Invoke-WebRequest -UseBasicParsing 'https://www.7-zip.org/a/7z1805-x64.exe' -OutFile 7z.exe +# For some reason the last letter in the destination directory is lost. So '/D=C:\\7zip0' will extract to '/D=C:\\7zip'. +RUN Start-Process -FilePath 'C:\\7z.exe' -ArgumentList '/S', '/D=C:\\7zip0' -NoNewWindow -Wait + +# Extract msys2 +RUN Invoke-WebRequest -UseBasicParsing 'http://repo.msys2.org/distrib/x86_64/msys2-base-x86_64-20180531.tar.xz' -OutFile msys2.tar.xz +RUN Start-Process -FilePath 'C:\\7zip\\7z' -ArgumentList 'e', 'msys2.tar.xz' -Wait +RUN Start-Process -FilePath 'C:\\7zip\\7z' -ArgumentList 'x', 'msys2.tar', '-oC:\\' -Wait +RUN Remove-Item msys2.tar.xz +RUN Remove-Item msys2.tar +RUN Remove-Item 7z.exe +RUN Remove-Item -Recurse 7zip + +# Add MSYS2 to PATH, and set BAZEL_SH +RUN [Environment]::SetEnvironmentVariable('Path', $env:Path + ';C:\msys64\usr\bin', [System.EnvironmentVariableTarget]::Machine) +RUN [Environment]::SetEnvironmentVariable('BAZEL_SH', 'C:\msys64\usr\bin\bash.exe', [System.EnvironmentVariableTarget]::Machine) + +# Install Microsoft Visual C++ Redistributable for Visual Studio 2015 +RUN Invoke-WebRequest -UseBasicParsing 'https://download.microsoft.com/download/9/3/F/93FCF1E7-E6A4-478B-96E7-D4B285925B00/vc_redist.x64.exe' -OutFile vc_redist.x64.exe +RUN Start-Process 'c:\\vc_redist.x64.exe' -ArgumentList '/Install', '/Passive', '/NoRestart' -NoNewWindow -Wait +RUN Remove-Item vc_redist.x64.exe + +# Add a fix for https://github.com/docker/for-win/issues/2920 as entry point to the container. +SHELL ["cmd", "/c"] +COPY "fix-msys64.cmd" "C:\\fix-msys64.cmd" +ENTRYPOINT cmd /C C:\\fix-msys64.cmd && cmd /c + +CMD ["cmd.exe"] diff --git a/.buildkite/README.md b/.buildkite/README.md new file mode 100644 index 000000000000..b7e25cd93b05 --- /dev/null +++ b/.buildkite/README.md @@ -0,0 +1,96 @@ +# BuildKite configuration + +This folder contains configuration for the [BuildKite](https://buildkite.com) based CI checks for +this repository. + +BuildKite is a CI provider that provides build coordination and reports while we provide the +infrastructure. + +CI runs are triggered by new PRs and will show up on the GitHub checks interface, along with the +other current CI solutions. + +Currently it is only used for tests on Windows platforms. + + +## The build pipeline + +BuildKite uses a pipeline for each repository. The `pipeline.yml` file defines pipeline +[build steps](https://buildkite.com/docs/pipelines/defining-steps) for this repository. + +Run results can be seen in the GitHub checks interface and in the +[pipeline dashboard](https://buildkite.com/angular/angular). + +Although most configuration is done via `pipeline.yml`, some options are only available +in the online [pipeline settings](https://buildkite.com/angular/angular/settings). + + +## Infrastructure + +BuildKite does not provide the host machines where the builds runs, providing instead the +[BuildKite Agent](https://buildkite.com/docs/agent/v3) that should be run our own infrastructure. + + +### Agents + +This agent polls the BuildKite API for builds, runs them, and reports back the results. +Agents are the unit of concurrency: each agent can run one build at any given time. +Adding agents allows more builds to be ran at the same time. + +Individual agents can have tags, and pipeline steps can target only agents with certain tags via the +`agents` field in `pipeline.yml`. +For example: agents on Windows machines are tagged as `windows`, and the Windows specific build +steps list `windows: true` in their `agents` field. + +You can see the current agent pool, along with their tags, in the +[agents list](https://buildkite.com/organizations/angular/agents). + + +### Our host machines + +We use [Google Cloud](https://cloud.google.com/) as our cloud provider, under the +[Angular project](https://console.cloud.google.com/home/dashboard?project=internal-200822). +To access this project you need need to be logged in with a Google account that's a member of +team@angular.io. +For googlers this may be your google.com account, for others it is an angular.io account. + +In this project we have a number of Windows VMs running, each of them with several agents. +The `provision-windows-buildkite.ps1` file contains instructions on how to create new host VMs that +are fully configured to run the BuildKite agents as services. + +Our pipeline uses [docker-buildkite-plugin](https://github.com/buildkite-plugins/docker-buildkite-plugin) +to run build steps inside docker containers. +This way we achieve isolation and hermeticity. + +The `Dockerfile` file describes a custom Docker image that includes NodeJs, Yarn, and the Bazel +pre-requisites on Windows. + +To upload a new version of the docker image, follow any build instructions in `Dockerfile` and then +run `docker build -t angular/node-bazel-windows:NEW_VERSION`, followed by +`docker push angular/node-bazel-windows:NEW_VERSION`. +After being pushed it should be available online, and you can use the new version in `pipeline.yml`. + + +## Caretaker + +BuildKite status can be found at https://www.buildkitestatus.com/. + +Issues related to the BuildKite setup should be escalated to the Tools Team via the current +caretaker, followed by Alex Eagle and Filipe Silva. + +Support requests should be submitted via email to support@buildkite.com and cc Igor, Misko, Alex, +Jeremy and Manu + + +## Rollout strategy + +At the moment our BuildKite CI uses 1 host VM running 4 agents, thus being capable of 4 concurrent +builds. +The only test running is `bazel test //tools/ts-api-guardian:all`, and the PR check is not +mandatory. + +In the future we should add cache support to speed up the initial `yarn` install, and also Bazel +remote caching to speed up Bazel builds. + +After the current setup is verified as stable and reliable the GitHub PR check can become mandatory. + +The tests ran should also be expanded to cover most, if not all, of the Bazel tests. diff --git a/.buildkite/fix-msys64.cmd b/.buildkite/fix-msys64.cmd new file mode 100644 index 000000000000..4722e6edd615 --- /dev/null +++ b/.buildkite/fix-msys64.cmd @@ -0,0 +1,6 @@ +@echo off +REM Fix for https://github.com/docker/for-win/issues/2920 +REM echo "Fixing msys64 folder..." +REM Touch all .dll files inside C:\msys64\ +forfiles /p C:\msys64\ /s /m *.dll /c "cmd /c Copy /B @path+,, >NUL" +REM echo "Fixed msys64 folder." diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml new file mode 100644 index 000000000000..58dd597bc493 --- /dev/null +++ b/.buildkite/pipeline.yml @@ -0,0 +1,10 @@ +steps: + - label: windows-test + commands: + - "yarn install --frozen-lockfile --non-interactive --network-timeout 100000" + - "yarn bazel test //tools/ts-api-guardian:all --noshow_progress" + plugins: + - docker#v2.1.0: + image: "filipesilva/node-bazel-windows:0.0.2" + agents: + windows: true diff --git a/.buildkite/provision-windows-buildkite.ps1 b/.buildkite/provision-windows-buildkite.ps1 new file mode 100644 index 000000000000..56c84569b111 --- /dev/null +++ b/.buildkite/provision-windows-buildkite.ps1 @@ -0,0 +1,92 @@ +# PowerShell script to provision a Windows Server with BuildKite +# This script follows https://buildkite.com/docs/agent/v3/windows. + +# Instructions + +# VM creation: +# In Google Cloud Platform, create a Compute Engine instance. +# We recommend machine type n1-highcpu-16 (16 vCPUs, 14.4 GB memory). +# Use a windows boot disk with container support such as +# "Windows Server version 1803 Datacenter Core for Containers". +# Give it a name, then click "Create". + +# VM setup: +# In the Compute Engine menu, select "VM Instances". Click on the VM name you chose before. +# Click "Set Windows Password" to choose a username and password. +# Click RDP to open a remote desktop via browser, using the username and password. +# In the Windows command prompt start an elevated powershell by inputing +# "powershell -Command "Start-Process PowerShell -Verb RunAs" followed by Enter. +# Download and execute this script from GitHub, passing the token (mandatory), tags (optional) +# and number of agents (optional) as args: +# ``` +# Invoke-WebRequest -Uri https://raw.githubusercontent.com/angular/angular/master/.buildkite/provision-windows-buildkite.ps1 -OutFile provision.ps1 +# .\provision.ps1 -token "MY_TOKEN" -tags "windows=true,another_tag=true" -agents 4 +# ``` +# The VM should restart and be fully configured. + +# Creating extra VMs +# You can create an image of the current VM by following the instructions below. +# https://cloud.google.com/compute/docs/instances/windows/creating-windows-os-image +# Then create a new VM and choose "Custom images". + + +# Script proper. + +# Get the token and tags from arguments. +param ( + [Parameter(Mandatory=$true)][string]$token, + [string]$tags = "" + [Int]$agents = 1 +) + +# Allow HTTPS +[Net.ServicePointManager]::SecurityProtocol = "tls12, tls11, tls" + +# Helper to add to PATH. +# Will take current PATH so avoid running it after anything to modifies only the powershell session path. +function Add-Path ([string]$newPathItem) { + $Env:Path+= ";" + $newPathItem + ";" + [Environment]::SetEnvironmentVariable("Path",$env:Path, [System.EnvironmentVariableTarget]::Machine) +} + +# Install Git for Windows +Write-Host "Installing Git for Windows." +Invoke-WebRequest -Uri https://github.com/git-for-windows/git/releases/download/v2.19.1.windows.1/Git-2.19.1-64-bit.exe -OutFile git.exe +.\git.exe /VERYSILENT /NORESTART /NOCANCEL /SP- /CLOSEAPPLICATIONS /RESTARTAPPLICATIONS /COMPONENTS="icons,ext\reg\shellhere,assoc,assoc_sh" /DIR="C:\git" +Add-Path "C:\git\bin" +Remove-Item git.exe + +# Download NSSM (https://nssm.cc/) to run the BuildKite agent as a service. +Write-Host "Downloading NSSM." +Invoke-WebRequest -Uri https://nssm.cc/ci/nssm-2.24-101-g897c7ad.zip -OutFile nssm.zip +Expand-Archive -Path nssm.zip -DestinationPath C:\nssm +Add-Path "C:\nssm\nssm-2.24-101-g897c7ad\win64" +Remove-Item nssm.zip + +# Run the BuildKite agent install script +Write-Host "Installing BuildKite agent." +$env:buildkiteAgentToken = $token +$env:buildkiteAgentTags = $tags +Set-ExecutionPolicy Bypass -Scope Process -Force +iex ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/buildkite/agent/master/install.ps1')) + +# Configure the BuildKite agent clone and timestamp behavior +Add-Content C:\buildkite-agent\buildkite-agent.cfg "`ngit-clone-flags=--config core.autocrlf=input --config core.eol=lf --config core.longpaths=true --config core.symlinks=true`n" +Add-Content C:\buildkite-agent\buildkite-agent.cfg "`ntimestamp-lines=true`n" + +# Register the BuildKite agent service using NSSM, so that it persists through restarts and is +# restarted if the process dies. +for ($i=1; $i -le $agents; $i++) +{ + $agentName = "buildkite-agent-$i" + Write-Host "Registering $agentName as a service." + nssm.exe install $agentName "C:\buildkite-agent\bin\buildkite-agent.exe" "start" + nssm.exe set $agentName AppStdout "C:\buildkite-agent\$agentName.log" + nssm.exe set $agentName AppStderr "C:\buildkite-agent\$agentName.log" + nssm.exe status $agentName + nssm.exe start $agentName + nssm.exe status $agentName +} + +# Restart the machine. +Restart-Computer diff --git a/.circleci/README.md b/.circleci/README.md new file mode 100644 index 000000000000..881c43260d76 --- /dev/null +++ b/.circleci/README.md @@ -0,0 +1,19 @@ +# Encryption + +Based on https://github.com/circleci/encrypted-files + +In the CircleCI web UI, we have a secret variable called `KEY` +https://circleci.com/gh/angular/angular/edit#env-vars +which is only exposed to non-fork builds +(see "Pass secrets to builds from forked pull requests" under +https://circleci.com/gh/angular/angular/edit#advanced-settings) + +We use this as a symmetric AES encryption key to encrypt tokens like +a GitHub token that enables publishing snapshots. + +To create the github_token file, we take this approach: +- Find the angular-builds:token in http://valentine +- Go inside the CircleCI default docker image so you use the same version of openssl as we will at runtime: `docker run --rm -it circleci/node:10.12` +- echo "https://[token]:@github.com" > credentials +- openssl aes-256-cbc -e -in credentials -out .circleci/github_token -k $KEY +- If needed, base64-encode the result so you can copy-paste it out of docker: `base64 github_token` \ No newline at end of file diff --git a/.circleci/bazel.rc b/.circleci/bazel.rc new file mode 100644 index 000000000000..754a970122ed --- /dev/null +++ b/.circleci/bazel.rc @@ -0,0 +1,26 @@ +# These options are enabled when running on CI +# We do this by copying this file to /etc/bazel.bazelrc at the start of the build. +# See documentation in /docs/BAZEL.md + +# Don't be spammy in the logs +# TODO(gmagolan): Hide progress again once build performance improves +# Presently, CircleCI can timeout during bazel test ... with the following +# error: Too long with no output (exceeded 10m0s) +# build --noshow_progress + +# Print all the options that apply to the build. +# This helps us diagnose which options override others +# (e.g. /etc/bazel.bazelrc vs. tools/bazel.rc) +build --announce_rc + +# Workaround https://github.com/bazelbuild/bazel/issues/3645 +# Bazel doesn't calculate the memory ceiling correctly when running under Docker. +# Limit Bazel to consuming resources that fit in CircleCI "xlarge" class +# https://circleci.com/docs/2.0/configuration-reference/#resource_class +build --local_resources=14336,8.0,1.0 + +# Retry in the event of flakes, eg. https://circleci.com/gh/angular/angular/31309 +test --flaky_test_attempts=2 + +# More details on failures +build --verbose_failures=true diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 000000000000..38928e8bbcdd --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,464 @@ +# Configuration file for https://circleci.com/gh/angular/angular + +# Note: YAML anchors allow an object to be re-used, reducing duplication. +# The ampersand declares an alias for an object, then later the `<<: *name` +# syntax dereferences it. +# See http://blog.daemonl.com/2016/02/yaml.html +# To validate changes, use an online parser, eg. +# http://yaml-online-parser.appspot.com/ + +# Note that the browser docker image comes with Chrome and Firefox preinstalled. This is just +# needed for jobs that run tests without Bazel. Bazel runs tests with browsers that will be +# fetched by the Webtesting rules. Therefore for jobs that run tests with Bazel, we don't need a +# docker image with browsers pre-installed. +# **NOTE**: If you change the version of the docker images, also change the `cache_key` suffix. +var_1: &default_docker_image circleci/node:10.12 +var_2: &browsers_docker_image circleci/node:10.12-browsers +var_3: &cache_key v2-angular-{{ .Branch }}-{{ checksum "yarn.lock" }}-node-10.12 + +# Define common ENV vars +var_4: &define_env_vars + run: + name: Define environment variables + command: ./.circleci/env.sh + +var_5: &setup_bazel_remote_execution + run: + name: "Setup bazel RBE remote execution" + command: | + openssl aes-256-cbc -d -in .circleci/gcp_token -k "$CI_REPO_NAME" -out /home/circleci/.gcp_credentials + echo "export GOOGLE_APPLICATION_CREDENTIALS=/home/circleci/.gcp_credentials" >> $BASH_ENV + sudo bash -c "echo 'build --config=remote' >> /etc/bazel.bazelrc" + +# Settings common to each job +var_6: &job_defaults + working_directory: ~/ng + docker: + - image: *default_docker_image + +# After checkout, rebase on top of master. +# Similar to travis behavior, but not quite the same. +# See https://discuss.circleci.com/t/1662 +var_7: &post_checkout + post: git pull --ff-only origin "refs/pull/${CI_PULL_REQUEST//*pull\//}/merge" + +var_8: &yarn_install + run: + name: Running Yarn install + command: yarn install --frozen-lockfile --non-interactive + +var_9: &setup_circleci_bazel_config + run: + name: Setting up CircleCI bazel configuration + command: sudo cp .circleci/bazel.rc /etc/bazel.bazelrc + +version: 2 +jobs: + lint: + <<: *job_defaults + steps: + - checkout: + <<: *post_checkout + - restore_cache: + key: *cache_key + - *define_env_vars + - *yarn_install + + - run: 'yarn bazel:format -mode=check || + (echo "BUILD files not formatted. Please run ''yarn bazel:format''" ; exit 1)' + # Run the skylark linter to check our Bazel rules + - run: 'yarn bazel:lint || + (echo -e "\n.bzl files have lint errors. Please run ''yarn bazel:lint-fix''"; exit 1)' + + - run: ./node_modules/.bin/gulp lint + + test: + <<: *job_defaults + resource_class: xlarge + steps: + - checkout: + <<: *post_checkout + - restore_cache: + key: *cache_key + - *define_env_vars + - *setup_circleci_bazel_config + - *yarn_install + + # Setup remote execution and run RBE-compatible tests. + - *setup_bazel_remote_execution + - run: yarn bazel test //... --build_tag_filters=-ivy-only --test_tag_filters=-ivy-only,-local + # Now run RBE incompatible tests locally. + - run: sudo cp .circleci/bazel.rc /etc/bazel.bazelrc + - run: yarn bazel test //... --build_tag_filters=-ivy-only,local --test_tag_filters=-ivy-only,local + + - save_cache: + key: *cache_key + paths: + - "node_modules" + - "~/bazel_repository_cache" + + # Temporary job to test what will happen when we flip the Ivy flag to true + test_ivy_aot: + <<: *job_defaults + resource_class: xlarge + steps: + - checkout: + <<: *post_checkout + - restore_cache: + key: *cache_key + - *define_env_vars + - *setup_circleci_bazel_config + - *yarn_install + - *setup_bazel_remote_execution + + # We need to explicitly specify the --symlink_prefix option because otherwise we would + # not be able to easily find the output bin directory when uploading artifacts for size + # measurements. + - run: yarn test-ivy-aot //... --symlink_prefix=dist/ + + # Publish bundle artifacts which will be used to calculate the size change. **Note**: Make + # sure that the size plugin from the Angular robot fetches the artifacts from this CircleCI + # job (see .github/angular-robot.yml). Additionally any artifacts need to be stored with the + # following path format: "{projectName}/{context}/{fileName}". This format is necessary + # because otherwise the bot is not able to pick up the artifacts from CircleCI. See: + # https://github.com/angular/github-robot/blob/master/functions/src/plugins/size.ts#L392-L394 + - store_artifacts: + path: dist/bin/packages/core/test/bundling/hello_world/bundle.min.js + destination: core/hello_world/bundle + - store_artifacts: + path: dist/bin/packages/core/test/bundling/todo/bundle.min.js + destination: core/todo/bundle + - store_artifacts: + path: dist/bin/packages/core/test/bundling/hello_world/bundle.min.js.br + destination: core/hello_world/bundle.br + - store_artifacts: + path: dist/bin/packages/core/test/bundling/todo/bundle.min.js.br + destination: core/todo/bundle.br + + test_aio: + <<: *job_defaults + docker: + # Needed because the AIO tests and the PWA score test depend on Chrome being available. + - image: *browsers_docker_image + steps: + - checkout: + <<: *post_checkout + - restore_cache: + key: *cache_key + - *define_env_vars + # Build aio + - run: yarn --cwd aio build --progress=false + # Lint the code + - run: yarn --cwd aio lint + # Run PWA-score tests + # (Run before unit and e2e tests, which destroy the `dist/` directory.) + - run: yarn --cwd aio test-pwa-score-localhost $CI_AIO_MIN_PWA_SCORE + # Check the bundle sizes. + # (Run before unit and e2e tests, which destroy the `dist/` directory.) + - run: yarn --cwd aio payload-size + # Run unit tests + - run: yarn --cwd aio test --watch=false + # Run e2e tests + - run: yarn --cwd aio e2e + # Run unit tests for Firebase redirects + - run: yarn --cwd aio redirects-test + + deploy_aio: + <<: *job_defaults + docker: + # Needed because before deploying the deploy-production script runs the PWA score tests. + - image: *browsers_docker_image + steps: + - checkout: + <<: *post_checkout + - restore_cache: + key: *cache_key + - *define_env_vars + # Deploy angular.io to production (if necessary) + - run: setPublicVar CI_STABLE_BRANCH "$(npm info @angular/core dist-tags.latest | sed -r 's/^\s*([0-9]+\.[0-9]+)\.[0-9]+.*$/\1.x/')" + - run: yarn --cwd aio deploy-production + + test_aio_local: + <<: *job_defaults + docker: + # Needed because the AIO tests and the PWA score test depend on Chrome being available. + - image: *browsers_docker_image + steps: + - checkout: + <<: *post_checkout + - restore_cache: + key: *cache_key + - attach_workspace: + at: dist + - *define_env_vars + # Build aio (with local Angular packages) + - run: yarn --cwd aio build-local --progress=false + # Run PWA-score tests + # (Run before unit and e2e tests, which destroy the `dist/` directory.) + - run: yarn --cwd aio test-pwa-score-localhost $CI_AIO_MIN_PWA_SCORE + # Run unit tests + - run: yarn --cwd aio test --watch=false + # Run e2e tests + - run: yarn --cwd aio e2e + + test_aio_tools: + <<: *job_defaults + steps: + - checkout: + <<: *post_checkout + - restore_cache: + key: *cache_key + - attach_workspace: + at: dist + - *define_env_vars + # Install + - run: yarn --cwd aio install --frozen-lockfile --non-interactive + - 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_0: + <<: *job_defaults + docker: + # Needed because the example e2e tests depend on Chrome. + - image: *browsers_docker_image + steps: + - checkout: + <<: *post_checkout + - restore_cache: + key: *cache_key + - attach_workspace: + at: dist + - *define_env_vars + # Install root + - *yarn_install + # Install aio + - run: yarn --cwd aio install --frozen-lockfile --non-interactive + # Run examples tests + - run: yarn --cwd aio example-e2e --setup --local --shard=0/2 + + test_docs_examples_1: + <<: *job_defaults + docker: + # Needed because the example e2e tests depend on Chrome. + - image: *browsers_docker_image + steps: + - checkout: + <<: *post_checkout + - restore_cache: + key: *cache_key + - attach_workspace: + at: dist + - *define_env_vars + # Install root + - *yarn_install + # Install aio + - run: yarn --cwd aio install --frozen-lockfile --non-interactive + # Run examples tests + - run: yarn --cwd aio example-e2e --setup --local --shard=1/2 + + # This job should only be run on PR builds, where `CI_PULL_REQUEST` is not `false`. + aio_preview: + <<: *job_defaults + environment: + AIO_SNAPSHOT_ARTIFACT_PATH: &aio_preview_artifact_path 'aio/tmp/snapshot.tgz' + steps: + - checkout: + <<: *post_checkout + - restore_cache: + key: *cache_key + - *define_env_vars + - *yarn_install + - run: ./aio/scripts/build-artifacts.sh $AIO_SNAPSHOT_ARTIFACT_PATH $CI_PULL_REQUEST $CI_COMMIT + - store_artifacts: + path: *aio_preview_artifact_path + # The `destination` needs to be kept in synch with the value of + # `AIO_ARTIFACT_PATH` in `aio/aio-builds-setup/Dockerfile` + destination: aio/dist/aio-snapshot.tgz + - run: node ./aio/scripts/create-preview $CIRCLE_BUILD_NUM + + # This job should only be run on PR builds, where `CI_PULL_REQUEST` is not `false`. + test_aio_preview: + <<: *job_defaults + docker: + # Needed because the test-preview script runs e2e tests and the PWA score test with Chrome. + - image: *browsers_docker_image + steps: + - checkout: + <<: *post_checkout + - restore_cache: + key: *cache_key + - *define_env_vars + - run: yarn install --cwd aio --frozen-lockfile --non-interactive + - run: + name: Wait for preview and run tests + command: node aio/scripts/test-preview.js $CI_PULL_REQUEST $CI_COMMIT $CI_AIO_MIN_PWA_SCORE + + # This job exists only for backwards-compatibility with old scripts and tests + # that rely on the pre-Bazel dist/packages-dist layout. + # It duplicates some work with the job above: we build the bazel packages + # twice. Even though we have a remote cache, these jobs will typically run in + # parallel so up-to-date outputs will not be available at the time the build + # starts. + # No new jobs should depend on this one. + build-packages-dist: + <<: *job_defaults + resource_class: xlarge + steps: + - checkout: + <<: *post_checkout + - restore_cache: + key: *cache_key + - *define_env_vars + - *setup_circleci_bazel_config + - *yarn_install + - *setup_bazel_remote_execution + + - run: scripts/build-packages-dist.sh + + # Save the npm packages from //packages/... for other workflow jobs to read + # https://circleci.com/docs/2.0/workflows/#using-workspaces-to-share-data-among-jobs + - persist_to_workspace: + root: dist + paths: + - packages-dist + - packages-dist-ivy-aot + + # We run the integration tests outside of Bazel for now. + # They are a separate workflow job so that they can be easily re-run. + # When the tests are ported to bazel test targets, they should move to the "test" + # job above, as part of the bazel test command. That has flaky_test_attempts so the + # need to re-run manually should be alleviated. + # See comments inside the integration/run_tests.sh script. + integration_test: + <<: *job_defaults + docker: + # Needed because the integration tests expect Chrome to be installed (e.g cli-hello-world) + - image: *browsers_docker_image + # Note: we run Bazel in one of the integration tests, and it can consume >2G + # of memory. Together with the system under test, this can exhaust the RAM + # on a 4G worker so we use a larger machine here too. + resource_class: xlarge + steps: + - checkout: + <<: *post_checkout + - restore_cache: + key: *cache_key + - attach_workspace: + at: dist + - *define_env_vars + - run: ./integration/run_tests.sh + + # This job updates the content of repos like github.com/angular/core-builds + # for every green build on angular/angular. + publish_snapshot: + <<: *job_defaults + steps: + - checkout: + <<: *post_checkout + - *define_env_vars + # See below - ideally this job should not trigger for non-upstream builds. + # But since it does, we have to check this condition. + - run: + name: Skip this job for Pull Requests and Fork builds + # Note, `|| true` on the end makes this step always exit 0 + command: '[[ + "$CI_PULL_REQUEST" != "false" + || "$CI_REPO_OWNER" != "angular" + || "$CI_REPO_NAME" != "angular" + ]] && circleci step halt || true' + - attach_workspace: + at: dist + # CircleCI has a config setting to force SSH for all github connections + # This is not compatible with our mechanism of using a Personal Access Token + # Clear the global setting + - run: git config --global --unset "url.ssh://git@github.com.insteadof" + - run: + name: Decrypt github credentials + command: 'openssl aes-256-cbc -d -in .circleci/github_token -k "${KEY}" -out ~/.git_credentials' + - run: ./scripts/ci/publish-build-artifacts.sh + + aio_monitoring: + <<: *job_defaults + docker: + # This job needs Chrome to be globally installed because the tests run with Protractor + # which does not load the browser through the Bazel webtesting rules. + - image: *browsers_docker_image + steps: + - checkout: + <<: *post_checkout + - restore_cache: + key: *cache_key + - *define_env_vars + - run: + name: Run tests against the deployed apps + command: ./aio/scripts/test-production.sh $CI_AIO_MIN_PWA_SCORE + - run: + name: Notify caretaker about failure + command: 'curl --request POST --header "Content-Type: application/json" --data "{\"text\":\":x: \`$CIRCLE_JOB\` job failed on build $CIRCLE_BUILD_NUM: $CIRCLE_BUILD_URL :scream:\"}" $CI_SECRET_SLACK_CARETAKER_WEBHOOK_URL' + when: on_fail + +workflows: + version: 2 + default_workflow: + jobs: + - lint + - test + - test_ivy_aot + - build-packages-dist + - test_aio + - deploy_aio: + requires: + - test_aio + - test_aio_local: + requires: + - build-packages-dist + - test_aio_tools: + requires: + - build-packages-dist + - test_docs_examples_0: + requires: + - build-packages-dist + - test_docs_examples_1: + requires: + - build-packages-dist + - aio_preview: + # Only run on PR builds. (There can be no previews for non-PR builds.) + filters: + branches: + only: /pull\/\d+/ + - test_aio_preview: + requires: + - aio_preview + - integration_test: + requires: + - build-packages-dist + - publish_snapshot: + # Note: no filters on this job because we want it to run for all upstream branches + # We'd really like to filter out pull requests here, but not yet available: + # https://discuss.circleci.com/t/workflows-pull-request-filter/14396/4 + # Instead, the job just exits immediately at the first step. + requires: + # Only publish if tests and integration tests pass + - test + - test_ivy_aot + - integration_test + # Only publish if `aio`/`docs` tests using the locally built Angular packages pass + - test_aio_local + - test_docs_examples_0 + - test_docs_examples_1 + # Get the artifacts to publish from the build-packages-dist job + # since the publishing script expects the legacy outputs layout. + - build-packages-dist + + aio_monitoring: + jobs: + - aio_monitoring + triggers: + - schedule: + cron: "0 0 * * *" + filters: + branches: + only: + - master diff --git a/.circleci/env-helpers.inc.sh b/.circleci/env-helpers.inc.sh new file mode 100644 index 000000000000..3a745321ef02 --- /dev/null +++ b/.circleci/env-helpers.inc.sh @@ -0,0 +1,38 @@ +#################################################################################################### +# Helpers for defining environment variables for CircleCI. +# +# In CircleCI, each step runs in a new shell. The way to share ENV variables across steps is to +# export them from `$BASH_ENV`, which is automatically sourced at the beginning of every step (for +# the default `bash` shell). +# +# See also https://circleci.com/docs/2.0/env-vars/#using-bash_env-to-set-environment-variables. +#################################################################################################### + +# Set and print an environment variable. +# +# Use this function for setting environment variables that are public, i.e. it is OK for them to be +# visible to anyone through the CI logs. +# +# Usage: `setPublicVar ` +function setPublicVar() { + setSecretVar $1 $2; + echo "$1=$2"; +} + +# Set (without printing) an environment variable. +# +# Use this function for setting environment variables that are secret, i.e. should not be visible to +# everyone through the CI logs. +# +# Usage: `setSecretVar ` +function setSecretVar() { + # WARNING: Secrets (e.g. passwords, access tokens) should NOT be printed. + # (Keep original shell options to restore at the end.) + local -r originalShellOptions=$(set +o); + set +x -eu -o pipefail; + + echo "export $1=\"${2:-}\";" >> $BASH_ENV; + + # Restore original shell options. + eval "$originalShellOptions"; +} diff --git a/.circleci/env.sh b/.circleci/env.sh new file mode 100755 index 000000000000..9680eb6b1e32 --- /dev/null +++ b/.circleci/env.sh @@ -0,0 +1,35 @@ +#!/usr/bin/env bash + +# Load helpers and make them available everywhere (through `$BASH_ENV`). +readonly envHelpersPath="`dirname $0`/env-helpers.inc.sh"; +source $envHelpersPath; +echo "source $envHelpersPath;" >> $BASH_ENV; + + +#################################################################################################### +# Define PUBLIC environment variables for CircleCI. +#################################################################################################### +setPublicVar PROJECT_ROOT "$(pwd)"; +setPublicVar CI_AIO_MIN_PWA_SCORE "95"; +# This is the branch being built; e.g. `pull/12345` for PR builds. +setPublicVar CI_BRANCH "$CIRCLE_BRANCH"; +setPublicVar CI_COMMIT "$CIRCLE_SHA1"; +# `CI_COMMIT_RANGE` will only be available when `CIRCLE_COMPARE_URL` is also available, +# i.e. on push builds (a.k.a. non-PR builds). That is fine, since we only need it in push builds. +setPublicVar CI_COMMIT_RANGE "$(sed -r 's|^.*/([0-9a-f]+\.\.\.[0-9a-f]+)$|\1|i' <<< ${CIRCLE_COMPARE_URL:-})"; +setPublicVar CI_PULL_REQUEST "${CIRCLE_PR_NUMBER:-false}"; +setPublicVar CI_REPO_NAME "$CIRCLE_PROJECT_REPONAME"; +setPublicVar CI_REPO_OWNER "$CIRCLE_PROJECT_USERNAME"; + + +#################################################################################################### +# Define SECRET environment variables for CircleCI. +#################################################################################################### +setSecretVar CI_SECRET_AIO_DEPLOY_FIREBASE_TOKEN "$AIO_DEPLOY_TOKEN"; +setSecretVar CI_SECRET_PAYLOAD_FIREBASE_TOKEN "$ANGULAR_PAYLOAD_TOKEN"; +# Defined in https://angular-team.slack.com/apps/A0F7VRE7N-circleci. +setSecretVar CI_SECRET_SLACK_CARETAKER_WEBHOOK_URL "$SLACK_CARETAKER_WEBHOOK_URL"; + + +# Source `$BASH_ENV` to make the variables available immediately. +source $BASH_ENV; diff --git a/.circleci/gcp_token b/.circleci/gcp_token new file mode 100644 index 000000000000..c77bcf634523 Binary files /dev/null and b/.circleci/gcp_token differ diff --git a/.circleci/github_token b/.circleci/github_token new file mode 100644 index 000000000000..30aa87e184f4 Binary files /dev/null and b/.circleci/github_token differ diff --git a/.circleci/setup_cache.sh b/.circleci/setup_cache.sh new file mode 100755 index 000000000000..232596df4a98 --- /dev/null +++ b/.circleci/setup_cache.sh @@ -0,0 +1,11 @@ +#!/bin/sh +# Install bazel remote cache proxy +# This is temporary until the feature is no longer experimental on CircleCI. +# See remote cache documentation in /docs/BAZEL.md + +set -u -e + +readonly DOWNLOAD_URL="https://5-116431813-gh.circle-artifacts.com/0/pkg/bazel-remote-proxy-$(uname -s)_$(uname -m)" + +curl --fail -o ~/bazel-remote-proxy "$DOWNLOAD_URL" +chmod +x ~/bazel-remote-proxy diff --git a/.circleci/trigger-webhook.js b/.circleci/trigger-webhook.js new file mode 100644 index 000000000000..77860186bcb6 --- /dev/null +++ b/.circleci/trigger-webhook.js @@ -0,0 +1,107 @@ +#!/usr/bin/env node + +/** + * Usage (cli): + * ``` + * node create-preview + * ``` + * + * Usage (JS): + * ```js + * require('./trigger-webhook'). + * triggerWebhook(buildNumber, jobName, webhookUrl). + * then(...); + * ``` + * + * Triggers a notification webhook with CircleCI specific info. + * + * It can be used for notifying external servers and trigger operations based on CircleCI job status + * (e.g. triggering the creation of a preview based on previously stored build atrifacts). + * + * The body of the sent payload is of the form: + * ```json + * { + * "payload": { + * "build_num": ${buildNumber} + * "build_parameters": { + * "CIRCLE_JOB": "${jobName}" + * } + * } + * } + * ``` + * + * When used from JS, it returns a promise which resolves to an object of the form: + * ```json + * { + * "statucCode": ${statusCode}, + * "responseText": "${responseText}" + * } + * ``` + * + * NOTE: + * - When used from the cli, the command will exit with an error code if the response's status code + * is outside the [200, 400) range. + * - When used from JS, the returned promise will be resolved, even if the response's status code is + * outside the [200, 400) range. It is up to the caller to decide how this should be handled. + */ + +// Imports +const {request} = require('https'); + +// Exports +module.exports = { + triggerWebhook, +}; + +// Run +if (require.resolve === module) { + _main(process.argv.slice(2)); +} + +// Helpers +function _main(args) { + triggerWebhook(...args). + then(({statusCode, responseText}) => (200 <= statusCode && statusCode < 400) ? + console.log(`Status: ${statusCode}\n${responseText}`) : + Promise.reject(new Error(`Request failed (status: ${statusCode}): ${responseText}`))). + catch(err => { + console.error(err); + process.exit(1); + }); +} + +function postJson(url, data) { + return new Promise((resolve, reject) => { + const opts = {method: 'post', headers: {'Content-Type': 'application/json'}}; + const onResponse = res => { + const statusCode = res.statusCode || -1; + let responseText = ''; + + res. + on('error', reject). + on('data', d => responseText += d). + on('end', () => resolve({statusCode, responseText})); + }; + + request(url, opts, onResponse). + on('error', reject). + end(JSON.stringify(data)); + }); +} + +async function triggerWebhook(buildNumber, jobName, webhookUrl) { + if (!buildNumber || !jobName || !webhookUrl || isNaN(buildNumber)) { + throw new Error( + 'Missing or invalid arguments.\n' + + 'Expected: buildNumber (number), jobName (string), webhookUrl (string)'); + } + + const data = { + payload: { + build_num: +buildNumber, + build_parameters: {CIRCLE_JOB: jobName}, + }, + }; + + return postJson(webhookUrl, data); +} diff --git a/.editorconfig b/.editorconfig index f1cc3ad329c5..01a20f16fe3a 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,4 +1,4 @@ -# http://editorconfig.org +# https://editorconfig.org root = true diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 202ffbdec415..625de624e753 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -1,31 +1,10 @@ -**I'm submitting a ...** (check one with "x") -``` -[ ] bug report => search github for a similar issue or PR before submitting -[ ] feature request -[ ] support request => Please do not submit support request here, instead see https://github.com/angular/angular/blob/master/CONTRIBUTING.md#question -``` +🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑 -**Current behavior** - +Please help us process issues more efficiently by filing an +issue using one of the following templates: -**Expected behavior** - +https://github.com/angular/angular/issues/new/choose -**Reproduction of the problem** - +Thank you! -**What is the motivation / use case for changing the behavior?** - - -**Please tell us about your environment:** - - -* **Angular version:** 2.0.0-rc.X - - -* **Browser:** [all | Chrome XX | Firefox XX | IE XX | Safari XX | Mobile Chrome XX | Android X.X Web Browser | iOS XX Safari | iOS XX UIWebView | iOS XX WKWebView ] - - -* **Language:** [all | TypeScript X.X | ES6/7 | ES5] - -* **Node (for AoT issues):** `node --version` = +🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑 diff --git a/.github/ISSUE_TEMPLATE/1-bug-report.md b/.github/ISSUE_TEMPLATE/1-bug-report.md new file mode 100644 index 000000000000..14f87d1298c1 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/1-bug-report.md @@ -0,0 +1,67 @@ +--- +name: "\U0001F41EBug report" +about: Report a bug in the Angular Framework +--- + + + +# 🐞 bug report + +### Affected Package + + The issue is caused by package @angular/.... + + +### Is this a regression? + + + Yes, the previous version in which this bug was not present was: .... + + +### Description + + A clear and concise description of the problem... + + +## 🔬 Minimal Reproduction + + https://stackblitz.com/... + + + +## 🔥 Exception or Error +

+
+
+
+
+ + +## 🌍 Your Environment + +**Angular Version:** +

+
+
+
+
+ +**Anything else relevant?** + + + diff --git a/.github/ISSUE_TEMPLATE/2-feature-request.md b/.github/ISSUE_TEMPLATE/2-feature-request.md new file mode 100644 index 000000000000..2a85f8237581 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/2-feature-request.md @@ -0,0 +1,32 @@ +--- +name: "\U0001F680Feature request" +about: Suggest a feature for Angular Framework + +--- + + + +# 🚀 feature request + +### Relevant Package + + This feature request is for @angular/.... + + +### Description + A clear and concise description of the problem or missing capability... + + +### Describe the solution you'd like + If you have a solution in mind, please describe it. + + +### Describe alternatives you've considered + Have you considered any alternative solutions or workarounds? diff --git a/.github/ISSUE_TEMPLATE/3-docs-bug.md b/.github/ISSUE_TEMPLATE/3-docs-bug.md new file mode 100644 index 000000000000..c7ed324cce15 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/3-docs-bug.md @@ -0,0 +1,55 @@ +--- +name: "📚 Docs or angular.io issue report" +about: Report an issue in Angular's documentation or angular.io application + +--- + + +# 📚 Docs or angular.io bug report + +### Description + + A clear and concise description of the problem... + + +## 🔬 Minimal Reproduction + +### What's the affected URL?** + https://angular.io/... + +### Reproduction Steps** + + + +### Expected vs Actual Behavior** + + + + +## 📷Screenshot + + + + +## 🔥 Exception or Error +

+
+
+
+
+ + +## 🌍 Your Environment + +### Browser info + + +### Anything else relevant? + diff --git a/.github/ISSUE_TEMPLATE/4-security-issue-disclosure.md b/.github/ISSUE_TEMPLATE/4-security-issue-disclosure.md new file mode 100644 index 000000000000..70736318d2a3 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/4-security-issue-disclosure.md @@ -0,0 +1,11 @@ +--- +name: ⚠️ Security issue disclosure +about: Report a security issue in Angular Framework, Material, or CLI + +--- + +🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑 + +Please read https://angular.io/guide/security#report-issues on how to disclose security related issues. + +🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑 diff --git a/.github/ISSUE_TEMPLATE/5-support-request.md b/.github/ISSUE_TEMPLATE/5-support-request.md new file mode 100644 index 000000000000..2dbeb3061294 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/5-support-request.md @@ -0,0 +1,16 @@ +--- +name: "❓Support request" +about: Questions and requests for support + +--- + +🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑 + +Please do not file questions or support requests on the GitHub issues tracker. + +You can get your questions answered using other communication channels. Please see: +https://github.com/angular/angular/blob/master/CONTRIBUTING.md#question + +Thank you! + +🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑 diff --git a/.github/ISSUE_TEMPLATE/6-angular-cli.md b/.github/ISSUE_TEMPLATE/6-angular-cli.md new file mode 100644 index 000000000000..8bad6e69cd3b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/6-angular-cli.md @@ -0,0 +1,13 @@ +--- +name: "\U0001F6E0️Angular CLI" +about: Issues and feature requests for Angular CLI + +--- + +🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑 + +Please file any Angular CLI issues at: https://github.com/angular/angular-cli/issues/new + +For the time being, we keep Angular CLI issues in a separate repository. + +🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑 diff --git a/.github/ISSUE_TEMPLATE/7-angular-material.md b/.github/ISSUE_TEMPLATE/7-angular-material.md new file mode 100644 index 000000000000..b023135b0cc5 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/7-angular-material.md @@ -0,0 +1,13 @@ +--- +name: "\U0001F48EAngular Material" +about: Issues and feature requests for Angular Material + +--- + +🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑 + +Please file any Angular Material issues at: https://github.com/angular/material2/issues/new + +For the time being, we keep Angular Material issues in a separate repository. + +🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑 diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 70ac9a510fa0..ffec1591b654 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,36 +1,43 @@ -**Please check if the PR fulfills these requirements** +## PR Checklist +Please check if your PR fulfills the following requirements: + - [ ] The commit message follows our guidelines: https://github.com/angular/angular/blob/master/CONTRIBUTING.md#commit - [ ] Tests for the changes have been added (for bug fixes / features) - [ ] Docs have been added / updated (for bug fixes / features) -**What kind of change does this PR introduce?** (check one with "x") -``` -[ ] Bugfix -[ ] Feature -[ ] Code style update (formatting, local variables) -[ ] Refactoring (no functional changes, no api changes) -[ ] Build related changes -[ ] CI related changes -[ ] Other... Please describe: -``` +## PR Type +What kind of change does this PR introduce? + + + +- [ ] Bugfix +- [ ] Feature +- [ ] Code style update (formatting, local variables) +- [ ] Refactoring (no functional changes, no api changes) +- [ ] Build related changes +- [ ] CI related changes +- [ ] Documentation content changes +- [ ] angular.io application / infrastructure changes +- [ ] Other... Please describe: + -**What is the current behavior?** (You can also link to an open issue here) +## What is the current behavior? + +Issue Number: N/A -**What is the new behavior?** +## What is the new behavior? +## Does this PR introduce a breaking change? -**Does this PR introduce a breaking change?** (check one with "x") -``` -[ ] Yes -[ ] No -``` +- [ ] Yes +- [ ] No -If this PR contains a breaking change, please describe the impact and migration path for existing applications: ... + -**Other information**: +## Other information diff --git a/.github/angular-robot.yml b/.github/angular-robot.yml new file mode 100644 index 000000000000..e71ae2023df3 --- /dev/null +++ b/.github/angular-robot.yml @@ -0,0 +1,164 @@ +# Configuration for angular-robot + +#options for the size plugin +size: + disabled: false + maxSizeIncrease: 2000 + circleCiStatusName: "ci/circleci: test_ivy_aot" + +# options for the merge plugin +merge: + # the status will be added to your pull requests + status: + # set to true to disable + disabled: false + # the name of the status + context: "ci/angular: merge status" + # text to show when all checks pass + successText: "All checks passed!" + # text to show when some checks are failing + failureText: "The following checks are failing:" + + # 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 + # the name of the status + context: "google3" + # text to show when the status is pending, {{PRNumber}} will be replaced by the PR number + pendingDesc: "Googler: run g3sync presubmit {{PRNumber}}" + # text to show when the status is success + successDesc: "Does not affect google3" + # 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/**" + - "packages/**" + # list of patterns to ignore for the files changed by the PR + exclude: + - "packages/*" + - "packages/bazel/*" + - "packages/bazel/src/builders/**" + - "packages/bazel/src/ng_package/**" + - "packages/bazel/src/protractor/**" + - "packages/bazel/src/schematics/**" + - "packages/compiler-cli/src/ngcc/**" + - "packages/docs/**" + - "packages/elements/schematics/**" + - "packages/examples/**" + - "packages/language-service/**" + - "packages/private/**" + - "packages/service-worker/**" + - "**/.gitignore" + - "**/.gitkeep" + - "**/yarn.lock" + - "**/package.json" + - "**/tsconfig-build.json" + - "**/tsconfig.json" + - "**/rollup.config.js" + - "**/BUILD.bazel" + - "**/*.md" + - "packages/**/integrationtest/**" + - "packages/**/test/**" + + # 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!" + + # label to monitor + mergeLabel: "PR action: merge" + + # adding any of these labels will also add the merge label + mergeLinkedLabels: + - "PR action: merge-assistance" + + # list of checks that will determine if the merge label can be added + checks: + + # require that the PR has reviews from all requested reviewers + # + # This enables us to request reviews from both eng and tech writers, or multiple eng folks, and prevents accidental merges. + # Rather than merging PRs with pending reviews, if all PullApprove requirements are satisfied and additional reviews are not needed pending reviewers should be removed via GitHub UI (this also leaves an audit trail behind these decisions). + requireReviews: true, + + # whether the PR shouldn't have a conflict with the base branch + noConflict: true + # list of labels that a PR needs to have, checked with a regexp (e.g. "PR target:" will work for the label "PR target: master") + requiredLabels: + - "PR target: *" + - "cla: yes" + + # list of labels that a PR shouldn't have, checked after the required labels with a regexp + forbiddenLabels: + - "PR target: TBD" + - "PR action: cleanup" + - "PR action: review" + - "PR state: blocked" + - "cla: no" + + # list of PR statuses that need to be successful + requiredStatuses: + - "continuous-integration/travis-ci/pr" + - "code-review/pullapprove" + - "ci/circleci: build" + - "ci/circleci: lint" + + # the comment that will be added when the merge label is added despite failing checks, leave empty or set to false to disable + # {{MERGE_LABEL}} will be replaced by the value of the mergeLabel option + # {{PLACEHOLDER}} will be replaced by the list of failing checks + mergeRemovedComment: "I see that you just added the `{{MERGE_LABEL}}` label, but the following checks are still failing: +\n{{PLACEHOLDER}} +\n +\n**If you want your PR to be merged, it has to pass all the CI checks.** +\n +\nIf you can't get the PR to a green state due to flakes or broken master, please try rebasing to master and/or restarting the CI job. If that fails and you believe that the issue is not due to your change, please contact the caretaker and ask for help." + +# options for the triage plugin +triage: + # number of the milestone to apply when the issue has not been triaged yet + needsTriageMilestone: 83, + # number of the milestone to apply when the issue is triaged + defaultMilestone: 82, + # arrays of labels that determine if an issue has been triaged by the caretaker + l1TriageLabels: + - + - "comp: *" + # arrays of labels that determine if an issue has been fully triaged + l2TriageLabels: + - + - "type: bug/fix" + - "severity*" + - "freq*" + - "comp: *" + - + - "type: feature" + - "comp: *" + - + - "type: refactor" + - "comp: *" + - + - "type: RFC / Discussion / question" + - "comp: *" + +# options for the triage PR plugin +triagePR: + # set to true to disable + disabled: false + # number of the milestone to apply when the PR has not been triaged yet + needsTriageMilestone: 83, + # number of the milestone to apply when the PR is triaged + defaultMilestone: 82, + # arrays of labels that determine if a PR has been triaged by the caretaker + l1TriageLabels: + - + - "comp: *" + # arrays of labels that determine if a PR has been fully triaged + l2TriageLabels: + - + - "type: *" + - "effort*" + - "risk*" + - "comp: *" diff --git a/.gitignore b/.gitignore index 2751303c81f7..038b7056382b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,12 @@ .DS_STORE /dist/ +/bazel-* +/integration/bazel/bazel-* +e2e_test.* node_modules bower_components +tools/gulp-tasks/cldr/cldr-data/ # Include when developing application packages. pubspec.lock @@ -17,11 +21,16 @@ modules/.vscode # Don't check in secret files *secret.js -# Ignore npm debug log +# Ignore npm/yarn debug log npm-debug.log +yarn-error.log # build-analytics .build-analytics # rollup-test output /modules/rollup-test/dist/ + +# User specific bazel settings +.bazelrc.user + diff --git a/.mailmap b/.mailmap new file mode 100644 index 000000000000..1f2f86feb549 --- /dev/null +++ b/.mailmap @@ -0,0 +1 @@ +Michał Gołębiowski-Owczarek diff --git a/.nvmrc b/.nvmrc index 826f5ce030e0..fe6d2ac74950 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -6.6.0 +10.9.0 diff --git a/.pullapprove.yml b/.pullapprove.yml new file mode 100644 index 000000000000..4c6f2362ed3b --- /dev/null +++ b/.pullapprove.yml @@ -0,0 +1,541 @@ +# Configuration for pullapprove.com +# +# Approval access and primary role is determined by info in the project ownership spreadsheet: +# https://docs.google.com/spreadsheets/d/1-HIlzfbPYGsPr9KuYMe6bLfc4LXzPjpoALqtYRYTZB0/edit?pli=1#gid=0&vpid=A5 +# +# === GitHub username to Full name map === +# +# alexeagle - Alex Eagle +# alxhub - Alex Rickabaugh +# andrewseguin - Andrew Seguin +# benlesh - Ben Lesh +# brandonroberts - Brandon Roberts +# brocco - Mike Brocchi +# filipesilva - Filipe Silva +# gkalpak - George Kalpakas +# hansl - Hans Larsen +# IgorMinar - Igor Minar +# jasonaden - Jason Aden +# jenniferfell - Jennifer Fell +# kara - Kara Erickson +# kyliau - Keen Yee Liau +# matsko - Matias Niemelä +# mhevery - Misko Hevery +# petebacondarwin - Pete Bacon Darwin +# pkozlowski-opensource - Pawel Kozlowski +# robwormald - Rob Wormald +# vikerman - Vikram Subramanian + + +version: 2 + +group_defaults: + required: 1 + reset_on_reopened: + enabled: true + approve_by_comment: + enabled: false + # see http://docs.pullapprove.com/groups/author_approval/ + author_approval: + # If the author is a reviewer on the PR, they will automatically have an "approved" status. + auto: true + +groups: + # Require all PRs to have at least one approval from *someone* + all: + users: all + required: 1 + rejection_value: -999 + # In this group, your self-approval does not count + author_approval: + auto: false + ignored: true + files: + include: + - "*" + + root: + conditions: + files: + include: + - "*" + exclude: + - "WORKSPACE" + - "BUILD.bazel" + - ".circleci/*" + - "aio/*" + - "integration/*" + - "modules/*" + - "packages/*" + - "tools/*" + users: + - alexeagle + - IgorMinar + - mhevery + + public-api: + conditions: + files: + include: + - "tools/public_api_guard/*" + users: + - IgorMinar + - mhevery + + bazel: + conditions: + files: + include: + - "WORKSPACE" + - ".bazel*" + - "*.bazel" + - "*.bzl" + - "packages/bazel/*" + - "/docs/BAZEL.md" + users: + - alexeagle #primary + - kyliau + - IgorMinar #fallback + - mhevery + - vikerman #fallback + - kara + + build-and-ci: + conditions: + files: + include: + - "*.yml" + - "*.json" + - "*.lock" + - "tools/*" + exclude: + - "aio/*" + - "packages/core/test/bundling/*" + - "tools/public_api_guard/*" + users: + - IgorMinar #primary + - alexeagle + - jasonaden + - mhevery #fallback + + integration: + conditions: + files: + - "integration/*" + users: + - alexeagle + - mhevery + - IgorMinar #fallback + + core: + conditions: + files: + - "packages/core/*" + - "aio/content/guide/bootstrapping.md" + - "aio/content/examples/bootstrapping/*" + - "aio/content/guide/attribute-directives.md" + - "aio/content/examples/attribute-directives/*" + - "aio/content/images/guide/attribute-directives/*" + - "aio/content/guide/structural-directives.md" + - "aio/content/examples/structural-directives/*" + - "aio/content/images/guide/structural-directives/*" + - "aio/content/guide/dynamic-component-loader.md" + - "aio/content/examples/dynamic-component-loader/*" + - "aio/content/images/guide/dynamic-component-loader/*" + - "aio/content/guide/template-syntax.md" + - "aio/content/examples/template-syntax/*" + - "aio/content/images/guide/template-syntax/*" + - "aio/content/guide/dependency-injection.md" + - "aio/content/examples/dependency-injection/*" + - "aio/content/images/guide/dependency-injection/*" + - "aio/content/guide/dependency-injection-in-action.md" + - "aio/content/examples/dependency-injection-in-action/*" + - "aio/content/images/guide/dependency-injection-in-action/*" + - "aio/content/guide/hierarchical-dependency-injection.md" + - "aio/content/examples/hierarchical-dependency-injection/*" + - "aio/content/guide/singleton-services.md" + - "aio/content/guide/dependency-injection-pattern.md" + - "aio/content/guide/providers.md" + - "aio/content/examples/providers/*" + - "aio/content/guide/component-interaction.md" + - "aio/content/examples/component-interaction/*" + - "aio/content/images/guide/component-interaction/*" + - "aio/content/guide/component-styles.md" + - "aio/content/examples/component-styles/*" + - "aio/content/guide/lifecycle-hooks.md" + - "aio/content/examples/lifecycle-hooks/*" + - "aio/content/images/guide/lifecycle-hooks/*" + - "aio/content/examples/ngcontainer/*" + - "aio/content/images/guide/ngcontainer/*" + - "aio/content/guide/pipes.md" + - "aio/content/examples/pipes/*" + - "aio/content/images/guide/pipes/*" + - "aio/content/guide/entry-components.md" + - "aio/content/guide/set-document-title.md" + - "aio/content/examples/set-document-title/*" + - "aio/content/images/guide/set-document-title/*" + - "aio/content/guide/ngmodules.md" + - "aio/content/examples/ngmodules/*" + - "aio/content/examples/ngmodule/*" + - "aio/content/images/guide/ngmodule/*" + - "aio/content/guide/ngmodule-faq.md" + - "aio/content/examples/ngmodule-faq/*" + - "aio/content/guide/module-types.md" + - "aio/content/guide/sharing-ngmodules.md" + - "aio/content/guide/frequent-ngmodules.md" + - "aio/content/images/guide/frequent-ngmodules/*" + - "aio/content/guide/ngmodule-api.md" + - "aio/content/guide/ngmodule-vs-jsmodule.md" + - "aio/content/guide/feature-modules.md" + - "aio/content/examples/feature-modules/*" + - "aio/content/images/guide/feature-modules/*" + - "aio/content/guide/lazy-loading-ngmodules.md" + - "aio/content/examples/lazy-loading-ngmodules/*" + - "aio/content/images/guide/lazy-loading-ngmodules" + users: + - mhevery #primary + - jasonaden + - kara + - IgorMinar + - jenniferfell #docs only + + animations: + conditions: + files: + - "packages/animations/*" + - "packages/platform-browser/animations/*" + - "aio/content/guide/animations.md" + - "aio/content/examples/animations/*" + - "aio/content/images/guide/animations/*" + users: + - matsko #primary + - mhevery #fallback + - IgorMinar #fallback + - jenniferfell #docs only + - kara + + compiler/i18n: + conditions: + files: + - "packages/compiler/src/i18n/*" + - "aio/content/guide/i18n.md" + - "aio/content/examples/i18n/*" + users: + - alxhub #primary + - IgorMinar #fallback + - mhevery #fallback + - jenniferfell #docs only + - kara + + compiler: + conditions: + files: + - "packages/compiler/*" + - "aio/content/guide/aot-compiler.md" + users: + - alxhub #primary + - mhevery + - IgorMinar #fallback + - jenniferfell #docs only + - kara + + compiler-cli/ngtools: + conditions: + files: + - "packages/compiler-cli/src/ngtools*" + users: + - hansl + - filipesilva #fallback + - IgorMinar #fallback + - kara + + compiler-cli: + conditions: + files: + include: + - "packages/compiler-cli/*" + exclude: + - "packages/compiler-cli/src/ngtools*" + users: + - alexeagle + - alxhub + - IgorMinar #fallback + - mhevery #fallback + - kara + + common: + conditions: + files: + include: + - "packages/common/*" + exclude: + - "packages/common/http/*" + users: + - pkozlowski-opensource #primary + - IgorMinar #fallback + - mhevery #fallback + - kara + + forms: + conditions: + files: + - "packages/forms/*" + - "aio/content/guide/forms.md" + - "aio/content/examples/forms/*" + - "aio/content/images/guide/forms/*" + - "aio/content/guide/forms-overview.md" + - "aio/content/examples/forms-overview/*" + - "aio/content/images/guide/forms-overview/*" + - "aio/content/guide/form-validation.md" + - "aio/content/examples/form-validation/*" + - "aio/content/images/guide/form-validation/*" + - "aio/content/guide/dynamic-form.md" + - "aio/content/examples/dynamic-form/*" + - "aio/content/images/guide/dynamic-form/*" + - "aio/content/guide/reactive-forms.md" + - "aio/content/examples/reactive-forms/*" + - "aio/content/images/guide/reactive-forms/*" + users: + - kara #primary + - IgorMinar #fallback + - mhevery #fallback + - jenniferfell #docs only + + http: + conditions: + files: + - "packages/common/http/*" + - "packages/http/*" + - "aio/content/guide/http.md" + - "aio/content/examples/http/*" + - "aio/content/images/guide/http/*" + users: + - alxhub #primary + - IgorMinar + - mhevery #fallback + - jenniferfell #docs only + + language-service: + conditions: + files: + - "packages/language-service/*" + - "aio/content/guide/language-service.md" + - "aio/content/images/guide/language-service/*" + users: + - kyliau #primary + # needs secondary + - IgorMinar #fallback + - mhevery #fallback + - jenniferfell #docs only + + router: + conditions: + files: + - "packages/router/*" + - "aio/content/guide/router.md" + - "aio/content/examples/router/*" + - "aio/content/images/guide/router/*" + users: + - jasonaden #primary + - IgorMinar #fallback + - mhevery #fallback + - jenniferfell #docs only + - kara + + testing: + conditions: + files: + - "*/testing/*" + - "aio/content/guide/testing.md" + - "aio/content/examples/testing/*" + - "aio/content/images/guide/testing/*" + users: + - vikerman + - IgorMinar #fallback + - mhevery #fallback + - jenniferfell #docs only + + upgrade: + conditions: + files: + - "packages/upgrade/*" + - "aio/content/guide/upgrade.md" + - "aio/content/examples/upgrade-module/*" + - "aio/content/images/guide/upgrade/*" + - "aio/content/examples/upgrade-phonecat-1-typescript/*" + - "aio/content/examples/upgrade-phonecat-2-hybrid/*" + - "aio/content/examples/upgrade-phonecat-3-final/*" + - "aio/content/guide/upgrade-performance.md" + - "aio/content/guide/ajs-quick-reference.md" + - "aio/content/examples/ajs-quick-reference/*" + users: + - petebacondarwin #primary + - gkalpak + - IgorMinar #fallback + - mhevery #fallback + - jenniferfell #docs only + - kara + + platform-browser: + conditions: + files: + - "packages/platform-browser/*" + users: + - mhevery #primary + # needs secondary + - IgorMinar #fallback + - kara + + platform-server: + conditions: + files: + - "packages/platform-server/*" + - "aio/content/guide/universal.md" + - "aio/content/examples/universal/*" + users: + - vikerman #primary + - alxhub #secondary + - IgorMinar #fallback + - mhevery #fallback + - jenniferfell #docs only + + platform-webworker: + conditions: + files: + - "packages/platform-webworker/*" + users: + - mhevery #primary + # needs secondary + - IgorMinar #fallback + - kara + + service-worker: + conditions: + files: + - "packages/service-worker/*" + - "aio/content/guide/service-worker-getting-started.md" + - "aio/content/examples/service-worker-getting-started/*" + - "aio/content/guide/service-worker-communications.md" + - "aio/content/guide/service-worker-config.md" + - "aio/content/guide/service-worker-devops.md" + - "aio/content/guide/service-worker-intro.md" + - "aio/content/images/guide/service-worker/*" + users: + - gkalpak #primary + - alxhub + - IgorMinar + - mhevery #fallback + - jenniferfell #docs only + + elements: + conditions: + files: + - "packages/elements/*" + - "aio/content/examples/elements/*" + - "aio/content/images/guide/elements/*" + - "aio/content/guide/elements.md" + users: + - andrewseguin #primary + - gkalpak + - robwormald + - IgorMinar #fallback + - mhevery #fallback + - jenniferfell #docs only + - kara + + benchpress: + conditions: + files: + - "packages/benchpress/*" + users: + - alxhub # primary + # needs secondary + - IgorMinar #fallback + - mhevery #fallback + + docs-infra: + conditions: + files: + include: + - "aio/*" + exclude: + - "aio/content/*" + users: + - petebacondarwin #primary + - IgorMinar + - gkalpak + - mhevery #fallback + + docs/guide-and-tutorial: + conditions: + files: + include: + - "aio/content/*" + exclude: + - "aio/content/marketing/*" + - "aio/content/navigation.json" + - "aio/content/license.md" + users: + - stephenfluin + - jenniferfell + - brandonroberts + - petebacondarwin + - gkalpak + - IgorMinar + - mhevery #fallback + + docs/marketing: + conditions: + files: + include: + - "aio/content/marketing/*" + - "aio/content/images/marketing/*" + - "aio/content/navigation.json" + - "aio/content/license.md" + users: + - stephenfluin + - petebacondarwin + - gkalpak + - IgorMinar + - robwormald + - mhevery #fallback + + docs/observables: + conditions: + files: + - "aio/content/examples/observables/*" + - "aio/content/images/guide/observables/*" + - "aio/content/guide/observables.md" + - "aio/content/guide/comparing-observables.md" + - "aio/content/examples/observables-in-angular/*" + - "aio/content/images/guide/observables-in-angular/*" + - "aio/content/guide/observables-in-angular.md" + - "aio/content/examples/practical-observable-usage/*" + - "aio/content/guide/practical-observable-usage.md" + - "aio/content/examples/rx-library/*" + - "aio/content/guide/rx-library.md" + users: + - jasonaden + - benlesh + - IgorMinar + - mhevery + - jenniferfell #docs only + + docs/packaging: + conditions: + files: + - "aio/content/guide/npm-packages.md" + - "aio/content/guide/browser-support.md" + - "aio/content/guide/typescript-configuration.md" + - "aio/content/guide/setup-systemjs-anatomy.md" + - "aio/content/examples/setup/*" + - "aio/content/guide/setup.md" + - "aio/content/guide/deployment.md" + - "aio/content/guide/releases.md" + - "aio/content/guide/updating.md" + users: + - IgorMinar #primary + - alexeagle + - hansl + - mhevery #fallback + - jenniferfell #docs only diff --git a/.travis.yml b/.travis.yml index 3bdb05466f6b..e28c04373792 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,8 @@ language: node_js sudo: false +dist: trusty node_js: - - '6.6.0' + - '10.9.0' addons: # firefox: "38.0" @@ -10,30 +11,38 @@ addons: # needed to install g++ that is used by npms's native modules - ubuntu-toolchain-r-test packages: + # needed to install g++ that is used by npms's native modules - g++-4.8 branches: except: - - g3_v2_0 + - g3 cache: + yarn: true directories: - ./node_modules - ./.chrome/chromium + - ./aio/node_modules env: global: - # GITHUB_TOKEN_ANGULAR + # GITHUB_TOKEN_ANGULAR= # This is needed for the e2e Travis matrix task to publish packages to github for continuous packages delivery. - - secure: "fq/U7VDMWO8O8SnAQkdbkoSe2X92PVqg4d044HmRYVmcf6YbO48+xeGJ8yOk0pCBwl3ISO4Q2ot0x546kxfiYBuHkZetlngZxZCtQiFT9kyId8ZKcYdXaIW9OVdw3Gh3tQyUwDucfkVhqcs52D6NZjyE2aWZ4/d1V4kWRO/LMgo=" + - secure: "aCdHveZuY8AT4Jr1JoJB4LxZsnGWRe/KseZh1YXYe5UtufFCtTVHvUcLn0j2aLBF0KpdyS+hWf0i4np9jthKu2xPKriefoPgCMpisYeC0MFkwbmv+XlgkUbgkgVZMGiVyX7DCYXVahxIoOUjVMEDCbNiHTIrfEuyq24U3ok2tHc=" matrix: # Order: a slower build first, so that we don't occupy an idle travis worker waiting for others to complete. - - CI_MODE=js - - CI_MODE=e2e - - CI_MODE=saucelabs_required - - CI_MODE=browserstack_required - - CI_MODE=saucelabs_optional - - CI_MODE=browserstack_optional + - CI_MODE=e2e + - CI_MODE=js + - CI_MODE=saucelabs_required + # deactivated, see #19768 + # - CI_MODE=browserstack_required + + # We disable these optional jobs because those acquire tunnel and browser instances which + # could lead to rate limit excess while those are failing most of the time and nobody pays + # attention anyway. + # - CI_MODE=saucelabs_optional + # - CI_MODE=browserstack_optional matrix: fast_finish: true @@ -41,11 +50,17 @@ matrix: - env: "CI_MODE=saucelabs_optional" - env: "CI_MODE=browserstack_optional" +before_install: + # source the env.sh script so that the exported variables are available to other scripts later on + - source ./scripts/ci/env.sh print + install: - - ./scripts/ci-lite/install.sh + - ./scripts/ci/install.sh script: - - ./scripts/ci-lite/build.sh && ./scripts/ci-lite/test.sh - -after_script: - - ./scripts/ci-lite/cleanup.sh + - ./scripts/ci/build.sh + - ./scripts/ci/test.sh + - ./scripts/ci/angular.sh + # all the scripts under this line will not quickly abort in case ${TRAVIS_TEST_RESULT} is 1 (job failure) + - ./scripts/ci/cleanup.sh + - ./scripts/ci/print-logs.sh diff --git a/BUILD.bazel b/BUILD.bazel new file mode 100644 index 000000000000..049d72fe2615 --- /dev/null +++ b/BUILD.bazel @@ -0,0 +1,56 @@ +package(default_visibility = ["//visibility:public"]) + +load("@build_bazel_rules_nodejs//:defs.bzl", "node_modules_filegroup") + +exports_files([ + "tsconfig.json", + "LICENSE", + "protractor-perf.conf.js", +]) + +filegroup( + name = "web_test_bootstrap_scripts", + # do not sort + srcs = [ + "@ngdeps//node_modules/reflect-metadata:Reflect.js", + "@ngdeps//node_modules/zone.js:dist/zone.js", + "@ngdeps//node_modules/zone.js:dist/zone-testing.js", + "@ngdeps//node_modules/zone.js:dist/task-tracking.js", + "//:test-events.js", + ], +) + +filegroup( + name = "angularjs_scripts", + srcs = [ + # We also declare the unminfied AngularJS files since these can be used for + # local debugging (e.g. see: packages/upgrade/test/common/test_helpers.ts) + "@ngdeps//node_modules/angular:angular.js", + "@ngdeps//node_modules/angular:angular.min.js", + "@ngdeps//node_modules/angular-1.5:angular.js", + "@ngdeps//node_modules/angular-1.5:angular.min.js", + "@ngdeps//node_modules/angular-1.6:angular.js", + "@ngdeps//node_modules/angular-1.6:angular.min.js", + "@ngdeps//node_modules/angular-mocks:angular-mocks.js", + "@ngdeps//node_modules/angular-mocks-1.5:angular-mocks.js", + "@ngdeps//node_modules/angular-mocks-1.6:angular-mocks.js", + ], +) + +load("@build_bazel_rules_nodejs//:defs.bzl", "nodejs_binary") + +# A nodejs_binary for @angular/bazel/ngc-wrapped to use by default in +# ng_module that depends on @npm//@angular/bazel instead of the +# output of the //packages/bazel/src/ngc-wrapped ts_library rule. This +# default is for downstream users that depend on the @angular/bazel npm +# package. The generated @npm//@angular/bazel/ngc-wrapped target +# does not work because it does not have the node `--expose-gc` flag +# set which is required to support the call to `global.gc()`. +nodejs_binary( + name = "@angular/bazel/ngc-wrapped", + configuration_env_vars = ["compile"], + data = ["@npm//@angular/bazel"], + entry_point = "@angular/bazel/src/ngc-wrapped/index.js", + install_source_map_support = False, + templated_args = ["--node_options=--expose-gc"], +) diff --git a/CHANGELOG.md b/CHANGELOG.md index f864ee961570..b0367967f384 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4091 +1,3687 @@ - -# [2.0.0](https://github.com/angular/angular/compare/2.0.0-rc.7...2.0.0) (2016-09-14) + +# [7.2.0-rc.0](https://github.com/angular/angular/compare/7.2.0-beta.2...7.2.0-rc.0) (2018-12-18) + + +### Bug Fixes + +* **animations:** do not truncate decimals for delay ([#24455](https://github.com/angular/angular/issues/24455)) ([f1c9d6a](https://github.com/angular/angular/commit/f1c9d6a)) +* **animations:** mark actual descendant node as disabled ([#26180](https://github.com/angular/angular/issues/26180)) ([df123e0](https://github.com/angular/angular/commit/df123e0)) +* **bazel:** devserver entry_module should have underscore name ([#27719](https://github.com/angular/angular/issues/27719)) ([f57916c](https://github.com/angular/angular/commit/f57916c)) +* **bazel:** emit full node stack traces when Angular compilation crashes ([#27678](https://github.com/angular/angular/issues/27678)) ([522919a](https://github.com/angular/angular/commit/522919a)) +* **bazel:** fix major/minor semver check between [@angular](https://github.com/angular)/bazel npm packager version and angular bazel repo version ([#27635](https://github.com/angular/angular/issues/27635)) ([1cc08b4](https://github.com/angular/angular/commit/1cc08b4)) +* **bazel:** Load http_archive and rules_nodejs dependencies ([#27609](https://github.com/angular/angular/issues/27609)) ([8313ffc](https://github.com/angular/angular/commit/8313ffc)) +* **bazel:** ng_package writes unrelevant definitions to bazel out ([#27519](https://github.com/angular/angular/issues/27519)) ([44dfa60](https://github.com/angular/angular/commit/44dfa60)), closes [/github.com/angular/angular/blob/4f9374951d67c75f67a31c110bd61ab72563db7d/packages/bazel/src/ng_package/packager.ts#L105-L124](https://github.com//github.com/angular/angular/blob/4f9374951d67c75f67a31c110bd61ab72563db7d/packages/bazel/src/ng_package/packager.ts/issues/L105-L124) +* **bazel:** Set module_name and enable ng test ([#27715](https://github.com/angular/angular/issues/27715)) ([85866de](https://github.com/angular/angular/commit/85866de)) +* **common:** KeyValuePipe should return empty array for empty objects ([#27258](https://github.com/angular/angular/issues/27258)) ([b39efdd](https://github.com/angular/angular/commit/b39efdd)) +* **compiler-cli:** create LiteralLikeNode for String and Number literal ([#27536](https://github.com/angular/angular/issues/27536)) ([2c9b6c0](https://github.com/angular/angular/commit/2c9b6c0)) +* **router:** ensure URL is updated after second redirect with UrlUpdateStrategy="eager" ([#27523](https://github.com/angular/angular/issues/27523)) ([ad26cd6](https://github.com/angular/angular/commit/ad26cd6)), closes [#27116](https://github.com/angular/angular/issues/27116) +* **upgrade:** upgrade Directive facade should not return different instance from constructor ([#27660](https://github.com/angular/angular/issues/27660)) ([c986d3d](https://github.com/angular/angular/commit/c986d3d)) + + +### Features + +* add support for typescript 3.2 ([#27536](https://github.com/angular/angular/issues/27536)) ([17e702b](https://github.com/angular/angular/commit/17e702b)) +* **router:** add predicate function mode for runGuardsAndResolvers ([#27682](https://github.com/angular/angular/issues/27682)) ([12c3176](https://github.com/angular/angular/commit/12c3176)), closes [#26861](https://github.com/angular/angular/issues/26861) [#18253](https://github.com/angular/angular/issues/18253) [#27464](https://github.com/angular/angular/issues/27464) + + + + +## [7.1.4](https://github.com/angular/angular/compare/7.1.3...7.1.4) (2018-12-18) + + +### Bug Fixes + +* **animations:** do not truncate decimals for delay ([#24455](https://github.com/angular/angular/issues/24455)) ([cd1e206](https://github.com/angular/angular/commit/cd1e206)) +* **animations:** mark actual descendant node as disabled ([#26180](https://github.com/angular/angular/issues/26180)) ([453589f](https://github.com/angular/angular/commit/453589f)) +* **bazel:** devserver entry_module should have underscore name ([#27719](https://github.com/angular/angular/issues/27719)) ([b108e9a](https://github.com/angular/angular/commit/b108e9a)) +* **bazel:** emit full node stack traces when Angular compilation crashes ([#27678](https://github.com/angular/angular/issues/27678)) ([0d8528b](https://github.com/angular/angular/commit/0d8528b)) +* **bazel:** fix major/minor semver check between [@angular](https://github.com/angular)/bazel npm packager version and angular bazel repo version ([#27635](https://github.com/angular/angular/issues/27635)) ([3ed1e84](https://github.com/angular/angular/commit/3ed1e84)) +* **bazel:** Load http_archive and rules_nodejs dependencies ([#27609](https://github.com/angular/angular/issues/27609)) ([89ace1a](https://github.com/angular/angular/commit/89ace1a)) +* **bazel:** ng_package writes unrelevant definitions to bazel out ([#27519](https://github.com/angular/angular/issues/27519)) ([ef056c5](https://github.com/angular/angular/commit/ef056c5)), closes [/github.com/angular/angular/blob/4f9374951d67c75f67a31c110bd61ab72563db7d/packages/bazel/src/ng_package/packager.ts#L105-L124](https://github.com//github.com/angular/angular/blob/4f9374951d67c75f67a31c110bd61ab72563db7d/packages/bazel/src/ng_package/packager.ts/issues/L105-L124) +* **bazel:** Read latest versions from latest-versions.ts & use semver check ([#27591](https://github.com/angular/angular/issues/27591)) ([93078e3](https://github.com/angular/angular/commit/93078e3)) +* **bazel:** Set module_name and enable ng test ([#27715](https://github.com/angular/angular/issues/27715)) ([183f278](https://github.com/angular/angular/commit/183f278)) +* **common:** KeyValuePipe should return empty array for empty objects ([#27258](https://github.com/angular/angular/issues/27258)) ([fa3af8b](https://github.com/angular/angular/commit/fa3af8b)) + + + + +# [7.2.0-beta.2](https://github.com/angular/angular/compare/7.2.0-beta.1...7.2.0-beta.2) (2018-12-11) + + +### Bug Fixes + +* **bazel:** fix TS errors in the `schematics/bazel-workspace` files ([#27600](https://github.com/angular/angular/issues/27600)) ([3290fc3](https://github.com/angular/angular/commit/3290fc3)) +* **bazel:** Read latest versions from latest-versions.ts & use semver check ([#27526](https://github.com/angular/angular/issues/27526)) ([30a3b49](https://github.com/angular/angular/commit/30a3b49)) +* **bazel:** tsickle dependency not working with typescript 3.1.x ([#27402](https://github.com/angular/angular/issues/27402)) ([f034114](https://github.com/angular/angular/commit/f034114)) +* **forms:** typed argument for FormBuilder group ([#26985](https://github.com/angular/angular/issues/26985)) ([b0c7561](https://github.com/angular/angular/commit/b0c7561)) + + + + +## [7.1.3](https://github.com/angular/angular/compare/7.1.2...7.1.3) (2018-12-11) + + +### Bug Fixes + +* **bazel:** tsickle dependency not working with typescript 3.1.x ([#27402](https://github.com/angular/angular/issues/27402)) ([a9f39a4](https://github.com/angular/angular/commit/a9f39a4)) + + + + +## [7.1.2](https://github.com/angular/angular/compare/7.1.1...7.1.2) (2018-12-06) + + +### Bug Fixes + +* **bazel:** do not throw error when writing tsickle externs ([#27200](https://github.com/angular/angular/issues/27200)) ([079c4b3](https://github.com/angular/angular/commit/079c4b3)) +* **bazel:** do not throw if ts compile action does not create esm5 outputs ([#27401](https://github.com/angular/angular/issues/27401)) ([9b4d959](https://github.com/angular/angular/commit/9b4d959)) +* **bazel:** ng_package cannot be run multiple times without clean ([#27200](https://github.com/angular/angular/issues/27200)) ([1ca2923](https://github.com/angular/angular/commit/1ca2923)) +* **bazel:** ng_package not generating UMD bundles on windows ([#27200](https://github.com/angular/angular/issues/27200)) ([e476c38](https://github.com/angular/angular/commit/e476c38)) +* **bazel:** ng_package should correctly map to source maps in secondary entry-points ([#27313](https://github.com/angular/angular/issues/27313)) ([fc2c23e](https://github.com/angular/angular/commit/fc2c23e)), closes [#25510](https://github.com/angular/angular/issues/25510) +* **compiler-cli:** flatModuleIndex files not generated on windows with multiple input files ([#27200](https://github.com/angular/angular/issues/27200)) ([8087b6b](https://github.com/angular/angular/commit/8087b6b)) +* **compiler-cli:** ngtsc shim files not being generated on case-insensitive platforms ([#27466](https://github.com/angular/angular/issues/27466)) ([84f2928](https://github.com/angular/angular/commit/84f2928)), closes [/github.com/Microsoft/TypeScript/blob/3e4c5c95abd515eb9713b881d27ab3a93cc00461/src/compiler/sys.ts#L681-L682](https://github.com//github.com/Microsoft/TypeScript/blob/3e4c5c95abd515eb9713b881d27ab3a93cc00461/src/compiler/sys.ts/issues/L681-L682) +* **platform-server:** add [@angular](https://github.com/angular)/http to the list of peerDependencies ([#27307](https://github.com/angular/angular/issues/27307)) ([236ac06](https://github.com/angular/angular/commit/236ac06)), closes [#26154](https://github.com/angular/angular/issues/26154) + + + +# [7.2.0-beta.1](https://github.com/angular/angular/compare/7.1.0...7.2.0-beta.1) (2018-12-06) + + +### Bug Fixes + +* **bazel:** do not throw error when writing tsickle externs ([#27200](https://github.com/angular/angular/issues/27200)) ([20a2bae](https://github.com/angular/angular/commit/20a2bae)) +* **bazel:** do not throw if ts compile action does not create esm5 outputs ([#27401](https://github.com/angular/angular/issues/27401)) ([c61a8b7](https://github.com/angular/angular/commit/c61a8b7)) +* **bazel:** ng_package cannot be run multiple times without clean ([#27200](https://github.com/angular/angular/issues/27200)) ([4f93749](https://github.com/angular/angular/commit/4f93749)) +* **bazel:** ng_package not generating UMD bundles on windows ([#27200](https://github.com/angular/angular/issues/27200)) ([7d59880](https://github.com/angular/angular/commit/7d59880)) +* **bazel:** ng_package should correctly map to source maps in secondary entry-points ([#27313](https://github.com/angular/angular/issues/27313)) ([eb17502](https://github.com/angular/angular/commit/eb17502)), closes [#25510](https://github.com/angular/angular/issues/25510) +* **bazel:** Respect existing angular installation ([#27495](https://github.com/angular/angular/issues/27495)) ([4da739a](https://github.com/angular/angular/commit/4da739a)) +* **common:** expose request url in network error ([#27143](https://github.com/angular/angular/issues/27143)) ([1db53da](https://github.com/angular/angular/commit/1db53da)), closes [#27029](https://github.com/angular/angular/issues/27029) +* **compiler-cli:** flatModuleIndex files not generated on windows with multiple input files ([#27200](https://github.com/angular/angular/issues/27200)) ([d3c08e7](https://github.com/angular/angular/commit/d3c08e7)) +* **core:** export a value for InjectFlags ([#27279](https://github.com/angular/angular/issues/27279)) ([23b06af](https://github.com/angular/angular/commit/23b06af)), closes [#27251](https://github.com/angular/angular/issues/27251) +* **core:** More precise return type for `InjectableDecorator` ([#27360](https://github.com/angular/angular/issues/27360)) ([4b9948c](https://github.com/angular/angular/commit/4b9948c)), closes [#26942](https://github.com/angular/angular/issues/26942) +* **forms:** apply unicode flag to pattern attribute when supported ([#20819](https://github.com/angular/angular/issues/20819)) ([3c34b8b](https://github.com/angular/angular/commit/3c34b8b)) +* **platform-server:** add [@angular](https://github.com/angular)/http to the list of peerDependencies ([#27307](https://github.com/angular/angular/issues/27307)) ([32c5be9](https://github.com/angular/angular/commit/32c5be9)), closes [#26154](https://github.com/angular/angular/issues/26154) +* **router:** update URL after redirects when urlHandlingStrategy='eager' ([#27356](https://github.com/angular/angular/issues/27356)) ([11a8bd8](https://github.com/angular/angular/commit/11a8bd8)), closes [#27076](https://github.com/angular/angular/issues/27076) +* **upgrade:** don't rely upon the runtime to resolve forward refs ([#27132](https://github.com/angular/angular/issues/27132)) ([a4462c2](https://github.com/angular/angular/commit/a4462c2)) + + +### Features + +* **bazel:** ng-new schematics with Bazel ([#27277](https://github.com/angular/angular/issues/27277)) ([06d4a0c](https://github.com/angular/angular/commit/06d4a0c)) +* **router:** add a Navigation type available during navigation ([#27198](https://github.com/angular/angular/issues/27198)) ([d40af0c](https://github.com/angular/angular/commit/d40af0c)) +* **router:** add pathParamsOrQueryParamsChange mode for runGuardsAndResolvers ([#27464](https://github.com/angular/angular/issues/27464)) ([d70a7f3](https://github.com/angular/angular/commit/d70a7f3)), closes [#26861](https://github.com/angular/angular/issues/26861) [#18253](https://github.com/angular/angular/issues/18253) +* **router:** allow passing `state` to routerLink directives ([#27198](https://github.com/angular/angular/issues/27198)) ([73f6ed9](https://github.com/angular/angular/commit/73f6ed9)), closes [#24617](https://github.com/angular/angular/issues/24617) +* **router:** allow passing state to `NavigationExtras` ([#27198](https://github.com/angular/angular/issues/27198)) ([67f4a5d](https://github.com/angular/angular/commit/67f4a5d)) +* **router:** restore whole object when navigating back to a page managed by Angular router ([#27198](https://github.com/angular/angular/issues/27198)) ([2684249](https://github.com/angular/angular/commit/2684249)) + + +# [7.2.0-beta.0](https://github.com/angular/angular/compare/7.1.0...7.2.0-beta.0) (2018-11-28) + + +### Bug Fixes + +* **common:** expose request url in network error ([#27143](https://github.com/angular/angular/issues/27143)) ([1db53da](https://github.com/angular/angular/commit/1db53da)), closes [#27029](https://github.com/angular/angular/issues/27029) +* **upgrade:** don't rely upon the runtime to resolve forward refs ([#27132](https://github.com/angular/angular/issues/27132)) ([a4462c2](https://github.com/angular/angular/commit/a4462c2)) + + + + +## [7.1.1](https://github.com/angular/angular/compare/7.1.0...7.1.1) (2018-11-28) + + +### Bug Fixes + +* **core:** export a value for InjectFlags ([#27279](https://github.com/angular/angular/issues/27279)) ([bdf5f3e](https://github.com/angular/angular/commit/bdf5f3e)), closes [#27251](https://github.com/angular/angular/issues/27251) + + + + +# [7.1.0](https://github.com/angular/angular/compare/7.1.0-rc.0...7.1.0) (2018-11-21) + + +### Bug Fixes + +* **core:** allow null value for renderer setElement(…) ([#17065](https://github.com/angular/angular/issues/17065)) ([ff15043](https://github.com/angular/angular/commit/ff15043)), closes [#13686](https://github.com/angular/angular/issues/13686) +* **router:** fix regression where navigateByUrl promise didn't resolve on CanLoad failure ([#26455](https://github.com/angular/angular/issues/26455)) ([1c9b065](https://github.com/angular/angular/commit/1c9b065)), closes [#26284](https://github.com/angular/angular/issues/26284) +* **service-worker:** clean up caches from old SW versions ([#26319](https://github.com/angular/angular/issues/26319)) ([2326b9c](https://github.com/angular/angular/commit/2326b9c)) +* **upgrade:** properly destroy upgraded component elements and descendants ([#26209](https://github.com/angular/angular/issues/26209)) ([071934e](https://github.com/angular/angular/commit/071934e)), closes [#26208](https://github.com/angular/angular/issues/26208) +* **compiler:** generate inputs with aliases properly ([#26774](https://github.com/angular/angular/issues/26774)) ([19fcfc3](https://github.com/angular/angular/commit/19fcfc3)) +* **compiler:** generate relative paths only in summary file errors ([#26759](https://github.com/angular/angular/issues/26759)) ([56f44be](https://github.com/angular/angular/commit/56f44be)) +* **core:** ignore comment nodes under unsafe elements ([#25879](https://github.com/angular/angular/issues/25879)) ([d5cbcef](https://github.com/angular/angular/commit/d5cbcef)) +* **core:** Remove static dependency from [@angular](https://github.com/angular)/core to [@angular](https://github.com/angular)/compiler ([#26734](https://github.com/angular/angular/issues/26734)) ([d042c4a](https://github.com/angular/angular/commit/d042c4a)) +* **core:** support computed base class in metadata inheritance ([#24014](https://github.com/angular/angular/issues/24014)) ([95743e3](https://github.com/angular/angular/commit/95743e3)) +* **bazel:** unknown replay compiler error in windows ([#26711](https://github.com/angular/angular/issues/26711)) ([aed95fd](https://github.com/angular/angular/commit/aed95fd)) +* **core:** ensure that `ɵdefineNgModule` is available in flat-file formats ([#26403](https://github.com/angular/angular/issues/26403)) ([a64859b](https://github.com/angular/angular/commit/a64859b)) +* **router:** remove type bludgeoning of context and outlet when running CanDeactivate ([#26496](https://github.com/angular/angular/issues/26496)) ([496372d](https://github.com/angular/angular/commit/496372d)), closes [#18253](https://github.com/angular/angular/issues/18253) +* **service-worker:** add typing to public api guard and fix lint errors ([#25860](https://github.com/angular/angular/issues/25860)) ([1061875](https://github.com/angular/angular/commit/1061875)) +* **upgrade:** improve downgrading-related error messages ([#26217](https://github.com/angular/angular/issues/26217)) ([7dbc103](https://github.com/angular/angular/commit/7dbc103)) +* **upgrade:** make typings compatible with older AngularJS typings ([#26880](https://github.com/angular/angular/issues/26880)) ([64647af](https://github.com/angular/angular/commit/64647af)), closes [#26420](https://github.com/angular/angular/issues/26420) +* **compiler-cli:** add missing tslib dependency ([#27063](https://github.com/angular/angular/issues/27063)) ([c31e78f](https://github.com/angular/angular/commit/c31e78f)) +* **compiler-cli:** only pass canonical genfile paths to compiler host ([#27062](https://github.com/angular/angular/issues/27062)) ([0ada23a](https://github.com/angular/angular/commit/0ada23a)) +* **router:** add `relativeLinkResolution` to `recognize` operator ([#26990](https://github.com/angular/angular/issues/26990)) ([a752971](https://github.com/angular/angular/commit/a752971)), closes [#26983](https://github.com/angular/angular/issues/26983) + + +### Features + +* **bazel:** Bazel workspace schematics ([#26971](https://github.com/angular/angular/issues/26971)) ([b07bd30](https://github.com/angular/angular/commit/b07bd30)) +* **router:** add prioritizedGuardValue operator optimization and allowing UrlTree return from guard ([#26478](https://github.com/angular/angular/issues/26478)) ([fdfedce](https://github.com/angular/angular/commit/fdfedce)) +* **compiler:** ability to mark an InvokeFunctionExpr as pure ([#26860](https://github.com/angular/angular/issues/26860)) ([4dfa71f](https://github.com/angular/angular/commit/4dfa71f)) +* **forms:** add updateOn option to FormBuilder ([#24599](https://github.com/angular/angular/issues/24599)) ([e9e804f](https://github.com/angular/angular/commit/e9e804f)) +* **router:** allow guards to return UrlTree as well as boolean ([#26521](https://github.com/angular/angular/issues/26521)) ([081f95c](https://github.com/angular/angular/commit/081f95c)) +* **router:** allow redirect from guards by returning UrlTree ([#26521](https://github.com/angular/angular/issues/26521)) ([152ca66](https://github.com/angular/angular/commit/152ca66)) +* **router:** guard returning UrlTree cancels current navigation and redirects ([#26521](https://github.com/angular/angular/issues/26521)) ([4e9f2e5](https://github.com/angular/angular/commit/4e9f2e5)), closes [#24618](https://github.com/angular/angular/issues/24618) +* **service-worker:** add typing for messagesClicked in SwPush service ([#25860](https://github.com/angular/angular/issues/25860)) ([c78c221](https://github.com/angular/angular/commit/c78c221)) +* **service-worker:** close notifications and focus window on click ([#25860](https://github.com/angular/angular/issues/25860)) ([f5d5a3d](https://github.com/angular/angular/commit/f5d5a3d)) +* **service-worker:** handle 'notificationclick' events ([#25860](https://github.com/angular/angular/issues/25860)) ([cf6ea28](https://github.com/angular/angular/commit/cf6ea28)), closes [#20956](https://github.com/angular/angular/issues/20956) [#22311](https://github.com/angular/angular/issues/22311) +* **upgrade:** support downgrading multiple modules ([#26217](https://github.com/angular/angular/issues/26217)) ([93837e9](https://github.com/angular/angular/commit/93837e9)), closes [#26062](https://github.com/angular/angular/issues/26062) +* **router:** add pathParamsChange mode for runGuardsAndResolvers ([#26861](https://github.com/angular/angular/issues/26861)) ([bf6ac6c](https://github.com/angular/angular/commit/bf6ac6c)), closes [#18253](https://github.com/angular/angular/issues/18253) + + + +# [7.1.0-rc.0](https://github.com/angular/angular/compare/7.1.0-beta.2...7.1.0-rc.0) (2018-11-14) + + +### Bug Fixes + +* **compiler-cli:** add missing tslib dependency ([#27063](https://github.com/angular/angular/issues/27063)) ([c31e78f](https://github.com/angular/angular/commit/c31e78f)) +* **compiler-cli:** only pass canonical genfile paths to compiler host ([#27062](https://github.com/angular/angular/issues/27062)) ([0ada23a](https://github.com/angular/angular/commit/0ada23a)) +* **router:** add `relativeLinkResolution` to `recognize` operator ([#26990](https://github.com/angular/angular/issues/26990)) ([a752971](https://github.com/angular/angular/commit/a752971)), closes [#26983](https://github.com/angular/angular/issues/26983) + + +### Features + +* **router:** add pathParamsChange mode for runGuardsAndResolvers ([#26861](https://github.com/angular/angular/issues/26861)) ([bf6ac6c](https://github.com/angular/angular/commit/bf6ac6c)), closes [#18253](https://github.com/angular/angular/issues/18253) + + + + +## [7.0.4](https://github.com/angular/angular/compare/7.0.3...7.0.4) (2018-11-14) + + +### Bug Fixes + +* **compiler-cli:** add missing tslib dependency ([#27063](https://github.com/angular/angular/issues/27063)) ([4348c47](https://github.com/angular/angular/commit/4348c47)) +* **compiler-cli:** only pass canonical genfile paths to compiler host ([#27062](https://github.com/angular/angular/issues/27062)) ([188e9ce](https://github.com/angular/angular/commit/188e9ce)) +* **router:** add `relativeLinkResolution` to `recognize` operator ([#26990](https://github.com/angular/angular/issues/26990)) ([d304427](https://github.com/angular/angular/commit/d304427)), closes [#26983](https://github.com/angular/angular/issues/26983) + + + + +# [7.1.0-beta.2](https://github.com/angular/angular/compare/7.1.0-beta.1...7.1.0-beta.2) (2018-11-07) + + +### Bug Fixes + +* **bazel:** unknown replay compiler error in windows ([#26711](https://github.com/angular/angular/issues/26711)) ([aed95fd](https://github.com/angular/angular/commit/aed95fd)) +* **core:** ensure that `ɵdefineNgModule` is available in flat-file formats ([#26403](https://github.com/angular/angular/issues/26403)) ([a64859b](https://github.com/angular/angular/commit/a64859b)) +* **router:** remove type bludgeoning of context and outlet when running CanDeactivate ([#26496](https://github.com/angular/angular/issues/26496)) ([496372d](https://github.com/angular/angular/commit/496372d)), closes [#18253](https://github.com/angular/angular/issues/18253) +* **service-worker:** add typing to public api guard and fix lint errors ([#25860](https://github.com/angular/angular/issues/25860)) ([1061875](https://github.com/angular/angular/commit/1061875)) +* **upgrade:** improve downgrading-related error messages ([#26217](https://github.com/angular/angular/issues/26217)) ([7dbc103](https://github.com/angular/angular/commit/7dbc103)) +* **upgrade:** make typings compatible with older AngularJS typings ([#26880](https://github.com/angular/angular/issues/26880)) ([64647af](https://github.com/angular/angular/commit/64647af)), closes [#26420](https://github.com/angular/angular/issues/26420) + + +### Features + +* **compiler:** ability to mark an InvokeFunctionExpr as pure ([#26860](https://github.com/angular/angular/issues/26860)) ([4dfa71f](https://github.com/angular/angular/commit/4dfa71f)) +* **forms:** add updateOn option to FormBuilder ([#24599](https://github.com/angular/angular/issues/24599)) ([e9e804f](https://github.com/angular/angular/commit/e9e804f)) +* **router:** allow guards to return UrlTree as well as boolean ([#26521](https://github.com/angular/angular/issues/26521)) ([081f95c](https://github.com/angular/angular/commit/081f95c)) +* **router:** allow redirect from guards by returning UrlTree ([#26521](https://github.com/angular/angular/issues/26521)) ([152ca66](https://github.com/angular/angular/commit/152ca66)) +* **router:** guard returning UrlTree cancels current navigation and redirects ([#26521](https://github.com/angular/angular/issues/26521)) ([4e9f2e5](https://github.com/angular/angular/commit/4e9f2e5)), closes [#24618](https://github.com/angular/angular/issues/24618) +* **service-worker:** add typing for messagesClicked in SwPush service ([#25860](https://github.com/angular/angular/issues/25860)) ([c78c221](https://github.com/angular/angular/commit/c78c221)) +* **service-worker:** close notifications and focus window on click ([#25860](https://github.com/angular/angular/issues/25860)) ([f5d5a3d](https://github.com/angular/angular/commit/f5d5a3d)) +* **service-worker:** handle 'notificationclick' events ([#25860](https://github.com/angular/angular/issues/25860)) ([cf6ea28](https://github.com/angular/angular/commit/cf6ea28)), closes [#20956](https://github.com/angular/angular/issues/20956) [#22311](https://github.com/angular/angular/issues/22311) +* **upgrade:** support downgrading multiple modules ([#26217](https://github.com/angular/angular/issues/26217)) ([93837e9](https://github.com/angular/angular/commit/93837e9)), closes [#26062](https://github.com/angular/angular/issues/26062) + + + + +## [7.0.3](https://github.com/angular/angular/compare/7.0.2...7.0.3) (2018-11-07) + + +### Bug Fixes + +* **bazel:** unknown replay compiler error in windows ([#26711](https://github.com/angular/angular/issues/26711)) ([4d532df](https://github.com/angular/angular/commit/4d532df)) +* **router:** remove type bludgeoning of context and outlet when running CanDeactivate ([#26496](https://github.com/angular/angular/issues/26496)) ([dc05385](https://github.com/angular/angular/commit/dc05385)), closes [#18253](https://github.com/angular/angular/issues/18253) +* **upgrade:** make typings compatible with older AngularJS typings ([#26880](https://github.com/angular/angular/issues/26880)) ([315d95c](https://github.com/angular/angular/commit/315d95c)), closes [#26420](https://github.com/angular/angular/issues/26420) + + + + +# [7.1.0-beta.1](https://github.com/angular/angular/compare/7.1.0-beta.0...7.1.0-beta.1) (2018-10-31) + + +### Bug Fixes + +* **compiler:** generate inputs with aliases properly ([#26774](https://github.com/angular/angular/issues/26774)) ([19fcfc3](https://github.com/angular/angular/commit/19fcfc3)) +* **compiler:** generate relative paths only in summary file errors ([#26759](https://github.com/angular/angular/issues/26759)) ([56f44be](https://github.com/angular/angular/commit/56f44be)) +* **core:** ignore comment nodes under unsafe elements ([#25879](https://github.com/angular/angular/issues/25879)) ([d5cbcef](https://github.com/angular/angular/commit/d5cbcef)) +* **core:** Remove static dependency from [@angular](https://github.com/angular)/core to [@angular](https://github.com/angular)/compiler ([#26734](https://github.com/angular/angular/issues/26734)) ([d042c4a](https://github.com/angular/angular/commit/d042c4a)) +* **core:** support computed base class in metadata inheritance ([#24014](https://github.com/angular/angular/issues/24014)) ([95743e3](https://github.com/angular/angular/commit/95743e3)) + + + + +## [7.0.2](https://github.com/angular/angular/compare/7.0.1...7.0.2) (2018-10-31) + + +### Bug Fixes + +* **compiler:** generate relative paths only in summary file errors ([#26759](https://github.com/angular/angular/issues/26759)) ([c01f340](https://github.com/angular/angular/commit/c01f340)) +* **core:** Remove static dependency from [@angular](https://github.com/angular)/core to [@angular](https://github.com/angular)/compiler ([#26734](https://github.com/angular/angular/issues/26734)) ([#26879](https://github.com/angular/angular/issues/26879)) ([257ac83](https://github.com/angular/angular/commit/257ac83)) +* **core:** support computed base class in metadata inheritance ([#24014](https://github.com/angular/angular/issues/24014)) ([b3c6409](https://github.com/angular/angular/commit/b3c6409)) + + + + +# [7.1.0-beta.0](https://github.com/angular/angular/compare/7.0.0-rc.1...7.1.0-beta.0) (2018-10-24) + + +### Bug Fixes +* **core:** allow null value for renderer setElement(…) ([#17065](https://github.com/angular/angular/issues/17065)) ([ff15043](https://github.com/angular/angular/commit/ff15043)), closes [#13686](https://github.com/angular/angular/issues/13686) +* **router:** fix regression where navigateByUrl promise didn't resolve on CanLoad failure ([#26455](https://github.com/angular/angular/issues/26455)) ([1c9b065](https://github.com/angular/angular/commit/1c9b065)), closes [#26284](https://github.com/angular/angular/issues/26284) +* **service-worker:** clean up caches from old SW versions ([#26319](https://github.com/angular/angular/issues/26319)) ([2326b9c](https://github.com/angular/angular/commit/2326b9c)) +* **upgrade:** properly destroy upgraded component elements and descendants ([#26209](https://github.com/angular/angular/issues/26209)) ([071934e](https://github.com/angular/angular/commit/071934e)), closes [#26208](https://github.com/angular/angular/issues/26208) + + +### Features + +* **router:** add prioritizedGuardValue operator optimization and allowing UrlTree return from guard ([#26478](https://github.com/angular/angular/issues/26478)) ([fdfedce](https://github.com/angular/angular/commit/fdfedce)) + + + + +## [7.0.1](https://github.com/angular/angular/compare/7.0.0...7.0.1) (2018-10-24) + + + + + +# [7.0.0](https://github.com/angular/angular/compare/7.0.0-rc.1...7.0.0) (2018-10-18) + + +### Release Highlights & Update instructions + +To learn about the release highlights and our new CLI-powered update workflow for your projects please check out the [v7 release announcement](https://blog.angular.io/version-7-of-angular-cli-prompts-virtual-scroll-drag-and-drop-and-more-c594e22e7b8c). + + +### Dependency updates + +* @angular/core now depends on + * TypeScript 3.1 + * RxJS 6.3 +* @angular/platform-server now depends on Domino 2.1 + + +### Features + +* **core:** add DoBootstrap interface. ([#24558](https://github.com/angular/angular/issues/24558)) ([732026c](https://github.com/angular/angular/commit/732026c)), closes [#24557](https://github.com/angular/angular/issues/24557) +* **compiler:** add "original" placeholder value on extracted XMB ([#25079](https://github.com/angular/angular/issues/25079)) ([e99d860](https://github.com/angular/angular/commit/e99d860)) +* **compiler-cli:** add support to extend `angularCompilerOptions` ([#22717](https://github.com/angular/angular/issues/22717)) ([d7e5bbf](https://github.com/angular/angular/commit/d7e5bbf)), closes [#22684](https://github.com/angular/angular/issues/22684) +* **bazel:** add additional parameters to `ts_api_guardian_test` def ([#25694](https://github.com/angular/angular/issues/25694)) ([2a21ca0](https://github.com/angular/angular/commit/2a21ca0)) +* **elements:** enable Shadow DOM v1 and slots ([#24861](https://github.com/angular/angular/issues/24861)) ([c9844a2](https://github.com/angular/angular/commit/c9844a2)) +* **platform-server:** update domino to v2.1.0 ([#25564](https://github.com/angular/angular/issues/25564)) ([3fb0da2](https://github.com/angular/angular/commit/3fb0da2)) +* **router:** warn if navigation triggered outside Angular zone ([#24959](https://github.com/angular/angular/issues/24959)) ([010e35d](https://github.com/angular/angular/commit/010e35d)), closes [#15770](https://github.com/angular/angular/issues/15770) [#15946](https://github.com/angular/angular/issues/15946) [#24728](https://github.com/angular/angular/issues/24728) +* **router:** add UrlSegment[] to CanLoad interface ([#13127](https://github.com/angular/angular/issues/13127)) ([07d8d39](https://github.com/angular/angular/commit/07d8d39)), closes [#12411](https://github.com/angular/angular/issues/12411) + + + +### Bug Fixes + +* add mappings for ngfactory & ngsummary files to their module names in aot summary resolver ([#25335](https://github.com/angular/angular/issues/25335)) ([02e201a](https://github.com/angular/angular/commit/02e201a)) +* **bazel:** Cache fileNameToModuleName lookups ([#25731](https://github.com/angular/angular/issues/25731)) ([f394ba0](https://github.com/angular/angular/commit/f394ba0)) +* **bazel:** allow compile_strategy to be (privately) imported ([#25080](https://github.com/angular/angular/issues/25080)) ([0d1d589](https://github.com/angular/angular/commit/0d1d589)) +* **bazel:** correct type concatenated to devmode_js ([#25467](https://github.com/angular/angular/issues/25467)) ([fb2c524](https://github.com/angular/angular/commit/fb2c524)) +* **bazel:** move bazel managed runtime deps for downstream usage ([#25690](https://github.com/angular/angular/issues/25690)) ([6ed7993](https://github.com/angular/angular/commit/6ed7993)) +* **bazel:** only lookup amd module-name tags in .d.ts files ([#25710](https://github.com/angular/angular/issues/25710)) ([42072c4](https://github.com/angular/angular/commit/42072c4)) +* **bazel:** protractor rule should include *.e2e-spec.js ([#25701](https://github.com/angular/angular/issues/25701)) ([3809e0f](https://github.com/angular/angular/commit/3809e0f)) +* **bazel:** specify the package and lock files using the workspace ([#25694](https://github.com/angular/angular/issues/25694)) ([ddc1335](https://github.com/angular/angular/commit/ddc1335)) +* **benchpress:** Use performance.mark() instead of console.time() ([#24114](https://github.com/angular/angular/issues/24114)) ([06d0400](https://github.com/angular/angular/commit/06d0400)) +* **common:** register locale data for all equivalent closure locales ([#25867](https://github.com/angular/angular/issues/25867)) ([d83f9d4](https://github.com/angular/angular/commit/d83f9d4)) +* **compiler-cli:** correct realPath to realpath. ([#25023](https://github.com/angular/angular/issues/25023)) ([01e6dab](https://github.com/angular/angular/commit/01e6dab)) +* **compiler-cli:** use the oldProgram option in watch mode ([#21364](https://github.com/angular/angular/issues/21364)) ([c6e5b97](https://github.com/angular/angular/commit/c6e5b97)), closes [#21361](https://github.com/angular/angular/issues/21361) +* **compiler:** Fix look up of entryComponents in AOT Summaries ([#24892](https://github.com/angular/angular/issues/24892)) ([00d3666](https://github.com/angular/angular/commit/00d3666)) +* **compiler:** add hostVars and support pure functions in host bindings ([#25626](https://github.com/angular/angular/issues/25626)) ([b424b31](https://github.com/angular/angular/commit/b424b31)) +* **compiler:** update compiler to flatten nested template fns ([#24943](https://github.com/angular/angular/issues/24943)) ([fe14f18](https://github.com/angular/angular/commit/fe14f18)) +* **compiler:** update compiler to generate new slot allocations ([#25607](https://github.com/angular/angular/issues/25607)) ([27e2039](https://github.com/angular/angular/commit/27e2039)) +* **core:** In Testability.whenStable update callback, pass more complete ([#25010](https://github.com/angular/angular/issues/25010)) ([16c03c0](https://github.com/angular/angular/commit/16c03c0)) +* **core:** add missing `peerDependency ` to `[@angular](https://github.com/angular)/compiler` ([#26033](https://github.com/angular/angular/issues/26033)) ([549de1e](https://github.com/angular/angular/commit/549de1e)), closes [/github.com/angular/angular/commit/919f42fea1df4b9e38b7d688aef5f2de668e9d3e#diff-58563046c4439699f2e6a89187099a54](https://github.com//github.com/angular/angular/commit/919f42fea1df4b9e38b7d688aef5f2de668e9d3e/issues/diff-58563046c4439699f2e6a89187099a54) +* **core:** allow null value for renderer setElement(…) ([#17065](https://github.com/angular/angular/issues/17065)) ([ff15043](https://github.com/angular/angular/commit/ff15043)), closes [#13686](https://github.com/angular/angular/issues/13686) +* **core:** do not clear element content when using shadow dom ([#24861](https://github.com/angular/angular/issues/24861)) ([6e828bb](https://github.com/angular/angular/commit/6e828bb)) +* **core:** size regression with closure compiler ([#25531](https://github.com/angular/angular/issues/25531)) ([1f59f2f](https://github.com/angular/angular/commit/1f59f2f)) +* **core:** throw error message when @Output not initialized ([#19116](https://github.com/angular/angular/issues/19116)) ([adf510f](https://github.com/angular/angular/commit/adf510f)), closes [#3664](https://github.com/angular/angular/issues/3664) +* **elements:** add compiler dependency ([#24861](https://github.com/angular/angular/issues/24861)) ([6143da6](https://github.com/angular/angular/commit/6143da6)) +* **elements:** add compiler to integration ([#24861](https://github.com/angular/angular/issues/24861)) ([a080ffc](https://github.com/angular/angular/commit/a080ffc)) +* **elements:** strict null checks ([#24861](https://github.com/angular/angular/issues/24861)) ([a8210d0](https://github.com/angular/angular/commit/a8210d0)) +* **router:** fix regression where navigateByUrl promise didn't resolve on CanLoad failure ([#26455](https://github.com/angular/angular/issues/26455)) ([1c9b065](https://github.com/angular/angular/commit/1c9b065)), closes [#26284](https://github.com/angular/angular/issues/26284) +* **router:** mount correct component if router outlet was not instantiated and if using a route reuse strategy ([#25313](https://github.com/angular/angular/issues/25313)) ([#25314](https://github.com/angular/angular/issues/25314)) ([8dc2b11](https://github.com/angular/angular/commit/8dc2b11)) +* **router:** take base uri into account in `setUpLocationSync()` ([#20244](https://github.com/angular/angular/issues/20244)) ([ba1e25f](https://github.com/angular/angular/commit/ba1e25f)), closes [#20061](https://github.com/angular/angular/issues/20061) +* **service-worker:** clean up caches from old SW versions ([#26319](https://github.com/angular/angular/issues/26319)) ([00b5c7b](https://github.com/angular/angular/commit/00b5c7b)) +* **service-worker:** do not blow up when caches are unwritable ([#26042](https://github.com/angular/angular/issues/26042)) ([2bd767c](https://github.com/angular/angular/commit/2bd767c)) +* **upgrade:** properly destroy upgraded component elements and descendants ([#26209](https://github.com/angular/angular/issues/26209)) ([071934e](https://github.com/angular/angular/commit/071934e)), closes [#26208](https://github.com/angular/angular/issues/26208) +* **upgrade:** trigger `$destroy` event on upgraded component element ([#25357](https://github.com/angular/angular/issues/25357)) ([2a672a9](https://github.com/angular/angular/commit/2a672a9)), closes [#25334](https://github.com/angular/angular/issues/25334) + + + + + +## [6.1.10](https://github.com/angular/angular/compare/6.1.9...6.1.10) (2018-10-10) + + +### Bug Fixes + +* **platform-browser:** fix [#22155](https://github.com/angular/angular/issues/22155), destroy hammer manager when `HammerInstance.off()` is run ([#22156](https://github.com/angular/angular/issues/22156)) ([3b4d9dc](https://github.com/angular/angular/commit/3b4d9dc)) +* **upgrade:** properly destroy upgraded component elements and descendants ([#26209](https://github.com/angular/angular/issues/26209)) ([623adbb](https://github.com/angular/angular/commit/623adbb)), closes [#26208](https://github.com/angular/angular/issues/26208) + + + + + +## [6.1.9](https://github.com/angular/angular/compare/6.1.8...6.1.9) (2018-09-26) + + + + + +## [6.1.7](https://github.com/angular/angular/compare/6.1.6...6.1.7) (2018-09-06) + + +### Bug Fixes + +* **bazel:** protractor rule should include *.e2e-spec.js ([#25701](https://github.com/angular/angular/issues/25701)) ([ed6b68b](https://github.com/angular/angular/commit/ed6b68b)) +* **core:** size regression with closure compiler ([#25531](https://github.com/angular/angular/issues/25531)) ([ebcf762](https://github.com/angular/angular/commit/ebcf762)) +* **docs-infra:** show "suggest edits" only for /guide and /tutorial dirs ([#24378](https://github.com/angular/angular/issues/24378)) ([66b7870](https://github.com/angular/angular/commit/66b7870)) +* **upgrade:** trigger `$destroy` event on upgraded component element ([#25357](https://github.com/angular/angular/issues/25357)) ([82e0676](https://github.com/angular/angular/commit/82e0676)), closes [#25334](https://github.com/angular/angular/issues/25334) +* **router:** warn if navigation triggered outside Angular zone ([#24959](https://github.com/angular/angular/issues/24959)) ([23a96dc](https://github.com/angular/angular/commit/23a96dc)), closes [#15770](https://github.com/angular/angular/issues/15770) [#15946](https://github.com/angular/angular/issues/15946) [#24728](https://github.com/angular/angular/issues/24728) + + + + +## [6.1.6](https://github.com/angular/angular/compare/6.1.5...6.1.6) (2018-08-29) + + +### Bug Fixes + +* **bazel:** Cache fileNameToModuleName lookups ([#25731](https://github.com/angular/angular/issues/25731)) ([3e690e0](https://github.com/angular/angular/commit/3e690e0)) +* **bazel:** only lookup amd module-name tags in .d.ts files ([#25710](https://github.com/angular/angular/issues/25710)) ([7aff364](https://github.com/angular/angular/commit/7aff364)) + + +Note: the 6.1.5 release on npm accidentally glitched-out midway, so we cut 6.1.6 instead. sorry! :-) + + + + +## [6.1.4](https://github.com/angular/angular/compare/6.1.3...6.1.4) (2018-08-22) + + +### Bug Fixes + +* **router:** default scroll position restoration to disabled ([#25586](https://github.com/angular/angular/issues/25586)) ([7e61645](https://github.com/angular/angular/commit/7e61645)), closes [#25145](https://github.com/angular/angular/issues/25145) + + + + +## [6.1.3](https://github.com/angular/angular/compare/6.1.2...6.1.3) (2018-08-15) + + +### Bug Fixes + +* **service-worker:** `Cache-Control: no-cache` on assets breaks service worker ([#25408](https://github.com/angular/angular/issues/25408)) ([1319ff4](https://github.com/angular/angular/commit/1319ff4)), closes [#25442](https://github.com/angular/angular/issues/25442) + + + + +## [6.1.2](https://github.com/angular/angular/compare/6.1.1...6.1.2) (2018-08-08) + + +### Bug Fixes + +* **router:** take base uri into account in `setUpLocationSync()` ([#20244](https://github.com/angular/angular/issues/20244)) ([ae9b4e6](https://github.com/angular/angular/commit/ae9b4e6)), closes [#20061](https://github.com/angular/angular/issues/20061) +* add mappings for ngfactory & ngsummary files to their module names in aot summary resolver ([#25335](https://github.com/angular/angular/issues/25335)) ([054fbbe](https://github.com/angular/angular/commit/054fbbe)) + + + + +## [6.1.1](https://github.com/angular/angular/compare/6.1.0...6.1.1) (2018-08-02) + +* **compiler-cli:** correct tsickle dependency version to fix typescript 2.9 compatibility ([fec29fa](https://github.com/angular/angular/commit/317c7087c56b72aa74cd6d6a8f719e6e7fec29fa)) + + + + +# [6.1.0](https://github.com/angular/angular/compare/6.0.0-rc.5...6.1.0) (2018-07-25) + +### Bug Fixes + +* **animations:** always render end-state styles for orphaned DOM nodes ([#24236](https://github.com/angular/angular/issues/24236)) ([dc4a3d0](https://github.com/angular/angular/commit/dc4a3d0)) +* **animations:** set animations styles properly on platform-server ([#24624](https://github.com/angular/angular/issues/24624)) ([0b356d4](https://github.com/angular/angular/commit/0b356d4)) +* **animations:** do not throw errors when a destroyed component is animated ([#23836](https://github.com/angular/angular/issues/23836)) ([d2a8687](https://github.com/angular/angular/commit/d2a8687)) +* **animations:** Fix browser detection logic ([#24188](https://github.com/angular/angular/issues/24188)) ([b492b9e](https://github.com/angular/angular/commit/b492b9e)) +* **animations:** properly clean up queried element styles in safari/edge ([#23633](https://github.com/angular/angular/issues/23633)) ([da9ff25](https://github.com/angular/angular/commit/da9ff25)) +* **animations:** retain state styling for nodes that are moved around ([#23534](https://github.com/angular/angular/issues/23534)) ([65211f4](https://github.com/angular/angular/commit/65211f4)) +* **animations:** retain trigger-state for nodes that are moved around ([#24238](https://github.com/angular/angular/issues/24238)) ([8db928d](https://github.com/angular/angular/commit/8db928d)) +* **bazel:** Allow ng_module to depend on targets w no deps ([#24446](https://github.com/angular/angular/issues/24446)) ([282d351](https://github.com/angular/angular/commit/282d351)) +* **benchpress:** Fix promise chain in chrome_driver_extension. ([#23458](https://github.com/angular/angular/issues/23458)) ([d4b6c41](https://github.com/angular/angular/commit/d4b6c41)) +* **common:** do not round factional seconds ([#24831](https://github.com/angular/angular/issues/24831)) ([a527c69](https://github.com/angular/angular/commit/a527c69)), closes [#24384](https://github.com/angular/angular/issues/24384) +* **common:** format fractional seconds ([#24844](https://github.com/angular/angular/issues/24844)) ([0b4d85e](https://github.com/angular/angular/commit/0b4d85e)), closes [#24831](https://github.com/angular/angular/issues/24831) +* **common:** properly update collection reference in NgForOf ([#24684](https://github.com/angular/angular/issues/24684)) ([ff84c5c](https://github.com/angular/angular/commit/ff84c5c)), closes [#24155](https://github.com/angular/angular/issues/24155) +* **common:** use correct currency format for locale de-AT ([#24658](https://github.com/angular/angular/issues/24658)) ([dcabb05](https://github.com/angular/angular/commit/dcabb05)), closes [#24609](https://github.com/angular/angular/issues/24609) +* **common:** use correct ICU plural for locale mk ([#24659](https://github.com/angular/angular/issues/24659)) ([64a8584](https://github.com/angular/angular/commit/64a8584)) +* **compiler:** fix a few non-tree-shakeable code patterns ([#24677](https://github.com/angular/angular/issues/24677)) ([50d4a4f](https://github.com/angular/angular/commit/50d4a4f)) +* **compiler:** i18n_extractor now outputs the correct source file name ([#24885](https://github.com/angular/angular/issues/24885)) ([c8ad965](https://github.com/angular/angular/commit/c8ad965)), closes [#24884](https://github.com/angular/angular/issues/24884) +* **compiler:** support `.` in import statements. ([#20634](https://github.com/angular/angular/issues/20634)) ([d8f7b29](https://github.com/angular/angular/commit/d8f7b29)), closes [#20363](https://github.com/angular/angular/issues/20363) +* **compiler:** avoid a crash in ngc-wrapped. ([#23468](https://github.com/angular/angular/issues/23468)) ([e1c4930](https://github.com/angular/angular/commit/e1c4930)) +* **compiler:** generate constant array for i18n attributes ([#23837](https://github.com/angular/angular/issues/23837)) ([cfde36d](https://github.com/angular/angular/commit/cfde36d)) +* **compiler:** generate core-compliant hostBindings property ([#24087](https://github.com/angular/angular/issues/24087)) ([01b5acd](https://github.com/angular/angular/commit/01b5acd)), closes [#24013](https://github.com/angular/angular/issues/24013) +* **compiler:** handle undefined annotation metadata ([#23349](https://github.com/angular/angular/issues/23349)) ([ca776c5](https://github.com/angular/angular/commit/ca776c5)) +* **compiler-cli:** Use typescript to resolve modules for metadata ([#22856](https://github.com/angular/angular/issues/22856)) ([0d5f2d3](https://github.com/angular/angular/commit/0d5f2d3)) +* **compiler-cli:** don't rely on incompatible TS method ([#23550](https://github.com/angular/angular/issues/23550)) ([b1f040f](https://github.com/angular/angular/commit/b1f040f)) +* **core:** stop reusing provider definitions across NgModuleRef instances ([#25022](https://github.com/angular/angular/issues/25022)) ([6b859da](https://github.com/angular/angular/commit/6b859da)), closes [#25018](https://github.com/angular/angular/issues/25018) +* **core:** mark NgModule as not the root if APP_ROOT is set to false ([#24814](https://github.com/angular/angular/issues/24814)) ([1089261](https://github.com/angular/angular/commit/1089261)) +* **core:** use addCustomEqualityTester instead of overriding toEqual ([#22983](https://github.com/angular/angular/issues/22983)) ([0922228](https://github.com/angular/angular/commit/0922228)), closes [#22939](https://github.com/angular/angular/issues/22939) +* **core:** Injector correctly honors the @Self flag ([#24520](https://github.com/angular/angular/issues/24520)) ([ccbda9d](https://github.com/angular/angular/commit/ccbda9d)) +* **core:** avoid eager providers re-initialization ([#23559](https://github.com/angular/angular/issues/23559)) ([0c6dc45](https://github.com/angular/angular/commit/0c6dc45)) +* **core:** call ngOnDestroy on all services that have it ([#23755](https://github.com/angular/angular/issues/23755)) ([fc03427](https://github.com/angular/angular/commit/fc03427)), closes [#22466](https://github.com/angular/angular/issues/22466) [#22240](https://github.com/angular/angular/issues/22240) [#14818](https://github.com/angular/angular/issues/14818) +* **docs-infra:** fix table header layout in API pages ([#24919](https://github.com/angular/angular/issues/24919)) ([3cd9645](https://github.com/angular/angular/commit/3cd9645)) +* **elements:** always check to create strategy ([#23825](https://github.com/angular/angular/issues/23825)) ([b1cda36](https://github.com/angular/angular/commit/b1cda36)) +* **elements:** prevent closure renaming of platform properties ([#23843](https://github.com/angular/angular/issues/23843)) ([d4b8b24](https://github.com/angular/angular/commit/d4b8b24)) +* **forms:** properly handle special properties in FormGroup.get ([#22249](https://github.com/angular/angular/issues/22249)) ([9367e91](https://github.com/angular/angular/commit/9367e91)), closes [#17195](https://github.com/angular/angular/issues/17195) +* **language-service:** do not overwrite native `Reflect` ([#24299](https://github.com/angular/angular/issues/24299)) ([6881404](https://github.com/angular/angular/commit/6881404)), closes [#21420](https://github.com/angular/angular/issues/21420) +* **platform-browser:** add missing deps for HammerGesturesPlugin ([#24682](https://github.com/angular/angular/issues/24682)) ([13d60ea](https://github.com/angular/angular/commit/13d60ea)) +* **platform-browser:** mark Meta and Title services as tree shakable providers ([#24815](https://github.com/angular/angular/issues/24815)) ([197387d](https://github.com/angular/angular/commit/197387d)) +* **platform-browser:** workaround wrong import path generated by ngc for DOCUMENT ([#24830](https://github.com/angular/angular/issues/24830)) ([7d27ecc](https://github.com/angular/angular/commit/7d27ecc)) +* **platform-server:** avoid clash between server and client style encapsulation attributes ([#24158](https://github.com/angular/angular/issues/24158)) ([b96a3c8](https://github.com/angular/angular/commit/b96a3c8)) +* **platform-server:** avoid dependency cycle when using http interceptor ([#24229](https://github.com/angular/angular/issues/24229)) ([60aa943](https://github.com/angular/angular/commit/60aa943)), closes [#23023](https://github.com/angular/angular/issues/23023) +* **platform-server:** don't reflect innerHTML property to attribute ([#24213](https://github.com/angular/angular/issues/24213)) ([6a663a4](https://github.com/angular/angular/commit/6a663a4)), closes [#19278](https://github.com/angular/angular/issues/19278) +* **platform-server:** provide Domino DOM types globally ([#24116](https://github.com/angular/angular/issues/24116)) ([c73196e](https://github.com/angular/angular/commit/c73196e)), closes [#23280](https://github.com/angular/angular/issues/23280) [#23133](https://github.com/angular/angular/issues/23133) +* **router:** Fix _lastPathIndex in deeply nested empty paths ([#22394](https://github.com/angular/angular/issues/22394)) ([968f153](https://github.com/angular/angular/commit/968f153)) +* **router:** add ability to recover from malformed url ([#23283](https://github.com/angular/angular/issues/23283)) ([86d254d](https://github.com/angular/angular/commit/86d254d)), closes [#21468](https://github.com/angular/angular/issues/21468) +* **router:** fix lazy loading of aux routes ([#23459](https://github.com/angular/angular/issues/23459)) ([5731d07](https://github.com/angular/angular/commit/5731d07)), closes [#10981](https://github.com/angular/angular/issues/10981) +* **router:** avoid freezing queryParams in-place ([#22663](https://github.com/angular/angular/issues/22663)) ([89f64e5](https://github.com/angular/angular/commit/89f64e5)), closes [#22617](https://github.com/angular/angular/issues/22617) +* **router:** cache route handle if found ([#22475](https://github.com/angular/angular/issues/22475)) ([4cfa571](https://github.com/angular/angular/commit/4cfa571)), closes [#22474](https://github.com/angular/angular/issues/22474) +* **router:** correct the segment parsing so it won't break on ampersand ([#23684](https://github.com/angular/angular/issues/23684)) ([553a680](https://github.com/angular/angular/commit/553a680)) +* **service-worker:** don't include sourceMappingURL in ngsw-worker ([#24877](https://github.com/angular/angular/issues/24877)) ([8620373](https://github.com/angular/angular/commit/8620373)), closes [#23596](https://github.com/angular/angular/issues/23596) +* **service-worker:** avoid network requests when looking up hashed resources in cache ([#24127](https://github.com/angular/angular/issues/24127)) ([52d43a9](https://github.com/angular/angular/commit/52d43a9)) +* **service-worker:** fix `SwPush.unsubscribe()` ([#24162](https://github.com/angular/angular/issues/24162)) ([3ed2d75](https://github.com/angular/angular/commit/3ed2d75)), closes [#24095](https://github.com/angular/angular/issues/24095) +* **service-worker:** add badge to NOTIFICATION_OPTION_NAMES ([#23241](https://github.com/angular/angular/issues/23241)) ([fb59b2d](https://github.com/angular/angular/commit/fb59b2d)), closes [#23196](https://github.com/angular/angular/issues/23196) +* **service-worker:** check platformBrowser before accessing navigator.serviceWorker ([#21231](https://github.com/angular/angular/issues/21231)) ([0bdd30e](https://github.com/angular/angular/commit/0bdd30e)) +* **service-worker:** correctly handle requests with empty `clientId` ([#23625](https://github.com/angular/angular/issues/23625)) ([e0ed59e](https://github.com/angular/angular/commit/e0ed59e)), closes [#23526](https://github.com/angular/angular/issues/23526) +* **service-worker:** deprecate `versionedFiles` in asset-group resources ([#23584](https://github.com/angular/angular/issues/23584)) ([1d378e2](https://github.com/angular/angular/commit/1d378e2)) + +### Features + +* **bazel:** Initial commit of protractor_web_test_suite ([#24787](https://github.com/angular/angular/issues/24787)) ([71e0df0](https://github.com/angular/angular/commit/71e0df0)) +* **bazel:** protractor_web_test_suite for release ([#24787](https://github.com/angular/angular/issues/24787)) ([161ff5c](https://github.com/angular/angular/commit/161ff5c)) +* **common:** introduce KeyValuePipe ([#24319](https://github.com/angular/angular/issues/24319)) ([2b49bf7](https://github.com/angular/angular/commit/2b49bf7)) +* **compiler:** support `// ...` and `// TODO` in mock compiler expectations ([#23441](https://github.com/angular/angular/issues/23441)) ([c6b206e](https://github.com/angular/angular/commit/c6b206e)) +* **compiler-cli:** update `tsickle` to `0.29.x` ([#24233](https://github.com/angular/angular/issues/24233)) ([f69ac67](https://github.com/angular/angular/commit/f69ac67)) +* **core:** export defaultKeyValueDiffers to private api ([#24319](https://github.com/angular/angular/issues/24319)) ([92b278c](https://github.com/angular/angular/commit/92b278c)) +* **core:** expose a Compiler API for accessing module ids from NgModule types ([#24258](https://github.com/angular/angular/issues/24258)) ([bd02b27](https://github.com/angular/angular/commit/bd02b27)) +* **core:** KeyValueDiffer#diff allows null values ([#24319](https://github.com/angular/angular/issues/24319)) ([52ce9d5](https://github.com/angular/angular/commit/52ce9d5)) +* **core:** add support for ShadowDOM v1 ([#24718](https://github.com/angular/angular/issues/24718)) ([3553977](https://github.com/angular/angular/commit/3553977)) +(https://github.com/angular/angular/commit/328971f)), closes [#24616](https://github.com/angular/angular/issues/24616) +* **platform-browser:** add HammerJS lazy-loader symbols to public API ([#23943](https://github.com/angular/angular/issues/23943)) ([26fbf1d](https://github.com/angular/angular/commit/26fbf1d)) +* **platform-browser:** allow lazy-loading HammerJS ([#23906](https://github.com/angular/angular/issues/23906)) ([313bdce](https://github.com/angular/angular/commit/313bdce)) +* **platform-server:** use EventManagerPlugin on the server ([#24132](https://github.com/angular/angular/issues/24132)) ([d6595eb](https://github.com/angular/angular/commit/d6595eb)) +* **router:** add urlUpdateStrategy allow updating the browser URL at the beginning of navigation ([#24820](https://github.com/angular/angular/issues/24820)) ([328971f] +* **router:** add navigation execution context info to activation hooks ([#24204](https://github.com/angular/angular/issues/24204)) ([20c463e](https://github.com/angular/angular/commit/20c463e)), closes [#24202](https://github.com/angular/angular/issues/24202) +* **router:** implement scrolling restoration service ([#20030](https://github.com/angular/angular/issues/20030)) ([49c5234](https://github.com/angular/angular/commit/49c5234)), closes [#13636](https://github.com/angular/angular/issues/13636) [#10929](https://github.com/angular/angular/issues/10929) [#7791](https://github.com/angular/angular/issues/7791) [#6595](https://github.com/angular/angular/issues/6595) +* **service-worker:** add support for `?` in SW config globbing ([#24105](https://github.com/angular/angular/issues/24105)) ([250527c](https://github.com/angular/angular/commit/250527c)) +* typescript 2.9 support ([#24652](https://github.com/angular/angular/issues/24652)) ([e3064d5](https://github.com/angular/angular/commit/e3064d5)) + +### build + +* **bazel:** turn on preserve-symlinks ([#24881](https://github.com/angular/angular/issues/24881)) ([c438b5e](https://github.com/angular/angular/commit/c438b5e)) + +### Angular Labs (experimental feature) breaking change + +* **bazel:** Use of @angular/bazel rules now requires calling ng_setup_workspace() in your WORKSPACE file. + +For example: + + local_repository( + name = "angular", + path = "node_modules/@angular/bazel", + ) + + load("@angular//:index.bzl", "ng_setup_workspace") + + ng_setup_workspace() + + +## [6.0.9](https://github.com/angular/angular/compare/6.0.8...6.0.9) (2018-07-11) + + +### Bug Fixes +* **common:** format fractional seconds ([#24844](https://github.com/angular/angular/issues/24844)) ([3c93d07](https://github.com/angular/angular/commit/3c93d07)), closes [#24831](https://github.com/angular/angular/issues/24831) + + + +## [6.0.8](https://github.com/angular/angular/compare/6.0.7...6.0.8) (2018-07-11) + + +### Bug Fixes + +* **common:** do not round factional seconds ([#24831](https://github.com/angular/angular/issues/24831)) ([0746485](https://github.com/angular/angular/commit/0746485)), closes [#24384](https://github.com/angular/angular/issues/24384) +* **common:** properly update collection reference in NgForOf ([#24684](https://github.com/angular/angular/issues/24684)) ([9a98de9](https://github.com/angular/angular/commit/9a98de9)), closes [#24155](https://github.com/angular/angular/issues/24155) +* **common:** use correct currency format for locale de-AT ([#24658](https://github.com/angular/angular/issues/24658)) ([a92f111](https://github.com/angular/angular/commit/a92f111)), closes [#24609](https://github.com/angular/angular/issues/24609) +* **compiler-cli:** Use typescript to resolve modules for metadata ([#22856](https://github.com/angular/angular/issues/22856)) ([7717ff1](https://github.com/angular/angular/commit/7717ff1)) +* **core:** use addCustomEqualityTester instead of overriding toEqual ([#22983](https://github.com/angular/angular/issues/22983)) ([b8975a9](https://github.com/angular/angular/commit/b8975a9)), closes [#22939](https://github.com/angular/angular/issues/22939) +* **language-service:** do not overwrite native `Reflect` ([#24299](https://github.com/angular/angular/issues/24299)) ([de1c44f](https://github.com/angular/angular/commit/de1c44f)), closes [#21420](https://github.com/angular/angular/issues/21420) +* **router:** add ability to recover from malformed url ([#23283](https://github.com/angular/angular/issues/23283)) ([2d4f4b5](https://github.com/angular/angular/commit/2d4f4b5)), closes [#21468](https://github.com/angular/angular/issues/21468) +* **service-worker:** avoid network requests when looking up hashed resources in cache ([#24127](https://github.com/angular/angular/issues/24127)) ([183b079](https://github.com/angular/angular/commit/183b079)) + + +### Features + +* **core:** add support for ShadowDOM v1 ([#24718](https://github.com/angular/angular/issues/24718)) ([6c55a13](https://github.com/angular/angular/commit/6c55a13)) + + +## [6.0.7](https://github.com/angular/angular/compare/6.0.6...6.0.7) (2018-06-27) + + +### Bug Fixes + +* **animations:** set animations styles properly on platform-server ([#24624](https://github.com/angular/angular/issues/24624)) ([0b356d4](https://github.com/angular/angular/commit/0b356d4)) +* **common:** use correct ICU plural for locale mk ([#24659](https://github.com/angular/angular/issues/24659)) ([64a8584](https://github.com/angular/angular/commit/64a8584)) + + +## [6.0.6](https://github.com/angular/angular/compare/6.0.5...6.0.6) (2018-06-20) + + +### Bug Fixes + +* **compiler:** support `.` in import statements. ([#20634](https://github.com/angular/angular/issues/20634)) ([e543c73](https://github.com/angular/angular/commit/e543c73)), closes [#20363](https://github.com/angular/angular/issues/20363) +* **core:** Injector correctly honors the @Self flag ([#24520](https://github.com/angular/angular/issues/24520)) ([f5b3661](https://github.com/angular/angular/commit/f5b3661)) + + +## [6.0.5](https://github.com/angular/angular/compare/6.0.4...6.0.5) (2018-06-13) + +* **animations:** always render end-state styles for orphaned DOM nodes ([#24236](https://github.com/angular/angular/issues/24236)) ([0139173](https://github.com/angular/angular/commit/0139173)) +* **bazel:** Allow ng_module to depend on targets w no deps ([#24446](https://github.com/angular/angular/issues/24446)) ([ea3669e](https://github.com/angular/angular/commit/ea3669e)) +* **docs-infra:** use script nomodule to load IE polyfills, skip other polyfills ([#24317](https://github.com/angular/angular/issues/24317)) ([e876535](https://github.com/angular/angular/commit/e876535)), closes [#23647](https://github.com/angular/angular/issues/23647) +* **router:** fix lazy loading of aux routes ([#23459](https://github.com/angular/angular/issues/23459)) ([d20877b](https://github.com/angular/angular/commit/d20877b)), closes [#10981](https://github.com/angular/angular/issues/10981) +* **service-worker:** fix `SwPush.unsubscribe()` ([#24162](https://github.com/angular/angular/issues/24162)) ([ea2987c](https://github.com/angular/angular/commit/ea2987c)), closes [#24095](https://github.com/angular/angular/issues/24095) + + +## [6.0.4](https://github.com/angular/angular/compare/6.0.3...6.0.4) (2018-06-06) + + +### Bug Fixes + +* **animations:** Fix browser detection logic ([#24188](https://github.com/angular/angular/issues/24188)) ([c9eb491](https://github.com/angular/angular/commit/c9eb491)) +* **animations:** retain trigger-state for nodes that are moved around ([#24238](https://github.com/angular/angular/issues/24238)) ([19deca1](https://github.com/angular/angular/commit/19deca1)) +* **forms:** properly handle special properties in FormGroup.get ([#22249](https://github.com/angular/angular/issues/22249)) ([dc3e8aa](https://github.com/angular/angular/commit/dc3e8aa)), closes [#17195](https://github.com/angular/angular/issues/17195) +* **platform-server:** avoid clash between server and client style encapsulation attributes ([#24158](https://github.com/angular/angular/issues/24158)) ([e9f2203](https://github.com/angular/angular/commit/e9f2203)) +* **platform-server:** avoid dependency cycle when using http interceptor ([#24229](https://github.com/angular/angular/issues/24229)) ([2991b1b](https://github.com/angular/angular/commit/2991b1b)), closes [#23023](https://github.com/angular/angular/issues/23023) +* **platform-server:** don't reflect innerHTML property to attibute ([#24213](https://github.com/angular/angular/issues/24213)) ([c17098d](https://github.com/angular/angular/commit/c17098d)), closes [#19278](https://github.com/angular/angular/issues/19278) +* **platform-server:** provide Domino DOM types globally ([#24116](https://github.com/angular/angular/issues/24116)) ([906b3ec](https://github.com/angular/angular/commit/906b3ec)), closes [#23280](https://github.com/angular/angular/issues/23280) [#23133](https://github.com/angular/angular/issues/23133) + + + +## [6.0.3](https://github.com/angular/angular/compare/6.0.2...6.0.3) (2018-05-22) + + +### Bug Fixes + +* **service-worker:** check platformBrowser before accessing navigator.serviceWorker ([#21231](https://github.com/angular/angular/issues/21231)) ([0ee5b7e](https://github.com/angular/angular/commit/0ee5b7e)) + + + + +## [6.0.2](https://github.com/angular/angular/compare/6.0.1...6.0.2) (2018-05-15) + + +### Bug Fixes + +* **animations:** do not throw errors when a destroyed component is animated ([#23836](https://github.com/angular/angular/issues/23836)) ([752b83a](https://github.com/angular/angular/commit/752b83a)) +* **service-worker:** deprecate `versionedFiles` in asset-group resources ([#23584](https://github.com/angular/angular/issues/23584)) ([c6b618d](https://github.com/angular/angular/commit/c6b618d)) + + + + +# [6.0.1](https://github.com/angular/angular/compare/6.0.0...6.0.1) (2018-05-11) + + +### Bug Fixes + +* **animations:** properly clean up queried element styles in safari/edge ([#23686](https://github.com/angular/angular/issues/23686)) ([3824e3f](https://github.com/angular/angular/commit/3824e3f)) +* **animations:** retain state styling for nodes that are moved around ([#23686](https://github.com/angular/angular/issues/23686)) ([05aa5e0](https://github.com/angular/angular/commit/05aa5e0)) +* **core:** call ngOnDestroy on all services that have it ([#23755](https://github.com/angular/angular/issues/23755)) ([5581e97](https://github.com/angular/angular/commit/5581e97)), closes [#22466](https://github.com/angular/angular/issues/22466) [#22240](https://github.com/angular/angular/issues/22240) [#14818](https://github.com/angular/angular/issues/14818) +* **elements:** always check to create strategy ([#23825](https://github.com/angular/angular/issues/23825)) ([d280077](https://github.com/angular/angular/commit/d280077)) +* **router:** avoid freezing queryParams in-place ([#22663](https://github.com/angular/angular/issues/22663)) ([3d8799b](https://github.com/angular/angular/commit/3d8799b)), closes [#22617](https://github.com/angular/angular/issues/22617) +* **router:** correct the segment parsing so it won't break on ampersand ([#23684](https://github.com/angular/angular/issues/23684)) ([8733843](https://github.com/angular/angular/commit/8733843)) +* **service-worker:** correctly handle requests with empty `clientId` ([#23625](https://github.com/angular/angular/issues/23625)) ([2254ac2](https://github.com/angular/angular/commit/2254ac2)), closes [#23526](https://github.com/angular/angular/issues/23526) + + + + +# [6.0.0](https://github.com/angular/angular/compare/6.0.0-beta.0...6.0.0) (2018-05-03) + +### Release Highlights & Update instructions + +Angular v6 is the first release of Angular that unifies the Framework, Material and CLI. + +To learn about the release highlights and our new CLI-powered update workflow for your projects please check out the [v6 release announcement](https://blog.angular.io/version-6-0-0-of-angular-now-available-cc56b0efa7a4). + + + +### Dependency updates + +* @angular/core now depends on + * TypeScript 2.7 + * RxJS 6.0.0 + * tslib 1.9.0 +* @angular/platform-server now depends on Domino 2.0 + + + +### Small Features + +* **animations:** only use the WA-polyfill alongside AnimationBuilder ([#22143](https://github.com/angular/angular/issues/22143)) ([b2f366b](https://github.com/angular/angular/commit/b2f366b)), closes [#17496](https://github.com/angular/angular/issues/17496) +* **animations:** expose `element` and `params` within transition matchers ([#22693](https://github.com/angular/angular/issues/22693)) ([58b94e6](https://github.com/angular/angular/commit/58b94e6)) +* **common:** better error message when non-template element used in NgIf ([#22274](https://github.com/angular/angular/issues/22274)) ([67cf11d](https://github.com/angular/angular/commit/67cf11d)), closes [#16410](https://github.com/angular/angular/issues/16410) +* **common:** export functions to format numbers, percents, currencies & dates ([#22423](https://github.com/angular/angular/issues/22423)) ([4180912](https://github.com/angular/angular/commit/4180912)), closes [#20536](https://github.com/angular/angular/issues/20536) +* **compiler:** lower @NgModule ids if needed ([#23031](https://github.com/angular/angular/issues/23031)) ([bd024c0](https://github.com/angular/angular/commit/bd024c0)) +* **compiler:** implement "enableIvy" compiler option ([#21427](https://github.com/angular/angular/issues/21427)) ([64d16de](https://github.com/angular/angular/commit/64d16de)) +* **compiler:** mark @NgModules in provider lists for identification at runtime ([#22005](https://github.com/angular/angular/issues/22005)) ([2d5e7d1](https://github.com/angular/angular/commit/2d5e7d1)) +* **compiler:** add support for marker tags in xliff serializers ([#21250](https://github.com/angular/angular/issues/21250)) ([f74130c](https://github.com/angular/angular/commit/f74130c)), closes [#21078](https://github.com/angular/angular/issues/21078) +* **compiler:** support for singleline, multiline & jsdoc comments ([#22715](https://github.com/angular/angular/issues/22715)) ([3b167be](https://github.com/angular/angular/commit/3b167be)) +* **compiler-cli:** lower loadChildren fields to allow dynamic module paths ([#23088](https://github.com/angular/angular/issues/23088)) ([550433a](https://github.com/angular/angular/commit/550433a)) +* **compiler-cli:** check unvalidated combination of ngc and TypeScript ([#22293](https://github.com/angular/angular/issues/22293)) ([3ceee99](https://github.com/angular/angular/commit/3ceee99)), closes [#20669](https://github.com/angular/angular/issues/20669) +* **compiler-cli:** reflect static methods added to classes in metadata ([#21926](https://github.com/angular/angular/issues/21926)) ([eb8ddd2](https://github.com/angular/angular/commit/eb8ddd2)) +* **compiler-cli:** Check unvalidated combination of ngc and TypeScript ([#22293](https://github.com/angular/angular/issues/22293)) ([3ceee99](https://github.com/angular/angular/commit/3ceee99)), closes [#20669](https://github.com/angular/angular/issues/20669) +* **compiler-cli:** add resource inlining to ngc ([#22615](https://github.com/angular/angular/issues/22615)) ([b5be18f](https://github.com/angular/angular/commit/b5be18f)) +* **compiler-cli:** require node 8 as runtime engine ([#22669](https://github.com/angular/angular/issues/22669)) ([c602563](https://github.com/angular/angular/commit/c602563)) +* **core:** add binding name to content changed error ([#20352](https://github.com/angular/angular/issues/20352)) ([d3bf54b](https://github.com/angular/angular/commit/d3bf54b)) +* **core:** optional generic type for ElementRef ([#20765](https://github.com/angular/angular/issues/20765)) ([d3d9aac](https://github.com/angular/angular/commit/d3d9aac)), closes [#13139](https://github.com/angular/angular/issues/13139) +* **core:** set `preserveWhitespaces` to false by default ([#22046](https://github.com/angular/angular/issues/22046)) ([f1a0632](https://github.com/angular/angular/commit/f1a0632)), closes [#22027](https://github.com/angular/angular/issues/22027) +* **core:** support metadata reflection for native class types ([#22356](https://github.com/angular/angular/issues/22356)) ([5c89d6b](https://github.com/angular/angular/commit/5c89d6b)), closes [#21731](https://github.com/angular/angular/issues/21731) +* **core:** change @Injectable() to support tree-shakeable tokens ([#22005](https://github.com/angular/angular/issues/22005)) ([235a235](https://github.com/angular/angular/commit/235a235)) +* **core:** support metadata reflection for native class types ([#22356](https://github.com/angular/angular/issues/22356)) ([b7544cc](https://github.com/angular/angular/commit/b7544cc)), closes [#21731](https://github.com/angular/angular/issues/21731) +* **core:** allow direct scoping of @Injectables to the root injector ([#22185](https://github.com/angular/angular/issues/22185)) ([7ac34e4](https://github.com/angular/angular/commit/7ac34e4)) +* **core:** add task tracking to Testability ([#16863](https://github.com/angular/angular/issues/16863)) ([37fedd0](https://github.com/angular/angular/commit/37fedd0)) +* **forms:** handle string with and without line boundary on pattern validator ([#19256](https://github.com/angular/angular/issues/19256)) ([54bf179](https://github.com/angular/angular/commit/54bf179)) +* **forms:** multiple validators for array method ([#20766](https://github.com/angular/angular/issues/20766)) ([941e88f](https://github.com/angular/angular/commit/941e88f)), closes [#20665](https://github.com/angular/angular/issues/20665) +* **forms:** allow markAsPending to emit events ([#20212](https://github.com/angular/angular/issues/20212)) ([e86b64b](https://github.com/angular/angular/commit/e86b64b)), closes [#17958](https://github.com/angular/angular/issues/17958) +* **platform-browser:** add token marking which the type of animation module nearest in the injector tree ([#23075](https://github.com/angular/angular/issues/23075)) ([b551f84](https://github.com/angular/angular/commit/b551f84)) +* **platform-browser:** do not throw error when Hammer.js not loaded ([#22257](https://github.com/angular/angular/issues/22257)) ([991300b](https://github.com/angular/angular/commit/991300b)), closes [#16992](https://github.com/angular/angular/issues/16992) +* **platform-browser:** fix [#19604](https://github.com/angular/angular/issues/19604), can config hammerOptions ([#21979](https://github.com/angular/angular/issues/21979)) ([1d571b2](https://github.com/angular/angular/commit/1d571b2)) +* **platform-server:** bump Domino to v2.0 ([#22411](https://github.com/angular/angular/issues/22411)) ([d3827a0](https://github.com/angular/angular/commit/d3827a0)) +* **router:** add navigationSource and restoredState to NavigationStart event ([#21728](https://github.com/angular/angular/issues/21728)) ([c40ae7f](https://github.com/angular/angular/commit/c40ae7f)) +* **service-worker:** add support for configuring navigations URLs ([#23339](https://github.com/angular/angular/issues/23339)) ([08325aa](https://github.com/angular/angular/commit/08325aa)), closes [#20404](https://github.com/angular/angular/issues/20404) +* **service-worker:** add helper script which will uninstall SW ([#21863](https://github.com/angular/angular/issues/21863)) ([b10540a](https://github.com/angular/angular/commit/b10540a)) + + + + +### Bug Fixes + +* **animations:** report correct totalTime value even during noOp animations ([#22225](https://github.com/angular/angular/issues/22225)) ([e1bf067](https://github.com/angular/angular/commit/e1bf067)) +* **animations:** avoid animation insertions during router back/refresh ([#21977](https://github.com/angular/angular/issues/21977)) ([f88fba0](https://github.com/angular/angular/commit/f88fba0)), closes [#19712](https://github.com/angular/angular/issues/19712) +* **animations:** treat numeric state name values as strings ([#22923](https://github.com/angular/angular/issues/22923)) ([e5e1b0d](https://github.com/angular/angular/commit/e5e1b0d)) +* **animations:** fix increment/decrement aliases example ([#18323](https://github.com/angular/angular/issues/18323)) ([d2aa8ac](https://github.com/angular/angular/commit/d2aa8ac)) +* **common:** NgClass should properly take className changes into account ([#21937](https://github.com/angular/angular/issues/21937)) ([4a42669](https://github.com/angular/angular/commit/4a42669)), closes [#21932](https://github.com/angular/angular/issues/21932) +* **common:** fix the titlecase pipe ([#22600](https://github.com/angular/angular/issues/22600)) ([7966744](https://github.com/angular/angular/commit/7966744)) +* **common:** add locale currency values ([#21783](https://github.com/angular/angular/issues/21783)) ([420cc7a](https://github.com/angular/angular/commit/420cc7a)), closes [#20385](https://github.com/angular/angular/issues/20385) +* **common:** round currencies based on decimal digits in `CurrencyPipe` ([#21783](https://github.com/angular/angular/issues/21783)) ([44154e7](https://github.com/angular/angular/commit/44154e7)), closes [#10189](https://github.com/angular/angular/issues/10189) +* **common:** weaken AsyncPipe transform signature ([#22169](https://github.com/angular/angular/issues/22169)) ([be59c3a](https://github.com/angular/angular/commit/be59c3a)) +* **common:** http testing library should not convert null to a string when flushing a mock request ([#21417](https://github.com/angular/angular/issues/21417)) ([8b14488](https://github.com/angular/angular/commit/8b14488)), closes [#20744](https://github.com/angular/angular/issues/20744) +* **common:** correct mapping of Observable methods ([#20518](https://github.com/angular/angular/issues/20518)) ([2639b4b](https://github.com/angular/angular/commit/2639b4b)), closes [#20516](https://github.com/angular/angular/issues/20516) +* **common:** then and else template might be set to null ([#22298](https://github.com/angular/angular/issues/22298)) ([8115edc](https://github.com/angular/angular/commit/8115edc)) +* **common:** A null value should remove the style on IE ([#21679](https://github.com/angular/angular/issues/21679)) ([7d49443](https://github.com/angular/angular/commit/7d49443)), closes [#21064](https://github.com/angular/angular/issues/21064) +* **common:** fallback to last defined value for named date and time formats ([#21299](https://github.com/angular/angular/issues/21299)) ([879756d](https://github.com/angular/angular/commit/879756d)), closes [#21282](https://github.com/angular/angular/issues/21282) +* **common:** set correct timezone for ISO8601 dates in Safari ([#21506](https://github.com/angular/angular/issues/21506)) ([05208b8](https://github.com/angular/angular/commit/05208b8)), closes [#21491](https://github.com/angular/angular/issues/21491) +* **compiler:** fix ICU select messages to use male/female/other ([#21713](https://github.com/angular/angular/issues/21713)) ([cb5090c](https://github.com/angular/angular/commit/cb5090c)) +* **compiler:** avoid a crash in ngc-wrapped. ([#23468](https://github.com/angular/angular/issues/23468)) ([0bc8443](https://github.com/angular/angular/commit/0bc8443)) +* **compiler:** handle undefined annotation metadata ([#23349](https://github.com/angular/angular/issues/23349)) ([b9431e8](https://github.com/angular/angular/commit/b9431e8)) +* **compiler:** don't typecheck all inputs ([#22899](https://github.com/angular/angular/issues/22899)) ([838a610](https://github.com/angular/angular/commit/838a610)) +* **compiler:** fix support for html-like text in translatable attributes ([#23053](https://github.com/angular/angular/issues/23053)) ([28058b7](https://github.com/angular/angular/commit/28058b7)) +* **compiler:** take quoting into account when determining if object literals can be shared ([#22942](https://github.com/angular/angular/issues/22942)) ([d98e9e7](https://github.com/angular/angular/commit/d98e9e7)) +* **compiler:** do not emit line/char in ngsummary files. ([#22840](https://github.com/angular/angular/issues/22840)) ([5c387a7](https://github.com/angular/angular/commit/5c387a7)) +* **compiler:** make unary plus operator consistent to JavaScript ([#22154](https://github.com/angular/angular/issues/22154)) ([72f8abd](https://github.com/angular/angular/commit/72f8abd)), closes [#22089](https://github.com/angular/angular/issues/22089) +* **compiler:** allow tree-shakeable injectables to depend on string tokens ([#22376](https://github.com/angular/angular/issues/22376)) ([dd53447](https://github.com/angular/angular/commit/dd53447)) +* **compiler:** don't strip `/*# sourceURL ... */` ([#16088](https://github.com/angular/angular/issues/16088)) ([5f681f9](https://github.com/angular/angular/commit/5f681f9)) +* **compiler:** cache external reference resolution ([#21359](https://github.com/angular/angular/issues/21359)) ([e3e2fc0](https://github.com/angular/angular/commit/e3e2fc0)) +* **compiler:** make `.ngsummary.json` files idempotent ([#21448](https://github.com/angular/angular/issues/21448)) ([e64b1e9](https://github.com/angular/angular/commit/e64b1e9)) +* **compiler-cli:** shorten resolved module name in fileNameToModuleName to npm package name for typings ([#23231](https://github.com/angular/angular/issues/23231)) ([6199ea5](https://github.com/angular/angular/commit/6199ea5)) +* **compiler-cli:** strictMetadataEmit should not break on non-compliant libraries ([#23275](https://github.com/angular/angular/issues/23275)) ([5814355](https://github.com/angular/angular/commit/5814355)), closes [#22210](https://github.com/angular/angular/issues/22210) +* **compiler-cli:** flat module index metadata should be transformed ([#23129](https://github.com/angular/angular/issues/23129)) ([f99cb5c](https://github.com/angular/angular/commit/f99cb5c)) +* **compiler-cli:** use numeric comparison for TypeScript version ([#22705](https://github.com/angular/angular/issues/22705)) ([193737a](https://github.com/angular/angular/commit/193737a)), closes [#22593](https://github.com/angular/angular/issues/22593) +* **compiler-cli:** disableTypeScriptVersionCheck should be applied even for older tsc versions ([#22669](https://github.com/angular/angular/issues/22669)) ([3f70aba](https://github.com/angular/angular/commit/3f70aba)) +* **compiler-cli:** emit correct css string escape sequences ([#22776](https://github.com/angular/angular/issues/22776)) ([6e5e819](https://github.com/angular/angular/commit/6e5e819)) +* **compiler-cli:** do not fold errors past calls in the collector ([#21708](https://github.com/angular/angular/issues/21708)) ([dd86790](https://github.com/angular/angular/commit/dd86790)) +* **compiler-cli:** do not lower expressions in non-modules ([#21649](https://github.com/angular/angular/issues/21649)) ([7f93aad](https://github.com/angular/angular/commit/7f93aad)) +* **core:** fix [#20582](https://github.com/angular/angular/issues/20582), don't need to wrap zone in location change listener ([#20640](https://github.com/angular/angular/issues/20640)) ([f791e9f](https://github.com/angular/angular/commit/f791e9f)) +* **core:** fix proper propagation of subscriptions in EventEmitter ([#22016](https://github.com/angular/angular/issues/22016)) ([e81606c](https://github.com/angular/angular/commit/e81606c)), closes [#21999](https://github.com/angular/angular/issues/21999) +* **core:** fix chained http call ([#20924](https://github.com/angular/angular/issues/20924)) ([7e3f9a4](https://github.com/angular/angular/commit/7e3f9a4)), closes [#20921](https://github.com/angular/angular/issues/20921) +* **core:** should check Zone existence when scheduleMicroTask ([#20656](https://github.com/angular/angular/issues/20656)) ([3a86940](https://github.com/angular/angular/commit/3a86940)) +* **core:** avoid eager providers re-initialization ([#23559](https://github.com/angular/angular/issues/23559)) ([697b6c0](https://github.com/angular/angular/commit/697b6c0)) +* **core:** add stacktrace in log when error during cleanup component in TestBed ([#22162](https://github.com/angular/angular/issues/22162)) ([16d1700](https://github.com/angular/angular/commit/16d1700)) +* **core:** ensure initial value of QueryList length ([#21980](https://github.com/angular/angular/issues/21980)) ([#21982](https://github.com/angular/angular/issues/21982)) ([e56de10](https://github.com/angular/angular/commit/e56de10)), closes [#21980](https://github.com/angular/angular/issues/21980) +* **core:** use appropriate inert document strategy for Firefox & Safari ([#17019](https://github.com/angular/angular/issues/17019)) ([a751649](https://github.com/angular/angular/commit/a751649)) +* **core:** properly handle function without prototype in reflector ([#22284](https://github.com/angular/angular/issues/22284)) ([a7ebf5a](https://github.com/angular/angular/commit/a7ebf5a)), closes [#19978](https://github.com/angular/angular/issues/19978) +* **core:** require factory to be provided for shakeable InjectionToken ([#22207](https://github.com/angular/angular/issues/22207)) ([f755db7](https://github.com/angular/angular/commit/f755db7)), closes [#22205](https://github.com/angular/angular/issues/22205) +* **core:** remove core animation import symbols ([#22692](https://github.com/angular/angular/issues/22692)) ([f5a98f4](https://github.com/angular/angular/commit/f5a98f4)) +* **forms:** improve error message for invalid value accessors ([#22731](https://github.com/angular/angular/issues/22731)) ([23cc3ef](https://github.com/angular/angular/commit/23cc3ef)) +* **forms:** make Validators.email support optional controls ([#20869](https://github.com/angular/angular/issues/20869)) ([140e7c0](https://github.com/angular/angular/commit/140e7c0)) +* **forms:** prevent event emission on enable/disable when emitEvent is false ([#12366](https://github.com/angular/angular/issues/12366)) ([#21018](https://github.com/angular/angular/issues/21018)) ([0bcfae7](https://github.com/angular/angular/commit/0bcfae7)) +* **forms:** set state before emitting a value from ngModelChange ([#21514](https://github.com/angular/angular/issues/21514)) ([9744a1c](https://github.com/angular/angular/commit/9744a1c)), closes [#21513](https://github.com/angular/angular/issues/21513) +* **forms:** publish missing types ([#19941](https://github.com/angular/angular/issues/19941)) ([2707012](https://github.com/angular/angular/commit/2707012)) +* **forms:** set state before emitting a value from ngModelChange ([#21514](https://github.com/angular/angular/issues/21514)) ([3e6a86f](https://github.com/angular/angular/commit/3e6a86f)), closes [#21513](https://github.com/angular/angular/issues/21513) +* **language-service:** Clear caches when program changes ([#21337](https://github.com/angular/angular/issues/21337)) ([43e1520](https://github.com/angular/angular/commit/43e1520)), closes [#19405](https://github.com/angular/angular/issues/19405) +* **platform-browser:** add @Injectable where it was missing ([#22005](https://github.com/angular/angular/issues/22005)) ([0a1a397](https://github.com/angular/angular/commit/0a1a397)) +* **platform-browser:** support 0/false/null values in transfer_state ([#22179](https://github.com/angular/angular/issues/22179)) ([6435ecd](https://github.com/angular/angular/commit/6435ecd)) +* **platform-browser:** do not throw error when Hammer.js not loaded ([#22257](https://github.com/angular/angular/issues/22257)) ([991300b](https://github.com/angular/angular/commit/991300b)), closes [#16992](https://github.com/angular/angular/issues/16992) +* **platform-browser:** fix [#19604](https://github.com/angular/angular/issues/19604), can config hammerOptions ([#21979](https://github.com/angular/angular/issues/21979)) ([1d571b2](https://github.com/angular/angular/commit/1d571b2)) +* **platform-server:** require node v8+ ([#23331](https://github.com/angular/angular/issues/23331)) ([bbfa1d3](https://github.com/angular/angular/commit/bbfa1d3)) +* **platform-server:** generate correct stylings for camel case names ([#22263](https://github.com/angular/angular/issues/22263)) ([40ba009](https://github.com/angular/angular/commit/40ba009)), closes [#19235](https://github.com/angular/angular/issues/19235) +* **platform-server:** add styles to elements correctly ([#22527](https://github.com/angular/angular/issues/22527)) ([cd2ebd2](https://github.com/angular/angular/commit/cd2ebd2)) +* **router:** cache route handle if found ([#22475](https://github.com/angular/angular/issues/22475)) ([d8de648](https://github.com/angular/angular/commit/d8de648)), closes [#22474](https://github.com/angular/angular/issues/22474) +* **router:** don't use spread operator to workaround an issue in closure compiler ([#22884](https://github.com/angular/angular/issues/22884)) ([e6c731f](https://github.com/angular/angular/commit/e6c731f)) +* **router:** make locationSyncBootstrapListener public due to change in output after TS 2.7 update in [#22669](https://github.com/angular/angular/issues/22669) ([#22896](https://github.com/angular/angular/issues/22896)) ([623d769](https://github.com/angular/angular/commit/623d769)) +* **router:** correct over-encoding of URL fragment ([#22687](https://github.com/angular/angular/issues/22687)) ([0bf6fa5](https://github.com/angular/angular/commit/0bf6fa5)) +* **router:** don't mutate route configs ([#22358](https://github.com/angular/angular/issues/22358)) ([45eff4c](https://github.com/angular/angular/commit/45eff4c)), closes [#22203](https://github.com/angular/angular/issues/22203) +* **router:** fix URL serialization so special characters are only encoded where needed ([#22337](https://github.com/angular/angular/issues/22337)) ([094666d](https://github.com/angular/angular/commit/094666d)), closes [#10280](https://github.com/angular/angular/issues/10280) +* **router:** don't use ParamsInheritanceStrategy in declarations ([#21574](https://github.com/angular/angular/issues/21574)) ([925e654](https://github.com/angular/angular/commit/925e654)), closes [#21456](https://github.com/angular/angular/issues/21456) +* **service-worker:** add badge to NOTIFICATION_OPTION_NAMES ([#23241](https://github.com/angular/angular/issues/23241)) ([fb59b2d](https://github.com/angular/angular/commit/fb59b2d)), closes [#23196](https://github.com/angular/angular/issues/23196) +* **service-worker:** let `*` match 0 characters in globs ([#23339](https://github.com/angular/angular/issues/23339)) ([6c2c958](https://github.com/angular/angular/commit/6c2c958)) +* **service-worker:** do not enter degraded mode when offline ([#22883](https://github.com/angular/angular/issues/22883)) ([9e9b8dd](https://github.com/angular/angular/commit/9e9b8dd)), closes [#21636](https://github.com/angular/angular/issues/21636) +* **service-worker:** fix LruList bugs ([#22769](https://github.com/angular/angular/issues/22769)) ([8c2a578](https://github.com/angular/angular/commit/8c2a578)), closes [#22218](https://github.com/angular/angular/issues/22218) [#22768](https://github.com/angular/angular/issues/22768) +* **service-worker:** ignore invalid `only-if-cached` requests ([#22883](https://github.com/angular/angular/issues/22883)) ([d9dc46e](https://github.com/angular/angular/commit/d9dc46e)), closes [#22362](https://github.com/angular/angular/issues/22362) +* **service-worker:** properly handle invalid hashes in all scenarios ([#21288](https://github.com/angular/angular/issues/21288)) ([3951098](https://github.com/angular/angular/commit/3951098)) +* **upgrade:** correctly handle downgraded `OnPush` components ([#22209](https://github.com/angular/angular/issues/22209)) ([ad9ce5c](https://github.com/angular/angular/commit/ad9ce5c)), closes [#14286](https://github.com/angular/angular/issues/14286) +* **upgrade:** propagate return value of resumeBootstrap ([#22754](https://github.com/angular/angular/issues/22754)) ([a2330ff](https://github.com/angular/angular/commit/a2330ff)), closes [#22723](https://github.com/angular/angular/issues/22723) +* **upgrade:** two-way binding and listening for event ([#22772](https://github.com/angular/angular/issues/22772)) ([2b3de63](https://github.com/angular/angular/commit/2b3de63)), closes [#22734](https://github.com/angular/angular/issues/22734) +* **upgrade:** correctly destroy nested downgraded component ([#22400](https://github.com/angular/angular/issues/22400)) ([8a85888](https://github.com/angular/angular/commit/8a85888)), closes [#22392](https://github.com/angular/angular/issues/22392) +* **upgrade:** correctly handle `=` bindings in `[@angular](https://github.com/angular)/upgrade` ([#22167](https://github.com/angular/angular/issues/22167)) ([f089bf5](https://github.com/angular/angular/commit/f089bf5)) +* **upgrade:** fix empty transclusion content with AngularJS@>=1.5.8 ([#22167](https://github.com/angular/angular/issues/22167)) ([13ab91e](https://github.com/angular/angular/commit/13ab91e)), closes [#22175](https://github.com/angular/angular/issues/22175) + + + +### Possible Breaking Changes + +* **animations:** When animation is triggered within a disabled zone, the associated event (which an instance of AnimationEvent) will no longer report the totalTime as 0 (it will emit the actual time of the animation). + + To detect if an animation event is reporting a disabled animation then the `event.disabled` property can be used instead. + + +* **compiler:** The `