feat(nx): set default collection on ngadd
This commit is contained in:
parent
2d4d735d94
commit
a5351c9d36
@ -19,6 +19,14 @@ Type: `string`
|
||||
|
||||
Test runner to use for end to end (e2e) tests
|
||||
|
||||
### skipFormat
|
||||
|
||||
Default: `false`
|
||||
|
||||
Type: `boolean`
|
||||
|
||||
Skip formatting files
|
||||
|
||||
### skipInstall
|
||||
|
||||
Default: `false`
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
# cypress-project
|
||||
# cypress-project [hidden]
|
||||
|
||||
Add a Cypress E2E Project
|
||||
|
||||
|
||||
@ -8,3 +8,13 @@ Add @nrwl/express to a project
|
||||
ng generate ng-add ...
|
||||
|
||||
```
|
||||
|
||||
## Options
|
||||
|
||||
### skipFormat
|
||||
|
||||
Default: `false`
|
||||
|
||||
Type: `boolean`
|
||||
|
||||
Skip formatting files
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
# jest-project
|
||||
# jest-project [hidden]
|
||||
|
||||
Add Jest configuration to a project
|
||||
|
||||
|
||||
@ -8,3 +8,13 @@ Add @nrwl/nest to a project
|
||||
ng generate ng-add ...
|
||||
|
||||
```
|
||||
|
||||
## Options
|
||||
|
||||
### skipFormat
|
||||
|
||||
Default: `false`
|
||||
|
||||
Type: `boolean`
|
||||
|
||||
Skip formatting files
|
||||
|
||||
@ -8,3 +8,13 @@ Add @nrwl/node to a project
|
||||
ng generate ng-add ...
|
||||
|
||||
```
|
||||
|
||||
## Options
|
||||
|
||||
### skipFormat
|
||||
|
||||
Default: `false`
|
||||
|
||||
Type: `boolean`
|
||||
|
||||
Skip formatting files
|
||||
|
||||
@ -8,3 +8,13 @@ Add @nrwl/react to a project
|
||||
ng generate ng-add ...
|
||||
|
||||
```
|
||||
|
||||
## Options
|
||||
|
||||
### skipFormat
|
||||
|
||||
Default: `false`
|
||||
|
||||
Type: `boolean`
|
||||
|
||||
Skip formatting files
|
||||
|
||||
@ -8,3 +8,13 @@ Add @nrwl/web to a project
|
||||
ng generate ng-add ...
|
||||
|
||||
```
|
||||
|
||||
## Options
|
||||
|
||||
### skipFormat
|
||||
|
||||
Default: `false`
|
||||
|
||||
Type: `boolean`
|
||||
|
||||
Skip formatting files
|
||||
|
||||
@ -39,14 +39,6 @@ Type: `boolean`
|
||||
|
||||
Do not update tsconfig.json for development experience.
|
||||
|
||||
### style
|
||||
|
||||
Default: `css`
|
||||
|
||||
Type: `string`
|
||||
|
||||
The file extension to be used for style files.
|
||||
|
||||
### tags
|
||||
|
||||
Type: `string`
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
# ng-new
|
||||
# ng-new [hidden]
|
||||
|
||||
Create a workspace
|
||||
|
||||
|
||||
@ -26,7 +26,7 @@ import {
|
||||
} from '@nrwl/workspace';
|
||||
import { formatFiles } from '@nrwl/workspace';
|
||||
import { join, normalize } from '@angular-devkit/core';
|
||||
import { addE2eTestRunner, addUnitTestRunner } from '../ng-add/ng-add';
|
||||
import ngAdd from '../ng-add/ng-add';
|
||||
import {
|
||||
addImportToModule,
|
||||
addImportToTestBed,
|
||||
@ -317,10 +317,6 @@ function updateE2eProject(options: NormalizedSchema): Rule {
|
||||
};
|
||||
}
|
||||
|
||||
function setupTestRunners(options: NormalizedSchema): Rule {
|
||||
return chain([addUnitTestRunner(options), addE2eTestRunner(options)]);
|
||||
}
|
||||
|
||||
export default function(schema: Schema): Rule {
|
||||
return (host: Tree, context: SchematicContext) => {
|
||||
const options = normalizeOptions(host, schema);
|
||||
@ -337,7 +333,10 @@ export default function(schema: Schema): Rule {
|
||||
: `${options.name}/e2e`;
|
||||
|
||||
return chain([
|
||||
setupTestRunners(options),
|
||||
ngAdd({
|
||||
...options,
|
||||
skipFormat: true
|
||||
}),
|
||||
externalSchematic('@schematics/angular', 'application', {
|
||||
name: options.name,
|
||||
inlineStyle: options.inlineStyle,
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import { Tree } from '@angular-devkit/schematics';
|
||||
import { runSchematic } from '../../utils/testing';
|
||||
import { runSchematic, callRule } from '../../utils/testing';
|
||||
import { createEmptyWorkspace } from '@nrwl/workspace/testing';
|
||||
import { readJsonInTree } from '@nrwl/workspace';
|
||||
import { readJsonInTree, updateJsonInTree } from '@nrwl/workspace';
|
||||
|
||||
describe('ng-add', () => {
|
||||
let appTree: Tree;
|
||||
@ -193,4 +193,44 @@ 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/react');
|
||||
});
|
||||
|
||||
it('should be set if @nrwl/workspace was set before', async () => {
|
||||
appTree = await callRule(
|
||||
updateJsonInTree('angular.json', json => {
|
||||
json.cli = {
|
||||
defaultCollection: '@nrwl/workspace'
|
||||
};
|
||||
|
||||
return json;
|
||||
}),
|
||||
appTree
|
||||
);
|
||||
const result = await runSchematic('ng-add', {}, appTree);
|
||||
const angularJson = readJsonInTree(result, 'angular.json');
|
||||
expect(angularJson.cli.defaultCollection).toEqual('@nrwl/react');
|
||||
});
|
||||
|
||||
it('should not be set if something else was set before', async () => {
|
||||
appTree = await callRule(
|
||||
updateJsonInTree('angular.json', json => {
|
||||
json.cli = {
|
||||
defaultCollection: '@nrwl/angular'
|
||||
};
|
||||
|
||||
return json;
|
||||
}),
|
||||
appTree
|
||||
);
|
||||
const result = await runSchematic('ng-add', {}, appTree);
|
||||
const angularJson = readJsonInTree(result, 'angular.json');
|
||||
expect(angularJson.cli.defaultCollection).toEqual('@nrwl/angular');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@ -9,7 +9,8 @@ import {
|
||||
import {
|
||||
readJsonInTree,
|
||||
addDepsToPackageJson,
|
||||
updateJsonInTree
|
||||
updateWorkspace,
|
||||
formatFiles
|
||||
} from '@nrwl/workspace';
|
||||
import {
|
||||
angularVersion,
|
||||
@ -19,6 +20,7 @@ import {
|
||||
import { Schema } from './schema';
|
||||
import { UnitTestRunner, E2eTestRunner } from '../../utils/test-runners';
|
||||
import { jestPresetAngularVersion } from '../../utils/versions';
|
||||
import { JsonObject } from '@angular-devkit/core';
|
||||
|
||||
function updateDependencies(): Rule {
|
||||
const deps = {
|
||||
@ -117,31 +119,41 @@ export function addE2eTestRunner(options: Pick<Schema, 'e2eTestRunner'>): Rule {
|
||||
}
|
||||
}
|
||||
|
||||
function setDefaults(options: Schema): Rule {
|
||||
return updateJsonInTree('angular.json', json => {
|
||||
json.schematics = json.schematics || {};
|
||||
json.schematics['@nrwl/angular:application'] =
|
||||
json.schematics['@nrwl/angular:application'] || {};
|
||||
json.schematics['@nrwl/angular:application'] = {
|
||||
...json.schematics['@nrwl/angular:application'],
|
||||
export function setDefaults(options: Schema): Rule {
|
||||
return updateWorkspace(workspace => {
|
||||
workspace.extensions.schematics = workspace.extensions.schematics || {};
|
||||
workspace.extensions.schematics['@nrwl/angular:application'] =
|
||||
workspace.extensions.schematics['@nrwl/angular:application'] || {};
|
||||
workspace.extensions.schematics['@nrwl/angular:application'] = {
|
||||
...workspace.extensions.schematics['@nrwl/angular:application'],
|
||||
unitTestRunner: options.unitTestRunner,
|
||||
e2eTestRunner: options.e2eTestRunner
|
||||
};
|
||||
json.schematics['@nrwl/angular:library'] =
|
||||
json.schematics['@nrwl/angular:library'] || {};
|
||||
json.schematics['@nrwl/angular:library'] = {
|
||||
...json.schematics['@nrwl/angular:library'],
|
||||
workspace.extensions.schematics['@nrwl/angular:library'] =
|
||||
workspace.extensions.schematics['@nrwl/angular:library'] || {};
|
||||
workspace.extensions.schematics['@nrwl/angular:library'] = {
|
||||
...workspace.extensions.schematics['@nrwl/angular:library'],
|
||||
unitTestRunner: options.unitTestRunner
|
||||
};
|
||||
return json;
|
||||
|
||||
workspace.extensions.cli = workspace.extensions.cli || {};
|
||||
const defaultCollection: string =
|
||||
workspace.extensions.cli &&
|
||||
((workspace.extensions.cli as JsonObject).defaultCollection as string);
|
||||
|
||||
if (!defaultCollection || defaultCollection === '@nrwl/workspace') {
|
||||
(workspace.extensions.cli as JsonObject).defaultCollection =
|
||||
'@nrwl/react';
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
export default function(options: Schema): Rule {
|
||||
return chain([
|
||||
setDefaults(options),
|
||||
updateDependencies(),
|
||||
addUnitTestRunner(options),
|
||||
addE2eTestRunner(options),
|
||||
setDefaults(options)
|
||||
formatFiles()
|
||||
]);
|
||||
}
|
||||
|
||||
@ -2,5 +2,6 @@ import { UnitTestRunner } from '../../utils/test-runners';
|
||||
export interface Schema {
|
||||
unitTestRunner: UnitTestRunner;
|
||||
e2eTestRunner: E2eTestRunner;
|
||||
skipFormat: boolean;
|
||||
skipInstall?: boolean;
|
||||
}
|
||||
|
||||
@ -49,6 +49,11 @@
|
||||
"type": "boolean",
|
||||
"description": "Skip installing after adding @nrwl/workspace",
|
||||
"default": false
|
||||
},
|
||||
"skipFormat": {
|
||||
"description": "Skip formatting files",
|
||||
"type": "boolean",
|
||||
"default": false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -56,7 +56,7 @@ export default function(schema: Schema): Rule {
|
||||
return (host: Tree, context: SchematicContext) => {
|
||||
const options = normalizeOptions(schema);
|
||||
return chain([
|
||||
ngAdd(),
|
||||
ngAdd({ skipFormat: true }),
|
||||
externalSchematic('@nrwl/node', 'application', schema),
|
||||
addMainFile(options),
|
||||
addTypes(options)
|
||||
|
||||
@ -2,7 +2,8 @@ import { Tree } from '@angular-devkit/schematics';
|
||||
import { createEmptyWorkspace } from '@nrwl/workspace/testing';
|
||||
import { SchematicTestRunner } from '@angular-devkit/schematics/testing';
|
||||
import { join } from 'path';
|
||||
import { readJsonInTree } from '@nrwl/workspace';
|
||||
import { readJsonInTree, updateJsonInTree } from '@nrwl/workspace';
|
||||
import { callRule, runSchematic } from '../../utils/testing';
|
||||
|
||||
describe('ng-add', () => {
|
||||
let tree: Tree;
|
||||
@ -27,4 +28,44 @@ describe('ng-add', () => {
|
||||
expect(packageJson.dependencies['express']).toBeDefined();
|
||||
expect(packageJson.devDependencies['@types/express']).toBeDefined();
|
||||
});
|
||||
|
||||
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');
|
||||
});
|
||||
|
||||
it('should be set if @nrwl/workspace was set before', async () => {
|
||||
tree = await callRule(
|
||||
updateJsonInTree('angular.json', json => {
|
||||
json.cli = {
|
||||
defaultCollection: '@nrwl/workspace'
|
||||
};
|
||||
|
||||
return json;
|
||||
}),
|
||||
tree
|
||||
);
|
||||
const result = await runSchematic('ng-add', {}, tree);
|
||||
const angularJson = readJsonInTree(result, 'angular.json');
|
||||
expect(angularJson.cli.defaultCollection).toEqual('@nrwl/express');
|
||||
});
|
||||
|
||||
it('should not be set if something else was set before', async () => {
|
||||
tree = await callRule(
|
||||
updateJsonInTree('angular.json', json => {
|
||||
json.cli = {
|
||||
defaultCollection: '@nrwl/angular'
|
||||
};
|
||||
|
||||
return json;
|
||||
}),
|
||||
tree
|
||||
);
|
||||
const result = await runSchematic('ng-add', {}, tree);
|
||||
const angularJson = readJsonInTree(result, 'angular.json');
|
||||
expect(angularJson.cli.defaultCollection).toEqual('@nrwl/angular');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@ -1,21 +1,18 @@
|
||||
import {
|
||||
Rule,
|
||||
chain,
|
||||
externalSchematic,
|
||||
Tree,
|
||||
noop
|
||||
} from '@angular-devkit/schematics';
|
||||
import { Rule, chain } from '@angular-devkit/schematics';
|
||||
import {
|
||||
addDepsToPackageJson,
|
||||
updateJsonInTree,
|
||||
readJsonInTree,
|
||||
addPackageWithNgAdd
|
||||
addPackageWithNgAdd,
|
||||
updateWorkspace,
|
||||
formatFiles
|
||||
} from '@nrwl/workspace';
|
||||
import { Schema } from './schema';
|
||||
import {
|
||||
expressTypingsVersion,
|
||||
expressVersion,
|
||||
nxVersion
|
||||
} from '../../utils/versions';
|
||||
import { JsonObject } from '@angular-devkit/core';
|
||||
|
||||
function addDependencies(): Rule {
|
||||
return addDepsToPackageJson(
|
||||
@ -38,11 +35,28 @@ function moveDependency(): Rule {
|
||||
});
|
||||
}
|
||||
|
||||
export default function() {
|
||||
function setDefault(): Rule {
|
||||
return updateWorkspace(workspace => {
|
||||
workspace.extensions.cli = workspace.extensions.cli || {};
|
||||
|
||||
const defaultCollection: string =
|
||||
workspace.extensions.cli &&
|
||||
((workspace.extensions.cli as JsonObject).defaultCollection as string);
|
||||
|
||||
if (!defaultCollection || defaultCollection === '@nrwl/workspace') {
|
||||
(workspace.extensions.cli as JsonObject).defaultCollection =
|
||||
'@nrwl/express';
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
export default function(schema: Schema) {
|
||||
return chain([
|
||||
setDefault(),
|
||||
addPackageWithNgAdd('@nrwl/node'),
|
||||
addPackageWithNgAdd('@nrwl/jest'),
|
||||
addDependencies(),
|
||||
moveDependency()
|
||||
moveDependency(),
|
||||
formatFiles(schema)
|
||||
]);
|
||||
}
|
||||
|
||||
@ -1 +1,3 @@
|
||||
export interface Schema {}
|
||||
export interface Schema {
|
||||
skipFormat: boolean;
|
||||
}
|
||||
|
||||
@ -3,6 +3,12 @@
|
||||
"id": "NxExpressNgAdd",
|
||||
"title": "Add Nx Express Schematics",
|
||||
"type": "object",
|
||||
"properties": {},
|
||||
"properties": {
|
||||
"skipFormat": {
|
||||
"description": "Skip formatting files",
|
||||
"type": "boolean",
|
||||
"default": false
|
||||
}
|
||||
},
|
||||
"required": []
|
||||
}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { join } from 'path';
|
||||
import { SchematicTestRunner } from '@angular-devkit/schematics/testing';
|
||||
import { Tree } from '@angular-devkit/schematics';
|
||||
import { Rule, Tree } from '@angular-devkit/schematics';
|
||||
|
||||
const testRunner = new SchematicTestRunner(
|
||||
'@nrwl/express',
|
||||
@ -10,3 +10,7 @@ const testRunner = new SchematicTestRunner(
|
||||
export function runSchematic(schematicName: string, options: any, tree: Tree) {
|
||||
return testRunner.runSchematicAsync(schematicName, options, tree).toPromise();
|
||||
}
|
||||
|
||||
export function callRule(rule: Rule, tree: Tree) {
|
||||
return testRunner.callRule(rule, tree).toPromise();
|
||||
}
|
||||
|
||||
@ -65,7 +65,9 @@ export default function(schema: Schema): Rule {
|
||||
return (host: Tree, context: SchematicContext) => {
|
||||
const options = normalizeOptions(schema);
|
||||
return chain([
|
||||
ngAdd(),
|
||||
ngAdd({
|
||||
skipFormat: true
|
||||
}),
|
||||
externalSchematic('@nrwl/node', 'application', schema),
|
||||
addMainFile(options),
|
||||
addAppFiles(options)
|
||||
|
||||
@ -1,30 +1,62 @@
|
||||
import { Tree } from '@angular-devkit/schematics';
|
||||
import { createEmptyWorkspace } from '@nrwl/workspace/testing';
|
||||
import { SchematicTestRunner } from '@angular-devkit/schematics/testing';
|
||||
import { join } from 'path';
|
||||
import { readJsonInTree } from '@nrwl/workspace';
|
||||
import { readJsonInTree, updateJsonInTree } from '@nrwl/workspace';
|
||||
import { runSchematic, callRule } from '../../utils/testing';
|
||||
|
||||
describe('ng-add', () => {
|
||||
let tree: Tree;
|
||||
let testRunner: SchematicTestRunner;
|
||||
|
||||
beforeEach(() => {
|
||||
tree = Tree.empty();
|
||||
tree = createEmptyWorkspace(tree);
|
||||
testRunner = new SchematicTestRunner(
|
||||
'@nrwl/nest',
|
||||
join(__dirname, '../../../collection.json')
|
||||
);
|
||||
});
|
||||
|
||||
it('should add dependencies', async () => {
|
||||
const result = await testRunner
|
||||
.runSchematicAsync('ng-add', {}, tree)
|
||||
.toPromise();
|
||||
const result = await runSchematic('ng-add', {}, tree);
|
||||
const packageJson = readJsonInTree(result, 'package.json');
|
||||
|
||||
expect(packageJson.dependencies['@nrwl/nest']).toBeUndefined();
|
||||
expect(packageJson.devDependencies['@nrwl/nest']).toBeDefined();
|
||||
expect(packageJson.dependencies['@nestjs/core']).toBeDefined();
|
||||
});
|
||||
|
||||
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');
|
||||
});
|
||||
|
||||
it('should be set if @nrwl/workspace was set before', async () => {
|
||||
tree = await callRule(
|
||||
updateJsonInTree('angular.json', json => {
|
||||
json.cli = {
|
||||
defaultCollection: '@nrwl/workspace'
|
||||
};
|
||||
|
||||
return json;
|
||||
}),
|
||||
tree
|
||||
);
|
||||
const result = await runSchematic('ng-add', {}, tree);
|
||||
const angularJson = readJsonInTree(result, 'angular.json');
|
||||
expect(angularJson.cli.defaultCollection).toEqual('@nrwl/nest');
|
||||
});
|
||||
|
||||
it('should not be set if something else was set before', async () => {
|
||||
tree = await callRule(
|
||||
updateJsonInTree('angular.json', json => {
|
||||
json.cli = {
|
||||
defaultCollection: '@nrwl/angular'
|
||||
};
|
||||
|
||||
return json;
|
||||
}),
|
||||
tree
|
||||
);
|
||||
const result = await runSchematic('ng-add', {}, tree);
|
||||
const angularJson = readJsonInTree(result, 'angular.json');
|
||||
expect(angularJson.cli.defaultCollection).toEqual('@nrwl/angular');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@ -2,8 +2,11 @@ import { chain, Rule } from '@angular-devkit/schematics';
|
||||
import {
|
||||
addDepsToPackageJson,
|
||||
addPackageWithNgAdd,
|
||||
updateJsonInTree
|
||||
formatFiles,
|
||||
updateJsonInTree,
|
||||
updateWorkspace
|
||||
} from '@nrwl/workspace';
|
||||
import { Schema } from './schema';
|
||||
import {
|
||||
expressTypingsVersion,
|
||||
nestJsSchematicsVersion,
|
||||
@ -11,6 +14,7 @@ import {
|
||||
nxVersion,
|
||||
reflectMetadataVersion
|
||||
} from '../../utils/versions';
|
||||
import { JsonObject } from '@angular-devkit/core';
|
||||
|
||||
export function addDependencies(): Rule {
|
||||
return addDepsToPackageJson(
|
||||
@ -38,11 +42,27 @@ function moveDependency(): Rule {
|
||||
});
|
||||
}
|
||||
|
||||
export default function() {
|
||||
function setDefault(): Rule {
|
||||
return updateWorkspace(workspace => {
|
||||
workspace.extensions.cli = workspace.extensions.cli || {};
|
||||
|
||||
const defaultCollection: string =
|
||||
workspace.extensions.cli &&
|
||||
((workspace.extensions.cli as JsonObject).defaultCollection as string);
|
||||
|
||||
if (!defaultCollection || defaultCollection === '@nrwl/workspace') {
|
||||
(workspace.extensions.cli as JsonObject).defaultCollection = '@nrwl/nest';
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
export default function(schema: Schema) {
|
||||
return chain([
|
||||
setDefault(),
|
||||
addPackageWithNgAdd('@nrwl/node'),
|
||||
addPackageWithNgAdd('@nrwl/jest'),
|
||||
addDependencies(),
|
||||
moveDependency()
|
||||
moveDependency(),
|
||||
formatFiles(schema)
|
||||
]);
|
||||
}
|
||||
|
||||
@ -1 +1,3 @@
|
||||
export interface Schema {}
|
||||
export interface Schema {
|
||||
skipFormat: boolean;
|
||||
}
|
||||
|
||||
@ -3,6 +3,12 @@
|
||||
"id": "NxNestNgAdd",
|
||||
"title": "Add Nx Nest Schematics",
|
||||
"type": "object",
|
||||
"properties": {},
|
||||
"properties": {
|
||||
"skipFormat": {
|
||||
"description": "Skip formatting files",
|
||||
"type": "boolean",
|
||||
"default": false
|
||||
}
|
||||
},
|
||||
"required": []
|
||||
}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { join } from 'path';
|
||||
import { SchematicTestRunner } from '@angular-devkit/schematics/testing';
|
||||
import { Tree } from '@angular-devkit/schematics';
|
||||
import { Rule, Tree } from '@angular-devkit/schematics';
|
||||
|
||||
const testRunner = new SchematicTestRunner(
|
||||
'@nrwl/nest',
|
||||
@ -10,3 +10,7 @@ const testRunner = new SchematicTestRunner(
|
||||
export function runSchematic(schematicName: string, options: any, tree: Tree) {
|
||||
return testRunner.runSchematicAsync(schematicName, options, tree).toPromise();
|
||||
}
|
||||
|
||||
export function callRule(rule: Rule, tree: Tree) {
|
||||
return testRunner.callRule(rule, tree).toPromise();
|
||||
}
|
||||
|
||||
@ -146,7 +146,9 @@ export default function(schema: Schema): Rule {
|
||||
return (host: Tree, context: SchematicContext) => {
|
||||
const options = normalizeOptions(schema);
|
||||
return chain([
|
||||
ngAdd(),
|
||||
ngAdd({
|
||||
skipFormat: true
|
||||
}),
|
||||
addAppFiles(options),
|
||||
updateAngularJson(options),
|
||||
updateNxJson(options),
|
||||
|
||||
@ -1,28 +1,60 @@
|
||||
import { Tree } from '@angular-devkit/schematics';
|
||||
import { createEmptyWorkspace } from '@nrwl/workspace/testing';
|
||||
import { SchematicTestRunner } from '@angular-devkit/schematics/testing';
|
||||
import { join } from 'path';
|
||||
import { readJsonInTree } from '@nrwl/workspace';
|
||||
import { readJsonInTree, updateJsonInTree } from '@nrwl/workspace';
|
||||
import { callRule, runSchematic } from '../../utils/testing';
|
||||
|
||||
describe('ng-add', () => {
|
||||
let tree: Tree;
|
||||
let testRunner: SchematicTestRunner;
|
||||
|
||||
beforeEach(() => {
|
||||
tree = Tree.empty();
|
||||
tree = createEmptyWorkspace(tree);
|
||||
testRunner = new SchematicTestRunner(
|
||||
'@nrwl/node',
|
||||
join(__dirname, '../../../collection.json')
|
||||
);
|
||||
});
|
||||
|
||||
it('should add dependencies', async () => {
|
||||
const result = await testRunner
|
||||
.runSchematicAsync('ng-add', {}, tree)
|
||||
.toPromise();
|
||||
const result = await runSchematic('ng-add', {}, tree);
|
||||
const packageJson = readJsonInTree(result, 'package.json');
|
||||
expect(packageJson.dependencies['@nrwl/node']).toBeUndefined();
|
||||
expect(packageJson.devDependencies['@nrwl/node']).toBeDefined();
|
||||
});
|
||||
|
||||
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');
|
||||
});
|
||||
|
||||
it('should be set if @nrwl/workspace was set before', async () => {
|
||||
tree = await callRule(
|
||||
updateJsonInTree('angular.json', json => {
|
||||
json.cli = {
|
||||
defaultCollection: '@nrwl/workspace'
|
||||
};
|
||||
|
||||
return json;
|
||||
}),
|
||||
tree
|
||||
);
|
||||
const result = await runSchematic('ng-add', {}, tree);
|
||||
const angularJson = readJsonInTree(result, 'angular.json');
|
||||
expect(angularJson.cli.defaultCollection).toEqual('@nrwl/node');
|
||||
});
|
||||
|
||||
it('should not be set if something else was set before', async () => {
|
||||
tree = await callRule(
|
||||
updateJsonInTree('angular.json', json => {
|
||||
json.cli = {
|
||||
defaultCollection: '@nrwl/angular'
|
||||
};
|
||||
|
||||
return json;
|
||||
}),
|
||||
tree
|
||||
);
|
||||
const result = await runSchematic('ng-add', {}, tree);
|
||||
const angularJson = readJsonInTree(result, 'angular.json');
|
||||
expect(angularJson.cli.defaultCollection).toEqual('@nrwl/angular');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@ -2,9 +2,13 @@ import { Rule, chain } from '@angular-devkit/schematics';
|
||||
import {
|
||||
addDepsToPackageJson,
|
||||
updateJsonInTree,
|
||||
addPackageWithNgAdd
|
||||
addPackageWithNgAdd,
|
||||
updateWorkspace,
|
||||
formatFiles
|
||||
} from '@nrwl/workspace';
|
||||
import { Schema } from './schema';
|
||||
import { nxVersion } from '../../utils/versions';
|
||||
import { JsonObject } from '@angular-devkit/core';
|
||||
|
||||
function addDependencies(): Rule {
|
||||
return addDepsToPackageJson(
|
||||
@ -24,10 +28,26 @@ function moveDependency(): Rule {
|
||||
});
|
||||
}
|
||||
|
||||
export default function() {
|
||||
function setDefault(): Rule {
|
||||
return updateWorkspace(workspace => {
|
||||
workspace.extensions.cli = workspace.extensions.cli || {};
|
||||
|
||||
const defaultCollection: string =
|
||||
workspace.extensions.cli &&
|
||||
((workspace.extensions.cli as JsonObject).defaultCollection as string);
|
||||
|
||||
if (!defaultCollection || defaultCollection === '@nrwl/workspace') {
|
||||
(workspace.extensions.cli as JsonObject).defaultCollection = '@nrwl/node';
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
export default function(schema: Schema) {
|
||||
return chain([
|
||||
setDefault(),
|
||||
addPackageWithNgAdd('@nrwl/jest'),
|
||||
addDependencies(),
|
||||
moveDependency()
|
||||
moveDependency(),
|
||||
formatFiles(schema)
|
||||
]);
|
||||
}
|
||||
|
||||
@ -1 +1,3 @@
|
||||
export interface Schema {}
|
||||
export interface Schema {
|
||||
skipFormat: boolean;
|
||||
}
|
||||
|
||||
@ -3,6 +3,12 @@
|
||||
"id": "NxNodeNgAdd",
|
||||
"title": "Add Nx Node Schematics",
|
||||
"type": "object",
|
||||
"properties": {},
|
||||
"properties": {
|
||||
"skipFormat": {
|
||||
"description": "Skip formatting files",
|
||||
"type": "boolean",
|
||||
"default": false
|
||||
}
|
||||
},
|
||||
"required": []
|
||||
}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { join } from 'path';
|
||||
import { SchematicTestRunner } from '@angular-devkit/schematics/testing';
|
||||
import { Tree } from '@angular-devkit/schematics';
|
||||
import { Rule, Tree } from '@angular-devkit/schematics';
|
||||
import {
|
||||
TestingArchitectHost,
|
||||
TestLogger
|
||||
@ -18,6 +18,10 @@ export function runSchematic(schematicName: string, options: any, tree: Tree) {
|
||||
return testRunner.runSchematicAsync(schematicName, options, tree).toPromise();
|
||||
}
|
||||
|
||||
export function callRule(rule: Rule, tree: Tree) {
|
||||
return testRunner.callRule(rule, tree).toPromise();
|
||||
}
|
||||
|
||||
export async function getTestArchitect() {
|
||||
const architectHost = new TestingArchitectHost('/root', '/root');
|
||||
const registry = new schema.CoreSchemaRegistry();
|
||||
|
||||
@ -3,7 +3,6 @@ import {
|
||||
chain,
|
||||
Rule,
|
||||
Tree,
|
||||
SchematicContext,
|
||||
mergeWith,
|
||||
apply,
|
||||
template,
|
||||
@ -148,7 +147,9 @@ export default function(schema: Schema): Rule {
|
||||
const options = normalizeOptions(host, schema);
|
||||
|
||||
return chain([
|
||||
ngAdd(),
|
||||
ngAdd({
|
||||
skipFormat: true
|
||||
}),
|
||||
createApplicationFiles(options),
|
||||
updateNxJson(options),
|
||||
addProject(options),
|
||||
|
||||
@ -1,26 +1,19 @@
|
||||
import { Tree } from '@angular-devkit/schematics';
|
||||
import { createEmptyWorkspace } from '@nrwl/workspace/testing';
|
||||
import { SchematicTestRunner } from '@angular-devkit/schematics/testing';
|
||||
import { join } from 'path';
|
||||
import { readJsonInTree } from '@nrwl/workspace';
|
||||
import { updateJsonInTree } from '@nrwl/workspace';
|
||||
import { runSchematic, callRule } from '../../utils/testing';
|
||||
|
||||
describe('ng-add', () => {
|
||||
let tree: Tree;
|
||||
let testRunner: SchematicTestRunner;
|
||||
|
||||
beforeEach(() => {
|
||||
tree = Tree.empty();
|
||||
tree = createEmptyWorkspace(tree);
|
||||
testRunner = new SchematicTestRunner(
|
||||
'@nrwl/react',
|
||||
join(__dirname, '../../../collection.json')
|
||||
);
|
||||
});
|
||||
|
||||
it('should add react dependencies', async () => {
|
||||
const result = await testRunner
|
||||
.runSchematicAsync('ng-add', {}, tree)
|
||||
.toPromise();
|
||||
const result = await runSchematic('ng-add', {}, tree);
|
||||
const packageJson = readJsonInTree(result, 'package.json');
|
||||
expect(packageJson.dependencies['@nrwl/react']).toBeUndefined();
|
||||
expect(packageJson.dependencies['react']).toBeDefined();
|
||||
@ -30,4 +23,44 @@ describe('ng-add', () => {
|
||||
expect(packageJson.devDependencies['@types/react-dom']).toBeDefined();
|
||||
expect(packageJson.devDependencies['react-testing-library']).toBeDefined();
|
||||
});
|
||||
|
||||
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');
|
||||
});
|
||||
|
||||
it('should be set if @nrwl/workspace was set before', async () => {
|
||||
tree = await callRule(
|
||||
updateJsonInTree('angular.json', json => {
|
||||
json.cli = {
|
||||
defaultCollection: '@nrwl/workspace'
|
||||
};
|
||||
|
||||
return json;
|
||||
}),
|
||||
tree
|
||||
);
|
||||
const result = await runSchematic('ng-add', {}, tree);
|
||||
const angularJson = readJsonInTree(result, 'angular.json');
|
||||
expect(angularJson.cli.defaultCollection).toEqual('@nrwl/react');
|
||||
});
|
||||
|
||||
it('should not be set if something else was set before', async () => {
|
||||
tree = await callRule(
|
||||
updateJsonInTree('angular.json', json => {
|
||||
json.cli = {
|
||||
defaultCollection: '@nrwl/angular'
|
||||
};
|
||||
|
||||
return json;
|
||||
}),
|
||||
tree
|
||||
);
|
||||
const result = await runSchematic('ng-add', {}, tree);
|
||||
const angularJson = readJsonInTree(result, 'angular.json');
|
||||
expect(angularJson.cli.defaultCollection).toEqual('@nrwl/angular');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@ -1,16 +1,11 @@
|
||||
import {
|
||||
Rule,
|
||||
chain,
|
||||
externalSchematic,
|
||||
noop,
|
||||
Tree
|
||||
} from '@angular-devkit/schematics';
|
||||
import { chain, Rule } from '@angular-devkit/schematics';
|
||||
import {
|
||||
addDepsToPackageJson,
|
||||
updateJsonInTree,
|
||||
readJsonInTree,
|
||||
addPackageWithNgAdd
|
||||
addPackageWithNgAdd,
|
||||
updateWorkspace
|
||||
} from '@nrwl/workspace';
|
||||
import { Schema } from './schema';
|
||||
import {
|
||||
frameworkVersion,
|
||||
typesVersion,
|
||||
@ -18,6 +13,7 @@ import {
|
||||
testingLibraryVersion,
|
||||
nxVersion
|
||||
} from '../../utils/versions';
|
||||
import { JsonObject } from '@angular-devkit/core';
|
||||
|
||||
export function addDependencies(): Rule {
|
||||
return addDepsToPackageJson(
|
||||
@ -43,8 +39,24 @@ function moveDependency(): Rule {
|
||||
});
|
||||
}
|
||||
|
||||
export default function() {
|
||||
function setDefault(): Rule {
|
||||
return updateWorkspace(workspace => {
|
||||
workspace.extensions.cli = workspace.extensions.cli || {};
|
||||
|
||||
const defaultCollection: string =
|
||||
workspace.extensions.cli &&
|
||||
((workspace.extensions.cli as JsonObject).defaultCollection as string);
|
||||
|
||||
if (!defaultCollection || defaultCollection === '@nrwl/workspace') {
|
||||
(workspace.extensions.cli as JsonObject).defaultCollection =
|
||||
'@nrwl/react';
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
export default function(schema: Schema) {
|
||||
return chain([
|
||||
setDefault(),
|
||||
addPackageWithNgAdd('@nrwl/jest'),
|
||||
addPackageWithNgAdd('@nrwl/cypress'),
|
||||
addPackageWithNgAdd('@nrwl/web'),
|
||||
|
||||
@ -1 +1,3 @@
|
||||
export interface Schema {}
|
||||
export interface Schema {
|
||||
skipFormat: boolean;
|
||||
}
|
||||
|
||||
@ -3,6 +3,12 @@
|
||||
"id": "NxReactNgAdd",
|
||||
"title": "Add Nx React Schematics",
|
||||
"type": "object",
|
||||
"properties": {},
|
||||
"properties": {
|
||||
"skipFormat": {
|
||||
"description": "Skip formatting files",
|
||||
"type": "boolean",
|
||||
"default": false
|
||||
}
|
||||
},
|
||||
"required": []
|
||||
}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { join } from 'path';
|
||||
import { SchematicTestRunner } from '@angular-devkit/schematics/testing';
|
||||
import { Tree } from '@angular-devkit/schematics';
|
||||
import { Rule, Tree } from '@angular-devkit/schematics';
|
||||
|
||||
const testRunner = new SchematicTestRunner(
|
||||
'@nrwl/react',
|
||||
@ -10,3 +10,7 @@ const testRunner = new SchematicTestRunner(
|
||||
export function runSchematic(schematicName: string, options: any, tree: Tree) {
|
||||
return testRunner.runSchematicAsync(schematicName, options, tree).toPromise();
|
||||
}
|
||||
|
||||
export function callRule(rule: Rule, tree: Tree) {
|
||||
return testRunner.callRule(rule, tree).toPromise();
|
||||
}
|
||||
|
||||
@ -148,7 +148,9 @@ export default function(schema: Schema): Rule {
|
||||
const options = normalizeOptions(host, schema);
|
||||
|
||||
return chain([
|
||||
ngAdd(),
|
||||
ngAdd({
|
||||
skipFormat: true
|
||||
}),
|
||||
createApplicationFiles(options),
|
||||
updateNxJson(options),
|
||||
addProject(options),
|
||||
|
||||
@ -1,29 +1,62 @@
|
||||
import { Tree } from '@angular-devkit/schematics';
|
||||
import { createEmptyWorkspace } from '@nrwl/workspace/testing';
|
||||
import { SchematicTestRunner } from '@angular-devkit/schematics/testing';
|
||||
import { join } from 'path';
|
||||
import { readJsonInTree } from '@nrwl/workspace';
|
||||
import { callRule, runSchematic } from '../../utils/testing';
|
||||
import { updateJsonInTree } from '@nrwl/workspace/src/utils/ast-utils';
|
||||
|
||||
describe('ng-add', () => {
|
||||
let tree: Tree;
|
||||
let testRunner: SchematicTestRunner;
|
||||
|
||||
beforeEach(() => {
|
||||
tree = Tree.empty();
|
||||
tree = createEmptyWorkspace(tree);
|
||||
testRunner = new SchematicTestRunner(
|
||||
'@nrwl/web',
|
||||
join(__dirname, '../../../collection.json')
|
||||
);
|
||||
});
|
||||
|
||||
it('should add web dependencies', async () => {
|
||||
const result = await testRunner
|
||||
.runSchematicAsync('ng-add', {}, tree)
|
||||
.toPromise();
|
||||
const result = await runSchematic('ng-add', {}, tree);
|
||||
const packageJson = readJsonInTree(result, 'package.json');
|
||||
expect(packageJson.dependencies['@nrwl/web']).toBeUndefined();
|
||||
expect(packageJson.dependencies['document-register-element']).toBeDefined();
|
||||
expect(packageJson.devDependencies['@nrwl/web']).toBeDefined();
|
||||
});
|
||||
|
||||
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');
|
||||
});
|
||||
|
||||
it('should be set if @nrwl/workspace was set before', async () => {
|
||||
tree = await callRule(
|
||||
updateJsonInTree('angular.json', json => {
|
||||
json.cli = {
|
||||
defaultCollection: '@nrwl/workspace'
|
||||
};
|
||||
|
||||
return json;
|
||||
}),
|
||||
tree
|
||||
);
|
||||
const result = await runSchematic('ng-add', {}, tree);
|
||||
const angularJson = readJsonInTree(result, 'angular.json');
|
||||
expect(angularJson.cli.defaultCollection).toEqual('@nrwl/web');
|
||||
});
|
||||
|
||||
it('should not be set if something else was set before', async () => {
|
||||
tree = await callRule(
|
||||
updateJsonInTree('angular.json', json => {
|
||||
json.cli = {
|
||||
defaultCollection: '@nrwl/angular'
|
||||
};
|
||||
|
||||
return json;
|
||||
}),
|
||||
tree
|
||||
);
|
||||
const result = await runSchematic('ng-add', {}, tree);
|
||||
const angularJson = readJsonInTree(result, 'angular.json');
|
||||
expect(angularJson.cli.defaultCollection).toEqual('@nrwl/angular');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@ -1,10 +1,17 @@
|
||||
import { Rule, chain } from '@angular-devkit/schematics';
|
||||
import { updateJsonInTree, addPackageWithNgAdd } from '@nrwl/workspace';
|
||||
import {
|
||||
updateJsonInTree,
|
||||
addPackageWithNgAdd,
|
||||
formatFiles
|
||||
} from '@nrwl/workspace';
|
||||
import { addDepsToPackageJson } from '@nrwl/workspace';
|
||||
import { Schema } from './schema';
|
||||
import {
|
||||
nxVersion,
|
||||
documentRegisterElementVersion
|
||||
} from '../../utils/versions';
|
||||
import { updateWorkspace } from '@nrwl/workspace';
|
||||
import { JsonObject } from '@angular-devkit/core';
|
||||
|
||||
function addDependencies(): Rule {
|
||||
return addDepsToPackageJson(
|
||||
@ -26,11 +33,27 @@ function moveDependency(): Rule {
|
||||
});
|
||||
}
|
||||
|
||||
export default function() {
|
||||
function setDefault(): Rule {
|
||||
return updateWorkspace(workspace => {
|
||||
workspace.extensions.cli = workspace.extensions.cli || {};
|
||||
|
||||
const defaultCollection: string =
|
||||
workspace.extensions.cli &&
|
||||
((workspace.extensions.cli as JsonObject).defaultCollection as string);
|
||||
|
||||
if (!defaultCollection || defaultCollection === '@nrwl/workspace') {
|
||||
(workspace.extensions.cli as JsonObject).defaultCollection = '@nrwl/web';
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
export default function(schema: Schema) {
|
||||
return chain([
|
||||
setDefault(),
|
||||
addPackageWithNgAdd('@nrwl/jest'),
|
||||
addPackageWithNgAdd('@nrwl/cypress'),
|
||||
addDependencies(),
|
||||
moveDependency()
|
||||
moveDependency(),
|
||||
formatFiles(schema)
|
||||
]);
|
||||
}
|
||||
|
||||
@ -1 +1,3 @@
|
||||
export interface Schema {}
|
||||
export interface Schema {
|
||||
skipFormat: boolean;
|
||||
}
|
||||
|
||||
@ -3,6 +3,12 @@
|
||||
"id": "NxWebNgAdd",
|
||||
"title": "Add Nx Web Schematics",
|
||||
"type": "object",
|
||||
"properties": {},
|
||||
"properties": {
|
||||
"skipFormat": {
|
||||
"description": "Skip formatting files",
|
||||
"type": "boolean",
|
||||
"default": false
|
||||
}
|
||||
},
|
||||
"required": []
|
||||
}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { join } from 'path';
|
||||
import { SchematicTestRunner } from '@angular-devkit/schematics/testing';
|
||||
import { Tree } from '@angular-devkit/schematics';
|
||||
import { Rule, Tree } from '@angular-devkit/schematics';
|
||||
import {
|
||||
BuilderContext,
|
||||
Architect,
|
||||
@ -22,6 +22,10 @@ export function runSchematic(schematicName: string, options: any, tree: Tree) {
|
||||
return testRunner.runSchematicAsync(schematicName, options, tree).toPromise();
|
||||
}
|
||||
|
||||
export function callRule(rule: Rule, tree: Tree) {
|
||||
return testRunner.callRule(rule, tree).toPromise();
|
||||
}
|
||||
|
||||
export async function getTestArchitect() {
|
||||
const architectHost = new TestingArchitectHost('/root', '/root');
|
||||
const registry = new schema.CoreSchemaRegistry();
|
||||
|
||||
@ -46,6 +46,8 @@ export {
|
||||
serializeTarget
|
||||
} from './src/utils/cli-config-utils';
|
||||
|
||||
export { getWorkspace, updateWorkspace } from './src/utils/workspace';
|
||||
|
||||
export { formatFiles } from './src/utils/rules/format-files';
|
||||
export { deleteFile } from './src/utils/rules/deleteFile';
|
||||
export * from './src/utils/rules/ng-add';
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user