Compare commits
43 Commits
Author | SHA1 | Date | |
---|---|---|---|
395f9cd8d2 | |||
94e4589d30 | |||
f43e29b3d5 | |||
9ab35a1165 | |||
d622558458 | |||
26501495fc | |||
ad160257fa | |||
b108e9a036 | |||
be08611d11 | |||
6b5c151b88 | |||
183f27894c | |||
d1a14f6989 | |||
ce4cff60f0 | |||
78bd3c70de | |||
b22405767f | |||
cd1e206cb3 | |||
453589f9fc | |||
fa3af8b1e0 | |||
c220328274 | |||
0d8528b0df | |||
9ac4a4d8a0 | |||
fe8c6b04ef | |||
63d395cb7e | |||
f5e7208bea | |||
b3759fdc90 | |||
ef056c5fb1 | |||
a808c7d150 | |||
89ace1a2d9 | |||
52fd4a2d35 | |||
8c32a2e8bc | |||
3ed1e842d6 | |||
d53c421768 | |||
01102cb235 | |||
97eb85826f | |||
1059789f9f | |||
0dba3ee359 | |||
80818549fe | |||
348c94911c | |||
26c79efa4a | |||
0b8db92a2b | |||
d0e6eeb51e | |||
93078e3709 | |||
29ab72980c |
@ -1,4 +1,4 @@
|
||||
# http://editorconfig.org
|
||||
# https://editorconfig.org
|
||||
|
||||
root = true
|
||||
|
||||
|
6
.github/ISSUE_TEMPLATE/1-bug-report.md
vendored
6
.github/ISSUE_TEMPLATE/1-bug-report.md
vendored
@ -4,7 +4,7 @@ about: Report a bug in the Angular Framework
|
||||
---
|
||||
<!--🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅
|
||||
|
||||
Oh hi there! 😄
|
||||
Oh hi there! 😄
|
||||
|
||||
To expedite issue processing please search open and closed issues before submitting a new one.
|
||||
Existing issues often contain information about workarounds, resolution, or progress updates.
|
||||
@ -38,6 +38,10 @@ Please create and share minimal reproduction of the issue starting with this tem
|
||||
|
||||
<!--
|
||||
If StackBlitz is not suitable for reproduction of your issue, please create a minimal GitHub repository with the reproduction of the issue. Share the link to the repo below along with step-by-step instructions to reproduce the problem, as well as expected and actual behavior.
|
||||
|
||||
Issues that don't have enough info and can't be reproduced will be closed.
|
||||
|
||||
You can read more about issue submission guidelines here: https://github.com/angular/angular/blob/master/CONTRIBUTING.md#-submitting-an-issue
|
||||
-->
|
||||
|
||||
## 🔥 Exception or Error
|
||||
|
16
.github/angular-robot.yml
vendored
16
.github/angular-robot.yml
vendored
@ -39,18 +39,30 @@ merge:
|
||||
- "packages/**"
|
||||
# list of patterns to ignore for the files changed by the PR
|
||||
exclude:
|
||||
- "packages/bazel/*.bzl"
|
||||
- "packages/*"
|
||||
- "packages/bazel/*"
|
||||
- "packages/bazel/src/builders/**"
|
||||
- "packages/bazel/src/ng_package/**"
|
||||
- "packages/bazel/src/protractor/**"
|
||||
- "packages/bazel/src/schematics/**"
|
||||
- "packages/compiler-cli/src/ngcc/**"
|
||||
- "packages/docs/**"
|
||||
- "packages/elements/schematics/**"
|
||||
- "packages/examples/**"
|
||||
- "packages/language-service/**"
|
||||
- "packages/private/**"
|
||||
- "packages/service-worker/**"
|
||||
- "**/.gitignore"
|
||||
- "**/.gitkeep"
|
||||
- "**/yarn.lock"
|
||||
- "**/package.json"
|
||||
- "**/tsconfig-build.json"
|
||||
- "**/tsconfig.json"
|
||||
- "**/rollup.config.js"
|
||||
- "**/BUILD.bazel"
|
||||
- "**/*.md"
|
||||
- "packages/**/integrationtest/**"
|
||||
- "packages/**/test/**"
|
||||
- "packages/compiler-cli/src/ngcc/**"
|
||||
|
||||
# comment that will be added to a PR when there is a conflict, leave empty or set to false to disable
|
||||
mergeConflictComment: "Hi @{{PRAuthor}}! This PR has merge conflicts due to recent upstream merges.
|
||||
|
@ -254,7 +254,6 @@ groups:
|
||||
files:
|
||||
include:
|
||||
- "packages/compiler-cli/*"
|
||||
- "packages/bazel/*"
|
||||
exclude:
|
||||
- "packages/compiler-cli/src/ngtools*"
|
||||
users:
|
||||
|
@ -37,8 +37,12 @@ env:
|
||||
- CI_MODE=saucelabs_required
|
||||
# deactivated, see #19768
|
||||
# - CI_MODE=browserstack_required
|
||||
- CI_MODE=saucelabs_optional
|
||||
- CI_MODE=browserstack_optional
|
||||
|
||||
# We disable these optional jobs because those acquire tunnel and browser instances which
|
||||
# could lead to rate limit excess while those are failing most of the time and nobody pays
|
||||
# attention anyway.
|
||||
# - CI_MODE=saucelabs_optional
|
||||
# - CI_MODE=browserstack_optional
|
||||
|
||||
matrix:
|
||||
fast_finish: true
|
||||
|
@ -23,9 +23,14 @@ filegroup(
|
||||
filegroup(
|
||||
name = "angularjs_scripts",
|
||||
srcs = [
|
||||
# We also declare the unminfied AngularJS files since these can be used for
|
||||
# local debugging (e.g. see: packages/upgrade/test/common/test_helpers.ts)
|
||||
"@ngdeps//node_modules/angular:angular.js",
|
||||
"@ngdeps//node_modules/angular:angular.min.js",
|
||||
"@ngdeps//node_modules/angular-1.5:angular.js",
|
||||
"@ngdeps//node_modules/angular-1.5:angular.min.js",
|
||||
"@ngdeps//node_modules/angular-1.6:angular.js",
|
||||
"@ngdeps//node_modules/angular-1.6:angular.min.js",
|
||||
"@ngdeps//node_modules/angular-mocks:angular-mocks.js",
|
||||
"@ngdeps//node_modules/angular-mocks-1.5:angular-mocks.js",
|
||||
"@ngdeps//node_modules/angular-mocks-1.6:angular-mocks.js",
|
||||
|
19
CHANGELOG.md
19
CHANGELOG.md
@ -1,3 +1,22 @@
|
||||
<a name="7.1.4"></a>
|
||||
## [7.1.4](https://github.com/angular/angular/compare/7.1.3...7.1.4) (2018-12-18)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **animations:** do not truncate decimals for delay ([#24455](https://github.com/angular/angular/issues/24455)) ([cd1e206](https://github.com/angular/angular/commit/cd1e206))
|
||||
* **animations:** mark actual descendant node as disabled ([#26180](https://github.com/angular/angular/issues/26180)) ([453589f](https://github.com/angular/angular/commit/453589f))
|
||||
* **bazel:** devserver entry_module should have underscore name ([#27719](https://github.com/angular/angular/issues/27719)) ([b108e9a](https://github.com/angular/angular/commit/b108e9a))
|
||||
* **bazel:** emit full node stack traces when Angular compilation crashes ([#27678](https://github.com/angular/angular/issues/27678)) ([0d8528b](https://github.com/angular/angular/commit/0d8528b))
|
||||
* **bazel:** fix major/minor semver check between [@angular](https://github.com/angular)/bazel npm packager version and angular bazel repo version ([#27635](https://github.com/angular/angular/issues/27635)) ([3ed1e84](https://github.com/angular/angular/commit/3ed1e84))
|
||||
* **bazel:** Load http_archive and rules_nodejs dependencies ([#27609](https://github.com/angular/angular/issues/27609)) ([89ace1a](https://github.com/angular/angular/commit/89ace1a))
|
||||
* **bazel:** ng_package writes unrelevant definitions to bazel out ([#27519](https://github.com/angular/angular/issues/27519)) ([ef056c5](https://github.com/angular/angular/commit/ef056c5)), closes [/github.com/angular/angular/blob/4f9374951d67c75f67a31c110bd61ab72563db7d/packages/bazel/src/ng_package/packager.ts#L105-L124](https://github.com//github.com/angular/angular/blob/4f9374951d67c75f67a31c110bd61ab72563db7d/packages/bazel/src/ng_package/packager.ts/issues/L105-L124)
|
||||
* **bazel:** Read latest versions from latest-versions.ts & use semver check ([#27591](https://github.com/angular/angular/issues/27591)) ([93078e3](https://github.com/angular/angular/commit/93078e3))
|
||||
* **bazel:** Set module_name and enable ng test ([#27715](https://github.com/angular/angular/issues/27715)) ([183f278](https://github.com/angular/angular/commit/183f278))
|
||||
* **common:** KeyValuePipe should return empty array for empty objects ([#27258](https://github.com/angular/angular/issues/27258)) ([fa3af8b](https://github.com/angular/angular/commit/fa3af8b))
|
||||
|
||||
|
||||
|
||||
<a name="7.1.3"></a>
|
||||
## [7.1.3](https://github.com/angular/angular/compare/7.1.2...7.1.3) (2018-12-11)
|
||||
|
||||
|
@ -51,19 +51,15 @@ and help you to craft the change so that it is successfully accepted into the pr
|
||||
|
||||
Before you submit an issue, please search the issue tracker, maybe an issue for your problem already exists and the discussion might inform you of workarounds readily available.
|
||||
|
||||
We want to fix all the issues as soon as possible, but before fixing a bug we need to reproduce and confirm it. In order to reproduce bugs, we will systematically ask you to provide a minimal reproduction scenario using http://plnkr.co. Having a live, reproducible scenario gives us a wealth of important information without going back & forth to you with additional questions like:
|
||||
We want to fix all the issues as soon as possible, but before fixing a bug we need to reproduce and confirm it. In order to reproduce bugs, we will systematically ask you to provide a minimal reproduction. Having a minimal reproducible scenario gives us a wealth of important information without going back & forth to you with additional questions.
|
||||
|
||||
- version of Angular used
|
||||
- 3rd-party libraries and their versions
|
||||
- and most importantly - a use-case that fails
|
||||
A minimal reproduction allows us to quickly confirm a bug (or point out a coding problem) as well as confirm that we are fixing the right problem.
|
||||
|
||||
A minimal reproduce scenario using http://plnkr.co/ allows us to quickly confirm a bug (or point out coding problem) as well as confirm that we are fixing the right problem. If plunker is not a suitable way to demonstrate the problem (for example for issues related to our npm packaging), please create a standalone git repository demonstrating the problem.
|
||||
|
||||
We will be insisting on a minimal reproduce scenario in order to save maintainers time and ultimately be able to fix more bugs. Interestingly, from our experience users often find coding problems themselves while preparing a minimal plunk. We understand that sometimes it might be hard to extract essentials bits of code from a larger code-base but we really need to isolate the problem before we can fix it.
|
||||
We will be insisting on a minimal reproduction scenario in order to save maintainers time and ultimately be able to fix more bugs. Interestingly, from our experience users often find coding problems themselves while preparing a minimal reproduction. We understand that sometimes it might be hard to extract essential bits of code from a larger code-base but we really need to isolate the problem before we can fix it.
|
||||
|
||||
Unfortunately, we are not able to investigate / fix bugs without a minimal reproduction, so if we don't hear back from you we are going to close an issue that doesn't have enough info to be reproduced.
|
||||
|
||||
You can file new issues by selecting from our [new issue templates](https://github.com/angular/angular/issues/new/choose) and filling out the form.
|
||||
You can file new issues by selecting from our [new issue templates](https://github.com/angular/angular/issues/new/choose) and filling out the issue template.
|
||||
|
||||
|
||||
### <a name="submit-pr"></a> Submitting a Pull Request (PR)
|
||||
|
@ -302,7 +302,7 @@ After asynchronous validation begins, the form control enters a `pending` state.
|
||||
A common UI pattern is to show a spinner while the async validation is being performed. The following example presents how to achieve this with template-driven forms:
|
||||
|
||||
```html
|
||||
<input [(ngModel)}="name" #model="ngModel" appSomeAsyncValidator>
|
||||
<input [(ngModel)]="name" #model="ngModel" appSomeAsyncValidator>
|
||||
<app-spinner *ngIf="model.pending"></app-spinner>
|
||||
```
|
||||
|
||||
|
@ -385,7 +385,6 @@ Set up a webpack configuration to handle the Node Express `server.ts` file and s
|
||||
In your app root directory, create a webpack configuration file (`webpack.server.config.js`) that compiles the `server.ts` file and its dependencies into `dist/server.js`.
|
||||
|
||||
<code-example format="." language="typescript" linenums="false">
|
||||
@NgModule({
|
||||
const path = require('path');
|
||||
const webpack = require('webpack');
|
||||
|
||||
|
@ -13,6 +13,12 @@
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<!-- ngAtlanta 2019 -->
|
||||
<tr>
|
||||
<th><a href="https://ng-atl.org/" title="ngAtlanta">ngAtlanta</a></th>
|
||||
<td>Atlanta, Georgia</td>
|
||||
<td>January 9 - 12, 2019</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
@ -447,6 +447,12 @@
|
||||
"rev": true,
|
||||
"title": "Simple Quality UI",
|
||||
"url": "https://sq-ui.github.io/ng-sq-ui/#/"
|
||||
},
|
||||
"smart": {
|
||||
"desc": "Web Components for Angular. Dependency-free Angular components for building modern and mobile-friendly web apps",
|
||||
"rev": true,
|
||||
"title": "Smart Web Components",
|
||||
"url": "https://www.htmlelements.com/angular/"
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -788,6 +794,12 @@
|
||||
"title": "SFEIR School (French)",
|
||||
"url": "https://school.sfeir.com/project/sa200/"
|
||||
},
|
||||
"zenika-angular": {
|
||||
"desc": "Angular trainings delivered by Zenika (FRANCE)",
|
||||
"rev": true,
|
||||
"title": "Angular Trainings (French)",
|
||||
"url": "https://training.zenika.com/fr/training/angular2/description"
|
||||
},
|
||||
"formationjs": {
|
||||
"desc": "Angular onsite training in Paris (France). Monthly Angular workshops and custom onsite classes. We are focused on Angular, so we are always up to date.",
|
||||
"rev": true,
|
||||
|
@ -17,7 +17,7 @@ When you’re done, users will be able to navigate the app like this:
|
||||
|
||||
## Add the `AppRoutingModule`
|
||||
|
||||
An Angular best practice is to load and configure the router in a separate, top-level module
|
||||
In Angular, the best practice is to load and configure the router in a separate, top-level module
|
||||
that is dedicated to routing and imported by the root `AppModule`.
|
||||
|
||||
By convention, the module class name is `AppRoutingModule` and it belongs in the `app-routing.module.ts` in the `src/app` folder.
|
||||
|
@ -18,7 +18,7 @@
|
||||
"build-for": "yarn ~~build --configuration",
|
||||
"prebuild-local": "yarn setup-local",
|
||||
"build-local": "yarn ~~build --configuration=stable",
|
||||
"extract-cli-command-docs": "node tools/transforms/cli-docs-package/extract-cli-commands.js a176d127a",
|
||||
"extract-cli-command-docs": "node tools/transforms/cli-docs-package/extract-cli-commands.js 02524ab82",
|
||||
"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",
|
||||
|
@ -5,7 +5,11 @@ import { NavigationNode } from 'app/navigation/navigation.service';
|
||||
selector: 'aio-top-menu',
|
||||
template: `
|
||||
<ul role="navigation">
|
||||
<li *ngFor="let node of nodes"><a class="nav-link" [href]="node.url" [title]="node.title">{{ node.title }}</a></li>
|
||||
<li *ngFor="let node of nodes">
|
||||
<a class="nav-link" [href]="node.url" [title]="node.title">
|
||||
<span class="nav-link-inner">{{ node.title }}</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>`
|
||||
})
|
||||
export class TopMenuComponent {
|
||||
|
@ -147,15 +147,21 @@ aio-top-menu {
|
||||
|
||||
a.nav-link {
|
||||
margin: 0;
|
||||
padding: 24px 16px;
|
||||
padding: 24px 0px;
|
||||
cursor: pointer;
|
||||
|
||||
&:focus {
|
||||
background: rgba($white, 0.15);
|
||||
border-radius: 4px;
|
||||
outline: none;
|
||||
.nav-link-inner {
|
||||
padding: 8px 16px;
|
||||
}
|
||||
|
||||
&:focus {
|
||||
outline: none;
|
||||
|
||||
.nav-link-inner {
|
||||
background: rgba($white, 0.15);
|
||||
border-radius: 4px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -91,28 +91,12 @@ First time setup:
|
||||
- Add the following to the `configurations` array:
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "Attach (inspect)",
|
||||
"type": "node",
|
||||
"request": "attach",
|
||||
"port": 9229,
|
||||
"address": "localhost",
|
||||
"restart": false,
|
||||
"sourceMaps": true,
|
||||
"localRoot": "${workspaceRoot}",
|
||||
"remoteRoot": null
|
||||
},
|
||||
{
|
||||
"name": "Attach (no-sm,inspect)",
|
||||
"type": "node",
|
||||
"request": "attach",
|
||||
"port": 9229,
|
||||
"address": "localhost",
|
||||
"restart": false,
|
||||
"sourceMaps": false,
|
||||
"localRoot": "${workspaceRoot}",
|
||||
"remoteRoot": null
|
||||
},
|
||||
{
|
||||
"type": "node",
|
||||
"request": "attach",
|
||||
"name": "Attach to Remote",
|
||||
"port": 9229,
|
||||
}
|
||||
```
|
||||
|
||||
**Setting breakpoints directly in your code files may not work in VSCode**. This is because the files you're actually debugging are built files that exist in a `./private/...` folder.
|
||||
@ -121,7 +105,7 @@ and launch the bazel corresponding test (`yarn bazel test <target> --config=debu
|
||||
|
||||
Bazel will wait on a connection. Go to the debug view (by clicking on the sidebar or
|
||||
Apple+Shift+D on Mac) and click on the green play icon next to the configuration name
|
||||
(ie `Attach (inspect)`).
|
||||
(ie `Attach to Remote`).
|
||||
|
||||
### Debugging a Karma Test
|
||||
|
||||
|
@ -5,43 +5,44 @@ The following are canned responses that the Angular team should use to close iss
|
||||
Since GitHub currently doesn't allow us to have a repository-wide or organization-wide list of [saved replies](https://help.github.com/articles/working-with-saved-replies/), these replies need to be maintained by individual team members. Since the responses can be modified in the future, all responses are versioned to simplify the process of keeping the responses up to date.
|
||||
|
||||
|
||||
## Angular: Already Fixed (v2)
|
||||
## Angular: Already Fixed (v3)
|
||||
```
|
||||
Thanks for reporting this issue. Luckily it has already been fixed in one of the recent releases. Please update to the most recent version to resolve the problem.
|
||||
|
||||
If after upgrade the problem still exists in your application please open a new issue and provide a StackBlitz reproducing the problem and describing the difference between the expected and current behavior. You can use this StackBlitz template: https://stackblitz.com/fork/angular-gitter
|
||||
If after upgrade the problem still exists in your application please [open a new issue](https://github.com/angular/angular/issues/new/choose) and follow the instructions in the issue template.
|
||||
```
|
||||
|
||||
## Angular: Don't Understand (v2)
|
||||
## Angular: Don't Understand (v3)
|
||||
```
|
||||
I'm sorry but we don't understand the problem you are reporting.
|
||||
|
||||
If the problem still exists please open a new issue and provide a StackBlitz reproducing the problem and describing the difference between the expected and current behavior. You can use this StackBlitz template: https://stackblitz.com/fork/angular-gitter
|
||||
If the problem still exists in your application, please [open a new issue](https://github.com/angular/angular/issues/new/choose) and follow the instructions in the issue template.
|
||||
```
|
||||
|
||||
## Angular: StackBlitz Needed (v1)
|
||||
## Angular: Can't reproduce (v2)
|
||||
```
|
||||
I'm sorry but reported issues require a StackBlitz reproducing the problem.
|
||||
I'm sorry but we can't reproduce the problem you are reporting. We require that reported issues have a minimal reproduction that showcases the problem.
|
||||
|
||||
If this issue persists, please create a StackBlitz using this template and describe the difference between the expected and current behavior and create a new issue: https://stackblitz.com/fork/angular-gitter
|
||||
If the problem still exists in your application, please [open a new issue](https://github.com/angular/angular/issues/new/choose) and follow the instructions in the issue template that include info on how to create a reproduction using our template.
|
||||
```
|
||||
|
||||
## Angular: Duplicate (v1)
|
||||
## Angular: Duplicate (v2)
|
||||
```
|
||||
Thanks for reporting this issue. However this issue is a duplicate of an existing issue #<ISSUE_NUMBER>. Please subscribe to that issue for future updates.
|
||||
Thanks for reporting this issue. However this issue is a duplicate of an existing issue #ISSUE_NUMBER. Please subscribe to that issue for future updates.
|
||||
```
|
||||
|
||||
|
||||
## Angular: Insufficient Information Provided (v1)
|
||||
## Angular: Insufficient Information Provided (v2)
|
||||
```
|
||||
Thanks for reporting this issue. However, you didn't provide sufficient information for us to understand and reproduce the problem. Please check out [our submission guidelines](https://github.com/angular/angular/blob/master/CONTRIBUTING.md#-submitting-an-issue) to understand why we can't act on issues that are lacking important information.
|
||||
|
||||
If the problem still persists, please file a new issue and ensure you provide all of the required information when filling out the issue template.
|
||||
If the problem still exists in your application, please [open a new issue](https://github.com/angular/angular/issues/new/choose) and follow the instructions in the issue template.
|
||||
|
||||
```
|
||||
|
||||
## Angular: Issue Outside of Angular (v1)
|
||||
## Angular: Issue Outside of Angular (v2)
|
||||
```
|
||||
I'm sorry but this issue is not caused by Angular. Please contact the author(s) of project <PROJECT NAME> or file issue on their issue tracker.
|
||||
I'm sorry but this issue is not caused by Angular. Please contact the author(s) of project PROJECT_NAME or file issue on their issue tracker.
|
||||
```
|
||||
|
||||
## Angular: Behaving as Expected (v1)
|
||||
@ -49,18 +50,18 @@ I'm sorry but this issue is not caused by Angular. Please contact the author(s)
|
||||
It appears this behaves as expected. If you still feel there is an issue, please provide further details in a new issue.
|
||||
```
|
||||
|
||||
## Angular: Non-reproducible (v1)
|
||||
## Angular: Non-reproducible (v2)
|
||||
```
|
||||
I'm sorry but we can't reproduce the problem following the instructions you provided.
|
||||
|
||||
If the problem still exists please open a new issue following [our submission guidelines](https://github.com/angular/angular/blob/master/CONTRIBUTING.md#-submitting-an-issue).
|
||||
If the problem still exists in your application please [open a new issue](https://github.com/angular/angular/issues/new/choose) and follow the instructions in the issue template.
|
||||
```
|
||||
|
||||
## Angular: Obsolete (v1)
|
||||
## Angular: Obsolete (v2)
|
||||
```
|
||||
Thanks for reporting this issue. This issue is now obsolete due to changes in the recent releases. Please update to the most recent Angular version.
|
||||
|
||||
If the problem still persists, please file a new issue and ensure you provide the version of Angular affected and include the steps to reproduce the problem when filling out the issue template.
|
||||
If the problem still exists in your application, please [open a new issue](https://github.com/angular/angular/issues/new/choose) and follow the instructions in the issue template.
|
||||
```
|
||||
|
||||
|
||||
|
@ -29,11 +29,11 @@ module.exports = function(config) {
|
||||
{pattern: 'dist/all/@angular/**/*.js', included: false, watched: true},
|
||||
|
||||
// Serve AngularJS for `ngUpgrade` testing.
|
||||
{pattern: 'node_modules/angular-1.5/angular.js', included: false, watched: false},
|
||||
{pattern: 'node_modules/angular-1.5/angular?(.min).js', included: false, watched: false},
|
||||
{pattern: 'node_modules/angular-mocks-1.5/angular-mocks.js', included: false, watched: false},
|
||||
{pattern: 'node_modules/angular-1.6/angular.js', included: false, watched: false},
|
||||
{pattern: 'node_modules/angular-1.6/angular?(.min).js', included: false, watched: false},
|
||||
{pattern: 'node_modules/angular-mocks-1.6/angular-mocks.js', included: false, watched: false},
|
||||
{pattern: 'node_modules/angular/angular.js', included: false, watched: false},
|
||||
{pattern: 'node_modules/angular/angular?(.min).js', included: false, watched: false},
|
||||
{pattern: 'node_modules/angular-mocks/angular-mocks.js', included: false, watched: false},
|
||||
|
||||
'node_modules/core-js/client/core.js',
|
||||
@ -122,12 +122,9 @@ module.exports = function(config) {
|
||||
startConnect: false,
|
||||
recordVideo: false,
|
||||
recordScreenshots: false,
|
||||
options: {
|
||||
'selenium-version': '2.53.0',
|
||||
'command-timeout': 600,
|
||||
'idle-timeout': 600,
|
||||
'max-duration': 5400,
|
||||
}
|
||||
idleTimeout: 600,
|
||||
commandTimeout: 600,
|
||||
maxDuration: 5400,
|
||||
},
|
||||
|
||||
browserStack: {
|
||||
@ -154,10 +151,8 @@ module.exports = function(config) {
|
||||
config.sauceLabs.build = buildId;
|
||||
config.sauceLabs.tunnelIdentifier = process.env.TRAVIS_JOB_NUMBER;
|
||||
|
||||
// TODO(mlaval): remove once SauceLabs supports websockets.
|
||||
// This speeds up the capturing a bit, as browsers don't even try to use websocket.
|
||||
console.log('>>>> setting socket.io transport to polling <<<<');
|
||||
config.transports = ['polling'];
|
||||
// Try "websocket" for a faster transmission first. Fallback to "polling" if necessary.
|
||||
config.transports = ['websocket', 'polling'];
|
||||
}
|
||||
|
||||
if (process.env.CI_MODE.startsWith('browserstack')) {
|
||||
|
12
package.json
12
package.json
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "angular-srcs",
|
||||
"version": "7.1.3",
|
||||
"version": "7.1.4",
|
||||
"private": true,
|
||||
"branchPattern": "2.0.*",
|
||||
"description": "Angular - a web framework for modern web apps",
|
||||
@ -20,7 +20,7 @@
|
||||
"bazel:lint": "yarn bazel:format --lint=warn",
|
||||
"bazel:lint-fix": "yarn bazel:format --lint=fix",
|
||||
"preinstall": "node tools/yarn/check-yarn.js",
|
||||
"postinstall": "yarn update-webdriver && node ./tools/postinstall-patches.js",
|
||||
"postinstall": "yarn update-webdriver && node --preserve-symlinks --preserve-symlinks-main ./tools/postinstall-patches.js",
|
||||
"update-webdriver": "webdriver-manager update --gecko false $CHROMEDRIVER_VERSION_ARG",
|
||||
"check-env": "gulp check-env",
|
||||
"commitmsg": "node ./scripts/git/commit-msg.js",
|
||||
@ -76,7 +76,7 @@
|
||||
"shelljs": "^0.8.1",
|
||||
"source-map": "^0.6.1",
|
||||
"source-map-support": "0.5.9",
|
||||
"tsickle": "0.32.1",
|
||||
"tsickle": "0.33.1",
|
||||
"tslib": "^1.7.1",
|
||||
"typescript": "~3.1.1",
|
||||
"xhr2": "0.1.4",
|
||||
@ -90,7 +90,7 @@
|
||||
"devDependencies": {
|
||||
"@bazel/bazel": "~0.20.0",
|
||||
"@bazel/buildifier": "^0.19.2",
|
||||
"@bazel/ibazel": "~0.8.2",
|
||||
"@bazel/ibazel": "~0.9.0",
|
||||
"@types/angular": "^1.6.47",
|
||||
"@types/base64-js": "1.2.5",
|
||||
"@types/jasminewd2": "^2.0.4",
|
||||
@ -110,7 +110,7 @@
|
||||
"firefox-profile": "1.0.3",
|
||||
"glob": "7.1.2",
|
||||
"gulp": "3.9.1",
|
||||
"gulp-clang-format": "1.0.23",
|
||||
"gulp-clang-format": "1.0.27",
|
||||
"gulp-connect": "5.0.0",
|
||||
"gulp-conventional-changelog": "^2.0.3",
|
||||
"gulp-filter": "^5.1.0",
|
||||
@ -123,7 +123,7 @@
|
||||
"karma-browserstack-launcher": "^1.3.0",
|
||||
"karma-chrome-launcher": "^2.2.0",
|
||||
"karma-jasmine": "^1.1.2",
|
||||
"karma-sauce-launcher": "^1.2.0",
|
||||
"karma-sauce-launcher": "^2.0.2",
|
||||
"karma-sourcemap-loader": "^0.3.7",
|
||||
"madge": "0.5.0",
|
||||
"mutation-observer": "^1.0.3",
|
||||
|
@ -27,6 +27,11 @@ ng_package(
|
||||
tags = [
|
||||
"release-with-framework",
|
||||
],
|
||||
# Do not add more to this list.
|
||||
# Dependencies on the full npm_package cause long re-builds.
|
||||
visibility = [
|
||||
"//packages/compiler/test:__pkg__",
|
||||
],
|
||||
deps = [
|
||||
":animations",
|
||||
"//packages/animations/browser",
|
||||
|
@ -811,7 +811,7 @@ export class TransitionAnimationEngine {
|
||||
}
|
||||
|
||||
this.driver.query(element, DISABLED_SELECTOR, true).forEach(node => {
|
||||
this.markElementAsDisabled(element, false);
|
||||
this.markElementAsDisabled(node, false);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -65,7 +65,7 @@ function parseTimeExpression(
|
||||
|
||||
const delayMatch = matches[3];
|
||||
if (delayMatch != null) {
|
||||
delay = _convertTimeValueToMS(Math.floor(parseFloat(delayMatch)), matches[4]);
|
||||
delay = _convertTimeValueToMS(parseFloat(delayMatch), matches[4]);
|
||||
}
|
||||
|
||||
const easingVal = matches[5];
|
||||
|
@ -1132,7 +1132,7 @@ export function useAnimation(
|
||||
|
||||
/**
|
||||
* Finds one or more inner elements within the current element that is
|
||||
* being animated within a sequence. Use with `animateChild()`.
|
||||
* being animated within a sequence. Use with `animate()`.
|
||||
*
|
||||
* @param selector The element to query, or a set of elements that contain Angular-specific
|
||||
* characteristics, specified with one or more of the following tokens.
|
||||
@ -1179,7 +1179,7 @@ export function useAnimation(
|
||||
* ### Usage Example
|
||||
*
|
||||
* The following example queries for inner elements and animates them
|
||||
* individually using `animateChild()`.
|
||||
* individually using `animate()`.
|
||||
*
|
||||
* ```typescript
|
||||
* @Component({
|
||||
|
@ -13,6 +13,9 @@ npm_package(
|
||||
"//packages/bazel/docs",
|
||||
],
|
||||
tags = ["release-with-framework"],
|
||||
# Do not add more to this list.
|
||||
# Dependencies on the full npm_package cause long re-builds.
|
||||
visibility = ["//visibility:private"],
|
||||
deps = [
|
||||
"//packages/bazel/src/builders",
|
||||
"//packages/bazel/src/ng_package:lib",
|
||||
|
@ -7,8 +7,8 @@
|
||||
*/
|
||||
/**
|
||||
* @fileoverview This script runs as a postinstall in the published npm packages
|
||||
* and checks that the version of the build_bazel_rules_typescript external
|
||||
* repository matches that of the published npm package.
|
||||
* and checks that the version of the Angular external repository matches that
|
||||
* of the published npm package.
|
||||
*
|
||||
* Note, this check is only performed with bazel managed deps when the yarn or
|
||||
* npm install is from a yarn_install or npm_install repository rule. For self
|
||||
@ -19,6 +19,7 @@
|
||||
|
||||
const path = require('path');
|
||||
const fs = require('fs');
|
||||
const semver = require('semver');
|
||||
|
||||
// Version in package.bzl should match the npm package version
|
||||
// but this should be tolerant of development stamped versions such as
|
||||
@ -56,14 +57,12 @@ if (isBazelManagedDeps()) {
|
||||
}
|
||||
// Be tolerant of versions such as "0.17.0-7-g76dc057"
|
||||
const angularPackageVersion = contents.version.split('-')[0];
|
||||
if (npmPackageVersion !== angularPackageVersion) {
|
||||
// TODO: we might need to support a range here.
|
||||
// For example, if you end up with @angular/bazel@6.1.8 and
|
||||
// @angular/bazel@6.1.9 both installed one of the postinstalls is
|
||||
// guaranteed to fail since there's only one version of
|
||||
// angular
|
||||
throw new Error(`Expected angular repository to be version ${
|
||||
npmPackageVersion} but found ${angularPackageVersion}`);
|
||||
// Should match only the major and minor versions
|
||||
const range = `${semver.major(angularPackageVersion)}.${semver.minor(angularPackageVersion)}.x`;
|
||||
if (!semver.satisfies(npmPackageVersion, range)) {
|
||||
throw new Error(
|
||||
`Expected angular npm version ${npmPackageVersion} to satisfy ${range}. ` +
|
||||
`Please update ANGULAR_VERSION in WORKSPACE file to match ${npmPackageVersion}`);
|
||||
}
|
||||
} else {
|
||||
// No version check
|
||||
|
@ -18,6 +18,7 @@
|
||||
"@bazel/typescript": "^0.21.0",
|
||||
"@schematics/angular": "^7.0.4",
|
||||
"@types/node": "6.0.84",
|
||||
"semver": "^5.6.0",
|
||||
"shelljs": "0.8.2",
|
||||
"tsickle": "0.34.0"
|
||||
},
|
||||
|
@ -20,6 +20,7 @@ ts_library(
|
||||
data = [
|
||||
"schema.json",
|
||||
],
|
||||
module_name = "@angular/bazel/src/builders",
|
||||
deps = [
|
||||
"@ngdeps//@angular-devkit/architect",
|
||||
"@ngdeps//@angular-devkit/core",
|
||||
|
@ -287,6 +287,8 @@ _collect_summaries_aspect = aspect(
|
||||
_EXTRA_NODE_OPTIONS_FLAGS = [
|
||||
# Expose the v8 garbage collection API to JS.
|
||||
"--node_options=--expose-gc",
|
||||
# Show ~full stack traces, instead of cutting off after 10 items.
|
||||
"--node_options=--stack-trace-limit=100",
|
||||
]
|
||||
|
||||
def ngc_compile_action(
|
||||
|
@ -153,13 +153,14 @@ def _flatten_paths(directory):
|
||||
result.append(f.map.path)
|
||||
return result
|
||||
|
||||
# takes an depset of files and returns an array that doesn't contain any generated files by ngc
|
||||
def _filter_out_generated_files(files, extension, filter_external_files):
|
||||
# Takes a depset of files and returns a depset that doesn't contain any generated files by NGC.
|
||||
# Optionally can filter out files that do not belong to a specified package path.
|
||||
def _filter_out_generated_files(files, extension, package_path = None):
|
||||
result = []
|
||||
for file in files:
|
||||
# If the "filter_external_files" parameter has been set to true, filter out files
|
||||
# that refer to external workspaces.
|
||||
if filter_external_files and file.short_path.startswith("../"):
|
||||
# If the "package_path" parameter has been specified, filter out files
|
||||
# that do not start with the the specified package path.
|
||||
if package_path and not file.short_path.startswith(package_path):
|
||||
continue
|
||||
|
||||
# Filter out files that are generated by the Angular Compiler CLI.
|
||||
@ -184,9 +185,17 @@ def _filter_js_inputs(all_inputs):
|
||||
def _ng_package_impl(ctx):
|
||||
npm_package_directory = ctx.actions.declare_directory("%s.ng_pkg" % ctx.label.name)
|
||||
|
||||
esm_2015_files = _filter_out_generated_files(collect_es6_sources(ctx), "js", False)
|
||||
esm5_sources = _filter_out_generated_files(flatten_esm5(ctx), "js", False)
|
||||
type_definitions = _filter_out_generated_files(collect_type_definitions(ctx), "d.ts", True)
|
||||
esm_2015_files = _filter_out_generated_files(collect_es6_sources(ctx), "js")
|
||||
esm5_sources = _filter_out_generated_files(flatten_esm5(ctx), "js")
|
||||
|
||||
# Filter out all TypeScript definitions generated by NGC as well as definition files
|
||||
# that do not belong to the current package. We only want to package types that belong
|
||||
# to the current package.
|
||||
type_definitions = _filter_out_generated_files(
|
||||
collect_type_definitions(ctx),
|
||||
"d.ts",
|
||||
ctx.label.package,
|
||||
)
|
||||
|
||||
# These accumulators match the directory names where the files live in the
|
||||
# Angular package format.
|
||||
|
@ -10,6 +10,8 @@
|
||||
# imports also make sense when referencing the published package.
|
||||
workspace(name = "<%= utils.underscore(name) %>")
|
||||
|
||||
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
|
||||
|
||||
# The @angular repo contains rule for building Angular applications
|
||||
# Provides "build_bazel_rules_typescript"
|
||||
ANGULAR_VERSION = "<%= ANGULAR_VERSION %>"
|
||||
@ -45,6 +47,9 @@ load("@build_bazel_rules_typescript//:package.bzl", "rules_typescript_dependenci
|
||||
rules_typescript_dependencies()
|
||||
# build_bazel_rules_nodejs is loaded transitively through rules_typescript_dependencies.
|
||||
|
||||
load("@build_bazel_rules_nodejs//:package.bzl", "rules_nodejs_dependencies")
|
||||
rules_nodejs_dependencies()
|
||||
|
||||
load("@build_bazel_rules_nodejs//:defs.bzl", "check_bazel_version", "node_repositories", "yarn_install")
|
||||
# 0.18.0 is needed for .bazelignore
|
||||
check_bazel_version("0.18.0")
|
||||
|
@ -12,7 +12,10 @@ ts_library(
|
||||
"@npm//@types/node",
|
||||
"@npm//jasmine",
|
||||
"@npm//protractor",
|
||||
]
|
||||
],
|
||||
data = [
|
||||
"//:tsconfig.json",
|
||||
],
|
||||
)
|
||||
|
||||
protractor_web_test_suite(
|
||||
|
@ -50,7 +50,7 @@ ts_devserver(
|
||||
"npm/node_modules/zone.js/dist",
|
||||
"npm/node_modules/tslib",
|
||||
],
|
||||
entry_module = "<%= name %>/src/main",
|
||||
entry_module = "<%= utils.underscore(name) %>/src/main",
|
||||
serving_path = "/bundle.min.js",
|
||||
static_files = [
|
||||
"@npm//node_modules/zone.js:dist/zone.min.js",
|
||||
|
@ -11,10 +11,46 @@
|
||||
import {strings} from '@angular-devkit/core';
|
||||
import {Rule, SchematicContext, SchematicsException, Tree, apply, applyTemplates, mergeWith, move, url} from '@angular-devkit/schematics';
|
||||
import {getWorkspace} from '@schematics/angular/utility/config';
|
||||
import {latestVersions} from '@schematics/angular/utility/latest-versions';
|
||||
import {validateProjectName} from '@schematics/angular/utility/validation';
|
||||
|
||||
import {Schema as BazelWorkspaceOptions} from './schema';
|
||||
|
||||
|
||||
/**
|
||||
* Look for package.json file for package with `packageName` in node_modules and
|
||||
* extract its version.
|
||||
*/
|
||||
function findVersion(projectName: string, packageName: string, host: Tree): string|null {
|
||||
// Need to look in multiple locations because we could be working in a subtree.
|
||||
const candidates = [
|
||||
`node_modules/${packageName}/package.json`,
|
||||
`${projectName}/node_modules/${packageName}/package.json`,
|
||||
];
|
||||
for (const candidate of candidates) {
|
||||
if (host.exists(candidate)) {
|
||||
try {
|
||||
const packageJson = JSON.parse(host.read(candidate).toString());
|
||||
if (packageJson.name === packageName && packageJson.version) {
|
||||
return packageJson.version;
|
||||
}
|
||||
} catch {
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Clean the version string and return version in the form "1.2.3". Return
|
||||
* null if version string is invalid. This is similar to semver.clean() but
|
||||
* takes characters like '^' and '~' into account.
|
||||
*/
|
||||
export function clean(version: string): string|null {
|
||||
const matches = version.match(/(\d+\.\d+\.\d+)/);
|
||||
return matches && matches.pop() || null;
|
||||
}
|
||||
|
||||
export default function(options: BazelWorkspaceOptions): Rule {
|
||||
return (host: Tree, context: SchematicContext) => {
|
||||
if (!options.name) {
|
||||
@ -29,10 +65,25 @@ export default function(options: BazelWorkspaceOptions): Rule {
|
||||
}
|
||||
const appDir = `${newProjectRoot}/${options.name}`;
|
||||
|
||||
// If the project already has some deps installed, Bazel should use existing
|
||||
// versions.
|
||||
const existingVersions: {[k: string]: string | null} = {
|
||||
Angular: findVersion(options.name, '@angular/core', host),
|
||||
RxJs: findVersion(options.name, 'rxjs', host),
|
||||
};
|
||||
|
||||
Object.keys(existingVersions).forEach((name: 'Angular' | 'RxJs') => {
|
||||
const version = existingVersions[name];
|
||||
if (version) {
|
||||
context.logger.info(`Bazel will reuse existing version for ${name}: ${version}`);
|
||||
}
|
||||
});
|
||||
|
||||
const workspaceVersions = {
|
||||
'ANGULAR_VERSION': '7.0.2',
|
||||
'RULES_SASS_VERSION': '1.14.1',
|
||||
'RXJS_VERSION': '6.3.3',
|
||||
'ANGULAR_VERSION': existingVersions.Angular || clean(latestVersions.Angular),
|
||||
'RXJS_VERSION': existingVersions.RxJs || clean(latestVersions.RxJs),
|
||||
// TODO(kyliau): Consider moving this to latest-versions.ts
|
||||
'RULES_SASS_VERSION': '1.15.1',
|
||||
};
|
||||
|
||||
return mergeWith(apply(url('./files'), [
|
||||
|
@ -6,7 +6,9 @@
|
||||
* found in the LICENSE file at https://angular.io/license
|
||||
*/
|
||||
|
||||
import {SchematicTestRunner} from '@angular-devkit/schematics/testing';
|
||||
import {HostTree} from '@angular-devkit/schematics';
|
||||
import {SchematicTestRunner, UnitTestTree} from '@angular-devkit/schematics/testing';
|
||||
import {clean} from './index';
|
||||
|
||||
describe('Bazel-workspace Schematic', () => {
|
||||
const schematicRunner =
|
||||
@ -27,6 +29,28 @@ describe('Bazel-workspace Schematic', () => {
|
||||
expect(files).toContain('/demo/yarn.lock');
|
||||
});
|
||||
|
||||
it('should find existing Angular version', () => {
|
||||
let host = new UnitTestTree(new HostTree);
|
||||
host.create('/demo/node_modules/@angular/core/package.json', JSON.stringify({
|
||||
name: '@angular/core',
|
||||
version: '6.6.6',
|
||||
}));
|
||||
const options = {...defaultOptions};
|
||||
host = schematicRunner.runSchematic('bazel-workspace', options, host);
|
||||
expect(host.files).toContain('/demo/WORKSPACE');
|
||||
const workspace = host.readContent('/demo/WORKSPACE');
|
||||
expect(workspace).toMatch('ANGULAR_VERSION = "6.6.6"');
|
||||
});
|
||||
|
||||
it('should have the correct entry_module for devserver', () => {
|
||||
const options = {...defaultOptions, name: 'demo-app'};
|
||||
const host = schematicRunner.runSchematic('bazel-workspace', options);
|
||||
const {files} = host;
|
||||
expect(files).toContain('/demo-app/src/BUILD.bazel');
|
||||
const content = host.readContent('/demo-app/src/BUILD.bazel');
|
||||
expect(content).toContain('entry_module = "demo_app/src/main.dev"');
|
||||
});
|
||||
|
||||
describe('WORKSPACE', () => {
|
||||
it('should contain project name', () => {
|
||||
const options = {...defaultOptions};
|
||||
@ -45,3 +69,14 @@ describe('Bazel-workspace Schematic', () => {
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('clean', () => {
|
||||
[['1.2.3', '1.2.3'], [' 1.2.3', '1.2.3'], ['1.2.3 ', '1.2.3'], ['~1.2.3', '1.2.3'],
|
||||
['^1.2.3', '1.2.3'], ['v1.2.3', '1.2.3'], ['1.2', null], ['a.b.c', null],
|
||||
].forEach(([version, want]: [string, string]) => {
|
||||
it(`should match ${version} with ${want}`, () => {
|
||||
const got = clean(version);
|
||||
expect(got).toBe(want);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
1498
packages/bazel/yarn.lock
Normal file
1498
packages/bazel/yarn.lock
Normal file
File diff suppressed because it is too large
Load Diff
@ -30,6 +30,17 @@ ng_package(
|
||||
tags = [
|
||||
"release-with-framework",
|
||||
],
|
||||
# Do not add more to this list.
|
||||
# Dependencies on the full npm_package cause long re-builds.
|
||||
visibility = [
|
||||
"//packages/bazel/test/ng_package:__pkg__",
|
||||
"//packages/compiler-cli/test:__pkg__",
|
||||
"//packages/compiler-cli/test/diagnostics:__pkg__",
|
||||
"//packages/compiler-cli/test/ngcc:__pkg__",
|
||||
"//packages/compiler-cli/test/transformers:__pkg__",
|
||||
"//packages/compiler/test:__pkg__",
|
||||
"//packages/language-service/test:__pkg__",
|
||||
],
|
||||
deps = [
|
||||
"//packages/common",
|
||||
"//packages/common/http",
|
||||
|
@ -380,7 +380,7 @@ export function getLocaleCurrencySymbol(locale: string): string|null {
|
||||
}
|
||||
|
||||
/**
|
||||
* The name of the currency for the main country using this locale (e.g. USD for the locale
|
||||
* The name of the currency for the main country using this locale (e.g. 'US Dollar' for the locale
|
||||
* en-US).
|
||||
* The name will be `null` if the main country cannot be determined.
|
||||
*
|
||||
|
@ -36,7 +36,7 @@ export interface KeyValue<K, V> {
|
||||
* @usageNotes
|
||||
* ### Examples
|
||||
*
|
||||
* This examples show how an Object or a Map and be iterated by ngFor with the use of this keyvalue
|
||||
* This examples show how an Object or a Map can be iterated by ngFor with the use of this keyvalue
|
||||
* pipe.
|
||||
*
|
||||
* {@example common/pipes/ts/keyvalue_pipe.ts region='KeyValuePipe'}
|
||||
@ -47,10 +47,8 @@ export interface KeyValue<K, V> {
|
||||
export class KeyValuePipe implements PipeTransform {
|
||||
constructor(private readonly differs: KeyValueDiffers) {}
|
||||
|
||||
// TODO(issue/24571): remove '!'.
|
||||
private differ !: KeyValueDiffer<any, any>;
|
||||
// TODO(issue/24571): remove '!'.
|
||||
private keyValues !: Array<KeyValue<any, any>>;
|
||||
private keyValues: Array<KeyValue<any, any>> = [];
|
||||
|
||||
transform<K, V>(input: null, compareFn?: (a: KeyValue<K, V>, b: KeyValue<K, V>) => number): null;
|
||||
transform<V>(
|
||||
|
@ -179,9 +179,9 @@ export class CurrencyPipe implements PipeTransform {
|
||||
* - `minIntegerDigits`: The minimum number of integer digits before the decimal point.
|
||||
* Default is `1`.
|
||||
* - `minFractionDigits`: The minimum number of digits after the decimal point.
|
||||
* Default is `0`.
|
||||
* Default is `2`.
|
||||
* - `maxFractionDigits`: The maximum number of digits after the decimal point.
|
||||
* Default is `3`.
|
||||
* Default is `2`.
|
||||
* If not provided, the number will be formatted with the proper amount of digits,
|
||||
* depending on what the [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) specifies.
|
||||
* For example, the Canadian dollar has 2 digits, whereas the Chilean peso has none.
|
||||
|
@ -25,6 +25,10 @@ describe('KeyValuePipe', () => {
|
||||
expect(pipe.transform(fn as any)).toEqual(null);
|
||||
});
|
||||
describe('object dictionary', () => {
|
||||
it('should return empty array of an empty dictionary', () => {
|
||||
const pipe = new KeyValuePipe(defaultKeyValueDiffers);
|
||||
expect(pipe.transform({})).toEqual([]);
|
||||
});
|
||||
it('should transform a basic dictionary', () => {
|
||||
const pipe = new KeyValuePipe(defaultKeyValueDiffers);
|
||||
expect(pipe.transform({1: 2})).toEqual([{key: '1', value: 2}]);
|
||||
@ -62,6 +66,10 @@ describe('KeyValuePipe', () => {
|
||||
});
|
||||
|
||||
describe('Map', () => {
|
||||
it('should return an empty array for an empty Map', () => {
|
||||
const pipe = new KeyValuePipe(defaultKeyValueDiffers);
|
||||
expect(pipe.transform(new Map())).toEqual([]);
|
||||
});
|
||||
it('should transform a basic Map', () => {
|
||||
const pipe = new KeyValuePipe(defaultKeyValueDiffers);
|
||||
expect(pipe.transform(new Map([[1, 2]]))).toEqual([{key: 1, value: 2}]);
|
||||
|
@ -46,6 +46,9 @@ npm_package(
|
||||
tags = [
|
||||
"release-with-framework",
|
||||
],
|
||||
# Do not add more to this list.
|
||||
# Dependencies on the full npm_package cause long re-builds.
|
||||
visibility = ["//visibility:private"],
|
||||
deps = [
|
||||
":compiler-cli",
|
||||
"//packages/compiler-cli/src/ngcc",
|
||||
|
@ -24,6 +24,11 @@ ng_package(
|
||||
tags = [
|
||||
"release-with-framework",
|
||||
],
|
||||
# Do not add more to this list.
|
||||
# Dependencies on the full npm_package cause long re-builds.
|
||||
visibility = [
|
||||
"//packages/language-service/test:__pkg__",
|
||||
],
|
||||
deps = [
|
||||
":compiler",
|
||||
"//packages/compiler/testing",
|
||||
|
@ -29,6 +29,17 @@ ng_package(
|
||||
tags = [
|
||||
"release-with-framework",
|
||||
],
|
||||
# Do not add more to this list.
|
||||
# Dependencies on the full npm_package cause long re-builds.
|
||||
visibility = [
|
||||
"//packages/bazel/test/ng_package:__pkg__",
|
||||
"//packages/compiler-cli/test:__pkg__",
|
||||
"//packages/compiler-cli/test/diagnostics:__pkg__",
|
||||
"//packages/compiler-cli/test/ngcc:__pkg__",
|
||||
"//packages/compiler-cli/test/transformers:__pkg__",
|
||||
"//packages/compiler/test:__pkg__",
|
||||
"//packages/language-service/test:__pkg__",
|
||||
],
|
||||
deps = [
|
||||
":core",
|
||||
"//packages/core/testing",
|
||||
|
@ -31,6 +31,9 @@ ng_package(
|
||||
tags = [
|
||||
"release-with-framework",
|
||||
],
|
||||
# Do not add more to this list.
|
||||
# Dependencies on the full npm_package cause long re-builds.
|
||||
visibility = ["//visibility:private"],
|
||||
deps = [
|
||||
":elements",
|
||||
],
|
||||
|
@ -25,6 +25,12 @@ ng_package(
|
||||
tags = [
|
||||
"release-with-framework",
|
||||
],
|
||||
# Do not add more to this list.
|
||||
# Dependencies on the full npm_package cause long re-builds.
|
||||
visibility = [
|
||||
"//packages/compiler-cli/test/diagnostics:__pkg__",
|
||||
"//packages/language-service/test:__pkg__",
|
||||
],
|
||||
deps = [
|
||||
":forms",
|
||||
],
|
||||
|
@ -15,7 +15,7 @@ import {NG_VALIDATORS, Validators} from '../validators';
|
||||
|
||||
/**
|
||||
* @description
|
||||
* Defines the map of errors returned from failed validation checks
|
||||
* Defines the map of errors returned from failed validation checks.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
@ -53,7 +53,7 @@ export interface Validator {
|
||||
* @description
|
||||
* Method that performs synchronous validation against the provided control.
|
||||
*
|
||||
* @param c The control to validate against.
|
||||
* @param control The control to validate against.
|
||||
*
|
||||
* @returns A map of validation errors if validation fails,
|
||||
* otherwise null.
|
||||
@ -102,7 +102,7 @@ export interface AsyncValidator extends Validator {
|
||||
* @description
|
||||
* Method that performs async validation against the provided control.
|
||||
*
|
||||
* @param c The control to validate against.
|
||||
* @param control The control to validate against.
|
||||
*
|
||||
* @returns A promise or observable that resolves a map of validation errors
|
||||
* if validation fails, otherwise null.
|
||||
@ -111,12 +111,20 @@ export interface AsyncValidator extends Validator {
|
||||
Promise<ValidationErrors|null>|Observable<ValidationErrors|null>;
|
||||
}
|
||||
|
||||
/**
|
||||
* @description
|
||||
* Provider which adds `RequiredValidator` to the `NG_VALIDATORS` multi-provider list.
|
||||
*/
|
||||
export const REQUIRED_VALIDATOR: StaticProvider = {
|
||||
provide: NG_VALIDATORS,
|
||||
useExisting: forwardRef(() => RequiredValidator),
|
||||
multi: true
|
||||
};
|
||||
|
||||
/**
|
||||
* @description
|
||||
* Provider which adds `CheckboxRequiredValidator` to the `NG_VALIDATORS` multi-provider list.
|
||||
*/
|
||||
export const CHECKBOX_REQUIRED_VALIDATOR: StaticProvider = {
|
||||
provide: NG_VALIDATORS,
|
||||
useExisting: forwardRef(() => CheckboxRequiredValidator),
|
||||
@ -125,11 +133,15 @@ export const CHECKBOX_REQUIRED_VALIDATOR: StaticProvider = {
|
||||
|
||||
|
||||
/**
|
||||
* A Directive that adds the `required` validator to any controls marked with the
|
||||
* `required` attribute, via the `NG_VALIDATORS` binding.
|
||||
* @description
|
||||
* A directive that adds the `required` validator to any controls marked with the
|
||||
* `required` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.
|
||||
*
|
||||
* @see [Form Validation](guide/form-validation)
|
||||
*
|
||||
* @usageNotes
|
||||
* ### Example
|
||||
*
|
||||
* ### Adding a required validator using template-driven forms
|
||||
*
|
||||
* ```
|
||||
* <input name="fullName" ngModel required>
|
||||
@ -151,6 +163,10 @@ export class RequiredValidator implements Validator {
|
||||
// TODO(issue/24571): remove '!'.
|
||||
private _onChange !: () => void;
|
||||
|
||||
/**
|
||||
* @description
|
||||
* Tracks changes to the required attribute bound to this directive.
|
||||
*/
|
||||
@Input()
|
||||
get required(): boolean|string { return this._required; }
|
||||
|
||||
@ -159,21 +175,37 @@ export class RequiredValidator implements Validator {
|
||||
if (this._onChange) this._onChange();
|
||||
}
|
||||
|
||||
/**
|
||||
* @description
|
||||
* Method that validates whether the control is empty.
|
||||
* Returns the validation result if enabled, otherwise null.
|
||||
*/
|
||||
validate(control: AbstractControl): ValidationErrors|null {
|
||||
return this.required ? Validators.required(control) : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @description
|
||||
* Registers a callback function to call when the validator inputs change.
|
||||
*
|
||||
* @param fn The callback function
|
||||
*/
|
||||
registerOnValidatorChange(fn: () => void): void { this._onChange = fn; }
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* A Directive that adds the `required` validator to checkbox controls marked with the
|
||||
* `required` attribute, via the `NG_VALIDATORS` binding.
|
||||
* `required` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.
|
||||
*
|
||||
* @see [Form Validation](guide/form-validation)
|
||||
*
|
||||
* @usageNotes
|
||||
* ### Example
|
||||
*
|
||||
* ### Adding a required checkbox validator using template-driven forms
|
||||
*
|
||||
* The following example shows how to add a checkbox required validator to an input attached to an ngModel binding.
|
||||
*
|
||||
* ```
|
||||
* <input type="checkbox" name="active" ngModel required>
|
||||
* ```
|
||||
@ -189,13 +221,19 @@ export class RequiredValidator implements Validator {
|
||||
host: {'[attr.required]': 'required ? "" : null'}
|
||||
})
|
||||
export class CheckboxRequiredValidator extends RequiredValidator {
|
||||
/**
|
||||
* @description
|
||||
* Method that validates whether or not the checkbox has been checked.
|
||||
* Returns the validation result if enabled, otherwise null.
|
||||
*/
|
||||
validate(control: AbstractControl): ValidationErrors|null {
|
||||
return this.required ? Validators.requiredTrue(control) : null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Provider which adds `EmailValidator` to `NG_VALIDATORS`.
|
||||
* @description
|
||||
* Provider which adds `EmailValidator` to the `NG_VALIDATORS` multi-provider list.
|
||||
*/
|
||||
export const EMAIL_VALIDATOR: any = {
|
||||
provide: NG_VALIDATORS,
|
||||
@ -204,12 +242,17 @@ export const EMAIL_VALIDATOR: any = {
|
||||
};
|
||||
|
||||
/**
|
||||
* A Directive that adds the `email` validator to controls marked with the
|
||||
* `email` attribute, via the `NG_VALIDATORS` binding.
|
||||
* A directive that adds the `email` validator to controls marked with the
|
||||
* `email` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.
|
||||
*
|
||||
* @see [Form Validation](guide/form-validation)
|
||||
*
|
||||
* @usageNotes
|
||||
* ### Example
|
||||
*
|
||||
* ### Adding an email validator
|
||||
*
|
||||
* The following example shows how to add an email validator to an input attached to an ngModel binding.
|
||||
*
|
||||
* ```
|
||||
* <input type="email" name="email" ngModel email>
|
||||
* <input type="email" name="email" ngModel email="true">
|
||||
@ -230,25 +273,48 @@ export class EmailValidator implements Validator {
|
||||
// TODO(issue/24571): remove '!'.
|
||||
private _onChange !: () => void;
|
||||
|
||||
/**
|
||||
* @description
|
||||
* Tracks changes to the email attribute bound to this directive.
|
||||
*/
|
||||
@Input()
|
||||
set email(value: boolean|string) {
|
||||
this._enabled = value === '' || value === true || value === 'true';
|
||||
if (this._onChange) this._onChange();
|
||||
}
|
||||
|
||||
/**
|
||||
* @description
|
||||
* Method that validates whether an email address is valid.
|
||||
* Returns the validation result if enabled, otherwise null.
|
||||
*/
|
||||
validate(control: AbstractControl): ValidationErrors|null {
|
||||
return this._enabled ? Validators.email(control) : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @description
|
||||
* Registers a callback function to call when the validator inputs change.
|
||||
*
|
||||
* @param fn The callback function
|
||||
*/
|
||||
registerOnValidatorChange(fn: () => void): void { this._onChange = fn; }
|
||||
}
|
||||
|
||||
/**
|
||||
* @description
|
||||
* A function that receives a control and synchronously returns a map of
|
||||
* validation errors if present, otherwise null.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export interface ValidatorFn { (control: AbstractControl): ValidationErrors|null; }
|
||||
|
||||
/**
|
||||
* @description
|
||||
* A function that receives a control and returns a Promise or observable
|
||||
* that emits validation errors if present, otherwise null.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export interface AsyncValidatorFn {
|
||||
@ -256,12 +322,8 @@ export interface AsyncValidatorFn {
|
||||
}
|
||||
|
||||
/**
|
||||
* Provider which adds `MinLengthValidator` to `NG_VALIDATORS`.
|
||||
*
|
||||
* @usageNotes
|
||||
* ### Example:
|
||||
*
|
||||
* {@example common/forms/ts/validators/validators.ts region='min'}
|
||||
* @description
|
||||
* Provider which adds `MinLengthValidator` to the `NG_VALIDATORS` multi-provider list.
|
||||
*/
|
||||
export const MIN_LENGTH_VALIDATOR: any = {
|
||||
provide: NG_VALIDATORS,
|
||||
@ -270,11 +332,24 @@ export const MIN_LENGTH_VALIDATOR: any = {
|
||||
};
|
||||
|
||||
/**
|
||||
* A directive which installs the `MinLengthValidator` for any `formControlName`,
|
||||
* `formControl`, or control with `ngModel` that also has a `minlength` attribute.
|
||||
* A directive that adds minimum length validation to controls marked with the
|
||||
* `minlength` attribute. The directive is provided with the `NG_VALIDATORS` mult-provider list.
|
||||
*
|
||||
* @see [Form Validation](guide/form-validation)
|
||||
*
|
||||
* @usageNotes
|
||||
*
|
||||
* ### Adding a minimum length validator
|
||||
*
|
||||
* The following example shows how to add a minimum length validator to an input attached to an
|
||||
* ngModel binding.
|
||||
*
|
||||
* ```html
|
||||
* <input name="firstName" ngModel minlength="4">
|
||||
* ```
|
||||
*
|
||||
* @ngModule FormsModule
|
||||
* @ngModule ReactiveFormsModule
|
||||
* @ngModule FormsModule
|
||||
* @publicApi
|
||||
*/
|
||||
@Directive({
|
||||
@ -289,9 +364,20 @@ export class MinLengthValidator implements Validator,
|
||||
// TODO(issue/24571): remove '!'.
|
||||
private _onChange !: () => void;
|
||||
|
||||
/**
|
||||
* @description
|
||||
* Tracks changes to the the minimum length bound to this directive.
|
||||
*/
|
||||
// TODO(issue/24571): remove '!'.
|
||||
@Input() minlength !: string;
|
||||
|
||||
/**
|
||||
* @description
|
||||
* A lifecycle method called when the directive's inputs change. For internal use
|
||||
* only.
|
||||
*
|
||||
* @param changes A object of key/value pairs for the set of changed inputs.
|
||||
*/
|
||||
ngOnChanges(changes: SimpleChanges): void {
|
||||
if ('minlength' in changes) {
|
||||
this._createValidator();
|
||||
@ -299,10 +385,21 @@ export class MinLengthValidator implements Validator,
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @description
|
||||
* Method that validates whether the value meets a minimum length
|
||||
* requirement. Returns the validation result if enabled, otherwise null.
|
||||
*/
|
||||
validate(control: AbstractControl): ValidationErrors|null {
|
||||
return this.minlength == null ? null : this._validator(control);
|
||||
}
|
||||
|
||||
/**
|
||||
* @description
|
||||
* Registers a callback function to call when the validator inputs change.
|
||||
*
|
||||
* @param fn The callback function
|
||||
*/
|
||||
registerOnValidatorChange(fn: () => void): void { this._onChange = fn; }
|
||||
|
||||
private _createValidator(): void {
|
||||
@ -311,12 +408,8 @@ export class MinLengthValidator implements Validator,
|
||||
}
|
||||
|
||||
/**
|
||||
* Provider which adds `MaxLengthValidator` to `NG_VALIDATORS`.
|
||||
*
|
||||
* @usageNotes
|
||||
* ### Example:
|
||||
*
|
||||
* {@example common/forms/ts/validators/validators.ts region='max'}
|
||||
* @description
|
||||
* Provider which adds `MaxLengthValidator` to the `NG_VALIDATORS` multi-provider list.
|
||||
*/
|
||||
export const MAX_LENGTH_VALIDATOR: any = {
|
||||
provide: NG_VALIDATORS,
|
||||
@ -325,11 +418,24 @@ export const MAX_LENGTH_VALIDATOR: any = {
|
||||
};
|
||||
|
||||
/**
|
||||
* A directive which installs the `MaxLengthValidator` for any `formControlName`,
|
||||
* `formControl`, or control with `ngModel` that also has a `maxlength` attribute.
|
||||
* A directive that adds max length validation to controls marked with the
|
||||
* `maxlength` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.
|
||||
*
|
||||
* @see [Form Validation](guide/form-validation)
|
||||
*
|
||||
* @usageNotes
|
||||
*
|
||||
* ### Adding a maximum length validator
|
||||
*
|
||||
* The following example shows how to add a maximum length validator to an input attached to an
|
||||
* ngModel binding.
|
||||
*
|
||||
* ```html
|
||||
* <input name="firstName" ngModel maxlength="25">
|
||||
* ```
|
||||
*
|
||||
* @ngModule FormsModule
|
||||
* @ngModule ReactiveFormsModule
|
||||
* @ngModule FormsModule
|
||||
* @publicApi
|
||||
*/
|
||||
@Directive({
|
||||
@ -344,9 +450,20 @@ export class MaxLengthValidator implements Validator,
|
||||
// TODO(issue/24571): remove '!'.
|
||||
private _onChange !: () => void;
|
||||
|
||||
/**
|
||||
* @description
|
||||
* Tracks changes to the the maximum length bound to this directive.
|
||||
*/
|
||||
// TODO(issue/24571): remove '!'.
|
||||
@Input() maxlength !: string;
|
||||
|
||||
/**
|
||||
* @description
|
||||
* A lifecycle method called when the directive's inputs change. For internal use
|
||||
* only.
|
||||
*
|
||||
* @param changes A object of key/value pairs for the set of changed inputs.
|
||||
*/
|
||||
ngOnChanges(changes: SimpleChanges): void {
|
||||
if ('maxlength' in changes) {
|
||||
this._createValidator();
|
||||
@ -354,10 +471,21 @@ export class MaxLengthValidator implements Validator,
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @description
|
||||
* Method that validates whether the value exceeds
|
||||
* the maximum length requirement.
|
||||
*/
|
||||
validate(control: AbstractControl): ValidationErrors|null {
|
||||
return this.maxlength != null ? this._validator(control) : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @description
|
||||
* Registers a callback function to call when the validator inputs change.
|
||||
*
|
||||
* @param fn The callback function
|
||||
*/
|
||||
registerOnValidatorChange(fn: () => void): void { this._onChange = fn; }
|
||||
|
||||
private _createValidator(): void {
|
||||
@ -365,7 +493,10 @@ export class MaxLengthValidator implements Validator,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @description
|
||||
* Provider which adds `PatternValidator` to the `NG_VALIDATORS` multi-provider list.
|
||||
*/
|
||||
export const PATTERN_VALIDATOR: any = {
|
||||
provide: NG_VALIDATORS,
|
||||
useExisting: forwardRef(() => PatternValidator),
|
||||
@ -374,20 +505,26 @@ export const PATTERN_VALIDATOR: any = {
|
||||
|
||||
|
||||
/**
|
||||
* A Directive that adds the `pattern` validator to any controls marked with the
|
||||
* `pattern` attribute, via the `NG_VALIDATORS` binding. Uses attribute value
|
||||
* as the regex to validate Control value against. Follows pattern attribute
|
||||
* semantics; i.e. regex must match entire Control value.
|
||||
* @description
|
||||
* A directive that adds regex pattern validation to controls marked with the
|
||||
* `pattern` attribute. The regex must match the entire control value.
|
||||
* The directive is provided with the `NG_VALIDATORS` multi-provider list.
|
||||
*
|
||||
* @see [Form Validation](guide/form-validation)
|
||||
*
|
||||
* @usageNotes
|
||||
* ### Example
|
||||
*
|
||||
* ```
|
||||
* <input [name]="fullName" pattern="[a-zA-Z ]*" ngModel>
|
||||
* ```
|
||||
* ### Adding a pattern validator
|
||||
*
|
||||
* @ngModule FormsModule
|
||||
* The following example shows how to add a pattern validator to an input attached to an
|
||||
* ngModel binding.
|
||||
*
|
||||
* ```html
|
||||
* <input name="firstName" ngModel pattern="[a-zA-Z ]*">
|
||||
* ```
|
||||
*
|
||||
* @ngModule ReactiveFormsModule
|
||||
* @ngModule FormsModule
|
||||
* @publicApi
|
||||
*/
|
||||
@Directive({
|
||||
@ -402,9 +539,20 @@ export class PatternValidator implements Validator,
|
||||
// TODO(issue/24571): remove '!'.
|
||||
private _onChange !: () => void;
|
||||
|
||||
/**
|
||||
* @description
|
||||
* Tracks changes to the pattern bound to this directive.
|
||||
*/
|
||||
// TODO(issue/24571): remove '!'.
|
||||
@Input() pattern !: string | RegExp;
|
||||
|
||||
/**
|
||||
* @description
|
||||
* A lifecycle method called when the directive's inputs change. For internal use
|
||||
* only.
|
||||
*
|
||||
* @param changes A object of key/value pairs for the set of changed inputs.
|
||||
*/
|
||||
ngOnChanges(changes: SimpleChanges): void {
|
||||
if ('pattern' in changes) {
|
||||
this._createValidator();
|
||||
@ -412,8 +560,19 @@ export class PatternValidator implements Validator,
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @description
|
||||
* Method that validates whether the value matches the
|
||||
* the pattern requirement.
|
||||
*/
|
||||
validate(control: AbstractControl): ValidationErrors|null { return this._validator(control); }
|
||||
|
||||
/**
|
||||
* @description
|
||||
* Registers a callback function to call when the validator inputs change.
|
||||
*
|
||||
* @param fn The callback function
|
||||
*/
|
||||
registerOnValidatorChange(fn: () => void): void { this._onChange = fn; }
|
||||
|
||||
private _createValidator(): void { this._validator = Validators.pattern(this.pattern); }
|
||||
|
@ -97,14 +97,17 @@ export type FormHooks = 'change' | 'blur' | 'submit';
|
||||
*/
|
||||
export interface AbstractControlOptions {
|
||||
/**
|
||||
* List of validators applied to control.
|
||||
* @description
|
||||
* The list of validators applied to a control.
|
||||
*/
|
||||
validators?: ValidatorFn|ValidatorFn[]|null;
|
||||
/**
|
||||
* List of async validators applied to control.
|
||||
* @description
|
||||
* The list of async validators applied to control.
|
||||
*/
|
||||
asyncValidators?: AsyncValidatorFn|AsyncValidatorFn[]|null;
|
||||
/**
|
||||
* @description
|
||||
* The event name for control to update upon.
|
||||
*/
|
||||
updateOn?: 'change'|'blur'|'submit';
|
||||
|
@ -28,6 +28,9 @@ ng_package(
|
||||
tags = [
|
||||
"release-with-framework",
|
||||
],
|
||||
# Do not add more to this list.
|
||||
# Dependencies on the full npm_package cause long re-builds.
|
||||
visibility = ["//visibility:private"],
|
||||
deps = [
|
||||
":http",
|
||||
"//packages/http/testing",
|
||||
|
@ -27,6 +27,9 @@ npm_package(
|
||||
tags = [
|
||||
"release-with-framework",
|
||||
],
|
||||
# Do not add more to this list.
|
||||
# Dependencies on the full npm_package cause long re-builds.
|
||||
visibility = ["//visibility:private"],
|
||||
deps = [
|
||||
":language-service",
|
||||
"//packages/language-service/bundles:language-service",
|
||||
|
@ -30,6 +30,9 @@ ng_package(
|
||||
tags = [
|
||||
"release-with-framework",
|
||||
],
|
||||
# Do not add more to this list.
|
||||
# Dependencies on the full npm_package cause long re-builds.
|
||||
visibility = ["//visibility:private"],
|
||||
deps = [
|
||||
":platform-browser-dynamic",
|
||||
"//packages/platform-browser-dynamic/testing",
|
||||
|
@ -31,6 +31,11 @@ ng_package(
|
||||
tags = [
|
||||
"release-with-framework",
|
||||
],
|
||||
# Do not add more to this list.
|
||||
# Dependencies on the full npm_package cause long re-builds.
|
||||
visibility = [
|
||||
"//packages/compiler-cli/test:__pkg__",
|
||||
],
|
||||
deps = [
|
||||
":platform-browser",
|
||||
"//packages/platform-browser/animations",
|
||||
|
@ -37,6 +37,9 @@ ng_package(
|
||||
tags = [
|
||||
"release-with-framework",
|
||||
],
|
||||
# Do not add more to this list.
|
||||
# Dependencies on the full npm_package cause long re-builds.
|
||||
visibility = ["//visibility:private"],
|
||||
deps = [
|
||||
":platform-server",
|
||||
"//packages/platform-server/testing",
|
||||
|
@ -27,5 +27,8 @@ ng_package(
|
||||
tags = [
|
||||
"release-with-framework",
|
||||
],
|
||||
# Do not add more to this list.
|
||||
# Dependencies on the full npm_package cause long re-builds.
|
||||
visibility = ["//visibility:private"],
|
||||
deps = [":platform-webworker-dynamic"],
|
||||
)
|
||||
|
@ -27,6 +27,9 @@ ng_package(
|
||||
tags = [
|
||||
"release-with-framework",
|
||||
],
|
||||
# Do not add more to this list.
|
||||
# Dependencies on the full npm_package cause long re-builds.
|
||||
visibility = ["//visibility:private"],
|
||||
deps = [
|
||||
":platform-webworker",
|
||||
],
|
||||
|
@ -31,6 +31,12 @@ ng_package(
|
||||
tags = [
|
||||
"release-with-framework",
|
||||
],
|
||||
# Do not add more to this list.
|
||||
# Dependencies on the full npm_package cause long re-builds.
|
||||
visibility = [
|
||||
"//packages/compiler-cli/test:__pkg__",
|
||||
"//packages/compiler-cli/test/transformers:__pkg__",
|
||||
],
|
||||
deps = [
|
||||
":router",
|
||||
"//packages/router/testing",
|
||||
|
@ -51,6 +51,9 @@ ng_package(
|
||||
tags = [
|
||||
"release-with-framework",
|
||||
],
|
||||
# Do not add more to this list.
|
||||
# Dependencies on the full npm_package cause long re-builds.
|
||||
visibility = ["//visibility:private"],
|
||||
deps = [
|
||||
":service-worker",
|
||||
"//packages/service-worker/config",
|
||||
|
@ -30,6 +30,9 @@ ng_package(
|
||||
tags = [
|
||||
"release-with-framework",
|
||||
],
|
||||
# Do not add more to this list.
|
||||
# Dependencies on the full npm_package cause long re-builds.
|
||||
visibility = ["//visibility:private"],
|
||||
deps = [
|
||||
":upgrade",
|
||||
"//packages/upgrade/static",
|
||||
|
@ -7,19 +7,23 @@
|
||||
*/
|
||||
import {setAngularJSGlobal} from '@angular/upgrade/src/common/angular1';
|
||||
|
||||
// Whether the upgrade tests should run against AngularJS minified or not. This can be
|
||||
// temporarily switched to "false" in order to make it easy to debug AngularJS locally.
|
||||
const TEST_MINIFIED = true;
|
||||
const ANGULARJS_FILENAME = TEST_MINIFIED ? 'angular.min.js' : 'angular.js';
|
||||
|
||||
const ng1Versions = [
|
||||
{
|
||||
label: '1.5',
|
||||
files: ['angular-1.5/angular.js', 'angular-mocks-1.5/angular-mocks.js'],
|
||||
files: [`angular-1.5/${ANGULARJS_FILENAME}`, 'angular-mocks-1.5/angular-mocks.js'],
|
||||
},
|
||||
{
|
||||
label: '1.6',
|
||||
files: ['angular-1.6/angular.js', 'angular-mocks-1.6/angular-mocks.js'],
|
||||
files: [`angular-1.6/${ANGULARJS_FILENAME}`, 'angular-mocks-1.6/angular-mocks.js'],
|
||||
},
|
||||
{
|
||||
label: '1.7',
|
||||
files: ['angular/angular.js', 'angular-mocks/angular-mocks.js'],
|
||||
files: [`angular/${ANGULARJS_FILENAME}`, 'angular-mocks/angular-mocks.js'],
|
||||
},
|
||||
];
|
||||
|
||||
@ -69,7 +73,18 @@ export function createWithEachNg1VersionFn(setNg1: typeof setAngularJSGlobal) {
|
||||
(prev, file) => prev.then(() => new Promise<void>((resolve, reject) => {
|
||||
const script = document.createElement('script');
|
||||
script.async = true;
|
||||
script.onerror = reject;
|
||||
script.onerror = () => {
|
||||
// Whenever the script failed loading, browsers will
|
||||
// just pass an "ErrorEvent" which does not contain
|
||||
// useful information on most browsers we run tests
|
||||
// against. In order to avoid writing logic to convert
|
||||
// the event into a readable error and since just
|
||||
// passing the event might cause people to spend
|
||||
// unnecessary time debugging the "ErrorEvent", we
|
||||
// create a simple error that doesn't imply that there
|
||||
// is a lot of information within the "ErrorEvent".
|
||||
reject(`An error occurred while loading: "${file}".`);
|
||||
};
|
||||
script.onload = () => {
|
||||
document.body.removeChild(script);
|
||||
resolve();
|
||||
|
@ -38,7 +38,7 @@ setEnvVar NODE_VERSION 10.9.0
|
||||
setEnvVar YARN_VERSION 1.12.1
|
||||
setEnvVar CHROMIUM_VERSION 561733 # Chrome 68 linux stable, see https://www.chromium.org/developers/calendar
|
||||
setEnvVar CHROMEDRIVER_VERSION_ARG "--versions.chrome 2.41"
|
||||
setEnvVar SAUCE_CONNECT_VERSION 4.4.9
|
||||
setEnvVar SAUCE_CONNECT_VERSION 4.5.2
|
||||
setEnvVar ANGULAR_CLI_VERSION 1.6.3
|
||||
setEnvVar CI_AIO_MIN_PWA_SCORE 95
|
||||
setEnvVar CI_BRANCH $TRAVIS_BRANCH
|
||||
|
@ -22,14 +22,13 @@ CONNECT_URL="https://saucelabs.com/downloads/sc-${SAUCE_CONNECT_VERSION}-linux.t
|
||||
CONNECT_DIR="/tmp/sauce-connect-$RANDOM"
|
||||
CONNECT_DOWNLOAD="sc-latest-linux.tar.gz"
|
||||
|
||||
# logging disabled because it seems to be overwhelming travis and causing flakes
|
||||
# when we are cat-ing the log in print-logs.sh
|
||||
# CONNECT_LOG="$LOGS_DIR/sauce-connect"
|
||||
# CONNECT_STDOUT="$LOGS_DIR/sauce-connect.stdout"
|
||||
# CONNECT_STDERR="$LOGS_DIR/sauce-connect.stderr"
|
||||
# We don't want to create a log file because sauceconnect always logs in verbose mode. This seems
|
||||
# to be overwhelming Travis and causing flakes when we are cat-ing the log in "print-logs.sh"
|
||||
CONNECT_LOG="/dev/null"
|
||||
|
||||
# Even though the stdout of sauceconnect is not very verbose, we don't want to log this to
|
||||
# Travis because it will show up in between different travis log-output groups
|
||||
CONNECT_STDOUT="/dev/null"
|
||||
CONNECT_STDERR="/dev/null"
|
||||
|
||||
# Get Connect and start it
|
||||
mkdir -p $CONNECT_DIR
|
||||
@ -52,10 +51,7 @@ if [ ! -z "$BROWSER_PROVIDER_READY_FILE" ]; then
|
||||
fi
|
||||
|
||||
set -v
|
||||
echo "Starting Sauce Connect in the background, logging into:"
|
||||
echo " $CONNECT_LOG"
|
||||
echo " $CONNECT_STDOUT"
|
||||
echo " $CONNECT_STDERR"
|
||||
sauce-connect/bin/sc -u $SAUCE_USERNAME -k $SAUCE_ACCESS_KEY $ARGS \
|
||||
--logfile $CONNECT_LOG 2> $CONNECT_STDERR 1> $CONNECT_STDOUT &
|
||||
echo "Starting Sauce Connect in the background."
|
||||
sauce-connect/bin/sc -u $SAUCE_USERNAME -k $SAUCE_ACCESS_KEY $ARGS --logfile $CONNECT_LOG \
|
||||
> $CONNECT_STDOUT &
|
||||
set +v
|
||||
|
@ -15,7 +15,8 @@ try {
|
||||
// This can be fixed using the --preserve-symlinks-main flag which
|
||||
// is introduced in node 10.2.0
|
||||
console.warn(
|
||||
'Running postinstall-patches.js script in an external repository requires --preserve-symlinks-main node flag introduced in node 10.2.0');
|
||||
`Running postinstall-patches.js script in an external repository requires --preserve-symlinks-main node flag introduced in node 10.2.0. ` +
|
||||
`Current node version is ${process.version}. Node called with '${process.argv.join(" ")}'.`);
|
||||
process.exit(0);
|
||||
}
|
||||
|
||||
@ -23,21 +24,24 @@ const {set, cd, sed, rm} = require('shelljs');
|
||||
const path = require('path');
|
||||
const log = console.log;
|
||||
|
||||
log('===== about to run the postinstall-patches.js script =====');
|
||||
// fail on first error
|
||||
set('-e');
|
||||
// print commands as being executed
|
||||
set('-v');
|
||||
// jump to project root
|
||||
cd(path.join(__dirname, '../'));
|
||||
// COMMENTED OUT BECAUSE WE CURRENTLY REQUIRE NO PATCHES
|
||||
// UNCOMMENT TO REENABLE PATCHING AND LOG OUTPUT
|
||||
//
|
||||
// log('===== about to run the postinstall-patches.js script =====');
|
||||
// // fail on first error
|
||||
// set('-e');
|
||||
// // print commands as being executed
|
||||
// set('-v');
|
||||
// // jump to project root
|
||||
// cd(path.join(__dirname, '../'));
|
||||
|
||||
/* EXAMPLE PATCH:
|
||||
// https://github.com/ReactiveX/rxjs/pull/3302
|
||||
// make node_modules/rxjs compilable with Typescript 2.7
|
||||
// remove when we update to rxjs v6
|
||||
log('\n# patch: reactivex/rxjs#3302 make node_modules/rxjs compilable with Typescript 2.7');
|
||||
sed('-i', '(\'response\' in xhr)', '(\'response\' in (xhr as any))',
|
||||
'node_modules/rxjs/src/observable/dom/AjaxObservable.ts');
|
||||
*/
|
||||
// /* EXAMPLE PATCH:
|
||||
// // https://github.com/ReactiveX/rxjs/pull/3302
|
||||
// // make node_modules/rxjs compilable with Typescript 2.7
|
||||
// // remove when we update to rxjs v6
|
||||
// log('\n# patch: reactivex/rxjs#3302 make node_modules/rxjs compilable with Typescript 2.7');
|
||||
// sed('-i', '(\'response\' in xhr)', '(\'response\' in (xhr as any))',
|
||||
// 'node_modules/rxjs/src/observable/dom/AjaxObservable.ts');
|
||||
// */
|
||||
|
||||
log('===== finished running the postinstall-patches.js script =====');
|
||||
// log('===== finished running the postinstall-patches.js script =====');
|
||||
|
@ -30,5 +30,8 @@
|
||||
"typings-test",
|
||||
"public_api_guard",
|
||||
"docs"
|
||||
]
|
||||
}
|
||||
],
|
||||
"bazelOptions": {
|
||||
"suppressTsconfigOverrideWarnings": true
|
||||
}
|
||||
}
|
||||
|
91
yarn.lock
91
yarn.lock
@ -82,10 +82,10 @@
|
||||
"@bazel/buildifier-darwin_x64" "0.19.2"
|
||||
"@bazel/buildifier-linux_x64" "0.19.2"
|
||||
|
||||
"@bazel/ibazel@~0.8.2":
|
||||
version "0.8.2"
|
||||
resolved "https://registry.yarnpkg.com/@bazel/ibazel/-/ibazel-0.8.2.tgz#a837d93922c0d273361ed4f141c792384c0e10bb"
|
||||
integrity sha512-5lbqeoqv2sIRybV9s4CIRNBR68wdv22wfpNY1qmO3AsPrLx4zICPXyW8YOiLaLvYPzvezPznfhD7Is13jU/jsQ==
|
||||
"@bazel/ibazel@~0.9.0":
|
||||
version "0.9.0"
|
||||
resolved "https://registry.yarnpkg.com/@bazel/ibazel/-/ibazel-0.9.0.tgz#fd60023acd36313d304cc2f8c2e181b88b5445cd"
|
||||
integrity sha512-E31cefDcdJsx/oii6p/gqKZXSVw0kEg1O73DD2McFcSvnf/p1GYWcQtVgdRQmlviBEytJkJgdX8rtThitRvcow==
|
||||
|
||||
"@bazel/karma@~0.22.0":
|
||||
version "0.22.0"
|
||||
@ -3482,18 +3482,17 @@ graphviz@0.0.7:
|
||||
dependencies:
|
||||
temp "~0.4.0"
|
||||
|
||||
gulp-clang-format@1.0.23:
|
||||
version "1.0.23"
|
||||
resolved "https://registry.yarnpkg.com/gulp-clang-format/-/gulp-clang-format-1.0.23.tgz#fe258586b83998491e632fc0c4fc0ecdfa10c89f"
|
||||
integrity sha1-/iWFhrg5mEkeYy/AxPwOzfoQyJ8=
|
||||
gulp-clang-format@1.0.27:
|
||||
version "1.0.27"
|
||||
resolved "https://registry.yarnpkg.com/gulp-clang-format/-/gulp-clang-format-1.0.27.tgz#c89716c26745703356c4ff3f2b0964393c73969e"
|
||||
integrity sha512-Jj4PGuNXKdqVCh9fijvL7wdzma5TQRJz1vv8FjOjnSkfq3s/mvbdE/jq+5HG1c/q+jcYkXTEGkYT3CrdnJOLaQ==
|
||||
dependencies:
|
||||
clang-format "^1.0.32"
|
||||
fancy-log "^1.3.2"
|
||||
gulp-diff "^1.0.0"
|
||||
gulp-util "^3.0.4"
|
||||
pkginfo "^0.3.0"
|
||||
plugin-error "^1.0.1"
|
||||
stream-combiner2 "^1.1.1"
|
||||
stream-equal "0.1.6"
|
||||
through2 "^0.6.3"
|
||||
through2 "^2.0.3"
|
||||
|
||||
gulp-connect@5.0.0:
|
||||
version "5.0.0"
|
||||
@ -3562,7 +3561,7 @@ gulp-tslint@8.1.2:
|
||||
map-stream "~0.0.7"
|
||||
through "~2.3.8"
|
||||
|
||||
gulp-util@^3.0.0, gulp-util@^3.0.4, gulp-util@^3.0.6, gulp-util@~3.0.8:
|
||||
gulp-util@^3.0.0, gulp-util@^3.0.6, gulp-util@~3.0.8:
|
||||
version "3.0.8"
|
||||
resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f"
|
||||
integrity sha1-AFTh50RQLifATBh8PsxQXdVLu08=
|
||||
@ -4389,13 +4388,6 @@ jasmine-core@~2.99.0:
|
||||
resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.99.1.tgz#e6400df1e6b56e130b61c4bcd093daa7f6e8ca15"
|
||||
integrity sha1-5kAN8ea1bhMLYcS80JPap/boyhU=
|
||||
|
||||
jasmine-diff@^0.1.3:
|
||||
version "0.1.3"
|
||||
resolved "https://registry.yarnpkg.com/jasmine-diff/-/jasmine-diff-0.1.3.tgz#93ccc2dcc41028c5ddd4606558074839f2deeaa8"
|
||||
integrity sha1-k8zC3MQQKMXd1GBlWAdIOfLe6qg=
|
||||
dependencies:
|
||||
diff "^3.2.0"
|
||||
|
||||
jasmine@^2.5.3:
|
||||
version "2.99.0"
|
||||
resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-2.99.0.tgz#8ca72d102e639b867c6489856e0e18a9c7aa42b7"
|
||||
@ -4667,7 +4659,7 @@ karma-requirejs@1.1.0:
|
||||
resolved "https://registry.yarnpkg.com/karma-requirejs/-/karma-requirejs-1.1.0.tgz#fddae2cb87d7ebc16fb0222893564d7fee578798"
|
||||
integrity sha1-/driy4fX68FvsCIok1ZNf+5Xh5g=
|
||||
|
||||
karma-sauce-launcher@1.2.0, karma-sauce-launcher@^1.2.0:
|
||||
karma-sauce-launcher@1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/karma-sauce-launcher/-/karma-sauce-launcher-1.2.0.tgz#6f2558ddef3cf56879fa27540c8ae9f8bfd16bca"
|
||||
integrity sha512-lEhtGRGS+3Yw6JSx/vJY9iQyHNtTjcojrSwNzqNUOaDceKDu9dPZqA/kr69bUO9G2T6GKbu8AZgXqy94qo31Jg==
|
||||
@ -4677,6 +4669,15 @@ karma-sauce-launcher@1.2.0, karma-sauce-launcher@^1.2.0:
|
||||
saucelabs "^1.4.0"
|
||||
wd "^1.4.0"
|
||||
|
||||
karma-sauce-launcher@^2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/karma-sauce-launcher/-/karma-sauce-launcher-2.0.2.tgz#dbf98e70d86bf287b03a537cf637eb7aefa975c3"
|
||||
integrity sha512-jLUFaJhHMcKpxFWUesyWYihzM5FvQiJsDwGcCtKeOy2lsWhkVw0V0Byqb1d+wU6myU1mribBtsIcub23HS4kWA==
|
||||
dependencies:
|
||||
sauce-connect-launcher "^1.2.4"
|
||||
saucelabs "^1.5.0"
|
||||
selenium-webdriver "^4.0.0-alpha.1"
|
||||
|
||||
karma-sourcemap-loader@0.3.7, karma-sourcemap-loader@^0.3.7:
|
||||
version "0.3.7"
|
||||
resolved "https://registry.yarnpkg.com/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz#91322c77f8f13d46fed062b042e1009d4c4505d8"
|
||||
@ -6352,11 +6353,6 @@ pinkie@^2.0.0:
|
||||
resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
|
||||
integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
|
||||
|
||||
pkginfo@^0.3.0:
|
||||
version "0.3.1"
|
||||
resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.3.1.tgz#5b29f6a81f70717142e09e765bbeab97b4f81e21"
|
||||
integrity sha1-Wyn2qB9wcXFC4J52W76rl7T4HiE=
|
||||
|
||||
plugin-error@^0.1.2:
|
||||
version "0.1.2"
|
||||
resolved "https://registry.yarnpkg.com/plugin-error/-/plugin-error-0.1.2.tgz#3b9bb3335ccf00f425e07437e19276967da47ace"
|
||||
@ -7173,7 +7169,7 @@ safe-regex@^1.1.0:
|
||||
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
|
||||
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
|
||||
|
||||
sauce-connect-launcher@^1.2.2:
|
||||
sauce-connect-launcher@^1.2.2, sauce-connect-launcher@^1.2.4:
|
||||
version "1.2.4"
|
||||
resolved "https://registry.yarnpkg.com/sauce-connect-launcher/-/sauce-connect-launcher-1.2.4.tgz#8d38f85242a9fbede1b2303b559f7e20c5609a1c"
|
||||
integrity sha512-X2vfwulR6brUGiicXKxPm1GJ7dBEeP1II450Uv4bHGrcGOapZNgzJvn9aioea5IC5BPp/7qjKdE3xbbTBIVXMA==
|
||||
@ -7184,7 +7180,7 @@ sauce-connect-launcher@^1.2.2:
|
||||
lodash "^4.16.6"
|
||||
rimraf "^2.5.4"
|
||||
|
||||
saucelabs@^1.4.0:
|
||||
saucelabs@^1.4.0, saucelabs@^1.5.0:
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/saucelabs/-/saucelabs-1.5.0.tgz#9405a73c360d449b232839919a86c396d379fd9d"
|
||||
integrity sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==
|
||||
@ -7239,6 +7235,16 @@ selenium-webdriver@^2.53.2:
|
||||
ws "^1.0.1"
|
||||
xml2js "0.4.4"
|
||||
|
||||
selenium-webdriver@^4.0.0-alpha.1:
|
||||
version "4.0.0-alpha.1"
|
||||
resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-4.0.0-alpha.1.tgz#cc93415e21d2dc1dfd85dfc5f6b55f3ac53933b1"
|
||||
integrity sha512-z88rdjHAv3jmTZ7KSGUkTvo4rGzcDGMq0oXWHNIDK96Gs31JKVdu9+FMtT4KBrVoibg8dUicJDok6GnqqttO5Q==
|
||||
dependencies:
|
||||
jszip "^3.1.3"
|
||||
rimraf "^2.5.4"
|
||||
tmp "0.0.30"
|
||||
xml2js "^0.4.17"
|
||||
|
||||
"semver@2 || 3 || 4", semver@^4.1.0:
|
||||
version "4.3.6"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da"
|
||||
@ -7600,14 +7606,6 @@ source-map-support@0.5.9:
|
||||
buffer-from "^1.0.0"
|
||||
source-map "^0.6.0"
|
||||
|
||||
source-map-support@^0.5.0:
|
||||
version "0.5.6"
|
||||
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.6.tgz#4435cee46b1aab62b8e8610ce60f788091c51c13"
|
||||
integrity sha512-N4KXEz7jcKqPf2b2vZF11lQIz9W5ZMuUcIOGj243lduidkf2fjkVKJS9vNxVWn3u/uxX38AcE8U9nnH9FPcq+g==
|
||||
dependencies:
|
||||
buffer-from "^1.0.0"
|
||||
source-map "^0.6.0"
|
||||
|
||||
source-map-support@~0.4.0:
|
||||
version "0.4.18"
|
||||
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f"
|
||||
@ -7620,7 +7618,7 @@ source-map-url@^0.4.0:
|
||||
resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
|
||||
integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=
|
||||
|
||||
source-map@*, source-map@0.7.3:
|
||||
source-map@*, source-map@0.7.3, source-map@^0.7.3:
|
||||
version "0.7.3"
|
||||
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
|
||||
integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
|
||||
@ -7800,11 +7798,6 @@ stream-counter@~0.2.0:
|
||||
dependencies:
|
||||
readable-stream "~1.1.8"
|
||||
|
||||
stream-equal@0.1.6:
|
||||
version "0.1.6"
|
||||
resolved "https://registry.yarnpkg.com/stream-equal/-/stream-equal-0.1.6.tgz#cc522fab38516012e4d4ee47513b147b72359019"
|
||||
integrity sha1-zFIvqzhRYBLk1O5HUTsUe3I1kBk=
|
||||
|
||||
stream-to-array@~2.3.0:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/stream-to-array/-/stream-to-array-2.3.0.tgz#bbf6b39f5f43ec30bc71babcb37557acecf34353"
|
||||
@ -8023,7 +8016,7 @@ throttleit@~0.0.2:
|
||||
resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-0.0.2.tgz#cfedf88e60c00dd9697b61fdd2a8343a9b680eaf"
|
||||
integrity sha1-z+34jmDADdlpe2H90qg0OptoDq8=
|
||||
|
||||
through2@^0.6.1, through2@^0.6.3:
|
||||
through2@^0.6.1:
|
||||
version "0.6.5"
|
||||
resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48"
|
||||
integrity sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=
|
||||
@ -8200,16 +8193,14 @@ trim-off-newlines@^1.0.0:
|
||||
resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3"
|
||||
integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM=
|
||||
|
||||
tsickle@0.32.1:
|
||||
version "0.32.1"
|
||||
resolved "https://registry.yarnpkg.com/tsickle/-/tsickle-0.32.1.tgz#f16e94ba80b32fc9ebe320dc94fbc2ca7f3521a5"
|
||||
integrity sha512-JW9j+W0SaMSZGejIFZBk0AiPfnhljK3oLx5SaqxrJhjlvzFyPml5zqG1/PuScUj6yTe1muEqwk5CnDK0cOZmKw==
|
||||
tsickle@0.33.1:
|
||||
version "0.33.1"
|
||||
resolved "https://registry.yarnpkg.com/tsickle/-/tsickle-0.33.1.tgz#eee4ebabeda3bcd8afc32cee34c822cbe3e839ec"
|
||||
integrity sha512-SpW2G3PvDGs4a5sMXPlWnCWHWRviWjSlI3U0734e3fU3U39VAE0NPr8M3W1cuL/OU/YXheYipGeEwtIJ5k0NHQ==
|
||||
dependencies:
|
||||
jasmine-diff "^0.1.3"
|
||||
minimist "^1.2.0"
|
||||
mkdirp "^0.5.1"
|
||||
source-map "^0.6.0"
|
||||
source-map-support "^0.5.0"
|
||||
source-map "^0.7.3"
|
||||
|
||||
tslib@^1.0.0, tslib@^1.7.1, tslib@^1.8.1, tslib@^1.9.0:
|
||||
version "1.9.3"
|
||||
|
Reference in New Issue
Block a user