Compare commits
243 Commits
backup-7.2
...
7.2.3
Author | SHA1 | Date | |
---|---|---|---|
0f37ed1060 | |||
5c85b4f1e9 | |||
22bc6ef22a | |||
bf928d1c9e | |||
d11c2f915b | |||
98c99e5073 | |||
2c63108faa | |||
0ff48a1266 | |||
ea2a3f8335 | |||
cbed4851a3 | |||
7c157780a9 | |||
cc1b2a5373 | |||
5076185fc8 | |||
65375f4c21 | |||
068a6070dc | |||
47e9761a01 | |||
bef52d20b5 | |||
fe50710021 | |||
71b66fb862 | |||
8db05b408e | |||
351610ca8d | |||
ef78e33560 | |||
12b8a6e351 | |||
260ac20e92 | |||
aed48e00d2 | |||
a9d46e4952 | |||
2f19ad9b46 | |||
81678e62db | |||
cf82fbceba | |||
1d67cb0ce1 | |||
318bd83a6e | |||
f767c22b31 | |||
8346a6dca2 | |||
6397885e74 | |||
8cee56e8c5 | |||
a1b9995731 | |||
35f7ff047a | |||
4ad691a33d | |||
c5af3f8617 | |||
bc1032866c | |||
63e6d1a896 | |||
cb9fd9b4d7 | |||
d5dca0764c | |||
bcd1a09dec | |||
898c0134e7 | |||
763d2150cc | |||
beacbfcb8e | |||
f72319cf6e | |||
5877b3f702 | |||
cf310ba1fa | |||
c2d2953ee4 | |||
5c5fe34241 | |||
32737a6bf7 | |||
7642308c14 | |||
f1c08d83b0 | |||
617412f9c3 | |||
cf716684a9 | |||
54565ed389 | |||
ab08385336 | |||
eb8ccf65d1 | |||
cb93027f32 | |||
607fd8e970 | |||
f4ac96d0ff | |||
1c7d156abd | |||
4c00059260 | |||
93d78c9c51 | |||
49bee4c0d8 | |||
d8c75f1bb0 | |||
6d40ef2d6b | |||
4ea6c27dcf | |||
a4d9192fbc | |||
7b772e93a3 | |||
05168395b0 | |||
03293c4fec | |||
479019f457 | |||
68515818b9 | |||
8bc369f828 | |||
3d1a4d5cc3 | |||
5c56b778e0 | |||
585e871c96 | |||
6ae7aee2c3 | |||
701270d039 | |||
02a852a34a | |||
531f940212 | |||
de80f1b6dd | |||
ca3965afe0 | |||
f269e433a7 | |||
8750b09fca | |||
ea2eef737b | |||
0ceab97a03 | |||
fbbdaaacc0 | |||
080de58a88 | |||
5390948360 | |||
0d860051af | |||
edbba24b60 | |||
6ae8d7691d | |||
af3cf36ce9 | |||
1be2f11965 | |||
495ce325b2 | |||
92411043d1 | |||
aa3f75b3c9 | |||
d64aadf57a | |||
51f7f081a3 | |||
b9fd62413f | |||
c5664bf245 | |||
c66a076614 | |||
28d34b699d | |||
47840bee71 | |||
305331f634 | |||
5e6c24cb01 | |||
0ec4e1372a | |||
84c1bad3a1 | |||
1640832f56 | |||
8ab036262d | |||
76e8c0ac7b | |||
0e81e418fb | |||
60255b68c0 | |||
ae7b3c8d45 | |||
9556ba7bca | |||
80994b25b9 | |||
2f154b980f | |||
342d352a00 | |||
f240ae5084 | |||
e4fc8bad35 | |||
5c680d4aa8 | |||
f05c5f82c8 | |||
2e0c58ec3e | |||
21093b9090 | |||
a6153accf0 | |||
dee789c204 | |||
12dd552fcd | |||
079bcffe07 | |||
30256e8fe8 | |||
8ee69831fc | |||
c3d8e2888d | |||
bea677136b | |||
11728bbbd9 | |||
1da4b03940 | |||
54ba0f021f | |||
836a5c72a0 | |||
f589933440 | |||
ef3ec34aa3 | |||
37a6d2d033 | |||
354f3639bb | |||
c4b06868b1 | |||
e3853e842e | |||
aee5cbd057 | |||
e9614eff1a | |||
80f9f7e8ef | |||
7d2589556f | |||
468fcab59d | |||
f720e972d4 | |||
b51ae7e59a | |||
eedb06936f | |||
ee5a094424 | |||
9773b5a173 | |||
eed171839e | |||
1057b52def | |||
302506e940 | |||
cc35feb445 | |||
21b875d4d0 | |||
dac9c09235 | |||
5cba438eb5 | |||
2b001cb2b1 | |||
0be8487f09 | |||
e1e69ca828 | |||
f376c46d78 | |||
fad4145f48 | |||
6b394f62be | |||
16aad8b2d8 | |||
25bbcbcbe5 | |||
0efbb37381 | |||
6b0c1a71fa | |||
4c9aff5695 | |||
224d78765f | |||
7adcbb320f | |||
e7f43386a6 | |||
411de252d7 | |||
b61dafaeac | |||
929334b0bf | |||
fb7816fed4 | |||
5d3dcfc6ad | |||
0bd9deb9f5 | |||
13d23f315b | |||
48555f95c6 | |||
d026b675be | |||
7eb2c41fb2 | |||
3f2ebbd7ab | |||
38b4d15227 | |||
176b3f12f4 | |||
8a05199fb9 | |||
51a0bd2e75 | |||
1b0b36d143 | |||
e268a0579a | |||
1f1e77b641 | |||
880b4aabdb | |||
5fee444fea | |||
1e6c9be86c | |||
a9790018df | |||
1dc95c41eb | |||
a0a3648e7a | |||
7df9040c05 | |||
5638c1d507 | |||
755c8091af | |||
59f64dd361 | |||
27431e0e1e | |||
b7d0ab7de3 | |||
460be795cf | |||
c4f7727408 | |||
d1de9ff313 | |||
707c6828b5 | |||
3f64e87ed1 | |||
62e45cef2d | |||
c34eee4e8e | |||
9b91beed69 | |||
eea2b0f288 | |||
13eb57a59f | |||
0b3ae3d70c | |||
4b67b0af3e | |||
bba5e2632e | |||
c5ce4e62c6 | |||
509aa61619 | |||
cdd737e28b | |||
5da55d6246 | |||
50a91ba28c | |||
077a5fb04b | |||
bc0ee01d09 | |||
326b464d20 | |||
8a7498e0ef | |||
07ada7f3d9 | |||
880e8a5cfc | |||
a0585c9a9a | |||
a833b98fd0 | |||
4b70a4e905 | |||
f2a1c66031 | |||
cfb8c17511 | |||
99d0e27587 | |||
b08f3acf09 | |||
3ab25ab078 | |||
0604527199 | |||
8f8572fd3e | |||
e8f7241366 | |||
a20b2f72f2 |
22
.bazelrc
22
.bazelrc
@ -22,12 +22,18 @@ test:debug --test_arg=--node_options=--inspect-brk --test_output=streamed --test
|
|||||||
# Filesystem interactions #
|
# Filesystem interactions #
|
||||||
###############################
|
###############################
|
||||||
|
|
||||||
# Don't create symlinks like bazel-out in the project.
|
# Create symlinks in the project:
|
||||||
# These cause VSCode to traverse a massive tree, opening file handles and
|
# - dist/bin for outputs
|
||||||
|
# - dist/testlogs, dist/genfiles
|
||||||
|
# - bazel-out
|
||||||
|
# NB: bazel-out should be excluded from the editor configuration.
|
||||||
|
# The checked-in /.vscode/settings.json does this for VSCode.
|
||||||
|
# Other editors may require manual config to ignore this directory.
|
||||||
|
# In the past, we say a problem where VSCode traversed a massive tree, opening file handles and
|
||||||
# eventually a surprising failure with auto-discovery of the C++ toolchain in
|
# eventually a surprising failure with auto-discovery of the C++ toolchain in
|
||||||
# MacOS High Sierra.
|
# MacOS High Sierra.
|
||||||
# See https://github.com/bazelbuild/bazel/issues/4603
|
# See https://github.com/bazelbuild/bazel/issues/4603
|
||||||
build --symlink_prefix=/
|
build --symlink_prefix=dist/
|
||||||
|
|
||||||
# Performance: avoid stat'ing input files
|
# Performance: avoid stat'ing input files
|
||||||
build --watchfs
|
build --watchfs
|
||||||
@ -36,6 +42,16 @@ build --watchfs
|
|||||||
run --nolegacy_external_runfiles
|
run --nolegacy_external_runfiles
|
||||||
test --nolegacy_external_runfiles
|
test --nolegacy_external_runfiles
|
||||||
|
|
||||||
|
# Turn on --incompatible_strict_action_env which was on by default
|
||||||
|
# in Bazel 0.21.0 but turned off again in 0.22.0. Follow
|
||||||
|
# https://github.com/bazelbuild/bazel/issues/7026 for more details.
|
||||||
|
# This flag is needed to so that the bazel cache is not invalidated
|
||||||
|
# when running bazel via `yarn bazel`.
|
||||||
|
# See https://github.com/angular/angular/issues/27514.
|
||||||
|
build --incompatible_strict_action_env
|
||||||
|
run --incompatible_strict_action_env
|
||||||
|
test --incompatible_strict_action_env
|
||||||
|
|
||||||
###############################
|
###############################
|
||||||
# Release support #
|
# Release support #
|
||||||
# Turn on these settings with #
|
# Turn on these settings with #
|
||||||
|
4
.gitignore
vendored
4
.gitignore
vendored
@ -1,7 +1,7 @@
|
|||||||
.DS_STORE
|
.DS_STORE
|
||||||
|
|
||||||
/dist/
|
/dist/
|
||||||
/bazel-*
|
/bazel-out/
|
||||||
/integration/bazel/bazel-*
|
/integration/bazel/bazel-*
|
||||||
e2e_test.*
|
e2e_test.*
|
||||||
node_modules
|
node_modules
|
||||||
@ -13,9 +13,9 @@ pubspec.lock
|
|||||||
.c9
|
.c9
|
||||||
.idea/
|
.idea/
|
||||||
.settings/
|
.settings/
|
||||||
|
.vscode/launch.json
|
||||||
*.swo
|
*.swo
|
||||||
modules/.settings
|
modules/.settings
|
||||||
.vscode
|
|
||||||
modules/.vscode
|
modules/.vscode
|
||||||
|
|
||||||
# Don't check in secret files
|
# Don't check in secret files
|
||||||
|
15
.vscode/settings.json
vendored
Normal file
15
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"files.watcherExclude": {
|
||||||
|
"**/.git/objects/**": true,
|
||||||
|
"**/.git/subtree-cache/**": true,
|
||||||
|
"**/node_modules/**": true,
|
||||||
|
"**/bazel-out/**": true,
|
||||||
|
"**/dist/**": true,
|
||||||
|
},
|
||||||
|
"search.exclude": {
|
||||||
|
"**/node_modules": true,
|
||||||
|
"**/bower_components": true,
|
||||||
|
"**/bazel-out": true,
|
||||||
|
"**/dist": true,
|
||||||
|
},
|
||||||
|
}
|
62
CHANGELOG.md
62
CHANGELOG.md
@ -1,3 +1,65 @@
|
|||||||
|
<a name="7.2.3"></a>
|
||||||
|
## [7.2.3](https://github.com/angular/angular/compare/7.2.2...7.2.3) (2019-01-30)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **bazel:** add [@npm](https://github.com/npm)//tslib dep to e2e ts_library target in bazel-workspace schematic ([#28358](https://github.com/angular/angular/issues/28358)) ([8cee56e](https://github.com/angular/angular/commit/8cee56e))
|
||||||
|
* **bazel:** Bazel-workspace schematics should run in ScopedTree ([#28349](https://github.com/angular/angular/issues/28349)) ([260ac20](https://github.com/angular/angular/commit/260ac20))
|
||||||
|
* **bazel:** Builder should invoke local bazel/iblaze ([#28303](https://github.com/angular/angular/issues/28303)) ([12b8a6e](https://github.com/angular/angular/commit/12b8a6e))
|
||||||
|
* **bazel:** ng-new should run yarn install ([#28381](https://github.com/angular/angular/issues/28381)) ([a9d46e4](https://github.com/angular/angular/commit/a9d46e4))
|
||||||
|
|
||||||
|
|
||||||
|
### Performance Improvements
|
||||||
|
|
||||||
|
* yarn version upgrade ([#28360](https://github.com/angular/angular/issues/28360)) ([cc1b2a5](https://github.com/angular/angular/commit/cc1b2a5))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="7.2.2"></a>
|
||||||
|
## [7.2.2](https://github.com/angular/angular/compare/7.2.1...7.2.2) (2019-01-22)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **bazel:** Fix integration test after v8 bump ([#28194](https://github.com/angular/angular/issues/28194)) ([7b772e9](https://github.com/angular/angular/commit/7b772e9)), closes [#28142](https://github.com/angular/angular/issues/28142)
|
||||||
|
* **router:** `skipLocationChange` with named outlets ([#28301](https://github.com/angular/angular/issues/28301)) ([32737a6](https://github.com/angular/angular/commit/32737a6)), closes [#27680](https://github.com/angular/angular/issues/27680) [#28200](https://github.com/angular/angular/issues/28200)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **bazel:** Add support for SASS ([#28167](https://github.com/angular/angular/issues/28167)) ([a4d9192](https://github.com/angular/angular/commit/a4d9192))
|
||||||
|
* **compiler-cli:** resolve generated Sass/Less files to .css inputs ([#28166](https://github.com/angular/angular/issues/28166)) ([4c00059](https://github.com/angular/angular/commit/4c00059))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="7.2.1"></a>
|
||||||
|
## [7.2.1](https://github.com/angular/angular/compare/7.2.0...7.2.1) (2019-01-16)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **bazel:** Add [@bazel](https://github.com/bazel)/bazel to dev deps ([#28032](https://github.com/angular/angular/issues/28032)) ([21093b9](https://github.com/angular/angular/commit/21093b9))
|
||||||
|
* **bazel:** Add /bazel-out to .gitignore ([#27874](https://github.com/angular/angular/issues/27874)) ([e4fc8ba](https://github.com/angular/angular/commit/e4fc8ba))
|
||||||
|
* **bazel:** Add ibazel to deps of Bazel project ([#28090](https://github.com/angular/angular/issues/28090)) ([28d34b6](https://github.com/angular/angular/commit/28d34b6))
|
||||||
|
* **bazel:** Bazel schematics should add router package ([#28141](https://github.com/angular/angular/issues/28141)) ([02a852a](https://github.com/angular/angular/commit/02a852a))
|
||||||
|
* **bazel:** flat module misses AMD module name on windows ([#27839](https://github.com/angular/angular/issues/27839)) ([c3d8e28](https://github.com/angular/angular/commit/c3d8e28))
|
||||||
|
* **bazel:** incorrectly always uses ngc-wrapped from "npm" workspace ([#28137](https://github.com/angular/angular/issues/28137)) ([ca3965a](https://github.com/angular/angular/commit/ca3965a))
|
||||||
|
* **bazel:** ng_package creates invalid typings reexport on windows ([#27829](https://github.com/angular/angular/issues/27829)) ([6b394f6](https://github.com/angular/angular/commit/6b394f6))
|
||||||
|
* **bazel:** packager not properly removing amd directives on windows ([#27829](https://github.com/angular/angular/issues/27829)) ([fad4145](https://github.com/angular/angular/commit/fad4145))
|
||||||
|
* **bazel:** protractor rule does not run spec files with underscore ([#28022](https://github.com/angular/angular/issues/28022)) ([f05c5f8](https://github.com/angular/angular/commit/f05c5f8))
|
||||||
|
* **bazel:** protractor utils cannot start server on windows ([#27915](https://github.com/angular/angular/issues/27915)) ([0be8487](https://github.com/angular/angular/commit/0be8487))
|
||||||
|
* **bazel:** replay compilation uses wrong compiler for building esm5 ([#28053](https://github.com/angular/angular/issues/28053)) ([fbbdaaa](https://github.com/angular/angular/commit/fbbdaaa))
|
||||||
|
* **router:** ensure URL is updated after second redirect with UrlUpdateStrategy="eager" ([#27680](https://github.com/angular/angular/issues/27680)) ([6ae7aee](https://github.com/angular/angular/commit/6ae7aee)), closes [#27116](https://github.com/angular/angular/issues/27116)
|
||||||
|
* **service-worker:** navigation urls backwards compatibility ([#27244](https://github.com/angular/angular/issues/27244)) ([585e871](https://github.com/angular/angular/commit/585e871))
|
||||||
|
|
||||||
|
|
||||||
|
### Performance Improvements
|
||||||
|
|
||||||
|
* **platform-server:** use shared `DomElementSchemaRegistry` instance ([#28150](https://github.com/angular/angular/issues/28150)) ([#28151](https://github.com/angular/angular/issues/28151)) ([6851581](https://github.com/angular/angular/commit/6851581))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="7.2.0"></a>
|
<a name="7.2.0"></a>
|
||||||
# [7.2.0](https://github.com/angular/angular/compare/7.1.4...7.2.0) (2019-01-07)
|
# [7.2.0](https://github.com/angular/angular/compare/7.1.4...7.2.0) (2019-01-07)
|
||||||
|
|
||||||
|
@ -62,8 +62,8 @@ local_repository(
|
|||||||
load("@build_bazel_rules_nodejs//:defs.bzl", "check_bazel_version", "node_repositories", "yarn_install")
|
load("@build_bazel_rules_nodejs//:defs.bzl", "check_bazel_version", "node_repositories", "yarn_install")
|
||||||
|
|
||||||
# Bazel version must be at least v0.21.0 because:
|
# Bazel version must be at least v0.21.0 because:
|
||||||
# - 0.21.0 --experimental_strict_action_env flag turned on by default which fixes cache when
|
# - 0.21.0 Using --incompatible_strict_action_env flag fixes cache when running `yarn bazel`
|
||||||
# running `yarn bazel` (see https://github.com/angular/angular/issues/27514#issuecomment-451438271)
|
# (see https://github.com/angular/angular/issues/27514#issuecomment-451438271)
|
||||||
check_bazel_version("0.21.0", """
|
check_bazel_version("0.21.0", """
|
||||||
You no longer need to install Bazel on your machine.
|
You no longer need to install Bazel on your machine.
|
||||||
Angular has a dependency on the @bazel/bazel package which supplies it.
|
Angular has a dependency on the @bazel/bazel package which supplies it.
|
||||||
|
@ -26,8 +26,8 @@ ARG AIO_GITHUB_ORGANIZATION=angular
|
|||||||
ARG TEST_AIO_GITHUB_ORGANIZATION=test-org
|
ARG TEST_AIO_GITHUB_ORGANIZATION=test-org
|
||||||
ARG AIO_GITHUB_REPO=angular
|
ARG AIO_GITHUB_REPO=angular
|
||||||
ARG TEST_AIO_GITHUB_REPO=test-repo
|
ARG TEST_AIO_GITHUB_REPO=test-repo
|
||||||
ARG AIO_GITHUB_TEAM_SLUGS=team,aio-contributors
|
ARG AIO_GITHUB_TEAM_SLUGS=aio-contributors
|
||||||
ARG TEST_AIO_GITHUB_TEAM_SLUGS=team,aio-contributors
|
ARG TEST_AIO_GITHUB_TEAM_SLUGS=aio-contributors
|
||||||
ARG AIO_NGINX_HOSTNAME=$AIO_DOMAIN_NAME
|
ARG AIO_NGINX_HOSTNAME=$AIO_DOMAIN_NAME
|
||||||
ARG TEST_AIO_NGINX_HOSTNAME=$TEST_AIO_DOMAIN_NAME
|
ARG TEST_AIO_NGINX_HOSTNAME=$TEST_AIO_DOMAIN_NAME
|
||||||
ARG AIO_NGINX_PORT_HTTP=80
|
ARG AIO_NGINX_PORT_HTTP=80
|
||||||
|
@ -16,7 +16,7 @@ const ITEMS: Item[] = [
|
|||||||
|
|
||||||
const FETCH_LATENCY = 500;
|
const FETCH_LATENCY = 500;
|
||||||
|
|
||||||
/** Simulate a data service that retrieves crises from a server */
|
/** Simulate a data service that retrieves items from a server */
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class ItemService implements OnDestroy {
|
export class ItemService implements OnDestroy {
|
||||||
|
|
||||||
|
@ -1508,7 +1508,7 @@ done manually.
|
|||||||
|
|
||||||
When `true`, this option tells the compiler not to check the TypeScript version.
|
When `true`, this option tells the compiler not to check the TypeScript version.
|
||||||
The compiler will skip checking and will not error out when an unsupported version of TypeScript is used.
|
The compiler will skip checking and will not error out when an unsupported version of TypeScript is used.
|
||||||
Setting this option to `true` is not recommended because unsupported versions of TypeScript might have undefined behaviour.
|
Setting this option to `true` is not recommended because unsupported versions of TypeScript might have undefined behavior.
|
||||||
|
|
||||||
This option is `false` by default.
|
This option is `false` by default.
|
||||||
|
|
||||||
|
@ -273,8 +273,8 @@ The CLI uses [Autoprefixer](https://github.com/postcss/autoprefixer) to ensure c
|
|||||||
You may find it necessary to target specific browsers or exclude certain browser versions from your build.
|
You may find it necessary to target specific browsers or exclude certain browser versions from your build.
|
||||||
|
|
||||||
Internally, Autoprefixer relies on a library called [Browserslist](https://github.com/browserslist/browserslist) to figure out which browsers to support with prefixing.
|
Internally, Autoprefixer relies on a library called [Browserslist](https://github.com/browserslist/browserslist) to figure out which browsers to support with prefixing.
|
||||||
Browserlist looks for configuration options in a `browserlist` property of the package configuration file, or in a configuration file named `.browserslistrc`.
|
Browserlist looks for configuration options in a `browserslist` property of the package configuration file, or in a configuration file named `.browserslistrc`.
|
||||||
Autoprefixer looks for the Browserlist configuration when it prefixes your CSS.
|
Autoprefixer looks for the `browserslist` configuration when it prefixes your CSS.
|
||||||
|
|
||||||
* You can tell Autoprefixer what browsers to target by adding a browserslist property to the package configuration file, `package.json`:
|
* You can tell Autoprefixer what browsers to target by adding a browserslist property to the package configuration file, `package.json`:
|
||||||
```
|
```
|
||||||
|
@ -53,7 +53,7 @@ Workspace-wide `node_modules` dependencies are visible to this project.
|
|||||||
| `app/` | Contains the component files in which your app logic and data are defined. See details in [App source folder](#app-src) below. |
|
| `app/` | Contains the component files in which your app logic and data are defined. See details in [App source folder](#app-src) below. |
|
||||||
| `assets/` | Contains image files and other asset files to be copied as-is when you build your application. |
|
| `assets/` | Contains image files and other asset files to be copied as-is when you build your application. |
|
||||||
| `environments/` | Contains build configuration options for particular target environments. By default there is an unnamed standard development environment and a production ("prod") environment. You can define additional target environment configurations. |
|
| `environments/` | Contains build configuration options for particular target environments. By default there is an unnamed standard development environment and a production ("prod") environment. You can define additional target environment configurations. |
|
||||||
| `browserlist` | Configures sharing of target browsers and Node.js versions among various front-end tools. See [Browserlist on GitHub](https://github.com/browserslist/browserslist) for more information. |
|
| `browserslist` | Configures sharing of target browsers and Node.js versions among various front-end tools. See [Browserslist on GitHub](https://github.com/browserslist/browserslist) for more information. |
|
||||||
| `favicon.ico` | An icon to use for this app in the bookmark bar. |
|
| `favicon.ico` | An icon to use for this app in the bookmark bar. |
|
||||||
| `index.html` | The main HTML page that is served when someone visits your site. The CLI automatically adds all JavaScript and CSS files when building your app, so you typically don't need to add any `<script>` or` <link>` tags here manually. |
|
| `index.html` | The main HTML page that is served when someone visits your site. The CLI automatically adds all JavaScript and CSS files when building your app, so you typically don't need to add any `<script>` or` <link>` tags here manually. |
|
||||||
| `main.ts` | The main entry point for your app. Compiles the application with the [JIT compiler](https://angular.io/guide/glossary#jit) and bootstraps the application's root module (AppModule) to run in the browser. You can also use the [AOT compiler](https://angular.io/guide/aot-compiler) without changing any code by appending the `--aot` flag to the CLI `build` and `serve` commands. |
|
| `main.ts` | The main entry point for your app. Compiles the application with the [JIT compiler](https://angular.io/guide/glossary#jit) and bootstraps the application's root module (AppModule) to run in the browser. You can also use the [AOT compiler](https://angular.io/guide/aot-compiler) without changing any code by appending the `--aot` flag to the CLI `build` and `serve` commands. |
|
||||||
|
@ -124,7 +124,7 @@ calls the lifecycle hook methods in the following sequence at specific moments:
|
|||||||
|
|
||||||
Respond after Angular checks the component's views and child views / the view that a directive is in.
|
Respond after Angular checks the component's views and child views / the view that a directive is in.
|
||||||
|
|
||||||
Called after the `ngAfterViewInit` and every subsequent `ngAfterContentChecked()`.
|
Called after the `ngAfterViewInit()` and every subsequent `ngAfterContentChecked()`.
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
@ -3796,7 +3796,7 @@ The relevant *Crisis Center* code for this milestone follows.
|
|||||||
|
|
||||||
</code-pane>
|
</code-pane>
|
||||||
|
|
||||||
<code-pane header="crisis-detail.component.html" path="router/src/app/crisis-center/crisis-detail/crisis-detail.component.html">
|
<code-pane header="crisis-detail.component.ts" path="router/src/app/crisis-center/crisis-detail/crisis-detail.component.ts">
|
||||||
|
|
||||||
</code-pane>
|
</code-pane>
|
||||||
|
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 9.2 KiB After Width: | Height: | Size: 154 KiB |
@ -698,5 +698,13 @@
|
|||||||
"website": "https://brianflove.com",
|
"website": "https://brianflove.com",
|
||||||
"bio": "Brian is a software engineer and GDE in Angular with a passion for learning, writing, speaking, teaching and mentoring. Brian has been building web applications for over 20 years and has long been a fanboy of JavaScript. When not in front of his Macbook Pro Brian is in the Rocky Mountains skiing or hiking.",
|
"bio": "Brian is a software engineer and GDE in Angular with a passion for learning, writing, speaking, teaching and mentoring. Brian has been building web applications for over 20 years and has long been a fanboy of JavaScript. When not in front of his Macbook Pro Brian is in the Rocky Mountains skiing or hiking.",
|
||||||
"group": "GDE"
|
"group": "GDE"
|
||||||
|
},
|
||||||
|
"jeffbcross": {
|
||||||
|
"name": "Jeff Cross",
|
||||||
|
"picture": "jeff-cross.jpg",
|
||||||
|
"twitter": "jeffbcross",
|
||||||
|
"website": "https://nrwl.io/",
|
||||||
|
"bio": "Jeff is an Angular Consultant at nrwl.io where he helps enterprise teams succeed with Angular. Prior to founding Nrwl, Jeff was one of the earliest members of the Angular Core Team at Google, and contributed to many of the early state management and performance efforts of AngularJS and Angular.",
|
||||||
|
"group": "GDE"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,12 @@
|
|||||||
<td>Atlanta, Georgia</td>
|
<td>Atlanta, Georgia</td>
|
||||||
<td>January 9 - 12, 2019</td>
|
<td>January 9 - 12, 2019</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<!-- ng-India 2019-->
|
||||||
|
<tr>
|
||||||
|
<th><a href="https://www.ng-ind.com/" title="ng-India">ng-India</a></th>
|
||||||
|
<td>Gurgaon, India</td>
|
||||||
|
<td>February 23, 2019</td>
|
||||||
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
<div class="feature-section">
|
<div class="feature-section">
|
||||||
<div class="feature-header">
|
<div class="feature-header">
|
||||||
<div class="text-headline">Cross Platform</div>
|
<div class="text-headline">Cross Platform</div>
|
||||||
<img src="generated/images/marketing/features/feature-icon.svg" height="70px">
|
<img src="generated/images/marketing/features/feature-icon.svg" height="70px" alt="">
|
||||||
</div>
|
</div>
|
||||||
<div class="feature-row">
|
<div class="feature-row">
|
||||||
|
|
||||||
@ -34,7 +34,7 @@
|
|||||||
<div class="feature-section">
|
<div class="feature-section">
|
||||||
<div class="feature-header">
|
<div class="feature-header">
|
||||||
<div class="text-headline">Speed and Performance</div>
|
<div class="text-headline">Speed and Performance</div>
|
||||||
<img src="generated/images/marketing/features/feature-icon.svg" height="70px">
|
<img src="generated/images/marketing/features/feature-icon.svg" height="70px" alt="">
|
||||||
</div>
|
</div>
|
||||||
<div class="feature-row">
|
<div class="feature-row">
|
||||||
|
|
||||||
@ -59,7 +59,7 @@
|
|||||||
<div class="feature-section">
|
<div class="feature-section">
|
||||||
<div class="feature-header">
|
<div class="feature-header">
|
||||||
<div class="text-headline">Productivity</div>
|
<div class="text-headline">Productivity</div>
|
||||||
<img src="generated/images/marketing/features/feature-icon.svg" height="70px">
|
<img src="generated/images/marketing/features/feature-icon.svg" height="70px" alt="">
|
||||||
</div>
|
</div>
|
||||||
<div class="feature-row">
|
<div class="feature-row">
|
||||||
|
|
||||||
@ -84,7 +84,7 @@
|
|||||||
<div class="feature-section">
|
<div class="feature-section">
|
||||||
<div class="feature-header">
|
<div class="feature-header">
|
||||||
<div class="text-headline">Full Development Story</div>
|
<div class="text-headline">Full Development Story</div>
|
||||||
<img src="generated/images/marketing/features/feature-icon.svg" height="70px">
|
<img src="generated/images/marketing/features/feature-icon.svg" height="70px" alt="">
|
||||||
</div>
|
</div>
|
||||||
<div class="feature-row">
|
<div class="feature-row">
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
<!-- LOGO -->
|
<!-- LOGO -->
|
||||||
<div class="hero-logo">
|
<div class="hero-logo">
|
||||||
<img src="assets/images/logos/angular/angular.svg"/>
|
<img src="assets/images/logos/angular/angular.svg" alt="Angular"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- CONTAINER -->
|
<!-- CONTAINER -->
|
||||||
@ -104,7 +104,7 @@
|
|||||||
<div layout="row" layout-xs="column" class="home-row">
|
<div layout="row" layout-xs="column" class="home-row">
|
||||||
<a href="guide/quickstart">
|
<a href="guide/quickstart">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<img src="generated/images/marketing/home/code-icon.svg" height="70px">
|
<img src="generated/images/marketing/home/code-icon.svg" height="70px" alt="Angular quickstart">
|
||||||
<div class="card-text-container">
|
<div class="card-text-container">
|
||||||
<div class="text-headline">Get Started</div>
|
<div class="text-headline">Get Started</div>
|
||||||
<p>Start building your Angular application.</p>
|
<p>Start building your Angular application.</p>
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
<div class="presskit-row">
|
<div class="presskit-row">
|
||||||
<div class="presskit-inner">
|
<div class="presskit-inner">
|
||||||
<div class="presskit-image-container">
|
<div class="presskit-image-container">
|
||||||
<img src="assets/images/logos/angular/angular.svg" alt="Angular">
|
<img src="assets/images/logos/angular/angular.svg" alt="Full color logo Angular">
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<h3 class="l-space-left-3">FULL COLOR LOGO</h3>
|
<h3 class="l-space-left-3">FULL COLOR LOGO</h3>
|
||||||
@ -40,7 +40,7 @@
|
|||||||
<div class="presskit-inner">
|
<div class="presskit-inner">
|
||||||
<div class="presskit-image-container">
|
<div class="presskit-image-container">
|
||||||
<div>
|
<div>
|
||||||
<img src="assets/images/logos/angular/angular_solidBlack.svg">
|
<img src="assets/images/logos/angular/angular_solidBlack.svg" alt="Black logo Angular">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
@ -61,7 +61,7 @@
|
|||||||
<div class="presskit-inner">
|
<div class="presskit-inner">
|
||||||
<div class="presskit-image-container">
|
<div class="presskit-image-container">
|
||||||
<div>
|
<div>
|
||||||
<img src="assets/images/logos/angular/angular_whiteTransparent.svg" class="transparent-img-bg">
|
<img src="assets/images/logos/angular/angular_whiteTransparent.svg" class="transparent-img-bg" alt="Transparent logo Angular">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
|
@ -753,6 +753,10 @@
|
|||||||
{
|
{
|
||||||
"title": "日本語版",
|
"title": "日本語版",
|
||||||
"url": "https://angular.jp/"
|
"url": "https://angular.jp/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "한국어",
|
||||||
|
"url": "https://angular.kr/"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -112,7 +112,7 @@ Inject `HttpClient` into the constructor in a private property called `http`.
|
|||||||
</code-example>
|
</code-example>
|
||||||
|
|
||||||
Keep injecting the `MessageService`. You'll call it so frequently that
|
Keep injecting the `MessageService`. You'll call it so frequently that
|
||||||
you'll wrap it in private `log` method.
|
you'll wrap it in a private `log()` method.
|
||||||
|
|
||||||
<code-example
|
<code-example
|
||||||
path="toh-pt6/src/app/hero.service.ts"
|
path="toh-pt6/src/app/hero.service.ts"
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
"build": "yarn ~~build",
|
"build": "yarn ~~build",
|
||||||
"prebuild-local": "yarn setup-local",
|
"prebuild-local": "yarn setup-local",
|
||||||
"build-local": "yarn ~~build",
|
"build-local": "yarn ~~build",
|
||||||
"extract-cli-command-docs": "node tools/transforms/cli-docs-package/extract-cli-commands.js 02d2ec250",
|
"extract-cli-command-docs": "node tools/transforms/cli-docs-package/extract-cli-commands.js 699743282",
|
||||||
"lint": "yarn check-env && yarn docs-lint && ng lint && yarn example-lint && yarn tools-lint",
|
"lint": "yarn check-env && yarn docs-lint && ng lint && yarn example-lint && yarn tools-lint",
|
||||||
"test": "yarn check-env && ng test",
|
"test": "yarn check-env && ng test",
|
||||||
"pree2e": "yarn check-env && yarn update-webdriver",
|
"pree2e": "yarn check-env && yarn update-webdriver",
|
||||||
@ -71,7 +71,7 @@
|
|||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=10.9.0 <11.0.0",
|
"node": ">=10.9.0 <11.0.0",
|
||||||
"yarn": ">=1.10.1 <1.13.0"
|
"yarn": ">=1.10.1 <1.14.0"
|
||||||
},
|
},
|
||||||
"private": true,
|
"private": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@ -107,7 +107,7 @@
|
|||||||
"canonical-path": "1.0.0",
|
"canonical-path": "1.0.0",
|
||||||
"chalk": "^2.1.0",
|
"chalk": "^2.1.0",
|
||||||
"cjson": "^0.5.0",
|
"cjson": "^0.5.0",
|
||||||
"codelyzer": "~4.2.1",
|
"codelyzer": "~4.5.0",
|
||||||
"cross-spawn": "^5.1.0",
|
"cross-spawn": "^5.1.0",
|
||||||
"css-selector-parser": "^1.3.0",
|
"css-selector-parser": "^1.3.0",
|
||||||
"dgeni": "^0.4.11",
|
"dgeni": "^0.4.11",
|
||||||
|
@ -9,7 +9,7 @@ const SRC_DIR = resolve(__dirname, '../src');
|
|||||||
const DIST_DIR = resolve(__dirname, '../dist');
|
const DIST_DIR = resolve(__dirname, '../dist');
|
||||||
|
|
||||||
// Run
|
// Run
|
||||||
_main(process.argv.slice(2));
|
_main();
|
||||||
|
|
||||||
// Functions - Definitions
|
// Functions - Definitions
|
||||||
function _main() {
|
function _main() {
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
|
|
||||||
<mat-sidenav-container class="sidenav-container mat-drawer-container mat-sidenav-container" role="main">
|
<mat-sidenav-container class="sidenav-container mat-drawer-container mat-sidenav-container" role="main">
|
||||||
<mat-sidenav-content class="mat-drawer-content mat-sidenav-content">
|
<mat-sidenav-content class="mat-drawer-content mat-sidenav-content">
|
||||||
<section class="sidenav-content" role="content">
|
<section class="sidenav-content" role="article">
|
||||||
<aio-doc-viewer>
|
<aio-doc-viewer>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<div class="nf-container l-flex-wrap flex-center">
|
<div class="nf-container l-flex-wrap flex-center">
|
||||||
|
@ -52,7 +52,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</mat-sidenav>
|
</mat-sidenav>
|
||||||
|
|
||||||
<section class="sidenav-content" [id]="pageId" role="content">
|
<main class="sidenav-content" [id]="pageId" role="main">
|
||||||
<aio-mode-banner [mode]="deployment.mode" [version]="versionInfo"></aio-mode-banner>
|
<aio-mode-banner [mode]="deployment.mode" [version]="versionInfo"></aio-mode-banner>
|
||||||
<aio-doc-viewer [class.no-animations]="isStarting"
|
<aio-doc-viewer [class.no-animations]="isStarting"
|
||||||
[doc]="currentDocument"
|
[doc]="currentDocument"
|
||||||
@ -62,7 +62,7 @@
|
|||||||
(docRendered)="onDocRendered()">
|
(docRendered)="onDocRendered()">
|
||||||
</aio-doc-viewer>
|
</aio-doc-viewer>
|
||||||
<aio-dt [on]="dtOn" [(doc)]="currentDocument"></aio-dt>
|
<aio-dt [on]="dtOn" [(doc)]="currentDocument"></aio-dt>
|
||||||
</section>
|
</main>
|
||||||
|
|
||||||
</mat-sidenav-container>
|
</mat-sidenav-container>
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@ describe('AppComponent', () => {
|
|||||||
await newDocPromise; // Wait for the new document to be fetched.
|
await newDocPromise; // Wait for the new document to be fetched.
|
||||||
fixture.detectChanges(); // Propagate document change to the view (i.e to `DocViewer`).
|
fixture.detectChanges(); // Propagate document change to the view (i.e to `DocViewer`).
|
||||||
await docRenderedPromise; // Wait for the `docRendered` event.
|
await docRenderedPromise; // Wait for the `docRendered` event.
|
||||||
};
|
}
|
||||||
|
|
||||||
function initializeTest(waitForDoc = true) {
|
function initializeTest(waitForDoc = true) {
|
||||||
fixture = TestBed.createComponent(AppComponent);
|
fixture = TestBed.createComponent(AppComponent);
|
||||||
@ -73,7 +73,7 @@ describe('AppComponent', () => {
|
|||||||
tocService = de.injector.get<TocService>(TocService);
|
tocService = de.injector.get<TocService>(TocService);
|
||||||
|
|
||||||
return waitForDoc && awaitDocRendered();
|
return waitForDoc && awaitDocRendered();
|
||||||
};
|
}
|
||||||
|
|
||||||
|
|
||||||
describe('with proper DocViewer', () => {
|
describe('with proper DocViewer', () => {
|
||||||
@ -169,6 +169,13 @@ describe('AppComponent', () => {
|
|||||||
|
|
||||||
expect(component.tocMaxHeight).toMatch(/^\d+\.\d{2}$/);
|
expect(component.tocMaxHeight).toMatch(/^\d+\.\d{2}$/);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should update `scrollService.updateScrollPositonInHistory()`', () => {
|
||||||
|
const scrollService = fixture.debugElement.injector.get<ScrollService>(ScrollService);
|
||||||
|
spyOn(scrollService, 'updateScrollPositionInHistory');
|
||||||
|
component.onScroll();
|
||||||
|
expect(scrollService.updateScrollPositionInHistory).toHaveBeenCalled();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('SideNav', () => {
|
describe('SideNav', () => {
|
||||||
@ -461,11 +468,15 @@ describe('AppComponent', () => {
|
|||||||
let scrollService: ScrollService;
|
let scrollService: ScrollService;
|
||||||
let scrollSpy: jasmine.Spy;
|
let scrollSpy: jasmine.Spy;
|
||||||
let scrollToTopSpy: jasmine.Spy;
|
let scrollToTopSpy: jasmine.Spy;
|
||||||
|
let scrollAfterRenderSpy: jasmine.Spy;
|
||||||
|
let removeStoredScrollPositionSpy: jasmine.Spy;
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
scrollService = fixture.debugElement.injector.get<ScrollService>(ScrollService);
|
scrollService = fixture.debugElement.injector.get<ScrollService>(ScrollService);
|
||||||
scrollSpy = spyOn(scrollService, 'scroll');
|
scrollSpy = spyOn(scrollService, 'scroll');
|
||||||
scrollToTopSpy = spyOn(scrollService, 'scrollToTop');
|
scrollToTopSpy = spyOn(scrollService, 'scrollToTop');
|
||||||
|
scrollAfterRenderSpy = spyOn(scrollService, 'scrollAfterRender');
|
||||||
|
removeStoredScrollPositionSpy = spyOn(scrollService, 'removeStoredScrollPosition');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should not scroll immediately when the docId (path) changes', () => {
|
it('should not scroll immediately when the docId (path) changes', () => {
|
||||||
@ -510,33 +521,24 @@ describe('AppComponent', () => {
|
|||||||
expect(scrollSpy).toHaveBeenCalledTimes(1);
|
expect(scrollSpy).toHaveBeenCalledTimes(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should scroll to top when call `onDocRemoved` directly', () => {
|
it('should call `removeStoredScrollPosition` when call `onDocRemoved` directly', () => {
|
||||||
scrollToTopSpy.calls.reset();
|
|
||||||
|
|
||||||
component.onDocRemoved();
|
component.onDocRemoved();
|
||||||
expect(scrollToTopSpy).toHaveBeenCalled();
|
expect(removeStoredScrollPositionSpy).toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should scroll after a delay when call `onDocInserted` directly', fakeAsync(() => {
|
it('should call `scrollAfterRender` when call `onDocInserted` directly', (() => {
|
||||||
component.onDocInserted();
|
component.onDocInserted();
|
||||||
expect(scrollSpy).not.toHaveBeenCalled();
|
expect(scrollAfterRenderSpy).toHaveBeenCalledWith(scrollDelay);
|
||||||
|
|
||||||
tick(scrollDelay);
|
|
||||||
expect(scrollSpy).toHaveBeenCalled();
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
it('should scroll (via `onDocInserted`) when finish navigating to a new doc', fakeAsync(() => {
|
it('should call `scrollAfterRender` (via `onDocInserted`) when navigate to a new Doc', fakeAsync(() => {
|
||||||
expect(scrollToTopSpy).not.toHaveBeenCalled();
|
|
||||||
|
|
||||||
locationService.go('guide/pipes');
|
locationService.go('guide/pipes');
|
||||||
tick(1); // triggers the HTTP response for the document
|
tick(1); // triggers the HTTP response for the document
|
||||||
fixture.detectChanges(); // triggers the event that calls `onDocInserted`
|
fixture.detectChanges(); // triggers the event that calls `onDocInserted`
|
||||||
|
|
||||||
expect(scrollToTopSpy).toHaveBeenCalled();
|
expect(scrollAfterRenderSpy).toHaveBeenCalledWith(scrollDelay);
|
||||||
expect(scrollSpy).not.toHaveBeenCalled();
|
|
||||||
|
|
||||||
tick(scrollDelay);
|
tick(500); // there are other outstanding timers in the AppComponent that are not relevant
|
||||||
expect(scrollSpy).toHaveBeenCalled();
|
|
||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -1071,7 +1073,7 @@ describe('AppComponent', () => {
|
|||||||
|
|
||||||
it('should set the id of the doc viewer container based on the current doc', () => {
|
it('should set the id of the doc viewer container based on the current doc', () => {
|
||||||
initializeTest(false);
|
initializeTest(false);
|
||||||
const container = fixture.debugElement.query(By.css('section.sidenav-content'));
|
const container = fixture.debugElement.query(By.css('main.sidenav-content'));
|
||||||
|
|
||||||
navigateTo('guide/pipes');
|
navigateTo('guide/pipes');
|
||||||
expect(component.pageId).toEqual('guide-pipes');
|
expect(component.pageId).toEqual('guide-pipes');
|
||||||
@ -1088,7 +1090,7 @@ describe('AppComponent', () => {
|
|||||||
|
|
||||||
it('should not be affected by changes to the query', () => {
|
it('should not be affected by changes to the query', () => {
|
||||||
initializeTest(false);
|
initializeTest(false);
|
||||||
const container = fixture.debugElement.query(By.css('section.sidenav-content'));
|
const container = fixture.debugElement.query(By.css('main.sidenav-content'));
|
||||||
|
|
||||||
navigateTo('guide/pipes');
|
navigateTo('guide/pipes');
|
||||||
navigateTo('guide/other?search=http');
|
navigateTo('guide/other?search=http');
|
||||||
|
@ -127,7 +127,7 @@ export class AppComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
if (path === this.currentPath) {
|
if (path === this.currentPath) {
|
||||||
// scroll only if on same page (most likely a change to the hash)
|
// scroll only if on same page (most likely a change to the hash)
|
||||||
this.autoScroll();
|
this.scrollService.scroll();
|
||||||
} else {
|
} else {
|
||||||
// don't scroll; leave that to `onDocRendered`
|
// don't scroll; leave that to `onDocRendered`
|
||||||
this.currentPath = path;
|
this.currentPath = path;
|
||||||
@ -187,11 +187,6 @@ export class AppComponent implements OnInit {
|
|||||||
.subscribe(() => this.updateShell());
|
.subscribe(() => this.updateShell());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Scroll to the anchor in the hash fragment or top of doc.
|
|
||||||
autoScroll() {
|
|
||||||
this.scrollService.scroll();
|
|
||||||
}
|
|
||||||
|
|
||||||
onDocReady() {
|
onDocReady() {
|
||||||
// About to transition to new view.
|
// About to transition to new view.
|
||||||
this.isTransitioning = true;
|
this.isTransitioning = true;
|
||||||
@ -204,9 +199,7 @@ export class AppComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onDocRemoved() {
|
onDocRemoved() {
|
||||||
// The previous document has been removed.
|
this.scrollService.removeStoredScrollPosition();
|
||||||
// Scroll to top to restore a clean visual state for the new document.
|
|
||||||
this.scrollService.scrollToTop();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
onDocInserted() {
|
onDocInserted() {
|
||||||
@ -216,9 +209,8 @@ export class AppComponent implements OnInit {
|
|||||||
// (e.g. sidenav, host classes) needs to happen asynchronously.
|
// (e.g. sidenav, host classes) needs to happen asynchronously.
|
||||||
setTimeout(() => this.updateShell());
|
setTimeout(() => this.updateShell());
|
||||||
|
|
||||||
// Scroll 500ms after the new document has been inserted into the doc-viewer.
|
// Scroll the good position depending on the context
|
||||||
// The delay is to allow time for async layout to complete.
|
this.scrollService.scrollAfterRender(500);
|
||||||
setTimeout(() => this.autoScroll(), 500);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
onDocRendered() {
|
onDocRendered() {
|
||||||
@ -242,7 +234,7 @@ export class AppComponent implements OnInit {
|
|||||||
|
|
||||||
@HostListener('window:resize', ['$event.target.innerWidth'])
|
@HostListener('window:resize', ['$event.target.innerWidth'])
|
||||||
onResize(width: number) {
|
onResize(width: number) {
|
||||||
this.isSideBySide = width > this.sideBySideWidth;
|
this.isSideBySide = width >= this.sideBySideWidth;
|
||||||
this.showFloatingToc.next(width > this.showFloatingTocWidth);
|
this.showFloatingToc.next(width > this.showFloatingTocWidth);
|
||||||
|
|
||||||
if (this.isSideBySide && !this.isSideNavDoc) {
|
if (this.isSideBySide && !this.isSideNavDoc) {
|
||||||
@ -256,7 +248,6 @@ export class AppComponent implements OnInit {
|
|||||||
|
|
||||||
@HostListener('click', ['$event.target', '$event.button', '$event.ctrlKey', '$event.metaKey', '$event.altKey'])
|
@HostListener('click', ['$event.target', '$event.button', '$event.ctrlKey', '$event.metaKey', '$event.altKey'])
|
||||||
onClick(eventTarget: HTMLElement, button: number, ctrlKey: boolean, metaKey: boolean, altKey: boolean): boolean {
|
onClick(eventTarget: HTMLElement, button: number, ctrlKey: boolean, metaKey: boolean, altKey: boolean): boolean {
|
||||||
|
|
||||||
// Hide the search results if we clicked outside both the "search box" and the "search results"
|
// Hide the search results if we clicked outside both the "search box" and the "search results"
|
||||||
if (!this.searchElements.some(element => element.nativeElement.contains(eventTarget))) {
|
if (!this.searchElements.some(element => element.nativeElement.contains(eventTarget))) {
|
||||||
this.hideSearchResults();
|
this.hideSearchResults();
|
||||||
@ -348,6 +339,9 @@ export class AppComponent implements OnInit {
|
|||||||
// Dynamically change height of table of contents container
|
// Dynamically change height of table of contents container
|
||||||
@HostListener('window:scroll')
|
@HostListener('window:scroll')
|
||||||
onScroll() {
|
onScroll() {
|
||||||
|
|
||||||
|
this.scrollService.updateScrollPositionInHistory();
|
||||||
|
|
||||||
if (!this.tocMaxHeightOffset) {
|
if (!this.tocMaxHeightOffset) {
|
||||||
// Must wait until `mat-toolbar` is measurable.
|
// Must wait until `mat-toolbar` is measurable.
|
||||||
const el = this.hostElement.nativeElement as Element;
|
const el = this.hostElement.nativeElement as Element;
|
||||||
|
@ -46,7 +46,7 @@ export interface Announcement {
|
|||||||
template: `
|
template: `
|
||||||
<div class="homepage-container" *ngIf="announcement">
|
<div class="homepage-container" *ngIf="announcement">
|
||||||
<div class="announcement-bar">
|
<div class="announcement-bar">
|
||||||
<img [src]="announcement.imageUrl">
|
<img [src]="announcement.imageUrl" alt="">
|
||||||
<p [innerHTML]="announcement.message"></p>
|
<p [innerHTML]="announcement.message"></p>
|
||||||
<a class="button" [href]="announcement.linkUrl">Learn More</a>
|
<a class="button" [href]="announcement.linkUrl">Learn More</a>
|
||||||
</div>
|
</div>
|
||||||
|
@ -125,7 +125,7 @@ export class ApiListComponent implements OnInit {
|
|||||||
return status === 'all' ||
|
return status === 'all' ||
|
||||||
status === item.stability ||
|
status === item.stability ||
|
||||||
(status === 'security-risk' && item.securityRisk);
|
(status === 'security-risk' && item.securityRisk);
|
||||||
};
|
}
|
||||||
|
|
||||||
function matchesType() {
|
function matchesType() {
|
||||||
return type === 'all' || type === item.docType;
|
return type === 'all' || type === item.docType;
|
||||||
|
@ -54,7 +54,7 @@ export class ApiService implements OnDestroy {
|
|||||||
section.items.every(item => item.stability === 'deprecated');
|
section.items.every(item => item.stability === 'deprecated');
|
||||||
});
|
});
|
||||||
}));
|
}));
|
||||||
};
|
}
|
||||||
|
|
||||||
constructor(private http: HttpClient, private logger: Logger) { }
|
constructor(private http: HttpClient, private logger: Logger) { }
|
||||||
|
|
||||||
|
@ -46,7 +46,7 @@ export interface TabInfo {
|
|||||||
export class CodeTabsComponent implements OnInit, AfterViewInit {
|
export class CodeTabsComponent implements OnInit, AfterViewInit {
|
||||||
tabs: TabInfo[];
|
tabs: TabInfo[];
|
||||||
|
|
||||||
@Input('linenums') linenums: string;
|
@Input() linenums: string;
|
||||||
|
|
||||||
@ViewChild('content') content;
|
@ViewChild('content') content;
|
||||||
|
|
||||||
|
@ -79,7 +79,7 @@ describe('ContributorListComponent', () => {
|
|||||||
return comp;
|
return comp;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface SearchResult { [index: string]: string; };
|
interface SearchResult { [index: string]: string; }
|
||||||
|
|
||||||
class TestLocationService {
|
class TestLocationService {
|
||||||
searchResult: SearchResult = {};
|
searchResult: SearchResult = {};
|
||||||
|
@ -245,7 +245,7 @@ class FakeComponentFactory extends ComponentFactory<any> {
|
|||||||
rootSelectorOrNode?: string | any,
|
rootSelectorOrNode?: string | any,
|
||||||
ngModule?: NgModuleRef<any>): ComponentRef<any> {
|
ngModule?: NgModuleRef<any>): ComponentRef<any> {
|
||||||
return jasmine.createSpy('ComponentRef') as any;
|
return jasmine.createSpy('ComponentRef') as any;
|
||||||
};
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class FakeComponentFactoryResolver extends ComponentFactoryResolver {
|
class FakeComponentFactoryResolver extends ComponentFactoryResolver {
|
||||||
|
@ -37,6 +37,6 @@ describe('Getting Started NgFor Component', () => {
|
|||||||
|
|
||||||
component.parseError$.subscribe(error => {
|
component.parseError$.subscribe(error => {
|
||||||
expect(error).toBeTruthy();
|
expect(error).toBeTruthy();
|
||||||
})
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -46,6 +46,6 @@ describe('Getting Started NgIf Component', () => {
|
|||||||
|
|
||||||
component.parseError$.subscribe(error => {
|
component.parseError$.subscribe(error => {
|
||||||
expect(error).toBeTruthy();
|
expect(error).toBeTruthy();
|
||||||
})
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -26,7 +26,7 @@ export class ResourceService {
|
|||||||
|
|
||||||
(categories as ConnectableObservable<Category[]>).connect();
|
(categories as ConnectableObservable<Category[]>).connect();
|
||||||
return categories;
|
return categories;
|
||||||
};
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Extract sorted Category[] from resource JSON data
|
// Extract sorted Category[] from resource JSON data
|
||||||
|
@ -100,9 +100,10 @@ export class DocViewerComponent implements OnDestroy {
|
|||||||
if (needsToc && !embeddedToc) {
|
if (needsToc && !embeddedToc) {
|
||||||
// Add an embedded ToC if it's needed and there isn't one in the content already.
|
// Add an embedded ToC if it's needed and there isn't one in the content already.
|
||||||
titleEl!.insertAdjacentHTML('afterend', '<aio-toc class="embedded"></aio-toc>');
|
titleEl!.insertAdjacentHTML('afterend', '<aio-toc class="embedded"></aio-toc>');
|
||||||
} else if (!needsToc && embeddedToc) {
|
} else if (!needsToc && embeddedToc && embeddedToc.parentNode !== null) {
|
||||||
// Remove the embedded Toc if it's there and not needed.
|
// Remove the embedded Toc if it's there and not needed.
|
||||||
embeddedToc.remove();
|
// We cannot use ChildNode.remove() because of IE11
|
||||||
|
embeddedToc.parentNode.removeChild(embeddedToc);
|
||||||
}
|
}
|
||||||
|
|
||||||
return () => {
|
return () => {
|
||||||
|
@ -15,7 +15,7 @@ import { DocumentContents } from 'app/documents/document.service';
|
|||||||
export class DtComponent {
|
export class DtComponent {
|
||||||
|
|
||||||
@Input() on = false;
|
@Input() on = false;
|
||||||
@Input('doc') doc: DocumentContents;
|
@Input() doc: DocumentContents;
|
||||||
@Output() docChange = new EventEmitter<DocumentContents>();
|
@Output() docChange = new EventEmitter<DocumentContents>();
|
||||||
|
|
||||||
@ViewChild('dt', { read: ElementRef })
|
@ViewChild('dt', { read: ElementRef })
|
||||||
|
@ -14,4 +14,4 @@ export class Deployment {
|
|||||||
mode: string = this.location.search()['mode'] || environment.mode;
|
mode: string = this.location.search()['mode'] || environment.mode;
|
||||||
|
|
||||||
constructor(private location: LocationService) {}
|
constructor(private location: LocationService) {}
|
||||||
};
|
}
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
import { ReflectiveInjector } from '@angular/core';
|
import { ReflectiveInjector } from '@angular/core';
|
||||||
import { PlatformLocation } from '@angular/common';
|
import { Location, LocationStrategy, PlatformLocation, ViewportScroller } from '@angular/common';
|
||||||
import { DOCUMENT } from '@angular/common';
|
import { DOCUMENT } from '@angular/common';
|
||||||
|
import { MockLocationStrategy, SpyLocation } from '@angular/common/testing';
|
||||||
|
import { fakeAsync, tick } from '@angular/core/testing';
|
||||||
|
|
||||||
import { ScrollService, topMargin } from './scroll.service';
|
import { ScrollService, topMargin } from './scroll.service';
|
||||||
|
|
||||||
@ -8,8 +10,9 @@ describe('ScrollService', () => {
|
|||||||
const topOfPageElem = {} as Element;
|
const topOfPageElem = {} as Element;
|
||||||
let injector: ReflectiveInjector;
|
let injector: ReflectiveInjector;
|
||||||
let document: MockDocument;
|
let document: MockDocument;
|
||||||
let location: MockPlatformLocation;
|
let platformLocation: MockPlatformLocation;
|
||||||
let scrollService: ScrollService;
|
let scrollService: ScrollService;
|
||||||
|
let location: SpyLocation;
|
||||||
|
|
||||||
class MockPlatformLocation {
|
class MockPlatformLocation {
|
||||||
hash: string;
|
hash: string;
|
||||||
@ -27,6 +30,11 @@ describe('ScrollService', () => {
|
|||||||
scrollIntoView = jasmine.createSpy('Element scrollIntoView');
|
scrollIntoView = jasmine.createSpy('Element scrollIntoView');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const viewportScrollerStub = jasmine.createSpyObj(
|
||||||
|
'viewportScroller',
|
||||||
|
['getScrollPosition', 'scrollToPosition']);
|
||||||
|
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
spyOn(window, 'scrollBy');
|
spyOn(window, 'scrollBy');
|
||||||
});
|
});
|
||||||
@ -34,12 +42,24 @@ describe('ScrollService', () => {
|
|||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
injector = ReflectiveInjector.resolveAndCreate([
|
injector = ReflectiveInjector.resolveAndCreate([
|
||||||
ScrollService,
|
ScrollService,
|
||||||
|
{ provide: Location, useClass: SpyLocation },
|
||||||
{ provide: DOCUMENT, useClass: MockDocument },
|
{ provide: DOCUMENT, useClass: MockDocument },
|
||||||
{ provide: PlatformLocation, useClass: MockPlatformLocation }
|
{ provide: PlatformLocation, useClass: MockPlatformLocation },
|
||||||
|
{ provide: ViewportScroller, useValue: viewportScrollerStub },
|
||||||
|
{ provide: LocationStrategy, useClass: MockLocationStrategy }
|
||||||
]);
|
]);
|
||||||
location = injector.get(PlatformLocation);
|
platformLocation = injector.get(PlatformLocation);
|
||||||
document = injector.get(DOCUMENT);
|
document = injector.get(DOCUMENT);
|
||||||
scrollService = injector.get(ScrollService);
|
scrollService = injector.get(ScrollService);
|
||||||
|
location = injector.get(Location);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should set `scrollRestoration` to `manual` if supported', () => {
|
||||||
|
if (scrollService.supportManualScrollRestoration) {
|
||||||
|
expect(window.history.scrollRestoration).toBe('manual');
|
||||||
|
} else {
|
||||||
|
expect(window.history.scrollRestoration).toBeUndefined();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('#topOffset', () => {
|
describe('#topOffset', () => {
|
||||||
@ -107,7 +127,7 @@ describe('ScrollService', () => {
|
|||||||
|
|
||||||
describe('#scroll', () => {
|
describe('#scroll', () => {
|
||||||
it('should scroll to the top if there is no hash', () => {
|
it('should scroll to the top if there is no hash', () => {
|
||||||
location.hash = '';
|
platformLocation.hash = '';
|
||||||
|
|
||||||
const topOfPage = new MockElement();
|
const topOfPage = new MockElement();
|
||||||
document.getElementById.and
|
document.getElementById.and
|
||||||
@ -118,7 +138,7 @@ describe('ScrollService', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should not scroll if the hash does not match an element id', () => {
|
it('should not scroll if the hash does not match an element id', () => {
|
||||||
location.hash = 'not-found';
|
platformLocation.hash = 'not-found';
|
||||||
document.getElementById.and.returnValue(null);
|
document.getElementById.and.returnValue(null);
|
||||||
|
|
||||||
scrollService.scroll();
|
scrollService.scroll();
|
||||||
@ -128,7 +148,7 @@ describe('ScrollService', () => {
|
|||||||
|
|
||||||
it('should scroll to the element whose id matches the hash', () => {
|
it('should scroll to the element whose id matches the hash', () => {
|
||||||
const element = new MockElement();
|
const element = new MockElement();
|
||||||
location.hash = 'some-id';
|
platformLocation.hash = 'some-id';
|
||||||
document.getElementById.and.returnValue(element);
|
document.getElementById.and.returnValue(element);
|
||||||
|
|
||||||
scrollService.scroll();
|
scrollService.scroll();
|
||||||
@ -139,7 +159,7 @@ describe('ScrollService', () => {
|
|||||||
|
|
||||||
it('should scroll to the element whose id matches the hash with encoded characters', () => {
|
it('should scroll to the element whose id matches the hash with encoded characters', () => {
|
||||||
const element = new MockElement();
|
const element = new MockElement();
|
||||||
location.hash = '%F0%9F%91%8D'; // 👍
|
platformLocation.hash = '%F0%9F%91%8D'; // 👍
|
||||||
document.getElementById.and.returnValue(element);
|
document.getElementById.and.returnValue(element);
|
||||||
|
|
||||||
scrollService.scroll();
|
scrollService.scroll();
|
||||||
@ -210,4 +230,136 @@ describe('ScrollService', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('#isLocationWithHash', () => {
|
||||||
|
it('should return true when the location has a hash', () => {
|
||||||
|
platformLocation.hash = 'anchor';
|
||||||
|
expect(scrollService.isLocationWithHash()).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return false when the location has no hash', () => {
|
||||||
|
platformLocation.hash = '';
|
||||||
|
expect(scrollService.isLocationWithHash()).toBe(false);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('#needToFixScrollPosition', async() => {
|
||||||
|
it('should return true when popState event was fired after a back navigation if the browser supports ' +
|
||||||
|
'scrollRestoration`. Otherwise, needToFixScrollPosition() returns false', () => {
|
||||||
|
|
||||||
|
if (scrollService.supportManualScrollRestoration) {
|
||||||
|
location.go('/initial-url1');
|
||||||
|
// We simulate a scroll down
|
||||||
|
location.replaceState('/initial-url1', 'hack', {scrollPosition: [2000, 0]});
|
||||||
|
location.go('/initial-url2');
|
||||||
|
location.back();
|
||||||
|
|
||||||
|
expect(scrollService.popStateFired).toBe(true);
|
||||||
|
expect(scrollService.scrollPosition).toEqual([2000, 0]);
|
||||||
|
expect(scrollService.needToFixScrollPosition()).toBe(true);
|
||||||
|
} else {
|
||||||
|
location.go('/initial-url1');
|
||||||
|
location.go('/initial-url2');
|
||||||
|
location.back();
|
||||||
|
|
||||||
|
expect(scrollService.popStateFired).toBe(false); // popStateFired is always false
|
||||||
|
expect(scrollService.scrollPosition).toEqual([0, 0]); // scrollPosition always equals [0, 0]
|
||||||
|
expect(scrollService.needToFixScrollPosition()).toBe(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return true when popState event was fired after a forward navigation if the browser supports ' +
|
||||||
|
'scrollRestoration`. Otherwise, needToFixScrollPosition() returns false', () => {
|
||||||
|
|
||||||
|
if (scrollService.supportManualScrollRestoration) {
|
||||||
|
location.go('/initial-url1');
|
||||||
|
location.go('/initial-url2');
|
||||||
|
// We simulate a scroll down
|
||||||
|
location.replaceState('/initial-url1', 'hack', {scrollPosition: [2000, 0]});
|
||||||
|
|
||||||
|
location.back();
|
||||||
|
scrollService.popStateFired = false;
|
||||||
|
scrollService.scrollPosition = [0, 0];
|
||||||
|
location.forward();
|
||||||
|
|
||||||
|
expect(scrollService.popStateFired).toBe(true);
|
||||||
|
expect(scrollService.scrollPosition).toEqual([2000, 0]);
|
||||||
|
expect(scrollService.needToFixScrollPosition()).toBe(true);
|
||||||
|
} else {
|
||||||
|
location.go('/initial-url1');
|
||||||
|
location.go('/initial-url2');
|
||||||
|
location.back();
|
||||||
|
location.forward();
|
||||||
|
|
||||||
|
expect(scrollService.popStateFired).toBe(false); // popStateFired is always false
|
||||||
|
expect(scrollService.scrollPosition).toEqual([0, 0]); // scrollPosition always equals [0, 0]
|
||||||
|
expect(scrollService.needToFixScrollPosition()).toBe(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('#scrollAfterRender', async() => {
|
||||||
|
|
||||||
|
let scrollSpy: jasmine.Spy;
|
||||||
|
let scrollToTopSpy: jasmine.Spy;
|
||||||
|
let needToFixScrollPositionSpy: jasmine.Spy;
|
||||||
|
let scrollToPosition: jasmine.Spy;
|
||||||
|
let isLocationWithHashSpy: jasmine.Spy;
|
||||||
|
let getStoredScrollPositionSpy: jasmine.Spy;
|
||||||
|
const scrollDelay = 500;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
scrollSpy = spyOn(scrollService, 'scroll');
|
||||||
|
scrollToTopSpy = spyOn(scrollService, 'scrollToTop');
|
||||||
|
scrollToPosition = spyOn(scrollService, 'scrollToPosition');
|
||||||
|
needToFixScrollPositionSpy = spyOn(scrollService, 'needToFixScrollPosition');
|
||||||
|
getStoredScrollPositionSpy = spyOn(scrollService, 'getStoredScrollPosition');
|
||||||
|
isLocationWithHashSpy = spyOn(scrollService, 'isLocationWithHash');
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
it('should call `scroll` when we navigate to a location with anchor', fakeAsync(() => {
|
||||||
|
needToFixScrollPositionSpy.and.returnValue(false);
|
||||||
|
getStoredScrollPositionSpy.and.returnValue(null);
|
||||||
|
isLocationWithHashSpy.and.returnValue(true);
|
||||||
|
|
||||||
|
scrollService.scrollAfterRender(scrollDelay);
|
||||||
|
|
||||||
|
expect(scrollSpy).not.toHaveBeenCalled();
|
||||||
|
tick(scrollDelay);
|
||||||
|
expect(scrollSpy).toHaveBeenCalled();
|
||||||
|
}));
|
||||||
|
|
||||||
|
it('should call `scrollToTop` when we navigate to a location without anchor', fakeAsync(() => {
|
||||||
|
needToFixScrollPositionSpy.and.returnValue(false);
|
||||||
|
getStoredScrollPositionSpy.and.returnValue(null);
|
||||||
|
isLocationWithHashSpy.and.returnValue(false);
|
||||||
|
|
||||||
|
scrollService.scrollAfterRender(scrollDelay);
|
||||||
|
|
||||||
|
expect(scrollToTopSpy).toHaveBeenCalled();
|
||||||
|
tick(scrollDelay);
|
||||||
|
expect(scrollSpy).not.toHaveBeenCalled();
|
||||||
|
}));
|
||||||
|
|
||||||
|
it('should call `viewportScroller.scrollToPosition` when we reload a page', fakeAsync(() => {
|
||||||
|
getStoredScrollPositionSpy.and.returnValue([0, 1000]);
|
||||||
|
|
||||||
|
scrollService.scrollAfterRender(scrollDelay);
|
||||||
|
|
||||||
|
expect(viewportScrollerStub.scrollToPosition).toHaveBeenCalled();
|
||||||
|
expect(getStoredScrollPositionSpy).toHaveBeenCalled();
|
||||||
|
}));
|
||||||
|
|
||||||
|
it('should call `scrollToPosition` after a popState', fakeAsync(() => {
|
||||||
|
needToFixScrollPositionSpy.and.returnValue(true);
|
||||||
|
getStoredScrollPositionSpy.and.returnValue(null);
|
||||||
|
scrollService.scrollAfterRender(scrollDelay);
|
||||||
|
expect(scrollToPosition).toHaveBeenCalled();
|
||||||
|
tick(scrollDelay);
|
||||||
|
expect(scrollSpy).not.toHaveBeenCalled();
|
||||||
|
expect(scrollToTopSpy).not.toHaveBeenCalled();
|
||||||
|
}));
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { Injectable, Inject } from '@angular/core';
|
import { Injectable, Inject } from '@angular/core';
|
||||||
import { PlatformLocation } from '@angular/common';
|
import { Location, PlatformLocation, ViewportScroller } from '@angular/common';
|
||||||
import { DOCUMENT } from '@angular/common';
|
import { DOCUMENT } from '@angular/common';
|
||||||
import { fromEvent } from 'rxjs';
|
import { fromEvent } from 'rxjs';
|
||||||
|
|
||||||
@ -13,6 +13,13 @@ export class ScrollService {
|
|||||||
private _topOffset: number | null;
|
private _topOffset: number | null;
|
||||||
private _topOfPageElement: Element;
|
private _topOfPageElement: Element;
|
||||||
|
|
||||||
|
// true when popState event has been fired.
|
||||||
|
popStateFired = false;
|
||||||
|
// scroll position which has to be restored after the popState event
|
||||||
|
scrollPosition: [number, number] = [0, 0];
|
||||||
|
// true when the browser supports `scrollTo`, `scrollX`, `scrollY` and `scrollRestoration`
|
||||||
|
supportManualScrollRestoration: boolean;
|
||||||
|
|
||||||
// Offset from the top of the document to bottom of any static elements
|
// Offset from the top of the document to bottom of any static elements
|
||||||
// at the top (e.g. toolbar) + some margin
|
// at the top (e.g. toolbar) + some margin
|
||||||
get topOffset() {
|
get topOffset() {
|
||||||
@ -32,9 +39,37 @@ export class ScrollService {
|
|||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
@Inject(DOCUMENT) private document: any,
|
@Inject(DOCUMENT) private document: any,
|
||||||
private location: PlatformLocation) {
|
private platformLocation: PlatformLocation,
|
||||||
|
private viewportScroller: ViewportScroller,
|
||||||
|
private location: Location) {
|
||||||
// On resize, the toolbar might change height, so "invalidate" the top offset.
|
// On resize, the toolbar might change height, so "invalidate" the top offset.
|
||||||
fromEvent(window, 'resize').subscribe(() => this._topOffset = null);
|
fromEvent(window, 'resize').subscribe(() => this._topOffset = null);
|
||||||
|
|
||||||
|
try {
|
||||||
|
this.supportManualScrollRestoration = !!window && !!window.scrollTo && 'scrollX' in window
|
||||||
|
&& 'scrollY' in window && !!history && !!history.scrollRestoration;
|
||||||
|
} catch {
|
||||||
|
this.supportManualScrollRestoration = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Change scroll restoration strategy to `manual` if it's supported
|
||||||
|
if (this.supportManualScrollRestoration) {
|
||||||
|
history.scrollRestoration = 'manual';
|
||||||
|
// we have to detect forward and back navigation thanks to popState event
|
||||||
|
this.location.subscribe(event => {
|
||||||
|
// the type is `hashchange` when the fragment identifier of the URL has changed. It allows us to go to position
|
||||||
|
// just before a click on an anchor
|
||||||
|
if (event.type === 'hashchange') {
|
||||||
|
this.scrollToPosition();
|
||||||
|
} else {
|
||||||
|
// The popstate event is always triggered by doing a browser action such as a click on the back or forward button.
|
||||||
|
// It can be follow by a event of type `hashchange`.
|
||||||
|
this.popStateFired = true;
|
||||||
|
// we always should have a scrollPosition in our state history
|
||||||
|
this.scrollPosition = event.state ? event.state['scrollPosition'] : null;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -50,6 +85,44 @@ export class ScrollService {
|
|||||||
this.scrollToElement(element);
|
this.scrollToElement(element);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* test if the current location has a hash
|
||||||
|
*/
|
||||||
|
isLocationWithHash(): boolean {
|
||||||
|
return !!this.getCurrentHash();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When we load a document, we have to scroll to the correct position depending on whether this is a new location,
|
||||||
|
* a back/forward in the history, or a refresh
|
||||||
|
* @param delay before we scroll to the good position
|
||||||
|
*/
|
||||||
|
scrollAfterRender(delay: number) {
|
||||||
|
// If we do rendering following a refresh, we use the scroll position from the storage.
|
||||||
|
const storedScrollPosition = this.getStoredScrollPosition();
|
||||||
|
if (storedScrollPosition) {
|
||||||
|
this.viewportScroller.scrollToPosition(storedScrollPosition);
|
||||||
|
} else {
|
||||||
|
if (this.needToFixScrollPosition()) {
|
||||||
|
// The document was reloaded following a popState `event` (called by the forward/back button), so we manage
|
||||||
|
// the scroll position
|
||||||
|
this.scrollToPosition();
|
||||||
|
} else {
|
||||||
|
// The document was loaded either of the following cases: a direct navigation via typing the URL in the
|
||||||
|
// address bar or a click on a link. If the location contains a hash, we have to wait for async
|
||||||
|
// layout.
|
||||||
|
if (this.isLocationWithHash()) {
|
||||||
|
// Scroll 500ms after the new document has been inserted into the doc-viewer.
|
||||||
|
// The delay is to allow time for async layout to complete.
|
||||||
|
setTimeout(() => this.scroll(), delay);
|
||||||
|
} else {
|
||||||
|
// If the location doesn't contain a hash, we scroll to the top of the page.
|
||||||
|
this.scrollToTop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Scroll to the element.
|
* Scroll to the element.
|
||||||
* Don't scroll if no element.
|
* Don't scroll if no element.
|
||||||
@ -79,10 +152,42 @@ export class ScrollService {
|
|||||||
this.scrollToElement(this.topOfPageElement);
|
this.scrollToElement(this.topOfPageElement);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
scrollToPosition() {
|
||||||
|
this.viewportScroller.scrollToPosition(this.scrollPosition);
|
||||||
|
this.popStateFired = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the state with scroll position into history.
|
||||||
|
*/
|
||||||
|
updateScrollPositionInHistory() {
|
||||||
|
if (this.supportManualScrollRestoration) {
|
||||||
|
const currentScrollPosition = this.viewportScroller.getScrollPosition();
|
||||||
|
this.location.replaceState(this.location.path(true), undefined, {scrollPosition: currentScrollPosition});
|
||||||
|
window.sessionStorage.setItem('scrollPosition', currentScrollPosition.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
getStoredScrollPosition(): [number, number] | null {
|
||||||
|
const position = window.sessionStorage.getItem('scrollPosition');
|
||||||
|
return position ? JSON.parse('[' + position + ']') : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
removeStoredScrollPosition() {
|
||||||
|
window.sessionStorage.removeItem('scrollPosition');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if the scroll position need to be manually fixed after popState event
|
||||||
|
*/
|
||||||
|
needToFixScrollPosition(): boolean {
|
||||||
|
return this.popStateFired && this.scrollPosition && this.supportManualScrollRestoration;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the hash fragment from the `PlatformLocation`, minus the leading `#`.
|
* Return the hash fragment from the `PlatformLocation`, minus the leading `#`.
|
||||||
*/
|
*/
|
||||||
private getCurrentHash() {
|
private getCurrentHash() {
|
||||||
return decodeURIComponent(this.location.hash.replace(/^#/, ''));
|
return decodeURIComponent(this.platformLocation.hash.replace(/^#/, ''));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -68,7 +68,10 @@ export class TocService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// now remove the anchor
|
// now remove the anchor
|
||||||
anchorLink.remove();
|
if (anchorLink.parentNode !== null) {
|
||||||
|
// We cannot use ChildNode.remove() because of IE11
|
||||||
|
anchorLink.parentNode.removeChild(anchorLink);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// security: the document element which provides this heading content
|
// security: the document element which provides this heading content
|
||||||
// is always authored by the documentation team and is considered to be safe
|
// is always authored by the documentation team and is considered to be safe
|
||||||
|
@ -93,7 +93,7 @@
|
|||||||
<div class="background-sky hero"></div>
|
<div class="background-sky hero"></div>
|
||||||
<section id="intro" style="text-shadow: 1px 1px #1976d2;">
|
<section id="intro" style="text-shadow: 1px 1px #1976d2;">
|
||||||
<div class="hero-logo">
|
<div class="hero-logo">
|
||||||
<img src="assets/images/logos/angular/angular.svg" width="250" height="250">
|
<img src="assets/images/logos/angular/angular.svg" width="250" height="250" alt="Angular">
|
||||||
</div>
|
</div>
|
||||||
<div class="homepage-container">
|
<div class="homepage-container">
|
||||||
<div class="hero-headline">One framework.<br>Mobile & desktop.</div>
|
<div class="hero-headline">One framework.<br>Mobile & desktop.</div>
|
||||||
|
@ -268,13 +268,13 @@ section#intro {
|
|||||||
|
|
||||||
aio-shell {
|
aio-shell {
|
||||||
&.page-resources, &.page-events, &.page-features, &.page-presskit, &.page-contribute {
|
&.page-resources, &.page-events, &.page-features, &.page-presskit, &.page-contribute {
|
||||||
section {
|
main {
|
||||||
padding: 0rem 0rem 3rem;
|
padding: 0rem 0rem 3rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&.page-home {
|
&.page-home {
|
||||||
section {
|
main {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -47,6 +47,7 @@ aio-shell.page-resources mat-toolbar.mat-toolbar {
|
|||||||
|
|
||||||
// DOCS PAGES OVERRIDE: HAMBURGER
|
// DOCS PAGES OVERRIDE: HAMBURGER
|
||||||
aio-shell.folder-api mat-toolbar.mat-toolbar,
|
aio-shell.folder-api mat-toolbar.mat-toolbar,
|
||||||
|
aio-shell.folder-cli mat-toolbar.mat-toolbar,
|
||||||
aio-shell.folder-docs mat-toolbar.mat-toolbar,
|
aio-shell.folder-docs mat-toolbar.mat-toolbar,
|
||||||
aio-shell.folder-guide mat-toolbar.mat-toolbar,
|
aio-shell.folder-guide mat-toolbar.mat-toolbar,
|
||||||
aio-shell.folder-tutorial mat-toolbar.mat-toolbar {
|
aio-shell.folder-tutorial mat-toolbar.mat-toolbar {
|
||||||
|
@ -74,6 +74,12 @@
|
|||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&.property-table {
|
||||||
|
td {
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.class-overview {
|
.class-overview {
|
||||||
@ -87,19 +93,6 @@
|
|||||||
.short-description {
|
.short-description {
|
||||||
margin: 6px 0 0 10px;
|
margin: 6px 0 0 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.properties-table {
|
|
||||||
font-size: 14px;
|
|
||||||
|
|
||||||
thead th {
|
|
||||||
&:nth-child(1) {
|
|
||||||
width: 20%;
|
|
||||||
}
|
|
||||||
&:nth-child(2) {
|
|
||||||
width: 20%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.breadcrumb-container {
|
.breadcrumb-container {
|
||||||
|
@ -89,7 +89,7 @@ aio-notification {
|
|||||||
}
|
}
|
||||||
|
|
||||||
&.page-home, &.page-resources, &.page-events, &.page-features, &.page-presskit, &.page-contribute {
|
&.page-home, &.page-resources, &.page-events, &.page-features, &.page-presskit, &.page-contribute {
|
||||||
section {
|
main {
|
||||||
padding-top: $notificationHeight;
|
padding-top: $notificationHeight;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,10 +7,14 @@ describe(browser.baseUrl, () => {
|
|||||||
const stripQuery = (url: string) => url.replace(/\?.*$/, '');
|
const stripQuery = (url: string) => url.replace(/\?.*$/, '');
|
||||||
const stripTrailingSlash = (url: string) => url.replace(/\/$/, '');
|
const stripTrailingSlash = (url: string) => url.replace(/\/$/, '');
|
||||||
|
|
||||||
beforeAll(done => page.init().then(done));
|
beforeAll(() => page.init());
|
||||||
|
|
||||||
beforeEach(() => browser.waitForAngularEnabled(false));
|
beforeEach(() => browser.waitForAngularEnabled(false));
|
||||||
afterEach(() => browser.waitForAngularEnabled(true));
|
|
||||||
|
afterEach(async () => {
|
||||||
|
await page.unregisterSw();
|
||||||
|
await browser.waitForAngularEnabled(true);
|
||||||
|
});
|
||||||
|
|
||||||
describe('(with sitemap URLs)', () => {
|
describe('(with sitemap URLs)', () => {
|
||||||
page.sitemapUrls.forEach((path, i) => {
|
page.sitemapUrls.forEach((path, i) => {
|
||||||
@ -34,7 +38,7 @@ describe(browser.baseUrl, () => {
|
|||||||
const actualUrl = await getCurrentUrl();
|
const actualUrl = await getCurrentUrl();
|
||||||
|
|
||||||
expect(actualUrl).toBe(expectedUrl);
|
expect(actualUrl).toBe(expectedUrl);
|
||||||
}, 60000);
|
}, 120000);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -38,19 +38,14 @@ export class SitePage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Navigate to a URL, disable animations, unregister the ServiceWorker, and wait for Angular.
|
* Navigate to a URL, disable animations, wait for Angular and unregister the ServiceWorker.
|
||||||
* (The SW is unregistered to ensure that subsequent requests are passed through to the server.)
|
* (The SW is unregistered to ensure that subsequent requests are passed through to the server.)
|
||||||
*/
|
*/
|
||||||
async goTo(url: string) {
|
async goTo(url: string) {
|
||||||
const unregisterServiceWorker = (cb: () => void) => navigator.serviceWorker
|
|
||||||
.getRegistrations()
|
|
||||||
.then(regs => Promise.all(regs.map(reg => reg.unregister())))
|
|
||||||
.then(cb);
|
|
||||||
|
|
||||||
await browser.get(url || this.baseUrl);
|
await browser.get(url || this.baseUrl);
|
||||||
await browser.executeScript('document.body.classList.add(\'no-animations\')');
|
await browser.executeScript('document.body.classList.add(\'no-animations\')');
|
||||||
await browser.executeAsyncScript(unregisterServiceWorker);
|
|
||||||
await browser.waitForAngular();
|
await browser.waitForAngular();
|
||||||
|
await this.unregisterSw();
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -60,4 +55,16 @@ export class SitePage {
|
|||||||
// Make an initial request to unregister the ServiceWorker.
|
// Make an initial request to unregister the ServiceWorker.
|
||||||
await this.goTo('');
|
await this.goTo('');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unregister the ServiceWorker (if registered).
|
||||||
|
*/
|
||||||
|
async unregisterSw() {
|
||||||
|
const unregisterSwFn = (cb: () => void) => navigator.serviceWorker
|
||||||
|
.getRegistrations()
|
||||||
|
.then(regs => Promise.all(regs.map(reg => reg.unregister())))
|
||||||
|
.then(cb);
|
||||||
|
|
||||||
|
await browser.executeAsyncScript(unregisterSwFn);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,10 +4,14 @@ import { SitePage } from './site.po';
|
|||||||
describe(browser.baseUrl, () => {
|
describe(browser.baseUrl, () => {
|
||||||
const page = new SitePage();
|
const page = new SitePage();
|
||||||
|
|
||||||
beforeAll(done => page.init().then(done));
|
beforeAll(() => page.init());
|
||||||
|
|
||||||
beforeEach(() => browser.waitForAngularEnabled(false));
|
beforeEach(() => browser.waitForAngularEnabled(false));
|
||||||
afterEach(() => browser.waitForAngularEnabled(true));
|
|
||||||
|
afterEach(async () => {
|
||||||
|
await page.unregisterSw();
|
||||||
|
await browser.waitForAngularEnabled(true);
|
||||||
|
});
|
||||||
|
|
||||||
describe('(smoke tests)', () => {
|
describe('(smoke tests)', () => {
|
||||||
it('should show the home page', () => {
|
it('should show the home page', () => {
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=10.9.0 <11.0.0",
|
"node": ">=10.9.0 <11.0.0",
|
||||||
"yarn": ">=1.10.1 <1.13.0"
|
"yarn": ">=1.10.1 <1.14.0"
|
||||||
},
|
},
|
||||||
"keywords": [],
|
"keywords": [],
|
||||||
"author": "",
|
"author": "",
|
||||||
|
@ -1,10 +1,14 @@
|
|||||||
module.exports = function processCliCommands() {
|
module.exports = function processCliCommands(createDocMessage) {
|
||||||
return {
|
return {
|
||||||
$runAfter: ['extra-docs-added'],
|
$runAfter: ['extra-docs-added'],
|
||||||
$runBefore: ['rendering-docs'],
|
$runBefore: ['rendering-docs'],
|
||||||
$process(docs) {
|
$process(docs) {
|
||||||
const navigationDoc = docs.find(doc => doc.docType === 'navigation-json');
|
const navigationDoc = docs.find(doc => doc.docType === 'navigation-json');
|
||||||
const navigationNode = navigationDoc && navigationDoc.data['SideNav'].find(node => node.title === 'CLI Commands');
|
const navigationNode = navigationDoc && navigationDoc.data['SideNav'].find(node => node.children && node.children.length && node.children[0].url === 'cli');
|
||||||
|
|
||||||
|
if (!navigationNode) {
|
||||||
|
throw new Error(createDocMessage('Missing `cli` url - CLI Commands must include a first child node with url set at `cli`', navigationDoc));
|
||||||
|
}
|
||||||
|
|
||||||
docs.forEach(doc => {
|
docs.forEach(doc => {
|
||||||
if (doc.docType === 'cli-command') {
|
if (doc.docType === 'cli-command') {
|
||||||
@ -14,9 +18,7 @@ module.exports = function processCliCommands() {
|
|||||||
processOptions(doc, doc.options);
|
processOptions(doc, doc.options);
|
||||||
|
|
||||||
// Add to navigation doc
|
// Add to navigation doc
|
||||||
if (navigationNode) {
|
navigationNode.children.push({ url: doc.path, title: `ng ${doc.name}` });
|
||||||
navigationNode.children.push({ url: doc.path, title: `ng ${doc.name}` });
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -28,11 +30,6 @@ function processOptions(container, options) {
|
|||||||
container.namedOptions = [];
|
container.namedOptions = [];
|
||||||
|
|
||||||
options.forEach(option => {
|
options.forEach(option => {
|
||||||
|
|
||||||
if (option.type === 'boolean' && option.default === undefined) {
|
|
||||||
option.default = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ignore any hidden options
|
// Ignore any hidden options
|
||||||
if (option.hidden) { return; }
|
if (option.hidden) { return; }
|
||||||
|
|
||||||
|
@ -1,41 +1,51 @@
|
|||||||
const testPackage = require('../../helpers/test-package');
|
const testPackage = require('../../helpers/test-package');
|
||||||
const processorFactory = require('./processCliCommands');
|
|
||||||
const Dgeni = require('dgeni');
|
const Dgeni = require('dgeni');
|
||||||
|
|
||||||
describe('processCliCommands processor', () => {
|
describe('processCliCommands processor', () => {
|
||||||
|
|
||||||
|
let dgeni, injector, processor, createDocMessage;
|
||||||
|
|
||||||
|
const navigationStub = {
|
||||||
|
docType: 'navigation-json',
|
||||||
|
data: {
|
||||||
|
SideNav: [{
|
||||||
|
children: [{'url': 'cli'}]
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
dgeni = new Dgeni([testPackage('cli-docs-package')]);
|
||||||
|
injector = dgeni.configureInjector();
|
||||||
|
processor = injector.get('processCliCommands');
|
||||||
|
createDocMessage = injector.get('createDocMessage');
|
||||||
|
});
|
||||||
|
|
||||||
it('should be available on the injector', () => {
|
it('should be available on the injector', () => {
|
||||||
const dgeni = new Dgeni([testPackage('cli-docs-package')]);
|
|
||||||
const injector = dgeni.configureInjector();
|
|
||||||
const processor = injector.get('processCliCommands');
|
|
||||||
expect(processor.$process).toBeDefined();
|
expect(processor.$process).toBeDefined();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should run after the correct processor', () => {
|
it('should run after the correct processor', () => {
|
||||||
const processor = processorFactory();
|
|
||||||
expect(processor.$runAfter).toEqual(['extra-docs-added']);
|
expect(processor.$runAfter).toEqual(['extra-docs-added']);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should run before the correct processor', () => {
|
it('should run before the correct processor', () => {
|
||||||
const processor = processorFactory();
|
|
||||||
expect(processor.$runBefore).toEqual(['rendering-docs']);
|
expect(processor.$runBefore).toEqual(['rendering-docs']);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should collect the names (name + aliases)', () => {
|
it('should collect the names (name + aliases)', () => {
|
||||||
const processor = processorFactory();
|
|
||||||
const doc = {
|
const doc = {
|
||||||
docType: 'cli-command',
|
docType: 'cli-command',
|
||||||
name: 'name',
|
name: 'name',
|
||||||
commandAliases: ['alias1', 'alias2'],
|
commandAliases: ['alias1', 'alias2'],
|
||||||
options: [],
|
options: [],
|
||||||
};
|
};
|
||||||
processor.$process([doc]);
|
processor.$process([doc, navigationStub]);
|
||||||
expect(doc.names).toEqual(['name', 'alias1', 'alias2']);
|
expect(doc.names).toEqual(['name', 'alias1', 'alias2']);
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('options', () => {
|
describe('options', () => {
|
||||||
it('should remove the hidden options', () => {
|
it('should remove the hidden options', () => {
|
||||||
const processor = processorFactory();
|
|
||||||
const doc = {
|
const doc = {
|
||||||
docType: 'cli-command',
|
docType: 'cli-command',
|
||||||
name: 'name',
|
name: 'name',
|
||||||
@ -47,7 +57,7 @@ describe('processCliCommands processor', () => {
|
|||||||
{ name: 'option4', hidden: true },
|
{ name: 'option4', hidden: true },
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
processor.$process([doc]);
|
processor.$process([doc, navigationStub]);
|
||||||
expect(doc.namedOptions).toEqual([
|
expect(doc.namedOptions).toEqual([
|
||||||
jasmine.objectContaining({ name: 'option1' }),
|
jasmine.objectContaining({ name: 'option1' }),
|
||||||
jasmine.objectContaining({ name: 'option3' }),
|
jasmine.objectContaining({ name: 'option3' }),
|
||||||
@ -55,7 +65,6 @@ describe('processCliCommands processor', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should collect the non-hidden positional and named options', () => {
|
it('should collect the non-hidden positional and named options', () => {
|
||||||
const processor = processorFactory();
|
|
||||||
const doc = {
|
const doc = {
|
||||||
docType: 'cli-command',
|
docType: 'cli-command',
|
||||||
name: 'name',
|
name: 'name',
|
||||||
@ -67,7 +76,7 @@ describe('processCliCommands processor', () => {
|
|||||||
{ name: 'positional2', hidden: true, positional: 1},
|
{ name: 'positional2', hidden: true, positional: 1},
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
processor.$process([doc]);
|
processor.$process([doc, navigationStub]);
|
||||||
expect(doc.positionalOptions).toEqual([
|
expect(doc.positionalOptions).toEqual([
|
||||||
jasmine.objectContaining({ name: 'positional1', positional: 0}),
|
jasmine.objectContaining({ name: 'positional1', positional: 0}),
|
||||||
]);
|
]);
|
||||||
@ -77,7 +86,6 @@ describe('processCliCommands processor', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should sort the named options into order by name', () => {
|
it('should sort the named options into order by name', () => {
|
||||||
const processor = processorFactory();
|
|
||||||
const doc = {
|
const doc = {
|
||||||
docType: 'cli-command',
|
docType: 'cli-command',
|
||||||
name: 'name',
|
name: 'name',
|
||||||
@ -88,7 +96,7 @@ describe('processCliCommands processor', () => {
|
|||||||
{ name: 'b' },
|
{ name: 'b' },
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
processor.$process([doc]);
|
processor.$process([doc, navigationStub]);
|
||||||
expect(doc.namedOptions).toEqual([
|
expect(doc.namedOptions).toEqual([
|
||||||
jasmine.objectContaining({ name: 'a' }),
|
jasmine.objectContaining({ name: 'a' }),
|
||||||
jasmine.objectContaining({ name: 'b' }),
|
jasmine.objectContaining({ name: 'b' }),
|
||||||
@ -99,7 +107,6 @@ describe('processCliCommands processor', () => {
|
|||||||
|
|
||||||
describe('subcommands', () => {
|
describe('subcommands', () => {
|
||||||
it('should convert subcommands hash into a collection', () => {
|
it('should convert subcommands hash into a collection', () => {
|
||||||
const processor = processorFactory();
|
|
||||||
const doc = {
|
const doc = {
|
||||||
docType: 'cli-command',
|
docType: 'cli-command',
|
||||||
name: 'name',
|
name: 'name',
|
||||||
@ -124,7 +131,7 @@ describe('processCliCommands processor', () => {
|
|||||||
},
|
},
|
||||||
}],
|
}],
|
||||||
};
|
};
|
||||||
processor.$process([doc]);
|
processor.$process([doc, navigationStub]);
|
||||||
expect(doc.options[0].subcommands).toEqual([
|
expect(doc.options[0].subcommands).toEqual([
|
||||||
jasmine.objectContaining({ name: 'subcommand1' }),
|
jasmine.objectContaining({ name: 'subcommand1' }),
|
||||||
jasmine.objectContaining({ name: 'subcommand2' }),
|
jasmine.objectContaining({ name: 'subcommand2' }),
|
||||||
@ -132,7 +139,6 @@ describe('processCliCommands processor', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should remove the hidden subcommand options', () => {
|
it('should remove the hidden subcommand options', () => {
|
||||||
const processor = processorFactory();
|
|
||||||
const doc = {
|
const doc = {
|
||||||
docType: 'cli-command',
|
docType: 'cli-command',
|
||||||
name: 'name',
|
name: 'name',
|
||||||
@ -157,7 +163,7 @@ describe('processCliCommands processor', () => {
|
|||||||
},
|
},
|
||||||
}],
|
}],
|
||||||
};
|
};
|
||||||
processor.$process([doc]);
|
processor.$process([doc, navigationStub]);
|
||||||
expect(doc.options[0].subcommands[0].namedOptions).toEqual([
|
expect(doc.options[0].subcommands[0].namedOptions).toEqual([
|
||||||
jasmine.objectContaining({ name: 'subcommand1-option1' }),
|
jasmine.objectContaining({ name: 'subcommand1-option1' }),
|
||||||
]);
|
]);
|
||||||
@ -167,7 +173,6 @@ describe('processCliCommands processor', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should collect the non-hidden positional arguments and named options', () => {
|
it('should collect the non-hidden positional arguments and named options', () => {
|
||||||
const processor = processorFactory();
|
|
||||||
const doc = {
|
const doc = {
|
||||||
docType: 'cli-command',
|
docType: 'cli-command',
|
||||||
name: 'name',
|
name: 'name',
|
||||||
@ -192,7 +197,7 @@ describe('processCliCommands processor', () => {
|
|||||||
},
|
},
|
||||||
}],
|
}],
|
||||||
};
|
};
|
||||||
processor.$process([doc]);
|
processor.$process([doc, navigationStub]);
|
||||||
expect(doc.options[0].subcommands[0].positionalOptions).toEqual([
|
expect(doc.options[0].subcommands[0].positionalOptions).toEqual([
|
||||||
jasmine.objectContaining({ name: 'subcommand1-option2', positional: 0}),
|
jasmine.objectContaining({ name: 'subcommand1-option2', positional: 0}),
|
||||||
]);
|
]);
|
||||||
@ -205,7 +210,6 @@ describe('processCliCommands processor', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should sort the named subcommand options into order by name', () => {
|
it('should sort the named subcommand options into order by name', () => {
|
||||||
const processor = processorFactory();
|
|
||||||
const doc = {
|
const doc = {
|
||||||
docType: 'cli-command',
|
docType: 'cli-command',
|
||||||
name: 'name',
|
name: 'name',
|
||||||
@ -224,7 +228,7 @@ describe('processCliCommands processor', () => {
|
|||||||
}
|
}
|
||||||
}],
|
}],
|
||||||
};
|
};
|
||||||
processor.$process([doc]);
|
processor.$process([doc, navigationStub]);
|
||||||
expect(doc.options[0].subcommands[0].namedOptions).toEqual([
|
expect(doc.options[0].subcommands[0].namedOptions).toEqual([
|
||||||
jasmine.objectContaining({ name: 'a' }),
|
jasmine.objectContaining({ name: 'a' }),
|
||||||
jasmine.objectContaining({ name: 'b' }),
|
jasmine.objectContaining({ name: 'b' }),
|
||||||
@ -233,8 +237,7 @@ describe('processCliCommands processor', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should add the command to the CLI node in the navigation doc', () => {
|
it('should add the command to the CLI node in the navigation doc if there is a first child node with a `cli` url', () => {
|
||||||
const processor = processorFactory();
|
|
||||||
const command = {
|
const command = {
|
||||||
docType: 'cli-command',
|
docType: 'cli-command',
|
||||||
name: 'command1',
|
name: 'command1',
|
||||||
@ -247,18 +250,55 @@ describe('processCliCommands processor', () => {
|
|||||||
data: {
|
data: {
|
||||||
SideNav: [
|
SideNav: [
|
||||||
{ url: 'some/page', title: 'Some Page' },
|
{ url: 'some/page', title: 'Some Page' },
|
||||||
{ url: 'cli', title: 'CLI Commands', children: [
|
{
|
||||||
{ url: 'cli', title: 'Using the CLI' },
|
title: 'CLI Commands',
|
||||||
]},
|
tooltip: 'Angular CLI command reference',
|
||||||
{ url: 'other/page', title: 'Other Page' },
|
children: [
|
||||||
|
{
|
||||||
|
'title': 'Overview',
|
||||||
|
'url': 'cli'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{ url: 'other/page', title: 'Other Page' }
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
processor.$process([command, navigation]);
|
processor.$process([command, navigation]);
|
||||||
expect(navigation.data.SideNav[1].title).toEqual('CLI Commands');
|
expect(navigation.data.SideNav[1].title).toEqual('CLI Commands');
|
||||||
expect(navigation.data.SideNav[1].children).toEqual([
|
expect(navigation.data.SideNav[1].children).toEqual([
|
||||||
{ url: 'cli', title: 'Using the CLI' },
|
{ url: 'cli', title: 'Overview' },
|
||||||
{ url: 'cli/command1', title: 'ng command1' },
|
{ url: 'cli/command1', title: 'ng command1' },
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should complain if there is no child with `cli` url', () => {
|
||||||
|
const command = {
|
||||||
|
docType: 'cli-command',
|
||||||
|
name: 'command1',
|
||||||
|
commandAliases: ['alias1', 'alias2'],
|
||||||
|
options: [],
|
||||||
|
path: 'cli/command1',
|
||||||
|
};
|
||||||
|
const navigation = {
|
||||||
|
docType: 'navigation-json',
|
||||||
|
data: {
|
||||||
|
SideNav: [
|
||||||
|
{ url: 'some/page', title: 'Some Page' },
|
||||||
|
{
|
||||||
|
title: 'CLI Commands',
|
||||||
|
tooltip: 'Angular CLI command reference',
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
'title': 'Overview',
|
||||||
|
'url': 'client'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{ url: 'other/page', title: 'Other Page' }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
};
|
||||||
|
expect(() => processor.$process([command, navigation])).toThrowError(createDocMessage('Missing `cli` url - CLI Commands must include a first child node with url set at `cli`', navigation));
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@ -75,6 +75,7 @@
|
|||||||
],
|
],
|
||||||
"radix": true,
|
"radix": true,
|
||||||
"semicolon": [
|
"semicolon": [
|
||||||
|
true,
|
||||||
"always"
|
"always"
|
||||||
],
|
],
|
||||||
"triple-equals": [
|
"triple-equals": [
|
||||||
|
@ -798,9 +798,10 @@ anymatch@^2.0.0:
|
|||||||
micromatch "^3.1.4"
|
micromatch "^3.1.4"
|
||||||
normalize-path "^2.1.1"
|
normalize-path "^2.1.1"
|
||||||
|
|
||||||
app-root-path@^2.0.1:
|
app-root-path@^2.1.0:
|
||||||
version "2.0.1"
|
version "2.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.0.1.tgz#cd62dcf8e4fd5a417efc664d2e5b10653c651b46"
|
resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.1.0.tgz#98bf6599327ecea199309866e8140368fd2e646a"
|
||||||
|
integrity sha1-mL9lmTJ+zqGZMJhm6BQDaP0uZGo=
|
||||||
|
|
||||||
append-transform@^0.4.0:
|
append-transform@^0.4.0:
|
||||||
version "0.4.0"
|
version "0.4.0"
|
||||||
@ -1976,16 +1977,17 @@ code-point-at@^1.0.0:
|
|||||||
version "1.1.0"
|
version "1.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
|
resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
|
||||||
|
|
||||||
codelyzer@~4.2.1:
|
codelyzer@~4.5.0:
|
||||||
version "4.2.1"
|
version "4.5.0"
|
||||||
resolved "https://registry.yarnpkg.com/codelyzer/-/codelyzer-4.2.1.tgz#d56eaacefca7e8138aac0a630e484bdb09988544"
|
resolved "https://registry.yarnpkg.com/codelyzer/-/codelyzer-4.5.0.tgz#a65ddeeeca2894653253a89bfa229118ff9f59b1"
|
||||||
|
integrity sha512-oO6vCkjqsVrEsmh58oNlnJkRXuA30hF8cdNAQV9DytEalDwyOFRvHMnlKFzmOStNerOmPGZU9GAHnBo4tGvtiQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
app-root-path "^2.0.1"
|
app-root-path "^2.1.0"
|
||||||
css-selector-tokenizer "^0.7.0"
|
css-selector-tokenizer "^0.7.0"
|
||||||
cssauron "^1.4.0"
|
cssauron "^1.4.0"
|
||||||
semver-dsl "^1.0.1"
|
semver-dsl "^1.0.1"
|
||||||
source-map "^0.5.6"
|
source-map "^0.5.7"
|
||||||
sprintf-js "^1.0.3"
|
sprintf-js "^1.1.1"
|
||||||
|
|
||||||
coffee-script@^1.12.5:
|
coffee-script@^1.12.5:
|
||||||
version "1.12.7"
|
version "1.12.7"
|
||||||
@ -9291,9 +9293,10 @@ split-string@^3.0.1, split-string@^3.0.2:
|
|||||||
dependencies:
|
dependencies:
|
||||||
extend-shallow "^3.0.0"
|
extend-shallow "^3.0.0"
|
||||||
|
|
||||||
sprintf-js@^1.0.3:
|
sprintf-js@^1.1.1:
|
||||||
version "1.1.1"
|
version "1.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.1.tgz#36be78320afe5801f6cea3ee78b6e5aab940ea0c"
|
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673"
|
||||||
|
integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==
|
||||||
|
|
||||||
sprintf-js@~1.0.2:
|
sprintf-js@~1.0.2:
|
||||||
version "1.0.3"
|
version "1.0.3"
|
||||||
|
@ -8,6 +8,15 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"cli-hello-world-ivy": {
|
||||||
|
"master": {
|
||||||
|
"uncompressed": {
|
||||||
|
"runtime": 1440,
|
||||||
|
"main": 507677,
|
||||||
|
"polyfills": 38390
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"hello_world__closure": {
|
"hello_world__closure": {
|
||||||
"master": {
|
"master": {
|
||||||
"uncompressed": {
|
"uncompressed": {
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
"src/assets"
|
"src/assets"
|
||||||
],
|
],
|
||||||
"styles": [
|
"styles": [
|
||||||
"src/styles.css"
|
"src/styles.scss"
|
||||||
],
|
],
|
||||||
"scripts": []
|
"scripts": []
|
||||||
},
|
},
|
||||||
@ -82,7 +82,7 @@
|
|||||||
"tsConfig": "src/tsconfig.spec.json",
|
"tsConfig": "src/tsconfig.spec.json",
|
||||||
"karmaConfig": "src/karma.conf.js",
|
"karmaConfig": "src/karma.conf.js",
|
||||||
"styles": [
|
"styles": [
|
||||||
"src/styles.css"
|
"src/styles.scss"
|
||||||
],
|
],
|
||||||
"scripts": [],
|
"scripts": [],
|
||||||
"assets": [
|
"assets": [
|
||||||
|
@ -1,20 +0,0 @@
|
|||||||
import { AppPage } from './app.po';
|
|
||||||
import { browser } from 'protractor';
|
|
||||||
|
|
||||||
describe('workspace-project App', () => {
|
|
||||||
let page: AppPage;
|
|
||||||
|
|
||||||
beforeEach(() => {
|
|
||||||
page = new AppPage();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should display welcome message', () => {
|
|
||||||
page.navigateTo();
|
|
||||||
expect(page.getTitleText()).toEqual('Welcome to demo!');
|
|
||||||
});
|
|
||||||
|
|
||||||
afterEach(async () => {
|
|
||||||
const logs = await browser.manage().logs().get('browser');
|
|
||||||
expect(logs).toEqual([]);
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,11 +0,0 @@
|
|||||||
import { browser, by, element } from 'protractor';
|
|
||||||
|
|
||||||
export class AppPage {
|
|
||||||
navigateTo() {
|
|
||||||
return browser.get('/') as Promise<any>;
|
|
||||||
}
|
|
||||||
|
|
||||||
getTitleText() {
|
|
||||||
return element(by.css('app-root h1')).getText() as Promise<string>;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,14 +0,0 @@
|
|||||||
<!doctype html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Demo</title>
|
|
||||||
<base href="/">
|
|
||||||
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
||||||
<link rel="icon" type="image/x-icon" href="favicon.ico">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<app-root></app-root>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -7,18 +7,12 @@ function testBazel() {
|
|||||||
bazel version
|
bazel version
|
||||||
rm -rf demo
|
rm -rf demo
|
||||||
# Create project
|
# Create project
|
||||||
ng new demo --collection=@angular/bazel --defaults --skip-git
|
ng new demo --collection=@angular/bazel --defaults --skip-git --style=scss
|
||||||
node replace_angular_repo.js "./demo/WORKSPACE"
|
node replace_angular_repo.js "./demo/WORKSPACE"
|
||||||
cd demo
|
cd demo
|
||||||
# TODO(kyliau) Remove this once the type annotations are added to AppPage
|
|
||||||
# https://github.com/angular/angular-cli/pull/13406
|
|
||||||
cp ../app.po.ts ./e2e/src/
|
|
||||||
cp ../package.json.replace ./package.json
|
cp ../package.json.replace ./package.json
|
||||||
# Run build
|
ng generate component widget --style=css
|
||||||
# TODO(kyliau): Use `bazel build` for now. Running `ng build` requires
|
ng build
|
||||||
# node_modules to be available in project directory.
|
|
||||||
bazel build //src:bundle
|
|
||||||
# Run test
|
|
||||||
ng test
|
ng test
|
||||||
ng e2e
|
ng e2e
|
||||||
}
|
}
|
||||||
@ -26,13 +20,7 @@ function testBazel() {
|
|||||||
function testNonBazel() {
|
function testNonBazel() {
|
||||||
# Replace angular.json that uses Bazel builder with the default generated by CLI
|
# Replace angular.json that uses Bazel builder with the default generated by CLI
|
||||||
cp ../angular.json.original ./angular.json
|
cp ../angular.json.original ./angular.json
|
||||||
# TODO(kyliau) Remove this once the additional assertion is added to CLI
|
|
||||||
cp ../app.e2e-spec.ts ./e2e/src/
|
|
||||||
# TODO(kyliau) Remove this once web_package rule is in use
|
|
||||||
cp ../index.html ./src/
|
|
||||||
rm -rf dist src/main.dev.ts src/main.prod.ts
|
rm -rf dist src/main.dev.ts src/main.prod.ts
|
||||||
# Just make a symlink instead of full yarn install to expose node_modules
|
|
||||||
ln -s $(bazel info output_base)/external/npm/node_modules node_modules
|
|
||||||
ng build --progress=false
|
ng build --progress=false
|
||||||
ng test --progress=false --watch=false
|
ng test --progress=false --watch=false
|
||||||
ng e2e --configuration=ci
|
ng e2e --configuration=ci
|
||||||
|
@ -2,12 +2,12 @@
|
|||||||
# yarn lockfile v1
|
# yarn lockfile v1
|
||||||
|
|
||||||
|
|
||||||
"@angular-devkit/architect@0.12.1":
|
"@angular-devkit/architect@0.13.0-rc.0":
|
||||||
version "0.12.1"
|
version "0.13.0-rc.0"
|
||||||
resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.12.1.tgz#397768d1ccd0cef76db96d6b39db8aebad68c031"
|
resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.13.0-rc.0.tgz#d9bc43a3811f293269cf488539b72ce27afc6cdb"
|
||||||
integrity sha512-1ozBP0ZAApkSfuPpZ7b9vShU8smNxb98jW+65S12cPOxv1bVVxCj5sTmC3sSfXapgq/pMzblbaVSKOG7Ajz0vQ==
|
integrity sha512-abqtT5qyfTL29hf9be1MnaSVjIMJXJq+Oc+FZJ4RyQ+Sjs2zo+DjAJo62P1vS55JkLE1TFpEcjHkg118Cz7yOw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@angular-devkit/core" "7.2.1"
|
"@angular-devkit/core" "7.3.0-rc.0"
|
||||||
rxjs "6.3.3"
|
rxjs "6.3.3"
|
||||||
|
|
||||||
"@angular-devkit/architect@^0.10.6":
|
"@angular-devkit/architect@^0.10.6":
|
||||||
@ -40,12 +40,12 @@
|
|||||||
rxjs "6.3.3"
|
rxjs "6.3.3"
|
||||||
source-map "0.7.3"
|
source-map "0.7.3"
|
||||||
|
|
||||||
"@angular-devkit/core@7.2.1":
|
"@angular-devkit/core@7.3.0-rc.0":
|
||||||
version "7.2.1"
|
version "7.3.0-rc.0"
|
||||||
resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-7.2.1.tgz#8c6df59eab77bcc98a348c8cdf9eb217c8b751a5"
|
resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-7.3.0-rc.0.tgz#e555a08d85259855ff1946f4268936a1aadd38f1"
|
||||||
integrity sha512-zOozPswSM1cTkltw5LeSPoZ/fJ2d3vN304IVgKgrM5/Fs54bd7nTaBcAK+HvjKS+5KmykYrXW47Q4CdFJikluQ==
|
integrity sha512-0vHuw1gIMh79tI+gRxCMn89U1DnjmBnqybVktaf9YXi9xshxd+nnFb31v7n1tJQVQiQNzGxk3hviFnkzxLZipw==
|
||||||
dependencies:
|
dependencies:
|
||||||
ajv "6.6.2"
|
ajv "6.7.0"
|
||||||
chokidar "2.0.4"
|
chokidar "2.0.4"
|
||||||
fast-json-stable-stringify "2.0.0"
|
fast-json-stable-stringify "2.0.0"
|
||||||
rxjs "6.3.3"
|
rxjs "6.3.3"
|
||||||
@ -59,16 +59,16 @@
|
|||||||
"@angular-devkit/core" "7.1.3"
|
"@angular-devkit/core" "7.1.3"
|
||||||
rxjs "6.3.3"
|
rxjs "6.3.3"
|
||||||
|
|
||||||
"@angular-devkit/schematics@7.2.1":
|
"@angular-devkit/schematics@7.3.0-rc.0":
|
||||||
version "7.2.1"
|
version "7.3.0-rc.0"
|
||||||
resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-7.2.1.tgz#9c1c784f4a81a3a840fa4a1435948c6203be6062"
|
resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-7.3.0-rc.0.tgz#9f1e1f6942da36b12c81241398ed6ca8b2e65875"
|
||||||
integrity sha512-jEhwkeDn8exgJBfUwMc6rdtDkxHJkUmKPTn4M436bkMMMa9KFPFbPpzp9weKpB3SbRjM3Mu90JprO4C7qDtCcg==
|
integrity sha512-noqcQIOvah2G126DTFKY5Kiga8UwI9cKzyhQdNlf+8hAZpnWwTURItQ5xuMJg/XfRQLUSg9gWS2h1cI9AD7mxQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@angular-devkit/core" "7.2.1"
|
"@angular-devkit/core" "7.3.0-rc.0"
|
||||||
rxjs "6.3.3"
|
rxjs "6.3.3"
|
||||||
|
|
||||||
"@angular/bazel@file:../../dist/packages-dist/bazel":
|
"@angular/bazel@file:../../dist/packages-dist/bazel":
|
||||||
version "7.2.0"
|
version "8.0.0-beta.0"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@angular-devkit/architect" "^0.10.6"
|
"@angular-devkit/architect" "^0.10.6"
|
||||||
"@angular-devkit/core" "^7.0.4"
|
"@angular-devkit/core" "^7.0.4"
|
||||||
@ -81,16 +81,20 @@
|
|||||||
tsickle "0.34.0"
|
tsickle "0.34.0"
|
||||||
|
|
||||||
"@angular/cli@file:../../node_modules/@angular/cli":
|
"@angular/cli@file:../../node_modules/@angular/cli":
|
||||||
version "7.2.1"
|
version "7.3.0-rc.0"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@angular-devkit/architect" "0.12.1"
|
"@angular-devkit/architect" "0.13.0-rc.0"
|
||||||
"@angular-devkit/core" "7.2.1"
|
"@angular-devkit/core" "7.3.0-rc.0"
|
||||||
"@angular-devkit/schematics" "7.2.1"
|
"@angular-devkit/schematics" "7.3.0-rc.0"
|
||||||
"@schematics/angular" "7.2.1"
|
"@schematics/angular" "7.3.0-rc.0"
|
||||||
"@schematics/update" "0.12.1"
|
"@schematics/update" "0.13.0-rc.0"
|
||||||
|
"@yarnpkg/lockfile" "1.1.0"
|
||||||
|
ini "1.3.5"
|
||||||
inquirer "6.2.1"
|
inquirer "6.2.1"
|
||||||
opn "5.3.0"
|
npm-package-arg "6.1.0"
|
||||||
semver "5.5.1"
|
opn "5.4.0"
|
||||||
|
pacote "9.4.0"
|
||||||
|
semver "5.6.0"
|
||||||
symbol-observable "1.2.0"
|
symbol-observable "1.2.0"
|
||||||
|
|
||||||
"@bazel/bazel-darwin_x64@0.21.0":
|
"@bazel/bazel-darwin_x64@0.21.0":
|
||||||
@ -125,13 +129,13 @@
|
|||||||
source-map-support "0.5.9"
|
source-map-support "0.5.9"
|
||||||
tsutils "2.27.2"
|
tsutils "2.27.2"
|
||||||
|
|
||||||
"@schematics/angular@7.2.1":
|
"@schematics/angular@7.3.0-rc.0":
|
||||||
version "7.2.1"
|
version "7.3.0-rc.0"
|
||||||
resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-7.2.1.tgz#9eeab1354ec8d970121cc067e9636098ab84e152"
|
resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-7.3.0-rc.0.tgz#7519aa692dcaed63b9caa7d824846511905b1bfc"
|
||||||
integrity sha512-UdqU8udVr693BZ6uaZ7+el/VFlTjrmp56OS+6YaziyAko84e1Q1Fcx+fwdHugy4V3YmQhTVsyOPSEsphnwSwOA==
|
integrity sha512-yjCHgLSAqQKVZrZgf8F37cPQthhucIA10ofpIHPEZrvHwKBQhM9K3yfB7uYgkj4gzPTdREedb7Rm3/HY45L/1A==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@angular-devkit/core" "7.2.1"
|
"@angular-devkit/core" "7.3.0-rc.0"
|
||||||
"@angular-devkit/schematics" "7.2.1"
|
"@angular-devkit/schematics" "7.3.0-rc.0"
|
||||||
typescript "3.2.2"
|
typescript "3.2.2"
|
||||||
|
|
||||||
"@schematics/angular@^7.0.4":
|
"@schematics/angular@^7.0.4":
|
||||||
@ -143,18 +147,18 @@
|
|||||||
"@angular-devkit/schematics" "7.1.3"
|
"@angular-devkit/schematics" "7.1.3"
|
||||||
typescript "3.1.6"
|
typescript "3.1.6"
|
||||||
|
|
||||||
"@schematics/update@0.12.1":
|
"@schematics/update@0.13.0-rc.0":
|
||||||
version "0.12.1"
|
version "0.13.0-rc.0"
|
||||||
resolved "https://registry.yarnpkg.com/@schematics/update/-/update-0.12.1.tgz#44d853321ae8a56c43a579c0639d26d625001037"
|
resolved "https://registry.yarnpkg.com/@schematics/update/-/update-0.13.0-rc.0.tgz#3d5bb6ce7d8d1ea44a0e0a644022bc655b80ae80"
|
||||||
integrity sha512-P92tDxy0AA1NPhaThiJ7fIFxIC4jzlGK7sJlpbnRREBImsI/O9gmGaV8Kjy+75vaEjqpWaU2oj1hnWqkmxSK1A==
|
integrity sha512-XoU3TnaDcIFX7TU37bfjfAW0tI1tRD5DYQFHDBNOgS+78InGvR9+1CVzRJ4uWOjk0i+ZzDaGbYyR0iA47jSOTA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@angular-devkit/core" "7.2.1"
|
"@angular-devkit/core" "7.3.0-rc.0"
|
||||||
"@angular-devkit/schematics" "7.2.1"
|
"@angular-devkit/schematics" "7.3.0-rc.0"
|
||||||
"@yarnpkg/lockfile" "1.1.0"
|
"@yarnpkg/lockfile" "1.1.0"
|
||||||
ini "1.3.5"
|
ini "1.3.5"
|
||||||
pacote "9.1.1"
|
pacote "9.4.0"
|
||||||
rxjs "6.3.3"
|
rxjs "6.3.3"
|
||||||
semver "5.5.1"
|
semver "5.6.0"
|
||||||
semver-intersect "1.4.0"
|
semver-intersect "1.4.0"
|
||||||
|
|
||||||
"@types/node@6.0.84":
|
"@types/node@6.0.84":
|
||||||
@ -204,10 +208,10 @@ ajv@6.5.3:
|
|||||||
json-schema-traverse "^0.4.1"
|
json-schema-traverse "^0.4.1"
|
||||||
uri-js "^4.2.2"
|
uri-js "^4.2.2"
|
||||||
|
|
||||||
ajv@6.6.2:
|
ajv@6.7.0:
|
||||||
version "6.6.2"
|
version "6.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.6.2.tgz#caceccf474bf3fc3ce3b147443711a24063cc30d"
|
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.7.0.tgz#e3ce7bb372d6577bb1839f1dfdfcbf5ad2948d96"
|
||||||
integrity sha512-FBHEW6Jf5TB9MGBgUUA9XHkTbjXYfAUjY43ACMfmdMRHniyoMHjHjzD50OK8LGDWQwp4rWEsIq5kEqq7rvIM1g==
|
integrity sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==
|
||||||
dependencies:
|
dependencies:
|
||||||
fast-deep-equal "^2.0.1"
|
fast-deep-equal "^2.0.1"
|
||||||
fast-json-stable-stringify "^2.0.0"
|
fast-json-stable-stringify "^2.0.0"
|
||||||
@ -328,7 +332,7 @@ binary-extensions@^1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.12.0.tgz#c2d780f53d45bba8317a8902d4ceeaf3a6385b14"
|
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.12.0.tgz#c2d780f53d45bba8317a8902d4ceeaf3a6385b14"
|
||||||
integrity sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==
|
integrity sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==
|
||||||
|
|
||||||
bluebird@^3.5.1, bluebird@^3.5.2:
|
bluebird@^3.5.1, bluebird@^3.5.3:
|
||||||
version "3.5.3"
|
version "3.5.3"
|
||||||
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7"
|
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7"
|
||||||
integrity sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==
|
integrity sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==
|
||||||
@ -379,7 +383,7 @@ bytebuffer@~5:
|
|||||||
dependencies:
|
dependencies:
|
||||||
long "~3"
|
long "~3"
|
||||||
|
|
||||||
cacache@^11.0.1, cacache@^11.2.0:
|
cacache@^11.0.1:
|
||||||
version "11.3.1"
|
version "11.3.1"
|
||||||
resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.1.tgz#d09d25f6c4aca7a6d305d141ae332613aa1d515f"
|
resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.1.tgz#d09d25f6c4aca7a6d305d141ae332613aa1d515f"
|
||||||
integrity sha512-2PEw4cRRDu+iQvBTTuttQifacYjLPhET+SYO/gEFMy8uhi+jlJREDAjSF5FWSdV/Aw5h18caHA7vMTw2c+wDzA==
|
integrity sha512-2PEw4cRRDu+iQvBTTuttQifacYjLPhET+SYO/gEFMy8uhi+jlJREDAjSF5FWSdV/Aw5h18caHA7vMTw2c+wDzA==
|
||||||
@ -399,6 +403,26 @@ cacache@^11.0.1, cacache@^11.2.0:
|
|||||||
unique-filename "^1.1.0"
|
unique-filename "^1.1.0"
|
||||||
y18n "^4.0.0"
|
y18n "^4.0.0"
|
||||||
|
|
||||||
|
cacache@^11.3.2:
|
||||||
|
version "11.3.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.2.tgz#2d81e308e3d258ca38125b676b98b2ac9ce69bfa"
|
||||||
|
integrity sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==
|
||||||
|
dependencies:
|
||||||
|
bluebird "^3.5.3"
|
||||||
|
chownr "^1.1.1"
|
||||||
|
figgy-pudding "^3.5.1"
|
||||||
|
glob "^7.1.3"
|
||||||
|
graceful-fs "^4.1.15"
|
||||||
|
lru-cache "^5.1.1"
|
||||||
|
mississippi "^3.0.0"
|
||||||
|
mkdirp "^0.5.1"
|
||||||
|
move-concurrently "^1.0.1"
|
||||||
|
promise-inflight "^1.0.1"
|
||||||
|
rimraf "^2.6.2"
|
||||||
|
ssri "^6.0.1"
|
||||||
|
unique-filename "^1.1.1"
|
||||||
|
y18n "^4.0.0"
|
||||||
|
|
||||||
cache-base@^1.0.1:
|
cache-base@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
|
resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
|
||||||
@ -877,7 +901,7 @@ glob@^7.0.0, glob@^7.0.5, glob@^7.1.2, glob@^7.1.3:
|
|||||||
once "^1.3.0"
|
once "^1.3.0"
|
||||||
path-is-absolute "^1.0.0"
|
path-is-absolute "^1.0.0"
|
||||||
|
|
||||||
graceful-fs@^4.1.11, graceful-fs@^4.1.2:
|
graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2:
|
||||||
version "4.1.15"
|
version "4.1.15"
|
||||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"
|
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"
|
||||||
integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==
|
integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==
|
||||||
@ -1260,6 +1284,13 @@ lru-cache@^4.1.2, lru-cache@^4.1.3:
|
|||||||
pseudomap "^1.0.2"
|
pseudomap "^1.0.2"
|
||||||
yallist "^2.1.2"
|
yallist "^2.1.2"
|
||||||
|
|
||||||
|
lru-cache@^5.1.1:
|
||||||
|
version "5.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
|
||||||
|
integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
|
||||||
|
dependencies:
|
||||||
|
yallist "^3.0.2"
|
||||||
|
|
||||||
make-fetch-happen@^4.0.1:
|
make-fetch-happen@^4.0.1:
|
||||||
version "4.0.1"
|
version "4.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-4.0.1.tgz#141497cb878f243ba93136c83d8aba12c216c083"
|
resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-4.0.1.tgz#141497cb878f243ba93136c83d8aba12c216c083"
|
||||||
@ -1489,7 +1520,7 @@ npm-bundled@^1.0.1:
|
|||||||
resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.5.tgz#3c1732b7ba936b3a10325aef616467c0ccbcc979"
|
resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.5.tgz#3c1732b7ba936b3a10325aef616467c0ccbcc979"
|
||||||
integrity sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g==
|
integrity sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g==
|
||||||
|
|
||||||
npm-package-arg@^6.0.0, npm-package-arg@^6.1.0:
|
npm-package-arg@6.1.0, npm-package-arg@^6.0.0, npm-package-arg@^6.1.0:
|
||||||
version "6.1.0"
|
version "6.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.0.tgz#15ae1e2758a5027efb4c250554b85a737db7fcc1"
|
resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.0.tgz#15ae1e2758a5027efb4c250554b85a737db7fcc1"
|
||||||
integrity sha512-zYbhP2k9DbJhA0Z3HKUePUgdB1x7MfIfKssC+WLPFMKTBZKpZh5m13PgexJjCq6KW7j17r0jHWcCpxEqnnncSA==
|
integrity sha512-zYbhP2k9DbJhA0Z3HKUePUgdB1x7MfIfKssC+WLPFMKTBZKpZh5m13PgexJjCq6KW7j17r0jHWcCpxEqnnncSA==
|
||||||
@ -1507,7 +1538,7 @@ npm-packlist@^1.1.12, npm-packlist@^1.1.6:
|
|||||||
ignore-walk "^3.0.1"
|
ignore-walk "^3.0.1"
|
||||||
npm-bundled "^1.0.1"
|
npm-bundled "^1.0.1"
|
||||||
|
|
||||||
npm-pick-manifest@^2.1.0:
|
npm-pick-manifest@^2.2.3:
|
||||||
version "2.2.3"
|
version "2.2.3"
|
||||||
resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-2.2.3.tgz#32111d2a9562638bb2c8f2bf27f7f3092c8fae40"
|
resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-2.2.3.tgz#32111d2a9562638bb2c8f2bf27f7f3092c8fae40"
|
||||||
integrity sha512-+IluBC5K201+gRU85vFlUwX3PFShZAbAgDNp2ewJdWMVSppdo/Zih0ul2Ecky/X7b51J7LrrUAP+XOmOCvYZqA==
|
integrity sha512-+IluBC5K201+gRU85vFlUwX3PFShZAbAgDNp2ewJdWMVSppdo/Zih0ul2Ecky/X7b51J7LrrUAP+XOmOCvYZqA==
|
||||||
@ -1585,10 +1616,10 @@ onetime@^2.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
mimic-fn "^1.0.0"
|
mimic-fn "^1.0.0"
|
||||||
|
|
||||||
opn@5.3.0:
|
opn@5.4.0:
|
||||||
version "5.3.0"
|
version "5.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/opn/-/opn-5.3.0.tgz#64871565c863875f052cfdf53d3e3cb5adb53b1c"
|
resolved "https://registry.yarnpkg.com/opn/-/opn-5.4.0.tgz#cb545e7aab78562beb11aa3bfabc7042e1761035"
|
||||||
integrity sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==
|
integrity sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==
|
||||||
dependencies:
|
dependencies:
|
||||||
is-wsl "^1.1.0"
|
is-wsl "^1.1.0"
|
||||||
|
|
||||||
@ -1622,17 +1653,17 @@ osenv@^0.1.4, osenv@^0.1.5:
|
|||||||
os-homedir "^1.0.0"
|
os-homedir "^1.0.0"
|
||||||
os-tmpdir "^1.0.0"
|
os-tmpdir "^1.0.0"
|
||||||
|
|
||||||
pacote@9.1.1:
|
pacote@9.4.0:
|
||||||
version "9.1.1"
|
version "9.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/pacote/-/pacote-9.1.1.tgz#25091f75a25021de8be8d34cc6408728fca3579b"
|
resolved "https://registry.yarnpkg.com/pacote/-/pacote-9.4.0.tgz#af979abdeb175cd347c3e33be3241af1ed254807"
|
||||||
integrity sha512-f28Rq5ozzKAA9YwIKw61/ipwAatUZseYmVssDbHHaexF0wRIVotapVEZPAjOT7Eu3LYVqEp0NVpNizoAnYBUaA==
|
integrity sha512-WQ1KL/phGMkedYEQx9ODsjj7xvwLSpdFJJdEXrLyw5SILMxcTNt5DTxT2Z93fXuLFYJBlZJdnwdalrQdB/rX5w==
|
||||||
dependencies:
|
dependencies:
|
||||||
bluebird "^3.5.2"
|
bluebird "^3.5.3"
|
||||||
cacache "^11.2.0"
|
cacache "^11.3.2"
|
||||||
figgy-pudding "^3.5.1"
|
figgy-pudding "^3.5.1"
|
||||||
get-stream "^4.1.0"
|
get-stream "^4.1.0"
|
||||||
glob "^7.1.3"
|
glob "^7.1.3"
|
||||||
lru-cache "^4.1.3"
|
lru-cache "^5.1.1"
|
||||||
make-fetch-happen "^4.0.1"
|
make-fetch-happen "^4.0.1"
|
||||||
minimatch "^3.0.4"
|
minimatch "^3.0.4"
|
||||||
minipass "^2.3.5"
|
minipass "^2.3.5"
|
||||||
@ -1641,7 +1672,7 @@ pacote@9.1.1:
|
|||||||
normalize-package-data "^2.4.0"
|
normalize-package-data "^2.4.0"
|
||||||
npm-package-arg "^6.1.0"
|
npm-package-arg "^6.1.0"
|
||||||
npm-packlist "^1.1.12"
|
npm-packlist "^1.1.12"
|
||||||
npm-pick-manifest "^2.1.0"
|
npm-pick-manifest "^2.2.3"
|
||||||
npm-registry-fetch "^3.8.0"
|
npm-registry-fetch "^3.8.0"
|
||||||
osenv "^0.1.5"
|
osenv "^0.1.5"
|
||||||
promise-inflight "^1.0.1"
|
promise-inflight "^1.0.1"
|
||||||
@ -1651,7 +1682,7 @@ pacote@9.1.1:
|
|||||||
safe-buffer "^5.1.2"
|
safe-buffer "^5.1.2"
|
||||||
semver "^5.6.0"
|
semver "^5.6.0"
|
||||||
ssri "^6.0.1"
|
ssri "^6.0.1"
|
||||||
tar "^4.4.6"
|
tar "^4.4.8"
|
||||||
unique-filename "^1.1.1"
|
unique-filename "^1.1.1"
|
||||||
which "^1.3.1"
|
which "^1.3.1"
|
||||||
|
|
||||||
@ -1913,11 +1944,6 @@ semver-intersect@1.4.0:
|
|||||||
resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
|
resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
|
||||||
integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==
|
integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==
|
||||||
|
|
||||||
semver@5.5.1:
|
|
||||||
version "5.5.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477"
|
|
||||||
integrity sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==
|
|
||||||
|
|
||||||
set-blocking@~2.0.0:
|
set-blocking@~2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
|
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
|
||||||
@ -2170,7 +2196,7 @@ symbol-observable@1.2.0:
|
|||||||
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
|
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
|
||||||
integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==
|
integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==
|
||||||
|
|
||||||
tar@^4, tar@^4.4.6:
|
tar@^4, tar@^4.4.8:
|
||||||
version "4.4.8"
|
version "4.4.8"
|
||||||
resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d"
|
resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d"
|
||||||
integrity sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==
|
integrity sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==
|
||||||
|
@ -13,3 +13,6 @@ build --local_resources=14336,8.0,1.0
|
|||||||
|
|
||||||
# Use the Angular 6 compiler
|
# Use the Angular 6 compiler
|
||||||
build --define=compile=legacy
|
build --define=compile=legacy
|
||||||
|
|
||||||
|
# Don't create symlinks
|
||||||
|
build --symlink_prefix=/
|
||||||
|
@ -37,9 +37,14 @@ ts_devserver(
|
|||||||
|
|
||||||
load("@build_bazel_rules_nodejs//:defs.bzl", "nodejs_binary", "rollup_bundle")
|
load("@build_bazel_rules_nodejs//:defs.bzl", "nodejs_binary", "rollup_bundle")
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "empty_node_modules",
|
||||||
|
)
|
||||||
|
|
||||||
rollup_bundle(
|
rollup_bundle(
|
||||||
name = "bundle",
|
name = "bundle",
|
||||||
entry_point = "src/main",
|
entry_point = "src/main",
|
||||||
|
node_modules = ":empty_node_modules",
|
||||||
deps = ["//src"],
|
deps = ["//src"],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -2,24 +2,24 @@
|
|||||||
# yarn lockfile v1
|
# yarn lockfile v1
|
||||||
|
|
||||||
|
|
||||||
"@bazel/bazel-darwin_x64@0.18.0":
|
"@bazel/bazel-darwin_x64@0.20.0":
|
||||||
version "0.18.0"
|
version "0.20.0"
|
||||||
resolved "https://registry.yarnpkg.com/@bazel/bazel-darwin_x64/-/bazel-darwin_x64-0.18.0.tgz#bab437605a702279d42f59caa4741bb327eb7dbc"
|
resolved "https://registry.yarnpkg.com/@bazel/bazel-darwin_x64/-/bazel-darwin_x64-0.20.0.tgz#648d61c32a3c5fccb7bf70b753071b6e54b11f21"
|
||||||
integrity sha512-um2OzgLL2Gd/W6joOpvrSTcqpnupliPNpwe/uE7sB0huBSJ/4Im0w2IlCTI6C7OfgMcbpUj4YxgUa9T6u6WY6w==
|
integrity sha512-zeoeVK504341GfnaxdaB4pFzQV0YOK1HLiYj3/ocamPFxAJRh9abvKB8iOpqD5Oal0j7VsINxnXCjovp9a4urA==
|
||||||
|
|
||||||
"@bazel/bazel-linux_x64@0.18.0":
|
"@bazel/bazel-linux_x64@0.20.0":
|
||||||
version "0.18.0"
|
version "0.20.0"
|
||||||
resolved "https://registry.yarnpkg.com/@bazel/bazel-linux_x64/-/bazel-linux_x64-0.18.0.tgz#0c02b2404ec95c180e17615cc7079ee07df48a69"
|
resolved "https://registry.yarnpkg.com/@bazel/bazel-linux_x64/-/bazel-linux_x64-0.20.0.tgz#2568628a0d0b85dcc69d0ab701b1d6e10551357d"
|
||||||
integrity sha512-Rq8X8bL6SgQvbOHnfPhSgF6hp+f6Fbt2w6pRmBlFvV1J+CeUyrSrrRXfnnO1bjIuq05Ur3mV8ULA0qK6rtA5lQ==
|
integrity sha512-PpHzoEqfXty8dc1/p1tVFXtbPyrE1n0N79QmYePjJ5mJMyW7uBF/zV4IajYY8+IpJEcDVq5v4BavSexOmVJRmA==
|
||||||
|
|
||||||
"@bazel/bazel-win32_x64@0.18.0":
|
"@bazel/bazel-win32_x64@0.20.0":
|
||||||
version "0.18.0"
|
version "0.20.0"
|
||||||
resolved "https://registry.yarnpkg.com/@bazel/bazel-win32_x64/-/bazel-win32_x64-0.18.0.tgz#aa4575fb00066dcf59a6d464971774dea6a0bafd"
|
resolved "https://registry.yarnpkg.com/@bazel/bazel-win32_x64/-/bazel-win32_x64-0.20.0.tgz#af7d041dae4c066e7aa8618949e2de1aad07495e"
|
||||||
integrity sha512-U2TbfK8B7dc3JqXSFwj2oXCQrxEaSzCCUkAHjAOIGOKzx/HLKIKs+NJj9IQkLLr7BsMU+Qqzo8aqo11E+Vs+aA==
|
integrity sha512-3bqHXFBvLnbvNzr1KCQ1zryTYvHMoQffaWVekbckgPyT2VPEj3abuB91+DrRYmZdPjcgPYnjnyanxZHDkKuF2g==
|
||||||
|
|
||||||
"@bazel/bazel@file:../../node_modules/@bazel/bazel":
|
"@bazel/bazel@file:../../node_modules/@bazel/bazel":
|
||||||
version "0.18.0"
|
version "0.20.0"
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
"@bazel/bazel-darwin_x64" "0.18.0"
|
"@bazel/bazel-darwin_x64" "0.20.0"
|
||||||
"@bazel/bazel-linux_x64" "0.18.0"
|
"@bazel/bazel-linux_x64" "0.20.0"
|
||||||
"@bazel/bazel-win32_x64" "0.18.0"
|
"@bazel/bazel-win32_x64" "0.20.0"
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Editor configuration, see http://editorconfig.org
|
# Editor configuration, see https://editorconfig.org
|
||||||
root = true
|
root = true
|
||||||
|
|
||||||
[*]
|
[*]
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# CliHelloWorld
|
# CliHelloWorldIvy
|
||||||
|
|
||||||
This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 1.6.6.
|
This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 7.2.0-rc.0.
|
||||||
|
|
||||||
## Development server
|
## Development server
|
||||||
|
|
||||||
@ -12,7 +12,7 @@ Run `ng generate component component-name` to generate a new component. You can
|
|||||||
|
|
||||||
## Build
|
## Build
|
||||||
|
|
||||||
Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `-prod` flag for a production build.
|
Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `--prod` flag for a production build.
|
||||||
|
|
||||||
## Running unit tests
|
## Running unit tests
|
||||||
|
|
||||||
|
@ -1,14 +1,17 @@
|
|||||||
{
|
{
|
||||||
"$schema": "./node_modules/@angular-devkit/core/src/workspace/workspace-schema.json",
|
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
|
||||||
"version": 1,
|
"version": 1,
|
||||||
"cli": {
|
"cli": {
|
||||||
"packageManager": "yarn"
|
"packageManager": "yarn"
|
||||||
},
|
},
|
||||||
"newProjectRoot": "projects",
|
"newProjectRoot": "projects",
|
||||||
"projects": {
|
"projects": {
|
||||||
"cli-hello-world": {
|
"cli-hello-world-ivy": {
|
||||||
"root": "",
|
"root": "",
|
||||||
|
"sourceRoot": "src",
|
||||||
"projectType": "application",
|
"projectType": "application",
|
||||||
|
"prefix": "app",
|
||||||
|
"schematics": {},
|
||||||
"architect": {
|
"architect": {
|
||||||
"build": {
|
"build": {
|
||||||
"builder": "@angular-devkit/build-angular:browser",
|
"builder": "@angular-devkit/build-angular:browser",
|
||||||
@ -19,47 +22,36 @@
|
|||||||
"polyfills": "src/polyfills.ts",
|
"polyfills": "src/polyfills.ts",
|
||||||
"tsConfig": "src/tsconfig.app.json",
|
"tsConfig": "src/tsconfig.app.json",
|
||||||
"assets": [
|
"assets": [
|
||||||
{
|
"src/favicon.ico",
|
||||||
"glob": "assets",
|
"src/assets"
|
||||||
"input": "/src",
|
|
||||||
"output": "/"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"glob": "favicon.ico",
|
|
||||||
"input": "/src",
|
|
||||||
"output": "/"
|
|
||||||
}
|
|
||||||
],
|
],
|
||||||
"styles": [
|
"styles": [
|
||||||
{
|
"src/styles.css"
|
||||||
"input": "src/styles.css"
|
|
||||||
}
|
|
||||||
],
|
],
|
||||||
"scripts": []
|
"scripts": []
|
||||||
},
|
},
|
||||||
"configurations": {
|
"configurations": {
|
||||||
"dev": {
|
"production": {
|
||||||
"fileReplacements": [
|
"fileReplacements": [
|
||||||
{
|
{
|
||||||
"from": "src/environments/environment.ts",
|
"replace": "src/environments/environment.ts",
|
||||||
"to": "dist/environments/environment.ts"
|
"with": "src/environments/environment.prod.ts"
|
||||||
}
|
}
|
||||||
]
|
],
|
||||||
},
|
|
||||||
"production": {
|
|
||||||
"optimization": true,
|
"optimization": true,
|
||||||
"outputHashing": "all",
|
"outputHashing": "all",
|
||||||
"sourceMap": true,
|
"sourceMap": false,
|
||||||
"extractCss": true,
|
"extractCss": true,
|
||||||
"namedChunks": false,
|
"namedChunks": false,
|
||||||
"aot": true,
|
"aot": true,
|
||||||
"extractLicenses": true,
|
"extractLicenses": true,
|
||||||
"vendorChunk": false,
|
"vendorChunk": false,
|
||||||
"buildOptimizer": true,
|
"buildOptimizer": true,
|
||||||
"fileReplacements": [
|
"budgets": [
|
||||||
{
|
{
|
||||||
"src": "src/environments/environment.ts",
|
"type": "initial",
|
||||||
"replaceWith": "src/environments/environment.prod.ts"
|
"maximumWarning": "2mb",
|
||||||
|
"maximumError": "5mb"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@ -68,20 +60,17 @@
|
|||||||
"serve": {
|
"serve": {
|
||||||
"builder": "@angular-devkit/build-angular:dev-server",
|
"builder": "@angular-devkit/build-angular:dev-server",
|
||||||
"options": {
|
"options": {
|
||||||
"browserTarget": "cli-hello-world:build"
|
"browserTarget": "cli-hello-world-ivy:build"
|
||||||
},
|
},
|
||||||
"configurations": {
|
"configurations": {
|
||||||
"dev": {
|
|
||||||
"browserTarget": "cli-hello-world:build:dev"
|
|
||||||
},
|
|
||||||
"production": {
|
"production": {
|
||||||
"browserTarget": "cli-hello-world:build:production"
|
"browserTarget": "cli-hello-world-ivy:build:production"
|
||||||
},
|
},
|
||||||
"ci": {
|
"ci": {
|
||||||
"progress": false
|
"progress": false
|
||||||
},
|
},
|
||||||
"ci-production": {
|
"ci-production": {
|
||||||
"browserTarget": "cli-hello-world:build:production",
|
"browserTarget": "cli-hello-world-ivy:build:production",
|
||||||
"progress": false
|
"progress": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -89,7 +78,7 @@
|
|||||||
"extract-i18n": {
|
"extract-i18n": {
|
||||||
"builder": "@angular-devkit/build-angular:extract-i18n",
|
"builder": "@angular-devkit/build-angular:extract-i18n",
|
||||||
"options": {
|
"options": {
|
||||||
"browserTarget": "cli-hello-world:build"
|
"browserTarget": "cli-hello-world-ivy:build"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"test": {
|
"test": {
|
||||||
@ -97,25 +86,15 @@
|
|||||||
"options": {
|
"options": {
|
||||||
"main": "src/test.ts",
|
"main": "src/test.ts",
|
||||||
"polyfills": "src/polyfills.ts",
|
"polyfills": "src/polyfills.ts",
|
||||||
"karmaConfig": "./karma.conf.js",
|
|
||||||
"tsConfig": "src/tsconfig.spec.json",
|
"tsConfig": "src/tsconfig.spec.json",
|
||||||
"scripts": [],
|
"karmaConfig": "src/karma.conf.js",
|
||||||
"styles": [
|
"styles": [
|
||||||
{
|
"src/styles.css"
|
||||||
"input": "src/styles.css"
|
|
||||||
}
|
|
||||||
],
|
],
|
||||||
|
"scripts": [],
|
||||||
"assets": [
|
"assets": [
|
||||||
{
|
"src/favicon.ico",
|
||||||
"glob": "assets",
|
"src/assets"
|
||||||
"input": "/src",
|
|
||||||
"output": "/"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"glob": "favicon.ico",
|
|
||||||
"input": "/src",
|
|
||||||
"output": "/"
|
|
||||||
}
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -133,36 +112,33 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"cli-hello-world-e2e": {
|
"cli-hello-world-ivy-e2e": {
|
||||||
"root": "",
|
"root": "e2e/",
|
||||||
"projectType": "application",
|
"projectType": "application",
|
||||||
"cli": {},
|
"prefix": "",
|
||||||
"schematics": {},
|
|
||||||
"architect": {
|
"architect": {
|
||||||
"e2e": {
|
"e2e": {
|
||||||
"builder": "@angular-devkit/build-angular:protractor",
|
"builder": "@angular-devkit/build-angular:protractor",
|
||||||
"options": {
|
"options": {
|
||||||
"protractorConfig": "./protractor.conf.js",
|
"protractorConfig": "e2e/protractor.conf.js",
|
||||||
"devServerTarget": "cli-hello-world:serve"
|
"devServerTarget": "cli-hello-world-ivy:serve"
|
||||||
},
|
},
|
||||||
"configurations": {
|
"configurations": {
|
||||||
"production": {
|
"production": {
|
||||||
"devServerTarget": "cli-hello-world:serve:production"
|
"devServerTarget": "cli-hello-world-ivy:serve:production"
|
||||||
},
|
},
|
||||||
"ci": {
|
"ci": {
|
||||||
"devServerTarget": "cli-hello-world:serve:ci"
|
"devServerTarget": "cli-hello-world-ivy:serve:ci"
|
||||||
},
|
},
|
||||||
"ci-production": {
|
"ci-production": {
|
||||||
"devServerTarget": "cli-hello-world:serve:ci-production"
|
"devServerTarget": "cli-hello-world-ivy:serve:ci-production"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"lint": {
|
"lint": {
|
||||||
"builder": "@angular-devkit/build-angular:tslint",
|
"builder": "@angular-devkit/build-angular:tslint",
|
||||||
"options": {
|
"options": {
|
||||||
"tsConfig": [
|
"tsConfig": "e2e/tsconfig.e2e.json",
|
||||||
"e2e/tsconfig.e2e.json"
|
|
||||||
],
|
|
||||||
"exclude": [
|
"exclude": [
|
||||||
"**/node_modules/**"
|
"**/node_modules/**"
|
||||||
]
|
]
|
||||||
@ -171,13 +147,5 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"schematics": {
|
"defaultProject": "cli-hello-world-ivy"
|
||||||
"@schematics/angular:component": {
|
|
||||||
"prefix": "app",
|
|
||||||
"styleext": "css"
|
|
||||||
},
|
|
||||||
"@schematics/angular:directive": {
|
|
||||||
"prefix": "app"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,7 @@ const { SpecReporter } = require('jasmine-spec-reporter');
|
|||||||
exports.config = {
|
exports.config = {
|
||||||
allScriptsTimeout: 11000,
|
allScriptsTimeout: 11000,
|
||||||
specs: [
|
specs: [
|
||||||
'./e2e/**/*.e2e-spec.ts'
|
'./src/**/*.e2e-spec.ts'
|
||||||
],
|
],
|
||||||
capabilities: {
|
capabilities: {
|
||||||
browserName: 'chrome',
|
browserName: 'chrome',
|
||||||
@ -25,7 +25,7 @@ exports.config = {
|
|||||||
},
|
},
|
||||||
onPrepare() {
|
onPrepare() {
|
||||||
require('ts-node').register({
|
require('ts-node').register({
|
||||||
project: 'e2e/tsconfig.e2e.json'
|
project: require('path').join(__dirname, './tsconfig.e2e.json')
|
||||||
});
|
});
|
||||||
jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
|
jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
|
||||||
}
|
}
|
@ -9,7 +9,7 @@ describe('cli-hello-world App', () => {
|
|||||||
|
|
||||||
it('should display welcome message', () => {
|
it('should display welcome message', () => {
|
||||||
page.navigateTo();
|
page.navigateTo();
|
||||||
expect(page.getParagraphText()).toEqual('Welcome to app!');
|
expect(page.getParagraphText()).toEqual('Welcome to cli-hello-world-ivy!');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('the percent pipe should work', () => {
|
it('the percent pipe should work', () => {
|
@ -1,8 +1,7 @@
|
|||||||
{
|
{
|
||||||
"extends": "../tsconfig.json",
|
"extends": "../tsconfig.json",
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"outDir": "../out-tsc/e2e",
|
"outDir": "../out-tsc/app",
|
||||||
"baseUrl": "./",
|
|
||||||
"module": "commonjs",
|
"module": "commonjs",
|
||||||
"target": "es5",
|
"target": "es5",
|
||||||
"types": [
|
"types": [
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "cli-hello-world",
|
"name": "cli-hello-world-ivy",
|
||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
@ -29,24 +29,24 @@
|
|||||||
"zone.js": "file:../../node_modules/zone.js"
|
"zone.js": "file:../../node_modules/zone.js"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@angular-devkit/build-angular": "~0.10.3",
|
"@angular-devkit/build-angular": "~0.12.0-rc.0",
|
||||||
"@angular/cli": "7.0.3",
|
"@angular/cli": "file:../../node_modules/@angular/cli",
|
||||||
"@angular/compiler-cli": "file:../../dist/packages-dist/compiler-cli",
|
"@angular/compiler-cli": "file:../../dist/packages-dist/compiler-cli",
|
||||||
"@angular/language-service": "file:../../dist/packages-dist/language-service",
|
"@angular/language-service": "file:../../dist/packages-dist/language-service",
|
||||||
"@types/jasmine": "~2.8.3",
|
"@types/node": "~8.9.4",
|
||||||
"@types/jasminewd2": "~2.0.4",
|
"@types/jasmine": "~2.8.8",
|
||||||
"@types/node": "~6.0.60",
|
"@types/jasminewd2": "~2.0.3",
|
||||||
"codelyzer": "^4.3.0",
|
"codelyzer": "~4.5.0",
|
||||||
"jasmine-core": "~2.8.0",
|
"jasmine-core": "~2.99.1",
|
||||||
"jasmine-spec-reporter": "~4.2.1",
|
"jasmine-spec-reporter": "~4.2.1",
|
||||||
"karma": "~2.0.0",
|
"karma": "~3.1.1",
|
||||||
"karma-chrome-launcher": "~2.2.0",
|
"karma-chrome-launcher": "~2.2.0",
|
||||||
"karma-coverage-istanbul-reporter": "^1.2.1",
|
"karma-coverage-istanbul-reporter": "~2.0.1",
|
||||||
"karma-jasmine": "~1.1.0",
|
"karma-jasmine": "~1.1.2",
|
||||||
"karma-jasmine-html-reporter": "^0.2.2",
|
"karma-jasmine-html-reporter": "^0.2.2",
|
||||||
"protractor": "file:../../node_modules/protractor",
|
"protractor": "file:../../node_modules/protractor",
|
||||||
"ts-node": "~4.1.0",
|
"ts-node": "~7.0.0",
|
||||||
"tslint": "~5.9.1",
|
"tslint": "~5.11.0",
|
||||||
"typescript": "file:../../node_modules/typescript"
|
"typescript": "file:../../node_modules/typescript"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
<h2><a target="_blank" rel="noopener" href="https://angular.io/tutorial">Tour of Heroes</a></h2>
|
<h2><a target="_blank" rel="noopener" href="https://angular.io/tutorial">Tour of Heroes</a></h2>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<h2><a target="_blank" rel="noopener" href="https://github.com/angular/angular-cli/wiki">CLI Documentation</a></h2>
|
<h2><a target="_blank" rel="noopener" href="https://angular.io/cli">CLI Documentation</a></h2>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<h2><a target="_blank" rel="noopener" href="https://blog.angular.io/">Angular blog</a></h2>
|
<h2><a target="_blank" rel="noopener" href="https://blog.angular.io/">Angular blog</a></h2>
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import { TestBed, async } from '@angular/core/testing';
|
import { TestBed, async } from '@angular/core/testing';
|
||||||
import { AppComponent } from './app.component';
|
import { AppComponent } from './app.component';
|
||||||
|
|
||||||
describe('AppComponent', () => {
|
describe('AppComponent', () => {
|
||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
@ -8,20 +9,23 @@ describe('AppComponent', () => {
|
|||||||
],
|
],
|
||||||
}).compileComponents();
|
}).compileComponents();
|
||||||
}));
|
}));
|
||||||
it('should create the app', async(() => {
|
|
||||||
|
it('should create the app', () => {
|
||||||
const fixture = TestBed.createComponent(AppComponent);
|
const fixture = TestBed.createComponent(AppComponent);
|
||||||
const app = fixture.debugElement.componentInstance;
|
const app = fixture.debugElement.componentInstance;
|
||||||
expect(app).toBeTruthy();
|
expect(app).toBeTruthy();
|
||||||
}));
|
});
|
||||||
it(`should have as title 'app'`, async(() => {
|
|
||||||
|
it(`should have as title 'cli-hello-world-ivy'`, () => {
|
||||||
const fixture = TestBed.createComponent(AppComponent);
|
const fixture = TestBed.createComponent(AppComponent);
|
||||||
const app = fixture.debugElement.componentInstance;
|
const app = fixture.debugElement.componentInstance;
|
||||||
expect(app.title).toEqual('app');
|
expect(app.title).toEqual('cli-hello-world-ivy');
|
||||||
}));
|
});
|
||||||
it('should render title in a h1 tag', async(() => {
|
|
||||||
|
it('should render title in a h1 tag', () => {
|
||||||
const fixture = TestBed.createComponent(AppComponent);
|
const fixture = TestBed.createComponent(AppComponent);
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
const compiled = fixture.debugElement.nativeElement;
|
const compiled = fixture.debugElement.nativeElement;
|
||||||
expect(compiled.querySelector('h1').textContent).toContain('Welcome to app!');
|
expect(compiled.querySelector('h1').textContent).toContain('Welcome to cli-hello-world-ivy!');
|
||||||
}));
|
});
|
||||||
});
|
});
|
||||||
|
@ -6,5 +6,5 @@ import { Component } from '@angular/core';
|
|||||||
styleUrls: ['./app.component.css']
|
styleUrls: ['./app.component.css']
|
||||||
})
|
})
|
||||||
export class AppComponent {
|
export class AppComponent {
|
||||||
title = 'app';
|
title = 'cli-hello-world-ivy';
|
||||||
}
|
}
|
||||||
|
11
integration/cli-hello-world-ivy/src/browserslist
Normal file
11
integration/cli-hello-world-ivy/src/browserslist
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
# This file is currently used by autoprefixer to adjust CSS to support the below specified browsers
|
||||||
|
# For additional information regarding the format and rule options, please see:
|
||||||
|
# https://github.com/browserslist/browserslist#queries
|
||||||
|
#
|
||||||
|
# For IE 9-11 support, please remove 'not' from the last line of the file and adjust as needed
|
||||||
|
|
||||||
|
> 0.5%
|
||||||
|
last 2 versions
|
||||||
|
Firefox ESR
|
||||||
|
not dead
|
||||||
|
not IE 9-11
|
@ -1,8 +1,16 @@
|
|||||||
// The file contents for the current environment will overwrite these during build.
|
// This file can be replaced during build by using the `fileReplacements` array.
|
||||||
// The build system defaults to the dev environment which uses `environment.ts`, but if you do
|
// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`.
|
||||||
// `ng build --env=prod` then `environment.prod.ts` will be used instead.
|
// The list of file replacements can be found in `angular.json`.
|
||||||
// The list of which env maps to which file can be found in `.angular-cli.json`.
|
|
||||||
|
|
||||||
export const environment = {
|
export const environment = {
|
||||||
production: false
|
production: false
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* For easier debugging in development mode, you can import the following file
|
||||||
|
* to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`.
|
||||||
|
*
|
||||||
|
* This import should be commented out in production mode because it will have a negative impact
|
||||||
|
* on performance if an error is thrown.
|
||||||
|
*/
|
||||||
|
// import 'zone.js/dist/zone-error'; // Included with Angular CLI.
|
||||||
|
@ -2,12 +2,11 @@
|
|||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>CliHelloWorld</title>
|
<title>CliHelloWorldIvy</title>
|
||||||
<base href="/">
|
<base href="/">
|
||||||
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<link rel="icon" type="image/x-icon" href="favicon.ico">
|
<link rel="icon" type="image/x-icon" href="favicon.ico">
|
||||||
<script>window['ngDevMode'] = true;</script>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<app-root></app-root>
|
<app-root></app-root>
|
||||||
|
@ -12,16 +12,14 @@ module.exports = function (config) {
|
|||||||
require('karma-coverage-istanbul-reporter'),
|
require('karma-coverage-istanbul-reporter'),
|
||||||
require('@angular-devkit/build-angular/plugins/karma')
|
require('@angular-devkit/build-angular/plugins/karma')
|
||||||
],
|
],
|
||||||
client:{
|
client: {
|
||||||
clearContext: false // leave Jasmine Spec Runner output visible in browser
|
clearContext: false // leave Jasmine Spec Runner output visible in browser
|
||||||
},
|
},
|
||||||
coverageIstanbulReporter: {
|
coverageIstanbulReporter: {
|
||||||
dir: require('path').join(__dirname, 'coverage'), reports: [ 'html', 'lcovonly' ],
|
dir: require('path').join(__dirname, 'coverage'),
|
||||||
|
reports: ['html', 'lcovonly', 'text-summary'],
|
||||||
fixWebpackSourcePaths: true
|
fixWebpackSourcePaths: true
|
||||||
},
|
},
|
||||||
angularCli: {
|
|
||||||
environment: 'dev'
|
|
||||||
},
|
|
||||||
reporters: ['progress', 'kjhtml'],
|
reporters: ['progress', 'kjhtml'],
|
||||||
port: 9876,
|
port: 9876,
|
||||||
colors: true,
|
colors: true,
|
@ -9,4 +9,4 @@ if (environment.production) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
platformBrowserDynamic().bootstrapModule(AppModule)
|
platformBrowserDynamic().bootstrapModule(AppModule)
|
||||||
.catch(err => console.log(err));
|
.catch(err => console.error(err));
|
||||||
|
@ -11,14 +11,17 @@
|
|||||||
* automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera),
|
* automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera),
|
||||||
* Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile.
|
* Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile.
|
||||||
*
|
*
|
||||||
* Learn more in https://angular.io/docs/ts/latest/guide/browser-support.html
|
* Learn more in https://angular.io/guide/browser-support
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/***************************************************************************************************
|
/***************************************************************************************************
|
||||||
* BROWSER POLYFILLS
|
* BROWSER POLYFILLS
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** IE9, IE10 and IE11 requires all of the following polyfills. **/
|
/** IE9, IE10, IE11, and Chrome <55 requires all of the following polyfills.
|
||||||
|
* This also includes Android Emulators with older versions of Chrome and Google Search/Googlebot
|
||||||
|
*/
|
||||||
|
|
||||||
// import 'core-js/es6/symbol';
|
// import 'core-js/es6/symbol';
|
||||||
// import 'core-js/es6/object';
|
// import 'core-js/es6/object';
|
||||||
// import 'core-js/es6/function';
|
// import 'core-js/es6/function';
|
||||||
@ -40,19 +43,36 @@
|
|||||||
/** IE10 and IE11 requires the following for the Reflect API. */
|
/** IE10 and IE11 requires the following for the Reflect API. */
|
||||||
// import 'core-js/es6/reflect';
|
// import 'core-js/es6/reflect';
|
||||||
|
|
||||||
|
|
||||||
/** Evergreen browsers require these. **/
|
|
||||||
// Used for reflect-metadata in JIT. If you use AOT (and only Angular decorators), you can remove.
|
|
||||||
import 'core-js/es7/reflect';
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Required to support Web Animations `@angular/platform-browser/animations`.
|
* Web Animations `@angular/platform-browser/animations`
|
||||||
* Needed for: All but Chrome, Firefox and Opera. http://caniuse.com/#feat=web-animation
|
* Only required if AnimationBuilder is used within the application and using IE/Edge or Safari.
|
||||||
**/
|
* Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0).
|
||||||
|
*/
|
||||||
// import 'web-animations-js'; // Run `npm install --save web-animations-js`.
|
// import 'web-animations-js'; // Run `npm install --save web-animations-js`.
|
||||||
|
|
||||||
|
/**
|
||||||
|
* By default, zone.js will patch all possible macroTask and DomEvents
|
||||||
|
* user can disable parts of macroTask/DomEvents patch by setting following flags
|
||||||
|
* because those flags need to be set before `zone.js` being loaded, and webpack
|
||||||
|
* will put import in the top of bundle, so user need to create a separate file
|
||||||
|
* in this directory (for example: zone-flags.ts), and put the following flags
|
||||||
|
* into that file, and then add the following code before importing zone.js.
|
||||||
|
* import './zone-flags.ts';
|
||||||
|
*
|
||||||
|
* The flags allowed in zone-flags.ts are listed here.
|
||||||
|
*
|
||||||
|
* The following flags will work for all browsers.
|
||||||
|
*
|
||||||
|
* (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame
|
||||||
|
* (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick
|
||||||
|
* (window as any).__zone_symbol__BLACK_LISTED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames
|
||||||
|
*
|
||||||
|
* in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js
|
||||||
|
* with the following flag, it will bypass `zone.js` patch for IE/Edge
|
||||||
|
*
|
||||||
|
* (window as any).__Zone_enable_cross_context_check = true;
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
/***************************************************************************************************
|
/***************************************************************************************************
|
||||||
* Zone JS is required by default for Angular itself.
|
* Zone JS is required by default for Angular itself.
|
||||||
@ -60,7 +80,6 @@ import 'core-js/es7/reflect';
|
|||||||
import 'zone.js/dist/zone'; // Included with Angular CLI.
|
import 'zone.js/dist/zone'; // Included with Angular CLI.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************************************
|
/***************************************************************************************************
|
||||||
* APPLICATION IMPORTS
|
* APPLICATION IMPORTS
|
||||||
*/
|
*/
|
||||||
|
@ -2,12 +2,13 @@
|
|||||||
"extends": "../tsconfig.json",
|
"extends": "../tsconfig.json",
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"outDir": "../out-tsc/app",
|
"outDir": "../out-tsc/app",
|
||||||
"baseUrl": "./",
|
|
||||||
"module": "es2015",
|
|
||||||
"types": []
|
"types": []
|
||||||
},
|
},
|
||||||
"exclude": [
|
"exclude": [
|
||||||
"test.ts",
|
"test.ts",
|
||||||
"**/*.spec.ts"
|
"**/*.spec.ts"
|
||||||
]
|
],
|
||||||
|
"angularCompilerOptions": {
|
||||||
|
"enableIvy": "ngtsc"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,8 +2,6 @@
|
|||||||
"extends": "../tsconfig.json",
|
"extends": "../tsconfig.json",
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"outDir": "../out-tsc/spec",
|
"outDir": "../out-tsc/spec",
|
||||||
"baseUrl": "./",
|
|
||||||
"module": "commonjs",
|
|
||||||
"types": [
|
"types": [
|
||||||
"jasmine",
|
"jasmine",
|
||||||
"node"
|
"node"
|
||||||
|
17
integration/cli-hello-world-ivy/src/tslint.json
Normal file
17
integration/cli-hello-world-ivy/src/tslint.json
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"extends": "../tslint.json",
|
||||||
|
"rules": {
|
||||||
|
"directive-selector": [
|
||||||
|
true,
|
||||||
|
"attribute",
|
||||||
|
"app",
|
||||||
|
"camelCase"
|
||||||
|
],
|
||||||
|
"component-selector": [
|
||||||
|
true,
|
||||||
|
"element",
|
||||||
|
"app",
|
||||||
|
"kebab-case"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
@ -1,21 +1,21 @@
|
|||||||
{
|
{
|
||||||
"angularCompilerOptions": {
|
|
||||||
"enableIvy": "ngtsc",
|
|
||||||
},
|
|
||||||
"compileOnSave": false,
|
"compileOnSave": false,
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
|
"baseUrl": "./",
|
||||||
"outDir": "./dist/out-tsc",
|
"outDir": "./dist/out-tsc",
|
||||||
"sourceMap": true,
|
"sourceMap": true,
|
||||||
"declaration": false,
|
"declaration": false,
|
||||||
|
"module": "es2015",
|
||||||
"moduleResolution": "node",
|
"moduleResolution": "node",
|
||||||
"emitDecoratorMetadata": true,
|
"emitDecoratorMetadata": true,
|
||||||
"experimentalDecorators": true,
|
"experimentalDecorators": true,
|
||||||
|
"importHelpers": true,
|
||||||
"target": "es5",
|
"target": "es5",
|
||||||
"typeRoots": [
|
"typeRoots": [
|
||||||
"node_modules/@types"
|
"node_modules/@types"
|
||||||
],
|
],
|
||||||
"lib": [
|
"lib": [
|
||||||
"es2017",
|
"es2018",
|
||||||
"dom"
|
"dom"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"rulesDirectory": [
|
"rulesDirectory": [
|
||||||
"node_modules/codelyzer"
|
"codelyzer"
|
||||||
],
|
],
|
||||||
"rules": {
|
"rules": {
|
||||||
"arrow-return-shorthand": true,
|
"arrow-return-shorthand": true,
|
||||||
@ -18,7 +18,6 @@
|
|||||||
"forin": true,
|
"forin": true,
|
||||||
"import-blacklist": [
|
"import-blacklist": [
|
||||||
true,
|
true,
|
||||||
"rxjs",
|
|
||||||
"rxjs/Rx"
|
"rxjs/Rx"
|
||||||
],
|
],
|
||||||
"import-spacing": true,
|
"import-spacing": true,
|
||||||
@ -66,6 +65,7 @@
|
|||||||
],
|
],
|
||||||
"no-misused-new": true,
|
"no-misused-new": true,
|
||||||
"no-non-null-assertion": true,
|
"no-non-null-assertion": true,
|
||||||
|
"no-redundant-jsdoc": true,
|
||||||
"no-shadowed-variable": true,
|
"no-shadowed-variable": true,
|
||||||
"no-string-literal": false,
|
"no-string-literal": false,
|
||||||
"no-string-throw": true,
|
"no-string-throw": true,
|
||||||
@ -117,18 +117,6 @@
|
|||||||
"check-separator",
|
"check-separator",
|
||||||
"check-type"
|
"check-type"
|
||||||
],
|
],
|
||||||
"directive-selector": [
|
|
||||||
true,
|
|
||||||
"attribute",
|
|
||||||
"app",
|
|
||||||
"camelCase"
|
|
||||||
],
|
|
||||||
"component-selector": [
|
|
||||||
true,
|
|
||||||
"element",
|
|
||||||
"app",
|
|
||||||
"kebab-case"
|
|
||||||
],
|
|
||||||
"no-output-on-prefix": true,
|
"no-output-on-prefix": true,
|
||||||
"use-input-property-decorator": true,
|
"use-input-property-decorator": true,
|
||||||
"use-output-property-decorator": true,
|
"use-output-property-decorator": true,
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -28,7 +28,7 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@angular-devkit/build-angular": "~0.10.3",
|
"@angular-devkit/build-angular": "~0.10.3",
|
||||||
"@angular/cli": "7.0.3",
|
"@angular/cli": "file:../../node_modules/@angular/cli",
|
||||||
"@angular/compiler-cli": "file:../../dist/packages-dist/compiler-cli",
|
"@angular/compiler-cli": "file:../../dist/packages-dist/compiler-cli",
|
||||||
"@angular/language-service": "file:../../dist/packages-dist/language-service",
|
"@angular/language-service": "file:../../dist/packages-dist/language-service",
|
||||||
"@types/jasmine": "~2.8.3",
|
"@types/jasmine": "~2.8.3",
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,10 +1,11 @@
|
|||||||
import nodeResolve from 'rollup-plugin-node-resolve';
|
import nodeResolve from 'rollup-plugin-node-resolve';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
entry: 'dist/src/main.js',
|
input: 'dist/src/main.js',
|
||||||
sourceMap: true,
|
output: {
|
||||||
|
sourceMap: true,
|
||||||
|
},
|
||||||
treeshake: true,
|
treeshake: true,
|
||||||
moduleName: 'main',
|
|
||||||
plugins: [
|
plugins: [
|
||||||
nodeResolve()
|
nodeResolve()
|
||||||
]
|
]
|
||||||
|
@ -4,10 +4,11 @@ import commonjs from 'rollup-plugin-commonjs';
|
|||||||
// a real app should make a common bundle for libraries instead of bundling them
|
// a real app should make a common bundle for libraries instead of bundling them
|
||||||
// in both the main module & the lazy module, but we don't care about size here
|
// in both the main module & the lazy module, but we don't care about size here
|
||||||
export default {
|
export default {
|
||||||
entry: 'dist/src/lazy.module.js',
|
input: 'dist/src/lazy.module.js',
|
||||||
sourceMap: true,
|
output: {
|
||||||
|
sourceMap: true,
|
||||||
|
},
|
||||||
treeshake: true,
|
treeshake: true,
|
||||||
moduleName: 'lazy',
|
|
||||||
plugins: [
|
plugins: [
|
||||||
nodeResolve()
|
nodeResolve()
|
||||||
]
|
]
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -61,9 +61,9 @@ for testDir in ${TEST_DIRS}; do
|
|||||||
yarn install --cache-folder ../$cache
|
yarn install --cache-folder ../$cache
|
||||||
yarn test || exit 1
|
yarn test || exit 1
|
||||||
|
|
||||||
# Track payload size for cli-hello-world and hello_world__closure and the render3 tests
|
# Track payload size for cli-hello-world, cli-hello-world-ivy and hello_world__closure
|
||||||
if $CI && ([[ $testDir == cli-hello-world ]] || [[ $testDir == hello_world__closure ]]); then
|
if $CI && ([[ $testDir == cli-hello-world ]] || [[ $testDir == cli-hello-world-ivy ]] || [[ $testDir == hello_world__closure ]]); then
|
||||||
if [[ $testDir == cli-hello-world ]]; then
|
if ([[ $testDir == cli-hello-world ]] || [[ $testDir == cli-hello-world-ivy ]]); then
|
||||||
yarn build
|
yarn build
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
23
package.json
23
package.json
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "angular-srcs",
|
"name": "angular-srcs",
|
||||||
"version": "7.2.0",
|
"version": "7.2.3",
|
||||||
"private": true,
|
"private": true,
|
||||||
"branchPattern": "2.0.*",
|
"branchPattern": "2.0.*",
|
||||||
"description": "Angular - a web framework for modern web apps",
|
"description": "Angular - a web framework for modern web apps",
|
||||||
@ -9,7 +9,7 @@
|
|||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=10.9.0 <11.0.0",
|
"node": ">=10.9.0 <11.0.0",
|
||||||
"yarn": ">=1.10.1 <1.13.0"
|
"yarn": ">=1.10.1 <1.14.0"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
@ -32,8 +32,9 @@
|
|||||||
"// 1": "dependencies are used locally and by bazel",
|
"// 1": "dependencies are used locally and by bazel",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@angular-devkit/architect": "^0.10.6",
|
"@angular-devkit/architect": "^0.10.6",
|
||||||
|
"@angular-devkit/build-optimizer": "^0.12.2",
|
||||||
"@angular-devkit/core": "^7.0.4",
|
"@angular-devkit/core": "^7.0.4",
|
||||||
"@angular-devkit/schematics": "^7.0.4",
|
"@angular-devkit/schematics": "^7.3.0-rc.0",
|
||||||
"@bazel/karma": "~0.22.1",
|
"@bazel/karma": "~0.22.1",
|
||||||
"@bazel/typescript": "~0.22.1",
|
"@bazel/typescript": "~0.22.1",
|
||||||
"@schematics/angular": "^7.0.4",
|
"@schematics/angular": "^7.0.4",
|
||||||
@ -73,6 +74,9 @@
|
|||||||
"node-uuid": "1.4.8",
|
"node-uuid": "1.4.8",
|
||||||
"protractor": "^5.4.2",
|
"protractor": "^5.4.2",
|
||||||
"reflect-metadata": "^0.1.3",
|
"reflect-metadata": "^0.1.3",
|
||||||
|
"rollup": "^1.1.0",
|
||||||
|
"rollup-plugin-node-resolve": "^4.0.0",
|
||||||
|
"rollup-plugin-sourcemaps": "^0.4.2",
|
||||||
"selenium-webdriver": "3.5.0",
|
"selenium-webdriver": "3.5.0",
|
||||||
"shelljs": "^0.8.1",
|
"shelljs": "^0.8.1",
|
||||||
"source-map": "^0.6.1",
|
"source-map": "^0.6.1",
|
||||||
@ -90,8 +94,8 @@
|
|||||||
"// 2": "devDependencies are not used under Bazel. Many can be removed after test.sh is deleted.",
|
"// 2": "devDependencies are not used under Bazel. Many can be removed after test.sh is deleted.",
|
||||||
"// 3": "when updating @bazel/bazel version you also need to update the RBE settings in .bazelrc (see https://github.com/angular/angular/pull/27935)",
|
"// 3": "when updating @bazel/bazel version you also need to update the RBE settings in .bazelrc (see https://github.com/angular/angular/pull/27935)",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@angular/cli": "^7.2.1",
|
"@angular/cli": "^7.3.0-rc.0",
|
||||||
"@bazel/bazel": "~0.21.0",
|
"@bazel/bazel": "~0.22.0",
|
||||||
"@bazel/buildifier": "^0.19.2",
|
"@bazel/buildifier": "^0.19.2",
|
||||||
"@bazel/ibazel": "~0.9.0",
|
"@bazel/ibazel": "~0.9.0",
|
||||||
"@types/angular": "^1.6.47",
|
"@types/angular": "^1.6.47",
|
||||||
@ -129,12 +133,9 @@
|
|||||||
"madge": "0.5.0",
|
"madge": "0.5.0",
|
||||||
"mutation-observer": "^1.0.3",
|
"mutation-observer": "^1.0.3",
|
||||||
"rewire": "2.5.2",
|
"rewire": "2.5.2",
|
||||||
"rollup": "0.47.4",
|
|
||||||
"rollup-plugin-commonjs": "8.1.0",
|
"rollup-plugin-commonjs": "8.1.0",
|
||||||
"rollup-plugin-node-resolve": "3.0.0",
|
|
||||||
"rollup-plugin-sourcemaps": "0.4.2",
|
|
||||||
"rxjs": "^6.3.0",
|
"rxjs": "^6.3.0",
|
||||||
"sauce-connect": "https://saucelabs.com/downloads/sc-4.5.2-linux.tar.gz",
|
"sauce-connect": "https://saucelabs.com/downloads/sc-4.5.3-linux.tar.gz",
|
||||||
"semver": "5.4.1",
|
"semver": "5.4.1",
|
||||||
"systemjs": "0.18.10",
|
"systemjs": "0.18.10",
|
||||||
"tslint": "5.7.0",
|
"tslint": "5.7.0",
|
||||||
@ -145,5 +146,9 @@
|
|||||||
"vlq": "0.2.2",
|
"vlq": "0.2.2",
|
||||||
"vrsource-tslint-rules": "5.1.1",
|
"vrsource-tslint-rules": "5.1.1",
|
||||||
"webpack": "1.12.9"
|
"webpack": "1.12.9"
|
||||||
|
},
|
||||||
|
"// 4": "natives is needed for gulp to work with node >= 10.13, see #28213",
|
||||||
|
"resolutions": {
|
||||||
|
"natives": "1.1.6"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,6 @@ ng_module(
|
|||||||
"src/**/*.ts",
|
"src/**/*.ts",
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
module_name = "@angular/animations",
|
|
||||||
deps = [
|
deps = [
|
||||||
"//packages/core",
|
"//packages/core",
|
||||||
],
|
],
|
||||||
@ -30,6 +29,7 @@ ng_package(
|
|||||||
# Do not add more to this list.
|
# Do not add more to this list.
|
||||||
# Dependencies on the full npm_package cause long re-builds.
|
# Dependencies on the full npm_package cause long re-builds.
|
||||||
visibility = [
|
visibility = [
|
||||||
|
"//packages/compiler-cli/integrationtest:__pkg__",
|
||||||
"//packages/compiler/test:__pkg__",
|
"//packages/compiler/test:__pkg__",
|
||||||
],
|
],
|
||||||
deps = [
|
deps = [
|
||||||
|
@ -12,7 +12,6 @@ ng_module(
|
|||||||
"src/**/*.ts",
|
"src/**/*.ts",
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
module_name = "@angular/animations/browser",
|
|
||||||
deps = [
|
deps = [
|
||||||
"//packages/animations",
|
"//packages/animations",
|
||||||
"//packages/core",
|
"//packages/core",
|
||||||
|
@ -26,7 +26,7 @@ const SELF_TOKEN_REGEX = new RegExp(`\s*${SELF_TOKEN}\s*,?`, 'g');
|
|||||||
*
|
*
|
||||||
* 1. Overlap of animations
|
* 1. Overlap of animations
|
||||||
* Given that a CSS property cannot be animated in more than one place at the same time, it's
|
* Given that a CSS property cannot be animated in more than one place at the same time, it's
|
||||||
* important that this behaviour is detected and validated. The way in which this occurs is that
|
* important that this behavior is detected and validated. The way in which this occurs is that
|
||||||
* each time a style property is examined, a string-map containing the property will be updated with
|
* each time a style property is examined, a string-map containing the property will be updated with
|
||||||
* the start and end times for when the property is used within an animation step.
|
* the start and end times for when the property is used within an animation step.
|
||||||
*
|
*
|
||||||
|
@ -23,7 +23,7 @@ export function supportsAnimationEventCreation() {
|
|||||||
try {
|
try {
|
||||||
makeAnimationEvent('end', 'test', 0);
|
makeAnimationEvent('end', 'test', 0);
|
||||||
supported = true;
|
supported = true;
|
||||||
} catch (e) {
|
} catch {
|
||||||
}
|
}
|
||||||
return supported;
|
return supported;
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,6 @@ load("//tools:defaults.bzl", "ng_module")
|
|||||||
ng_module(
|
ng_module(
|
||||||
name = "testing",
|
name = "testing",
|
||||||
srcs = glob(["**/*.ts"]),
|
srcs = glob(["**/*.ts"]),
|
||||||
module_name = "@angular/animations/browser/testing",
|
|
||||||
deps = [
|
deps = [
|
||||||
"//packages/animations",
|
"//packages/animations",
|
||||||
"//packages/animations/browser",
|
"//packages/animations/browser",
|
||||||
|
@ -671,8 +671,8 @@ export function animate(
|
|||||||
*
|
*
|
||||||
* ```typescript
|
* ```typescript
|
||||||
* group([
|
* group([
|
||||||
* animate("1s", { background: "black" }))
|
* animate("1s", style({ background: "black" })),
|
||||||
* animate("2s", { color: "white" }))
|
* animate("2s", style({ color: "white" }))
|
||||||
* ])
|
* ])
|
||||||
* ```
|
* ```
|
||||||
*
|
*
|
||||||
@ -708,7 +708,7 @@ export function group(
|
|||||||
* ```typescript
|
* ```typescript
|
||||||
* sequence([
|
* sequence([
|
||||||
* style({ opacity: 0 })),
|
* style({ opacity: 0 })),
|
||||||
* animate("1s", { opacity: 1 }))
|
* animate("1s", style({ opacity: 1 }))
|
||||||
* ])
|
* ])
|
||||||
* ```
|
* ```
|
||||||
*
|
*
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user