Compare commits
154 Commits
ts_library
...
8.0.0-beta
Author | SHA1 | Date | |
---|---|---|---|
a9c881e243 | |||
038303eed1 | |||
a227c528ca | |||
0eef958735 | |||
51a592cdfc | |||
fdc6e159b4 | |||
7d9aa67d8c | |||
495a9dd445 | |||
778d5739e2 | |||
66ce3b2f2f | |||
76cedb8bf3 | |||
ad499628cb | |||
24f5428187 | |||
a228d65412 | |||
dc8e461303 | |||
eeadb37b19 | |||
41e68f7a7a | |||
dabcb3e17b | |||
bcf17bc91c | |||
d45d3a3ef9 | |||
f99a668b04 | |||
70e426ba1b | |||
ec414b432e | |||
9af18c2fd0 | |||
2bb518c694 | |||
b87bf39eb4 | |||
227f7e44d6 | |||
22f76df8f2 | |||
e18a52e24a | |||
f38deb0f07 | |||
d940b5541f | |||
8e75a40735 | |||
59cc724e3b | |||
8ced999e47 | |||
4c8d17ffd4 | |||
3e6a1f0bc4 | |||
40d64b6b58 | |||
c84739dc55 | |||
bb94434d85 | |||
ebac5dba38 | |||
29513296fb | |||
98e5af1480 | |||
66335c36e6 | |||
6e16338302 | |||
9a3739142f | |||
e98d508df2 | |||
5639891e90 | |||
9d81bd39ca | |||
9d3dae42e9 | |||
1699c88655 | |||
074400da60 | |||
7d954dffd0 | |||
cac9199d7c | |||
a789a3f532 | |||
5dbc7d9a63 | |||
fd8dbd5e40 | |||
7033f39c61 | |||
3deda898d0 | |||
f8c70011b1 | |||
adfc55e2c3 | |||
a1f36e5f14 | |||
3b48d13af8 | |||
f7c551e16b | |||
e4f67dfe66 | |||
d83307adab | |||
873750609f | |||
664ea50b46 | |||
99886bd159 | |||
3d5a919ac5 | |||
ef6728207b | |||
2da82db3bc | |||
7421534873 | |||
7496630a94 | |||
6e949f9e98 | |||
6ad1c47df8 | |||
76144f156c | |||
fdc2b0bf77 | |||
54532dfdf1 | |||
2a02f4beb2 | |||
bf97d3b73e | |||
46aec4a58f | |||
c522e03fe9 | |||
b2811e50c5 | |||
e2c98fbe11 | |||
02975e9166 | |||
3414316fc8 | |||
67a41d8bff | |||
e50c5293fc | |||
056d35c97c | |||
465abab213 | |||
c1fb9c265c | |||
d4ecffe475 | |||
736cfa4e09 | |||
cbd626413c | |||
317cc922ac | |||
f9b103825a | |||
32c61f434c | |||
22a43cff4d | |||
9098225ff0 | |||
9f9024b7a1 | |||
03c8528fcb | |||
5430d2bc66 | |||
a95e81978b | |||
5552661fd7 | |||
030350f53e | |||
583061d043 | |||
0a564c3158 | |||
b9854e582f | |||
cf8770f3cc | |||
d8f2318811 | |||
1fd673504c | |||
8f1198ffcd | |||
fe9b3ea251 | |||
50df897fdc | |||
33e49c2894 | |||
ea1b5c100f | |||
18a9afc738 | |||
589dd479e2 | |||
661a98aeda | |||
988243437a | |||
3b9553bb17 | |||
522e4ea898 | |||
b6819fe9bb | |||
6c3b57a968 | |||
37f8263430 | |||
a84a9ba705 | |||
d73734dcb7 | |||
e0fbe8611e | |||
94e305f48e | |||
1964be0b17 | |||
41b2499f17 | |||
da85cee07c | |||
2fc5f002e0 | |||
19a2b783cf | |||
9e5016c845 | |||
070fca1591 | |||
d336bff200 | |||
f99082fd3c | |||
75074d009f | |||
197676a6dd | |||
1fb6731285 | |||
1df8be5573 | |||
6324ad45e7 | |||
7439b46c5a | |||
9a965c9145 | |||
351ef2a6de | |||
0b6eaca3c2 | |||
058aafcc0c | |||
7980f1d2ea | |||
6bd20e8b2f | |||
366a6bf192 | |||
5b08a880f7 | |||
7db035842d | |||
9dabeea807 |
22
.bazelrc
22
.bazelrc
@ -22,12 +22,18 @@ test:debug --test_arg=--node_options=--inspect-brk --test_output=streamed --test
|
||||
# Filesystem interactions #
|
||||
###############################
|
||||
|
||||
# Don't create symlinks like bazel-out in the project.
|
||||
# These cause VSCode to traverse a massive tree, opening file handles and
|
||||
# Create symlinks in the project:
|
||||
# - 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
|
||||
# MacOS High Sierra.
|
||||
# See https://github.com/bazelbuild/bazel/issues/4603
|
||||
build --symlink_prefix=/
|
||||
build --symlink_prefix=dist/
|
||||
|
||||
# Performance: avoid stat'ing input files
|
||||
build --watchfs
|
||||
@ -36,6 +42,16 @@ build --watchfs
|
||||
run --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 #
|
||||
# Turn on these settings with #
|
||||
|
@ -201,6 +201,19 @@ jobs:
|
||||
# Run e2e tests
|
||||
- run: yarn --cwd aio e2e
|
||||
|
||||
test_aio_local_ivy:
|
||||
<<: *job_defaults
|
||||
steps:
|
||||
- checkout:
|
||||
<<: *post_checkout
|
||||
- restore_cache:
|
||||
key: *cache_key
|
||||
- attach_workspace:
|
||||
at: dist
|
||||
- *define_env_vars
|
||||
# Build aio with Ivy (using local Angular packages)
|
||||
- run: yarn --cwd aio build-with-ivy --progress=false
|
||||
|
||||
test_aio_tools:
|
||||
<<: *job_defaults
|
||||
steps:
|
||||
@ -397,7 +410,6 @@ jobs:
|
||||
- *define_env_vars
|
||||
- *yarn_install
|
||||
- run: yarn tsc -p packages
|
||||
- run: yarn tsc -p packages/examples
|
||||
- run: yarn tsc -p modules
|
||||
- run: yarn karma start ./karma-js.conf.js --single-run --browsers=ChromeNoSandbox
|
||||
|
||||
@ -424,7 +436,6 @@ jobs:
|
||||
command: ./scripts/saucelabs/start-tunnel.sh
|
||||
background: true
|
||||
- run: yarn tsc -p packages
|
||||
- run: yarn tsc -p packages/examples
|
||||
- run: yarn tsc -p modules
|
||||
# Waits for the Saucelabs tunnel to be ready. This ensures that we don't run tests
|
||||
# too early without Saucelabs not being ready.
|
||||
@ -452,10 +463,9 @@ jobs:
|
||||
- run: ./scripts/build-e2e-tests.sh --use-existing-packages-dist
|
||||
- run:
|
||||
name: Starting servers for e2e tests
|
||||
command: yarn gulp serve serve-examples
|
||||
command: yarn gulp serve
|
||||
background: true
|
||||
- run: NODE_PATH=$NODE_PATH:./dist/all yarn protractor ./protractor-e2e.conf.js --bundles=true
|
||||
- run: NODE_PATH=$NODE_PATH:./dist/all yarn protractor ./protractor-examples-e2e.conf.js --bundles=true
|
||||
- run: NODE_PATH=$NODE_PATH:./dist/all yarn protractor ./protractor-perf.conf.js --bundles=true --dryrun
|
||||
|
||||
legacy-misc-tests:
|
||||
@ -497,6 +507,9 @@ workflows:
|
||||
- test_aio_local:
|
||||
requires:
|
||||
- build-packages-dist
|
||||
- test_aio_local_ivy:
|
||||
requires:
|
||||
- build-packages-dist
|
||||
- test_aio_tools:
|
||||
requires:
|
||||
- build-packages-dist
|
||||
@ -526,6 +539,7 @@ workflows:
|
||||
- integration_test
|
||||
# Only publish if `aio`/`docs` tests using the locally built Angular packages pass
|
||||
- test_aio_local
|
||||
- test_aio_local_ivy
|
||||
- test_docs_examples
|
||||
# Get the artifacts to publish from the build-packages-dist job
|
||||
# since the publishing script expects the legacy outputs layout.
|
||||
|
5
.gitignore
vendored
5
.gitignore
vendored
@ -1,11 +1,10 @@
|
||||
.DS_STORE
|
||||
|
||||
/dist/
|
||||
/bazel-*
|
||||
/bazel-out
|
||||
/integration/bazel/bazel-*
|
||||
e2e_test.*
|
||||
node_modules
|
||||
bower_components
|
||||
tools/gulp-tasks/cldr/cldr-data/
|
||||
|
||||
# Include when developing application packages.
|
||||
@ -13,9 +12,9 @@ pubspec.lock
|
||||
.c9
|
||||
.idea/
|
||||
.settings/
|
||||
.vscode/launch.json
|
||||
*.swo
|
||||
modules/.settings
|
||||
.vscode
|
||||
modules/.vscode
|
||||
|
||||
# Don't check in secret files
|
||||
|
18
.vscode/settings.json
vendored
Normal file
18
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,18 @@
|
||||
{
|
||||
"editor.formatOnSave": true,
|
||||
// Please install http://clang.llvm.org/docs/ClangFormat.html in VSCode to take advantage of clang-format
|
||||
"clang-format.executable": "${workspaceRoot}/node_modules/.bin/clang-format",
|
||||
"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,
|
||||
},
|
||||
}
|
79
CHANGELOG.md
79
CHANGELOG.md
@ -1,3 +1,82 @@
|
||||
<a name="8.0.0-beta.2"></a>
|
||||
# [8.0.0-beta.2](https://github.com/angular/angular/compare/8.0.0-beta.1...8.0.0-beta.2) (2019-01-30)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **bazel:** also pass afterDeclarations transformers to emitWithTsickle ([#28342](https://github.com/angular/angular/issues/28342)) ([70e426b](https://github.com/angular/angular/commit/70e426b))
|
||||
* **forms:** don't override form group's dirty state when disabling controls ([#24591](https://github.com/angular/angular/issues/24591)) ([ef67282](https://github.com/angular/angular/commit/ef67282))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **compiler-cli:** expose ngtsc as a TscPlugin ([#28435](https://github.com/angular/angular/issues/28435)) ([a227c52](https://github.com/angular/angular/commit/a227c52))
|
||||
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* **core:** be more consistent about typeof checks ([#28400](https://github.com/angular/angular/issues/28400)) ([9af18c2](https://github.com/angular/angular/commit/9af18c2))
|
||||
|
||||
|
||||
|
||||
<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="8.0.0-beta.1"></a>
|
||||
# [8.0.0-beta.1](https://github.com/angular/angular/compare/8.0.0-beta.0...8.0.0-beta.1) (2019-01-22)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **bazel:** increase node memory limit for ng_module rule to prevent OOM for big modules ([#28237](https://github.com/angular/angular/issues/28237)) ([73616ab](https://github.com/angular/angular/commit/73616ab))
|
||||
* **router:** `skipLocationChange` with named outlets ([#28300](https://github.com/angular/angular/issues/28300)) ([50df897](https://github.com/angular/angular/commit/50df897)), 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)) ([f59f18c](https://github.com/angular/angular/commit/f59f18c))
|
||||
* **compiler-cli:** resolve generated Sass/Less files to .css inputs ([#28166](https://github.com/angular/angular/issues/28166)) ([a58fd21](https://github.com/angular/angular/commit/a58fd21))
|
||||
* **forms:** add `markAllAsTouched()` to `AbstractControl` ([#26812](https://github.com/angular/angular/issues/26812)) ([45bf911](https://github.com/angular/angular/commit/45bf911)), closes [#19400](https://github.com/angular/angular/issues/19400)
|
||||
|
||||
|
||||
### Reverts
|
||||
|
||||
* "ci: use image based cache for windows BuildKite ([#27990](https://github.com/angular/angular/issues/27990))" ([#28160](https://github.com/angular/angular/issues/28160)) ([7bdf3fe](https://github.com/angular/angular/commit/7bdf3fe))
|
||||
|
||||
|
||||
|
||||
<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="8.0.0-beta.0"></a>
|
||||
# [8.0.0-beta.0](https://github.com/angular/angular/compare/7.2.0...8.0.0-beta.0) (2019-01-16)
|
||||
|
||||
|
@ -62,8 +62,8 @@ local_repository(
|
||||
load("@build_bazel_rules_nodejs//:defs.bzl", "check_bazel_version", "node_repositories", "yarn_install")
|
||||
|
||||
# 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
|
||||
# running `yarn bazel` (see https://github.com/angular/angular/issues/27514#issuecomment-451438271)
|
||||
# - 0.21.0 Using --incompatible_strict_action_env flag fixes cache when running `yarn bazel`
|
||||
# (see https://github.com/angular/angular/issues/27514#issuecomment-451438271)
|
||||
check_bazel_version("0.21.0", """
|
||||
You no longer need to install Bazel on your machine.
|
||||
Angular has a dependency on the @bazel/bazel package which supplies it.
|
||||
|
71
aio/content/examples/event-binding/e2e/src/app.e2e-spec.ts
Normal file
71
aio/content/examples/event-binding/e2e/src/app.e2e-spec.ts
Normal file
@ -0,0 +1,71 @@
|
||||
'use strict'; // necessary for es6 output in node
|
||||
|
||||
import { browser, element, by, protractor } from 'protractor';
|
||||
|
||||
describe('Event binding example', function () {
|
||||
|
||||
beforeEach(function () {
|
||||
browser.get('');
|
||||
});
|
||||
|
||||
let saveButton = element.all(by.css('button')).get(0);
|
||||
let onSaveButton = element.all(by.css('button')).get(1);
|
||||
let myClick = element.all(by.css('button')).get(2);
|
||||
let deleteButton = element.all(by.css('button')).get(3);
|
||||
let saveNoProp = element.all(by.css('button')).get(4);
|
||||
let saveProp = element.all(by.css('button')).get(5);
|
||||
|
||||
|
||||
it('should display Event Binding with Angular', function () {
|
||||
expect(element(by.css('h1')).getText()).toEqual('Event Binding');
|
||||
});
|
||||
|
||||
it('should display 6 buttons', function() {
|
||||
expect(saveButton.getText()).toBe('Save');
|
||||
expect(onSaveButton.getText()).toBe('on-click Save');
|
||||
expect(myClick.getText()).toBe('click with myClick');
|
||||
expect(deleteButton.getText()).toBe('Delete');
|
||||
expect(saveNoProp.getText()).toBe('Save, no propagation');
|
||||
expect(saveProp.getText()).toBe('Save with propagation');
|
||||
});
|
||||
|
||||
it('should support user input', function () {
|
||||
let input = element(by.css('input'));
|
||||
let bindingResult = element.all(by.css('h4')).get(1);
|
||||
expect(bindingResult.getText()).toEqual('Result: teapot');
|
||||
input.sendKeys('abc');
|
||||
expect(bindingResult.getText()).toEqual('Result: teapotabc');
|
||||
});
|
||||
|
||||
it('should hide the item img', async () => {
|
||||
let deleteButton = element.all(by.css('button')).get(3);
|
||||
await deleteButton.click();
|
||||
browser.switchTo().alert().accept();
|
||||
expect(element.all(by.css('img')).get(0).getCssValue('display')).toEqual('none');
|
||||
});
|
||||
|
||||
it('should show two alerts', async () => {
|
||||
let parentDiv = element.all(by.css('.parent-div'));
|
||||
let childDiv = element.all(by.css('div > div')).get(1);
|
||||
await parentDiv.click();
|
||||
browser.switchTo().alert().accept();
|
||||
expect(childDiv.getText()).toEqual('Click me too! (child)');
|
||||
await childDiv.click();
|
||||
expect(browser.switchTo().alert().getText()).toEqual('Click me. Event target class is child-div');
|
||||
browser.switchTo().alert().accept();
|
||||
});
|
||||
|
||||
it('should show 1 alert from Save, no prop, button', async () => {
|
||||
await saveNoProp.click();
|
||||
expect(browser.switchTo().alert().getText()).toEqual('Saved. Event target is Save, no propagation');
|
||||
browser.switchTo().alert().accept();
|
||||
});
|
||||
|
||||
it('should show 2 alerts from Save w/prop button', async () => {
|
||||
await saveProp.click();
|
||||
expect(browser.switchTo().alert().getText()).toEqual('Saved.');
|
||||
browser.switchTo().alert().accept();
|
||||
expect(browser.switchTo().alert().getText()).toEqual('Saved.');
|
||||
browser.switchTo().alert().accept();
|
||||
});
|
||||
});
|
25
aio/content/examples/event-binding/src/app/app.component.css
Normal file
25
aio/content/examples/event-binding/src/app/app.component.css
Normal file
@ -0,0 +1,25 @@
|
||||
.group {
|
||||
background-color: #dae8f9;
|
||||
padding: 1rem;
|
||||
margin: 1rem 0;
|
||||
}
|
||||
|
||||
.parent-div {
|
||||
background-color: #bdd1f7;
|
||||
border: solid 1px rgb(25, 118, 210);
|
||||
padding: 1rem;
|
||||
}
|
||||
|
||||
.parent-div:hover {
|
||||
background-color: #8fb4f9;
|
||||
}
|
||||
|
||||
.child-div {
|
||||
margin-top: 1rem;
|
||||
background-color: #fff;
|
||||
padding: 1rem;
|
||||
}
|
||||
|
||||
.child-div:hover {
|
||||
background-color: #eee;
|
||||
}
|
@ -0,0 +1,53 @@
|
||||
<h1 id="event-binding">Event Binding</h1>
|
||||
|
||||
<div class="group">
|
||||
<h3>Target event</h3>
|
||||
<!-- #docregion event-binding-1 -->
|
||||
<button (click)="onSave($event)">Save</button>
|
||||
<!-- #enddocregion event-binding-1 -->
|
||||
|
||||
<!-- #docregion event-binding-2 -->
|
||||
<button on-click="onSave($event)">on-click Save</button>
|
||||
<!-- #enddocregion event-binding-2 -->
|
||||
|
||||
<!-- #docregion custom-directive -->
|
||||
<h4>myClick is an event on the custom ClickDirective:</h4>
|
||||
<button (myClick)="clickMessage=$event" clickable>click with myClick</button>
|
||||
{{clickMessage}}
|
||||
<!-- #enddocregion custom-directive -->
|
||||
|
||||
</div>
|
||||
|
||||
<div class="group">
|
||||
<h3>$event and event handling statements</h3>
|
||||
<h4>Result: {{currentItem.name}}</h4>
|
||||
|
||||
<!-- #docregion event-binding-3-->
|
||||
<input [value]="currentItem.name"
|
||||
(input)="currentItem.name=$event.target.value" >
|
||||
without NgModel
|
||||
<!-- #enddocregion event-binding-3-->
|
||||
</div>
|
||||
|
||||
<div class="group">
|
||||
<h3>Binding to a nested component</h3>
|
||||
<h4>Custom events with EventEmitter</h4>
|
||||
<!-- #docregion event-binding-to-component -->
|
||||
<app-item-detail (deleteRequest)="deleteItem($event)" [item]="currentItem"></app-item-detail>
|
||||
<!-- #enddocregion event-binding-to-component -->
|
||||
|
||||
|
||||
<h4>Click to see event target class:</h4>
|
||||
<div class="parent-div" (click)="onClickMe($event)" clickable>Click me (parent)
|
||||
<div class="child-div">Click me too! (child) </div>
|
||||
</div>
|
||||
|
||||
<h3>Saves only once:</h3>
|
||||
<div (click)="onSave()" clickable>
|
||||
<button (click)="onSave($event)">Save, no propagation</button>
|
||||
</div>
|
||||
|
||||
<h3>Saves twice:</h3>
|
||||
<div (click)="onSave()" clickable>
|
||||
<button (click)="onSave()">Save with propagation</button>
|
||||
</div>
|
@ -0,0 +1,27 @@
|
||||
import { TestBed, async } from '@angular/core/testing';
|
||||
import { AppComponent } from './app.component';
|
||||
describe('AppComponent', () => {
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [
|
||||
AppComponent
|
||||
],
|
||||
}).compileComponents();
|
||||
}));
|
||||
it('should create the app', async(() => {
|
||||
const fixture = TestBed.createComponent(AppComponent);
|
||||
const app = fixture.debugElement.componentInstance;
|
||||
expect(app).toBeTruthy();
|
||||
}));
|
||||
it(`should have as title 'Featured product:'`, async(() => {
|
||||
const fixture = TestBed.createComponent(AppComponent);
|
||||
const app = fixture.debugElement.componentInstance;
|
||||
expect(app.title).toEqual('Featured product:');
|
||||
}));
|
||||
it('should render title in a p tag', async(() => {
|
||||
const fixture = TestBed.createComponent(AppComponent);
|
||||
fixture.detectChanges();
|
||||
const compiled = fixture.debugElement.nativeElement;
|
||||
expect(compiled.querySelector('p').textContent).toContain('Featured product:');
|
||||
}));
|
||||
});
|
29
aio/content/examples/event-binding/src/app/app.component.ts
Normal file
29
aio/content/examples/event-binding/src/app/app.component.ts
Normal file
@ -0,0 +1,29 @@
|
||||
import { Component } from '@angular/core';
|
||||
import { Item } from './item';
|
||||
|
||||
@Component({
|
||||
selector: 'app-root',
|
||||
templateUrl: './app.component.html',
|
||||
styleUrls: ['./app.component.css']
|
||||
})
|
||||
export class AppComponent {
|
||||
|
||||
currentItem = { name: 'teapot'} ;
|
||||
clickMessage = '';
|
||||
|
||||
onSave(event: KeyboardEvent) {
|
||||
const evtMsg = event ? ' Event target is ' + (<HTMLElement>event.target).textContent : '';
|
||||
alert('Saved.' + evtMsg);
|
||||
if (event) { event.stopPropagation(); }
|
||||
}
|
||||
|
||||
deleteItem(item: Item) {
|
||||
alert(`Delete the ${item}.`);
|
||||
}
|
||||
|
||||
onClickMe(event: KeyboardEvent) {
|
||||
const evtMsg = event ? ' Event target class is ' + (<HTMLElement>event.target).className : '';
|
||||
alert('Click me.' + evtMsg);
|
||||
}
|
||||
|
||||
}
|
22
aio/content/examples/event-binding/src/app/app.module.ts
Normal file
22
aio/content/examples/event-binding/src/app/app.module.ts
Normal file
@ -0,0 +1,22 @@
|
||||
import { BrowserModule } from '@angular/platform-browser';
|
||||
import { NgModule } from '@angular/core';
|
||||
|
||||
|
||||
import { AppComponent } from './app.component';
|
||||
import { ItemDetailComponent } from './item-detail/item-detail.component';
|
||||
import { ClickDirective } from './click.directive';
|
||||
|
||||
|
||||
@NgModule({
|
||||
declarations: [
|
||||
AppComponent,
|
||||
ItemDetailComponent,
|
||||
ClickDirective
|
||||
],
|
||||
imports: [
|
||||
BrowserModule
|
||||
],
|
||||
providers: [],
|
||||
bootstrap: [AppComponent]
|
||||
})
|
||||
export class AppModule { }
|
@ -0,0 +1,18 @@
|
||||
/* tslint:disable use-output-property-decorator directive-class-suffix */
|
||||
import { Directive, ElementRef, EventEmitter, Output } from '@angular/core';
|
||||
|
||||
@Directive({selector: '[myClick]'})
|
||||
export class ClickDirective {
|
||||
@Output('myClick') clicks = new EventEmitter<string>(); // @Output(alias) propertyName = ...
|
||||
|
||||
toggle = false;
|
||||
|
||||
constructor(el: ElementRef) {
|
||||
el.nativeElement
|
||||
.addEventListener('click', (event: Event) => {
|
||||
this.toggle = !this.toggle;
|
||||
this.clicks.emit(this.toggle ? 'Click!' : '');
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,11 @@
|
||||
.detail {
|
||||
border: 1px solid rgb(25, 118, 210);
|
||||
padding: 1rem;
|
||||
margin: 1rem 0;
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100px;
|
||||
display: block;
|
||||
padding: 1rem 0;
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
<div class="detail">
|
||||
<p>This is the ItemDetailComponent</p>
|
||||
<!-- #docregion line-through -->
|
||||
<img src="{{itemImageUrl}}" [style.display]="displayNone">
|
||||
<span [style.text-decoration]="lineThrough">{{ item.name }}
|
||||
</span>
|
||||
<button (click)="delete()">Delete</button>
|
||||
<!-- #enddocregion line-through -->
|
||||
</div>
|
@ -0,0 +1,25 @@
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { ItemDetailComponent } from './item-detail.component';
|
||||
|
||||
describe('ItemDetailComponent', () => {
|
||||
let component: ItemDetailComponent;
|
||||
let fixture: ComponentFixture<ItemDetailComponent>;
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [ ItemDetailComponent ]
|
||||
})
|
||||
.compileComponents();
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(ItemDetailComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should create', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
});
|
@ -0,0 +1,30 @@
|
||||
/* tslint:disable use-input-property-decorator use-output-property-decorator */
|
||||
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
||||
|
||||
import { Item } from '../item';
|
||||
|
||||
@Component({
|
||||
selector: 'app-item-detail',
|
||||
styleUrls: ['./item-detail.component.css'],
|
||||
templateUrl: './item-detail.component.html'
|
||||
})
|
||||
export class ItemDetailComponent {
|
||||
|
||||
@Input() item;
|
||||
itemImageUrl = 'assets/teapot.svg';
|
||||
lineThrough = '';
|
||||
displayNone = '';
|
||||
@Input() prefix = '';
|
||||
|
||||
// #docregion deleteRequest
|
||||
// This component makes a request but it can't actually delete a hero.
|
||||
@Output() deleteRequest = new EventEmitter<Item>();
|
||||
|
||||
delete() {
|
||||
this.deleteRequest.emit(this.item.name);
|
||||
this.displayNone = this.displayNone ? '' : 'none';
|
||||
this.lineThrough = this.lineThrough ? '' : 'line-through';
|
||||
}
|
||||
// #enddocregion deleteRequest
|
||||
|
||||
}
|
4
aio/content/examples/event-binding/src/app/item.ts
Normal file
4
aio/content/examples/event-binding/src/app/item.ts
Normal file
@ -0,0 +1,4 @@
|
||||
export class Item {
|
||||
name: '';
|
||||
}
|
||||
|
1
aio/content/examples/event-binding/src/assets/teapot.svg
Normal file
1
aio/content/examples/event-binding/src/assets/teapot.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 23 KiB |
@ -2,7 +2,7 @@
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Demo</title>
|
||||
<title>EventBinding</title>
|
||||
<base href="/">
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
12
aio/content/examples/event-binding/src/main.ts
Normal file
12
aio/content/examples/event-binding/src/main.ts
Normal file
@ -0,0 +1,12 @@
|
||||
import { enableProdMode } from '@angular/core';
|
||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||
|
||||
import { AppModule } from './app/app.module';
|
||||
import { environment } from './environments/environment';
|
||||
|
||||
if (environment.production) {
|
||||
enableProdMode();
|
||||
}
|
||||
|
||||
platformBrowserDynamic().bootstrapModule(AppModule)
|
||||
.catch(err => console.log(err));
|
10
aio/content/examples/event-binding/stackblitz.json
Normal file
10
aio/content/examples/event-binding/stackblitz.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"description": "Event Binding",
|
||||
"files": [
|
||||
"!**/*.d.ts",
|
||||
"!**/*.js",
|
||||
"!**/*.[1,2].*"
|
||||
],
|
||||
"file": "src/app/app.component.ts",
|
||||
"tags": ["Event Binding"]
|
||||
}
|
@ -42,7 +42,7 @@ export class HeroService {
|
||||
// #enddocregion getHeroes-2
|
||||
tap(_ => this.log('fetched heroes')),
|
||||
// #docregion getHeroes-2
|
||||
catchError(this.handleError('getHeroes', []))
|
||||
catchError(this.handleError<Hero[]>('getHeroes', []))
|
||||
);
|
||||
// #docregion getHeroes-1
|
||||
}
|
||||
|
@ -453,7 +453,7 @@ The compiler understands all syntax forms that the _collector_ supports, but it
|
||||
|
||||
The compiler can only reference _exported symbols_.
|
||||
|
||||
Decorated component class members must be public. You cannot make an `@Input()` property private or internal.
|
||||
Decorated component class members must be public. You cannot make an `@Input()` property private or protected.
|
||||
|
||||
Data bound properties must also be public.
|
||||
|
||||
@ -1508,7 +1508,7 @@ done manually.
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
|
@ -73,7 +73,7 @@ Angular provides predefined pipes for common transformations, and you can also d
|
||||
|
||||
## Services and dependency injection
|
||||
|
||||
For data or logic that isn't associated with a specific view, and that you want to share across components, you create a *service* class. A service class definition is immediately preceded by the `@Injectable()` decorator. The decorator provides the metadata that allows your service to be *injected* into client components as a dependency.
|
||||
For data or logic that isn't associated with a specific view, and that you want to share across components, you create a *service* class. A service class definition is immediately preceded by the `@Injectable()` decorator. The decorator provides the metadata that allows other providers to be **injected** as dependencies into your class.
|
||||
|
||||
*Dependency injection* (DI) lets you keep your component classes lean and efficient. They don't fetch data from the server, validate user input, or log directly to the console; they delegate such tasks to services.
|
||||
|
||||
|
@ -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.
|
||||
|
||||
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`.
|
||||
Autoprefixer looks for the Browserlist configuration when it prefixes your CSS.
|
||||
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 `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`:
|
||||
```
|
||||
|
@ -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. |
|
||||
| `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. |
|
||||
| `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. |
|
||||
| `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. |
|
||||
|
@ -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.
|
||||
|
||||
Called after the `ngAfterViewInit` and every subsequent `ngAfterContentChecked()`.
|
||||
Called after the `ngAfterViewInit()` and every subsequent `ngAfterContentChecked()`.
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
@ -1055,7 +1055,7 @@ The default route should redirect to the `HeroListComponent` _only_ when the _en
|
||||
Remember to restore the redirect to `pathMatch = 'full'`.
|
||||
|
||||
Learn more in Victor Savkin's
|
||||
[post on redirects](http://victorsavkin.com/post/146722301646/angular-router-empty-paths-componentless-routes).
|
||||
[post on redirects](http://vsavkin.tumblr.com/post/146722301646/angular-router-empty-paths-componentless-routes).
|
||||
|
||||
|
||||
</div>
|
||||
@ -3796,7 +3796,7 @@ The relevant *Crisis Center* code for this milestone follows.
|
||||
|
||||
</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>
|
||||
|
||||
|
@ -797,7 +797,6 @@ content harmlessly.
|
||||
|
||||
|
||||
<hr/>
|
||||
|
||||
{@a other-bindings}
|
||||
|
||||
## Attribute, class, and style bindings
|
||||
@ -944,56 +943,44 @@ Note that a _style property_ name can be written in either
|
||||
|
||||
{@a event-binding}
|
||||
|
||||
## Event binding ( <span class="syntax">(event)</span> )
|
||||
## Event binding `(event)`
|
||||
|
||||
The bindings directives you've met so far flow data in one direction: **from a component to an element**.
|
||||
Event binding allows you to listen for certain events such as
|
||||
keystrokes, mouse movements, clicks, and touches. For an example
|
||||
demonstrating all of the points in this section, see the <live-example name="event-binding">event binding example</live-example>.
|
||||
|
||||
Users don't just stare at the screen. They enter text into input boxes. They pick items from lists.
|
||||
They click buttons. Such user actions may result in a flow of data in the opposite direction:
|
||||
**from an element to a component**.
|
||||
|
||||
The only way to know about a user action is to listen for certain events such as
|
||||
keystrokes, mouse movements, clicks, and touches.
|
||||
You declare your interest in user actions through Angular event binding.
|
||||
|
||||
Event binding syntax consists of a **target event** name
|
||||
Angular event binding syntax consists of a **target event** name
|
||||
within parentheses on the left of an equal sign, and a quoted
|
||||
[template statement](guide/template-syntax#template-statements) on the right.
|
||||
template statement on the right.
|
||||
The following event binding listens for the button's click events, calling
|
||||
the component's `onSave()` method whenever a click occurs:
|
||||
|
||||
<code-example path="template-syntax/src/app/app.component.html" region="event-binding-1" header="src/app/app.component.html" linenums="false">
|
||||
</code-example>
|
||||
<figure>
|
||||
<img src='generated/images/guide/event-binding/syntax-diagram.svg' alt="Syntax diagram">
|
||||
</figure>
|
||||
|
||||
### Target event
|
||||
|
||||
A **name between parentheses** — for example, `(click)` —
|
||||
identifies the target event. In the following example, the target is the button's click event.
|
||||
As above, the target is the button's click event.
|
||||
|
||||
<code-example path="template-syntax/src/app/app.component.html" region="event-binding-1" header="src/app/app.component.html" linenums="false">
|
||||
<code-example path="event-binding/src/app/app.component.html" region="event-binding-1" header="src/app/app.component.html" linenums="false">
|
||||
</code-example>
|
||||
|
||||
Some people prefer the `on-` prefix alternative, known as the **canonical form**:
|
||||
Alternatively, use the `on-` prefix, known as the canonical form:
|
||||
|
||||
<code-example path="template-syntax/src/app/app.component.html" region="event-binding-2" header="src/app/app.component.html" linenums="false">
|
||||
<code-example path="event-binding/src/app/app.component.html" region="event-binding-2" header="src/app/app.component.html" linenums="false">
|
||||
</code-example>
|
||||
|
||||
Element events may be the more common targets, but Angular looks first to see if the name matches an event property
|
||||
of a known directive, as it does in the following example:
|
||||
|
||||
<code-example path="template-syntax/src/app/app.component.html" region="event-binding-3" header="src/app/app.component.html" linenums="false">
|
||||
<code-example path="event-binding/src/app/app.component.html" region="custom-directive" header="src/app/app.component.html" linenums="false">
|
||||
</code-example>
|
||||
|
||||
<div class="alert is-helpful">
|
||||
|
||||
The `myClick` directive is further described in the section
|
||||
on [aliasing input/output properties](guide/template-syntax#aliasing-io).
|
||||
|
||||
</div>
|
||||
|
||||
If the name fails to match an element event or an output property of a known directive,
|
||||
Angular reports an “unknown directive” error.
|
||||
|
||||
|
||||
### *$event* and event handling statements
|
||||
|
||||
In an event binding, Angular sets up an event handler for the target event.
|
||||
@ -1003,72 +990,73 @@ The template statement typically involves a receiver, which performs an action
|
||||
in response to the event, such as storing a value from the HTML control
|
||||
into a model.
|
||||
|
||||
The binding conveys information about the event, including data values, through
|
||||
an **event object named `$event`**.
|
||||
The binding conveys information about the event. This information can include data values such as an event object, string, or number named `$event`.
|
||||
|
||||
The shape of the event object is determined by the target event.
|
||||
The target event determines the shape of the `$event` object.
|
||||
If the target event is a native DOM element event, then `$event` is a
|
||||
[DOM event object](https://developer.mozilla.org/en-US/docs/Web/Events),
|
||||
with properties such as `target` and `target.value`.
|
||||
|
||||
Consider this example:
|
||||
|
||||
<code-example path="template-syntax/src/app/app.component.html" region="without-NgModel" header="src/app/app.component.html" linenums="false">
|
||||
<code-example path="event-binding/src/app/app.component.html" region="event-binding-3" header="src/app/app.component.html" linenums="false">
|
||||
</code-example>
|
||||
|
||||
This code sets the input box `value` property by binding to the `name` property.
|
||||
To listen for changes to the value, the code binds to the input box's `input` event.
|
||||
This code sets the `<input>` `value` property by binding to the `name` property.
|
||||
To listen for changes to the value, the code binds to the `input`
|
||||
event of the `<input>` element.
|
||||
When the user makes changes, the `input` event is raised, and the binding executes
|
||||
the statement within a context that includes the DOM event object, `$event`.
|
||||
|
||||
To update the `name` property, the changed text is retrieved by following the path `$event.target.value`.
|
||||
|
||||
If the event belongs to a directive (recall that components are directives),
|
||||
`$event` has whatever shape the directive decides to produce.
|
||||
If the event belongs to a directive—recall that components
|
||||
are directives—`$event` has whatever shape the directive produces.
|
||||
|
||||
{@a eventemitter}
|
||||
|
||||
{@a custom-event}
|
||||
|
||||
### Custom events with <span class="syntax">EventEmitter</span>
|
||||
### Custom events with `EventEmitter`
|
||||
|
||||
Directives typically raise custom events with an Angular [EventEmitter](api/core/EventEmitter).
|
||||
The directive creates an `EventEmitter` and exposes it as a property.
|
||||
The directive calls `EventEmitter.emit(payload)` to fire an event, passing in a message payload, which can be anything.
|
||||
Parent directives listen for the event by binding to this property and accessing the payload through the `$event` object.
|
||||
|
||||
Consider a `HeroDetailComponent` that presents hero information and responds to user actions.
|
||||
Although the `HeroDetailComponent` has a delete button it doesn't know how to delete the hero itself.
|
||||
The best it can do is raise an event reporting the user's delete request.
|
||||
Consider an `ItemDetailComponent` that presents item information and responds to user actions.
|
||||
Although the `ItemDetailComponent` has a delete button, it doesn't know how to delete the hero. It can only raise an event reporting the user's delete request.
|
||||
|
||||
Here are the pertinent excerpts from that `HeroDetailComponent`:
|
||||
Here are the pertinent excerpts from that `ItemDetailComponent`:
|
||||
|
||||
<code-example path="template-syntax/src/app/hero-detail.component.ts" linenums="false" header="src/app/hero-detail.component.ts (template)" region="template-1">
|
||||
|
||||
<code-example path="event-binding/src/app/item-detail/item-detail.component.html" linenums="false" header="src/app/item-detail/item-detail.component.ts (template)" region="line-through">
|
||||
</code-example>
|
||||
|
||||
<code-example path="template-syntax/src/app/hero-detail.component.ts" linenums="false" header="src/app/hero-detail.component.ts (deleteRequest)" region="deleteRequest">
|
||||
<code-example path="event-binding/src/app/item-detail/item-detail.component.ts" linenums="false" header="src/app/item-detail/item-detail.component.ts (deleteRequest)" region="deleteRequest">
|
||||
</code-example>
|
||||
|
||||
|
||||
The component defines a `deleteRequest` property that returns an `EventEmitter`.
|
||||
When the user clicks *delete*, the component invokes the `delete()` method,
|
||||
telling the `EventEmitter` to emit a `Hero` object.
|
||||
telling the `EventEmitter` to emit an `Item` object.
|
||||
|
||||
Now imagine a hosting parent component that binds to the `HeroDetailComponent`'s `deleteRequest` event.
|
||||
Now imagine a hosting parent component that binds to the `deleteRequest` event
|
||||
of the `ItemDetailComponent`.
|
||||
|
||||
<code-example path="template-syntax/src/app/app.component.html" linenums="false" header="src/app/app.component.html (event-binding-to-component)" region="event-binding-to-component">
|
||||
<code-example path="event-binding/src/app/app.component.html" linenums="false" header="src/app/app.component.html (event-binding-to-component)" region="event-binding-to-component">
|
||||
</code-example>
|
||||
|
||||
When the `deleteRequest` event fires, Angular calls the parent component's `deleteHero` method,
|
||||
passing the *hero-to-delete* (emitted by `HeroDetail`) in the `$event` variable.
|
||||
When the `deleteRequest` event fires, Angular calls the parent component's
|
||||
`deleteItem()` method, passing the *item-to-delete* (emitted by `ItemDetail`)
|
||||
in the `$event` variable.
|
||||
|
||||
### Template statements have side effects
|
||||
|
||||
The `deleteHero` method has a side effect: it deletes a hero.
|
||||
Template statement side effects are not just OK, but expected.
|
||||
Though [template expressions](guide/template-syntax#template-expressions) shouldn't have [side effects](guide/template-syntax#avoid-side-effects), template
|
||||
statements usually do. The `deleteItem()` method does have
|
||||
a side effect: it deletes an item.
|
||||
|
||||
Deleting the hero updates the model, perhaps triggering other changes
|
||||
including queries and saves to a remote server.
|
||||
These changes percolate through the system and are ultimately displayed in this and other views.
|
||||
Deleting an item updates the model, and depending on your code, triggers
|
||||
other changes including queries and saving to a remote server.
|
||||
These changes propagate through the system and ultimately display in this and other views.
|
||||
|
||||
|
||||
<hr/>
|
||||
|
@ -2398,7 +2398,7 @@ So when you call `createComponent()`, the `TestBed` compiles implicitly.
|
||||
|
||||
That's not a problem when the source code is in memory.
|
||||
But the `BannerComponent` requires external files
|
||||
that the compile must read from the file system,
|
||||
that the compiler must read from the file system,
|
||||
an inherently _asynchronous_ operation.
|
||||
|
||||
If the `TestBed` were allowed to continue, the tests would run and fail mysteriously
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 9.2 KiB After Width: | Height: | Size: 154 KiB |
@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 600 125" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;"><g transform="matrix(0.469484,0,0,0.469925,-158.685,-184.211)"><text x="374px" y="472px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:64px;"><button</text><text x="607.094px" y="472px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:64px;fill:#df002d;">(click)</text><text x="774.156px" y="472px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:64px;">="</text><text x="834.25px" y="472px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:64px;fill:#0022be;">onSave()</text><text x="1093.94px" y="472px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:64px;">">Save</button></text></g><path d="M142.827,95.824l-6.663,-3.032l17.828,-39.26l-6.187,-2.815l13.842,-5.191l5.195,13.852l-6.187,-2.815l-17.828,39.261Z" style="fill:#df002d;"/><path d="M337.08,93.548l-6.915,2.399l-13.342,-38.531l-6.422,2.228l6.458,-13.308l13.3,6.453l-6.421,2.228l13.342,38.531Z" style="fill:#3345cc;"/><g><rect x="23.005" y="76.128" width="197.653" height="31.485" style="fill:#fff;stroke:#000;stroke-width:0.7px;"/><text x="31.989px" y="98.214px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:22.556px;fill:#df002d;">target even<tspan x="144.743px " y="98.214px ">t</tspan> name</text></g><g><rect x="275.117" y="76.128" width="228.169" height="31.955" style="fill:#fff;stroke:#000;stroke-width:0.7px;"/><text x="293.078px" y="98.214px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:22.556px;fill:#3345cc;">template st<tspan x="403.3px " y="98.214px ">a</tspan>tement</text></g></svg>
|
After Width: | Height: | Size: 2.0 KiB |
@ -698,5 +698,13 @@
|
||||
"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.",
|
||||
"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>January 9 - 12, 2019</td>
|
||||
</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>
|
||||
</table>
|
||||
|
||||
|
@ -753,6 +753,10 @@
|
||||
{
|
||||
"title": "日本語版",
|
||||
"url": "https://angular.jp/"
|
||||
},
|
||||
{
|
||||
"title": "한국어",
|
||||
"url": "https://angular.kr/"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@ -116,7 +116,7 @@ Most apps strive for a consistent look across the application.
|
||||
The CLI generated an empty `styles.css` for this purpose.
|
||||
Put your application-wide styles there.
|
||||
|
||||
Here's an excerpt from the `styles.css` for the _Tour of Heroes_ sample app.
|
||||
Open `src/styles.css` and add the code below to the file.
|
||||
|
||||
<code-example path="toh-pt0/src/styles.1.css" header="src/styles.css (excerpt)">
|
||||
</code-example>
|
||||
|
@ -112,7 +112,7 @@ Inject `HttpClient` into the constructor in a private property called `http`.
|
||||
</code-example>
|
||||
|
||||
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
|
||||
path="toh-pt6/src/app/hero.service.ts"
|
||||
|
@ -17,7 +17,9 @@
|
||||
"build": "yarn ~~build",
|
||||
"prebuild-local": "yarn setup-local",
|
||||
"build-local": "yarn ~~build",
|
||||
"extract-cli-command-docs": "node tools/transforms/cli-docs-package/extract-cli-commands.js 4ae713b5a",
|
||||
"prebuild-with-ivy": "yarn setup-local && yarn ivy-ngcc",
|
||||
"build-with-ivy": "node scripts/build-with-ivy",
|
||||
"extract-cli-command-docs": "node tools/transforms/cli-docs-package/extract-cli-commands.js fd4e960d6",
|
||||
"lint": "yarn check-env && yarn docs-lint && ng lint && yarn example-lint && yarn tools-lint",
|
||||
"test": "yarn check-env && ng test",
|
||||
"pree2e": "yarn check-env && yarn update-webdriver",
|
||||
@ -71,7 +73,7 @@
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10.9.0 <11.0.0",
|
||||
"yarn": ">=1.10.1 <1.13.0"
|
||||
"yarn": ">=1.10.1 <1.14.0"
|
||||
},
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
@ -95,8 +97,8 @@
|
||||
"zone.js": "^0.8.26"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@angular-devkit/build-angular": "~0.10.0",
|
||||
"@angular/cli": "7.2.0-beta.2",
|
||||
"@angular-devkit/build-angular": "^0.12.1",
|
||||
"@angular/cli": "7.2.1",
|
||||
"@angular/compiler": "^7.0.0",
|
||||
"@angular/compiler-cli": "^7.0.0",
|
||||
"@angular/language-service": "^7.0.0",
|
||||
@ -107,7 +109,7 @@
|
||||
"canonical-path": "1.0.0",
|
||||
"chalk": "^2.1.0",
|
||||
"cjson": "^0.5.0",
|
||||
"codelyzer": "~4.2.1",
|
||||
"codelyzer": "~4.5.0",
|
||||
"cross-spawn": "^5.1.0",
|
||||
"css-selector-parser": "^1.3.0",
|
||||
"dgeni": "^0.4.11",
|
||||
|
@ -9,7 +9,7 @@ const SRC_DIR = resolve(__dirname, '../src');
|
||||
const DIST_DIR = resolve(__dirname, '../dist');
|
||||
|
||||
// Run
|
||||
_main(process.argv.slice(2));
|
||||
_main();
|
||||
|
||||
// Functions - Definitions
|
||||
function _main() {
|
||||
|
46
aio/scripts/build-with-ivy.js
Normal file
46
aio/scripts/build-with-ivy.js
Normal file
@ -0,0 +1,46 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
// Imports
|
||||
const {extend, parse} = require('cjson');
|
||||
const {readFileSync, writeFileSync} = require('fs');
|
||||
const {join, resolve} = require('path');
|
||||
const {exec, set} = require('shelljs');
|
||||
|
||||
set('-e');
|
||||
|
||||
// Constants
|
||||
const ROOT_DIR = resolve(__dirname, '..');
|
||||
const TS_CONFIG_PATH = join(ROOT_DIR, 'tsconfig.json');
|
||||
const NG_COMPILER_OPTS = {
|
||||
angularCompilerOptions: {
|
||||
// Related Jira issue: FW-737
|
||||
allowEmptyCodegenFiles: true,
|
||||
enableIvy: 'ngtsc',
|
||||
},
|
||||
};
|
||||
|
||||
// Run
|
||||
_main(process.argv.slice(2));
|
||||
|
||||
// Functions - Definitions
|
||||
function _main(buildArgs) {
|
||||
console.log('\nModifying `tsconfig.json`...');
|
||||
const oldTsConfigStr = readFileSync(TS_CONFIG_PATH, 'utf8');
|
||||
const oldTsConfigObj = parse(oldTsConfigStr);
|
||||
const newTsConfigObj = extend(true, oldTsConfigObj, NG_COMPILER_OPTS);
|
||||
const newTsConfigStr = JSON.stringify(newTsConfigObj, null, 2);
|
||||
writeFileSync(TS_CONFIG_PATH, newTsConfigStr);
|
||||
console.log(newTsConfigStr);
|
||||
|
||||
try {
|
||||
const buildArgsStr = buildArgs.join(' ');
|
||||
|
||||
console.log(`\nBuilding${buildArgsStr && ` with args \`${buildArgsStr}\``}...`);
|
||||
exec(`yarn ~~build ${buildArgsStr}`, {cwd: ROOT_DIR});
|
||||
} finally {
|
||||
console.log('\nRestoring `tsconfig.json`...');
|
||||
writeFileSync(TS_CONFIG_PATH, oldTsConfigStr);
|
||||
}
|
||||
|
||||
console.log('\nDone!');
|
||||
}
|
@ -61,7 +61,7 @@
|
||||
(docInserted)="onDocInserted()"
|
||||
(docRendered)="onDocRendered()">
|
||||
</aio-doc-viewer>
|
||||
<aio-dt [on]="dtOn" [(doc)]="currentDocument"></aio-dt>
|
||||
<aio-dt *ngIf="dtOn" [(doc)]="currentDocument"></aio-dt>
|
||||
</main>
|
||||
|
||||
</mat-sidenav-container>
|
||||
|
@ -52,7 +52,7 @@ describe('AppComponent', () => {
|
||||
await newDocPromise; // Wait for the new document to be fetched.
|
||||
fixture.detectChanges(); // Propagate document change to the view (i.e to `DocViewer`).
|
||||
await docRenderedPromise; // Wait for the `docRendered` event.
|
||||
};
|
||||
}
|
||||
|
||||
function initializeTest(waitForDoc = true) {
|
||||
fixture = TestBed.createComponent(AppComponent);
|
||||
@ -73,7 +73,7 @@ describe('AppComponent', () => {
|
||||
tocService = de.injector.get<TocService>(TocService);
|
||||
|
||||
return waitForDoc && awaitDocRendered();
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
describe('with proper DocViewer', () => {
|
||||
@ -169,6 +169,13 @@ describe('AppComponent', () => {
|
||||
|
||||
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', () => {
|
||||
@ -461,11 +468,15 @@ describe('AppComponent', () => {
|
||||
let scrollService: ScrollService;
|
||||
let scrollSpy: jasmine.Spy;
|
||||
let scrollToTopSpy: jasmine.Spy;
|
||||
let scrollAfterRenderSpy: jasmine.Spy;
|
||||
let removeStoredScrollPositionSpy: jasmine.Spy;
|
||||
|
||||
beforeEach(() => {
|
||||
scrollService = fixture.debugElement.injector.get<ScrollService>(ScrollService);
|
||||
scrollSpy = spyOn(scrollService, 'scroll');
|
||||
scrollToTopSpy = spyOn(scrollService, 'scrollToTop');
|
||||
scrollAfterRenderSpy = spyOn(scrollService, 'scrollAfterRender');
|
||||
removeStoredScrollPositionSpy = spyOn(scrollService, 'removeStoredScrollPosition');
|
||||
});
|
||||
|
||||
it('should not scroll immediately when the docId (path) changes', () => {
|
||||
@ -510,33 +521,24 @@ describe('AppComponent', () => {
|
||||
expect(scrollSpy).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
it('should scroll to top when call `onDocRemoved` directly', () => {
|
||||
scrollToTopSpy.calls.reset();
|
||||
|
||||
it('should call `removeStoredScrollPosition` when call `onDocRemoved` directly', () => {
|
||||
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();
|
||||
expect(scrollSpy).not.toHaveBeenCalled();
|
||||
|
||||
tick(scrollDelay);
|
||||
expect(scrollSpy).toHaveBeenCalled();
|
||||
expect(scrollAfterRenderSpy).toHaveBeenCalledWith(scrollDelay);
|
||||
}));
|
||||
|
||||
it('should scroll (via `onDocInserted`) when finish navigating to a new doc', fakeAsync(() => {
|
||||
expect(scrollToTopSpy).not.toHaveBeenCalled();
|
||||
|
||||
it('should call `scrollAfterRender` (via `onDocInserted`) when navigate to a new Doc', fakeAsync(() => {
|
||||
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`
|
||||
|
||||
expect(scrollToTopSpy).toHaveBeenCalled();
|
||||
expect(scrollSpy).not.toHaveBeenCalled();
|
||||
expect(scrollAfterRenderSpy).toHaveBeenCalledWith(scrollDelay);
|
||||
|
||||
tick(scrollDelay);
|
||||
expect(scrollSpy).toHaveBeenCalled();
|
||||
tick(500); // there are other outstanding timers in the AppComponent that are not relevant
|
||||
}));
|
||||
});
|
||||
|
||||
|
@ -127,7 +127,7 @@ export class AppComponent implements OnInit {
|
||||
}
|
||||
if (path === this.currentPath) {
|
||||
// scroll only if on same page (most likely a change to the hash)
|
||||
this.autoScroll();
|
||||
this.scrollService.scroll();
|
||||
} else {
|
||||
// don't scroll; leave that to `onDocRendered`
|
||||
this.currentPath = path;
|
||||
@ -187,11 +187,6 @@ export class AppComponent implements OnInit {
|
||||
.subscribe(() => this.updateShell());
|
||||
}
|
||||
|
||||
// Scroll to the anchor in the hash fragment or top of doc.
|
||||
autoScroll() {
|
||||
this.scrollService.scroll();
|
||||
}
|
||||
|
||||
onDocReady() {
|
||||
// About to transition to new view.
|
||||
this.isTransitioning = true;
|
||||
@ -204,9 +199,7 @@ export class AppComponent implements OnInit {
|
||||
}
|
||||
|
||||
onDocRemoved() {
|
||||
// The previous document has been removed.
|
||||
// Scroll to top to restore a clean visual state for the new document.
|
||||
this.scrollService.scrollToTop();
|
||||
this.scrollService.removeStoredScrollPosition();
|
||||
}
|
||||
|
||||
onDocInserted() {
|
||||
@ -216,9 +209,8 @@ export class AppComponent implements OnInit {
|
||||
// (e.g. sidenav, host classes) needs to happen asynchronously.
|
||||
setTimeout(() => this.updateShell());
|
||||
|
||||
// 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.autoScroll(), 500);
|
||||
// Scroll the good position depending on the context
|
||||
this.scrollService.scrollAfterRender(500);
|
||||
}
|
||||
|
||||
onDocRendered() {
|
||||
@ -242,7 +234,7 @@ export class AppComponent implements OnInit {
|
||||
|
||||
@HostListener('window:resize', ['$event.target.innerWidth'])
|
||||
onResize(width: number) {
|
||||
this.isSideBySide = width > this.sideBySideWidth;
|
||||
this.isSideBySide = width >= this.sideBySideWidth;
|
||||
this.showFloatingToc.next(width > this.showFloatingTocWidth);
|
||||
|
||||
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'])
|
||||
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"
|
||||
if (!this.searchElements.some(element => element.nativeElement.contains(eventTarget))) {
|
||||
this.hideSearchResults();
|
||||
@ -348,6 +339,9 @@ export class AppComponent implements OnInit {
|
||||
// Dynamically change height of table of contents container
|
||||
@HostListener('window:scroll')
|
||||
onScroll() {
|
||||
|
||||
this.scrollService.updateScrollPositionInHistory();
|
||||
|
||||
if (!this.tocMaxHeightOffset) {
|
||||
// Must wait until `mat-toolbar` is measurable.
|
||||
const el = this.hostElement.nativeElement as Element;
|
||||
|
@ -125,7 +125,7 @@ export class ApiListComponent implements OnInit {
|
||||
return status === 'all' ||
|
||||
status === item.stability ||
|
||||
(status === 'security-risk' && item.securityRisk);
|
||||
};
|
||||
}
|
||||
|
||||
function matchesType() {
|
||||
return type === 'all' || type === item.docType;
|
||||
|
@ -54,7 +54,7 @@ export class ApiService implements OnDestroy {
|
||||
section.items.every(item => item.stability === 'deprecated');
|
||||
});
|
||||
}));
|
||||
};
|
||||
}
|
||||
|
||||
constructor(private http: HttpClient, private logger: Logger) { }
|
||||
|
||||
|
@ -46,7 +46,7 @@ export interface TabInfo {
|
||||
export class CodeTabsComponent implements OnInit, AfterViewInit {
|
||||
tabs: TabInfo[];
|
||||
|
||||
@Input('linenums') linenums: string;
|
||||
@Input() linenums: string;
|
||||
|
||||
@ViewChild('content') content;
|
||||
|
||||
|
@ -79,7 +79,7 @@ describe('ContributorListComponent', () => {
|
||||
return comp;
|
||||
}
|
||||
|
||||
interface SearchResult { [index: string]: string; };
|
||||
interface SearchResult { [index: string]: string; }
|
||||
|
||||
class TestLocationService {
|
||||
searchResult: SearchResult = {};
|
||||
|
@ -245,7 +245,7 @@ class FakeComponentFactory extends ComponentFactory<any> {
|
||||
rootSelectorOrNode?: string | any,
|
||||
ngModule?: NgModuleRef<any>): ComponentRef<any> {
|
||||
return jasmine.createSpy('ComponentRef') as any;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
class FakeComponentFactoryResolver extends ComponentFactoryResolver {
|
||||
|
@ -37,6 +37,6 @@ describe('Getting Started NgFor Component', () => {
|
||||
|
||||
component.parseError$.subscribe(error => {
|
||||
expect(error).toBeTruthy();
|
||||
})
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@ -46,6 +46,6 @@ describe('Getting Started NgIf Component', () => {
|
||||
|
||||
component.parseError$.subscribe(error => {
|
||||
expect(error).toBeTruthy();
|
||||
})
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@ -26,7 +26,7 @@ export class ResourceService {
|
||||
|
||||
(categories as ConnectableObservable<Category[]>).connect();
|
||||
return categories;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
// Extract sorted Category[] from resource JSON data
|
||||
|
@ -100,9 +100,10 @@ export class DocViewerComponent implements OnDestroy {
|
||||
if (needsToc && !embeddedToc) {
|
||||
// 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>');
|
||||
} else if (!needsToc && embeddedToc) {
|
||||
} else if (!needsToc && embeddedToc && embeddedToc.parentNode !== null) {
|
||||
// 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 () => {
|
||||
|
@ -4,18 +4,17 @@ import { DocumentContents } from 'app/documents/document.service';
|
||||
@Component({
|
||||
selector: 'aio-dt',
|
||||
template: `
|
||||
<div *ngIf="on">
|
||||
<hr>
|
||||
<textarea #dt [value]="text" rows="10" cols="80"></textarea>
|
||||
<br/>
|
||||
<button (click)="dtextSet()">Show change</button>
|
||||
</div>
|
||||
<div>
|
||||
<hr>
|
||||
<textarea #dt [value]="text" rows="10" cols="80"></textarea>
|
||||
<br/>
|
||||
<button (click)="dtextSet()">Show change</button>
|
||||
</div>
|
||||
`
|
||||
})
|
||||
export class DtComponent {
|
||||
|
||||
@Input() on = false;
|
||||
@Input('doc') doc: DocumentContents;
|
||||
@Input() doc: DocumentContents;
|
||||
@Output() docChange = new EventEmitter<DocumentContents>();
|
||||
|
||||
@ViewChild('dt', { read: ElementRef })
|
||||
|
@ -14,4 +14,4 @@ export class Deployment {
|
||||
mode: string = this.location.search()['mode'] || environment.mode;
|
||||
|
||||
constructor(private location: LocationService) {}
|
||||
};
|
||||
}
|
||||
|
@ -1,6 +1,8 @@
|
||||
import { ReflectiveInjector } from '@angular/core';
|
||||
import { PlatformLocation } from '@angular/common';
|
||||
import { Location, LocationStrategy, PlatformLocation, ViewportScroller } 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';
|
||||
|
||||
@ -8,8 +10,9 @@ describe('ScrollService', () => {
|
||||
const topOfPageElem = {} as Element;
|
||||
let injector: ReflectiveInjector;
|
||||
let document: MockDocument;
|
||||
let location: MockPlatformLocation;
|
||||
let platformLocation: MockPlatformLocation;
|
||||
let scrollService: ScrollService;
|
||||
let location: SpyLocation;
|
||||
|
||||
class MockPlatformLocation {
|
||||
hash: string;
|
||||
@ -27,6 +30,11 @@ describe('ScrollService', () => {
|
||||
scrollIntoView = jasmine.createSpy('Element scrollIntoView');
|
||||
}
|
||||
|
||||
const viewportScrollerStub = jasmine.createSpyObj(
|
||||
'viewportScroller',
|
||||
['getScrollPosition', 'scrollToPosition']);
|
||||
|
||||
|
||||
beforeEach(() => {
|
||||
spyOn(window, 'scrollBy');
|
||||
});
|
||||
@ -34,12 +42,24 @@ describe('ScrollService', () => {
|
||||
beforeEach(() => {
|
||||
injector = ReflectiveInjector.resolveAndCreate([
|
||||
ScrollService,
|
||||
{ provide: Location, useClass: SpyLocation },
|
||||
{ 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);
|
||||
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', () => {
|
||||
@ -107,7 +127,7 @@ describe('ScrollService', () => {
|
||||
|
||||
describe('#scroll', () => {
|
||||
it('should scroll to the top if there is no hash', () => {
|
||||
location.hash = '';
|
||||
platformLocation.hash = '';
|
||||
|
||||
const topOfPage = new MockElement();
|
||||
document.getElementById.and
|
||||
@ -118,7 +138,7 @@ describe('ScrollService', () => {
|
||||
});
|
||||
|
||||
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);
|
||||
|
||||
scrollService.scroll();
|
||||
@ -128,7 +148,7 @@ describe('ScrollService', () => {
|
||||
|
||||
it('should scroll to the element whose id matches the hash', () => {
|
||||
const element = new MockElement();
|
||||
location.hash = 'some-id';
|
||||
platformLocation.hash = 'some-id';
|
||||
document.getElementById.and.returnValue(element);
|
||||
|
||||
scrollService.scroll();
|
||||
@ -139,7 +159,7 @@ describe('ScrollService', () => {
|
||||
|
||||
it('should scroll to the element whose id matches the hash with encoded characters', () => {
|
||||
const element = new MockElement();
|
||||
location.hash = '%F0%9F%91%8D'; // 👍
|
||||
platformLocation.hash = '%F0%9F%91%8D'; // 👍
|
||||
document.getElementById.and.returnValue(element);
|
||||
|
||||
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 { PlatformLocation } from '@angular/common';
|
||||
import { Location, PlatformLocation, ViewportScroller } from '@angular/common';
|
||||
import { DOCUMENT } from '@angular/common';
|
||||
import { fromEvent } from 'rxjs';
|
||||
|
||||
@ -13,6 +13,13 @@ export class ScrollService {
|
||||
private _topOffset: number | null;
|
||||
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
|
||||
// at the top (e.g. toolbar) + some margin
|
||||
get topOffset() {
|
||||
@ -32,9 +39,37 @@ export class ScrollService {
|
||||
|
||||
constructor(
|
||||
@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.
|
||||
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);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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.
|
||||
* Don't scroll if no element.
|
||||
@ -79,10 +152,42 @@ export class ScrollService {
|
||||
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 `#`.
|
||||
*/
|
||||
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
|
||||
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
|
||||
// is always authored by the documentation team and is considered to be safe
|
||||
|
@ -47,6 +47,7 @@ aio-shell.page-resources mat-toolbar.mat-toolbar {
|
||||
|
||||
// DOCS PAGES OVERRIDE: HAMBURGER
|
||||
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-guide mat-toolbar.mat-toolbar,
|
||||
aio-shell.folder-tutorial mat-toolbar.mat-toolbar {
|
||||
|
@ -74,6 +74,12 @@
|
||||
vertical-align: top;
|
||||
}
|
||||
}
|
||||
|
||||
&.property-table {
|
||||
td {
|
||||
vertical-align: top;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.class-overview {
|
||||
@ -87,19 +93,6 @@
|
||||
.short-description {
|
||||
margin: 6px 0 0 10px;
|
||||
}
|
||||
|
||||
.properties-table {
|
||||
font-size: 14px;
|
||||
|
||||
thead th {
|
||||
&:nth-child(1) {
|
||||
width: 20%;
|
||||
}
|
||||
&:nth-child(2) {
|
||||
width: 20%;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.breadcrumb-container {
|
||||
|
@ -7,10 +7,14 @@ describe(browser.baseUrl, () => {
|
||||
const stripQuery = (url: string) => url.replace(/\?.*$/, '');
|
||||
const stripTrailingSlash = (url: string) => url.replace(/\/$/, '');
|
||||
|
||||
beforeAll(done => page.init().then(done));
|
||||
beforeAll(() => page.init());
|
||||
|
||||
beforeEach(() => browser.waitForAngularEnabled(false));
|
||||
afterEach(() => browser.waitForAngularEnabled(true));
|
||||
|
||||
afterEach(async () => {
|
||||
await page.unregisterSw();
|
||||
await browser.waitForAngularEnabled(true);
|
||||
});
|
||||
|
||||
describe('(with sitemap URLs)', () => {
|
||||
page.sitemapUrls.forEach((path, i) => {
|
||||
@ -34,7 +38,7 @@ describe(browser.baseUrl, () => {
|
||||
const actualUrl = await getCurrentUrl();
|
||||
|
||||
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.)
|
||||
*/
|
||||
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.executeScript('document.body.classList.add(\'no-animations\')');
|
||||
await browser.executeAsyncScript(unregisterServiceWorker);
|
||||
await browser.waitForAngular();
|
||||
await this.unregisterSw();
|
||||
};
|
||||
|
||||
/**
|
||||
@ -60,4 +55,16 @@ export class SitePage {
|
||||
// Make an initial request to unregister the ServiceWorker.
|
||||
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, () => {
|
||||
const page = new SitePage();
|
||||
|
||||
beforeAll(done => page.init().then(done));
|
||||
beforeAll(() => page.init());
|
||||
|
||||
beforeEach(() => browser.waitForAngularEnabled(false));
|
||||
afterEach(() => browser.waitForAngularEnabled(true));
|
||||
|
||||
afterEach(async () => {
|
||||
await page.unregisterSw();
|
||||
await browser.waitForAngularEnabled(true);
|
||||
});
|
||||
|
||||
describe('(smoke tests)', () => {
|
||||
it('should show the home page', () => {
|
||||
|
@ -12,7 +12,7 @@
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10.9.0 <11.0.0",
|
||||
"yarn": ">=1.10.1 <1.13.0"
|
||||
"yarn": ">=1.10.1 <1.14.0"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
|
@ -1,10 +1,14 @@
|
||||
module.exports = function processCliCommands() {
|
||||
module.exports = function processCliCommands(createDocMessage) {
|
||||
return {
|
||||
$runAfter: ['extra-docs-added'],
|
||||
$runBefore: ['rendering-docs'],
|
||||
$process(docs) {
|
||||
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 => {
|
||||
if (doc.docType === 'cli-command') {
|
||||
@ -14,9 +18,7 @@ module.exports = function processCliCommands() {
|
||||
processOptions(doc, doc.options);
|
||||
|
||||
// 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 = [];
|
||||
|
||||
options.forEach(option => {
|
||||
|
||||
if (option.type === 'boolean' && option.default === undefined) {
|
||||
option.default = false;
|
||||
}
|
||||
|
||||
// Ignore any hidden options
|
||||
if (option.hidden) { return; }
|
||||
|
||||
|
@ -1,41 +1,51 @@
|
||||
const testPackage = require('../../helpers/test-package');
|
||||
const processorFactory = require('./processCliCommands');
|
||||
const Dgeni = require('dgeni');
|
||||
|
||||
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', () => {
|
||||
const dgeni = new Dgeni([testPackage('cli-docs-package')]);
|
||||
const injector = dgeni.configureInjector();
|
||||
const processor = injector.get('processCliCommands');
|
||||
expect(processor.$process).toBeDefined();
|
||||
});
|
||||
|
||||
it('should run after the correct processor', () => {
|
||||
const processor = processorFactory();
|
||||
expect(processor.$runAfter).toEqual(['extra-docs-added']);
|
||||
});
|
||||
|
||||
it('should run before the correct processor', () => {
|
||||
const processor = processorFactory();
|
||||
expect(processor.$runBefore).toEqual(['rendering-docs']);
|
||||
});
|
||||
|
||||
it('should collect the names (name + aliases)', () => {
|
||||
const processor = processorFactory();
|
||||
const doc = {
|
||||
docType: 'cli-command',
|
||||
name: 'name',
|
||||
commandAliases: ['alias1', 'alias2'],
|
||||
options: [],
|
||||
};
|
||||
processor.$process([doc]);
|
||||
processor.$process([doc, navigationStub]);
|
||||
expect(doc.names).toEqual(['name', 'alias1', 'alias2']);
|
||||
});
|
||||
|
||||
describe('options', () => {
|
||||
it('should remove the hidden options', () => {
|
||||
const processor = processorFactory();
|
||||
const doc = {
|
||||
docType: 'cli-command',
|
||||
name: 'name',
|
||||
@ -47,7 +57,7 @@ describe('processCliCommands processor', () => {
|
||||
{ name: 'option4', hidden: true },
|
||||
],
|
||||
};
|
||||
processor.$process([doc]);
|
||||
processor.$process([doc, navigationStub]);
|
||||
expect(doc.namedOptions).toEqual([
|
||||
jasmine.objectContaining({ name: 'option1' }),
|
||||
jasmine.objectContaining({ name: 'option3' }),
|
||||
@ -55,7 +65,6 @@ describe('processCliCommands processor', () => {
|
||||
});
|
||||
|
||||
it('should collect the non-hidden positional and named options', () => {
|
||||
const processor = processorFactory();
|
||||
const doc = {
|
||||
docType: 'cli-command',
|
||||
name: 'name',
|
||||
@ -67,7 +76,7 @@ describe('processCliCommands processor', () => {
|
||||
{ name: 'positional2', hidden: true, positional: 1},
|
||||
],
|
||||
};
|
||||
processor.$process([doc]);
|
||||
processor.$process([doc, navigationStub]);
|
||||
expect(doc.positionalOptions).toEqual([
|
||||
jasmine.objectContaining({ name: 'positional1', positional: 0}),
|
||||
]);
|
||||
@ -77,7 +86,6 @@ describe('processCliCommands processor', () => {
|
||||
});
|
||||
|
||||
it('should sort the named options into order by name', () => {
|
||||
const processor = processorFactory();
|
||||
const doc = {
|
||||
docType: 'cli-command',
|
||||
name: 'name',
|
||||
@ -88,7 +96,7 @@ describe('processCliCommands processor', () => {
|
||||
{ name: 'b' },
|
||||
],
|
||||
};
|
||||
processor.$process([doc]);
|
||||
processor.$process([doc, navigationStub]);
|
||||
expect(doc.namedOptions).toEqual([
|
||||
jasmine.objectContaining({ name: 'a' }),
|
||||
jasmine.objectContaining({ name: 'b' }),
|
||||
@ -99,7 +107,6 @@ describe('processCliCommands processor', () => {
|
||||
|
||||
describe('subcommands', () => {
|
||||
it('should convert subcommands hash into a collection', () => {
|
||||
const processor = processorFactory();
|
||||
const doc = {
|
||||
docType: 'cli-command',
|
||||
name: 'name',
|
||||
@ -124,7 +131,7 @@ describe('processCliCommands processor', () => {
|
||||
},
|
||||
}],
|
||||
};
|
||||
processor.$process([doc]);
|
||||
processor.$process([doc, navigationStub]);
|
||||
expect(doc.options[0].subcommands).toEqual([
|
||||
jasmine.objectContaining({ name: 'subcommand1' }),
|
||||
jasmine.objectContaining({ name: 'subcommand2' }),
|
||||
@ -132,7 +139,6 @@ describe('processCliCommands processor', () => {
|
||||
});
|
||||
|
||||
it('should remove the hidden subcommand options', () => {
|
||||
const processor = processorFactory();
|
||||
const doc = {
|
||||
docType: 'cli-command',
|
||||
name: 'name',
|
||||
@ -157,7 +163,7 @@ describe('processCliCommands processor', () => {
|
||||
},
|
||||
}],
|
||||
};
|
||||
processor.$process([doc]);
|
||||
processor.$process([doc, navigationStub]);
|
||||
expect(doc.options[0].subcommands[0].namedOptions).toEqual([
|
||||
jasmine.objectContaining({ name: 'subcommand1-option1' }),
|
||||
]);
|
||||
@ -167,7 +173,6 @@ describe('processCliCommands processor', () => {
|
||||
});
|
||||
|
||||
it('should collect the non-hidden positional arguments and named options', () => {
|
||||
const processor = processorFactory();
|
||||
const doc = {
|
||||
docType: 'cli-command',
|
||||
name: 'name',
|
||||
@ -192,7 +197,7 @@ describe('processCliCommands processor', () => {
|
||||
},
|
||||
}],
|
||||
};
|
||||
processor.$process([doc]);
|
||||
processor.$process([doc, navigationStub]);
|
||||
expect(doc.options[0].subcommands[0].positionalOptions).toEqual([
|
||||
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', () => {
|
||||
const processor = processorFactory();
|
||||
const doc = {
|
||||
docType: 'cli-command',
|
||||
name: 'name',
|
||||
@ -224,7 +228,7 @@ describe('processCliCommands processor', () => {
|
||||
}
|
||||
}],
|
||||
};
|
||||
processor.$process([doc]);
|
||||
processor.$process([doc, navigationStub]);
|
||||
expect(doc.options[0].subcommands[0].namedOptions).toEqual([
|
||||
jasmine.objectContaining({ name: 'a' }),
|
||||
jasmine.objectContaining({ name: 'b' }),
|
||||
@ -233,8 +237,7 @@ describe('processCliCommands processor', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('should add the command to the CLI node in the navigation doc', () => {
|
||||
const processor = processorFactory();
|
||||
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 command = {
|
||||
docType: 'cli-command',
|
||||
name: 'command1',
|
||||
@ -247,18 +250,55 @@ describe('processCliCommands processor', () => {
|
||||
data: {
|
||||
SideNav: [
|
||||
{ url: 'some/page', title: 'Some Page' },
|
||||
{ url: 'cli', title: 'CLI Commands', children: [
|
||||
{ url: 'cli', title: 'Using the CLI' },
|
||||
]},
|
||||
{ url: 'other/page', title: 'Other Page' },
|
||||
{
|
||||
title: 'CLI Commands',
|
||||
tooltip: 'Angular CLI command reference',
|
||||
children: [
|
||||
{
|
||||
'title': 'Overview',
|
||||
'url': 'cli'
|
||||
}
|
||||
]
|
||||
},
|
||||
{ url: 'other/page', title: 'Other Page' }
|
||||
]
|
||||
}
|
||||
};
|
||||
processor.$process([command, navigation]);
|
||||
expect(navigation.data.SideNav[1].title).toEqual('CLI Commands');
|
||||
expect(navigation.data.SideNav[1].children).toEqual([
|
||||
{ url: 'cli', title: 'Using the CLI' },
|
||||
{ url: 'cli', title: 'Overview' },
|
||||
{ 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,
|
||||
"semicolon": [
|
||||
true,
|
||||
"always"
|
||||
],
|
||||
"triple-equals": [
|
||||
|
897
aio/yarn.lock
897
aio/yarn.lock
File diff suppressed because it is too large
Load Diff
@ -39,7 +39,6 @@ gulp.task('source-map-test', loadTask('source-map-test'));
|
||||
gulp.task('tools:build', loadTask('tools-build'));
|
||||
gulp.task('check-cycle', loadTask('check-cycle'));
|
||||
gulp.task('serve', loadTask('serve', 'default'));
|
||||
gulp.task('serve-examples', loadTask('serve', 'examples'));
|
||||
gulp.task('changelog', loadTask('changelog'));
|
||||
gulp.task('check-env', () => {/* this is a noop because the env test ran already above */});
|
||||
gulp.task('cldr:extract', loadTask('cldr', 'extract'));
|
||||
|
@ -3,8 +3,8 @@
|
||||
"master": {
|
||||
"uncompressed": {
|
||||
"runtime": 1497,
|
||||
"main": 187437,
|
||||
"polyfills": 59608
|
||||
"main": 189865,
|
||||
"polyfills": 38449
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -12,7 +12,7 @@
|
||||
"master": {
|
||||
"uncompressed": {
|
||||
"runtime": 1440,
|
||||
"main": 584077,
|
||||
"main": 584188,
|
||||
"polyfills": 38390
|
||||
}
|
||||
}
|
||||
|
@ -23,7 +23,7 @@
|
||||
"src/assets"
|
||||
],
|
||||
"styles": [
|
||||
"src/styles.css"
|
||||
"src/styles.scss"
|
||||
],
|
||||
"scripts": []
|
||||
},
|
||||
@ -82,7 +82,7 @@
|
||||
"tsConfig": "src/tsconfig.spec.json",
|
||||
"karmaConfig": "src/karma.conf.js",
|
||||
"styles": [
|
||||
"src/styles.css"
|
||||
"src/styles.scss"
|
||||
],
|
||||
"scripts": [],
|
||||
"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>;
|
||||
}
|
||||
}
|
@ -7,18 +7,12 @@ function testBazel() {
|
||||
bazel version
|
||||
rm -rf demo
|
||||
# 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"
|
||||
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
|
||||
# Run build
|
||||
# TODO(kyliau): Use `bazel build` for now. Running `ng build` requires
|
||||
# node_modules to be available in project directory.
|
||||
bazel build //src:bundle
|
||||
# Run test
|
||||
ng generate component widget --style=css
|
||||
ng build
|
||||
ng test
|
||||
ng e2e
|
||||
}
|
||||
@ -26,13 +20,7 @@ function testBazel() {
|
||||
function testNonBazel() {
|
||||
# Replace angular.json that uses Bazel builder with the default generated by CLI
|
||||
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
|
||||
# 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 test --progress=false --watch=false
|
||||
ng e2e --configuration=ci
|
||||
|
@ -2,12 +2,12 @@
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
"@angular-devkit/architect@0.12.1":
|
||||
version "0.12.1"
|
||||
resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.12.1.tgz#397768d1ccd0cef76db96d6b39db8aebad68c031"
|
||||
integrity sha512-1ozBP0ZAApkSfuPpZ7b9vShU8smNxb98jW+65S12cPOxv1bVVxCj5sTmC3sSfXapgq/pMzblbaVSKOG7Ajz0vQ==
|
||||
"@angular-devkit/architect@0.13.0-rc.0":
|
||||
version "0.13.0-rc.0"
|
||||
resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.13.0-rc.0.tgz#d9bc43a3811f293269cf488539b72ce27afc6cdb"
|
||||
integrity sha512-abqtT5qyfTL29hf9be1MnaSVjIMJXJq+Oc+FZJ4RyQ+Sjs2zo+DjAJo62P1vS55JkLE1TFpEcjHkg118Cz7yOw==
|
||||
dependencies:
|
||||
"@angular-devkit/core" "7.2.1"
|
||||
"@angular-devkit/core" "7.3.0-rc.0"
|
||||
rxjs "6.3.3"
|
||||
|
||||
"@angular-devkit/architect@^0.10.6":
|
||||
@ -40,12 +40,12 @@
|
||||
rxjs "6.3.3"
|
||||
source-map "0.7.3"
|
||||
|
||||
"@angular-devkit/core@7.2.1":
|
||||
version "7.2.1"
|
||||
resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-7.2.1.tgz#8c6df59eab77bcc98a348c8cdf9eb217c8b751a5"
|
||||
integrity sha512-zOozPswSM1cTkltw5LeSPoZ/fJ2d3vN304IVgKgrM5/Fs54bd7nTaBcAK+HvjKS+5KmykYrXW47Q4CdFJikluQ==
|
||||
"@angular-devkit/core@7.3.0-rc.0":
|
||||
version "7.3.0-rc.0"
|
||||
resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-7.3.0-rc.0.tgz#e555a08d85259855ff1946f4268936a1aadd38f1"
|
||||
integrity sha512-0vHuw1gIMh79tI+gRxCMn89U1DnjmBnqybVktaf9YXi9xshxd+nnFb31v7n1tJQVQiQNzGxk3hviFnkzxLZipw==
|
||||
dependencies:
|
||||
ajv "6.6.2"
|
||||
ajv "6.7.0"
|
||||
chokidar "2.0.4"
|
||||
fast-json-stable-stringify "2.0.0"
|
||||
rxjs "6.3.3"
|
||||
@ -59,16 +59,16 @@
|
||||
"@angular-devkit/core" "7.1.3"
|
||||
rxjs "6.3.3"
|
||||
|
||||
"@angular-devkit/schematics@7.2.1":
|
||||
version "7.2.1"
|
||||
resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-7.2.1.tgz#9c1c784f4a81a3a840fa4a1435948c6203be6062"
|
||||
integrity sha512-jEhwkeDn8exgJBfUwMc6rdtDkxHJkUmKPTn4M436bkMMMa9KFPFbPpzp9weKpB3SbRjM3Mu90JprO4C7qDtCcg==
|
||||
"@angular-devkit/schematics@7.3.0-rc.0":
|
||||
version "7.3.0-rc.0"
|
||||
resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-7.3.0-rc.0.tgz#9f1e1f6942da36b12c81241398ed6ca8b2e65875"
|
||||
integrity sha512-noqcQIOvah2G126DTFKY5Kiga8UwI9cKzyhQdNlf+8hAZpnWwTURItQ5xuMJg/XfRQLUSg9gWS2h1cI9AD7mxQ==
|
||||
dependencies:
|
||||
"@angular-devkit/core" "7.2.1"
|
||||
"@angular-devkit/core" "7.3.0-rc.0"
|
||||
rxjs "6.3.3"
|
||||
|
||||
"@angular/bazel@file:../../dist/packages-dist/bazel":
|
||||
version "7.2.0"
|
||||
version "8.0.0-beta.0"
|
||||
dependencies:
|
||||
"@angular-devkit/architect" "^0.10.6"
|
||||
"@angular-devkit/core" "^7.0.4"
|
||||
@ -81,16 +81,20 @@
|
||||
tsickle "0.34.0"
|
||||
|
||||
"@angular/cli@file:../../node_modules/@angular/cli":
|
||||
version "7.2.1"
|
||||
version "7.3.0-rc.0"
|
||||
dependencies:
|
||||
"@angular-devkit/architect" "0.12.1"
|
||||
"@angular-devkit/core" "7.2.1"
|
||||
"@angular-devkit/schematics" "7.2.1"
|
||||
"@schematics/angular" "7.2.1"
|
||||
"@schematics/update" "0.12.1"
|
||||
"@angular-devkit/architect" "0.13.0-rc.0"
|
||||
"@angular-devkit/core" "7.3.0-rc.0"
|
||||
"@angular-devkit/schematics" "7.3.0-rc.0"
|
||||
"@schematics/angular" "7.3.0-rc.0"
|
||||
"@schematics/update" "0.13.0-rc.0"
|
||||
"@yarnpkg/lockfile" "1.1.0"
|
||||
ini "1.3.5"
|
||||
inquirer "6.2.1"
|
||||
opn "5.3.0"
|
||||
semver "5.5.1"
|
||||
npm-package-arg "6.1.0"
|
||||
opn "5.4.0"
|
||||
pacote "9.4.0"
|
||||
semver "5.6.0"
|
||||
symbol-observable "1.2.0"
|
||||
|
||||
"@bazel/bazel-darwin_x64@0.21.0":
|
||||
@ -125,13 +129,13 @@
|
||||
source-map-support "0.5.9"
|
||||
tsutils "2.27.2"
|
||||
|
||||
"@schematics/angular@7.2.1":
|
||||
version "7.2.1"
|
||||
resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-7.2.1.tgz#9eeab1354ec8d970121cc067e9636098ab84e152"
|
||||
integrity sha512-UdqU8udVr693BZ6uaZ7+el/VFlTjrmp56OS+6YaziyAko84e1Q1Fcx+fwdHugy4V3YmQhTVsyOPSEsphnwSwOA==
|
||||
"@schematics/angular@7.3.0-rc.0":
|
||||
version "7.3.0-rc.0"
|
||||
resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-7.3.0-rc.0.tgz#7519aa692dcaed63b9caa7d824846511905b1bfc"
|
||||
integrity sha512-yjCHgLSAqQKVZrZgf8F37cPQthhucIA10ofpIHPEZrvHwKBQhM9K3yfB7uYgkj4gzPTdREedb7Rm3/HY45L/1A==
|
||||
dependencies:
|
||||
"@angular-devkit/core" "7.2.1"
|
||||
"@angular-devkit/schematics" "7.2.1"
|
||||
"@angular-devkit/core" "7.3.0-rc.0"
|
||||
"@angular-devkit/schematics" "7.3.0-rc.0"
|
||||
typescript "3.2.2"
|
||||
|
||||
"@schematics/angular@^7.0.4":
|
||||
@ -143,18 +147,18 @@
|
||||
"@angular-devkit/schematics" "7.1.3"
|
||||
typescript "3.1.6"
|
||||
|
||||
"@schematics/update@0.12.1":
|
||||
version "0.12.1"
|
||||
resolved "https://registry.yarnpkg.com/@schematics/update/-/update-0.12.1.tgz#44d853321ae8a56c43a579c0639d26d625001037"
|
||||
integrity sha512-P92tDxy0AA1NPhaThiJ7fIFxIC4jzlGK7sJlpbnRREBImsI/O9gmGaV8Kjy+75vaEjqpWaU2oj1hnWqkmxSK1A==
|
||||
"@schematics/update@0.13.0-rc.0":
|
||||
version "0.13.0-rc.0"
|
||||
resolved "https://registry.yarnpkg.com/@schematics/update/-/update-0.13.0-rc.0.tgz#3d5bb6ce7d8d1ea44a0e0a644022bc655b80ae80"
|
||||
integrity sha512-XoU3TnaDcIFX7TU37bfjfAW0tI1tRD5DYQFHDBNOgS+78InGvR9+1CVzRJ4uWOjk0i+ZzDaGbYyR0iA47jSOTA==
|
||||
dependencies:
|
||||
"@angular-devkit/core" "7.2.1"
|
||||
"@angular-devkit/schematics" "7.2.1"
|
||||
"@angular-devkit/core" "7.3.0-rc.0"
|
||||
"@angular-devkit/schematics" "7.3.0-rc.0"
|
||||
"@yarnpkg/lockfile" "1.1.0"
|
||||
ini "1.3.5"
|
||||
pacote "9.1.1"
|
||||
pacote "9.4.0"
|
||||
rxjs "6.3.3"
|
||||
semver "5.5.1"
|
||||
semver "5.6.0"
|
||||
semver-intersect "1.4.0"
|
||||
|
||||
"@types/node@6.0.84":
|
||||
@ -204,10 +208,10 @@ ajv@6.5.3:
|
||||
json-schema-traverse "^0.4.1"
|
||||
uri-js "^4.2.2"
|
||||
|
||||
ajv@6.6.2:
|
||||
version "6.6.2"
|
||||
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.6.2.tgz#caceccf474bf3fc3ce3b147443711a24063cc30d"
|
||||
integrity sha512-FBHEW6Jf5TB9MGBgUUA9XHkTbjXYfAUjY43ACMfmdMRHniyoMHjHjzD50OK8LGDWQwp4rWEsIq5kEqq7rvIM1g==
|
||||
ajv@6.7.0:
|
||||
version "6.7.0"
|
||||
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.7.0.tgz#e3ce7bb372d6577bb1839f1dfdfcbf5ad2948d96"
|
||||
integrity sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==
|
||||
dependencies:
|
||||
fast-deep-equal "^2.0.1"
|
||||
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"
|
||||
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"
|
||||
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7"
|
||||
integrity sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==
|
||||
@ -379,7 +383,7 @@ bytebuffer@~5:
|
||||
dependencies:
|
||||
long "~3"
|
||||
|
||||
cacache@^11.0.1, cacache@^11.2.0:
|
||||
cacache@^11.0.1:
|
||||
version "11.3.1"
|
||||
resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.1.tgz#d09d25f6c4aca7a6d305d141ae332613aa1d515f"
|
||||
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"
|
||||
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:
|
||||
version "1.0.1"
|
||||
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"
|
||||
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"
|
||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"
|
||||
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"
|
||||
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:
|
||||
version "4.0.1"
|
||||
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"
|
||||
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"
|
||||
resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.0.tgz#15ae1e2758a5027efb4c250554b85a737db7fcc1"
|
||||
integrity sha512-zYbhP2k9DbJhA0Z3HKUePUgdB1x7MfIfKssC+WLPFMKTBZKpZh5m13PgexJjCq6KW7j17r0jHWcCpxEqnnncSA==
|
||||
@ -1507,7 +1538,7 @@ npm-packlist@^1.1.12, npm-packlist@^1.1.6:
|
||||
ignore-walk "^3.0.1"
|
||||
npm-bundled "^1.0.1"
|
||||
|
||||
npm-pick-manifest@^2.1.0:
|
||||
npm-pick-manifest@^2.2.3:
|
||||
version "2.2.3"
|
||||
resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-2.2.3.tgz#32111d2a9562638bb2c8f2bf27f7f3092c8fae40"
|
||||
integrity sha512-+IluBC5K201+gRU85vFlUwX3PFShZAbAgDNp2ewJdWMVSppdo/Zih0ul2Ecky/X7b51J7LrrUAP+XOmOCvYZqA==
|
||||
@ -1585,10 +1616,10 @@ onetime@^2.0.0:
|
||||
dependencies:
|
||||
mimic-fn "^1.0.0"
|
||||
|
||||
opn@5.3.0:
|
||||
version "5.3.0"
|
||||
resolved "https://registry.yarnpkg.com/opn/-/opn-5.3.0.tgz#64871565c863875f052cfdf53d3e3cb5adb53b1c"
|
||||
integrity sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==
|
||||
opn@5.4.0:
|
||||
version "5.4.0"
|
||||
resolved "https://registry.yarnpkg.com/opn/-/opn-5.4.0.tgz#cb545e7aab78562beb11aa3bfabc7042e1761035"
|
||||
integrity sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==
|
||||
dependencies:
|
||||
is-wsl "^1.1.0"
|
||||
|
||||
@ -1622,17 +1653,17 @@ osenv@^0.1.4, osenv@^0.1.5:
|
||||
os-homedir "^1.0.0"
|
||||
os-tmpdir "^1.0.0"
|
||||
|
||||
pacote@9.1.1:
|
||||
version "9.1.1"
|
||||
resolved "https://registry.yarnpkg.com/pacote/-/pacote-9.1.1.tgz#25091f75a25021de8be8d34cc6408728fca3579b"
|
||||
integrity sha512-f28Rq5ozzKAA9YwIKw61/ipwAatUZseYmVssDbHHaexF0wRIVotapVEZPAjOT7Eu3LYVqEp0NVpNizoAnYBUaA==
|
||||
pacote@9.4.0:
|
||||
version "9.4.0"
|
||||
resolved "https://registry.yarnpkg.com/pacote/-/pacote-9.4.0.tgz#af979abdeb175cd347c3e33be3241af1ed254807"
|
||||
integrity sha512-WQ1KL/phGMkedYEQx9ODsjj7xvwLSpdFJJdEXrLyw5SILMxcTNt5DTxT2Z93fXuLFYJBlZJdnwdalrQdB/rX5w==
|
||||
dependencies:
|
||||
bluebird "^3.5.2"
|
||||
cacache "^11.2.0"
|
||||
bluebird "^3.5.3"
|
||||
cacache "^11.3.2"
|
||||
figgy-pudding "^3.5.1"
|
||||
get-stream "^4.1.0"
|
||||
glob "^7.1.3"
|
||||
lru-cache "^4.1.3"
|
||||
lru-cache "^5.1.1"
|
||||
make-fetch-happen "^4.0.1"
|
||||
minimatch "^3.0.4"
|
||||
minipass "^2.3.5"
|
||||
@ -1641,7 +1672,7 @@ pacote@9.1.1:
|
||||
normalize-package-data "^2.4.0"
|
||||
npm-package-arg "^6.1.0"
|
||||
npm-packlist "^1.1.12"
|
||||
npm-pick-manifest "^2.1.0"
|
||||
npm-pick-manifest "^2.2.3"
|
||||
npm-registry-fetch "^3.8.0"
|
||||
osenv "^0.1.5"
|
||||
promise-inflight "^1.0.1"
|
||||
@ -1651,7 +1682,7 @@ pacote@9.1.1:
|
||||
safe-buffer "^5.1.2"
|
||||
semver "^5.6.0"
|
||||
ssri "^6.0.1"
|
||||
tar "^4.4.6"
|
||||
tar "^4.4.8"
|
||||
unique-filename "^1.1.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"
|
||||
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:
|
||||
version "2.0.0"
|
||||
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"
|
||||
integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==
|
||||
|
||||
tar@^4, tar@^4.4.6:
|
||||
tar@^4, tar@^4.4.8:
|
||||
version "4.4.8"
|
||||
resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d"
|
||||
integrity sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==
|
||||
|
@ -13,3 +13,6 @@ build --local_resources=14336,8.0,1.0
|
||||
|
||||
# Use the Angular 6 compiler
|
||||
build --define=compile=legacy
|
||||
|
||||
# Don't create symlinks
|
||||
build --symlink_prefix=/
|
||||
|
@ -1,6 +1,6 @@
|
||||
import { AppPage } from './app.po';
|
||||
|
||||
describe('cli-hello-world App', () => {
|
||||
describe('cli-hello-world-ivy App', () => {
|
||||
let page: AppPage;
|
||||
|
||||
beforeEach(() => {
|
||||
|
@ -9,6 +9,7 @@
|
||||
"ng": "ng",
|
||||
"postinstall": "webdriver-manager update --gecko=false --standalone=false $CHROMEDRIVER_VERSION_ARG && yarn ivy-ngcc",
|
||||
"start": "ng serve",
|
||||
"pretest": "ng version",
|
||||
"//test1": "TODO FW-813: Re-enable `ci-production`. Currently, it fails after a timeout as Protractor reports Angular cannot be found on the page",
|
||||
"//test2": "ng test --progress=false --watch=false && yarn e2e --configuration=ci && yarn e2e --configuration=ci-production",
|
||||
"test": "ng test --progress=false --watch=false && yarn e2e --configuration=ci"
|
||||
@ -26,16 +27,17 @@
|
||||
"@angular/router": "file:../../dist/packages-dist/router",
|
||||
"core-js": "file:../../node_modules/core-js",
|
||||
"rxjs": "file:../../node_modules/rxjs",
|
||||
"tslib": "^1.9.3",
|
||||
"zone.js": "file:../../node_modules/zone.js"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@angular-devkit/build-angular": "~0.12.0-rc.0",
|
||||
"@angular-devkit/build-angular": "~0.12.1",
|
||||
"@angular/cli": "file:../../node_modules/@angular/cli",
|
||||
"@angular/compiler-cli": "file:../../dist/packages-dist/compiler-cli",
|
||||
"@angular/language-service": "file:../../dist/packages-dist/language-service",
|
||||
"@types/node": "~8.9.4",
|
||||
"@types/jasmine": "~2.8.8",
|
||||
"@types/jasminewd2": "~2.0.3",
|
||||
"@types/node": "~8.9.4",
|
||||
"codelyzer": "~4.5.0",
|
||||
"jasmine-core": "~2.99.1",
|
||||
"jasmine-spec-reporter": "~4.2.1",
|
||||
|
@ -2,14 +2,6 @@
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
"@angular-devkit/architect@0.12.0-rc.0":
|
||||
version "0.12.0-rc.0"
|
||||
resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.12.0-rc.0.tgz#8e5d624ab42962abf9c75139a0171fe739233e22"
|
||||
integrity sha512-A4w9YumA+GuUcJfiWc8YEwY3wCrzbxpt+M4n2g/9j7Lf0a7WgsdUG+Btb4eCEuUhjsWDlGPTZIFl+KIPTv+WHQ==
|
||||
dependencies:
|
||||
"@angular-devkit/core" "7.2.0-rc.0"
|
||||
rxjs "6.3.3"
|
||||
|
||||
"@angular-devkit/architect@0.12.1":
|
||||
version "0.12.1"
|
||||
resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.12.1.tgz#397768d1ccd0cef76db96d6b39db8aebad68c031"
|
||||
@ -18,16 +10,24 @@
|
||||
"@angular-devkit/core" "7.2.1"
|
||||
rxjs "6.3.3"
|
||||
|
||||
"@angular-devkit/build-angular@~0.12.0-rc.0":
|
||||
version "0.12.0-rc.0"
|
||||
resolved "https://registry.yarnpkg.com/@angular-devkit/build-angular/-/build-angular-0.12.0-rc.0.tgz#b82d96bf359d5e1c32736499944a161d3e80e882"
|
||||
integrity sha512-7QvqVgihLLOEBuUF2sT5R8c4al7J30pViXhWEIwJjgl2VzEYYumYHJEFLqDAwimyLdCY4XeMsBlYnpWLpbmM3Q==
|
||||
"@angular-devkit/architect@0.12.2":
|
||||
version "0.12.2"
|
||||
resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.12.2.tgz#1bfa43881c8927b8e12ffd4a2a3a645d6356e748"
|
||||
integrity sha512-32Eim3PM/CJKGcCF1FJQ91ohuF2vBGMd4t1DILaoOMXHWmPLI9N4ILzWHfqFLRvb8QFgLn4VNG7CI9K7GcSBlQ==
|
||||
dependencies:
|
||||
"@angular-devkit/architect" "0.12.0-rc.0"
|
||||
"@angular-devkit/build-optimizer" "0.12.0-rc.0"
|
||||
"@angular-devkit/build-webpack" "0.12.0-rc.0"
|
||||
"@angular-devkit/core" "7.2.0-rc.0"
|
||||
"@ngtools/webpack" "7.2.0-rc.0"
|
||||
"@angular-devkit/core" "7.2.2"
|
||||
rxjs "6.3.3"
|
||||
|
||||
"@angular-devkit/build-angular@~0.12.1":
|
||||
version "0.12.2"
|
||||
resolved "https://registry.yarnpkg.com/@angular-devkit/build-angular/-/build-angular-0.12.2.tgz#4776f535633227848c4bda34b1e8f89574c33746"
|
||||
integrity sha512-4PDykCNDjjFo6Ximhq2efiufoUP6pj8KvhB8UI03mLbn/Os1W0y1lmiPJn+NjeBLwFWH9DqW9Vxk/pYek7MtEA==
|
||||
dependencies:
|
||||
"@angular-devkit/architect" "0.12.2"
|
||||
"@angular-devkit/build-optimizer" "0.12.2"
|
||||
"@angular-devkit/build-webpack" "0.12.2"
|
||||
"@angular-devkit/core" "7.2.2"
|
||||
"@ngtools/webpack" "7.2.2"
|
||||
ajv "6.6.2"
|
||||
autoprefixer "9.4.3"
|
||||
circular-dependency-plugin "5.0.2"
|
||||
@ -47,7 +47,7 @@
|
||||
opn "5.3.0"
|
||||
parse5 "4.0.0"
|
||||
portfinder "1.0.17"
|
||||
postcss "7.0.5"
|
||||
postcss "7.0.11"
|
||||
postcss-import "12.0.0"
|
||||
postcss-loader "3.0.0"
|
||||
raw-loader "0.5.1"
|
||||
@ -56,45 +56,45 @@
|
||||
semver "5.5.1"
|
||||
source-map-loader "0.2.4"
|
||||
source-map-support "0.5.9"
|
||||
speed-measure-webpack-plugin "1.2.3"
|
||||
speed-measure-webpack-plugin "1.2.5"
|
||||
stats-webpack-plugin "0.7.0"
|
||||
style-loader "0.23.1"
|
||||
stylus "0.54.5"
|
||||
stylus-loader "3.0.2"
|
||||
terser-webpack-plugin "1.1.0"
|
||||
terser-webpack-plugin "1.2.1"
|
||||
tree-kill "1.2.0"
|
||||
webpack "4.23.1"
|
||||
webpack "4.28.4"
|
||||
webpack-dev-middleware "3.4.0"
|
||||
webpack-dev-server "3.1.10"
|
||||
webpack-dev-server "3.1.14"
|
||||
webpack-merge "4.1.4"
|
||||
webpack-sources "1.3.0"
|
||||
webpack-subresource-integrity "1.1.0-rc.6"
|
||||
optionalDependencies:
|
||||
node-sass "4.10.0"
|
||||
|
||||
"@angular-devkit/build-optimizer@0.12.0-rc.0":
|
||||
version "0.12.0-rc.0"
|
||||
resolved "https://registry.yarnpkg.com/@angular-devkit/build-optimizer/-/build-optimizer-0.12.0-rc.0.tgz#7ed2f9d4b32a98e506d17356f5dda5e26526da44"
|
||||
integrity sha512-IlZixc5NDyYNH6S/LRw0/ogQDnnMoKJZH4GKLDT/mWvE8KBNJyoOvqPFBMC1onPqaHxGz+P9B9kssTkFvsITnA==
|
||||
"@angular-devkit/build-optimizer@0.12.2":
|
||||
version "0.12.2"
|
||||
resolved "https://registry.yarnpkg.com/@angular-devkit/build-optimizer/-/build-optimizer-0.12.2.tgz#c35f4a67a2304a4deeb8e5d2e6c1edde0429c309"
|
||||
integrity sha512-5SARSE18X5/churU0Qc0gOfDt5EwuwKsJmIA7hHBzi44iotQm5c8ea0q0acua4/U4K+jOsF6A4Faa08Vr2624A==
|
||||
dependencies:
|
||||
loader-utils "1.1.0"
|
||||
source-map "0.5.6"
|
||||
typescript "3.2.2"
|
||||
webpack-sources "1.2.0"
|
||||
|
||||
"@angular-devkit/build-webpack@0.12.0-rc.0":
|
||||
version "0.12.0-rc.0"
|
||||
resolved "https://registry.yarnpkg.com/@angular-devkit/build-webpack/-/build-webpack-0.12.0-rc.0.tgz#aff981fb3f36dd3ec2946cb07953de3149cbc4e1"
|
||||
integrity sha512-hwNBzt2ZPVx2V9gb87mU1YqZE8w4FX49xcHw0SCLLdZHWveUy8SCaVaPQ8i7+bJXKKu0PLSDwLnzGhoKc+mBWg==
|
||||
"@angular-devkit/build-webpack@0.12.2":
|
||||
version "0.12.2"
|
||||
resolved "https://registry.yarnpkg.com/@angular-devkit/build-webpack/-/build-webpack-0.12.2.tgz#00f1a3a5ab3f4bc8e35d1826f8b476dc0016a1e7"
|
||||
integrity sha512-Uv3f8XJc/5UTj2T7XjxFYDhuybFIIitLGxBpp/hEIc7eXI4MsJKB6CoDJy+2BQch7c/QjKH7W3dmTxzuSJ2j3g==
|
||||
dependencies:
|
||||
"@angular-devkit/architect" "0.12.0-rc.0"
|
||||
"@angular-devkit/core" "7.2.0-rc.0"
|
||||
"@angular-devkit/architect" "0.12.2"
|
||||
"@angular-devkit/core" "7.2.2"
|
||||
rxjs "6.3.3"
|
||||
|
||||
"@angular-devkit/core@7.2.0-rc.0":
|
||||
version "7.2.0-rc.0"
|
||||
resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-7.2.0-rc.0.tgz#6cd53211825c475cdc73b01b4b05d7a308bc4a84"
|
||||
integrity sha512-dHaQL9kUCSYgAtSJ29cP4MsGO/1JfA+zeZESxZMRuUVVhanmL5+f7kIPQbwB4wiGj3htDnxpMvqOlff3NxkQWQ==
|
||||
"@angular-devkit/core@7.2.1":
|
||||
version "7.2.1"
|
||||
resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-7.2.1.tgz#8c6df59eab77bcc98a348c8cdf9eb217c8b751a5"
|
||||
integrity sha512-zOozPswSM1cTkltw5LeSPoZ/fJ2d3vN304IVgKgrM5/Fs54bd7nTaBcAK+HvjKS+5KmykYrXW47Q4CdFJikluQ==
|
||||
dependencies:
|
||||
ajv "6.6.2"
|
||||
chokidar "2.0.4"
|
||||
@ -102,10 +102,10 @@
|
||||
rxjs "6.3.3"
|
||||
source-map "0.7.3"
|
||||
|
||||
"@angular-devkit/core@7.2.1":
|
||||
version "7.2.1"
|
||||
resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-7.2.1.tgz#8c6df59eab77bcc98a348c8cdf9eb217c8b751a5"
|
||||
integrity sha512-zOozPswSM1cTkltw5LeSPoZ/fJ2d3vN304IVgKgrM5/Fs54bd7nTaBcAK+HvjKS+5KmykYrXW47Q4CdFJikluQ==
|
||||
"@angular-devkit/core@7.2.2":
|
||||
version "7.2.2"
|
||||
resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-7.2.2.tgz#f0daf3e24f0ce8105341118f4505c1db4e284ab0"
|
||||
integrity sha512-gDF8iXiPN870WuBMl7bCQ5+Qz5SjGL/qMcvP4hli5hkn+kMAhgG38ligUK1bbhPQUJ+Z/nSOEmyv8gLHO09SZg==
|
||||
dependencies:
|
||||
ajv "6.6.2"
|
||||
chokidar "2.0.4"
|
||||
@ -122,7 +122,7 @@
|
||||
rxjs "6.3.3"
|
||||
|
||||
"@angular/animations@file:../../dist/packages-dist/animations":
|
||||
version "7.2.0"
|
||||
version "8.0.0-beta.0"
|
||||
dependencies:
|
||||
tslib "^1.9.0"
|
||||
|
||||
@ -140,12 +140,12 @@
|
||||
symbol-observable "1.2.0"
|
||||
|
||||
"@angular/common@file:../../dist/packages-dist/common":
|
||||
version "7.2.0"
|
||||
version "8.0.0-beta.0"
|
||||
dependencies:
|
||||
tslib "^1.9.0"
|
||||
|
||||
"@angular/compiler-cli@file:../../dist/packages-dist/compiler-cli":
|
||||
version "7.2.0"
|
||||
version "8.0.0-beta.0"
|
||||
dependencies:
|
||||
canonical-path "1.0.0"
|
||||
chokidar "^1.4.2"
|
||||
@ -160,40 +160,40 @@
|
||||
yargs "9.0.1"
|
||||
|
||||
"@angular/compiler@file:../../dist/packages-dist/compiler":
|
||||
version "7.2.0"
|
||||
version "8.0.0-beta.0"
|
||||
dependencies:
|
||||
tslib "^1.9.0"
|
||||
|
||||
"@angular/core@file:../../dist/packages-dist/core":
|
||||
version "7.2.0"
|
||||
version "8.0.0-beta.0"
|
||||
dependencies:
|
||||
tslib "^1.9.0"
|
||||
|
||||
"@angular/forms@file:../../dist/packages-dist/forms":
|
||||
version "7.2.0"
|
||||
version "8.0.0-beta.0"
|
||||
dependencies:
|
||||
tslib "^1.9.0"
|
||||
|
||||
"@angular/http@file:../../dist/packages-dist/http":
|
||||
version "7.2.0"
|
||||
version "8.0.0-beta.0"
|
||||
dependencies:
|
||||
tslib "^1.9.0"
|
||||
|
||||
"@angular/language-service@file:../../dist/packages-dist/language-service":
|
||||
version "7.2.0"
|
||||
version "8.0.0-beta.0"
|
||||
|
||||
"@angular/platform-browser-dynamic@file:../../dist/packages-dist/platform-browser-dynamic":
|
||||
version "7.2.0"
|
||||
version "8.0.0-beta.0"
|
||||
dependencies:
|
||||
tslib "^1.9.0"
|
||||
|
||||
"@angular/platform-browser@file:../../dist/packages-dist/platform-browser":
|
||||
version "7.2.0"
|
||||
version "8.0.0-beta.0"
|
||||
dependencies:
|
||||
tslib "^1.9.0"
|
||||
|
||||
"@angular/router@file:../../dist/packages-dist/router":
|
||||
version "7.2.0"
|
||||
version "8.0.0-beta.0"
|
||||
dependencies:
|
||||
tslib "^1.9.0"
|
||||
|
||||
@ -285,12 +285,12 @@
|
||||
lodash "^4.17.10"
|
||||
to-fast-properties "^2.0.0"
|
||||
|
||||
"@ngtools/webpack@7.2.0-rc.0":
|
||||
version "7.2.0-rc.0"
|
||||
resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-7.2.0-rc.0.tgz#750700efe60dc0b716a21f05e4f495ea46a1fc13"
|
||||
integrity sha512-Gzqf+Vo8Fi9NxUcUAYy8cn/PWG9rJ+hgheY5WrG1knEI8FWOgdzwKiqv4CjwXhlvCamuv7vxfWB5VIGOoq2npA==
|
||||
"@ngtools/webpack@7.2.2":
|
||||
version "7.2.2"
|
||||
resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-7.2.2.tgz#361d877f01feae800a58901b066b46539e1fe0e3"
|
||||
integrity sha512-xjvQ8tlyyReE69q+whAubwX4fayPoy4NHSIDa429qdcUypkvhSScAtou003oVAKG519rznykDrUHAWtvFMVf4Q==
|
||||
dependencies:
|
||||
"@angular-devkit/core" "7.2.0-rc.0"
|
||||
"@angular-devkit/core" "7.2.2"
|
||||
enhanced-resolve "4.1.0"
|
||||
rxjs "6.3.3"
|
||||
tree-kill "1.2.0"
|
||||
@ -370,147 +370,147 @@
|
||||
"@types/source-list-map" "*"
|
||||
source-map "^0.6.1"
|
||||
|
||||
"@webassemblyjs/ast@1.7.10":
|
||||
version "1.7.10"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.7.10.tgz#0cfc61d61286240b72fc522cb755613699eea40a"
|
||||
integrity sha512-wTUeaByYN2EA6qVqhbgavtGc7fLTOx0glG2IBsFlrFG51uXIGlYBTyIZMf4SPLo3v1bgV/7lBN3l7Z0R6Hswew==
|
||||
"@webassemblyjs/ast@1.7.11":
|
||||
version "1.7.11"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.7.11.tgz#b988582cafbb2b095e8b556526f30c90d057cace"
|
||||
integrity sha512-ZEzy4vjvTzScC+SH8RBssQUawpaInUdMTYwYYLh54/s8TuT0gBLuyUnppKsVyZEi876VmmStKsUs28UxPgdvrA==
|
||||
dependencies:
|
||||
"@webassemblyjs/helper-module-context" "1.7.10"
|
||||
"@webassemblyjs/helper-wasm-bytecode" "1.7.10"
|
||||
"@webassemblyjs/wast-parser" "1.7.10"
|
||||
"@webassemblyjs/helper-module-context" "1.7.11"
|
||||
"@webassemblyjs/helper-wasm-bytecode" "1.7.11"
|
||||
"@webassemblyjs/wast-parser" "1.7.11"
|
||||
|
||||
"@webassemblyjs/floating-point-hex-parser@1.7.10":
|
||||
version "1.7.10"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.10.tgz#ee63d729c6311a85863e369a473f9983f984e4d9"
|
||||
integrity sha512-gMsGbI6I3p/P1xL2UxqhNh1ga2HCsx5VBB2i5VvJFAaqAjd2PBTRULc3BpTydabUQEGlaZCzEUQhLoLG7TvEYQ==
|
||||
"@webassemblyjs/floating-point-hex-parser@1.7.11":
|
||||
version "1.7.11"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz#a69f0af6502eb9a3c045555b1a6129d3d3f2e313"
|
||||
integrity sha512-zY8dSNyYcgzNRNT666/zOoAyImshm3ycKdoLsyDw/Bwo6+/uktb7p4xyApuef1dwEBo/U/SYQzbGBvV+nru2Xg==
|
||||
|
||||
"@webassemblyjs/helper-api-error@1.7.10":
|
||||
version "1.7.10"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.10.tgz#bfcb3bbe59775357475790a2ad7b289f09b2f198"
|
||||
integrity sha512-DoYRlPWtuw3yd5BOr9XhtrmB6X1enYF0/54yNvQWGXZEPDF5PJVNI7zQ7gkcKfTESzp8bIBWailaFXEK/jjCsw==
|
||||
"@webassemblyjs/helper-api-error@1.7.11":
|
||||
version "1.7.11"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz#c7b6bb8105f84039511a2b39ce494f193818a32a"
|
||||
integrity sha512-7r1qXLmiglC+wPNkGuXCvkmalyEstKVwcueZRP2GNC2PAvxbLYwLLPr14rcdJaE4UtHxQKfFkuDFuv91ipqvXg==
|
||||
|
||||
"@webassemblyjs/helper-buffer@1.7.10":
|
||||
version "1.7.10"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.10.tgz#0a8c624c67ad0b214d2e003859921a1988cb151b"
|
||||
integrity sha512-+RMU3dt/dPh4EpVX4u5jxsOlw22tp3zjqE0m3ftU2tsYxnPULb4cyHlgaNd2KoWuwasCQqn8Mhr+TTdbtj3LlA==
|
||||
"@webassemblyjs/helper-buffer@1.7.11":
|
||||
version "1.7.11"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz#3122d48dcc6c9456ed982debe16c8f37101df39b"
|
||||
integrity sha512-MynuervdylPPh3ix+mKZloTcL06P8tenNH3sx6s0qE8SLR6DdwnfgA7Hc9NSYeob2jrW5Vql6GVlsQzKQCa13w==
|
||||
|
||||
"@webassemblyjs/helper-code-frame@1.7.10":
|
||||
version "1.7.10"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.10.tgz#0ab7e22fad0241a173178c73976fc0edf50832ce"
|
||||
integrity sha512-UiytbpKAULOEab2hUZK2ywXen4gWJVrgxtwY3Kn+eZaaSWaRM8z/7dAXRSoamhKFiBh1uaqxzE/XD9BLlug3gw==
|
||||
"@webassemblyjs/helper-code-frame@1.7.11":
|
||||
version "1.7.11"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz#cf8f106e746662a0da29bdef635fcd3d1248364b"
|
||||
integrity sha512-T8ESC9KMXFTXA5urJcyor5cn6qWeZ4/zLPyWeEXZ03hj/x9weSokGNkVCdnhSabKGYWxElSdgJ+sFa9G/RdHNw==
|
||||
dependencies:
|
||||
"@webassemblyjs/wast-printer" "1.7.10"
|
||||
"@webassemblyjs/wast-printer" "1.7.11"
|
||||
|
||||
"@webassemblyjs/helper-fsm@1.7.10":
|
||||
version "1.7.10"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.10.tgz#0915e7713fbbb735620a9d3e4fa3d7951f97ac64"
|
||||
integrity sha512-w2vDtUK9xeSRtt5+RnnlRCI7wHEvLjF0XdnxJpgx+LJOvklTZPqWkuy/NhwHSLP19sm9H8dWxKeReMR7sCkGZA==
|
||||
"@webassemblyjs/helper-fsm@1.7.11":
|
||||
version "1.7.11"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz#df38882a624080d03f7503f93e3f17ac5ac01181"
|
||||
integrity sha512-nsAQWNP1+8Z6tkzdYlXT0kxfa2Z1tRTARd8wYnc/e3Zv3VydVVnaeePgqUzFrpkGUyhUUxOl5ML7f1NuT+gC0A==
|
||||
|
||||
"@webassemblyjs/helper-module-context@1.7.10":
|
||||
version "1.7.10"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.10.tgz#9beb83f72740f5ac8075313b5cac5e796510f755"
|
||||
integrity sha512-yE5x/LzZ3XdPdREmJijxzfrf+BDRewvO0zl8kvORgSWmxpRrkqY39KZSq6TSgIWBxkK4SrzlS3BsMCv2s1FpsQ==
|
||||
"@webassemblyjs/helper-module-context@1.7.11":
|
||||
version "1.7.11"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz#d874d722e51e62ac202476935d649c802fa0e209"
|
||||
integrity sha512-JxfD5DX8Ygq4PvXDucq0M+sbUFA7BJAv/GGl9ITovqE+idGX+J3QSzJYz+LwQmL7fC3Rs+utvWoJxDb6pmC0qg==
|
||||
|
||||
"@webassemblyjs/helper-wasm-bytecode@1.7.10":
|
||||
version "1.7.10"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.10.tgz#797b1e734bbcfdea8399669cdc58308ef1c7ffc0"
|
||||
integrity sha512-u5qy4SJ/OrxKxZqJ9N3qH4ZQgHaAzsopsYwLvoWJY6Q33r8PhT3VPyNMaJ7ZFoqzBnZlCcS/0f4Sp8WBxylXfg==
|
||||
"@webassemblyjs/helper-wasm-bytecode@1.7.11":
|
||||
version "1.7.11"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz#dd9a1e817f1c2eb105b4cf1013093cb9f3c9cb06"
|
||||
integrity sha512-cMXeVS9rhoXsI9LLL4tJxBgVD/KMOKXuFqYb5oCJ/opScWpkCMEz9EJtkonaNcnLv2R3K5jIeS4TRj/drde1JQ==
|
||||
|
||||
"@webassemblyjs/helper-wasm-section@1.7.10":
|
||||
version "1.7.10"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.10.tgz#c0ea3703c615d7bc3e3507c3b7991c8767b2f20e"
|
||||
integrity sha512-Ecvww6sCkcjatcyctUrn22neSJHLN/TTzolMGG/N7S9rpbsTZ8c6Bl98GpSpV77EvzNijiNRHBG0+JO99qKz6g==
|
||||
"@webassemblyjs/helper-wasm-section@1.7.11":
|
||||
version "1.7.11"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz#9c9ac41ecf9fbcfffc96f6d2675e2de33811e68a"
|
||||
integrity sha512-8ZRY5iZbZdtNFE5UFunB8mmBEAbSI3guwbrsCl4fWdfRiAcvqQpeqd5KHhSWLL5wuxo53zcaGZDBU64qgn4I4Q==
|
||||
dependencies:
|
||||
"@webassemblyjs/ast" "1.7.10"
|
||||
"@webassemblyjs/helper-buffer" "1.7.10"
|
||||
"@webassemblyjs/helper-wasm-bytecode" "1.7.10"
|
||||
"@webassemblyjs/wasm-gen" "1.7.10"
|
||||
"@webassemblyjs/ast" "1.7.11"
|
||||
"@webassemblyjs/helper-buffer" "1.7.11"
|
||||
"@webassemblyjs/helper-wasm-bytecode" "1.7.11"
|
||||
"@webassemblyjs/wasm-gen" "1.7.11"
|
||||
|
||||
"@webassemblyjs/ieee754@1.7.10":
|
||||
version "1.7.10"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.7.10.tgz#62c1728b7ef0f66ef8221e2966a0afd75db430df"
|
||||
integrity sha512-HRcWcY+YWt4+s/CvQn+vnSPfRaD4KkuzQFt5MNaELXXHSjelHlSEA8ZcqT69q0GTIuLWZ6JaoKar4yWHVpZHsQ==
|
||||
"@webassemblyjs/ieee754@1.7.11":
|
||||
version "1.7.11"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz#c95839eb63757a31880aaec7b6512d4191ac640b"
|
||||
integrity sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==
|
||||
dependencies:
|
||||
"@xtuc/ieee754" "^1.2.0"
|
||||
|
||||
"@webassemblyjs/leb128@1.7.10":
|
||||
version "1.7.10"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.7.10.tgz#167e0bb4b06d7701585772a73fba9f4df85439f6"
|
||||
integrity sha512-og8MciYlA8hvzCLR71hCuZKPbVBfLQeHv7ImKZ4nlyxrYbG7uJHYtHiHu6OV9SqrGuD03H/HtXC4Bgdjfm9FHw==
|
||||
"@webassemblyjs/leb128@1.7.11":
|
||||
version "1.7.11"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.7.11.tgz#d7267a1ee9c4594fd3f7e37298818ec65687db63"
|
||||
integrity sha512-vuGmgZjjp3zjcerQg+JA+tGOncOnJLWVkt8Aze5eWQLwTQGNgVLcyOTqgSCxWTR4J42ijHbBxnuRaL1Rv7XMdw==
|
||||
dependencies:
|
||||
"@xtuc/long" "4.2.1"
|
||||
|
||||
"@webassemblyjs/utf8@1.7.10":
|
||||
version "1.7.10"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.7.10.tgz#b6728f5b6f50364abc155be029f9670e6685605a"
|
||||
integrity sha512-Ng6Pxv6siyZp635xCSnH3mKmIFgqWPCcGdoo0GBYgyGdxu7cUj4agV7Uu1a8REP66UYUFXJLudeGgd4RvuJAnQ==
|
||||
"@webassemblyjs/utf8@1.7.11":
|
||||
version "1.7.11"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.7.11.tgz#06d7218ea9fdc94a6793aa92208160db3d26ee82"
|
||||
integrity sha512-C6GFkc7aErQIAH+BMrIdVSmW+6HSe20wg57HEC1uqJP8E/xpMjXqQUxkQw07MhNDSDcGpxI9G5JSNOQCqJk4sA==
|
||||
|
||||
"@webassemblyjs/wasm-edit@1.7.10":
|
||||
version "1.7.10"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.10.tgz#83fe3140f5a58f5a30b914702be9f0e59a399092"
|
||||
integrity sha512-e9RZFQlb+ZuYcKRcW9yl+mqX/Ycj9+3/+ppDI8nEE/NCY6FoK8f3dKBcfubYV/HZn44b+ND4hjh+4BYBt+sDnA==
|
||||
"@webassemblyjs/wasm-edit@1.7.11":
|
||||
version "1.7.11"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz#8c74ca474d4f951d01dbae9bd70814ee22a82005"
|
||||
integrity sha512-FUd97guNGsCZQgeTPKdgxJhBXkUbMTY6hFPf2Y4OedXd48H97J+sOY2Ltaq6WGVpIH8o/TGOVNiVz/SbpEMJGg==
|
||||
dependencies:
|
||||
"@webassemblyjs/ast" "1.7.10"
|
||||
"@webassemblyjs/helper-buffer" "1.7.10"
|
||||
"@webassemblyjs/helper-wasm-bytecode" "1.7.10"
|
||||
"@webassemblyjs/helper-wasm-section" "1.7.10"
|
||||
"@webassemblyjs/wasm-gen" "1.7.10"
|
||||
"@webassemblyjs/wasm-opt" "1.7.10"
|
||||
"@webassemblyjs/wasm-parser" "1.7.10"
|
||||
"@webassemblyjs/wast-printer" "1.7.10"
|
||||
"@webassemblyjs/ast" "1.7.11"
|
||||
"@webassemblyjs/helper-buffer" "1.7.11"
|
||||
"@webassemblyjs/helper-wasm-bytecode" "1.7.11"
|
||||
"@webassemblyjs/helper-wasm-section" "1.7.11"
|
||||
"@webassemblyjs/wasm-gen" "1.7.11"
|
||||
"@webassemblyjs/wasm-opt" "1.7.11"
|
||||
"@webassemblyjs/wasm-parser" "1.7.11"
|
||||
"@webassemblyjs/wast-printer" "1.7.11"
|
||||
|
||||
"@webassemblyjs/wasm-gen@1.7.10":
|
||||
version "1.7.10"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.10.tgz#4de003806ae29c97ab3707782469b53299570174"
|
||||
integrity sha512-M0lb6cO2Y0PzDye/L39PqwV+jvO+2YxEG5ax+7dgq7EwXdAlpOMx1jxyXJTScQoeTpzOPIb+fLgX/IkLF8h2yw==
|
||||
"@webassemblyjs/wasm-gen@1.7.11":
|
||||
version "1.7.11"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz#9bbba942f22375686a6fb759afcd7ac9c45da1a8"
|
||||
integrity sha512-U/KDYp7fgAZX5KPfq4NOupK/BmhDc5Kjy2GIqstMhvvdJRcER/kUsMThpWeRP8BMn4LXaKhSTggIJPOeYHwISA==
|
||||
dependencies:
|
||||
"@webassemblyjs/ast" "1.7.10"
|
||||
"@webassemblyjs/helper-wasm-bytecode" "1.7.10"
|
||||
"@webassemblyjs/ieee754" "1.7.10"
|
||||
"@webassemblyjs/leb128" "1.7.10"
|
||||
"@webassemblyjs/utf8" "1.7.10"
|
||||
"@webassemblyjs/ast" "1.7.11"
|
||||
"@webassemblyjs/helper-wasm-bytecode" "1.7.11"
|
||||
"@webassemblyjs/ieee754" "1.7.11"
|
||||
"@webassemblyjs/leb128" "1.7.11"
|
||||
"@webassemblyjs/utf8" "1.7.11"
|
||||
|
||||
"@webassemblyjs/wasm-opt@1.7.10":
|
||||
version "1.7.10"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.10.tgz#d151e31611934a556c82789fdeec41a814993c2a"
|
||||
integrity sha512-R66IHGCdicgF5ZliN10yn5HaC7vwYAqrSVJGjtJJQp5+QNPBye6heWdVH/at40uh0uoaDN/UVUfXK0gvuUqtVg==
|
||||
"@webassemblyjs/wasm-opt@1.7.11":
|
||||
version "1.7.11"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz#b331e8e7cef8f8e2f007d42c3a36a0580a7d6ca7"
|
||||
integrity sha512-XynkOwQyiRidh0GLua7SkeHvAPXQV/RxsUeERILmAInZegApOUAIJfRuPYe2F7RcjOC9tW3Cb9juPvAC/sCqvg==
|
||||
dependencies:
|
||||
"@webassemblyjs/ast" "1.7.10"
|
||||
"@webassemblyjs/helper-buffer" "1.7.10"
|
||||
"@webassemblyjs/wasm-gen" "1.7.10"
|
||||
"@webassemblyjs/wasm-parser" "1.7.10"
|
||||
"@webassemblyjs/ast" "1.7.11"
|
||||
"@webassemblyjs/helper-buffer" "1.7.11"
|
||||
"@webassemblyjs/wasm-gen" "1.7.11"
|
||||
"@webassemblyjs/wasm-parser" "1.7.11"
|
||||
|
||||
"@webassemblyjs/wasm-parser@1.7.10":
|
||||
version "1.7.10"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.10.tgz#0367be7bf8f09e3e6abc95f8e483b9206487ec65"
|
||||
integrity sha512-AEv8mkXVK63n/iDR3T693EzoGPnNAwKwT3iHmKJNBrrALAhhEjuPzo/lTE4U7LquEwyvg5nneSNdTdgrBaGJcA==
|
||||
"@webassemblyjs/wasm-parser@1.7.11":
|
||||
version "1.7.11"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz#6e3d20fa6a3519f6b084ef9391ad58211efb0a1a"
|
||||
integrity sha512-6lmXRTrrZjYD8Ng8xRyvyXQJYUQKYSXhJqXOBLw24rdiXsHAOlvw5PhesjdcaMadU/pyPQOJ5dHreMjBxwnQKg==
|
||||
dependencies:
|
||||
"@webassemblyjs/ast" "1.7.10"
|
||||
"@webassemblyjs/helper-api-error" "1.7.10"
|
||||
"@webassemblyjs/helper-wasm-bytecode" "1.7.10"
|
||||
"@webassemblyjs/ieee754" "1.7.10"
|
||||
"@webassemblyjs/leb128" "1.7.10"
|
||||
"@webassemblyjs/utf8" "1.7.10"
|
||||
"@webassemblyjs/ast" "1.7.11"
|
||||
"@webassemblyjs/helper-api-error" "1.7.11"
|
||||
"@webassemblyjs/helper-wasm-bytecode" "1.7.11"
|
||||
"@webassemblyjs/ieee754" "1.7.11"
|
||||
"@webassemblyjs/leb128" "1.7.11"
|
||||
"@webassemblyjs/utf8" "1.7.11"
|
||||
|
||||
"@webassemblyjs/wast-parser@1.7.10":
|
||||
version "1.7.10"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.7.10.tgz#058f598b52f730b23fc874d4775b6286b6247264"
|
||||
integrity sha512-YTPEtOBljkCL0VjDp4sHe22dAYSm3ZwdJ9+2NTGdtC7ayNvuip1wAhaAS8Zt9Q6SW9E5Jf5PX7YE3XWlrzR9cw==
|
||||
"@webassemblyjs/wast-parser@1.7.11":
|
||||
version "1.7.11"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz#25bd117562ca8c002720ff8116ef9072d9ca869c"
|
||||
integrity sha512-lEyVCg2np15tS+dm7+JJTNhNWq9yTZvi3qEhAIIOaofcYlUp0UR5/tVqOwa/gXYr3gjwSZqw+/lS9dscyLelbQ==
|
||||
dependencies:
|
||||
"@webassemblyjs/ast" "1.7.10"
|
||||
"@webassemblyjs/floating-point-hex-parser" "1.7.10"
|
||||
"@webassemblyjs/helper-api-error" "1.7.10"
|
||||
"@webassemblyjs/helper-code-frame" "1.7.10"
|
||||
"@webassemblyjs/helper-fsm" "1.7.10"
|
||||
"@webassemblyjs/ast" "1.7.11"
|
||||
"@webassemblyjs/floating-point-hex-parser" "1.7.11"
|
||||
"@webassemblyjs/helper-api-error" "1.7.11"
|
||||
"@webassemblyjs/helper-code-frame" "1.7.11"
|
||||
"@webassemblyjs/helper-fsm" "1.7.11"
|
||||
"@xtuc/long" "4.2.1"
|
||||
|
||||
"@webassemblyjs/wast-printer@1.7.10":
|
||||
version "1.7.10"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.7.10.tgz#d817909d2450ae96c66b7607624d98a33b84223b"
|
||||
integrity sha512-mJ3QKWtCchL1vhU/kZlJnLPuQZnlDOdZsyP0bbLWPGdYsQDnSBvyTLhzwBA3QAMlzEL9V4JHygEmK6/OTEyytA==
|
||||
"@webassemblyjs/wast-printer@1.7.11":
|
||||
version "1.7.11"
|
||||
resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz#c4245b6de242cb50a2cc950174fdbf65c78d7813"
|
||||
integrity sha512-m5vkAsuJ32QpkdkDOUPGSltrg8Cuk3KBx4YrmAGQwCZPRdUHXxG4phIOuuycLemHFr74sWL9Wthqss4fzdzSwg==
|
||||
dependencies:
|
||||
"@webassemblyjs/ast" "1.7.10"
|
||||
"@webassemblyjs/wast-parser" "1.7.10"
|
||||
"@webassemblyjs/ast" "1.7.11"
|
||||
"@webassemblyjs/wast-parser" "1.7.11"
|
||||
"@xtuc/long" "4.2.1"
|
||||
|
||||
"@xtuc/ieee754@^1.2.0":
|
||||
@ -1388,6 +1388,15 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.4.1:
|
||||
escape-string-regexp "^1.0.5"
|
||||
supports-color "^5.3.0"
|
||||
|
||||
chalk@^2.4.2:
|
||||
version "2.4.2"
|
||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
|
||||
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
|
||||
dependencies:
|
||||
ansi-styles "^3.2.1"
|
||||
escape-string-regexp "^1.0.5"
|
||||
supports-color "^5.3.0"
|
||||
|
||||
chardet@^0.7.0:
|
||||
version "0.7.0"
|
||||
resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
|
||||
@ -1592,11 +1601,6 @@ commander@^2.12.1:
|
||||
resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a"
|
||||
integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==
|
||||
|
||||
commander@~2.13.0:
|
||||
version "2.13.0"
|
||||
resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c"
|
||||
integrity sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==
|
||||
|
||||
commander@~2.17.1:
|
||||
version "2.17.1"
|
||||
resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
|
||||
@ -2083,7 +2087,7 @@ detect-libc@^1.0.2:
|
||||
resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
|
||||
integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
|
||||
|
||||
detect-node@^2.0.3:
|
||||
detect-node@^2.0.4:
|
||||
version "2.0.4"
|
||||
resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c"
|
||||
integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==
|
||||
@ -3034,10 +3038,10 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.2:
|
||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"
|
||||
integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==
|
||||
|
||||
handle-thing@^1.2.5:
|
||||
version "1.2.5"
|
||||
resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4"
|
||||
integrity sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=
|
||||
handle-thing@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.0.tgz#0e039695ff50c93fc288557d696f3c1dc6776754"
|
||||
integrity sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==
|
||||
|
||||
handlebars@^4.0.1, handlebars@^4.0.11:
|
||||
version "4.0.12"
|
||||
@ -4919,7 +4923,7 @@ object.pick@^1.3.0:
|
||||
dependencies:
|
||||
isobject "^3.0.1"
|
||||
|
||||
obuf@^1.0.0, obuf@^1.1.1:
|
||||
obuf@^1.0.0, obuf@^1.1.2:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e"
|
||||
integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==
|
||||
@ -5392,14 +5396,14 @@ postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.1:
|
||||
resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281"
|
||||
integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==
|
||||
|
||||
postcss@7.0.5:
|
||||
version "7.0.5"
|
||||
resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.5.tgz#70e6443e36a6d520b0fd4e7593fcca3635ee9f55"
|
||||
integrity sha512-HBNpviAUFCKvEh7NZhw1e8MBPivRszIiUnhrJ+sBFVSYSqubrzwX3KG51mYgcRHX8j/cAgZJedONZcm5jTBdgQ==
|
||||
postcss@7.0.11:
|
||||
version "7.0.11"
|
||||
resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.11.tgz#f63c513b78026d66263bb2ca995bf02e3d1a697d"
|
||||
integrity sha512-9AXb//5UcjeOEof9T+yPw3XTa5SL207ZOIC/lHYP4mbUTEh4M0rDAQekQpVANCZdwQwKhBtFZCk3i3h3h2hdWg==
|
||||
dependencies:
|
||||
chalk "^2.4.1"
|
||||
chalk "^2.4.2"
|
||||
source-map "^0.6.1"
|
||||
supports-color "^5.5.0"
|
||||
supports-color "^6.1.0"
|
||||
|
||||
postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.6:
|
||||
version "7.0.7"
|
||||
@ -5686,7 +5690,7 @@ read-pkg@^2.0.0:
|
||||
normalize-package-data "^2.3.2"
|
||||
path-type "^2.0.0"
|
||||
|
||||
"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6:
|
||||
"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6:
|
||||
version "2.3.6"
|
||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
|
||||
integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
|
||||
@ -5699,6 +5703,15 @@ read-pkg@^2.0.0:
|
||||
string_decoder "~1.1.1"
|
||||
util-deprecate "~1.0.1"
|
||||
|
||||
readable-stream@^3.0.6:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.1.1.tgz#ed6bbc6c5ba58b090039ff18ce670515795aeb06"
|
||||
integrity sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==
|
||||
dependencies:
|
||||
inherits "^2.0.3"
|
||||
string_decoder "^1.1.1"
|
||||
util-deprecate "^1.0.1"
|
||||
|
||||
readable-stream@~2.0.6:
|
||||
version "2.0.6"
|
||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e"
|
||||
@ -6008,7 +6021,7 @@ schema-utils@^0.3.0:
|
||||
dependencies:
|
||||
ajv "^5.0.0"
|
||||
|
||||
schema-utils@^0.4.4, schema-utils@^0.4.5:
|
||||
schema-utils@^0.4.4:
|
||||
version "0.4.7"
|
||||
resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187"
|
||||
integrity sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==
|
||||
@ -6452,35 +6465,33 @@ spdx-license-ids@^3.0.0:
|
||||
resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz#81c0ce8f21474756148bbb5f3bfc0f36bf15d76e"
|
||||
integrity sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==
|
||||
|
||||
spdy-transport@^2.0.18:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-2.1.1.tgz#c54815d73858aadd06ce63001e7d25fa6441623b"
|
||||
integrity sha512-q7D8c148escoB3Z7ySCASadkegMmUZW8Wb/Q1u0/XBgDKMO880rLQDj8Twiew/tYi7ghemKUi/whSYOwE17f5Q==
|
||||
spdy-transport@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31"
|
||||
integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==
|
||||
dependencies:
|
||||
debug "^2.6.8"
|
||||
detect-node "^2.0.3"
|
||||
debug "^4.1.0"
|
||||
detect-node "^2.0.4"
|
||||
hpack.js "^2.1.6"
|
||||
obuf "^1.1.1"
|
||||
readable-stream "^2.2.9"
|
||||
safe-buffer "^5.0.1"
|
||||
wbuf "^1.7.2"
|
||||
obuf "^1.1.2"
|
||||
readable-stream "^3.0.6"
|
||||
wbuf "^1.7.3"
|
||||
|
||||
spdy@^3.4.1:
|
||||
version "3.4.7"
|
||||
resolved "https://registry.yarnpkg.com/spdy/-/spdy-3.4.7.tgz#42ff41ece5cc0f99a3a6c28aabb73f5c3b03acbc"
|
||||
integrity sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=
|
||||
spdy@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.0.tgz#81f222b5a743a329aa12cea6a390e60e9b613c52"
|
||||
integrity sha512-ot0oEGT/PGUpzf/6uk4AWLqkq+irlqHXkrdbk51oWONh3bxQmBuljxPNl66zlRRcIJStWq0QkLUCPOPjgjvU0Q==
|
||||
dependencies:
|
||||
debug "^2.6.8"
|
||||
handle-thing "^1.2.5"
|
||||
debug "^4.1.0"
|
||||
handle-thing "^2.0.0"
|
||||
http-deceiver "^1.2.7"
|
||||
safe-buffer "^5.0.1"
|
||||
select-hose "^2.0.0"
|
||||
spdy-transport "^2.0.18"
|
||||
spdy-transport "^3.0.0"
|
||||
|
||||
speed-measure-webpack-plugin@1.2.3:
|
||||
version "1.2.3"
|
||||
resolved "https://registry.yarnpkg.com/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.2.3.tgz#de170b5cefbfa1c039d95e639edd3ad50cfc7c48"
|
||||
integrity sha512-p+taQ69VkRUXYMoZOx2nxV/Tz8tt79ahctoZJyJDHWP7fEYvwFNf5Pd73k5kZ6auu0pTsPNLEUwWpM8mCk85Zw==
|
||||
speed-measure-webpack-plugin@1.2.5:
|
||||
version "1.2.5"
|
||||
resolved "https://registry.yarnpkg.com/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.2.5.tgz#8179936eb8c5e891f7481bd5075a9ea9a0f74823"
|
||||
integrity sha512-S/guYjC4Izn5wY2d0+M4zowED/F77Lxh9yjkTZ+XAr244pr9c1MYNcXcRe9lx2hmAj0GPbOrBXgOF2YIp/CZ8A==
|
||||
dependencies:
|
||||
chalk "^2.0.1"
|
||||
|
||||
@ -6626,7 +6637,7 @@ string-width@^1.0.1, string-width@^1.0.2:
|
||||
is-fullwidth-code-point "^2.0.0"
|
||||
strip-ansi "^4.0.0"
|
||||
|
||||
string_decoder@^1.0.0:
|
||||
string_decoder@^1.0.0, string_decoder@^1.1.1:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d"
|
||||
integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==
|
||||
@ -6743,6 +6754,13 @@ supports-color@^5.1.0, supports-color@^5.3.0, supports-color@^5.4.0, supports-co
|
||||
dependencies:
|
||||
has-flag "^3.0.0"
|
||||
|
||||
supports-color@^6.1.0:
|
||||
version "6.1.0"
|
||||
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"
|
||||
integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==
|
||||
dependencies:
|
||||
has-flag "^3.0.0"
|
||||
|
||||
symbol-observable@1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
|
||||
@ -6775,10 +6793,10 @@ tar@^4, tar@^4.4.6:
|
||||
safe-buffer "^5.1.2"
|
||||
yallist "^3.0.2"
|
||||
|
||||
terser-webpack-plugin@1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.1.0.tgz#cf7c25a1eee25bf121f4a587bb9e004e3f80e528"
|
||||
integrity sha512-61lV0DSxMAZ8AyZG7/A4a3UPlrbOBo8NIQ4tJzLPAdGOQ+yoNC7l5ijEow27lBAL2humer01KLS6bGIMYQxKoA==
|
||||
terser-webpack-plugin@1.2.1, terser-webpack-plugin@^1.1.0:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.2.1.tgz#7545da9ae5f4f9ae6a0ac961eb46f5e7c845cc26"
|
||||
integrity sha512-GGSt+gbT0oKcMDmPx4SRSfJPE1XaN3kQRWG4ghxKQw9cn5G9x6aCKSsgYdvyM0na9NJ4Drv0RG6jbBByZ5CMjw==
|
||||
dependencies:
|
||||
cacache "^11.0.2"
|
||||
find-cache-dir "^2.0.0"
|
||||
@ -6926,7 +6944,7 @@ ts-node@~7.0.0:
|
||||
source-map-support "^0.5.6"
|
||||
yn "^2.0.0"
|
||||
|
||||
tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0:
|
||||
tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3:
|
||||
version "1.9.3"
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"
|
||||
integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==
|
||||
@ -7001,14 +7019,6 @@ typescript@3.2.2:
|
||||
"typescript@file:../../node_modules/typescript":
|
||||
version "3.2.2"
|
||||
|
||||
uglify-es@^3.3.4:
|
||||
version "3.3.9"
|
||||
resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677"
|
||||
integrity sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==
|
||||
dependencies:
|
||||
commander "~2.13.0"
|
||||
source-map "~0.6.1"
|
||||
|
||||
uglify-js@^3.1.4:
|
||||
version "3.4.9"
|
||||
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3"
|
||||
@ -7017,20 +7027,6 @@ uglify-js@^3.1.4:
|
||||
commander "~2.17.1"
|
||||
source-map "~0.6.1"
|
||||
|
||||
uglifyjs-webpack-plugin@^1.2.4:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.3.0.tgz#75f548160858163a08643e086d5fefe18a5d67de"
|
||||
integrity sha512-ovHIch0AMlxjD/97j9AYovZxG5wnHOPkL7T1GKochBADp/Zwc44pEWNqpKl1Loupp1WhFg7SlYmHZRUfdAacgw==
|
||||
dependencies:
|
||||
cacache "^10.0.4"
|
||||
find-cache-dir "^1.0.0"
|
||||
schema-utils "^0.4.5"
|
||||
serialize-javascript "^1.4.0"
|
||||
source-map "^0.6.1"
|
||||
uglify-es "^3.3.4"
|
||||
webpack-sources "^1.1.0"
|
||||
worker-farm "^1.5.2"
|
||||
|
||||
ultron@~1.1.0:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c"
|
||||
@ -7119,7 +7115,7 @@ useragent@2.3.0:
|
||||
lru-cache "4.1.x"
|
||||
tmp "0.0.x"
|
||||
|
||||
util-deprecate@~1.0.1:
|
||||
util-deprecate@^1.0.1, util-deprecate@~1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
|
||||
integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
|
||||
@ -7198,7 +7194,7 @@ watchpack@^1.5.0:
|
||||
graceful-fs "^4.1.2"
|
||||
neo-async "^2.5.0"
|
||||
|
||||
wbuf@^1.1.0, wbuf@^1.7.2:
|
||||
wbuf@^1.1.0, wbuf@^1.7.3:
|
||||
version "1.7.3"
|
||||
resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df"
|
||||
integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==
|
||||
@ -7248,10 +7244,10 @@ webpack-dev-middleware@3.4.0:
|
||||
range-parser "^1.0.3"
|
||||
webpack-log "^2.0.0"
|
||||
|
||||
webpack-dev-server@3.1.10:
|
||||
version "3.1.10"
|
||||
resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.1.10.tgz#507411bee727ee8d2fdffdc621b66a64ab3dea2b"
|
||||
integrity sha512-RqOAVjfqZJtQcB0LmrzJ5y4Jp78lv9CK0MZ1YJDTaTmedMZ9PU9FLMQNrMCfVu8hHzaVLVOJKBlGEHMN10z+ww==
|
||||
webpack-dev-server@3.1.14:
|
||||
version "3.1.14"
|
||||
resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.1.14.tgz#60fb229b997fc5a0a1fc6237421030180959d469"
|
||||
integrity sha512-mGXDgz5SlTxcF3hUpfC8hrQ11yhAttuUQWf1Wmb+6zo3x6rb7b9mIfuQvAPLdfDRCGRGvakBWHdHOa0I9p/EVQ==
|
||||
dependencies:
|
||||
ansi-html "0.0.7"
|
||||
bonjour "^3.5.0"
|
||||
@ -7272,12 +7268,14 @@ webpack-dev-server@3.1.10:
|
||||
portfinder "^1.0.9"
|
||||
schema-utils "^1.0.0"
|
||||
selfsigned "^1.9.1"
|
||||
semver "^5.6.0"
|
||||
serve-index "^1.7.2"
|
||||
sockjs "0.3.19"
|
||||
sockjs-client "1.3.0"
|
||||
spdy "^3.4.1"
|
||||
spdy "^4.0.0"
|
||||
strip-ansi "^3.0.0"
|
||||
supports-color "^5.1.0"
|
||||
url "^0.11.0"
|
||||
webpack-dev-middleware "3.4.0"
|
||||
webpack-log "^2.0.0"
|
||||
yargs "12.0.2"
|
||||
@ -7320,15 +7318,15 @@ webpack-subresource-integrity@1.1.0-rc.6:
|
||||
dependencies:
|
||||
webpack-core "^0.6.8"
|
||||
|
||||
webpack@4.23.1:
|
||||
version "4.23.1"
|
||||
resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.23.1.tgz#db7467b116771ae020c58bdfe2a0822785bb8239"
|
||||
integrity sha512-iE5Cu4rGEDk7ONRjisTOjVHv3dDtcFfwitSxT7evtYj/rANJpt1OuC/Kozh1pBa99AUBr1L/LsaNB+D9Xz3CEg==
|
||||
webpack@4.28.4:
|
||||
version "4.28.4"
|
||||
resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.28.4.tgz#1ddae6c89887d7efb752adf0c3cd32b9b07eacd0"
|
||||
integrity sha512-NxjD61WsK/a3JIdwWjtIpimmvE6UrRi3yG54/74Hk9rwNj5FPkA4DJCf1z4ByDWLkvZhTZE+P3C/eh6UD5lDcw==
|
||||
dependencies:
|
||||
"@webassemblyjs/ast" "1.7.10"
|
||||
"@webassemblyjs/helper-module-context" "1.7.10"
|
||||
"@webassemblyjs/wasm-edit" "1.7.10"
|
||||
"@webassemblyjs/wasm-parser" "1.7.10"
|
||||
"@webassemblyjs/ast" "1.7.11"
|
||||
"@webassemblyjs/helper-module-context" "1.7.11"
|
||||
"@webassemblyjs/wasm-edit" "1.7.11"
|
||||
"@webassemblyjs/wasm-parser" "1.7.11"
|
||||
acorn "^5.6.2"
|
||||
acorn-dynamic-import "^3.0.0"
|
||||
ajv "^6.1.0"
|
||||
@ -7346,7 +7344,7 @@ webpack@4.23.1:
|
||||
node-libs-browser "^2.0.0"
|
||||
schema-utils "^0.4.4"
|
||||
tapable "^1.1.0"
|
||||
uglifyjs-webpack-plugin "^1.2.4"
|
||||
terser-webpack-plugin "^1.1.0"
|
||||
watchpack "^1.5.0"
|
||||
webpack-sources "^1.3.0"
|
||||
|
||||
|
@ -9,6 +9,7 @@
|
||||
"ng": "ng",
|
||||
"postinstall": "webdriver-manager update --gecko=false --standalone=false $CHROMEDRIVER_VERSION_ARG",
|
||||
"start": "ng serve",
|
||||
"pretest": "ng version",
|
||||
"test": "ng test --progress=false --watch=false && yarn e2e --configuration=ci && yarn e2e --configuration=ci-production"
|
||||
},
|
||||
"private": true,
|
||||
@ -24,10 +25,11 @@
|
||||
"@angular/router": "file:../../dist/packages-dist/router",
|
||||
"core-js": "file:../../node_modules/core-js",
|
||||
"rxjs": "file:../../node_modules/rxjs",
|
||||
"tslib": "^1.9.3",
|
||||
"zone.js": "file:../../node_modules/zone.js"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@angular-devkit/build-angular": "~0.10.3",
|
||||
"@angular-devkit/build-angular": "~0.12.1",
|
||||
"@angular/cli": "file:../../node_modules/@angular/cli",
|
||||
"@angular/compiler-cli": "file:../../dist/packages-dist/compiler-cli",
|
||||
"@angular/language-service": "file:../../dist/packages-dist/language-service",
|
||||
|
@ -11,14 +11,17 @@
|
||||
* automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera),
|
||||
* 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
|
||||
*/
|
||||
|
||||
/** 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/object';
|
||||
// import 'core-js/es6/function';
|
||||
@ -40,19 +43,36 @@
|
||||
/** IE10 and IE11 requires the following for the Reflect API. */
|
||||
// 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`.
|
||||
* Needed for: All but Chrome, Firefox and Opera. http://caniuse.com/#feat=web-animation
|
||||
**/
|
||||
* Web Animations `@angular/platform-browser/animations`
|
||||
* 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`.
|
||||
|
||||
|
||||
/**
|
||||
* 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.
|
||||
@ -60,7 +80,6 @@ import 'core-js/es7/reflect';
|
||||
import 'zone.js/dist/zone'; // Included with Angular CLI.
|
||||
|
||||
|
||||
|
||||
/***************************************************************************************************
|
||||
* APPLICATION IMPORTS
|
||||
*/
|
||||
|
@ -7,6 +7,7 @@
|
||||
"moduleResolution": "node",
|
||||
"emitDecoratorMetadata": true,
|
||||
"experimentalDecorators": true,
|
||||
"importHelpers": true,
|
||||
"target": "es5",
|
||||
"typeRoots": [
|
||||
"node_modules/@types"
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -13,10 +13,6 @@ button {
|
||||
-webkit-appearance: none;
|
||||
-ms-appearance: none;
|
||||
appearance: none;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-font-smoothing: antialiased;
|
||||
-ms-font-smoothing: antialiased;
|
||||
font-smoothing: antialiased;
|
||||
}
|
||||
|
||||
button,
|
||||
@ -89,10 +85,6 @@ input[type="checkbox"] {
|
||||
box-shadow: inset 0 -1px 5px 0 rgba(0, 0, 0, 0.2);
|
||||
-ms-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-font-smoothing: antialiased;
|
||||
-ms-font-smoothing: antialiased;
|
||||
font-smoothing: antialiased;
|
||||
}
|
||||
|
||||
#new-todo {
|
||||
|
@ -11,9 +11,4 @@ body {
|
||||
color: #4d4d4d;
|
||||
width: 550px;
|
||||
margin: 0 auto;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-font-smoothing: antialiased;
|
||||
-ms-font-smoothing: antialiased;
|
||||
-o-font-smoothing: antialiased;
|
||||
font-smoothing: antialiased;
|
||||
}
|
||||
|
@ -13,11 +13,6 @@ body {
|
||||
color: #4d4d4d;
|
||||
width: 550px;
|
||||
margin: 0 auto;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-font-smoothing: antialiased;
|
||||
-ms-font-smoothing: antialiased;
|
||||
-o-font-smoothing: antialiased;
|
||||
font-smoothing: antialiased;
|
||||
}
|
||||
|
||||
button {
|
||||
@ -33,10 +28,6 @@ button {
|
||||
-webkit-appearance: none;
|
||||
-ms-appearance: none;
|
||||
appearance: none;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-font-smoothing: antialiased;
|
||||
-ms-font-smoothing: antialiased;
|
||||
font-smoothing: antialiased;
|
||||
}
|
||||
|
||||
button,
|
||||
@ -109,10 +100,6 @@ input[type="checkbox"] {
|
||||
box-shadow: inset 0 -1px 5px 0 rgba(0, 0, 0, 0.2);
|
||||
-ms-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-font-smoothing: antialiased;
|
||||
-ms-font-smoothing: antialiased;
|
||||
font-smoothing: antialiased;
|
||||
}
|
||||
|
||||
#new-todo {
|
||||
|
24
package.json
24
package.json
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "angular-srcs",
|
||||
"version": "8.0.0-beta.0",
|
||||
"version": "8.0.0-beta.2",
|
||||
"private": true,
|
||||
"branchPattern": "2.0.*",
|
||||
"description": "Angular - a web framework for modern web apps",
|
||||
@ -9,7 +9,7 @@
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=10.9.0 <11.0.0",
|
||||
"yarn": ">=1.10.1 <1.13.0"
|
||||
"yarn": ">=1.10.1 <1.14.0"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@ -34,16 +34,18 @@
|
||||
"@angular-devkit/architect": "^0.10.6",
|
||||
"@angular-devkit/build-optimizer": "^0.12.2",
|
||||
"@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/typescript": "~0.22.1",
|
||||
"@bazel/typescript": "0.22.1-7-g68fed6a",
|
||||
"@schematics/angular": "^7.0.4",
|
||||
"@types/angular": "^1.6.47",
|
||||
"@types/chokidar": "1.7.3",
|
||||
"@types/convert-source-map": "^1.5.1",
|
||||
"@types/diff": "^3.2.2",
|
||||
"@types/fs-extra": "4.0.2",
|
||||
"@types/hammerjs": "2.0.35",
|
||||
"@types/jasmine": "^2.8.8",
|
||||
"@types/jasminewd2": "^2.0.6",
|
||||
"@types/mock-fs": "^3.6.30",
|
||||
"@types/node": "^10.9.4",
|
||||
"@types/selenium-webdriver": "3.0.7",
|
||||
@ -94,13 +96,11 @@
|
||||
"// 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)",
|
||||
"devDependencies": {
|
||||
"@angular/cli": "^7.2.1",
|
||||
"@bazel/bazel": "~0.21.0",
|
||||
"@angular/cli": "^7.3.0-rc.0",
|
||||
"@bazel/bazel": "~0.22.0",
|
||||
"@bazel/buildifier": "^0.19.2",
|
||||
"@bazel/ibazel": "~0.9.0",
|
||||
"@types/angular": "^1.6.47",
|
||||
"@types/base64-js": "1.2.5",
|
||||
"@types/jasminewd2": "^2.0.4",
|
||||
"@types/minimist": "^1.2.0",
|
||||
"@types/systemjs": "0.19.32",
|
||||
"browserstacktunnel-wrapper": "2.0.1",
|
||||
@ -135,7 +135,7 @@
|
||||
"rewire": "2.5.2",
|
||||
"rollup-plugin-commonjs": "8.1.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",
|
||||
"systemjs": "0.18.10",
|
||||
"tslint": "5.7.0",
|
||||
@ -146,5 +146,9 @@
|
||||
"vlq": "0.2.2",
|
||||
"vrsource-tslint-rules": "5.1.1",
|
||||
"webpack": "1.12.9"
|
||||
},
|
||||
"// 4": "natives is needed for gulp to work with node >= 10.13, see #28213",
|
||||
"resolutions": {
|
||||
"natives": "1.1.6"
|
||||
}
|
||||
}
|
||||
}
|
@ -29,6 +29,7 @@ ng_package(
|
||||
# Do not add more to this list.
|
||||
# Dependencies on the full npm_package cause long re-builds.
|
||||
visibility = [
|
||||
"//packages/compiler-cli/integrationtest:__pkg__",
|
||||
"//packages/compiler/test:__pkg__",
|
||||
],
|
||||
deps = [
|
||||
|
@ -26,7 +26,7 @@ const SELF_TOKEN_REGEX = new RegExp(`\s*${SELF_TOKEN}\s*,?`, 'g');
|
||||
*
|
||||
* 1. Overlap of animations
|
||||
* 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
|
||||
* the start and end times for when the property is used within an animation step.
|
||||
*
|
||||
|
@ -671,8 +671,8 @@ export function animate(
|
||||
*
|
||||
* ```typescript
|
||||
* group([
|
||||
* animate("1s", { background: "black" }))
|
||||
* animate("2s", { color: "white" }))
|
||||
* animate("1s", style({ background: "black" })),
|
||||
* animate("2s", style({ color: "white" }))
|
||||
* ])
|
||||
* ```
|
||||
*
|
||||
@ -708,7 +708,7 @@ export function group(
|
||||
* ```typescript
|
||||
* sequence([
|
||||
* style({ opacity: 0 })),
|
||||
* animate("1s", { opacity: 1 }))
|
||||
* animate("1s", style({ opacity: 1 }))
|
||||
* ])
|
||||
* ```
|
||||
*
|
||||
|
@ -14,7 +14,7 @@
|
||||
"dependencies": {
|
||||
"@angular-devkit/architect": "^0.10.6",
|
||||
"@angular-devkit/core": "^7.0.4",
|
||||
"@angular-devkit/schematics": "^7.0.4",
|
||||
"@angular-devkit/schematics": "^7.3.0-rc.0",
|
||||
"@bazel/typescript": "^0.22.1",
|
||||
"@schematics/angular": "^7.0.4",
|
||||
"@types/node": "6.0.84",
|
||||
|
@ -8,6 +8,7 @@
|
||||
|
||||
/// <reference types='node'/>
|
||||
import {spawn, spawnSync} from 'child_process';
|
||||
import {join} from 'path';
|
||||
import {Observable, Subject} from 'rxjs';
|
||||
|
||||
export type Executable = 'bazel' | 'ibazel';
|
||||
@ -17,7 +18,8 @@ export function runBazel(
|
||||
projectDir: string, executable: Executable, command: Command, workspaceTarget: string,
|
||||
flags: string[]): Observable<void> {
|
||||
const doneSubject = new Subject<void>();
|
||||
const buildProcess = spawn(executable, [command, workspaceTarget, ...flags], {
|
||||
const bin = join(projectDir, 'node_modules', '.bin', executable);
|
||||
const buildProcess = spawn(bin, [command, workspaceTarget, ...flags], {
|
||||
cwd: projectDir,
|
||||
stdio: 'inherit',
|
||||
shell: false,
|
||||
@ -35,7 +37,8 @@ export function runBazel(
|
||||
}
|
||||
|
||||
export function checkInstallation(executable: Executable, projectDir: string) {
|
||||
const child = spawnSync(executable, ['version'], {
|
||||
const bin = join(projectDir, 'node_modules', '.bin', executable);
|
||||
const child = spawnSync(bin, ['version'], {
|
||||
cwd: projectDir,
|
||||
shell: false,
|
||||
});
|
||||
|
@ -11,7 +11,7 @@
|
||||
import {BuildEvent, Builder, BuilderConfiguration, BuilderContext} from '@angular-devkit/architect';
|
||||
import {getSystemPath, resolve} from '@angular-devkit/core';
|
||||
import {Observable, of } from 'rxjs';
|
||||
import {catchError, map, tap} from 'rxjs/operators';
|
||||
import {catchError, map} from 'rxjs/operators';
|
||||
|
||||
import {checkInstallation, runBazel} from './bazel';
|
||||
import {Schema} from './schema';
|
||||
@ -28,7 +28,8 @@ class BazelBuilder implements Builder<Schema> {
|
||||
if (!checkInstallation(executable, projectRoot)) {
|
||||
throw new Error(
|
||||
`Could not run ${executable}. Please make sure that the ` +
|
||||
`"${executable}" command is available in the $PATH.`);
|
||||
`"${executable}" command is installed by running ` +
|
||||
`"npm install" or "yarn install".`);
|
||||
}
|
||||
|
||||
// TODO: Support passing flags.
|
||||
|
@ -292,6 +292,7 @@ export function compile({allDepsCompiledWithBazel = true, compilerOpts, tsHost,
|
||||
cancellationToken, emitOnlyDtsFiles, {
|
||||
beforeTs: customTransformers.before,
|
||||
afterTs: customTransformers.after,
|
||||
afterDeclarations: customTransformers.afterDeclarations,
|
||||
});
|
||||
|
||||
if (!gatherDiagnostics) {
|
||||
|
@ -136,15 +136,13 @@ if (process.env['WEB_TEST_METADATA']) {
|
||||
}
|
||||
setConf(conf, 'directConnect', true, 'is set to true for chrome');
|
||||
setConf(conf, 'chromeDriver', chromeDriver, 'is determined by the browsers attribute');
|
||||
mergeCapabilities(
|
||||
conf, {
|
||||
browserName: 'chrome',
|
||||
chromeOptions: {
|
||||
binary: chromeBin,
|
||||
args: args,
|
||||
}
|
||||
},
|
||||
'is determined by the browsers attribute');
|
||||
mergeCapabilities(conf, {
|
||||
browserName: 'chrome',
|
||||
chromeOptions: {
|
||||
binary: chromeBin,
|
||||
args: args,
|
||||
}
|
||||
});
|
||||
}
|
||||
if (webTestNamedFiles['FIREFOX']) {
|
||||
// TODO(gmagolan): implement firefox support for protractor
|
||||
|
@ -12,7 +12,16 @@ GitHub and ping [@mgechev](https://github.com/mgechev) or
|
||||
To create a new Angular project that builds with Bazel, all you need to do is install the `@angular/bazel` package.
|
||||
|
||||
The example below assumes that you have a global installation of Angular CLI.
|
||||
If not, please run `yarn global add @angular/cli`.
|
||||
If not, please run `yarn global add @angular/cli@next`.
|
||||
|
||||
Note, it is very *important* to install the **cutting-edge** (`@next`) version of
|
||||
`@angular/cli` because the Bazel schematics relies on some of the new APIs in
|
||||
`@angular-devkit/schematics`. There is currently no way for a schematic to
|
||||
mandate a minimum "schematic runtime" version. The version of
|
||||
`@angular-devkit/schematics` that is installed with the CLI is used to run the
|
||||
schematic even though a different version is used in the schematic itself.
|
||||
Invoking `@angular/bazel` schematics with an older version of CLI would very
|
||||
likely result in unexpected errors.
|
||||
|
||||
Install the latest `@angular/bazel` for generating Bazel schematics.
|
||||
|
||||
|
@ -12,6 +12,7 @@ ts_library(
|
||||
"@npm//@types/node",
|
||||
"@npm//jasmine",
|
||||
"@npm//protractor",
|
||||
"@npm//tslib",
|
||||
],
|
||||
data = [
|
||||
"//:tsconfig.json",
|
||||
|
@ -21,21 +21,15 @@ import {Schema as BazelWorkspaceOptions} from './schema';
|
||||
* Look for package.json file for package with `packageName` in node_modules and
|
||||
* extract its version.
|
||||
*/
|
||||
function findVersion(projectName: string, packageName: string, host: Tree): string|null {
|
||||
// Need to look in multiple locations because we could be working in a subtree.
|
||||
const candidates = [
|
||||
`node_modules/${packageName}/package.json`,
|
||||
`${projectName}/node_modules/${packageName}/package.json`,
|
||||
];
|
||||
for (const candidate of candidates) {
|
||||
if (host.exists(candidate)) {
|
||||
try {
|
||||
const packageJson = JSON.parse(host.read(candidate).toString());
|
||||
if (packageJson.name === packageName && packageJson.version) {
|
||||
return packageJson.version;
|
||||
}
|
||||
} catch {
|
||||
function findVersion(packageName: string, host: Tree): string|null {
|
||||
const candidate = `node_modules/${packageName}/package.json`;
|
||||
if (host.exists(candidate)) {
|
||||
try {
|
||||
const packageJson = JSON.parse(host.read(candidate).toString());
|
||||
if (packageJson.name === packageName && packageJson.version) {
|
||||
return packageJson.version;
|
||||
}
|
||||
} catch {
|
||||
}
|
||||
}
|
||||
return null;
|
||||
@ -72,23 +66,17 @@ function hasSassStylesheet(host: Tree) {
|
||||
|
||||
export default function(options: BazelWorkspaceOptions): Rule {
|
||||
return (host: Tree, context: SchematicContext) => {
|
||||
if (!options.name) {
|
||||
throw new SchematicsException(`Invalid options, "name" is required.`);
|
||||
const name = options.name || getWorkspace(host).defaultProject;
|
||||
if (!name) {
|
||||
throw new Error('Please provide a name for Bazel workspace');
|
||||
}
|
||||
validateProjectName(options.name);
|
||||
let newProjectRoot = '';
|
||||
try {
|
||||
const workspace = getWorkspace(host);
|
||||
newProjectRoot = workspace.newProjectRoot || '';
|
||||
} catch {
|
||||
}
|
||||
const appDir = `${newProjectRoot}/${options.name}`;
|
||||
validateProjectName(name);
|
||||
|
||||
// If the project already has some deps installed, Bazel should use existing
|
||||
// versions.
|
||||
const existingVersions = {
|
||||
Angular: findVersion(options.name, '@angular/core', host),
|
||||
RxJs: findVersion(options.name, 'rxjs', host),
|
||||
Angular: findVersion('@angular/core', host),
|
||||
RxJs: findVersion('rxjs', host),
|
||||
};
|
||||
|
||||
Object.keys(existingVersions).forEach((name: 'Angular' | 'RxJs') => {
|
||||
@ -110,12 +98,11 @@ export default function(options: BazelWorkspaceOptions): Rule {
|
||||
return mergeWith(apply(url('./files'), [
|
||||
applyTemplates({
|
||||
utils: strings,
|
||||
...options,
|
||||
name,
|
||||
'dot': '.', ...workspaceVersions,
|
||||
routing: hasRoutingModule(host),
|
||||
sass: hasSassStylesheet(host),
|
||||
}),
|
||||
move(appDir),
|
||||
]));
|
||||
};
|
||||
}
|
||||
|
@ -21,24 +21,24 @@ describe('Bazel-workspace Schematic', () => {
|
||||
const options = {...defaultOptions};
|
||||
const host = schematicRunner.runSchematic('bazel-workspace', options);
|
||||
const files = host.files;
|
||||
expect(files).toContain('/demo/.bazelignore');
|
||||
expect(files).toContain('/demo/.bazelrc');
|
||||
expect(files).toContain('/demo/BUILD.bazel');
|
||||
expect(files).toContain('/demo/src/BUILD.bazel');
|
||||
expect(files).toContain('/demo/WORKSPACE');
|
||||
expect(files).toContain('/demo/yarn.lock');
|
||||
expect(files).toContain('/.bazelignore');
|
||||
expect(files).toContain('/.bazelrc');
|
||||
expect(files).toContain('/BUILD.bazel');
|
||||
expect(files).toContain('/src/BUILD.bazel');
|
||||
expect(files).toContain('/WORKSPACE');
|
||||
expect(files).toContain('/yarn.lock');
|
||||
});
|
||||
|
||||
it('should find existing Angular version', () => {
|
||||
let host = new UnitTestTree(new HostTree);
|
||||
host.create('/demo/node_modules/@angular/core/package.json', JSON.stringify({
|
||||
host.create('/node_modules/@angular/core/package.json', JSON.stringify({
|
||||
name: '@angular/core',
|
||||
version: '6.6.6',
|
||||
}));
|
||||
const options = {...defaultOptions};
|
||||
host = schematicRunner.runSchematic('bazel-workspace', options, host);
|
||||
expect(host.files).toContain('/demo/WORKSPACE');
|
||||
const workspace = host.readContent('/demo/WORKSPACE');
|
||||
expect(host.files).toContain('/WORKSPACE');
|
||||
const workspace = host.readContent('/WORKSPACE');
|
||||
expect(workspace).toMatch('ANGULAR_VERSION = "6.6.6"');
|
||||
});
|
||||
|
||||
@ -46,19 +46,19 @@ describe('Bazel-workspace Schematic', () => {
|
||||
const options = {...defaultOptions, name: 'demo-app'};
|
||||
const host = schematicRunner.runSchematic('bazel-workspace', options);
|
||||
const {files} = host;
|
||||
expect(files).toContain('/demo-app/src/BUILD.bazel');
|
||||
const content = host.readContent('/demo-app/src/BUILD.bazel');
|
||||
expect(files).toContain('/src/BUILD.bazel');
|
||||
const content = host.readContent('/src/BUILD.bazel');
|
||||
expect(content).toContain('entry_module = "demo_app/src/main.dev"');
|
||||
});
|
||||
|
||||
it('should add router if project contains routing module', () => {
|
||||
let host = new UnitTestTree(new HostTree);
|
||||
host.create('/demo/src/app/app-routing.module.ts', '');
|
||||
expect(host.files).toContain('/demo/src/app/app-routing.module.ts');
|
||||
host.create('/src/app/app-routing.module.ts', '');
|
||||
expect(host.files).toContain('/src/app/app-routing.module.ts');
|
||||
const options = {...defaultOptions};
|
||||
host = schematicRunner.runSchematic('bazel-workspace', options, host);
|
||||
expect(host.files).toContain('/demo/src/BUILD.bazel');
|
||||
const content = host.readContent('/demo/src/BUILD.bazel');
|
||||
expect(host.files).toContain('/src/BUILD.bazel');
|
||||
const content = host.readContent('/src/BUILD.bazel');
|
||||
expect(content).toContain('@angular//packages/router');
|
||||
});
|
||||
|
||||
@ -66,16 +66,16 @@ describe('Bazel-workspace Schematic', () => {
|
||||
it('should contain project name', () => {
|
||||
const options = {...defaultOptions};
|
||||
const host = schematicRunner.runSchematic('bazel-workspace', options);
|
||||
expect(host.files).toContain('/demo/WORKSPACE');
|
||||
const content = host.readContent('/demo/WORKSPACE');
|
||||
expect(host.files).toContain('/WORKSPACE');
|
||||
const content = host.readContent('/WORKSPACE');
|
||||
expect(content).toContain('workspace(name = "demo")');
|
||||
});
|
||||
|
||||
it('should convert dashes in name to underscore', () => {
|
||||
const options = {...defaultOptions, name: 'demo-project'};
|
||||
const host = schematicRunner.runSchematic('bazel-workspace', options);
|
||||
expect(host.files).toContain('/demo-project/WORKSPACE');
|
||||
const content = host.readContent('/demo-project/WORKSPACE');
|
||||
expect(host.files).toContain('/WORKSPACE');
|
||||
const content = host.readContent('/WORKSPACE');
|
||||
expect(content).toContain('workspace(name = "demo_project"');
|
||||
});
|
||||
});
|
||||
@ -83,40 +83,25 @@ describe('Bazel-workspace Schematic', () => {
|
||||
describe('SASS', () => {
|
||||
let host = new UnitTestTree(new HostTree);
|
||||
beforeAll(() => {
|
||||
host.create('/demo/src/app/app.component.scss', '');
|
||||
expect(host.files).toContain('/demo/src/app/app.component.scss');
|
||||
host.create('/src/app/app.component.scss', '');
|
||||
expect(host.files).toContain('/src/app/app.component.scss');
|
||||
const options = {...defaultOptions};
|
||||
host = schematicRunner.runSchematic('bazel-workspace', options, host);
|
||||
expect(host.files).toContain('/demo/WORKSPACE');
|
||||
expect(host.files).toContain('/demo/src/BUILD.bazel');
|
||||
expect(host.files).toContain('/WORKSPACE');
|
||||
expect(host.files).toContain('/src/BUILD.bazel');
|
||||
});
|
||||
|
||||
it('should download rules_sass in WORKSPACE', () => {
|
||||
const content = host.readContent('/demo/WORKSPACE');
|
||||
it('should download and load rules_sass in WORKSPACE', () => {
|
||||
const content = host.readContent('/WORKSPACE');
|
||||
expect(content).toContain('RULES_SASS_VERSION');
|
||||
expect(content).toContain('io_bazel_rules_sass');
|
||||
});
|
||||
|
||||
it('should load sass_repositories in WORKSPACE', () => {
|
||||
const content = host.readContent('/demo/WORKSPACE');
|
||||
expect(content).toContain(
|
||||
'load("@io_bazel_rules_sass//sass:sass_repositories.bzl", "sass_repositories")');
|
||||
expect(content).toContain('sass_repositories()');
|
||||
});
|
||||
|
||||
it('should add sass_binary rules in src/BUILD', () => {
|
||||
const content = host.readContent('/demo/src/BUILD.bazel');
|
||||
const content = host.readContent('/src/BUILD.bazel');
|
||||
expect(content).toContain('load("@io_bazel_rules_sass//:defs.bzl", "sass_binary")');
|
||||
expect(content).toMatch(/sass_binary\((.*\n)+\)/);
|
||||
});
|
||||
|
||||
it('should add SASS targets to assets of ng_module in src/BUILD', () => {
|
||||
const content = host.readContent('/demo/src/BUILD.bazel');
|
||||
expect(content).toContain(`
|
||||
assets = glob([
|
||||
"**/*.css",
|
||||
"**/*.html",
|
||||
]) + [":style_" + x for x in glob(["**/*.scss"])],`);
|
||||
expect(content).toContain('glob(["**/*.scss"])');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user