tailwind-canonical 0.2.2 → 0.4.0
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 +58 -4
- package/dist/cli/cli.d.ts +33 -0
- package/dist/cli/cli.d.ts.map +1 -0
- package/dist/cli/cli.js +416 -0
- package/dist/cli/cli.js.map +1 -0
- package/dist/cli/index.js +4 -315
- package/dist/cli/index.js.map +1 -1
- package/dist/core/analyzer.d.ts +2 -1
- package/dist/core/analyzer.d.ts.map +1 -1
- package/dist/core/analyzer.js +8 -14
- package/dist/core/analyzer.js.map +1 -1
- package/dist/core/class-strings.d.ts +6 -1
- package/dist/core/class-strings.d.ts.map +1 -1
- package/dist/core/class-strings.js +19 -8
- package/dist/core/class-strings.js.map +1 -1
- package/dist/core/config.d.ts +2 -1
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +20 -11
- package/dist/core/config.js.map +1 -1
- package/dist/core/consistency.d.ts +6 -1
- package/dist/core/consistency.d.ts.map +1 -1
- package/dist/core/consistency.js +38 -101
- package/dist/core/consistency.js.map +1 -1
- package/dist/core/deduplicator.d.ts +5 -1
- package/dist/core/deduplicator.d.ts.map +1 -1
- package/dist/core/deduplicator.js +26 -17
- package/dist/core/deduplicator.js.map +1 -1
- package/dist/core/fixer.d.ts +5 -1
- package/dist/core/fixer.d.ts.map +1 -1
- package/dist/core/fixer.js +8 -10
- package/dist/core/fixer.js.map +1 -1
- package/dist/core/lexicon.d.ts +16 -0
- package/dist/core/lexicon.d.ts.map +1 -0
- package/dist/core/lexicon.js +133 -0
- package/dist/core/lexicon.js.map +1 -0
- package/dist/core/merger.d.ts +5 -1
- package/dist/core/merger.d.ts.map +1 -1
- package/dist/core/merger.js +7 -8
- package/dist/core/merger.js.map +1 -1
- package/dist/core/rules.d.ts +3 -0
- package/dist/core/rules.d.ts.map +1 -1
- package/dist/core/rules.js +15 -1
- package/dist/core/rules.js.map +1 -1
- package/dist/core/scanner.d.ts +5 -2
- package/dist/core/scanner.d.ts.map +1 -1
- package/dist/core/scanner.js +12 -80
- package/dist/core/scanner.js.map +1 -1
- package/dist/core/sorter.d.ts +5 -1
- package/dist/core/sorter.d.ts.map +1 -1
- package/dist/core/sorter.js +7 -7
- package/dist/core/sorter.js.map +1 -1
- package/dist/core/suppressions.d.ts +8 -0
- package/dist/core/suppressions.d.ts.map +1 -0
- package/dist/core/suppressions.js +44 -0
- package/dist/core/suppressions.js.map +1 -0
- package/dist/core/typos.d.ts +14 -0
- package/dist/core/typos.d.ts.map +1 -0
- package/dist/core/typos.js +71 -0
- package/dist/core/typos.js.map +1 -0
- package/dist/eslint/plugin.d.ts +3 -74
- package/dist/eslint/plugin.d.ts.map +1 -1
- package/dist/eslint/plugin.js +30 -16
- package/dist/eslint/plugin.js.map +1 -1
- package/dist/index.d.ts +5 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -3
- package/dist/index.js.map +1 -1
- package/dist/io/analyzer.d.ts +4 -0
- package/dist/io/analyzer.d.ts.map +1 -0
- package/dist/io/analyzer.js +7 -0
- package/dist/io/analyzer.js.map +1 -0
- package/dist/io/config.d.ts +3 -0
- package/dist/io/config.d.ts.map +1 -0
- package/dist/io/config.js +12 -0
- package/dist/io/config.js.map +1 -0
- package/dist/io/consistency.d.ts +4 -0
- package/dist/io/consistency.d.ts.map +1 -0
- package/dist/io/consistency.js +21 -0
- package/dist/io/consistency.js.map +1 -0
- package/dist/io/deduplicator.d.ts +3 -0
- package/dist/io/deduplicator.d.ts.map +1 -0
- package/dist/io/deduplicator.js +10 -0
- package/dist/io/deduplicator.js.map +1 -0
- package/dist/io/fixer.d.ts +3 -0
- package/dist/io/fixer.d.ts.map +1 -0
- package/dist/io/fixer.js +10 -0
- package/dist/io/fixer.js.map +1 -0
- package/dist/io/merger.d.ts +3 -0
- package/dist/io/merger.d.ts.map +1 -0
- package/dist/io/merger.js +11 -0
- package/dist/io/merger.js.map +1 -0
- package/dist/io/scanner.d.ts +4 -0
- package/dist/io/scanner.d.ts.map +1 -0
- package/dist/io/scanner.js +78 -0
- package/dist/io/scanner.js.map +1 -0
- package/dist/io/sorter.d.ts +4 -0
- package/dist/io/sorter.d.ts.map +1 -0
- package/dist/io/sorter.js +10 -0
- package/dist/io/sorter.js.map +1 -0
- package/dist/io/typos.d.ts +4 -0
- package/dist/io/typos.d.ts.map +1 -0
- package/dist/io/typos.js +7 -0
- package/dist/io/typos.js.map +1 -0
- package/package.json +9 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lexicon.js","sourceRoot":"","sources":["../../src/core/lexicon.ts"],"names":[],"mappings":"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"}
|
package/dist/core/merger.d.ts
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
1
|
import { type ClassStringOpts } from './class-strings.js';
|
|
2
|
-
export declare function
|
|
2
|
+
export declare function mergeContent(content: string, twMerge: (classes: string) => string, opts?: ClassStringOpts): {
|
|
3
|
+
result: string;
|
|
4
|
+
count: number;
|
|
5
|
+
};
|
|
6
|
+
export { mergeFile } from '../io/merger.js';
|
|
3
7
|
//# sourceMappingURL=merger.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merger.d.ts","sourceRoot":"","sources":["../../src/core/merger.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"merger.d.ts","sourceRoot":"","sources":["../../src/core/merger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAuB,MAAM,oBAAoB,CAAC;AAG/E,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,EACpC,IAAI,GAAE,eAAoB,GACzB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAKnC;AAED,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/core/merger.js
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { readFileSync, writeFileSync } from 'node:fs';
|
|
2
1
|
import { replaceClassStrings } from './class-strings.js';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
return count;
|
|
2
|
+
import { makeLineSuppressor } from './suppressions.js';
|
|
3
|
+
export function mergeContent(content, twMerge, opts = {}) {
|
|
4
|
+
return replaceClassStrings(content, twMerge, {
|
|
5
|
+
...opts,
|
|
6
|
+
isSuppressed: makeLineSuppressor(content),
|
|
7
|
+
});
|
|
10
8
|
}
|
|
9
|
+
export { mergeFile } from '../io/merger.js';
|
|
11
10
|
//# sourceMappingURL=merger.js.map
|
package/dist/core/merger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merger.js","sourceRoot":"","sources":["../../src/core/merger.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"merger.js","sourceRoot":"","sources":["../../src/core/merger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,UAAU,YAAY,CAC1B,OAAe,EACf,OAAoC,EACpC,OAAwB,EAAE;IAE1B,OAAO,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE;QAC3C,GAAG,IAAI;QACP,YAAY,EAAE,kBAAkB,CAAC,OAAO,CAAC;KAC1C,CAAC,CAAC;AACL,CAAC;AAED,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/core/rules.d.ts
CHANGED
|
@@ -11,6 +11,9 @@ export type Config = {
|
|
|
11
11
|
functionNames?: string[];
|
|
12
12
|
attributeNames?: string[];
|
|
13
13
|
sortOrder?: SortCategory[];
|
|
14
|
+
extraColorFamilies?: Record<string, string>;
|
|
15
|
+
extraScaleProperties?: string[];
|
|
16
|
+
extraColors?: string[];
|
|
14
17
|
};
|
|
15
18
|
export declare function suggestCanonical(cls: string, config?: Config): Suggestion | null;
|
|
16
19
|
//# sourceMappingURL=rules.d.ts.map
|
package/dist/core/rules.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/core/rules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,OAAO,CAAC;CACxB,CAAC;AAsHF,MAAM,MAAM,MAAM,GAAG;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/core/rules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,OAAO,CAAC;CACxB,CAAC;AAsHF,MAAM,MAAM,MAAM,GAAG;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC;AAcF,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,MAAW,GAClB,UAAU,GAAG,IAAI,CA4HnB"}
|
package/dist/core/rules.js
CHANGED
|
@@ -104,7 +104,17 @@ const OPACITY_SCALE = new Set([
|
|
|
104
104
|
function remToPx(rem) {
|
|
105
105
|
return Math.round(rem * 16);
|
|
106
106
|
}
|
|
107
|
+
function isIgnored(cls, patterns) {
|
|
108
|
+
if (!patterns)
|
|
109
|
+
return false;
|
|
110
|
+
return patterns.some((re) => {
|
|
111
|
+
re.lastIndex = 0;
|
|
112
|
+
return re.test(cls);
|
|
113
|
+
});
|
|
114
|
+
}
|
|
107
115
|
export function suggestCanonical(cls, config = {}) {
|
|
116
|
+
if (isIgnored(cls, config.ignorePatterns))
|
|
117
|
+
return null;
|
|
108
118
|
const textTokens = { ...TEXT_SIZE_MAP, ...config.customTextTokens };
|
|
109
119
|
const spacingTokens = config.customSpacingTokens ?? {};
|
|
110
120
|
// text-[Npx]
|
|
@@ -194,7 +204,11 @@ export function suggestCanonical(cls, config = {}) {
|
|
|
194
204
|
const opacityMatch = cls.match(/^opacity-\[(\d+(?:\.\d+)?)\]$/);
|
|
195
205
|
if (opacityMatch) {
|
|
196
206
|
const raw = parseFloat(opacityMatch[1]);
|
|
197
|
-
|
|
207
|
+
// CSS opacity is a 0..1 fraction; a bare value > 1 clamps to 1 and is not
|
|
208
|
+
// equivalent to opacity-<N> (a percentage), so leave it untouched.
|
|
209
|
+
if (raw > 1)
|
|
210
|
+
return null;
|
|
211
|
+
const value = Math.round(raw * 100);
|
|
198
212
|
if (!OPACITY_SCALE.has(value))
|
|
199
213
|
return null;
|
|
200
214
|
return {
|
package/dist/core/rules.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/core/rules.ts"],"names":[],"mappings":"AAQA,MAAM,aAAa,GAA2B;IAC5C,CAAC,EAAE,KAAK;IACR,CAAC,EAAE,KAAK;IACR,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,IAAI;IACR,EAAE,EAAE,IAAI;IACR,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,IAAI;IACR,EAAE,EAAE,IAAI;IACR,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,KAAK;CACV,CAAC;AAEF,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAE/E,MAAM,WAAW,GAA2B;IAC1C,CAAC,EAAE,IAAI;IACP,CAAC,EAAE,IAAI;IACP,CAAC,EAAE,IAAI;IACP,CAAC,EAAE,IAAI;IACP,EAAE,EAAE,IAAI;IACR,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,KAAK;CACV,CAAC;AAEF,MAAM,YAAY,GAA2B;IAC3C,IAAI,EAAE,KAAK;IACX,WAAW,EAAE,KAAK;IAClB,OAAO,EAAE,KAAK;IACd,WAAW,EAAE,KAAK;IAClB,OAAO,EAAE,KAAK;IACd,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,KAAK;IACX,WAAW,EAAE,KAAK;IAClB,OAAO,EAAE,KAAK;IACd,WAAW,EAAE,KAAK;IAClB,OAAO,EAAE,KAAK;IACd,UAAU,EAAE,MAAM;IAClB,MAAM,EAAE,MAAM;IACd,WAAW,EAAE,OAAO;IACpB,OAAO,EAAE,OAAO;CACjB,CAAC;AAEF,MAAM,iBAAiB,GAAG;IACxB,GAAG;IACH,GAAG;IACH,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,KAAK;IACL,MAAM;IACN,OAAO;IACP,QAAQ;IACR,aAAa;IACb,aAAa;CACd,CAAC;AAEF,MAAM,gBAAgB,GAAG;IACvB,GAAG;IACH,GAAG;IACH,GAAG;IACH,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,GAAG;IACH,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,KAAK;IACL,OAAO;IACP,OAAO;IACP,KAAK;IACL,MAAM;IACN,OAAO;IACP,QAAQ;IACR,OAAO;IACP,MAAM;IACN,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,aAAa;IACb,aAAa;IACb,SAAS;IACT,SAAS;CACV,CAAC;AAEF,MAAM,aAAa,GAAG,IAAI,MAAM,CAC9B,KAAK,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,CACnD,CAAC;AAEF,MAAM,cAAc,GAAG,IAAI,MAAM,CAC/B,KAAK,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,gCAAgC,CAChE,CAAC;AAEF,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;IAC5B,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG;CAC1D,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/core/rules.ts"],"names":[],"mappings":"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"}
|
package/dist/core/scanner.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
export declare const DEFAULT_EXTENSIONS: string[];
|
|
2
|
+
export declare const DEFAULT_IGNORE: string[];
|
|
1
3
|
export type ScanOptions = {
|
|
2
4
|
extensions?: string[];
|
|
3
5
|
ignore?: string[];
|
|
4
6
|
};
|
|
5
|
-
export declare function
|
|
6
|
-
export declare function
|
|
7
|
+
export declare function isGlob(target: string): boolean;
|
|
8
|
+
export declare function globToRegex(pattern: string): RegExp;
|
|
9
|
+
export { resolveTargets, scanFiles } from '../io/scanner.js';
|
|
7
10
|
//# sourceMappingURL=scanner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../src/core/scanner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../src/core/scanner.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,UAO9B,CAAC;AACF,eAAO,MAAM,cAAc,UAO1B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE9C;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAsCnD;AAED,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/core/scanner.js
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
export const DEFAULT_EXTENSIONS = [
|
|
2
|
+
'.tsx',
|
|
3
|
+
'.ts',
|
|
4
|
+
'.jsx',
|
|
5
|
+
'.js',
|
|
6
|
+
'.vue',
|
|
7
|
+
'.svelte',
|
|
8
|
+
];
|
|
9
|
+
export const DEFAULT_IGNORE = [
|
|
6
10
|
'node_modules',
|
|
7
11
|
'.next',
|
|
8
12
|
'dist',
|
|
@@ -10,10 +14,10 @@ const DEFAULT_IGNORE = [
|
|
|
10
14
|
'build',
|
|
11
15
|
'coverage',
|
|
12
16
|
];
|
|
13
|
-
function isGlob(target) {
|
|
17
|
+
export function isGlob(target) {
|
|
14
18
|
return target.includes('*') || target.includes('?') || target.includes('{');
|
|
15
19
|
}
|
|
16
|
-
function globToRegex(pattern) {
|
|
20
|
+
export function globToRegex(pattern) {
|
|
17
21
|
let i = 0;
|
|
18
22
|
const anchored = pattern.startsWith('/') || /^[A-Za-z]:/.test(pattern);
|
|
19
23
|
let re = anchored ? '^' : '(?:^|/)';
|
|
@@ -59,77 +63,5 @@ function globToRegex(pattern) {
|
|
|
59
63
|
}
|
|
60
64
|
return new RegExp(`${re}$`);
|
|
61
65
|
}
|
|
62
|
-
export
|
|
63
|
-
const ignore = options.ignore ?? DEFAULT_IGNORE;
|
|
64
|
-
const extensions = options.extensions ?? DEFAULT_EXTENSIONS;
|
|
65
|
-
const files = [];
|
|
66
|
-
function walk(current) {
|
|
67
|
-
let entries;
|
|
68
|
-
try {
|
|
69
|
-
entries = readdirSync(current, { withFileTypes: true });
|
|
70
|
-
}
|
|
71
|
-
catch {
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
for (const entry of entries) {
|
|
75
|
-
if (ignore.includes(entry.name))
|
|
76
|
-
continue;
|
|
77
|
-
const full = join(current, entry.name);
|
|
78
|
-
if (entry.isDirectory()) {
|
|
79
|
-
walk(full);
|
|
80
|
-
}
|
|
81
|
-
else if (extensions.some((ext) => entry.name.endsWith(ext))) {
|
|
82
|
-
files.push(full);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
const stat = statSync(target);
|
|
87
|
-
if (stat.isFile())
|
|
88
|
-
return extensions.some((ext) => target.endsWith(ext)) ? [target] : [];
|
|
89
|
-
walk(target);
|
|
90
|
-
return files;
|
|
91
|
-
}
|
|
92
|
-
export async function resolveTargets(patterns, options = {}) {
|
|
93
|
-
const ignore = options.ignore ?? DEFAULT_IGNORE;
|
|
94
|
-
const extensions = options.extensions ?? DEFAULT_EXTENSIONS;
|
|
95
|
-
const positive = [];
|
|
96
|
-
const negativeRegexes = [];
|
|
97
|
-
for (const p of patterns) {
|
|
98
|
-
if (p.startsWith('!')) {
|
|
99
|
-
negativeRegexes.push(globToRegex(p.slice(1)));
|
|
100
|
-
}
|
|
101
|
-
else {
|
|
102
|
-
positive.push(p);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
const files = new Set();
|
|
106
|
-
for (const pattern of positive) {
|
|
107
|
-
if (isGlob(pattern)) {
|
|
108
|
-
for await (const f of glob(pattern, {
|
|
109
|
-
exclude: (f) => f
|
|
110
|
-
.replace(/\\/g, '/')
|
|
111
|
-
.split('/')
|
|
112
|
-
.some((s) => ignore.includes(s)),
|
|
113
|
-
})) {
|
|
114
|
-
if (extensions.some((ext) => f.endsWith(ext))) {
|
|
115
|
-
files.add(f);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
else {
|
|
120
|
-
for (const f of scanFiles(pattern, options)) {
|
|
121
|
-
files.add(f);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
if (negativeRegexes.length > 0) {
|
|
126
|
-
for (const f of [...files]) {
|
|
127
|
-
const normalized = f.replace(/\\/g, '/');
|
|
128
|
-
if (negativeRegexes.some((re) => re.test(normalized))) {
|
|
129
|
-
files.delete(f);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
return [...files].sort();
|
|
134
|
-
}
|
|
66
|
+
export { resolveTargets, scanFiles } from '../io/scanner.js';
|
|
135
67
|
//# sourceMappingURL=scanner.js.map
|
package/dist/core/scanner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/core/scanner.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/core/scanner.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,MAAM;IACN,KAAK;IACL,MAAM;IACN,KAAK;IACL,MAAM;IACN,SAAS;CACV,CAAC;AACF,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,cAAc;IACd,OAAO;IACP,MAAM;IACN,MAAM;IACN,OAAO;IACP,UAAU;CACX,CAAC;AAOF,MAAM,UAAU,MAAM,CAAC,MAAc;IACnC,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvE,IAAI,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IACpC,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACxC,EAAE,IAAI,IAAI,CAAC;YACX,CAAC,IAAI,CAAC,CAAC;YACP,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG;gBAAE,CAAC,EAAE,CAAC;QAC9B,CAAC;aAAM,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YACrB,EAAE,IAAI,OAAO,CAAC;YACd,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YACrB,EAAE,IAAI,MAAM,CAAC;YACb,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YACrB,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACtC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;gBACjB,EAAE,IAAI,KAAK,CAAC;gBACZ,CAAC,EAAE,CAAC;YACN,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,GAAG,OAAO;qBACjB,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC;qBACnB,KAAK,CAAC,GAAG,CAAC;qBACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC,CAAC;gBACtD,EAAE,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAC9B,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;YAChB,CAAC;QACH,CAAC;aAAM,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACtC,EAAE,IAAI,KAAK,CAAC,EAAE,CAAC;YACf,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,CAAC;YACN,EAAE,IAAI,CAAC,CAAC;YACR,CAAC,EAAE,CAAC;QACN,CAAC;IACH,CAAC;IACD,OAAO,IAAI,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAC9B,CAAC;AAED,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/core/sorter.d.ts
CHANGED
|
@@ -2,5 +2,9 @@ import { type ClassStringOpts } from './class-strings.js';
|
|
|
2
2
|
export type SortCategory = 'layout' | 'position' | 'inset' | 'display' | 'flex-grid' | 'sizing' | 'border' | 'spacing' | 'typography' | 'colors' | 'effects' | 'transitions' | 'transforms' | 'interactivity' | 'accessibility';
|
|
3
3
|
export declare const DEFAULT_SORT_ORDER: SortCategory[];
|
|
4
4
|
export declare function sortClasses(classStr: string, sortOrder?: SortCategory[]): string;
|
|
5
|
-
export declare function
|
|
5
|
+
export declare function sortContent(content: string, opts?: ClassStringOpts, sortOrder?: SortCategory[]): {
|
|
6
|
+
result: string;
|
|
7
|
+
count: number;
|
|
8
|
+
};
|
|
9
|
+
export { sortFile } from '../io/sorter.js';
|
|
6
10
|
//# sourceMappingURL=sorter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sorter.d.ts","sourceRoot":"","sources":["../../src/core/sorter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sorter.d.ts","sourceRoot":"","sources":["../../src/core/sorter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAuB,MAAM,oBAAoB,CAAC;AAkE/E,MAAM,MAAM,YAAY,GACpB,QAAQ,GACR,UAAU,GACV,OAAO,GACP,SAAS,GACT,WAAW,GACX,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,YAAY,GACZ,QAAQ,GACR,SAAS,GACT,aAAa,GACb,YAAY,GACZ,eAAe,GACf,eAAe,CAAC;AAEpB,eAAO,MAAM,kBAAkB,EAAE,YAAY,EAgB5C,CAAC;AA8EF,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,YAAY,EAAE,GACzB,MAAM,CAsBR;AAED,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,eAAoB,EAC1B,SAAS,CAAC,EAAE,YAAY,EAAE,GACzB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAKnC;AAED,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/core/sorter.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { readFileSync, writeFileSync } from 'node:fs';
|
|
2
1
|
import { replaceClassStrings } from './class-strings.js';
|
|
2
|
+
import { makeLineSuppressor } from './suppressions.js';
|
|
3
3
|
const DISPLAY_CLASSES = new Set([
|
|
4
4
|
'block',
|
|
5
5
|
'inline-block',
|
|
@@ -156,11 +156,11 @@ export function sortClasses(classStr, sortOrder) {
|
|
|
156
156
|
.map((x) => x.cls)
|
|
157
157
|
.join(' ');
|
|
158
158
|
}
|
|
159
|
-
export function
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
return count;
|
|
159
|
+
export function sortContent(content, opts = {}, sortOrder) {
|
|
160
|
+
return replaceClassStrings(content, (s) => sortClasses(s, sortOrder), {
|
|
161
|
+
...opts,
|
|
162
|
+
isSuppressed: makeLineSuppressor(content),
|
|
163
|
+
});
|
|
165
164
|
}
|
|
165
|
+
export { sortFile } from '../io/sorter.js';
|
|
166
166
|
//# sourceMappingURL=sorter.js.map
|
package/dist/core/sorter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sorter.js","sourceRoot":"","sources":["../../src/core/sorter.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"sorter.js","sourceRoot":"","sources":["../../src/core/sorter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare function getSuppressedLines(content: string): Set<number>;
|
|
2
|
+
export declare function makeLineSuppressor(content: string): (line: number) => boolean;
|
|
3
|
+
export declare function indexToLineCol(content: string, index: number): {
|
|
4
|
+
line: number;
|
|
5
|
+
col: number;
|
|
6
|
+
};
|
|
7
|
+
export declare function lineAt(content: string, offset: number): number;
|
|
8
|
+
//# sourceMappingURL=suppressions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suppressions.d.ts","sourceRoot":"","sources":["../../src/core/suppressions.ts"],"names":[],"mappings":"AAIA,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAqB/D;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAG7E;AAED,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAW/B;AAED,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAE9D"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
const DISABLE_NEXT_LINE = 'tailwind-canonical-disable-next-line';
|
|
2
|
+
const DISABLE = 'tailwind-canonical-disable';
|
|
3
|
+
const ENABLE = 'tailwind-canonical-enable';
|
|
4
|
+
export function getSuppressedLines(content) {
|
|
5
|
+
const suppressed = new Set();
|
|
6
|
+
const lines = content.split('\n');
|
|
7
|
+
let block = false;
|
|
8
|
+
for (let i = 0; i < lines.length; i++) {
|
|
9
|
+
const line = lines[i];
|
|
10
|
+
const lineNo = i + 1;
|
|
11
|
+
if (line.includes(DISABLE_NEXT_LINE)) {
|
|
12
|
+
suppressed.add(lineNo + 1);
|
|
13
|
+
}
|
|
14
|
+
else if (line.includes(ENABLE)) {
|
|
15
|
+
block = false;
|
|
16
|
+
}
|
|
17
|
+
else if (line.includes(DISABLE)) {
|
|
18
|
+
block = true;
|
|
19
|
+
}
|
|
20
|
+
if (block)
|
|
21
|
+
suppressed.add(lineNo);
|
|
22
|
+
}
|
|
23
|
+
return suppressed;
|
|
24
|
+
}
|
|
25
|
+
export function makeLineSuppressor(content) {
|
|
26
|
+
const suppressed = getSuppressedLines(content);
|
|
27
|
+
return (line) => suppressed.has(line);
|
|
28
|
+
}
|
|
29
|
+
export function indexToLineCol(content, index) {
|
|
30
|
+
let line = 1;
|
|
31
|
+
let lastNewline = -1;
|
|
32
|
+
const end = Math.min(index, content.length);
|
|
33
|
+
for (let i = 0; i < end; i++) {
|
|
34
|
+
if (content[i] === '\n') {
|
|
35
|
+
line++;
|
|
36
|
+
lastNewline = i;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return { line, col: index - lastNewline };
|
|
40
|
+
}
|
|
41
|
+
export function lineAt(content, offset) {
|
|
42
|
+
return indexToLineCol(content, offset).line;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=suppressions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suppressions.js","sourceRoot":"","sources":["../../src/core/suppressions.ts"],"names":[],"mappings":"AAAA,MAAM,iBAAiB,GAAG,sCAAsC,CAAC;AACjE,MAAM,OAAO,GAAG,4BAA4B,CAAC;AAC7C,MAAM,MAAM,GAAG,2BAA2B,CAAC;AAE3C,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,KAAK,GAAG,KAAK,CAAC;IAElB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;QAErB,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACrC,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC7B,CAAC;aAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,KAAK,GAAG,KAAK,CAAC;QAChB,CAAC;aAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,KAAK,GAAG,IAAI,CAAC;QACf,CAAC;QAED,IAAI,KAAK;YAAE,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC/C,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,OAAe,EACf,KAAa;IAEb,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,WAAW,GAAG,CAAC,CAAC,CAAC;IACrB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACxB,IAAI,EAAE,CAAC;YACP,WAAW,GAAG,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,WAAW,EAAE,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,OAAe,EAAE,MAAc;IACpD,OAAO,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Config } from './rules.js';
|
|
2
|
+
export type TypoFinding = {
|
|
3
|
+
file: string;
|
|
4
|
+
line: number;
|
|
5
|
+
col: number;
|
|
6
|
+
original: string;
|
|
7
|
+
suggestion: string;
|
|
8
|
+
};
|
|
9
|
+
export declare function detectTypo(cls: string, extraColors?: ReadonlySet<string>): {
|
|
10
|
+
suggestion: string;
|
|
11
|
+
} | null;
|
|
12
|
+
export declare function analyzeTyposContent(filePath: string, content: string, config?: Config): TypoFinding[];
|
|
13
|
+
export { analyzeTyposFile } from '../io/typos.js';
|
|
14
|
+
//# sourceMappingURL=typos.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typos.d.ts","sourceRoot":"","sources":["../../src/core/typos.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGzC,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AA4BF,wBAAgB,UAAU,CACxB,GAAG,EAAE,MAAM,EACX,WAAW,GAAE,WAAW,CAAC,MAAM,CAAa,GAC3C;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAe/B;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,MAAW,GAClB,WAAW,EAAE,CAwBf;AAED,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { extractClassStrings, SINGLE_CLASS_REGEX, toClassStringOpts, } from './class-strings.js';
|
|
2
|
+
import { parseColorClass, TAILWIND_COLORS } from './lexicon.js';
|
|
3
|
+
import { getSuppressedLines, indexToLineCol } from './suppressions.js';
|
|
4
|
+
const MIN_COLOR_LEN = 3;
|
|
5
|
+
function levenshtein(a, b) {
|
|
6
|
+
const m = a.length;
|
|
7
|
+
const n = b.length;
|
|
8
|
+
let prev = Array.from({ length: n + 1 }, (_, i) => i);
|
|
9
|
+
for (let i = 1; i <= m; i++) {
|
|
10
|
+
const curr = [i];
|
|
11
|
+
for (let j = 1; j <= n; j++) {
|
|
12
|
+
const cost = a[i - 1] === b[j - 1] ? 0 : 1;
|
|
13
|
+
curr[j] = Math.min(curr[j - 1] + 1, prev[j] + 1, prev[j - 1] + cost);
|
|
14
|
+
}
|
|
15
|
+
prev = curr;
|
|
16
|
+
}
|
|
17
|
+
return prev[n];
|
|
18
|
+
}
|
|
19
|
+
function nearestColor(name) {
|
|
20
|
+
if (name.length < MIN_COLOR_LEN)
|
|
21
|
+
return null;
|
|
22
|
+
for (const color of TAILWIND_COLORS) {
|
|
23
|
+
if (Math.abs(color.length - name.length) > 1)
|
|
24
|
+
continue;
|
|
25
|
+
if (levenshtein(name, color) === 1)
|
|
26
|
+
return color;
|
|
27
|
+
}
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
export function detectTypo(cls, extraColors = new Set()) {
|
|
31
|
+
const colon = cls.lastIndexOf(':');
|
|
32
|
+
const prefix = colon === -1 ? '' : cls.slice(0, colon + 1);
|
|
33
|
+
const parsed = parseColorClass(cls);
|
|
34
|
+
if (!parsed)
|
|
35
|
+
return null;
|
|
36
|
+
const { property, color, shade } = parsed;
|
|
37
|
+
if (TAILWIND_COLORS.has(color) || extraColors.has(color))
|
|
38
|
+
return null;
|
|
39
|
+
const near = nearestColor(color);
|
|
40
|
+
if (!near)
|
|
41
|
+
return null;
|
|
42
|
+
const suggestion = `${prefix}${property}-${near}${shade ? `-${shade}` : ''}`;
|
|
43
|
+
return { suggestion };
|
|
44
|
+
}
|
|
45
|
+
export function analyzeTyposContent(filePath, content, config = {}) {
|
|
46
|
+
const findings = [];
|
|
47
|
+
const suppressed = getSuppressedLines(content);
|
|
48
|
+
const opts = toClassStringOpts(config);
|
|
49
|
+
const extraColors = new Set(config.extraColors ?? []);
|
|
50
|
+
for (const { value, start } of extractClassStrings(content, opts)) {
|
|
51
|
+
for (const clsMatch of value.matchAll(SINGLE_CLASS_REGEX)) {
|
|
52
|
+
const typo = detectTypo(clsMatch[0], extraColors);
|
|
53
|
+
if (!typo)
|
|
54
|
+
continue;
|
|
55
|
+
const index = start + (clsMatch.index ?? 0);
|
|
56
|
+
const { line, col } = indexToLineCol(content, index);
|
|
57
|
+
if (suppressed.has(line))
|
|
58
|
+
continue;
|
|
59
|
+
findings.push({
|
|
60
|
+
file: filePath,
|
|
61
|
+
line,
|
|
62
|
+
col,
|
|
63
|
+
original: clsMatch[0],
|
|
64
|
+
suggestion: typo.suggestion,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return findings;
|
|
69
|
+
}
|
|
70
|
+
export { analyzeTyposFile } from '../io/typos.js';
|
|
71
|
+
//# sourceMappingURL=typos.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typos.js","sourceRoot":"","sources":["../../src/core/typos.ts"],"names":[],"mappings":"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"}
|
package/dist/eslint/plugin.d.ts
CHANGED
|
@@ -1,79 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
type RuleContext = {
|
|
3
|
-
options: [Config?];
|
|
4
|
-
report: (descriptor: {
|
|
5
|
-
node: unknown;
|
|
6
|
-
message: string;
|
|
7
|
-
fix?: (fixer: {
|
|
8
|
-
replaceText: (node: unknown, text: string) => unknown;
|
|
9
|
-
}) => unknown;
|
|
10
|
-
}) => void;
|
|
11
|
-
};
|
|
1
|
+
import type { Rule } from 'eslint';
|
|
12
2
|
declare const _default: {
|
|
13
3
|
rules: {
|
|
14
|
-
'no-arbitrary-canonical':
|
|
15
|
-
|
|
16
|
-
type: "suggestion";
|
|
17
|
-
fixable: "code";
|
|
18
|
-
schema: {
|
|
19
|
-
type: string;
|
|
20
|
-
properties: {
|
|
21
|
-
customTextTokens: {
|
|
22
|
-
type: string;
|
|
23
|
-
};
|
|
24
|
-
customSpacingTokens: {
|
|
25
|
-
type: string;
|
|
26
|
-
};
|
|
27
|
-
};
|
|
28
|
-
additionalProperties: boolean;
|
|
29
|
-
}[];
|
|
30
|
-
messages: {
|
|
31
|
-
useCanonical: string;
|
|
32
|
-
};
|
|
33
|
-
};
|
|
34
|
-
create(context: RuleContext): {
|
|
35
|
-
Literal: (node: {
|
|
36
|
-
value: unknown;
|
|
37
|
-
raw?: string;
|
|
38
|
-
type: string;
|
|
39
|
-
}) => void;
|
|
40
|
-
TemplateLiteral(node: {
|
|
41
|
-
quasis: Array<{
|
|
42
|
-
value: {
|
|
43
|
-
raw: string;
|
|
44
|
-
};
|
|
45
|
-
type: string;
|
|
46
|
-
}>;
|
|
47
|
-
}): void;
|
|
48
|
-
};
|
|
49
|
-
};
|
|
50
|
-
'no-conflicting-classes': {
|
|
51
|
-
meta: {
|
|
52
|
-
type: "suggestion";
|
|
53
|
-
fixable: "code";
|
|
54
|
-
schema: never[];
|
|
55
|
-
messages: {
|
|
56
|
-
conflicting: string;
|
|
57
|
-
};
|
|
58
|
-
};
|
|
59
|
-
create(context: RuleContext & {
|
|
60
|
-
options: [];
|
|
61
|
-
}): {
|
|
62
|
-
Literal: (node: {
|
|
63
|
-
value: unknown;
|
|
64
|
-
raw?: string;
|
|
65
|
-
type: string;
|
|
66
|
-
}) => void;
|
|
67
|
-
TemplateLiteral(node: {
|
|
68
|
-
quasis: Array<{
|
|
69
|
-
value: {
|
|
70
|
-
raw: string;
|
|
71
|
-
};
|
|
72
|
-
type: string;
|
|
73
|
-
}>;
|
|
74
|
-
}): void;
|
|
75
|
-
};
|
|
76
|
-
};
|
|
4
|
+
'no-arbitrary-canonical': Rule.RuleModule;
|
|
5
|
+
'no-conflicting-classes': Rule.RuleModule;
|
|
77
6
|
};
|
|
78
7
|
configs: {
|
|
79
8
|
recommended: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/eslint/plugin.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/eslint/plugin.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;;;;;;;;;;;;;;;AA8HnC,wBAaE"}
|