@master/eslint-plugin-css 2.0.0-rc.2 → 2.0.0-rc.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/configs/config.cjs +16 -0
- package/dist/configs/config.mjs +14 -1
- package/dist/configs/flat.cjs +13 -0
- package/dist/configs/flat.d.ts +10 -1
- package/dist/configs/flat.mjs +11 -1
- package/dist/configs/recommended.cjs +12 -0
- package/dist/configs/recommended.mjs +10 -1
- package/dist/create-rule.cjs +7 -0
- package/dist/create-rule.d.ts +3 -0
- package/dist/create-rule.mjs +5 -0
- package/dist/functions/get-css.cjs +16 -0
- package/dist/functions/get-css.d.ts +1 -0
- package/dist/functions/get-css.mjs +14 -0
- package/dist/functions/reorder-valid-classes.cjs +9 -0
- package/dist/functions/reorder-valid-classes.d.ts +3 -0
- package/dist/functions/reorder-valid-classes.mjs +11 -0
- package/dist/functions/reorder-valid-classes.worker.cjs +15 -0
- package/dist/functions/reorder-valid-classes.worker.d.ts +1 -0
- package/dist/functions/reorder-valid-classes.worker.mjs +13 -0
- package/dist/functions/valid-rules.cjs +9 -0
- package/dist/functions/valid-rules.d.ts +3 -0
- package/dist/functions/valid-rules.mjs +11 -0
- package/dist/functions/valid-rules.worker.cjs +24 -0
- package/dist/functions/valid-rules.worker.d.ts +6 -0
- package/dist/functions/valid-rules.worker.mjs +22 -0
- package/dist/functions/validate.cjs +9 -0
- package/dist/functions/validate.d.ts +3 -0
- package/dist/functions/validate.mjs +11 -0
- package/dist/functions/validate.worker.cjs +15 -0
- package/dist/functions/validate.worker.d.ts +5 -0
- package/dist/functions/validate.worker.mjs +13 -0
- package/dist/index.cjs +17 -0
- package/dist/index.d.ts +57 -1
- package/dist/index.mjs +15 -1
- package/dist/plugin.cjs +18 -0
- package/dist/plugin.d.ts +10 -2
- package/dist/plugin.mjs +16 -1
- package/dist/rules/class-collision.cjs +107 -0
- package/dist/rules/class-collision.d.ts +1 -2
- package/dist/rules/class-collision.mjs +105 -1
- package/dist/rules/class-order.cjs +198 -0
- package/dist/rules/class-order.d.ts +1 -2
- package/dist/rules/class-order.mjs +196 -1
- package/dist/rules/class-validation.cjs +94 -0
- package/dist/rules/class-validation.d.ts +1 -2
- package/dist/rules/class-validation.mjs +92 -1
- package/dist/settings.cjs +13 -0
- package/dist/settings.d.ts +6 -0
- package/dist/settings.mjs +11 -1
- package/dist/utils/are-declarations-equal.cjs +21 -0
- package/dist/utils/are-declarations-equal.mjs +19 -1
- package/dist/utils/are-vendor-prefix-selectors-equal.cjs +14 -0
- package/dist/utils/are-vendor-prefix-selectors-equal.d.ts +1 -0
- package/dist/utils/are-vendor-prefix-selectors-equal.mjs +12 -0
- package/dist/utils/define-visitors.cjs +76 -0
- package/dist/utils/define-visitors.d.ts +8 -5
- package/dist/utils/define-visitors.mjs +74 -1
- package/dist/utils/extract-classnames-from-value.cjs +34 -0
- package/dist/utils/extract-classnames-from-value.mjs +32 -1
- package/dist/utils/extract-range-from-node.cjs +18 -0
- package/dist/utils/extract-range-from-node.mjs +16 -1
- package/dist/utils/extract-value-from-node.cjs +23 -0
- package/dist/utils/extract-value-from-node.mjs +21 -1
- package/dist/utils/find-loc.cjs +40 -0
- package/dist/utils/find-loc.mjs +38 -1
- package/dist/utils/get-template-element-body.cjs +12 -0
- package/dist/utils/get-template-element-body.mjs +10 -1
- package/dist/utils/get-template-element-prefix.cjs +11 -0
- package/dist/utils/get-template-element-prefix.mjs +9 -1
- package/dist/utils/get-template-element-suffix.cjs +10 -0
- package/dist/utils/get-template-element-suffix.mjs +8 -1
- package/dist/utils/parse-node-recursive.cjs +122 -0
- package/dist/utils/parse-node-recursive.d.ts +2 -2
- package/dist/utils/parse-node-recursive.mjs +120 -1
- package/dist/utils/resolve-context.cjs +13 -0
- package/dist/utils/resolve-context.d.ts +8 -2
- package/dist/utils/resolve-context.mjs +11 -1
- package/package.json +1 -1
- package/dist/configs/config.js +0 -1
- package/dist/configs/flat.js +0 -1
- package/dist/configs/recommended.js +0 -1
- package/dist/index.js +0 -1
- package/dist/plugin.js +0 -1
- package/dist/rules/class-collision.js +0 -1
- package/dist/rules/class-order.js +0 -1
- package/dist/rules/class-validation.js +0 -1
- package/dist/settings.js +0 -1
- package/dist/utils/are-declarations-equal.js +0 -1
- package/dist/utils/define-visitors.js +0 -1
- package/dist/utils/extract-classnames-from-value.js +0 -1
- package/dist/utils/extract-range-from-node.js +0 -1
- package/dist/utils/extract-value-from-node.js +0 -1
- package/dist/utils/find-loc.js +0 -1
- package/dist/utils/get-mastercss.d.ts +0 -2
- package/dist/utils/get-mastercss.js +0 -1
- package/dist/utils/get-mastercss.mjs +0 -1
- package/dist/utils/get-template-element-body.js +0 -1
- package/dist/utils/get-template-element-prefix.js +0 -1
- package/dist/utils/get-template-element-suffix.js +0 -1
- package/dist/utils/parse-node-recursive.js +0 -1
- package/dist/utils/reorder-valid-classes-action.d.ts +0 -3
- package/dist/utils/reorder-valid-classes-action.js +0 -1
- package/dist/utils/reorder-valid-classes-action.mjs +0 -1
- package/dist/utils/resolve-context.js +0 -1
- package/dist/utils/valid-rules-action.d.ts +0 -3
- package/dist/utils/valid-rules-action.js +0 -1
- package/dist/utils/valid-rules-action.mjs +0 -1
- package/dist/utils/validate-action.d.ts +0 -3
- package/dist/utils/validate-action.js +0 -1
- package/dist/utils/validate-action.mjs +0 -1
- package/dist/utils/workers/reorder-valid-classes.d.ts +0 -2
- package/dist/utils/workers/reorder-valid-classes.js +0 -1
- package/dist/utils/workers/reorder-valid-classes.mjs +0 -1
- package/dist/utils/workers/valid-rules.d.ts +0 -2
- package/dist/utils/workers/valid-rules.js +0 -1
- package/dist/utils/workers/valid-rules.mjs +0 -1
- package/dist/utils/workers/validate.d.ts +0 -5
- package/dist/utils/workers/validate.js +0 -1
- package/dist/utils/workers/validate.mjs +0 -1
package/README.md
CHANGED
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
<img alt="Follow @mastercorg" src="https://img.shields.io/static/v1?label=%20&message=twitter&color=f6f7f8&logo=twitter&style=for-the-badge">
|
|
42
42
|
</picture>
|
|
43
43
|
</a>
|
|
44
|
-
<a aria-label="Github Actions" href="https://github.com/
|
|
44
|
+
<a aria-label="Github Actions" href="https://github.com/master-co/css/actions/workflows/release.yml">
|
|
45
45
|
<picture>
|
|
46
46
|
<source media="(prefers-color-scheme: dark)" srcset="https://img.shields.io/github/actions/workflow/status/master-co/css/release.yml?branch=rc&label=%20&message=twitter&color=212022&logo=githubactions&style=for-the-badge">
|
|
47
47
|
<source media="(prefers-color-scheme: light)" srcset="https://img.shields.io/github/actions/workflow/status/master-co/css/release.yml?branch=rc&label=%20&message=twitter&color=f6f7f8&logo=githubactions&style=for-the-badge&logoColor=%23000">
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const config = {
|
|
4
|
+
rules: {
|
|
5
|
+
'@master/css/class-order': 'warn',
|
|
6
|
+
'@master/css/class-validation': 'error',
|
|
7
|
+
'@master/css/class-collision': 'warn'
|
|
8
|
+
},
|
|
9
|
+
parserOptions: {
|
|
10
|
+
ecmaFeatures: {
|
|
11
|
+
jsx: true
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
module.exports = config;
|
package/dist/configs/config.mjs
CHANGED
|
@@ -1 +1,14 @@
|
|
|
1
|
-
const
|
|
1
|
+
const config = {
|
|
2
|
+
rules: {
|
|
3
|
+
'@master/css/class-order': 'warn',
|
|
4
|
+
'@master/css/class-validation': 'error',
|
|
5
|
+
'@master/css/class-collision': 'warn'
|
|
6
|
+
},
|
|
7
|
+
parserOptions: {
|
|
8
|
+
ecmaFeatures: {
|
|
9
|
+
jsx: true
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export { config as default };
|
package/dist/configs/flat.d.ts
CHANGED
|
@@ -10,7 +10,16 @@ declare const _default: {
|
|
|
10
10
|
};
|
|
11
11
|
};
|
|
12
12
|
plugins: {
|
|
13
|
-
'@master/css':
|
|
13
|
+
'@master/css': {
|
|
14
|
+
meta: {
|
|
15
|
+
name: string;
|
|
16
|
+
};
|
|
17
|
+
rules: {
|
|
18
|
+
'class-collision': import("@typescript-eslint/utils/ts-eslint").RuleModule<"collisionClass", any[], import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
19
|
+
'class-order': import("@typescript-eslint/utils/ts-eslint").RuleModule<"invalidClassOrder", any[], import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
20
|
+
'class-validation': import("@typescript-eslint/utils/ts-eslint").RuleModule<"invalidClass" | "disallowUnknownClass", any[], import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
14
23
|
};
|
|
15
24
|
};
|
|
16
25
|
export default _default;
|
package/dist/configs/flat.mjs
CHANGED
|
@@ -1 +1,11 @@
|
|
|
1
|
-
import
|
|
1
|
+
import plugin from '../plugin.mjs';
|
|
2
|
+
import config from './config.mjs';
|
|
3
|
+
|
|
4
|
+
var flat = {
|
|
5
|
+
plugins: {
|
|
6
|
+
'@master/css': plugin
|
|
7
|
+
},
|
|
8
|
+
...config
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export { flat as default };
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { ESLintUtils } from '@typescript-eslint/utils';
|
|
2
|
+
declare const _default: <TOptions extends readonly unknown[], TMessageIds extends string>({ name, meta, ...rule }: Readonly<ESLintUtils.RuleWithMetaAndName<TOptions, TMessageIds>>) => ESLintUtils.RuleModule<TMessageIds, TOptions, ESLintUtils.RuleListener>;
|
|
3
|
+
export default _default;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var css = require('@master/css');
|
|
4
|
+
var exploreConfig = require('explore-config');
|
|
5
|
+
|
|
6
|
+
let currentCSS;
|
|
7
|
+
let currentConfig;
|
|
8
|
+
function getCSS(config) {
|
|
9
|
+
if (!currentCSS || currentConfig !== config) {
|
|
10
|
+
currentCSS = new css.MasterCSS(typeof config === 'object' ? config : exploreConfig(config || ''));
|
|
11
|
+
currentConfig = config;
|
|
12
|
+
}
|
|
13
|
+
return currentCSS;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
module.exports = getCSS;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function getCSS(config: any): any;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { MasterCSS } from '@master/css';
|
|
2
|
+
import exploreConfig from 'explore-config';
|
|
3
|
+
|
|
4
|
+
let currentCSS;
|
|
5
|
+
let currentConfig;
|
|
6
|
+
function getCSS(config) {
|
|
7
|
+
if (!currentCSS || currentConfig !== config) {
|
|
8
|
+
currentCSS = new MasterCSS(typeof config === 'object' ? config : exploreConfig(config || ''));
|
|
9
|
+
currentConfig = config;
|
|
10
|
+
}
|
|
11
|
+
return currentCSS;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export { getCSS as default };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var synckit = require('synckit');
|
|
4
|
+
var reorderValidClasses_worker = require('./reorder-valid-classes.worker.cjs');
|
|
5
|
+
var path = require('path');
|
|
6
|
+
|
|
7
|
+
var reorderValidClasses = process.env.NODE_ENV === 'test' ? reorderValidClasses_worker : synckit.createSyncFn(path.join(__dirname, 'reorder-valid-classes.worker.cjs'));
|
|
8
|
+
|
|
9
|
+
module.exports = reorderValidClasses;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import __url_for_shim from 'url';
|
|
2
|
+
import __path_for_shim from 'path';
|
|
3
|
+
const __filename = __url_for_shim.fileURLToPath(import.meta.url);
|
|
4
|
+
const __dirname = __path_for_shim.dirname(__filename);
|
|
5
|
+
import { createSyncFn } from 'synckit';
|
|
6
|
+
import runReorderValidClasses from './reorder-valid-classes.worker.mjs';
|
|
7
|
+
import { join } from 'path';
|
|
8
|
+
var reorderValidClasses = process.env.NODE_ENV === 'test' ? runReorderValidClasses : createSyncFn(join(__dirname, 'reorder-valid-classes.worker.cjs'));
|
|
9
|
+
export {
|
|
10
|
+
reorderValidClasses as default
|
|
11
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var css = require('@master/css');
|
|
4
|
+
var synckit = require('synckit');
|
|
5
|
+
var getCss = require('./get-css.cjs');
|
|
6
|
+
|
|
7
|
+
function runReorderValidClasses(classNames, config) {
|
|
8
|
+
const currentCSS = getCss(config);
|
|
9
|
+
return css.reorderForReadableClasses(classNames, {
|
|
10
|
+
css: currentCSS
|
|
11
|
+
}).filter((eachOrderedClassName)=>classNames.includes(eachOrderedClassName));
|
|
12
|
+
}
|
|
13
|
+
synckit.runAsWorker(runReorderValidClasses);
|
|
14
|
+
|
|
15
|
+
module.exports = runReorderValidClasses;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function runReorderValidClasses(classNames: string[], config: string | object): string[];
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { reorderForReadableClasses } from '@master/css';
|
|
2
|
+
import { runAsWorker } from 'synckit';
|
|
3
|
+
import getCSS from './get-css.mjs';
|
|
4
|
+
|
|
5
|
+
function runReorderValidClasses(classNames, config) {
|
|
6
|
+
const currentCSS = getCSS(config);
|
|
7
|
+
return reorderForReadableClasses(classNames, {
|
|
8
|
+
css: currentCSS
|
|
9
|
+
}).filter((eachOrderedClassName)=>classNames.includes(eachOrderedClassName));
|
|
10
|
+
}
|
|
11
|
+
runAsWorker(runReorderValidClasses);
|
|
12
|
+
|
|
13
|
+
export { runReorderValidClasses as default };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var synckit = require('synckit');
|
|
4
|
+
var validRules_worker = require('./valid-rules.worker.cjs');
|
|
5
|
+
var path = require('path');
|
|
6
|
+
|
|
7
|
+
var validRules = process.env.NODE_ENV === 'test' ? validRules_worker : synckit.createSyncFn(path.join(__dirname, 'valid-rules.worker.cjs'));
|
|
8
|
+
|
|
9
|
+
module.exports = validRules;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import __url_for_shim from 'url';
|
|
2
|
+
import __path_for_shim from 'path';
|
|
3
|
+
const __filename = __url_for_shim.fileURLToPath(import.meta.url);
|
|
4
|
+
const __dirname = __path_for_shim.dirname(__filename);
|
|
5
|
+
import { createSyncFn } from 'synckit';
|
|
6
|
+
import runValidRules from './valid-rules.worker.mjs';
|
|
7
|
+
import { join } from 'path';
|
|
8
|
+
var validRules = process.env.NODE_ENV === 'test' ? runValidRules : createSyncFn(join(__dirname, 'valid-rules.worker.cjs'));
|
|
9
|
+
export {
|
|
10
|
+
validRules as default
|
|
11
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var synckit = require('synckit');
|
|
4
|
+
var getCss = require('./get-css.cjs');
|
|
5
|
+
var cssValidator = require('@master/css-validator');
|
|
6
|
+
|
|
7
|
+
function runValidRules(classNames, config) {
|
|
8
|
+
const currentCSS = getCss(config);
|
|
9
|
+
const ruleOfClass = {};
|
|
10
|
+
classNames.forEach((eachClassName)=>{
|
|
11
|
+
const validRule = cssValidator.generateValidRules(eachClassName, {
|
|
12
|
+
css: currentCSS
|
|
13
|
+
})[0];
|
|
14
|
+
if (validRule) ruleOfClass[eachClassName] = {
|
|
15
|
+
vendorPrefixSelectors: validRule?.vendorPrefixSelectors,
|
|
16
|
+
declarations: validRule?.declarations,
|
|
17
|
+
stateToken: validRule?.stateToken
|
|
18
|
+
};
|
|
19
|
+
});
|
|
20
|
+
return ruleOfClass;
|
|
21
|
+
}
|
|
22
|
+
synckit.runAsWorker(runValidRules);
|
|
23
|
+
|
|
24
|
+
module.exports = runValidRules;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Rule } from '@master/css';
|
|
2
|
+
export default function runValidRules(classNames: string[], config: string | object): Record<string, {
|
|
3
|
+
declarations: Rule['declarations'];
|
|
4
|
+
stateToken: Rule['stateToken'];
|
|
5
|
+
vendorPrefixSelectors: Rule['vendorPrefixSelectors'];
|
|
6
|
+
}>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { runAsWorker } from 'synckit';
|
|
2
|
+
import getCSS from './get-css.mjs';
|
|
3
|
+
import { generateValidRules } from '@master/css-validator';
|
|
4
|
+
|
|
5
|
+
function runValidRules(classNames, config) {
|
|
6
|
+
const currentCSS = getCSS(config);
|
|
7
|
+
const ruleOfClass = {};
|
|
8
|
+
classNames.forEach((eachClassName)=>{
|
|
9
|
+
const validRule = generateValidRules(eachClassName, {
|
|
10
|
+
css: currentCSS
|
|
11
|
+
})[0];
|
|
12
|
+
if (validRule) ruleOfClass[eachClassName] = {
|
|
13
|
+
vendorPrefixSelectors: validRule?.vendorPrefixSelectors,
|
|
14
|
+
declarations: validRule?.declarations,
|
|
15
|
+
stateToken: validRule?.stateToken
|
|
16
|
+
};
|
|
17
|
+
});
|
|
18
|
+
return ruleOfClass;
|
|
19
|
+
}
|
|
20
|
+
runAsWorker(runValidRules);
|
|
21
|
+
|
|
22
|
+
export { runValidRules as default };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var synckit = require('synckit');
|
|
4
|
+
var validate_worker = require('./validate.worker.cjs');
|
|
5
|
+
var path = require('path');
|
|
6
|
+
|
|
7
|
+
var validate = process.env.NODE_ENV === 'test' ? validate_worker : synckit.createSyncFn(path.join(__dirname, 'validate.worker.cjs'));
|
|
8
|
+
|
|
9
|
+
module.exports = validate;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import __url_for_shim from 'url';
|
|
2
|
+
import __path_for_shim from 'path';
|
|
3
|
+
const __filename = __url_for_shim.fileURLToPath(import.meta.url);
|
|
4
|
+
const __dirname = __path_for_shim.dirname(__filename);
|
|
5
|
+
import { createSyncFn } from 'synckit';
|
|
6
|
+
import runValidate from './validate.worker.mjs';
|
|
7
|
+
import { join } from 'path';
|
|
8
|
+
var validate = process.env.NODE_ENV === 'test' ? runValidate : createSyncFn(join(__dirname, 'validate.worker.cjs'));
|
|
9
|
+
export {
|
|
10
|
+
validate as default
|
|
11
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var synckit = require('synckit');
|
|
4
|
+
var getCss = require('./get-css.cjs');
|
|
5
|
+
var cssValidator = require('@master/css-validator');
|
|
6
|
+
|
|
7
|
+
function runValidate(className, config) {
|
|
8
|
+
const currentCSS = getCss(config);
|
|
9
|
+
return cssValidator.validate(className, {
|
|
10
|
+
css: currentCSS
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
synckit.runAsWorker(runValidate);
|
|
14
|
+
|
|
15
|
+
module.exports = runValidate;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { runAsWorker } from 'synckit';
|
|
2
|
+
import getCSS from './get-css.mjs';
|
|
3
|
+
import { validate } from '@master/css-validator';
|
|
4
|
+
|
|
5
|
+
function runValidate(className, config) {
|
|
6
|
+
const currentCSS = getCSS(config);
|
|
7
|
+
return validate(className, {
|
|
8
|
+
css: currentCSS
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
runAsWorker(runValidate);
|
|
12
|
+
|
|
13
|
+
export { runValidate as default };
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var plugin = require('./plugin.cjs');
|
|
4
|
+
var settings = require('./settings.cjs');
|
|
5
|
+
var recommended = require('./configs/recommended.cjs');
|
|
6
|
+
var flat = require('./configs/flat.cjs');
|
|
7
|
+
|
|
8
|
+
/** @type {import('typescript-eslint').Config} */ var index = {
|
|
9
|
+
...plugin,
|
|
10
|
+
configs: {
|
|
11
|
+
recommended,
|
|
12
|
+
flat
|
|
13
|
+
},
|
|
14
|
+
settings
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
module.exports = index;
|
package/dist/index.d.ts
CHANGED
|
@@ -1 +1,57 @@
|
|
|
1
|
-
|
|
1
|
+
/** @type {import('typescript-eslint').Config} */
|
|
2
|
+
declare const _default: {
|
|
3
|
+
configs: {
|
|
4
|
+
recommended: {
|
|
5
|
+
rules: {
|
|
6
|
+
readonly '@master/css/class-order': "warn";
|
|
7
|
+
readonly '@master/css/class-validation': "error";
|
|
8
|
+
readonly '@master/css/class-collision': "warn";
|
|
9
|
+
};
|
|
10
|
+
parserOptions: {
|
|
11
|
+
readonly ecmaFeatures: {
|
|
12
|
+
readonly jsx: true;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
plugins: string[];
|
|
16
|
+
};
|
|
17
|
+
flat: {
|
|
18
|
+
rules: {
|
|
19
|
+
readonly '@master/css/class-order': "warn";
|
|
20
|
+
readonly '@master/css/class-validation': "error";
|
|
21
|
+
readonly '@master/css/class-collision': "warn";
|
|
22
|
+
};
|
|
23
|
+
parserOptions: {
|
|
24
|
+
readonly ecmaFeatures: {
|
|
25
|
+
readonly jsx: true;
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
plugins: {
|
|
29
|
+
'@master/css': {
|
|
30
|
+
meta: {
|
|
31
|
+
name: string;
|
|
32
|
+
};
|
|
33
|
+
rules: {
|
|
34
|
+
'class-collision': import("@typescript-eslint/utils/ts-eslint").RuleModule<"collisionClass", any[], import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
35
|
+
'class-order': import("@typescript-eslint/utils/ts-eslint").RuleModule<"invalidClassOrder", any[], import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
36
|
+
'class-validation': import("@typescript-eslint/utils/ts-eslint").RuleModule<"invalidClass" | "disallowUnknownClass", any[], import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
settings: {
|
|
43
|
+
calleeMatching: string;
|
|
44
|
+
classMatching: string;
|
|
45
|
+
ignoredKeys: string[];
|
|
46
|
+
config: string;
|
|
47
|
+
};
|
|
48
|
+
meta: {
|
|
49
|
+
name: string;
|
|
50
|
+
};
|
|
51
|
+
rules: {
|
|
52
|
+
'class-collision': import("@typescript-eslint/utils/ts-eslint").RuleModule<"collisionClass", any[], import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
53
|
+
'class-order': import("@typescript-eslint/utils/ts-eslint").RuleModule<"invalidClassOrder", any[], import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
54
|
+
'class-validation': import("@typescript-eslint/utils/ts-eslint").RuleModule<"invalidClass" | "disallowUnknownClass", any[], import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
export default _default;
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1,15 @@
|
|
|
1
|
-
|
|
1
|
+
import plugin from './plugin.mjs';
|
|
2
|
+
import settings from './settings.mjs';
|
|
3
|
+
import recommended from './configs/recommended.mjs';
|
|
4
|
+
import flat from './configs/flat.mjs';
|
|
5
|
+
|
|
6
|
+
/** @type {import('typescript-eslint').Config} */ var index = {
|
|
7
|
+
...plugin,
|
|
8
|
+
configs: {
|
|
9
|
+
recommended,
|
|
10
|
+
flat
|
|
11
|
+
},
|
|
12
|
+
settings
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export { index as default };
|
package/dist/plugin.cjs
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var classCollision = require('./rules/class-collision.cjs');
|
|
4
|
+
var classOrder = require('./rules/class-order.cjs');
|
|
5
|
+
var classValidation = require('./rules/class-validation.cjs');
|
|
6
|
+
|
|
7
|
+
const plugin = {
|
|
8
|
+
meta: {
|
|
9
|
+
name: '@master/eslint-plugin-css'
|
|
10
|
+
},
|
|
11
|
+
rules: {
|
|
12
|
+
'class-collision': classCollision,
|
|
13
|
+
'class-order': classOrder,
|
|
14
|
+
'class-validation': classValidation
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
module.exports = plugin;
|
package/dist/plugin.d.ts
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
declare const plugin: {
|
|
2
|
+
meta: {
|
|
3
|
+
name: string;
|
|
4
|
+
};
|
|
5
|
+
rules: {
|
|
6
|
+
'class-collision': import("@typescript-eslint/utils/ts-eslint").RuleModule<"collisionClass", any[], import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
7
|
+
'class-order': import("@typescript-eslint/utils/ts-eslint").RuleModule<"invalidClassOrder", any[], import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
8
|
+
'class-validation': import("@typescript-eslint/utils/ts-eslint").RuleModule<"invalidClass" | "disallowUnknownClass", any[], import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
3
11
|
export default plugin;
|
package/dist/plugin.mjs
CHANGED
|
@@ -1 +1,16 @@
|
|
|
1
|
-
import
|
|
1
|
+
import classCollision from './rules/class-collision.mjs';
|
|
2
|
+
import classOrder from './rules/class-order.mjs';
|
|
3
|
+
import classValidation from './rules/class-validation.mjs';
|
|
4
|
+
|
|
5
|
+
const plugin = {
|
|
6
|
+
meta: {
|
|
7
|
+
name: '@master/eslint-plugin-css'
|
|
8
|
+
},
|
|
9
|
+
rules: {
|
|
10
|
+
'class-collision': classCollision,
|
|
11
|
+
'class-order': classOrder,
|
|
12
|
+
'class-validation': classValidation
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export { plugin as default };
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var areDeclarationsEqual = require('../utils/are-declarations-equal.cjs');
|
|
4
|
+
var areVendorPrefixSelectorsEqual = require('../utils/are-vendor-prefix-selectors-equal.cjs');
|
|
5
|
+
var defineVisitors = require('../utils/define-visitors.cjs');
|
|
6
|
+
var resolveContext = require('../utils/resolve-context.cjs');
|
|
7
|
+
var findLoc = require('../utils/find-loc.cjs');
|
|
8
|
+
var parseNodeRecursive = require('../utils/parse-node-recursive.cjs');
|
|
9
|
+
var validRules = require('../functions/valid-rules.cjs');
|
|
10
|
+
var createRule = require('../create-rule.cjs');
|
|
11
|
+
|
|
12
|
+
var classCollision = createRule({
|
|
13
|
+
name: 'class-collision-detection',
|
|
14
|
+
meta: {
|
|
15
|
+
type: 'layout',
|
|
16
|
+
docs: {
|
|
17
|
+
description: 'Avoid applying classes with the same CSS declaration',
|
|
18
|
+
recommended: 'recommended'
|
|
19
|
+
},
|
|
20
|
+
messages: {
|
|
21
|
+
collisionClass: '{{message}}'
|
|
22
|
+
},
|
|
23
|
+
fixable: 'code',
|
|
24
|
+
schema: [
|
|
25
|
+
{
|
|
26
|
+
type: 'object',
|
|
27
|
+
properties: {
|
|
28
|
+
calleeMatching: {
|
|
29
|
+
type: 'string'
|
|
30
|
+
},
|
|
31
|
+
classMatching: {
|
|
32
|
+
type: 'string'
|
|
33
|
+
},
|
|
34
|
+
ignoredKeys: {
|
|
35
|
+
type: 'array',
|
|
36
|
+
items: {
|
|
37
|
+
type: 'string',
|
|
38
|
+
minLength: 0
|
|
39
|
+
},
|
|
40
|
+
uniqueItems: true
|
|
41
|
+
},
|
|
42
|
+
config: {
|
|
43
|
+
type: [
|
|
44
|
+
'string',
|
|
45
|
+
'object'
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
]
|
|
51
|
+
},
|
|
52
|
+
defaultOptions: [],
|
|
53
|
+
create (context) {
|
|
54
|
+
const { options, settings } = resolveContext(context);
|
|
55
|
+
const visitNode = (node, arg = null)=>{
|
|
56
|
+
parseNodeRecursive.parseNodeRecursive(node, arg, (classNames, node, originalClassNamesValue, start, end)=>{
|
|
57
|
+
const sourceCode = context.sourceCode;
|
|
58
|
+
const sourceCodeLines = sourceCode.lines;
|
|
59
|
+
const nodeStartLine = node.loc.start.line;
|
|
60
|
+
const nodeEndLine = node.loc.end.line;
|
|
61
|
+
const ruleOfClass = validRules(classNames, settings.config);
|
|
62
|
+
for(let i = 0; i < classNames.length; i++){
|
|
63
|
+
const className = classNames[i];
|
|
64
|
+
const rule = ruleOfClass[className];
|
|
65
|
+
const conflicts = [];
|
|
66
|
+
if (rule) {
|
|
67
|
+
for(let j = 0; j < classNames.length; j++){
|
|
68
|
+
const compareClassName = classNames[j];
|
|
69
|
+
const compareRule = ruleOfClass[compareClassName];
|
|
70
|
+
if (i !== j && compareRule && areDeclarationsEqual(rule.declarations, compareRule.declarations) && areVendorPrefixSelectorsEqual(rule.vendorPrefixSelectors, compareRule.vendorPrefixSelectors) && rule.stateToken === compareRule.stateToken) {
|
|
71
|
+
conflicts.push(compareClassName);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (conflicts.length > 0) {
|
|
76
|
+
const conflictClassNamesMsg = conflicts.map((x)=>`"${x}"`).join(' and ');
|
|
77
|
+
let fixClassNames = originalClassNamesValue;
|
|
78
|
+
for (const conflictClassName of conflicts){
|
|
79
|
+
const regexSafe = conflictClassName.replace(/(\\|\.|\(|\)|\[|\]|\{|\}|\+|\*|\?|\^|\$|\||\/)/g, '\\$1');
|
|
80
|
+
fixClassNames = fixClassNames.replace(new RegExp(`\\s+${regexSafe}|${regexSafe}\\s+`), '');
|
|
81
|
+
}
|
|
82
|
+
context.report({
|
|
83
|
+
loc: findLoc(className, sourceCodeLines, nodeStartLine, nodeEndLine),
|
|
84
|
+
messageId: 'collisionClass',
|
|
85
|
+
data: {
|
|
86
|
+
message: `"${className}" applies the same CSS declarations as ${conflictClassNamesMsg}.`
|
|
87
|
+
},
|
|
88
|
+
fix: function(fixer) {
|
|
89
|
+
return fixer.replaceTextRange([
|
|
90
|
+
start,
|
|
91
|
+
end
|
|
92
|
+
], fixClassNames);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}, false, false, settings.ignoredKeys, context);
|
|
98
|
+
};
|
|
99
|
+
return defineVisitors({
|
|
100
|
+
context,
|
|
101
|
+
settings,
|
|
102
|
+
options
|
|
103
|
+
}, visitNode);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
module.exports = classCollision;
|