Skip to content

Commit 3390ff0

Browse files
committed
feat: provide packages from x-promt
let users select the tools to install by using x-prompt or provide the option `packages=<list='commitlint'|'commitizen'|'husky'|'standard-version'>` This is currently blocked by angular/angular-cli#16104 BREAKING CHANGE: `--husky=<false|true>`, `--commitizen=<false|true>`, `--standardVersion=<false|true>` are not supported anymore| use `--packages=commitizen,husky,commitlint,standard-version` instead. By default all packaged will be added. relates to #11
1 parent b7fa819 commit 3390ff0

File tree

3 files changed

+80
-36
lines changed

3 files changed

+80
-36
lines changed

src/ng-add/index.ts

+19-16
Original file line numberDiff line numberDiff line change
@@ -19,31 +19,34 @@ import { getPackageJson, overwritePackageJson } from '../utils';
1919
export default (options: Schema): Rule => {
2020
return chain([
2121
addDependencies(options),
22-
addCommitlintConfigFile(options),
23-
addDependency(options.husky) ? addHuskyConfig(options) : noop(),
24-
addDependency(options.commitizen) ? addCommitizenConfig(options) : noop(),
25-
addDependency(options.standardVersion) ? addNpmRunScript(options) : noop(),
26-
addDependency(options.standardVersion) && options.issuePrefix
22+
options.packages.includes('commitlint') ? addCommitlintConfigFile(options) : noop(),
23+
options.packages.includes('husky') ? addHuskyConfig(options) : noop(),
24+
options.packages.includes('commitizen') ? addCommitizenConfig(options) : noop(),
25+
options.packages.includes('standard-version') ? addNpmRunScript(options) : noop(),
26+
options.packages.includes('standard-version') && options.issuePrefix
2727
? standardVersionConfig(options)
2828
: noop(),
2929
options.skipInstall ? noop() : installDependencies,
3030
]);
3131
};
3232

33-
const addDependency = (configForDependency: boolean | undefined) => {
34-
return configForDependency === true || typeof configForDependency === 'undefined';
35-
};
36-
3733
const addDependencies = (options: Schema) => (tree: Tree, context: SchematicContext) => {
3834
context.logger.info('Added npm packages as dev dependencies');
3935
const packageJson = getPackageJson(tree);
4036

41-
let devDepsToAdd: { [key: string]: string } = {
42-
'@commitlint/cli': '^8.2.0',
43-
'@commitlint/config-conventional': '^8.2.0',
44-
};
37+
let devDepsToAdd: { [key: string]: string } = {};
38+
39+
if (options.packages.includes('commitlint')) {
40+
devDepsToAdd = {
41+
...devDepsToAdd,
42+
'@commitlint/cli': '^8.2.0',
43+
'@commitlint/config-conventional': '^8.2.0',
44+
};
45+
} else {
46+
context.logger.info('- Skips adding commitlint');
47+
}
4548

46-
if (addDependency(options.commitizen)) {
49+
if (options.packages.includes('commitizen')) {
4750
devDepsToAdd = {
4851
...devDepsToAdd,
4952
commitizen: '^4.0.3',
@@ -53,7 +56,7 @@ const addDependencies = (options: Schema) => (tree: Tree, context: SchematicCont
5356
context.logger.info('- Skips adding commitizen');
5457
}
5558

56-
if (addDependency(options.husky)) {
59+
if (options.packages.includes('husky')) {
5760
devDepsToAdd = {
5861
...devDepsToAdd,
5962
husky: '^3.0.9',
@@ -62,7 +65,7 @@ const addDependencies = (options: Schema) => (tree: Tree, context: SchematicCont
6265
context.logger.info('- Skips adding husky');
6366
}
6467

65-
if (addDependency(options.standardVersion)) {
68+
if (options.packages.includes('standard-version')) {
6669
devDepsToAdd = {
6770
...devDepsToAdd,
6871
'standard-version': '^7.0.0',

src/ng-add/index_spec.ts

+49-4
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ describe('ngx-semantic-version schematic', () => {
1616
const project = 'foo';
1717
const defaultOptions: Schema = {
1818
skipInstall: false,
19+
packages: ['commitlint', 'commitizen', 'husky', 'standard-version'],
1920
};
2021

2122
let appTree: UnitTestTree;
@@ -75,10 +76,17 @@ describe('ngx-semantic-version schematic', () => {
7576
});
7677
});
7778

78-
describe(`when disabling 'husky'`, () => {
79+
describe(`when not using 'husky'`, () => {
7980
beforeEach(async () => {
8081
appTree = await schematicRunner
81-
.runSchematicAsync('ng-add', { ...defaultOptions, husky: false }, appTree)
82+
.runSchematicAsync(
83+
'ng-add',
84+
{
85+
...defaultOptions,
86+
packages: ['commitlint', 'commitizen', 'standard-version'],
87+
},
88+
appTree,
89+
)
8290
.toPromise();
8391
});
8492

@@ -97,10 +105,40 @@ describe('ngx-semantic-version schematic', () => {
97105
});
98106
});
99107

108+
describe(`when disabling 'commitlint'`, () => {
109+
beforeEach(async () => {
110+
appTree = await schematicRunner
111+
.runSchematicAsync(
112+
'ng-add',
113+
{
114+
...defaultOptions,
115+
packages: ['commitizen', 'husky', 'standard-version'],
116+
},
117+
appTree,
118+
)
119+
.toPromise();
120+
});
121+
122+
it(`should not add 'commitlint' to the project`, () => {
123+
const packageJson = JSON.parse(getFileContent(appTree, PACKAGE_JSON_PATH));
124+
const { devDependencies } = packageJson;
125+
expect(appTree.files).toContain(PACKAGE_JSON_PATH);
126+
expect(devDependencies['@commitlint/cli']).not.toBeDefined();
127+
expect(devDependencies['@commitlint/config-conventional']).not.toBeDefined();
128+
});
129+
});
130+
100131
describe(`when disabling 'commitizen'`, () => {
101132
beforeEach(async () => {
102133
appTree = await schematicRunner
103-
.runSchematicAsync('ng-add', { ...defaultOptions, commitizen: false }, appTree)
134+
.runSchematicAsync(
135+
'ng-add',
136+
{
137+
...defaultOptions,
138+
packages: ['commitlint', 'husky', 'standard-version'],
139+
},
140+
appTree,
141+
)
104142
.toPromise();
105143
});
106144

@@ -122,7 +160,14 @@ describe('ngx-semantic-version schematic', () => {
122160
describe(`when disabling 'standard-version'`, () => {
123161
beforeEach(async () => {
124162
appTree = await schematicRunner
125-
.runSchematicAsync('ng-add', { ...defaultOptions, standardVersion: false }, appTree)
163+
.runSchematicAsync(
164+
'ng-add',
165+
{
166+
...defaultOptions,
167+
packages: ['commitlint', 'commitizen', 'husky'],
168+
},
169+
appTree,
170+
)
126171
.toPromise();
127172
});
128173

src/ng-add/schema.json

+12-16
Original file line numberDiff line numberDiff line change
@@ -5,26 +5,22 @@
55
"description": "configure commitlint, husky, commitizen and standard-version configuration",
66
"type": "object",
77
"properties": {
8+
"packages": {
9+
"type": "array",
10+
"description": "select the packages that should to be installed and configured",
11+
"default": ["commitlint", "commitizen", "husky", "standard-version"],
12+
"x-prompt": {
13+
"message": "What packages do you want to be installed and configured?",
14+
"type": "list",
15+
"multiselect": true,
16+
"items": ["commitlint", "commitizen", "husky", "standard-version"]
17+
}
18+
},
819
"skipInstall": {
920
"type": "boolean",
1021
"description": "Skip installing the npm packages",
1122
"default": false
1223
},
13-
"commitizen": {
14-
"type": "boolean",
15-
"description": "Do not install and configure commitizen",
16-
"default": true
17-
},
18-
"husky": {
19-
"type": "boolean",
20-
"description": "Do not install and configure husky",
21-
"default": true
22-
},
23-
"standardVersion": {
24-
"type": "boolean",
25-
"description": "Do not install and configure standard-version",
26-
"default": true
27-
},
2824
"issuePrefix": {
2925
"type": "string",
3026
"description": "configure an issue prefix that should be checked by each commit",
@@ -36,5 +32,5 @@
3632
"default": false
3733
}
3834
},
39-
"required": []
35+
"required": ["packages"]
4036
}

0 commit comments

Comments
 (0)