diff --git a/.travis.yml b/.travis.yml
index 1778e4620c..a750480bcc 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -34,7 +34,23 @@ matrix:
- yarn install --network-timeout 1000000
script:
- 'if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then yarn checkformat --head=$TRAVIS_PULL_REQUEST_SHA --base=$(git merge-base HEAD $TRAVIS_BRANCH); fi'
- - yarn e2e
+ - yarn e2e --cli nx
+ - os: linux
+ language: node_js
+ node_js: 10
+ dist: trusty
+ sudo: required
+ cache:
+ npm: false
+ addons:
+ chrome: stable
+ before_install:
+ - export DISPLAY=:99.0; sh -e /etc/init.d/xvfb start;
+ install:
+ - yarn install --network-timeout 1000000
+ script:
+ - 'if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then yarn checkformat --head=$TRAVIS_PULL_REQUEST_SHA --base=$(git merge-base HEAD $TRAVIS_BRANCH); fi'
+ - yarn e2e --cli angular
notifications:
email: false
diff --git a/docs/api-cypress/schematics/cypress-project.md b/docs/api-cypress/schematics/cypress-project.md
index 940dbcfcbe..62d60a4a43 100644
--- a/docs/api-cypress/schematics/cypress-project.md
+++ b/docs/api-cypress/schematics/cypress-project.md
@@ -17,6 +17,14 @@ Type: `string`
A directory where the app is placed
+### linter
+
+Default: `tslint`
+
+Type: `string`
+
+The tool to use for running lint checks.
+
### name
Type: `string`
diff --git a/docs/api-node/schematics/application.md b/docs/api-node/schematics/application.md
index 4fdf490095..60234b2311 100644
--- a/docs/api-node/schematics/application.md
+++ b/docs/api-node/schematics/application.md
@@ -23,6 +23,14 @@ Type: `string`
Frontend project that needs to access this application. This sets up proxy configuration.
+### linter
+
+Default: `tslint`
+
+Type: `string`
+
+The tool to use for running lint checks.
+
### name
Type: `string`
diff --git a/docs/api-react/schematics/application.md b/docs/api-react/schematics/application.md
index 8b1dd6812e..6afa5d74cf 100644
--- a/docs/api-react/schematics/application.md
+++ b/docs/api-react/schematics/application.md
@@ -33,6 +33,14 @@ Type: `string`
Test runner to use for end to end (e2e) tests
+### linter
+
+Default: `tslint`
+
+Type: `string`
+
+The tool to use for running lint checks.
+
### name
Type: `string`
diff --git a/docs/api-react/schematics/component.md b/docs/api-react/schematics/component.md
index 5cefec1817..6ebc22f7dd 100644
--- a/docs/api-react/schematics/component.md
+++ b/docs/api-react/schematics/component.md
@@ -45,7 +45,7 @@ Use pascal case component file name (e.g. App.tsx)
Type: `string`
-The name of the project (as specified in angular.json).
+The name of the project.
### routing
diff --git a/docs/api-react/schematics/library.md b/docs/api-react/schematics/library.md
index 66a7ae8618..d4a2cd9b80 100644
--- a/docs/api-react/schematics/library.md
+++ b/docs/api-react/schematics/library.md
@@ -17,6 +17,14 @@ Type: `string`
A directory where the app is placed
+### linter
+
+Default: `tslint`
+
+Type: `string`
+
+The tool to use for running lint checks.
+
### name
Type: `string`
diff --git a/docs/api-web/schematics/application.md b/docs/api-web/schematics/application.md
index 6183773619..c238a60440 100644
--- a/docs/api-web/schematics/application.md
+++ b/docs/api-web/schematics/application.md
@@ -25,6 +25,14 @@ Type: `string`
Test runner to use for end to end (e2e) tests
+### linter
+
+Default: `tslint`
+
+Type: `string`
+
+The tool to use for running lint checks.
+
### name
Type: `string`
diff --git a/docs/api-workspace/builders/run-commands.md b/docs/api-workspace/builders/run-commands.md
index 1307ee8a32..f8352e9eaf 100644
--- a/docs/api-workspace/builders/run-commands.md
+++ b/docs/api-workspace/builders/run-commands.md
@@ -8,7 +8,7 @@ Run commands
Type: `string`
-Extra arguments. You can pass them as follows: ng run project:target --args='--wait=100'. You can them use {args.wait} syntax to interpolate them in angular.json
+Extra arguments. You can pass them as follows: ng run project:target --args='--wait=100'. You can them use {args.wait} syntax to interpolate them in the workspace config file.
### commands
diff --git a/docs/api-workspace/schematics/library.md b/docs/api-workspace/schematics/library.md
index ae4d4cac50..2723b6d247 100644
--- a/docs/api-workspace/schematics/library.md
+++ b/docs/api-workspace/schematics/library.md
@@ -17,6 +17,14 @@ Type: `string`
A directory where the app is placed
+### linter
+
+Default: `tslint`
+
+Type: `string`
+
+The tool to use for running lint checks.
+
### name
Type: `string`
diff --git a/docs/api-workspace/schematics/tao-new.md b/docs/api-workspace/schematics/tao-new.md
new file mode 100644
index 0000000000..1375e6308e
--- /dev/null
+++ b/docs/api-workspace/schematics/tao-new.md
@@ -0,0 +1,72 @@
+# tao-new [hidden]
+
+Create a workspace
+
+## Usage
+
+```bash
+ng generate tao-new ...
+
+```
+
+## Options
+
+### commit
+
+Default: `true`
+
+Type: `boolean`
+
+Initial repository commit information.
+
+### directory
+
+Type: `string`
+
+The directory name to create the workspace in.
+
+### name
+
+Type: `string`
+
+The name of the workspace.
+
+### npmScope
+
+Type: `string`
+
+Npm scope for importing libs.
+
+### preset
+
+Default: `empty`
+
+Type: `string`
+
+What to create in the new workspace
+
+### skipGit
+
+Alias(es): g
+
+Default: `false`
+
+Type: `boolean`
+
+Skip initializing a git repository.
+
+### skipInstall
+
+Default: `false`
+
+Type: `boolean`
+
+Skip installing dependency packages.
+
+### style
+
+Default: `css`
+
+Type: `string`
+
+The file extension to be used for style files.
diff --git a/docs/api-workspace/schematics/workspace.md b/docs/api-workspace/schematics/workspace.md
index c2ca021c29..1adc0adfe4 100644
--- a/docs/api-workspace/schematics/workspace.md
+++ b/docs/api-workspace/schematics/workspace.md
@@ -11,6 +11,14 @@ ng generate workspace ...
## Options
+### cli
+
+Default: `nx`
+
+Type: `string`
+
+CLI used for generating code and running tasks
+
### commit
Default: `true`
diff --git a/e2e/affected.test.ts b/e2e/affected.test.ts
index e8332e17f2..28be375325 100644
--- a/e2e/affected.test.ts
+++ b/e2e/affected.test.ts
@@ -3,15 +3,16 @@ import {
readFile,
readJson,
runCommand,
- runsInWSL,
uniq,
updateFile,
- runCLI
+ runCLI,
+ forEachCli,
+ supportUi
} from './utils';
let originalCIValue;
-describe('Affected', () => {
+forEachCli(() => {
/**
* Setting CI=true makes it simpler to configure assertions around output, as there
* won't be any colors.
@@ -24,210 +25,210 @@ describe('Affected', () => {
process.env.CI = originalCIValue;
});
- it('should print, build, and test affected apps', () => {
- ensureProject();
- const myapp = uniq('myapp');
- const myapp2 = uniq('myapp2');
- const mylib = uniq('mylib');
- const mylib2 = uniq('mylib2');
- const mypublishablelib = uniq('mypublishablelib');
- runCLI(`generate @nrwl/angular:app ${myapp}`);
- runCLI(`generate @nrwl/angular:app ${myapp2}`);
- runCLI(`generate @nrwl/angular:lib ${mylib}`);
- runCLI(`generate @nrwl/angular:lib ${mylib2}`);
- runCLI(`generate @nrwl/angular:lib ${mypublishablelib} --publishable`);
+ describe('Affected', () => {
+ it('should print, build, and test affected apps', () => {
+ ensureProject();
+ const myapp = uniq('myapp');
+ const myapp2 = uniq('myapp2');
+ const mylib = uniq('mylib');
+ const mylib2 = uniq('mylib2');
+ const mypublishablelib = uniq('mypublishablelib');
+ runCLI(`generate @nrwl/angular:app ${myapp}`);
+ runCLI(`generate @nrwl/angular:app ${myapp2}`);
+ runCLI(`generate @nrwl/angular:lib ${mylib}`);
+ runCLI(`generate @nrwl/angular:lib ${mylib2}`);
+ runCLI(`generate @nrwl/angular:lib ${mypublishablelib} --publishable`);
- updateFile(
- `apps/${myapp}/src/app/app.component.spec.ts`,
- `
- import '@proj/${mylib}';
- describe('sample test', () => {
- it('should test', () => {
- expect(1).toEqual(1);
+ updateFile(
+ `apps/${myapp}/src/app/app.component.spec.ts`,
+ `
+ import '@proj/${mylib}';
+ describe('sample test', () => {
+ it('should test', () => {
+ expect(1).toEqual(1);
+ });
});
- });
- `
- );
- updateFile(
- `libs/${mypublishablelib}/src/lib/${mypublishablelib}.module.spec.ts`,
- `
- import '@proj/${mylib}';
- describe('sample test', () => {
- it('should test', () => {
- expect(1).toEqual(1);
- });
- });
- `
- );
-
- const affectedApps = runCommand(
- `npm run affected:apps -- --files="libs/${mylib}/src/index.ts"`
- );
- expect(affectedApps).toContain(myapp);
- expect(affectedApps).not.toContain(myapp2);
- expect(affectedApps).not.toContain(`${myapp}-e2e`);
-
- const implicitlyAffectedApps = runCommand(
- 'npm run affected:apps -- --files="package.json"'
- );
- expect(implicitlyAffectedApps).toContain(myapp);
- expect(implicitlyAffectedApps).toContain(myapp2);
-
- const noAffectedApps = runCommand(
- 'npm run affected:apps -- --files="README.md"'
- );
- expect(noAffectedApps).not.toContain(myapp);
- expect(noAffectedApps).not.toContain(myapp2);
-
- const affectedLibs = runCommand(
- `npm run affected:libs -- --files="libs/${mylib}/src/index.ts"`
- );
- expect(affectedLibs).toContain(mypublishablelib);
- expect(affectedLibs).toContain(mylib);
- expect(affectedLibs).not.toContain(mylib2);
-
- const implicitlyAffectedLibs = runCommand(
- 'npm run affected:libs -- --files="package.json"'
- );
- expect(implicitlyAffectedLibs).toContain(mypublishablelib);
- expect(implicitlyAffectedLibs).toContain(mylib);
- expect(implicitlyAffectedLibs).toContain(mylib2);
-
- const noAffectedLibs = runCommand(
- 'npm run affected:libs -- --files="README.md"'
- );
- expect(noAffectedLibs).not.toContain(mypublishablelib);
- expect(noAffectedLibs).not.toContain(mylib);
- expect(noAffectedLibs).not.toContain(mylib2);
-
- const build = runCommand(
- `npm run affected:build -- --files="libs/${mylib}/src/index.ts"`
- );
- expect(build).toContain(`Running target build for projects:`);
- expect(build).toContain(myapp);
- expect(build).toContain(mypublishablelib);
-
- expect(build).not.toContain('is not registered with the build command');
- expect(build).not.toContain('with flags:');
-
- // Should work in parallel
- const buildParallel = runCommand(
- `npm run affected:build -- --files="libs/${mylib}/src/index.ts" --parallel`
- );
- expect(buildParallel).toContain(`Running target build for projects:`);
- expect(buildParallel).toContain(myapp);
- expect(buildParallel).toContain(mypublishablelib);
- expect(buildParallel).toContain(
- 'Running target "build" for affected projects succeeded'
- );
-
- const buildExcluded = runCommand(
- `npm run affected:build -- --files="libs/${mylib}/src/index.ts" --exclude ${myapp}`
- );
- expect(buildExcluded).toContain(`Running target build for projects:`);
- expect(buildExcluded).toContain(mypublishablelib);
-
- // affected:build should pass non-nx flags to the CLI
- const buildWithFlags = runCommand(
- `npm run affected:build -- --files="libs/${mylib}/src/index.ts" --stats-json`
- );
- expect(buildWithFlags).toContain(`Running target build for projects:`);
- expect(buildWithFlags).toContain(myapp);
- expect(buildWithFlags).toContain(mypublishablelib);
- expect(buildWithFlags).toContain('With flags: --stats-json=true');
-
- if (!runsInWSL()) {
- const e2e = runCommand(
- `npm run affected:e2e -- --files="libs/${mylib}/src/index.ts" --headless --no-watch`
+ `
+ );
+ updateFile(
+ `libs/${mypublishablelib}/src/lib/${mypublishablelib}.module.spec.ts`,
+ `
+ import '@proj/${mylib}';
+ describe('sample test', () => {
+ it('should test', () => {
+ expect(1).toEqual(1);
+ });
+ });
+ `
);
- expect(e2e).toContain('should display welcome message');
- }
- const unitTests = runCommand(
- `npm run affected:test -- --files="libs/${mylib}/src/index.ts"`
- );
- expect(unitTests).toContain(`Running target test for projects:`);
- expect(unitTests).toContain(mylib);
- expect(unitTests).toContain(myapp);
- expect(unitTests).toContain(mypublishablelib);
+ const affectedApps = runCommand(
+ `npm run affected:apps -- --files="libs/${mylib}/src/index.ts"`
+ );
+ expect(affectedApps).toContain(myapp);
+ expect(affectedApps).not.toContain(myapp2);
+ expect(affectedApps).not.toContain(`${myapp}-e2e`);
- // Fail a Unit Test
- updateFile(
- `apps/${myapp}/src/app/app.component.spec.ts`,
- readFile(`apps/${myapp}/src/app/app.component.spec.ts`).replace(
- '.toEqual(1)',
- '.toEqual(2)'
- )
- );
+ const implicitlyAffectedApps = runCommand(
+ 'npm run affected:apps -- --files="package.json"'
+ );
+ expect(implicitlyAffectedApps).toContain(myapp);
+ expect(implicitlyAffectedApps).toContain(myapp2);
- const failedTests = runCommand(
- `npm run affected:test -- --files="libs/${mylib}/src/index.ts"`
- );
- expect(failedTests).toContain(`Running target test for projects:`);
- expect(failedTests).toContain(mylib);
- expect(failedTests).toContain(myapp);
- expect(failedTests).toContain(mypublishablelib);
+ const noAffectedApps = runCommand(
+ 'npm run affected:apps -- --files="README.md"'
+ );
+ expect(noAffectedApps).not.toContain(myapp);
+ expect(noAffectedApps).not.toContain(myapp2);
- expect(failedTests).toContain(`Failed projects:`);
- expect(failedTests).toContain(myapp);
- expect(failedTests).toContain(
- 'You can isolate the above projects by passing: --only-failed'
- );
- expect(readJson('dist/.nx-results')).toEqual({
- command: 'test',
- results: {
- [myapp]: false,
- [mylib]: true,
- [mypublishablelib]: true
+ const affectedLibs = runCommand(
+ `npm run affected:libs -- --files="libs/${mylib}/src/index.ts"`
+ );
+ expect(affectedLibs).toContain(mypublishablelib);
+ expect(affectedLibs).toContain(mylib);
+ expect(affectedLibs).not.toContain(mylib2);
+
+ const implicitlyAffectedLibs = runCommand(
+ 'npm run affected:libs -- --files="package.json"'
+ );
+ expect(implicitlyAffectedLibs).toContain(mypublishablelib);
+ expect(implicitlyAffectedLibs).toContain(mylib);
+ expect(implicitlyAffectedLibs).toContain(mylib2);
+
+ const noAffectedLibs = runCommand(
+ 'npm run affected:libs -- --files="README.md"'
+ );
+ expect(noAffectedLibs).not.toContain(mypublishablelib);
+ expect(noAffectedLibs).not.toContain(mylib);
+ expect(noAffectedLibs).not.toContain(mylib2);
+
+ const build = runCommand(
+ `npm run affected:build -- --files="libs/${mylib}/src/index.ts"`
+ );
+ expect(build).toContain(`Running target build for projects:`);
+
+ expect(build).toContain(`- ${myapp}`);
+ expect(build).toContain(`- ${mypublishablelib}`);
+ expect(build).not.toContain('is not registered with the build command');
+ expect(build).not.toContain('with flags:');
+
+ // Should work in parallel
+ const buildParallel = runCommand(
+ `npm run affected:build -- --files="libs/${mylib}/src/index.ts" --parallel`
+ );
+ expect(buildParallel).toContain(`Running target build for projects:`);
+ expect(buildParallel).toContain(`- ${myapp}`);
+ expect(buildParallel).toContain(`- ${mypublishablelib}`);
+ expect(buildParallel).toContain(
+ 'Running target "build" for affected projects succeeded'
+ );
+
+ const buildExcluded = runCommand(
+ `npm run affected:build -- --files="libs/${mylib}/src/index.ts" --exclude ${myapp}`
+ );
+ expect(buildExcluded).toContain(`Running target build for projects:`);
+ expect(buildExcluded).toContain(`- ${mypublishablelib}`);
+
+ // affected:build should pass non-nx flags to the CLI
+ const buildWithFlags = runCommand(
+ `npm run affected:build -- --files="libs/${mylib}/src/index.ts" --stats-json`
+ );
+
+ expect(buildWithFlags).toContain(`Running target build for projects:`);
+ expect(buildWithFlags).toContain(`- ${myapp}`);
+ expect(buildWithFlags).toContain(`- ${mypublishablelib}`);
+ expect(buildWithFlags).toContain('With flags: --stats-json=true');
+
+ if (supportUi()) {
+ const e2e = runCommand(
+ `npm run affected:e2e -- --files="libs/${mylib}/src/index.ts" --headless`
+ );
+ expect(e2e).toContain('should display welcome message');
}
- });
- // Fix failing Unit Test
- updateFile(
- `apps/${myapp}/src/app/app.component.spec.ts`,
- readFile(`apps/${myapp}/src/app/app.component.spec.ts`).replace(
- '.toEqual(2)',
- '.toEqual(1)'
- )
- );
+ const unitTests = runCommand(
+ `npm run affected:test -- --files="libs/${mylib}/src/index.ts"`
+ );
+ expect(unitTests).toContain(`Running target test for projects:`);
+ expect(unitTests).toContain(`- ${mylib}`);
+ expect(unitTests).toContain(`- ${myapp}`);
+ expect(unitTests).toContain(`- ${mypublishablelib}`);
+ // Fail a Unit Test
+ updateFile(
+ `apps/${myapp}/src/app/app.component.spec.ts`,
+ readFile(`apps/${myapp}/src/app/app.component.spec.ts`).replace(
+ '.toEqual(1)',
+ '.toEqual(2)'
+ )
+ );
- const isolatedTests = runCommand(
- `npm run affected:test -- --files="libs/${mylib}/src/index.ts" --only-failed`
- );
- expect(isolatedTests).toContain(`Running target test for projects:`);
- expect(isolatedTests).toContain(myapp);
+ const failedTests = runCommand(
+ `npm run affected:test -- --files="libs/${mylib}/src/index.ts"`
+ );
+ expect(failedTests).toContain(`Running target test for projects:`);
+ expect(failedTests).toContain(`- ${mylib}`);
+ expect(failedTests).toContain(`- ${myapp}`);
+ expect(failedTests).toContain(`- ${mypublishablelib}`);
+ expect(failedTests).toContain(`Failed projects:`);
+ expect(failedTests).toContain(
+ 'You can isolate the above projects by passing: --only-failed'
+ );
+ expect(readJson('dist/.nx-results')).toEqual({
+ command: 'test',
+ results: {
+ [myapp]: false,
+ [mylib]: true,
+ [mypublishablelib]: true
+ }
+ });
- const linting = runCommand(
- `npm run affected:lint -- --files="libs/${mylib}/src/index.ts"`
- );
- expect(linting).toContain(`Running target lint for projects:`);
- expect(linting).toContain(mylib);
- expect(linting).toContain(myapp);
- expect(linting).toContain(`${myapp}-e2e`);
- expect(linting).toContain(mypublishablelib);
+ // Fix failing Unit Test
+ updateFile(
+ `apps/${myapp}/src/app/app.component.spec.ts`,
+ readFile(`apps/${myapp}/src/app/app.component.spec.ts`).replace(
+ '.toEqual(2)',
+ '.toEqual(1)'
+ )
+ );
- const lintWithJsonFormating = runCommand(
- `npm run affected:lint -- --files="libs/${mylib}/src/index.ts" -- --format json`
- );
- expect(lintWithJsonFormating).toContain('With flags: --format json');
+ const isolatedTests = runCommand(
+ `npm run affected:test -- --files="libs/${mylib}/src/index.ts" --only-failed`
+ );
+ expect(isolatedTests).toContain(`Running target test for projects`);
+ expect(isolatedTests).toContain(`- ${myapp}`);
- const unitTestsExcluded = runCommand(
- `npm run affected:test -- --files="libs/${mylib}/src/index.ts" --exclude=${myapp},${mypublishablelib}`
- );
- expect(unitTestsExcluded).toContain(`Running target test for projects:`);
- expect(unitTestsExcluded).toContain(mylib);
+ const linting = runCommand(
+ `npm run affected:lint -- --files="libs/${mylib}/src/index.ts"`
+ );
+ expect(linting).toContain(`Running target lint for projects:`);
+ expect(linting).toContain(`- ${mylib}`);
+ expect(linting).toContain(`- ${myapp}`);
+ expect(linting).toContain(`- ${myapp}-e2e`);
+ expect(linting).toContain(`- ${mypublishablelib}`);
- const i18n = runCommand(
- `npm run affected -- --target extract-i18n --files="libs/${mylib}/src/index.ts"`
- );
- expect(i18n).toContain(`Running target extract-i18n for projects:`);
- expect(i18n).toContain(myapp);
+ const lintWithJsonFormating = runCommand(
+ `npm run affected:lint -- --files="libs/${mylib}/src/index.ts" -- --format json`
+ );
+ expect(lintWithJsonFormating).toContain('With flags: --format json');
- const interpolatedTests = runCommand(
- `npm run affected -- --target test --files="libs/${mylib}/src/index.ts" -- --jest-config {project.root}/jest.config.js`
- );
- expect(interpolatedTests).toContain(
- `Running target "test" for affected projects succeeded`
- );
- }, 1000000);
+ const unitTestsExcluded = runCommand(
+ `npm run affected:test -- --files="libs/${mylib}/src/index.ts" --exclude=${myapp},${mypublishablelib}`
+ );
+ expect(unitTestsExcluded).toContain(`Running target test for projects:`);
+ expect(unitTestsExcluded).toContain(`- ${mylib}`);
+
+ const i18n = runCommand(
+ `npm run affected -- --target extract-i18n --files="libs/${mylib}/src/index.ts"`
+ );
+ expect(i18n).toContain(`Running target extract-i18n for projects:`);
+ expect(i18n).toContain(`- ${myapp}`);
+
+ const interpolatedTests = runCommand(
+ `npm run affected -- --target test --files="libs/${mylib}/src/index.ts" -- --jest-config {project.root}/jest.config.js`
+ );
+ expect(interpolatedTests).toContain(
+ `Running target \"test\" for affected projects succeeded`
+ );
+ }, 1000000);
+ });
});
diff --git a/e2e/command-line.test.ts b/e2e/command-line.test.ts
index e88195ab76..fa45d9ef7b 100644
--- a/e2e/command-line.test.ts
+++ b/e2e/command-line.test.ts
@@ -8,37 +8,40 @@ import {
updateFile,
exists,
ensureProject,
- uniq
+ uniq,
+ forEachCli,
+ workspaceConfigName
} from './utils';
-describe('Command line', () => {
- it('lint should ensure module boundaries', () => {
- ensureProject();
+forEachCli(() => {
+ describe('Command line', () => {
+ it('lint should ensure module boundaries', () => {
+ ensureProject();
- const myapp = uniq('myapp');
- const myapp2 = uniq('myapp2');
- const mylib = uniq('mylib');
- const lazylib = uniq('lazylib');
- const invalidtaglib = uniq('invalidtaglib');
- const validtaglib = uniq('validtaglib');
+ const myapp = uniq('myapp');
+ const myapp2 = uniq('myapp2');
+ const mylib = uniq('mylib');
+ const lazylib = uniq('lazylib');
+ const invalidtaglib = uniq('invalidtaglib');
+ const validtaglib = uniq('validtaglib');
- runCLI(`generate @nrwl/angular:app ${myapp} --tags=validtag`);
- runCLI(`generate @nrwl/angular:app ${myapp2}`);
- runCLI(`generate @nrwl/angular:lib ${mylib}`);
- runCLI(`generate @nrwl/angular:lib ${lazylib}`);
- runCLI(`generate @nrwl/angular:lib ${invalidtaglib} --tags=invalidtag`);
- runCLI(`generate @nrwl/angular:lib ${validtaglib} --tags=validtag`);
+ runCLI(`generate @nrwl/angular:app ${myapp} --tags=validtag`);
+ runCLI(`generate @nrwl/angular:app ${myapp2}`);
+ runCLI(`generate @nrwl/angular:lib ${mylib}`);
+ runCLI(`generate @nrwl/angular:lib ${lazylib}`);
+ runCLI(`generate @nrwl/angular:lib ${invalidtaglib} --tags=invalidtag`);
+ runCLI(`generate @nrwl/angular:lib ${validtaglib} --tags=validtag`);
- const tslint = readJson('tslint.json');
- tslint.rules['nx-enforce-module-boundaries'][1].depConstraints = [
- { sourceTag: 'validtag', onlyDependOnLibsWithTags: ['validtag'] },
- ...tslint.rules['nx-enforce-module-boundaries'][1].depConstraints
- ];
- updateFile('tslint.json', JSON.stringify(tslint, null, 2));
+ const tslint = readJson('tslint.json');
+ tslint.rules['nx-enforce-module-boundaries'][1].depConstraints = [
+ { sourceTag: 'validtag', onlyDependOnLibsWithTags: ['validtag'] },
+ ...tslint.rules['nx-enforce-module-boundaries'][1].depConstraints
+ ];
+ updateFile('tslint.json', JSON.stringify(tslint, null, 2));
- updateFile(
- `apps/${myapp}/src/main.ts`,
- `
+ updateFile(
+ `apps/${myapp}/src/main.ts`,
+ `
import '../../../libs/${mylib}';
import '@proj/${lazylib}';
import '@proj/${mylib}/deep';
@@ -48,305 +51,313 @@ describe('Command line', () => {
const s = {loadChildren: '@proj/${lazylib}'};
`
- );
+ );
- const out = runCLI(`lint ${myapp}`, { silenceError: true });
- expect(out).toContain('library imports must start with @proj/');
- expect(out).toContain('imports of lazy-loaded libraries are forbidden');
- expect(out).toContain('deep imports into libraries are forbidden');
- expect(out).toContain('imports of apps are forbidden');
- expect(out).toContain(
- 'A project tagged with "validtag" can only depend on libs tagged with "validtag"'
- );
- }, 1000000);
+ const out = runCLI(`lint ${myapp}`, { silenceError: true });
+ expect(out).toContain('library imports must start with @proj/');
+ expect(out).toContain('imports of lazy-loaded libraries are forbidden');
+ expect(out).toContain('deep imports into libraries are forbidden');
+ expect(out).toContain('imports of apps are forbidden');
+ expect(out).toContain(
+ 'A project tagged with "validtag" can only depend on libs tagged with "validtag"'
+ );
+ }, 1000000);
- describe('nx lint', () => {
- afterAll(() => {
- newProject();
+ describe('nx lint', () => {
+ afterAll(() => {
+ newProject();
+ });
+
+ it('should run nx lint', () => {
+ ensureProject();
+ const appBefore = uniq('before');
+ const appAfter = uniq('after');
+
+ runCLI(`generate @nrwl/angular:app ${appBefore}`);
+ runCommand(`mv apps/${appBefore} apps/${appAfter}`);
+
+ const stdout = runCommand('./node_modules/.bin/nx workspace-lint');
+ expect(stdout).toContain(
+ `- Cannot find project '${appBefore}' in 'apps/${appBefore}'`
+ );
+ expect(stdout).toContain(
+ 'The following file(s) do not belong to any projects:'
+ );
+ expect(stdout).toContain(`- apps/${appAfter}/browserslist`);
+ expect(stdout).toContain(
+ `- apps/${appAfter}/src/app/app.component.css`
+ );
+ expect(stdout).toContain(
+ `- apps/${appAfter}/src/app/app.component.html`
+ );
+ expect(stdout).toContain(
+ `- apps/${appAfter}/src/app/app.component.spec.ts`
+ );
+ });
});
- it('should run nx lint', () => {
+ it('format should check and reformat the code', () => {
ensureProject();
- const appBefore = uniq('before');
- const appAfter = uniq('after');
+ const myapp = uniq('myapp');
+ const mylib = uniq('mylib');
- runCLI(`generate @nrwl/angular:app ${appBefore}`);
- runCommand(`mv apps/${appBefore} apps/${appAfter}`);
-
- const stdout = runCommand('./node_modules/.bin/nx workspace-lint');
- expect(stdout).toContain(
- `- Cannot find project '${appBefore}' in 'apps/${appBefore}'`
- );
- expect(stdout).toContain(
- 'The following file(s) do not belong to any projects:'
- );
- expect(stdout).toContain(`- apps/${appAfter}/browserslist`);
- expect(stdout).toContain(`- apps/${appAfter}/src/app/app.component.css`);
- expect(stdout).toContain(`- apps/${appAfter}/src/app/app.component.html`);
- expect(stdout).toContain(
- `- apps/${appAfter}/src/app/app.component.spec.ts`
- );
- });
- });
-
- it('format should check and reformat the code', () => {
- ensureProject();
- const myapp = uniq('myapp');
- const mylib = uniq('mylib');
-
- runCLI(`generate @nrwl/angular:app ${myapp}`);
- runCLI(`generate @nrwl/angular:lib ${mylib}`);
- updateFile(
- `apps/${myapp}/src/main.ts`,
- `
+ runCLI(`generate @nrwl/angular:app ${myapp}`);
+ runCLI(`generate @nrwl/angular:lib ${mylib}`);
+ updateFile(
+ `apps/${myapp}/src/main.ts`,
+ `
const x = 1111;
`
- );
-
- updateFile(
- `apps/${myapp}/src/app/app.module.ts`,
- `
- const y = 1111;
- `
- );
-
- updateFile(
- `apps/${myapp}/src/app/app.component.ts`,
- `
- const z = 1111;
- `
- );
-
- updateFile(
- `libs/${mylib}/index.ts`,
- `
- const x = 1111;
- `
- );
- updateFile(
- `libs/${mylib}/src/${mylib}.module.ts`,
- `
- const y = 1111;
- `
- );
-
- let stdout = runCommand(
- `npm run -s format:check -- --files="libs/${mylib}/index.ts" --libs-and-apps`
- );
- expect(stdout).toContain(`libs/${mylib}/index.ts`);
- expect(stdout).toContain(`libs/${mylib}/src/${mylib}.module.ts`);
-
- stdout = runCommand(`npm run -s format:check -- --all`);
- expect(stdout).toContain(`apps/${myapp}/src/main.ts`);
- expect(stdout).toContain(`apps/${myapp}/src/app/app.module.ts`);
- expect(stdout).toContain(`apps/${myapp}/src/app/app.component.ts`);
-
- runCommand(
- `npm run format:write -- --files="apps/${myapp}/src/app/app.module.ts,apps/${myapp}/src/app/app.component.ts"`
- );
-
- stdout = runCommand('npm run -s format:check -- --all');
-
- expect(stdout).toContain(`apps/${myapp}/src/main.ts`);
- expect(stdout).not.toContain(`apps/${myapp}/src/app/app.module.ts`);
- expect(stdout).not.toContain(`apps/${myapp}/src/app/app.component.ts`);
-
- runCommand('npm run format:write -- --all');
- expect(runCommand('npm run -s format:check -- --all')).toEqual('');
- });
-
- it('should support workspace-specific schematics', () => {
- ensureProject();
- const custom = uniq('custom');
- runCLI(`g workspace-schematic ${custom} --no-interactive`);
- checkFilesExist(
- `tools/schematics/${custom}/index.ts`,
- `tools/schematics/${custom}/schema.json`
- );
-
- const json = readJson(`tools/schematics/${custom}/schema.json`);
- json.properties['directory'] = {
- type: 'string',
- description: 'lib directory'
- };
- updateFile(`tools/schematics/${custom}/schema.json`, JSON.stringify(json));
-
- const indexFile = readFile(`tools/schematics/${custom}/index.ts`);
- updateFile(
- `tools/schematics/${custom}/index.ts`,
- indexFile.replace(
- 'name: schema.name',
- 'name: schema.name, directory: schema.directory'
- )
- );
-
- const workspace = uniq('workspace');
- const dryRunOutput = runCommand(
- `npm run workspace-schematic ${custom} ${workspace} -- --no-interactive --directory=dir -d`
- );
- expect(exists(`libs/dir/${workspace}/src/index.ts`)).toEqual(false);
- expect(dryRunOutput).toContain('update angular.json');
- expect(dryRunOutput).toContain('update nx.json');
-
- const output = runCommand(
- `npm run workspace-schematic ${custom} ${workspace} -- --no-interactive --directory=dir`
- );
- checkFilesExist(`libs/dir/${workspace}/src/index.ts`);
- expect(output).toContain('update angular.json');
- expect(output).toContain('update nx.json');
-
- const another = uniq('another');
- runCLI(`g workspace-schematic ${another} --no-interactive`);
-
- const listSchematicsOutput = runCommand(
- 'npm run workspace-schematic -- --list-schematics'
- );
- expect(listSchematicsOutput).toContain(
- 'nx workspace-schematic "--list-schematics"'
- );
- expect(listSchematicsOutput).toContain(custom);
- expect(listSchematicsOutput).toContain(another);
-
- const promptOutput = runCommand(
- `npm run workspace-schematic ${custom} mylib2 --`
- );
- expect(promptOutput).toContain(
- 'In which directory should the library be generated?'
- );
- }, 1000000);
-
- describe('dep-graph', () => {
- beforeAll(() => {
- newProject();
- runCLI('generate @nrwl/angular:app myapp');
- runCLI('generate @nrwl/angular:app myapp2');
- runCLI('generate @nrwl/angular:app myapp3');
- runCLI('generate @nrwl/angular:lib mylib');
- runCLI('generate @nrwl/angular:lib mylib2');
+ );
updateFile(
- 'apps/myapp/src/main.ts',
+ `apps/${myapp}/src/app/app.module.ts`,
`
+ const y = 1111;
+ `
+ );
+
+ updateFile(
+ `apps/${myapp}/src/app/app.component.ts`,
+ `
+ const z = 1111;
+ `
+ );
+
+ updateFile(
+ `libs/${mylib}/index.ts`,
+ `
+ const x = 1111;
+ `
+ );
+ updateFile(
+ `libs/${mylib}/src/${mylib}.module.ts`,
+ `
+ const y = 1111;
+ `
+ );
+
+ let stdout = runCommand(
+ `npm run -s format:check -- --files="libs/${mylib}/index.ts" --libs-and-apps`
+ );
+ expect(stdout).toContain(`libs/${mylib}/index.ts`);
+ expect(stdout).toContain(`libs/${mylib}/src/${mylib}.module.ts`);
+
+ stdout = runCommand(`npm run -s format:check -- --all`);
+ expect(stdout).toContain(`apps/${myapp}/src/main.ts`);
+ expect(stdout).toContain(`apps/${myapp}/src/app/app.module.ts`);
+ expect(stdout).toContain(`apps/${myapp}/src/app/app.component.ts`);
+
+ runCommand(
+ `npm run format:write -- --files="apps/${myapp}/src/app/app.module.ts,apps/${myapp}/src/app/app.component.ts"`
+ );
+
+ stdout = runCommand('npm run -s format:check -- --all');
+
+ expect(stdout).toContain(`apps/${myapp}/src/main.ts`);
+ expect(stdout).not.toContain(`apps/${myapp}/src/app/app.module.ts`);
+ expect(stdout).not.toContain(`apps/${myapp}/src/app/app.component.ts`);
+
+ runCommand('npm run format:write -- --all');
+ expect(runCommand('npm run -s format:check -- --all')).toEqual('');
+ });
+
+ it('should support workspace-specific schematics', () => {
+ ensureProject();
+ const custom = uniq('custom');
+ runCLI(`g workspace-schematic ${custom} --no-interactive`);
+ checkFilesExist(
+ `tools/schematics/${custom}/index.ts`,
+ `tools/schematics/${custom}/schema.json`
+ );
+
+ const json = readJson(`tools/schematics/${custom}/schema.json`);
+ json.properties['directory'] = {
+ type: 'string',
+ description: 'lib directory'
+ };
+ updateFile(
+ `tools/schematics/${custom}/schema.json`,
+ JSON.stringify(json)
+ );
+
+ const indexFile = readFile(`tools/schematics/${custom}/index.ts`);
+ updateFile(
+ `tools/schematics/${custom}/index.ts`,
+ indexFile.replace(
+ 'name: schema.name',
+ 'name: schema.name, directory: schema.directory'
+ )
+ );
+
+ const workspace = uniq('workspace');
+ const dryRunOutput = runCommand(
+ `npm run workspace-schematic ${custom} ${workspace} -- --no-interactive --directory=dir -d`
+ );
+ expect(exists(`libs/dir/${workspace}/src/index.ts`)).toEqual(false);
+ expect(dryRunOutput).toContain(`update ${workspaceConfigName()}`);
+ expect(dryRunOutput).toContain('update nx.json');
+
+ const output = runCommand(
+ `npm run workspace-schematic ${custom} ${workspace} -- --no-interactive --directory=dir`
+ );
+ checkFilesExist(`libs/dir/${workspace}/src/index.ts`);
+ expect(output).toContain(`update ${workspaceConfigName()}`);
+ expect(output).toContain('update nx.json');
+
+ const another = uniq('another');
+ runCLI(`g workspace-schematic ${another} --no-interactive`);
+
+ const listSchematicsOutput = runCommand(
+ 'npm run workspace-schematic -- --list-schematics'
+ );
+ expect(listSchematicsOutput).toContain(
+ 'nx workspace-schematic "--list-schematics"'
+ );
+ expect(listSchematicsOutput).toContain(custom);
+ expect(listSchematicsOutput).toContain(another);
+
+ const promptOutput = runCommand(
+ `npm run workspace-schematic ${custom} mylib2 --`
+ );
+ expect(promptOutput).toContain(
+ 'In which directory should the library be generated?'
+ );
+ }, 1000000);
+
+ describe('dep-graph', () => {
+ beforeAll(() => {
+ newProject();
+ runCLI('generate @nrwl/angular:app myapp');
+ runCLI('generate @nrwl/angular:app myapp2');
+ runCLI('generate @nrwl/angular:app myapp3');
+ runCLI('generate @nrwl/angular:lib mylib');
+ runCLI('generate @nrwl/angular:lib mylib2');
+
+ updateFile(
+ 'apps/myapp/src/main.ts',
+ `
import '@proj/mylib';
const s = {loadChildren: '@proj/mylib2'};
`
- );
+ );
- updateFile(
- 'apps/myapp2/src/app/app.component.spec.ts',
- `import '@proj/mylib';`
- );
+ updateFile(
+ 'apps/myapp2/src/app/app.component.spec.ts',
+ `import '@proj/mylib';`
+ );
- updateFile(
- 'libs/mylib/src/mylib.module.spec.ts',
- `import '@proj/mylib2';`
- );
- });
-
- it('dep-graph should output json (without critical path) to file', () => {
- const file = 'dep-graph.json';
-
- runCommand(`npm run dep-graph -- --file="${file}"`);
-
- expect(() => checkFilesExist(file)).not.toThrow();
-
- const jsonFileContents = readJson(file);
-
- expect(jsonFileContents).toEqual({
- deps: {
- mylib2: [],
- myapp3: [],
- 'myapp3-e2e': [
- {
- projectName: 'myapp3',
- type: 'implicit'
- }
- ],
- myapp2: [
- {
- projectName: 'mylib',
- type: 'es6Import'
- }
- ],
- 'myapp2-e2e': [
- {
- projectName: 'myapp2',
- type: 'implicit'
- }
- ],
- mylib: [
- {
- projectName: 'mylib2',
- type: 'es6Import'
- }
- ],
- myapp: [
- {
- projectName: 'mylib',
- type: 'es6Import'
- },
- {
- projectName: 'mylib2',
- type: 'loadChildren'
- }
- ],
- 'myapp-e2e': [
- {
- projectName: 'myapp',
- type: 'implicit'
- }
- ]
- },
- criticalPath: []
+ updateFile(
+ 'libs/mylib/src/mylib.module.spec.ts',
+ `import '@proj/mylib2';`
+ );
});
- }, 1000000);
- it('dep-graph should output json with critical path to file', () => {
- const file = 'dep-graph.json';
+ it('dep-graph should output json (without critical path) to file', () => {
+ const file = 'dep-graph.json';
- runCommand(
- `npm run affected:dep-graph -- --files="libs/mylib/src/index.ts" --file="${file}"`
- );
+ runCommand(`npm run dep-graph -- --file="${file}"`);
- expect(() => checkFilesExist(file)).not.toThrow();
+ expect(() => checkFilesExist(file)).not.toThrow();
- const jsonFileContents = readJson(file);
+ const jsonFileContents = readJson(file);
- expect(jsonFileContents.criticalPath).toContain('myapp');
- expect(jsonFileContents.criticalPath).toContain('myapp2');
- expect(jsonFileContents.criticalPath).toContain('mylib');
- expect(jsonFileContents.criticalPath).not.toContain('mylib2');
- }, 1000000);
+ expect(jsonFileContents).toEqual({
+ deps: {
+ mylib2: [],
+ myapp3: [],
+ 'myapp3-e2e': [
+ {
+ projectName: 'myapp3',
+ type: 'implicit'
+ }
+ ],
+ myapp2: [
+ {
+ projectName: 'mylib',
+ type: 'es6Import'
+ }
+ ],
+ 'myapp2-e2e': [
+ {
+ projectName: 'myapp2',
+ type: 'implicit'
+ }
+ ],
+ mylib: [
+ {
+ projectName: 'mylib2',
+ type: 'es6Import'
+ }
+ ],
+ myapp: [
+ {
+ projectName: 'mylib',
+ type: 'es6Import'
+ },
+ {
+ projectName: 'mylib2',
+ type: 'loadChildren'
+ }
+ ],
+ 'myapp-e2e': [
+ {
+ projectName: 'myapp',
+ type: 'implicit'
+ }
+ ]
+ },
+ criticalPath: []
+ });
+ }, 1000000);
- it('dep-graph should output dot to file', () => {
- const file = 'dep-graph.dot';
+ it('dep-graph should output json with critical path to file', () => {
+ const file = 'dep-graph.json';
- runCommand(
- `npm run dep-graph -- --files="libs/mylib/index.ts" --file="${file}"`
- );
+ runCommand(
+ `npm run affected:dep-graph -- --files="libs/mylib/src/index.ts" --file="${file}"`
+ );
- expect(() => checkFilesExist(file)).not.toThrow();
+ expect(() => checkFilesExist(file)).not.toThrow();
- const fileContents = readFile(file);
- expect(fileContents).toContain('"myapp" -> "mylib"');
- expect(fileContents).toContain('"myapp2" -> "mylib"');
- expect(fileContents).toContain('"mylib" -> "mylib2"');
- }, 1000000);
+ const jsonFileContents = readJson(file);
- it('dep-graph should output html to file', () => {
- const file = 'dep-graph.html';
- runCommand(
- `npm run dep-graph -- --files="libs/mylib/index.ts" --file="${file}"`
- );
+ expect(jsonFileContents.criticalPath).toContain('myapp');
+ expect(jsonFileContents.criticalPath).toContain('myapp2');
+ expect(jsonFileContents.criticalPath).toContain('mylib');
+ expect(jsonFileContents.criticalPath).not.toContain('mylib2');
+ }, 1000000);
- expect(() => checkFilesExist(file)).not.toThrow();
+ it('dep-graph should output dot to file', () => {
+ const file = 'dep-graph.dot';
- const fileContents = readFile(file);
- expect(fileContents).toContain('');
- expect(fileContents).toContain('
myapp->mylib');
- expect(fileContents).toContain('myapp->mylib2');
- expect(fileContents).toContain('mylib->mylib2');
- }, 1000000);
+ runCommand(
+ `npm run dep-graph -- --files="libs/mylib/index.ts" --file="${file}"`
+ );
+
+ expect(() => checkFilesExist(file)).not.toThrow();
+
+ const fileContents = readFile(file);
+ expect(fileContents).toContain('"myapp" -> "mylib"');
+ expect(fileContents).toContain('"myapp2" -> "mylib"');
+ expect(fileContents).toContain('"mylib" -> "mylib2"');
+ }, 1000000);
+
+ it('dep-graph should output html to file', () => {
+ const file = 'dep-graph.html';
+ runCommand(
+ `npm run dep-graph -- --files="libs/mylib/index.ts" --file="${file}"`
+ );
+
+ expect(() => checkFilesExist(file)).not.toThrow();
+
+ const fileContents = readFile(file);
+ expect(fileContents).toContain('');
+ expect(fileContents).toContain('myapp->mylib');
+ expect(fileContents).toContain('myapp->mylib2');
+ expect(fileContents).toContain('mylib->mylib2');
+ }, 1000000);
+ });
});
});
diff --git a/e2e/cypress.test.ts b/e2e/cypress.test.ts
index 8cee646147..eb28f51914 100644
--- a/e2e/cypress.test.ts
+++ b/e2e/cypress.test.ts
@@ -6,58 +6,61 @@ import {
readFile,
ensureProject,
uniq,
- runsInWSL,
- newProject
+ newProject,
+ forEachCli,
+ supportUi
} from './utils';
-describe('Cypress E2E Test runner', () => {
- describe('project scaffolding', () => {
- it('should generate an app with the Cypress as e2e test runner', () => {
- ensureProject();
- const myapp = uniq('myapp');
- runCLI(`generate @nrwl/angular:app ${myapp} --e2eTestRunner=cypress`);
-
- // Making sure the package.json file contains the Cypress dependency
- const packageJson = readJson('package.json');
- expect(packageJson.devDependencies['cypress']).toBeTruthy();
-
- // Making sure the cypress folders & files are created
- checkFilesExist(`apps/${myapp}-e2e/cypress.json`);
- checkFilesExist(`apps/${myapp}-e2e/tsconfig.e2e.json`);
-
- checkFilesExist(`apps/${myapp}-e2e/src/fixtures/example.json`);
- checkFilesExist(`apps/${myapp}-e2e/src/integration/app.spec.ts`);
- checkFilesExist(`apps/${myapp}-e2e/src/plugins/index.js`);
- checkFilesExist(`apps/${myapp}-e2e/src/support/app.po.ts`);
- checkFilesExist(`apps/${myapp}-e2e/src/support/index.ts`);
- checkFilesExist(`apps/${myapp}-e2e/src/support/commands.ts`);
- }, 1000000);
- });
-
- if (!runsInWSL()) {
- describe('running Cypress', () => {
- it('should execute e2e tests using Cypress', () => {
- newProject();
+forEachCli(() => {
+ describe('Cypress E2E Test runner', () => {
+ describe('project scaffolding', () => {
+ it('should generate an app with the Cypress as e2e test runner', () => {
+ ensureProject();
const myapp = uniq('myapp');
runCLI(`generate @nrwl/angular:app ${myapp} --e2eTestRunner=cypress`);
- expect(
- runCLI(`e2e --project=${myapp}-e2e --headless --watch=false`)
- ).toContain('All specs passed!');
+ // Making sure the package.json file contains the Cypress dependency
+ const packageJson = readJson('package.json');
+ expect(packageJson.devDependencies['cypress']).toBeTruthy();
- const originalContents = JSON.parse(
- readFile(`apps/${myapp}-e2e/cypress.json`)
- );
- delete originalContents.fixturesFolder;
- updateFile(
- `apps/${myapp}-e2e/cypress.json`,
- JSON.stringify(originalContents)
- );
+ // Making sure the cypress folders & files are created
+ checkFilesExist(`apps/${myapp}-e2e/cypress.json`);
+ checkFilesExist(`apps/${myapp}-e2e/tsconfig.e2e.json`);
- expect(
- runCLI(`e2e --project=${myapp}-e2e --headless --watch=false`)
- ).toContain('All specs passed!');
+ checkFilesExist(`apps/${myapp}-e2e/src/fixtures/example.json`);
+ checkFilesExist(`apps/${myapp}-e2e/src/integration/app.spec.ts`);
+ checkFilesExist(`apps/${myapp}-e2e/src/plugins/index.js`);
+ checkFilesExist(`apps/${myapp}-e2e/src/support/app.po.ts`);
+ checkFilesExist(`apps/${myapp}-e2e/src/support/index.ts`);
+ checkFilesExist(`apps/${myapp}-e2e/src/support/commands.ts`);
}, 1000000);
});
- }
+
+ if (supportUi()) {
+ describe('running Cypress', () => {
+ fit('should execute e2e tests using Cypress', () => {
+ newProject();
+ const myapp = uniq('myapp');
+ runCLI(`generate @nrwl/angular:app ${myapp} --e2eTestRunner=cypress`);
+
+ expect(runCLI(`e2e ${myapp}-e2e --headless --no-watch`)).toContain(
+ 'All specs passed!'
+ );
+
+ const originalContents = JSON.parse(
+ readFile(`apps/${myapp}-e2e/cypress.json`)
+ );
+ delete originalContents.fixturesFolder;
+ updateFile(
+ `apps/${myapp}-e2e/cypress.json`,
+ JSON.stringify(originalContents)
+ );
+
+ expect(runCLI(`e2e ${myapp}-e2e --headless --no-watch`)).toContain(
+ 'All specs passed!'
+ );
+ }, 1000000);
+ });
+ }
+ });
});
diff --git a/e2e/delegate-to-cli.test.ts b/e2e/delegate-to-cli.test.ts
index 8203b22bbf..90a6158d9b 100644
--- a/e2e/delegate-to-cli.test.ts
+++ b/e2e/delegate-to-cli.test.ts
@@ -1,23 +1,31 @@
-import { ensureProject, uniq, runCommand, checkFilesExist } from './utils';
+import {
+ ensureProject,
+ uniq,
+ runCommand,
+ checkFilesExist,
+ forEachCli
+} from './utils';
-describe('Delegate to CLI', () => {
- it('should delegate to the Angular CLI all non-standard commands', async () => {
- ensureProject();
+forEachCli(() => {
+ describe('Delegate to CLI', () => {
+ it('should delegate to the cli all non-standard commands', async () => {
+ ensureProject();
- const appName = uniq('app');
- runCommand(`npm run nx -- g app ${appName}`);
- runCommand(`npm run nx -- build ${appName}`);
+ const appName = uniq('app');
+ runCommand(`npm run nx -- g @nrwl/web:app ${appName}`);
+ runCommand(`npm run nx -- build ${appName}`);
- checkFilesExist(
- `dist/apps/${appName}/index.html`,
- `dist/apps/${appName}/polyfills-es2015.js`,
- `dist/apps/${appName}/runtime-es2015.js`,
- `dist/apps/${appName}/main-es2015.js`,
- `dist/apps/${appName}/styles-es2015.js`,
- `dist/apps/${appName}/polyfills-es5.js`,
- `dist/apps/${appName}/runtime-es5.js`,
- `dist/apps/${appName}/main-es5.js`,
- `dist/apps/${appName}/styles-es5.js`
- );
- }, 120000);
+ checkFilesExist(
+ `dist/apps/${appName}/index.html`,
+ `dist/apps/${appName}/polyfills-es2015.js`,
+ `dist/apps/${appName}/runtime-es2015.js`,
+ `dist/apps/${appName}/main-es2015.js`,
+ `dist/apps/${appName}/styles-es2015.js`,
+ `dist/apps/${appName}/polyfills-es5.js`,
+ `dist/apps/${appName}/runtime-es5.js`,
+ `dist/apps/${appName}/main-es5.js`,
+ `dist/apps/${appName}/styles-es5.js`
+ );
+ }, 120000);
+ });
});
diff --git a/e2e/downgrade-module.test.ts b/e2e/downgrade-module.test.ts
index 794ba908bb..19d63a0557 100644
--- a/e2e/downgrade-module.test.ts
+++ b/e2e/downgrade-module.test.ts
@@ -1,29 +1,33 @@
import {
ensureProject,
- patchKarmaToWorkOnWSL,
runCLI,
uniq,
- updateFile
+ updateFile,
+ forEachCli,
+ supportUi
} from './utils';
-describe('DowngradeModule', () => {
- it('should generate a downgradeModule setup', async () => {
- ensureProject();
+forEachCli(() => {
+ xdescribe('DowngradeModule', () => {
+ it('should generate a downgradeModule setup', async () => {
+ ensureProject();
- const myapp = uniq('myapp');
- runCLI(`generate @nrwl/angular:app ${myapp} --unit-test-runner=karma`);
- patchKarmaToWorkOnWSL();
+ const myapp = uniq('myapp');
+ runCLI(`generate @nrwl/angular:app ${myapp} --unit-test-runner=karma`);
- updateFile(
- `apps/${myapp}/src/legacy.js`,
- `window.angular.module('legacy', []);`
- );
+ updateFile(
+ `apps/${myapp}/src/legacy.js`,
+ `window.angular.module('legacy', []);`
+ );
- runCLI(
- `generate @nrwl/angular:downgrade-module legacy --angularJsImport=./legacy --project=${myapp}`
- );
+ runCLI(
+ `generate @nrwl/angular:downgrade-module legacy --angularJsImport=./legacy --project=${myapp}`
+ );
- runCLI(`build ${myapp}`);
- expect(runCLI(`test ${myapp} --no-watch`)).toContain('3 SUCCESS');
- }, 1000000);
+ runCLI(`build ${myapp}`);
+ if (supportUi()) {
+ expect(runCLI(`test ${myapp} --no-watch`)).toContain('3 SUCCESS');
+ }
+ }, 1000000);
+ });
});
diff --git a/e2e/help.test.ts b/e2e/help.test.ts
new file mode 100644
index 0000000000..4d50900012
--- /dev/null
+++ b/e2e/help.test.ts
@@ -0,0 +1,47 @@
+import { forEachCli, ensureProject, runCommand, runCLI, cli } from './utils';
+
+forEachCli('nx', () => {
+ describe('Help', () => {
+ it('should should help', async () => {
+ ensureProject();
+
+ const mainHelp = runCLI(`--help`);
+ expect(mainHelp).toContain('Run a target for a project');
+ expect(mainHelp).toContain('Run task for affected projects');
+
+ const genHelp = runCLI(`g @nrwl/web:app --help`);
+ expect(genHelp).toContain(
+ 'The file extension to be used for style files. (default: css)'
+ );
+
+ const affectedHelp = runCLI(`affected --help`);
+ expect(affectedHelp).toContain('Run task for affected projects');
+
+ const version = runCLI(`--version`);
+ expect(version).toContain('*'); // stub value
+ }, 120000);
+ });
+});
+
+forEachCli('angular', () => {
+ describe('Help', () => {
+ it('should should help', async () => {
+ ensureProject();
+
+ const mainHelp = runCLI(`--help`);
+ expect(mainHelp).toContain('Run a target for a project');
+ expect(mainHelp).toContain('Run task for affected projects');
+
+ const genHelp = runCLI(`g @nrwl/web:app --help`);
+ expect(genHelp).toContain(
+ 'The file extension to be used for style files.'
+ );
+
+ const affectedHelp = runCLI(`affected --help`);
+ expect(affectedHelp).toContain('Run task for affected projects');
+
+ const version = runCLI(`--version`);
+ expect(version).toContain('*'); // stub value
+ }, 120000);
+ });
+});
diff --git a/e2e/jest.test.ts b/e2e/jest.test.ts
index 290f4c9929..a07baebd4b 100644
--- a/e2e/jest.test.ts
+++ b/e2e/jest.test.ts
@@ -1,23 +1,25 @@
-import { runCLIAsync, ensureProject, uniq, runCLI } from './utils';
+import { runCLIAsync, ensureProject, uniq, runCLI, forEachCli } from './utils';
-describe('Jest', () => {
- it('should be able test projects using jest', async done => {
- ensureProject();
- const mylib = uniq('mylib');
- const myapp = uniq('myapp');
- runCLI(`generate @nrwl/angular:app ${myapp} --unit-test-runner jest`);
- runCLI(`generate @nrwl/angular:lib ${mylib} --unit-test-runner jest`);
+forEachCli(() => {
+ describe('Jest', () => {
+ it('should be able test projects using jest', async done => {
+ ensureProject();
+ const mylib = uniq('mylib');
+ const myapp = uniq('myapp');
+ runCLI(`generate @nrwl/angular:app ${myapp} --unit-test-runner jest`);
+ runCLI(`generate @nrwl/angular:lib ${mylib} --unit-test-runner jest`);
- await Promise.all([
- runCLIAsync(`generate @nrwl/angular:service test --project ${myapp}`),
- runCLIAsync(`generate @nrwl/angular:component test --project ${myapp}`),
- runCLIAsync(`generate @nrwl/angular:service test --project ${mylib}`),
- runCLIAsync(`generate @nrwl/angular:component test --project ${mylib}`)
- ]);
- const appResult = await runCLIAsync(`test ${myapp}`);
- expect(appResult.stderr).toContain('Test Suites: 3 passed, 3 total');
- const libResult = await runCLIAsync(`test ${mylib}`);
- expect(libResult.stderr).toContain('Test Suites: 3 passed, 3 total');
- done();
- }, 45000);
+ await Promise.all([
+ runCLIAsync(`generate @nrwl/angular:service test --project ${myapp}`),
+ runCLIAsync(`generate @nrwl/angular:component test --project ${myapp}`),
+ runCLIAsync(`generate @nrwl/angular:service test --project ${mylib}`),
+ runCLIAsync(`generate @nrwl/angular:component test --project ${mylib}`)
+ ]);
+ const appResult = await runCLIAsync(`test ${myapp} --no-watch`);
+ expect(appResult.stderr).toContain('Test Suites: 3 passed, 3 total');
+ const libResult = await runCLIAsync(`test ${mylib}`);
+ expect(libResult.stderr).toContain('Test Suites: 3 passed, 3 total');
+ done();
+ }, 45000);
+ });
});
diff --git a/e2e/karma.test.ts b/e2e/karma.test.ts
index 82bdcd457a..29c1419618 100644
--- a/e2e/karma.test.ts
+++ b/e2e/karma.test.ts
@@ -3,37 +3,42 @@ import {
runCLIAsync,
ensureProject,
uniq,
- patchKarmaToWorkOnWSL
+ forEachCli,
+ supportUi
} from './utils';
-describe('Karma', () => {
- it('should be able to generate a testable library using karma', async done => {
- ensureProject();
- const mylib = uniq('mylib');
- runCLI(`generate @nrwl/angular:lib ${mylib} --unit-test-runner karma`);
- patchKarmaToWorkOnWSL();
+forEachCli(() => {
+ xdescribe('Karma', () => {
+ it('should be able to generate a testable library using karma', async done => {
+ ensureProject();
+ const mylib = uniq('mylib');
+ runCLI(`generate @nrwl/angular:lib ${mylib} --unit-test-runner karma`);
- await Promise.all([
- runCLIAsync(`generate @nrwl/angular:service test --project ${mylib}`),
- runCLIAsync(`generate @nrwl/angular:component test --project ${mylib}`)
- ]);
- const karmaResult = await runCLIAsync(`test ${mylib}`);
- expect(karmaResult.stdout).toContain('3 SUCCESS');
- done();
- }, 30000);
+ await Promise.all([
+ runCLIAsync(`generate @nrwl/angular:service test --project ${mylib}`),
+ runCLIAsync(`generate @nrwl/angular:component test --project ${mylib}`)
+ ]);
+ if (supportUi()) {
+ const karmaResult = await runCLIAsync(`test ${mylib}`);
+ expect(karmaResult.stdout).toContain('3 SUCCESS');
+ }
+ done();
+ }, 30000);
- it('should be able to generate a testable application using karma', async done => {
- ensureProject();
- const myapp = uniq('myapp');
- runCLI(`generate @nrwl/angular:app ${myapp} --unit-test-runner karma`);
- patchKarmaToWorkOnWSL();
+ it('should be able to generate a testable application using karma', async done => {
+ ensureProject();
+ const myapp = uniq('myapp');
+ runCLI(`generate @nrwl/angular:app ${myapp} --unit-test-runner karma`);
- await Promise.all([
- runCLIAsync(`generate @nrwl/angular:service test --project ${myapp}`),
- runCLIAsync(`generate @nrwl/angular:component test --project ${myapp}`)
- ]);
- const karmaResult = await runCLIAsync(`test ${myapp}`);
- expect(karmaResult.stdout).toContain('5 SUCCESS');
- done();
- }, 30000);
+ await Promise.all([
+ runCLIAsync(`generate @nrwl/angular:service test --project ${myapp}`),
+ runCLIAsync(`generate @nrwl/angular:component test --project ${myapp}`)
+ ]);
+ if (supportUi()) {
+ const karmaResult = await runCLIAsync(`test ${myapp}`);
+ expect(karmaResult.stdout).toContain('5 SUCCESS');
+ }
+ done();
+ }, 30000);
+ });
});
diff --git a/e2e/new.test.ts b/e2e/new.test.ts
new file mode 100644
index 0000000000..f510d10b99
--- /dev/null
+++ b/e2e/new.test.ts
@@ -0,0 +1,111 @@
+import {
+ ensureProject,
+ exists,
+ expectTestsPass,
+ getSize,
+ runCLI,
+ runCLIAsync,
+ uniq,
+ updateFile,
+ forEachCli,
+ checkFilesExist,
+ tmpProjPath,
+ supportUi
+} from './utils';
+import { toClassName } from '@nrwl/workspace';
+
+forEachCli(() => {
+ describe('Create New Workspace', () => {
+ beforeEach(() => {
+ ensureProject();
+ });
+
+ it('should work', async () => {
+ const myapp = uniq('myapp');
+ const mylib = uniq('mylib');
+ runCLI(
+ `generate @nrwl/angular:app ${myapp} --directory=myDir --no-interactive`
+ );
+ runCLI(
+ `generate @nrwl/angular:lib ${mylib} --directory=myDir --no-interactive`
+ );
+
+ updateFile(
+ `apps/my-dir/${myapp}/src/app/app.module.ts`,
+ `
+ import { NgModule } from '@angular/core';
+ import { BrowserModule } from '@angular/platform-browser';
+ import { MyDir${toClassName(
+ mylib
+ )}Module } from '@proj/my-dir/${mylib}';
+ import { AppComponent } from './app.component';
+
+ @NgModule({
+ imports: [BrowserModule, MyDir${toClassName(mylib)}Module],
+ declarations: [AppComponent],
+ bootstrap: [AppComponent]
+ })
+ export class AppModule {}
+ `
+ );
+ runCLI(`build my-dir-${myapp} --prod --output-hashing none`);
+
+ checkFilesExist(
+ `dist/apps/my-dir/${myapp}/main-es2015.js`,
+ `dist/apps/my-dir/${myapp}/main-es5.js`
+ );
+
+ // This is a loose requirement because there are a lot of
+ // influences external from this project that affect this.
+ const es2015BundleSize = getSize(
+ tmpProjPath(`dist/apps/my-dir/${myapp}/main-es2015.js`)
+ );
+ console.log(
+ `The current es2015 bundle size is ${es2015BundleSize / 1000} KB`
+ );
+ expect(es2015BundleSize).toBeLessThanOrEqual(150000);
+
+ const es5BundleSize = getSize(
+ tmpProjPath(`dist/apps/my-dir/${myapp}/main-es5.js`)
+ );
+ console.log(`The current es5 bundle size is ${es5BundleSize / 1000} KB`);
+ expect(es5BundleSize).toBeLessThanOrEqual(175000);
+
+ // running tests for the app
+ expectTestsPass(await runCLIAsync(`test my-dir-${myapp} --no-watch`));
+
+ // running tests for the lib
+ expectTestsPass(await runCLIAsync(`test my-dir-${mylib} --no-watch`));
+
+ if (supportUi()) {
+ expect(
+ runCLI(`e2e my-dir-${myapp}-e2e --headless --no-watch`)
+ ).toContain('All specs passed!');
+ }
+ }, 1000000);
+
+ it('should support router config generation (lazy)', async () => {
+ const myapp = uniq('myapp');
+ const mylib = uniq('mylib');
+ runCLI(`generate @nrwl/angular:app ${myapp} --directory=myDir --routing`);
+ runCLI(
+ `generate @nrwl/angular:lib ${mylib} --directory=myDir --routing --lazy --parentModule=apps/my-dir/${myapp}/src/app/app.module.ts`
+ );
+
+ runCLI(`build my-dir-${myapp} --aot`);
+ expectTestsPass(await runCLIAsync(`test my-dir-${myapp} --no-watch`));
+ }, 1000000);
+
+ it('should support router config generation (eager)', async () => {
+ const myapp = uniq('myapp');
+ runCLI(`generate @nrwl/angular:app ${myapp} --directory=myDir --routing`);
+ const mylib = uniq('mylib');
+ runCLI(
+ `generate @nrwl/angular:lib ${mylib} --directory=myDir --routing --parentModule=apps/my-dir/${myapp}/src/app/app.module.ts`
+ );
+
+ runCLI(`build my-dir-${myapp} --aot`);
+ expectTestsPass(await runCLIAsync(`test my-dir-${myapp} --no-watch`));
+ }, 1000000);
+ });
+});
diff --git a/e2e/ng-add.test.ts b/e2e/ng-add.test.ts
index 6c0ad316b2..6039492bed 100644
--- a/e2e/ng-add.test.ts
+++ b/e2e/ng-add.test.ts
@@ -6,363 +6,356 @@ import {
runCLI,
runCLIAsync,
runCommand,
- runNgNew,
- updateFile
+ runNew,
+ updateFile,
+ forEachCli,
+ runNgAdd
} from './utils';
-describe('Nrwl Convert to Nx Workspace', () => {
- beforeEach(cleanup);
- afterAll(cleanup);
+forEachCli('angular', () => {
+ describe('Nrwl Convert to Nx Workspace', () => {
+ beforeEach(cleanup);
+ afterAll(cleanup);
- it('should generate a workspace', () => {
- runNgNew();
+ it('should generate a workspace', () => {
+ runNew('', false, false);
- // update package.json
- const packageJson = readJson('package.json');
- packageJson.description = 'some description';
- updateFile('package.json', JSON.stringify(packageJson, null, 2));
- // confirm that @nrwl and @ngrx dependencies do not exist yet
- expect(packageJson.devDependencies['@nrwl/workspace']).not.toBeDefined();
- expect(packageJson.dependencies['@ngrx/store']).not.toBeDefined();
- expect(packageJson.dependencies['@ngrx/effects']).not.toBeDefined();
- expect(packageJson.dependencies['@ngrx/router-store']).not.toBeDefined();
- expect(
- packageJson.devDependencies['@ngrx/store-devtools']
- ).not.toBeDefined();
+ // update package.json
+ const packageJson = readJson('package.json');
+ packageJson.description = 'some description';
+ updateFile('package.json', JSON.stringify(packageJson, null, 2));
+ // confirm that @nrwl and @ngrx dependencies do not exist yet
+ expect(packageJson.devDependencies['@nrwl/workspace']).not.toBeDefined();
+ expect(packageJson.dependencies['@ngrx/store']).not.toBeDefined();
+ expect(packageJson.dependencies['@ngrx/effects']).not.toBeDefined();
+ expect(packageJson.dependencies['@ngrx/router-store']).not.toBeDefined();
+ expect(
+ packageJson.devDependencies['@ngrx/store-devtools']
+ ).not.toBeDefined();
- // update tsconfig.json
- const tsconfigJson = readJson('tsconfig.json');
- tsconfigJson.compilerOptions.paths = { a: ['b'] };
- updateFile('tsconfig.json', JSON.stringify(tsconfigJson, null, 2));
+ // update tsconfig.json
+ const tsconfigJson = readJson('tsconfig.json');
+ tsconfigJson.compilerOptions.paths = { a: ['b'] };
+ updateFile('tsconfig.json', JSON.stringify(tsconfigJson, null, 2));
- updateFile('src/scripts.ts', '');
+ updateFile('src/scripts.ts', '');
- // update angular-cli.json
- const angularCLIJson = readJson('angular.json');
- angularCLIJson.projects.proj.architect.build.options.scripts = angularCLIJson.projects.proj.architect.test.options.scripts = [
- 'src/scripts.ts'
- ];
- angularCLIJson.projects.proj.architect.test.options.styles = [
- 'src/styles.css'
- ];
- updateFile('angular.json', JSON.stringify(angularCLIJson, null, 2));
+ // update angular-cli.json
+ const angularCLIJson = readJson('angular.json');
+ angularCLIJson.projects.proj.architect.build.options.scripts = angularCLIJson.projects.proj.architect.test.options.scripts = [
+ 'src/scripts.ts'
+ ];
+ angularCLIJson.projects.proj.architect.test.options.styles = [
+ 'src/styles.css'
+ ];
+ updateFile('angular.json', JSON.stringify(angularCLIJson, null, 2));
- // run the command
- runCLI('add @nrwl/workspace --npmScope projscope --skip-install');
- copyMissingPackages();
+ // run the command
+ runNgAdd('add @nrwl/workspace --npmScope projscope --skip-install');
+ copyMissingPackages();
- // check that prettier config exits and that files have been moved!
- checkFilesExist(
- '.vscode/extensions.json',
- '.prettierrc',
- 'apps/proj/src/main.ts',
- 'apps/proj/src/app/app.module.ts'
- );
+ // check that prettier config exits and that files have been moved!
+ checkFilesExist(
+ '.vscode/extensions.json',
+ '.prettierrc',
+ 'apps/proj/src/main.ts',
+ 'apps/proj/src/app/app.module.ts'
+ );
- expect(readJson('.vscode/extensions.json').recommendations).toEqual([
- 'nrwl.angular-console',
- 'angular.ng-template',
- 'ms-vscode.vscode-typescript-tslint-plugin',
- 'esbenp.prettier-vscode'
- ]);
+ expect(readJson('.vscode/extensions.json').recommendations).toEqual([
+ 'nrwl.angular-console',
+ 'angular.ng-template',
+ 'ms-vscode.vscode-typescript-tslint-plugin',
+ 'esbenp.prettier-vscode'
+ ]);
- // check that package.json got merged
- const updatedPackageJson = readJson('package.json');
- expect(updatedPackageJson.description).toEqual('some description');
- expect(updatedPackageJson.scripts).toEqual({
- ng: 'ng',
- nx: 'nx',
- start: 'ng serve',
- build: 'ng build',
- test: 'ng test',
- lint: 'nx workspace-lint && ng lint',
- e2e: 'ng e2e',
- 'affected:apps': 'nx affected:apps',
- 'affected:libs': 'nx affected:libs',
- 'affected:build': 'nx affected:build',
- 'affected:e2e': 'nx affected:e2e',
- 'affected:test': 'nx affected:test',
- 'affected:lint': 'nx affected:lint',
- 'affected:dep-graph': 'nx affected:dep-graph',
- affected: 'nx affected',
- format: 'nx format:write',
- 'format:write': 'nx format:write',
- 'format:check': 'nx format:check',
- update: 'ng update @nrwl/workspace',
- 'update:check': 'ng update',
- 'dep-graph': 'nx dep-graph',
- 'workspace-schematic': 'nx workspace-schematic',
- help: 'nx help'
- });
- expect(updatedPackageJson.devDependencies['@nrwl/workspace']).toBeDefined();
- expect(updatedPackageJson.devDependencies['@angular/cli']).toBeDefined();
+ // check that package.json got merged
+ const updatedPackageJson = readJson('package.json');
+ expect(updatedPackageJson.description).toEqual('some description');
+ expect(updatedPackageJson.scripts).toEqual({
+ ng: 'ng',
+ nx: 'nx',
+ start: 'ng serve',
+ build: 'ng build',
+ test: 'ng test',
+ lint: 'nx workspace-lint && ng lint',
+ e2e: 'ng e2e',
+ 'affected:apps': 'nx affected:apps',
+ 'affected:libs': 'nx affected:libs',
+ 'affected:build': 'nx affected:build',
+ 'affected:e2e': 'nx affected:e2e',
+ 'affected:test': 'nx affected:test',
+ 'affected:lint': 'nx affected:lint',
+ 'affected:dep-graph': 'nx affected:dep-graph',
+ affected: 'nx affected',
+ format: 'nx format:write',
+ 'format:write': 'nx format:write',
+ 'format:check': 'nx format:check',
+ update: 'ng update @nrwl/workspace',
+ 'update:check': 'ng update',
+ 'dep-graph': 'nx dep-graph',
+ 'workspace-schematic': 'nx workspace-schematic',
+ help: 'nx help'
+ });
+ expect(
+ updatedPackageJson.devDependencies['@nrwl/workspace']
+ ).toBeDefined();
+ expect(updatedPackageJson.devDependencies['@angular/cli']).toBeDefined();
- const nxJson = readJson('nx.json');
- expect(nxJson).toEqual({
- npmScope: 'projscope',
- implicitDependencies: {
- 'angular.json': '*',
- 'package.json': '*',
- 'tslint.json': '*',
- 'tsconfig.json': '*',
- 'nx.json': '*'
- },
- projects: {
- proj: {
- tags: []
+ const nxJson = readJson('nx.json');
+ expect(nxJson).toEqual({
+ npmScope: 'projscope',
+ implicitDependencies: {
+ 'angular.json': '*',
+ 'package.json': '*',
+ 'tslint.json': '*',
+ 'tsconfig.json': '*',
+ 'nx.json': '*'
},
- 'proj-e2e': {
- tags: []
+ projects: {
+ proj: {
+ tags: []
+ },
+ 'proj-e2e': {
+ tags: []
+ }
}
- }
- });
+ });
- // check if angular-cli.json get merged
- const updatedAngularCLIJson = readJson('angular.json');
- expect(updatedAngularCLIJson.projects.proj.root).toEqual('apps/proj');
- expect(updatedAngularCLIJson.projects.proj.sourceRoot).toEqual(
- 'apps/proj/src'
- );
-
- expect(updatedAngularCLIJson.projects.proj.architect.build).toEqual({
- builder: '@angular-devkit/build-angular:browser',
- options: {
- outputPath: 'dist/apps/proj',
- index: 'apps/proj/src/index.html',
- main: 'apps/proj/src/main.ts',
- polyfills: 'apps/proj/src/polyfills.ts',
- tsConfig: 'apps/proj/tsconfig.app.json',
- assets: ['apps/proj/src/favicon.ico', 'apps/proj/src/assets'],
- styles: ['apps/proj/src/styles.css'],
- scripts: ['apps/proj/src/scripts.ts']
- },
- configurations: {
- production: {
- fileReplacements: [
- {
- replace: 'apps/proj/src/environments/environment.ts',
- with: 'apps/proj/src/environments/environment.prod.ts'
- }
- ],
- budgets: [
- {
- maximumError: '5mb',
- maximumWarning: '2mb',
- type: 'initial'
- }
- ],
- optimization: true,
- outputHashing: 'all',
- sourceMap: false,
- extractCss: true,
- namedChunks: false,
- aot: true,
- extractLicenses: true,
- vendorChunk: false,
- buildOptimizer: true
- }
- }
- });
- expect(updatedAngularCLIJson.projects.proj.architect.serve).toEqual({
- builder: '@angular-devkit/build-angular:dev-server',
- options: {
- browserTarget: 'proj:build'
- },
- configurations: {
- production: {
- browserTarget: 'proj:build:production'
- }
- }
- });
-
- expect(updatedAngularCLIJson.projects.proj.architect.test).toEqual({
- builder: '@angular-devkit/build-angular:karma',
- options: {
- main: 'apps/proj/src/test.ts',
- polyfills: 'apps/proj/src/polyfills.ts',
- tsConfig: 'apps/proj/tsconfig.spec.json',
- karmaConfig: 'apps/proj/karma.conf.js',
- styles: ['apps/proj/src/styles.css'],
- scripts: ['apps/proj/src/scripts.ts'],
- assets: ['apps/proj/src/favicon.ico', 'apps/proj/src/assets']
- }
- });
-
- expect(updatedAngularCLIJson.projects.proj.architect.lint).toEqual({
- builder: '@angular-devkit/build-angular:tslint',
- options: {
- tsConfig: [
- 'apps/proj/tsconfig.app.json',
- 'apps/proj/tsconfig.spec.json'
- ],
- exclude: ['**/node_modules/**']
- }
- });
-
- expect(updatedAngularCLIJson.projects['proj-e2e'].root).toEqual(
- 'apps/proj-e2e'
- );
- expect(updatedAngularCLIJson.projects['proj-e2e'].architect.e2e).toEqual({
- builder: '@angular-devkit/build-angular:protractor',
- configurations: {
- production: {
- devServerTarget: 'proj:serve:production'
- }
- },
- options: {
- protractorConfig: 'apps/proj-e2e/protractor.conf.js',
- devServerTarget: 'proj:serve'
- }
- });
- expect(updatedAngularCLIJson.projects['proj-e2e'].architect.lint).toEqual({
- builder: '@angular-devkit/build-angular:tslint',
- options: {
- tsConfig: 'apps/proj-e2e/tsconfig.json',
- exclude: ['**/node_modules/**']
- }
- });
-
- const updatedTslint = readJson('tslint.json');
- expect(updatedTslint.rules['nx-enforce-module-boundaries']).toEqual([
- true,
- {
- allow: [],
- depConstraints: [{ sourceTag: '*', onlyDependOnLibsWithTags: ['*'] }]
- }
- ]);
-
- runCLI('build --prod --outputHashing none');
- checkFilesExist('dist/apps/proj/main-es2015.js');
- });
-
- it('should generate a workspace and not change dependencies, devDependencies, or vscode extensions if they already exist', () => {
- // create a new AngularCLI app
- runNgNew();
- const nxVersion = '0.0.0';
- const schematicsVersion = '0.0.0';
- const ngrxVersion = '0.0.0';
- // update package.json
- const existingPackageJson = readJson('package.json');
- existingPackageJson.devDependencies['@nrwl/workspace'] = schematicsVersion;
- existingPackageJson.dependencies['@ngrx/store'] = ngrxVersion;
- existingPackageJson.dependencies['@ngrx/effects'] = ngrxVersion;
- existingPackageJson.dependencies['@ngrx/router-store'] = ngrxVersion;
- existingPackageJson.devDependencies['@ngrx/store-devtools'] = ngrxVersion;
- updateFile('package.json', JSON.stringify(existingPackageJson, null, 2));
-
- updateFile(
- '.vscode/extensions.json',
- JSON.stringify({
- recommendations: ['eamodio.gitlens', 'angular.ng-template']
- })
- );
- // run the command
- runCLI('add @nrwl/workspace --npmScope projscope --skip-install');
-
- // check that dependencies and devDependencies remained the same
- const packageJson = readJson('package.json');
- expect(packageJson.devDependencies['@nrwl/workspace']).toEqual(
- schematicsVersion
- );
- expect(packageJson.dependencies['@ngrx/store']).toEqual(ngrxVersion);
- expect(packageJson.dependencies['@ngrx/effects']).toEqual(ngrxVersion);
- expect(packageJson.dependencies['@ngrx/router-store']).toEqual(ngrxVersion);
- expect(packageJson.devDependencies['@ngrx/store-devtools']).toEqual(
- ngrxVersion
- );
-
- expect(readJson('.vscode/extensions.json').recommendations).toEqual([
- 'eamodio.gitlens',
- 'angular.ng-template',
- 'nrwl.angular-console',
- 'ms-vscode.vscode-typescript-tslint-plugin',
- 'esbenp.prettier-vscode'
- ]);
- });
-
- it('should convert a project with common libraries in the ecosystem', () => {
- // create a new AngularCLI app
- runNgNew();
-
- // Add some Angular libraries
- runCLI('add @angular/elements');
- runCLI('add @angular/material');
- runCLI('add @angular/pwa');
- runCLI('add @ngrx/store');
- runCLI('add @ngrx/effects');
-
- // Add Nx
- runCLI('add @nrwl/workspace --skip-install');
- });
-
- it('should handle workspaces with no e2e project', async () => {
- // create a new AngularCLI app
- runNgNew();
-
- // Remove e2e
- runCommand('rm -rf e2e');
- const existingAngularJson = readJson('angular.json');
- delete existingAngularJson.projects['proj'].architect.e2e;
- updateFile('angular.json', JSON.stringify(existingAngularJson, null, 2));
-
- // Add @nrwl/workspace
- const result = await runCLIAsync(
- 'add @nrwl/workspace --npmScope projscope --skip-install'
- );
-
- checkFilesExist(
- '.prettierrc',
- 'apps/proj/src/main.ts',
- 'apps/proj/src/app/app.module.ts'
- );
-
- expect(result.stderr).toContain(
- 'No e2e project was migrated because there was none declared in angular.json'
- );
- });
-
- it('should handle different types of errors', () => {
- // create a new AngularCLI app
- runNgNew();
-
- // Only remove e2e directory
- runCommand('mv e2e e2e-bak');
- try {
- runCLI('add @nrwl/workspace --npmScope projscope --skip-install');
- fail('Did not handle not having a e2e directory');
- } catch (e) {
- expect(e.stderr.toString()).toContain(
- 'Your workspace could not be converted into an Nx Workspace because of the above error.'
+ // check if angular-cli.json get merged
+ const updatedAngularCLIJson = readJson('angular.json');
+ expect(updatedAngularCLIJson.projects.proj.root).toEqual('apps/proj');
+ expect(updatedAngularCLIJson.projects.proj.sourceRoot).toEqual(
+ 'apps/proj/src'
);
- }
- // Put e2e back
- runCommand('mv e2e-bak e2e');
+ expect(updatedAngularCLIJson.projects.proj.architect.build).toEqual({
+ builder: '@angular-devkit/build-angular:browser',
+ options: {
+ aot: false,
+ outputPath: 'dist/apps/proj',
+ index: 'apps/proj/src/index.html',
+ main: 'apps/proj/src/main.ts',
+ polyfills: 'apps/proj/src/polyfills.ts',
+ tsConfig: 'apps/proj/tsconfig.app.json',
+ assets: ['apps/proj/src/favicon.ico', 'apps/proj/src/assets'],
+ styles: ['apps/proj/src/styles.css'],
+ scripts: ['apps/proj/src/scripts.ts']
+ },
+ configurations: {
+ production: {
+ fileReplacements: [
+ {
+ replace: 'apps/proj/src/environments/environment.ts',
+ with: 'apps/proj/src/environments/environment.prod.ts'
+ }
+ ],
+ budgets: [
+ {
+ maximumError: '5mb',
+ maximumWarning: '2mb',
+ type: 'initial'
+ }
+ ],
+ optimization: true,
+ outputHashing: 'all',
+ sourceMap: false,
+ extractCss: true,
+ namedChunks: false,
+ aot: true,
+ extractLicenses: true,
+ vendorChunk: false,
+ buildOptimizer: true
+ }
+ }
+ });
+ expect(updatedAngularCLIJson.projects.proj.architect.serve).toEqual({
+ builder: '@angular-devkit/build-angular:dev-server',
+ options: {
+ browserTarget: 'proj:build'
+ },
+ configurations: {
+ production: {
+ browserTarget: 'proj:build:production'
+ }
+ }
+ });
- // Remove package.json
- runCommand('mv package.json package.json.bak');
- try {
- runCLI('add @nrwl/workspace --npmScope projscope --skip-install');
- fail('Did not handle not having a package.json');
- } catch (e) {
- expect(e.stderr.toString()).toContain(
- 'Your workspace could not be converted into an Nx Workspace because of the above error.'
+ expect(updatedAngularCLIJson.projects.proj.architect.test).toEqual({
+ builder: '@angular-devkit/build-angular:karma',
+ options: {
+ main: 'apps/proj/src/test.ts',
+ polyfills: 'apps/proj/src/polyfills.ts',
+ tsConfig: 'apps/proj/tsconfig.spec.json',
+ karmaConfig: 'apps/proj/karma.conf.js',
+ styles: ['apps/proj/src/styles.css'],
+ scripts: ['apps/proj/src/scripts.ts'],
+ assets: ['apps/proj/src/favicon.ico', 'apps/proj/src/assets']
+ }
+ });
+
+ expect(updatedAngularCLIJson.projects.proj.architect.lint).toEqual({
+ builder: '@angular-devkit/build-angular:tslint',
+ options: {
+ tsConfig: [
+ 'apps/proj/tsconfig.app.json',
+ 'apps/proj/tsconfig.spec.json'
+ ],
+ exclude: ['**/node_modules/**']
+ }
+ });
+
+ expect(updatedAngularCLIJson.projects['proj-e2e'].root).toEqual(
+ 'apps/proj-e2e'
+ );
+ expect(updatedAngularCLIJson.projects['proj-e2e'].architect.e2e).toEqual({
+ builder: '@angular-devkit/build-angular:protractor',
+ configurations: {
+ production: {
+ devServerTarget: 'proj:serve:production'
+ }
+ },
+ options: {
+ protractorConfig: 'apps/proj-e2e/protractor.conf.js',
+ devServerTarget: 'proj:serve'
+ }
+ });
+ expect(updatedAngularCLIJson.projects['proj-e2e'].architect.lint).toEqual(
+ {
+ builder: '@angular-devkit/build-angular:tslint',
+ options: {
+ tsConfig: 'apps/proj-e2e/tsconfig.json',
+ exclude: ['**/node_modules/**']
+ }
+ }
);
- }
- // Put package.json back
- runCommand('mv package.json.bak package.json');
+ const updatedTslint = readJson('tslint.json');
+ expect(updatedTslint.rules['nx-enforce-module-boundaries']).toEqual([
+ true,
+ {
+ allow: [],
+ depConstraints: [{ sourceTag: '*', onlyDependOnLibsWithTags: ['*'] }]
+ }
+ ]);
- // Remove src
- runCommand('mv src src-bak');
- try {
- runCLI('add @nrwl/workspace --npmScope projscope --skip-install');
- fail('Did not handle not having a src directory');
- } catch (e) {
- expect(e.stderr.toString()).toContain('Path: src does not exist');
- }
+ runCLI('build --prod --outputHashing none');
+ checkFilesExist('dist/apps/proj/main-es2015.js');
+ });
- // Put src back
- runCommand('mv src-bak src');
+ it('should generate a workspace and not change dependencies, devDependencies, or vscode extensions if they already exist', () => {
+ // create a new AngularCLI app
+ runNew();
+ const nxVersion = '0.0.0';
+ const schematicsVersion = '0.0.0';
+ const ngrxVersion = '0.0.0';
+ // update package.json
+ const existingPackageJson = readJson('package.json');
+ existingPackageJson.devDependencies[
+ '@nrwl/workspace'
+ ] = schematicsVersion;
+ existingPackageJson.dependencies['@ngrx/store'] = ngrxVersion;
+ existingPackageJson.dependencies['@ngrx/effects'] = ngrxVersion;
+ existingPackageJson.dependencies['@ngrx/router-store'] = ngrxVersion;
+ existingPackageJson.devDependencies['@ngrx/store-devtools'] = ngrxVersion;
+ updateFile('package.json', JSON.stringify(existingPackageJson, null, 2));
+
+ updateFile(
+ '.vscode/extensions.json',
+ JSON.stringify({
+ recommendations: ['eamodio.gitlens', 'angular.ng-template']
+ })
+ );
+ // run the command
+ runNgAdd('add @nrwl/workspace --npmScope projscope --skip-install');
+
+ // check that dependencies and devDependencies remained the same
+ const packageJson = readJson('package.json');
+ expect(packageJson.devDependencies['@nrwl/workspace']).toEqual(
+ schematicsVersion
+ );
+ expect(packageJson.dependencies['@ngrx/store']).toEqual(ngrxVersion);
+ expect(packageJson.dependencies['@ngrx/effects']).toEqual(ngrxVersion);
+ expect(packageJson.dependencies['@ngrx/router-store']).toEqual(
+ ngrxVersion
+ );
+ expect(packageJson.devDependencies['@ngrx/store-devtools']).toEqual(
+ ngrxVersion
+ );
+
+ expect(readJson('.vscode/extensions.json').recommendations).toEqual([
+ 'eamodio.gitlens',
+ 'angular.ng-template',
+ 'nrwl.angular-console',
+ 'ms-vscode.vscode-typescript-tslint-plugin',
+ 'esbenp.prettier-vscode'
+ ]);
+ });
+
+ it('should convert a project with common libraries in the ecosystem', () => {
+ // create a new AngularCLI app
+ runNew();
+
+ // Add some Angular libraries
+ runNgAdd('add @angular/elements');
+ runNgAdd('add @angular/material');
+ runNgAdd('add @angular/pwa');
+ runNgAdd('add @ngrx/store');
+ runNgAdd('add @ngrx/effects');
+
+ // Add Nx
+ runNgAdd('add @nrwl/workspace --skip-install');
+ });
+
+ it('should handle different types of errors', () => {
+ // create a new AngularCLI app
+ runNew();
+
+ // Only remove e2e directory
+ runCommand('mv e2e e2e-bak');
+ try {
+ runNgAdd('add @nrwl/workspace --npmScope projscope --skip-install');
+ fail('Did not handle not having a e2e directory');
+ } catch (e) {
+ expect(e.stderr.toString()).toContain(
+ 'Your workspace could not be converted into an Nx Workspace because of the above error.'
+ );
+ }
+
+ // Put e2e back
+ runCommand('mv e2e-bak e2e');
+
+ // Remove package.json
+ runCommand('mv package.json package.json.bak');
+ try {
+ runNgAdd('add @nrwl/workspace --npmScope projscope --skip-install');
+ fail('Did not handle not having a package.json');
+ } catch (e) {
+ expect(e.stderr.toString()).toContain(
+ 'Your workspace could not be converted into an Nx Workspace because of the above error.'
+ );
+ }
+
+ // Put package.json back
+ runCommand('mv package.json.bak package.json');
+
+ // Remove src
+ runCommand('mv src src-bak');
+ try {
+ runNgAdd('add @nrwl/workspace --npmScope projscope --skip-install');
+ fail('Did not handle not having a src directory');
+ } catch (e) {
+ expect(e.stderr.toString()).toContain('Path: src does not exist');
+ }
+
+ // Put src back
+ runCommand('mv src-bak src');
+ });
+ });
+});
+
+forEachCli('nx', () => {
+ describe('ng-add', () => {
+ it('is not supported', () => {});
});
});
diff --git a/e2e/ng-new.test.ts b/e2e/ng-new.test.ts
deleted file mode 100644
index 384008dd7f..0000000000
--- a/e2e/ng-new.test.ts
+++ /dev/null
@@ -1,115 +0,0 @@
-import {
- ensureProject,
- exists,
- expectTestsPass,
- getSize,
- runCLI,
- runCLIAsync,
- runsInWSL,
- uniq,
- updateFile
-} from './utils';
-import { toClassName } from '@nrwl/workspace';
-
-describe('Nrwl Workspace', () => {
- beforeEach(() => {
- ensureProject();
- });
-
- it('should work', async () => {
- const myapp = uniq('myapp');
- const mylib = uniq('mylib');
- runCLI(
- `generate @nrwl/angular:app ${myapp} --directory=myDir --no-interactive`
- );
- runCLI(
- `generate @nrwl/angular:lib ${mylib} --directory=myDir --no-interactive`
- );
-
- updateFile(
- `apps/my-dir/${myapp}/src/app/app.module.ts`,
- `
- import { NgModule } from '@angular/core';
- import { BrowserModule } from '@angular/platform-browser';
- import { MyDir${toClassName(
- mylib
- )}Module } from '@proj/my-dir/${mylib}';
- import { AppComponent } from './app.component';
-
- @NgModule({
- imports: [BrowserModule, MyDir${toClassName(mylib)}Module],
- declarations: [AppComponent],
- bootstrap: [AppComponent]
- })
- export class AppModule {}
- `
- );
- runCLI(`build --prod --project=my-dir-${myapp} --output-hashing none`);
- expect(
- exists(`./tmp/proj/dist/apps/my-dir/${myapp}/main-es2015.js`)
- ).toEqual(true);
- expect(exists(`./tmp/proj/dist/apps/my-dir/${myapp}/main-es5.js`)).toEqual(
- true
- );
-
- // This is a loose requirement because there are a lot of
- // influences external from this project that affect this.
- const es2015BundleSize = getSize(
- `./tmp/proj/dist/apps/my-dir/${myapp}/main-es2015.js`
- );
- console.log(
- `The current es2015 bundle size is ${es2015BundleSize / 1000} KB`
- );
- expect(es2015BundleSize).toBeLessThanOrEqual(150000);
-
- const es5BundleSize = getSize(
- `./tmp/proj/dist/apps/my-dir/${myapp}/main-es5.js`
- );
- console.log(`The current es5 bundle size is ${es5BundleSize / 1000} KB`);
- expect(es5BundleSize).toBeLessThanOrEqual(175000);
-
- // running tests for the app
- expectTestsPass(
- await runCLIAsync(`test --project=my-dir-${myapp} --no-watch`)
- );
-
- // running tests for the lib
- expectTestsPass(
- await runCLIAsync(`test --project=my-dir-${mylib} --no-watch`)
- );
-
- if (!runsInWSL()) {
- expect(
- runCLI(`e2e --project=my-dir-${myapp}-e2e --headless --watch=false`)
- ).toContain('All specs passed!');
- }
- }, 1000000);
-
- it('should support router config generation (lazy)', async () => {
- const myapp = uniq('myapp');
- const mylib = uniq('mylib');
- runCLI(`generate @nrwl/angular:app ${myapp} --directory=myDir --routing`);
- runCLI(
- `generate @nrwl/angular:lib ${mylib} --directory=myDir --routing --lazy --parentModule=apps/my-dir/${myapp}/src/app/app.module.ts`
- );
-
- runCLI(`build --aot --project=my-dir-${myapp}`);
- expectTestsPass(
- await runCLIAsync(`test --project=my-dir-${myapp} --no-watch`)
- );
- }, 1000000);
-
- it('should support router config generation (eager)', async () => {
- const myapp = uniq('myapp');
- runCLI(`generate @nrwl/angular:app ${myapp} --directory=myDir --routing`);
- const mylib = uniq('mylib');
- runCLI(
- `generate @nrwl/angular:lib ${mylib} --directory=myDir --routing --parentModule=apps/my-dir/${myapp}/src/app/app.module.ts`
- );
-
- runCLI(`build --aot --project=my-dir-${myapp}`);
- expectTestsPass(
- await runCLIAsync(`test --project=my-dir-${myapp} --no-watch`)
- );
- }, 1000000);
-});
diff --git a/e2e/ngrx.test.ts b/e2e/ngrx.test.ts
index 5d75163b6d..22778b5f93 100644
--- a/e2e/ngrx.test.ts
+++ b/e2e/ngrx.test.ts
@@ -4,67 +4,74 @@ import {
runCLIAsync,
uniq,
ensureProject,
- readJson
+ readJson,
+ forEachCli
} from './utils';
-describe('ngrx', () => {
- it('should work', async () => {
- ensureProject();
+forEachCli(() => {
+ describe('ngrx', () => {
+ it('should work', async () => {
+ ensureProject();
- const myapp = uniq('myapp');
- runCLI(`generate @nrwl/angular:app ${myapp} --no-interactive`);
+ const myapp = uniq('myapp');
+ runCLI(`generate @nrwl/angular:app ${myapp} --no-interactive`);
- // Generate root ngrx state management
- runCLI(
- `generate @nrwl/angular:ngrx users --module=apps/${myapp}/src/app/app.module.ts --root`
- );
- const packageJson = readJson('package.json');
- expect(packageJson.dependencies['@ngrx/store']).toBeDefined();
- expect(packageJson.dependencies['@ngrx/effects']).toBeDefined();
- expect(packageJson.dependencies['@ngrx/router-store']).toBeDefined();
- expect(packageJson.devDependencies['@ngrx/store-devtools']).toBeDefined();
+ // Generate root ngrx state management
+ runCLI(
+ `generate @nrwl/angular:ngrx users --module=apps/${myapp}/src/app/app.module.ts --root`
+ );
+ const packageJson = readJson('package.json');
+ expect(packageJson.dependencies['@ngrx/store']).toBeDefined();
+ expect(packageJson.dependencies['@ngrx/effects']).toBeDefined();
+ expect(packageJson.dependencies['@ngrx/router-store']).toBeDefined();
+ expect(packageJson.devDependencies['@ngrx/store-devtools']).toBeDefined();
- const mylib = uniq('mylib');
- // Generate feature library and ngrx state within that library
- runCLI(`g @nrwl/angular:lib ${mylib} --prefix=fl`);
- runCLI(
- `generate @nrwl/angular:ngrx flights --module=libs/${mylib}/src/lib/${mylib}.module.ts --facade`
- );
+ const mylib = uniq('mylib');
+ // Generate feature library and ngrx state within that library
+ runCLI(`g @nrwl/angular:lib ${mylib} --prefix=fl`);
+ runCLI(
+ `generate @nrwl/angular:ngrx flights --module=libs/${mylib}/src/lib/${mylib}.module.ts --facade`
+ );
- expect(runCLI(`build ${myapp}`)).toContain('chunk {main} main-es2015.js,');
- expect(runCLI(`build ${myapp}`)).toContain('chunk {main} main-es5.js,');
- expectTestsPass(await runCLIAsync(`test ${myapp} --no-watch`));
- expectTestsPass(await runCLIAsync(`test ${mylib} --no-watch`));
- }, 1000000);
+ expect(runCLI(`build ${myapp}`)).toContain(
+ 'chunk {main} main-es2015.js,'
+ );
+ expect(runCLI(`build ${myapp}`)).toContain('chunk {main} main-es5.js,');
+ expectTestsPass(await runCLIAsync(`test ${myapp} --no-watch`));
+ expectTestsPass(await runCLIAsync(`test ${mylib} --no-watch`));
+ }, 1000000);
- it('should work with creators', async () => {
- ensureProject();
+ it('should work with creators', async () => {
+ ensureProject();
- const myapp = uniq('myapp');
- runCLI(`generate @nrwl/angular:app ${myapp} --routing --no-interactive`);
+ const myapp = uniq('myapp');
+ runCLI(`generate @nrwl/angular:app ${myapp} --routing --no-interactive`);
- // Generate root ngrx state management
- runCLI(
- `generate @nrwl/angular:ngrx users --module=apps/${myapp}/src/app/app.module.ts --root --minimal --syntax=creators`
- );
- const packageJson = readJson('package.json');
- expect(packageJson.dependencies['@ngrx/entity']).toBeDefined();
- expect(packageJson.dependencies['@ngrx/store']).toBeDefined();
- expect(packageJson.dependencies['@ngrx/effects']).toBeDefined();
- expect(packageJson.dependencies['@ngrx/router-store']).toBeDefined();
- expect(packageJson.devDependencies['@ngrx/schematics']).toBeDefined();
- expect(packageJson.devDependencies['@ngrx/store-devtools']).toBeDefined();
+ // Generate root ngrx state management
+ runCLI(
+ `generate @nrwl/angular:ngrx users --module=apps/${myapp}/src/app/app.module.ts --root --minimal --syntax=creators`
+ );
+ const packageJson = readJson('package.json');
+ expect(packageJson.dependencies['@ngrx/entity']).toBeDefined();
+ expect(packageJson.dependencies['@ngrx/store']).toBeDefined();
+ expect(packageJson.dependencies['@ngrx/effects']).toBeDefined();
+ expect(packageJson.dependencies['@ngrx/router-store']).toBeDefined();
+ expect(packageJson.devDependencies['@ngrx/schematics']).toBeDefined();
+ expect(packageJson.devDependencies['@ngrx/store-devtools']).toBeDefined();
- const mylib = uniq('mylib');
- // Generate feature library and ngrx state within that library
- runCLI(`g @nrwl/angular:lib ${mylib} --prefix=fl`);
- runCLI(
- `generate @nrwl/angular:ngrx flights --module=libs/${mylib}/src/lib/${mylib}.module.ts --facade --syntax=creators`
- );
+ const mylib = uniq('mylib');
+ // Generate feature library and ngrx state within that library
+ runCLI(`g @nrwl/angular:lib ${mylib} --prefix=fl`);
+ runCLI(
+ `generate @nrwl/angular:ngrx flights --module=libs/${mylib}/src/lib/${mylib}.module.ts --facade --syntax=creators`
+ );
- expect(runCLI(`build ${myapp}`)).toContain('chunk {main} main-es2015.js,');
- expect(runCLI(`build ${myapp}`)).toContain('chunk {main} main-es5.js,');
- expectTestsPass(await runCLIAsync(`test ${myapp} --no-watch`));
- expectTestsPass(await runCLIAsync(`test ${mylib} --no-watch`));
- }, 1000000);
+ expect(runCLI(`build ${myapp}`)).toContain(
+ 'chunk {main} main-es2015.js,'
+ );
+ expect(runCLI(`build ${myapp}`)).toContain('chunk {main} main-es5.js,');
+ expectTestsPass(await runCLIAsync(`test ${myapp} --no-watch`));
+ expectTestsPass(await runCLIAsync(`test ${mylib} --no-watch`));
+ }, 1000000);
+ });
});
diff --git a/e2e/node.test.ts b/e2e/node.test.ts
index 07a5073206..6153b06fe7 100644
--- a/e2e/node.test.ts
+++ b/e2e/node.test.ts
@@ -9,7 +9,11 @@ import {
runCLI,
runCLIAsync,
uniq,
- updateFile
+ updateFile,
+ forEachCli,
+ checkFilesExist,
+ tmpProjPath,
+ workspaceConfigName
} from './utils';
function getData(): Promise {
@@ -27,168 +31,167 @@ function getData(): Promise {
});
}
-describe('Node Applications', () => {
- fit('should be able to generate an express application', async done => {
- ensureProject();
- const nodeapp = uniq('nodeapp');
- runCLI(`generate @nrwl/express:app ${nodeapp}`);
+forEachCli(() => {
+ describe('Node Applications', () => {
+ it('should be able to generate an express application', async done => {
+ ensureProject();
+ const nodeapp = uniq('nodeapp');
+ runCLI(`generate @nrwl/express:app ${nodeapp}`);
- updateFile(
- `apps/${nodeapp}/src/app/test.spec.ts`,
- `
+ updateFile(
+ `apps/${nodeapp}/src/app/test.spec.ts`,
+ `
describe('test', () => {
it('should work', () => {
expect(true).toEqual(true);
})
})
`
- );
+ );
- updateFile(`apps/${nodeapp}/src/assets/file.txt`, ``);
- const jestResult = await runCLIAsync(`test ${nodeapp}`);
- expect(jestResult.stderr).toContain('Test Suites: 1 passed, 1 total');
- await runCLIAsync(`build ${nodeapp}`);
+ updateFile(`apps/${nodeapp}/src/assets/file.txt`, ``);
+ const jestResult = await runCLIAsync(`test ${nodeapp}`);
+ expect(jestResult.stderr).toContain('Test Suites: 1 passed, 1 total');
+ await runCLIAsync(`build ${nodeapp}`);
- expect(exists(`./tmp/proj/dist/apps/${nodeapp}/main.js`)).toBeTruthy();
- expect(
- exists(`./tmp/proj/dist/apps/${nodeapp}/assets/file.txt`)
- ).toBeTruthy();
- expect(exists(`./tmp/proj/dist/apps/${nodeapp}/main.js.map`)).toBeTruthy();
- const server = fork(
- path.join(__dirname, '../../tmp/proj', `./dist/apps/${nodeapp}/main.js`),
- [],
- {
- cwd: './tmp/proj',
+ checkFilesExist(
+ `dist/apps/${nodeapp}/main.js`,
+ `dist/apps/${nodeapp}/assets/file.txt`,
+ `dist/apps/${nodeapp}/main.js.map`
+ );
+
+ const server = fork(`./dist/apps/${nodeapp}/main.js`, [], {
+ cwd: tmpProjPath(),
silent: true
- }
- );
- expect(server).toBeTruthy();
- await new Promise(resolve => {
- server.stdout.once('data', async data => {
- expect(data.toString()).toContain('Listening at http://localhost:3333');
- const result = await getData();
-
- expect(result.message).toEqual(`Welcome to ${nodeapp}!`);
- treeKill(server.pid, 'SIGTERM', err => {
- expect(err).toBeFalsy();
- resolve();
- });
});
- });
- const config = readJson('angular.json');
- config.projects[nodeapp].architect.waitAndPrint = {
- builder: '@nrwl/workspace:run-commands',
- options: {
- commands: [
- {
- command: 'sleep 1 && echo DONE'
- }
- ],
- readyWhen: 'DONE'
- }
- };
- config.projects[nodeapp].architect.serve.options.waitUntilTargets = [
- `${nodeapp}:waitAndPrint`
- ];
- updateFile('angular.json', JSON.stringify(config));
- const process = spawn(
- 'node',
- ['./node_modules/.bin/ng', 'serve', nodeapp],
- {
- cwd: './tmp/proj'
- }
- );
- let collectedOutput = '';
- process.stdout.on('data', async (data: Buffer) => {
- collectedOutput += data.toString();
- if (!data.toString().includes('Listening at http://localhost:3333')) {
- return;
- }
-
- const result = await getData();
- expect(result.message).toEqual(`Welcome to ${nodeapp}!`);
- treeKill(process.pid, 'SIGTERM', err => {
- expect(collectedOutput.startsWith('DONE')).toBeTruthy();
- expect(err).toBeFalsy();
- done();
- });
- });
- }, 30000);
-
- it('should be able to generate a nest application', async done => {
- ensureProject();
- const nestapp = uniq('nestapp');
- runCLI(`generate @nrwl/nest:app ${nestapp}`);
-
- updateFile(`apps/${nestapp}/src/assets/file.txt`, ``);
- const jestResult = await runCLIAsync(`test ${nestapp}`);
- expect(jestResult.stderr).toContain('Test Suites: 2 passed, 2 total');
-
- await runCLIAsync(`build ${nestapp}`);
-
- expect(exists(`./tmp/proj/dist/apps/${nestapp}/main.js`)).toBeTruthy();
- expect(
- exists(`./tmp/proj/dist/apps/${nestapp}/assets/file.txt`)
- ).toBeTruthy();
- expect(exists(`./tmp/proj/dist/apps/${nestapp}/main.js.map`)).toBeTruthy();
-
- const server = fork(
- path.join(__dirname, '../../tmp/proj', `./dist/apps/${nestapp}/main.js`),
- [],
- {
- cwd: './tmp/proj',
- silent: true
- }
- );
- expect(server).toBeTruthy();
-
- await new Promise(resolve => {
- server.stdout.on('data', async data => {
- const message = data.toString();
- if (message.includes('Listening at http://localhost:3333')) {
+ expect(server).toBeTruthy();
+ await new Promise(resolve => {
+ server.stdout.once('data', async data => {
+ expect(data.toString()).toContain(
+ 'Listening at http://localhost:3333'
+ );
const result = await getData();
- expect(result.message).toEqual(`Welcome to ${nestapp}!`);
+ expect(result.message).toEqual(`Welcome to ${nodeapp}!`);
treeKill(server.pid, 'SIGTERM', err => {
expect(err).toBeFalsy();
resolve();
});
+ });
+ });
+ const config = readJson(workspaceConfigName());
+ config.projects[nodeapp].architect.waitAndPrint = {
+ builder: '@nrwl/workspace:run-commands',
+ options: {
+ commands: [
+ {
+ command: 'sleep 1 && echo DONE'
+ }
+ ],
+ readyWhen: 'DONE'
}
+ };
+
+ config.projects[nodeapp].architect.serve.options.waitUntilTargets = [
+ `${nodeapp}:waitAndPrint`
+ ];
+ updateFile(workspaceConfigName(), JSON.stringify(config));
+ const process = spawn(
+ 'node',
+ ['./node_modules/.bin/nx', 'serve', nodeapp],
+ {
+ cwd: tmpProjPath()
+ }
+ );
+ let collectedOutput = '';
+ process.stdout.on('data', async (data: Buffer) => {
+ collectedOutput += data.toString();
+ if (!data.toString().includes('Listening at http://localhost:3333')) {
+ return;
+ }
+
+ const result = await getData();
+ expect(result.message).toEqual(`Welcome to ${nodeapp}!`);
+ treeKill(process.pid, 'SIGTERM', err => {
+ expect(collectedOutput.startsWith('DONE')).toBeTruthy();
+ expect(err).toBeFalsy();
+ done();
+ });
});
- });
+ }, 30000);
- const process = spawn(
- 'node',
- ['./node_modules/.bin/ng', 'serve', nestapp],
- {
- cwd: './tmp/proj'
- }
- );
+ it('should be able to generate a nest application', async done => {
+ ensureProject();
+ const nestapp = uniq('nestapp');
+ runCLI(`generate @nrwl/nest:app ${nestapp}`);
- process.stdout.on('data', async (data: Buffer) => {
- if (!data.toString().includes('Listening at http://localhost:3333')) {
- return;
- }
- const result = await getData();
- expect(result.message).toEqual(`Welcome to ${nestapp}!`);
- treeKill(process.pid, 'SIGTERM', err => {
- expect(err).toBeFalsy();
- done();
+ updateFile(`apps/${nestapp}/src/assets/file.txt`, ``);
+ const jestResult = await runCLIAsync(`test ${nestapp}`);
+ expect(jestResult.stderr).toContain('Test Suites: 2 passed, 2 total');
+
+ await runCLIAsync(`build ${nestapp}`);
+
+ checkFilesExist(
+ `dist/apps/${nestapp}/main.js`,
+ `dist/apps/${nestapp}/assets/file.txt`,
+ `dist/apps/${nestapp}/main.js.map`
+ );
+
+ const server = fork(`./dist/apps/${nestapp}/main.js`, [], {
+ cwd: tmpProjPath(),
+ silent: true
});
- });
- }, 30000);
+ expect(server).toBeTruthy();
- it('should be able to generate an empty application', async () => {
- ensureProject();
- const nodeapp = uniq('nodeapp');
+ await new Promise(resolve => {
+ server.stdout.on('data', async data => {
+ const message = data.toString();
+ if (message.includes('Listening at http://localhost:3333')) {
+ const result = await getData();
- runCLI(`generate @nrwl/node:app ${nodeapp}`);
- updateFile(`apps/${nodeapp}/src/main.ts`, `console.log('Hello World!');`);
- await runCLIAsync(`build ${nodeapp}`);
- expect(exists(`./tmp/proj/dist/apps/${nodeapp}/main.js`)).toBeTruthy();
- const result = execSync(`node dist/apps/${nodeapp}/main.js`, {
- cwd: './tmp/proj'
- }).toString();
- expect(result).toContain('Hello World!');
- }, 30000);
+ expect(result.message).toEqual(`Welcome to ${nestapp}!`);
+ treeKill(server.pid, 'SIGTERM', err => {
+ expect(err).toBeFalsy();
+ resolve();
+ });
+ }
+ });
+ });
+
+ const process = spawn(
+ 'node',
+ ['./node_modules/.bin/nx', 'serve', nestapp],
+ {
+ cwd: tmpProjPath()
+ }
+ );
+
+ process.stdout.on('data', async (data: Buffer) => {
+ if (!data.toString().includes('Listening at http://localhost:3333')) {
+ return;
+ }
+ const result = await getData();
+ expect(result.message).toEqual(`Welcome to ${nestapp}!`);
+ treeKill(process.pid, 'SIGTERM', err => {
+ expect(err).toBeFalsy();
+ done();
+ });
+ });
+ }, 30000);
+
+ it('should be able to generate an empty application', async () => {
+ ensureProject();
+ const nodeapp = uniq('nodeapp');
+
+ runCLI(`generate @nrwl/node:app ${nodeapp}`);
+ updateFile(`apps/${nodeapp}/src/main.ts`, `console.log('Hello World!');`);
+ await runCLIAsync(`build ${nodeapp}`);
+
+ checkFilesExist(`dist/apps/${nodeapp}/main.js`);
+ const result = execSync(`node dist/apps/${nodeapp}/main.js`, {
+ cwd: tmpProjPath()
+ }).toString();
+ expect(result).toContain('Hello World!');
+ }, 30000);
+ });
});
diff --git a/e2e/react.test.ts b/e2e/react.test.ts
index 569fb2e0fa..5b1655ae2d 100644
--- a/e2e/react.test.ts
+++ b/e2e/react.test.ts
@@ -7,120 +7,131 @@ import {
runCLIAsync,
checkFilesExist,
renameFile,
- readJson
+ readJson,
+ forEachCli,
+ supportUi,
+ workspaceConfigName
} from './utils';
import { serializeJson } from '@nrwl/workspace';
-describe('React Applications', () => {
- it('should be able to generate a react app + lib', async () => {
- ensureProject();
- const appName = uniq('app');
- const libName = uniq('lib');
+forEachCli(() => {
+ describe('React Applications', () => {
+ it('should be able to generate a react app + lib', async () => {
+ ensureProject();
+ const appName = uniq('app');
+ const libName = uniq('lib');
- runCLI(`generate @nrwl/react:app ${appName} --no-interactive`);
- runCLI(`generate @nrwl/react:lib ${libName} --no-interactive`);
+ runCLI(`generate @nrwl/react:app ${appName} --no-interactive`);
+ runCLI(`generate @nrwl/react:lib ${libName} --no-interactive`);
- const mainPath = `apps/${appName}/src/main.tsx`;
- updateFile(
- `apps/${appName}/src/app/app.css`,
- `body {
+ const mainPath = `apps/${appName}/src/main.tsx`;
+ updateFile(
+ `apps/${appName}/src/app/app.css`,
+ `body {
display: block;
}`
- );
- updateFile(mainPath, `import '@proj/${libName}';\n` + readFile(mainPath));
+ );
+ updateFile(mainPath, `import '@proj/${libName}';\n` + readFile(mainPath));
- const libTestResults = await runCLIAsync(`test ${libName}`);
- expect(libTestResults.stderr).toContain('Test Suites: 1 passed, 1 total');
+ const libTestResults = await runCLIAsync(`test ${libName}`);
+ expect(libTestResults.stderr).toContain('Test Suites: 1 passed, 1 total');
- await testGeneratedApp(appName);
- }, 120000);
+ await testGeneratedApp(appName);
+ }, 120000);
- it('should generate app with routing', async () => {
- ensureProject();
- const appName = uniq('app');
+ it('should generate app with routing', async () => {
+ ensureProject();
+ const appName = uniq('app');
- runCLI(`generate @nrwl/react:app ${appName} --routing --no-interactive`);
+ runCLI(`generate @nrwl/react:app ${appName} --routing --no-interactive`);
- await testGeneratedApp(appName);
- }, 120000);
+ await testGeneratedApp(appName);
+ }, 120000);
- it('should be able to use JSX', async () => {
- ensureProject();
- const appName = uniq('app');
- const libName = uniq('lib');
+ it('should be able to use JSX', async () => {
+ ensureProject();
+ const appName = uniq('app');
+ const libName = uniq('lib');
- runCLI(`generate @nrwl/react:app ${appName} --no-interactive`);
- runCLI(`generate @nrwl/react:lib ${libName} --no-interactive`);
+ runCLI(`generate @nrwl/react:app ${appName} --no-interactive`);
+ runCLI(`generate @nrwl/react:lib ${libName} --no-interactive`);
- renameFile(`apps/${appName}/src/main.tsx`, `apps/${appName}/src/main.jsx`);
- renameFile(
- `apps/${appName}/src/app/app.tsx`,
- `apps/${appName}/src/app/app.jsx`
- );
- renameFile(
- `apps/${appName}/src/app/app.spec.tsx`,
- `apps/${appName}/src/app/app.spec.jsx`
- );
- renameFile(
- `apps/${appName}/src/polyfills.ts`,
- `apps/${appName}/src/polyfills.js`
- );
- const angularJson = readJson('angular.json');
+ renameFile(
+ `apps/${appName}/src/main.tsx`,
+ `apps/${appName}/src/main.jsx`
+ );
+ renameFile(
+ `apps/${appName}/src/app/app.tsx`,
+ `apps/${appName}/src/app/app.jsx`
+ );
+ renameFile(
+ `apps/${appName}/src/app/app.spec.tsx`,
+ `apps/${appName}/src/app/app.spec.jsx`
+ );
+ renameFile(
+ `apps/${appName}/src/polyfills.ts`,
+ `apps/${appName}/src/polyfills.js`
+ );
+ const angularJson = readJson(workspaceConfigName());
- angularJson.projects[
- appName
- ].architect.build.options.main = `apps/${appName}/src/main.jsx`;
- angularJson.projects[
- appName
- ].architect.build.options.polyfills = `apps/${appName}/src/polyfills.js`;
- updateFile('angular.json', serializeJson(angularJson));
+ angularJson.projects[
+ appName
+ ].architect.build.options.main = `apps/${appName}/src/main.jsx`;
+ angularJson.projects[
+ appName
+ ].architect.build.options.polyfills = `apps/${appName}/src/polyfills.js`;
+ updateFile(workspaceConfigName(), serializeJson(angularJson));
- const mainPath = `apps/${appName}/src/main.jsx`;
- updateFile(mainPath, `import '@proj/${libName}';\n` + readFile(mainPath));
+ const mainPath = `apps/${appName}/src/main.jsx`;
+ updateFile(mainPath, `import '@proj/${libName}';\n` + readFile(mainPath));
- await testGeneratedApp(appName);
- }, 30000);
+ await testGeneratedApp(appName);
+ }, 30000);
- async function testGeneratedApp(appName) {
- const lintResults = runCLI(`lint ${appName}`);
- expect(lintResults).toContain('All files pass linting.');
+ async function testGeneratedApp(appName) {
+ const lintResults = runCLI(`lint ${appName}`);
+ expect(lintResults).toContain('All files pass linting.');
- runCLI(`build ${appName}`);
- checkFilesExist(
- `dist/apps/${appName}/index.html`,
- `dist/apps/${appName}/polyfills-es2015.js`,
- `dist/apps/${appName}/runtime-es2015.js`,
- `dist/apps/${appName}/vendor-es2015.js`,
- `dist/apps/${appName}/main-es2015.js`,
- `dist/apps/${appName}/styles-es2015.js`,
- `dist/apps/${appName}/polyfills-es5.js`,
- `dist/apps/${appName}/runtime-es5.js`,
- `dist/apps/${appName}/vendor-es5.js`,
- `dist/apps/${appName}/main-es5.js`,
- `dist/apps/${appName}/styles-es5.js`
- );
- expect(readFile(`dist/apps/${appName}/main-es5.js`)).toContain(
- 'var App = function () {'
- );
- expect(readFile(`dist/apps/${appName}/main-es2015.js`)).toContain(
- 'const App = () => {'
- );
- runCLI(`build ${appName} --prod --output-hashing none`);
- checkFilesExist(
- `dist/apps/${appName}/index.html`,
- `dist/apps/${appName}/polyfills-es2015.js`,
- `dist/apps/${appName}/runtime-es2015.js`,
- `dist/apps/${appName}/main-es2015.js`,
- `dist/apps/${appName}/polyfills-es5.js`,
- `dist/apps/${appName}/runtime-es5.js`,
- `dist/apps/${appName}/main-es5.js`,
- `dist/apps/${appName}/styles.css`
- );
- const testResults = await runCLIAsync(`test ${appName}`);
- expect(testResults.stderr).toContain('Test Suites: 1 passed, 1 total');
- const lintE2eResults = runCLI(`lint ${appName}-e2e`);
- expect(lintE2eResults).toContain('All files pass linting.');
- const e2eResults = runCLI(`e2e ${appName}-e2e`);
- expect(e2eResults).toContain('All specs passed!');
- }
+ runCLI(`build ${appName}`);
+ checkFilesExist(
+ `dist/apps/${appName}/index.html`,
+ `dist/apps/${appName}/polyfills-es2015.js`,
+ `dist/apps/${appName}/runtime-es2015.js`,
+ `dist/apps/${appName}/vendor-es2015.js`,
+ `dist/apps/${appName}/main-es2015.js`,
+ `dist/apps/${appName}/styles-es2015.js`,
+ `dist/apps/${appName}/polyfills-es5.js`,
+ `dist/apps/${appName}/runtime-es5.js`,
+ `dist/apps/${appName}/vendor-es5.js`,
+ `dist/apps/${appName}/main-es5.js`,
+ `dist/apps/${appName}/styles-es5.js`
+ );
+ expect(readFile(`dist/apps/${appName}/main-es5.js`)).toContain(
+ 'var App = function () {'
+ );
+ expect(readFile(`dist/apps/${appName}/main-es2015.js`)).toContain(
+ 'const App = () => {'
+ );
+ runCLI(`build ${appName} --prod --output-hashing none`);
+ checkFilesExist(
+ `dist/apps/${appName}/index.html`,
+ `dist/apps/${appName}/polyfills-es2015.js`,
+ `dist/apps/${appName}/runtime-es2015.js`,
+ `dist/apps/${appName}/main-es2015.js`,
+ `dist/apps/${appName}/polyfills-es5.js`,
+ `dist/apps/${appName}/runtime-es5.js`,
+ `dist/apps/${appName}/main-es5.js`,
+ `dist/apps/${appName}/styles.css`
+ );
+ const testResults = await runCLIAsync(`test ${appName}`);
+ expect(testResults.stderr).toContain('Test Suites: 1 passed, 1 total');
+ const lintE2eResults = runCLI(`lint ${appName}-e2e`);
+ expect(lintE2eResults).toContain('All files pass linting.');
+
+ if (supportUi()) {
+ const e2eResults = runCLI(`e2e ${appName}-e2e`);
+ expect(e2eResults).toContain('All specs passed!');
+ }
+ }
+ });
});
diff --git a/e2e/upgrade-module.test.ts b/e2e/upgrade-module.test.ts
index 93dd65f2d7..2dc3c53a1b 100644
--- a/e2e/upgrade-module.test.ts
+++ b/e2e/upgrade-module.test.ts
@@ -1,43 +1,47 @@
import {
ensureProject,
- patchKarmaToWorkOnWSL,
runCLI,
uniq,
- updateFile
+ updateFile,
+ forEachCli,
+ supportUi
} from './utils';
-describe('Upgrade', () => {
- it('should generate an UpgradeModule setup', async () => {
- ensureProject();
- const myapp = uniq('myapp');
- runCLI(`generate @nrwl/angular:app ${myapp} --unit-test-runner=karma`);
- patchKarmaToWorkOnWSL();
+forEachCli(() => {
+ xdescribe('Upgrade', () => {
+ it('should generate an UpgradeModule setup', async () => {
+ ensureProject();
+ const myapp = uniq('myapp');
+ runCLI(`generate @nrwl/angular:app ${myapp} --unit-test-runner=karma`);
- updateFile(
- `apps/${myapp}/src/legacy.js`,
- `
+ updateFile(
+ `apps/${myapp}/src/legacy.js`,
+ `
const angular = window.angular.module('legacy', []);
angular.component('proj-root-legacy', {
template: 'Expected Value'
});
`
- );
+ );
- updateFile(
- `apps/${myapp}/src/app/app.component.html`,
- `
+ updateFile(
+ `apps/${myapp}/src/app/app.component.html`,
+ `
EXPECTED []
`
- );
+ );
- updateFile(`apps/${myapp}/src/app/app.component.spec.ts`, ``);
+ updateFile(`apps/${myapp}/src/app/app.component.spec.ts`, ``);
- runCLI(
- 'generate @nrwl/angular:upgrade-module legacy --angularJsImport=./legacy ' +
- `--angularJsCmpSelector=proj-root-legacy --project=${myapp}`
- );
+ runCLI(
+ 'generate @nrwl/angular:upgrade-module legacy --angularJsImport=./legacy ' +
+ `--angularJsCmpSelector=proj-root-legacy --project=${myapp}`
+ );
- runCLI(`build ${myapp}`);
- expect(runCLI(`test ${myapp} --no-watch`)).toContain('1 SUCCESS');
- }, 1000000);
+ runCLI(`build ${myapp}`);
+ if (supportUi()) {
+ expect(runCLI(`test ${myapp} --no-watch`)).toContain('1 SUCCESS');
+ }
+ }, 1000000);
+ });
});
diff --git a/e2e/utils.ts b/e2e/utils.ts
index ef187f2e17..333498a94f 100644
--- a/e2e/utils.ts
+++ b/e2e/utils.ts
@@ -3,57 +3,107 @@ import { readFileSync, statSync, writeFileSync, renameSync } from 'fs';
import { ensureDirSync } from 'fs-extra';
import * as path from 'path';
-const projectName: string = 'proj';
+export let cli;
export function uniq(prefix: string) {
return `${prefix}${Math.floor(Math.random() * 10000000)}`;
}
-function patchPackageJsonDeps() {
- const p = readFileSync('./tmp/proj/package.json').toString();
+export function forEachCli(
+ selectedCliOrFunction: string | Function,
+ callback?: Function
+) {
+ let clis;
+ if (process.env.SELECTED_CLI && selectedCliOrFunction && callback) {
+ if (selectedCliOrFunction == process.env.SELECTED_CLI) {
+ clis = [process.env.SELECTED_CLI];
+ } else {
+ clis = [];
+ }
+ } else if (process.env.SELECTED_CLI) {
+ clis = [process.env.SELECTED_CLI];
+ } else {
+ clis = callback ? [selectedCliOrFunction] : ['nx', 'angular'];
+ }
+
+ const cb: any = callback ? callback : selectedCliOrFunction;
+ clis.forEach(c => {
+ describe(`[${c}]`, () => {
+ beforeEach(() => {
+ cli = c;
+ });
+ cb();
+ });
+ });
+}
+
+export function workspaceConfigName() {
+ return cli === 'angular' ? 'angular.json' : 'workspace.json';
+}
+
+function patchPackageJsonDeps(addWorkspace = true) {
+ const p = JSON.parse(readFileSync(tmpProjPath('package.json')).toString());
const workspacePath = path.join(getCwd(), 'build', 'packages', 'workspace');
const angularPath = path.join(getCwd(), 'build', 'packages', 'angular');
- writeFileSync(
- './tmp/proj/package.json',
- p
- .replace(
- '"@nrwl/workspace": "*"',
- `"@nrwl/workspace": "file:${workspacePath}"`
- )
- .replace('"@nrwl/angular": "*"', `"@nrwl/angular": "file:${angularPath}"`)
- );
+ const reactPath = path.join(getCwd(), 'build', 'packages', 'react');
+
+ if (addWorkspace) {
+ p.devDependencies['@nrwl/workspace'] = `file:${workspacePath}`;
+ }
+ p.devDependencies['@nrwl/angular'] = `file:${angularPath}`;
+ p.devDependencies['@nrwl/react'] = `file:${reactPath}`;
+ writeFileSync(tmpProjPath('package.json'), JSON.stringify(p, null, 2));
}
function runYarnInstall(silent: boolean = true) {
const install = execSync('yarn install', {
- cwd: './tmp/proj',
+ cwd: tmpProjPath(),
...(silent ? { stdio: ['ignore', 'ignore', 'ignore'] } : {})
});
return install ? install.toString() : '';
}
-export function runNgNew(command?: string, silent?: boolean): string {
- const gen = execSync(
- `../node_modules/.bin/ng new proj --no-interactive --skip-install ${command ||
- ''}`,
- {
- cwd: `./tmp`,
- ...(silent ? { stdio: ['ignore', 'ignore', 'ignore'] } : {})
- }
- );
- patchPackageJsonDeps();
- const install = runYarnInstall(silent);
+export function runNew(
+ command?: string,
+ silent?: boolean,
+ addWorkspace = true
+): string {
+ let gen;
+ if (cli === 'angular') {
+ gen = execSync(
+ `../../node_modules/.bin/ng new proj --no-interactive --skip-install ${command ||
+ ''}`,
+ {
+ cwd: `./tmp/${cli}`,
+ ...(silent ? { stdio: ['ignore', 'ignore', 'ignore'] } : {})
+ }
+ );
+ } else {
+ gen = execSync(
+ `node ../../node_modules/@nrwl/tao/index.js new proj --no-interactive --skip-install ${command ||
+ ''}`,
+ {
+ cwd: `./tmp/${cli}`,
+ ...(silent && false ? { stdio: ['ignore', 'ignore', 'ignore'] } : {})
+ }
+ );
+ }
+
+ patchPackageJsonDeps(addWorkspace);
+ const install = runYarnInstall(silent && false);
return silent ? null : `${gen ? gen.toString() : ''}${install}`;
}
export function newProject(): void {
cleanup();
- if (!directoryExists('./tmp/proj_backup')) {
- runNgNew('--collection=@nrwl/workspace --npmScope=proj', true);
+ if (!directoryExists(tmpBackupProjPath())) {
+ runNew('--collection=@nrwl/workspace --npmScope=proj', true);
copyMissingPackages();
writeFileSync(
- './tmp/proj/node_modules/@angular-devkit/schematics/tasks/node-package/executor.js',
+ tmpProjPath(
+ 'node_modules/@angular-devkit/schematics/tasks/node-package/executor.js'
+ ),
`
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
@@ -67,45 +117,28 @@ function default_1(factoryOptions = {}) {
}
exports.default = default_1;`
);
- runCLI('add @nrwl/jest');
- runCLI('add @nrwl/cypress');
- runCLI('add @nrwl/web');
- runCLI('add @nrwl/react');
- runCLI('add @nrwl/angular');
- runCLI('add @nrwl/node');
- runCLI('add @nrwl/express');
- runCLI('add @nrwl/nest');
- execSync('mv ./tmp/proj ./tmp/proj_backup');
+
+ execSync(`mv ${tmpProjPath()} ${tmpBackupProjPath()}`);
}
- execSync('cp -a ./tmp/proj_backup ./tmp/proj');
+ execSync(`cp -a ${tmpBackupProjPath()} ${tmpProjPath()}`);
}
export function ensureProject(): void {
- if (!directoryExists('./tmp/proj')) {
+ if (!directoryExists(tmpProjPath())) {
newProject();
}
}
-export function runsInWSL() {
- return !!process.env['WINDOWSTMP'];
-}
-
-export function patchKarmaToWorkOnWSL(): void {
+export function supportUi() {
+ // powershell => wsl => no ui for now
try {
- const karma = readFile('karma.conf.js');
- if (process.env['WINDOWSTMP']) {
- updateFile(
- 'karma.conf.js',
- karma.replace(
- `const { constants } = require('karma');`,
- `
- const { constants } = require('karma');
- process.env['TMPDIR']="${process.env['WINDOWSTMP']}";
- `
- )
- );
- }
- } catch (e) {}
+ execSync(`powershell.exe echo 1`, {
+ stdio: ['ignore', 'ignore', 'ignore']
+ });
+ return false;
+ } catch (e) {
+ return true;
+ }
}
export function copyMissingPackages(): void {
@@ -150,7 +183,7 @@ export function copyMissingPackages(): void {
'document-register-element'
];
- modulesToCopy.forEach(m => copyNodeModule(projectName, m));
+ modulesToCopy.forEach(m => copyNodeModule(m));
updateFile(
'node_modules/@angular-devkit/schematics/tasks/node-package/executor.js',
`
@@ -167,17 +200,18 @@ export function copyMissingPackages(): void {
`
);
- execSync('rm -rf tmp/proj/node_modules/.bin/webpack');
+ execSync(`rm -rf ${tmpProjPath('node_modules/.bin/webpack')}`);
execSync(
- `cp -a node_modules/.bin/webpack tmp/proj/node_modules/.bin/webpack`
+ `cp -a node_modules/.bin/webpack ${tmpProjPath(
+ 'node_modules/.bin/webpack'
+ )}`
);
- execSync(`rm -rf ./tmp/proj/node_modules/cypress/node_modules/@types`);
- execSync(`rm -rf ./tmp/proj/@types/sinon-chai/node_modules/@types`);
+ execSync(`rm -rf ${tmpProjPath('node_modules/cypress/node_modules/@types')}`);
}
-function copyNodeModule(path: string, name: string) {
- execSync(`rm -rf tmp/${path}/node_modules/${name}`);
- execSync(`cp -a node_modules/${name} tmp/${path}/node_modules/${name}`);
+function copyNodeModule(name: string) {
+ execSync(`rm -rf ${tmpProjPath('node_modules/' + name)}`);
+ execSync(`cp -a node_modules/${name} ${tmpProjPath('node_modules/' + name)}`);
}
export function runCommandAsync(
@@ -190,7 +224,7 @@ export function runCommandAsync(
exec(
command,
{
- cwd: `./tmp/proj`
+ cwd: tmpProjPath()
},
(err, stdout, stderr) => {
if (!opts.silenceError && err) {
@@ -208,7 +242,35 @@ export function runCLIAsync(
silenceError: false
}
): Promise<{ stdout: string; stderr: string }> {
- return runCommandAsync(`./node_modules/.bin/ng ${command}`, opts);
+ return runCommandAsync(
+ `node ./node_modules/@nrwl/cli/bin/nx.js ${command}`,
+ opts
+ );
+}
+
+export function runNgAdd(
+ command?: string,
+ opts = {
+ silenceError: false
+ }
+): string {
+ try {
+ return execSync(`./node_modules/.bin/ng ${command}`, {
+ cwd: tmpProjPath()
+ })
+ .toString()
+ .replace(
+ /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,
+ ''
+ );
+ } catch (e) {
+ if (opts.silenceError) {
+ return e.stdout.toString();
+ } else {
+ console.log(e.stdout.toString(), e.stderr.toString());
+ throw e;
+ }
+ }
}
export function runCLI(
@@ -218,8 +280,8 @@ export function runCLI(
}
): string {
try {
- return execSync(`./node_modules/.bin/ng ${command}`, {
- cwd: `./tmp/${projectName}`
+ return execSync(`node ./node_modules/@nrwl/cli/bin/nx.js ${command}`, {
+ cwd: tmpProjPath()
})
.toString()
.replace(
@@ -244,7 +306,7 @@ export function expectTestsPass(v: { stdout: string; stderr: string }) {
export function runCommand(command: string): string {
try {
return execSync(command, {
- cwd: `./tmp/${projectName}`,
+ cwd: tmpProjPath(),
stdio: ['pipe', 'pipe', 'pipe']
}).toString();
} catch (e) {
@@ -253,23 +315,18 @@ export function runCommand(command: string): string {
}
export function updateFile(f: string, content: string): void {
- ensureDirSync(path.dirname(path.join(getCwd(), 'tmp', 'proj', f)));
- writeFileSync(path.join(getCwd(), 'tmp', 'proj', f), content);
+ ensureDirSync(path.dirname(tmpProjPath(f)));
+ writeFileSync(tmpProjPath(f), content);
}
export function renameFile(f: string, newPath: string): void {
- ensureDirSync(path.dirname(path.join(getCwd(), 'tmp', 'proj', newPath)));
- renameSync(
- path.join(getCwd(), 'tmp', 'proj', f),
- path.join(getCwd(), 'tmp', 'proj', newPath)
- );
+ ensureDirSync(path.dirname(tmpProjPath(newPath)));
+ renameSync(tmpProjPath(f), tmpProjPath(newPath));
}
export function checkFilesExist(...expectedFiles: string[]) {
expectedFiles.forEach(f => {
- const ff = f.startsWith('/')
- ? f
- : path.join(getCwd(), 'tmp', projectName, f);
+ const ff = f.startsWith('/') ? f : tmpProjPath(f);
if (!exists(ff)) {
throw new Error(`File '${ff}' does not exist`);
}
@@ -281,12 +338,12 @@ export function readJson(f: string): any {
}
export function readFile(f: string) {
- const ff = f.startsWith('/') ? f : path.join(getCwd(), 'tmp', projectName, f);
+ const ff = f.startsWith('/') ? f : tmpProjPath(f);
return readFileSync(ff).toString();
}
export function cleanup() {
- execSync('rm -rf ./tmp/proj');
+ execSync(`rm -rf ${tmpProjPath()}`);
}
export function getCwd(): string {
@@ -316,3 +373,11 @@ export function exists(filePath: string): boolean {
export function getSize(filePath: string): number {
return statSync(filePath).size;
}
+
+export function tmpProjPath(path?: string) {
+ return path ? `./tmp/${cli}/proj/${path}` : `./tmp/${cli}/proj`;
+}
+
+function tmpBackupProjPath(path?: string) {
+ return path ? `./tmp/${cli}/proj-backup/${path}` : `./tmp/${cli}/proj-backup`;
+}
diff --git a/e2e/web.test.ts b/e2e/web.test.ts
index 21f10ab4f0..748d4277cc 100644
--- a/e2e/web.test.ts
+++ b/e2e/web.test.ts
@@ -4,53 +4,57 @@ import {
readFile,
runCLI,
runCLIAsync,
- uniq
+ uniq,
+ forEachCli,
+ supportUi
} from './utils';
-describe('Web Components Applications', () => {
- it('should be able to generate a web app', async () => {
- ensureProject();
- const appName = uniq('app');
+forEachCli(() => {
+ describe('Web Components Applications', () => {
+ it('should be able to generate a web app', async () => {
+ ensureProject();
+ const appName = uniq('app');
- runCLI(`generate @nrwl/web:app ${appName} --no-interactive`);
+ runCLI(`generate @nrwl/web:app ${appName} --no-interactive`);
- const lintResults = runCLI(`lint ${appName}`);
- expect(lintResults).toContain('All files pass linting.');
+ const lintResults = runCLI(`lint ${appName}`);
+ expect(lintResults).toContain('All files pass linting.');
- runCLI(`build ${appName}`);
- checkFilesExist(
- `dist/apps/${appName}/index.html`,
- `dist/apps/${appName}/polyfills-es2015.js`,
- `dist/apps/${appName}/runtime-es2015.js`,
- `dist/apps/${appName}/main-es2015.js`,
- `dist/apps/${appName}/styles-es2015.js`,
- `dist/apps/${appName}/polyfills-es5.js`,
- `dist/apps/${appName}/runtime-es5.js`,
- `dist/apps/${appName}/main-es5.js`,
- `dist/apps/${appName}/styles-es5.js`
- );
- expect(readFile(`dist/apps/${appName}/main-es5.js`)).toContain(
- 'var AppElement = /** @class */ (function (_super) {'
- );
- expect(readFile(`dist/apps/${appName}/main-es2015.js`)).toContain(
- 'class AppElement'
- );
- runCLI(`build ${appName} --prod --output-hashing none`);
- checkFilesExist(
- `dist/apps/${appName}/index.html`,
- `dist/apps/${appName}/polyfills-es2015.js`,
- `dist/apps/${appName}/runtime-es2015.js`,
- `dist/apps/${appName}/main-es2015.js`,
- `dist/apps/${appName}/polyfills-es5.js`,
- `dist/apps/${appName}/runtime-es5.js`,
- `dist/apps/${appName}/main-es5.js`,
- `dist/apps/${appName}/styles.css`
- );
- const testResults = await runCLIAsync(`test ${appName}`);
- expect(testResults.stderr).toContain('Test Suites: 1 passed, 1 total');
- const lintE2eResults = runCLI(`lint ${appName}-e2e`);
- expect(lintE2eResults).toContain('All files pass linting.');
- const e2eResults = runCLI(`e2e ${appName}-e2e`);
- expect(e2eResults).toContain('All specs passed!');
- }, 120000);
+ runCLI(`build ${appName}`);
+ checkFilesExist(
+ `dist/apps/${appName}/index.html`,
+ `dist/apps/${appName}/polyfills-es2015.js`,
+ `dist/apps/${appName}/runtime-es2015.js`,
+ `dist/apps/${appName}/main-es2015.js`,
+ `dist/apps/${appName}/styles-es2015.js`,
+ `dist/apps/${appName}/polyfills-es5.js`,
+ `dist/apps/${appName}/runtime-es5.js`,
+ `dist/apps/${appName}/main-es5.js`,
+ `dist/apps/${appName}/styles-es5.js`
+ );
+ expect(readFile(`dist/apps/${appName}/main-es5.js`)).toContain(
+ 'var AppElement = /** @class */ (function (_super) {'
+ );
+ expect(readFile(`dist/apps/${appName}/main-es2015.js`)).toContain(
+ 'class AppElement'
+ );
+ runCLI(`build ${appName} --prod --output-hashing none`);
+ checkFilesExist(
+ `dist/apps/${appName}/index.html`,
+ `dist/apps/${appName}/polyfills-es2015.js`,
+ `dist/apps/${appName}/runtime-es2015.js`,
+ `dist/apps/${appName}/main-es2015.js`,
+ `dist/apps/${appName}/polyfills-es5.js`,
+ `dist/apps/${appName}/runtime-es5.js`,
+ `dist/apps/${appName}/main-es5.js`,
+ `dist/apps/${appName}/styles.css`
+ );
+ const testResults = await runCLIAsync(`test ${appName}`);
+ expect(testResults.stderr).toContain('Test Suites: 1 passed, 1 total');
+ const lintE2eResults = runCLI(`lint ${appName}-e2e`);
+ expect(lintE2eResults).toContain('All files pass linting.');
+ const e2eResults = runCLI(`e2e ${appName}-e2e`);
+ expect(e2eResults).toContain('All specs passed!');
+ }, 120000);
+ });
});
diff --git a/package.json b/package.json
index 273f047ebf..27af2e06b4 100644
--- a/package.json
+++ b/package.json
@@ -49,7 +49,7 @@
"@ngrx/schematics": "8.1.0",
"@ngrx/store": "8.1.0",
"@ngrx/store-devtools": "8.1.0",
- "@schematics/angular": "8.0.0",
+ "@schematics/angular": "8.1.1",
"@testing-library/react": "8.0.5",
"@types/express": "4.16.0",
"@types/jasmine": "~2.8.6",
@@ -94,7 +94,7 @@
"karma-jasmine-html-reporter": "^0.2.2",
"karma-webpack": "2.0.4",
"license-webpack-plugin": "^1.4.0",
- "ng-packagr": "5.1.0",
+ "ng-packagr": "5.3.0",
"ngrx-store-freeze": "0.2.4",
"npm-run-all": "^4.1.5",
"opn": "^5.3.0",
diff --git a/packages/angular/src/schematics/application/application.spec.ts b/packages/angular/src/schematics/application/application.spec.ts
index 0ca0ce1595..4d97023715 100644
--- a/packages/angular/src/schematics/application/application.spec.ts
+++ b/packages/angular/src/schematics/application/application.spec.ts
@@ -13,27 +13,27 @@ describe('app', () => {
});
describe('not nested', () => {
- it('should update angular.json', async () => {
+ it('should update workspace.json', async () => {
const tree = await runSchematic('app', { name: 'myApp' }, appTree);
- const angularJson = readJsonInTree(tree, '/angular.json');
+ const workspaceJson = readJsonInTree(tree, '/workspace.json');
- expect(angularJson.projects['my-app'].root).toEqual('apps/my-app');
- expect(angularJson.projects['my-app-e2e'].root).toEqual(
+ expect(workspaceJson.projects['my-app'].root).toEqual('apps/my-app');
+ expect(workspaceJson.projects['my-app-e2e'].root).toEqual(
'apps/my-app-e2e'
);
expect(
- angularJson.projects['my-app'].architect.lint.options.exclude
+ workspaceJson.projects['my-app'].architect.lint.options.exclude
).toEqual(['**/node_modules/**', '!apps/my-app/**']);
expect(
- angularJson.projects['my-app-e2e'].architect.lint.options.exclude
+ workspaceJson.projects['my-app-e2e'].architect.lint.options.exclude
).toEqual(['**/node_modules/**', '!apps/my-app-e2e/**']);
});
it('should remove the e2e target on the application', async () => {
const tree = await runSchematic('app', { name: 'myApp' }, appTree);
- const angularJson = readJsonInTree(tree, '/angular.json');
- expect(angularJson.projects['my-app'].architect.e2e).not.toBeDefined();
+ const workspaceJson = readJsonInTree(tree, '/workspace.json');
+ expect(workspaceJson.projects['my-app'].architect.e2e).not.toBeDefined();
});
it('should update nx.json', async () => {
@@ -107,8 +107,10 @@ describe('app', () => {
let appE2eSpec = noPrefix
.read('apps/my-app-e2e/src/app.e2e-spec.ts')
.toString();
- let angularJson = JSON.parse(noPrefix.read('angular.json').toString());
- let myAppPrefix = angularJson.projects['my-app'].prefix;
+ let workspaceJson = JSON.parse(
+ noPrefix.read('workspace.json').toString()
+ );
+ let myAppPrefix = workspaceJson.projects['my-app'].prefix;
expect(myAppPrefix).toEqual('proj');
expect(appE2eSpec).toContain('Welcome to my-app!');
@@ -118,8 +120,8 @@ describe('app', () => {
appE2eSpec = withPrefix
.read('apps/my-app-e2e/src/app.e2e-spec.ts')
.toString();
- angularJson = JSON.parse(withPrefix.read('angular.json').toString());
- myAppPrefix = angularJson.projects['my-app'].prefix;
+ workspaceJson = JSON.parse(withPrefix.read('workspace.json').toString());
+ myAppPrefix = workspaceJson.projects['my-app'].prefix;
expect(myAppPrefix).toEqual('custom');
expect(appE2eSpec).toContain('Welcome to my-app!');
@@ -127,7 +129,7 @@ describe('app', () => {
xit('should work if the new project root is changed', async () => {
appTree = await callRule(
- updateJsonInTree('/angular.json', json => ({
+ updateJsonInTree('/workspace.json', json => ({
...json,
newProjectRoot: 'newProjectRoot'
})),
@@ -141,26 +143,27 @@ describe('app', () => {
});
describe('nested', () => {
- it('should update angular.json', async () => {
+ it('should update workspace.json', async () => {
const tree = await runSchematic(
'app',
{ name: 'myApp', directory: 'myDir' },
appTree
);
- const angularJson = readJsonInTree(tree, '/angular.json');
+ const workspaceJson = readJsonInTree(tree, '/workspace.json');
- expect(angularJson.projects['my-dir-my-app'].root).toEqual(
+ expect(workspaceJson.projects['my-dir-my-app'].root).toEqual(
'apps/my-dir/my-app'
);
- expect(angularJson.projects['my-dir-my-app-e2e'].root).toEqual(
+ expect(workspaceJson.projects['my-dir-my-app-e2e'].root).toEqual(
'apps/my-dir/my-app-e2e'
);
expect(
- angularJson.projects['my-dir-my-app'].architect.lint.options.exclude
+ workspaceJson.projects['my-dir-my-app'].architect.lint.options.exclude
).toEqual(['**/node_modules/**', '!apps/my-dir/my-app/**']);
expect(
- angularJson.projects['my-dir-my-app-e2e'].architect.lint.options.exclude
+ workspaceJson.projects['my-dir-my-app-e2e'].architect.lint.options
+ .exclude
).toEqual(['**/node_modules/**', '!apps/my-dir/my-app-e2e/**']);
});
@@ -314,9 +317,9 @@ describe('app', () => {
{ name: 'myApp', style: 'scss' },
appTree
);
- const angularJson = readJsonInTree(result, 'angular.json');
+ const workspaceJson = readJsonInTree(result, 'workspace.json');
- expect(angularJson.projects['my-app'].schematics).toEqual({
+ expect(workspaceJson.projects['my-app'].schematics).toEqual({
'@nrwl/workspace:component': {
style: 'scss'
}
@@ -334,12 +337,12 @@ describe('app', () => {
expect(tree.exists('apps/my-app/tsconfig.spec.json')).toBeTruthy();
expect(tree.exists('apps/my-app/karma.conf.js')).toBeTruthy();
- const angularJson = readJsonInTree(tree, 'angular.json');
- expect(angularJson.projects['my-app'].architect.test.builder).toEqual(
+ const workspaceJson = readJsonInTree(tree, 'workspace.json');
+ expect(workspaceJson.projects['my-app'].architect.test.builder).toEqual(
'@angular-devkit/build-angular:karma'
);
expect(
- angularJson.projects['my-app'].architect.lint.options.tsConfig
+ workspaceJson.projects['my-app'].architect.lint.options.tsConfig
).toEqual([
'apps/my-app/tsconfig.app.json',
'apps/my-app/tsconfig.spec.json'
@@ -367,26 +370,28 @@ describe('app', () => {
expect(tree.exists('apps/my-app/tsconfig.spec.json')).toBeFalsy();
expect(tree.exists('apps/my-app/jest.config.js')).toBeFalsy();
expect(tree.exists('apps/my-app/karma.config.js')).toBeFalsy();
- const angularJson = readJsonInTree(tree, 'angular.json');
- expect(angularJson.projects['my-app'].architect.test).toBeUndefined();
+ const workspaceJson = readJsonInTree(tree, 'workspace.json');
+ expect(workspaceJson.projects['my-app'].architect.test).toBeUndefined();
expect(
- angularJson.projects['my-app'].architect.lint.options.tsConfig
+ workspaceJson.projects['my-app'].architect.lint.options.tsConfig
).toEqual(['apps/my-app/tsconfig.app.json']);
});
});
describe('--e2e-test-runner', () => {
describe('protractor', () => {
- it('should update angular.json', async () => {
+ it('should update workspace.json', async () => {
const tree = await runSchematic(
'app',
{ name: 'myApp', e2eTestRunner: 'protractor' },
appTree
);
expect(tree.exists('apps/my-app-e2e')).toBeFalsy();
- const angularJson = readJsonInTree(tree, 'angular.json');
- expect(angularJson.projects['my-app'].architect.e2e).not.toBeDefined();
- expect(angularJson.projects['my-app-e2e']).toEqual({
+ const workspaceJson = readJsonInTree(tree, 'workspace.json');
+ expect(
+ workspaceJson.projects['my-app'].architect.e2e
+ ).not.toBeDefined();
+ expect(workspaceJson.projects['my-app-e2e']).toEqual({
root: 'apps/my-app-e2e',
projectType: 'application',
architect: {
@@ -422,30 +427,30 @@ describe('app', () => {
appTree
);
expect(tree.exists('apps/my-app-e2e')).toBeFalsy();
- const angularJson = readJsonInTree(tree, 'angular.json');
- expect(angularJson.projects['my-app-e2e']).toBeUndefined();
+ const workspaceJson = readJsonInTree(tree, 'workspace.json');
+ expect(workspaceJson.projects['my-app-e2e']).toBeUndefined();
});
});
});
describe('replaceAppNameWithPath', () => {
- it('should protect `angular.json` commands and properties', async () => {
+ it('should protect `workspace.json` commands and properties', async () => {
const tree = await runSchematic('app', { name: 'ui' }, appTree);
- const angularJson = readJsonInTree(tree, 'angular.json');
- expect(angularJson.projects['ui']).toBeDefined();
+ const workspaceJson = readJsonInTree(tree, 'workspace.json');
+ expect(workspaceJson.projects['ui']).toBeDefined();
expect(
- angularJson.projects['ui']['architect']['build']['builder']
+ workspaceJson.projects['ui']['architect']['build']['builder']
).toEqual('@angular-devkit/build-angular:browser');
});
- it('should protect `angular.json` sensible properties value to be renamed', async () => {
+ it('should protect `workspace.json` sensible properties value to be renamed', async () => {
const tree = await runSchematic(
'app',
{ name: 'ui', prefix: 'ui' },
appTree
);
- const angularJson = readJsonInTree(tree, 'angular.json');
- expect(angularJson.projects['ui'].prefix).toEqual('ui');
+ const workspaceJson = readJsonInTree(tree, 'workspace.json');
+ expect(workspaceJson.projects['ui'].prefix).toEqual('ui');
});
});
});
diff --git a/packages/angular/src/schematics/application/application.ts b/packages/angular/src/schematics/application/application.ts
index 6da754e4c4..e893cbe06a 100644
--- a/packages/angular/src/schematics/application/application.ts
+++ b/packages/angular/src/schematics/application/application.ts
@@ -15,7 +15,6 @@ import {
import { Schema } from './schema';
import * as ts from 'typescript';
import {
- angularSchematicNames,
formatFiles,
getNpmScope,
getWorkspacePath,
@@ -26,7 +25,8 @@ import {
replaceNodeValue,
toFileName,
updateJsonInTree,
- updateWorkspace
+ updateWorkspace,
+ addGlobalLint
} from '@nrwl/workspace';
import { join, normalize } from '@angular-devkit/core';
import ngAdd from '../ng-add/ng-add';
@@ -202,6 +202,16 @@ function updateProject(options: NormalizedSchema): Rule {
options.appProjectRoot
);
+ const angularSchematicNames = [
+ 'class',
+ 'component',
+ 'directive',
+ 'guard',
+ 'module',
+ 'pipe',
+ 'service'
+ ];
+
if (fixedProject.schematics) {
angularSchematicNames.forEach(type => {
const schematic = `@schematics/angular:${type}`;
@@ -345,13 +355,13 @@ export default function(schema: Schema): Rule {
// Determine the roots where @schematics/angular will place the projects
// This is not where the projects actually end up
- const angularJson = readJsonInTree(host, getWorkspacePath(host));
+ const workspaceJson = readJsonInTree(host, getWorkspacePath(host));
- const appProjectRoot = angularJson.newProjectRoot
- ? `${angularJson.newProjectRoot}/${options.name}`
+ const appProjectRoot = workspaceJson.newProjectRoot
+ ? `${workspaceJson.newProjectRoot}/${options.name}`
: options.name;
- const e2eProjectRoot = angularJson.newProjectRoot
- ? `${angularJson.newProjectRoot}/${options.e2eProjectName}`
+ const e2eProjectRoot = workspaceJson.newProjectRoot
+ ? `${workspaceJson.newProjectRoot}/${options.e2eProjectName}`
: `${options.name}/e2e`;
return chain([
@@ -359,6 +369,7 @@ export default function(schema: Schema): Rule {
...options,
skipFormat: true
}),
+ addGlobalLint('tslint'),
externalSchematic('@schematics/angular', 'application', {
name: options.name,
inlineStyle: options.inlineStyle,
@@ -373,11 +384,9 @@ export default function(schema: Schema): Rule {
skipPackageJson: false
}),
addTsconfigs(options),
-
options.e2eTestRunner === 'protractor'
? move(e2eProjectRoot, options.e2eProjectRoot)
: removeE2e(options, e2eProjectRoot),
-
options.e2eTestRunner === 'protractor'
? updateE2eProject(options)
: noop(),
@@ -388,10 +397,8 @@ export default function(schema: Schema): Rule {
project: options.name
})
: noop(),
-
move(appProjectRoot, options.appProjectRoot),
updateProject(options),
-
updateComponentTemplate(options),
options.routing ? addRouterRootConfiguration(options) : noop(),
updateLinting(options),
diff --git a/packages/angular/src/schematics/karma-project/karma-project.spec.ts b/packages/angular/src/schematics/karma-project/karma-project.spec.ts
index 29610e8724..b3e65243e4 100644
--- a/packages/angular/src/schematics/karma-project/karma-project.spec.ts
+++ b/packages/angular/src/schematics/karma-project/karma-project.spec.ts
@@ -81,7 +81,7 @@ module.exports = function(config) {
});
describe('library', () => {
- it('should alter angular.json', async () => {
+ it('should alter workspace.json', async () => {
const resultTree = await runSchematic(
'karma-project',
{
@@ -89,8 +89,8 @@ module.exports = function(config) {
},
appTree
);
- const angularJson = readJsonInTree(resultTree, 'angular.json');
- expect(angularJson.projects.lib1.architect.test).toEqual({
+ const workspaceJson = readJsonInTree(resultTree, 'workspace.json');
+ expect(workspaceJson.projects.lib1.architect.test).toEqual({
builder: '@angular-devkit/build-angular:karma',
options: {
main: 'libs/lib1/src/test.ts',
@@ -99,7 +99,7 @@ module.exports = function(config) {
}
});
expect(
- angularJson.projects.lib1.architect.lint.options.tsConfig
+ workspaceJson.projects.lib1.architect.lint.options.tsConfig
).toContain('libs/lib1/tsconfig.spec.json');
});
@@ -141,7 +141,7 @@ module.exports = function(config) {
});
describe('applications', () => {
- it('should alter angular.json', async () => {
+ it('should alter workspace.json', async () => {
const resultTree = await runSchematic(
'karma-project',
{
@@ -149,8 +149,8 @@ module.exports = function(config) {
},
appTree
);
- const angularJson = readJsonInTree(resultTree, 'angular.json');
- expect(angularJson.projects.app1.architect.test).toEqual({
+ const workspaceJson = readJsonInTree(resultTree, 'workspace.json');
+ expect(workspaceJson.projects.app1.architect.test).toEqual({
builder: '@angular-devkit/build-angular:karma',
options: {
main: 'apps/app1/src/test.ts',
@@ -163,7 +163,7 @@ module.exports = function(config) {
}
});
expect(
- angularJson.projects.app1.architect.lint.options.tsConfig
+ workspaceJson.projects.app1.architect.lint.options.tsConfig
).toContain('apps/app1/tsconfig.spec.json');
});
diff --git a/packages/angular/src/schematics/karma-project/karma-project.ts b/packages/angular/src/schematics/karma-project/karma-project.ts
index 35d6c6c236..63e4401dcb 100644
--- a/packages/angular/src/schematics/karma-project/karma-project.ts
+++ b/packages/angular/src/schematics/karma-project/karma-project.ts
@@ -13,7 +13,8 @@ import {
import {
readJsonInTree,
updateJsonInTree,
- offsetFromRoot
+ offsetFromRoot,
+ updateWorkspaceInTree
} from '@nrwl/workspace';
import { join, normalize } from '@angular-devkit/core';
import { getProjectConfig } from '@nrwl/workspace';
@@ -76,8 +77,8 @@ function updateTsSpecConfig(options: KarmaProjectSchema): Rule {
};
}
-function updateAngularJson(options: KarmaProjectSchema): Rule {
- return updateJsonInTree('angular.json', json => {
+function updateworkspaceJson(options: KarmaProjectSchema): Rule {
+ return updateWorkspaceInTree(json => {
const projectConfig = json.projects[options.project];
projectConfig.architect.test = {
builder: '@angular-devkit/build-angular:karma',
@@ -124,6 +125,6 @@ export default function(options: KarmaProjectSchema): Rule {
generateFiles(options),
updateTsConfig(options),
updateTsSpecConfig(options),
- updateAngularJson(options)
+ updateworkspaceJson(options)
]);
}
diff --git a/packages/angular/src/schematics/library/files/lib/README.md b/packages/angular/src/schematics/library/files/lib/README.md
index 3bb17a0ee5..b72e16d5b1 100644
--- a/packages/angular/src/schematics/library/files/lib/README.md
+++ b/packages/angular/src/schematics/library/files/lib/README.md
@@ -5,5 +5,5 @@ This library was generated with [Nx](https://nx.dev).
## Running unit tests
-Run `ng test <%= name %>` to execute the unit tests.
+Run `nx test <%= name %>` to execute the unit tests.
<% } %>
diff --git a/packages/angular/src/schematics/library/library.spec.ts b/packages/angular/src/schematics/library/library.spec.ts
index fc866e611e..97ab5be0ec 100644
--- a/packages/angular/src/schematics/library/library.spec.ts
+++ b/packages/angular/src/schematics/library/library.spec.ts
@@ -79,37 +79,39 @@ describe('lib', () => {
expect(packageJson.name).toEqual('@proj/my-lib');
});
- it('should update angular.json', async () => {
+ it('should update workspace.json', async () => {
const tree = await runSchematic(
'lib',
{ name: 'myLib', framework: 'angular', publishable: true },
appTree
);
- const angularJson = readJsonInTree(tree, '/angular.json');
+ const workspaceJson = readJsonInTree(tree, '/workspace.json');
- expect(angularJson.projects['my-lib'].root).toEqual('libs/my-lib');
- expect(angularJson.projects['my-lib'].architect.build).toBeDefined();
+ expect(workspaceJson.projects['my-lib'].root).toEqual('libs/my-lib');
+ expect(workspaceJson.projects['my-lib'].architect.build).toBeDefined();
expect(
- angularJson.projects['my-lib'].architect.lint.options.tsConfig
+ workspaceJson.projects['my-lib'].architect.lint.options.tsConfig
).toEqual([
'libs/my-lib/tsconfig.lib.json',
'libs/my-lib/tsconfig.spec.json'
]);
expect(
- angularJson.projects['my-lib'].architect.lint.options.exclude
+ workspaceJson.projects['my-lib'].architect.lint.options.exclude
).toEqual(['**/node_modules/**', '!libs/my-lib/**']);
});
- it('should remove "build" target from angular.json when a library is not publishable', async () => {
+ it('should remove "build" target from workspace.json when a library is not publishable', async () => {
const tree = await runSchematic(
'lib',
{ name: 'myLib', publishable: false },
appTree
);
- const angularJson = readJsonInTree(tree, '/angular.json');
+ const workspaceJson = readJsonInTree(tree, '/workspace.json');
- expect(angularJson.projects['my-lib'].root).toEqual('libs/my-lib');
- expect(angularJson.projects['my-lib'].architect.build).not.toBeDefined();
+ expect(workspaceJson.projects['my-lib'].root).toEqual('libs/my-lib');
+ expect(
+ workspaceJson.projects['my-lib'].architect.build
+ ).not.toBeDefined();
});
it('should update nx.json', async () => {
@@ -216,8 +218,9 @@ describe('lib', () => {
it('should default the prefix to npmScope', async () => {
const noPrefix = await runSchematic('lib', { name: 'myLib' }, appTree);
expect(
- JSON.parse(noPrefix.read('angular.json').toString()).projects['my-lib']
- .prefix
+ JSON.parse(noPrefix.read('workspace.json').toString()).projects[
+ 'my-lib'
+ ].prefix
).toEqual('proj');
const withPrefix = await runSchematic(
@@ -226,7 +229,7 @@ describe('lib', () => {
appTree
);
expect(
- JSON.parse(withPrefix.read('angular.json').toString()).projects[
+ JSON.parse(withPrefix.read('workspace.json').toString()).projects[
'my-lib'
].prefix
).toEqual('custom');
@@ -381,26 +384,26 @@ describe('lib', () => {
expect(ngPackage.dest).toEqual('../../../dist/libs/my-dir/my-lib');
});
- it('should update angular.json', async () => {
+ it('should update workspace.json', async () => {
const tree = await runSchematic(
'lib',
{ name: 'myLib', directory: 'myDir' },
appTree
);
- const angularJson = readJsonInTree(tree, '/angular.json');
+ const workspaceJson = readJsonInTree(tree, '/workspace.json');
- expect(angularJson.projects['my-dir-my-lib'].root).toEqual(
+ expect(workspaceJson.projects['my-dir-my-lib'].root).toEqual(
'libs/my-dir/my-lib'
);
expect(
- angularJson.projects['my-dir-my-lib'].architect.lint.options.tsConfig
+ workspaceJson.projects['my-dir-my-lib'].architect.lint.options.tsConfig
).toEqual([
'libs/my-dir/my-lib/tsconfig.lib.json',
'libs/my-dir/my-lib/tsconfig.spec.json'
]);
expect(
- angularJson.projects['my-dir-my-lib'].architect.lint.options.exclude
+ workspaceJson.projects['my-dir-my-lib'].architect.lint.options.exclude
).toEqual(['**/node_modules/**', '!libs/my-dir/my-lib/**']);
});
@@ -763,9 +766,9 @@ describe('lib', () => {
appTree
);
- const angularJson = readJsonInTree(result, 'angular.json');
+ const workspaceJson = readJsonInTree(result, 'workspace.json');
- expect(angularJson.projects['my-lib'].schematics).toEqual({
+ expect(workspaceJson.projects['my-lib'].schematics).toEqual({
'@nrwl/angular:component': {
styleext: 'scss'
}
@@ -785,18 +788,18 @@ describe('lib', () => {
expect(resultTree.exists('libs/my-lib/tsconfig.spec.json')).toBeTruthy();
expect(resultTree.exists('libs/my-lib/karma.conf.js')).toBeTruthy();
expect(resultTree.exists('karma.conf.js')).toBeTruthy();
- const angularJson = readJsonInTree(resultTree, 'angular.json');
- expect(angularJson.projects['my-lib'].architect.test.builder).toEqual(
+ const workspaceJson = readJsonInTree(resultTree, 'workspace.json');
+ expect(workspaceJson.projects['my-lib'].architect.test.builder).toEqual(
'@angular-devkit/build-angular:karma'
);
expect(
- angularJson.projects['my-lib'].architect.lint.options.tsConfig
+ workspaceJson.projects['my-lib'].architect.lint.options.tsConfig
).toEqual([
'libs/my-lib/tsconfig.lib.json',
'libs/my-lib/tsconfig.spec.json'
]);
expect(
- angularJson.projects['my-lib'].architect.lint.options.exclude
+ workspaceJson.projects['my-lib'].architect.lint.options.exclude
).toEqual(['**/node_modules/**', '!libs/my-lib/**']);
});
});
@@ -816,10 +819,10 @@ describe('lib', () => {
expect(resultTree.exists('libs/my-lib/tsconfig.spec.json')).toBeFalsy();
expect(resultTree.exists('libs/my-lib/jest.config.js')).toBeFalsy();
expect(resultTree.exists('libs/my-lib/karma.conf.js')).toBeFalsy();
- const angularJson = readJsonInTree(resultTree, 'angular.json');
- expect(angularJson.projects['my-lib'].architect.test).toBeUndefined();
+ const workspaceJson = readJsonInTree(resultTree, 'workspace.json');
+ expect(workspaceJson.projects['my-lib'].architect.test).toBeUndefined();
expect(
- angularJson.projects['my-lib'].architect.lint.options.tsConfig
+ workspaceJson.projects['my-lib'].architect.lint.options.tsConfig
).toEqual(['libs/my-lib/tsconfig.lib.json']);
});
});
diff --git a/packages/angular/src/schematics/library/library.ts b/packages/angular/src/schematics/library/library.ts
index c9ce47364e..6ca319a176 100644
--- a/packages/angular/src/schematics/library/library.ts
+++ b/packages/angular/src/schematics/library/library.ts
@@ -22,7 +22,8 @@ import {
NxJson,
updateJsonInTree,
readJsonInTree,
- offsetFromRoot
+ offsetFromRoot,
+ addGlobalLint
} from '@nrwl/workspace';
import { addGlobal, addIncludeToTsConfig, insert } from '@nrwl/workspace';
import { toClassName, toFileName, toPropertyName } from '@nrwl/workspace';
@@ -430,6 +431,7 @@ export default function(schema: Schema): Rule {
}
return chain([
+ addGlobalLint('tslint'),
addUnitTestRunner(options),
externalSchematic('@schematics/angular', 'library', {
name: options.name,
diff --git a/packages/angular/src/schematics/ng-add/ng-add.spec.ts b/packages/angular/src/schematics/ng-add/ng-add.spec.ts
index 332d706bce..108c844e66 100644
--- a/packages/angular/src/schematics/ng-add/ng-add.spec.ts
+++ b/packages/angular/src/schematics/ng-add/ng-add.spec.ts
@@ -74,7 +74,7 @@ describe('ng-add', () => {
},
appTree
);
- const { schematics } = readJsonInTree(tree, 'angular.json');
+ const { schematics } = readJsonInTree(tree, 'workspace.json');
expect(schematics['@nrwl/angular:application'].unitTestRunner).toEqual(
'karma'
);
@@ -118,7 +118,7 @@ describe('ng-add', () => {
},
appTree
);
- const { schematics } = readJsonInTree(tree, 'angular.json');
+ const { schematics } = readJsonInTree(tree, 'workspace.json');
expect(schematics['@nrwl/angular:application'].unitTestRunner).toEqual(
'jest'
);
@@ -153,7 +153,7 @@ describe('ng-add', () => {
},
appTree
);
- const { schematics } = readJsonInTree(tree, 'angular.json');
+ const { schematics } = readJsonInTree(tree, 'workspace.json');
expect(schematics['@nrwl/angular:application'].e2eTestRunner).toEqual(
'cypress'
);
@@ -185,7 +185,7 @@ describe('ng-add', () => {
},
appTree
);
- const { schematics } = readJsonInTree(tree, 'angular.json');
+ const { schematics } = readJsonInTree(tree, 'workspace.json');
expect(schematics['@nrwl/angular:application'].e2eTestRunner).toEqual(
'protractor'
);
@@ -196,13 +196,13 @@ describe('ng-add', () => {
describe('defaultCollection', () => {
it('should be set if none was set before', async () => {
const result = await runSchematic('ng-add', {}, appTree);
- const angularJson = readJsonInTree(result, 'angular.json');
- expect(angularJson.cli.defaultCollection).toEqual('@nrwl/angular');
+ const workspaceJson = readJsonInTree(result, 'workspace.json');
+ expect(workspaceJson.cli.defaultCollection).toEqual('@nrwl/angular');
});
it('should be set if @nrwl/workspace was set before', async () => {
appTree = await callRule(
- updateJsonInTree('angular.json', json => {
+ updateJsonInTree('workspace.json', json => {
json.cli = {
defaultCollection: '@nrwl/workspace'
};
@@ -212,13 +212,13 @@ describe('ng-add', () => {
appTree
);
const result = await runSchematic('ng-add', {}, appTree);
- const angularJson = readJsonInTree(result, 'angular.json');
- expect(angularJson.cli.defaultCollection).toEqual('@nrwl/angular');
+ const workspaceJson = readJsonInTree(result, 'workspace.json');
+ expect(workspaceJson.cli.defaultCollection).toEqual('@nrwl/angular');
});
it('should not be set if something else was set before', async () => {
appTree = await callRule(
- updateJsonInTree('angular.json', json => {
+ updateJsonInTree('workspace.json', json => {
json.cli = {
defaultCollection: '@nrwl/react'
};
@@ -228,8 +228,8 @@ describe('ng-add', () => {
appTree
);
const result = await runSchematic('ng-add', {}, appTree);
- const angularJson = readJsonInTree(result, 'angular.json');
- expect(angularJson.cli.defaultCollection).toEqual('@nrwl/react');
+ const workspaceJson = readJsonInTree(result, 'workspace.json');
+ expect(workspaceJson.cli.defaultCollection).toEqual('@nrwl/react');
});
});
});
diff --git a/packages/angular/src/utils/testing.ts b/packages/angular/src/utils/testing.ts
index efbf18f424..63385af099 100644
--- a/packages/angular/src/utils/testing.ts
+++ b/packages/angular/src/utils/testing.ts
@@ -94,7 +94,7 @@ export function createApp(
})
);
tree.overwrite(
- '/angular.json',
+ '/workspace.json',
JSON.stringify({
newProjectRoot: '',
version: 1,
diff --git a/packages/angular/src/utils/versions.ts b/packages/angular/src/utils/versions.ts
index bd48c74396..fb3ee55442 100644
--- a/packages/angular/src/utils/versions.ts
+++ b/packages/angular/src/utils/versions.ts
@@ -1,6 +1,6 @@
export const nxVersion = '*';
export const angularVersion = '^8.0.0';
-export const angularDevkitVersion = '^0.800.0';
+export const angularDevkitVersion = '^0.800.1';
export const angularJsVersion = '1.6.6';
export const ngrxVersion = '8.1.0';
export const rxjsVersion = '~6.4.0';
diff --git a/packages/cli/package.json b/packages/cli/package.json
index 970a3e2377..cd2c4be8b2 100644
--- a/packages/cli/package.json
+++ b/packages/cli/package.json
@@ -29,6 +29,7 @@
"dependencies": {
"tmp": "0.0.33",
"yargs-parser": "10.0.0",
- "yargs": "^11.0.0"
+ "yargs": "^11.0.0",
+ "@nrwl/tao": "*"
}
}
diff --git a/packages/create-nx-workspace/bin/create-nx-workspace.ts b/packages/create-nx-workspace/bin/create-nx-workspace.ts
index 836ea3379e..7498e99bf6 100644
--- a/packages/create-nx-workspace/bin/create-nx-workspace.ts
+++ b/packages/create-nx-workspace/bin/create-nx-workspace.ts
@@ -4,130 +4,289 @@
import { output } from '@nrwl/workspace/src/command-line/output';
import { execSync } from 'child_process';
import { writeFileSync } from 'fs';
+import * as inquirer from 'inquirer';
import * as path from 'path';
import { dirSync } from 'tmp';
import * as yargsParser from 'yargs-parser';
+const presetOptions = [
+ {
+ value: 'empty',
+ name: 'empty [an empty workspace]'
+ },
+ {
+ value: 'angular',
+ name: 'angular [a workspace with a single Angular application]'
+ },
+ {
+ value: 'react',
+ name: 'react [a workspace with a single React application]'
+ },
+ {
+ value: 'web-components',
+ name:
+ 'web components [a workspace with a single app built using web components]'
+ },
+ {
+ value: 'full-stack',
+ name:
+ 'full-stack [a workspace with a full stack application (NestJS + Angular Ivy)]'
+ }
+];
+
+const tsVersion = 'TYPESCRIPT_VERSION';
+const cliVersion = 'NX_VERSION';
+const nxVersion = 'NX_VERSION';
+const angularCliVersion = 'ANGULAR_CLI_VERSION';
+
const parsedArgs = yargsParser(process.argv, {
- string: ['directory'],
+ string: ['cli', 'preset'],
boolean: ['help']
});
if (parsedArgs.help) {
- console.log(`
- Usage: create-nx-workspace [options] [ng new options]
-
- Create a new Nx workspace
-
- Options:
-
- directory path to the workspace root directory
-
- [ng new options] any 'ng new' options
- run 'ng new --help' for more information
- `);
+ showHelp();
process.exit(0);
}
-
-const nxTool = {
- name: 'Schematics',
- packageName: '@nrwl/workspace'
-};
-
-let packageManager: string;
-try {
- packageManager = execSync('ng config -g cli.packageManager', {
- stdio: ['ignore', 'pipe', 'ignore']
- })
- .toString()
- .trim();
-} catch (e) {
- packageManager = 'yarn';
-}
-try {
- execSync(`${packageManager} --version`, {
- stdio: ['ignore', 'ignore', 'ignore']
+validateInput(parsedArgs);
+const packageManager = determinePackageManager();
+determinePreset(parsedArgs).then(preset => {
+ return determineCli(preset, parsedArgs).then(cli => {
+ const tmpDir = createSandbox(packageManager, cli);
+ createApp(tmpDir, cli, parsedArgs, preset);
+ showNxWarning();
+ showCliWarning(preset, parsedArgs);
});
-} catch (e) {
- packageManager = 'npm';
-}
-
-const projectName = parsedArgs._[2];
-
-// check that the workspace name is passed in
-if (!projectName) {
- output.error({
- title: 'A project name is required when creating a new workspace',
- bodyLines: [
- output.colors.gray('For example:'),
- '',
- `${output.colors.gray('>')} create-nx-workspace my-new-workspace`
- ]
- });
- process.exit(1);
-}
-
-// creating the sandbox
-output.logSingleLine(`Creating a sandbox...`);
-const tmpDir = dirSync().name;
-
-const nxVersion = 'NX_VERSION';
-const cliVersion = 'ANGULAR_CLI_VERSION';
-const typescriptVersion = 'TYPESCRIPT_VERSION';
-
-writeFileSync(
- path.join(tmpDir, 'package.json'),
- JSON.stringify({
- dependencies: {
- [nxTool.packageName]: nxVersion,
- '@angular/cli': cliVersion,
- typescript: typescriptVersion
- },
- license: 'MIT'
- })
-);
-
-execSync(`${packageManager} install --silent`, {
- cwd: tmpDir,
- stdio: [0, 1, 2]
});
-// creating the app itself
-const args = process.argv
- .slice(2)
- .map(a => `"${a}"`)
- .join(' ');
+function showHelp() {
+ console.log(`
+ Usage: create-nx-workspace [options] [new workspace options]
-output.logSingleLine(
- `${output.colors.gray('Running:')} ng new ${args} --collection=${
- nxTool.packageName
- }`
-);
+ Create a new Nx workspace
-execSync(
- `"${path.join(
- tmpDir,
- 'node_modules',
- '.bin',
- 'ng'
- )}" new ${args} --collection=${nxTool.packageName}`,
- {
- stdio: [0, 1, 2]
+ Options:
+
+ name workspace name
+
+ preset What to create in a new workspace (options: ${presetOptions
+ .map(o => '"' + o.value + '"')
+ .join(', ')})
+
+ cli CLI to power the Nx workspace (options: "nx", "angular")
+
+ [new workspace options] any 'new workspace' options
+`);
+}
+
+function determinePackageManager() {
+ // If you have Angular CLI installed, read Angular CLI config.
+ // If it isn't not installed, default to 'yarn'.
+ let packageManager: string;
+ try {
+ packageManager = execSync('ng config -g cli.packageManager', {
+ stdio: ['ignore', 'pipe', 'ignore'],
+ timeout: 500
+ })
+ .toString()
+ .trim();
+ } catch (e) {
+ packageManager = 'yarn';
}
-);
+ try {
+ execSync(`${packageManager} --version`, {
+ stdio: ['ignore', 'ignore', 'ignore']
+ });
+ } catch (e) {
+ packageManager = 'npm';
+ }
+ return packageManager;
+}
-// TODO: vsavkin: reenable for 8.4
-// try {
-// execSync('nx --version');
-// } catch (e) {
-// // no nx found
-// console.log('-----------------------------------------------------------');
-// console.log(`It looks like you don't have the Nx CLI installed globally.`);
-// console.log(
-// `This means that you might have to use "yarn nx" or "npm nx" to execute commands in your workspace.`
-// );
-// console.log(
-// `If you want to execute the nx command directly, run "yarn global add @nrwl/cli" or "npm install -g @nrwl/cli"`
-// );
-// console.log('-----------------------------------------------------------');
-// }
+function validateInput(parsedArgs: any) {
+ const projectName = parsedArgs._[2];
+
+ if (!projectName) {
+ output.error({
+ title: 'A project name is required when creating a new workspace',
+ bodyLines: [
+ output.colors.gray('For example:'),
+ '',
+ `${output.colors.gray('>')} create-nx-workspace my-new-workspace`
+ ]
+ });
+ process.exit(1);
+ }
+
+ return projectName;
+}
+
+function determinePreset(parsedArgs: any): Promise {
+ if (parsedArgs.preset) {
+ if (presetOptions.map(o => o.value).indexOf(parsedArgs.preset) === -1) {
+ console.error(
+ `Invalid preset. It must be one of the following: ${presetOptions
+ .map(o => '"' + o.value + '"')
+ .join(', ')}.`
+ );
+ process.exit(1);
+ } else {
+ return Promise.resolve(parsedArgs.preset);
+ }
+ } else {
+ return inquirer
+ .prompt([
+ {
+ name: 'Preset',
+ message: `What to create in the new workspace`,
+ default: 'empty',
+ type: 'list',
+ choices: presetOptions
+ }
+ ])
+ .then(a => a.Preset);
+ }
+}
+
+function determineCli(preset: string, parsedArgs: any) {
+ const angular = {
+ package: '@angular/cli',
+ version: angularCliVersion,
+ command: 'ng'
+ };
+
+ const nx = {
+ package: '@nrwl/tao',
+ version: cliVersion,
+ command: 'tao'
+ };
+
+ if (parsedArgs.cli) {
+ if (['nx', 'angular'].indexOf(parsedArgs.cli) === -1) {
+ console.error(
+ `Invalid cli. It must be one of the following: "nx", "angular".`
+ );
+ process.exit(1);
+ }
+ return Promise.resolve(parsedArgs.cli === 'angular' ? angular : nx);
+ }
+
+ if (preset == 'angular' || preset == 'full-stack') {
+ return Promise.resolve(angular);
+ } else if (preset === 'web-components' || preset === 'react') {
+ return Promise.resolve(nx);
+ } else {
+ return inquirer
+ .prompt([
+ {
+ name: 'CLI',
+ message: `CLI to power the Nx workspace`,
+ default: 'nx',
+ type: 'list',
+ choices: [
+ {
+ value: 'nx',
+ name:
+ 'Nx [Extensible CLI for JavaScript and TypeScript applications]'
+ },
+
+ {
+ value: 'angular',
+ name: 'Angular CLI [Extensible CLI for Angular applications]'
+ }
+ ]
+ }
+ ])
+ .then(a => (a.CLI === 'angular' ? angular : nx));
+ }
+}
+
+function createSandbox(
+ packageManager: string,
+ cli: { package: string; version: string }
+) {
+ console.log(`Creating a sandbox with Nx...`);
+ const tmpDir = dirSync().name;
+ writeFileSync(
+ path.join(tmpDir, 'package.json'),
+ JSON.stringify({
+ dependencies: {
+ '@nrwl/workspace': nxVersion,
+ [cli.package]: cli.version,
+ typescript: tsVersion
+ },
+ license: 'MIT'
+ })
+ );
+
+ execSync(`${packageManager} install --silent`, {
+ cwd: tmpDir,
+ stdio: [0, 1, 2]
+ });
+
+ return tmpDir;
+}
+
+function createApp(
+ tmpDir: string,
+ cli: { command: string },
+ parsedArgs: any,
+ preset: string
+) {
+ // creating the app itself
+ const args = process.argv
+ .slice(2)
+ .filter(a => !a.startsWith('--cli')) // not used by the new command
+ .map(a => `"${a}"`)
+ .join(' ');
+
+ const presetArg = parsedArgs.preset ? '' : ` --preset=${preset}`;
+
+ console.log(`new ${args}${presetArg} --collection=@nrwl/workspace`);
+ execSync(
+ `"${path.join(
+ tmpDir,
+ 'node_modules',
+ '.bin',
+ cli.command
+ )}" new ${args}${presetArg} --collection=@nrwl/workspace`,
+ {
+ stdio: [0, 1, 2]
+ }
+ );
+}
+
+function showNxWarning() {
+ try {
+ execSync('nx --version', { stdio: ['ignore', 'ignore', 'ignore'] });
+ } catch (e) {
+ // no nx found
+ console.log('-----------------------------------------------------------');
+ console.log(`It looks like you don't have the Nx CLI installed globally.`);
+ console.log(
+ `This means that you might have to use "yarn nx" or "npm nx" to execute commands in your workspace.`
+ );
+ console.log(
+ `If you want to execute the nx command directly, run "yarn global add @nrwl/cli" or "npm install -g @nrwl/cli"`
+ );
+ console.log('-----------------------------------------------------------');
+ }
+}
+
+function showCliWarning(preset: string, parsedArgs: any) {
+ if (!parsedArgs.cli) {
+ if (preset == 'angular' || preset == 'full-stack') {
+ console.log(
+ 'Because you selected an Angular-specific preset, we generated an Nx workspace powered by the Angular CLi.'
+ );
+ console.log(
+ `If you want want to power the workspace using a different CLI, you can pass it using '--cli'. Find out more by running 'create-nx-workspace --help'.`
+ );
+ } else if (preset === 'web-components' || preset === 'react') {
+ console.log('We generated an Nx workspace powered by the Nx CLi.');
+ console.log(
+ `If you want want to power the workspace using a different CLI, you can pass it using '--cli'. Find out more by running 'create-nx-workspace --help'.`
+ );
+ }
+ }
+}
diff --git a/packages/create-nx-workspace/package.json b/packages/create-nx-workspace/package.json
index ed9d95bcd9..a89ce4a959 100644
--- a/packages/create-nx-workspace/package.json
+++ b/packages/create-nx-workspace/package.json
@@ -30,6 +30,7 @@
"@nrwl/workspace": "*",
"tmp": "0.0.33",
"yargs-parser": "10.0.0",
- "yargs": "^11.0.0"
+ "yargs": "^11.0.0",
+ "inquirer": "^6.3.1"
}
}
diff --git a/packages/cypress/src/schematics/cypress-project/cypress-project.spec.ts b/packages/cypress/src/schematics/cypress-project/cypress-project.spec.ts
index d8305a1e04..9b2cb39fbd 100644
--- a/packages/cypress/src/schematics/cypress-project/cypress-project.spec.ts
+++ b/packages/cypress/src/schematics/cypress-project/cypress-project.spec.ts
@@ -37,21 +37,21 @@ describe('schematic:cypress-project', () => {
expect(tree.exists('apps/my-app-e2e/src/support/index.ts')).toBeTruthy();
});
- it('should add update `angular.json` file', async () => {
+ it('should add update `workspace.json` file', async () => {
const tree = await runSchematic(
'cypress-project',
{ name: 'my-app-e2e', project: 'my-app' },
appTree
);
- const angularJson = readJsonInTree(tree, 'angular.json');
- const project = angularJson.projects['my-app-e2e'];
+ const workspaceJson = readJsonInTree(tree, 'workspace.json');
+ const project = workspaceJson.projects['my-app-e2e'];
expect(project.root).toEqual('apps/my-app-e2e');
expect(project.architect.lint).toEqual({
builder: '@angular-devkit/build-angular:tslint',
options: {
- tsConfig: 'apps/my-app-e2e/tsconfig.e2e.json',
+ tsConfig: ['apps/my-app-e2e/tsconfig.e2e.json'],
exclude: ['**/node_modules/**', '!apps/my-app-e2e/**']
}
});
@@ -107,13 +107,13 @@ describe('schematic:cypress-project', () => {
});
describe('nested', () => {
- it('should update angular.json', async () => {
+ it('should update workspace.json', async () => {
const tree = await runSchematic(
'cypress-project',
{ name: 'my-app-e2e', project: 'my-dir-my-app', directory: 'my-dir' },
appTree
);
- const projectConfig = readJsonInTree(tree, 'angular.json').projects[
+ const projectConfig = readJsonInTree(tree, 'workspace.json').projects[
'my-dir-my-app-e2e'
];
@@ -121,7 +121,7 @@ describe('schematic:cypress-project', () => {
expect(projectConfig.architect.lint).toEqual({
builder: '@angular-devkit/build-angular:tslint',
options: {
- tsConfig: 'apps/my-dir/my-app-e2e/tsconfig.e2e.json',
+ tsConfig: ['apps/my-dir/my-app-e2e/tsconfig.e2e.json'],
exclude: ['**/node_modules/**', '!apps/my-dir/my-app-e2e/**']
}
});
diff --git a/packages/cypress/src/schematics/cypress-project/cypress-project.ts b/packages/cypress/src/schematics/cypress-project/cypress-project.ts
index dfaa841743..fd92a1d8ad 100644
--- a/packages/cypress/src/schematics/cypress-project/cypress-project.ts
+++ b/packages/cypress/src/schematics/cypress-project/cypress-project.ts
@@ -9,7 +9,13 @@ import {
} from '@angular-devkit/schematics';
import { join, normalize } from '@angular-devkit/core';
// app
-import { updateJsonInTree, NxJson } from '@nrwl/workspace';
+import {
+ updateJsonInTree,
+ NxJson,
+ updateWorkspaceInTree,
+ generateProjectLint,
+ addGlobalLint
+} from '@nrwl/workspace';
import { offsetFromRoot } from '@nrwl/workspace';
import { toFileName } from '@nrwl/workspace';
import { Schema } from './schema';
@@ -44,8 +50,8 @@ function updateNxJson(options: CypressProjectSchema): Rule {
});
}
-function updateAngularJson(options: CypressProjectSchema): Rule {
- return updateJsonInTree('angular.json', json => {
+function updateWorkspaceJson(options: CypressProjectSchema): Rule {
+ return updateWorkspaceInTree(json => {
const architect: any = {};
architect.e2e = {
@@ -61,16 +67,13 @@ function updateAngularJson(options: CypressProjectSchema): Rule {
}
}
};
- architect.lint = {
- builder: '@angular-devkit/build-angular:tslint',
- options: {
- tsConfig: join(normalize(options.projectRoot), 'tsconfig.e2e.json'),
- exclude: [
- '**/node_modules/**',
- '!' + join(normalize(options.projectRoot), '**')
- ]
- }
- };
+
+ architect.lint = generateProjectLint(
+ normalize(options.projectRoot),
+ join(normalize(options.projectRoot), 'tsconfig.e2e.json'),
+ options.linter
+ );
+
json.projects[options.projectName] = {
root: options.projectRoot,
sourceRoot: join(normalize(options.projectRoot), 'src'),
@@ -84,8 +87,9 @@ function updateAngularJson(options: CypressProjectSchema): Rule {
export default function(options: CypressProjectSchema): Rule {
options = normalizeOptions(options);
return chain([
+ addGlobalLint(options.linter),
generateFiles(options),
- updateAngularJson(options),
+ updateWorkspaceJson(options),
updateNxJson(options)
]);
}
diff --git a/packages/cypress/src/schematics/cypress-project/schema.d.ts b/packages/cypress/src/schematics/cypress-project/schema.d.ts
index e8c6a1a478..1670b779eb 100644
--- a/packages/cypress/src/schematics/cypress-project/schema.d.ts
+++ b/packages/cypress/src/schematics/cypress-project/schema.d.ts
@@ -2,4 +2,5 @@ export interface Schema {
project: string;
name: string;
directory: string;
+ linter: 'eslint' | 'tslint';
}
diff --git a/packages/cypress/src/schematics/cypress-project/schema.json b/packages/cypress/src/schematics/cypress-project/schema.json
index 97c0782420..55133554eb 100644
--- a/packages/cypress/src/schematics/cypress-project/schema.json
+++ b/packages/cypress/src/schematics/cypress-project/schema.json
@@ -24,6 +24,12 @@
"type": "string",
"description": "A directory where the app is placed",
"x-prompt": "In which directory should the library be generated?"
+ },
+ "linter": {
+ "description": "The tool to use for running lint checks.",
+ "type": "string",
+ "enum": ["eslint", "tslint"],
+ "default": "tslint"
}
},
"required": ["name"]
diff --git a/packages/express/src/schematics/ng-add/ng-add.spec.ts b/packages/express/src/schematics/ng-add/ng-add.spec.ts
index e311de4957..9ee3897f7e 100644
--- a/packages/express/src/schematics/ng-add/ng-add.spec.ts
+++ b/packages/express/src/schematics/ng-add/ng-add.spec.ts
@@ -32,13 +32,13 @@ describe('ng-add', () => {
describe('defaultCollection', () => {
it('should be set if none was set before', async () => {
const result = await runSchematic('ng-add', {}, tree);
- const angularJson = readJsonInTree(result, 'angular.json');
- expect(angularJson.cli.defaultCollection).toEqual('@nrwl/express');
+ const workspaceJson = readJsonInTree(result, 'workspace.json');
+ expect(workspaceJson.cli.defaultCollection).toEqual('@nrwl/express');
});
it('should be set if @nrwl/workspace was set before', async () => {
tree = await callRule(
- updateJsonInTree('angular.json', json => {
+ updateJsonInTree('workspace.json', json => {
json.cli = {
defaultCollection: '@nrwl/workspace'
};
@@ -48,13 +48,13 @@ describe('ng-add', () => {
tree
);
const result = await runSchematic('ng-add', {}, tree);
- const angularJson = readJsonInTree(result, 'angular.json');
- expect(angularJson.cli.defaultCollection).toEqual('@nrwl/express');
+ const workspaceJson = readJsonInTree(result, 'workspace.json');
+ expect(workspaceJson.cli.defaultCollection).toEqual('@nrwl/express');
});
it('should not be set if something else was set before', async () => {
tree = await callRule(
- updateJsonInTree('angular.json', json => {
+ updateJsonInTree('workspace.json', json => {
json.cli = {
defaultCollection: '@nrwl/angular'
};
@@ -64,8 +64,8 @@ describe('ng-add', () => {
tree
);
const result = await runSchematic('ng-add', {}, tree);
- const angularJson = readJsonInTree(result, 'angular.json');
- expect(angularJson.cli.defaultCollection).toEqual('@nrwl/angular');
+ const workspaceJson = readJsonInTree(result, 'workspace.json');
+ expect(workspaceJson.cli.defaultCollection).toEqual('@nrwl/angular');
});
});
});
diff --git a/packages/jest/src/schematics/jest-project/jest-project.spec.ts b/packages/jest/src/schematics/jest-project/jest-project.spec.ts
index b859c5aed1..18e2f72270 100644
--- a/packages/jest/src/schematics/jest-project/jest-project.spec.ts
+++ b/packages/jest/src/schematics/jest-project/jest-project.spec.ts
@@ -10,7 +10,7 @@ describe('jestProject', () => {
appTree = Tree.empty();
appTree = createEmptyWorkspace(appTree);
appTree = await callRule(
- updateJsonInTree('angular.json', json => {
+ updateJsonInTree('workspace.json', json => {
json.projects.lib1 = {
root: 'libs/lib1',
architect: {
@@ -52,7 +52,7 @@ describe('jestProject', () => {
expect(resultTree.exists('/libs/lib1/tsconfig.spec.json')).toBeTruthy();
});
- it('should alter angular.json', async () => {
+ it('should alter workspace.json', async () => {
const resultTree = await runSchematic(
'jest-project',
{
@@ -61,8 +61,8 @@ describe('jestProject', () => {
},
appTree
);
- const angularJson = readJsonInTree(resultTree, 'angular.json');
- expect(angularJson.projects.lib1.architect.test).toEqual({
+ const workspaceJson = readJsonInTree(resultTree, 'workspace.json');
+ expect(workspaceJson.projects.lib1.architect.test).toEqual({
builder: '@nrwl/jest:jest',
options: {
jestConfig: 'libs/lib1/jest.config.js',
@@ -70,9 +70,9 @@ describe('jestProject', () => {
tsConfig: 'libs/lib1/tsconfig.spec.json'
}
});
- expect(angularJson.projects.lib1.architect.lint.options.tsConfig).toContain(
- 'libs/lib1/tsconfig.spec.json'
- );
+ expect(
+ workspaceJson.projects.lib1.architect.lint.options.tsConfig
+ ).toContain('libs/lib1/tsconfig.spec.json');
});
it('should create a jest.config.js', async () => {
@@ -144,7 +144,7 @@ describe('jestProject', () => {
expect(resultTree.exists('src/test-setup.ts')).toBeFalsy();
});
- it('should not list the setup file in angular.json', async () => {
+ it('should not list the setup file in workspace.json', async () => {
const resultTree = await runSchematic(
'jest-project',
{
@@ -153,9 +153,9 @@ describe('jestProject', () => {
},
appTree
);
- const angularJson = readJsonInTree(resultTree, 'angular.json');
+ const workspaceJson = readJsonInTree(resultTree, 'workspace.json');
expect(
- angularJson.projects.lib1.architect.test.options.setupFile
+ workspaceJson.projects.lib1.architect.test.options.setupFile
).toBeUndefined();
});
@@ -189,7 +189,7 @@ describe('jestProject', () => {
expect(resultTree.exists('src/test-setup.ts')).toBeFalsy();
});
- it('should not list the setup file in angular.json', async () => {
+ it('should not list the setup file in workspace.json', async () => {
const resultTree = await runSchematic(
'jest-project',
{
@@ -198,9 +198,9 @@ describe('jestProject', () => {
},
appTree
);
- const angularJson = readJsonInTree(resultTree, 'angular.json');
+ const workspaceJson = readJsonInTree(resultTree, 'workspace.json');
expect(
- angularJson.projects.lib1.architect.test.options.setupFile
+ workspaceJson.projects.lib1.architect.test.options.setupFile
).toBeUndefined();
});
diff --git a/packages/jest/src/schematics/jest-project/jest-project.ts b/packages/jest/src/schematics/jest-project/jest-project.ts
index 5c143372dc..f84aecb11b 100644
--- a/packages/jest/src/schematics/jest-project/jest-project.ts
+++ b/packages/jest/src/schematics/jest-project/jest-project.ts
@@ -11,7 +11,11 @@ import {
noop,
filter
} from '@angular-devkit/schematics';
-import { readJsonInTree, updateJsonInTree } from '@nrwl/workspace';
+import {
+ readJsonInTree,
+ updateJsonInTree,
+ updateWorkspaceInTree
+} from '@nrwl/workspace';
import { getProjectConfig, addDepsToPackageJson } from '@nrwl/workspace';
import { offsetFromRoot } from '@nrwl/workspace';
import { join, normalize } from '@angular-devkit/core';
@@ -69,8 +73,8 @@ function updateTsConfig(options: JestProjectSchema): Rule {
};
}
-function updateAngularJson(options: JestProjectSchema): Rule {
- return updateJsonInTree('angular.json', json => {
+function updateWorkspaceJson(options: JestProjectSchema): Rule {
+ return updateWorkspaceInTree(json => {
const projectConfig = json.projects[options.project];
projectConfig.architect.test = {
builder: '@nrwl/jest:jest',
@@ -106,7 +110,9 @@ function check(options: JestProjectSchema): Rule {
const packageJson = readJsonInTree(host, 'package.json');
if (!packageJson.devDependencies.jest) {
context.logger.warn(`"jest" is not installed as a dependency.`);
- context.logger.info(`Add "jest" via "ng add @nrwl/jest"`);
+ context.logger.info(
+ `Add "jest" via "yarn add --dev @nrwl/jest" or "npm install -D @nrwl/jest"`
+ );
}
return host;
};
@@ -128,6 +134,6 @@ export default function(options: JestProjectSchema): Rule {
check(options),
generateFiles(options),
updateTsConfig(options),
- updateAngularJson(options)
+ updateWorkspaceJson(options)
]);
}
diff --git a/packages/nest/src/schematics/ng-add/ng-add.spec.ts b/packages/nest/src/schematics/ng-add/ng-add.spec.ts
index bb48dd8de1..01d1d1e6e4 100644
--- a/packages/nest/src/schematics/ng-add/ng-add.spec.ts
+++ b/packages/nest/src/schematics/ng-add/ng-add.spec.ts
@@ -23,13 +23,13 @@ describe('ng-add', () => {
describe('defaultCollection', () => {
it('should be set if none was set before', async () => {
const result = await runSchematic('ng-add', {}, tree);
- const angularJson = readJsonInTree(result, 'angular.json');
- expect(angularJson.cli.defaultCollection).toEqual('@nrwl/nest');
+ const workspaceJson = readJsonInTree(result, 'workspace.json');
+ expect(workspaceJson.cli.defaultCollection).toEqual('@nrwl/nest');
});
it('should be set if @nrwl/workspace was set before', async () => {
tree = await callRule(
- updateJsonInTree('angular.json', json => {
+ updateJsonInTree('workspace.json', json => {
json.cli = {
defaultCollection: '@nrwl/workspace'
};
@@ -39,13 +39,13 @@ describe('ng-add', () => {
tree
);
const result = await runSchematic('ng-add', {}, tree);
- const angularJson = readJsonInTree(result, 'angular.json');
- expect(angularJson.cli.defaultCollection).toEqual('@nrwl/nest');
+ const workspaceJson = readJsonInTree(result, 'workspace.json');
+ expect(workspaceJson.cli.defaultCollection).toEqual('@nrwl/nest');
});
it('should not be set if something else was set before', async () => {
tree = await callRule(
- updateJsonInTree('angular.json', json => {
+ updateJsonInTree('workspace.json', json => {
json.cli = {
defaultCollection: '@nrwl/angular'
};
@@ -55,8 +55,8 @@ describe('ng-add', () => {
tree
);
const result = await runSchematic('ng-add', {}, tree);
- const angularJson = readJsonInTree(result, 'angular.json');
- expect(angularJson.cli.defaultCollection).toEqual('@nrwl/angular');
+ const workspaceJson = readJsonInTree(result, 'workspace.json');
+ expect(workspaceJson.cli.defaultCollection).toEqual('@nrwl/angular');
});
});
});
diff --git a/packages/node/src/schematics/application/application.spec.ts b/packages/node/src/schematics/application/application.spec.ts
index 8fbe6a3198..d1bf4eaf57 100644
--- a/packages/node/src/schematics/application/application.spec.ts
+++ b/packages/node/src/schematics/application/application.spec.ts
@@ -14,10 +14,10 @@ describe('app', () => {
});
describe('not nested', () => {
- it('should update angular.json', async () => {
+ it('should update workspace.json', async () => {
const tree = await runSchematic('app', { name: 'myNodeApp' }, appTree);
- const angularJson = readJsonInTree(tree, '/angular.json');
- const project = angularJson.projects['my-node-app'];
+ const workspaceJson = readJsonInTree(tree, '/workspace.json');
+ const project = workspaceJson.projects['my-node-app'];
expect(project.root).toEqual('apps/my-node-app');
expect(project.architect).toEqual(
jasmine.objectContaining({
@@ -52,7 +52,7 @@ describe('app', () => {
}
})
);
- expect(angularJson.projects['my-node-app'].architect.lint).toEqual({
+ expect(workspaceJson.projects['my-node-app'].architect.lint).toEqual({
builder: '@angular-devkit/build-angular:tslint',
options: {
tsConfig: [
@@ -62,8 +62,8 @@ describe('app', () => {
exclude: ['**/node_modules/**', '!apps/my-node-app/**']
}
});
- expect(angularJson.projects['my-node-app-e2e']).toBeUndefined();
- expect(angularJson.defaultProject).toEqual('my-node-app');
+ expect(workspaceJson.projects['my-node-app-e2e']).toBeUndefined();
+ expect(workspaceJson.defaultProject).toEqual('my-node-app');
});
it('should update nx.json', async () => {
@@ -109,33 +109,33 @@ describe('app', () => {
});
describe('nested', () => {
- it('should update angular.json', async () => {
+ it('should update workspace.json', async () => {
const tree = await runSchematic(
'app',
{ name: 'myNodeApp', directory: 'myDir' },
appTree
);
- const angularJson = readJsonInTree(tree, '/angular.json');
+ const workspaceJson = readJsonInTree(tree, '/workspace.json');
- expect(angularJson.projects['my-dir-my-node-app'].root).toEqual(
+ expect(workspaceJson.projects['my-dir-my-node-app'].root).toEqual(
'apps/my-dir/my-node-app'
);
- expect(angularJson.projects['my-dir-my-node-app'].architect.lint).toEqual(
- {
- builder: '@angular-devkit/build-angular:tslint',
- options: {
- tsConfig: [
- 'apps/my-dir/my-node-app/tsconfig.app.json',
- 'apps/my-dir/my-node-app/tsconfig.spec.json'
- ],
- exclude: ['**/node_modules/**', '!apps/my-dir/my-node-app/**']
- }
+ expect(
+ workspaceJson.projects['my-dir-my-node-app'].architect.lint
+ ).toEqual({
+ builder: '@angular-devkit/build-angular:tslint',
+ options: {
+ tsConfig: [
+ 'apps/my-dir/my-node-app/tsconfig.app.json',
+ 'apps/my-dir/my-node-app/tsconfig.spec.json'
+ ],
+ exclude: ['**/node_modules/**', '!apps/my-dir/my-node-app/**']
}
- );
+ });
- expect(angularJson.projects['my-dir-my-node-app-e2e']).toBeUndefined();
- expect(angularJson.defaultProject).toEqual('my-dir-my-node-app');
+ expect(workspaceJson.projects['my-dir-my-node-app-e2e']).toBeUndefined();
+ expect(workspaceJson.defaultProject).toEqual('my-dir-my-node-app');
});
it('should update nx.json', async () => {
@@ -213,12 +213,12 @@ describe('app', () => {
expect(tree.exists('apps/my-node-app/src/test.ts')).toBeFalsy();
expect(tree.exists('apps/my-node-app/tsconfig.spec.json')).toBeFalsy();
expect(tree.exists('apps/my-node-app/jest.config.js')).toBeFalsy();
- const angularJson = readJsonInTree(tree, 'angular.json');
+ const workspaceJson = readJsonInTree(tree, 'workspace.json');
expect(
- angularJson.projects['my-node-app'].architect.test
+ workspaceJson.projects['my-node-app'].architect.test
).toBeUndefined();
expect(
- angularJson.projects['my-node-app'].architect.lint.options.tsConfig
+ workspaceJson.projects['my-node-app'].architect.lint.options.tsConfig
).toEqual(['apps/my-node-app/tsconfig.app.json']);
});
});
@@ -234,7 +234,7 @@ describe('app', () => {
);
expect(tree.exists('apps/my-frontend/proxy.conf.json')).toBeTruthy();
- const serve = JSON.parse(tree.readContent('angular.json')).projects[
+ const serve = JSON.parse(tree.readContent('workspace.json')).projects[
'my-frontend'
].architect.serve;
expect(serve.options.proxyConfig).toEqual(
@@ -252,7 +252,7 @@ describe('app', () => {
);
expect(tree.exists('apps/my-frontend/proxy.conf.json')).toBeTruthy();
- const serve = JSON.parse(tree.readContent('angular.json')).projects[
+ const serve = JSON.parse(tree.readContent('workspace.json')).projects[
'my-frontend'
].architect.serve;
expect(serve.options.proxyConfig).toEqual(
diff --git a/packages/node/src/schematics/application/application.ts b/packages/node/src/schematics/application/application.ts
index 715e77ea7b..e5fbe5a66e 100644
--- a/packages/node/src/schematics/application/application.ts
+++ b/packages/node/src/schematics/application/application.ts
@@ -13,7 +13,12 @@ import {
} from '@angular-devkit/schematics';
import { join, normalize, Path } from '@angular-devkit/core';
import { Schema } from './schema';
-import { updateJsonInTree } from '@nrwl/workspace';
+import {
+ updateJsonInTree,
+ updateWorkspaceInTree,
+ generateProjectLint,
+ addGlobalLint
+} from '@nrwl/workspace';
import { toFileName } from '@nrwl/workspace';
import { getProjectConfig } from '@nrwl/workspace';
import { offsetFromRoot } from '@nrwl/workspace';
@@ -61,16 +66,6 @@ function getBuildConfig(project: any, options: NormalizedSchema) {
};
}
-function getLintConfig(project: any) {
- return {
- builder: '@angular-devkit/build-angular:tslint',
- options: {
- tsConfig: [join(project.root, 'tsconfig.app.json')],
- exclude: ['**/node_modules/**', '!' + join(project.root, '**')]
- }
- };
-}
-
function getServeConfig(options: NormalizedSchema) {
return {
builder: '@nrwl/node:execute',
@@ -80,8 +75,8 @@ function getServeConfig(options: NormalizedSchema) {
};
}
-function updateAngularJson(options: NormalizedSchema): Rule {
- return updateJsonInTree('angular.json', angularJson => {
+function updateWorkspaceJson(options: NormalizedSchema): Rule {
+ return updateWorkspaceInTree(workspaceJson => {
const project = {
root: options.appProjectRoot,
sourceRoot: join(options.appProjectRoot, 'src'),
@@ -93,12 +88,17 @@ function updateAngularJson(options: NormalizedSchema): Rule {
project.architect.build = getBuildConfig(project, options);
project.architect.serve = getServeConfig(options);
- project.architect.lint = getLintConfig(project);
- angularJson.projects[options.name] = project;
+ project.architect.lint = generateProjectLint(
+ normalize(project.root),
+ join(normalize(project.root), 'tsconfig.app.json'),
+ options.linter
+ );
- angularJson.defaultProject = angularJson.defaultProject || options.name;
+ workspaceJson.projects[options.name] = project;
- return angularJson;
+ workspaceJson.defaultProject = workspaceJson.defaultProject || options.name;
+
+ return workspaceJson;
});
}
@@ -135,7 +135,7 @@ function addProxy(options: NormalizedSchema): Rule {
)
);
- updateJsonInTree('angular.json', json => {
+ updateWorkspaceInTree(json => {
projectConfig.architect.serve.options.proxyConfig = pathToProxyFile;
json.projects[options.frontendProject] = projectConfig;
return json;
@@ -151,8 +151,9 @@ export default function(schema: Schema): Rule {
ngAdd({
skipFormat: true
}),
+ addGlobalLint(options.linter),
addAppFiles(options),
- updateAngularJson(options),
+ updateWorkspaceJson(options),
updateNxJson(options),
options.unitTestRunner === 'jest'
? externalSchematic('@nrwl/jest', 'jest-project', {
diff --git a/packages/node/src/schematics/application/files/app/src/environments/environment.ts__tmpl__ b/packages/node/src/schematics/application/files/app/src/environments/environment.ts__tmpl__
index ee37b495d5..ffe8aed766 100644
--- a/packages/node/src/schematics/application/files/app/src/environments/environment.ts__tmpl__
+++ b/packages/node/src/schematics/application/files/app/src/environments/environment.ts__tmpl__
@@ -1,7 +1,3 @@
-// This file can be replaced during build by using the `fileReplacements` array.
-// `ng build ---prod` replaces `environment.ts` with `environment.prod.ts`.
-// The list of file replacements can be found in `angular.json`.
-
export const environment = {
production: false
};
diff --git a/packages/node/src/schematics/application/schema.d.ts b/packages/node/src/schematics/application/schema.d.ts
index 415d9c1d94..4a42c9e1e9 100644
--- a/packages/node/src/schematics/application/schema.d.ts
+++ b/packages/node/src/schematics/application/schema.d.ts
@@ -1,10 +1,10 @@
-import { UnitTestRunner } from '../../utils/test-runners';
export interface Schema {
name: string;
skipFormat: boolean;
skipPackageJson: boolean;
directory?: string;
- unitTestRunner: UnitTestRunner;
+ unitTestRunner: 'jest' | 'none';
+ linter: 'eslint' | 'tslint';
tags?: string;
frontendProject?: string;
}
diff --git a/packages/node/src/schematics/application/schema.json b/packages/node/src/schematics/application/schema.json
index 8f771fa76c..86c60724f9 100644
--- a/packages/node/src/schematics/application/schema.json
+++ b/packages/node/src/schematics/application/schema.json
@@ -28,6 +28,12 @@
"default": false,
"description": "Do not add dependencies to package.json."
},
+ "linter": {
+ "description": "The tool to use for running lint checks.",
+ "type": "string",
+ "enum": ["eslint", "tslint"],
+ "default": "tslint"
+ },
"unitTestRunner": {
"type": "string",
"enum": ["jest", "none"],
diff --git a/packages/node/src/schematics/ng-add/ng-add.spec.ts b/packages/node/src/schematics/ng-add/ng-add.spec.ts
index 4f61c940c5..625f88cec9 100644
--- a/packages/node/src/schematics/ng-add/ng-add.spec.ts
+++ b/packages/node/src/schematics/ng-add/ng-add.spec.ts
@@ -21,13 +21,13 @@ describe('ng-add', () => {
describe('defaultCollection', () => {
it('should be set if none was set before', async () => {
const result = await runSchematic('ng-add', {}, tree);
- const angularJson = readJsonInTree(result, 'angular.json');
- expect(angularJson.cli.defaultCollection).toEqual('@nrwl/node');
+ const workspaceJson = readJsonInTree(result, 'workspace.json');
+ expect(workspaceJson.cli.defaultCollection).toEqual('@nrwl/node');
});
it('should be set if @nrwl/workspace was set before', async () => {
tree = await callRule(
- updateJsonInTree('angular.json', json => {
+ updateJsonInTree('workspace.json', json => {
json.cli = {
defaultCollection: '@nrwl/workspace'
};
@@ -37,13 +37,13 @@ describe('ng-add', () => {
tree
);
const result = await runSchematic('ng-add', {}, tree);
- const angularJson = readJsonInTree(result, 'angular.json');
- expect(angularJson.cli.defaultCollection).toEqual('@nrwl/node');
+ const workspaceJson = readJsonInTree(result, 'workspace.json');
+ expect(workspaceJson.cli.defaultCollection).toEqual('@nrwl/node');
});
it('should not be set if something else was set before', async () => {
tree = await callRule(
- updateJsonInTree('angular.json', json => {
+ updateJsonInTree('workspace.json', json => {
json.cli = {
defaultCollection: '@nrwl/angular'
};
@@ -53,8 +53,8 @@ describe('ng-add', () => {
tree
);
const result = await runSchematic('ng-add', {}, tree);
- const angularJson = readJsonInTree(result, 'angular.json');
- expect(angularJson.cli.defaultCollection).toEqual('@nrwl/angular');
+ const workspaceJson = readJsonInTree(result, 'workspace.json');
+ expect(workspaceJson.cli.defaultCollection).toEqual('@nrwl/angular');
});
});
});
diff --git a/packages/react/src/schematics/application/application.spec.ts b/packages/react/src/schematics/application/application.spec.ts
index 46adda06b6..47d0322e88 100644
--- a/packages/react/src/schematics/application/application.spec.ts
+++ b/packages/react/src/schematics/application/application.spec.ts
@@ -13,15 +13,15 @@ describe('app', () => {
});
describe('not nested', () => {
- it('should update angular.json', async () => {
+ it('should update workspace.json', async () => {
const tree = await runSchematic('app', { name: 'myApp' }, appTree);
- const angularJson = readJsonInTree(tree, '/angular.json');
+ const workspaceJson = readJsonInTree(tree, '/workspace.json');
- expect(angularJson.projects['my-app'].root).toEqual('apps/my-app');
- expect(angularJson.projects['my-app-e2e'].root).toEqual(
+ expect(workspaceJson.projects['my-app'].root).toEqual('apps/my-app');
+ expect(workspaceJson.projects['my-app-e2e'].root).toEqual(
'apps/my-app-e2e'
);
- expect(angularJson.defaultProject).toEqual('my-app');
+ expect(workspaceJson.defaultProject).toEqual('my-app');
});
it('should update nx.json', async () => {
@@ -76,18 +76,18 @@ describe('app', () => {
});
describe('nested', () => {
- it('should update angular.json', async () => {
+ it('should update workspace.json', async () => {
const tree = await runSchematic(
'app',
{ name: 'myApp', directory: 'myDir' },
appTree
);
- const angularJson = readJsonInTree(tree, '/angular.json');
+ const workspaceJson = readJsonInTree(tree, '/workspace.json');
- expect(angularJson.projects['my-dir-my-app'].root).toEqual(
+ expect(workspaceJson.projects['my-dir-my-app'].root).toEqual(
'apps/my-dir/my-app'
);
- expect(angularJson.projects['my-dir-my-app-e2e'].root).toEqual(
+ expect(workspaceJson.projects['my-dir-my-app-e2e'].root).toEqual(
'apps/my-dir/my-app-e2e'
);
});
@@ -225,8 +225,8 @@ describe('app', () => {
},
appTree
);
- const angularJson = readJsonInTree(tree, 'angular.json');
- const architectConfig = angularJson.projects['my-app'].architect;
+ const workspaceJson = readJsonInTree(tree, 'workspace.json');
+ const architectConfig = workspaceJson.projects['my-app'].architect;
expect(architectConfig.build.builder).toEqual('@nrwl/web:build');
expect(architectConfig.build.options).toEqual({
assets: ['apps/my-app/src/favicon.ico', 'apps/my-app/src/assets'],
@@ -270,8 +270,8 @@ describe('app', () => {
},
appTree
);
- const angularJson = readJsonInTree(tree, 'angular.json');
- const architectConfig = angularJson.projects['my-app'].architect;
+ const workspaceJson = readJsonInTree(tree, 'workspace.json');
+ const architectConfig = workspaceJson.projects['my-app'].architect;
expect(architectConfig.serve.builder).toEqual('@nrwl/web:dev-server');
expect(architectConfig.serve.options).toEqual({
buildTarget: 'my-app:build'
@@ -289,8 +289,8 @@ describe('app', () => {
},
appTree
);
- const angularJson = readJsonInTree(tree, 'angular.json');
- expect(angularJson.projects['my-app'].architect.lint).toEqual({
+ const workspaceJson = readJsonInTree(tree, 'workspace.json');
+ expect(workspaceJson.projects['my-app'].architect.lint).toEqual({
builder: '@angular-devkit/build-angular:tslint',
options: {
exclude: ['**/node_modules/**', '!apps/my-app/**'],
@@ -312,10 +312,10 @@ describe('app', () => {
expect(tree.exists('apps/my-app/src/app/app.spec.tsx')).toBeFalsy();
expect(tree.exists('apps/my-app/tsconfig.spec.json')).toBeFalsy();
expect(tree.exists('apps/my-app/jest.config.js')).toBeFalsy();
- const angularJson = readJsonInTree(tree, 'angular.json');
- expect(angularJson.projects['my-app'].architect.test).toBeUndefined();
+ const workspaceJson = readJsonInTree(tree, 'workspace.json');
+ expect(workspaceJson.projects['my-app'].architect.test).toBeUndefined();
expect(
- angularJson.projects['my-app'].architect.lint.options.tsConfig
+ workspaceJson.projects['my-app'].architect.lint.options.tsConfig
).toEqual(['apps/my-app/tsconfig.app.json']);
});
});
@@ -328,8 +328,8 @@ describe('app', () => {
appTree
);
expect(tree.exists('apps/my-app-e2e')).toBeFalsy();
- const angularJson = readJsonInTree(tree, 'angular.json');
- expect(angularJson.projects['my-app-e2e']).toBeUndefined();
+ const workspaceJson = readJsonInTree(tree, 'workspace.json');
+ expect(workspaceJson.projects['my-app-e2e']).toBeUndefined();
});
});
@@ -417,17 +417,17 @@ describe('app', () => {
expect(content).toContain('');
});
- it('should exclude styles from angular.json', async () => {
+ it('should exclude styles from workspace.json', async () => {
const tree = await runSchematic(
'app',
{ name: 'myApp', style: '@emotion/styled' },
appTree
);
- const angularJSON = readJsonInTree(tree, 'angular.json');
+ const workspaceJson = readJsonInTree(tree, 'workspace.json');
expect(
- angularJSON.projects['my-app'].architect.build.options.styles
+ workspaceJson.projects['my-app'].architect.build.options.styles
).toEqual([]);
});
diff --git a/packages/react/src/schematics/application/application.ts b/packages/react/src/schematics/application/application.ts
index 130be2677c..bc3c6578ce 100644
--- a/packages/react/src/schematics/application/application.ts
+++ b/packages/react/src/schematics/application/application.ts
@@ -19,9 +19,14 @@ import {
NxJson,
offsetFromRoot,
toFileName,
- updateJsonInTree
+ updateJsonInTree,
+ generateProjectLint,
+ addGlobalLint
} from '@nrwl/workspace';
-import { addDepsToPackageJson } from '@nrwl/workspace/src/utils/ast-utils';
+import {
+ addDepsToPackageJson,
+ updateWorkspaceInTree
+} from '@nrwl/workspace/src/utils/ast-utils';
import ngAdd from '../ng-add/ng-add';
import * as ts from 'typescript';
@@ -48,6 +53,7 @@ export default function(schema: Schema): Rule {
ngAdd({
skipFormat: true
}),
+ addGlobalLint(options.linter),
createApplicationFiles(options),
updateNxJson(options),
addProject(options),
@@ -102,7 +108,7 @@ function updateNxJson(options: NormalizedSchema): Rule {
}
function addProject(options: NormalizedSchema): Rule {
- return updateJsonInTree('angular.json', json => {
+ return updateWorkspaceInTree(json => {
const architect: { [key: string]: any } = {};
architect.build = {
@@ -166,16 +172,11 @@ function addProject(options: NormalizedSchema): Rule {
}
};
- architect.lint = {
- builder: '@angular-devkit/build-angular:tslint',
- options: {
- tsConfig: [join(options.appProjectRoot, 'tsconfig.app.json')],
- exclude: [
- '**/node_modules/**',
- '!' + join(options.appProjectRoot, '**')
- ]
- }
- };
+ architect.lint = generateProjectLint(
+ normalize(options.appProjectRoot),
+ join(normalize(options.appProjectRoot), 'tsconfig.app.json'),
+ options.linter
+ );
json.projects[options.projectName] = {
root: options.appProjectRoot,
diff --git a/packages/react/src/schematics/application/schema.d.ts b/packages/react/src/schematics/application/schema.d.ts
index 6d7a039516..94e61b6bda 100644
--- a/packages/react/src/schematics/application/schema.d.ts
+++ b/packages/react/src/schematics/application/schema.d.ts
@@ -1,13 +1,12 @@
-import { E2eTestRunner, UnitTestRunner } from '../../utils/test-runners';
-
export interface Schema {
name: string;
style?: string;
skipFormat: boolean;
directory?: string;
tags?: string;
- unitTestRunner: UnitTestRunner;
- e2eTestRunner: E2eTestRunner;
+ unitTestRunner: 'jest' | 'none';
+ e2eTestRunner: 'cypress' | 'none';
+ linter: 'eslint' | 'tslint';
pascalCaseFiles?: boolean;
classComponent?: boolean;
routing?: boolean;
diff --git a/packages/react/src/schematics/application/schema.json b/packages/react/src/schematics/application/schema.json
index 621303275e..e4e0c5c074 100644
--- a/packages/react/src/schematics/application/schema.json
+++ b/packages/react/src/schematics/application/schema.json
@@ -50,6 +50,12 @@
]
}
},
+ "linter": {
+ "description": "The tool to use for running lint checks.",
+ "type": "string",
+ "enum": ["eslint", "tslint"],
+ "default": "tslint"
+ },
"routing": {
"type": "boolean",
"description": "Generate application with routes",
diff --git a/packages/react/src/schematics/component/schema.json b/packages/react/src/schematics/component/schema.json
index ab092172b7..a15dc4ea22 100644
--- a/packages/react/src/schematics/component/schema.json
+++ b/packages/react/src/schematics/component/schema.json
@@ -6,7 +6,7 @@
"properties": {
"project": {
"type": "string",
- "description": "The name of the project (as specified in angular.json).",
+ "description": "The name of the project.",
"$default": {
"$source": "projectName"
},
diff --git a/packages/react/src/schematics/library/files/lib/README.md b/packages/react/src/schematics/library/files/lib/README.md
index 708b246ffe..99ec9c8e3c 100644
--- a/packages/react/src/schematics/library/files/lib/README.md
+++ b/packages/react/src/schematics/library/files/lib/README.md
@@ -4,4 +4,4 @@ This library was generated with [Nx](https://nx.dev).
## Running unit tests
-Run `ng test <%= name %>` to execute the unit tests via [Jest](https://jestjs.io).
+Run `yarn test <%= name %>` to execute the unit tests via [Jest](https://jestjs.io).
diff --git a/packages/react/src/schematics/library/library.spec.ts b/packages/react/src/schematics/library/library.spec.ts
index c74819c369..ad62865983 100644
--- a/packages/react/src/schematics/library/library.spec.ts
+++ b/packages/react/src/schematics/library/library.spec.ts
@@ -13,13 +13,12 @@ describe('lib', () => {
});
describe('not nested', () => {
- it('should update angular.json', async () => {
+ it('should update workspace.json', async () => {
const tree = await runSchematic('lib', { name: 'myLib' }, appTree);
- const angularJson = readJsonInTree(tree, '/angular.json');
-
- expect(angularJson.projects['my-lib'].root).toEqual('libs/my-lib');
- expect(angularJson.projects['my-lib'].architect.build).toBeUndefined();
- expect(angularJson.projects['my-lib'].architect.lint).toEqual({
+ const workspaceJson = readJsonInTree(tree, '/workspace.json');
+ expect(workspaceJson.projects['my-lib'].root).toEqual('libs/my-lib');
+ expect(workspaceJson.projects['my-lib'].architect.build).toBeUndefined();
+ expect(workspaceJson.projects['my-lib'].architect.lint).toEqual({
builder: '@angular-devkit/build-angular:tslint',
options: {
exclude: ['**/node_modules/**', '!libs/my-lib/**'],
@@ -172,18 +171,18 @@ describe('lib', () => {
).toBeTruthy();
});
- it('should update angular.json', async () => {
+ it('should update workspace.json', async () => {
const tree = await runSchematic(
'lib',
{ name: 'myLib', directory: 'myDir' },
appTree
);
- const angularJson = readJsonInTree(tree, '/angular.json');
+ const workspaceJson = readJsonInTree(tree, '/workspace.json');
- expect(angularJson.projects['my-dir-my-lib'].root).toEqual(
+ expect(workspaceJson.projects['my-dir-my-lib'].root).toEqual(
'libs/my-dir/my-lib'
);
- expect(angularJson.projects['my-dir-my-lib'].architect.lint).toEqual({
+ expect(workspaceJson.projects['my-dir-my-lib'].architect.lint).toEqual({
builder: '@angular-devkit/build-angular:tslint',
options: {
exclude: ['**/node_modules/**', '!libs/my-dir/my-lib/**'],
@@ -256,10 +255,10 @@ describe('lib', () => {
);
expect(resultTree.exists('libs/my-lib/tsconfig.spec.json')).toBeFalsy();
expect(resultTree.exists('libs/my-lib/jest.config.js')).toBeFalsy();
- const angularJson = readJsonInTree(resultTree, 'angular.json');
- expect(angularJson.projects['my-lib'].architect.test).toBeUndefined();
+ const workspaceJson = readJsonInTree(resultTree, 'workspace.json');
+ expect(workspaceJson.projects['my-lib'].architect.test).toBeUndefined();
expect(
- angularJson.projects['my-lib'].architect.lint.options.tsConfig
+ workspaceJson.projects['my-lib'].architect.lint.options.tsConfig
).toEqual(['libs/my-lib/tsconfig.lib.json']);
});
});
diff --git a/packages/react/src/schematics/library/library.ts b/packages/react/src/schematics/library/library.ts
index 6bc54e764c..b817f74049 100644
--- a/packages/react/src/schematics/library/library.ts
+++ b/packages/react/src/schematics/library/library.ts
@@ -22,7 +22,10 @@ import {
readJsonInTree,
toClassName,
toFileName,
- updateJsonInTree
+ updateJsonInTree,
+ updateWorkspaceInTree,
+ addGlobalLint,
+ generateProjectLint
} from '@nrwl/workspace';
import { join, normalize, Path } from '@angular-devkit/core';
import * as ts from 'typescript';
@@ -44,6 +47,7 @@ export default function(schema: Schema): Rule {
const options = normalizeOptions(schema);
return chain([
+ addGlobalLint(options.linter),
createFiles(options),
!options.skipTsConfig ? updateTsConfig(options) : noop(),
addProject(options),
@@ -71,19 +75,14 @@ export default function(schema: Schema): Rule {
}
function addProject(options: NormalizedSchema): Rule {
- return updateJsonInTree('angular.json', json => {
+ return updateWorkspaceInTree(json => {
const architect: { [key: string]: any } = {};
- architect.lint = {
- builder: '@angular-devkit/build-angular:tslint',
- options: {
- tsConfig: [join(normalize(options.projectRoot), 'tsconfig.lib.json')],
- exclude: [
- '**/node_modules/**',
- '!' + join(normalize(options.projectRoot), '**')
- ]
- }
- };
+ architect.lint = generateProjectLint(
+ normalize(options.projectRoot),
+ join(normalize(options.projectRoot), 'tsconfig.lib.json'),
+ options.linter
+ );
json.projects[options.name] = {
root: options.projectRoot,
diff --git a/packages/react/src/schematics/library/schema.d.ts b/packages/react/src/schematics/library/schema.d.ts
index 7608df91ac..0ba6d4e459 100644
--- a/packages/react/src/schematics/library/schema.d.ts
+++ b/packages/react/src/schematics/library/schema.d.ts
@@ -1,5 +1,3 @@
-import { UnitTestRunner } from '../../utils/test-runners';
-
export interface Schema {
name: string;
directory?: string;
@@ -11,5 +9,6 @@ export interface Schema {
pascalCaseFiles?: boolean;
routing?: boolean;
parentRoute?: string;
- unitTestRunner: UnitTestRunner;
+ unitTestRunner: 'jest' | 'none';
+ linter: 'eslint' | 'tslint';
}
diff --git a/packages/react/src/schematics/library/schema.json b/packages/react/src/schematics/library/schema.json
index 8cdb958b2a..d36da86a41 100644
--- a/packages/react/src/schematics/library/schema.json
+++ b/packages/react/src/schematics/library/schema.json
@@ -50,6 +50,12 @@
]
}
},
+ "linter": {
+ "description": "The tool to use for running lint checks.",
+ "type": "string",
+ "enum": ["eslint", "tslint"],
+ "default": "tslint"
+ },
"unitTestRunner": {
"type": "string",
"enum": ["jest", "none"],
diff --git a/packages/react/src/schematics/ng-add/ng-add.spec.ts b/packages/react/src/schematics/ng-add/ng-add.spec.ts
index 33d4c0a8b1..9d83c40cd5 100644
--- a/packages/react/src/schematics/ng-add/ng-add.spec.ts
+++ b/packages/react/src/schematics/ng-add/ng-add.spec.ts
@@ -27,13 +27,13 @@ describe('ng-add', () => {
describe('defaultCollection', () => {
it('should be set if none was set before', async () => {
const result = await runSchematic('ng-add', {}, tree);
- const angularJson = readJsonInTree(result, 'angular.json');
- expect(angularJson.cli.defaultCollection).toEqual('@nrwl/react');
+ const workspaceJson = readJsonInTree(result, 'workspace.json');
+ expect(workspaceJson.cli.defaultCollection).toEqual('@nrwl/react');
});
it('should be set if @nrwl/workspace was set before', async () => {
tree = await callRule(
- updateJsonInTree('angular.json', json => {
+ updateJsonInTree('workspace.json', json => {
json.cli = {
defaultCollection: '@nrwl/workspace'
};
@@ -43,13 +43,13 @@ describe('ng-add', () => {
tree
);
const result = await runSchematic('ng-add', {}, tree);
- const angularJson = readJsonInTree(result, 'angular.json');
- expect(angularJson.cli.defaultCollection).toEqual('@nrwl/react');
+ const workspaceJson = readJsonInTree(result, 'workspace.json');
+ expect(workspaceJson.cli.defaultCollection).toEqual('@nrwl/react');
});
it('should not be set if something else was set before', async () => {
tree = await callRule(
- updateJsonInTree('angular.json', json => {
+ updateJsonInTree('workspace.json', json => {
json.cli = {
defaultCollection: '@nrwl/angular'
};
@@ -59,8 +59,8 @@ describe('ng-add', () => {
tree
);
const result = await runSchematic('ng-add', {}, tree);
- const angularJson = readJsonInTree(result, 'angular.json');
- expect(angularJson.cli.defaultCollection).toEqual('@nrwl/angular');
+ const workspaceJson = readJsonInTree(result, 'workspace.json');
+ expect(workspaceJson.cli.defaultCollection).toEqual('@nrwl/angular');
});
});
});
diff --git a/packages/schematics/migrations/legacy-migrations/20171211-create-tsconfigapp-per-app.ts b/packages/schematics/migrations/legacy-migrations/20171211-create-tsconfigapp-per-app.ts
index a625bf083d..952dfe7c02 100644
--- a/packages/schematics/migrations/legacy-migrations/20171211-create-tsconfigapp-per-app.ts
+++ b/packages/schematics/migrations/legacy-migrations/20171211-create-tsconfigapp-per-app.ts
@@ -1,4 +1,4 @@
-import { readCliConfigFile, updateJsonFile } from '@nrwl/workspace';
+import { readWorkspaceConfigPath, updateJsonFile } from '@nrwl/workspace';
import { writeFileSync, unlinkSync } from 'fs';
import { offsetFromRoot } from '@nrwl/workspace';
import * as path from 'path';
@@ -6,7 +6,7 @@ import * as path from 'path';
export default {
description: 'Create tsconfig.app.json for every app',
run: () => {
- const config = readCliConfigFile();
+ const config = readWorkspaceConfigPath();
config.apps.forEach(app => {
if (!app.root.startsWith('apps/')) return;
const offset = offsetFromRoot(app.root);
diff --git a/packages/schematics/migrations/legacy-migrations/20180507-create-nx-json.ts b/packages/schematics/migrations/legacy-migrations/20180507-create-nx-json.ts
index 3879150681..b875e216c1 100644
--- a/packages/schematics/migrations/legacy-migrations/20180507-create-nx-json.ts
+++ b/packages/schematics/migrations/legacy-migrations/20180507-create-nx-json.ts
@@ -5,7 +5,7 @@ import { stripIndents } from '@angular-devkit/core/src/utils/literals';
export default {
description: `Create nx.json before migrating to Angular CLI 6.`,
run: () => {
- if (!existsSync('.angular-cli.json') && existsSync('angular.json')) {
+ if (!existsSync('.angular-cli.json') && existsSync('workspace.json')) {
console.warn(stripIndents`
You have already upgraded to Angular CLI 6.
We will not be able to recover information about your project's tags for you.
@@ -13,8 +13,8 @@ export default {
return;
}
- const angularJson = readJsonFile('.angular-cli.json');
- const projects = angularJson.apps.reduce((projects, app) => {
+ const workspaceJson = readJsonFile('.angular-cli.json');
+ const projects = workspaceJson.apps.reduce((projects, app) => {
if (app.name === '$workspaceRoot') {
return projects;
}
@@ -33,7 +33,7 @@ export default {
writeFileSync(
'nx.json',
serializeJson({
- npmScope: angularJson.project.npmScope,
+ npmScope: workspaceJson.project.npmScope,
projects: projects
})
);
diff --git a/packages/schematics/migrations/legacy-migrations/20180515-switch-to-nx6.ts b/packages/schematics/migrations/legacy-migrations/20180515-switch-to-nx6.ts
index 03d511e373..a98b67ba6d 100644
--- a/packages/schematics/migrations/legacy-migrations/20180515-switch-to-nx6.ts
+++ b/packages/schematics/migrations/legacy-migrations/20180515-switch-to-nx6.ts
@@ -7,7 +7,7 @@ import { join } from 'path';
export default {
description: `Switch to Nx 6.0`,
run: () => {
- if (!existsSync('.angular-cli.json') && existsSync('angular.json')) {
+ if (!existsSync('.angular-cli.json') && existsSync('workspace.json')) {
console.warn(stripIndents`
You have already upgraded to Angular CLI 6.
We will not be able to recover information about your project's tags for you.
diff --git a/packages/schematics/migrations/update-6-0-0/update-6-0-0.ts b/packages/schematics/migrations/update-6-0-0/update-6-0-0.ts
index 4d31812621..150e618f43 100644
--- a/packages/schematics/migrations/update-6-0-0/update-6-0-0.ts
+++ b/packages/schematics/migrations/update-6-0-0/update-6-0-0.ts
@@ -10,7 +10,8 @@ import { NodePackageInstallTask } from '@angular-devkit/schematics/tasks';
import {
createOrUpdate,
readJsonInTree,
- updateJsonInTree
+ updateJsonInTree,
+ updateWorkspaceInTree
} from '@nrwl/workspace';
import { serializeJson, renameSync } from '@nrwl/workspace';
import { parseTarget, serializeTarget } from '@nrwl/workspace';
@@ -256,8 +257,8 @@ function createTsconfigLibJson(host: Tree, project: any) {
}
function createAdditionalFiles(host: Tree) {
- const angularJson = readJsonInTree(host, 'angular.json');
- Object.entries(angularJson.projects).forEach(([key, project]) => {
+ const workspaceJson = readJsonInTree(host, 'workspace.json');
+ Object.entries(workspaceJson.projects).forEach(([key, project]) => {
if (project.architect.test) {
createTsconfigSpecJson(host, project);
createKarma(host, project);
@@ -282,9 +283,9 @@ function createAdditionalFiles(host: Tree) {
}
function moveE2eTests(host: Tree, context: SchematicContext) {
- const angularJson = readJsonInTree(host, 'angular.json');
+ const workspaceJson = readJsonInTree(host, 'workspace.json');
- Object.entries(angularJson.projects).forEach(([key, p]) => {
+ Object.entries(workspaceJson.projects).forEach(([key, p]) => {
if (p.projectType === 'application' && !p.architect.e2e) {
renameSync(`${p.root}/e2e`, `${p.root}-e2e/src`, err => {
if (!err) {
@@ -320,9 +321,9 @@ function deleteUnneededFiles(host: Tree) {
}
function patchLibIndexFiles(host: Tree, context: SchematicContext) {
- const angularJson = readJsonInTree(host, 'angular.json');
+ const workspaceJson = readJsonInTree(host, 'workspace.json');
- Object.entries(angularJson.projects).forEach(([key, p]) => {
+ Object.entries(workspaceJson.projects).forEach(([key, p]) => {
if (p.projectType === 'library') {
try {
// TODO: incorporate this into fileutils.renameSync
@@ -489,8 +490,8 @@ function createDefaultE2eTsConfig(host: Tree, project: any) {
}
function updateTsConfigs(host: Tree) {
- const angularJson = readJsonInTree(host, 'angular.json');
- Object.entries(angularJson.projects).forEach(([key, project]) => {
+ const workspaceJson = readJsonInTree(host, 'workspace.json');
+ Object.entries(workspaceJson.projects).forEach(([key, project]) => {
if (
project.architect.build &&
project.architect.build.options.main.startsWith('apps')
@@ -562,7 +563,7 @@ function updateTsConfigs(host: Tree) {
return host;
}
-const updateAngularJson = updateJsonInTree('angular.json', json => {
+const updateworkspaceJson = updateWorkspaceInTree(json => {
json.newProjectRoot = '';
json.cli = {
...json.cli,
@@ -681,7 +682,7 @@ function addInstallTask(host: Tree, context: SchematicContext) {
}
function checkCli6Upgraded(host: Tree) {
- if (!host.exists('angular.json') && host.exists('.angular-cli.json')) {
+ if (!host.exists('workspace.json') && host.exists('.angular-cli.json')) {
throw new Error(
'Please install the latest version and run ng update @angular/cli first'
);
@@ -701,7 +702,7 @@ export default function(): Rule {
return chain([
checkCli6Upgraded,
updatePackageJson,
- updateAngularJson,
+ updateworkspaceJson,
moveE2eTests,
updateTsConfigs,
createAdditionalFiles,
diff --git a/packages/schematics/migrations/update-6-1-0/update-6-1-0.ts b/packages/schematics/migrations/update-6-1-0/update-6-1-0.ts
index 34047c2f27..25249af17f 100644
--- a/packages/schematics/migrations/update-6-1-0/update-6-1-0.ts
+++ b/packages/schematics/migrations/update-6-1-0/update-6-1-0.ts
@@ -25,7 +25,7 @@ const addImplicitDependencies = updateJsonInTree('nx.json', nxJson => {
return {
...nxJson,
implicitDependencies: {
- 'angular.json': '*',
+ 'workspace.json': '*',
'package.json': '*',
'tsconfig.json': '*',
'tslint.json': '*',
diff --git a/packages/schematics/migrations/update-7-2-0/update-7-2-0.spec.ts b/packages/schematics/migrations/update-7-2-0/update-7-2-0.spec.ts
index 00a22ab5fb..cc09e63930 100644
--- a/packages/schematics/migrations/update-7-2-0/update-7-2-0.spec.ts
+++ b/packages/schematics/migrations/update-7-2-0/update-7-2-0.spec.ts
@@ -15,7 +15,7 @@ describe('Update 7.2.0', () => {
scripts: {}
});
createJson('tsconfig.json', {});
- createJson('angular.json', {
+ createJson('workspace.json', {
projects: {
app1: {
root: 'apps/app1',
@@ -321,7 +321,7 @@ describe('Update 7.2.0', () => {
it('should fix cypress lint configs', async () => {
initialTree = await schematicRunner
.callRule(
- updateJsonInTree('angular.json', json => {
+ updateJsonInTree('workspace.json', json => {
json.projects['app2-e2e'].architect.lint.options.tsConfig =
'e2e/tsconfig.e2e.json';
return json;
@@ -333,8 +333,8 @@ describe('Update 7.2.0', () => {
.runSchematicAsync('update-7.2.0', {}, initialTree)
.toPromise();
expect(
- readJsonInTree(result, 'angular.json').projects['app2-e2e'].architect.lint
- .options.tsConfig
+ readJsonInTree(result, 'workspace.json').projects['app2-e2e'].architect
+ .lint.options.tsConfig
).toEqual('apps/app2-e2e/tsconfig.e2e.json');
[
'/apps/app1/tsconfig.app.json',
@@ -358,7 +358,7 @@ describe('Update 7.2.0', () => {
it('should not fail for non-existing tsconfigs', async () => {
initialTree = await schematicRunner
.callRule(
- updateJsonInTree('angular.json', json => {
+ updateJsonInTree('workspace.json', json => {
json.projects['app2'].architect.lint.options.tsConfig =
'apps/nonexistent/tsconfig.app.json';
return json;
diff --git a/packages/schematics/migrations/update-7-2-0/update-7-2-0.ts b/packages/schematics/migrations/update-7-2-0/update-7-2-0.ts
index 1255eb1be8..73ba20cff7 100644
--- a/packages/schematics/migrations/update-7-2-0/update-7-2-0.ts
+++ b/packages/schematics/migrations/update-7-2-0/update-7-2-0.ts
@@ -10,7 +10,11 @@ import { normalize, join, Path, dirname } from '@angular-devkit/core';
import { relative } from 'path';
-import { updateJsonInTree, readJsonInTree } from '@nrwl/workspace';
+import {
+ updateJsonInTree,
+ readJsonInTree,
+ updateWorkspaceInTree
+} from '@nrwl/workspace';
import { getWorkspacePath } from '@nrwl/workspace';
import { offsetFromRoot, addUpdateTask } from '@nrwl/workspace';
import { stripIndents } from '@angular-devkit/core/src/utils/literals';
@@ -159,9 +163,9 @@ function updateTsConfigs(project: any): Rule {
}
function fixCypressConfigs(host: Tree, context: SchematicContext): Rule {
- const angularJson = readJsonInTree(host, 'angular.json');
+ const workspaceJson = readJsonInTree(host, 'workspace.json');
return chain(
- Object.entries(angularJson.projects)
+ Object.entries(workspaceJson.projects)
.filter(
([key, project]) =>
project.architect.e2e &&
@@ -175,12 +179,12 @@ function fixCypressConfigs(host: Tree, context: SchematicContext): Rule {
}
function fixCypressConfig(project: any, projectKey: string): Rule {
- return updateJsonInTree('angular.json', angularJson => {
- angularJson.projects[projectKey].architect.lint.options.tsConfig = join(
+ return updateWorkspaceInTree(workspaceJson => {
+ workspaceJson.projects[projectKey].architect.lint.options.tsConfig = join(
project.root,
'tsconfig.e2e.json'
);
- return angularJson;
+ return workspaceJson;
});
}
diff --git a/packages/schematics/migrations/update-7-5-0/update-7-5-0.spec.ts b/packages/schematics/migrations/update-7-5-0/update-7-5-0.spec.ts
index a2573e1301..c9bf69bf57 100644
--- a/packages/schematics/migrations/update-7-5-0/update-7-5-0.spec.ts
+++ b/packages/schematics/migrations/update-7-5-0/update-7-5-0.spec.ts
@@ -5,15 +5,16 @@ import * as path from 'path';
import { serializeJson } from '@nrwl/workspace';
import { readJsonInTree } from '@nrwl/workspace';
+import { createEmptyWorkspace } from '@nrwl/workspace/testing';
describe('Update 7.5.0', () => {
let initialTree: Tree;
let schematicRunner: SchematicTestRunner;
beforeEach(() => {
- initialTree = Tree.empty();
+ initialTree = createEmptyWorkspace(Tree.empty());
- initialTree.create(
+ initialTree.overwrite(
'package.json',
serializeJson({
devDependencies: {
diff --git a/packages/schematics/migrations/update-7-6-0/update-7-6-0.spec.ts b/packages/schematics/migrations/update-7-6-0/update-7-6-0.spec.ts
index 55c9079d5e..00bd15cbf6 100644
--- a/packages/schematics/migrations/update-7-6-0/update-7-6-0.spec.ts
+++ b/packages/schematics/migrations/update-7-6-0/update-7-6-0.spec.ts
@@ -9,6 +9,7 @@ import { join } from 'path';
import { serializeJson } from '@nrwl/workspace';
import { readJsonInTree, updateJsonInTree } from '@nrwl/workspace';
import { stripIndents } from '@angular-devkit/core/src/utils/literals';
+import { createEmptyWorkspace } from '@nrwl/workspace/testing';
const effectContents = `
import { Injectable } from '@angular/core';
@@ -77,9 +78,9 @@ describe('Update 7.6.0', () => {
let schematicRunner: SchematicTestRunner;
beforeEach(() => {
- initialTree = new UnitTestTree(Tree.empty());
+ initialTree = createEmptyWorkspace(Tree.empty());
- initialTree.create(
+ initialTree.overwrite(
'package.json',
serializeJson({
dependencies: {
@@ -159,22 +160,22 @@ describe('Update 7.6.0', () => {
.toPromise();
expect(
- readJsonInTree(result, 'angular.json').schematics[
+ readJsonInTree(result, 'workspace.json').schematics[
'@nrwl/schematics:library'
].unitTestRunner
).toEqual('karma');
expect(
- readJsonInTree(result, 'angular.json').schematics[
+ readJsonInTree(result, 'workspace.json').schematics[
'@nrwl/schematics:application'
].unitTestRunner
).toEqual('karma');
expect(
- readJsonInTree(result, 'angular.json').schematics[
+ readJsonInTree(result, 'workspace.json').schematics[
'@nrwl/schematics:application'
].e2eTestRunner
).toEqual('protractor');
expect(
- readJsonInTree(result, 'angular.json').schematics[
+ readJsonInTree(result, 'workspace.json').schematics[
'@nrwl/schematics:node-application'
].framework
).toEqual('express');
diff --git a/packages/schematics/migrations/update-7-6-0/update-7-6-0.ts b/packages/schematics/migrations/update-7-6-0/update-7-6-0.ts
index 9103f827d3..9ba073301e 100644
--- a/packages/schematics/migrations/update-7-6-0/update-7-6-0.ts
+++ b/packages/schematics/migrations/update-7-6-0/update-7-6-0.ts
@@ -8,7 +8,8 @@ import {
formatFiles,
insert,
readJsonInTree,
- updateJsonInTree
+ updateJsonInTree,
+ updateWorkspaceInTree
} from '@nrwl/workspace';
import {
getSourceNodes,
@@ -371,7 +372,7 @@ const addDotEnv = updateJsonInTree('package.json', json => {
return json;
});
-const setDefaults = updateJsonInTree('angular.json', json => {
+const setDefaults = updateWorkspaceInTree(json => {
if (!json.schematics) {
json.schematics = {};
}
diff --git a/packages/schematics/migrations/update-7-7-0/update-7-7-0.spec.ts b/packages/schematics/migrations/update-7-7-0/update-7-7-0.spec.ts
index 065fca10b3..b58cc1a4a9 100644
--- a/packages/schematics/migrations/update-7-7-0/update-7-7-0.spec.ts
+++ b/packages/schematics/migrations/update-7-7-0/update-7-7-0.spec.ts
@@ -7,13 +7,14 @@ import {
import { join } from 'path';
import { readJsonInTree } from '@nrwl/workspace';
import { serializeJson } from '@nrwl/workspace';
+import { createEmptyWorkspace } from '@nrwl/workspace/testing';
describe('Update 7.7.0', () => {
let initialTree: Tree;
let schematicRunner: SchematicTestRunner;
beforeEach(() => {
- initialTree = new UnitTestTree(Tree.empty());
+ initialTree = createEmptyWorkspace(Tree.empty());
schematicRunner = new SchematicTestRunner(
'@nrwl/schematics',
@@ -28,7 +29,7 @@ describe('Update 7.7.0', () => {
.toPromise();
expect(
- readJsonInTree(result, 'angular.json').schematics[
+ readJsonInTree(result, 'workspace.json').schematics[
'@nrwl/schematics:library'
].framework
).toEqual('angular');
@@ -37,7 +38,7 @@ describe('Update 7.7.0', () => {
describe('jest update', () => {
beforeEach(() => {
- initialTree.create(
+ initialTree.overwrite(
'package.json',
serializeJson({
devDependencies: {
diff --git a/packages/schematics/migrations/update-7-7-0/update-7-7-0.ts b/packages/schematics/migrations/update-7-7-0/update-7-7-0.ts
index 4cf434c6d6..9a5fa7b271 100644
--- a/packages/schematics/migrations/update-7-7-0/update-7-7-0.ts
+++ b/packages/schematics/migrations/update-7-7-0/update-7-7-0.ts
@@ -1,7 +1,7 @@
import { chain, Rule, Tree } from '@angular-devkit/schematics';
import { updateJsonInTree, insert } from '@nrwl/workspace';
-import { formatFiles } from '@nrwl/workspace';
+import { formatFiles, updateWorkspaceInTree } from '@nrwl/workspace';
import * as ts from 'typescript';
import {
@@ -9,7 +9,7 @@ import {
ReplaceChange
} from '@nrwl/workspace/src/utils/ast-utils';
-const setDefaults = updateJsonInTree('angular.json', json => {
+const setDefaults = updateWorkspaceInTree(json => {
if (!json.schematics) {
json.schematics = {};
}
diff --git a/packages/schematics/migrations/update-7-8-1/update-7-8-1.spec.ts b/packages/schematics/migrations/update-7-8-1/update-7-8-1.spec.ts
index 28e8c20343..e2fb9090ef 100644
--- a/packages/schematics/migrations/update-7-8-1/update-7-8-1.spec.ts
+++ b/packages/schematics/migrations/update-7-8-1/update-7-8-1.spec.ts
@@ -3,14 +3,15 @@ import { SchematicTestRunner } from '@angular-devkit/schematics/testing';
import { serializeJson } from '@nrwl/workspace';
import * as path from 'path';
+import { createEmptyWorkspace } from '@nrwl/workspace/testing';
describe('Update 7.8.1', () => {
let initialTree: Tree;
let schematicRunner: SchematicTestRunner;
beforeEach(() => {
- initialTree = Tree.empty();
- initialTree.create(
+ initialTree = createEmptyWorkspace(Tree.empty());
+ initialTree.overwrite(
'package.json',
serializeJson({
scripts: {}
diff --git a/packages/schematics/migrations/update-8-0-0/update-8-0-0.spec.ts b/packages/schematics/migrations/update-8-0-0/update-8-0-0.spec.ts
index 05de036863..5a1a25d9c9 100644
--- a/packages/schematics/migrations/update-8-0-0/update-8-0-0.spec.ts
+++ b/packages/schematics/migrations/update-8-0-0/update-8-0-0.spec.ts
@@ -3,13 +3,14 @@ import { SchematicTestRunner } from '@angular-devkit/schematics/testing';
import { updateJsonInTree, readJsonInTree } from '@nrwl/workspace';
import * as path from 'path';
+import { createEmptyWorkspace } from '@nrwl/workspace/testing';
describe('Update 8-0-0', () => {
let initialTree: Tree;
let schematicRunner: SchematicTestRunner;
beforeEach(async () => {
- initialTree = Tree.empty();
+ initialTree = createEmptyWorkspace(Tree.empty());
schematicRunner = new SchematicTestRunner(
'@nrwl/schematics',
path.join(__dirname, '../migrations.json')
@@ -56,7 +57,7 @@ describe('Update 8-0-0', () => {
.toPromise();
initialTree = await schematicRunner
.callRule(
- updateJsonInTree('angular.json', json => ({
+ updateJsonInTree('workspace.json', json => ({
projects: {
'my-app': {
architect: {
@@ -158,7 +159,7 @@ describe('Update 8-0-0', () => {
const tree = await schematicRunner
.runSchematicAsync('update-8.0.0', {}, initialTree)
.toPromise();
- const { projects } = readJsonInTree(tree, 'angular.json');
+ const { projects } = readJsonInTree(tree, 'workspace.json');
const { architect } = projects['my-app'];
expect(architect.cypress.builder).toEqual('@nrwl/cypress:cypress');
expect(architect.jest.builder).toEqual('@nrwl/jest:jest');
@@ -281,7 +282,7 @@ describe('Update 8-0-0', () => {
.runSchematicAsync('update-8.0.0', {}, initialTree)
.toPromise();
- const defaultCollection = readJsonInTree(tree, 'angular.json').cli
+ const defaultCollection = readJsonInTree(tree, 'workspace.json').cli
.defaultCollection;
expect(defaultCollection).toEqual('@nrwl/angular');
});
@@ -304,7 +305,7 @@ describe('Update 8-0-0', () => {
.runSchematicAsync('update-8.0.0', {}, initialTree)
.toPromise();
- const defaultCollection = readJsonInTree(tree, 'angular.json').cli
+ const defaultCollection = readJsonInTree(tree, 'workspace.json').cli
.defaultCollection;
expect(defaultCollection).toEqual('@nrwl/react');
});
@@ -326,7 +327,7 @@ describe('Update 8-0-0', () => {
.runSchematicAsync('update-8.0.0', {}, initialTree)
.toPromise();
- const defaultCollection = readJsonInTree(tree, 'angular.json').cli
+ const defaultCollection = readJsonInTree(tree, 'workspace.json').cli
.defaultCollection;
expect(defaultCollection).toEqual('@nrwl/nest');
});
@@ -347,7 +348,7 @@ describe('Update 8-0-0', () => {
.runSchematicAsync('update-8.0.0', {}, initialTree)
.toPromise();
- const defaultCollection = readJsonInTree(tree, 'angular.json').cli
+ const defaultCollection = readJsonInTree(tree, 'workspace.json').cli
.defaultCollection;
expect(defaultCollection).toEqual('@nrwl/express');
});
@@ -368,7 +369,7 @@ describe('Update 8-0-0', () => {
.runSchematicAsync('update-8.0.0', {}, initialTree)
.toPromise();
- const defaultCollection = readJsonInTree(tree, 'angular.json').cli
+ const defaultCollection = readJsonInTree(tree, 'workspace.json').cli
.defaultCollection;
expect(defaultCollection).toEqual('@nrwl/express');
});
@@ -385,7 +386,7 @@ describe('Update 8-0-0', () => {
.toPromise();
initialTree = await schematicRunner
.callRule(
- updateJsonInTree('angular.json', json => ({
+ updateJsonInTree('workspace.json', json => ({
...json,
projects: {}
})),
@@ -396,7 +397,7 @@ describe('Update 8-0-0', () => {
.runSchematicAsync('update-8.0.0', {}, initialTree)
.toPromise();
- const defaultCollection = readJsonInTree(tree, 'angular.json').cli
+ const defaultCollection = readJsonInTree(tree, 'workspace.json').cli
.defaultCollection;
expect(defaultCollection).toEqual('@nrwl/workspace');
});
diff --git a/packages/schematics/migrations/update-8-0-0/update-8-0-0.ts b/packages/schematics/migrations/update-8-0-0/update-8-0-0.ts
index 187da9be1c..7b043d9995 100644
--- a/packages/schematics/migrations/update-8-0-0/update-8-0-0.ts
+++ b/packages/schematics/migrations/update-8-0-0/update-8-0-0.ts
@@ -11,7 +11,8 @@ import {
insert,
readJsonInTree,
updateJsonInTree,
- addUpdateTask
+ addUpdateTask,
+ updateWorkspaceInTree
} from '@nrwl/workspace';
import {
createSourceFile,
@@ -31,7 +32,7 @@ function addDependencies() {
return (host: Tree, context: SchematicContext) => {
const dependencies = readJsonInTree(host, 'package.json').dependencies;
const builders = new Set();
- const projects = readJsonInTree(host, 'angular.json').projects;
+ const projects = readJsonInTree(host, 'workspace.json').projects;
Object.values(projects)
.filter(
project =>
@@ -110,7 +111,7 @@ const updateUpdateScript = updateJsonInTree('package.json', json => {
return json;
});
-const updateBuilders = updateJsonInTree('angular.json', json => {
+const updateBuilders = updateWorkspaceInTree(json => {
if (!json.projects) {
return json;
}
@@ -285,7 +286,7 @@ const updateDefaultCollection = (host: Tree, context: SchematicContext) => {
'package.json'
);
- return updateJsonInTree('angular.json', json => {
+ return updateWorkspaceInTree(json => {
json.cli = json.cli || {};
if (dependencies['@nrwl/angular']) {
json.cli.defaultCollection = '@nrwl/angular';
diff --git a/packages/schematics/src/migrator/migrator.ts b/packages/schematics/src/migrator/migrator.ts
index 5be556b8d5..5b1edd6a35 100644
--- a/packages/schematics/src/migrator/migrator.ts
+++ b/packages/schematics/src/migrator/migrator.ts
@@ -1,7 +1,7 @@
import * as fs from 'fs';
import * as path from 'path';
-import { updateJsonFile, readCliConfigFile } from '@nrwl/workspace';
+import { updateJsonFile, readWorkspaceConfigPath } from '@nrwl/workspace';
type Migration = { description: string; run(): void };
type MigrationName = { name: string; migration: Migration };
@@ -32,7 +32,7 @@ updateLatestMigration();
console.log('All migrations run successfully');
function readLatestMigration(): string {
- const angularCli = readCliConfigFile();
+ const angularCli = readWorkspaceConfigPath();
return angularCli.project.latestMigration;
}
diff --git a/packages/tao/index.ts b/packages/tao/index.ts
new file mode 100644
index 0000000000..538d814790
--- /dev/null
+++ b/packages/tao/index.ts
@@ -0,0 +1,44 @@
+#!/usr/bin/env node
+import './src/compat/angular-cli-compat';
+
+export async function invokeCommand(
+ command: string,
+ root: string,
+ commandArgs: string[]
+) {
+ if (command === undefined) {
+ command = 'help';
+ }
+ switch (command) {
+ case 'new':
+ return (await import('./src/commands/generate')).taoNew(
+ root,
+ commandArgs
+ );
+ case 'generate':
+ case 'g':
+ return (await import('./src/commands/generate')).generate(
+ root,
+ commandArgs
+ );
+ case 'run':
+ case 'r':
+ return (await import('./src/commands/run')).run(root, commandArgs);
+ case 'help':
+ case '--help':
+ return (await import('./src/commands/help')).printHelp();
+ default:
+ // this is to make `tao test mylib` same as `tao run mylib:test`
+ return (await import('./src/commands/run')).run(root, [
+ `${commandArgs[0]}:${command}`,
+ ...commandArgs.slice(1)
+ ]);
+ }
+}
+
+export async function invokeCli(root: string, args: string[]) {
+ const [command, ...commandArgs] = args;
+ process.exit(await invokeCommand(command, root, commandArgs));
+}
+
+invokeCli(process.cwd(), process.argv.slice(2));
diff --git a/packages/tao/package.json b/packages/tao/package.json
new file mode 100644
index 0000000000..8911fa4a71
--- /dev/null
+++ b/packages/tao/package.json
@@ -0,0 +1,41 @@
+{
+ "name": "@nrwl/tao",
+ "version": "0.0.1",
+ "description": "CLI for generating code and running commands",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/nrwl/nx.git"
+ },
+ "keywords": [
+ "Monorepo",
+ "Angular",
+ "React",
+ "Web",
+ "Node",
+ "Nest",
+ "Jest",
+ "Cypress",
+ "CLI"
+ ],
+ "main": "index.js",
+ "types": "index.d.ts",
+ "author": "Victor Savkin",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/nrwl/nx/issues"
+ },
+ "bin": {
+ "tao": "./index.js"
+ },
+ "homepage": "https://nx.dev",
+ "peerDependencies": {
+ "@nrwl/workspace": "*"
+ },
+ "dependencies": {
+ "@angular-devkit/schematics": "8.1.1",
+ "@angular-devkit/core": "8.1.1",
+ "@angular-devkit/architect": "0.801.1",
+ "inquirer": "^6.3.1",
+ "minimist": "^1.2.0"
+ }
+}
diff --git a/packages/tao/src/commands/generate.ts b/packages/tao/src/commands/generate.ts
new file mode 100644
index 0000000000..9f53090a53
--- /dev/null
+++ b/packages/tao/src/commands/generate.ts
@@ -0,0 +1,354 @@
+import {
+ convertToCamelCase,
+ handleErrors,
+ Schema,
+ coerceTypes
+} from '../shared/params';
+import {
+ JsonObject,
+ logging,
+ normalize,
+ schema,
+ tags,
+ terminal,
+ virtualFs,
+ experimental
+} from '@angular-devkit/core';
+import { DryRunEvent, HostTree, Schematic } from '@angular-devkit/schematics';
+import { NodeJsSyncHost } from '@angular-devkit/core/node';
+import { NodeWorkflow } from '@angular-devkit/schematics/tools';
+import * as inquirer from 'inquirer';
+import { logger } from '../shared/logger';
+import { printHelp, commandName } from '../shared/print-help';
+import * as fs from 'fs';
+import minimist = require('minimist');
+
+interface GenerateOptions {
+ collectionName: string;
+ schematicName: string;
+ schematicOptions: { [k: string]: string };
+ help: boolean;
+ debug: boolean;
+ dryRun: boolean;
+ force: boolean;
+ interactive: boolean;
+ defaults: boolean;
+}
+
+function throwInvalidInvocation() {
+ throw new Error(
+ `Specify the schematic name (e.g., ${commandName} generate collection-name:schematic-name)`
+ );
+}
+
+function parseGenerateOpts(
+ args: string[],
+ mode: 'generate' | 'new',
+ defaultCollection: string | null
+): GenerateOptions {
+ const schematicOptions = convertToCamelCase(
+ minimist(args, {
+ boolean: ['help', 'dryRun', 'debug', 'force', 'interactive'],
+ alias: {
+ dryRun: 'dry-run'
+ },
+ default: {
+ debug: false,
+ dryRun: false,
+ interactive: true
+ }
+ })
+ );
+
+ let collectionName = null;
+ let schematicName = null;
+ if (mode === 'generate') {
+ if (!schematicOptions['_'] || schematicOptions['_'].length === 0) {
+ throwInvalidInvocation();
+ }
+ [collectionName, schematicName] = schematicOptions['_'].shift()!.split(':');
+ if (!schematicName) {
+ schematicName = collectionName;
+ collectionName = defaultCollection;
+ }
+ } else {
+ collectionName = schematicOptions.collection;
+ schematicName = '';
+ }
+
+ if (!collectionName) {
+ throwInvalidInvocation();
+ }
+
+ const res = {
+ collectionName,
+ schematicName,
+ schematicOptions,
+ help: schematicOptions.help,
+ debug: schematicOptions.debug,
+ dryRun: schematicOptions.dryRun,
+ force: schematicOptions.force,
+ interactive: schematicOptions.interactive,
+ defaults: schematicOptions.defaults
+ };
+
+ delete schematicOptions.debug;
+ delete schematicOptions.dryRun;
+ delete schematicOptions.force;
+ delete schematicOptions.interactive;
+ delete schematicOptions.defaults;
+ delete schematicOptions.help;
+ delete schematicOptions['--'];
+ return res;
+}
+
+function createRecorder(record: any, logger: logging.Logger) {
+ return (event: DryRunEvent) => {
+ const eventPath = event.path.startsWith('/')
+ ? event.path.substr(1)
+ : event.path;
+ if (event.kind === 'error') {
+ record.error = true;
+ logger.warn(
+ `ERROR! ${eventPath} ${
+ event.description == 'alreadyExist'
+ ? 'already exists'
+ : 'does not exist.'
+ }.`
+ );
+ } else if (event.kind === 'update') {
+ record.loggingQueue.push(
+ tags.oneLine`${terminal.white('UPDATE')} ${eventPath} (${
+ event.content.length
+ } bytes)`
+ );
+ } else if (event.kind === 'create') {
+ record.loggingQueue.push(
+ tags.oneLine`${terminal.green('CREATE')} ${eventPath} (${
+ event.content.length
+ } bytes)`
+ );
+ } else if (event.kind === 'delete') {
+ record.loggingQueue.push(`${terminal.yellow('DELETE')} ${eventPath}`);
+ } else if (event.kind === 'rename') {
+ record.loggingQueue.push(
+ `${terminal.blue('RENAME')} ${eventPath} => ${event.to}`
+ );
+ }
+ };
+}
+
+function createWorkflow(
+ fsHost: virtualFs.Host,
+ root: string,
+ opts: GenerateOptions
+) {
+ const workflow = new NodeWorkflow(fsHost, {
+ force: opts.force,
+ dryRun: opts.dryRun,
+ packageManager: 'yarn',
+ root: normalize(root)
+ });
+ const _params = opts.schematicOptions._;
+ delete opts.schematicOptions._;
+ workflow.registry.addSmartDefaultProvider('argv', (schema: JsonObject) => {
+ if ('index' in schema) {
+ return _params[Number(schema['index'])];
+ } else {
+ return _params;
+ }
+ });
+
+ if (opts.interactive !== false && isTTY()) {
+ workflow.registry.usePromptProvider(
+ (definitions: Array) => {
+ const questions: inquirer.Questions = definitions.map(definition => {
+ const question = {
+ name: definition.id,
+ message: definition.message,
+ default: definition.default as any
+ } as any;
+
+ const validator = definition.validator;
+ if (validator) {
+ question.validate = (input: any) => validator(input);
+ }
+
+ switch (definition.type) {
+ case 'confirmation':
+ question.type = 'confirm';
+ break;
+ case 'list':
+ question.type = !!definition.multiselect ? 'checkbox' : 'list';
+ question.choices =
+ definition.items &&
+ definition.items.map(item => {
+ if (typeof item == 'string') {
+ return item;
+ } else {
+ return {
+ name: item.label,
+ value: item.value
+ };
+ }
+ });
+ break;
+ default:
+ question.type = definition.type;
+ break;
+ }
+ return question;
+ });
+
+ return inquirer.prompt(questions);
+ }
+ );
+ }
+ return workflow;
+}
+
+function getCollection(workflow: NodeWorkflow, name: string) {
+ const collection = workflow.engine.createCollection(name);
+ if (!collection) throw new Error(`Cannot find collection '${name}'`);
+ return collection;
+}
+
+function printGenHelp(opts: GenerateOptions, schema: Schema) {
+ printHelp(
+ `${commandName} generate ${opts.collectionName}:${opts.schematicName}`,
+ schema
+ );
+}
+
+async function getSchematicDefaults(
+ root: string,
+ collection: string,
+ schematic: string
+) {
+ const workspace = await new experimental.workspace.Workspace(
+ normalize(root) as any,
+ new NodeJsSyncHost()
+ )
+ .loadWorkspaceFromHost('workspace.json' as any)
+ .toPromise();
+
+ let result = {};
+ if (workspace.getSchematics()) {
+ const schematicObject = workspace.getSchematics()[
+ `${collection}:${schematic}`
+ ];
+ if (schematicObject) {
+ result = { ...result, ...(schematicObject as {}) };
+ }
+ const collectionObject = workspace.getSchematics()[collection];
+ if (
+ typeof collectionObject == 'object' &&
+ !Array.isArray(collectionObject)
+ ) {
+ result = { ...result, ...(collectionObject[schematic] as {}) };
+ }
+ }
+ return result;
+}
+
+async function runSchematic(
+ root: string,
+ workflow: NodeWorkflow,
+ logger: logging.Logger,
+ opts: GenerateOptions,
+ schematic: Schematic
+): Promise {
+ const flattenedSchema = await workflow.registry
+ .flatten(schematic.description.schemaJson!)
+ .toPromise();
+
+ if (opts.help) {
+ printGenHelp(opts, flattenedSchema as any);
+ } else {
+ const defaults =
+ opts.schematicName === 'tao-new'
+ ? {}
+ : await getSchematicDefaults(
+ root,
+ opts.collectionName,
+ opts.schematicName
+ );
+ const record = { loggingQueue: [] as string[], error: false };
+ workflow.reporter.subscribe(createRecorder(record, logger));
+ const schematicOptions = coerceTypes(
+ opts.schematicOptions,
+ flattenedSchema as any
+ );
+ await workflow
+ .execute({
+ collection: opts.collectionName,
+ schematic: opts.schematicName,
+ options: { ...defaults, ...schematicOptions },
+ debug: opts.debug,
+ logger
+ })
+ .toPromise();
+ if (!record.error) {
+ record.loggingQueue.forEach(log => logger.info(log));
+ }
+ if (opts.dryRun) {
+ logger.warn(`\nNOTE: The "dryRun" flag means no changes were made.`);
+ }
+ }
+ return 0;
+}
+
+export async function generate(root: string, args: string[]) {
+ return handleErrors(logger, async () => {
+ const fsHost = new virtualFs.ScopedHost(
+ new NodeJsSyncHost(),
+ normalize(root)
+ );
+ const opts = parseGenerateOpts(
+ args,
+ 'generate',
+ await readDefaultCollection(fsHost)
+ );
+ const workflow = createWorkflow(fsHost, root, opts);
+ const collection = getCollection(workflow, opts.collectionName);
+ const schematic = collection.createSchematic(opts.schematicName, true);
+ return runSchematic(
+ root,
+ workflow,
+ logger,
+ { ...opts, schematicName: schematic.description.name },
+ schematic
+ );
+ });
+}
+
+async function readDefaultCollection(host: virtualFs.Host) {
+ const workspaceJson = JSON.parse(
+ new HostTree(host).read('workspace.json')!.toString()
+ );
+ return workspaceJson.cli ? workspaceJson.cli.defaultCollection : null;
+}
+
+export async function taoNew(root: string, args: string[]) {
+ return handleErrors(logger, async () => {
+ const fsHost = new virtualFs.ScopedHost(
+ new NodeJsSyncHost(),
+ normalize(root)
+ );
+ const opts = parseGenerateOpts(args, 'new', null);
+ const workflow = createWorkflow(fsHost, root, opts);
+ const collection = getCollection(workflow, opts.collectionName);
+ const schematic = collection.createSchematic('tao-new', true);
+ return runSchematic(
+ root,
+ workflow,
+ logger,
+ { ...opts, schematicName: schematic.description.name },
+ schematic
+ );
+ });
+}
+
+function isTTY(): boolean {
+ return !!process.stdout.isTTY && !!process.env['CI'];
+}
diff --git a/packages/tao/src/commands/help.ts b/packages/tao/src/commands/help.ts
new file mode 100644
index 0000000000..9b50bcf218
--- /dev/null
+++ b/packages/tao/src/commands/help.ts
@@ -0,0 +1,35 @@
+import { tags } from '@angular-devkit/core';
+import { logger } from '../shared/logger';
+import { toolDescription, commandName } from '../shared/print-help';
+import { terminal } from '@angular-devkit/core';
+
+export function printHelp() {
+ logger.info(tags.stripIndent`
+ ${terminal.bold(toolDescription)}
+
+ ${terminal.bold('Create a new project.')}
+ ${commandName} new ${terminal.grey(
+ '[project-name] [--collection=schematic-collection] [options, ...]'
+ )}
+
+ ${terminal.bold('Generate code.')}
+ ${commandName} generate ${terminal.grey(
+ '[schematic-collection:][schematic] [options, ...]'
+ )}
+ ${commandName} g ${terminal.grey(
+ '[schematic-collection:][schematic] [options, ...]'
+ )}
+
+ ${terminal.bold('Run target.')}
+ ${commandName} run ${terminal.grey(
+ '[project][:target][:configuration] [options, ...]'
+ )}
+ ${commandName} r ${terminal.grey(
+ '[project][:target][:configuration] [options, ...]'
+ )}
+
+ You can also use the infix notation to run a target:
+ ${commandName} [target] [project] [options, ...]
+ `);
+ return 0;
+}
diff --git a/packages/tao/src/commands/run.ts b/packages/tao/src/commands/run.ts
new file mode 100644
index 0000000000..ba9d237420
--- /dev/null
+++ b/packages/tao/src/commands/run.ts
@@ -0,0 +1,123 @@
+import {
+ convertToCamelCase,
+ handleErrors,
+ Schema,
+ coerceTypes
+} from '../shared/params';
+import {
+ experimental,
+ json,
+ normalize,
+ schema,
+ tags
+} from '@angular-devkit/core';
+import { NodeJsSyncHost } from '@angular-devkit/core/node';
+import { WorkspaceNodeModulesArchitectHost } from '@angular-devkit/architect/node';
+import { Architect } from '@angular-devkit/architect';
+import { logger } from '../shared/logger';
+import minimist = require('minimist');
+import { printHelp, commandName } from '../shared/print-help';
+
+export interface RunOptions {
+ project: string;
+ target: string;
+ configuration: string;
+ help: boolean;
+ runOptions: { [k: string]: any };
+}
+
+function throwInvalidInvocation() {
+ throw new Error(
+ `Specify the project name and the target (e.g., ${commandName} run proj:build)`
+ );
+}
+
+function parseRunOpts(
+ args: string[],
+ defaultProjectName: string | null
+): RunOptions {
+ const runOptions = convertToCamelCase(
+ minimist(args, {
+ boolean: ['help', 'prod'],
+ string: ['configuration', 'project']
+ })
+ );
+ const help = runOptions.help;
+ if (!runOptions._ || !runOptions._[0]) {
+ throwInvalidInvocation();
+ }
+ let [project, target, configuration] = runOptions._[0].split(':');
+ if (!project && defaultProjectName) project = defaultProjectName;
+ if (!project || !target) {
+ throwInvalidInvocation();
+ }
+ if (runOptions.configuration) {
+ configuration = runOptions.configuration;
+ }
+ if (runOptions.prod) {
+ configuration = 'production';
+ }
+ if (runOptions.project) {
+ project = runOptions.project;
+ }
+ const res = { project, target, configuration, help, runOptions };
+ delete runOptions['help'];
+ delete runOptions['_'];
+ delete runOptions['configuration'];
+ delete runOptions['prod'];
+ delete runOptions['project'];
+
+ return res;
+}
+
+function printRunHelp(opts: RunOptions, schema: Schema) {
+ printHelp(`${commandName} run ${opts.project}:${opts.target}`, schema);
+}
+
+export async function run(root: string, args: string[]) {
+ return handleErrors(logger, async () => {
+ const fsHost = new NodeJsSyncHost();
+ const workspace = await new experimental.workspace.Workspace(
+ normalize(root) as any,
+ fsHost
+ )
+ .loadWorkspaceFromHost('workspace.json' as any)
+ .toPromise();
+ const opts = parseRunOpts(args, workspace.getDefaultProjectName());
+
+ const registry = new json.schema.CoreSchemaRegistry();
+ registry.addPostTransform(schema.transforms.addUndefinedDefaults);
+ const architectHost = new WorkspaceNodeModulesArchitectHost(
+ workspace,
+ root
+ );
+ const architect = new Architect(architectHost, registry);
+
+ const builderConf = await architectHost.getBuilderNameForTarget({
+ project: opts.project,
+ target: opts.target
+ });
+ const builderDesc = await architectHost.resolveBuilder(builderConf);
+ const flattenedSchema = await registry
+ .flatten(builderDesc.optionSchema! as json.JsonObject)
+ .toPromise();
+ if (opts.help) {
+ printRunHelp(opts, flattenedSchema as any);
+ return 0;
+ } else {
+ const runOptions = coerceTypes(opts.runOptions, flattenedSchema as any);
+ const run = await architect.scheduleTarget(
+ {
+ project: opts.project,
+ target: opts.target,
+ configuration: opts.configuration
+ },
+ runOptions,
+ { logger }
+ );
+ const result = await run.output.toPromise();
+ await run.stop();
+ return result.success ? 0 : 1;
+ }
+ });
+}
diff --git a/packages/tao/src/compat/angular-cli-compat.ts b/packages/tao/src/compat/angular-cli-compat.ts
new file mode 100644
index 0000000000..9a47abd1dd
--- /dev/null
+++ b/packages/tao/src/compat/angular-cli-compat.ts
@@ -0,0 +1,24 @@
+const Module = require('module');
+const originalRequire = Module.prototype.require;
+
+Module.prototype.require = function() {
+ const result = originalRequire.apply(this, arguments);
+ if (arguments[0].startsWith('@angular-devkit/core')) {
+ const Workspace = originalRequire.apply(this, [
+ `@angular-devkit/core/src/experimental/workspace`
+ ]).Workspace;
+ Workspace._workspaceFileNames = [
+ 'workspace.json',
+ ...Workspace._workspaceFileNames
+ ];
+ const core = originalRequire.apply(this, [
+ `@angular-devkit/core/src/workspace/core`
+ ]);
+ core._test_addWorkspaceFile('workspace.json', core.WorkspaceFormat.JSON);
+ }
+ return result;
+};
+
+try {
+ require('@angular-devkit/build-angular/src/utils/version').Version.assertCompatibleAngularVersion = () => {};
+} catch (e) {}
diff --git a/packages/tao/src/shared/logger.ts b/packages/tao/src/shared/logger.ts
new file mode 100644
index 0000000000..09d4c19d45
--- /dev/null
+++ b/packages/tao/src/shared/logger.ts
@@ -0,0 +1,13 @@
+import { createConsoleLogger } from '@angular-devkit/core/node';
+import { terminal } from '@angular-devkit/core';
+
+export const logger = createConsoleLogger(
+ false,
+ process.stdout,
+ process.stderr,
+ {
+ warn: s => terminal.bold(terminal.yellow(s)),
+ error: s => terminal.bold(terminal.red(s)),
+ fatal: s => terminal.bold(terminal.red(s))
+ }
+);
diff --git a/packages/tao/src/shared/params.spec.ts b/packages/tao/src/shared/params.spec.ts
new file mode 100644
index 0000000000..63cb76a6f7
--- /dev/null
+++ b/packages/tao/src/shared/params.spec.ts
@@ -0,0 +1,35 @@
+import { convertToCamelCase } from './params';
+
+describe('params', () => {
+ describe('convertToCamelCase', () => {
+ it('should convert dash case to camel case', () => {
+ expect(
+ convertToCamelCase({
+ 'one-two': 1
+ })
+ ).toEqual({
+ oneTwo: 1
+ });
+ });
+
+ it('should not convert camel case', () => {
+ expect(
+ convertToCamelCase({
+ oneTwo: 1
+ })
+ ).toEqual({
+ oneTwo: 1
+ });
+ });
+
+ it('should handle mixed case', () => {
+ expect(
+ convertToCamelCase({
+ 'one-Two': 1
+ })
+ ).toEqual({
+ oneTwo: 1
+ });
+ });
+ });
+});
diff --git a/packages/tao/src/shared/params.ts b/packages/tao/src/shared/params.ts
new file mode 100644
index 0000000000..8a30a61b1f
--- /dev/null
+++ b/packages/tao/src/shared/params.ts
@@ -0,0 +1,50 @@
+import { logging } from '@angular-devkit/core';
+import { UnsuccessfulWorkflowExecution } from '@angular-devkit/schematics';
+
+export type Schema = {
+ properties: { [p: string]: any };
+ required: string[];
+ description: string;
+};
+
+export async function handleErrors(logger: logging.Logger, fn: Function) {
+ try {
+ return await fn();
+ } catch (err) {
+ if (err instanceof UnsuccessfulWorkflowExecution) {
+ logger.fatal('The Schematic workflow failed. See above.');
+ } else {
+ logger.fatal(err.message);
+ }
+ return 1;
+ }
+}
+
+export function convertToCamelCase(parsed: {
+ [k: string]: any;
+}): { [k: string]: any } {
+ return Object.keys(parsed).reduce(
+ (m, c) => ({ ...m, [camelCase(c)]: parsed[c] }),
+ {}
+ );
+}
+function camelCase(input: string): string {
+ if (input.indexOf('-') > 1) {
+ return input
+ .toLowerCase()
+ .replace(/-(.)/g, (match, group1) => group1.toUpperCase());
+ } else {
+ return input;
+ }
+}
+
+export function coerceTypes(opts: { [k: string]: any }, schema: Schema) {
+ Object.keys(opts).forEach(k => {
+ if (schema.properties[k] && schema.properties[k].type == 'boolean') {
+ opts[k] = opts[k] === true || opts[k] === 'true';
+ } else if (schema.properties[k] && schema.properties[k].type == 'number') {
+ opts[k] = Number(opts[k]);
+ }
+ });
+ return opts;
+}
diff --git a/packages/tao/src/shared/print-help.ts b/packages/tao/src/shared/print-help.ts
new file mode 100644
index 0000000000..8223904ce9
--- /dev/null
+++ b/packages/tao/src/shared/print-help.ts
@@ -0,0 +1,44 @@
+import { Schema } from './params';
+import { logger } from './logger';
+import { tags } from '@angular-devkit/core';
+import { terminal } from '@angular-devkit/core';
+
+export function printHelp(header: string, schema: Schema) {
+ const allPositional = Object.keys(schema.properties).filter(key => {
+ const p = schema.properties[key];
+ return p['$default'] && p['$default']['$source'] === 'argv';
+ });
+ const positional = allPositional.length > 0 ? ` [${allPositional[0]}]` : '';
+ const args = Object.keys(schema.properties)
+ .map(name => {
+ const d = schema.properties[name];
+ const def = d.default ? ` (default: ${d.default})` : '';
+ return formatOption(name, `${d.description}${def}`);
+ })
+ .join('\n');
+
+ logger.info(tags.stripIndent`
+${terminal.bold(header + positional + ' [options,...]')}
+
+${terminal.bold('Options')}:
+${args}
+${formatOption('help', 'Show available options for project target.')}
+ `);
+}
+
+function formatOption(name: string, description: string) {
+ return ` --${(name + ' ').substr(0, 22)}${terminal.grey(
+ description
+ )}`;
+}
+
+export let commandName = 'nx';
+export let toolDescription = 'Nx - Extensible Dev Tools for Monorepos.';
+
+export function setCommandNameAndDescription(
+ name: string,
+ description: string
+) {
+ commandName = name;
+ toolDescription = description;
+}
diff --git a/packages/web/src/schematics/application/application.spec.ts b/packages/web/src/schematics/application/application.spec.ts
index 3a3c64a58a..99f752e313 100644
--- a/packages/web/src/schematics/application/application.spec.ts
+++ b/packages/web/src/schematics/application/application.spec.ts
@@ -13,15 +13,15 @@ describe('app', () => {
});
describe('not nested', () => {
- it('should update angular.json', async () => {
+ it('should update workspace.json', async () => {
const tree = await runSchematic('app', { name: 'myApp' }, appTree);
- const angularJson = readJsonInTree(tree, '/angular.json');
+ const workspaceJson = readJsonInTree(tree, '/workspace.json');
- expect(angularJson.projects['my-app'].root).toEqual('apps/my-app');
- expect(angularJson.projects['my-app-e2e'].root).toEqual(
+ expect(workspaceJson.projects['my-app'].root).toEqual('apps/my-app');
+ expect(workspaceJson.projects['my-app-e2e'].root).toEqual(
'apps/my-app-e2e'
);
- expect(angularJson.defaultProject).toEqual('my-app');
+ expect(workspaceJson.defaultProject).toEqual('my-app');
});
it('should update nx.json', async () => {
@@ -78,18 +78,18 @@ describe('app', () => {
});
describe('nested', () => {
- it('should update angular.json', async () => {
+ it('should update workspace.json', async () => {
const tree = await runSchematic(
'app',
{ name: 'myApp', directory: 'myDir' },
appTree
);
- const angularJson = readJsonInTree(tree, '/angular.json');
+ const workspaceJson = readJsonInTree(tree, '/workspace.json');
- expect(angularJson.projects['my-dir-my-app'].root).toEqual(
+ expect(workspaceJson.projects['my-dir-my-app'].root).toEqual(
'apps/my-dir/my-app'
);
- expect(angularJson.projects['my-dir-my-app-e2e'].root).toEqual(
+ expect(workspaceJson.projects['my-dir-my-app-e2e'].root).toEqual(
'apps/my-dir/my-app-e2e'
);
});
@@ -217,8 +217,8 @@ describe('app', () => {
},
appTree
);
- const angularJson = readJsonInTree(tree, 'angular.json');
- const architectConfig = angularJson.projects['my-app'].architect;
+ const workspaceJson = readJsonInTree(tree, 'workspace.json');
+ const architectConfig = workspaceJson.projects['my-app'].architect;
expect(architectConfig.build.builder).toEqual('@nrwl/web:build');
expect(architectConfig.build.options).toEqual({
assets: ['apps/my-app/src/favicon.ico', 'apps/my-app/src/assets'],
@@ -262,8 +262,8 @@ describe('app', () => {
},
appTree
);
- const angularJson = readJsonInTree(tree, 'angular.json');
- const architectConfig = angularJson.projects['my-app'].architect;
+ const workspaceJson = readJsonInTree(tree, 'workspace.json');
+ const architectConfig = workspaceJson.projects['my-app'].architect;
expect(architectConfig.serve.builder).toEqual('@nrwl/web:dev-server');
expect(architectConfig.serve.options).toEqual({
buildTarget: 'my-app:build'
@@ -281,11 +281,12 @@ describe('app', () => {
},
appTree
);
- const angularJson = readJsonInTree(tree, 'angular.json');
- expect(angularJson.projects['my-app'].architect.lint).toEqual({
+ const workspaceJson = readJsonInTree(tree, 'workspace.json');
+
+ expect(workspaceJson.projects['my-app'].architect.lint).toEqual({
builder: '@angular-devkit/build-angular:tslint',
options: {
- exclude: ['**/node_modules/**'],
+ exclude: ['**/node_modules/**', '!apps/my-app/**'],
tsConfig: [
'apps/my-app/tsconfig.app.json',
'apps/my-app/tsconfig.spec.json'
@@ -318,10 +319,10 @@ describe('app', () => {
expect(tree.exists('apps/my-app/src/app/app.spec.ts')).toBeFalsy();
expect(tree.exists('apps/my-app/tsconfig.spec.json')).toBeFalsy();
expect(tree.exists('apps/my-app/jest.config.js')).toBeFalsy();
- const angularJson = readJsonInTree(tree, 'angular.json');
- expect(angularJson.projects['my-app'].architect.test).toBeUndefined();
+ const workspaceJson = readJsonInTree(tree, 'workspace.json');
+ expect(workspaceJson.projects['my-app'].architect.test).toBeUndefined();
expect(
- angularJson.projects['my-app'].architect.lint.options.tsConfig
+ workspaceJson.projects['my-app'].architect.lint.options.tsConfig
).toEqual(['apps/my-app/tsconfig.app.json']);
});
});
@@ -334,8 +335,8 @@ describe('app', () => {
appTree
);
expect(tree.exists('apps/my-app-e2e')).toBeFalsy();
- const angularJson = readJsonInTree(tree, 'angular.json');
- expect(angularJson.projects['my-app-e2e']).toBeUndefined();
+ const workspaceJson = readJsonInTree(tree, 'workspace.json');
+ expect(workspaceJson.projects['my-app-e2e']).toBeUndefined();
});
});
});
diff --git a/packages/web/src/schematics/application/application.ts b/packages/web/src/schematics/application/application.ts
index 89e10dc1ef..4f3d4fbcd3 100644
--- a/packages/web/src/schematics/application/application.ts
+++ b/packages/web/src/schematics/application/application.ts
@@ -21,7 +21,10 @@ import {
names,
offsetFromRoot,
getNpmScope,
- formatFiles
+ formatFiles,
+ updateWorkspaceInTree,
+ generateProjectLint,
+ addGlobalLint
} from '@nrwl/workspace';
import ngAdd from '../ng-add/ng-add';
@@ -58,7 +61,7 @@ function updateNxJson(options: NormalizedSchema): Rule {
}
function addProject(options: NormalizedSchema): Rule {
- return updateJsonInTree('angular.json', json => {
+ return updateWorkspaceInTree(json => {
const architect: { [key: string]: any } = {};
architect.build = {
@@ -122,15 +125,11 @@ function addProject(options: NormalizedSchema): Rule {
}
};
- architect.lint = {
- builder: '@angular-devkit/build-angular:tslint',
- options: {
- tsConfig: [
- join(normalize(options.appProjectRoot), 'tsconfig.app.json')
- ],
- exclude: ['**/node_modules/**']
- }
- };
+ architect.lint = generateProjectLint(
+ normalize(options.appProjectRoot),
+ join(normalize(options.appProjectRoot), 'tsconfig.app.json'),
+ options.linter
+ );
json.projects[options.projectName] = {
root: options.appProjectRoot,
@@ -154,6 +153,7 @@ export default function(schema: Schema): Rule {
ngAdd({
skipFormat: true
}),
+ addGlobalLint(options.linter),
createApplicationFiles(options),
updateNxJson(options),
addProject(options),
diff --git a/packages/web/src/schematics/application/schema.d.ts b/packages/web/src/schematics/application/schema.d.ts
index 15edf64391..786900442e 100644
--- a/packages/web/src/schematics/application/schema.d.ts
+++ b/packages/web/src/schematics/application/schema.d.ts
@@ -1,5 +1,3 @@
-import { E2eTestRunner, UnitTestRunner } from '../../utils/test-runners';
-
export interface Schema {
name: string;
prefix?: string;
@@ -7,6 +5,7 @@ export interface Schema {
skipFormat: boolean;
directory?: string;
tags?: string;
- unitTestRunner: UnitTestRunner;
- e2eTestRunner: E2eTestRunner;
+ unitTestRunner: 'jest' | 'none';
+ e2eTestRunner: 'cypress' | 'none';
+ linter: 'eslint' | 'tslint';
}
diff --git a/packages/web/src/schematics/application/schema.json b/packages/web/src/schematics/application/schema.json
index 31599003b5..83d2a389ef 100644
--- a/packages/web/src/schematics/application/schema.json
+++ b/packages/web/src/schematics/application/schema.json
@@ -42,6 +42,12 @@
]
}
},
+ "linter": {
+ "description": "The tool to use for running lint checks.",
+ "type": "string",
+ "enum": ["eslint", "tslint"],
+ "default": "tslint"
+ },
"skipFormat": {
"description": "Skip formatting files",
"type": "boolean",
diff --git a/packages/web/src/schematics/ng-add/ng-add.spec.ts b/packages/web/src/schematics/ng-add/ng-add.spec.ts
index e3c062b51b..f93293e852 100644
--- a/packages/web/src/schematics/ng-add/ng-add.spec.ts
+++ b/packages/web/src/schematics/ng-add/ng-add.spec.ts
@@ -23,13 +23,13 @@ describe('ng-add', () => {
describe('defaultCollection', () => {
it('should be set if none was set before', async () => {
const result = await runSchematic('ng-add', {}, tree);
- const angularJson = readJsonInTree(result, 'angular.json');
- expect(angularJson.cli.defaultCollection).toEqual('@nrwl/web');
+ const workspaceJson = readJsonInTree(result, 'workspace.json');
+ expect(workspaceJson.cli.defaultCollection).toEqual('@nrwl/web');
});
it('should be set if @nrwl/workspace was set before', async () => {
tree = await callRule(
- updateJsonInTree('angular.json', json => {
+ updateJsonInTree('workspace.json', json => {
json.cli = {
defaultCollection: '@nrwl/workspace'
};
@@ -39,13 +39,13 @@ describe('ng-add', () => {
tree
);
const result = await runSchematic('ng-add', {}, tree);
- const angularJson = readJsonInTree(result, 'angular.json');
- expect(angularJson.cli.defaultCollection).toEqual('@nrwl/web');
+ const workspaceJson = readJsonInTree(result, 'workspace.json');
+ expect(workspaceJson.cli.defaultCollection).toEqual('@nrwl/web');
});
it('should not be set if something else was set before', async () => {
tree = await callRule(
- updateJsonInTree('angular.json', json => {
+ updateJsonInTree('workspace.json', json => {
json.cli = {
defaultCollection: '@nrwl/angular'
};
@@ -55,8 +55,8 @@ describe('ng-add', () => {
tree
);
const result = await runSchematic('ng-add', {}, tree);
- const angularJson = readJsonInTree(result, 'angular.json');
- expect(angularJson.cli.defaultCollection).toEqual('@nrwl/angular');
+ const workspaceJson = readJsonInTree(result, 'workspace.json');
+ expect(workspaceJson.cli.defaultCollection).toEqual('@nrwl/angular');
});
});
});
diff --git a/packages/web/src/utils/serve-path.ts b/packages/web/src/utils/serve-path.ts
index 86fade44bd..bfce3d9b4c 100644
--- a/packages/web/src/utils/serve-path.ts
+++ b/packages/web/src/utils/serve-path.ts
@@ -26,12 +26,12 @@ export function _findDefaultServePath(
/^(\w+:)?\/\//.test(baseHref || '') ||
/^(\w+:)?\/\//.test(deployUrl || '')
) {
- // If baseHref or deployUrl is absolute, unsupported by ng serve
+ // If baseHref or deployUrl is absolute, unsupported by nx serve
return null;
}
// normalize baseHref
- // for ng serve the starting base is always `/` so a relative
+ // for nx serve the starting base is always `/` so a relative
// and root relative value are identical
const baseHrefParts = (baseHref || '').split('/').filter(part => part !== '');
if (baseHref && !baseHref.endsWith('/')) {
@@ -42,7 +42,7 @@ export function _findDefaultServePath(
if (deployUrl && deployUrl[0] === '/') {
if (baseHref && baseHref[0] === '/' && normalizedBaseHref !== deployUrl) {
- // If baseHref and deployUrl are root relative and not equivalent, unsupported by ng serve
+ // If baseHref and deployUrl are root relative and not equivalent, unsupported by nx serve
return null;
}
diff --git a/packages/workspace/collection.json b/packages/workspace/collection.json
index e2ecbe2742..68e54b96a1 100644
--- a/packages/workspace/collection.json
+++ b/packages/workspace/collection.json
@@ -30,6 +30,13 @@
"hidden": true
},
+ "tao-new": {
+ "factory": "./src/schematics/tao-new/tao-new",
+ "schema": "./src/schematics/tao-new/schema.json",
+ "description": "Create a workspace",
+ "hidden": true
+ },
+
"library": {
"factory": "./src/schematics/library/library",
"schema": "./src/schematics/library/schema.json",
diff --git a/packages/workspace/index.ts b/packages/workspace/index.ts
index 8ee83c9d5c..340762a715 100644
--- a/packages/workspace/index.ts
+++ b/packages/workspace/index.ts
@@ -11,7 +11,7 @@ export {
renameSync,
updateJsonFile,
readJsonFile,
- readCliConfigFile,
+ readWorkspaceConfigPath,
copyFile
} from './src/utils/fileutils';
export {
@@ -24,10 +24,15 @@ export {
commandsObject,
supportedNxCommands
} from './src/command-line/nx-commands';
-export { readAngularJson, readNxJson, NxJson } from './src/command-line/shared';
+export {
+ readWorkspaceJson,
+ readNxJson,
+ NxJson
+} from './src/command-line/shared';
export {
readJsonInTree,
updateJsonInTree,
+ updateWorkspaceInTree,
insert,
replaceNodeValue,
addDepsToPackageJson,
@@ -45,7 +50,6 @@ export {
getNpmScope,
getWorkspacePath,
replaceAppNameWithPath,
- angularSchematicNames,
editTarget,
parseTarget,
serializeTarget
@@ -53,8 +57,8 @@ export {
export { getWorkspace, updateWorkspace } from './src/utils/workspace';
export { addUpdateTask } from './src/utils/update-task';
+export { addGlobalLint, generateProjectLint } from './src/utils/lint';
-export { closestCli } from './src/utils/app-root';
export { formatFiles } from './src/utils/rules/format-files';
export { deleteFile } from './src/utils/rules/deleteFile';
export * from './src/utils/rules/ng-add';
diff --git a/packages/workspace/migrations.json b/packages/workspace/migrations.json
index 05a285fd44..f91f2ee54b 100644
--- a/packages/workspace/migrations.json
+++ b/packages/workspace/migrations.json
@@ -19,6 +19,11 @@
"version": "8.3.0-beta.1",
"description": "Update Cypress to 3.4",
"factory": "./src/migrations/update-8-3-0/update-cypress-to-34"
+ },
+ "add-nx-script": {
+ "version": "8.4.0-beta.1",
+ "description": "Add 'nx' script to package.json",
+ "factory": "./src/migrations/update-8-4-0/add-nx-script"
}
}
}
diff --git a/packages/workspace/src/builders/run-commands/schema.json b/packages/workspace/src/builders/run-commands/schema.json
index db7759bb34..79e368e3e5 100644
--- a/packages/workspace/src/builders/run-commands/schema.json
+++ b/packages/workspace/src/builders/run-commands/schema.json
@@ -28,7 +28,7 @@
},
"args": {
"type": "string",
- "description": "Extra arguments. You can pass them as follows: ng run project:target --args='--wait=100'. You can them use {args.wait} syntax to interpolate them in angular.json"
+ "description": "Extra arguments. You can pass them as follows: ng run project:target --args='--wait=100'. You can them use {args.wait} syntax to interpolate them in the workspace config file."
}
},
"required": ["commands"]
diff --git a/packages/workspace/src/command-line/affected.ts b/packages/workspace/src/command-line/affected.ts
index 4962763b2d..7c2b962ee3 100644
--- a/packages/workspace/src/command-line/affected.ts
+++ b/packages/workspace/src/command-line/affected.ts
@@ -15,7 +15,7 @@ import {
parseFiles,
getAllProjectsWithTarget,
getAffectedProjectsWithTarget,
- readAngularJson,
+ readWorkspaceJson,
printArgsWarning
} from './shared';
import { generateGraph } from './dep-graph';
@@ -46,8 +46,7 @@ export interface AffectedOptions {
quiet?: boolean;
}
-// Commands that can do `ng [command]`
-const ngCommands = ['build', 'test', 'lint', 'e2e'];
+const commonCommands = ['build', 'test', 'lint', 'e2e'];
export function affected(parsedArgs: YargsAffectedOptions): void {
const target = parsedArgs.target;
@@ -187,25 +186,25 @@ async function runCommand(
output.addVerticalSeparator();
- const angularJson = readAngularJson();
+ const workspaceJson = readWorkspaceJson();
const projectMetadata = new Map();
projects.forEach(project => {
- projectMetadata.set(project, angularJson.projects[project]);
+ projectMetadata.set(project, workspaceJson.projects[project]);
});
- // Make sure the `package.json` has the `ng: "ng"` command needed by `npm-run-all`
+ // Make sure the `package.json` has the `nx: "nx"` command needed by `npm-run-all`
const packageJson = JSON.parse(
fs.readFileSync('./package.json').toString('utf-8')
);
- if (!packageJson.scripts || !packageJson.scripts.ng) {
+ if (!packageJson.scripts || !packageJson.scripts.nx) {
output.error({
title:
- 'The "scripts" section of your `package.json` must contain `"ng": "ng"`',
+ 'The "scripts" section of your `package.json` must contain `"nx": "nx"`',
bodyLines: [
output.colors.gray('...'),
' "scripts": {',
output.colors.gray(' ...'),
- ' "ng": "ng"',
+ ' "nx": "nx"',
output.colors.gray(' ...'),
' }',
output.colors.gray('...')
@@ -216,17 +215,17 @@ async function runCommand(
try {
await runAll(
- projects.map(app => {
- return ngCommands.includes(targetName)
- ? `ng -- ${targetName} --project=${app} ${transformArgs(
+ projects.map(proj => {
+ return commonCommands.includes(targetName)
+ ? `nx -- ${targetName} ${proj} ${transformArgs(
args,
- app,
- projectMetadata.get(app)
+ proj,
+ projectMetadata.get(proj)
).join(' ')} `
- : `ng -- run ${app}:${targetName} ${transformArgs(
+ : `nx -- run ${proj}:${targetName} ${transformArgs(
args,
- app,
- projectMetadata.get(app)
+ proj,
+ projectMetadata.get(proj)
).join(' ')} `;
}),
{
@@ -310,15 +309,6 @@ function filterNxSpecificArgs(parsedArgs: YargsAffectedOptions): string[] {
});
}
-function ngPath() {
- const basePath = path.dirname(
- path.dirname(
- path.dirname(resolve.sync('@angular/cli', { basedir: __dirname }))
- )
- );
- return `"${path.join(basePath, 'bin', 'ng')}"`;
-}
-
/**
* These options are only for getting an array with properties of AffectedOptions.
*
diff --git a/packages/workspace/src/command-line/dep-graph.ts b/packages/workspace/src/command-line/dep-graph.ts
index a28472a8ea..4a78f4c043 100644
--- a/packages/workspace/src/command-line/dep-graph.ts
+++ b/packages/workspace/src/command-line/dep-graph.ts
@@ -4,7 +4,7 @@ import * as opn from 'opn';
import { ProjectNode, ProjectType } from './affected-apps';
import * as yargs from 'yargs';
-import { getProjectNodes, readAngularJson, readNxJson } from './shared';
+import { getProjectNodes, readWorkspaceJson, readNxJson } from './shared';
import * as path from 'path';
import { tmpNameSync } from 'tmp';
import {
@@ -340,9 +340,9 @@ export function generateGraph(
args: UserOptions,
criticalPath?: string[]
): void {
- const angularJson = readAngularJson();
+ const workspaceJson = readWorkspaceJson();
const nxJson = readNxJson();
- const projects: ProjectNode[] = getProjectNodes(angularJson, nxJson);
+ const projects: ProjectNode[] = getProjectNodes(workspaceJson, nxJson);
const json = generateGraphJson(projects, criticalPath || []);
const config = {
diff --git a/packages/workspace/src/command-line/lint.ts b/packages/workspace/src/command-line/lint.ts
index 40d3febd6f..34016af5bc 100644
--- a/packages/workspace/src/command-line/lint.ts
+++ b/packages/workspace/src/command-line/lint.ts
@@ -1,7 +1,7 @@
import {
getProjectNodes,
allFilesInDir,
- readAngularJson,
+ readWorkspaceJson,
readNxJson
} from './shared';
import { WorkspaceIntegrityChecks } from './workspace-integrity-checks';
@@ -10,7 +10,7 @@ import { appRootPath } from '../utils/app-root';
import { output } from './output';
export function workspaceLint() {
- const nodes = getProjectNodes(readAngularJson(), readNxJson());
+ const nodes = getProjectNodes(readWorkspaceJson(), readNxJson());
const cliErrorOutputConfigs = new WorkspaceIntegrityChecks(
nodes,
diff --git a/packages/workspace/src/command-line/nx-commands.ts b/packages/workspace/src/command-line/nx-commands.ts
index 9b2952dc42..afdb2301c9 100644
--- a/packages/workspace/src/command-line/nx-commands.ts
+++ b/packages/workspace/src/command-line/nx-commands.ts
@@ -6,6 +6,7 @@ import { format } from './format';
import { workspaceLint } from './lint';
import { workspaceSchematic } from './workspace-schematic';
import { generateGraph, OutputType } from './dep-graph';
+import { nxVersion } from '../utils/versions';
const noop = (yargs: yargs.Argv): yargs.Argv => yargs;
@@ -37,6 +38,23 @@ export const supportedNxCommands = [
*/
export const commandsObject = yargs
.usage('Extensible Dev Tools for Monorepos')
+ .command(
+ 'run [project][:target][:configuration] [options, ...]',
+ `
+ Run a target for a project
+ (e.g., nx run myapp:serve:production).
+
+ You can also use the infix notation to run a target:
+ (e.g., nx serve myapp --configuration=production)
+ `
+ )
+ .command(
+ 'generate [schematic-collection:][schematic] [options, ...]',
+ `
+ Generate code
+ (e.g., nx generate @nrwl/web:app myapp).
+ `
+ )
.command(
'affected',
'Run task for affected projects',
@@ -161,7 +179,7 @@ export const commandsObject = yargs
() => workspaceSchematic(process.argv.slice(3))
)
.help('help')
- .version()
+ .version(nxVersion)
.option('quiet', { type: 'boolean', hidden: true });
function withFormatOptions(yargs: yargs.Argv): yargs.Argv {
diff --git a/packages/workspace/src/command-line/nx-migrate.ts b/packages/workspace/src/command-line/nx-migrate.ts
index 493405bee1..5e137949ba 100644
--- a/packages/workspace/src/command-line/nx-migrate.ts
+++ b/packages/workspace/src/command-line/nx-migrate.ts
@@ -1,7 +1,7 @@
import * as fs from 'fs';
import * as path from 'path';
-import { readCliConfigFile, updateJsonFile } from '../utils/fileutils';
+import { readWorkspaceConfigPath, updateJsonFile } from '../utils/fileutils';
type Migration = { description: string; run(): void };
type MigrationName = { name: string; migration: Migration };
@@ -32,7 +32,7 @@ updateLatestMigration();
console.log('All migrations run successfully');
function readLatestMigration(): string {
- const angularCli = readCliConfigFile();
+ const angularCli = readWorkspaceConfigPath();
return angularCli.project.latestMigration;
}
diff --git a/packages/workspace/src/command-line/shared.spec.ts b/packages/workspace/src/command-line/shared.spec.ts
index 55944140f7..8d2d5a0db5 100644
--- a/packages/workspace/src/command-line/shared.spec.ts
+++ b/packages/workspace/src/command-line/shared.spec.ts
@@ -8,7 +8,7 @@ import { ProjectType, ProjectNode } from './affected-apps';
describe('assertWorkspaceValidity', () => {
let mockNxJson;
- let mockAngularJson;
+ let mockWorkspaceJson;
beforeEach(() => {
mockNxJson = {
@@ -33,7 +33,7 @@ describe('assertWorkspaceValidity', () => {
}
}
};
- mockAngularJson = {
+ mockWorkspaceJson = {
projects: {
app1: {},
'app1-e2e': {},
@@ -46,23 +46,23 @@ describe('assertWorkspaceValidity', () => {
});
it('should not throw for a valid workspace', () => {
- assertWorkspaceValidity(mockAngularJson, mockNxJson);
+ assertWorkspaceValidity(mockWorkspaceJson, mockNxJson);
});
- it('should throw for a missing project in angular.json', () => {
- delete mockAngularJson.projects.app1;
+ it('should throw for a missing project in workspace.json', () => {
+ delete mockWorkspaceJson.projects.app1;
try {
- assertWorkspaceValidity(mockAngularJson, mockNxJson);
+ assertWorkspaceValidity(mockWorkspaceJson, mockNxJson);
fail('Did not throw');
} catch (e) {
- expect(e.message).toContain('projects are missing in angular.json');
+ expect(e.message).toContain('projects are missing in');
}
});
it('should throw for a missing project in nx.json', () => {
delete mockNxJson.projects.app1;
try {
- assertWorkspaceValidity(mockAngularJson, mockNxJson);
+ assertWorkspaceValidity(mockWorkspaceJson, mockNxJson);
fail('Did not throw');
} catch (e) {
expect(e.message).toContain('projects are missing in nx.json');
@@ -74,7 +74,7 @@ describe('assertWorkspaceValidity', () => {
'README.md': ['invalidproj']
};
try {
- assertWorkspaceValidity(mockAngularJson, mockNxJson);
+ assertWorkspaceValidity(mockWorkspaceJson, mockNxJson);
fail('Did not throw');
} catch (e) {
expect(e.message).toContain(
@@ -89,7 +89,7 @@ describe('assertWorkspaceValidity', () => {
mockNxJson.projects.app2.implicitDependencies = ['invalidproj'];
try {
- assertWorkspaceValidity(mockAngularJson, mockNxJson);
+ assertWorkspaceValidity(mockWorkspaceJson, mockNxJson);
fail('Did not throw');
} catch (e) {
expect(e.message).toContain(
@@ -103,7 +103,7 @@ describe('assertWorkspaceValidity', () => {
describe('getImplicitDependencies', () => {
let mockNxJson: NxJson;
- let mockAngularJson: any;
+ let mockworkspaceJson: any;
beforeEach(() => {
mockNxJson = {
@@ -129,7 +129,7 @@ describe('getImplicitDependencies', () => {
}
}
};
- mockAngularJson = {
+ mockworkspaceJson = {
projects: {
app1: {
projectType: 'application'
@@ -160,8 +160,8 @@ describe('getImplicitDependencies', () => {
};
const result = getImplicitDependencies(
- getProjectNodes(mockAngularJson, mockNxJson),
- mockAngularJson,
+ getProjectNodes(mockworkspaceJson, mockNxJson),
+ mockworkspaceJson,
mockNxJson
);
@@ -182,8 +182,8 @@ describe('getImplicitDependencies', () => {
};
const result = getImplicitDependencies(
- getProjectNodes(mockAngularJson, mockNxJson),
- mockAngularJson,
+ getProjectNodes(mockworkspaceJson, mockNxJson),
+ mockworkspaceJson,
mockNxJson
);
@@ -209,8 +209,8 @@ describe('getImplicitDependencies', () => {
delete mockNxJson.projects.app1;
try {
getImplicitDependencies(
- getProjectNodes(mockAngularJson, mockNxJson),
- mockAngularJson,
+ getProjectNodes(mockworkspaceJson, mockNxJson),
+ mockworkspaceJson,
mockNxJson
);
fail('did not throw');
@@ -221,8 +221,8 @@ describe('getImplicitDependencies', () => {
describe('project-based implicit dependencies', () => {
it('should default appropriately', () => {
const result = getImplicitDependencies(
- getProjectNodes(mockAngularJson, mockNxJson),
- mockAngularJson,
+ getProjectNodes(mockworkspaceJson, mockNxJson),
+ mockworkspaceJson,
mockNxJson
);
@@ -240,8 +240,8 @@ describe('getImplicitDependencies', () => {
mockNxJson.projects.lib2.implicitDependencies = ['lib1'];
const result = getImplicitDependencies(
- getProjectNodes(mockAngularJson, mockNxJson),
- mockAngularJson,
+ getProjectNodes(mockworkspaceJson, mockNxJson),
+ mockworkspaceJson,
mockNxJson
);
@@ -261,8 +261,8 @@ describe('getImplicitDependencies', () => {
mockNxJson.projects['app1-e2e'].implicitDependencies = ['app2'];
const result = getImplicitDependencies(
- getProjectNodes(mockAngularJson, mockNxJson),
- mockAngularJson,
+ getProjectNodes(mockworkspaceJson, mockNxJson),
+ mockworkspaceJson,
mockNxJson
);
@@ -278,8 +278,8 @@ describe('getImplicitDependencies', () => {
mockNxJson.projects['app1-e2e'].implicitDependencies = [];
const result = getImplicitDependencies(
- getProjectNodes(mockAngularJson, mockNxJson),
- mockAngularJson,
+ getProjectNodes(mockworkspaceJson, mockNxJson),
+ mockworkspaceJson,
mockNxJson
);
@@ -301,8 +301,8 @@ describe('getImplicitDependencies', () => {
mockNxJson.projects.app2.implicitDependencies = ['app1'];
const result = getImplicitDependencies(
- getProjectNodes(mockAngularJson, mockNxJson),
- mockAngularJson,
+ getProjectNodes(mockworkspaceJson, mockNxJson),
+ mockworkspaceJson,
mockNxJson
);
@@ -321,7 +321,7 @@ describe('getImplicitDependencies', () => {
describe('getProjectNodes', () => {
let mockNxJson;
- let mockAngularJson;
+ let mockworkspaceJson;
beforeEach(() => {
mockNxJson = {
@@ -343,7 +343,7 @@ describe('getProjectNodes', () => {
}
}
};
- mockAngularJson = {
+ mockworkspaceJson = {
projects: {
app1: {
projectType: 'application'
@@ -366,7 +366,7 @@ describe('getProjectNodes', () => {
it('should parse nodes as correct type', () => {
const result: Pick[] = getProjectNodes(
- mockAngularJson,
+ mockworkspaceJson,
mockNxJson
).map(node => {
return { name: node.name, type: node.type };
@@ -396,7 +396,7 @@ describe('getProjectNodes', () => {
});
it('should normalize missing architect configurations to an empty object', () => {
- const result = getProjectNodes(mockAngularJson, mockNxJson).map(node => {
+ const result = getProjectNodes(mockworkspaceJson, mockNxJson).map(node => {
return { name: node.name, architect: node.architect };
});
expect(result).toEqual([
diff --git a/packages/workspace/src/command-line/shared.ts b/packages/workspace/src/command-line/shared.ts
index c3396a2a7e..2e950bf53c 100644
--- a/packages/workspace/src/command-line/shared.ts
+++ b/packages/workspace/src/command-line/shared.ts
@@ -1,20 +1,20 @@
import { execSync } from 'child_process';
+import * as fs from 'fs';
import * as path from 'path';
+import { appRootPath } from '../utils/app-root';
+import { readJsonFile } from '../utils/fileutils';
+import { YargsAffectedOptions } from './affected';
import {
affectedAppNames,
AffectedFetcher,
affectedLibNames,
affectedProjectNames,
+ affectedProjectNamesWithTarget,
ProjectNode,
- ProjectType,
- affectedProjectNamesWithTarget
+ ProjectType
} from './affected-apps';
-import * as fs from 'fs';
-import { readJsonFile } from '../utils/fileutils';
-import { YargsAffectedOptions } from './affected';
-import { readDependencies, DepGraph, Deps } from './deps-calculator';
+import { Deps, readDependencies } from './deps-calculator';
import { touchedProjects } from './touched';
-import { appRootPath } from '../utils/app-root';
import { output } from './output';
const ignore = require('ignore');
@@ -214,10 +214,10 @@ function detectAndSetInvalidProjectValues(
export function getImplicitDependencies(
projects: ProjectNode[],
- angularJson: any,
+ workspaceJson: any,
nxJson: NxJson
): ImplicitDependencies {
- assertWorkspaceValidity(angularJson, nxJson);
+ assertWorkspaceValidity(workspaceJson, nxJson);
const implicitFileDeps = getFileLevelImplicitDependencies(projects, nxJson);
const implicitProjectDeps = getProjectLevelImplicitDependencies(projects);
@@ -228,30 +228,30 @@ export function getImplicitDependencies(
};
}
-export function assertWorkspaceValidity(angularJson, nxJson) {
- const angularJsonProjects = Object.keys(angularJson.projects);
+export function assertWorkspaceValidity(workspaceJson, nxJson) {
+ const workspaceJsonProjects = Object.keys(workspaceJson.projects);
const nxJsonProjects = Object.keys(nxJson.projects);
- if (minus(angularJsonProjects, nxJsonProjects).length > 0) {
+ if (minus(workspaceJsonProjects, nxJsonProjects).length > 0) {
throw new Error(
- `angular.json and nx.json are out of sync. The following projects are missing in nx.json: ${minus(
- angularJsonProjects,
+ `${workspaceFileName()} and nx.json are out of sync. The following projects are missing in nx.json: ${minus(
+ workspaceJsonProjects,
nxJsonProjects
).join(', ')}`
);
}
- if (minus(nxJsonProjects, angularJsonProjects).length > 0) {
+ if (minus(nxJsonProjects, workspaceJsonProjects).length > 0) {
throw new Error(
- `angular.json and nx.json are out of sync. The following projects are missing in angular.json: ${minus(
+ `${workspaceFileName()} and nx.json are out of sync. The following projects are missing in ${workspaceFileName()}: ${minus(
nxJsonProjects,
- angularJsonProjects
+ workspaceJsonProjects
).join(', ')}`
);
}
const projects = {
- ...angularJson.projects,
+ ...workspaceJson.projects,
...nxJson.projects
};
@@ -296,15 +296,15 @@ export function assertWorkspaceValidity(angularJson, nxJson) {
}
export function getProjectNodes(
- angularJson: any,
+ workspaceJson: any,
nxJson: NxJson
): ProjectNode[] {
- assertWorkspaceValidity(angularJson, nxJson);
+ assertWorkspaceValidity(workspaceJson, nxJson);
- const angularJsonProjects = Object.keys(angularJson.projects);
+ const workspaceJsonProjects = Object.keys(workspaceJson.projects);
- return angularJsonProjects.map(key => {
- const p = angularJson.projects[key];
+ return workspaceJsonProjects.map(key => {
+ const p = workspaceJson.projects[key];
const tags = nxJson.projects[key].tags;
const projectType =
@@ -348,8 +348,24 @@ function minus(a: string[], b: string[]): string[] {
return res;
}
-export function readAngularJson(): any {
- return readJsonFile(`${appRootPath}/angular.json`);
+export function readWorkspaceJson(): any {
+ return readJsonFile(`${appRootPath}/${workspaceFileName()}`);
+}
+
+export function workspaceFileName() {
+ const packageJson = readPackageJson();
+ if (
+ packageJson.devDependencies['@angular/cli'] ||
+ packageJson.dependencies['@angular/cli']
+ ) {
+ return 'angular.json';
+ } else {
+ return 'workspace.json';
+ }
+}
+
+export function readPackageJson(): any {
+ return readJsonFile(`${appRootPath}/package.json`);
}
export function readNxJson(): NxJson {
@@ -363,10 +379,10 @@ export function readNxJson(): NxJson {
export const getAffected = (affectedNamesFetcher: AffectedFetcher) => (
touchedFiles: string[]
): string[] => {
- const angularJson = readAngularJson();
+ const workspaceJson = readWorkspaceJson();
const nxJson = readNxJson();
- const projects = getProjectNodes(angularJson, nxJson);
- const implicitDeps = getImplicitDependencies(projects, angularJson, nxJson);
+ const projects = getProjectNodes(workspaceJson, nxJson);
+ const implicitDeps = getImplicitDependencies(projects, workspaceJson, nxJson);
const dependencies = readDependencies(nxJson.npmScope, projects);
const sortedProjects = topologicallySortProjects(projects, dependencies);
const tp = touchedProjects(implicitDeps, projects, touchedFiles);
@@ -393,9 +409,9 @@ export function getAllProjectNamesWithTarget(target: string) {
}
export function getAllProjectsWithTarget(target: string) {
- const angularJson = readAngularJson();
+ const workspaceJson = readWorkspaceJson();
const nxJson = readNxJson();
- const projects = getProjectNodes(angularJson, nxJson);
+ const projects = getProjectNodes(workspaceJson, nxJson);
const dependencies = readDependencies(nxJson.npmScope, projects);
const sortedProjects = topologicallySortProjects(projects, dependencies);
@@ -405,7 +421,7 @@ export function getAllProjectsWithTarget(target: string) {
export function getProjectNames(
predicate?: (projectNode: ProjectNode) => boolean
): string[] {
- let projects = getProjectNodes(readAngularJson(), readNxJson());
+ let projects = getProjectNodes(readWorkspaceJson(), readNxJson());
if (predicate) {
projects = projects.filter(predicate);
}
@@ -414,7 +430,7 @@ export function getProjectNames(
}
export function getProjectRoots(projectNames: string[]): string[] {
- const { projects } = readAngularJson();
+ const { projects } = readWorkspaceJson();
return projectNames.map(name => projects[name].root);
}
@@ -454,7 +470,7 @@ export function lastModifiedAmongProjectFiles(projects: ProjectNode[]) {
return Math.max(
...[
...projects.map(project => getProjectMTime(project)),
- mtime(`${appRootPath}/angular.json`),
+ mtime(`${appRootPath}/${workspaceFileName()}`),
mtime(`${appRootPath}/nx.json`),
mtime(`${appRootPath}/tslint.json`),
mtime(`${appRootPath}/package.json`)
diff --git a/packages/workspace/src/command-line/touched.ts b/packages/workspace/src/command-line/touched.ts
index e86c143ee2..899779c9cf 100644
--- a/packages/workspace/src/command-line/touched.ts
+++ b/packages/workspace/src/command-line/touched.ts
@@ -1,6 +1,6 @@
import {
ImplicitDependencies,
- readAngularJson,
+ readWorkspaceJson,
getProjectNodes,
readNxJson,
getImplicitDependencies
@@ -26,10 +26,10 @@ export function touchedProjects(
}
export function getTouchedProjects(touchedFiles: string[]): string[] {
- const angularJson = readAngularJson();
+ const workspaceJson = readWorkspaceJson();
const nxJson = readNxJson();
- const projects = getProjectNodes(angularJson, nxJson);
- const implicitDeps = getImplicitDependencies(projects, angularJson, nxJson);
+ const projects = getProjectNodes(workspaceJson, nxJson);
+ const implicitDeps = getImplicitDependencies(projects, workspaceJson, nxJson);
return touchedProjects(implicitDeps, projects, touchedFiles).filter(p => !!p);
}
diff --git a/packages/workspace/src/command-line/workspace-integrity-checks.spec.ts b/packages/workspace/src/command-line/workspace-integrity-checks.spec.ts
index 34c0a66334..01ca830928 100644
--- a/packages/workspace/src/command-line/workspace-integrity-checks.spec.ts
+++ b/packages/workspace/src/command-line/workspace-integrity-checks.spec.ts
@@ -3,7 +3,7 @@ import { ProjectType } from './affected-apps';
import chalk from 'chalk';
describe('WorkspaceIntegrityChecks', () => {
- describe('angular.json is in sync with the filesystem', () => {
+ describe('workspace.json is in sync with the filesystem', () => {
it('should not error when they are in sync', () => {
const c = new WorkspaceIntegrityChecks(
[
diff --git a/packages/workspace/src/command-line/workspace-integrity-checks.ts b/packages/workspace/src/command-line/workspace-integrity-checks.ts
index 084273eb61..285595adc8 100644
--- a/packages/workspace/src/command-line/workspace-integrity-checks.ts
+++ b/packages/workspace/src/command-line/workspace-integrity-checks.ts
@@ -1,5 +1,6 @@
import { ProjectNode } from './affected-apps';
import { output, CLIErrorMessageConfig } from './output';
+import { workspaceFileName } from './shared';
export class WorkspaceIntegrityChecks {
constructor(private projectNodes: ProjectNode[], private files: string[]) {}
@@ -21,7 +22,7 @@ export class WorkspaceIntegrityChecks {
? []
: [
{
- title: 'The angular.json file is out of sync',
+ title: `The ${workspaceFileName()} file is out of sync`,
bodyLines: errorGroupBodyLines
/**
* TODO(JamesHenry): Add support for error documentation
diff --git a/packages/workspace/src/command-line/workspace-schematic.ts b/packages/workspace/src/command-line/workspace-schematic.ts
index e8bd4ce49e..23473a355e 100644
--- a/packages/workspace/src/command-line/workspace-schematic.ts
+++ b/packages/workspace/src/command-line/workspace-schematic.ts
@@ -125,7 +125,7 @@ function createWorkflow(dryRun: boolean) {
function detectPackageManager(): string {
try {
- const packageManager = execSync(`ng config cli.packageManager`, {
+ const packageManager = execSync(`nx config cli.packageManager`, {
stdio: ['ignore', 'pipe', 'ignore']
})
.toString()
diff --git a/packages/workspace/src/migrations/update-8-2-0/update-8-2-0.spec.ts b/packages/workspace/src/migrations/update-8-2-0/update-8-2-0.spec.ts
index 5655f0541d..67e990b6f7 100644
--- a/packages/workspace/src/migrations/update-8-2-0/update-8-2-0.spec.ts
+++ b/packages/workspace/src/migrations/update-8-2-0/update-8-2-0.spec.ts
@@ -12,7 +12,7 @@ describe('Update 8.2.0', () => {
beforeEach(async () => {
tree = createEmptyWorkspace(Tree.empty());
tree = await callRule(
- updateJsonInTree('angular.json', json => {
+ updateJsonInTree('workspace.json', json => {
json.projects['my-app'] = {
root: 'my-app',
architect: {
@@ -34,8 +34,8 @@ describe('Update 8.2.0', () => {
it('should add exclusions for files other than the project root', async () => {
const result = await runMigration('update-8.2.0', {}, tree);
- const angularJson = readJsonInTree(tree, 'angular.json');
- const project = angularJson.projects['my-app'];
+ const workspaceJson = readJsonInTree(tree, 'workspace.json');
+ const project = workspaceJson.projects['my-app'];
expect(project.architect.lint).toEqual({
builder: '@angular-devkit/build-angular:tslint',
options: {
diff --git a/packages/workspace/src/migrations/update-8-4-0/add-nx-script.ts b/packages/workspace/src/migrations/update-8-4-0/add-nx-script.ts
new file mode 100644
index 0000000000..fe1b817ead
--- /dev/null
+++ b/packages/workspace/src/migrations/update-8-4-0/add-nx-script.ts
@@ -0,0 +1,12 @@
+import { updateJsonInTree } from '../../utils/ast-utils';
+
+const addNxScript = updateJsonInTree('package.json', json => {
+ if (json.scripts && !json.scripts.nx) {
+ json.scripts.nx = 'nx';
+ }
+ return json;
+});
+
+export default function() {
+ return addNxScript;
+}
diff --git a/packages/workspace/src/schematics/library/library.spec.ts b/packages/workspace/src/schematics/library/library.spec.ts
index 09ced8ddf0..c5af8c33c2 100644
--- a/packages/workspace/src/schematics/library/library.spec.ts
+++ b/packages/workspace/src/schematics/library/library.spec.ts
@@ -13,13 +13,13 @@ describe('lib', () => {
});
describe('not nested', () => {
- it('should update angular.json', async () => {
+ it('should update workspace.json', async () => {
const tree = await runSchematic('lib', { name: 'myLib' }, appTree);
- const angularJson = readJsonInTree(tree, '/angular.json');
+ const workspaceJson = readJsonInTree(tree, '/workspace.json');
- expect(angularJson.projects['my-lib'].root).toEqual('libs/my-lib');
- expect(angularJson.projects['my-lib'].architect.build).toBeUndefined();
- expect(angularJson.projects['my-lib'].architect.lint).toEqual({
+ expect(workspaceJson.projects['my-lib'].root).toEqual('libs/my-lib');
+ expect(workspaceJson.projects['my-lib'].architect.build).toBeUndefined();
+ expect(workspaceJson.projects['my-lib'].architect.lint).toEqual({
builder: '@angular-devkit/build-angular:tslint',
options: {
exclude: ['**/node_modules/**', '!libs/my-lib/**'],
@@ -154,18 +154,18 @@ describe('lib', () => {
expect(tree.exists(`libs/my-dir/my-lib/tslint.json`)).toBeTruthy();
});
- it('should update angular.json', async () => {
+ it('should update workspace.json', async () => {
const tree = await runSchematic(
'lib',
{ name: 'myLib', directory: 'myDir' },
appTree
);
- const angularJson = readJsonInTree(tree, '/angular.json');
+ const workspaceJson = readJsonInTree(tree, '/workspace.json');
- expect(angularJson.projects['my-dir-my-lib'].root).toEqual(
+ expect(workspaceJson.projects['my-dir-my-lib'].root).toEqual(
'libs/my-dir/my-lib'
);
- expect(angularJson.projects['my-dir-my-lib'].architect.lint).toEqual({
+ expect(workspaceJson.projects['my-dir-my-lib'].architect.lint).toEqual({
builder: '@angular-devkit/build-angular:tslint',
options: {
exclude: ['**/node_modules/**', '!libs/my-dir/my-lib/**'],
@@ -236,10 +236,10 @@ describe('lib', () => {
);
expect(resultTree.exists('libs/my-lib/tsconfig.spec.json')).toBeFalsy();
expect(resultTree.exists('libs/my-lib/jest.config.js')).toBeFalsy();
- const angularJson = readJsonInTree(resultTree, 'angular.json');
- expect(angularJson.projects['my-lib'].architect.test).toBeUndefined();
+ const workspaceJson = readJsonInTree(resultTree, 'workspace.json');
+ expect(workspaceJson.projects['my-lib'].architect.test).toBeUndefined();
expect(
- angularJson.projects['my-lib'].architect.lint.options.tsConfig
+ workspaceJson.projects['my-lib'].architect.lint.options.tsConfig
).toEqual(['libs/my-lib/tsconfig.lib.json']);
});
});
diff --git a/packages/workspace/src/schematics/library/library.ts b/packages/workspace/src/schematics/library/library.ts
index 6481d78066..a421dc3c0a 100644
--- a/packages/workspace/src/schematics/library/library.ts
+++ b/packages/workspace/src/schematics/library/library.ts
@@ -14,11 +14,12 @@ import {
import { join, normalize } from '@angular-devkit/core';
import { Schema } from './schema';
-import { NxJson } from '@nrwl/workspace';
+import { NxJson, updateWorkspaceInTree } from '@nrwl/workspace';
import { updateJsonInTree, readJsonInTree } from '@nrwl/workspace';
import { toFileName, names } from '@nrwl/workspace';
import { formatFiles } from '@nrwl/workspace';
import { offsetFromRoot } from '@nrwl/workspace';
+import { generateProjectLint, addGlobalLint } from '../../utils/lint';
export interface NormalizedSchema extends Schema {
name: string;
@@ -29,19 +30,14 @@ export interface NormalizedSchema extends Schema {
}
function addProject(options: NormalizedSchema): Rule {
- return updateJsonInTree('angular.json', json => {
+ return updateWorkspaceInTree(json => {
const architect: { [key: string]: any } = {};
- architect.lint = {
- builder: '@angular-devkit/build-angular:tslint',
- options: {
- tsConfig: [join(normalize(options.projectRoot), 'tsconfig.lib.json')],
- exclude: [
- '**/node_modules/**',
- '!' + join(normalize(options.projectRoot), '**')
- ]
- }
- };
+ architect.lint = generateProjectLint(
+ normalize(options.projectRoot),
+ join(normalize(options.projectRoot), 'tsconfig.lib.json'),
+ options.linter
+ );
json.projects[options.name] = {
root: options.projectRoot,
@@ -95,6 +91,7 @@ export default function(schema: Schema): Rule {
return (host: Tree, context: SchematicContext) => {
const options = normalizeOptions(schema);
return chain([
+ addGlobalLint(options.linter),
createFiles(options),
!options.skipTsConfig ? updateTsConfig(options) : noop(),
addProject(options),
diff --git a/packages/workspace/src/schematics/library/schema.d.ts b/packages/workspace/src/schematics/library/schema.d.ts
index 5c8f50c1ae..d597b860ab 100644
--- a/packages/workspace/src/schematics/library/schema.d.ts
+++ b/packages/workspace/src/schematics/library/schema.d.ts
@@ -7,6 +7,6 @@ export interface Schema {
skipFormat: boolean;
tags?: string;
simpleModuleName: boolean;
-
- unitTestRunner: UnitTestRunner;
+ unitTestRunner: 'jest' | 'none';
+ linter: 'eslint' | 'tslint';
}
diff --git a/packages/workspace/src/schematics/library/schema.json b/packages/workspace/src/schematics/library/schema.json
index 2ca423e0a1..33d7522e81 100644
--- a/packages/workspace/src/schematics/library/schema.json
+++ b/packages/workspace/src/schematics/library/schema.json
@@ -18,6 +18,12 @@
"description": "A directory where the app is placed",
"x-prompt": "In which directory should the library be generated?"
},
+ "linter": {
+ "description": "The tool to use for running lint checks.",
+ "type": "string",
+ "enum": ["eslint", "tslint"],
+ "default": "tslint"
+ },
"unitTestRunner": {
"type": "string",
"enum": ["jest", "none"],
diff --git a/packages/workspace/src/schematics/ng-add/ng-add.ts b/packages/workspace/src/schematics/ng-add/ng-add.ts
index 00428a67f1..c32802f99f 100755
--- a/packages/workspace/src/schematics/ng-add/ng-add.ts
+++ b/packages/workspace/src/schematics/ng-add/ng-add.ts
@@ -27,7 +27,8 @@ import {
serializeJson,
toFileName,
updateJsonFile,
- updateJsonInTree
+ updateJsonInTree,
+ getWorkspacePath
} from '@nrwl/workspace';
import { DEFAULT_NRWL_PRETTIER_CONFIG } from '../workspace/workspace';
import { JsonArray } from '@angular-devkit/core';
@@ -239,9 +240,9 @@ function serializeLoadChildren({
function updateTsConfigsJson(options: Schema) {
return (host: Tree) => {
- const angularJson = readJsonInTree(host, 'angular.json');
- const app = angularJson.projects[options.name];
- const e2eProject = getE2eProject(angularJson);
+ const workspaceJson = readJsonInTree(host, 'angular.json');
+ const app = workspaceJson.projects[options.name];
+ const e2eProject = getE2eProject(workspaceJson);
const offset = '../../';
updateJsonFile(app.architect.build.options.tsConfig, json => {
@@ -300,8 +301,8 @@ function updateTsLint() {
function updateProjectTsLint(options: Schema) {
return (host: Tree) => {
- const angularJson = readJsonInTree(host, '/angular.json');
- const app = angularJson.projects[options.name];
+ const workspaceJson = readJsonInTree(host, getWorkspacePath(host));
+ const app = workspaceJson.projects[options.name];
const offset = '../../';
if (host.exists(`${app.root}/tslint.json`)) {
@@ -350,16 +351,16 @@ function getFilename(path: string) {
return path.split('/').pop();
}
-function getE2eKey(angularJson: any) {
- return Object.keys(angularJson.projects).find(key => {
- return !!angularJson.projects[key].architect.e2e;
+function getE2eKey(workspaceJson: any) {
+ return Object.keys(workspaceJson.projects).find(key => {
+ return !!workspaceJson.projects[key].architect.e2e;
});
}
-function getE2eProject(angularJson: any) {
- const key = getE2eKey(angularJson);
+function getE2eProject(workspaceJson: any) {
+ const key = getE2eKey(workspaceJson);
if (key) {
- return angularJson.projects[key];
+ return workspaceJson.projects[key];
} else {
return null;
}
@@ -367,9 +368,9 @@ function getE2eProject(angularJson: any) {
function moveExistingFiles(options: Schema) {
return (host: Tree, context: SchematicContext) => {
- const angularJson = readJsonInTree(host, 'angular.json');
- const app = angularJson.projects[options.name];
- const e2eApp = getE2eProject(angularJson);
+ const workspaceJson = readJsonInTree(host, getWorkspacePath(host));
+ const app = workspaceJson.projects[options.name];
+ const e2eApp = getE2eProject(workspaceJson);
// No context is passed because it should not be required to have a browserslist
moveOutOfSrc(options.name, 'browserslist');
@@ -410,7 +411,7 @@ function moveExistingFiles(options: Schema) {
if (e2eApp) {
const oldE2eRoot = 'e2e';
- const newE2eRoot = join('apps', getE2eKey(angularJson) + '-e2e');
+ const newE2eRoot = join('apps', getE2eKey(workspaceJson) + '-e2e');
renameSync(oldE2eRoot, newE2eRoot, err => {
if (!err) {
context.logger.info(`Renamed ${oldE2eRoot} -> ${newE2eRoot}`);
@@ -431,7 +432,7 @@ function moveExistingFiles(options: Schema) {
function createAdditionalFiles(options: Schema): Rule {
return (host: Tree, _context: SchematicContext) => {
- const angularJson = readJsonInTree(host, 'angular.json');
+ const workspaceJson = readJsonInTree(host, 'angular.json');
host.create(
'nx.json',
serializeJson({
@@ -447,7 +448,7 @@ function createAdditionalFiles(options: Schema): Rule {
[options.name]: {
tags: []
},
- [getE2eKey(angularJson) + '-e2e']: {
+ [getE2eKey(workspaceJson) + '-e2e']: {
tags: []
}
}
@@ -502,12 +503,12 @@ function checkCanConvertToWorkspace(options: Schema) {
}
// TODO: This restriction should be lited
- const angularJson = readJsonInTree(host, 'angular.json');
- if (Object.keys(angularJson.projects).length > 2) {
+ const workspaceJson = readJsonInTree(host, 'angular.json');
+ if (Object.keys(workspaceJson.projects).length > 2) {
throw new Error('Can only convert projects with one app');
}
- const e2eKey = getE2eKey(angularJson);
- const e2eApp = getE2eProject(angularJson);
+ const e2eKey = getE2eKey(workspaceJson);
+ const e2eApp = getE2eProject(workspaceJson);
if (
e2eApp &&
diff --git a/packages/workspace/src/schematics/ng-new/ng-new.spec.ts b/packages/workspace/src/schematics/ng-new/ng-new.spec.ts
deleted file mode 100644
index 3f506e552e..0000000000
--- a/packages/workspace/src/schematics/ng-new/ng-new.spec.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-describe('ng-new', () => {
- it('one day we will have a test here', () => {});
-});
diff --git a/packages/workspace/src/schematics/ng-new/ng-new.ts b/packages/workspace/src/schematics/ng-new/ng-new.ts
index 30c2002394..b74025ada4 100644
--- a/packages/workspace/src/schematics/ng-new/ng-new.ts
+++ b/packages/workspace/src/schematics/ng-new/ng-new.ts
@@ -1,180 +1,6 @@
-import {
- chain,
- move,
- noop,
- Rule,
- schematic,
- SchematicContext,
- Tree
-} from '@angular-devkit/schematics';
-import { Schema } from './schema';
-import {
- NodePackageInstallTask,
- RepositoryInitializerTask
-} from '@angular-devkit/schematics/tasks';
-
-import { addDepsToPackageJson } from '../../utils/ast-utils';
-
-import { toFileName } from '../../utils/name-utils';
-
-import { formatFiles } from '../../utils/rules/format-files';
-
-import { nxVersion } from '../../utils/versions';
-import * as path from 'path';
-import { Observable } from 'rxjs';
-import { spawn } from 'child_process';
-import { platform } from 'os';
-
-class RunPresetTask {
- toConfiguration() {
- return {
- name: 'RunPreset'
- };
- }
-}
-
-function createPresetTaskExecutor(opts: Schema) {
- return {
- name: 'RunPreset',
- create: () => {
- return Promise.resolve(() => {
- const spawnOptions = {
- stdio: [process.stdin, process.stdout, process.stderr],
- shell: true,
- cwd: path.join(process.cwd(), opts.directory)
- };
- const ng =
- platform() === 'win32'
- ? '.\\node_modules\\.bin\\ng'
- : './node_modules/.bin/ng';
- const args = [
- `g`,
- `@nrwl/workspace:preset`,
- `--name=${opts.name}`,
- opts.style ? `--style=${opts.style}` : null,
- opts.npmScope ? `--npmScope=${opts.npmScope}` : null,
- opts.preset ? `--preset=${opts.preset}` : null
- ].filter(e => !!e);
- return new Observable(obs => {
- spawn(ng, args, spawnOptions).on('close', (code: number) => {
- if (code === 0) {
- obs.next();
- obs.complete();
- } else {
- const message = 'Workspace creation failed, see above.';
- obs.error(new Error(message));
- }
- });
- });
- });
- }
- };
-}
+import { Rule } from '@angular-devkit/schematics';
+import { sharedNew, Schema } from '../shared-new/shared-new';
export default function(options: Schema): Rule {
- if (options.skipInstall && options.preset !== 'empty') {
- throw new Error(`Cannot select a preset when skipInstall is set to true.`);
- }
-
- options = normalizeOptions(options);
- const workspaceOpts = { ...options, preset: undefined };
- return (host: Tree, context: SchematicContext) => {
- const engineHost = (context.engine.workflow as any).engineHost;
- engineHost.registerTaskExecutor(createPresetTaskExecutor(options));
-
- return chain([
- schematic('workspace', workspaceOpts),
- addDependencies(options),
- move('/', options.directory),
- addTasks(options),
- formatFiles()
- ])(Tree.empty(), context);
- };
-}
-
-function addDependencies(options: Schema) {
- if (options.preset === 'empty') {
- return noop();
- } else if (options.preset === 'angular') {
- return addDepsToPackageJson(
- {
- '@nrwl/angular': nxVersion
- },
- {},
- false
- );
- } else if (options.preset === 'react') {
- return addDepsToPackageJson(
- {},
- {
- '@nrwl/react': nxVersion
- },
- false
- );
- } else if (options.preset === 'web-components') {
- return addDepsToPackageJson(
- {},
- {
- '@nrwl/web': nxVersion
- },
- false
- );
- } else {
- return addDepsToPackageJson(
- {
- '@nrwl/angular': nxVersion
- },
- {
- '@nrwl/nest': nxVersion
- },
- false
- );
- }
-}
-
-function addTasks(options: Schema) {
- return (host: Tree, context: SchematicContext) => {
- let packageTask;
- let presetInstallTask;
- if (!options.skipInstall) {
- packageTask = context.addTask(
- new NodePackageInstallTask(options.directory)
- );
- }
- if (options.preset !== 'empty') {
- const createPresetTask = context.addTask(new RunPresetTask(), [
- packageTask
- ]);
-
- presetInstallTask = context.addTask(
- new NodePackageInstallTask(options.directory),
- [createPresetTask]
- );
- }
- if (!options.skipGit) {
- const commit =
- typeof options.commit == 'object'
- ? options.commit
- : !!options.commit
- ? {}
- : false;
- context.addTask(
- new RepositoryInitializerTask(options.directory, commit),
- presetInstallTask
- ? [presetInstallTask]
- : packageTask
- ? [packageTask]
- : []
- );
- }
- };
-}
-
-function normalizeOptions(options: Schema): Schema {
- options.name = toFileName(options.name);
- if (!options.directory) {
- options.directory = options.name;
- }
-
- return options;
+ return sharedNew('angular', options);
}
diff --git a/packages/workspace/src/schematics/ng-new/schema.d.ts b/packages/workspace/src/schematics/ng-new/schema.d.ts
deleted file mode 100644
index 2895a51e8d..0000000000
--- a/packages/workspace/src/schematics/ng-new/schema.d.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-export interface Schema {
- directory: string;
- name: string;
- npmScope?: string;
- skipInstall?: boolean;
- skipGit?: boolean;
- style?: string;
- preset: 'empty' | 'angular' | 'react' | 'web-components' | 'full-stack';
- commit?: { name: string; email: string; message?: string };
-}
diff --git a/packages/workspace/src/schematics/ng-new/schema.json b/packages/workspace/src/schematics/ng-new/schema.json
index da4bbd5fc4..c632e655ea 100644
--- a/packages/workspace/src/schematics/ng-new/schema.json
+++ b/packages/workspace/src/schematics/ng-new/schema.json
@@ -89,14 +89,7 @@
},
"preset": {
"description": "What to create in the new workspace",
- "enum": [
- "angular",
- "angular-ivy",
- "react",
- "web-components",
- "full-stack",
- "empty"
- ],
+ "enum": ["angular", "react", "web-components", "full-stack", "empty"],
"default": "empty",
"x-prompt": {
"message": "What to create in the new workspace (You can create other applications and libraries at any point using 'ng g')",
@@ -110,10 +103,6 @@
"value": "angular",
"label": "angular [a workspace with a single Angular application]"
},
- {
- "value": "angular-ivy",
- "label": "angular-ivy [a workspace with a single Angular application built using Ivy]"
- },
{
"value": "react",
"label": "react [a workspace with a single React application]"
diff --git a/packages/workspace/src/schematics/preset/preset.spec.ts b/packages/workspace/src/schematics/preset/preset.spec.ts
index b6696ec844..b867729229 100644
--- a/packages/workspace/src/schematics/preset/preset.spec.ts
+++ b/packages/workspace/src/schematics/preset/preset.spec.ts
@@ -18,7 +18,7 @@ describe('preset', () => {
expect(tree.exists('/apps/proj/src/app/app.component.ts')).toBe(true);
expect(
- JSON.parse(tree.readContent('/angular.json')).cli.defaultCollection
+ JSON.parse(tree.readContent('/workspace.json')).cli.defaultCollection
).toBe('@nrwl/angular');
});
@@ -30,7 +30,7 @@ describe('preset', () => {
);
expect(tree.exists('/apps/proj/src/main.tsx')).toBe(true);
expect(
- JSON.parse(tree.readContent('/angular.json')).cli.defaultCollection
+ JSON.parse(tree.readContent('/workspace.json')).cli.defaultCollection
).toBe('@nrwl/react');
});
@@ -42,7 +42,7 @@ describe('preset', () => {
);
expect(tree.exists('/apps/proj/src/main.ts')).toBe(true);
expect(
- JSON.parse(tree.readContent('/angular.json')).cli.defaultCollection
+ JSON.parse(tree.readContent('/workspace.json')).cli.defaultCollection
).toBe('@nrwl/web');
});
diff --git a/packages/workspace/src/schematics/preset/preset.ts b/packages/workspace/src/schematics/preset/preset.ts
index 41f4b9421e..ce337d331e 100644
--- a/packages/workspace/src/schematics/preset/preset.ts
+++ b/packages/workspace/src/schematics/preset/preset.ts
@@ -9,7 +9,11 @@ import {
} from '@angular-devkit/schematics';
import { Schema } from './schema';
-import { insert, insertImport, updateJsonInTree } from '../../utils/ast-utils';
+import {
+ insert,
+ insertImport,
+ updateWorkspaceInTree
+} from '../../utils/ast-utils';
import { formatFiles } from '../../utils/rules/format-files';
@@ -39,20 +43,6 @@ function createPreset(options: Schema): Rule {
),
setDefaultCollection('@nrwl/angular')
]);
- } else if (options.preset === 'angular-ivy') {
- return chain([
- externalSchematic(
- '@nrwl/angular',
- 'application',
- {
- name: options.name,
- style: options.style,
- enableIvy: true
- },
- { interactive: false }
- ),
- setDefaultCollection('@nrwl/angular')
- ]);
} else if (options.preset === 'react') {
return chain([
externalSchematic(
@@ -235,7 +225,7 @@ export class AppService {
}
function setDefaultCollection(defaultCollection: string) {
- return updateJsonInTree('angular.json', json => {
+ return updateWorkspaceInTree(json => {
if (!json.cli) {
json.cli = {};
}
diff --git a/packages/workspace/src/schematics/preset/schema.d.ts b/packages/workspace/src/schematics/preset/schema.d.ts
index 2d5833a591..4e72a47fbb 100644
--- a/packages/workspace/src/schematics/preset/schema.d.ts
+++ b/packages/workspace/src/schematics/preset/schema.d.ts
@@ -2,11 +2,5 @@ export interface Schema {
name: string;
npmScope?: string;
style?: string;
- preset:
- | 'empty'
- | 'angular'
- | 'angular-ivy'
- | 'react'
- | 'web-components'
- | 'full-stack';
+ preset: 'empty' | 'angular' | 'react' | 'web-components' | 'full-stack';
}
diff --git a/packages/workspace/src/schematics/shared-new/shared-new.ts b/packages/workspace/src/schematics/shared-new/shared-new.ts
new file mode 100644
index 0000000000..42315ef54b
--- /dev/null
+++ b/packages/workspace/src/schematics/shared-new/shared-new.ts
@@ -0,0 +1,192 @@
+import {
+ chain,
+ move,
+ noop,
+ Rule,
+ schematic,
+ SchematicContext,
+ Tree
+} from '@angular-devkit/schematics';
+import {
+ NodePackageInstallTask,
+ RepositoryInitializerTask
+} from '@angular-devkit/schematics/tasks';
+
+import { addDepsToPackageJson } from '../../utils/ast-utils';
+
+import { toFileName } from '../../utils/name-utils';
+
+import { formatFiles } from '../../utils/rules/format-files';
+
+import { nxVersion } from '../../utils/versions';
+import * as path from 'path';
+import { Observable } from 'rxjs';
+import { spawn } from 'child_process';
+import { platform } from 'os';
+
+export interface Schema {
+ directory: string;
+ name: string;
+ npmScope?: string;
+ skipInstall?: boolean;
+ skipGit?: boolean;
+ style?: string;
+ preset: 'empty' | 'angular' | 'react' | 'web-components' | 'full-stack';
+ commit?: { name: string; email: string; message?: string };
+}
+
+class RunPresetTask {
+ toConfiguration() {
+ return {
+ name: 'RunPreset'
+ };
+ }
+}
+
+function createPresetTaskExecutor(cli: string, opts: Schema) {
+ const cliCommand = cli === 'angular' ? 'ng' : 'nx';
+
+ return {
+ name: 'RunPreset',
+ create: () => {
+ return Promise.resolve(() => {
+ const spawnOptions = {
+ stdio: [process.stdin, process.stdout, process.stderr],
+ shell: true,
+ cwd: path.join(process.cwd(), opts.directory)
+ };
+ const executable =
+ platform() === 'win32'
+ ? `.\\node_modules\\.bin\\${cliCommand}`
+ : `./node_modules/.bin/${cliCommand}`;
+ const args = [
+ `g`,
+ `@nrwl/workspace:preset`,
+ `--name=${opts.name}`,
+ opts.style ? `--style=${opts.style}` : null,
+ opts.npmScope ? `--npmScope=${opts.npmScope}` : null,
+ opts.preset ? `--preset=${opts.preset}` : null
+ ].filter(e => !!e);
+ return new Observable(obs => {
+ spawn(executable, args, spawnOptions).on('close', (code: number) => {
+ if (code === 0) {
+ obs.next();
+ obs.complete();
+ } else {
+ const message = 'Workspace creation failed, see above.';
+ obs.error(new Error(message));
+ }
+ });
+ });
+ });
+ }
+ };
+}
+
+export function sharedNew(cli: string, options: Schema): Rule {
+ if (options.skipInstall && options.preset !== 'empty') {
+ throw new Error(`Cannot select a preset when skipInstall is set to true.`);
+ }
+
+ options = normalizeOptions(options);
+ const workspaceOpts = { ...options, preset: undefined };
+ return (host: Tree, context: SchematicContext) => {
+ const engineHost = (context.engine.workflow as any).engineHost;
+ engineHost.registerTaskExecutor(createPresetTaskExecutor(cli, options));
+
+ return chain([
+ schematic('workspace', { ...workspaceOpts, cli }),
+ addDependencies(options),
+ move('/', options.directory),
+ addTasks(options),
+ formatFiles()
+ ])(Tree.empty(), context);
+ };
+}
+
+function addDependencies(options: Schema) {
+ if (options.preset === 'empty') {
+ return noop();
+ } else if (options.preset === 'angular') {
+ return addDepsToPackageJson(
+ {
+ '@nrwl/angular': nxVersion
+ },
+ {},
+ false
+ );
+ } else if (options.preset === 'react') {
+ return addDepsToPackageJson(
+ {},
+ {
+ '@nrwl/react': nxVersion
+ },
+ false
+ );
+ } else if (options.preset === 'web-components') {
+ return addDepsToPackageJson(
+ {},
+ {
+ '@nrwl/web': nxVersion
+ },
+ false
+ );
+ } else {
+ return addDepsToPackageJson(
+ {
+ '@nrwl/angular': nxVersion
+ },
+ {
+ '@nrwl/nest': nxVersion
+ },
+ false
+ );
+ }
+}
+
+function addTasks(options: Schema) {
+ return (host: Tree, context: SchematicContext) => {
+ let packageTask;
+ let presetInstallTask;
+ if (!options.skipInstall) {
+ packageTask = context.addTask(
+ new NodePackageInstallTask(options.directory)
+ );
+ }
+ if (options.preset !== 'empty') {
+ const createPresetTask = context.addTask(new RunPresetTask(), [
+ packageTask
+ ]);
+
+ presetInstallTask = context.addTask(
+ new NodePackageInstallTask(options.directory),
+ [createPresetTask]
+ );
+ }
+ if (!options.skipGit) {
+ const commit =
+ typeof options.commit == 'object'
+ ? options.commit
+ : !!options.commit
+ ? {}
+ : false;
+ context.addTask(
+ new RepositoryInitializerTask(options.directory, commit),
+ presetInstallTask
+ ? [presetInstallTask]
+ : packageTask
+ ? [packageTask]
+ : []
+ );
+ }
+ };
+}
+
+function normalizeOptions(options: Schema): Schema {
+ options.name = toFileName(options.name);
+ if (!options.directory) {
+ options.directory = options.name;
+ }
+
+ return options;
+}
diff --git a/packages/workspace/src/schematics/tao-new/schema.json b/packages/workspace/src/schematics/tao-new/schema.json
new file mode 100644
index 0000000000..c632e655ea
--- /dev/null
+++ b/packages/workspace/src/schematics/tao-new/schema.json
@@ -0,0 +1,122 @@
+{
+ "$schema": "http://json-schema.org/schema",
+ "id": "NxWorkspaceNew",
+ "title": "Create an empty workspace",
+ "type": "object",
+ "properties": {
+ "name": {
+ "description": "The name of the workspace.",
+ "type": "string",
+ "format": "html-selector",
+ "$default": {
+ "$source": "argv",
+ "index": 0
+ },
+ "x-prompt": "What name would you like to use for the workspace?"
+ },
+ "style": {
+ "description": "The file extension to be used for style files.",
+ "type": "string",
+ "default": "css",
+ "x-prompt": {
+ "message": "Which stylesheet format would you like to use?",
+ "type": "list",
+ "items": [
+ {
+ "value": "css",
+ "label": "CSS"
+ },
+ {
+ "value": "scss",
+ "label": "SASS(.scss) [ http://sass-lang.com ]"
+ },
+ {
+ "value": "styl",
+ "label": "Stylus(.styl)[ http://stylus-lang.com ]"
+ },
+ {
+ "value": "less",
+ "label": "LESS [ http://lesscss.org ]"
+ }
+ ]
+ }
+ },
+ "directory": {
+ "type": "string",
+ "format": "path",
+ "description": "The directory name to create the workspace in.",
+ "default": ""
+ },
+ "npmScope": {
+ "type": "string",
+ "description": "Npm scope for importing libs."
+ },
+ "skipInstall": {
+ "description": "Skip installing dependency packages.",
+ "type": "boolean",
+ "default": false
+ },
+ "skipGit": {
+ "description": "Skip initializing a git repository.",
+ "type": "boolean",
+ "default": false,
+ "alias": "g"
+ },
+ "commit": {
+ "description": "Initial repository commit information.",
+ "oneOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "email": {
+ "type": "string",
+ "format": "email"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": ["name", "email"]
+ }
+ ],
+ "default": true
+ },
+ "preset": {
+ "description": "What to create in the new workspace",
+ "enum": ["angular", "react", "web-components", "full-stack", "empty"],
+ "default": "empty",
+ "x-prompt": {
+ "message": "What to create in the new workspace (You can create other applications and libraries at any point using 'ng g')",
+ "type": "list",
+ "items": [
+ {
+ "value": "empty",
+ "label": "empty [an empty workspace]"
+ },
+ {
+ "value": "angular",
+ "label": "angular [a workspace with a single Angular application]"
+ },
+ {
+ "value": "react",
+ "label": "react [a workspace with a single React application]"
+ },
+ {
+ "value": "web-components",
+ "label": "web components [a workspace with a single app built using web components]"
+ },
+ {
+ "value": "full-stack",
+ "label": "full-stack [a workspace with a full stack application (NestJS + Angular Ivy)]"
+ }
+ ]
+ }
+ }
+ }
+}
diff --git a/packages/workspace/src/schematics/tao-new/tao-new.ts b/packages/workspace/src/schematics/tao-new/tao-new.ts
new file mode 100644
index 0000000000..a35eb91528
--- /dev/null
+++ b/packages/workspace/src/schematics/tao-new/tao-new.ts
@@ -0,0 +1,6 @@
+import { Rule } from '@angular-devkit/schematics';
+import { sharedNew, Schema } from '../shared-new/shared-new';
+
+export default function(options: Schema): Rule {
+ return sharedNew('nx', options);
+}
diff --git a/packages/workspace/src/schematics/workspace/files/.vscode/extensions.json b/packages/workspace/src/schematics/workspace/files/.vscode/extensions.json__tmpl__
similarity index 64%
rename from packages/workspace/src/schematics/workspace/files/.vscode/extensions.json
rename to packages/workspace/src/schematics/workspace/files/.vscode/extensions.json__tmpl__
index 7804e26027..c912f2f744 100644
--- a/packages/workspace/src/schematics/workspace/files/.vscode/extensions.json
+++ b/packages/workspace/src/schematics/workspace/files/.vscode/extensions.json__tmpl__
@@ -1,7 +1,9 @@
{
"recommendations": [
+ <% if(cli === 'angular') { %>
"nrwl.angular-console",
- "angular.ng-template",
+ "angular.ng-template",<% }
+ %>
"ms-vscode.vscode-typescript-tslint-plugin",
"esbenp.prettier-vscode"
]
diff --git a/packages/workspace/src/schematics/workspace/files/__workspaceFile__.json b/packages/workspace/src/schematics/workspace/files/__workspaceFile__.json
new file mode 100644
index 0000000000..ae27a80047
--- /dev/null
+++ b/packages/workspace/src/schematics/workspace/files/__workspaceFile__.json
@@ -0,0 +1,7 @@
+{
+ "version": 1,
+ "projects": {},
+ "cli": {
+ "defaultCollection": "@nrwl/workspace"
+ }
+}
diff --git a/packages/workspace/src/schematics/workspace/files/angular.json b/packages/workspace/src/schematics/workspace/files/angular.json
deleted file mode 100644
index b4ac9118e0..0000000000
--- a/packages/workspace/src/schematics/workspace/files/angular.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
- "version": 1,
- "newProjectRoot": "",
- "projects": {},
- "cli": {
- "warnings": {
- "typescriptMismatch": false,
- "versionMismatch": false
- },
- "defaultCollection": "@nrwl/workspace"
- },
- "schematics": {}
-}
diff --git a/packages/workspace/src/schematics/workspace/files/nx.json b/packages/workspace/src/schematics/workspace/files/nx.json
index 4b3423e31d..846335099d 100644
--- a/packages/workspace/src/schematics/workspace/files/nx.json
+++ b/packages/workspace/src/schematics/workspace/files/nx.json
@@ -1,7 +1,7 @@
{
"npmScope": "<%= npmScope %>",
"implicitDependencies": {
- "angular.json": "*",
+ "<%= workspaceFile %>.json": "*",
"package.json": "*",
"tsconfig.json": "*",
"tslint.json": "*",
diff --git a/packages/workspace/src/schematics/workspace/files/package.json__tmpl__ b/packages/workspace/src/schematics/workspace/files/package.json__tmpl__
index 5697c93694..ab9c20f770 100644
--- a/packages/workspace/src/schematics/workspace/files/package.json__tmpl__
+++ b/packages/workspace/src/schematics/workspace/files/package.json__tmpl__
@@ -3,13 +3,15 @@
"version": "0.0.0",
"license": "MIT",
"scripts": {
+ <% if(cli === 'angular') { %>
"ng": "ng",
+ <% } %>
"nx": "nx",
- "start": "ng serve",
- "build": "ng build",
- "test": "ng test",
- "lint": "nx workspace-lint && ng lint",
- "e2e": "ng e2e",
+ "start": "<%= cliCommand %> serve",
+ "build": "<%= cliCommand %> build",
+ "test": "<%= cliCommand %> test",
+ "lint": "nx lint && <%= cliCommand %> lint",
+ "e2e": "<%= cliCommand %> e2e",
"affected:apps": "nx affected:apps",
"affected:libs": "nx affected:libs",
"affected:build": "nx affected:build",
@@ -21,8 +23,12 @@
"format": "nx format:write",
"format:write": "nx format:write",
"format:check": "nx format:check",
+
+ <% if(cli === 'angular') { %>
"update": "ng update @nrwl/workspace",
"update:check": "ng update",
+ <% } %>
+
"workspace-schematic": "nx workspace-schematic",
"dep-graph": "nx dep-graph",
"help": "nx help"
@@ -30,13 +36,13 @@
"private": true,
"dependencies": {},
"devDependencies": {
+ <% if(cli === 'angular') { %>"@angular/cli": "<%= angularCliVersion %>",<% } %>
"@nrwl/workspace": "<%= nxVersion %>",
"@types/node": "~8.9.4",
"dotenv": "6.2.0",
"ts-node": "~7.0.0",
"tslint": "~5.11.0",
"typescript": "<%= typescriptVersion %>",
- "prettier": "<%= prettierVersion %>"<% if(!nxCli) { %>,
- "@angular/cli": "<%= angularCliVersion %>"<% } %>
+ "prettier": "<%= prettierVersion %>"
}
}
diff --git a/packages/workspace/src/schematics/workspace/schema.d.ts b/packages/workspace/src/schematics/workspace/schema.d.ts
index 89f184af90..b235ccb329 100644
--- a/packages/workspace/src/schematics/workspace/schema.d.ts
+++ b/packages/workspace/src/schematics/workspace/schema.d.ts
@@ -8,4 +8,5 @@ export interface Schema {
skipGit?: boolean;
style?: string;
commit?: { name: string; email: string; message?: string };
+ cli: 'nx' | 'angular';
}
diff --git a/packages/workspace/src/schematics/workspace/schema.json b/packages/workspace/src/schematics/workspace/schema.json
index 482ec70792..4e439c8763 100644
--- a/packages/workspace/src/schematics/workspace/schema.json
+++ b/packages/workspace/src/schematics/workspace/schema.json
@@ -81,6 +81,12 @@
}
],
"default": true
+ },
+ "cli": {
+ "description": "CLI used for generating code and running tasks",
+ "type": "string",
+ "enum": ["nx", "angular"],
+ "default": "nx"
}
}
}
diff --git a/packages/workspace/src/schematics/workspace/workspace.spec.ts b/packages/workspace/src/schematics/workspace/workspace.spec.ts
index 913960235e..f4c2b1c4ca 100644
--- a/packages/workspace/src/schematics/workspace/workspace.spec.ts
+++ b/packages/workspace/src/schematics/workspace/workspace.spec.ts
@@ -12,7 +12,7 @@ describe('workspace', () => {
it('should create files', async () => {
const tree = await runSchematic('workspace', { name: 'proj' }, projectTree);
expect(tree.exists('/nx.json')).toBe(true);
- expect(tree.exists('/angular.json')).toBe(true);
+ expect(tree.exists('/workspace.json')).toBe(true);
expect(tree.exists('/.prettierrc')).toBe(true);
expect(tree.exists('/.prettierignore')).toBe(true);
});
@@ -23,7 +23,7 @@ describe('workspace', () => {
expect(nxJson).toEqual({
npmScope: 'proj',
implicitDependencies: {
- 'angular.json': '*',
+ 'workspace.json': '*',
'package.json': '*',
'tsconfig.json': '*',
'tslint.json': '*',
@@ -40,6 +40,23 @@ describe('workspace', () => {
'/.vscode/extensions.json'
).recommendations;
+ expect(recommendations).toEqual([
+ 'ms-vscode.vscode-typescript-tslint-plugin',
+ 'esbenp.prettier-vscode'
+ ]);
+ });
+
+ it('should recommend vscode extensions (angular)', async () => {
+ const tree = await runSchematic(
+ 'workspace',
+ { name: 'proj', cli: 'angular' },
+ projectTree
+ );
+ const recommendations = readJsonInTree<{ recommendations: string[] }>(
+ tree,
+ '/.vscode/extensions.json'
+ ).recommendations;
+
expect(recommendations).toEqual([
'nrwl.angular-console',
'angular.ng-template',
diff --git a/packages/workspace/src/schematics/workspace/workspace.ts b/packages/workspace/src/schematics/workspace/workspace.ts
index 195b6a72cd..c0724c3257 100644
--- a/packages/workspace/src/schematics/workspace/workspace.ts
+++ b/packages/workspace/src/schematics/workspace/workspace.ts
@@ -34,10 +34,12 @@ export default function(options: Schema): Rule {
utils: strings,
dot: '.',
tmpl: '',
+ workspaceFile: options.cli === 'angular' ? 'angular' : 'workspace',
+ cliCommand: options.cli === 'angular' ? 'ng' : 'nx',
nxCli: false,
typescriptVersion,
prettierVersion,
- // angular cli and angular version are used only when workspace schematics is added to angular cli
+ // angular cli is used only when workspace schematics is added to angular cli
angularCliVersion,
...(options as object),
nxVersion,
diff --git a/packages/workspace/src/tslint/nxEnforceModuleBoundariesRule.ts b/packages/workspace/src/tslint/nxEnforceModuleBoundariesRule.ts
index c80bbeafd1..6cd31fd285 100644
--- a/packages/workspace/src/tslint/nxEnforceModuleBoundariesRule.ts
+++ b/packages/workspace/src/tslint/nxEnforceModuleBoundariesRule.ts
@@ -5,7 +5,7 @@ import * as ts from 'typescript';
import {
getProjectNodes,
normalizedProjectRoot,
- readAngularJson,
+ readWorkspaceJson,
readNxJson
} from '../command-line/shared';
import { ProjectNode, ProjectType } from '../command-line/affected-apps';
@@ -28,10 +28,10 @@ export class Rule extends Lint.Rules.AbstractRule {
if (!projectPath) {
this.projectPath = appRootPath;
if (!(global as any).projectNodes) {
- const angularJson = readAngularJson();
+ const workspaceJson = readWorkspaceJson();
const nxJson = readNxJson();
(global as any).npmScope = nxJson.npmScope;
- (global as any).projectNodes = getProjectNodes(angularJson, nxJson);
+ (global as any).projectNodes = getProjectNodes(workspaceJson, nxJson);
(global as any).deps = readDependencies(
(global as any).npmScope,
(global as any).projectNodes
diff --git a/packages/workspace/src/utils/app-root.ts b/packages/workspace/src/utils/app-root.ts
index 15eef8471f..82853b9213 100644
--- a/packages/workspace/src/utils/app-root.ts
+++ b/packages/workspace/src/utils/app-root.ts
@@ -5,28 +5,12 @@ export const appRootPath = pathInner(__dirname);
function pathInner(dir: string): string {
if (path.dirname(dir) === dir) return process.cwd();
- if (fileExists(path.join(dir, 'angular.json'))) {
+ if (
+ fileExists(path.join(dir, 'workspace.json')) ||
+ fileExists(path.join(dir, 'angular.json'))
+ ) {
return dir;
} else {
return pathInner(path.dirname(dir));
}
}
-
-export function closestCli(dir: string): string {
- if (path.dirname(dir) === dir) {
- throw new Error(`Cannot find the Angular CLI to invoke the command`);
- }
- const cliPath = path.join(
- dir,
- 'node_modules',
- '@angular',
- 'cli',
- 'lib',
- 'init.js'
- );
- if (fileExists(cliPath)) {
- return cliPath;
- } else {
- return closestCli(path.dirname(dir));
- }
-}
diff --git a/packages/workspace/src/utils/ast-utils.ts b/packages/workspace/src/utils/ast-utils.ts
index b6365d7297..bf773d23e2 100644
--- a/packages/workspace/src/utils/ast-utils.ts
+++ b/packages/workspace/src/utils/ast-utils.ts
@@ -10,6 +10,7 @@ import * as ts from 'typescript';
import * as stripJsonComments from 'strip-json-comments';
import { serializeJson } from './fileutils';
import { NodePackageInstallTask } from '@angular-devkit/schematics/tasks';
+import { getWorkspacePath } from './cli-config-utils';
function nodesByPosition(first: ts.Node, second: ts.Node): number {
return first.getStart() - second.getStart();
@@ -393,6 +394,19 @@ export function updateJsonInTree(
};
}
+export function updateWorkspaceInTree(
+ callback: (json: T, context: SchematicContext) => O
+): Rule {
+ return (host: Tree, context: SchematicContext): Tree => {
+ const path = getWorkspacePath(host);
+ host.overwrite(
+ path,
+ serializeJson(callback(readJsonInTree(host, path), context))
+ );
+ return host;
+ };
+}
+
let installAdded = false;
export function addDepsToPackageJson(
@@ -440,8 +454,8 @@ export function updatePackageJsonDependencies(
}
export function getProjectConfig(host: Tree, name: string): any {
- const angularJson = readJsonInTree(host, '/angular.json');
- const projectConfig = angularJson.projects[name];
+ const workspaceJson = readJsonInTree(host, getWorkspacePath(host));
+ const projectConfig = workspaceJson.projects[name];
if (!projectConfig) {
throw new Error(`Cannot find project '${name}'`);
} else {
diff --git a/packages/workspace/src/utils/cli-config-utils.ts b/packages/workspace/src/utils/cli-config-utils.ts
index ceb0fb98fc..c8151d8c5a 100644
--- a/packages/workspace/src/utils/cli-config-utils.ts
+++ b/packages/workspace/src/utils/cli-config-utils.ts
@@ -2,18 +2,8 @@ import { Tree } from '@angular-devkit/schematics';
import { readJsonInTree } from './ast-utils';
import { NxJson } from '../command-line/shared';
-export const angularSchematicNames = [
- 'class',
- 'component',
- 'directive',
- 'guard',
- 'module',
- 'pipe',
- 'service'
-];
-
export function getWorkspacePath(host: Tree) {
- const possibleFiles = ['/angular.json', '/.angular.json'];
+ const possibleFiles = ['/workspace.json', '/angular.json', '/.angular.json'];
return possibleFiles.filter(path => host.exists(path))[0];
}
diff --git a/packages/workspace/src/utils/fileutils.ts b/packages/workspace/src/utils/fileutils.ts
index ff2683d7ac..ed32d70f73 100644
--- a/packages/workspace/src/utils/fileutils.ts
+++ b/packages/workspace/src/utils/fileutils.ts
@@ -59,8 +59,12 @@ export function writeJsonFile(path: string, json: any) {
writeToFile(path, serializeJson(json));
}
-export function readCliConfigFile(): any {
- return readJsonFile('.angular-cli.json');
+export function readWorkspaceConfigPath(): any {
+ if (fileExists('workspace.json')) {
+ return readJsonFile('workspace.json');
+ } else {
+ return readJsonFile('workspace.json');
+ }
}
export function copyFile(file: string, target: string) {
diff --git a/packages/workspace/src/schematics/workspace/files/tslint.json b/packages/workspace/src/utils/lint.ts
similarity index 61%
rename from packages/workspace/src/schematics/workspace/files/tslint.json
rename to packages/workspace/src/utils/lint.ts
index 9172f56fb4..1f8efb3cf6 100644
--- a/packages/workspace/src/schematics/workspace/files/tslint.json
+++ b/packages/workspace/src/utils/lint.ts
@@ -1,3 +1,42 @@
+import { Tree } from '@angular-devkit/schematics';
+import { join } from '@angular-devkit/core';
+
+export function generateProjectLint(
+ projectRoot: string,
+ tsConfigPath: string,
+ linter: 'tslint' | 'eslint' | 'none'
+) {
+ if (linter === 'tslint') {
+ return {
+ builder: '@angular-devkit/build-angular:tslint',
+ options: {
+ tsConfig: [tsConfigPath],
+ exclude: ['**/node_modules/**', '!' + projectRoot + '/**']
+ }
+ };
+ } else if (linter === 'eslint') {
+ return {};
+ } else {
+ return undefined;
+ }
+}
+
+export function addGlobalLint(linter: 'tslint' | 'eslint' | 'none') {
+ return (host: Tree) => {
+ if (linter === 'tslint') {
+ if (!host.exists('/tslint.json')) {
+ host.create('/tslint.json', globalTsLint);
+ }
+ } else if (linter === 'eslint') {
+ if (!host.exists('/.eslintrc')) {
+ host.create('/.eslintrc', globalTsLint);
+ }
+ } else {
+ }
+ };
+}
+
+const globalTsLint = `
{
"rulesDirectory": ["node_modules/@nrwl/workspace/src/tslint"],
"rules": {
@@ -59,3 +98,9 @@
]
}
}
+`;
+
+const globalEsLit = `
+{
+}
+`;
diff --git a/packages/workspace/src/utils/rules/update-karma-conf.spec.ts b/packages/workspace/src/utils/rules/update-karma-conf.spec.ts
index 5f2f283b3b..c172c5fc5d 100644
--- a/packages/workspace/src/utils/rules/update-karma-conf.spec.ts
+++ b/packages/workspace/src/utils/rules/update-karma-conf.spec.ts
@@ -18,8 +18,8 @@ describe('updateKarmaConf', () => {
tree = createEmptyWorkspace(Tree.empty());
tree.create('apps/projectName/karma.conf.js', '');
const process$ = schematicRunner.callRule(
- updateJsonInTree('/angular.json', angularJson => {
- angularJson.projects.projectName = {
+ updateJsonInTree('/workspace.json', workspaceJson => {
+ workspaceJson.projects.projectName = {
root: 'apps/projectName',
architect: {
test: {
@@ -29,7 +29,7 @@ describe('updateKarmaConf', () => {
}
}
};
- return angularJson;
+ return workspaceJson;
}),
tree
);
diff --git a/packages/workspace/src/utils/testing-utils.ts b/packages/workspace/src/utils/testing-utils.ts
index 0075308cbf..7200fee832 100644
--- a/packages/workspace/src/utils/testing-utils.ts
+++ b/packages/workspace/src/utils/testing-utils.ts
@@ -1,6 +1,17 @@
-import { Tree } from '@angular-devkit/schematics';
-import { names, toFileName } from './name-utils';
+import {
+ Tree,
+ MergeStrategy,
+ DirEntry,
+ FileEntry,
+ FilePredicate,
+ UpdateRecorder,
+ Action
+} from '@angular-devkit/schematics';
import { NxJson } from '../command-line/shared';
+import {
+ _test_addWorkspaceFile,
+ WorkspaceFormat
+} from '@angular-devkit/core/src/workspace/core';
export function getFileContent(tree: Tree, path: string): string {
const fileEntry = tree.get(path);
@@ -13,8 +24,10 @@ export function getFileContent(tree: Tree, path: string): string {
}
export function createEmptyWorkspace(tree: Tree): Tree {
+ _test_addWorkspaceFile('workspace.json', WorkspaceFormat.JSON);
+
tree.create(
- '/angular.json',
+ '/workspace.json',
JSON.stringify({ version: 1, projects: {}, newProjectRoot: '' })
);
tree.create(
diff --git a/scripts/build.sh b/scripts/build.sh
index c403547f99..7b1ee213cd 100755
--- a/scripts/build.sh
+++ b/scripts/build.sh
@@ -28,7 +28,9 @@ rm -rf build/packages/angular/bundles/nrwl-angular-testing.umd.js.bak
rm -rf build/packages/angular/bundles/nrwl-angular-testing.umd.min.js.bak
rsync -a --exclude=*.ts packages/ build/packages
+chmod +x build/packages/create-nx-workspace/bin/create-nx-workspace.js
chmod +x build/packages/cli/bin/nx.js
+chmod +x build/packages/tao/index.js
rm -rf build/packages/install
rm -rf build/packages/nx/dist
@@ -47,6 +49,8 @@ cp README.md build/packages/angular
cp README.md build/packages/jest
cp README.md build/packages/cypress
cp README.md build/packages/cli
+cp README.md build/packages/tao
+
cp LICENSE build/packages/builders
cp LICENSE build/packages/schematics
cp LICENSE build/packages/nx
@@ -61,6 +65,7 @@ cp LICENSE build/packages/angular
cp LICENSE build/packages/jest
cp LICENSE build/packages/cypress
cp LICENSE build/packages/cli
+cp LICENSE build/packages/tao
echo "Nx libraries available at build/packages:"
ls build/packages
diff --git a/scripts/check-imports.js b/scripts/check-imports.js
index d77944b8db..49adabb0de 100644
--- a/scripts/check-imports.js
+++ b/scripts/check-imports.js
@@ -32,6 +32,7 @@ function check() {
'packages/web/src/utils/web.config.ts',
'packages/web/src/utils/web.config.spec.ts',
'packages/workspace/src/command-line/affected.ts',
+ 'packages/workspace/src/command-line/shared.ts',
'packages/workspace/src/schematics/preset/preset.ts',
'packages/workspace/src/schematics/ng-add/ng-add.ts',
'packages/workspace/src/utils/update-task.ts',
diff --git a/scripts/documentation/generate-npmscripts-data.ts b/scripts/documentation/generate-npmscripts-data.ts
index dffc19c3a3..fb5844fce3 100644
--- a/scripts/documentation/generate-npmscripts-data.ts
+++ b/scripts/documentation/generate-npmscripts-data.ts
@@ -80,6 +80,7 @@ function generateMarkdown(command) {
const npmscripts = getCommands(commandsObject);
Object.keys(npmscripts)
+ .filter(name => !name.startsWith('run') && !name.startsWith('generate'))
.map(name => parseCommandInstance(name, npmscripts[name]))
.map(command => generateMarkdown(command))
.forEach(templateObject =>
diff --git a/scripts/e2e-rerun.sh b/scripts/e2e-rerun.sh
index 74fff2fde3..44a0f78d9a 100755
--- a/scripts/e2e-rerun.sh
+++ b/scripts/e2e-rerun.sh
@@ -3,9 +3,9 @@
./scripts/link.sh fast
if [ -n "$1" ]; then
- jest --maxWorkers=1 ./build/e2e/schematics/$1.test.js
+ jest --maxWorkers=1 ./build/e2e/$1.test.js
else
- jest --maxWorkers=1 ./build/e2e/schematics
+ jest --maxWorkers=1 ./build/e2e
fi
diff --git a/scripts/e2e.sh b/scripts/e2e.sh
index 0c959096bf..993837be25 100755
--- a/scripts/e2e.sh
+++ b/scripts/e2e.sh
@@ -1,13 +1,18 @@
#!/usr/bin/env bash
./scripts/link.sh
-rm -rf tmp
-mkdir tmp
-if [ -n "$1" ]; then
- jest --maxWorkers=1 ./build/e2e/$1.test.js
+rm -rf tmp
+mkdir -p tmp/angular
+mkdir -p tmp/nx
+
+if test "$1" == "--cli"; then
+ export SELECTED_CLI=$2
+ jest --maxWorkers=1 ./build/e2e/*.test.js
+elif [ -n "$1" ]; then
+ jest --maxWorkers=1 ./build/e2e/$1.test.js
else
- jest --maxWorkers=1 ./build/e2e/*.test.js
+ jest --maxWorkers=1 ./build/e2e/*.test.js
fi
diff --git a/scripts/nx-release.js b/scripts/nx-release.js
index 6cc575df35..fe8209e1f4 100755
--- a/scripts/nx-release.js
+++ b/scripts/nx-release.js
@@ -161,7 +161,8 @@ const options = {
'build/npm/express/package.json',
'build/npm/nest/package.json',
'build/npm/workspace/package.json',
- 'build/npm/cli/package.json'
+ 'build/npm/cli/package.json',
+ 'build/npm/tao/package.json'
],
increment: parsedVersion.version,
requireUpstream: false,
diff --git a/scripts/package.sh b/scripts/package.sh
index ec37b7809d..f65e93f028 100755
--- a/scripts/package.sh
+++ b/scripts/package.sh
@@ -17,13 +17,13 @@ cd build/packages
if [[ "$OSTYPE" == "darwin"* ]]; then
sed -i "" "s|exports.nxVersion = '\*';|exports.nxVersion = '$NX_VERSION';|g" {react,web,jest,node,express,nest,cypress,angular,workspace}/src/utils/versions.js
- sed -i "" "s|\*|$NX_VERSION|g" {schematics,react,web,jest,node,express,nest,cypress,angular,workspace,create-nx-workspace}/package.json
+ sed -i "" "s|\*|$NX_VERSION|g" {schematics,react,web,jest,node,express,nest,cypress,angular,workspace,cli,tao,create-nx-workspace}/package.json
sed -i "" "s|NX_VERSION|$NX_VERSION|g" create-nx-workspace/bin/create-nx-workspace.js
sed -i "" "s|ANGULAR_CLI_VERSION|$ANGULAR_CLI_VERSION|g" create-nx-workspace/bin/create-nx-workspace.js
sed -i "" "s|TYPESCRIPT_VERSION|$TYPESCRIPT_VERSION|g" create-nx-workspace/bin/create-nx-workspace.js
else
sed -i "s|exports.nxVersion = '\*';|exports.nxVersion = '$NX_VERSION';|g" {react,web,jest,node,express,nest,cypress,angular,workspace}/src/utils/versions.js
- sed -i "s|\*|$NX_VERSION|g" {schematics,react,web,jest,node,express,nest,cypress,angular,workspace,create-nx-workspace}/package.json
+ sed -i "s|\*|$NX_VERSION|g" {schematics,react,web,jest,node,express,nest,cypress,angular,workspace,cli,tao,create-nx-workspace}/package.json
sed -i "s|NX_VERSION|$NX_VERSION|g" create-nx-workspace/bin/create-nx-workspace.js
sed -i "s|ANGULAR_CLI_VERSION|$ANGULAR_CLI_VERSION|g" create-nx-workspace/bin/create-nx-workspace.js
sed -i "s|TYPESCRIPT_VERSION|$TYPESCRIPT_VERSION|g" create-nx-workspace/bin/create-nx-workspace.js
@@ -31,8 +31,9 @@ fi
if [[ $NX_VERSION == "*" ]]; then
if [[ "$OSTYPE" == "darwin"* ]]; then
- sed -E -i "" "s/\"@nrwl\/([^\"]+)\": \"\\*\"/\"@nrwl\/\1\": \"file:..\/\1\"/" {schematics,jest,web,react,node,express,nest,cypress,angular,workspace,create-nx-workspace}/package.json
+ sed -E -i "" "s/\"@nrwl\/([^\"]+)\": \"\\*\"/\"@nrwl\/\1\": \"file:$PWD\/\1\"/" {schematics,jest,web,react,node,express,nest,cypress,angular,workspace,cli,tao,create-nx-workspace}/package.json
else
- sed -E -i "s/\"@nrwl\/([^\"]+)\": \"\\*\"/\"@nrwl\/\1\": \"file:..\/\1\"/" {schematics,jest,web,react,node,express,nest,cypress,angular,workspace,create-nx-workspace}/package.json
+ echo $PWD
+ sed -E -i "s|\"@nrwl\/([^\"]+)\": \"\\*\"|\"@nrwl\/\1\": \"file:$PWD\/\1\"|" {schematics,jest,web,react,node,express,nest,cypress,angular,workspace,cli,tao,create-nx-workspace}/package.json
fi
fi
diff --git a/scripts/test.sh b/scripts/test.sh
index a7bee2f2b3..0911767476 100755
--- a/scripts/test.sh
+++ b/scripts/test.sh
@@ -3,5 +3,5 @@
if [ -n "$1" ]; then
jest --maxWorkers=1 ./build/packages/$1.spec.js
else
- jest --maxWorkers=1 ./build/packages/{schematics,bazel,builders,react,jest,web,node,express,nest,cypress,angular,workspace} --passWithNoTests
+ jest --maxWorkers=1 ./build/packages/{schematics,bazel,builders,react,jest,web,node,express,nest,cypress,angular,workspace,tao} --passWithNoTests
fi
diff --git a/tsconfig.json b/tsconfig.json
index 19b23802be..af9d7a7656 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -13,6 +13,8 @@
"declaration": true,
"baseUrl": ".",
"paths": {
+ "@nrwl/tao": ["./packages/tao"],
+ "@nrwl/tao/*": ["./packages/tao/*"],
"@nrwl/workspace": ["./packages/workspace"],
"@nrwl/workspace/*": ["./packages/workspace/*"],
"@nrwl/workspace/testing": ["./packages/workspace/testing"]
diff --git a/yarn.lock b/yarn.lock
index e0a96ebfdb..e3475e77b9 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -92,28 +92,6 @@
rxjs "6.4.0"
webpack-merge "4.2.1"
-"@angular-devkit/core@7.3.8":
- version "7.3.8"
- resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-7.3.8.tgz#702b0944a69c71cce3a1492e0d62de18df22a993"
- integrity sha512-3X9uzaZXFpm5o2TSzhD6wEOtVU32CgeytKjD1Scxj+uMMVo48SWLlKiFh312T+smI9ko7tOT8VqxglwYkWosgg==
- dependencies:
- ajv "6.9.1"
- chokidar "2.0.4"
- fast-json-stable-stringify "2.0.0"
- rxjs "6.3.3"
- source-map "0.7.3"
-
-"@angular-devkit/core@8.0.0":
- version "8.0.0"
- resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-8.0.0.tgz#a0ca65d8d0f928db9288316b1f3346d21f722213"
- integrity sha512-wYf4zzpYj5Y673DG8iteK0GsDDuXBKN/TOXm4lUwmXcz8QHTD+BfR6qA5TBDqlMGpU7CP1/0vgbv2px17CDETQ==
- dependencies:
- ajv "6.10.0"
- fast-json-stable-stringify "2.0.0"
- magic-string "0.25.2"
- rxjs "6.4.0"
- source-map "0.7.3"
-
"@angular-devkit/core@8.1.1":
version "8.1.1"
resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-8.1.1.tgz#da7bb908ce42cb5c5fde08d600880b6fda486056"
@@ -125,21 +103,16 @@
rxjs "6.4.0"
source-map "0.7.3"
-"@angular-devkit/schematics@7.3.8":
- version "7.3.8"
- resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-7.3.8.tgz#70bfc7876f7924ff53ab9310a00b62f20acf2f5c"
- integrity sha512-mvaKoORZIaW/h0VNZ3IQWP0qThRCZRX6869FNlzV0jlW0mhn07XbiIGHCGGSCDRxS7qJ0VbuIVnKXntF+iDeWw==
+"@angular-devkit/core@8.1.2":
+ version "8.1.2"
+ resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-8.1.2.tgz#8220725a2251a415e0588e65febb5bf2a931f471"
+ integrity sha512-sNkqXbkHE9+ObtLOYmDKJL1bOf1zY0AwGVKemgDqCmu1mRUNqhb7CmF13DRscfU3MEcuiJYDjXqBQDjIszrFiw==
dependencies:
- "@angular-devkit/core" "7.3.8"
- rxjs "6.3.3"
-
-"@angular-devkit/schematics@8.0.0":
- version "8.0.0"
- resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-8.0.0.tgz#53d14646c6286b0397417990fc83e3e9a6ecf233"
- integrity sha512-IXJOs/DkDqNbfG76sNNY5ePZ37rjkMUopmtvhN6/U1hQFwTpGa9N0bCHFphcKraXeS6Jfox5XwFEStc/1xyhfw==
- dependencies:
- "@angular-devkit/core" "8.0.0"
+ ajv "6.10.0"
+ fast-json-stable-stringify "2.0.0"
+ magic-string "0.25.3"
rxjs "6.4.0"
+ source-map "0.7.3"
"@angular-devkit/schematics@8.1.1":
version "8.1.1"
@@ -149,6 +122,14 @@
"@angular-devkit/core" "8.1.1"
rxjs "6.4.0"
+"@angular-devkit/schematics@8.1.2":
+ version "8.1.2"
+ resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-8.1.2.tgz#2b8926d4af7992d6f99ddecd86cd81cb1a619d69"
+ integrity sha512-Di/3vPR4jwdYcMAk13t19sAF0qQUH8KSkFcmO/5E/gECTL1tXNvV690K1Vhn6zpeE17Z1MLB5HwRNcb6nJkD+Q==
+ dependencies:
+ "@angular-devkit/core" "8.1.2"
+ rxjs "6.4.0"
+
"@angular/cli@8.1.1":
version "8.1.1"
resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-8.1.1.tgz#c63e525c74046457f07d35cb3ec66818c8c6d7b1"
@@ -174,16 +155,16 @@
uuid "^3.3.2"
"@angular/common@^8.0.0":
- version "8.0.0"
- resolved "https://registry.yarnpkg.com/@angular/common/-/common-8.0.0.tgz#700aeda9be8af96692fce0ea6bf6157f7c874c0e"
- integrity sha512-iOAJZ0+1zTRHnHE/5G30+4Q66W1pfZkSkxZIXvgijZ+wtuNloYdWNy/IdZ/m7ayBI7A6FsYEhyMUoWz2HVEJNw==
+ version "8.1.2"
+ resolved "https://registry.yarnpkg.com/@angular/common/-/common-8.1.2.tgz#43a7fd1179d179cae9142a3e6ae60a26a34dd062"
+ integrity sha512-bywFofN5RjcvygYEC/3eo+bfUnYBmARA6DPau8fm6D2ZGpXrWXJ3Thd99ZesuuffvpniaIHlAjbHGI83XSnixQ==
dependencies:
tslib "^1.9.0"
"@angular/compiler-cli@^8.0.0":
- version "8.0.0"
- resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-8.0.0.tgz#b53ebb5accc34a68bf7a63d16130ca7c568f8a51"
- integrity sha512-Z0U0Ih8A7V3J1gq7AXnXbrGAD2ERmz7JbREJJRHDWiUNxIqGQiV3Odo1V8FL5n/cKvLwSYM2Ubvk10gb0+3njA==
+ version "8.1.2"
+ resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-8.1.2.tgz#1b20c3e53520bf8bbece4ba88171dec79eb78e9c"
+ integrity sha512-Dxm99iuv265AlUf3aX3nRl+Iqrj3RvlQgPOYLsV1EEVnA2+4Mjj52zbKgdOOOfhCF48imVbaU45Sh8p2l1xdOw==
dependencies:
canonical-path "1.0.0"
chokidar "^2.1.1"
@@ -192,108 +173,87 @@
magic-string "^0.25.0"
minimist "^1.2.0"
reflect-metadata "^0.1.2"
- shelljs "^0.8.1"
source-map "^0.6.1"
tslib "^1.9.0"
yargs "13.1.0"
"@angular/compiler@^8.0.0":
- version "8.0.0"
- resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-8.0.0.tgz#302c987737e1473db3a113ff70fbbb315aa41b58"
- integrity sha512-4rKsVFMNykF83tPL1VE1+j9kZ3cWHUsLOAB/VqmF64EcR/GsbjKog2v23rSso5kqUtPiVq/FWGYllW6qMdxtJA==
+ version "8.1.2"
+ resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-8.1.2.tgz#db91a652a5c725b553ef946976446121c024bd0b"
+ integrity sha512-oRkHrstOV6imbb4mGf6q20d4N4iYfBbI6WfxtPL4dz08GipGg4Zvekn4e3R01vzhFBxssGcgmeEtFQJh/UzI8g==
dependencies:
tslib "^1.9.0"
"@angular/core@^8.0.0":
- version "8.0.0"
- resolved "https://registry.yarnpkg.com/@angular/core/-/core-8.0.0.tgz#bf7a582b818e9181d830219907470e2b865ba32f"
- integrity sha512-mrkP1PTzqCmZGLYll+TDyawLXHzi+FcRPqSuRxCmDMthUUE93SLXT2yISDkx9aMPtFKgFr6KfrIkKuCz16BP/g==
+ version "8.1.2"
+ resolved "https://registry.yarnpkg.com/@angular/core/-/core-8.1.2.tgz#d05a4965093a9ce7e7776088dc2b9e7e885e8d9f"
+ integrity sha512-Gm/UIUnIkeah39vxi4enVH/CUcPZOgGDyw4RNagw4pH8dTP8V0RUz8uteOr3DS+Eh49BcHkrT2oU5MBZSZ3lvw==
dependencies:
tslib "^1.9.0"
"@angular/platform-browser-dynamic@^8.0.0":
- version "8.0.0"
- resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-8.0.0.tgz#c15f394579ff44f3752033de58edc1afa5065d59"
- integrity sha512-dx7W7JoSFbsveexjZ/BPlsXbMDLWVLmRCo7IqLvibMrTbdpaaOCNJIXJk1X+f7JJrQ7SwlZaVkoLCMoDWw6fmA==
+ version "8.1.2"
+ resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-8.1.2.tgz#10297054900daf8728e9ad8531d7ea40d1270bc7"
+ integrity sha512-NmbGMwKPbYq3ZFt6nOqRslJsQNRS2E94cjkSLseEb5wauUmdUBX9stoHu8BOhvd+EIEcYhD7uxPB+L/qPsH46g==
dependencies:
tslib "^1.9.0"
"@angular/platform-browser@^8.0.0":
- version "8.0.0"
- resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-8.0.0.tgz#fc7c55a0483e67e5606e499c129fda60ae8d4363"
- integrity sha512-fTD+pTMbq+On9Uv3VXiei2lfuX7GX31dngm/Y4yWTFeW6eXy0+7kkfflzpLOb0hykCZvcXzarqCuEBBYNLrrOg==
+ version "8.1.2"
+ resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-8.1.2.tgz#5e136f10656a950d5a8e65da68a7270fadc83875"
+ integrity sha512-n61OtH3B0e+LTHCfHPjB7hiuo0ZxKxZvNWigczGyLZf2abga5jac2bNrdZnU8zXC44AUfasUD2qDS2IPIhNbqA==
dependencies:
tslib "^1.9.0"
"@angular/router@^8.0.0":
- version "8.0.0"
- resolved "https://registry.yarnpkg.com/@angular/router/-/router-8.0.0.tgz#26094fd473e17441b0ae8af4883ec1b4ea3ad569"
- integrity sha512-DGUTb8qpndE5m716xh00GxuC8o7qamlqbUruGB+SQD6ynU7s5yLGxtKffxqb1BT63+YewpsVxc2Koruvb1qjDw==
+ version "8.1.2"
+ resolved "https://registry.yarnpkg.com/@angular/router/-/router-8.1.2.tgz#83dbab106918225da9a3e03945380483f244085e"
+ integrity sha512-+SWoYZHyDBBUydDTbIu+hyoGzWtSA4VUsriUPWEOCplzQiabFhWxVvcT00mO0cim4XfupL1tmiPjE66sivLYBw==
dependencies:
tslib "^1.9.0"
"@angular/upgrade@^8.0.0":
- version "8.0.0"
- resolved "https://registry.yarnpkg.com/@angular/upgrade/-/upgrade-8.0.0.tgz#7a756815c553350ba4cd64a0275ac6fc14286898"
- integrity sha512-HRL99P13Mql3/kyrX/XUHqA8fdXC6QAmEnbcatAyCq6BGjJ047z1EFv/A6LHXXN5GFAgziyQbEqw3CnhjUeRVw==
+ version "8.1.2"
+ resolved "https://registry.yarnpkg.com/@angular/upgrade/-/upgrade-8.1.2.tgz#65a18d42e593fda7316cf4d4db925962b1dc84cb"
+ integrity sha512-VqpZC5ulA91s8CjlsrjjusPQ0RQgfJ5jeOBxVvfpZE6x213E0ONXHhjbvaHqarSOPJ2DPRJIdNKZLvY/rXBSDw==
dependencies:
tslib "^1.9.0"
-"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.0.0-beta.35":
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8"
- integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.0.0-beta.35", "@babel/code-frame@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d"
+ integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==
dependencies:
"@babel/highlight" "^7.0.0"
-"@babel/core@^7.0.1":
- version "7.4.5"
- resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.4.5.tgz#081f97e8ffca65a9b4b0fdc7e274e703f000c06a"
- integrity sha512-OvjIh6aqXtlsA8ujtGKfC7LYWksYSX8yQcM8Ay3LuvVeQ63lcOKgoZWVqcpFwkd29aYU9rVx7jxhfhiEDV9MZA==
+"@babel/core@^7.0.1", "@babel/core@^7.1.0":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.5.5.tgz#17b2686ef0d6bc58f963dddd68ab669755582c30"
+ integrity sha512-i4qoSr2KTtce0DmkuuQBV4AuQgGPUcPXMr9L5MyYAtk06z068lQ10a4O009fe5OB/DfNV+h+qqT7ddNV8UnRjg==
dependencies:
- "@babel/code-frame" "^7.0.0"
- "@babel/generator" "^7.4.4"
- "@babel/helpers" "^7.4.4"
- "@babel/parser" "^7.4.5"
+ "@babel/code-frame" "^7.5.5"
+ "@babel/generator" "^7.5.5"
+ "@babel/helpers" "^7.5.5"
+ "@babel/parser" "^7.5.5"
"@babel/template" "^7.4.4"
- "@babel/traverse" "^7.4.5"
- "@babel/types" "^7.4.4"
+ "@babel/traverse" "^7.5.5"
+ "@babel/types" "^7.5.5"
convert-source-map "^1.1.0"
debug "^4.1.0"
json5 "^2.1.0"
- lodash "^4.17.11"
+ lodash "^4.17.13"
resolve "^1.3.2"
semver "^5.4.1"
source-map "^0.5.0"
-"@babel/core@^7.1.0":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.4.4.tgz#84055750b05fcd50f9915a826b44fa347a825250"
- integrity sha512-lQgGX3FPRgbz2SKmhMtYgJvVzGZrmjaF4apZ2bLwofAKiSjxU0drPh4S/VasyYXwaTs+A1gvQ45BN8SQJzHsQQ==
+"@babel/generator@^7.4.0", "@babel/generator@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.5.5.tgz#873a7f936a3c89491b43536d12245b626664e3cf"
+ integrity sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ==
dependencies:
- "@babel/code-frame" "^7.0.0"
- "@babel/generator" "^7.4.4"
- "@babel/helpers" "^7.4.4"
- "@babel/parser" "^7.4.4"
- "@babel/template" "^7.4.4"
- "@babel/traverse" "^7.4.4"
- "@babel/types" "^7.4.4"
- convert-source-map "^1.1.0"
- debug "^4.1.0"
- json5 "^2.1.0"
- lodash "^4.17.11"
- resolve "^1.3.2"
- semver "^5.4.1"
- source-map "^0.5.0"
-
-"@babel/generator@^7.4.0", "@babel/generator@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.4.4.tgz#174a215eb843fc392c7edcaabeaa873de6e8f041"
- integrity sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==
- dependencies:
- "@babel/types" "^7.4.4"
+ "@babel/types" "^7.5.5"
jsesc "^2.5.1"
- lodash "^4.17.11"
+ lodash "^4.17.13"
source-map "^0.5.0"
trim-right "^1.0.1"
@@ -321,14 +281,14 @@
"@babel/traverse" "^7.4.4"
"@babel/types" "^7.4.4"
-"@babel/helper-define-map@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.4.4.tgz#6969d1f570b46bdc900d1eba8e5d59c48ba2c12a"
- integrity sha512-IX3Ln8gLhZpSuqHJSnTNBWGDE9kdkTEWl21A/K7PQ00tseBwbqCHTvNLHSBd9M0R5rER4h5Rsvj9vw0R5SieBg==
+"@babel/helper-define-map@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz#3dec32c2046f37e09b28c93eb0b103fd2a25d369"
+ integrity sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg==
dependencies:
"@babel/helper-function-name" "^7.1.0"
- "@babel/types" "^7.4.4"
- lodash "^4.17.11"
+ "@babel/types" "^7.5.5"
+ lodash "^4.17.13"
"@babel/helper-explode-assignable-expression@^7.1.0":
version "7.1.0"
@@ -361,12 +321,12 @@
dependencies:
"@babel/types" "^7.4.4"
-"@babel/helper-member-expression-to-functions@^7.0.0":
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz#8cd14b0a0df7ff00f009e7d7a436945f47c7a16f"
- integrity sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==
+"@babel/helper-member-expression-to-functions@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz#1fb5b8ec4453a93c439ee9fe3aeea4a84b76b590"
+ integrity sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA==
dependencies:
- "@babel/types" "^7.0.0"
+ "@babel/types" "^7.5.5"
"@babel/helper-module-imports@^7.0.0":
version "7.0.0"
@@ -376,16 +336,16 @@
"@babel/types" "^7.0.0"
"@babel/helper-module-transforms@^7.1.0", "@babel/helper-module-transforms@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.4.4.tgz#96115ea42a2f139e619e98ed46df6019b94414b8"
- integrity sha512-3Z1yp8TVQf+B4ynN7WoHPKS8EkdTbgAEy0nU0rs/1Kw4pDgmvYH3rz3aI11KgxKCba2cn7N+tqzV1mY2HMN96w==
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz#f84ff8a09038dcbca1fd4355661a500937165b4a"
+ integrity sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw==
dependencies:
"@babel/helper-module-imports" "^7.0.0"
"@babel/helper-simple-access" "^7.1.0"
"@babel/helper-split-export-declaration" "^7.4.4"
"@babel/template" "^7.4.4"
- "@babel/types" "^7.4.4"
- lodash "^4.17.11"
+ "@babel/types" "^7.5.5"
+ lodash "^4.17.13"
"@babel/helper-optimise-call-expression@^7.0.0":
version "7.0.0"
@@ -400,11 +360,11 @@
integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==
"@babel/helper-regex@^7.0.0", "@babel/helper-regex@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.4.4.tgz#a47e02bc91fb259d2e6727c2a30013e3ac13c4a2"
- integrity sha512-Y5nuB/kESmR3tKjU8Nkn1wMGEx1tjJX076HBMeL3XLQCu6vA/YRzuTW0bbb+qRnXvQGn+d6Rx953yffl8vEy7Q==
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.5.5.tgz#0aa6824f7100a2e0e89c1527c23936c152cab351"
+ integrity sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw==
dependencies:
- lodash "^4.17.11"
+ lodash "^4.17.13"
"@babel/helper-remap-async-to-generator@^7.1.0":
version "7.1.0"
@@ -417,15 +377,15 @@
"@babel/traverse" "^7.1.0"
"@babel/types" "^7.0.0"
-"@babel/helper-replace-supers@^7.1.0", "@babel/helper-replace-supers@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.4.4.tgz#aee41783ebe4f2d3ab3ae775e1cc6f1a90cefa27"
- integrity sha512-04xGEnd+s01nY1l15EuMS1rfKktNF+1CkKmHoErDppjAAZL+IUBZpzT748x262HF7fibaQPhbvWUl5HeSt1EXg==
+"@babel/helper-replace-supers@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz#f84ce43df031222d2bad068d2626cb5799c34bc2"
+ integrity sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg==
dependencies:
- "@babel/helper-member-expression-to-functions" "^7.0.0"
+ "@babel/helper-member-expression-to-functions" "^7.5.5"
"@babel/helper-optimise-call-expression" "^7.0.0"
- "@babel/traverse" "^7.4.4"
- "@babel/types" "^7.4.4"
+ "@babel/traverse" "^7.5.5"
+ "@babel/types" "^7.5.5"
"@babel/helper-simple-access@^7.1.0":
version "7.1.0"
@@ -452,33 +412,28 @@
"@babel/traverse" "^7.1.0"
"@babel/types" "^7.2.0"
-"@babel/helpers@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.4.4.tgz#868b0ef59c1dd4e78744562d5ce1b59c89f2f2a5"
- integrity sha512-igczbR/0SeuPR8RFfC7tGrbdTbFL3QTvH6D+Z6zNxnTe//GyqmtHmDkzrqDmyZ3eSwPqB/LhyKoU5DXsp+Vp2A==
+"@babel/helpers@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.5.5.tgz#63908d2a73942229d1e6685bc2a0e730dde3b75e"
+ integrity sha512-nRq2BUhxZFnfEn/ciJuhklHvFOqjJUD5wpx+1bxUF2axL9C+v4DE/dmp5sT2dKnpOs4orZWzpAZqlCy8QqE/7g==
dependencies:
"@babel/template" "^7.4.4"
- "@babel/traverse" "^7.4.4"
- "@babel/types" "^7.4.4"
+ "@babel/traverse" "^7.5.5"
+ "@babel/types" "^7.5.5"
"@babel/highlight@^7.0.0":
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4"
- integrity sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==
+ version "7.5.0"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540"
+ integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==
dependencies:
chalk "^2.0.0"
esutils "^2.0.2"
js-tokens "^4.0.0"
-"@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.4.tgz#5977129431b8fe33471730d255ce8654ae1250b6"
- integrity sha512-5pCS4mOsL+ANsFZGdvNLybx4wtqAZJ0MJjMHxvzI3bvIsz6sQvzW8XX92EYIkiPtIvcfG3Aj+Ir5VNyjnZhP7w==
-
-"@babel/parser@^7.4.5":
- version "7.4.5"
- resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.5.tgz#04af8d5d5a2b044a2a1bffacc1e5e6673544e872"
- integrity sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew==
+"@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.4.4", "@babel/parser@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.5.5.tgz#02f077ac8817d3df4a832ef59de67565e71cca4b"
+ integrity sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g==
"@babel/plugin-proposal-async-generator-functions@^7.2.0":
version "7.2.0"
@@ -489,6 +444,14 @@
"@babel/helper-remap-async-to-generator" "^7.1.0"
"@babel/plugin-syntax-async-generators" "^7.2.0"
+"@babel/plugin-proposal-dynamic-import@^7.5.0":
+ version "7.5.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz#e532202db4838723691b10a67b8ce509e397c506"
+ integrity sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-syntax-dynamic-import" "^7.2.0"
+
"@babel/plugin-proposal-json-strings@^7.2.0":
version "7.2.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz#568ecc446c6148ae6b267f02551130891e29f317"
@@ -497,10 +460,10 @@
"@babel/helper-plugin-utils" "^7.0.0"
"@babel/plugin-syntax-json-strings" "^7.2.0"
-"@babel/plugin-proposal-object-rest-spread@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.4.tgz#1ef173fcf24b3e2df92a678f027673b55e7e3005"
- integrity sha512-dMBG6cSPBbHeEBdFXeQ2QLc5gUpg4Vkaz8octD4aoW/ISO+jBOcsuxYL7bsb5WSu8RLP6boxrBIALEHgoHtO9g==
+"@babel/plugin-proposal-object-rest-spread@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.5.tgz#61939744f71ba76a3ae46b5eea18a54c16d22e58"
+ integrity sha512-F2DxJJSQ7f64FyTVl5cw/9MWn6naXGdk3Q3UhDbFEEHv+EilCPoeRD3Zh/Utx1CJz4uyKlQ4uH+bJPbEhMV7Zw==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
"@babel/plugin-syntax-object-rest-spread" "^7.2.0"
@@ -529,6 +492,13 @@
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
+"@babel/plugin-syntax-dynamic-import@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz#69c159ffaf4998122161ad8ebc5e6d1f55df8612"
+ integrity sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
"@babel/plugin-syntax-json-strings@^7.2.0":
version "7.2.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz#72bd13f6ffe1d25938129d2a186b11fd62951470"
@@ -557,10 +527,10 @@
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
-"@babel/plugin-transform-async-to-generator@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.4.tgz#a3f1d01f2f21cadab20b33a82133116f14fb5894"
- integrity sha512-YiqW2Li8TXmzgbXw+STsSqPBPFnGviiaSp6CYOq55X8GQ2SGVLrXB6pNid8HkqkZAzOH6knbai3snhP7v0fNwA==
+"@babel/plugin-transform-async-to-generator@^7.5.0":
+ version "7.5.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz#89a3848a0166623b5bc481164b5936ab947e887e"
+ integrity sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg==
dependencies:
"@babel/helper-module-imports" "^7.0.0"
"@babel/helper-plugin-utils" "^7.0.0"
@@ -573,25 +543,25 @@
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
-"@babel/plugin-transform-block-scoping@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.4.tgz#c13279fabf6b916661531841a23c4b7dae29646d"
- integrity sha512-jkTUyWZcTrwxu5DD4rWz6rDB5Cjdmgz6z7M7RLXOJyCUkFBawssDGcGh8M/0FTSB87avyJI1HsTwUXp9nKA1PA==
+"@babel/plugin-transform-block-scoping@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.5.5.tgz#a35f395e5402822f10d2119f6f8e045e3639a2ce"
+ integrity sha512-82A3CLRRdYubkG85lKwhZB0WZoHxLGsJdux/cOVaJCJpvYFl1LVzAIFyRsa7CvXqW8rBM4Zf3Bfn8PHt5DP0Sg==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
- lodash "^4.17.11"
+ lodash "^4.17.13"
-"@babel/plugin-transform-classes@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.4.tgz#0ce4094cdafd709721076d3b9c38ad31ca715eb6"
- integrity sha512-/e44eFLImEGIpL9qPxSRat13I5QNRgBLu2hOQJCF7VLy/otSM/sypV1+XaIw5+502RX/+6YaSAPmldk+nhHDPw==
+"@babel/plugin-transform-classes@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz#d094299d9bd680a14a2a0edae38305ad60fb4de9"
+ integrity sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg==
dependencies:
"@babel/helper-annotate-as-pure" "^7.0.0"
- "@babel/helper-define-map" "^7.4.4"
+ "@babel/helper-define-map" "^7.5.5"
"@babel/helper-function-name" "^7.1.0"
"@babel/helper-optimise-call-expression" "^7.0.0"
"@babel/helper-plugin-utils" "^7.0.0"
- "@babel/helper-replace-supers" "^7.4.4"
+ "@babel/helper-replace-supers" "^7.5.5"
"@babel/helper-split-export-declaration" "^7.4.4"
globals "^11.1.0"
@@ -602,10 +572,10 @@
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
-"@babel/plugin-transform-destructuring@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.4.tgz#9d964717829cc9e4b601fc82a26a71a4d8faf20f"
- integrity sha512-/aOx+nW0w8eHiEHm+BTERB2oJn5D127iye/SUQl7NjHy0lf+j7h4MKMMSOwdazGq9OxgiNADncE+SRJkCxjZpQ==
+"@babel/plugin-transform-destructuring@^7.5.0":
+ version "7.5.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.5.0.tgz#f6c09fdfe3f94516ff074fe877db7bc9ef05855a"
+ integrity sha512-YbYgbd3TryYYLGyC7ZR+Tq8H/+bCmwoaxHfJHupom5ECstzbRLTch6gOQbhEY9Z4hiCNHEURgq06ykFv9JZ/QQ==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
@@ -618,10 +588,10 @@
"@babel/helper-regex" "^7.4.4"
regexpu-core "^4.5.4"
-"@babel/plugin-transform-duplicate-keys@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz#d952c4930f312a4dbfff18f0b2914e60c35530b3"
- integrity sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw==
+"@babel/plugin-transform-duplicate-keys@^7.5.0":
+ version "7.5.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz#c5dbf5106bf84cdf691222c0974c12b1df931853"
+ integrity sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
@@ -662,30 +632,33 @@
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
-"@babel/plugin-transform-modules-amd@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz#82a9bce45b95441f617a24011dc89d12da7f4ee6"
- integrity sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw==
+"@babel/plugin-transform-modules-amd@^7.5.0":
+ version "7.5.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz#ef00435d46da0a5961aa728a1d2ecff063e4fb91"
+ integrity sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg==
dependencies:
"@babel/helper-module-transforms" "^7.1.0"
"@babel/helper-plugin-utils" "^7.0.0"
+ babel-plugin-dynamic-import-node "^2.3.0"
-"@babel/plugin-transform-modules-commonjs@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.4.tgz#0bef4713d30f1d78c2e59b3d6db40e60192cac1e"
- integrity sha512-4sfBOJt58sEo9a2BQXnZq+Q3ZTSAUXyK3E30o36BOGnJ+tvJ6YSxF0PG6kERvbeISgProodWuI9UVG3/FMY6iw==
+"@babel/plugin-transform-modules-commonjs@^7.5.0":
+ version "7.5.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.5.0.tgz#425127e6045231360858eeaa47a71d75eded7a74"
+ integrity sha512-xmHq0B+ytyrWJvQTc5OWAC4ii6Dhr0s22STOoydokG51JjWhyYo5mRPXoi+ZmtHQhZZwuXNN+GG5jy5UZZJxIQ==
dependencies:
"@babel/helper-module-transforms" "^7.4.4"
"@babel/helper-plugin-utils" "^7.0.0"
"@babel/helper-simple-access" "^7.1.0"
+ babel-plugin-dynamic-import-node "^2.3.0"
-"@babel/plugin-transform-modules-systemjs@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.4.tgz#dc83c5665b07d6c2a7b224c00ac63659ea36a405"
- integrity sha512-MSiModfILQc3/oqnG7NrP1jHaSPryO6tA2kOMmAQApz5dayPxWiHqmq4sWH2xF5LcQK56LlbKByCd8Aah/OIkQ==
+"@babel/plugin-transform-modules-systemjs@^7.5.0":
+ version "7.5.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz#e75266a13ef94202db2a0620977756f51d52d249"
+ integrity sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg==
dependencies:
"@babel/helper-hoist-variables" "^7.4.4"
"@babel/helper-plugin-utils" "^7.0.0"
+ babel-plugin-dynamic-import-node "^2.3.0"
"@babel/plugin-transform-modules-umd@^7.2.0":
version "7.2.0"
@@ -709,13 +682,13 @@
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
-"@babel/plugin-transform-object-super@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz#b35d4c10f56bab5d650047dad0f1d8e8814b6598"
- integrity sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==
+"@babel/plugin-transform-object-super@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz#c70021df834073c65eb613b8679cc4a381d1a9f9"
+ integrity sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
- "@babel/helper-replace-supers" "^7.1.0"
+ "@babel/helper-replace-supers" "^7.5.5"
"@babel/plugin-transform-parameters@^7.4.4":
version "7.4.4"
@@ -794,42 +767,44 @@
regexpu-core "^4.5.4"
"@babel/preset-env@^7.0.0":
- version "7.4.5"
- resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.4.5.tgz#2fad7f62983d5af563b5f3139242755884998a58"
- integrity sha512-f2yNVXM+FsR5V8UwcFeIHzHWgnhXg3NpRmy0ADvALpnhB0SLbCvrCRr4BLOUYbQNLS+Z0Yer46x9dJXpXewI7w==
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.5.5.tgz#bc470b53acaa48df4b8db24a570d6da1fef53c9a"
+ integrity sha512-GMZQka/+INwsMz1A5UEql8tG015h5j/qjptpKY2gJ7giy8ohzU710YciJB5rcKsWGWHiW3RUnHib0E5/m3Tp3A==
dependencies:
"@babel/helper-module-imports" "^7.0.0"
"@babel/helper-plugin-utils" "^7.0.0"
"@babel/plugin-proposal-async-generator-functions" "^7.2.0"
+ "@babel/plugin-proposal-dynamic-import" "^7.5.0"
"@babel/plugin-proposal-json-strings" "^7.2.0"
- "@babel/plugin-proposal-object-rest-spread" "^7.4.4"
+ "@babel/plugin-proposal-object-rest-spread" "^7.5.5"
"@babel/plugin-proposal-optional-catch-binding" "^7.2.0"
"@babel/plugin-proposal-unicode-property-regex" "^7.4.4"
"@babel/plugin-syntax-async-generators" "^7.2.0"
+ "@babel/plugin-syntax-dynamic-import" "^7.2.0"
"@babel/plugin-syntax-json-strings" "^7.2.0"
"@babel/plugin-syntax-object-rest-spread" "^7.2.0"
"@babel/plugin-syntax-optional-catch-binding" "^7.2.0"
"@babel/plugin-transform-arrow-functions" "^7.2.0"
- "@babel/plugin-transform-async-to-generator" "^7.4.4"
+ "@babel/plugin-transform-async-to-generator" "^7.5.0"
"@babel/plugin-transform-block-scoped-functions" "^7.2.0"
- "@babel/plugin-transform-block-scoping" "^7.4.4"
- "@babel/plugin-transform-classes" "^7.4.4"
+ "@babel/plugin-transform-block-scoping" "^7.5.5"
+ "@babel/plugin-transform-classes" "^7.5.5"
"@babel/plugin-transform-computed-properties" "^7.2.0"
- "@babel/plugin-transform-destructuring" "^7.4.4"
+ "@babel/plugin-transform-destructuring" "^7.5.0"
"@babel/plugin-transform-dotall-regex" "^7.4.4"
- "@babel/plugin-transform-duplicate-keys" "^7.2.0"
+ "@babel/plugin-transform-duplicate-keys" "^7.5.0"
"@babel/plugin-transform-exponentiation-operator" "^7.2.0"
"@babel/plugin-transform-for-of" "^7.4.4"
"@babel/plugin-transform-function-name" "^7.4.4"
"@babel/plugin-transform-literals" "^7.2.0"
"@babel/plugin-transform-member-expression-literals" "^7.2.0"
- "@babel/plugin-transform-modules-amd" "^7.2.0"
- "@babel/plugin-transform-modules-commonjs" "^7.4.4"
- "@babel/plugin-transform-modules-systemjs" "^7.4.4"
+ "@babel/plugin-transform-modules-amd" "^7.5.0"
+ "@babel/plugin-transform-modules-commonjs" "^7.5.0"
+ "@babel/plugin-transform-modules-systemjs" "^7.5.0"
"@babel/plugin-transform-modules-umd" "^7.2.0"
"@babel/plugin-transform-named-capturing-groups-regex" "^7.4.5"
"@babel/plugin-transform-new-target" "^7.4.4"
- "@babel/plugin-transform-object-super" "^7.2.0"
+ "@babel/plugin-transform-object-super" "^7.5.5"
"@babel/plugin-transform-parameters" "^7.4.4"
"@babel/plugin-transform-property-literals" "^7.2.0"
"@babel/plugin-transform-regenerator" "^7.4.5"
@@ -840,7 +815,7 @@
"@babel/plugin-transform-template-literals" "^7.4.4"
"@babel/plugin-transform-typeof-symbol" "^7.2.0"
"@babel/plugin-transform-unicode-regex" "^7.4.4"
- "@babel/types" "^7.4.4"
+ "@babel/types" "^7.5.5"
browserslist "^4.6.0"
core-js-compat "^3.1.1"
invariant "^2.2.2"
@@ -848,9 +823,9 @@
semver "^5.5.0"
"@babel/runtime@^7.1.2", "@babel/runtime@^7.4.0", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.4":
- version "7.5.4"
- resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.5.4.tgz#cb7d1ad7c6d65676e66b47186577930465b5271b"
- integrity sha512-Na84uwyImZZc3FKf4aUF1tysApzwf3p2yuFBIyBfbzT5glzKTdvYI4KVW4kcgjrzoGUjC7w3YyCHcJKaRxsr2Q==
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.5.5.tgz#74fba56d35efbeca444091c7850ccd494fd2f132"
+ integrity sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==
dependencies:
regenerator-runtime "^0.13.2"
@@ -863,43 +838,28 @@
"@babel/parser" "^7.4.4"
"@babel/types" "^7.4.4"
-"@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.4.4.tgz#0776f038f6d78361860b6823887d4f3937133fe8"
- integrity sha512-Gw6qqkw/e6AGzlyj9KnkabJX7VcubqPtkUQVAwkc0wUMldr3A/hezNB3Rc5eIvId95iSGkGIOe5hh1kMKf951A==
+"@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.5.5.tgz#f664f8f368ed32988cd648da9f72d5ca70f165bb"
+ integrity sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ==
dependencies:
- "@babel/code-frame" "^7.0.0"
- "@babel/generator" "^7.4.4"
+ "@babel/code-frame" "^7.5.5"
+ "@babel/generator" "^7.5.5"
"@babel/helper-function-name" "^7.1.0"
"@babel/helper-split-export-declaration" "^7.4.4"
- "@babel/parser" "^7.4.4"
- "@babel/types" "^7.4.4"
+ "@babel/parser" "^7.5.5"
+ "@babel/types" "^7.5.5"
debug "^4.1.0"
globals "^11.1.0"
- lodash "^4.17.11"
+ lodash "^4.17.13"
-"@babel/traverse@^7.4.5":
- version "7.4.5"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.4.5.tgz#4e92d1728fd2f1897dafdd321efbff92156c3216"
- integrity sha512-Vc+qjynwkjRmIFGxy0KYoPj4FdVDxLej89kMHFsWScq999uX+pwcX4v9mWRjW0KcAYTPAuVQl2LKP1wEVLsp+A==
- dependencies:
- "@babel/code-frame" "^7.0.0"
- "@babel/generator" "^7.4.4"
- "@babel/helper-function-name" "^7.1.0"
- "@babel/helper-split-export-declaration" "^7.4.4"
- "@babel/parser" "^7.4.5"
- "@babel/types" "^7.4.4"
- debug "^4.1.0"
- globals "^11.1.0"
- lodash "^4.17.11"
-
-"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.4.4.tgz#8db9e9a629bb7c29370009b4b779ed93fe57d5f0"
- integrity sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==
+"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.5.5.tgz#97b9f728e182785909aa4ab56264f090a028d18a"
+ integrity sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==
dependencies:
esutils "^2.0.2"
- lodash "^4.17.11"
+ lodash "^4.17.13"
to-fast-properties "^2.0.0"
"@cnakazawa/watch@^1.0.3":
@@ -1103,50 +1063,50 @@
glob-to-regexp "^0.3.0"
"@nestjs/common@^6.2.4":
- version "6.2.4"
- resolved "https://registry.yarnpkg.com/@nestjs/common/-/common-6.2.4.tgz#ee6ff8b07494ce7242b1e61fb7fae9f64ec963d6"
- integrity sha512-YZvJ6/S7yVQZK+9rupCzMCg4tpbc9DyVvLoTx0NBDqExTCUNcNEcCtn0AZrO/hLqbeYODnJwGE2NxkH1R/qw+w==
+ version "6.5.3"
+ resolved "https://registry.yarnpkg.com/@nestjs/common/-/common-6.5.3.tgz#25a3916b53f1e681640641bdb96a40bb37a15515"
+ integrity sha512-8d39grIMrUYGKM46BFWxB6csQFCu1S2aK7azPivg7gTRVSbvR84cVd6tgRVM0LwFpqQrtn3Q6G6Pa8FSk7Kh1w==
dependencies:
- axios "0.18.0"
+ axios "0.19.0"
cli-color "1.4.0"
uuid "3.3.2"
"@nestjs/core@^6.2.4":
- version "6.2.4"
- resolved "https://registry.yarnpkg.com/@nestjs/core/-/core-6.2.4.tgz#ab2436ebfee356ae4ac66f19378f8ed57ac2c3c9"
- integrity sha512-aYKi3QGKmpxF6w32STAcobIqOHFqSUXrU8nF+Y9dOlStRkXFBTuVchsoJk94sY+3y4SJAlHH4Q/8R4yFaixrug==
+ version "6.5.3"
+ resolved "https://registry.yarnpkg.com/@nestjs/core/-/core-6.5.3.tgz#0cfd4388f07f15ab7b49aa0ff7ed594f51446378"
+ integrity sha512-ZhYfH49sVmUUw02qsaGozCFOOehlEABakYzRShyDDq30/2+ek3KpE0DfvA9tXlzX2KVrac2qDTBxMOPoJ+zY+g==
dependencies:
- "@nuxtjs/opencollective" "0.2.1"
+ "@nuxtjs/opencollective" "0.2.2"
fast-safe-stringify "2.0.6"
- iterare "1.1.2"
+ iterare "1.2.0"
object-hash "1.3.1"
optional "0.1.4"
uuid "3.3.2"
"@nestjs/platform-express@^6.2.4":
- version "6.2.4"
- resolved "https://registry.yarnpkg.com/@nestjs/platform-express/-/platform-express-6.2.4.tgz#cf7d8d758f185d5d2513d3916475c17ecd394e76"
- integrity sha512-MmoQqFWO7nmgEvBIeO6ddz1CFVx3RIQluX1LMIzyfiyRghQzcZCGqTQsZSpck5ZnXNQNxrrI9bz/6a6cTwovmQ==
+ version "6.5.3"
+ resolved "https://registry.yarnpkg.com/@nestjs/platform-express/-/platform-express-6.5.3.tgz#0260f2c13e5914dc121dbd3a221afb5305b9f813"
+ integrity sha512-c5n4XUbDDmF6MfBGYWM1jtsIDpVsOfOQtf3S0w3IeJNqm7dnmVAvO2Jk+RsYpt50tN4NAXntM3YTuTDqMb9uiA==
dependencies:
body-parser "1.19.0"
cors "2.8.5"
- express "4.17.0"
- multer "1.4.1"
+ express "4.17.1"
+ multer "1.4.2"
"@nestjs/schematics@^6.3.0":
- version "6.3.0"
- resolved "https://registry.yarnpkg.com/@nestjs/schematics/-/schematics-6.3.0.tgz#d428d4f238d23f21434f58c4a20fce76fab19070"
- integrity sha512-SIb5eGoFjXu1RpMgC5lqh2Khbyf391zBrNj9Xjy4rN+6eArdlr439CPT17SI2QlFAzHiFEOQOMbpqv2ipx6ufA==
+ version "6.4.1"
+ resolved "https://registry.yarnpkg.com/@nestjs/schematics/-/schematics-6.4.1.tgz#f2748419ac8ddcd5ecb8b7ebc76bae40ee8d0103"
+ integrity sha512-2NSdJUZDbjA7GmFJ/bUORzcSj6rWDUMZuscwhSRtC++quYyMpK8xfZ2W3640427fRBzPfub6pJGytF399b8PaQ==
dependencies:
- "@angular-devkit/core" "7.3.8"
- "@angular-devkit/schematics" "7.3.8"
- ts-morph "^1.3.1"
+ "@angular-devkit/core" "8.1.2"
+ "@angular-devkit/schematics" "8.1.2"
+ ts-morph "^3.0.0"
typescript "^3.2.2"
"@nestjs/testing@^6.2.4":
- version "6.2.4"
- resolved "https://registry.yarnpkg.com/@nestjs/testing/-/testing-6.2.4.tgz#23a3480fa6c46b24940187b3d6ed21c784709865"
- integrity sha512-l5uxeNz+CksHaVcHxSlpo0vyJxvZP7BM1vS6BKuqtn/lNlIITAkdWmCVfBldN8Okayj3B2yhc04Zq6imU3aX9w==
+ version "6.5.3"
+ resolved "https://registry.yarnpkg.com/@nestjs/testing/-/testing-6.5.3.tgz#fcc2a9ed77ae2f5626e6472e67964a0c401edec6"
+ integrity sha512-W8tPhkNVhmX+jaDu4R7WUOtIl0PK3ZDso434rEm/b1+S6ZRgAKwNVHWM/rwIuTi5+erPTEULtTsZgrXFrzC1sA==
dependencies:
optional "0.1.4"
@@ -1196,15 +1156,36 @@
tree-kill "1.2.1"
webpack-sources "1.3.0"
+"@nodelib/fs.scandir@2.1.1":
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.1.tgz#7fa8fed654939e1a39753d286b48b4836d00e0eb"
+ integrity sha512-NT/skIZjgotDSiXs0WqYhgcuBKhUMgfekCmCGtkUAiLqZdOnrdjmZr9wRl3ll64J9NF79uZ4fk16Dx0yMc/Xbg==
+ dependencies:
+ "@nodelib/fs.stat" "2.0.1"
+ run-parallel "^1.1.9"
+
+"@nodelib/fs.stat@2.0.1", "@nodelib/fs.stat@^2.0.1":
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.1.tgz#814f71b1167390cfcb6a6b3d9cdeb0951a192c14"
+ integrity sha512-+RqhBlLn6YRBGOIoVYthsG0J9dfpO79eJyN7BYBkZJtfqrBwf2KK+rD/M/yjZR6WBmIhAgOV7S60eCgaSWtbFw==
+
"@nodelib/fs.stat@^1.1.2":
version "1.1.3"
resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b"
integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==
-"@nuxtjs/opencollective@0.2.1":
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/@nuxtjs/opencollective/-/opencollective-0.2.1.tgz#ddf3e6a22990997322bc2b82e2455a7fbffc518d"
- integrity sha512-pzSib8NKquaTt/ns5Cc2G0BGRVJXaD+p1qfF6q7vNIMvRysorn/VF3y7gAuQpcxfF7wBbGE+dXjhIieWOUsWSw==
+"@nodelib/fs.walk@^1.2.1":
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.2.tgz#6a6450c5e17012abd81450eb74949a4d970d2807"
+ integrity sha512-J/DR3+W12uCzAJkw7niXDcqcKBg6+5G5Q/ZpThpGNzAUz70eOR6RV4XnnSN01qHZiVl0eavoxJsBypQoKsV2QQ==
+ dependencies:
+ "@nodelib/fs.scandir" "2.1.1"
+ fastq "^1.6.0"
+
+"@nuxtjs/opencollective@0.2.2":
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/@nuxtjs/opencollective/-/opencollective-0.2.2.tgz#26a761ebf588cc92a422d7cee996a66bd6e2761e"
+ integrity sha512-69gFVDs7mJfNjv9Zs5DFVD+pvBW+k1TaHSOqUWqAyTTfLcKI/EMYQgvEvziRd+zAFtUOoye6MfWh0qvinGISPw==
dependencies:
chalk "^2.4.1"
consola "^2.3.0"
@@ -1225,14 +1206,6 @@
universal-user-agent "^2.0.0"
url-template "^2.0.8"
-"@schematics/angular@8.0.0":
- version "8.0.0"
- resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-8.0.0.tgz#47954888fb8acbc3600235db7a46229c47fe5d9c"
- integrity sha512-c/cFpe+u7Xh4xX3/kn9BSRY4YhdO0OsDbRK0pGLDJFFs5JGvwoURtNXn4/4dVlsj3PWyNhxK0Ljl3dyw3NQBHA==
- dependencies:
- "@angular-devkit/core" "8.0.0"
- "@angular-devkit/schematics" "8.0.0"
-
"@schematics/angular@8.1.1":
version "8.1.1"
resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-8.1.1.tgz#cfc2e68bef11a0de39a4f663f0a0a9c79ca3d88d"
@@ -1260,11 +1233,23 @@
resolved "https://registry.yarnpkg.com/@sheerun/mutationobserver-shim/-/mutationobserver-shim-0.3.2.tgz#8013f2af54a2b7d735f71560ff360d3a8176a87b"
integrity sha512-vTCdPp/T/Q3oSqwHmZ5Kpa9oI7iLtGl3RQaA/NyLHikvcrPxACkkKVr/XzkSPJWXHRhKGzVvb0urJsbMlRxi1Q==
+"@sindresorhus/is@^0.14.0":
+ version "0.14.0"
+ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea"
+ integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==
+
"@sindresorhus/is@^0.7.0":
version "0.7.0"
resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd"
integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==
+"@szmarczak/http-timer@^1.1.2":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421"
+ integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==
+ dependencies:
+ defer-to-connect "^1.0.1"
+
"@testing-library/dom@^5.5.4":
version "5.6.0"
resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-5.6.0.tgz#18a7c162a6a79964e731ad7b810022a28218047c"
@@ -1290,9 +1275,9 @@
integrity sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==
"@types/babel__core@^7.1.0":
- version "7.1.1"
- resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.1.tgz#ce9a9e5d92b7031421e1d0d74ae59f572ba48be6"
- integrity sha512-+hjBtgcFPYyCTo0A15+nxrCVJL7aC6Acg87TXd5OW3QhHswdrOLoles+ldL2Uk8q++7yIfl4tURtztccdeeyOw==
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.2.tgz#608c74f55928033fce18b99b213c16be4b3d114f"
+ integrity sha512-cfCCrFmiGY/yq0NuKNxIQvZFy9kY/1immpSpTngOnyIbD4+eJOG5mxphhHDv3CHL9GltO4GcKr54kGBg3RNdbg==
dependencies:
"@babel/parser" "^7.1.0"
"@babel/types" "^7.0.0"
@@ -1316,9 +1301,9 @@
"@babel/types" "^7.0.0"
"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6":
- version "7.0.6"
- resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.6.tgz#328dd1a8fc4cfe3c8458be9477b219ea158fd7b2"
- integrity sha512-XYVgHF2sQ0YblLRMLNPB3CkFMewzFmlDsH/TneZFHUXDlABQgh88uOxuez7ZcXxayLFrqLwtDH1t+FmlFwNZxw==
+ version "7.0.7"
+ resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.7.tgz#2496e9ff56196cc1429c72034e07eab6121b6f3f"
+ integrity sha512-CeBpmX1J8kWLcDEnI3Cl2Eo6RfbGvzUctA+CjZUhOKDFbLfcr7fc4usEqLNWetrlJd7RhAkyYe2czXop4fICpw==
dependencies:
"@babel/types" "^7.3.0"
@@ -1348,9 +1333,9 @@
integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==
"@types/express-serve-static-core@*":
- version "4.16.4"
- resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.16.4.tgz#56bb8be4559401d68af4a3624ae9dd3166103e60"
- integrity sha512-x/8h6FHm14rPWnW2HP5likD/rsqJ3t/77OWx2PLxym0hXbeBWQmcPyHmwX+CtCQpjIfgrUdEoDFcLPwPZWiqzQ==
+ version "4.16.7"
+ resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.16.7.tgz#50ba6f8a691c08a3dd9fa7fba25ef3133d298049"
+ integrity sha512-847KvL8Q1y3TtFLRTXcVakErLJQgdpFSaq+k043xefz9raEf0C7HalpSY7OW5PyjCnY8P7bPW5t/Co9qqp+USg==
dependencies:
"@types/node" "*"
"@types/range-parser" "*"
@@ -1394,9 +1379,9 @@
"@types/istanbul-lib-report" "*"
"@types/jasmine@*":
- version "3.3.12"
- resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-3.3.12.tgz#bf282cb540e9ad7a0a04b742082c073b655eab39"
- integrity sha512-lXvr2xFQEVQLkIhuGaR3GC1L9lMU1IxeWnAF/wNY5ZWpC4p9dgxkKkzMp7pntpAdv9pZSnYqgsBkCg32MXSZMg==
+ version "3.3.15"
+ resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-3.3.15.tgz#545be0670e828ac570566c45be570bbffcbc66d8"
+ integrity sha512-MljubxUVLT9wh/0NiyRWlcxSu/0axK+UYheZ04N5yaQclQkE8JuFYMsmwltPap2LEsJrvSf5p49/1514IY+d1Q==
"@types/jasmine@~2.8.6":
version "2.8.16"
@@ -1432,20 +1417,15 @@
resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.1.tgz#dc488842312a7f075149312905b5e3c0b054c79d"
integrity sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw==
-"@types/minimatch@*":
+"@types/minimatch@*", "@types/minimatch@^3.0.3":
version "3.0.3"
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
-"@types/node@*":
- version "12.0.0"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-12.0.0.tgz#d11813b9c0ff8aaca29f04cbc12817f4c7d656e5"
- integrity sha512-Jrb/x3HT4PTJp6a4avhmJCDEVrPdqLfl3e8GGMbpkGGdwAV5UGlIs4vVEfsHHfylZVOKZWpOqmqFH8CbfOZ6kg==
-
-"@types/node@^11.13.9":
- version "11.13.10"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-11.13.10.tgz#4df59e5966b56f512bac98898bcbee5067411f0f"
- integrity sha512-leUNzbFTMX94TWaIKz8N15Chu55F9QSH+INKayQr5xpkasBQBRF3qQXfo3/dOnMU/dEIit+Y/SU8HyOjq++GwA==
+"@types/node@*", "@types/node@^12.6.2":
+ version "12.6.8"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-12.6.8.tgz#e469b4bf9d1c9832aee4907ba8a051494357c12c"
+ integrity sha512-aX+gFgA5GHcDi89KG5keey2zf0WfZk/HAQotEamsK2kbey+8yGKcson0hbK8E+v0NArlCJQCqMP161YhV6ZXLg==
"@types/node@~8.9.4":
version "8.9.5"
@@ -1458,9 +1438,9 @@
integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==
"@types/prettier@^1.10.0":
- version "1.16.3"
- resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.16.3.tgz#141bdf4dcbaac06fd2b3f05e233ff23b66866f9f"
- integrity sha512-5Ksgx9H/Yjz6oamDbmDZstWlJGPTao7shNfambjf8o7OkHxDwAi0AJLQcFwS9pDKI4gQPdiKZXze3nT1eCOViQ==
+ version "1.18.0"
+ resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.18.0.tgz#d2dbe4d5f76b455138f13a2d881278e2c06a733d"
+ integrity sha512-5N6WK/XXs9PLPpge2KOmOSaIym2vIo32GsrxM5YOFs7uZ8R9L/acg+hQzWsfwoHEpasqQkH0+3LzLTbiF1GFLQ==
"@types/prop-types@*":
version "15.7.1"
@@ -1480,9 +1460,9 @@
"@types/react" "*"
"@types/react@*", "@types/react@^16.8.4":
- version "16.8.17"
- resolved "https://registry.yarnpkg.com/@types/react/-/react-16.8.17.tgz#f287b76a5badb93bc9aa3f54521a3eb53d6c2374"
- integrity sha512-pln3mgc6VfkNg92WXODul/ONo140huK9OMsx62GlBlZ2lvjNK86PQJhYMPLO1i66aF5O9OPyZefogvNltBIszA==
+ version "16.8.23"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-16.8.23.tgz#ec6be3ceed6353a20948169b6cb4c97b65b97ad2"
+ integrity sha512-abkEOIeljniUN9qB5onp++g0EY38h7atnDHxwKUFz1r3VH1+yG1OKi2sNPTyObL40goBmfKFpdii2lEzwLX1cA==
dependencies:
"@types/prop-types" "*"
csstype "^2.2.0"
@@ -1534,9 +1514,9 @@
source-map "^0.6.1"
"@types/webpack@^4.4.24":
- version "4.4.31"
- resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.4.31.tgz#f59b9d8210cf4d2fd254fe6d1f5ba86e557867f5"
- integrity sha512-WNALmv/wxy2+OoF7A5GD8BVotXnkuMHlojVWKj/neFHU3Ut2Azbu1A7Yi2Vr6eX3z+31XgR/dJ5NpX4pQZ7ieQ==
+ version "4.32.0"
+ resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.32.0.tgz#bd4a149964cd471538f2781f2be5f9815175463b"
+ integrity sha512-kpz5wHDyG/WEpzX9gcwFp/w0oSsq0n/rmFdJelk/QBMHmNIOZdiTDInV0Lj8itGKBahQrBgJGJRss/6UHgLuKg==
dependencies:
"@types/anymatch" "*"
"@types/node" "*"
@@ -1755,19 +1735,19 @@ acorn-globals@^4.1.0, acorn-globals@^4.3.0:
acorn-walk "^6.0.1"
acorn-walk@^6.0.1:
- version "6.1.1"
- resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.1.1.tgz#d363b66f5fac5f018ff9c3a1e7b6f8e310cc3913"
- integrity sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c"
+ integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==
acorn@^5.5.3:
version "5.7.3"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279"
integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==
-acorn@^6.0.1, acorn@^6.0.4, acorn@^6.0.5, acorn@^6.1.1:
- version "6.1.1"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f"
- integrity sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==
+acorn@^6.0.1, acorn@^6.0.4, acorn@^6.0.5, acorn@^6.2.0:
+ version "6.2.1"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.2.1.tgz#3ed8422d6dec09e6121cc7a843ca86a330a86b51"
+ integrity sha512-JD0xT5FCRDNyjDda3Lrg/IxFscp9q4tiYtxE1/nOzlKCk7hIRuYjhq1kCNkbPjMRMZuFq20HNQn1I9k8Oj0E+Q==
add-stream@^1.0.0:
version "1.0.0"
@@ -1779,7 +1759,14 @@ after@0.8.2:
resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f"
integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=
-agent-base@4, agent-base@^4.1.0, agent-base@~4.2.1:
+agent-base@4, agent-base@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee"
+ integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==
+ dependencies:
+ es6-promisify "^5.0.0"
+
+agent-base@~4.2.1:
version "4.2.1"
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9"
integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==
@@ -1799,11 +1786,11 @@ ajv-errors@^1.0.0:
integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==
ajv-keywords@^3.1.0:
- version "3.4.0"
- resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.0.tgz#4b831e7b531415a7cc518cd404e73f6193c6349d"
- integrity sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da"
+ integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==
-ajv@6.10.0, ajv@^6.1.0, ajv@^6.5.5:
+ajv@6.10.0:
version "6.10.0"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1"
integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==
@@ -1813,16 +1800,6 @@ ajv@6.10.0, ajv@^6.1.0, ajv@^6.5.5:
json-schema-traverse "^0.4.1"
uri-js "^4.2.2"
-ajv@6.9.1:
- version "6.9.1"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.9.1.tgz#a4d3683d74abc5670e75f0b16520f70a20ea8dc1"
- integrity sha512-XDN92U311aINL77ieWHmqCcNlwjoP5cHXDxIxbf2MaPYuCXOHS7gHH8jktxeK5omgd52XbSTX6a4Piwd1pQmzA==
- dependencies:
- fast-deep-equal "^2.0.1"
- fast-json-stable-stringify "^2.0.0"
- json-schema-traverse "^0.4.1"
- uri-js "^4.2.2"
-
ajv@^5.0.0:
version "5.5.2"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965"
@@ -1833,6 +1810,16 @@ ajv@^5.0.0:
fast-json-stable-stringify "^2.0.0"
json-schema-traverse "^0.3.0"
+ajv@^6.1.0, ajv@^6.5.5:
+ version "6.10.2"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52"
+ integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==
+ dependencies:
+ fast-deep-equal "^2.0.1"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.4.1"
+ uri-js "^4.2.2"
+
amdefine@>=0.0.4:
version "1.0.1"
resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
@@ -1850,6 +1837,13 @@ ansi-align@^2.0.0:
dependencies:
string-width "^2.0.0"
+ansi-align@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb"
+ integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==
+ dependencies:
+ string-width "^3.0.0"
+
ansi-colors@4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.0.tgz#e1674bd61027c8c219b9edec929b6b57641b0c09"
@@ -1954,9 +1948,9 @@ are-we-there-yet@~1.1.2:
readable-stream "^2.0.6"
arg@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.0.tgz#583c518199419e0037abb74062c37f8519e575f0"
- integrity sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.1.tgz#485f8e7c390ce4c5f78257dbea80d4be11feda4c"
+ integrity sha512-SlmP3fEA88MBv0PypnXZ8ZfJhwmDeIE3SP71j37AiXQBXYosPV0x6uISAaHYSlSVhmHOVkomen0tbGk6Anlebw==
argparse@^1.0.7:
version "1.0.10"
@@ -1995,10 +1989,10 @@ arr-union@^3.1.0:
resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
-array-differ@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031"
- integrity sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=
+array-differ@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b"
+ integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==
array-equal@^1.0.0:
version "1.0.0"
@@ -2047,6 +2041,11 @@ array-union@^1.0.1:
dependencies:
array-uniq "^1.0.1"
+array-union@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
+ integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
+
array-uniq@^1.0.1:
version "1.0.3"
resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
@@ -2067,11 +2066,16 @@ arraybuffer.slice@~0.0.7:
resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675"
integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==
-arrify@^1.0.0, arrify@^1.0.1:
+arrify@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
+arrify@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa"
+ integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==
+
asap@^2.0.0, asap@~2.0.3:
version "2.0.6"
resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
@@ -2121,7 +2125,7 @@ astral-regex@^1.0.0:
resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
-async-each@^1.0.0, async-each@^1.0.1:
+async-each@^1.0.1:
version "1.0.3"
resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf"
integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==
@@ -2150,12 +2154,12 @@ async@^1.5.2:
resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=
-async@^2.5.0, async@^2.6.1, async@^2.6.2:
- version "2.6.2"
- resolved "https://registry.yarnpkg.com/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381"
- integrity sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==
+async@^2.5.0, async@^2.6.2:
+ version "2.6.3"
+ resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff"
+ integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==
dependencies:
- lodash "^4.17.11"
+ lodash "^4.17.14"
async@~0.9.0:
version "0.9.2"
@@ -2185,17 +2189,18 @@ autoprefixer@9.6.0:
postcss "^7.0.16"
postcss-value-parser "^3.3.1"
-autoprefixer@^9.0.0:
- version "9.5.1"
- resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.5.1.tgz#243b1267b67e7e947f28919d786b50d3bb0fb357"
- integrity sha512-KJSzkStUl3wP0D5sdMlP82Q52JLy5+atf2MHAre48+ckWkXgixmfHyWmA77wFDy6jTHU6mIgXv6hAQ2mf1PjJQ==
+autoprefixer@^9.6.0:
+ version "9.6.1"
+ resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.6.1.tgz#51967a02d2d2300bb01866c1611ec8348d355a47"
+ integrity sha512-aVo5WxR3VyvyJxcJC3h4FKfwCQvQWb1tSI5VHNibddCVWrcD1NvlxEweg3TSgiPztMnWfjpy2FURKA2kvDE+Tw==
dependencies:
- browserslist "^4.5.4"
- caniuse-lite "^1.0.30000957"
+ browserslist "^4.6.3"
+ caniuse-lite "^1.0.30000980"
+ chalk "^2.4.2"
normalize-range "^0.1.2"
num2fraction "^1.2.2"
- postcss "^7.0.14"
- postcss-value-parser "^3.3.1"
+ postcss "^7.0.17"
+ postcss-value-parser "^4.0.0"
aws-sign2@~0.7.0:
version "0.7.0"
@@ -2207,13 +2212,13 @@ aws4@^1.8.0:
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f"
integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==
-axios@0.18.0:
- version "0.18.0"
- resolved "https://registry.yarnpkg.com/axios/-/axios-0.18.0.tgz#32d53e4851efdc0a11993b6cd000789d70c05102"
- integrity sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=
+axios@0.19.0:
+ version "0.19.0"
+ resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.0.tgz#8e09bff3d9122e133f7b8101c8fbdd00ed3d2ab8"
+ integrity sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==
dependencies:
- follow-redirects "^1.3.0"
- is-buffer "^1.1.5"
+ follow-redirects "1.5.10"
+ is-buffer "^2.0.2"
axobject-query@^2.0.2:
version "2.0.2"
@@ -2420,11 +2425,19 @@ babel-plugin-check-es2015-constants@^6.22.0:
dependencies:
babel-runtime "^6.22.0"
-babel-plugin-istanbul@^5.1.0:
- version "5.1.4"
- resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.4.tgz#841d16b9a58eeb407a0ddce622ba02fe87a752ba"
- integrity sha512-dySz4VJMH+dpndj0wjJ8JPs/7i1TdSPb1nRrn56/92pKOF9VKC1FMFJmMXjzlGGusnCAqujP6PBCiKq0sVA+YQ==
+babel-plugin-dynamic-import-node@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f"
+ integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==
dependencies:
+ object.assign "^4.1.0"
+
+babel-plugin-istanbul@^5.1.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz#df4ade83d897a92df069c4d9a25cf2671293c854"
+ integrity sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
find-up "^3.0.0"
istanbul-lib-instrument "^3.3.0"
test-exclude "^5.2.3"
@@ -2881,10 +2894,10 @@ bluebird@3.5.0:
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c"
integrity sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=
-bluebird@^3.3.0, bluebird@^3.5.0, bluebird@^3.5.1, bluebird@^3.5.3:
- version "3.5.4"
- resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.4.tgz#d6cc661595de30d5b3af5fcedd3c0b3ef6ec5714"
- integrity sha512-FG+nFEZChJrbQ9tIccIfZJBz3J7mLrAhxakAbnrJWn8d7aKOC+LWifa0G+p4ZqKp4y13T7juYvdhq9NzKdsrjw==
+bluebird@^3.3.0, bluebird@^3.5.0, bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5:
+ version "3.5.5"
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f"
+ integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==
bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
version "4.11.8"
@@ -2907,22 +2920,6 @@ body-parser@1.18.2:
raw-body "2.3.2"
type-is "~1.6.15"
-body-parser@1.18.3:
- version "1.18.3"
- resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz#5b292198ffdd553b3a0f20ded0592b956955c8b4"
- integrity sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=
- dependencies:
- bytes "3.0.0"
- content-type "~1.0.4"
- debug "2.6.9"
- depd "~1.1.2"
- http-errors "~1.6.3"
- iconv-lite "0.4.23"
- on-finished "~2.3.0"
- qs "6.5.2"
- raw-body "2.3.3"
- type-is "~1.6.16"
-
body-parser@1.19.0, body-parser@^1.16.1:
version "1.19.0"
resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a"
@@ -2969,6 +2966,20 @@ boxen@^1.2.1:
term-size "^1.2.0"
widest-line "^2.0.0"
+boxen@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/boxen/-/boxen-3.2.0.tgz#fbdff0de93636ab4450886b6ff45b92d098f45eb"
+ integrity sha512-cU4J/+NodM3IHdSL2yN8bqYqnmlBTidDR4RC7nJs61ZmtGz8VZzM3HLQX0zY5mrSmPtR3xWwsq2jOUQqFZN8+A==
+ dependencies:
+ ansi-align "^3.0.0"
+ camelcase "^5.3.1"
+ chalk "^2.4.2"
+ cli-boxes "^2.2.0"
+ string-width "^3.0.0"
+ term-size "^1.2.0"
+ type-fest "^0.3.0"
+ widest-line "^2.0.0"
+
brace-expansion@^1.1.7:
version "1.1.11"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
@@ -2986,7 +2997,7 @@ braces@^1.8.2:
preserve "^0.2.0"
repeat-element "^1.1.2"
-braces@^2.3.0, braces@^2.3.1, braces@^2.3.2:
+braces@^2.3.1, braces@^2.3.2:
version "2.3.2"
resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
@@ -3002,7 +3013,7 @@ braces@^2.3.0, braces@^2.3.1, braces@^2.3.2:
split-string "^3.0.2"
to-regex "^3.0.1"
-braces@^3.0.2:
+braces@^3.0.1, braces@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
@@ -3102,25 +3113,7 @@ browserslist@^3.2.6:
caniuse-lite "^1.0.30000844"
electron-to-chromium "^1.3.47"
-browserslist@^4.0.0, browserslist@^4.5.4:
- version "4.5.6"
- resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.5.6.tgz#ea42e8581ca2513fa7f371d4dd66da763938163d"
- integrity sha512-o/hPOtbU9oX507lIqon+UvPYqpx3mHc8cV3QemSBTXwkG8gSQSK6UKvXcE/DcleU3+A59XTUHyCvZ5qGy8xVAg==
- dependencies:
- caniuse-lite "^1.0.30000963"
- electron-to-chromium "^1.3.127"
- node-releases "^1.1.17"
-
-browserslist@^4.6.0:
- version "4.6.2"
- resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.6.2.tgz#574c665950915c2ac73a4594b8537a9eba26203f"
- integrity sha512-2neU/V0giQy9h3XMPwLhEY3+Ao0uHSwHvU8Q1Ea6AgLVL1sXbX3dzPrJ8NWe5Hi4PoTkCYXOtVR9rfRLI0J/8Q==
- dependencies:
- caniuse-lite "^1.0.30000974"
- electron-to-chromium "^1.3.150"
- node-releases "^1.1.23"
-
-browserslist@^4.6.1:
+browserslist@^4.0.0, browserslist@^4.6.0, browserslist@^4.6.1, browserslist@^4.6.2, browserslist@^4.6.3:
version "4.6.6"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.6.6.tgz#6e4bf467cde520bc9dbdf3747dafa03531cec453"
integrity sha512-D2Nk3W9JL9Fp/gIcWei8LrERCS+eXu9AM5cfXA8WEZ84lFks+ARnZ0q/R69m2SV3Wjma83QDDPxsNKXUwdIsyA==
@@ -3137,9 +3130,9 @@ bs-logger@0.x:
fast-json-stable-stringify "2.x"
bser@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719"
- integrity sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.0.tgz#65fc784bf7f87c009b973c12db6546902fa9c7b5"
+ integrity sha512-8zsjWrQkkBoLK6uxASk1nJ2SKv97ltiGDo6A3wA0/yRPz+CwmEyDo0hUrhIuukG2JHpAl3bvFIixw2/3Hi0DOg==
dependencies:
node-int64 "^0.4.0"
@@ -3241,22 +3234,22 @@ bytes@3.1.0:
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
-cacache@^11.0.1, cacache@^11.0.2, cacache@^11.3.2:
- version "11.3.2"
- resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.2.tgz#2d81e308e3d258ca38125b676b98b2ac9ce69bfa"
- integrity sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==
+cacache@^11.3.2, cacache@^11.3.3:
+ version "11.3.3"
+ resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.3.tgz#8bd29df8c6a718a6ebd2d010da4d7972ae3bbadc"
+ integrity sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA==
dependencies:
- bluebird "^3.5.3"
+ bluebird "^3.5.5"
chownr "^1.1.1"
figgy-pudding "^3.5.1"
- glob "^7.1.3"
+ glob "^7.1.4"
graceful-fs "^4.1.15"
lru-cache "^5.1.1"
mississippi "^3.0.0"
mkdirp "^0.5.1"
move-concurrently "^1.0.1"
promise-inflight "^1.0.1"
- rimraf "^2.6.2"
+ rimraf "^2.6.3"
ssri "^6.0.1"
unique-filename "^1.1.1"
y18n "^4.0.0"
@@ -3289,6 +3282,19 @@ cacheable-request@^2.1.1:
normalize-url "2.0.1"
responselike "1.0.2"
+cacheable-request@^6.0.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912"
+ integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==
+ dependencies:
+ clone-response "^1.0.2"
+ get-stream "^5.1.0"
+ http-cache-semantics "^4.0.0"
+ keyv "^3.0.0"
+ lowercase-keys "^2.0.0"
+ normalize-url "^4.1.0"
+ responselike "^1.0.2"
+
cachedir@1.3.0, cachedir@^1.1.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-1.3.0.tgz#5e01928bf2d95b5edd94b0942188246740e0dbc4"
@@ -3365,7 +3371,7 @@ camelcase@^4.0.0, camelcase@^4.1.0:
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=
-camelcase@^5.0.0:
+camelcase@^5.0.0, camelcase@^5.3.1:
version "5.3.1"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
@@ -3375,20 +3381,10 @@ caniuse-lite@1.0.30000979:
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000979.tgz#92f16d00186a6cf20d6c5711bb6e042a3d667029"
integrity sha512-gcu45yfq3B7Y+WB05fOMfr0EiSlq+1u+m6rPHyJli/Wy3PVQNGaU7VA4bZE5qw+AU2UVOBR/N5g1bzADUqdvFw==
-caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30000957, caniuse-lite@^1.0.30000963:
- version "1.0.30000967"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000967.tgz#a5039577806fccee80a04aaafb2c0890b1ee2f73"
- integrity sha512-rUBIbap+VJfxTzrM4akJ00lkvVb5/n5v3EGXfWzSH5zT8aJmGzjA8HWhJ4U6kCpzxozUSnB+yvAYDRPY6mRpgQ==
-
-caniuse-lite@^1.0.30000971, caniuse-lite@^1.0.30000975, caniuse-lite@^1.0.30000984:
- version "1.0.30000984"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000984.tgz#dc96c3c469e9bcfc6ad5bdd24c77ec918ea76fe0"
- integrity sha512-n5tKOjMaZ1fksIpQbjERuqCyfgec/m9pferkFQbLmWtqLUdmt12hNhjSwsmPdqeiG2NkITOQhr1VYIwWSAceiA==
-
-caniuse-lite@^1.0.30000974:
- version "1.0.30000974"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000974.tgz#b7afe14ee004e97ce6dc73e3f878290a12928ad8"
- integrity sha512-xc3rkNS/Zc3CmpMKuczWEdY2sZgx09BkAxfvkxlAEBTqcMHeL8QnPqhKse+5sRTi3nrw2pJwToD2WvKn1Uhvww==
+caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30000971, caniuse-lite@^1.0.30000975, caniuse-lite@^1.0.30000980, caniuse-lite@^1.0.30000984:
+ version "1.0.30000985"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000985.tgz#0eb40f6c8a8c219155cbe43c4975c0efb4a0f77f"
+ integrity sha512-1ngiwkgqAYPG0JSSUp3PUDGPKKY59EK7NrGGX+VOxaKCNzRbNc7uXMny+c3VJfZxtoK3wSImTvG9T9sXiTw2+w==
canonical-path@1.0.0:
version "1.0.0"
@@ -3456,27 +3452,7 @@ check-more-types@2.24.0:
resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600"
integrity sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA=
-chokidar@2.0.4:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26"
- integrity sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==
- dependencies:
- anymatch "^2.0.0"
- async-each "^1.0.0"
- braces "^2.3.0"
- glob-parent "^3.1.0"
- inherits "^2.0.1"
- is-binary-path "^1.0.0"
- is-glob "^4.0.0"
- lodash.debounce "^4.0.8"
- normalize-path "^2.1.1"
- path-is-absolute "^1.0.0"
- readdirp "^2.0.0"
- upath "^1.0.5"
- optionalDependencies:
- fsevents "^1.2.2"
-
-"chokidar@>=2.0.0 <4.0.0":
+"chokidar@>=2.0.0 <4.0.0", chokidar@^3.0.0:
version "3.0.2"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.0.2.tgz#0d1cd6d04eb2df0327446188cd13736a3367d681"
integrity sha512-c4PR2egjNjI1um6bamCQ6bUNPDiyofNQruHvKgHQ4gDUP/ITSVSzNsiI5OWtHOsX323i5ha/kk4YmOZ1Ktg7KA==
@@ -3491,26 +3467,7 @@ chokidar@2.0.4:
optionalDependencies:
fsevents "^2.0.6"
-chokidar@^2.0.0, chokidar@^2.0.2, chokidar@^2.0.3, chokidar@^2.0.4, chokidar@^2.1.1:
- version "2.1.5"
- resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.5.tgz#0ae8434d962281a5f56c72869e79cb6d9d86ad4d"
- integrity sha512-i0TprVWp+Kj4WRPtInjexJ8Q+BqTE909VpH8xVhXrJkoc5QC8VO9TryGOqTr+2hljzc1sC62t22h5tZePodM/A==
- dependencies:
- anymatch "^2.0.0"
- async-each "^1.0.1"
- braces "^2.3.2"
- glob-parent "^3.1.0"
- inherits "^2.0.3"
- is-binary-path "^1.0.0"
- is-glob "^4.0.0"
- normalize-path "^3.0.0"
- path-is-absolute "^1.0.0"
- readdirp "^2.2.1"
- upath "^1.1.1"
- optionalDependencies:
- fsevents "^1.2.7"
-
-chokidar@^2.1.6:
+chokidar@^2.0.0, chokidar@^2.0.2, chokidar@^2.0.3, chokidar@^2.0.4, chokidar@^2.1.1, chokidar@^2.1.6:
version "2.1.6"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.6.tgz#b6cad653a929e244ce8a834244164d241fa954c5"
integrity sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==
@@ -3530,14 +3487,14 @@ chokidar@^2.1.6:
fsevents "^1.2.7"
chownr@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494"
- integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6"
+ integrity sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==
chrome-trace-event@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz#45a91bd2c20c9411f0963b5aaeb9a1b95e09cc48"
- integrity sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4"
+ integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==
dependencies:
tslib "^1.9.0"
@@ -3586,6 +3543,11 @@ cli-boxes@^1.0.0:
resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143"
integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM=
+cli-boxes@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.0.tgz#538ecae8f9c6ca508e3c3c95b453fe93cb4c168d"
+ integrity sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w==
+
cli-color@1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-1.4.0.tgz#7d10738f48526824f8fe7da51857cb0f572fe01f"
@@ -3654,7 +3616,7 @@ clone-deep@^2.0.1:
kind-of "^6.0.0"
shallow-clone "^1.0.0"
-clone-response@1.0.2:
+clone-response@1.0.2, clone-response@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b"
integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=
@@ -3676,10 +3638,10 @@ co@^4.6.0:
resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
-code-block-writer@7.2.2:
- version "7.2.2"
- resolved "https://registry.yarnpkg.com/code-block-writer/-/code-block-writer-7.2.2.tgz#14ec0120de9a65d2cc5d214561d51d1660dddbb1"
- integrity sha512-8SyXM1bWsMDCzvCoTdnDBhnnUbHntxcba4ApBIO3S3QX0M2Iq0xZCzs6SYdBOGaSUi4drysvrAK15JoXhlpsvQ==
+code-block-writer@9.4.1:
+ version "9.4.1"
+ resolved "https://registry.yarnpkg.com/code-block-writer/-/code-block-writer-9.4.1.tgz#1448fca79dfc7a3649000f4c85be6bc770604c4c"
+ integrity sha512-LHAB+DL4YZDcwK8y/kAxZ0Lf/ncwLh/Ux4cTVWbPwIdrf1gPxXiPcwpz8r8/KqXu1aD+Raz46EOxDjFlbyO6bA==
code-point-at@^1.0.0:
version "1.1.0"
@@ -3748,7 +3710,7 @@ commander@2.17.x:
resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==
-commander@^2.11.0, commander@^2.12.0, commander@^2.12.1, commander@^2.19.0, commander@^2.20.0, commander@~2.20.0:
+commander@^2.11.0, commander@^2.12.0, commander@^2.12.1, commander@^2.20.0, commander@~2.20.0:
version "2.20.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422"
integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==
@@ -3799,9 +3761,9 @@ compare-func@^1.3.1:
dot-prop "^3.0.0"
compare-versions@^3.4.0:
- version "3.4.0"
- resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.4.0.tgz#e0747df5c9cb7f054d6d3dc3e1dbc444f9e92b26"
- integrity sha512-tK69D7oNXXqUW3ZNo/z7NXTEz22TCF0pTE+YF9cxvaAM9XnkLo1fV621xCLrRR6aevJlKxExkss0vWqUCUpqdg==
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.5.0.tgz#85fc22a1ae9612ff730d77fb092295acd056d311"
+ integrity sha512-hX+4kt2Rcwu+x1U0SsEFCn1quURjEjPEGH/cPBlpME/IidGimAdwfMU+B+xDr7et/KTR7VH2+ZqWGerv4NGs2w==
component-bind@1.0.0:
version "1.0.0"
@@ -3870,25 +3832,37 @@ configstore@^3.0.0:
write-file-atomic "^2.0.0"
xdg-basedir "^3.0.0"
+configstore@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/configstore/-/configstore-4.0.0.tgz#5933311e95d3687efb592c528b922d9262d227e7"
+ integrity sha512-CmquAXFBocrzaSM8mtGPMM/HiWmyIpr4CcJl/rgY2uCObZ/S7cKU0silxslqJejl+t/T9HS8E0PUNQD81JGUEQ==
+ dependencies:
+ dot-prop "^4.1.0"
+ graceful-fs "^4.1.2"
+ make-dir "^1.0.0"
+ unique-string "^1.0.0"
+ write-file-atomic "^2.0.0"
+ xdg-basedir "^3.0.0"
+
connect-history-api-fallback@^1.3.0, connect-history-api-fallback@^1.6.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc"
integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==
connect@^3.6.0:
- version "3.6.6"
- resolved "https://registry.yarnpkg.com/connect/-/connect-3.6.6.tgz#09eff6c55af7236e137135a72574858b6786f524"
- integrity sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8"
+ integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==
dependencies:
debug "2.6.9"
- finalhandler "1.1.0"
- parseurl "~1.3.2"
+ finalhandler "1.1.2"
+ parseurl "~1.3.3"
utils-merge "1.0.1"
consola@^2.3.0:
- version "2.6.2"
- resolved "https://registry.yarnpkg.com/consola/-/consola-2.6.2.tgz#4c1238814bb80688b19f0db97123508889577752"
- integrity sha512-GNJhwvF4bJ8eiAlyB8r4WNM8kBqkl+y4DvMehMbyywoJiv37N0M6/xrKqrrZw/5maZA+UagQV8UZ+XBeuGMzUg==
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/consola/-/consola-2.9.0.tgz#57760e3a65a53ec27337f4add31505802d902278"
+ integrity sha512-34Iue+LRcWbndFIfZc5boNizWlsrRjqIBJZTe591vImgbnq7nx2EzlrLtANj9TH2Fxm7puFJBJAOk5BhvZOddQ==
console-browserify@^1.1.0:
version "1.1.0"
@@ -4108,9 +4082,9 @@ conventional-changelog-writer@^3.0.9:
through2 "^2.0.0"
conventional-changelog-writer@^4.0.5:
- version "4.0.5"
- resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.0.5.tgz#fb9e384bb294e8e8a9f2568a3f4d1e11953d8641"
- integrity sha512-g/Myp4MaJ1A+f7Ai+SnVhkcWtaHk6flw0SYN7A+vQ+MTu0+gSovQWs4Pg4NtcNUcIztYQ9YHsoxHP+GGQplI7Q==
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.0.6.tgz#24db578ac8e7c89a409ef9bba12cf3c095990148"
+ integrity sha512-ou/sbrplJMM6KQpR5rKFYNVQYesFjN7WpNGdudQSWNi6X+RgyFUcSv871YBYkrUYV9EX8ijMohYVzn9RUb+4ag==
dependencies:
compare-func "^1.3.1"
conventional-commits-filter "^2.0.2"
@@ -4119,7 +4093,7 @@ conventional-changelog-writer@^4.0.5:
json-stringify-safe "^5.0.1"
lodash "^4.2.1"
meow "^4.0.0"
- semver "^5.5.0"
+ semver "^6.0.0"
split "^1.0.0"
through2 "^3.0.0"
@@ -4213,12 +4187,12 @@ conventional-commits-parser@^3.0.0:
trim-off-newlines "^1.0.0"
conventional-commits-parser@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.0.2.tgz#1295590dd195f64f53d6f8eb7c41114bb9a60742"
- integrity sha512-y5eqgaKR0F6xsBNVSQ/5cI5qIF3MojddSUi1vKIggRkqUTbkqFKH9P5YX/AT1BVZp9DtSzBTIkvjyVLotLsVog==
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.0.3.tgz#c3f972fd4e056aa8b9b4f5f3d0e540da18bf396d"
+ integrity sha512-KaA/2EeUkO4bKjinNfGUyqPTX/6w9JGshuQRik4r/wJz7rUw3+D3fDG6sZSEqJvKILzKXFQuFkpPLclcsAuZcg==
dependencies:
JSONStream "^1.0.4"
- is-text-path "^1.0.0"
+ is-text-path "^2.0.0"
lodash "^4.2.1"
meow "^4.0.0"
split2 "^2.0.0"
@@ -4297,18 +4271,18 @@ copy-webpack-plugin@5.0.3:
webpack-log "^2.0.0"
core-js-compat@^3.1.1:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.1.3.tgz#0cc3ba4c7f62928c2837e1cffbe8dc78b4f1ae14"
- integrity sha512-EP018pVhgwsKHz3YoN1hTq49aRe+h017Kjz0NQz3nXV0cCRMvH3fLQl+vEPGr4r4J5sk4sU3tUC7U1aqTCeJeA==
+ version "3.1.4"
+ resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.1.4.tgz#e4d0c40fbd01e65b1d457980fe4112d4358a7408"
+ integrity sha512-Z5zbO9f1d0YrJdoaQhphVAnKPimX92D6z8lCGphH89MNRxlL1prI9ExJPqVwP0/kgkQCv8c4GJGT8X16yUncOg==
dependencies:
- browserslist "^4.6.0"
- core-js-pure "3.1.3"
- semver "^6.1.0"
+ browserslist "^4.6.2"
+ core-js-pure "3.1.4"
+ semver "^6.1.1"
-core-js-pure@3.1.3:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.1.3.tgz#4c90752d5b9471f641514f3728f51c1e0783d0b5"
- integrity sha512-k3JWTrcQBKqjkjI0bkfXS0lbpWPxYuHWfMMjC1VDmzU4Q58IwSbuXSo99YO/hUHlw/EB4AlfA2PVxOGkrIq6dA==
+core-js-pure@3.1.4:
+ version "3.1.4"
+ resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.1.4.tgz#5fa17dc77002a169a3566cc48dc774d2e13e3769"
+ integrity sha512-uJ4Z7iPNwiu1foygbcZYJsJs1jiXrTTCvxfLDXNhI/I+NHbSIEyr548y4fcsCEyWY0XgfAG/qqaunJ1SThHenA==
core-js@3.1.4:
version "3.1.4"
@@ -4316,9 +4290,9 @@ core-js@3.1.4:
integrity sha512-YNZN8lt82XIMLnLirj9MhKDFZHalwzzrL9YLt6eb0T5D0EDl4IQ90IGkua8mHbnxNrkj1d8hbdizMc0Qmg1WnQ==
core-js@^2.2.0, core-js@^2.4.0, core-js@^2.5.0:
- version "2.6.5"
- resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.5.tgz#44bc8d249e7fb2ff5d00e0341a7ffb94fbf67895"
- integrity sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==
+ version "2.6.9"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2"
+ integrity sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==
core-util-is@1.0.2, core-util-is@~1.0.0:
version "1.0.2"
@@ -4343,7 +4317,7 @@ cosmiconfig@^4.0.0:
parse-json "^4.0.0"
require-from-string "^2.0.1"
-cosmiconfig@^5.2.1:
+cosmiconfig@^5.0.0, cosmiconfig@^5.2.1:
version "5.2.1"
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a"
integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==
@@ -4496,21 +4470,21 @@ cssesc@^0.1.0:
integrity sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=
cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0", cssom@^0.3.4:
- version "0.3.6"
- resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.6.tgz#f85206cee04efa841f3c5982a74ba96ab20d65ad"
- integrity sha512-DtUeseGk9/GBW0hl0vVPpU22iHL6YB5BUX7ml1hB+GMpo0NX5G4voX3kdWiMSEguFtcW3Vh3djqNF4aIe6ne0A==
+ version "0.3.8"
+ resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a"
+ integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==
cssstyle@^1.0.0, cssstyle@^1.1.1:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.2.2.tgz#427ea4d585b18624f6fdbf9de7a2a1a3ba713077"
- integrity sha512-43wY3kl1CVQSvL7wUY1qXkxVGkStjpkDmVjiIKX8R97uhajy8Bybay78uOtqvh7Q5GK75dNPfW0geWjE6qQQow==
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.4.0.tgz#9d31328229d3c565c61e586b02041a28fccdccf1"
+ integrity sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==
dependencies:
cssom "0.3.x"
csstype@^2.2.0:
- version "2.6.4"
- resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.4.tgz#d585a6062096e324e7187f80e04f92bd0f00e37f"
- integrity sha512-lAJUJP3M6HxFXbqtGRc0iZrdyeN+WzOWeY0q/VnFzI+kqVrYIzC7bWlKqCW7oCIdzoPkvfp82EVvrTlQ8zsWQg==
+ version "2.6.6"
+ resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.6.tgz#c34f8226a94bbb10c32cc0d714afdf942291fc41"
+ integrity sha512-RpFbQGUE74iyPgvr46U9t1xoQBM8T4BL8SxrN66Le2xYAPSaDJJKeztV3awugusb3g3G9iL8StmkBBXhcbbXhg==
cuint@^0.2.2:
version "0.2.2"
@@ -4595,11 +4569,12 @@ cz-conventional-changelog@^2.1.0:
word-wrap "^1.0.3"
d@1:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f"
- integrity sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a"
+ integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==
dependencies:
- es5-ext "^0.10.9"
+ es5-ext "^0.10.50"
+ type "^1.0.1"
damerau-levenshtein@^1.0.4:
version "1.0.5"
@@ -4635,9 +4610,9 @@ date-fns@^1.27.2:
integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==
date-format@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/date-format/-/date-format-2.0.0.tgz#7cf7b172f1ec564f0003b39ea302c5498fb98c8f"
- integrity sha512-M6UqVvZVgFYqZL1SfHsRGIQSz3ZL+qgbsV5Lp1Vj61LZVYuEwcMXYay7DRDtYs2HQQBK5hQtQ0fD9aEJ89V0LA==
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/date-format/-/date-format-2.1.0.tgz#31d5b5ea211cf5fd764cd38baf9d033df7e125cf"
+ integrity sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==
date-now@^0.1.4:
version "0.1.4"
@@ -4663,7 +4638,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9:
dependencies:
ms "2.0.0"
-debug@3.1.0, debug@~3.1.0:
+debug@3.1.0, debug@=3.1.0, debug@~3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
@@ -4781,6 +4756,11 @@ defaults@^1.0.3:
dependencies:
clone "^1.0.2"
+defer-to-connect@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.0.2.tgz#4bae758a314b034ae33902b5aac25a8dd6a8633e"
+ integrity sha512-k09hcQcTDY+cwgiwa6PYKLm3jlagNzQ+RSvhjzESOGOx+MNOuXkxTfEvPrO1IOQ81tArCFYQgi631clB70RpQw==
+
define-properties@^1.1.2:
version "1.1.3"
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
@@ -4938,11 +4918,16 @@ diff-sequences@^24.3.0:
resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.3.0.tgz#0f20e8a1df1abddaf4d9c226680952e64118b975"
integrity sha512-xLqpez+Zj9GKSnPWS0WZw1igGocZ+uua8+y+5dDNTT934N3QuY1sp2LkHzwiaYQGz60hMq0pjAshdeXm5VUOEw==
-diff@^3.1.0, diff@^3.2.0:
+diff@^3.2.0:
version "3.5.0"
resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==
+diff@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.1.tgz#0c667cb467ebbb5cea7f14f135cc2dba7780a8ff"
+ integrity sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==
+
diffie-hellman@^5.0.0:
version "5.0.3"
resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"
@@ -4967,6 +4952,13 @@ dir-glob@^2.0.0:
dependencies:
path-type "^3.0.0"
+dir-glob@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
+ integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
+ dependencies:
+ path-type "^4.0.0"
+
dns-equal@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d"
@@ -4988,9 +4980,9 @@ dns-txt@^2.0.2:
buffer-indexof "^1.0.0"
document-register-element@^1.13.1:
- version "1.13.2"
- resolved "https://registry.yarnpkg.com/document-register-element/-/document-register-element-1.13.2.tgz#e1773941f6e39345aefec909cc753e82993b415d"
- integrity sha512-zFmrflJsehS9r86gNiBdvShz+Iuvg8Xnxq715+mrTuHNBway5c24ldTdVmqKxpD4WQBo1HnSflvSJdPgSBb11A==
+ version "1.13.3"
+ resolved "https://registry.yarnpkg.com/document-register-element/-/document-register-element-1.13.3.tgz#81e44360a2e01ad0a56cf94bd1a7627e5cc2013e"
+ integrity sha512-hfggFwSF2bRJG2NLvzpMPLNOYaw3WC/cQ3ZWIl0zxiwfIimNaME53Mf6XFFVtQXpsAdCOf/Yw7tdQXIoSOvhTg==
dependencies:
lightercollective "^0.3.0"
@@ -5107,24 +5099,14 @@ ee-first@1.1.1:
integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
ejs@^2.5.7:
- version "2.6.1"
- resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.6.1.tgz#498ec0d495655abc6f23cd61868d926464071aa0"
- integrity sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==
+ version "2.6.2"
+ resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.6.2.tgz#3a32c63d1cd16d11266cd4703b14fec4e74ab4f6"
+ integrity sha512-PcW2a0tyTuPHz3tWyYqtK6r1fZ3gp+3Sop8Ph+ZYN81Ob5rwmbHEzaqs10N3BEsaGTkh/ooniXK+WwszGlc2+Q==
-electron-to-chromium@^1.3.127, electron-to-chromium@^1.3.47:
- version "1.3.133"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.133.tgz#c47639c19b91feee3e22fad69f5556142007008c"
- integrity sha512-lyoC8aoqbbDqsprb6aPdt9n3DpOZZzdz/T4IZKsR0/dkZIxnJVUjjcpOSwA66jPRIOyDAamCTAUqweU05kKNSg==
-
-electron-to-chromium@^1.3.150:
- version "1.3.159"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.159.tgz#4292643c5cb77678821ce01557ba6dd0f562db5e"
- integrity sha512-bhiEr8/A97GUBcUzNb9MFNhzQOjakbKmEKBEAa6UMY45zG2e8PM63LOgAPXEJE9bQiaQH6nOdYiYf8X821tZjQ==
-
-electron-to-chromium@^1.3.164, electron-to-chromium@^1.3.191:
- version "1.3.193"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.193.tgz#de9b89959288070bffb14557daf8cf9f75b2caf8"
- integrity sha512-WX01CG1UoPtTUFaKKwMn+u8nJ63loP6hNxePWtk1pN8ibWMyX1q6TiWPsz1ABBKXezvmaIdtP+0BwzjC1wyCaw==
+electron-to-chromium@^1.3.164, electron-to-chromium@^1.3.191, electron-to-chromium@^1.3.47:
+ version "1.3.199"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.199.tgz#f9a62a74cda77854310a2abffde8b75591ea09a1"
+ integrity sha512-gachlDdHSK47s0N2e58GH9HMC6Z4ip0SfmYUa5iEbE50AKaOUXysaJnXMfKj0xB245jWbYcyFSH+th3rqsF8hA==
elegant-spinner@^1.0.1:
version "1.0.1"
@@ -5132,9 +5114,9 @@ elegant-spinner@^1.0.1:
integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=
elliptic@^6.0.0:
- version "6.4.1"
- resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a"
- integrity sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==
+ version "6.5.0"
+ resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.0.tgz#2b8ed4c891b7de3200e14412a5b8248c7af505ca"
+ integrity sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg==
dependencies:
bn.js "^4.4.0"
brorand "^1.0.1"
@@ -5154,7 +5136,7 @@ emojis-list@^2.0.0:
resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k=
-encodeurl@~1.0.1, encodeurl@~1.0.2:
+encodeurl@~1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
@@ -5272,7 +5254,7 @@ es-to-primitive@^1.2.0:
is-date-object "^1.0.1"
is-symbol "^1.0.2"
-es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.45, es5-ext@^0.10.46, es5-ext@^0.10.9, es5-ext@~0.10.14, es5-ext@~0.10.2, es5-ext@~0.10.46:
+es5-ext@^0.10.35, es5-ext@^0.10.45, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@~0.10.14, es5-ext@~0.10.2, es5-ext@~0.10.46:
version "0.10.50"
resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.50.tgz#6d0e23a0abdb27018e5ac4fd09b412bc5517a778"
integrity sha512-KMzZTPBkeQV/JcSQhI5/z6d9VWJ3EnQ194USTUwIYZ2ZbpN8+SGXQKt1h68EX44+qt+Fzr8DO17vnxrw7c3agw==
@@ -5281,7 +5263,7 @@ es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.45, es5-ext@^0.10.46, es5-ext@
es6-symbol "~3.1.1"
next-tick "^1.0.0"
-es6-iterator@^2.0.1, es6-iterator@^2.0.3, es6-iterator@~2.0.3:
+es6-iterator@^2.0.3, es6-iterator@~2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"
integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c=
@@ -5291,9 +5273,9 @@ es6-iterator@^2.0.1, es6-iterator@^2.0.3, es6-iterator@~2.0.3:
es6-symbol "^3.1.1"
es6-promise@^4.0.3:
- version "4.2.6"
- resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.6.tgz#b685edd8258886365ea62b57d30de28fadcd974f"
- integrity sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q==
+ version "4.2.8"
+ resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a"
+ integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==
es6-promisify@^5.0.0:
version "5.0.0"
@@ -5311,13 +5293,13 @@ es6-symbol@^3.1.1, es6-symbol@~3.1.1:
es5-ext "~0.10.14"
es6-weak-map@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f"
- integrity sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53"
+ integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==
dependencies:
d "1"
- es5-ext "^0.10.14"
- es6-iterator "^2.0.1"
+ es5-ext "^0.10.46"
+ es6-iterator "^2.0.3"
es6-symbol "^3.1.1"
escape-html@~1.0.3:
@@ -5372,10 +5354,10 @@ estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0:
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=
-estree-walker@^0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.0.tgz#5d865327c44a618dde5699f763891ae31f257dae"
- integrity sha512-peq1RfVAVzr3PU/jL31RaOjUKLoZJpObQWJJ+LgfcxDUifyLZ1RjPQZTl0pzj2uJ45b7A7XpyppXvxdEqzo4rw==
+estree-walker@^0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362"
+ integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==
esutils@^2.0.2:
version "2.0.2"
@@ -5576,79 +5558,7 @@ express@4.16.3:
utils-merge "1.0.1"
vary "~1.1.2"
-express@4.17.0:
- version "4.17.0"
- resolved "https://registry.yarnpkg.com/express/-/express-4.17.0.tgz#288af62228a73f4c8ea2990ba3b791bb87cd4438"
- integrity sha512-1Z7/t3Z5ZnBG252gKUPyItc4xdeaA0X934ca2ewckAsVsw9EG71i++ZHZPYnus8g/s5Bty8IMpSVEuRkmwwPRQ==
- dependencies:
- accepts "~1.3.7"
- array-flatten "1.1.1"
- body-parser "1.19.0"
- content-disposition "0.5.3"
- content-type "~1.0.4"
- cookie "0.4.0"
- cookie-signature "1.0.6"
- debug "2.6.9"
- depd "~1.1.2"
- encodeurl "~1.0.2"
- escape-html "~1.0.3"
- etag "~1.8.1"
- finalhandler "~1.1.2"
- fresh "0.5.2"
- merge-descriptors "1.0.1"
- methods "~1.1.2"
- on-finished "~2.3.0"
- parseurl "~1.3.3"
- path-to-regexp "0.1.7"
- proxy-addr "~2.0.5"
- qs "6.7.0"
- range-parser "~1.2.1"
- safe-buffer "5.1.2"
- send "0.17.1"
- serve-static "1.14.1"
- setprototypeof "1.1.1"
- statuses "~1.5.0"
- type-is "~1.6.18"
- utils-merge "1.0.1"
- vary "~1.1.2"
-
-express@^4.16.2:
- version "4.16.4"
- resolved "https://registry.yarnpkg.com/express/-/express-4.16.4.tgz#fddef61926109e24c515ea97fd2f1bdbf62df12e"
- integrity sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==
- dependencies:
- accepts "~1.3.5"
- array-flatten "1.1.1"
- body-parser "1.18.3"
- content-disposition "0.5.2"
- content-type "~1.0.4"
- cookie "0.3.1"
- cookie-signature "1.0.6"
- debug "2.6.9"
- depd "~1.1.2"
- encodeurl "~1.0.2"
- escape-html "~1.0.3"
- etag "~1.8.1"
- finalhandler "1.1.1"
- fresh "0.5.2"
- merge-descriptors "1.0.1"
- methods "~1.1.2"
- on-finished "~2.3.0"
- parseurl "~1.3.2"
- path-to-regexp "0.1.7"
- proxy-addr "~2.0.4"
- qs "6.5.2"
- range-parser "~1.2.0"
- safe-buffer "5.1.2"
- send "0.16.2"
- serve-static "1.13.2"
- setprototypeof "1.1.0"
- statuses "~1.4.0"
- type-is "~1.6.16"
- utils-merge "1.0.1"
- vary "~1.1.2"
-
-express@^4.17.1:
+express@4.17.1, express@^4.16.2, express@^4.17.1:
version "4.17.1"
resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134"
integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==
@@ -5723,9 +5633,9 @@ external-editor@^2.0.1:
tmp "^0.0.33"
external-editor@^3.0.0, external-editor@^3.0.3:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27"
- integrity sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495"
+ integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==
dependencies:
chardet "^0.7.0"
iconv-lite "^0.4.24"
@@ -5783,9 +5693,9 @@ fast-deep-equal@^2.0.1:
integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=
fast-glob@^2.0.2:
- version "2.2.6"
- resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.6.tgz#a5d5b697ec8deda468d85a74035290a025a95295"
- integrity sha512-0BvMaZc1k9F+MeWWMe8pL6YltFzZYcJsYU7D4JyDA6PAczaXvxqQQ/z+mDF7/4Mw01DeUc+i3CTKajnkANkV4w==
+ version "2.2.7"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d"
+ integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==
dependencies:
"@mrmlnc/readdir-enhanced" "^2.2.1"
"@nodelib/fs.stat" "^1.1.2"
@@ -5794,6 +5704,18 @@ fast-glob@^2.0.2:
merge2 "^1.2.3"
micromatch "^3.1.10"
+fast-glob@^3.0.3:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.0.4.tgz#d484a41005cb6faeb399b951fd1bd70ddaebb602"
+ integrity sha512-wkIbV6qg37xTJwqSsdnIphL1e+LaGz4AIQqr00mIubMaEhv1/HEmJ0uuCGZRNRUkZZmOB5mJKO0ZUTVq+SxMQg==
+ dependencies:
+ "@nodelib/fs.stat" "^2.0.1"
+ "@nodelib/fs.walk" "^1.2.1"
+ glob-parent "^5.0.0"
+ is-glob "^4.0.1"
+ merge2 "^1.2.3"
+ micromatch "^4.0.2"
+
fast-json-stable-stringify@2.0.0, fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
@@ -5814,6 +5736,13 @@ fastparse@^1.1.1:
resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9"
integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==
+fastq@^1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.6.0.tgz#4ec8a38f4ac25f21492673adb7eae9cfef47d1c2"
+ integrity sha512-jmxqQ3Z/nXoeyDmWAzF9kH1aGZSis6e/SbfPmJpUnyZ0ogr6iscHQaml4wsEepEWSdtmpy+eVXmCRIMpxaXqOA==
+ dependencies:
+ reusify "^1.0.0"
+
faye-websocket@^0.10.0:
version "0.10.0"
resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4"
@@ -5822,9 +5751,9 @@ faye-websocket@^0.10.0:
websocket-driver ">=0.5.1"
faye-websocket@~0.11.1:
- version "0.11.1"
- resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38"
- integrity sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=
+ version "0.11.3"
+ resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e"
+ integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==
dependencies:
websocket-driver ">=0.5.1"
@@ -5918,19 +5847,6 @@ fill-range@^7.0.1:
dependencies:
to-regex-range "^5.0.1"
-finalhandler@1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5"
- integrity sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=
- dependencies:
- debug "2.6.9"
- encodeurl "~1.0.1"
- escape-html "~1.0.3"
- on-finished "~2.3.0"
- parseurl "~1.3.2"
- statuses "~1.3.1"
- unpipe "~1.0.0"
-
finalhandler@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105"
@@ -5944,7 +5860,7 @@ finalhandler@1.1.1:
statuses "~1.4.0"
unpipe "~1.0.0"
-finalhandler@~1.1.2:
+finalhandler@1.1.2, finalhandler@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d"
integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==
@@ -6025,9 +5941,9 @@ findup-sync@0.4.2:
resolve-dir "^0.1.0"
flatted@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.0.tgz#55122b6536ea496b4b44893ee2608141d10d9916"
- integrity sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08"
+ integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==
flush-write-stream@^1.0.0:
version "1.1.1"
@@ -6037,7 +5953,14 @@ flush-write-stream@^1.0.0:
inherits "^2.0.3"
readable-stream "^2.3.6"
-follow-redirects@^1.0.0, follow-redirects@^1.3.0:
+follow-redirects@1.5.10:
+ version "1.5.10"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a"
+ integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==
+ dependencies:
+ debug "=3.1.0"
+
+follow-redirects@^1.0.0:
version "1.7.0"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.7.0.tgz#489ebc198dc0e7f64167bd23b03c4c19b5784c76"
integrity sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==
@@ -6142,7 +6065,7 @@ fs-extra@5.0.0:
jsonfile "^4.0.0"
universalify "^0.1.0"
-fs-extra@7.0.1, fs-extra@^7.0.0:
+fs-extra@7.0.1, fs-extra@^7.0.1:
version "7.0.1"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9"
integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==
@@ -6160,10 +6083,19 @@ fs-extra@^1.0.0:
jsonfile "^2.1.0"
klaw "^1.0.0"
+fs-extra@^8.0.0, fs-extra@^8.1.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
+ integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
+ dependencies:
+ graceful-fs "^4.2.0"
+ jsonfile "^4.0.0"
+ universalify "^0.1.0"
+
fs-minipass@^1.2.5:
- version "1.2.5"
- resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d"
- integrity sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==
+ version "1.2.6"
+ resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07"
+ integrity sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ==
dependencies:
minipass "^2.2.1"
@@ -6182,7 +6114,7 @@ fs.realpath@^1.0.0:
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
-fsevents@^1.2.2, fsevents@^1.2.7:
+fsevents@^1.2.7:
version "1.2.9"
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f"
integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==
@@ -6262,6 +6194,13 @@ get-stream@^4.0.0, get-stream@^4.1.0:
dependencies:
pump "^3.0.0"
+get-stream@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9"
+ integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==
+ dependencies:
+ pump "^3.0.0"
+
get-value@^2.0.3, get-value@^2.0.6:
version "2.0.6"
resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
@@ -6405,7 +6344,7 @@ glob@7.1.3:
once "^1.3.0"
path-is-absolute "^1.0.0"
-glob@7.1.4, glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3:
+glob@7.1.4, glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4:
version "7.1.4"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255"
integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==
@@ -6465,6 +6404,20 @@ globby@8.0.1:
pify "^3.0.0"
slash "^1.0.0"
+globby@^10.0.1:
+ version "10.0.1"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.1.tgz#4782c34cb75dd683351335c5829cc3420e606b22"
+ integrity sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==
+ dependencies:
+ "@types/glob" "^7.1.1"
+ array-union "^2.1.0"
+ dir-glob "^3.0.1"
+ fast-glob "^3.0.3"
+ glob "^7.1.3"
+ ignore "^5.1.1"
+ merge2 "^1.2.3"
+ slash "^3.0.0"
+
globby@^6.1.0:
version "6.1.0"
resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
@@ -6541,10 +6494,27 @@ got@^6.7.1:
unzip-response "^2.0.1"
url-parse-lax "^1.0.0"
-graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9:
- version "4.1.15"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"
- integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==
+got@^9.6.0:
+ version "9.6.0"
+ resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85"
+ integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==
+ dependencies:
+ "@sindresorhus/is" "^0.14.0"
+ "@szmarczak/http-timer" "^1.1.2"
+ cacheable-request "^6.0.0"
+ decompress-response "^3.3.0"
+ duplexer3 "^0.1.4"
+ get-stream "^4.1.0"
+ lowercase-keys "^1.0.1"
+ mimic-response "^1.0.1"
+ p-cancelable "^1.0.0"
+ to-readable-stream "^1.0.0"
+ url-parse-lax "^3.0.0"
+
+graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.0.tgz#8d8fdc73977cb04104721cb53666c1ca64cd328b"
+ integrity sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==
graphviz@^0.0.8:
version "0.0.8"
@@ -6674,6 +6644,11 @@ has-values@^1.0.0:
is-number "^3.0.0"
kind-of "^4.0.0"
+has-yarn@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77"
+ integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==
+
has@^1.0.1, has@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
@@ -6815,6 +6790,11 @@ http-cache-semantics@3.8.1, http-cache-semantics@^3.8.1:
resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2"
integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==
+http-cache-semantics@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.0.3.tgz#495704773277eeef6e43f9ab2c2c7d259dda25c5"
+ integrity sha512-TcIMG3qeVLgDr1TEd2XvHaTnMPwYQUQMIBLy+5pLSDKYFc7UIqj39w8EGzZkaxoLv/l2K8HaI0t5AVA+YYgUew==
+
http-deceiver@^1.2.7:
version "1.2.7"
resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87"
@@ -6830,17 +6810,7 @@ http-errors@1.6.2:
setprototypeof "1.0.3"
statuses ">= 1.3.1 < 2"
-http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3:
- version "1.6.3"
- resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d"
- integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=
- dependencies:
- depd "~1.1.2"
- inherits "2.0.3"
- setprototypeof "1.1.0"
- statuses ">= 1.4.0 < 2"
-
-http-errors@1.7.2, http-errors@~1.7.2:
+http-errors@1.7.2:
version "1.7.2"
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f"
integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==
@@ -6851,10 +6821,31 @@ http-errors@1.7.2, http-errors@~1.7.2:
statuses ">= 1.5.0 < 2"
toidentifier "1.0.0"
-http-parser-js@>=0.4.0:
- version "0.5.0"
- resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.0.tgz#d65edbede84349d0dc30320815a15d39cc3cbbd8"
- integrity sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w==
+http-errors@~1.6.2:
+ version "1.6.3"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d"
+ integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=
+ dependencies:
+ depd "~1.1.2"
+ inherits "2.0.3"
+ setprototypeof "1.1.0"
+ statuses ">= 1.4.0 < 2"
+
+http-errors@~1.7.2:
+ version "1.7.3"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06"
+ integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==
+ dependencies:
+ depd "~1.1.2"
+ inherits "2.0.4"
+ setprototypeof "1.1.1"
+ statuses ">= 1.5.0 < 2"
+ toidentifier "1.0.0"
+
+"http-parser-js@>=0.4.0 <0.4.11":
+ version "0.4.10"
+ resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4"
+ integrity sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=
http-proxy-agent@^2.1.0:
version "2.1.0"
@@ -6908,11 +6899,11 @@ https-browserify@^1.0.0:
integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
https-proxy-agent@^2.2.0, 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"
- integrity sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.2.tgz#271ea8e90f836ac9f119daccd39c19ff7dfb0793"
+ integrity sha512-c8Ndjc9Bkpfx/vCJueCPy0jlP4ccCCSNDp8xwCZzPjKJUm+B+u9WX2x98Qx4n1PiMNTWo3D7KK5ifNV/yJyRzg==
dependencies:
- agent-base "^4.1.0"
+ agent-base "^4.3.0"
debug "^3.1.0"
humanize-ms@^1.2.1:
@@ -6923,10 +6914,11 @@ humanize-ms@^1.2.1:
ms "^2.0.0"
husky@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/husky/-/husky-3.0.0.tgz#de63821a7049dc412b1afd753c259e2f6e227562"
- integrity sha512-lKMEn7bRK+7f5eWPNGclDVciYNQt0GIkAQmhKl+uHP1qFzoN0h92kmH9HZ8PCwyVA2EQPD8KHf0FYWqnTxau+Q==
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/husky/-/husky-3.0.1.tgz#06152c28e129622b05fa09c494209de8cf2dfb59"
+ integrity sha512-PXBv+iGKw23GHUlgELRlVX9932feFL407/wHFwtsGeArp0dDM4u+/QusSQwPKxmNgjpSL+ustbOdQ2jetgAZbA==
dependencies:
+ chalk "^2.4.2"
cosmiconfig "^5.2.1"
execa "^1.0.0"
get-stdin "^7.0.0"
@@ -6943,13 +6935,6 @@ iconv-lite@0.4.19:
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b"
integrity sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==
-iconv-lite@0.4.23:
- version "0.4.23"
- resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63"
- integrity sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==
- dependencies:
- safer-buffer ">= 2.1.2 < 3"
-
iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
@@ -6986,10 +6971,10 @@ ignore@^3.3.5, ignore@^3.3.7:
resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043"
integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==
-ignore@^5.0.4:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.1.tgz#2fc6b8f518aff48fef65a7f348ed85632448e4a5"
- integrity sha512-DWjnQIFLenVrwyRCKZT+7a7/U4Cqgar4WG8V++K3hw+lrW1hc/SIwdiGmtxKCVACmHULTuGeBbHJmbwW7/sAvA==
+ignore@^5.0.4, ignore@^5.1.1:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.2.tgz#e28e584d43ad7e92f96995019cc43b9e1ac49558"
+ integrity sha512-vdqWBp7MyzdmHkkRWV5nY+PfGRbYbahfuvsBCh277tq+w9zyNi7h5CYJCK0kmzti9kU+O/cB7sE8HvKv6aXAKQ==
image-size@~0.5.0:
version "0.5.5"
@@ -7061,16 +7046,21 @@ inflight@^1.0.4:
once "^1.3.0"
wrappy "1"
-inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
- integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
+inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+ integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
inherits@2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=
+inherits@2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+ integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
+
ini@1.3.5, ini@^1.3.2, ini@^1.3.4, ini@~1.3.0:
version "1.3.5"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
@@ -7214,11 +7204,16 @@ ip@^1.1.0, ip@^1.1.5:
resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=
-ipaddr.js@1.9.0, ipaddr.js@^1.5.2, ipaddr.js@^1.9.0:
+ipaddr.js@1.9.0:
version "1.9.0"
resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65"
integrity sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==
+ipaddr.js@^1.5.2, ipaddr.js@^1.9.0:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
+ integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
+
is-absolute@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576"
@@ -7265,6 +7260,11 @@ is-buffer@^1.1.5:
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
+is-buffer@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.3.tgz#4ecf3fcf749cbd1e472689e109ac66261a25e725"
+ integrity sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==
+
is-callable@^1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75"
@@ -7428,6 +7428,11 @@ is-npm@^1.0.0:
resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4"
integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ=
+is-npm@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-3.0.0.tgz#ec9147bfb629c43f494cf67936a961edec7e8053"
+ integrity sha512-wsigDr1Kkschp2opC4G3yA6r9EgVA6NjRpWzIi9axXqeIaAATPRJc4uLujXe3Nd9uO8KoDyA4MD6aZSeXTADhA==
+
is-number@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
@@ -7468,9 +7473,9 @@ is-path-cwd@^1.0.0:
integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=
is-path-cwd@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.1.0.tgz#2e0c7e463ff5b7a0eb60852d851a6809347a124c"
- integrity sha512-Sc5j3/YnM8tDeyCsVeKlm/0p95075DyLmDEIkSgQ7mXkrOX+uTCtmQFm0CYzVyJwcCCmO3k8qfJt17SxQwB5Zw==
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb"
+ integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==
is-path-in-cwd@^1.0.0:
version "1.0.1"
@@ -7505,7 +7510,7 @@ is-plain-obj@^1.0.0, is-plain-obj@^1.1.0:
resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4=
-is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4:
+is-plain-object@^2.0.3, is-plain-object@^2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
@@ -7532,6 +7537,13 @@ is-redirect@^1.0.0:
resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24"
integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=
+is-reference@^1.1.2:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.1.3.tgz#e99059204b66fdbe09305cfca715a29caa5c8a51"
+ integrity sha512-W1iHHv/oyBb2pPxkBxtaewxa1BC58Pn5J0hogyCdefwUIvb6R+TGbAcIa4qPNYLqLhb3EnOgUf2MQkkF76BcKw==
+ dependencies:
+ "@types/estree" "0.0.39"
+
is-regex@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
@@ -7575,6 +7587,13 @@ is-text-path@^1.0.0:
dependencies:
text-extensions "^1.0.0"
+is-text-path@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-2.0.0.tgz#b2484e2b720a633feb2e85b67dc193ff72c75636"
+ integrity sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==
+ dependencies:
+ text-extensions "^2.0.0"
+
is-typedarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
@@ -7607,6 +7626,11 @@ is-wsl@^1.1.0:
resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=
+is-yarn-global@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232"
+ integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==
+
isarray@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
@@ -7651,10 +7675,10 @@ isstream@~0.1.2:
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
-istanbul-api@^2.1.1:
- version "2.1.7"
- resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-2.1.7.tgz#82786b79f3b93d481349c7aa1e2c2b4eeb48c8a8"
- integrity sha512-LYTOa2UrYFyJ/aSczZi/6lBykVMjCCvUmT64gOe+jPZFy4w6FYfPGqFT2IiQ2BxVHHDOvCD7qrIXb0EOh4uGWw==
+istanbul-api@^2.1.6:
+ version "2.1.6"
+ resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-2.1.6.tgz#d61702a9d1c66ad89d92e66d401e16b0bda4a35f"
+ integrity sha512-x0Eicp6KsShG1k1rMgBAi/1GgY7kFGEBwQpw3PXGEmu+rBcBNhqU8g2DgY9mlepAsLPzrzrbqSgCGANnki4POA==
dependencies:
async "^2.6.2"
compare-versions "^3.4.0"
@@ -7664,7 +7688,7 @@ istanbul-api@^2.1.1:
istanbul-lib-instrument "^3.3.0"
istanbul-lib-report "^2.0.8"
istanbul-lib-source-maps "^3.0.6"
- istanbul-reports "^2.2.5"
+ istanbul-reports "^2.2.4"
js-yaml "^3.13.1"
make-dir "^2.1.0"
minimatch "^3.0.4"
@@ -7743,17 +7767,10 @@ istanbul-lib-source-maps@^3.0.1, istanbul-lib-source-maps@^3.0.6:
rimraf "^2.6.3"
source-map "^0.6.1"
-istanbul-reports@^2.1.1:
- version "2.2.4"
- resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.4.tgz#4e0d0ddf0f0ad5b49a314069d31b4f06afe49ad3"
- integrity sha512-QCHGyZEK0bfi9GR215QSm+NJwFKEShbtc7tfbUdLAEzn3kKhLDDZqvljn8rPZM9v8CEOhzL1nlYoO4r1ryl67w==
- dependencies:
- handlebars "^4.1.2"
-
-istanbul-reports@^2.2.5:
- version "2.2.5"
- resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.5.tgz#7fd354847124b46861365ac41165a4dfe5f67ea5"
- integrity sha512-ilCSjE6f7elNIRxnSnIhnOpXdf3ryUT7Zkl+TaADItM638SWXjfNW40cujZCIjex4g4DTkzIy9kzwkaLruB50Q==
+istanbul-reports@^2.1.1, istanbul-reports@^2.2.4:
+ version "2.2.6"
+ resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.6.tgz#7b4f2660d82b29303a8fe6091f8ca4bf058da1af"
+ integrity sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==
dependencies:
handlebars "^4.1.2"
@@ -7765,10 +7782,10 @@ isurl@^1.0.0-alpha5:
has-to-string-tag-x "^1.2.0"
is-object "^1.0.1"
-iterare@1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/iterare/-/iterare-1.1.2.tgz#32e65fe03c72f727b1ae5fd002ed6a215f523ae8"
- integrity sha512-25rVYmj/dDvTR6zOa9jY1Ihd6USLa0J508Ub2iy7Aga+xu9JMbjDds2Uh03ReDGbva/YN3s3Ybi+Do0nOX6wAg==
+iterare@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/iterare/-/iterare-1.2.0.tgz#7427f5ed45986e4b73e2fea903579f1117f3dd15"
+ integrity sha512-RxMV9p/UzdK0Iplnd8mVgRvNdXlsTOiuDrqMRnDi3wIhbT+JP4xDquAX9ay13R3CH72NBzQ91KWe0+C168QAyQ==
jasmine-core@~2.99.1:
version "2.99.1"
@@ -7906,9 +7923,9 @@ jest-get-type@^24.8.0:
integrity sha512-RR4fo8jEmMD9zSz2nLbs2j0zvPpk/KCEz3a62jJWbd2ayNo0cb+KFRxPHVhE4ZmgGJEQp0fosmNz84IfqM8cMQ==
jest-haste-map@^24.8.0:
- version "24.8.0"
- resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.8.0.tgz#51794182d877b3ddfd6e6d23920e3fe72f305800"
- integrity sha512-ZBPRGHdPt1rHajWelXdqygIDpJx8u3xOoLyUBWRW28r3tagrgoepPrzAozW7kW9HrQfhvmiv1tncsxqHJO1onQ==
+ version "24.8.1"
+ resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.8.1.tgz#f39cc1d2b1d907e014165b4bd5a957afcb992982"
+ integrity sha512-SwaxMGVdAZk3ernAx2Uv2sorA7jm3Kx+lR0grp6rMmnY06Kn/urtKx1LPN2mGTea4fCT38impYT28FfcLUhX0g==
dependencies:
"@jest/types" "^24.8.0"
anymatch "^2.0.0"
@@ -8326,9 +8343,9 @@ json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1:
integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
json3@^3.3.2:
- version "3.3.2"
- resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1"
- integrity sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=
+ version "3.3.3"
+ resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81"
+ integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==
json5@2.x, json5@^2.1.0:
version "2.1.0"
@@ -8392,11 +8409,11 @@ karma-chrome-launcher@~2.2.0:
which "^1.2.1"
karma-coverage-istanbul-reporter@~2.0.1:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-2.0.5.tgz#ca5899d4905e44a5984dd4f963adfc1a74dce767"
- integrity sha512-yPvAlKtY3y+rKKWbOo0CzBMVTvJEeMOgbMXuVv3yWvS8YtYKC98AU9vFF0mVBZ2RP1E9SgS90+PT6Kf14P3S4w==
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-2.0.6.tgz#7b6e9c88781447bb87aa6ac24bf74b93e558adc3"
+ integrity sha512-WFh77RI8bMIKdOvI/1/IBmgnM+Q7NOLhnwG91QJrM8lW+CIXCjTzhhUsT/svLvAkLmR10uWY4RyYbHMLkTglvg==
dependencies:
- istanbul-api "^2.1.1"
+ istanbul-api "^2.1.6"
minimatch "^3.0.4"
karma-jasmine-html-reporter@^0.2.2:
@@ -8469,6 +8486,13 @@ keyv@3.0.0:
dependencies:
json-buffer "3.0.0"
+keyv@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9"
+ integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==
+ dependencies:
+ json-buffer "3.0.0"
+
killable@^1.0.0, killable@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892"
@@ -8517,6 +8541,13 @@ latest-version@^3.0.0:
dependencies:
package-json "^4.0.0"
+latest-version@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face"
+ integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==
+ dependencies:
+ package-json "^6.3.0"
+
lazy-ass@1.6.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513"
@@ -8607,6 +8638,11 @@ lightercollective@^0.3.0:
resolved "https://registry.yarnpkg.com/lightercollective/-/lightercollective-0.3.0.tgz#1f07638642ec645d70bdb69ab2777676f35a28f0"
integrity sha512-RFOLSUVvwdK3xA0P8o6G7QGXLIyy1L2qv5caEI7zXN5ciaEjbAriRF182kbsoJ1S1TgvpyGcN485fMky6qxOPw==
+lines-and-columns@^1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
+ integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=
+
listr-silent-renderer@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e"
@@ -8726,7 +8762,7 @@ locate-path@^5.0.0:
dependencies:
p-locate "^4.1.0"
-lodash._reinterpolate@~3.0.0:
+lodash._reinterpolate@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"
integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=
@@ -8736,11 +8772,6 @@ lodash.clonedeep@^4.5.0:
resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=
-lodash.debounce@^4.0.8:
- version "4.0.8"
- resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
- integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168=
-
lodash.ismatch@^4.4.0:
version "4.4.0"
resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37"
@@ -8767,21 +8798,21 @@ lodash.tail@^4.1.1:
integrity sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=
lodash.template@^4.0.2:
- version "4.4.0"
- resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.4.0.tgz#e73a0385c8355591746e020b99679c690e68fba0"
- integrity sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab"
+ integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==
dependencies:
- lodash._reinterpolate "~3.0.0"
+ lodash._reinterpolate "^3.0.0"
lodash.templatesettings "^4.0.0"
lodash.templatesettings@^4.0.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz#2b4d4e95ba440d915ff08bc899e4553666713316"
- integrity sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33"
+ integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==
dependencies:
- lodash._reinterpolate "~3.0.0"
+ lodash._reinterpolate "^3.0.0"
-lodash@4.17.11, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.0:
+lodash@4.17.11:
version "4.17.11"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==
@@ -8796,6 +8827,11 @@ lodash@^3.8.0:
resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6"
integrity sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=
+lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.0:
+ version "4.17.15"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
+ integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
+
log-symbols@2.2.0, log-symbols@^2.1.0, log-symbols@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a"
@@ -8819,22 +8855,17 @@ log-update@^1.0.2:
cli-cursor "^1.0.2"
log4js@^4.0.0:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/log4js/-/log4js-4.1.1.tgz#48ebed51e6989557b8a991c48f01879e82773545"
- integrity sha512-tSQUF9bBMdcBtuLD6vD7hBM9Ci6Lng/NVHZEq4YbuRGo7ObmLiZuhxz33HKAmJItit74pAjvZgirqYX2LRaoGA==
+ version "4.5.1"
+ resolved "https://registry.yarnpkg.com/log4js/-/log4js-4.5.1.tgz#e543625e97d9e6f3e6e7c9fc196dd6ab2cae30b5"
+ integrity sha512-EEEgFcE9bLgaYUKuozyFfytQM2wDHtXn4tAN41pkaxpNjAykv11GVdeI4tHtmPWW4Xrgh9R/2d7XYghDVjbKKw==
dependencies:
date-format "^2.0.0"
debug "^4.1.1"
flatted "^2.0.0"
- rfdc "^1.1.2"
- streamroller "^1.0.4"
+ rfdc "^1.1.4"
+ streamroller "^1.0.6"
-loglevel@^1.4.1:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz#e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa"
- integrity sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=
-
-loglevel@^1.6.3:
+loglevel@^1.4.1, loglevel@^1.6.3:
version "1.6.3"
resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.3.tgz#77f2eb64be55a404c9fd04ad16d57c1d6d6b1280"
integrity sha512-LoEDv5pgpvWgPF4kNYuIp0qqSJVWak/dML0RY74xlzMZiT9w77teNAwKYKWBTYjlokMirg+o3jBwp+vlLrcfAA==
@@ -8869,12 +8900,17 @@ lowercase-keys@1.0.0:
resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306"
integrity sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=
-lowercase-keys@^1.0.0:
+lowercase-keys@^1.0.0, lowercase-keys@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f"
integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==
-lru-cache@4.1.x, lru-cache@^4.0.1, lru-cache@^4.1.2, lru-cache@^4.1.3:
+lowercase-keys@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479"
+ integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==
+
+lru-cache@4.1.x, lru-cache@^4.0.1:
version "4.1.5"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
@@ -8902,18 +8938,11 @@ macos-release@^1.0.0:
integrity sha512-mmLbumEYMi5nXReB9js3WGsB8UE6cDBWyIO62Z4DNx6GbRhDxHNjA1MlzSpJ2S2KM1wyiPRA0d19uHWYYvMHjA==
macos-release@^2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.2.0.tgz#ab58d55dd4714f0a05ad4b0e90f4370fef5cdea8"
- integrity sha512-iV2IDxZaX8dIcM7fG6cI46uNmHUxHE4yN+Z8tKHAW1TBPMZDIKHf/3L+YnOuj/FK9il14UaVdHmiQ1tsi90ltA==
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.3.0.tgz#eb1930b036c0800adebccd5f17bc4c12de8bb71f"
+ integrity sha512-OHhSbtcviqMPt7yfw5ef5aghS2jzFVKEFyCJndQt2YpSQ9qRVSEv2axSJI1paVThEu+FFGs584h/1YhxjVqajA==
-magic-string@0.25.2, magic-string@^0.25.0, magic-string@^0.25.2:
- version "0.25.2"
- resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.2.tgz#139c3a729515ec55e96e69e82a11fe890a293ad9"
- integrity sha512-iLs9mPjh9IuTtRsqqhNGYcZXGei0Nh/A4xirrsqW7c+QhKVFL2vm7U09ru6cHRD22azaP/wMDgI+HCqbETMTtg==
- dependencies:
- sourcemap-codec "^1.4.4"
-
-magic-string@0.25.3:
+magic-string@0.25.3, magic-string@^0.25.0, magic-string@^0.25.2:
version "0.25.3"
resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.3.tgz#34b8d2a2c7fec9d9bdf9929a3fd81d271ef35be9"
integrity sha512-6QK0OpF/phMz0Q2AxILkX2mFhi7m+WMwTRg0LQKq/WBB0cDP4rYH3Wp4/d3OTXlrPLVJT/RFqj8tFeAR4nk8AA==
@@ -8940,17 +8969,17 @@ make-error@1.x, make-error@^1.1.1:
resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8"
integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==
-make-fetch-happen@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-4.0.1.tgz#141497cb878f243ba93136c83d8aba12c216c083"
- integrity sha512-7R5ivfy9ilRJ1EMKIOziwrns9fGeAD4bAha8EB7BIiBBLHm2KeTUGCrICFt2rbHfzheTLynv50GnNTK1zDTrcQ==
+make-fetch-happen@^4.0.1, make-fetch-happen@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-4.0.2.tgz#2d156b11696fb32bffbafe1ac1bc085dd6c78a79"
+ integrity sha512-YMJrAjHSb/BordlsDEcVcPyTbiJKkzqMf48N8dAJZT9Zjctrkb6Yg4TY9Sq2AwSIQJFn5qBBKVTYt3vP5FMIHA==
dependencies:
agentkeepalive "^3.4.1"
- cacache "^11.0.1"
+ cacache "^11.3.3"
http-cache-semantics "^3.8.1"
http-proxy-agent "^2.1.0"
https-proxy-agent "^2.2.1"
- lru-cache "^4.1.2"
+ lru-cache "^5.1.1"
mississippi "^3.0.0"
node-fetch-npm "^2.0.2"
promise-retry "^1.1.1"
@@ -9156,6 +9185,14 @@ micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8, micromatch@^3.1.9:
snapdragon "^0.8.1"
to-regex "^3.0.2"
+micromatch@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259"
+ integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==
+ dependencies:
+ braces "^3.0.1"
+ picomatch "^2.0.5"
+
miller-rabin@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
@@ -9198,12 +9235,7 @@ mime@1.6.0, mime@^1.4.1, mime@^1.5.0:
resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
-mime@^2.3.1:
- version "2.4.2"
- resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.2.tgz#ce5229a5e99ffc313abac806b482c10e7ba6ac78"
- integrity sha512-zJBfZDkwRu+j3Pdd2aHsR5GfH2jIWhmL1ZzBoc+X+3JEti2hbArWcyJ+1laC1D2/U/W1a/+Cegj0/OnEU2ybjg==
-
-mime@^2.4.2:
+mime@^2.3.1, mime@^2.4.2:
version "2.4.4"
resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5"
integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==
@@ -9218,7 +9250,7 @@ mimic-fn@^2.0.0:
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
-mimic-response@^1.0.0:
+mimic-response@^1.0.0, mimic-response@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==
@@ -9252,7 +9284,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
-minimatch@3.0.4, minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4:
+minimatch@3.0.4, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
@@ -9282,7 +9314,7 @@ minimist@~0.0.1:
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=
-minipass@^2.2.1, minipass@^2.3.4, minipass@^2.3.5:
+minipass@^2.2.1, minipass@^2.3.5:
version "2.3.5"
resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848"
integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==
@@ -9290,7 +9322,7 @@ minipass@^2.2.1, minipass@^2.3.4, minipass@^2.3.5:
safe-buffer "^5.1.2"
yallist "^3.0.0"
-minizlib@^1.1.1:
+minizlib@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614"
integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==
@@ -9314,9 +9346,9 @@ mississippi@^3.0.0:
through2 "^2.0.0"
mixin-deep@^1.2.0:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe"
- integrity sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
+ integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==
dependencies:
for-in "^1.0.2"
is-extendable "^1.0.1"
@@ -9368,15 +9400,20 @@ ms@2.0.0:
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
-ms@2.1.1, ms@^2.0.0, ms@^2.1.1:
+ms@2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
-multer@1.4.1:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/multer/-/multer-1.4.1.tgz#24b12a416a22fec2ade810539184bf138720159e"
- integrity sha512-zzOLNRxzszwd+61JFuAo0fxdQfvku12aNJgnla0AQ+hHxFmfc/B7jBVuPr5Rmvu46Jze/iJrFpSOsD7afO8SDw==
+ms@^2.0.0, ms@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+ integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+multer@1.4.2:
+ version "1.4.2"
+ resolved "https://registry.yarnpkg.com/multer/-/multer-1.4.2.tgz#2f1f4d12dbaeeba74cb37e623f234bf4d3d2057a"
+ integrity sha512-xY8pX7V+ybyUpbYMxtjM9KAiD9ixtg5/JkeKUTD6xilfDv0vzzOFcCp4Ljb1UU3tSOM3VTZtKo63OmzOrGi3Cg==
dependencies:
append-field "^1.0.0"
busboy "^0.2.11"
@@ -9400,15 +9437,16 @@ multicast-dns@^6.0.1:
dns-packet "^1.3.1"
thunky "^1.0.2"
-multimatch@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-2.1.0.tgz#9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b"
- integrity sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=
+multimatch@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-4.0.0.tgz#8c3c0f6e3e8449ada0af3dd29efb491a375191b3"
+ integrity sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==
dependencies:
- array-differ "^1.0.0"
- array-union "^1.0.1"
- arrify "^1.0.0"
- minimatch "^3.0.0"
+ "@types/minimatch" "^3.0.3"
+ array-differ "^3.0.0"
+ array-union "^2.1.0"
+ arrify "^2.0.1"
+ minimatch "^3.0.4"
mute-stream@0.0.6:
version "0.0.6"
@@ -9421,9 +9459,9 @@ mute-stream@0.0.7:
integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
nan@^2.12.1:
- version "2.13.2"
- resolved "https://registry.yarnpkg.com/nan/-/nan-2.13.2.tgz#f51dc7ae66ba7d5d55e1e6d4d8092e802c9aefe7"
- integrity sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==
+ version "2.14.0"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c"
+ integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==
nanomatch@^1.2.9:
version "1.2.13"
@@ -9448,11 +9486,11 @@ natural-compare@^1.4.0:
integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
needle@^2.2.1:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/needle/-/needle-2.3.1.tgz#d272f2f4034afb9c4c9ab1379aabc17fc85c9388"
- integrity sha512-CaLXV3W8Vnbps8ZANqDGz7j4x7Yj1LW4TWF/TQuDfj7Cfx4nAPTvw98qgTevtto1oHDrh3pQkaODbqupXlsWTg==
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c"
+ integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==
dependencies:
- debug "^4.1.0"
+ debug "^3.2.6"
iconv-lite "^0.4.4"
sax "^1.2.4"
@@ -9462,9 +9500,9 @@ negotiator@0.6.2:
integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
neo-async@^2.5.0, neo-async@^2.6.0:
- version "2.6.0"
- resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.0.tgz#b9d15e4d71c6762908654b5183ed38b753340835"
- integrity sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c"
+ integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==
nested-error-stacks@^2.0.0:
version "2.1.0"
@@ -9476,39 +9514,38 @@ next-tick@1, next-tick@^1.0.0:
resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c"
integrity sha1-yobR/ogoFpsBICCOPchCS524NCw=
-ng-packagr@5.1.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/ng-packagr/-/ng-packagr-5.1.0.tgz#4262775f29f7da72b3e5492c480a6857065d712e"
- integrity sha512-sBQrn3jy0S2T8nN1gnptO3Dd55X6oNPSFlCckfHPp7G3T3eNUfo3o9dqeZc58PFiY1WOAi4z43LI7kFFeSrTTA==
+ng-packagr@5.3.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/ng-packagr/-/ng-packagr-5.3.0.tgz#92434ca05ecbd1e01fe961a66c8a9a66b095f6fa"
+ integrity sha512-i+964lzZC7VVzatDCLDZndiXTog1XGozY7K1Bs78+uBF8O1YHNQP9wB9C5fR4uEaSKVhCWEBYekoS69flCugMA==
dependencies:
"@ngtools/json-schema" "^1.1.0"
- autoprefixer "^9.0.0"
+ autoprefixer "^9.6.0"
browserslist "^4.0.0"
chalk "^2.3.1"
- chokidar "^2.0.3"
+ chokidar "^3.0.0"
clean-css "^4.1.11"
commander "^2.12.0"
- fs-extra "^7.0.0"
+ fs-extra "^8.0.0"
glob "^7.1.2"
injection-js "^2.2.1"
less "^3.8.0"
less-plugin-npm-import "^2.1.0"
node-sass-tilde-importer "^1.0.0"
- opencollective-postinstall "^2.0.1"
postcss "^7.0.0"
postcss-url "^8.0.0"
read-pkg-up "^5.0.0"
rimraf "^2.6.1"
- rollup "^1.6.0"
- rollup-plugin-commonjs "^9.1.3"
+ rollup "^1.12.1"
+ rollup-plugin-commonjs "^10.0.0"
rollup-plugin-json "^4.0.0"
- rollup-plugin-node-resolve "^4.0.1"
+ rollup-plugin-node-resolve "^5.0.0"
rollup-plugin-sourcemaps "^0.4.2"
rxjs "^6.0.0"
sass "^1.17.3"
stylus "^0.54.5"
- terser "^3.16.1"
- update-notifier "^2.3.0"
+ terser "^4.0.0"
+ update-notifier "^3.0.0"
ngrx-store-freeze@0.2.4:
version "0.2.4"
@@ -9546,12 +9583,7 @@ node-fetch@1.6.3:
encoding "^0.1.11"
is-stream "^1.0.1"
-node-fetch@^2.1.1:
- version "2.5.0"
- resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.5.0.tgz#8028c49fc1191bba56a07adc6e2a954644a48501"
- integrity sha512-YuZKluhWGJwCcUu4RlZstdAxr8bFfOVHakc1mplwHkk8J+tqM1Y5yraYvIUpeX8aY7+crCwiELJq7Vl0o0LWXw==
-
-node-fetch@^2.3.0:
+node-fetch@^2.1.1, node-fetch@^2.3.0:
version "2.6.0"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd"
integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==
@@ -9567,9 +9599,9 @@ node-int64@^0.4.0:
integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=
node-libs-browser@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.0.tgz#c72f60d9d46de08a940dedbb25f3ffa2f9bbaa77"
- integrity sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA==
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425"
+ integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==
dependencies:
assert "^1.1.1"
browserify-zlib "^0.2.0"
@@ -9581,7 +9613,7 @@ node-libs-browser@^2.0.0:
events "^3.0.0"
https-browserify "^1.0.0"
os-browserify "^0.3.0"
- path-browserify "0.0.0"
+ path-browserify "0.0.1"
process "^0.11.10"
punycode "^1.2.4"
querystring-es3 "^0.2.0"
@@ -9593,7 +9625,7 @@ node-libs-browser@^2.0.0:
tty-browserify "0.0.0"
url "^0.11.0"
util "^0.11.0"
- vm-browserify "0.0.4"
+ vm-browserify "^1.0.1"
node-modules-regexp@^1.0.0:
version "1.0.0"
@@ -9627,21 +9659,7 @@ node-pre-gyp@^0.12.0:
semver "^5.3.0"
tar "^4"
-node-releases@^1.1.17:
- version "1.1.18"
- resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.18.tgz#cc98fd75598a324a77188ebddf6650e9cbd8b1d5"
- integrity sha512-/mnVgm6u/8OwlIsoyRXtTI0RfQcxZoAZbdwyXap0EeWwcOpDDymyCHM2/aR9XKmHXrvizHoPAOs0pcbiJ6RUaA==
- dependencies:
- semver "^5.3.0"
-
-node-releases@^1.1.23:
- version "1.1.23"
- resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.23.tgz#de7409f72de044a2fa59c097f436ba89c39997f0"
- integrity sha512-uq1iL79YjfYC0WXoHbC/z28q/9pOl8kSHaXdWmAAc8No+bDwqkZbzIJz55g/MUsPgSGm9LZ7QSUbzTcH5tz47w==
- dependencies:
- semver "^5.3.0"
-
-node-releases@^1.1.25:
+node-releases@^1.1.23, node-releases@^1.1.25:
version "1.1.25"
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.25.tgz#0c2d7dbc7fed30fbe02a9ee3007b8c90bf0133d3"
integrity sha512-fI5BXuk83lKEoZDdH3gRhtsNgh05/wZacuXkgbiYkceE7+QIMXOg98n9ZV7mz27B+kFHnqHcUpscZZlGRSmTpQ==
@@ -9709,6 +9727,11 @@ normalize-url@2.0.1:
query-string "^5.0.1"
sort-keys "^2.0.0"
+normalize-url@^4.1.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.3.0.tgz#9c49e10fc1876aeb76dba88bf1b2b5d9fa57b2ee"
+ integrity sha512-0NLtR71o4k6GLP+mr6Ty34c5GA6CMoEsncKJxvQd8NzPxaHRJNnb5gZE8R1XF4CPIS7QPHLJ74IFszwtNVAHVQ==
+
npm-bundled@^1.0.1:
version "1.0.6"
resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd"
@@ -9725,9 +9748,9 @@ npm-package-arg@6.1.0, npm-package-arg@^6.0.0, npm-package-arg@^6.1.0:
validate-npm-package-name "^3.0.0"
npm-packlist@^1.1.12, npm-packlist@^1.1.6:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.1.tgz#19064cdf988da80ea3cee45533879d90192bbfbc"
- integrity sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.4.tgz#866224233850ac534b63d1a6e76050092b5d2f44"
+ integrity sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw==
dependencies:
ignore-walk "^3.0.1"
npm-bundled "^1.0.1"
@@ -9742,15 +9765,15 @@ npm-pick-manifest@^2.2.3:
semver "^5.4.1"
npm-registry-fetch@^3.8.0:
- version "3.9.0"
- resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-3.9.0.tgz#44d841780e2833f06accb34488f8c7450d1a6856"
- integrity sha512-srwmt8YhNajAoSAaDWndmZgx89lJwIZ1GWxOuckH4Coek4uHv5S+o/l9FLQe/awA+JwTnj4FJHldxhlXdZEBmw==
+ version "3.9.1"
+ resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-3.9.1.tgz#00ff6e4e35d3f75a172b332440b53e93f4cb67de"
+ integrity sha512-VQCEZlydXw4AwLROAXWUR7QDfe2Y8Id/vpAgp6TI1/H78a4SiQ1kQrKZALm5/zxM5n4HIi+aYb+idUAV/RuY0Q==
dependencies:
JSONStream "^1.3.4"
bluebird "^3.5.1"
figgy-pudding "^3.4.1"
- lru-cache "^4.1.3"
- make-fetch-happen "^4.0.1"
+ lru-cache "^5.1.1"
+ make-fetch-happen "^4.0.2"
npm-package-arg "^6.1.0"
npm-run-all@^4.1.5:
@@ -9841,7 +9864,7 @@ object-hash@1.3.1:
resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df"
integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==
-object-keys@^1.0.12:
+object-keys@^1.0.11, object-keys@^1.0.12:
version "1.1.1"
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
@@ -9853,6 +9876,16 @@ object-visit@^1.0.0:
dependencies:
isobject "^3.0.0"
+object.assign@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da"
+ integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==
+ dependencies:
+ define-properties "^1.1.2"
+ function-bind "^1.1.1"
+ has-symbols "^1.0.0"
+ object-keys "^1.0.11"
+
object.getownpropertydescriptors@^2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16"
@@ -9919,7 +9952,7 @@ open@6.4.0:
dependencies:
is-wsl "^1.1.0"
-opencollective-postinstall@^2.0.1, opencollective-postinstall@^2.0.2:
+opencollective-postinstall@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz#5657f1bede69b6e33a45939b061eb53d3c6c3a89"
integrity sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw==
@@ -10082,6 +10115,11 @@ p-cancelable@^0.4.0:
resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.4.1.tgz#35f363d67d52081c8d9585e37bcceb7e0bbcb2a0"
integrity sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==
+p-cancelable@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc"
+ integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==
+
p-defer@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c"
@@ -10193,6 +10231,16 @@ package-json@^4.0.0:
registry-url "^3.0.3"
semver "^5.1.0"
+package-json@^6.3.0:
+ version "6.5.0"
+ resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0"
+ integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==
+ dependencies:
+ got "^9.6.0"
+ registry-auth-token "^4.0.0"
+ registry-url "^5.0.0"
+ semver "^6.2.0"
+
pacote@9.5.1:
version "9.5.1"
resolved "https://registry.yarnpkg.com/pacote/-/pacote-9.5.1.tgz#adb0d23daeef6d0b813ab5891d0c6459ccec998d"
@@ -10296,6 +10344,16 @@ parse-json@^4.0.0:
error-ex "^1.3.1"
json-parse-better-errors "^1.0.1"
+parse-json@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.0.tgz#73e5114c986d143efa3712d4ea24db9a4266f60f"
+ integrity sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ error-ex "^1.3.1"
+ json-parse-better-errors "^1.0.1"
+ lines-and-columns "^1.1.6"
+
parse-passwd@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
@@ -10340,10 +10398,10 @@ pascalcase@^0.1.1:
resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
-path-browserify@0.0.0:
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a"
- integrity sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=
+path-browserify@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a"
+ integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==
path-dirname@^1.0.0:
version "1.0.2"
@@ -10415,6 +10473,11 @@ path-type@^3.0.0:
dependencies:
pify "^3.0.0"
+path-type@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
+ integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+
pbkdf2@^3.0.3:
version "3.0.17"
resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6"
@@ -10436,7 +10499,7 @@ performance-now@^2.1.0:
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
-picomatch@^2.0.4:
+picomatch@^2.0.4, picomatch@^2.0.5:
version "2.0.7"
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.0.7.tgz#514169d8c7cd0bdbeecc8a2609e34a7163de69f6"
integrity sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA==
@@ -10507,9 +10570,9 @@ pn@^1.1.0:
integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==
portfinder@^1.0.20, portfinder@^1.0.9:
- version "1.0.20"
- resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.20.tgz#bea68632e54b2e13ab7b0c4775e9b41bf270e44a"
- integrity sha512-Yxe4mTyDzTd59PZJY4ojZR8F+E5e97iq2ZOHPz3HDgSvYC5siNad2tLooQ5y5QHyQhc3xVqvyk/eNA3wuoa7Sw==
+ version "1.0.21"
+ resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.21.tgz#60e1397b95ac170749db70034ece306b9a27e324"
+ integrity sha512-ESabpDCzmBS3ekHbmpAIiESq3udRsCBGiBZLsC+HgBKv2ezb0R4oG+7RnYEVZ/ZCfhel5Tx3UzdNWA0Lox2QCA==
dependencies:
async "^1.5.2"
debug "^2.2.0"
@@ -10531,11 +10594,11 @@ postcss-import@12.0.1:
resolve "^1.1.7"
postcss-load-config@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.0.0.tgz#f1312ddbf5912cd747177083c5ef7a19d62ee484"
- integrity sha512-V5JBLzw406BB8UIfsAWSK2KSwIJ5yoEIVFb4gVkXci0QdKgA24jLmHZ/ghe/GgX0lJ0/D1uUK1ejhzEY94MChQ==
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.0.tgz#c84d692b7bb7b41ddced94ee62e8ab31b417b003"
+ integrity sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==
dependencies:
- cosmiconfig "^4.0.0"
+ cosmiconfig "^5.0.0"
import-cwd "^2.0.0"
postcss-loader@3.0.0:
@@ -10564,7 +10627,12 @@ postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.1:
resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281"
integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==
-postcss@7.0.17, postcss@^7.0.16:
+postcss-value-parser@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.0.0.tgz#99a983d365f7b2ad8d0f9b8c3094926eab4b936d"
+ integrity sha512-ESPktioptiSUchCKgggAkzdmkgzKfmp0EU8jXH+5kbIUB+unr0Y4CY9SRMvibuvYUBjNh1ACLbxqYNpdTQOteQ==
+
+postcss@7.0.17, postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.16, postcss@^7.0.17, postcss@^7.0.2:
version "7.0.17"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.17.tgz#4da1bdff5322d4a0acaab4d87f3e782436bad31f"
integrity sha512-546ZowA+KZ3OasvQZHsbuEpysvwTZNGJv9EfyCQdsIDltPSWHAeTQ5fQy/Npi2ZDtLI3zs7Ps/p6wThErhm9fQ==
@@ -10573,15 +10641,6 @@ postcss@7.0.17, postcss@^7.0.16:
source-map "^0.6.1"
supports-color "^6.1.0"
-postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.2:
- version "7.0.16"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.16.tgz#48f64f1b4b558cb8b52c88987724359acb010da2"
- integrity sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==
- dependencies:
- chalk "^2.4.2"
- source-map "^0.6.1"
- supports-color "^6.1.0"
-
precise-commits@1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/precise-commits/-/precise-commits-1.0.2.tgz#4659be01a9c3310f50ce51ddf913fead1d7cc940"
@@ -10644,9 +10703,9 @@ private@^0.1.6, private@^0.1.8:
integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==
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"
- integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+ integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
process@^0.11.10:
version "0.11.10"
@@ -10681,9 +10740,9 @@ promise@~7.0.1:
asap "~2.0.3"
prompts@^2.0.1:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.0.4.tgz#179f9d4db3128b9933aa35f93a800d8fce76a682"
- integrity sha512-HTzM3UWp/99A0gk51gAegwo1QRYA7xjcZufMNe33rCclFszUYAuHe1fIN/3ZmiHeGPkUsNaRyQm1hHOfM0PKxA==
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.1.0.tgz#bf90bc71f6065d255ea2bdc0fe6520485c1b45db"
+ integrity sha512-+x5TozgqYdOwWsQFZizE/Tra3fKvAoy037kOyU6cgz84n8f6zxngLOV4O32kTwt9FcLCxAqw0P/c8rOr9y+Gfg==
dependencies:
kleur "^3.0.2"
sisteransi "^1.0.0"
@@ -10704,7 +10763,7 @@ protoduck@^5.0.1:
dependencies:
genfun "^5.0.0"
-proxy-addr@~2.0.3, proxy-addr@~2.0.4, proxy-addr@~2.0.5:
+proxy-addr@~2.0.3, proxy-addr@~2.0.5:
version "2.0.5"
resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34"
integrity sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==
@@ -10723,9 +10782,9 @@ pseudomap@^1.0.2:
integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
psl@^1.1.24, psl@^1.1.28:
- version "1.1.31"
- resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184"
- integrity sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/psl/-/psl-1.2.0.tgz#df12b5b1b3a30f51c329eacbdef98f3a6e136dc6"
+ integrity sha512-GEn74ZffufCmkDDLNcl3uuyF/aSD6exEyh1v/ZSdAomB82t6G9hzJVRx0jBmLDW+VfZqks3aScmMw9DszwUalA==
public-encrypt@^4.0.0:
version "4.0.3"
@@ -10794,16 +10853,16 @@ qs@6.5.1:
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8"
integrity sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==
-qs@6.5.2, qs@~6.5.2:
- version "6.5.2"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
- integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
-
qs@6.7.0:
version "6.7.0"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc"
integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==
+qs@~6.5.2:
+ version "6.5.2"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
+ integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
+
query-string@^4.1.0:
version "4.3.4"
resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb"
@@ -10885,16 +10944,6 @@ raw-body@2.3.2:
iconv-lite "0.4.19"
unpipe "1.0.0"
-raw-body@2.3.3:
- version "2.3.3"
- resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3"
- integrity sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==
- dependencies:
- bytes "3.0.0"
- http-errors "1.6.3"
- iconv-lite "0.4.23"
- unpipe "1.0.0"
-
raw-body@2.4.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332"
@@ -10913,7 +10962,7 @@ raw-loader@1.0.0:
loader-utils "^1.1.0"
schema-utils "^1.0.0"
-rc@^1.0.1, rc@^1.1.6, rc@^1.2.7:
+rc@^1.0.1, rc@^1.1.6, rc@^1.2.7, rc@^1.2.8:
version "1.2.8"
resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
@@ -11056,14 +11105,14 @@ read-pkg@^3.0.0:
path-type "^3.0.0"
read-pkg@^5.0.0, read-pkg@^5.1.1:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.1.1.tgz#5cf234dde7a405c90c88a519ab73c467e9cb83f5"
- integrity sha512-dFcTLQi6BZ+aFUaICg7er+/usEoqFdQxiEBsEMNGoipenihtxxtdrQuBXvyANCEI8VuUIVYFgeHGx9sLLvim4w==
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc"
+ integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==
dependencies:
"@types/normalize-package-data" "^2.4.0"
normalize-package-data "^2.5.0"
- parse-json "^4.0.0"
- type-fest "^0.4.1"
+ parse-json "^5.0.0"
+ type-fest "^0.6.0"
"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6:
version "2.3.6"
@@ -11089,25 +11138,25 @@ readable-stream@1.1.x:
string_decoder "~0.10.x"
"readable-stream@2 || 3", readable-stream@^3.0.6, readable-stream@^3.1.1:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.3.0.tgz#cb8011aad002eb717bf040291feba8569c986fb9"
- integrity sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc"
+ integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==
dependencies:
inherits "^2.0.3"
string_decoder "^1.1.1"
util-deprecate "^1.0.1"
readdir-scoped-modules@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz#9fafa37d286be5d92cbaebdee030dc9b5f406747"
- integrity sha1-n6+jfShr5dksuuve4DDcm19AZ0c=
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309"
+ integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==
dependencies:
debuglog "^1.0.1"
dezalgo "^1.0.0"
graceful-fs "^4.1.2"
once "^1.3.0"
-readdirp@^2.0.0, readdirp@^2.2.1:
+readdirp@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==
@@ -11181,9 +11230,9 @@ regenerator-runtime@^0.11.0:
integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
regenerator-runtime@^0.13.2:
- version "0.13.2"
- resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz#32e59c9a6fb9b1a4aff09b4930ca2d4477343447"
- integrity sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==
+ version "0.13.3"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5"
+ integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==
regenerator-transform@^0.10.0:
version "0.10.1"
@@ -11195,9 +11244,9 @@ regenerator-transform@^0.10.0:
private "^0.1.6"
regenerator-transform@^0.14.0:
- version "0.14.0"
- resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.0.tgz#2ca9aaf7a2c239dd32e4761218425b8c7a86ecaf"
- integrity sha512-rtOelq4Cawlbmq9xuMR5gdFmv7ku/sFoB7sRiywx7aq53bc52b4j6zvH7Te1Vt/X2YveDKnCGUbioieU7FEL3w==
+ version "0.14.1"
+ resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.1.tgz#3b2fce4e1ab7732c08f665dfdb314749c7ddd2fb"
+ integrity sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==
dependencies:
private "^0.1.6"
@@ -11217,9 +11266,9 @@ regex-not@^1.0.0, regex-not@^1.0.2:
safe-regex "^1.1.0"
regexp-tree@^0.1.6:
- version "0.1.10"
- resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.10.tgz#d837816a039c7af8a8d64d7a7c3cf6a1d93450bc"
- integrity sha512-K1qVSbcedffwuIslMwpe6vGlj+ZXRnGkvjAtFHfDZZZuEdA/h0dxljAPu9vhUo6Rrx2U2AwJ+nSQ6hK+lrP5MQ==
+ version "0.1.11"
+ resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.11.tgz#c9c7f00fcf722e0a56c7390983a7a63dd6c272f3"
+ integrity sha512-7/l/DgapVVDzZobwMCCgMlqiqyLFJ0cduo/j+3BcDJIB+yJdsYCfKuI3l/04NV+H/rfNRdPIDbXNZHM9XvQatg==
regexpu-core@^1.0.0:
version "1.0.0"
@@ -11259,6 +11308,14 @@ registry-auth-token@^3.0.1:
rc "^1.1.6"
safe-buffer "^5.0.1"
+registry-auth-token@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.0.0.tgz#30e55961eec77379da551ea5c4cf43cbf03522be"
+ integrity sha512-lpQkHxd9UL6tb3k/aHAVfnVtn+Bcs9ob5InuFLLEDqSqeq+AljB8GZW9xY0x7F+xYwEcjKe07nyoxzEYz6yvkw==
+ dependencies:
+ rc "^1.2.8"
+ safe-buffer "^5.0.1"
+
registry-url@^3.0.3:
version "3.1.0"
resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942"
@@ -11266,6 +11323,13 @@ registry-url@^3.0.3:
dependencies:
rc "^1.0.1"
+registry-url@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009"
+ integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==
+ dependencies:
+ rc "^1.2.8"
+
regjsgen@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7"
@@ -11470,14 +11534,14 @@ resolve@1.1.7, resolve@~1.1.6:
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=
-resolve@1.x, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.5.0:
- version "1.10.1"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.1.tgz#664842ac960795bbe758221cdccda61fb64b5f18"
- integrity sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA==
+resolve@1.x, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.11.1, resolve@^1.3.2, resolve@^1.5.0:
+ version "1.11.1"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.1.tgz#ea10d8110376982fef578df8fc30b9ac30a07a3e"
+ integrity sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==
dependencies:
path-parse "^1.0.6"
-responselike@1.0.2:
+responselike@1.0.2, responselike@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7"
integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=
@@ -11515,7 +11579,12 @@ retry@^0.10.0:
resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4"
integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=
-rfdc@^1.1.2:
+reusify@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
+ integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
+
+rfdc@^1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.1.4.tgz#ba72cc1367a0ccd9cf81a870b3b58bd3ad07f8c2"
integrity sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug==
@@ -11540,15 +11609,16 @@ ripemd160@^2.0.0, ripemd160@^2.0.1:
hash-base "^3.0.0"
inherits "^2.0.1"
-rollup-plugin-commonjs@^9.1.3:
- version "9.3.4"
- resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.3.4.tgz#2b3dddbbbded83d45c36ff101cdd29e924fd23bc"
- integrity sha512-DTZOvRoiVIHHLFBCL4pFxOaJt8pagxsVldEXBOn6wl3/V21wVaj17HFfyzTsQUuou3sZL3lEJZVWKPFblJfI6w==
+rollup-plugin-commonjs@^10.0.0:
+ version "10.0.1"
+ resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-10.0.1.tgz#fbfcadf4ce2e826068e056a9f5c19287d9744ddf"
+ integrity sha512-x0PcCVdEc4J8igv1qe2vttz8JKAKcTs3wfIA3L8xEty3VzxgORLrzZrNWaVMc+pBC4U3aDOb9BnWLAQ8J11vkA==
dependencies:
- estree-walker "^0.6.0"
+ estree-walker "^0.6.1"
+ is-reference "^1.1.2"
magic-string "^0.25.2"
- resolve "^1.10.0"
- rollup-pluginutils "^2.6.0"
+ resolve "^1.11.0"
+ rollup-pluginutils "^2.8.1"
rollup-plugin-json@^4.0.0:
version "4.0.0"
@@ -11557,15 +11627,16 @@ rollup-plugin-json@^4.0.0:
dependencies:
rollup-pluginutils "^2.5.0"
-rollup-plugin-node-resolve@^4.0.1:
- version "4.2.4"
- resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-4.2.4.tgz#7d370f8d6fd3031006a0032c38262dd9be3c6250"
- integrity sha512-t/64I6l7fZ9BxqD3XlX4ZeO6+5RLKyfpwE2CiPNUKa+GocPlQhf/C208ou8y3AwtNsc6bjSk/8/6y/YAyxCIvw==
+rollup-plugin-node-resolve@^5.0.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.2.0.tgz#730f93d10ed202473b1fb54a5997a7db8c6d8523"
+ integrity sha512-jUlyaDXts7TW2CqQ4GaO5VJ4PwwaV8VUGA7+km3n6k6xtOEacf61u0VXwN80phY/evMcaS+9eIeJ9MOyDxt5Zw==
dependencies:
"@types/resolve" "0.0.8"
builtin-modules "^3.1.0"
is-module "^1.0.0"
- resolve "^1.10.0"
+ resolve "^1.11.1"
+ rollup-pluginutils "^2.8.1"
rollup-plugin-sourcemaps@^0.4.2:
version "0.4.2"
@@ -11575,27 +11646,26 @@ rollup-plugin-sourcemaps@^0.4.2:
rollup-pluginutils "^2.0.1"
source-map-resolve "^0.5.0"
-rollup-pluginutils@^2.0.1, rollup-pluginutils@^2.5.0, rollup-pluginutils@^2.6.0:
- version "2.6.0"
- resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.6.0.tgz#203706edd43dfafeaebc355d7351119402fc83ad"
- integrity sha512-aGQwspEF8oPKvg37u3p7h0cYNwmJR1sCBMZGZ5b9qy8HGtETknqjzcxrDRrcAnJNXN18lBH4Q9vZYth/p4n8jQ==
+rollup-pluginutils@^2.0.1, rollup-pluginutils@^2.5.0, rollup-pluginutils@^2.8.1:
+ version "2.8.1"
+ resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.1.tgz#8fa6dd0697344938ef26c2c09d2488ce9e33ce97"
+ integrity sha512-J5oAoysWar6GuZo0s+3bZ6sVZAC0pfqKz68De7ZgDi5z63jOVZn1uJL/+z1jeKHNbGII8kAyHF5q8LnxSX5lQg==
dependencies:
- estree-walker "^0.6.0"
- micromatch "^3.1.10"
+ estree-walker "^0.6.1"
-rollup@^1.6.0:
- version "1.11.3"
- resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.11.3.tgz#6f436db2a2d6b63f808bf60ad01a177643dedb81"
- integrity sha512-81MR7alHcFKxgWzGfG7jSdv+JQxSOIOD/Fa3iNUmpzbd7p+V19e1l9uffqT8/7YAHgGOzmoPGN3Fx3L2ptOf5g==
+rollup@^1.12.1:
+ version "1.17.0"
+ resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.17.0.tgz#47ee8b04514544fc93b39bae06271244c8db7dfa"
+ integrity sha512-k/j1m0NIsI4SYgCJR4MWPstGJOWfJyd6gycKoMhyoKPVXxm+L49XtbUwZyFsrSU2YXsOkM4u1ll9CS/ZgJBUpw==
dependencies:
"@types/estree" "0.0.39"
- "@types/node" "^11.13.9"
- acorn "^6.1.1"
+ "@types/node" "^12.6.2"
+ acorn "^6.2.0"
rsvp@^4.8.4:
- version "4.8.4"
- resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.4.tgz#b50e6b34583f3dd89329a2f23a8a2be072845911"
- integrity sha512-6FomvYPfs+Jy9TfXmBpBuMWNH94SgCsZmJKcanySzgNNP6LjWxBvyLTa9KaMfDDM5oxRfrKDB0r/qeRsLwnBfA==
+ version "4.8.5"
+ resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734"
+ integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==
run-async@^2.2.0:
version "2.3.0"
@@ -11609,6 +11679,11 @@ run-node@^1.0.0:
resolved "https://registry.yarnpkg.com/run-node/-/run-node-1.0.0.tgz#46b50b946a2aa2d4947ae1d886e9856fd9cabe5e"
integrity sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==
+run-parallel@^1.1.9:
+ version "1.1.9"
+ resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679"
+ integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==
+
run-queue@^1.0.0, run-queue@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47"
@@ -11621,13 +11696,6 @@ rx@^4.1.0:
resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782"
integrity sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=
-rxjs@6.3.3:
- version "6.3.3"
- resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.3.3.tgz#3c6a7fa420e844a81390fb1158a9ec614f4bad55"
- integrity sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==
- dependencies:
- tslib "^1.9.0"
-
rxjs@6.4.0, rxjs@~6.4.0:
version "6.4.0"
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.4.0.tgz#f3bb0fe7bda7fb69deac0c16f17b50b0b8790504"
@@ -11654,11 +11722,16 @@ safe-buffer@5.1.1:
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
integrity sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==
-safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
version "5.1.2"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519"
+ integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==
+
safe-regex@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
@@ -11706,11 +11779,11 @@ sass@1.22.2:
chokidar ">=2.0.0 <4.0.0"
sass@^1.17.3:
- version "1.20.1"
- resolved "https://registry.yarnpkg.com/sass/-/sass-1.20.1.tgz#737b901fe072336da540b6d00ec155e2267420da"
- integrity sha512-BnCawee/L5kVG3B/5Jg6BFwASqUwFVE6fj2lnkVuSXDgQ7gMAhY9a2yPeqsKhJMCN+Wgx0r2mAW7XF/aTF5qtA==
+ version "1.22.7"
+ resolved "https://registry.yarnpkg.com/sass/-/sass-1.22.7.tgz#5a1a77dc11aa659db4e782d238bf9f3d44a60546"
+ integrity sha512-ahREi0AdG7RTovSv14+yd1prQSfIvFcrDpOsth5EQf1+RM7SvOxsSttzNQaFmK1aa/k/3vyYwlYF5l0Xl+6c+g==
dependencies:
- chokidar "^2.0.0"
+ chokidar ">=2.0.0 <4.0.0"
sax@0.5.x:
version "0.5.8"
@@ -11723,11 +11796,11 @@ sax@^1.2.4:
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
saxes@^3.1.5:
- version "3.1.9"
- resolved "https://registry.yarnpkg.com/saxes/-/saxes-3.1.9.tgz#c1c197cd54956d88c09f960254b999e192d7058b"
- integrity sha512-FZeKhJglhJHk7eWG5YM0z46VHmI3KJpMBAQm3xa9meDvd+wevB5GuBB0wc0exPInZiBBHqi00DbS8AcvCGCFMw==
+ version "3.1.11"
+ resolved "https://registry.yarnpkg.com/saxes/-/saxes-3.1.11.tgz#d59d1fd332ec92ad98a2e0b2ee644702384b1c5b"
+ integrity sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==
dependencies:
- xmlchars "^1.3.1"
+ xmlchars "^2.1.1"
scheduler@^0.13.6:
version "0.13.6"
@@ -11806,20 +11879,15 @@ semver@5.6.0:
resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==
-semver@6.2.0, semver@^6.1.1:
+semver@6.2.0, semver@^6.0.0, semver@^6.1.1:
version "6.2.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-6.2.0.tgz#4d813d9590aaf8a9192693d6c85b9344de5901db"
integrity sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A==
-semver@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/semver/-/semver-6.0.0.tgz#05e359ee571e5ad7ed641a6eec1e547ba52dea65"
- integrity sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==
-
-semver@^6.1.0:
- version "6.1.1"
- resolved "https://registry.yarnpkg.com/semver/-/semver-6.1.1.tgz#53f53da9b30b2103cd4f15eab3a18ecbcb210c9b"
- integrity sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ==
+semver@^6.2.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
+ integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
send@0.16.2:
version "0.16.2"
@@ -11859,7 +11927,7 @@ send@0.17.1:
range-parser "~1.2.1"
statuses "~1.5.0"
-serialize-javascript@^1.4.0, serialize-javascript@^1.7.0:
+serialize-javascript@^1.7.0:
version "1.7.0"
resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.7.0.tgz#d6e0dfb2a3832a8c94468e6eb1db97e55a192a65"
integrity sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA==
@@ -11902,20 +11970,10 @@ set-blocking@^2.0.0, set-blocking@~2.0.0:
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
-set-value@^0.4.3:
- version "0.4.3"
- resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1"
- integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE=
- dependencies:
- extend-shallow "^2.0.1"
- is-extendable "^0.1.1"
- is-plain-object "^2.0.1"
- to-object-path "^0.3.0"
-
-set-value@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274"
- integrity sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==
+set-value@^2.0.0, set-value@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
+ integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==
dependencies:
extend-shallow "^2.0.1"
is-extendable "^0.1.1"
@@ -11999,7 +12057,7 @@ shelljs@0.8.2:
interpret "^1.0.0"
rechoir "^0.6.2"
-shelljs@^0.8.1, shelljs@^0.8.3:
+shelljs@^0.8.3:
version "0.8.3"
resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.3.tgz#a7f3319520ebf09ee81275b2368adb286659b097"
integrity sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==
@@ -12019,9 +12077,9 @@ signal-exit@^3.0.0, signal-exit@^3.0.2:
integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
sisteransi@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.0.tgz#77d9622ff909080f1c19e5f4a1df0c1b0a27b88c"
- integrity sha512-N+z4pHB4AmUv0SjveWRd6q1Nj5w62m5jodv+GD8lvmbY/83T/rpbJGZOnK5T149OldDj4Db07BSv9xY4K6NTPQ==
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.2.tgz#ec57d64b6f25c4f26c0e2c7dd23f2d7f12f7e418"
+ integrity sha512-ZcYcZcT69nSLAR2oLN2JwNmLkJEKGooFMCdvOkFrToUt/WfcRWqhIg4P4KwY4dmLbuyXIx4o4YmPsvMRJYJd/w==
slash@^1.0.0:
version "1.0.0"
@@ -12203,7 +12261,7 @@ source-map-resolve@^0.5.0:
source-map-url "^0.4.0"
urix "^0.1.0"
-source-map-support@0.5.12, source-map-support@^0.5.12, source-map-support@^0.5.5, source-map-support@^0.5.6, source-map-support@~0.5.10, source-map-support@~0.5.12:
+source-map-support@0.5.12, source-map-support@^0.5.12, source-map-support@^0.5.5, source-map-support@^0.5.6, source-map-support@~0.5.12:
version "0.5.12"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599"
integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==
@@ -12258,9 +12316,9 @@ source-map@~0.4.1:
amdefine ">=0.0.4"
sourcemap-codec@^1.4.4:
- version "1.4.4"
- resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.4.tgz#c63ea927c029dd6bd9a2b7fa03b3fec02ad56e9f"
- integrity sha512-CYAPYdBu34781kLHkaW3m6b/uUSyMOC2R61gcYMWooeuaGtjof86ZA/8T+qVPPt7np1085CR9hmMGrySwEc8Xg==
+ version "1.4.6"
+ resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.6.tgz#e30a74f0402bad09807640d39e971090a08ce1e9"
+ integrity sha512-1ZooVLYFxC448piVLBbtOxFcXwnymH9oUF8nRd3CuYDVvkRBxRl6pB4Mtas5a4drtL+E8LDgFkQNcgIw6tc8Hg==
spawn-sync@^1.0.15:
version "1.0.15"
@@ -12292,9 +12350,9 @@ spdx-expression-parse@^3.0.0:
spdx-license-ids "^3.0.0"
spdx-license-ids@^3.0.0:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz#75ecd1a88de8c184ef015eafb51b5b48bfd11bb1"
- integrity sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==
+ version "3.0.5"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654"
+ integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==
spdy-transport@^3.0.0:
version "3.0.0"
@@ -12397,11 +12455,6 @@ static-extend@^0.1.1:
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
-statuses@~1.3.1:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e"
- integrity sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=
-
statuses@~1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087"
@@ -12449,16 +12502,16 @@ stream-to-observable@^0.1.0:
resolved "https://registry.yarnpkg.com/stream-to-observable/-/stream-to-observable-0.1.0.tgz#45bf1d9f2d7dc09bed81f1c307c430e68b84cffe"
integrity sha1-Rb8dny19wJvtgfHDB8Qw5ouEz/4=
-streamroller@^1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-1.0.4.tgz#d485c7624796d5e2eb34190c79afcbf006afb5e6"
- integrity sha512-Wc2Gm5ygjSX8ZpW9J7Y9FwiSzTlKSvcl0FTTMd3rn7RoxDXpBW+xD9TY5sWL2n0UR61COB0LG1BQvN6nTUQbLQ==
+streamroller@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-1.0.6.tgz#8167d8496ed9f19f05ee4b158d9611321b8cacd9"
+ integrity sha512-3QC47Mhv3/aZNFpDDVO44qQb9gwB9QggMEE0sQmkTAwBVYdBRWISdsywlkfm5II1Q5y/pmrHflti/IgmIzdDBg==
dependencies:
- async "^2.6.1"
+ async "^2.6.2"
date-format "^2.0.0"
- debug "^3.1.0"
- fs-extra "^7.0.0"
- lodash "^4.17.10"
+ debug "^3.2.6"
+ fs-extra "^7.0.1"
+ lodash "^4.17.14"
streamsearch@0.1.2:
version "0.1.2"
@@ -12646,9 +12699,9 @@ symbol-observable@1.2.0:
integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==
symbol-tree@^3.2.2:
- version "3.2.2"
- resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6"
- integrity sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=
+ version "3.2.4"
+ resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
+ integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
tapable@^1.0.0, tapable@^1.1.0:
version "1.1.3"
@@ -12656,17 +12709,17 @@ tapable@^1.0.0, tapable@^1.1.0:
integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==
tar@^4, tar@^4.4.8:
- version "4.4.8"
- resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d"
- integrity sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==
+ version "4.4.10"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.10.tgz#946b2810b9a5e0b26140cf78bea6b0b0d689eba1"
+ integrity sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA==
dependencies:
chownr "^1.1.1"
fs-minipass "^1.2.5"
- minipass "^2.3.4"
- minizlib "^1.1.1"
+ minipass "^2.3.5"
+ minizlib "^1.2.1"
mkdirp "^0.5.0"
safe-buffer "^5.1.2"
- yallist "^3.0.2"
+ yallist "^3.0.3"
temp@~0.4.0:
version "0.4.0"
@@ -12688,7 +12741,7 @@ term-size@^1.2.0:
dependencies:
execa "^0.7.0"
-terser-webpack-plugin@1.3.0:
+terser-webpack-plugin@1.3.0, terser-webpack-plugin@^1.1.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.3.0.tgz#69aa22426299f4b5b3775cbed8cb2c5d419aa1d4"
integrity sha512-W2YWmxPjjkUcOWa4pBEv4OP4er1aeQJlSo2UhtCFQCuRXEHjOFscO8VyWHj9JLlA0RzQb8Y2/Ta78XZvT54uGg==
@@ -12704,29 +12757,6 @@ terser-webpack-plugin@1.3.0:
webpack-sources "^1.3.0"
worker-farm "^1.7.0"
-terser-webpack-plugin@^1.1.0:
- version "1.2.3"
- resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.2.3.tgz#3f98bc902fac3e5d0de730869f50668561262ec8"
- integrity sha512-GOK7q85oAb/5kE12fMuLdn2btOS9OBZn4VsecpHDywoUC/jLhSAKOiYo0ezx7ss2EXPMzyEWFoE0s1WLE+4+oA==
- dependencies:
- cacache "^11.0.2"
- find-cache-dir "^2.0.0"
- schema-utils "^1.0.0"
- serialize-javascript "^1.4.0"
- source-map "^0.6.1"
- terser "^3.16.1"
- webpack-sources "^1.1.0"
- worker-farm "^1.5.2"
-
-terser@^3.16.1:
- version "3.17.0"
- resolved "https://registry.yarnpkg.com/terser/-/terser-3.17.0.tgz#f88ffbeda0deb5637f9d24b0da66f4e15ab10cb2"
- integrity sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==
- dependencies:
- commander "^2.19.0"
- source-map "~0.6.1"
- source-map-support "~0.5.10"
-
terser@^4.0.0:
version "4.1.2"
resolved "https://registry.yarnpkg.com/terser/-/terser-4.1.2.tgz#b2656c8a506f7ce805a3f300a2ff48db022fa391"
@@ -12751,6 +12781,11 @@ text-extensions@^1.0.0:
resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26"
integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==
+text-extensions@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-2.0.0.tgz#43eabd1b495482fae4a2bf65e5f56c29f69220f6"
+ integrity sha512-F91ZqLgvi1E0PdvmxMgp+gcf6q8fMH7mhdwWfzXnl1k+GbpQDmi8l7DzLC5JTASKbwpY3TfxajAUzAXcv2NmsQ==
+
throat@^4.0.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a"
@@ -12882,6 +12917,11 @@ to-object-path@^0.3.0:
dependencies:
kind-of "^3.0.2"
+to-readable-stream@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771"
+ integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==
+
to-regex-range@^2.1.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
@@ -12991,28 +13031,27 @@ ts-loader@^5.3.1:
micromatch "^3.1.4"
semver "^5.0.1"
-ts-morph@^1.3.1:
- version "1.3.3"
- resolved "https://registry.yarnpkg.com/ts-morph/-/ts-morph-1.3.3.tgz#ce4026699691db9bd297c039189f0fe4cc0fac4b"
- integrity sha512-TO4xmC4yKSoOSjuIGBlYOkPSQhY4dC6/8ksEH+1jlt7XUk6fmLshn97wwchMQxz1ejSd2DSxEk+pC5cqDYlUzg==
+ts-morph@^3.0.0:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/ts-morph/-/ts-morph-3.1.3.tgz#bbfa1d14481ee23bdd1c030340ccf4a243cfc844"
+ integrity sha512-CwjgyJTtd3f8vBi7Vr0IOgdOY6Wi/Tq0MhieXOE2B5ns5WWRD7BwMNHtv+ZufKI/S2U/lMrh+Q3bOauE4tsv2g==
dependencies:
"@dsherret/to-absolute-glob" "^2.0.2"
- code-block-writer "7.2.2"
- fs-extra "^7.0.0"
- glob-parent "^3.1.0"
- globby "^8.0.1"
+ code-block-writer "9.4.1"
+ fs-extra "^8.1.0"
+ glob-parent "^5.0.0"
+ globby "^10.0.1"
is-negated-glob "^1.0.0"
- multimatch "^2.1.0"
- tslib "^1.9.0"
- typescript ">=3.0.1 <3.5.0"
+ multimatch "^4.0.0"
+ typescript "^3.0.1"
ts-node@^8.0.2:
- version "8.1.0"
- resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.1.0.tgz#8c4b37036abd448577db22a061fd7a67d47e658e"
- integrity sha512-34jpuOrxDuf+O6iW1JpgTRDFynUZ1iEqtYruBqh35gICNjN8x+LpVcPAcwzLPi9VU6mdA3ym+x233nZmZp445A==
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.3.0.tgz#e4059618411371924a1fb5f3b125915f324efb57"
+ integrity sha512-dyNS/RqyVTDcmNM4NIBAeDMpsAdaQ+ojdf0GOLqE6nwJOgzEkdRNzJywhDfwnuvB10oa6NLVG1rUJQCpRN7qoQ==
dependencies:
arg "^4.1.0"
- diff "^3.1.0"
+ diff "^4.0.1"
make-error "^1.1.1"
source-map-support "^0.5.6"
yn "^3.0.0"
@@ -13047,9 +13086,9 @@ tsickle@^0.33.0:
source-map "^0.7.3"
tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3:
- version "1.9.3"
- resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"
- integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a"
+ integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==
tslint@5.11.0:
version "5.11.0"
@@ -13100,10 +13139,15 @@ type-check@~0.3.2:
dependencies:
prelude-ls "~1.1.2"
-type-fest@^0.4.1:
- version "0.4.1"
- resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.4.1.tgz#8bdf77743385d8a4f13ba95f610f5ccd68c728f8"
- integrity sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==
+type-fest@^0.3.0:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1"
+ integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==
+
+type-fest@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"
+ integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==
type-is@^1.6.4, type-is@~1.6.15, type-is@~1.6.16, type-is@~1.6.17, type-is@~1.6.18:
version "1.6.18"
@@ -13113,16 +13157,26 @@ type-is@^1.6.4, type-is@~1.6.15, type-is@~1.6.16, type-is@~1.6.17, type-is@~1.6.
media-typer "0.3.0"
mime-types "~2.1.24"
+type@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/type/-/type-1.0.1.tgz#084c9a17fcc9151a2cdb1459905c2e45e4bb7d61"
+ integrity sha512-MAM5dBMJCJNKs9E7JXo4CXRAansRfG0nlJxW7Wf6GZzSOvH31zClSaHdIMWLehe/EGMBkqeC55rrkaOr5Oo7Nw==
+
typedarray@^0.0.6:
version "0.0.6"
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
-typescript@3.4.5, "typescript@>=3.0.1 <3.5.0", typescript@^3.2.2, typescript@~3.4.5:
+typescript@3.4.5, typescript@~3.4.5:
version "3.4.5"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.4.5.tgz#2d2618d10bb566572b8d7aad5180d84257d70a99"
integrity sha512-YycBxUb49UUhdNMU5aJ7z5Ej2XGmaIBL0x34vZ82fn3hGvD+bgrMrVDpatgz2f7YxUMJxMkbWxJZeAvDxVe7Vw==
+typescript@^3.0.1, typescript@^3.2.2:
+ version "3.5.3"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.3.tgz#c830f657f93f1ea846819e929092f5fe5983e977"
+ integrity sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g==
+
uglify-js@3.4.x:
version "3.4.10"
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.10.tgz#9ad9563d8eb3acdfb8d38597d2af1d815f6a755f"
@@ -13132,9 +13186,9 @@ uglify-js@3.4.x:
source-map "~0.6.1"
uglify-js@^3.1.4:
- version "3.5.12"
- resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.5.12.tgz#6b759cabc08c3e91fe82323d6387019f0c5864cd"
- integrity sha512-KeQesOpPiZNgVwJj8Ge3P4JYbQHUdZzpx6Fahy6eKAYRSV4zhVmLXoC+JtOeYxcHCHTve8RG1ZGdTvpeOUM26Q==
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.0.tgz#704681345c53a8b2079fb6cec294b05ead242ff5"
+ integrity sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==
dependencies:
commander "~2.20.0"
source-map "~0.6.1"
@@ -13173,14 +13227,14 @@ unicode-property-aliases-ecmascript@^1.0.4:
integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==
union-value@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4"
- integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
+ integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==
dependencies:
arr-union "^3.1.0"
get-value "^2.0.6"
is-extendable "^0.1.1"
- set-value "^0.4.3"
+ set-value "^2.0.1"
unique-filename@^1.1.1:
version "1.1.1"
@@ -13190,9 +13244,9 @@ unique-filename@^1.1.1:
unique-slug "^2.0.0"
unique-slug@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.1.tgz#5e9edc6d1ce8fb264db18a507ef9bd8544451ca6"
- integrity sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c"
+ integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==
dependencies:
imurmurhash "^0.1.4"
@@ -13242,12 +13296,12 @@ unzip-response@^2.0.1:
resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97"
integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=
-upath@^1.0.5, upath@^1.1.1:
+upath@^1.1.1:
version "1.1.2"
resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068"
integrity sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==
-update-notifier@2.5.0, update-notifier@^2.3.0:
+update-notifier@2.5.0:
version "2.5.0"
resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6"
integrity sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==
@@ -13263,6 +13317,24 @@ update-notifier@2.5.0, update-notifier@^2.3.0:
semver-diff "^2.0.0"
xdg-basedir "^3.0.0"
+update-notifier@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-3.0.1.tgz#78ecb68b915e2fd1be9f767f6e298ce87b736250"
+ integrity sha512-grrmrB6Zb8DUiyDIaeRTBCkgISYUgETNe7NglEbVsrLWXeESnlCSP50WfRSj/GmzMPl6Uchj24S/p80nP/ZQrQ==
+ dependencies:
+ boxen "^3.0.0"
+ chalk "^2.0.1"
+ configstore "^4.0.0"
+ has-yarn "^2.1.0"
+ import-lazy "^2.1.0"
+ is-ci "^2.0.0"
+ is-installed-globally "^0.1.0"
+ is-npm "^3.0.0"
+ is-yarn-global "^0.3.0"
+ latest-version "^5.0.0"
+ semver-diff "^2.0.0"
+ xdg-basedir "^3.0.0"
+
upper-case@^1.1.1:
version "1.1.3"
resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598"
@@ -13426,12 +13498,10 @@ viz.js@^1.8.1:
resolved "https://registry.yarnpkg.com/viz.js/-/viz.js-1.8.2.tgz#d9cc04cd99f98ec986bf9054db76a6cbcdc5d97a"
integrity sha512-W+1+N/hdzLpQZEcvz79n2IgUE9pfx6JLdHh3Kh8RGvLL8P1LdJVQmi2OsDcLdY4QVID4OUy+FPelyerX0nJxIQ==
-vm-browserify@0.0.4:
- version "0.0.4"
- resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73"
- integrity sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=
- dependencies:
- indexof "0.0.1"
+vm-browserify@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019"
+ integrity sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==
void-elements@^2.0.0:
version "2.0.1"
@@ -13702,11 +13772,12 @@ webpack@4.35.2:
webpack-sources "^1.3.0"
websocket-driver@>=0.5.1:
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb"
- integrity sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=
+ version "0.7.3"
+ resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.3.tgz#a2d4e0d4f4f116f1e6297eba58b05d430100e9f9"
+ integrity sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==
dependencies:
- http-parser-js ">=0.4.0"
+ http-parser-js ">=0.4.0 <0.4.11"
+ safe-buffer ">=5.1.0"
websocket-extensions ">=0.1.1"
websocket-extensions@>=0.1.1:
@@ -13812,7 +13883,7 @@ wordwrap@~1.0.0:
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=
-worker-farm@^1.5.2, worker-farm@^1.7.0:
+worker-farm@^1.7.0:
version "1.7.0"
resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8"
integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==
@@ -13849,9 +13920,9 @@ write-file-atomic@2.4.1:
signal-exit "^3.0.2"
write-file-atomic@^2.0.0:
- version "2.4.2"
- resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.2.tgz#a7181706dfba17855d221140a9c06e15fcdd87b9"
- integrity sha512-s0b6vB3xIVRLWywa6X9TOMA7k9zio0TMOsl9ZnDkliA/cfJlpHXAscj0gbHVJiTdIuAYpIyqS5GW91fqm6gG5g==
+ version "2.4.3"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481"
+ integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==
dependencies:
graceful-fs "^4.1.11"
imurmurhash "^0.1.4"
@@ -13890,10 +13961,10 @@ xml-name-validator@^3.0.0:
resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==
-xmlchars@^1.3.1:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-1.3.1.tgz#1dda035f833dbb4f86a0c28eaa6ca769214793cf"
- integrity sha512-tGkGJkN8XqCod7OT+EvGYK5Z4SfDQGD30zAa58OcnAa0RRWgzUEK72tkXhsX1FZd+rgnhRxFtmO+ihkp8LHSkw==
+xmlchars@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.1.1.tgz#ef1a81c05bff629c2280007f12daca21bd6f6c93"
+ integrity sha512-7hew1RPJ1iIuje/Y01bGD/mXokXxegAgVS+e+E0wSi2ILHQkYAH1+JXARwTjZSM4Z4Z+c73aKspEcqj+zPPL/w==
xmlhttprequest-ssl@~1.5.4:
version "1.5.5"
@@ -13906,9 +13977,9 @@ xregexp@4.0.0:
integrity sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==
xtend@^4.0.0, xtend@~4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
- integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68=
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
+ integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
xxhashjs@^0.2.1:
version "0.2.2"
@@ -13932,7 +14003,7 @@ yallist@^2.1.2:
resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
-yallist@^3.0.0, yallist@^3.0.2:
+yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9"
integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==
@@ -13968,9 +14039,9 @@ yargs-parser@^11.1.1:
decamelize "^1.2.0"
yargs-parser@^13.0.0:
- version "13.1.0"
- resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.0.tgz#7016b6dd03e28e1418a510e258be4bff5a31138f"
- integrity sha512-Yq+32PrijHRri0vVKQEm+ys8mbqWjLiwQkMFNXEENutzLPP0bE4Lcd4iA3OQY5HF+GD3xXxf0MEHb8E4/SA3AA==
+ version "13.1.1"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0"
+ integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==
dependencies:
camelcase "^5.0.0"
decamelize "^1.2.0"