Compare commits
225 Commits
7.2.1
...
ts_library
Author | SHA1 | Date | |
---|---|---|---|
cf4edbce40 | |||
73dcd72afb | |||
7bdf3fe41c | |||
38343a2388 | |||
45bf911df8 | |||
ab2bf83398 | |||
2b9cc8503d | |||
a58fd210e9 | |||
6940992932 | |||
c1c87462fd | |||
73616ab237 | |||
a0cdefb5fb | |||
f8ad4d1e99 | |||
5a582a8afd | |||
e172e97e13 | |||
0d6913f037 | |||
896cf35afb | |||
1f7d3b9a57 | |||
8a08ff1571 | |||
50cf2ac6d8 | |||
80967ce82c | |||
1a85de302d | |||
808898d015 | |||
f59f18c13e | |||
a570fdf0f0 | |||
e7d5c12ea4 | |||
1e5e62ef56 | |||
bac71ef419 | |||
da1d19b40f | |||
9a81f0d9a8 | |||
c61ea1d5bd | |||
47665c9937 | |||
3b7a571cc5 | |||
f983e99fb2 | |||
4f009e7a03 | |||
29bff0f02e | |||
3a31a2795e | |||
ce3a746644 | |||
bc02e31185 | |||
6072ca87e1 | |||
9460218f36 | |||
850b86749c | |||
a24120011e | |||
d49d1e7d73 | |||
2e5752eb06 | |||
da8ee29e72 | |||
693045165c | |||
e62eeed7d4 | |||
06e5bf1661 | |||
60fecc1284 | |||
b6510a320b | |||
fa53150692 | |||
b5c2ef2877 | |||
ddd8cd0573 | |||
cfb41452ce | |||
f1fb62d1e5 | |||
d12db4e114 | |||
68bdbf0520 | |||
857fcfe048 | |||
60fb27c4ab | |||
4c0104c846 | |||
72f2428cd8 | |||
d577b8df75 | |||
cd0451305a | |||
e8495b460f | |||
2c9f0139a3 | |||
fc881390d0 | |||
1ec01d6758 | |||
4bb5f638bc | |||
0897ebac9e | |||
657cf733a2 | |||
d6aca79410 | |||
e4c899e4ba | |||
5e6e96d844 | |||
9c2f6d72d6 | |||
638375b7ca | |||
c5b67b95b7 | |||
78bc21c63a | |||
48a03fcc80 | |||
6fff74e576 | |||
978ffa9d32 | |||
6a9a48b0ac | |||
da2880d7c4 | |||
fca185e191 | |||
e082fc24b2 | |||
133fe5e561 | |||
2afbcafab7 | |||
605f450251 | |||
9260b5e0b4 | |||
9a128a8068 | |||
cd51775390 | |||
fe4d3a1619 | |||
b73d6781da | |||
0c6fa1df52 | |||
ce51dfb499 | |||
8ebdb437dc | |||
b0caf02d4f | |||
091a8a6fd5 | |||
61bc61fc59 | |||
df292c2ce0 | |||
51e716b6f2 | |||
94893accdb | |||
6c6d43086f | |||
8c3f98fdbb | |||
89a39bb22a | |||
12f509c218 | |||
76104f395f | |||
18ccfc6d73 | |||
3ea9f0974a | |||
a100472b5d | |||
a6f7fe394a | |||
e31afb7118 | |||
d505468fb7 | |||
f854eb7dec | |||
b0f3c20a4c | |||
26a8c095d0 | |||
bccf8da35f | |||
acb2caced0 | |||
96f4969a2b | |||
aebec4b156 | |||
9277142d54 | |||
b78351cc7e | |||
885f1af509 | |||
b05baa59e0 | |||
ad6569c744 | |||
feebe03523 | |||
e8a57f0ee6 | |||
a6ba789599 | |||
3bafc002ae | |||
afaea110c7 | |||
dffcb9cda3 | |||
ee60c7679a | |||
e0e92cfef6 | |||
65e72e958e | |||
76ed13bffe | |||
7374dfd1fa | |||
c5ab3e8fd2 | |||
142553abc6 | |||
6003145422 | |||
3cf1b62722 | |||
5a0deb8d69 | |||
4694c93315 | |||
94c0b7a362 | |||
0136274f33 | |||
8934b736c8 | |||
11325bad4a | |||
d0c3e252a3 | |||
e1e4887feb | |||
6f9881f85f | |||
6beeb76ac0 | |||
1f904bffbc | |||
9b2b9b3bef | |||
91a8a4fb28 | |||
582395b8f5 | |||
76580b98f0 | |||
5609764886 | |||
29e3144269 | |||
d68ad3e617 | |||
d6cfe2ed7e | |||
eb1aae4043 | |||
935ce63b73 | |||
31fdff7121 | |||
c7d1890aaa | |||
c7346bfdba | |||
d2b2d813d5 | |||
72fc0a747d | |||
cea3b8f885 | |||
5e7c71e51c | |||
4e17212d44 | |||
c3aa24c3f9 | |||
1de4031d9c | |||
1c39ad38d3 | |||
0b9094ec63 | |||
ac157170c8 | |||
f4a9f5dae8 | |||
2a6108af97 | |||
37b716b298 | |||
f6c91c5a5a | |||
b621a69cda | |||
3fba6eff79 | |||
b9c6df6da7 | |||
1a7f92c423 | |||
a0840242d7 | |||
090801532e | |||
b541c48688 | |||
b432eb1cae | |||
cc5fb914bc | |||
d72ae7b71e | |||
aaa97f11d7 | |||
4b5b1f6d16 | |||
c2f19515d6 | |||
6e7c46af1b | |||
917c09cfc8 | |||
f5471107d9 | |||
e6ab55daa0 | |||
7db05c408c | |||
483f8250bf | |||
8e530a03b6 | |||
b47c43af45 | |||
4fc41517d1 | |||
c80071dd59 | |||
98472da03f | |||
7ac8b02ec5 | |||
0199e26167 | |||
17291e66a0 | |||
7de7b7a16a | |||
bb5ddee710 | |||
04ca3bcf10 | |||
c1dacdd890 | |||
9de9c8ad03 | |||
4613864fc8 | |||
ac5f5ed0a6 | |||
8122970f63 | |||
8473d68ea8 | |||
4caf6540d1 | |||
a75c734471 | |||
e775313188 | |||
996435b79a | |||
45880532bf | |||
e08feb7e54 | |||
8a3cebde8b | |||
d80c32310a | |||
3ac249b2ab | |||
e94e7eef4c | |||
654055b22f |
4
.bazelrc
4
.bazelrc
@ -43,7 +43,9 @@ test --nolegacy_external_runfiles
|
||||
###############################
|
||||
|
||||
# Releases should always be stamped with version control info
|
||||
build:release --workspace_status_command=./tools/bazel_stamp_vars.sh
|
||||
# This command assumes node on the path and is a workaround for
|
||||
# https://github.com/bazelbuild/bazel/issues/4802
|
||||
build:release --workspace_status_command="node ./tools/bazel_stamp_vars.js"
|
||||
|
||||
###############################
|
||||
# Output #
|
||||
|
@ -5,9 +5,9 @@
|
||||
|
||||
# VM creation:
|
||||
# In Google Cloud Platform, create a Compute Engine instance.
|
||||
# We recommend machine type n1-highcpu-16 (16 vCPUs, 14.4 GB memory).
|
||||
# Use a windows boot disk with container support such as
|
||||
# "Windows Server version 1803 Datacenter Core for Containers".
|
||||
# We recommend machine type n1-standard-16 (16 vCPUs, 60 GB memory).
|
||||
# Use a recent windows boot disk with container support such as
|
||||
# "Windows Server version 1803 Datacenter Core for Containers", and add a 128GB disk.
|
||||
# Give it a name, then click "Create".
|
||||
|
||||
# VM setup:
|
||||
@ -54,6 +54,8 @@ Write-Host "Installing Git for Windows."
|
||||
Invoke-WebRequest -Uri https://github.com/git-for-windows/git/releases/download/v2.19.1.windows.1/Git-2.19.1-64-bit.exe -OutFile git.exe
|
||||
.\git.exe /VERYSILENT /NORESTART /NOCANCEL /SP- /CLOSEAPPLICATIONS /RESTARTAPPLICATIONS /COMPONENTS="icons,ext\reg\shellhere,assoc,assoc_sh" /DIR="C:\git"
|
||||
Add-Path "C:\git\bin"
|
||||
# Sleep for 15s while git is installed. Trying to remove the git.exe before it finishes install causes an error.
|
||||
Start-Sleep -s 15
|
||||
Remove-Item git.exe
|
||||
|
||||
# Download NSSM (https://nssm.cc/) to run the BuildKite agent as a service.
|
||||
|
32
CHANGELOG.md
32
CHANGELOG.md
@ -1,3 +1,35 @@
|
||||
<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)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **bazel:** Add [@bazel](https://github.com/bazel)/bazel to dev deps ([#28032](https://github.com/angular/angular/issues/28032)) ([5a0deb8](https://github.com/angular/angular/commit/5a0deb8))
|
||||
* **bazel:** Add /bazel-out to .gitignore ([#27874](https://github.com/angular/angular/issues/27874)) ([b05baa5](https://github.com/angular/angular/commit/b05baa5))
|
||||
* **bazel:** Add ibazel to deps of Bazel project ([#28090](https://github.com/angular/angular/issues/28090)) ([605f450](https://github.com/angular/angular/commit/605f450))
|
||||
* **bazel:** Bazel schematics should add router package ([#28141](https://github.com/angular/angular/issues/28141)) ([06e5bf1](https://github.com/angular/angular/commit/06e5bf1))
|
||||
* **bazel:** flat module misses AMD module name on windows ([#27839](https://github.com/angular/angular/issues/27839)) ([935ce63](https://github.com/angular/angular/commit/935ce63))
|
||||
* **bazel:** incorrectly always uses ngc-wrapped from "npm" workspace ([#28137](https://github.com/angular/angular/issues/28137)) ([d12db4e](https://github.com/angular/angular/commit/d12db4e))
|
||||
* **bazel:** ng_package creates invalid typings reexport on windows ([#27829](https://github.com/angular/angular/issues/27829)) ([4caf654](https://github.com/angular/angular/commit/4caf654))
|
||||
* **bazel:** packager not properly removing amd directives on windows ([#27829](https://github.com/angular/angular/issues/27829)) ([8473d68](https://github.com/angular/angular/commit/8473d68))
|
||||
* **bazel:** protractor rule does not run spec files with underscore ([#28022](https://github.com/angular/angular/issues/28022)) ([65e72e9](https://github.com/angular/angular/commit/65e72e9))
|
||||
* **bazel:** protractor utils cannot start server on windows ([#27915](https://github.com/angular/angular/issues/27915)) ([9de9c8a](https://github.com/angular/angular/commit/9de9c8a))
|
||||
* **bazel:** replay compilation uses wrong compiler for building esm5 ([#28053](https://github.com/angular/angular/issues/28053)) ([cd04513](https://github.com/angular/angular/commit/cd04513))
|
||||
* **bazel:** ts_web_test_suite now properly includes init_browser_spec.js ([#27965](https://github.com/angular/angular/issues/27965)) ([ce51dfb](https://github.com/angular/angular/commit/ce51dfb))
|
||||
* **service-worker:** navigation urls backwards compatibility ([#27244](https://github.com/angular/angular/issues/27244)) ([d49d1e7](https://github.com/angular/angular/commit/d49d1e7))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **forms:** export NumberValueAccessor & RangeValueAccessor directives ([#27743](https://github.com/angular/angular/issues/27743)) ([ac15717](https://github.com/angular/angular/commit/ac15717))
|
||||
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* **platform-server:** use shared `DomElementSchemaRegistry` instance ([#28150](https://github.com/angular/angular/issues/28150)) ([#28151](https://github.com/angular/angular/issues/28151)) ([ce3a746](https://github.com/angular/angular/commit/ce3a746))
|
||||
|
||||
|
||||
|
||||
<a name="7.2.1"></a>
|
||||
## [7.2.1](https://github.com/angular/angular/compare/7.2.0...7.2.1) (2019-01-16)
|
||||
|
||||
|
2
LICENSE
2
LICENSE
@ -1,6 +1,6 @@
|
||||
The MIT License
|
||||
|
||||
Copyright (c) 2014-2018 Google, Inc. http://angular.io
|
||||
Copyright (c) 2010-2019 Google LLC. http://angular.io/license
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
@ -26,8 +26,8 @@ ARG AIO_GITHUB_ORGANIZATION=angular
|
||||
ARG TEST_AIO_GITHUB_ORGANIZATION=test-org
|
||||
ARG AIO_GITHUB_REPO=angular
|
||||
ARG TEST_AIO_GITHUB_REPO=test-repo
|
||||
ARG AIO_GITHUB_TEAM_SLUGS=team,aio-contributors
|
||||
ARG TEST_AIO_GITHUB_TEAM_SLUGS=team,aio-contributors
|
||||
ARG AIO_GITHUB_TEAM_SLUGS=aio-contributors
|
||||
ARG TEST_AIO_GITHUB_TEAM_SLUGS=aio-contributors
|
||||
ARG AIO_NGINX_HOSTNAME=$AIO_DOMAIN_NAME
|
||||
ARG TEST_AIO_NGINX_HOSTNAME=$TEST_AIO_DOMAIN_NAME
|
||||
ARG AIO_NGINX_PORT_HTTP=80
|
||||
|
@ -16,7 +16,7 @@ const ITEMS: Item[] = [
|
||||
|
||||
const FETCH_LATENCY = 500;
|
||||
|
||||
/** Simulate a data service that retrieves crises from a server */
|
||||
/** Simulate a data service that retrieves items from a server */
|
||||
@Injectable()
|
||||
export class ItemService implements OnDestroy {
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
@description
|
||||
The MIT License
|
||||
|
||||
Copyright (c) 2014-2018 Google, Inc.
|
||||
Copyright (c) 2010-2019 Google LLC. http://angular.io/license
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
@ -8,7 +8,7 @@
|
||||
<div class="feature-section">
|
||||
<div class="feature-header">
|
||||
<div class="text-headline">Cross Platform</div>
|
||||
<img src="generated/images/marketing/features/feature-icon.svg" height="70px">
|
||||
<img src="generated/images/marketing/features/feature-icon.svg" height="70px" alt="">
|
||||
</div>
|
||||
<div class="feature-row">
|
||||
|
||||
@ -34,7 +34,7 @@
|
||||
<div class="feature-section">
|
||||
<div class="feature-header">
|
||||
<div class="text-headline">Speed and Performance</div>
|
||||
<img src="generated/images/marketing/features/feature-icon.svg" height="70px">
|
||||
<img src="generated/images/marketing/features/feature-icon.svg" height="70px" alt="">
|
||||
</div>
|
||||
<div class="feature-row">
|
||||
|
||||
@ -59,7 +59,7 @@
|
||||
<div class="feature-section">
|
||||
<div class="feature-header">
|
||||
<div class="text-headline">Productivity</div>
|
||||
<img src="generated/images/marketing/features/feature-icon.svg" height="70px">
|
||||
<img src="generated/images/marketing/features/feature-icon.svg" height="70px" alt="">
|
||||
</div>
|
||||
<div class="feature-row">
|
||||
|
||||
@ -84,7 +84,7 @@
|
||||
<div class="feature-section">
|
||||
<div class="feature-header">
|
||||
<div class="text-headline">Full Development Story</div>
|
||||
<img src="generated/images/marketing/features/feature-icon.svg" height="70px">
|
||||
<img src="generated/images/marketing/features/feature-icon.svg" height="70px" alt="">
|
||||
</div>
|
||||
<div class="feature-row">
|
||||
|
||||
|
@ -9,7 +9,7 @@
|
||||
|
||||
<!-- LOGO -->
|
||||
<div class="hero-logo">
|
||||
<img src="assets/images/logos/angular/angular.svg"/>
|
||||
<img src="assets/images/logos/angular/angular.svg" alt="Angular"/>
|
||||
</div>
|
||||
|
||||
<!-- CONTAINER -->
|
||||
@ -104,7 +104,7 @@
|
||||
<div layout="row" layout-xs="column" class="home-row">
|
||||
<a href="guide/quickstart">
|
||||
<div class="card">
|
||||
<img src="generated/images/marketing/home/code-icon.svg" height="70px">
|
||||
<img src="generated/images/marketing/home/code-icon.svg" height="70px" alt="Angular quickstart">
|
||||
<div class="card-text-container">
|
||||
<div class="text-headline">Get Started</div>
|
||||
<p>Start building your Angular application.</p>
|
||||
|
@ -20,7 +20,7 @@
|
||||
<div class="presskit-row">
|
||||
<div class="presskit-inner">
|
||||
<div class="presskit-image-container">
|
||||
<img src="assets/images/logos/angular/angular.svg" alt="Angular">
|
||||
<img src="assets/images/logos/angular/angular.svg" alt="Full color logo Angular">
|
||||
</div>
|
||||
<div>
|
||||
<h3 class="l-space-left-3">FULL COLOR LOGO</h3>
|
||||
@ -40,7 +40,7 @@
|
||||
<div class="presskit-inner">
|
||||
<div class="presskit-image-container">
|
||||
<div>
|
||||
<img src="assets/images/logos/angular/angular_solidBlack.svg">
|
||||
<img src="assets/images/logos/angular/angular_solidBlack.svg" alt="Black logo Angular">
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
@ -61,7 +61,7 @@
|
||||
<div class="presskit-inner">
|
||||
<div class="presskit-image-container">
|
||||
<div>
|
||||
<img src="assets/images/logos/angular/angular_whiteTransparent.svg" class="transparent-img-bg">
|
||||
<img src="assets/images/logos/angular/angular_whiteTransparent.svg" class="transparent-img-bg" alt="Transparent logo Angular">
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
|
@ -17,7 +17,7 @@
|
||||
"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 02d2ec250",
|
||||
"extract-cli-command-docs": "node tools/transforms/cli-docs-package/extract-cli-commands.js 4ae713b5a",
|
||||
"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",
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
<mat-sidenav-container class="sidenav-container mat-drawer-container mat-sidenav-container" role="main">
|
||||
<mat-sidenav-content class="mat-drawer-content mat-sidenav-content">
|
||||
<section class="sidenav-content" role="content">
|
||||
<section class="sidenav-content" role="article">
|
||||
<aio-doc-viewer>
|
||||
<div class="content">
|
||||
<div class="nf-container l-flex-wrap flex-center">
|
||||
|
@ -52,7 +52,7 @@
|
||||
</div>
|
||||
</mat-sidenav>
|
||||
|
||||
<section class="sidenav-content" [id]="pageId" role="content">
|
||||
<main class="sidenav-content" [id]="pageId" role="main">
|
||||
<aio-mode-banner [mode]="deployment.mode" [version]="versionInfo"></aio-mode-banner>
|
||||
<aio-doc-viewer [class.no-animations]="isStarting"
|
||||
[doc]="currentDocument"
|
||||
@ -62,7 +62,7 @@
|
||||
(docRendered)="onDocRendered()">
|
||||
</aio-doc-viewer>
|
||||
<aio-dt [on]="dtOn" [(doc)]="currentDocument"></aio-dt>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
</mat-sidenav-container>
|
||||
|
||||
|
@ -1071,7 +1071,7 @@ describe('AppComponent', () => {
|
||||
|
||||
it('should set the id of the doc viewer container based on the current doc', () => {
|
||||
initializeTest(false);
|
||||
const container = fixture.debugElement.query(By.css('section.sidenav-content'));
|
||||
const container = fixture.debugElement.query(By.css('main.sidenav-content'));
|
||||
|
||||
navigateTo('guide/pipes');
|
||||
expect(component.pageId).toEqual('guide-pipes');
|
||||
@ -1088,7 +1088,7 @@ describe('AppComponent', () => {
|
||||
|
||||
it('should not be affected by changes to the query', () => {
|
||||
initializeTest(false);
|
||||
const container = fixture.debugElement.query(By.css('section.sidenav-content'));
|
||||
const container = fixture.debugElement.query(By.css('main.sidenav-content'));
|
||||
|
||||
navigateTo('guide/pipes');
|
||||
navigateTo('guide/other?search=http');
|
||||
|
@ -46,7 +46,7 @@ export interface Announcement {
|
||||
template: `
|
||||
<div class="homepage-container" *ngIf="announcement">
|
||||
<div class="announcement-bar">
|
||||
<img [src]="announcement.imageUrl">
|
||||
<img [src]="announcement.imageUrl" alt="">
|
||||
<p [innerHTML]="announcement.message"></p>
|
||||
<a class="button" [href]="announcement.linkUrl">Learn More</a>
|
||||
</div>
|
||||
|
@ -1,23 +1,20 @@
|
||||
|
||||
<div class="grid-fluid">
|
||||
<div class="footer-block" *ngFor="let node of nodes">
|
||||
<h3>{{node.title}}</h3>
|
||||
<ul>
|
||||
<li *ngFor="let item of node.children">
|
||||
<a class="link" [href]="item.url"
|
||||
[title]="item.tooltip || item.title">{{ item.title }}</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="grid-fluid">
|
||||
<div class="footer-block" *ngFor="let node of nodes">
|
||||
<h3>{{node.title}}</h3>
|
||||
<ul>
|
||||
<li *ngFor="let item of node.children">
|
||||
<a class="link" [href]="item.url" [title]="item.tooltip || item.title">{{ item.title }}</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
Powered by Google ©2010-2018.
|
||||
Code licensed under an <a href="license" title="License text" >MIT-style License</a>.
|
||||
Documentation licensed under
|
||||
<a href="http://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>.
|
||||
</p>
|
||||
<p>
|
||||
Version {{versionInfo?.full}}.
|
||||
</p>
|
||||
<!-- TODO: twitter widget (but only on pages that use twitter) -->
|
||||
<p>
|
||||
Super-powered by Google ©2010-2019.
|
||||
Code licensed under an <a href="license" title="License text">MIT-style License</a>.
|
||||
Documentation licensed under
|
||||
<a href="http://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>.
|
||||
</p>
|
||||
<p>
|
||||
Version {{versionInfo?.full}}.
|
||||
</p>
|
@ -1,9 +1,3 @@
|
||||
/*
|
||||
Copyright 2016 Google Inc. All Rights Reserved.
|
||||
Use of this source code is governed by an MIT-style license that
|
||||
can be found in the LICENSE file at http://angular.io/license
|
||||
*/
|
||||
|
||||
import { NgZone, Injectable } from '@angular/core';
|
||||
import { ConnectableObservable, Observable, race, ReplaySubject, timer } from 'rxjs';
|
||||
import { concatMap, first, publishReplay } from 'rxjs/operators';
|
||||
|
@ -1,9 +1,3 @@
|
||||
/*
|
||||
Copyright 2016 Google Inc. All Rights Reserved.
|
||||
Use of this source code is governed by an MIT-style license that
|
||||
can be found in the LICENSE file at http://angular.io/license
|
||||
*/
|
||||
|
||||
import {NgZone} from '@angular/core';
|
||||
import {Observable} from 'rxjs';
|
||||
|
||||
|
@ -93,7 +93,7 @@
|
||||
<div class="background-sky hero"></div>
|
||||
<section id="intro" style="text-shadow: 1px 1px #1976d2;">
|
||||
<div class="hero-logo">
|
||||
<img src="assets/images/logos/angular/angular.svg" width="250" height="250">
|
||||
<img src="assets/images/logos/angular/angular.svg" width="250" height="250" alt="Angular">
|
||||
</div>
|
||||
<div class="homepage-container">
|
||||
<div class="hero-headline">One framework.<br>Mobile & desktop.</div>
|
||||
|
@ -268,13 +268,13 @@ section#intro {
|
||||
|
||||
aio-shell {
|
||||
&.page-resources, &.page-events, &.page-features, &.page-presskit, &.page-contribute {
|
||||
section {
|
||||
main {
|
||||
padding: 0rem 0rem 3rem;
|
||||
}
|
||||
}
|
||||
|
||||
&.page-home {
|
||||
section {
|
||||
main {
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
|
@ -89,7 +89,7 @@ aio-notification {
|
||||
}
|
||||
|
||||
&.page-home, &.page-resources, &.page-events, &.page-features, &.page-presskit, &.page-contribute {
|
||||
section {
|
||||
main {
|
||||
padding-top: $notificationHeight;
|
||||
}
|
||||
}
|
||||
|
@ -1,3 +1,10 @@
|
||||
/*
|
||||
Copyright Google LLC. All Rights Reserved.
|
||||
Use of this source code is governed by an MIT-style license that
|
||||
can be found in the LICENSE file at http://angular.io/license
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* WEB VERSION FOR CURRENT ANGULAR BUILD
|
||||
* (based on systemjs.config.js in angular.io)
|
||||
@ -94,9 +101,3 @@
|
||||
});
|
||||
|
||||
})(this);
|
||||
|
||||
/*
|
||||
Copyright 2016 Google Inc. All Rights Reserved.
|
||||
Use of this source code is governed by an MIT-style license that
|
||||
can be found in the LICENSE file at http://angular.io/license
|
||||
*/
|
||||
|
@ -1,3 +1,9 @@
|
||||
/*
|
||||
Copyright Google LLC. All Rights Reserved.
|
||||
Use of this source code is governed by an MIT-style license that
|
||||
can be found in the LICENSE file at http://angular.io/license
|
||||
*/
|
||||
|
||||
/**
|
||||
* WEB ANGULAR VERSION
|
||||
* (based on systemjs.config.js in angular.io)
|
||||
@ -80,9 +86,3 @@
|
||||
});
|
||||
|
||||
})(this);
|
||||
|
||||
/*
|
||||
Copyright 2016 Google Inc. All Rights Reserved.
|
||||
Use of this source code is governed by an MIT-style license that
|
||||
can be found in the LICENSE file at http://angular.io/license
|
||||
*/
|
||||
|
@ -51,9 +51,9 @@ class StackblitzBuilder {
|
||||
}
|
||||
|
||||
_buildCopyrightStrings() {
|
||||
var copyright = 'Copyright 2017-2018 Google Inc. All Rights Reserved.\n'
|
||||
+ 'Use of this source code is governed by an MIT-style license that\n'
|
||||
+ 'can be found in the LICENSE file at http://angular.io/license';
|
||||
var copyright = 'Copyright Google LLC. All Rights Reserved.\n' +
|
||||
'Use of this source code is governed by an MIT-style license that\n' +
|
||||
'can be found in the LICENSE file at http://angular.io/license';
|
||||
var pad = '\n\n';
|
||||
this.copyrights.jsCss = `${pad}/*\n${copyright}\n*/`;
|
||||
this.copyrights.html = `${pad}<!-- \n${copyright}\n-->`;
|
||||
|
@ -133,7 +133,7 @@ Bazel supports the ability to include non-hermetic information from the version
|
||||
You can see an overview at https://www.kchodorow.com/blog/2017/03/27/stamping-your-builds/
|
||||
In our repo, here is how it's configured:
|
||||
|
||||
1) In `tools/bazel_stamp_vars.sh` we run the `git` commands to generate our versioning info.
|
||||
1) In `tools/bazel_stamp_vars.js` we run the `git` commands to generate our versioning info.
|
||||
1) In `.bazelrc` we register this script as the value for the `workspace_status_command` flag. Bazel will run the script when it needs to stamp a binary.
|
||||
|
||||
Note that Bazel has a `--stamp` argument to `yarn bazel build`, but this has no effect since our stamping takes place in Skylark rules. See https://github.com/bazelbuild/bazel/issues/1054
|
||||
|
@ -65,6 +65,7 @@ What kind of problem is this?
|
||||
## Caretaker Triage Process (Primary Triage)
|
||||
|
||||
It is the caretaker's responsibility to assign `comp: *` to each new issue as they come in.
|
||||
Issues that haven't been triaged can be found by selecting the issues with no milestone.
|
||||
|
||||
If it's obvious that the issue or PR is related to a release regression, the caretaker is also responsible for assigning the `severity(5): regression` label to make the issue or PR highly visible.
|
||||
|
||||
@ -72,10 +73,12 @@ The primary triage should be done on a daily basis so that the issues become ava
|
||||
|
||||
The reason why we limit the responsibility of the caretaker to this one label is that it is likely that without domain knowledge the caretaker could mislabel issues or lack knowledge of duplicate issues.
|
||||
|
||||
Once the primary triage is done, the ng-bot automatically adds the milestone `needsTriage`.
|
||||
|
||||
|
||||
## Component's owner Triage Process
|
||||
|
||||
The component owner is responsible for assigning one of the labels from each of these categories:
|
||||
The component owner is responsible for assigning one of the labels from each of these categories to the issues that have the milestone `needsTriage`:
|
||||
|
||||
- `type: *`
|
||||
- `frequency: *`
|
||||
@ -83,6 +86,8 @@ The component owner is responsible for assigning one of the labels from each of
|
||||
|
||||
We've adopted the issue categorization based on [user pain](http://www.lostgarden.com/2008/05/improving-bug-triage-with-user-pain.html) used by AngularJS. In this system every issue is assigned frequency and severity based on which the total user pain score is calculated.
|
||||
|
||||
The issues with type `type: feature`, `type: refactor` and `type: RFC / Discussion / question` do not require a frequency and severity.
|
||||
|
||||
Following is the definition of various frequency and severity levels:
|
||||
|
||||
1. `freq(score): *` – How often does this issue come up? How many developers does this affect?
|
||||
@ -105,10 +110,16 @@ These criteria are then used to calculate a "user pain" score as follows:
|
||||
|
||||
This score can then be used to estimate the impact of the issue which helps with prioritization.
|
||||
|
||||
Once the component's owner triage is done, the ng-bot automatically changes the milestone from `needsTriage` to `Backlog`.
|
||||
|
||||
|
||||
## Triaging PRs
|
||||
|
||||
Triaging PRs is the same as triaging issues, except that PRs have additional label categories that should be used to signal their state.
|
||||
Triaging PRs is the same as triaging issues, except that the labels `frequency: *` and `severity: *` are replaced by:
|
||||
- `effort*`
|
||||
- `risk: *`
|
||||
|
||||
PRs also have additional label categories that should be used to signal their state.
|
||||
|
||||
Every triaged PR must have a `pr_action` label assigned to it:
|
||||
|
||||
@ -138,7 +149,7 @@ To communicate the target we use the following labels:
|
||||
* `PR target: LTS-only`: the PR should be merged only into the active LTS branch(es). Only security and critical fixes are allowed in these branches. Always send a new PR targeting just the LTS branch and request review approval from @IgorMinar.
|
||||
* `PR target: TBD`: the target is yet to be determined.
|
||||
|
||||
If a PR is missing the "PR target: *" label, or if the label is set to "TBD" when the PR is sent to the caretaker, the caretaker should reject the PR and request the appropriate target label to be applied before the PR is merged.
|
||||
If a PR is missing the `PR target: *` label, or if the label is set to "TBD" when the PR is sent to the caretaker, the caretaker should reject the PR and request the appropriate target label to be applied before the PR is merged.
|
||||
|
||||
|
||||
## PR Approvals
|
||||
@ -161,3 +172,10 @@ Only issues with `cla:yes` should be merged into master.
|
||||
|
||||
### `aio: preview`
|
||||
Applying this label to a PR makes the angular.io preview available regardless of the author. [More info](../aio/aio-builds-setup/docs/overview--security-model.md)
|
||||
|
||||
### `PR action: merge-assistance`
|
||||
This label can be added to let the caretaker know that the PR needs special attention.
|
||||
There should always be a comment added to the PR to explain why the caretaker's assistance is needed.
|
||||
The comment should be formatted like this: `merge-assistance: <explain what kind of assistance you need, and if not obvious why>`
|
||||
|
||||
For example, the PR owner might not be a Googler and needs help to run g3sync; or one of the checks is failing due to external causes and the PR should still be merged.
|
@ -3,7 +3,7 @@
|
||||
"master": {
|
||||
"uncompressed": {
|
||||
"runtime": 1497,
|
||||
"main": 187112,
|
||||
"main": 187437,
|
||||
"polyfills": 59608
|
||||
}
|
||||
}
|
||||
@ -12,7 +12,7 @@
|
||||
"master": {
|
||||
"uncompressed": {
|
||||
"runtime": 1440,
|
||||
"main": 507677,
|
||||
"main": 584077,
|
||||
"polyfills": 38390
|
||||
}
|
||||
}
|
||||
|
53
integration/bazel-schematics/package.json.replace
Normal file
53
integration/bazel-schematics/package.json.replace
Normal file
@ -0,0 +1,53 @@
|
||||
{
|
||||
"name": "demo",
|
||||
"version": "0.0.0",
|
||||
"scripts": {
|
||||
"ng": "ng",
|
||||
"start": "ng serve",
|
||||
"build": "ng build",
|
||||
"test": "ng test",
|
||||
"lint": "ng lint",
|
||||
"e2e": "ng e2e"
|
||||
},
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@angular/animations": "file:../angular/dist/packages-dist/animations",
|
||||
"@angular/common": "file:../angular/dist/packages-dist/common",
|
||||
"@angular/compiler": "file:../angular/dist/packages-dist/compiler",
|
||||
"@angular/core": "file:../angular/dist/packages-dist/core",
|
||||
"@angular/forms": "file:../angular/dist/packages-dist/forms",
|
||||
"@angular/platform-browser": "file:../angular/dist/packages-dist/platform-browser",
|
||||
"@angular/platform-browser-dynamic": "file:../angular/dist/packages-dist/platform-browser-dynamic",
|
||||
"@angular/router": "file:../angular/dist/packages-dist/router",
|
||||
"core-js": "^2.5.4",
|
||||
"rxjs": "~6.3.3",
|
||||
"tslib": "^1.9.0",
|
||||
"zone.js": "~0.8.26"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@angular-devkit/build-angular": "~0.12.0",
|
||||
"@angular/bazel": "file:../angular/dist/packages-dist/bazel",
|
||||
"@angular/cli": "~7.2.1",
|
||||
"@angular/compiler-cli": "file:../angular/dist/packages-dist/compiler-cli",
|
||||
"@angular/language-service": "file:../angular/dist/packages-dist/language-service",
|
||||
"@bazel/bazel": "^0.21.0",
|
||||
"@bazel/ibazel": "^0.9.0",
|
||||
"@bazel/karma": "^0.22.1",
|
||||
"@bazel/typescript": "^0.22.1",
|
||||
"@types/node": "~8.9.4",
|
||||
"@types/jasmine": "~2.8.8",
|
||||
"@types/jasminewd2": "~2.0.3",
|
||||
"codelyzer": "~4.5.0",
|
||||
"jasmine-core": "~2.99.1",
|
||||
"jasmine-spec-reporter": "~4.2.1",
|
||||
"karma": "~3.1.1",
|
||||
"karma-chrome-launcher": "~2.2.0",
|
||||
"karma-coverage-istanbul-reporter": "~2.0.1",
|
||||
"karma-jasmine": "~1.1.2",
|
||||
"karma-jasmine-html-reporter": "^0.2.2",
|
||||
"protractor": "~5.4.0",
|
||||
"ts-node": "~7.0.0",
|
||||
"tslint": "~5.11.0",
|
||||
"typescript": "~3.2.2"
|
||||
}
|
||||
}
|
@ -13,6 +13,7 @@ function testBazel() {
|
||||
# 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.
|
||||
|
@ -73,7 +73,7 @@
|
||||
"@angular-devkit/architect" "^0.10.6"
|
||||
"@angular-devkit/core" "^7.0.4"
|
||||
"@angular-devkit/schematics" "^7.0.4"
|
||||
"@bazel/typescript" "^0.21.0"
|
||||
"@bazel/typescript" "^0.22.1"
|
||||
"@schematics/angular" "^7.0.4"
|
||||
"@types/node" "6.0.84"
|
||||
semver "^5.6.0"
|
||||
@ -115,12 +115,13 @@
|
||||
"@bazel/bazel-linux_x64" "0.21.0"
|
||||
"@bazel/bazel-win32_x64" "0.21.0"
|
||||
|
||||
"@bazel/typescript@^0.21.0":
|
||||
version "0.21.0"
|
||||
resolved "https://registry.yarnpkg.com/@bazel/typescript/-/typescript-0.21.0.tgz#41c304f77a42c6a016280d0f4c20e0749c3f4b2a"
|
||||
integrity sha512-ASXj0RFybmqoa3LwqkTU3gNkX9bY9wL/VDNo5hlp9pynYWl4RMpe9V3m/qDIdtSuLJ+qD+Z3FKT/OcpWQHMlYA==
|
||||
"@bazel/typescript@^0.22.1":
|
||||
version "0.22.1"
|
||||
resolved "https://registry.yarnpkg.com/@bazel/typescript/-/typescript-0.22.1.tgz#b52c00e8560019e2f9d273d45c04785e0ec9d9bd"
|
||||
integrity sha512-88DaCCnNg8rPlKP0eAQEZuoiJkEPeiItpUS3oBR1sFQNBRJb56D25ahK8+N6LJk4qaH+ZQ1/AHOPDhfEEWvDzA==
|
||||
dependencies:
|
||||
protobufjs "5.0.3"
|
||||
semver "5.6.0"
|
||||
source-map-support "0.5.9"
|
||||
tsutils "2.27.2"
|
||||
|
||||
@ -1907,7 +1908,7 @@ semver-intersect@1.4.0:
|
||||
dependencies:
|
||||
semver "^5.0.0"
|
||||
|
||||
"semver@2 || 3 || 4 || 5", semver@^5.0.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0:
|
||||
"semver@2 || 3 || 4 || 5", semver@5.6.0, semver@^5.0.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0:
|
||||
version "5.6.0"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
|
||||
integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==
|
||||
|
@ -37,9 +37,14 @@ ts_devserver(
|
||||
|
||||
load("@build_bazel_rules_nodejs//:defs.bzl", "nodejs_binary", "rollup_bundle")
|
||||
|
||||
filegroup(
|
||||
name = "empty_node_modules",
|
||||
)
|
||||
|
||||
rollup_bundle(
|
||||
name = "bundle",
|
||||
entry_point = "src/main",
|
||||
node_modules = ":empty_node_modules",
|
||||
deps = ["//src"],
|
||||
)
|
||||
|
||||
|
@ -2,24 +2,24 @@
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
"@bazel/bazel-darwin_x64@0.18.0":
|
||||
version "0.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@bazel/bazel-darwin_x64/-/bazel-darwin_x64-0.18.0.tgz#bab437605a702279d42f59caa4741bb327eb7dbc"
|
||||
integrity sha512-um2OzgLL2Gd/W6joOpvrSTcqpnupliPNpwe/uE7sB0huBSJ/4Im0w2IlCTI6C7OfgMcbpUj4YxgUa9T6u6WY6w==
|
||||
"@bazel/bazel-darwin_x64@0.20.0":
|
||||
version "0.20.0"
|
||||
resolved "https://registry.yarnpkg.com/@bazel/bazel-darwin_x64/-/bazel-darwin_x64-0.20.0.tgz#648d61c32a3c5fccb7bf70b753071b6e54b11f21"
|
||||
integrity sha512-zeoeVK504341GfnaxdaB4pFzQV0YOK1HLiYj3/ocamPFxAJRh9abvKB8iOpqD5Oal0j7VsINxnXCjovp9a4urA==
|
||||
|
||||
"@bazel/bazel-linux_x64@0.18.0":
|
||||
version "0.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@bazel/bazel-linux_x64/-/bazel-linux_x64-0.18.0.tgz#0c02b2404ec95c180e17615cc7079ee07df48a69"
|
||||
integrity sha512-Rq8X8bL6SgQvbOHnfPhSgF6hp+f6Fbt2w6pRmBlFvV1J+CeUyrSrrRXfnnO1bjIuq05Ur3mV8ULA0qK6rtA5lQ==
|
||||
"@bazel/bazel-linux_x64@0.20.0":
|
||||
version "0.20.0"
|
||||
resolved "https://registry.yarnpkg.com/@bazel/bazel-linux_x64/-/bazel-linux_x64-0.20.0.tgz#2568628a0d0b85dcc69d0ab701b1d6e10551357d"
|
||||
integrity sha512-PpHzoEqfXty8dc1/p1tVFXtbPyrE1n0N79QmYePjJ5mJMyW7uBF/zV4IajYY8+IpJEcDVq5v4BavSexOmVJRmA==
|
||||
|
||||
"@bazel/bazel-win32_x64@0.18.0":
|
||||
version "0.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@bazel/bazel-win32_x64/-/bazel-win32_x64-0.18.0.tgz#aa4575fb00066dcf59a6d464971774dea6a0bafd"
|
||||
integrity sha512-U2TbfK8B7dc3JqXSFwj2oXCQrxEaSzCCUkAHjAOIGOKzx/HLKIKs+NJj9IQkLLr7BsMU+Qqzo8aqo11E+Vs+aA==
|
||||
"@bazel/bazel-win32_x64@0.20.0":
|
||||
version "0.20.0"
|
||||
resolved "https://registry.yarnpkg.com/@bazel/bazel-win32_x64/-/bazel-win32_x64-0.20.0.tgz#af7d041dae4c066e7aa8618949e2de1aad07495e"
|
||||
integrity sha512-3bqHXFBvLnbvNzr1KCQ1zryTYvHMoQffaWVekbckgPyT2VPEj3abuB91+DrRYmZdPjcgPYnjnyanxZHDkKuF2g==
|
||||
|
||||
"@bazel/bazel@file:../../node_modules/@bazel/bazel":
|
||||
version "0.18.0"
|
||||
version "0.20.0"
|
||||
optionalDependencies:
|
||||
"@bazel/bazel-darwin_x64" "0.18.0"
|
||||
"@bazel/bazel-linux_x64" "0.18.0"
|
||||
"@bazel/bazel-win32_x64" "0.18.0"
|
||||
"@bazel/bazel-darwin_x64" "0.20.0"
|
||||
"@bazel/bazel-linux_x64" "0.20.0"
|
||||
"@bazel/bazel-win32_x64" "0.20.0"
|
||||
|
@ -30,7 +30,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@angular-devkit/build-angular": "~0.12.0-rc.0",
|
||||
"@angular/cli": "~7.2.0-rc.0",
|
||||
"@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",
|
||||
|
@ -10,6 +10,14 @@
|
||||
"@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"
|
||||
integrity sha512-1ozBP0ZAApkSfuPpZ7b9vShU8smNxb98jW+65S12cPOxv1bVVxCj5sTmC3sSfXapgq/pMzblbaVSKOG7Ajz0vQ==
|
||||
dependencies:
|
||||
"@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"
|
||||
@ -94,41 +102,50 @@
|
||||
rxjs "6.3.3"
|
||||
source-map "0.7.3"
|
||||
|
||||
"@angular-devkit/schematics@7.2.0-rc.0":
|
||||
version "7.2.0-rc.0"
|
||||
resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-7.2.0-rc.0.tgz#e902b86705067dc92880cfb0a97ed7863c0c484f"
|
||||
integrity sha512-p6YDFZxLuDorqwYDOeenfJf5QdXD7NL+NHx39FxjeJMM/AT0AcmHmLc2ARm+Z/HRuqlZIG2pvvPeaEAptkTV0Q==
|
||||
"@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:
|
||||
"@angular-devkit/core" "7.2.0-rc.0"
|
||||
ajv "6.6.2"
|
||||
chokidar "2.0.4"
|
||||
fast-json-stable-stringify "2.0.0"
|
||||
rxjs "6.3.3"
|
||||
source-map "0.7.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==
|
||||
dependencies:
|
||||
"@angular-devkit/core" "7.2.1"
|
||||
rxjs "6.3.3"
|
||||
|
||||
"@angular/animations@file:../../dist/packages-dist/animations":
|
||||
version "7.2.0-rc.0"
|
||||
version "7.2.0"
|
||||
dependencies:
|
||||
tslib "^1.9.0"
|
||||
|
||||
"@angular/cli@~7.2.0-rc.0":
|
||||
version "7.2.0-rc.0"
|
||||
resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-7.2.0-rc.0.tgz#fd008e760dcdf6e037d5dd6634eab28657cb5edf"
|
||||
integrity sha512-01nwPfXvRAybwnl2AU/kXw0Qh2YtiQteAP/uRC/34WhWuU5AbJMFY5cPkmPTdVzJAAmxz1vKnbewpcHYZDkhmw==
|
||||
"@angular/cli@file:../../node_modules/@angular/cli":
|
||||
version "7.2.1"
|
||||
dependencies:
|
||||
"@angular-devkit/architect" "0.12.0-rc.0"
|
||||
"@angular-devkit/core" "7.2.0-rc.0"
|
||||
"@angular-devkit/schematics" "7.2.0-rc.0"
|
||||
"@schematics/angular" "7.2.0-rc.0"
|
||||
"@schematics/update" "0.12.0-rc.0"
|
||||
"@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"
|
||||
inquirer "6.2.1"
|
||||
opn "5.3.0"
|
||||
semver "5.5.1"
|
||||
symbol-observable "1.2.0"
|
||||
|
||||
"@angular/common@file:../../dist/packages-dist/common":
|
||||
version "7.2.0-rc.0"
|
||||
version "7.2.0"
|
||||
dependencies:
|
||||
tslib "^1.9.0"
|
||||
|
||||
"@angular/compiler-cli@file:../../dist/packages-dist/compiler-cli":
|
||||
version "7.2.0-rc.0"
|
||||
version "7.2.0"
|
||||
dependencies:
|
||||
canonical-path "1.0.0"
|
||||
chokidar "^1.4.2"
|
||||
@ -143,40 +160,40 @@
|
||||
yargs "9.0.1"
|
||||
|
||||
"@angular/compiler@file:../../dist/packages-dist/compiler":
|
||||
version "7.2.0-rc.0"
|
||||
version "7.2.0"
|
||||
dependencies:
|
||||
tslib "^1.9.0"
|
||||
|
||||
"@angular/core@file:../../dist/packages-dist/core":
|
||||
version "7.2.0-rc.0"
|
||||
version "7.2.0"
|
||||
dependencies:
|
||||
tslib "^1.9.0"
|
||||
|
||||
"@angular/forms@file:../../dist/packages-dist/forms":
|
||||
version "7.2.0-rc.0"
|
||||
version "7.2.0"
|
||||
dependencies:
|
||||
tslib "^1.9.0"
|
||||
|
||||
"@angular/http@file:../../dist/packages-dist/http":
|
||||
version "7.2.0-rc.0"
|
||||
version "7.2.0"
|
||||
dependencies:
|
||||
tslib "^1.9.0"
|
||||
|
||||
"@angular/language-service@file:../../dist/packages-dist/language-service":
|
||||
version "7.2.0-rc.0"
|
||||
version "7.2.0"
|
||||
|
||||
"@angular/platform-browser-dynamic@file:../../dist/packages-dist/platform-browser-dynamic":
|
||||
version "7.2.0-rc.0"
|
||||
version "7.2.0"
|
||||
dependencies:
|
||||
tslib "^1.9.0"
|
||||
|
||||
"@angular/platform-browser@file:../../dist/packages-dist/platform-browser":
|
||||
version "7.2.0-rc.0"
|
||||
version "7.2.0"
|
||||
dependencies:
|
||||
tslib "^1.9.0"
|
||||
|
||||
"@angular/router@file:../../dist/packages-dist/router":
|
||||
version "7.2.0-rc.0"
|
||||
version "7.2.0"
|
||||
dependencies:
|
||||
tslib "^1.9.0"
|
||||
|
||||
@ -279,22 +296,22 @@
|
||||
tree-kill "1.2.0"
|
||||
webpack-sources "1.2.0"
|
||||
|
||||
"@schematics/angular@7.2.0-rc.0":
|
||||
version "7.2.0-rc.0"
|
||||
resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-7.2.0-rc.0.tgz#0546363c302d3887d87c7e9c0e86fc0a3e3c8dfb"
|
||||
integrity sha512-2XljCin8qP0uryoRNNjMQzIDgHidAgkqIcx6NoywNiZs0u1O//n+EflNogmoJ15HvLRh5wmF9d6400Wn2vEFmw==
|
||||
"@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==
|
||||
dependencies:
|
||||
"@angular-devkit/core" "7.2.0-rc.0"
|
||||
"@angular-devkit/schematics" "7.2.0-rc.0"
|
||||
"@angular-devkit/core" "7.2.1"
|
||||
"@angular-devkit/schematics" "7.2.1"
|
||||
typescript "3.2.2"
|
||||
|
||||
"@schematics/update@0.12.0-rc.0":
|
||||
version "0.12.0-rc.0"
|
||||
resolved "https://registry.yarnpkg.com/@schematics/update/-/update-0.12.0-rc.0.tgz#2936bd61804d117c885e1f5c0f3569ef8fe05d33"
|
||||
integrity sha512-YkVmVJw/ZUE42ki47Y8DZ6HLFmELJmk8BnHFIrtQQm702dZvQQkivfDMSWaaJ3r7837maepIFIcCzyPXbz+RqQ==
|
||||
"@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==
|
||||
dependencies:
|
||||
"@angular-devkit/core" "7.2.0-rc.0"
|
||||
"@angular-devkit/schematics" "7.2.0-rc.0"
|
||||
"@angular-devkit/core" "7.2.1"
|
||||
"@angular-devkit/schematics" "7.2.1"
|
||||
"@yarnpkg/lockfile" "1.1.0"
|
||||
ini "1.3.5"
|
||||
pacote "9.1.1"
|
||||
@ -324,11 +341,6 @@
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.18.tgz#1d3ca764718915584fcd9f6344621b7672665c67"
|
||||
integrity sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ==
|
||||
|
||||
"@types/node@^6.0.46":
|
||||
version "6.14.2"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-6.14.2.tgz#40b3dbb1221c7d66802cbcc32fe3b85e54569c77"
|
||||
integrity sha512-JWB3xaVfsfnFY8Ofc9rTB/op0fqqTSqy4vBcVk1LuRJvta7KTX+D//fCkiTMeLGhdr2EbFZzQjC97gvmPilk9Q==
|
||||
|
||||
"@types/node@~8.9.4":
|
||||
version "8.9.5"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-8.9.5.tgz#162b864bc70be077e6db212b322754917929e976"
|
||||
@ -339,10 +351,10 @@
|
||||
resolved "https://registry.yarnpkg.com/@types/q/-/q-0.0.32.tgz#bd284e57c84f1325da702babfc82a5328190c0c5"
|
||||
integrity sha1-vShOV8hPEyXacCur/IKlMoGQwMU=
|
||||
|
||||
"@types/selenium-webdriver@^2.53.35", "@types/selenium-webdriver@~2.53.39":
|
||||
version "2.53.43"
|
||||
resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-2.53.43.tgz#2de3d718819bc20165754c4a59afb7e9833f6707"
|
||||
integrity sha512-UBYHWph6P3tutkbXpW6XYg9ZPbTKjw/YC2hGG1/GEvWwTbvezBUv3h+mmUFw79T3RFPnmedpiXdOBbXX+4l0jg==
|
||||
"@types/selenium-webdriver@^3.0.0":
|
||||
version "3.0.14"
|
||||
resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-3.0.14.tgz#0b20a2370e6b1b8322c9c3dfcaa409e6c7c0c0a9"
|
||||
integrity sha512-4GbNCDs98uHCT/OMv40qQC/OpoPbYn9XdXeTiFwHBBFO6eJhYEPUu2zDKirXSbHlvDV8oZ9l8EQ+HrEx/YS9DQ==
|
||||
|
||||
"@types/source-list-map@*":
|
||||
version "0.1.2"
|
||||
@ -554,12 +566,7 @@ acorn@^5.0.0, acorn@^5.6.2:
|
||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279"
|
||||
integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==
|
||||
|
||||
adm-zip@0.4.4:
|
||||
version "0.4.4"
|
||||
resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.4.tgz#a61ed5ae6905c3aea58b3a657d25033091052736"
|
||||
integrity sha1-ph7VrmkFw66lizplfSUDMJEFJzY=
|
||||
|
||||
adm-zip@^0.4.7, adm-zip@^0.4.9:
|
||||
adm-zip@^0.4.9:
|
||||
version "0.4.13"
|
||||
resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.13.tgz#597e2f8cc3672151e1307d3e95cddbc75672314a"
|
||||
integrity sha512-fERNJX8sOXfel6qCBCMPvZLzENBEhZTzKqg6vrOW5pvoEaQuJhRU4ndTAh6lHOxn1I6jnz2NHra56ZODM751uw==
|
||||
@ -569,14 +576,6 @@ after@0.8.2:
|
||||
resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f"
|
||||
integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=
|
||||
|
||||
agent-base@2:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-2.1.1.tgz#d6de10d5af6132d5bd692427d46fc538539094c7"
|
||||
integrity sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=
|
||||
dependencies:
|
||||
extend "~3.0.0"
|
||||
semver "~5.0.1"
|
||||
|
||||
agent-base@4, agent-base@^4.1.0, agent-base@~4.2.0:
|
||||
version "4.2.1"
|
||||
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9"
|
||||
@ -1045,10 +1044,10 @@ block-stream@*:
|
||||
dependencies:
|
||||
inherits "~2.0.0"
|
||||
|
||||
blocking-proxy@0.0.5:
|
||||
version "0.0.5"
|
||||
resolved "https://registry.yarnpkg.com/blocking-proxy/-/blocking-proxy-0.0.5.tgz#462905e0dcfbea970f41aa37223dda9c07b1912b"
|
||||
integrity sha1-RikF4Nz76pcPQao3Ij3anAexkSs=
|
||||
blocking-proxy@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/blocking-proxy/-/blocking-proxy-1.0.1.tgz#81d6fd1fe13a4c0d6957df7f91b75e98dac40cb2"
|
||||
integrity sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA==
|
||||
dependencies:
|
||||
minimist "^1.2.0"
|
||||
|
||||
@ -1203,6 +1202,13 @@ browserslist@^4.3.6:
|
||||
electron-to-chromium "^1.3.92"
|
||||
node-releases "^1.1.1"
|
||||
|
||||
browserstack@^1.5.1:
|
||||
version "1.5.2"
|
||||
resolved "https://registry.yarnpkg.com/browserstack/-/browserstack-1.5.2.tgz#17d8bb76127a1cc0ea416424df80d218f803673f"
|
||||
integrity sha512-+6AFt9HzhKykcPF79W6yjEUJcdvZOV0lIXdkORXMJftGrDl0OKWqRF4GHqpDNkxiceDT/uB7Fb/aDwktvXX7dg==
|
||||
dependencies:
|
||||
https-proxy-agent "^2.2.1"
|
||||
|
||||
buffer-alloc-unsafe@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0"
|
||||
@ -1754,6 +1760,11 @@ core-js@^2.2.0, core-js@^2.4.0:
|
||||
"core-js@file:../../node_modules/core-js":
|
||||
version "2.5.7"
|
||||
|
||||
core-js@~2.3.0:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.3.0.tgz#fab83fbb0b2d8dc85fa636c4b9d34c75420c6d65"
|
||||
integrity sha1-+rg/uwstjchfpjbEudNMdUIMbWU=
|
||||
|
||||
core-util-is@1.0.2, core-util-is@~1.0.0:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
|
||||
@ -1912,7 +1923,7 @@ debug@*, debug@^4.1.0:
|
||||
dependencies:
|
||||
ms "^2.1.1"
|
||||
|
||||
debug@2, debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8:
|
||||
debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8:
|
||||
version "2.6.9"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
|
||||
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
|
||||
@ -2282,6 +2293,11 @@ es6-promise@^4.0.3:
|
||||
resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.5.tgz#da6d0d5692efb461e082c14817fe2427d8f5d054"
|
||||
integrity sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg==
|
||||
|
||||
es6-promise@~3.0.2:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.0.2.tgz#010d5858423a5f118979665f46486a95c6ee2bb6"
|
||||
integrity sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=
|
||||
|
||||
es6-promisify@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203"
|
||||
@ -2507,7 +2523,7 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2:
|
||||
assign-symbols "^1.0.0"
|
||||
is-extendable "^1.0.1"
|
||||
|
||||
extend@3, extend@^3.0.0, extend@~3.0.0, extend@~3.0.2:
|
||||
extend@^3.0.0, extend@~3.0.2:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
|
||||
integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
|
||||
@ -3223,15 +3239,6 @@ https-browserify@^1.0.0:
|
||||
resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
|
||||
integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
|
||||
|
||||
https-proxy-agent@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz#35f7da6c48ce4ddbfa264891ac593ee5ff8671e6"
|
||||
integrity sha1-NffabEjOTdv6JkiRrFk+5f+GceY=
|
||||
dependencies:
|
||||
agent-base "2"
|
||||
debug "2"
|
||||
extend "3"
|
||||
|
||||
https-proxy-agent@^2.2.1:
|
||||
version "2.2.1"
|
||||
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0"
|
||||
@ -3288,6 +3295,11 @@ image-size@~0.5.0:
|
||||
resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c"
|
||||
integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=
|
||||
|
||||
immediate@~3.0.5:
|
||||
version "3.0.6"
|
||||
resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b"
|
||||
integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=
|
||||
|
||||
import-cwd@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9"
|
||||
@ -3820,7 +3832,12 @@ istanbul@0.4.5:
|
||||
which "^1.1.1"
|
||||
wordwrap "^1.0.0"
|
||||
|
||||
jasmine-core@~2.99.0, jasmine-core@~2.99.1:
|
||||
jasmine-core@~2.8.0:
|
||||
version "2.8.0"
|
||||
resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.8.0.tgz#bcc979ae1f9fd05701e45e52e65d3a5d63f1a24e"
|
||||
integrity sha1-vMl5rh+f0FcB5F5S5l06XWPxok4=
|
||||
|
||||
jasmine-core@~2.99.1:
|
||||
version "2.99.1"
|
||||
resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.99.1.tgz#e6400df1e6b56e130b61c4bcd093daa7f6e8ca15"
|
||||
integrity sha1-5kAN8ea1bhMLYcS80JPap/boyhU=
|
||||
@ -3832,14 +3849,14 @@ jasmine-spec-reporter@~4.2.1:
|
||||
dependencies:
|
||||
colors "1.1.2"
|
||||
|
||||
jasmine@^2.5.3:
|
||||
version "2.99.0"
|
||||
resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-2.99.0.tgz#8ca72d102e639b867c6489856e0e18a9c7aa42b7"
|
||||
integrity sha1-jKctEC5jm4Z8ZImFbg4YqceqQrc=
|
||||
jasmine@2.8.0:
|
||||
version "2.8.0"
|
||||
resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-2.8.0.tgz#6b089c0a11576b1f16df11b80146d91d4e8b8a3e"
|
||||
integrity sha1-awicChFXax8W3xG4AUbZHU6Lij4=
|
||||
dependencies:
|
||||
exit "^0.1.2"
|
||||
glob "^7.0.6"
|
||||
jasmine-core "~2.99.0"
|
||||
jasmine-core "~2.8.0"
|
||||
|
||||
jasminewd2@^2.1.0:
|
||||
version "2.2.0"
|
||||
@ -3939,6 +3956,17 @@ jsprim@^1.2.2:
|
||||
json-schema "0.2.3"
|
||||
verror "1.10.0"
|
||||
|
||||
jszip@^3.1.3:
|
||||
version "3.1.5"
|
||||
resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.1.5.tgz#e3c2a6c6d706ac6e603314036d43cd40beefdf37"
|
||||
integrity sha512-5W8NUaFRFRqTOL7ZDDrx5qWHJyBXy6velVudIzQUSoqAAYqzSh2Z7/m0Rf1QbmQJccegD0r+YZxBjzqoBiEeJQ==
|
||||
dependencies:
|
||||
core-js "~2.3.0"
|
||||
es6-promise "~3.0.2"
|
||||
lie "~3.1.0"
|
||||
pako "~1.0.2"
|
||||
readable-stream "~2.0.6"
|
||||
|
||||
karma-chrome-launcher@~2.2.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz#cf1b9d07136cc18fe239327d24654c3dbc368acf"
|
||||
@ -4092,6 +4120,13 @@ license-webpack-plugin@2.0.4:
|
||||
"@types/webpack-sources" "^0.1.5"
|
||||
webpack-sources "^1.2.0"
|
||||
|
||||
lie@~3.1.0:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz#9a436b2cc7746ca59de7a41fa469b3efb76bd87e"
|
||||
integrity sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=
|
||||
dependencies:
|
||||
immediate "~3.0.5"
|
||||
|
||||
load-json-file@^1.0.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
|
||||
@ -4949,11 +4984,6 @@ optionator@^0.8.1:
|
||||
type-check "~0.3.2"
|
||||
wordwrap "~1.0.0"
|
||||
|
||||
options@>=0.0.5:
|
||||
version "0.0.6"
|
||||
resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f"
|
||||
integrity sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=
|
||||
|
||||
original@^1.0.0:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f"
|
||||
@ -5100,6 +5130,11 @@ pacote@9.1.1:
|
||||
unique-filename "^1.1.1"
|
||||
which "^1.3.1"
|
||||
|
||||
pako@~1.0.2:
|
||||
version "1.0.8"
|
||||
resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.8.tgz#6844890aab9c635af868ad5fecc62e8acbba3ea4"
|
||||
integrity sha512-6i0HVbUfcKaTv+EG8ZTr75az7GFXcLYk9UyLEg7Notv/Ma+z/UG3TCoz6GiNeOrn1E/e63I0X/Hpw18jHOTUnA==
|
||||
|
||||
pako@~1.0.5:
|
||||
version "1.0.7"
|
||||
resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.7.tgz#2473439021b57f1516c82f58be7275ad8ef1bb27"
|
||||
@ -5385,6 +5420,11 @@ preserve@^0.2.0:
|
||||
resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
|
||||
integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=
|
||||
|
||||
process-nextick-args@~1.0.6:
|
||||
version "1.0.7"
|
||||
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
|
||||
integrity sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=
|
||||
|
||||
process-nextick-args@~2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
|
||||
@ -5423,22 +5463,22 @@ protoduck@^5.0.1:
|
||||
genfun "^5.0.0"
|
||||
|
||||
"protractor@file:../../node_modules/protractor":
|
||||
version "5.1.2"
|
||||
version "5.4.2"
|
||||
dependencies:
|
||||
"@types/node" "^6.0.46"
|
||||
"@types/q" "^0.0.32"
|
||||
"@types/selenium-webdriver" "~2.53.39"
|
||||
blocking-proxy "0.0.5"
|
||||
"@types/selenium-webdriver" "^3.0.0"
|
||||
blocking-proxy "^1.0.0"
|
||||
browserstack "^1.5.1"
|
||||
chalk "^1.1.3"
|
||||
glob "^7.0.3"
|
||||
jasmine "^2.5.3"
|
||||
jasmine "2.8.0"
|
||||
jasminewd2 "^2.1.0"
|
||||
optimist "~0.6.0"
|
||||
q "1.4.1"
|
||||
saucelabs "~1.3.0"
|
||||
selenium-webdriver "3.0.1"
|
||||
saucelabs "^1.5.0"
|
||||
selenium-webdriver "3.6.0"
|
||||
source-map-support "~0.4.0"
|
||||
webdriver-js-extender "^1.0.0"
|
||||
webdriver-js-extender "2.1.0"
|
||||
webdriver-manager "^12.0.6"
|
||||
|
||||
proxy-addr@~2.0.4:
|
||||
@ -5659,6 +5699,18 @@ read-pkg@^2.0.0:
|
||||
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"
|
||||
integrity sha1-j5A0HmilPMySh4jaz80Rs265t44=
|
||||
dependencies:
|
||||
core-util-is "~1.0.0"
|
||||
inherits "~2.0.1"
|
||||
isarray "~1.0.0"
|
||||
process-nextick-args "~1.0.6"
|
||||
string_decoder "~0.10.x"
|
||||
util-deprecate "~1.0.1"
|
||||
|
||||
readdirp@^2.0.0:
|
||||
version "2.2.1"
|
||||
resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
|
||||
@ -5932,23 +5984,18 @@ sass-loader@7.1.0:
|
||||
pify "^3.0.0"
|
||||
semver "^5.5.0"
|
||||
|
||||
saucelabs@~1.3.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/saucelabs/-/saucelabs-1.3.0.tgz#d240e8009df7fa87306ec4578a69ba3b5c424fee"
|
||||
integrity sha1-0kDoAJ33+ocwbsRXimm6O1xCT+4=
|
||||
saucelabs@^1.5.0:
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/saucelabs/-/saucelabs-1.5.0.tgz#9405a73c360d449b232839919a86c396d379fd9d"
|
||||
integrity sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==
|
||||
dependencies:
|
||||
https-proxy-agent "^1.0.0"
|
||||
https-proxy-agent "^2.2.1"
|
||||
|
||||
sax@0.5.x:
|
||||
version "0.5.8"
|
||||
resolved "https://registry.yarnpkg.com/sax/-/sax-0.5.8.tgz#d472db228eb331c2506b0e8c15524adb939d12c1"
|
||||
integrity sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE=
|
||||
|
||||
sax@0.6.x:
|
||||
version "0.6.1"
|
||||
resolved "https://registry.yarnpkg.com/sax/-/sax-0.6.1.tgz#563b19c7c1de892e09bfc4f2fc30e3c27f0952b9"
|
||||
integrity sha1-VjsZx8HeiS4Jv8Ty/DDjwn8JUrk=
|
||||
|
||||
sax@>=0.6.0, sax@^1.2.4:
|
||||
version "1.2.4"
|
||||
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
|
||||
@ -5991,27 +6038,16 @@ select-hose@^2.0.0:
|
||||
resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
|
||||
integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=
|
||||
|
||||
selenium-webdriver@3.0.1:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-3.0.1.tgz#a2dea5da4a97f6672e89e7ca7276cefa365147a7"
|
||||
integrity sha1-ot6l2kqX9mcuiefKcnbO+jZRR6c=
|
||||
selenium-webdriver@3.6.0, selenium-webdriver@^3.0.1:
|
||||
version "3.6.0"
|
||||
resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz#2ba87a1662c020b8988c981ae62cb2a01298eafc"
|
||||
integrity sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==
|
||||
dependencies:
|
||||
adm-zip "^0.4.7"
|
||||
jszip "^3.1.3"
|
||||
rimraf "^2.5.4"
|
||||
tmp "0.0.30"
|
||||
xml2js "^0.4.17"
|
||||
|
||||
selenium-webdriver@^2.53.2:
|
||||
version "2.53.3"
|
||||
resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-2.53.3.tgz#d29ff5a957dff1a1b49dc457756e4e4bfbdce085"
|
||||
integrity sha1-0p/1qVff8aG0ncRXdW5OS/vc4IU=
|
||||
dependencies:
|
||||
adm-zip "0.4.4"
|
||||
rimraf "^2.2.8"
|
||||
tmp "0.0.24"
|
||||
ws "^1.0.1"
|
||||
xml2js "0.4.4"
|
||||
|
||||
selfsigned@^1.9.1:
|
||||
version "1.10.4"
|
||||
resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.4.tgz#cdd7eccfca4ed7635d47a08bf2d5d3074092e2cd"
|
||||
@ -6043,11 +6079,6 @@ semver@5.5.1:
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477"
|
||||
integrity sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==
|
||||
|
||||
semver@~5.0.1:
|
||||
version "5.0.3"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-5.0.3.tgz#77466de589cd5d3c95f138aa78bc569a3cb5d27a"
|
||||
integrity sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=
|
||||
|
||||
semver@~5.3.0:
|
||||
version "5.3.0"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
|
||||
@ -6602,6 +6633,11 @@ string_decoder@^1.0.0:
|
||||
dependencies:
|
||||
safe-buffer "~5.1.0"
|
||||
|
||||
string_decoder@~0.10.x:
|
||||
version "0.10.31"
|
||||
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
|
||||
integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
|
||||
|
||||
string_decoder@~1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
|
||||
@ -6787,11 +6823,6 @@ timers-browserify@^2.0.4:
|
||||
dependencies:
|
||||
setimmediate "^1.0.4"
|
||||
|
||||
tmp@0.0.24:
|
||||
version "0.0.24"
|
||||
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.24.tgz#d6a5e198d14a9835cc6f2d7c3d9e302428c8cf12"
|
||||
integrity sha1-1qXhmNFKmDXMby18PZ4wJCjIzxI=
|
||||
|
||||
tmp@0.0.30:
|
||||
version "0.0.30"
|
||||
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.30.tgz#72419d4a8be7d6ce75148fd8b324e593a711c2ed"
|
||||
@ -7000,11 +7031,6 @@ uglifyjs-webpack-plugin@^1.2.4:
|
||||
webpack-sources "^1.1.0"
|
||||
worker-farm "^1.5.2"
|
||||
|
||||
ultron@1.0.x:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa"
|
||||
integrity sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=
|
||||
|
||||
ultron@~1.1.0:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c"
|
||||
@ -7179,13 +7205,13 @@ wbuf@^1.1.0, wbuf@^1.7.2:
|
||||
dependencies:
|
||||
minimalistic-assert "^1.0.0"
|
||||
|
||||
webdriver-js-extender@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/webdriver-js-extender/-/webdriver-js-extender-1.0.0.tgz#81c533a9e33d5bfb597b4e63e2cdb25b54777515"
|
||||
integrity sha1-gcUzqeM9W/tZe05j4s2yW1R3dRU=
|
||||
webdriver-js-extender@2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz#57d7a93c00db4cc8d556e4d3db4b5db0a80c3bb7"
|
||||
integrity sha512-lcUKrjbBfCK6MNsh7xaY2UAUmZwe+/ib03AjVOpFobX4O7+83BUveSrLfU0Qsyb1DaKJdQRbuU+kM9aZ6QUhiQ==
|
||||
dependencies:
|
||||
"@types/selenium-webdriver" "^2.53.35"
|
||||
selenium-webdriver "^2.53.2"
|
||||
"@types/selenium-webdriver" "^3.0.0"
|
||||
selenium-webdriver "^3.0.1"
|
||||
|
||||
webdriver-manager@^12.0.6:
|
||||
version "12.1.0"
|
||||
@ -7396,14 +7422,6 @@ wrappy@1:
|
||||
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
|
||||
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
|
||||
|
||||
ws@^1.0.1:
|
||||
version "1.1.5"
|
||||
resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51"
|
||||
integrity sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==
|
||||
dependencies:
|
||||
options ">=0.0.5"
|
||||
ultron "1.0.x"
|
||||
|
||||
ws@~3.3.1:
|
||||
version "3.3.3"
|
||||
resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2"
|
||||
@ -7413,14 +7431,6 @@ ws@~3.3.1:
|
||||
safe-buffer "~5.1.0"
|
||||
ultron "~1.1.0"
|
||||
|
||||
xml2js@0.4.4:
|
||||
version "0.4.4"
|
||||
resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.4.tgz#3111010003008ae19240eba17497b57c729c555d"
|
||||
integrity sha1-MREBAAMAiuGSQOuhdJe1fHKcVV0=
|
||||
dependencies:
|
||||
sax "0.6.x"
|
||||
xmlbuilder ">=1.0.0"
|
||||
|
||||
xml2js@^0.4.17:
|
||||
version "0.4.19"
|
||||
resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7"
|
||||
@ -7429,11 +7439,6 @@ xml2js@^0.4.17:
|
||||
sax ">=0.6.0"
|
||||
xmlbuilder "~9.0.1"
|
||||
|
||||
xmlbuilder@>=1.0.0:
|
||||
version "10.1.1"
|
||||
resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-10.1.1.tgz#8cae6688cc9b38d850b7c8d3c0a4161dcaf475b0"
|
||||
integrity sha512-OyzrcFLL/nb6fMGHbiRDuPup9ljBycsdCypwuyg5AAHvyWzGfChJpCXMG88AGTIMFhGZ9RccFN1e6lhg3hkwKg==
|
||||
|
||||
xmlbuilder@~9.0.1:
|
||||
version "9.0.7"
|
||||
resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d"
|
||||
|
@ -28,7 +28,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@angular-devkit/build-angular": "~0.10.3",
|
||||
"@angular/cli": "7.0.3",
|
||||
"@angular/cli": "file:../../node_modules/@angular/cli",
|
||||
"@angular/compiler-cli": "file:../../dist/packages-dist/compiler-cli",
|
||||
"@angular/language-service": "file:../../dist/packages-dist/language-service",
|
||||
"@types/jasmine": "~2.8.3",
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,10 +1,11 @@
|
||||
import nodeResolve from 'rollup-plugin-node-resolve';
|
||||
|
||||
export default {
|
||||
entry: 'dist/src/main.js',
|
||||
sourceMap: true,
|
||||
input: 'dist/src/main.js',
|
||||
output: {
|
||||
sourceMap: true,
|
||||
},
|
||||
treeshake: true,
|
||||
moduleName: 'main',
|
||||
plugins: [
|
||||
nodeResolve()
|
||||
]
|
||||
|
@ -4,10 +4,11 @@ import commonjs from 'rollup-plugin-commonjs';
|
||||
// a real app should make a common bundle for libraries instead of bundling them
|
||||
// in both the main module & the lazy module, but we don't care about size here
|
||||
export default {
|
||||
entry: 'dist/src/lazy.module.js',
|
||||
sourceMap: true,
|
||||
input: 'dist/src/lazy.module.js',
|
||||
output: {
|
||||
sourceMap: true,
|
||||
},
|
||||
treeshake: true,
|
||||
moduleName: 'lazy',
|
||||
plugins: [
|
||||
nodeResolve()
|
||||
]
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1 +1,3 @@
|
||||
*.js
|
||||
*.js
|
||||
tsserver.log
|
||||
ti-*.log
|
||||
|
@ -1,260 +0,0 @@
|
||||
[
|
||||
{
|
||||
"type": "response",
|
||||
"command": "configure",
|
||||
"success": true
|
||||
},
|
||||
{
|
||||
"type": "response",
|
||||
"command": "compilerOptionsForInferredProjects",
|
||||
"success": true,
|
||||
"body": true
|
||||
},
|
||||
{
|
||||
"type": "response",
|
||||
"command": "completions",
|
||||
"success": true,
|
||||
"body": [
|
||||
{
|
||||
"name": "anchor",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "anchor"
|
||||
},
|
||||
{
|
||||
"name": "big",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "big"
|
||||
},
|
||||
{
|
||||
"name": "blink",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "blink"
|
||||
},
|
||||
{
|
||||
"name": "bold",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "bold"
|
||||
},
|
||||
{
|
||||
"name": "charAt",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "charAt"
|
||||
},
|
||||
{
|
||||
"name": "charCodeAt",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "charCodeAt"
|
||||
},
|
||||
{
|
||||
"name": "codePointAt",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "codePointAt"
|
||||
},
|
||||
{
|
||||
"name": "concat",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "concat"
|
||||
},
|
||||
{
|
||||
"name": "endsWith",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "endsWith"
|
||||
},
|
||||
{
|
||||
"name": "fixed",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "fixed"
|
||||
},
|
||||
{
|
||||
"name": "fontcolor",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "fontcolor"
|
||||
},
|
||||
{
|
||||
"name": "fontsize",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "fontsize"
|
||||
},
|
||||
{
|
||||
"name": "includes",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "includes"
|
||||
},
|
||||
{
|
||||
"name": "indexOf",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "indexOf"
|
||||
},
|
||||
{
|
||||
"name": "italics",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "italics"
|
||||
},
|
||||
{
|
||||
"name": "lastIndexOf",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "lastIndexOf"
|
||||
},
|
||||
{
|
||||
"name": "length",
|
||||
"kind": "property",
|
||||
"kindModifiers": "",
|
||||
"sortText": "length"
|
||||
},
|
||||
{
|
||||
"name": "link",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "link"
|
||||
},
|
||||
{
|
||||
"name": "localeCompare",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "localeCompare"
|
||||
},
|
||||
{
|
||||
"name": "match",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "match"
|
||||
},
|
||||
{
|
||||
"name": "normalize",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "normalize"
|
||||
},
|
||||
{
|
||||
"name": "repeat",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "repeat"
|
||||
},
|
||||
{
|
||||
"name": "replace",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "replace"
|
||||
},
|
||||
{
|
||||
"name": "search",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "search"
|
||||
},
|
||||
{
|
||||
"name": "slice",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "slice"
|
||||
},
|
||||
{
|
||||
"name": "small",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "small"
|
||||
},
|
||||
{
|
||||
"name": "split",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "split"
|
||||
},
|
||||
{
|
||||
"name": "startsWith",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "startsWith"
|
||||
},
|
||||
{
|
||||
"name": "strike",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "strike"
|
||||
},
|
||||
{
|
||||
"name": "sub",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "sub"
|
||||
},
|
||||
{
|
||||
"name": "substr",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "substr"
|
||||
},
|
||||
{
|
||||
"name": "substring",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "substring"
|
||||
},
|
||||
{
|
||||
"name": "sup",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "sup"
|
||||
},
|
||||
{
|
||||
"name": "toLocaleLowerCase",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "toLocaleLowerCase"
|
||||
},
|
||||
{
|
||||
"name": "toLocaleUpperCase",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "toLocaleUpperCase"
|
||||
},
|
||||
{
|
||||
"name": "toLowerCase",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "toLowerCase"
|
||||
},
|
||||
{
|
||||
"name": "toString",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "toString"
|
||||
},
|
||||
{
|
||||
"name": "toUpperCase",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "toUpperCase"
|
||||
},
|
||||
{
|
||||
"name": "trim",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "trim"
|
||||
},
|
||||
{
|
||||
"name": "valueOf",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "valueOf"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
@ -1,68 +0,0 @@
|
||||
[
|
||||
{
|
||||
"seq": 0,
|
||||
"type": "request",
|
||||
"command": "configure",
|
||||
"arguments": {
|
||||
"hostInfo": "vscode"
|
||||
}
|
||||
},
|
||||
{
|
||||
"seq": 1,
|
||||
"type": "request",
|
||||
"command": "compilerOptionsForInferredProjects",
|
||||
"arguments": {
|
||||
"options": {
|
||||
"module": "CommonJS",
|
||||
"target": "ES6",
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"allowNonTsExtensions": true,
|
||||
"allowJs": true,
|
||||
"jsx": "Preserve"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"seq": 4,
|
||||
"type": "request",
|
||||
"command": "open",
|
||||
"arguments": {
|
||||
"file": "$$PWD$$/project/app/app.component.ts",
|
||||
"fileContent": "import { Component } from '@angular/core';\n\n@Component({\n selector: 'my-app',\n template: `<h1>Hello {{name}}</h1>`,\n})\nexport class AppComponent { name = 'Angular'; }\n"
|
||||
}
|
||||
},
|
||||
{
|
||||
"seq": 7,
|
||||
"type": "request",
|
||||
"command": "geterr",
|
||||
"arguments": {
|
||||
"delay": 0,
|
||||
"files": [
|
||||
"$$PWD$$/project/app/app.component.ts"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"seq": 12,
|
||||
"type": "request",
|
||||
"command": "change",
|
||||
"arguments": {
|
||||
"file": "$$PWD$$/project/app/app.component.ts",
|
||||
"line": 5,
|
||||
"offset": 30,
|
||||
"endLine": 5,
|
||||
"endOffset": 30,
|
||||
"insertString": "."
|
||||
}
|
||||
},
|
||||
{
|
||||
"seq": 13,
|
||||
"type": "request",
|
||||
"command": "completions",
|
||||
"arguments": {
|
||||
"file": "$$PWD$$/project/app/app.component.ts",
|
||||
"line": 5,
|
||||
"offset": 31
|
||||
}
|
||||
}
|
||||
]
|
@ -1,45 +0,0 @@
|
||||
[
|
||||
{
|
||||
"seq": 0,
|
||||
"type": "request",
|
||||
"command": "configure",
|
||||
"arguments": {
|
||||
"hostInfo": "vscode"
|
||||
}
|
||||
},
|
||||
{
|
||||
"seq": 1,
|
||||
"type": "request",
|
||||
"command": "compilerOptionsForInferredProjects",
|
||||
"arguments": {
|
||||
"options": {
|
||||
"module": "CommonJS",
|
||||
"target": "ES6",
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"allowNonTsExtensions": true,
|
||||
"allowJs": true,
|
||||
"jsx": "Preserve"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"seq": 2,
|
||||
"type": "request",
|
||||
"command": "open",
|
||||
"arguments": {
|
||||
"file": "$$PWD$$/app/app.module.ts",
|
||||
"fileContent": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"seq": 3,
|
||||
"type": "request",
|
||||
"command": "geterr",
|
||||
"arguments": {
|
||||
"delay": 0,
|
||||
"files": [
|
||||
"$$PWD$$/app/app.module.ts"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
22
integration/language_service_plugin/generate.ts
Normal file
22
integration/language_service_plugin/generate.ts
Normal file
@ -0,0 +1,22 @@
|
||||
/**
|
||||
* @fileOverview
|
||||
* This file serves as the entry point for generating goldens file for the
|
||||
* language service integration test. It expects each golden file that needs
|
||||
* to be generated to be passed in as command line arguments.
|
||||
* For example, to generate golden file for the 'configure' request, run
|
||||
* `yarn golden configure.json`.
|
||||
* To generate multiple golden files, run
|
||||
* `yarn golden configure.json completionInfo.json`.
|
||||
*
|
||||
* This is different from just running `yarn jasmine test.js` because this
|
||||
* allows passing in arbitrary arguments.
|
||||
*/
|
||||
|
||||
import Jasmine = require('jasmine');
|
||||
|
||||
function main() {
|
||||
const jasmine = new Jasmine({});
|
||||
jasmine.execute(['test.js']);
|
||||
}
|
||||
|
||||
main()
|
@ -1,13 +1,8 @@
|
||||
[
|
||||
{
|
||||
"type": "response",
|
||||
"command": "configure",
|
||||
"success": true
|
||||
},
|
||||
{
|
||||
{
|
||||
"seq": 0,
|
||||
"type": "response",
|
||||
"command": "compilerOptionsForInferredProjects",
|
||||
"request_seq": 1,
|
||||
"success": true,
|
||||
"body": true
|
||||
}
|
||||
]
|
||||
}
|
266
integration/language_service_plugin/goldens/completionInfo.json
Normal file
266
integration/language_service_plugin/goldens/completionInfo.json
Normal file
@ -0,0 +1,266 @@
|
||||
{
|
||||
"seq": 0,
|
||||
"type": "response",
|
||||
"command": "completionInfo",
|
||||
"request_seq": 5,
|
||||
"success": true,
|
||||
"body": {
|
||||
"isGlobalCompletion": false,
|
||||
"isMemberCompletion": false,
|
||||
"isNewIdentifierLocation": false,
|
||||
"entries": [
|
||||
{
|
||||
"name": "anchor",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "anchor"
|
||||
},
|
||||
{
|
||||
"name": "big",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "big"
|
||||
},
|
||||
{
|
||||
"name": "blink",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "blink"
|
||||
},
|
||||
{
|
||||
"name": "bold",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "bold"
|
||||
},
|
||||
{
|
||||
"name": "charAt",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "charAt"
|
||||
},
|
||||
{
|
||||
"name": "charCodeAt",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "charCodeAt"
|
||||
},
|
||||
{
|
||||
"name": "codePointAt",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "codePointAt"
|
||||
},
|
||||
{
|
||||
"name": "concat",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "concat"
|
||||
},
|
||||
{
|
||||
"name": "endsWith",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "endsWith"
|
||||
},
|
||||
{
|
||||
"name": "fixed",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "fixed"
|
||||
},
|
||||
{
|
||||
"name": "fontcolor",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "fontcolor"
|
||||
},
|
||||
{
|
||||
"name": "fontsize",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "fontsize"
|
||||
},
|
||||
{
|
||||
"name": "includes",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "includes"
|
||||
},
|
||||
{
|
||||
"name": "indexOf",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "indexOf"
|
||||
},
|
||||
{
|
||||
"name": "italics",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "italics"
|
||||
},
|
||||
{
|
||||
"name": "lastIndexOf",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "lastIndexOf"
|
||||
},
|
||||
{
|
||||
"name": "length",
|
||||
"kind": "property",
|
||||
"kindModifiers": "",
|
||||
"sortText": "length"
|
||||
},
|
||||
{
|
||||
"name": "link",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "link"
|
||||
},
|
||||
{
|
||||
"name": "localeCompare",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "localeCompare"
|
||||
},
|
||||
{
|
||||
"name": "match",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "match"
|
||||
},
|
||||
{
|
||||
"name": "normalize",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "normalize"
|
||||
},
|
||||
{
|
||||
"name": "repeat",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "repeat"
|
||||
},
|
||||
{
|
||||
"name": "replace",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "replace"
|
||||
},
|
||||
{
|
||||
"name": "search",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "search"
|
||||
},
|
||||
{
|
||||
"name": "slice",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "slice"
|
||||
},
|
||||
{
|
||||
"name": "small",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "small"
|
||||
},
|
||||
{
|
||||
"name": "split",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "split"
|
||||
},
|
||||
{
|
||||
"name": "startsWith",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "startsWith"
|
||||
},
|
||||
{
|
||||
"name": "strike",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "strike"
|
||||
},
|
||||
{
|
||||
"name": "sub",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "sub"
|
||||
},
|
||||
{
|
||||
"name": "substr",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "substr"
|
||||
},
|
||||
{
|
||||
"name": "substring",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "substring"
|
||||
},
|
||||
{
|
||||
"name": "sup",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "sup"
|
||||
},
|
||||
{
|
||||
"name": "toLocaleLowerCase",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "toLocaleLowerCase"
|
||||
},
|
||||
{
|
||||
"name": "toLocaleUpperCase",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "toLocaleUpperCase"
|
||||
},
|
||||
{
|
||||
"name": "toLowerCase",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "toLowerCase"
|
||||
},
|
||||
{
|
||||
"name": "toString",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "toString"
|
||||
},
|
||||
{
|
||||
"name": "toUpperCase",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "toUpperCase"
|
||||
},
|
||||
{
|
||||
"name": "trim",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "trim"
|
||||
},
|
||||
{
|
||||
"name": "trimLeft",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "trimLeft"
|
||||
},
|
||||
{
|
||||
"name": "trimRight",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "trimRight"
|
||||
},
|
||||
{
|
||||
"name": "valueOf",
|
||||
"kind": "method",
|
||||
"kindModifiers": "",
|
||||
"sortText": "valueOf"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
{
|
||||
"seq": 0,
|
||||
"type": "response",
|
||||
"command": "configure",
|
||||
"request_seq": 0,
|
||||
"success": true
|
||||
}
|
32
integration/language_service_plugin/matcher.ts
Normal file
32
integration/language_service_plugin/matcher.ts
Normal file
@ -0,0 +1,32 @@
|
||||
import { writeFileSync } from 'fs';
|
||||
|
||||
const goldens: string[] = process.argv.slice(2);
|
||||
|
||||
export const goldenMatcher: jasmine.CustomMatcherFactories = {
|
||||
toMatchGolden(util: jasmine.MatchersUtil): jasmine.CustomMatcher {
|
||||
return {
|
||||
compare(actual: {command: string}, golden: string): jasmine.CustomMatcherResult {
|
||||
const expected = require(`./goldens/${golden}`);
|
||||
const pass = util.equals(actual, expected);
|
||||
if (!pass && goldens.indexOf(golden) >= 0) {
|
||||
console.error(`Writing golden file ${golden}`);
|
||||
writeFileSync(`./goldens/${golden}`, JSON.stringify(actual, null, 2));
|
||||
return { pass : true };
|
||||
}
|
||||
return {
|
||||
pass,
|
||||
message: `Expected response for '${actual.command}' to match golden file ${golden}.\n` +
|
||||
`To generate new golden file, run "yarn golden ${golden}".`,
|
||||
};
|
||||
}
|
||||
};
|
||||
},
|
||||
};
|
||||
|
||||
declare global {
|
||||
namespace jasmine {
|
||||
interface Matchers<T> {
|
||||
toMatchGolden(golden: string): void
|
||||
}
|
||||
}
|
||||
}
|
@ -4,23 +4,16 @@
|
||||
"license": "MIT",
|
||||
"description": "Angular Language Service plugin integration test",
|
||||
"dependencies": {
|
||||
"@angular/animations": "file:../../dist/packages-dist/animations",
|
||||
"@angular/common": "file:../../dist/packages-dist/common",
|
||||
"@angular/compiler": "file:../../dist/packages-dist/compiler",
|
||||
"@angular/compiler-cli": "file:../../dist/packages-dist/compiler-cli",
|
||||
"@angular/core": "file:../../dist/packages-dist/core",
|
||||
"@angular/language-service": "file:../../dist/packages-dist/language-service",
|
||||
"@angular/platform-browser": "file:../../dist/packages-dist/platform-browser",
|
||||
"@angular/platform-server": "file:../../dist/packages-dist/platform-server",
|
||||
"@types/minimist": "^1.2.0",
|
||||
"@types/node": "^7.0.5",
|
||||
"minimist": "^1.2.0",
|
||||
"rxjs": "file:../../node_modules/rxjs",
|
||||
"typescript": "file:../../node_modules/typescript",
|
||||
"zone.js": "file:../../node_modules/zone.js"
|
||||
"@types/node": "file:../../node_modules/@types/node",
|
||||
"jasmine": "file:../../node_modules/jasmine",
|
||||
"typescript": "file:../../node_modules/typescript"
|
||||
},
|
||||
"scripts": {
|
||||
"postinstall": "scripts/install.sh",
|
||||
"test": "tsc -p tools && scripts/test.sh"
|
||||
"build": "tsc -p tsconfig.json",
|
||||
"cleanup": "rm -rf ti-*.log tsserver.log",
|
||||
"golden": "node generate.js",
|
||||
"test": "yarn cleanup && yarn build && jasmine test.js"
|
||||
}
|
||||
}
|
||||
|
@ -8,9 +8,6 @@
|
||||
"experimentalDecorators": true,
|
||||
"lib": [ "es2015", "dom" ],
|
||||
"noImplicitAny": true,
|
||||
"suppressImplicitAnyIndexErrors": true,
|
||||
"plugins": [
|
||||
{ "name": "@angular/language-service" }
|
||||
]
|
||||
"suppressImplicitAnyIndexErrors": true
|
||||
}
|
||||
}
|
||||
|
@ -1,2 +0,0 @@
|
||||
TYPESCRIPTS=2.3
|
||||
FIXTURES="smokeTest getCompletions"
|
@ -1,16 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -ex -o pipefail
|
||||
|
||||
cd `dirname $0`
|
||||
cd ..
|
||||
source scripts/env.sh
|
||||
|
||||
# Setup TypeScripts
|
||||
for TYPESCRIPT in ${TYPESCRIPTS[@]}
|
||||
do
|
||||
(
|
||||
cd typescripts/$TYPESCRIPT
|
||||
yarn
|
||||
)
|
||||
done
|
@ -1,30 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -ex -o pipefail
|
||||
|
||||
cd `dirname $0`
|
||||
cd ..
|
||||
source scripts/env.sh
|
||||
|
||||
HOST="node tools/typescript_host.js"
|
||||
VALIDATE="node tools/typescript_validator.js"
|
||||
|
||||
# Ensure the languages service can load correctly in node before typescript loads it.
|
||||
# This verifies its dependencies and emits any exceptions, both of which are only
|
||||
# emitted to the typescript logs (not the validated output).
|
||||
node tools/load_test.js
|
||||
|
||||
for TYPESCRIPT in ${TYPESCRIPTS[@]}
|
||||
do
|
||||
SERVER="node typescripts/$TYPESCRIPT/node_modules/typescript/lib/tsserver.js"
|
||||
for FIXTURE_BASE in ${FIXTURES[@]}
|
||||
do
|
||||
FIXTURE=fixtures/$FIXTURE_BASE.json
|
||||
EXPECTED=fixtures/$FIXTURE_BASE-expected-$TYPESCRIPT.json
|
||||
if [[ ${UPDATE_GOLDEN} == true ]]; then
|
||||
$HOST --file $FIXTURE --pwd $(pwd) | $SERVER | $VALIDATE --golden > $EXPECTED
|
||||
else
|
||||
$HOST --file $FIXTURE --pwd $(pwd) | $SERVER | $VALIDATE --expect $EXPECTED
|
||||
fi
|
||||
done
|
||||
done
|
@ -1,8 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -ex -o pipefail
|
||||
|
||||
cd `dirname $0`
|
||||
cd ..
|
||||
|
||||
UPDATE_GOLDEN=true scripts/test.sh
|
104
integration/language_service_plugin/test.ts
Normal file
104
integration/language_service_plugin/test.ts
Normal file
@ -0,0 +1,104 @@
|
||||
import { fork, ChildProcess } from 'child_process';
|
||||
import { join } from 'path';
|
||||
import { Client } from './tsclient';
|
||||
import { goldenMatcher } from './matcher';
|
||||
|
||||
describe('Angular Language Service', () => {
|
||||
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000; /* 10 seconds */
|
||||
const PWD = process.env.PWD!;
|
||||
const SERVER_PATH = "./node_modules/typescript/lib/tsserver.js";
|
||||
let server: ChildProcess;
|
||||
let client: Client;
|
||||
|
||||
beforeEach(() => {
|
||||
jasmine.addMatchers(goldenMatcher);
|
||||
server = fork(SERVER_PATH, [
|
||||
'--globalPlugins', '@angular/language-service',
|
||||
'--logVerbosity', 'verbose',
|
||||
'--logFile', join(PWD, 'tsserver.log'),
|
||||
], {
|
||||
stdio: ['pipe', 'pipe', 'inherit', 'ipc'],
|
||||
});
|
||||
client = new Client(server);
|
||||
client.listen();
|
||||
});
|
||||
|
||||
afterEach(async () => {
|
||||
client.sendRequest('exit', {});
|
||||
|
||||
// Give server process some time to flush all messages
|
||||
await new Promise((resolve) => setTimeout(resolve, 1000));
|
||||
});
|
||||
|
||||
it('should be launched as tsserver plugin', async () => {
|
||||
let response = await client.sendRequest('configure', {
|
||||
hostInfo: 'vscode',
|
||||
});
|
||||
expect(response).toMatchGolden('configure.json');
|
||||
response = await client.sendRequest('compilerOptionsForInferredProjects', {
|
||||
"options": {
|
||||
module: "CommonJS",
|
||||
target: "ES6",
|
||||
allowSyntheticDefaultImports: true,
|
||||
allowNonTsExtensions: true,
|
||||
allowJs: true,
|
||||
jsx: "Preserve"
|
||||
}
|
||||
});
|
||||
expect(response).toMatchGolden('compilerOptionsForInferredProjects.json');
|
||||
// Server does not send response to open request
|
||||
// https://github.com/Microsoft/TypeScript/blob/master/lib/protocol.d.ts#L1055
|
||||
client.sendRequest('open', {
|
||||
file: `${PWD}/project/app/app.module.ts`,
|
||||
fileContent: ""
|
||||
});
|
||||
// Server does not send response to geterr request
|
||||
// https://github.com/Microsoft/TypeScript/blob/master/lib/protocol.d.ts#L1770
|
||||
client.sendRequest('geterr', {
|
||||
delay: 0,
|
||||
files: [`${PWD}/project/app/app.module.ts`]
|
||||
});
|
||||
});
|
||||
|
||||
it('should perform completions', async () => {
|
||||
await client.sendRequest('configure', {
|
||||
hostInfo: 'vscode',
|
||||
});
|
||||
await client.sendRequest('compilerOptionsForInferredProjects', {
|
||||
"options": {
|
||||
module: "CommonJS",
|
||||
target: "ES6",
|
||||
allowSyntheticDefaultImports: true,
|
||||
allowNonTsExtensions: true,
|
||||
allowJs: true,
|
||||
jsx: "Preserve"
|
||||
}
|
||||
});
|
||||
|
||||
client.sendRequest('open', {
|
||||
file: `${PWD}/project/app/app.component.ts`,
|
||||
fileContent: "import { Component } from '@angular/core';\n\n@Component({\n selector: 'my-app',\n template: `<h1>Hello {{name}}</h1>`,\n})\nexport class AppComponent { name = 'Angular'; }\n"
|
||||
});
|
||||
|
||||
client.sendRequest('geterr', {
|
||||
delay: 0,
|
||||
files: [`${PWD}/project/app/app.component.ts`]
|
||||
});
|
||||
|
||||
client.sendRequest('change', {
|
||||
file: `${PWD}/project/app/app.component.ts`,
|
||||
line: 5,
|
||||
offset: 30,
|
||||
endLine: 5,
|
||||
endOffset: 30,
|
||||
insertString: '.',
|
||||
});
|
||||
|
||||
const response = await client.sendRequest('completionInfo', {
|
||||
file: `${PWD}/project/app/app.component.ts`,
|
||||
line: 5,
|
||||
offset: 31,
|
||||
});
|
||||
expect(response).toMatchGolden('completionInfo.json');
|
||||
});
|
||||
});
|
@ -1,35 +0,0 @@
|
||||
const ts = require('typescript');
|
||||
const Module = require('module');
|
||||
|
||||
const existingRequire = Module.prototype.require;
|
||||
|
||||
const recordedRequires: string[] = [];
|
||||
|
||||
function recordingRequire(path: string) {
|
||||
recordedRequires.push(path);
|
||||
return existingRequire.call(this, path);
|
||||
}
|
||||
|
||||
Module.prototype.require = recordingRequire;
|
||||
|
||||
try {
|
||||
const lsf = require('@angular/language-service');
|
||||
const ls = lsf({typescript: ts});
|
||||
|
||||
// Assert that the only module that should have been required are '@angular/language-service', 'fs', and 'path'
|
||||
|
||||
const allowedLoads = new Set(["@angular/language-service", "fs", "path"]);
|
||||
|
||||
const invalidModules = recordedRequires.filter(m => !allowedLoads.has(m));
|
||||
|
||||
if (invalidModules.length > 0) {
|
||||
console.error(`FAILED: Loading the language service required: ${invalidModules.join(', ')}`);
|
||||
process.exit(1);
|
||||
}
|
||||
} catch (e) {
|
||||
console.error(`FAILED: Loading the language service caused the following exception: ${e.stack || e}`);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
console.log('SUCCESS: Loading passed')
|
||||
process.exit(0);
|
@ -1,19 +0,0 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"module": "commonjs",
|
||||
"target": "es5",
|
||||
"noImplicitAny": true,
|
||||
"skipLibCheck": true,
|
||||
"sourceMap": false,
|
||||
"lib": ["es2015", "dom"],
|
||||
"types": [
|
||||
"node",
|
||||
"minimist"
|
||||
]
|
||||
},
|
||||
"files": [
|
||||
"typescript_host.ts",
|
||||
"typescript_validator.ts",
|
||||
"load_test.ts"
|
||||
]
|
||||
}
|
@ -1,77 +0,0 @@
|
||||
import * as fs from 'fs';
|
||||
import * as minimist from 'minimist';
|
||||
|
||||
const RE_PWD = /\$\$PWD\$\$/g;
|
||||
|
||||
let errorsDetected = false;
|
||||
|
||||
function reportError(arg: string): boolean {
|
||||
console.error(`Unknown argument: ${arg}`);
|
||||
errorsDetected = true;
|
||||
return false;
|
||||
}
|
||||
|
||||
function help() {
|
||||
console.log('TypeScript Host')
|
||||
console.log(`${process.argv[1]} --file <file-name> [--pwd <pwd>]`);
|
||||
console.log(`
|
||||
Send JSON message using the JSON RPC protocol to stdout.
|
||||
`)
|
||||
}
|
||||
|
||||
let args = minimist(process.argv.slice(2), { string: ['file', 'pwd'], unknown: reportError });
|
||||
|
||||
if (errorsDetected) {
|
||||
help();
|
||||
process.exit(2);
|
||||
}
|
||||
|
||||
const file = args['file'];
|
||||
if (!file) {
|
||||
console.log('stdin form not supported yet.')
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
// Sender
|
||||
const pending: string[] = [];
|
||||
let writing = false;
|
||||
|
||||
function writeMessage(message: string) {
|
||||
writing = true;
|
||||
process.stdout.write(message + '\n', checkPending);
|
||||
}
|
||||
|
||||
function checkPending() {
|
||||
writing = false;
|
||||
if (pending.length) {
|
||||
writeMessage(pending.shift());
|
||||
}
|
||||
}
|
||||
|
||||
function send(message: string) {
|
||||
if (writing) {
|
||||
pending.push(message);
|
||||
} else {
|
||||
writeMessage(message);
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
let content = fs.readFileSync(file, 'utf8');
|
||||
if (args['pwd']) {
|
||||
content = content.replace(RE_PWD, args['pwd']);
|
||||
}
|
||||
|
||||
const json = JSON.parse(content);
|
||||
|
||||
if (Array.isArray(json)) {
|
||||
for (const message of json) {
|
||||
send(JSON.stringify(message));
|
||||
}
|
||||
} else {
|
||||
throw Error('Expected an array for input messages.')
|
||||
}
|
||||
} catch(e) {
|
||||
console.error(`Error: ${e.message}`);
|
||||
process.exit(2);
|
||||
}
|
@ -1,164 +0,0 @@
|
||||
import * as fs from 'fs';
|
||||
import * as minimist from 'minimist';
|
||||
|
||||
let errorsDetected = false;
|
||||
|
||||
const start = Date.now();
|
||||
|
||||
function reportError(arg: string): boolean {
|
||||
console.error(`Unknown argument: ${arg}`);
|
||||
errorsDetected = true;
|
||||
return false;
|
||||
}
|
||||
|
||||
function help() {
|
||||
console.log('TypeScript Validator')
|
||||
console.log(`${process.argv[1]} [--expect <file-name> | --golden] [--pwd <dir>]`);
|
||||
console.log(`
|
||||
Validate that the emitted output produces the expect JSON.`)
|
||||
}
|
||||
|
||||
let args = minimist(process.argv.slice(2), { string: ['expect', 'pwd'], boolean: ['golden'], unknown: reportError });
|
||||
|
||||
if (!args.golden && !args.expect) {
|
||||
console.log('Expected -golden or -expect');
|
||||
errorsDetected = true;
|
||||
}
|
||||
|
||||
if (args.golden && args.expect) {
|
||||
console.log('Expected -golded or -expect but not both');
|
||||
errorsDetected = true;
|
||||
}
|
||||
|
||||
if (errorsDetected) {
|
||||
help();
|
||||
process.exit(2);
|
||||
}
|
||||
|
||||
var expected: any;
|
||||
if (args.expect) {
|
||||
expected = JSON.parse(fs.readFileSync(args.expect, 'utf8'));
|
||||
}
|
||||
|
||||
// Reader
|
||||
let pending = Buffer.alloc(0);
|
||||
|
||||
const prefix = 'Content-Length: ';
|
||||
|
||||
function tryReadMessage(cb: (message: any) => void) {
|
||||
const firstLine = pending.indexOf(10);
|
||||
if (firstLine >= 1) {
|
||||
const line = pending.toString('utf8', 0, firstLine);
|
||||
if (!line.startsWith(prefix)) {
|
||||
throw Error(`Unexpected input: ${line}`);
|
||||
}
|
||||
const length = +line.substring(prefix.length, firstLine - 1);
|
||||
const dataStart = firstLine + 2;
|
||||
const messageText = pending.toString('utf8', dataStart, dataStart + length);
|
||||
const message = JSON.parse(messageText);
|
||||
pending = pending.slice(dataStart + length + 1);
|
||||
cb(message);
|
||||
tryReadMessage(cb);
|
||||
}
|
||||
}
|
||||
|
||||
function collect(cb: (error: any, messages: any[]) => void) {
|
||||
const result: any[] = [];
|
||||
|
||||
function report(error: any, messages: any[]) {
|
||||
cb(error, messages);
|
||||
cb = () => {};
|
||||
}
|
||||
|
||||
process.stdin.on('error', report);
|
||||
process.stdin.on('data', (data: Buffer) => {
|
||||
try {
|
||||
pending = Buffer.concat([pending, data], pending.length + data.length);
|
||||
tryReadMessage((message: any) => {
|
||||
result.push(message);
|
||||
});
|
||||
} catch (e) {
|
||||
report(e, []);
|
||||
}
|
||||
});
|
||||
|
||||
process.stdin.on('close', () => {
|
||||
report(null, result);
|
||||
});
|
||||
}
|
||||
|
||||
function sanitize(messages: any[]): any[] {
|
||||
return messages.filter((message: any) => {
|
||||
return message && message.type == 'response';
|
||||
}).map((message: any) => {
|
||||
// Only preserve a fixed set of fields.
|
||||
const result: any = {};
|
||||
if (message.type != null) result.type = message.type;
|
||||
if (message.command != null) result.command = message.command;
|
||||
if (message.success != null) result.success = message.success;
|
||||
if (message.body != null) result.body = message.body;
|
||||
return result;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function isPrimitive(value: any): boolean {
|
||||
return Object(value) !== value;
|
||||
}
|
||||
|
||||
function expectPrimitive(received: any, expected: any) {
|
||||
if (received !== expected) {
|
||||
throw new Error(`Expected ${expected} but received ${received}`);
|
||||
}
|
||||
}
|
||||
|
||||
function expectArray(received: any, expected: any[]) {
|
||||
if (!Array.isArray(received)) {
|
||||
throw new Error(`Expected an array, received ${JSON.stringify(received)}`);
|
||||
}
|
||||
if (received.length != expected.length) {
|
||||
throw new Error(`Expected an array length ${expected.length}, received ${JSON.stringify(received)}`);
|
||||
}
|
||||
for (let i = 0; i < expected.length; i++) {
|
||||
expect(received[i], expected[i]);
|
||||
}
|
||||
}
|
||||
|
||||
function expectObject(received: any, expected: any) {
|
||||
for (const name of Object.getOwnPropertyNames(expected)) {
|
||||
if (!received.hasOwnProperty(name)) {
|
||||
throw new Error(`Expected object an object containing a field ${name}, received ${JSON.stringify(expected)}`);
|
||||
}
|
||||
expect(received[name], expected[name]);
|
||||
}
|
||||
}
|
||||
|
||||
function expect(received: any, expected: any) {
|
||||
if (isPrimitive(expected)) {
|
||||
expectPrimitive(received, expected);
|
||||
} else if (Array.isArray(expected)) {
|
||||
expectArray(received, expected);
|
||||
} else {
|
||||
expectObject(received, expected);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
collect((err: any, messages: any[]) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
process.exit(1);
|
||||
}
|
||||
if (args.golden) {
|
||||
console.log(JSON.stringify(sanitize(messages), null, ' '));
|
||||
} else {
|
||||
try {
|
||||
expect(sanitize(messages), expected);
|
||||
console.log('PASSED:', Date.now() - start, 'ms');
|
||||
process.exit(0);
|
||||
} catch(e) {
|
||||
console.log('FAILED:', e.message);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
});
|
70
integration/language_service_plugin/tsclient.ts
Normal file
70
integration/language_service_plugin/tsclient.ts
Normal file
@ -0,0 +1,70 @@
|
||||
import { ChildProcess } from "child_process";
|
||||
import { EventEmitter } from "events";
|
||||
|
||||
/**
|
||||
* Provides a client for tsserver. Tsserver does not use standard JSON-RPC
|
||||
* protocol thus the need for this custom client.
|
||||
*/
|
||||
export class Client {
|
||||
private data: Buffer|undefined;
|
||||
private id = 0;
|
||||
private responseEmitter = new EventEmitter();
|
||||
|
||||
constructor(private readonly server: ChildProcess) {}
|
||||
|
||||
listen() {
|
||||
this.server.stdout.on('data', (data: Buffer) => {
|
||||
this.data = this.data ? Buffer.concat([this.data, data]) : data;
|
||||
const CONTENT_LENGTH = 'Content-Length: '
|
||||
const index = this.data.indexOf(CONTENT_LENGTH);
|
||||
if (index < 0) {
|
||||
return;
|
||||
}
|
||||
let start = index + CONTENT_LENGTH.length;
|
||||
let end = this.data.indexOf('\r\n', start);
|
||||
if (end < start) {
|
||||
return;
|
||||
}
|
||||
const contentLengthStr = this.data.slice(start, end).toString();
|
||||
const contentLength = Number(contentLengthStr);
|
||||
if (isNaN(contentLength) || contentLength < 0) {
|
||||
return;
|
||||
}
|
||||
start = end + 4;
|
||||
end = start + contentLength;
|
||||
if (end > this.data.length) {
|
||||
return;
|
||||
}
|
||||
const content = this.data.slice(start, end).toString();
|
||||
this.data = this.data.slice(end);
|
||||
try {
|
||||
const payload = JSON.parse(content);
|
||||
if (payload.type === "event") {
|
||||
return;
|
||||
}
|
||||
this.responseEmitter.emit('response', payload);
|
||||
}
|
||||
catch (error) {
|
||||
this.responseEmitter.emit('error', error);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
async send(type: string, command: string, params: {}) {
|
||||
const request = {
|
||||
seq: this.id++,
|
||||
type,
|
||||
command,
|
||||
arguments: params
|
||||
};
|
||||
this.server.stdin.write(JSON.stringify(request) + '\r\n');
|
||||
return new Promise((resolve, reject) => {
|
||||
this.responseEmitter.once('response', resolve);
|
||||
this.responseEmitter.once('error', reject);
|
||||
});
|
||||
}
|
||||
|
||||
async sendRequest(command: string, params: {}) {
|
||||
return this.send('request', command, params);
|
||||
}
|
||||
}
|
@ -1,13 +1,60 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "es5",
|
||||
"module": "commonjs",
|
||||
"moduleResolution": "node",
|
||||
"sourceMap": true,
|
||||
"emitDecoratorMetadata": true,
|
||||
"experimentalDecorators": true,
|
||||
"lib": [ "es2015", "dom" ],
|
||||
"noImplicitAny": true,
|
||||
"suppressImplicitAnyIndexErrors": true
|
||||
}
|
||||
/* Basic Options */
|
||||
"target": "es2015", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */
|
||||
"module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
|
||||
// "lib": [], /* Specify library files to be included in the compilation. */
|
||||
// "allowJs": true, /* Allow javascript files to be compiled. */
|
||||
// "checkJs": true, /* Report errors in .js files. */
|
||||
// "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
|
||||
// "declaration": true, /* Generates corresponding '.d.ts' file. */
|
||||
// "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */
|
||||
// "sourceMap": true, /* Generates corresponding '.map' file. */
|
||||
// "outFile": "./", /* Concatenate and emit output to single file. */
|
||||
// "outDir": "./", /* Redirect output structure to the directory. */
|
||||
// "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
|
||||
// "composite": true, /* Enable project compilation */
|
||||
// "removeComments": true, /* Do not emit comments to output. */
|
||||
// "noEmit": true, /* Do not emit outputs. */
|
||||
// "importHelpers": true, /* Import emit helpers from 'tslib'. */
|
||||
// "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
|
||||
// "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */
|
||||
|
||||
/* Strict Type-Checking Options */
|
||||
"strict": true, /* Enable all strict type-checking options. */
|
||||
// "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */
|
||||
// "strictNullChecks": true, /* Enable strict null checks. */
|
||||
// "strictFunctionTypes": true, /* Enable strict checking of function types. */
|
||||
// "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */
|
||||
// "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */
|
||||
// "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */
|
||||
|
||||
/* Additional Checks */
|
||||
// "noUnusedLocals": true, /* Report errors on unused locals. */
|
||||
// "noUnusedParameters": true, /* Report errors on unused parameters. */
|
||||
// "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
|
||||
// "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
|
||||
|
||||
/* Module Resolution Options */
|
||||
// "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
|
||||
// "baseUrl": "./", /* Base directory to resolve non-absolute module names. */
|
||||
// "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
|
||||
// "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */
|
||||
// "typeRoots": [], /* List of folders to include type definitions from. */
|
||||
// "types": [], /* Type declaration files to be included in compilation. */
|
||||
// "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
|
||||
"esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
|
||||
// "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */
|
||||
|
||||
/* Source Map Options */
|
||||
// "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */
|
||||
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
|
||||
// "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */
|
||||
// "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */
|
||||
|
||||
/* Experimental Options */
|
||||
// "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */
|
||||
// "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */
|
||||
},
|
||||
"include": ["*.ts"]
|
||||
}
|
||||
|
@ -1,15 +0,0 @@
|
||||
{
|
||||
"name": "2.3",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"typescript": "2.3.0"
|
||||
}
|
||||
}
|
@ -1,7 +0,0 @@
|
||||
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
typescript@2.3.0:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.3.0.tgz#2e63e09284392bc8158a2444c33e2093795c0418"
|
File diff suppressed because it is too large
Load Diff
@ -39,6 +39,12 @@ ivy-ngcc
|
||||
grep "static ngInjectorDef: ɵngcc0.InjectorDef<ApplicationModule>;" node_modules/@angular/core/src/application_module.d.ts
|
||||
if [[ $? != 0 ]]; then exit 1; fi
|
||||
|
||||
# Did it generate a base factory call for synthesized constructors correctly?
|
||||
grep "const ɵMatTable_BaseFactory = ɵngcc0.ɵgetInheritedFactory(MatTable);" node_modules/@angular/material/esm2015/table.js
|
||||
if [[ $? != 0 ]]; then exit 1; fi
|
||||
grep "const ɵMatTable_BaseFactory = ɵngcc0.ɵgetInheritedFactory(MatTable);" node_modules/@angular/material/esm5/table.es5.js
|
||||
if [[ $? != 0 ]]; then exit 1; fi
|
||||
|
||||
# Can it be safely run again (as a noop)?
|
||||
ivy-ngcc
|
||||
|
||||
|
@ -3,7 +3,7 @@
|
||||
|
||||
|
||||
"@angular/animations@file:../../dist/packages-dist/animations":
|
||||
version "7.1.0"
|
||||
version "7.2.0-rc.0"
|
||||
dependencies:
|
||||
tslib "^1.9.0"
|
||||
|
||||
@ -17,12 +17,12 @@
|
||||
parse5 "^5.0.0"
|
||||
|
||||
"@angular/common@file:../../dist/packages-dist/common":
|
||||
version "7.1.0"
|
||||
version "0.0.0"
|
||||
dependencies:
|
||||
tslib "^1.9.0"
|
||||
|
||||
"@angular/compiler-cli@file:../../dist/packages-dist/compiler-cli":
|
||||
version "7.1.0"
|
||||
version "0.0.0"
|
||||
dependencies:
|
||||
canonical-path "1.0.0"
|
||||
chokidar "^1.4.2"
|
||||
@ -37,22 +37,22 @@
|
||||
yargs "9.0.1"
|
||||
|
||||
"@angular/compiler@file:../../dist/packages-dist/compiler":
|
||||
version "7.1.0"
|
||||
version "7.2.0-rc.0"
|
||||
dependencies:
|
||||
tslib "^1.9.0"
|
||||
|
||||
"@angular/core@file:../../dist/packages-dist/core":
|
||||
version "7.1.0"
|
||||
version "0.0.0"
|
||||
dependencies:
|
||||
tslib "^1.9.0"
|
||||
|
||||
"@angular/forms@file:../../dist/packages-dist/forms":
|
||||
version "7.1.0"
|
||||
version "0.0.0"
|
||||
dependencies:
|
||||
tslib "^1.9.0"
|
||||
|
||||
"@angular/http@file:../../dist/packages-dist/http":
|
||||
version "7.1.0"
|
||||
version "7.2.0-rc.0"
|
||||
dependencies:
|
||||
tslib "^1.9.0"
|
||||
|
||||
@ -66,17 +66,17 @@
|
||||
parse5 "^5.0.0"
|
||||
|
||||
"@angular/platform-browser-dynamic@file:../../dist/packages-dist/platform-browser-dynamic":
|
||||
version "7.1.0"
|
||||
version "7.2.0-rc.0"
|
||||
dependencies:
|
||||
tslib "^1.9.0"
|
||||
|
||||
"@angular/platform-browser@file:../../dist/packages-dist/platform-browser":
|
||||
version "7.1.0"
|
||||
version "0.0.0"
|
||||
dependencies:
|
||||
tslib "^1.9.0"
|
||||
|
||||
"@angular/router@file:../../dist/packages-dist/router":
|
||||
version "7.1.0"
|
||||
version "0.0.0"
|
||||
dependencies:
|
||||
tslib "^1.9.0"
|
||||
|
||||
@ -3278,7 +3278,7 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0:
|
||||
integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
|
||||
|
||||
"typescript@file:../../node_modules/typescript":
|
||||
version "3.1.1"
|
||||
version "3.2.2"
|
||||
|
||||
ua-parser-js@0.7.17:
|
||||
version "0.7.17"
|
||||
|
11
package.json
11
package.json
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "angular-srcs",
|
||||
"version": "7.2.1",
|
||||
"version": "8.0.0-beta.0",
|
||||
"private": true,
|
||||
"branchPattern": "2.0.*",
|
||||
"description": "Angular - a web framework for modern web apps",
|
||||
@ -32,10 +32,11 @@
|
||||
"// 1": "dependencies are used locally and by bazel",
|
||||
"dependencies": {
|
||||
"@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",
|
||||
"@bazel/karma": "~0.22.1",
|
||||
"@bazel/typescript": "~0.22.1",
|
||||
"@bazel/typescript": "0.22.1-7-g68fed6a",
|
||||
"@schematics/angular": "^7.0.4",
|
||||
"@types/chokidar": "1.7.3",
|
||||
"@types/convert-source-map": "^1.5.1",
|
||||
@ -73,6 +74,9 @@
|
||||
"node-uuid": "1.4.8",
|
||||
"protractor": "^5.4.2",
|
||||
"reflect-metadata": "^0.1.3",
|
||||
"rollup": "^1.1.0",
|
||||
"rollup-plugin-node-resolve": "^4.0.0",
|
||||
"rollup-plugin-sourcemaps": "^0.4.2",
|
||||
"selenium-webdriver": "3.5.0",
|
||||
"shelljs": "^0.8.1",
|
||||
"source-map": "^0.6.1",
|
||||
@ -129,10 +133,7 @@
|
||||
"madge": "0.5.0",
|
||||
"mutation-observer": "^1.0.3",
|
||||
"rewire": "2.5.2",
|
||||
"rollup": "0.47.4",
|
||||
"rollup-plugin-commonjs": "8.1.0",
|
||||
"rollup-plugin-node-resolve": "3.0.0",
|
||||
"rollup-plugin-sourcemaps": "0.4.2",
|
||||
"rxjs": "^6.3.0",
|
||||
"sauce-connect": "https://saucelabs.com/downloads/sc-4.5.2-linux.tar.gz",
|
||||
"semver": "5.4.1",
|
||||
|
@ -10,7 +10,6 @@ ng_module(
|
||||
"src/**/*.ts",
|
||||
],
|
||||
),
|
||||
module_name = "@angular/animations",
|
||||
deps = [
|
||||
"//packages/core",
|
||||
],
|
||||
|
@ -12,7 +12,6 @@ ng_module(
|
||||
"src/**/*.ts",
|
||||
],
|
||||
),
|
||||
module_name = "@angular/animations/browser",
|
||||
deps = [
|
||||
"//packages/animations",
|
||||
"//packages/core",
|
||||
|
@ -66,8 +66,8 @@ export class AnimationEngine {
|
||||
this._transitionEngine.insertNode(namespaceId, element, parent, insertBefore);
|
||||
}
|
||||
|
||||
onRemove(namespaceId: string, element: any, context: any): void {
|
||||
this._transitionEngine.removeNode(namespaceId, element, context);
|
||||
onRemove(namespaceId: string, element: any, context: any, isHostElement?: boolean): void {
|
||||
this._transitionEngine.removeNode(namespaceId, element, isHostElement || false, context);
|
||||
}
|
||||
|
||||
disableAnimations(element: any, disable: boolean) {
|
||||
|
@ -708,17 +708,23 @@ export class TransitionAnimationEngine {
|
||||
}
|
||||
}
|
||||
|
||||
removeNode(namespaceId: string, element: any, context: any): void {
|
||||
if (!isElementNode(element)) {
|
||||
this._onRemovalComplete(element, context);
|
||||
return;
|
||||
}
|
||||
removeNode(namespaceId: string, element: any, isHostElement: boolean, context: any): void {
|
||||
if (isElementNode(element)) {
|
||||
const ns = namespaceId ? this._fetchNamespace(namespaceId) : null;
|
||||
if (ns) {
|
||||
ns.removeNode(element, context);
|
||||
} else {
|
||||
this.markElementAsRemoved(namespaceId, element, false, context);
|
||||
}
|
||||
|
||||
const ns = namespaceId ? this._fetchNamespace(namespaceId) : null;
|
||||
if (ns) {
|
||||
ns.removeNode(element, context);
|
||||
if (isHostElement) {
|
||||
const hostNS = this.namespacesByHostElement.get(element);
|
||||
if (hostNS && hostNS.id !== namespaceId) {
|
||||
hostNS.removeNode(element, context);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
this.markElementAsRemoved(namespaceId, element, false, context);
|
||||
this._onRemovalComplete(element, context);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -111,7 +111,7 @@ const DEFAULT_NAMESPACE_ID = 'id';
|
||||
|
||||
expect(engine.elementContainsData(DEFAULT_NAMESPACE_ID, element)).toBeTruthy();
|
||||
|
||||
engine.removeNode(DEFAULT_NAMESPACE_ID, element, true);
|
||||
engine.removeNode(DEFAULT_NAMESPACE_ID, element, true, true);
|
||||
engine.flush();
|
||||
|
||||
expect(engine.elementContainsData(DEFAULT_NAMESPACE_ID, element)).toBeTruthy();
|
||||
|
@ -7,7 +7,6 @@ load("//tools:defaults.bzl", "ng_module")
|
||||
ng_module(
|
||||
name = "testing",
|
||||
srcs = glob(["**/*.ts"]),
|
||||
module_name = "@angular/animations/browser/testing",
|
||||
deps = [
|
||||
"//packages/animations",
|
||||
"//packages/animations/browser",
|
||||
|
@ -53,19 +53,6 @@ def rules_angular_dev_dependencies():
|
||||
shorter.
|
||||
"""
|
||||
|
||||
# We have a source dependency on the Devkit repository, because it's built with
|
||||
# Bazel.
|
||||
# This allows us to edit sources and have the effect appear immediately without
|
||||
# re-packaging or "npm link"ing.
|
||||
# Even better, things like aspects will visit the entire graph including
|
||||
# ts_library rules in the devkit repository.
|
||||
http_archive(
|
||||
name = "angular_cli",
|
||||
sha256 = "8cf320ea58c321e103f39087376feea502f20eaf79c61a4fdb05c7286c8684fd",
|
||||
strip_prefix = "angular-cli-6.1.0-rc.0",
|
||||
url = "https://github.com/angular/angular-cli/archive/v6.1.0-rc.0.zip",
|
||||
)
|
||||
|
||||
http_archive(
|
||||
name = "org_brotli",
|
||||
sha256 = "774b893a0700b0692a76e2e5b7e7610dbbe330ffbe3fe864b4b52ca718061d5a",
|
||||
|
@ -13,13 +13,15 @@ load("@build_bazel_rules_nodejs//:defs.bzl", "nodejs_binary")
|
||||
|
||||
nodejs_binary(
|
||||
name = "rollup_with_build_optimizer",
|
||||
data = ["@angular_cli//packages/angular_devkit/build_optimizer:lib"],
|
||||
# Since our rule extends the one in rules_nodejs, we use the same runtime
|
||||
# dependency @build_bazel_rules_nodejs_rollup_deps. We don't need any
|
||||
# additional npm dependencies when we run rollup or uglify.
|
||||
entry_point = "build_bazel_rules_nodejs_rollup_deps/node_modules/rollup/bin/rollup",
|
||||
data = [
|
||||
"@ngdeps//@angular-devkit/build-optimizer",
|
||||
"@ngdeps//is-builtin-module",
|
||||
"@ngdeps//rollup",
|
||||
"@ngdeps//rollup-plugin-node-resolve",
|
||||
"@ngdeps//rollup-plugin-sourcemaps",
|
||||
],
|
||||
entry_point = "ngdeps/node_modules/rollup/bin/rollup",
|
||||
install_source_map_support = False,
|
||||
node_modules = "@build_bazel_rules_nodejs_rollup_deps//:node_modules",
|
||||
)
|
||||
|
||||
nodejs_binary(
|
||||
|
@ -285,6 +285,8 @@ _EXTRA_NODE_OPTIONS_FLAGS = [
|
||||
"--node_options=--expose-gc",
|
||||
# Show ~full stack traces, instead of cutting off after 10 items.
|
||||
"--node_options=--stack-trace-limit=100",
|
||||
# Give 2 GB RAM to node to make bigger google3 modules to compile, we should be able to drop this after Ivy/ngtsc is the default in g3
|
||||
"--node_options=--max-old-space-size=2048",
|
||||
]
|
||||
|
||||
def ngc_compile_action(
|
||||
|
@ -27,11 +27,23 @@ load(
|
||||
load("@build_bazel_rules_nodejs//internal:collect_es6_sources.bzl", collect_es2015_sources = "collect_es6_sources")
|
||||
load(":esm5.bzl", "esm5_outputs_aspect", "esm5_root_dir", "flatten_esm5")
|
||||
|
||||
PACKAGES = ["packages/core/src", "packages/common/src", "packages/compiler/src", "external/rxjs"]
|
||||
PACKAGES = [
|
||||
# Generated paths when using ng_rollup_bundle outside this monorepo.
|
||||
"external/angular/packages/core/src",
|
||||
"external/angular/packages/common/src",
|
||||
"external/angular/packages/compiler/src",
|
||||
"external/angular/packages/platform-browser/src",
|
||||
"external/rxjs",
|
||||
# Generated paths when using ng_rollup_bundle inside this monorepo.
|
||||
"packages/core/src",
|
||||
"packages/common/src",
|
||||
"packages/compiler/src",
|
||||
"packages/platform-browser/src",
|
||||
]
|
||||
PLUGIN_CONFIG = "{sideEffectFreeModules: [\n%s]}" % ",\n".join(
|
||||
[" '.esm5/{0}'".format(p) for p in PACKAGES],
|
||||
)
|
||||
BO_ROLLUP = "angular_cli/packages/angular_devkit/build_optimizer/src/build-optimizer/rollup-plugin.js"
|
||||
BO_ROLLUP = "ngdeps/node_modules/@angular-devkit/build-optimizer/src/build-optimizer/rollup-plugin.js"
|
||||
BO_PLUGIN = "require('%s').default(%s)" % (BO_ROLLUP, PLUGIN_CONFIG)
|
||||
|
||||
def _use_plain_rollup(ctx):
|
||||
|
@ -1,5 +1,82 @@
|
||||
# Schematics for Bazel
|
||||
|
||||
## WARNING
|
||||
|
||||
Schematics in `@angular/bazel` is still highly experimental as of January 2019,
|
||||
please use with caution. For feedbacks and comments, please open an issue on
|
||||
GitHub and ping [@mgechev](https://github.com/mgechev) or
|
||||
[@kyliau](https://github.com/kyliau).
|
||||
|
||||
## Create a Bazel-managed Angular project
|
||||
|
||||
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`.
|
||||
|
||||
Install the latest `@angular/bazel` for generating Bazel schematics.
|
||||
|
||||
```
|
||||
$ yarn global add @angular/bazel
|
||||
```
|
||||
|
||||
Create a new project using `@angular/bazel` schematics for `ng new`.
|
||||
|
||||
```
|
||||
$ ng new demo --collection=@angular/bazel --defaults
|
||||
```
|
||||
|
||||
In addition to the regular files generated by CLI, the following files that are
|
||||
specific to a Bazel workspace are also created.
|
||||
|
||||
```
|
||||
...
|
||||
CREATE demo/BUILD.bazel (190 bytes)
|
||||
CREATE demo/WORKSPACE (2951 bytes)
|
||||
CREATE demo/.bazelignore (18 bytes)
|
||||
CREATE demo/.bazelrc (828 bytes)
|
||||
CREATE demo/e2e/BUILD.bazel (1230 bytes)
|
||||
CREATE demo/e2e/protractor.on-prepare.js (1101 bytes)
|
||||
CREATE demo/src/BUILD.bazel (2626 bytes)
|
||||
CREATE demo/src/initialize_testbed.ts (432 bytes)
|
||||
CREATE demo/src/main.dev.ts (185 bytes)
|
||||
CREATE demo/src/main.prod.ts (249 bytes)
|
||||
```
|
||||
|
||||
Note that in a Bazel-managed project, there is a Bazel WORKSPACE file and a few BUILD.bazel files.
|
||||
There are also some files specific to a Bazel-managed project, namely `main.dev.ts` and `main.prod.ts`.
|
||||
This is because all Angular projects built with Bazel must be AOT only.
|
||||
In a Bazel project, `main.ts` generated by CLI is not used.
|
||||
|
||||
By default, `ng new` for Bazel does not perform `yarn install`.
|
||||
This is because the `node_modules` are managed by Bazel and it is Bazel's
|
||||
responsibility to perform the install.
|
||||
|
||||
Next, let's try to build the project using Bazel.
|
||||
All existing `ng` commands would work as before.
|
||||
|
||||
```
|
||||
cd demo
|
||||
# The following yarn step is needed so that `ng build` works correctly.
|
||||
# Alternatively, you can skip this step if you choose to not use `ng` commands.
|
||||
# In which case, you'd execute `yarn bazel build //src:bundle`. This is
|
||||
# equivalent to running `ng build`.
|
||||
yarn
|
||||
ng build
|
||||
ng serve
|
||||
```
|
||||
|
||||
If you encounter a warning about version mismatch, update `ANGULAR_VERSION` in
|
||||
the WORKSPACE file to match the version of `@angular/bazel` installed from NPM.
|
||||
|
||||
Bring up the dev server using `ibazel run` command.
|
||||
|
||||
```
|
||||
yarn ibazel run //src:devserver
|
||||
```
|
||||
|
||||
Make some changes to the code, and verify that the dev server automatically refreshes.
|
||||
|
||||
## Development notes
|
||||
|
||||
To test any local changes, run
|
||||
|
@ -41,7 +41,7 @@ http_archive(
|
||||
url = "https://registry.yarnpkg.com/rxjs/-/rxjs-%s.tgz" % RXJS_VERSION,
|
||||
strip_prefix = "package/src",
|
||||
)
|
||||
|
||||
<% if (sass) { %>
|
||||
# Rules for compiling sass
|
||||
RULES_SASS_VERSION = "<%= RULES_SASS_VERSION %>"
|
||||
http_archive(
|
||||
@ -49,7 +49,7 @@ http_archive(
|
||||
url = "https://github.com/bazelbuild/rules_sass/archive/%s.zip" % RULES_SASS_VERSION,
|
||||
strip_prefix = "rules_sass-%s" % RULES_SASS_VERSION,
|
||||
)
|
||||
|
||||
<% } %>
|
||||
####################################
|
||||
# Load and install our dependencies downloaded above.
|
||||
|
||||
@ -85,9 +85,9 @@ browser_repositories(
|
||||
|
||||
load("@build_bazel_rules_typescript//:defs.bzl", "ts_setup_workspace")
|
||||
ts_setup_workspace()
|
||||
|
||||
<% if (sass) { %>
|
||||
load("@io_bazel_rules_sass//sass:sass_repositories.bzl", "sass_repositories")
|
||||
sass_repositories()
|
||||
|
||||
<% } %>
|
||||
load("@angular//:index.bzl", "ng_setup_workspace")
|
||||
ng_setup_workspace()
|
||||
|
@ -5,7 +5,17 @@ load("@build_bazel_rules_typescript//:defs.bzl", "ts_library", "ts_web_test_suit
|
||||
load("@build_bazel_rules_nodejs//:defs.bzl", "rollup_bundle", "history_server")
|
||||
load("@build_bazel_rules_nodejs//internal/web_package:web_package.bzl", "web_package")
|
||||
load("@build_bazel_rules_typescript//:defs.bzl", "ts_devserver")
|
||||
<% if (sass) { %>load("@io_bazel_rules_sass//:defs.bzl", "sass_binary")
|
||||
|
||||
[
|
||||
sass_binary(
|
||||
name = "style_" + x,
|
||||
src = x,
|
||||
deps = [],
|
||||
)
|
||||
for x in glob(["**/*.scss"])
|
||||
]
|
||||
<% } %>
|
||||
ng_module(
|
||||
name = "src",
|
||||
srcs = glob(
|
||||
@ -20,7 +30,7 @@ ng_module(
|
||||
assets = glob([
|
||||
"**/*.css",
|
||||
"**/*.html",
|
||||
]),
|
||||
])<% if (sass) { %> + [":style_" + x for x in glob(["**/*.scss"])]<% } %>,
|
||||
deps = [
|
||||
"@angular//packages/core",
|
||||
"@angular//packages/platform-browser",<% if (routing) { %>
|
||||
|
@ -60,6 +60,16 @@ function hasRoutingModule(host: Tree) {
|
||||
return hasRouting;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if project uses SASS stylesheets, false otherwise.
|
||||
*/
|
||||
function hasSassStylesheet(host: Tree) {
|
||||
let hasSass = false;
|
||||
// The proper extension for SASS is .scss
|
||||
host.visit((file: string) => { hasSass = hasSass || file.endsWith('.scss'); });
|
||||
return hasSass;
|
||||
}
|
||||
|
||||
export default function(options: BazelWorkspaceOptions): Rule {
|
||||
return (host: Tree, context: SchematicContext) => {
|
||||
if (!options.name) {
|
||||
@ -103,6 +113,7 @@ export default function(options: BazelWorkspaceOptions): Rule {
|
||||
...options,
|
||||
'dot': '.', ...workspaceVersions,
|
||||
routing: hasRoutingModule(host),
|
||||
sass: hasSassStylesheet(host),
|
||||
}),
|
||||
move(appDir),
|
||||
]));
|
||||
|
@ -12,7 +12,7 @@ import {clean} from './index';
|
||||
|
||||
describe('Bazel-workspace Schematic', () => {
|
||||
const schematicRunner =
|
||||
new SchematicTestRunner('@angular/bazel', require.resolve('../collection.json'), );
|
||||
new SchematicTestRunner('@angular/bazel', require.resolve('../collection.json'));
|
||||
const defaultOptions = {
|
||||
name: 'demo',
|
||||
};
|
||||
@ -79,6 +79,46 @@ describe('Bazel-workspace Schematic', () => {
|
||||
expect(content).toContain('workspace(name = "demo_project"');
|
||||
});
|
||||
});
|
||||
|
||||
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');
|
||||
const options = {...defaultOptions};
|
||||
host = schematicRunner.runSchematic('bazel-workspace', options, host);
|
||||
expect(host.files).toContain('/demo/WORKSPACE');
|
||||
expect(host.files).toContain('/demo/src/BUILD.bazel');
|
||||
});
|
||||
|
||||
it('should download rules_sass in WORKSPACE', () => {
|
||||
const content = host.readContent('/demo/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');
|
||||
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"])],`);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('clean', () => {
|
||||
|
@ -91,7 +91,7 @@ Hello
|
||||
|
||||
/**
|
||||
* @license Angular v0.0.0
|
||||
* (c) 2010-2018 Google, Inc. https://angular.io/
|
||||
* (c) 2010-2019 Google LLC. https://angular.io/
|
||||
* License: MIT
|
||||
*/
|
||||
|
||||
@ -165,7 +165,7 @@ Hello
|
||||
|
||||
/**
|
||||
* @license Angular v0.0.0
|
||||
* (c) 2010-2018 Google, Inc. https://angular.io/
|
||||
* (c) 2010-2019 Google LLC. https://angular.io/
|
||||
* License: MIT
|
||||
*/
|
||||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/core")):"function"==typeof define&&define.amd?define("example/secondary",["exports","@angular/core"],t):t(((e=e||self).example=e.example||{},e.example.secondary={}),e.ng.core)}(this,function(e,t){"use strict";
|
||||
@ -190,7 +190,7 @@ e.SecondaryModule=o,e.a=1,Object.defineProperty(e,"__esModule",{value:!0})});
|
||||
|
||||
/**
|
||||
* @license Angular v0.0.0
|
||||
* (c) 2010-2018 Google, Inc. https://angular.io/
|
||||
* (c) 2010-2019 Google LLC. https://angular.io/
|
||||
* License: MIT
|
||||
*/
|
||||
|
||||
@ -262,7 +262,7 @@ e.SecondaryModule=o,e.a=1,Object.defineProperty(e,"__esModule",{value:!0})});
|
||||
|
||||
/**
|
||||
* @license Angular v0.0.0
|
||||
* (c) 2010-2018 Google, Inc. https://angular.io/
|
||||
* (c) 2010-2019 Google LLC. https://angular.io/
|
||||
* License: MIT
|
||||
*/
|
||||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/core")):"function"==typeof define&&define.amd?define("example",["exports","@angular/core"],t):t((e=e||self).example={},e.ng.core)}(this,function(e,t){"use strict";
|
||||
@ -502,7 +502,7 @@ export * from './index';
|
||||
|
||||
/**
|
||||
* @license Angular v0.0.0
|
||||
* (c) 2010-2018 Google, Inc. https://angular.io/
|
||||
* (c) 2010-2019 Google LLC. https://angular.io/
|
||||
* License: MIT
|
||||
*/
|
||||
|
||||
@ -537,7 +537,7 @@ export { SecondaryModule, a };
|
||||
|
||||
/**
|
||||
* @license Angular v0.0.0
|
||||
* (c) 2010-2018 Google, Inc. https://angular.io/
|
||||
* (c) 2010-2019 Google LLC. https://angular.io/
|
||||
* License: MIT
|
||||
*/
|
||||
|
||||
@ -570,7 +570,7 @@ export { MyModule };
|
||||
|
||||
/**
|
||||
* @license Angular v0.0.0
|
||||
* (c) 2010-2018 Google, Inc. https://angular.io/
|
||||
* (c) 2010-2019 Google LLC. https://angular.io/
|
||||
* License: MIT
|
||||
*/
|
||||
|
||||
@ -614,7 +614,7 @@ export { SecondaryModule, a };
|
||||
|
||||
/**
|
||||
* @license Angular v0.0.0
|
||||
* (c) 2010-2018 Google, Inc. https://angular.io/
|
||||
* (c) 2010-2019 Google LLC. https://angular.io/
|
||||
* License: MIT
|
||||
*/
|
||||
|
||||
@ -749,7 +749,7 @@ export declare const a = 1;
|
||||
|
||||
/**
|
||||
* @license Angular v0.0.0
|
||||
* (c) 2010-2018 Google, Inc. https://angular.io/
|
||||
* (c) 2010-2019 Google LLC. https://angular.io/
|
||||
* License: MIT
|
||||
*/
|
||||
|
||||
|
@ -10,7 +10,6 @@ ts_library(
|
||||
"src/**/*.ts",
|
||||
],
|
||||
),
|
||||
module_name = "@angular/benchpress",
|
||||
deps = [
|
||||
"//packages:types",
|
||||
"//packages/core",
|
||||
|
@ -10,7 +10,6 @@ ng_module(
|
||||
"src/**/*.ts",
|
||||
],
|
||||
),
|
||||
module_name = "@angular/common",
|
||||
deps = [
|
||||
"//packages/core",
|
||||
"@rxjs",
|
||||
|
@ -12,7 +12,6 @@ ng_module(
|
||||
"src/**/*.ts",
|
||||
],
|
||||
),
|
||||
module_name = "@angular/common/http",
|
||||
deps = [
|
||||
"//packages/common",
|
||||
"//packages/core",
|
||||
|
@ -12,7 +12,6 @@ ng_module(
|
||||
"src/**/*.ts",
|
||||
],
|
||||
),
|
||||
module_name = "@angular/common/http/testing",
|
||||
deps = [
|
||||
"//packages/common/http",
|
||||
"//packages/core",
|
||||
|
@ -8,7 +8,6 @@ ts_library(
|
||||
["**/*.ts"],
|
||||
exclude = ["closure-locale.ts"],
|
||||
),
|
||||
module_name = "@angular/common/locales",
|
||||
)
|
||||
|
||||
npm_package(
|
||||
|
@ -6,7 +6,7 @@
|
||||
* found in the LICENSE file at https://angular.io/license
|
||||
*/
|
||||
|
||||
import {ChangeDetectorRef, Directive, DoCheck, EmbeddedViewRef, Input, IterableChangeRecord, IterableChanges, IterableDiffer, IterableDiffers, NgIterable, TemplateRef, TrackByFunction, ViewContainerRef, forwardRef, isDevMode} from '@angular/core';
|
||||
import {Directive, DoCheck, EmbeddedViewRef, Input, IterableChangeRecord, IterableChanges, IterableDiffer, IterableDiffers, NgIterable, TemplateRef, TrackByFunction, ViewContainerRef, forwardRef, isDevMode} from '@angular/core';
|
||||
|
||||
/**
|
||||
* @publicApi
|
||||
@ -151,7 +151,7 @@ export class NgForOf<T> implements DoCheck {
|
||||
this._differ = this._differs.find(value).create(this.ngForTrackBy);
|
||||
} catch {
|
||||
throw new Error(
|
||||
`Cannot find a differ supporting object '${value}' of type '${getTypeNameForDebugging(value)}'. NgFor only supports binding to Iterables such as Arrays.`);
|
||||
`Cannot find a differ supporting object '${value}' of type '${getTypeName(value)}'. NgFor only supports binding to Iterables such as Arrays.`);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -218,6 +218,6 @@ class RecordViewTuple<T> {
|
||||
constructor(public record: any, public view: EmbeddedViewRef<NgForOfContext<T>>) {}
|
||||
}
|
||||
|
||||
export function getTypeNameForDebugging(type: any): string {
|
||||
function getTypeName(type: any): string {
|
||||
return type['name'] || typeof type;
|
||||
}
|
||||
|
@ -34,14 +34,20 @@ import {Directive, EmbeddedViewRef, Input, OnChanges, SimpleChange, SimpleChange
|
||||
*/
|
||||
@Directive({selector: '[ngTemplateOutlet]'})
|
||||
export class NgTemplateOutlet implements OnChanges {
|
||||
// TODO(issue/24571): remove '!'.
|
||||
private _viewRef !: EmbeddedViewRef<any>;
|
||||
private _viewRef: EmbeddedViewRef<any>|null = null;
|
||||
|
||||
// TODO(issue/24571): remove '!'.
|
||||
@Input() public ngTemplateOutletContext !: Object;
|
||||
/**
|
||||
* A context object to attach to the {@link EmbeddedViewRef}. This should be an
|
||||
* object, the object's keys will be available for binding by the local template `let`
|
||||
* declarations.
|
||||
* Using the key `$implicit` in the context object will set its value as default.
|
||||
*/
|
||||
@Input() public ngTemplateOutletContext: Object|null = null;
|
||||
|
||||
// TODO(issue/24571): remove '!'.
|
||||
@Input() public ngTemplateOutlet !: TemplateRef<any>;
|
||||
/**
|
||||
* A string defining the template reference and optionally the context object for the template.
|
||||
*/
|
||||
@Input() public ngTemplateOutlet: TemplateRef<any>|null = null;
|
||||
|
||||
constructor(private _viewContainerRef: ViewContainerRef) {}
|
||||
|
||||
@ -97,7 +103,7 @@ export class NgTemplateOutlet implements OnChanges {
|
||||
|
||||
private _updateExistingContext(ctx: Object): void {
|
||||
for (let propName of Object.keys(ctx)) {
|
||||
(<any>this._viewRef.context)[propName] = (<any>this.ngTemplateOutletContext)[propName];
|
||||
(<any>this._viewRef !.context)[propName] = (<any>this.ngTemplateOutletContext)[propName];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -7,7 +7,6 @@ load("//tools:defaults.bzl", "ng_module")
|
||||
ng_module(
|
||||
name = "testing",
|
||||
srcs = glob(["**/*.ts"]),
|
||||
module_name = "@angular/common/testing",
|
||||
deps = [
|
||||
"//packages/common",
|
||||
"//packages/core",
|
||||
|
@ -20,17 +20,20 @@ ts_library(
|
||||
"src/integrationtest/**/*.ts",
|
||||
],
|
||||
),
|
||||
module_name = "@angular/compiler-cli",
|
||||
tsconfig = ":tsconfig",
|
||||
deps = [
|
||||
"//packages/compiler",
|
||||
"//packages/compiler-cli/src/ngtsc/annotations",
|
||||
"//packages/compiler-cli/src/ngtsc/diagnostics",
|
||||
"//packages/compiler-cli/src/ngtsc/metadata",
|
||||
"//packages/compiler-cli/src/ngtsc/entry_point",
|
||||
"//packages/compiler-cli/src/ngtsc/imports",
|
||||
"//packages/compiler-cli/src/ngtsc/partial_evaluator",
|
||||
"//packages/compiler-cli/src/ngtsc/reflection",
|
||||
"//packages/compiler-cli/src/ngtsc/shims",
|
||||
"//packages/compiler-cli/src/ngtsc/switch",
|
||||
"//packages/compiler-cli/src/ngtsc/transform",
|
||||
"//packages/compiler-cli/src/ngtsc/typecheck",
|
||||
"//packages/compiler-cli/src/ngtsc/util",
|
||||
"@ngdeps//@bazel/typescript",
|
||||
"@ngdeps//@types",
|
||||
"@ngdeps//tsickle",
|
||||
|
@ -24,3 +24,4 @@ export {CompilerOptions as AngularCompilerOptions} from './src/transformers/api'
|
||||
export {NgTools_InternalApi_NG_2 as __NGTOOLS_PRIVATE_API_2} from './src/ngtools_api';
|
||||
|
||||
export {ngToTsDiagnostic} from './src/transformers/util';
|
||||
export {NgTscPlugin} from './src/ngtsc/tsc_plugin';
|
||||
|
@ -9,7 +9,6 @@
|
||||
import {Component, INJECTOR, Injectable, NgModule} from '@angular/core';
|
||||
import {TestBed} from '@angular/core/testing';
|
||||
import {renderModuleFactory} from '@angular/platform-server';
|
||||
import {fixmeIvy} from '@angular/private/testing';
|
||||
import {BasicAppModuleNgFactory} from 'app_built/src/basic.ngfactory';
|
||||
import {DepAppModuleNgFactory} from 'app_built/src/dep.ngfactory';
|
||||
import {HierarchyAppModuleNgFactory} from 'app_built/src/hierarchy.ngfactory';
|
||||
@ -168,21 +167,20 @@ describe('ngInjectableDef Bazel Integration', () => {
|
||||
expect(TestBed.get(INJECTOR).get('foo')).toEqual('bar');
|
||||
});
|
||||
|
||||
fixmeIvy('FW-854: NodeInjector does not know how to get itself (INJECTOR)')
|
||||
.it('Component injector understands requests for INJECTABLE', () => {
|
||||
@Component({
|
||||
selector: 'test-cmp',
|
||||
template: 'test',
|
||||
providers: [{provide: 'foo', useValue: 'bar'}],
|
||||
})
|
||||
class TestCmp {
|
||||
}
|
||||
it('Component injector understands requests for INJECTABLE', () => {
|
||||
@Component({
|
||||
selector: 'test-cmp',
|
||||
template: 'test',
|
||||
providers: [{provide: 'foo', useValue: 'bar'}],
|
||||
})
|
||||
class TestCmp {
|
||||
}
|
||||
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [TestCmp],
|
||||
});
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [TestCmp],
|
||||
});
|
||||
|
||||
const fixture = TestBed.createComponent(TestCmp);
|
||||
expect(fixture.componentRef.injector.get(INJECTOR).get('foo')).toEqual('bar');
|
||||
});
|
||||
const fixture = TestBed.createComponent(TestCmp);
|
||||
expect(fixture.componentRef.injector.get(INJECTOR).get('foo')).toEqual('bar');
|
||||
});
|
||||
});
|
||||
|
@ -8,13 +8,13 @@ ts_library(
|
||||
"*.ts",
|
||||
"**/*.ts",
|
||||
]),
|
||||
module_name = "@angular/compiler-cli/src/ngcc",
|
||||
deps = [
|
||||
"//packages:types",
|
||||
"//packages/compiler",
|
||||
"//packages/compiler-cli/src/ngtsc/annotations",
|
||||
"//packages/compiler-cli/src/ngtsc/host",
|
||||
"//packages/compiler-cli/src/ngtsc/metadata",
|
||||
"//packages/compiler-cli/src/ngtsc/imports",
|
||||
"//packages/compiler-cli/src/ngtsc/partial_evaluator",
|
||||
"//packages/compiler-cli/src/ngtsc/reflection",
|
||||
"//packages/compiler-cli/src/ngtsc/transform",
|
||||
"//packages/compiler-cli/src/ngtsc/translator",
|
||||
"@ngdeps//@types/convert-source-map",
|
||||
|
@ -11,6 +11,8 @@ import * as fs from 'fs';
|
||||
import * as ts from 'typescript';
|
||||
|
||||
import {BaseDefDecoratorHandler, ComponentDecoratorHandler, DirectiveDecoratorHandler, InjectableDecoratorHandler, NgModuleDecoratorHandler, PipeDecoratorHandler, ReferencesRegistry, ResourceLoader, SelectorScopeRegistry} from '../../../ngtsc/annotations';
|
||||
import {TsReferenceResolver} from '../../../ngtsc/imports';
|
||||
import {PartialEvaluator} from '../../../ngtsc/partial_evaluator';
|
||||
import {CompileResult, DecoratorHandler} from '../../../ngtsc/transform';
|
||||
import {DecoratedClass} from '../host/decorated_class';
|
||||
import {NgccReflectionHost} from '../host/ngcc_host';
|
||||
@ -44,12 +46,14 @@ export interface MatchingHandler<A, M> {
|
||||
}
|
||||
|
||||
/**
|
||||
* `ResourceLoader` which directly uses the filesystem to resolve resources synchronously.
|
||||
* Simple class that resolves and loads files directly from the filesystem.
|
||||
*/
|
||||
export class FileResourceLoader implements ResourceLoader {
|
||||
load(url: string, containingFile: string): string {
|
||||
url = path.resolve(path.dirname(containingFile), url);
|
||||
return fs.readFileSync(url, 'utf8');
|
||||
class NgccResourceLoader implements ResourceLoader {
|
||||
canPreload = false;
|
||||
preload(): undefined|Promise<void> { throw new Error('Not implemented.'); }
|
||||
load(url: string): string { return fs.readFileSync(url, 'utf8'); }
|
||||
resolve(url: string, containingFile: string): string {
|
||||
return path.resolve(path.dirname(containingFile), url);
|
||||
}
|
||||
}
|
||||
|
||||
@ -57,34 +61,41 @@ export class FileResourceLoader implements ResourceLoader {
|
||||
* This Analyzer will analyze the files that have decorated classes that need to be transformed.
|
||||
*/
|
||||
export class DecorationAnalyzer {
|
||||
resourceLoader = new FileResourceLoader();
|
||||
scopeRegistry = new SelectorScopeRegistry(this.typeChecker, this.host);
|
||||
resourceManager = new NgccResourceLoader();
|
||||
resolver = new TsReferenceResolver(this.program, this.typeChecker, this.options, this.host);
|
||||
scopeRegistry = new SelectorScopeRegistry(this.typeChecker, this.reflectionHost, this.resolver);
|
||||
evaluator = new PartialEvaluator(this.reflectionHost, this.typeChecker, this.resolver);
|
||||
handlers: DecoratorHandler<any, any>[] = [
|
||||
new BaseDefDecoratorHandler(this.typeChecker, this.host),
|
||||
new BaseDefDecoratorHandler(this.reflectionHost, this.evaluator),
|
||||
new ComponentDecoratorHandler(
|
||||
this.typeChecker, this.host, this.scopeRegistry, this.isCore, this.resourceLoader,
|
||||
this.rootDirs, /* defaultPreserveWhitespaces */ false, /* i18nUseExternalIds */ true),
|
||||
new DirectiveDecoratorHandler(this.typeChecker, this.host, this.scopeRegistry, this.isCore),
|
||||
new InjectableDecoratorHandler(this.host, this.isCore),
|
||||
this.reflectionHost, this.evaluator, this.scopeRegistry, this.isCore, this.resourceManager,
|
||||
this.rootDirs, /* defaultPreserveWhitespaces */ false,
|
||||
/* i18nUseExternalIds */ true),
|
||||
new DirectiveDecoratorHandler(
|
||||
this.reflectionHost, this.evaluator, this.scopeRegistry, this.isCore),
|
||||
new InjectableDecoratorHandler(this.reflectionHost, this.isCore),
|
||||
new NgModuleDecoratorHandler(
|
||||
this.typeChecker, this.host, this.scopeRegistry, this.referencesRegistry, this.isCore),
|
||||
new PipeDecoratorHandler(this.typeChecker, this.host, this.scopeRegistry, this.isCore),
|
||||
this.reflectionHost, this.evaluator, this.scopeRegistry, this.referencesRegistry,
|
||||
this.isCore),
|
||||
new PipeDecoratorHandler(this.reflectionHost, this.evaluator, this.scopeRegistry, this.isCore),
|
||||
];
|
||||
|
||||
constructor(
|
||||
private typeChecker: ts.TypeChecker, private host: NgccReflectionHost,
|
||||
private referencesRegistry: ReferencesRegistry, private rootDirs: string[],
|
||||
private isCore: boolean) {}
|
||||
private program: ts.Program, private options: ts.CompilerOptions,
|
||||
private host: ts.CompilerHost, private typeChecker: ts.TypeChecker,
|
||||
private reflectionHost: NgccReflectionHost, private referencesRegistry: ReferencesRegistry,
|
||||
private rootDirs: string[], private isCore: boolean) {}
|
||||
|
||||
/**
|
||||
* Analyze a program to find all the decorated files should be transformed.
|
||||
* @param program The program whose files should be analysed.
|
||||
*
|
||||
* @returns a map of the source files to the analysis for those files.
|
||||
*/
|
||||
analyzeProgram(program: ts.Program): DecorationAnalyses {
|
||||
analyzeProgram(): DecorationAnalyses {
|
||||
const decorationAnalyses = new DecorationAnalyses();
|
||||
const analysedFiles =
|
||||
program.getSourceFiles().map(sourceFile => this.analyzeFile(sourceFile)).filter(isDefined);
|
||||
const analysedFiles = this.program.getSourceFiles()
|
||||
.map(sourceFile => this.analyzeFile(sourceFile))
|
||||
.filter(isDefined);
|
||||
const compiledFiles = analysedFiles.map(analysedFile => this.compileFile(analysedFile));
|
||||
compiledFiles.forEach(
|
||||
compiledFile => decorationAnalyses.set(compiledFile.sourceFile, compiledFile));
|
||||
@ -92,7 +103,7 @@ export class DecorationAnalyzer {
|
||||
}
|
||||
|
||||
protected analyzeFile(sourceFile: ts.SourceFile): AnalyzedFile|undefined {
|
||||
const decoratedClasses = this.host.findDecoratedClasses(sourceFile);
|
||||
const decoratedClasses = this.reflectionHost.findDecoratedClasses(sourceFile);
|
||||
return decoratedClasses.length ? {
|
||||
sourceFile,
|
||||
analyzedClasses: decoratedClasses.map(clazz => this.analyzeClass(clazz)).filter(isDefined)
|
||||
|
@ -8,8 +8,8 @@
|
||||
import * as ts from 'typescript';
|
||||
|
||||
import {ReferencesRegistry} from '../../../ngtsc/annotations';
|
||||
import {Declaration} from '../../../ngtsc/host';
|
||||
import {ResolvedReference} from '../../../ngtsc/metadata';
|
||||
import {ResolvedReference} from '../../../ngtsc/imports';
|
||||
import {Declaration} from '../../../ngtsc/reflection';
|
||||
import {NgccReflectionHost} from '../host/ngcc_host';
|
||||
import {isDefined} from '../utils';
|
||||
|
||||
@ -62,7 +62,8 @@ export class ModuleWithProvidersAnalyzer {
|
||||
`The referenced NgModule in ${fn.declaration.getText()} is not a class declaration in the typings program; instead we get ${dtsNgModule.getText()}`);
|
||||
}
|
||||
// Record the usage of the internal module as it needs to become an exported symbol
|
||||
this.referencesRegistry.add(new ResolvedReference(ngModule.node, fn.ngModule));
|
||||
this.referencesRegistry.add(
|
||||
ngModule.node, new ResolvedReference(ngModule.node, fn.ngModule));
|
||||
|
||||
ngModule = {node: dtsNgModule, viaModule: null};
|
||||
}
|
||||
|
@ -8,8 +8,8 @@
|
||||
|
||||
import * as ts from 'typescript';
|
||||
import {ReferencesRegistry} from '../../../ngtsc/annotations';
|
||||
import {Declaration, ReflectionHost} from '../../../ngtsc/host';
|
||||
import {Reference, ResolvedReference} from '../../../ngtsc/metadata';
|
||||
import {Reference, ResolvedReference} from '../../../ngtsc/imports';
|
||||
import {Declaration, ReflectionHost} from '../../../ngtsc/reflection';
|
||||
import {hasNameIdentifier} from '../utils';
|
||||
|
||||
/**
|
||||
@ -29,7 +29,7 @@ export class NgccReferencesRegistry implements ReferencesRegistry {
|
||||
* Only `ResolveReference` references are stored. Other types are ignored.
|
||||
* @param references A collection of references to register.
|
||||
*/
|
||||
add(...references: Reference<ts.Declaration>[]): void {
|
||||
add(source: ts.Declaration, ...references: Reference<ts.Declaration>[]): void {
|
||||
references.forEach(ref => {
|
||||
// Only store resolved references. We are not interested in literals.
|
||||
if (ref instanceof ResolvedReference && hasNameIdentifier(ref.node)) {
|
||||
|
@ -7,10 +7,10 @@
|
||||
*/
|
||||
import * as ts from 'typescript';
|
||||
|
||||
import {ReferencesRegistry} from '../../../ngtsc/annotations';
|
||||
import {Declaration} from '../../../ngtsc/host';
|
||||
import {Declaration} from '../../../ngtsc/reflection';
|
||||
import {NgccReflectionHost} from '../host/ngcc_host';
|
||||
import {hasNameIdentifier, isDefined} from '../utils';
|
||||
import {NgccReferencesRegistry} from './ngcc_references_registry';
|
||||
|
||||
export interface ExportInfo {
|
||||
identifier: string;
|
||||
@ -24,7 +24,8 @@ export type PrivateDeclarationsAnalyses = ExportInfo[];
|
||||
* (i.e. on an NgModule) that are not publicly exported via an entry-point.
|
||||
*/
|
||||
export class PrivateDeclarationsAnalyzer {
|
||||
constructor(private host: NgccReflectionHost, private referencesRegistry: ReferencesRegistry) {}
|
||||
constructor(
|
||||
private host: NgccReflectionHost, private referencesRegistry: NgccReferencesRegistry) {}
|
||||
|
||||
analyzeProgram(program: ts.Program): PrivateDeclarationsAnalyses {
|
||||
const rootFiles = this.getRootFiles(program);
|
||||
|
@ -7,7 +7,7 @@
|
||||
*/
|
||||
|
||||
import * as ts from 'typescript';
|
||||
import {Decorator} from '../../../ngtsc/host';
|
||||
import {Decorator} from '../../../ngtsc/reflection';
|
||||
|
||||
/**
|
||||
* A simple container that holds the details of a decorated class that has been
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user