Skip to content

Commit 75ab3ef

Browse files
committed
feat: add stylelint prettier mutation
1 parent 47047a8 commit 75ab3ef

File tree

5 files changed

+59
-47
lines changed

5 files changed

+59
-47
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,17 @@
1+
import { Mutation } from 'src/utils/mutation';
12
import { NpmScript } from 'src/utils/npm';
23

4+
interface StylelintConfig {
5+
extends: string[];
6+
plugins: string[];
7+
rules: Record<string, null | true | [] | [true, Record<string, boolean>]>;
8+
overrides?: { files: string[]; customSyntax?: string }[];
9+
}
10+
311
export interface Config {
412
devDependencies: string[];
513
scripts: NpmScript[];
6-
stylelintConfig: string;
14+
stylelintConfig: StylelintConfig;
715
stylelintIgnore: string;
16+
mutations: Mutation<Config>[];
817
}
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,23 @@
11
import { readableMultilineString } from 'src/utils/string';
2+
import { prettierMutation } from '../stylelint.utils';
23
import { Config } from './config.interface';
34

4-
const stylelintConfig = readableMultilineString`
5-
{
6-
"extends": [
7-
"stylelint-config-standard",
8-
"stylelint-config-rational-order-fix"
5+
const stylelintConfig: Config['stylelintConfig'] = {
6+
extends: ['stylelint-config-standard', 'stylelint-config-rational-order-fix'],
7+
plugins: ['stylelint-order', 'stylelint-config-rational-order-fix/plugin'],
8+
rules: {
9+
'declaration-empty-line-before': null,
10+
'no-empty-first-line': null,
11+
'order/properties-order': [],
12+
'plugin/rational-order': [
13+
true,
14+
{
15+
'border-in-box-model': false,
16+
'empty-line-between-groups': false,
17+
},
918
],
10-
"plugins": [
11-
"stylelint-order",
12-
"stylelint-config-rational-order-fix/plugin"
13-
],
14-
"rules": {
15-
"declaration-empty-line-before": null,
16-
"no-empty-first-line": null,
17-
"order/properties-order": [],
18-
"plugin/rational-order": [true, {
19-
"border-in-box-model": false,
20-
"empty-line-between-groups": false
21-
}]
22-
}
23-
}
24-
`;
19+
},
20+
};
2521

2622
const stylelintIgnore = readableMultilineString`
2723
node_modules
@@ -37,4 +33,5 @@ export const defaultConfig: Config = {
3733
{ name: 'csslint', script: 'stylelint "src/**/*.css"' },
3834
{ name: 'csslint:fix', script: 'stylelint "src/**/*.css" --fix' },
3935
],
36+
mutations: [prettierMutation],
4037
};
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,29 @@
11
import { readableMultilineString } from 'src/utils/string';
2+
import { prettierMutation } from '../stylelint.utils';
23
import { Config } from './config.interface';
34

4-
const stylelintConfig = readableMultilineString`
5-
{
6-
"extends": [
7-
"stylelint-config-standard",
8-
"stylelint-config-rational-order-fix"
9-
],
10-
"plugins": [
11-
"stylelint-order",
12-
"stylelint-config-rational-order-fix/plugin"
5+
const stylelintConfig: Config['stylelintConfig'] = {
6+
extends: ['stylelint-config-standard', 'stylelint-config-rational-order-fix'],
7+
plugins: ['stylelint-order', 'stylelint-config-rational-order-fix/plugin'],
8+
rules: {
9+
'declaration-empty-line-before': null,
10+
'no-empty-first-line': null,
11+
'order/properties-order': [],
12+
'plugin/rational-order': [
13+
true,
14+
{
15+
'border-in-box-model': false,
16+
'empty-line-between-groups': false,
17+
},
1318
],
14-
"rules": {
15-
"declaration-empty-line-before": null,
16-
"no-empty-first-line": null,
17-
"order/properties-order": [],
18-
"plugin/rational-order": [true, {
19-
"border-in-box-model": false,
20-
"empty-line-between-groups": false
21-
}]
19+
},
20+
overrides: [
21+
{
22+
files: ['**/*.{js,jsx,ts,tsx}'],
23+
customSyntax: '@stylelint/postcss-css-in-js',
2224
},
23-
"overrides": [
24-
{
25-
"files": ["**/*.{js,jsx,ts,tsx}"],
26-
"customSyntax": "@stylelint/postcss-css-in-js"
27-
}
28-
]
29-
}
30-
`;
25+
],
26+
};
3127

3228
const stylelintIgnore = readableMultilineString`
3329
node_modules
@@ -50,4 +46,5 @@ export const reactTsConfig: Config = {
5046
{ name: 'csslint', script: 'stylelint "src/**/*.{css,js,jsx,ts,tsx}"' },
5147
{ name: 'csslint:fix', script: 'stylelint "src/**/*.{css,js,jsx,ts,tsx}" --fix' },
5248
],
49+
mutations: [prettierMutation],
5350
};

src/categories/js/stylelint/stylelint.entrypoint.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,6 @@ export const stylelint = async () => {
99
await installDevelopmentDependencies(...devDependencies);
1010
await addScripts(...scripts);
1111

12-
await addFileToRoot(STYLELINT_CONFIG_NAME, stylelintConfig);
12+
await addFileToRoot(STYLELINT_CONFIG_NAME, JSON.stringify(stylelintConfig));
1313
await addFileToRoot(STYLELINT_IGNORE_NAME, stylelintIgnore);
1414
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { isPrettierInstalled } from '../prettier/prettier.utils';
2+
import { Config } from './config/config.interface';
3+
4+
export const prettierMutation = async (config: Config) => {
5+
if (await isPrettierInstalled()) {
6+
config.devDependencies.push('stylelint-config-prettier', 'stylelint-prettier');
7+
config.stylelintConfig.extends.push('stylelint-prettier/recommended');
8+
}
9+
};

0 commit comments

Comments
 (0)