@master/eslint-plugin-css 2.0.0-rc.2 → 2.0.0-rc.20

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.
Files changed (120) hide show
  1. package/README.md +1 -1
  2. package/dist/configs/config.cjs +16 -0
  3. package/dist/configs/config.mjs +14 -1
  4. package/dist/configs/flat.cjs +13 -0
  5. package/dist/configs/flat.d.ts +10 -1
  6. package/dist/configs/flat.mjs +11 -1
  7. package/dist/configs/recommended.cjs +12 -0
  8. package/dist/configs/recommended.mjs +10 -1
  9. package/dist/create-rule.cjs +7 -0
  10. package/dist/create-rule.d.ts +3 -0
  11. package/dist/create-rule.mjs +5 -0
  12. package/dist/functions/get-css.cjs +16 -0
  13. package/dist/functions/get-css.d.ts +1 -0
  14. package/dist/functions/get-css.mjs +14 -0
  15. package/dist/functions/reorder-valid-classes.cjs +9 -0
  16. package/dist/functions/reorder-valid-classes.d.ts +3 -0
  17. package/dist/functions/reorder-valid-classes.mjs +11 -0
  18. package/dist/functions/reorder-valid-classes.worker.cjs +15 -0
  19. package/dist/functions/reorder-valid-classes.worker.d.ts +1 -0
  20. package/dist/functions/reorder-valid-classes.worker.mjs +13 -0
  21. package/dist/functions/valid-rules.cjs +9 -0
  22. package/dist/functions/valid-rules.d.ts +3 -0
  23. package/dist/functions/valid-rules.mjs +11 -0
  24. package/dist/functions/valid-rules.worker.cjs +24 -0
  25. package/dist/functions/valid-rules.worker.d.ts +6 -0
  26. package/dist/functions/valid-rules.worker.mjs +22 -0
  27. package/dist/functions/validate.cjs +9 -0
  28. package/dist/functions/validate.d.ts +3 -0
  29. package/dist/functions/validate.mjs +11 -0
  30. package/dist/functions/validate.worker.cjs +15 -0
  31. package/dist/functions/validate.worker.d.ts +5 -0
  32. package/dist/functions/validate.worker.mjs +13 -0
  33. package/dist/index.cjs +17 -0
  34. package/dist/index.d.ts +57 -1
  35. package/dist/index.mjs +15 -1
  36. package/dist/plugin.cjs +18 -0
  37. package/dist/plugin.d.ts +10 -2
  38. package/dist/plugin.mjs +16 -1
  39. package/dist/rules/class-collision.cjs +107 -0
  40. package/dist/rules/class-collision.d.ts +1 -2
  41. package/dist/rules/class-collision.mjs +105 -1
  42. package/dist/rules/class-order.cjs +198 -0
  43. package/dist/rules/class-order.d.ts +1 -2
  44. package/dist/rules/class-order.mjs +196 -1
  45. package/dist/rules/class-validation.cjs +94 -0
  46. package/dist/rules/class-validation.d.ts +1 -2
  47. package/dist/rules/class-validation.mjs +92 -1
  48. package/dist/settings.cjs +13 -0
  49. package/dist/settings.d.ts +6 -0
  50. package/dist/settings.mjs +11 -1
  51. package/dist/utils/are-declarations-equal.cjs +21 -0
  52. package/dist/utils/are-declarations-equal.mjs +19 -1
  53. package/dist/utils/are-vendor-prefix-selectors-equal.cjs +14 -0
  54. package/dist/utils/are-vendor-prefix-selectors-equal.d.ts +1 -0
  55. package/dist/utils/are-vendor-prefix-selectors-equal.mjs +12 -0
  56. package/dist/utils/define-visitors.cjs +76 -0
  57. package/dist/utils/define-visitors.d.ts +8 -5
  58. package/dist/utils/define-visitors.mjs +74 -1
  59. package/dist/utils/extract-classnames-from-value.cjs +34 -0
  60. package/dist/utils/extract-classnames-from-value.mjs +32 -1
  61. package/dist/utils/extract-range-from-node.cjs +18 -0
  62. package/dist/utils/extract-range-from-node.mjs +16 -1
  63. package/dist/utils/extract-value-from-node.cjs +23 -0
  64. package/dist/utils/extract-value-from-node.mjs +21 -1
  65. package/dist/utils/find-loc.cjs +40 -0
  66. package/dist/utils/find-loc.mjs +38 -1
  67. package/dist/utils/get-template-element-body.cjs +12 -0
  68. package/dist/utils/get-template-element-body.mjs +10 -1
  69. package/dist/utils/get-template-element-prefix.cjs +11 -0
  70. package/dist/utils/get-template-element-prefix.mjs +9 -1
  71. package/dist/utils/get-template-element-suffix.cjs +10 -0
  72. package/dist/utils/get-template-element-suffix.mjs +8 -1
  73. package/dist/utils/parse-node-recursive.cjs +122 -0
  74. package/dist/utils/parse-node-recursive.d.ts +2 -2
  75. package/dist/utils/parse-node-recursive.mjs +120 -1
  76. package/dist/utils/resolve-context.cjs +13 -0
  77. package/dist/utils/resolve-context.d.ts +8 -2
  78. package/dist/utils/resolve-context.mjs +11 -1
  79. package/package.json +1 -1
  80. package/dist/configs/config.js +0 -1
  81. package/dist/configs/flat.js +0 -1
  82. package/dist/configs/recommended.js +0 -1
  83. package/dist/index.js +0 -1
  84. package/dist/plugin.js +0 -1
  85. package/dist/rules/class-collision.js +0 -1
  86. package/dist/rules/class-order.js +0 -1
  87. package/dist/rules/class-validation.js +0 -1
  88. package/dist/settings.js +0 -1
  89. package/dist/utils/are-declarations-equal.js +0 -1
  90. package/dist/utils/define-visitors.js +0 -1
  91. package/dist/utils/extract-classnames-from-value.js +0 -1
  92. package/dist/utils/extract-range-from-node.js +0 -1
  93. package/dist/utils/extract-value-from-node.js +0 -1
  94. package/dist/utils/find-loc.js +0 -1
  95. package/dist/utils/get-mastercss.d.ts +0 -2
  96. package/dist/utils/get-mastercss.js +0 -1
  97. package/dist/utils/get-mastercss.mjs +0 -1
  98. package/dist/utils/get-template-element-body.js +0 -1
  99. package/dist/utils/get-template-element-prefix.js +0 -1
  100. package/dist/utils/get-template-element-suffix.js +0 -1
  101. package/dist/utils/parse-node-recursive.js +0 -1
  102. package/dist/utils/reorder-valid-classes-action.d.ts +0 -3
  103. package/dist/utils/reorder-valid-classes-action.js +0 -1
  104. package/dist/utils/reorder-valid-classes-action.mjs +0 -1
  105. package/dist/utils/resolve-context.js +0 -1
  106. package/dist/utils/valid-rules-action.d.ts +0 -3
  107. package/dist/utils/valid-rules-action.js +0 -1
  108. package/dist/utils/valid-rules-action.mjs +0 -1
  109. package/dist/utils/validate-action.d.ts +0 -3
  110. package/dist/utils/validate-action.js +0 -1
  111. package/dist/utils/validate-action.mjs +0 -1
  112. package/dist/utils/workers/reorder-valid-classes.d.ts +0 -2
  113. package/dist/utils/workers/reorder-valid-classes.js +0 -1
  114. package/dist/utils/workers/reorder-valid-classes.mjs +0 -1
  115. package/dist/utils/workers/valid-rules.d.ts +0 -2
  116. package/dist/utils/workers/valid-rules.js +0 -1
  117. package/dist/utils/workers/valid-rules.mjs +0 -1
  118. package/dist/utils/workers/validate.d.ts +0 -5
  119. package/dist/utils/workers/validate.js +0 -1
  120. 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/1aron/repo/actions/workflows/release.yml">
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;
@@ -1 +1,14 @@
1
- const s={rules:{"@master/css/class-order":"warn","@master/css/class-validation":"error","@master/css/class-collision":"warn"},parserOptions:{ecmaFeatures:{jsx:!0}}};var r=s;export{r as default};
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 };
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ var plugin = require('../plugin.cjs');
4
+ var config = require('./config.cjs');
5
+
6
+ var flat = {
7
+ plugins: {
8
+ '@master/css': plugin
9
+ },
10
+ ...config
11
+ };
12
+
13
+ module.exports = flat;
@@ -10,7 +10,16 @@ declare const _default: {
10
10
  };
11
11
  };
12
12
  plugins: {
13
- '@master/css': import("eslint").ESLint.Plugin;
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;
@@ -1 +1,11 @@
1
- import o from"../plugin.mjs";import r from"./config.mjs";var p={plugins:{"@master/css":o},...r};export{p as default};
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,12 @@
1
+ 'use strict';
2
+
3
+ var config = require('./config.cjs');
4
+
5
+ var recommended = {
6
+ plugins: [
7
+ '@master/css'
8
+ ],
9
+ ...config
10
+ };
11
+
12
+ module.exports = recommended;
@@ -1 +1,10 @@
1
- import o from"./config.mjs";var s={plugins:["@master/css"],...o};export{s as default};
1
+ import config from './config.mjs';
2
+
3
+ var recommended = {
4
+ plugins: [
5
+ '@master/css'
6
+ ],
7
+ ...config
8
+ };
9
+
10
+ export { recommended as default };
@@ -0,0 +1,7 @@
1
+ 'use strict';
2
+
3
+ var utils = require('@typescript-eslint/utils');
4
+
5
+ var createRule = utils.ESLintUtils.RuleCreator((name)=>'https://rc.css.master.co/docs/code-linting#' + name);
6
+
7
+ module.exports = createRule;
@@ -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,5 @@
1
+ import { ESLintUtils } from '@typescript-eslint/utils';
2
+
3
+ var createRule = ESLintUtils.RuleCreator((name)=>'https://rc.css.master.co/docs/code-linting#' + name);
4
+
5
+ export { createRule as 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,3 @@
1
+ import runReorderValidClasses from './reorder-valid-classes.worker';
2
+ declare const _default: typeof runReorderValidClasses;
3
+ export default _default;
@@ -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,3 @@
1
+ import runValidRules from './valid-rules.worker';
2
+ declare const _default: typeof runValidRules;
3
+ export default _default;
@@ -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,3 @@
1
+ import runValidate from './validate.worker';
2
+ declare const _default: typeof runValidate;
3
+ export default _default;
@@ -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,5 @@
1
+ import { SyntaxError } from '@master/css-validator';
2
+ export default function runValidate(className: string, config: string | object): {
3
+ isMasterCSS: boolean;
4
+ errors: SyntaxError[];
5
+ };
@@ -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
- export {};
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
- var i=(r,o)=>()=>(o||r((o={exports:{}}).exports,o),o.exports);import t from"./plugin.mjs";import f from"./settings.mjs";import p from"./configs/recommended.mjs";import e from"./configs/flat.mjs";var n=i((x,m)=>{m.exports={...t,configs:{recommended:p,flat:e},settings:f}});export default n();
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 };
@@ -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
- import type { ESLint } from 'eslint';
2
- declare const plugin: ESLint.Plugin;
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 s from"./rules/class-collision.mjs";import i from"./rules/class-order.mjs";import l from"./rules/class-validation.mjs";const o={meta:{name:"@master/eslint-plugin-css"},rules:{"class-collision":s,"class-order":i,"class-validation":l}};var n=o;export{n as default};
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;