@master/css-tooling 0.0.0-site.1793659883.g69c9aebcf628 → 0.0.0-stage

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 (122) hide show
  1. package/README.md +2 -57
  2. package/package.json +5 -126
  3. package/dist/browser.d.ts +0 -2
  4. package/dist/browser.js +0 -1
  5. package/dist/css-tree-version.d.ts +0 -2
  6. package/dist/css-tree-version.js +0 -4
  7. package/dist/css.d.ts +0 -32
  8. package/dist/css.js +0 -120
  9. package/dist/immutable.d.ts +0 -2
  10. package/dist/immutable.js +0 -7
  11. package/dist/index.d.ts +0 -3
  12. package/dist/index.js +0 -1
  13. package/dist/language/binding-session.d.ts +0 -6
  14. package/dist/language/binding-session.js +0 -8
  15. package/dist/language/browser.d.ts +0 -10
  16. package/dist/language/browser.js +0 -12
  17. package/dist/language/common.d.ts +0 -12
  18. package/dist/language/common.js +0 -55
  19. package/dist/language/contracts.d.ts +0 -197
  20. package/dist/language/contracts.js +0 -1
  21. package/dist/language/index.d.ts +0 -29
  22. package/dist/language/index.js +0 -39
  23. package/dist/language/master-css.d.ts +0 -13
  24. package/dist/language/master-css.js +0 -35
  25. package/dist/language/node.d.ts +0 -21
  26. package/dist/language/node.js +0 -36
  27. package/dist/language/semantic/scopes.d.ts +0 -55
  28. package/dist/language/semantic/scopes.js +0 -73
  29. package/dist/language/semantic/types.d.ts +0 -11
  30. package/dist/language/semantic/types.js +0 -1
  31. package/dist/language/session.d.ts +0 -37
  32. package/dist/language/session.js +0 -87
  33. package/dist/language/settings.d.ts +0 -13
  34. package/dist/language/settings.js +0 -19
  35. package/dist/language/utils/mdn-css-data.d.ts +0 -5
  36. package/dist/language/utils/mdn-css-data.js +0 -63
  37. package/dist/lexer/browser.d.ts +0 -6
  38. package/dist/lexer/browser.js +0 -11
  39. package/dist/lexer/contracts.d.ts +0 -41
  40. package/dist/lexer/contracts.js +0 -1
  41. package/dist/lexer/index.d.ts +0 -8
  42. package/dist/lexer/index.js +0 -11
  43. package/dist/lexer/node.d.ts +0 -7
  44. package/dist/lexer/node.js +0 -11
  45. package/dist/lexer/session.d.ts +0 -17
  46. package/dist/lexer/session.js +0 -25
  47. package/dist/lint/analysis.d.ts +0 -90
  48. package/dist/lint/analysis.js +0 -1
  49. package/dist/lint/binding-session.d.ts +0 -21
  50. package/dist/lint/binding-session.js +0 -97
  51. package/dist/lint/constants.d.ts +0 -7
  52. package/dist/lint/constants.js +0 -18
  53. package/dist/lint/contracts.d.ts +0 -17
  54. package/dist/lint/contracts.js +0 -6
  55. package/dist/lint/diagnostic-format.d.ts +0 -5
  56. package/dist/lint/diagnostic-format.js +0 -15
  57. package/dist/lint/diagnostics.d.ts +0 -42
  58. package/dist/lint/diagnostics.js +0 -1
  59. package/dist/lint/index.d.ts +0 -21
  60. package/dist/lint/index.js +0 -30
  61. package/dist/lint/node.d.ts +0 -6
  62. package/dist/lint/node.js +0 -11
  63. package/dist/lint/rule-signatures.d.ts +0 -23
  64. package/dist/lint/rule-signatures.js +0 -27
  65. package/dist/lint/source.d.ts +0 -70
  66. package/dist/lint/source.js +0 -261
  67. package/dist/math-types.d.ts +0 -11
  68. package/dist/math-types.js +0 -236
  69. package/dist/math-validation.d.ts +0 -7
  70. package/dist/math-validation.js +0 -74
  71. package/dist/node.d.ts +0 -12
  72. package/dist/node.js +0 -32
  73. package/dist/scanner/binding-session.d.ts +0 -29
  74. package/dist/scanner/binding-session.js +0 -37
  75. package/dist/scanner/core.d.ts +0 -130
  76. package/dist/scanner/core.js +0 -480
  77. package/dist/scanner/index.d.ts +0 -3
  78. package/dist/scanner/index.js +0 -3
  79. package/dist/scanner/node.d.ts +0 -5
  80. package/dist/scanner/node.js +0 -4
  81. package/dist/scanner/options/index.d.ts +0 -16
  82. package/dist/scanner/options/index.js +0 -57
  83. package/dist/scanner/source-policy.d.ts +0 -15
  84. package/dist/scanner/source-policy.js +0 -131
  85. package/dist/source/adapters/optional-peer.d.ts +0 -5
  86. package/dist/source/adapters/optional-peer.js +0 -29
  87. package/dist/source/adapters/oxc.d.ts +0 -2
  88. package/dist/source/adapters/oxc.js +0 -6
  89. package/dist/source/adapters/svelte.d.ts +0 -5
  90. package/dist/source/adapters/svelte.js +0 -82
  91. package/dist/source/adapters/types.d.ts +0 -11
  92. package/dist/source/adapters/types.js +0 -9
  93. package/dist/source/adapters/vue.d.ts +0 -5
  94. package/dist/source/adapters/vue.js +0 -50
  95. package/dist/source/browser.d.ts +0 -7
  96. package/dist/source/browser.js +0 -11
  97. package/dist/source/contracts.d.ts +0 -35
  98. package/dist/source/contracts.js +0 -1
  99. package/dist/source/index.d.ts +0 -8
  100. package/dist/source/index.js +0 -11
  101. package/dist/source/native.d.ts +0 -5
  102. package/dist/source/native.js +0 -53
  103. package/dist/source/node.d.ts +0 -7
  104. package/dist/source/node.js +0 -11
  105. package/dist/source/session.d.ts +0 -25
  106. package/dist/source/session.js +0 -37
  107. package/dist/syntax-validation.d.ts +0 -10
  108. package/dist/syntax-validation.js +0 -54
  109. package/dist/tooling-session.d.ts +0 -66
  110. package/dist/tooling-session.js +0 -188
  111. package/dist/validator/binding-session.d.ts +0 -17
  112. package/dist/validator/binding-session.js +0 -29
  113. package/dist/validator/contracts.d.ts +0 -24
  114. package/dist/validator/contracts.js +0 -1
  115. package/dist/validator/index.d.ts +0 -10
  116. package/dist/validator/index.js +0 -13
  117. package/dist/validator/node.d.ts +0 -6
  118. package/dist/validator/node.js +0 -11
  119. package/dist/validator/types/syntax-error.d.ts +0 -22
  120. package/dist/validator/types/syntax-error.js +0 -1
  121. package/dist/value-validation.d.ts +0 -46
  122. package/dist/value-validation.js +0 -162
@@ -1,42 +0,0 @@
1
- import { CanonicalClassNameOptions, RawValuePolicyOptions, RemoteStylingPolicyOptions } from "./contracts.js";
2
- interface MasterCSSClassListEditOptions {
3
- unescape?: string | false;
4
- }
5
- type MasterCSSLintRuleId = 'sort-classes' | 'no-invalid-classes' | 'no-conflicting-classes' | 'prefer-canonical-classes' | 'no-unapproved-raw-values' | 'prefer-component-classes';
6
- type MasterCSSLintDiagnosticSeverity = 'error' | 'warning';
7
- interface MasterCSSLintRange {
8
- start: number;
9
- end: number;
10
- }
11
- interface MasterCSSLintFix {
12
- range: MasterCSSLintRange;
13
- text: string;
14
- scope?: 'class-list' | 'directive';
15
- }
16
- type MasterCSSLintDiagnosticData = Record<string, string | number | boolean | string[] | null | undefined>;
17
- interface MasterCSSLintDiagnostic {
18
- ruleId: MasterCSSLintRuleId;
19
- code: string;
20
- message: string;
21
- severity: MasterCSSLintDiagnosticSeverity;
22
- range: MasterCSSLintRange;
23
- data?: MasterCSSLintDiagnosticData;
24
- fix?: MasterCSSLintFix;
25
- }
26
- interface MasterCSSLintReport {
27
- diagnostics: MasterCSSLintDiagnostic[];
28
- }
29
- interface MasterCSSLintReportOptions extends MasterCSSClassListEditOptions {
30
- severity?: MasterCSSLintDiagnosticSeverity;
31
- }
32
- interface MasterCSSInvalidClassesReportOptions extends MasterCSSLintReportOptions {
33
- disallowUnknownClass?: boolean;
34
- }
35
- interface MasterCSSCanonicalClassesReportOptions extends MasterCSSLintReportOptions, CanonicalClassNameOptions {}
36
- interface MasterCSSUnapprovedRawValueClassesReportOptions extends MasterCSSLintReportOptions, RawValuePolicyOptions {}
37
- interface MasterCSSComponentClassesReportOptions extends MasterCSSLintReportOptions, RemoteStylingPolicyOptions {}
38
- interface MasterCSSClassListLintReportOptions extends MasterCSSInvalidClassesReportOptions, RawValuePolicyOptions, CanonicalClassNameOptions {
39
- rules?: Partial<Record<MasterCSSLintRuleId, boolean>>;
40
- severities?: Partial<Record<MasterCSSLintRuleId, MasterCSSLintDiagnosticSeverity>>;
41
- }
42
- export { MasterCSSCanonicalClassesReportOptions, MasterCSSClassListEditOptions, MasterCSSClassListLintReportOptions, MasterCSSComponentClassesReportOptions, MasterCSSInvalidClassesReportOptions, MasterCSSLintDiagnostic, MasterCSSLintDiagnosticData, MasterCSSLintDiagnosticSeverity, MasterCSSLintFix, MasterCSSLintRange, MasterCSSLintReport, MasterCSSLintReportOptions, MasterCSSLintRuleId, MasterCSSUnapprovedRawValueClassesReportOptions };
@@ -1 +0,0 @@
1
- export {};
@@ -1,21 +0,0 @@
1
- import { CanonicalClassNameOptions, RawValuePolicyOptions, RemoteStylingPolicyOptions, defaultCanonicalClassNameOptions } from "./contracts.js";
2
- import { MasterCSSCanonicalClassesReportOptions, MasterCSSClassListEditOptions, MasterCSSClassListLintReportOptions, MasterCSSComponentClassesReportOptions, MasterCSSInvalidClassesReportOptions, MasterCSSLintDiagnostic, MasterCSSLintDiagnosticData, MasterCSSLintDiagnosticSeverity, MasterCSSLintFix, MasterCSSLintRange, MasterCSSLintReport, MasterCSSLintReportOptions, MasterCSSLintRuleId, MasterCSSUnapprovedRawValueClassesReportOptions } from "./diagnostics.js";
3
- import { MasterCSSLintAnalysis, MasterCSSLintCanonicalClassGroupSuggestion, MasterCSSLintCanonicalClassSuggestion, MasterCSSLintClassConflict, MasterCSSLintClassListAnalysis, MasterCSSLintClassListOptions, MasterCSSLintDiagnosticInput, MasterCSSLintDocumentAnalysis, MasterCSSLintEdit, MasterCSSLintPartialClassConflict, MasterCSSLintRawValueCandidate, MasterCSSLintToken } from "./analysis.js";
4
- import { defaultClassLintSettings } from "./constants.js";
5
- import { MasterCSSFixContentOptions, MasterCSSLintContentOptions, MasterCSSLintContentRuleOptions, MasterCSSLintDiagnosticSourceKind, MasterCSSLintFileResult, MasterCSSLintFileSourceKind, MasterCSSLintSourceDiagnostic, MasterCSSLintSourceFix, MasterCSSLintSourceFixKind, MasterCSSLintSourceFixSafety, MasterCSSLintSourceLocation, MasterCSSLintSourceLocationRange, MasterCSSLintSummary, defaultMasterCSSLintRules, fixMasterCSSContent, lintMasterCSSContent, masterCSSLintRuleIds, resolveMasterCSSLintRules, summarizeMasterCSSLintFiles } from "./source.js";
6
- import { MasterCSSClassSuggestions, MasterCSSClassSuggestions as MasterCSSClassSuggestions$1, MasterCSSDesignSystemCollision, MasterCSSDesignSystemComponent, MasterCSSDesignSystemDiagnostic, MasterCSSDesignSystemReport, MasterCSSDesignSystemRequest, MasterCSSDesignSystemStylesheet, MasterCSSDesignTokenMetadata, MasterCSSStylesheetAncestor, MasterCSSStylesheetTokenReference } from "@master/css-binding/tooling";
7
- import { MasterCSSBinding } from "@master/css-binding";
8
- import { MasterCSSManifest } from "@master/css-schema/manifest";
9
- /** Suggest markup classes for an isolated declaration block, leaving uncertain blocks in CSS. */
10
- declare function suggestClasses(declarations: string, options: {
11
- readonly manifest: MasterCSSManifest;
12
- readonly binding?: MasterCSSBinding;
13
- }): Promise<MasterCSSClassSuggestions$1>;
14
- /** Tool-only policy and metadata; never part of an executable manifest or runtime program. */
15
- type MasterCSSDesignSystemOptions = Omit<import('@master/css-binding/tooling').MasterCSSDesignSystemRequest, 'stylesheets'>;
16
- declare function lintClassNames(classNames: readonly string[], options: {
17
- readonly manifest: MasterCSSManifest;
18
- readonly binding?: MasterCSSBinding;
19
- }): Promise<MasterCSSLintAnalysis>;
20
- declare function createMasterCSSLintDiagnostics(diagnostics: readonly MasterCSSLintDiagnosticInput[], severity?: MasterCSSLintDiagnosticSeverity): readonly MasterCSSLintDiagnostic[];
21
- export { type CanonicalClassNameOptions, type MasterCSSCanonicalClassesReportOptions, type MasterCSSClassListEditOptions, type MasterCSSClassListLintReportOptions, type MasterCSSClassSuggestions, type MasterCSSComponentClassesReportOptions, type MasterCSSDesignSystemCollision, type MasterCSSDesignSystemComponent, type MasterCSSDesignSystemDiagnostic, MasterCSSDesignSystemOptions, type MasterCSSDesignSystemReport, type MasterCSSDesignSystemRequest, type MasterCSSDesignSystemStylesheet, type MasterCSSDesignTokenMetadata, type MasterCSSFixContentOptions, type MasterCSSInvalidClassesReportOptions, type MasterCSSLintAnalysis, type MasterCSSLintCanonicalClassGroupSuggestion, type MasterCSSLintCanonicalClassSuggestion, type MasterCSSLintClassConflict, type MasterCSSLintClassListAnalysis, type MasterCSSLintClassListOptions, type MasterCSSLintContentOptions, type MasterCSSLintContentRuleOptions, type MasterCSSLintDiagnostic, type MasterCSSLintDiagnosticData, type MasterCSSLintDiagnosticInput, type MasterCSSLintDiagnosticSeverity, type MasterCSSLintDiagnosticSourceKind, type MasterCSSLintDocumentAnalysis, type MasterCSSLintEdit, type MasterCSSLintFileResult, type MasterCSSLintFileSourceKind, type MasterCSSLintFix, type MasterCSSLintPartialClassConflict, type MasterCSSLintRange, type MasterCSSLintRawValueCandidate, type MasterCSSLintReport, type MasterCSSLintReportOptions, type MasterCSSLintRuleId, type MasterCSSLintSourceDiagnostic, type MasterCSSLintSourceFix, type MasterCSSLintSourceFixKind, type MasterCSSLintSourceFixSafety, type MasterCSSLintSourceLocation, type MasterCSSLintSourceLocationRange, type MasterCSSLintSummary, type MasterCSSLintToken, type MasterCSSStylesheetAncestor, type MasterCSSStylesheetTokenReference, type MasterCSSUnapprovedRawValueClassesReportOptions, type RawValuePolicyOptions, type RemoteStylingPolicyOptions, createMasterCSSLintDiagnostics, defaultCanonicalClassNameOptions, defaultClassLintSettings, defaultMasterCSSLintRules, fixMasterCSSContent, lintClassNames, lintMasterCSSContent, masterCSSLintRuleIds, resolveMasterCSSLintRules, suggestClasses, summarizeMasterCSSLintFiles };
@@ -1,30 +0,0 @@
1
- import { createToolingSession } from "../tooling-session.js";
2
- import { defaultMasterCSSLintRules, fixMasterCSSContent, lintMasterCSSContent, masterCSSLintRuleIds, resolveMasterCSSLintRules, summarizeMasterCSSLintFiles } from "./source.js";
3
- import { defaultCanonicalClassNameOptions } from "./contracts.js";
4
- import { defaultClassLintSettings } from "./constants.js";
5
- // src/lint/index.ts
6
- /** Suggest markup classes for an isolated declaration block, leaving uncertain blocks in CSS. */
7
- async function suggestClasses(declarations, options) {
8
- const session = await createToolingSession(options);
9
- try {
10
- return session.suggestClasses(declarations);
11
- } finally {
12
- session.dispose();
13
- }
14
- }
15
- async function lintClassNames(classNames, options) {
16
- const session = await createToolingSession(options);
17
- try {
18
- return session.lintClassNames(classNames);
19
- } finally {
20
- session.dispose();
21
- }
22
- }
23
- function createMasterCSSLintDiagnostics(diagnostics, severity = "warning") {
24
- return Object.freeze(diagnostics.map((diagnostic) => Object.freeze({
25
- ...diagnostic,
26
- severity,
27
- fix: diagnostic.fix
28
- })));
29
- }
30
- export { createMasterCSSLintDiagnostics, defaultCanonicalClassNameOptions, defaultClassLintSettings, defaultMasterCSSLintRules, fixMasterCSSContent, lintClassNames, lintMasterCSSContent, masterCSSLintRuleIds, resolveMasterCSSLintRules, suggestClasses, summarizeMasterCSSLintFiles };
@@ -1,6 +0,0 @@
1
- import { MasterCSSLintAnalysis } from "./analysis.js";
2
- import { MasterCSSManifest } from "@master/css-schema/manifest";
3
- declare function lintClassNamesSync(classNames: readonly string[], options: {
4
- readonly manifest: MasterCSSManifest;
5
- }): MasterCSSLintAnalysis;
6
- export { lintClassNamesSync };
package/dist/lint/node.js DELETED
@@ -1,11 +0,0 @@
1
- import { createToolingSessionSync } from "../node.js";
2
- // src/lint/node.ts
3
- function lintClassNamesSync(classNames, options) {
4
- const session = createToolingSessionSync(options);
5
- try {
6
- return session.lintClassNames(classNames);
7
- } finally {
8
- session.dispose();
9
- }
10
- }
11
- export { lintClassNamesSync };
@@ -1,23 +0,0 @@
1
- declare function stable(value: unknown): string;
2
- declare function equalDeclarations(a: unknown, b: unknown): boolean;
3
- declare function equalVariants(a: {
4
- selectorText?: string;
5
- conditions?: unknown;
6
- layerName?: string;
7
- variantBranchKey?: string;
8
- }, b: {
9
- selectorText?: string;
10
- conditions?: unknown;
11
- layerName?: string;
12
- variantBranchKey?: string;
13
- }): boolean;
14
- declare function getDeclarationPropertySignature(rule: {
15
- declarations?: object;
16
- }): string;
17
- declare function getDeclarationSignature(rule: {
18
- declarations?: object;
19
- }): string;
20
- declare function getRulesSignature(rules: {
21
- declarations?: object;
22
- }[]): string;
23
- export { equalDeclarations, equalVariants, getDeclarationPropertySignature, getDeclarationSignature, getRulesSignature, stable };
@@ -1,27 +0,0 @@
1
- // src/lint/rule-signatures.ts
2
- function stable(value) {
3
- if (!value || typeof value !== "object") return JSON.stringify(value);
4
- if (Array.isArray(value)) return `[${value.map(stable).join(",")}]`;
5
- return `{${Object.entries(value).sort(([a], [b]) => a.localeCompare(b)).map(([key, item]) => `${JSON.stringify(key)}:${stable(item)}`).join(",")}}`;
6
- }
7
- function equalDeclarations(a, b) {
8
- if (!a || !b || typeof a !== "object" || typeof b !== "object") return stable(a) === stable(b);
9
- const aKeys = Object.keys(a).sort();
10
- const bKeys = Object.keys(b).sort();
11
- return stable(aKeys) === stable(bKeys);
12
- }
13
- function equalVariants(a, b) {
14
- const branchA = a.variantBranchKey;
15
- const branchB = b.variantBranchKey;
16
- return (branchA !== void 0 || branchB !== void 0 ? branchA === branchB : a.selectorText === b.selectorText) && a.layerName === b.layerName && stable(a.conditions) === stable(b.conditions);
17
- }
18
- function getDeclarationPropertySignature(rule) {
19
- return Object.keys(rule.declarations || {}).sort().join("\0");
20
- }
21
- function getDeclarationSignature(rule) {
22
- return stable(rule.declarations || {});
23
- }
24
- function getRulesSignature(rules) {
25
- return rules.map(getDeclarationSignature).sort().join("\0");
26
- }
27
- export { equalDeclarations, equalVariants, getDeclarationPropertySignature, getDeclarationSignature, getRulesSignature, stable };
@@ -1,70 +0,0 @@
1
- import { MasterCSSCanonicalClassesReportOptions, MasterCSSComponentClassesReportOptions, MasterCSSInvalidClassesReportOptions, MasterCSSLintDiagnosticData, MasterCSSLintDiagnosticSeverity, MasterCSSLintRange, MasterCSSLintRuleId, MasterCSSUnapprovedRawValueClassesReportOptions } from "./diagnostics.js";
2
- import { MasterCSSToolingSession } from "../tooling-session.js";
3
- declare const masterCSSLintRuleIds: readonly MasterCSSLintRuleId[];
4
- declare const defaultMasterCSSLintRules: Readonly<Record<MasterCSSLintRuleId, boolean>>;
5
- type MasterCSSLintFileSourceKind = 'source' | 'stylesheet' | 'manifest';
6
- type MasterCSSLintDiagnosticSourceKind = 'class-attribute' | 'class-expression' | 'manifest';
7
- type MasterCSSLintSourceFixKind = 'class-list';
8
- type MasterCSSLintSourceFixSafety = 'safe';
9
- interface MasterCSSLintSourceLocation {
10
- line: number;
11
- column: number;
12
- }
13
- interface MasterCSSLintSourceLocationRange {
14
- start: MasterCSSLintSourceLocation;
15
- end: MasterCSSLintSourceLocation;
16
- }
17
- interface MasterCSSLintSourceFix {
18
- kind: MasterCSSLintSourceFixKind;
19
- safety: MasterCSSLintSourceFixSafety;
20
- range: MasterCSSLintRange;
21
- text: string;
22
- description: string;
23
- requiresFormatting: boolean;
24
- }
25
- interface MasterCSSLintSourceDiagnostic {
26
- ruleId?: MasterCSSLintRuleId | 'manifest';
27
- code: string;
28
- severity: MasterCSSLintDiagnosticSeverity;
29
- message: string;
30
- range: MasterCSSLintRange;
31
- loc: MasterCSSLintSourceLocationRange;
32
- source: 'Master CSS';
33
- sourceKind: MasterCSSLintDiagnosticSourceKind;
34
- data?: MasterCSSLintDiagnosticData;
35
- fixes?: MasterCSSLintSourceFix[];
36
- }
37
- interface MasterCSSLintFileResult {
38
- filePath: string;
39
- languageId: string;
40
- sourceKind: MasterCSSLintFileSourceKind;
41
- diagnostics: MasterCSSLintSourceDiagnostic[];
42
- }
43
- interface MasterCSSLintSummary {
44
- files: number;
45
- diagnostics: number;
46
- errors: number;
47
- warnings: number;
48
- fixable: number;
49
- safeFixes: number;
50
- }
51
- interface MasterCSSLintContentOptions {
52
- content: string;
53
- filePath: string;
54
- rules?: Partial<Record<MasterCSSLintRuleId, boolean>>;
55
- ruleOptions?: MasterCSSLintContentRuleOptions;
56
- severities?: Partial<Record<MasterCSSLintRuleId, MasterCSSLintDiagnosticSeverity>>;
57
- lintSession: Pick<MasterCSSToolingSession, 'analyzeLintClassList' | 'analyzeLintDocument' | 'tokenizeClassList'>;
58
- }
59
- type MasterCSSFixContentOptions = MasterCSSLintContentOptions;
60
- interface MasterCSSLintContentRuleOptions {
61
- 'no-invalid-classes'?: MasterCSSInvalidClassesReportOptions;
62
- 'prefer-canonical-classes'?: MasterCSSCanonicalClassesReportOptions;
63
- 'no-unapproved-raw-values'?: MasterCSSUnapprovedRawValueClassesReportOptions;
64
- 'prefer-component-classes'?: MasterCSSComponentClassesReportOptions;
65
- }
66
- declare function resolveMasterCSSLintRules(option: string | undefined): Record<MasterCSSLintRuleId, boolean>;
67
- declare function lintMasterCSSContent(options: MasterCSSLintContentOptions): MasterCSSLintFileResult;
68
- declare function fixMasterCSSContent(options: MasterCSSFixContentOptions): string;
69
- declare function summarizeMasterCSSLintFiles(files: MasterCSSLintFileResult[]): MasterCSSLintSummary;
70
- export { MasterCSSFixContentOptions, MasterCSSLintContentOptions, MasterCSSLintContentRuleOptions, MasterCSSLintDiagnosticSourceKind, MasterCSSLintFileResult, MasterCSSLintFileSourceKind, MasterCSSLintSourceDiagnostic, MasterCSSLintSourceFix, MasterCSSLintSourceFixKind, MasterCSSLintSourceFixSafety, MasterCSSLintSourceLocation, MasterCSSLintSourceLocationRange, MasterCSSLintSummary, defaultMasterCSSLintRules, fixMasterCSSContent, lintMasterCSSContent, masterCSSLintRuleIds, resolveMasterCSSLintRules, summarizeMasterCSSLintFiles };
@@ -1,261 +0,0 @@
1
- // src/lint/source.ts
2
- const MAX_FIX_PASSES = 10;
3
- const masterCSSLintRuleIds = Object.freeze([
4
- "sort-classes",
5
- "no-invalid-classes",
6
- "no-conflicting-classes",
7
- "prefer-canonical-classes",
8
- "no-unapproved-raw-values",
9
- "prefer-component-classes"
10
- ]);
11
- const defaultMasterCSSLintRules = Object.freeze({
12
- "sort-classes": true,
13
- "no-invalid-classes": true,
14
- "no-conflicting-classes": true,
15
- "prefer-canonical-classes": true,
16
- "no-unapproved-raw-values": false,
17
- "prefer-component-classes": false
18
- });
19
- const languageByExtension = {
20
- ".astro": "astro",
21
- ".css": "css",
22
- ".htm": "html",
23
- ".html": "html",
24
- ".js": "javascript",
25
- ".mjs": "javascript",
26
- ".cjs": "javascript",
27
- ".jsx": "javascriptreact",
28
- ".less": "less",
29
- ".md": "markdown",
30
- ".mdx": "mdx",
31
- ".mts": "typescript",
32
- ".cts": "typescript",
33
- ".php": "html",
34
- ".pug": "html",
35
- ".scss": "scss",
36
- ".svelte": "svelte",
37
- ".ts": "typescript",
38
- ".tsx": "typescriptreact",
39
- ".vue": "vue"
40
- };
41
- const stylesheetLanguageIds = /* @__PURE__ */ new Set([
42
- "css",
43
- "scss",
44
- "less"
45
- ]);
46
- function resolveMasterCSSLintRules(option) {
47
- if (!option) return { ...defaultMasterCSSLintRules };
48
- const resolved = Object.fromEntries(masterCSSLintRuleIds.map((ruleId) => [ruleId, false]));
49
- for (const rule of option.split(",").map((item) => item.trim()).filter(Boolean)) {
50
- if (rule === "recommended") {
51
- Object.assign(resolved, defaultMasterCSSLintRules);
52
- continue;
53
- }
54
- if (rule === "all") {
55
- for (const ruleId of masterCSSLintRuleIds) resolved[ruleId] = true;
56
- continue;
57
- }
58
- if (!masterCSSLintRuleIds.includes(rule)) throw new Error(`Unknown Master CSS lint rule "${rule}".`);
59
- resolved[rule] = true;
60
- }
61
- return resolved;
62
- }
63
- function resolveRules(rules) {
64
- return {
65
- ...defaultMasterCSSLintRules,
66
- ...rules
67
- };
68
- }
69
- function getLanguageId(filePath) {
70
- const separator = Math.max(filePath.lastIndexOf("/"), filePath.lastIndexOf("\\"));
71
- const dot = filePath.lastIndexOf(".");
72
- const extension = dot > separator ? filePath.slice(dot).toLowerCase() : "";
73
- return languageByExtension[extension] || "html";
74
- }
75
- function getFileSourceKind(languageId) {
76
- return stylesheetLanguageIds.has(languageId) ? "stylesheet" : "source";
77
- }
78
- function detectClassListUnescape(content, range) {
79
- const quote = content[range.start - 1];
80
- return quote === "\"" || quote === "'" || quote === "`" ? quote : false;
81
- }
82
- function inferClassSourceKind(content, range) {
83
- const prefix = content.slice(Math.max(0, range.start - 80), range.start);
84
- return /(?:^|[\s{<])(?:class|className|class:list|:class|v-bind:class|\[class\]|\[className\]|\[ngClass\])\s*=\s*(?:"|'|`|\{[^]*$)/.test(prefix) ? "class-attribute" : "class-expression";
85
- }
86
- function collectClassListContexts(content, filePath, lintSession, analysis = lintSession.analyzeLintDocument(content, getLanguageId(filePath))) {
87
- const positions = analysis.classPositions;
88
- const contexts = /* @__PURE__ */ new Map();
89
- for (const position of positions) {
90
- const contextRange = position.contextRange;
91
- const key = `${contextRange.start}:${contextRange.end}`;
92
- const existing = contexts.get(key);
93
- if (existing) {
94
- existing.classNames.push(position.token);
95
- existing.transformed ||= position.raw !== position.token;
96
- continue;
97
- }
98
- contexts.set(key, {
99
- range: contextRange,
100
- text: content.slice(contextRange.start, contextRange.end),
101
- sourceKind: inferClassSourceKind(content, contextRange),
102
- unescape: detectClassListUnescape(content, contextRange),
103
- classNames: [position.token],
104
- transformed: position.raw !== position.token
105
- });
106
- }
107
- return [...contexts.values()].map((context) => {
108
- const tokens = lintSession.tokenizeClassList(context.text, context.unescape).map((item) => item.token);
109
- context.transformed ||= tokens.length !== context.classNames.length || tokens.some((token, index) => token !== context.classNames[index]);
110
- return context;
111
- }).sort((a, b) => a.range.start - b.range.start || a.range.end - b.range.end);
112
- }
113
- function offsetToLocation(content, offset) {
114
- let line = 1;
115
- let lineStart = 0;
116
- for (let index = 0; index < offset; index++) if (content[index] === "\n") {
117
- line++;
118
- lineStart = index + 1;
119
- }
120
- return {
121
- line,
122
- column: offset - lineStart + 1
123
- };
124
- }
125
- function toLocationRange(content, range) {
126
- return {
127
- start: offsetToLocation(content, range.start),
128
- end: offsetToLocation(content, range.end)
129
- };
130
- }
131
- function createContextLintDiagnostics(context, rules, options) {
132
- return Object.values(rules).some(Boolean) ? options.lintSession.analyzeLintClassList(context.text, context.classNames, {
133
- disallowUnknownClass: options.ruleOptions?.["no-invalid-classes"]?.disallowUnknownClass,
134
- rawValuePolicy: rules["no-unapproved-raw-values"] ? options.ruleOptions?.["no-unapproved-raw-values"] || {} : void 0,
135
- canonicalOptions: rules["prefer-canonical-classes"] ? options.ruleOptions?.["prefer-canonical-classes"] || {} : void 0,
136
- remoteStylingPolicy: rules["prefer-component-classes"] ? { max: options.ruleOptions?.["prefer-component-classes"]?.max } : void 0
137
- }).diagnostics.filter(({ ruleId }) => rules[ruleId]).map((diagnostic) => ({
138
- ...diagnostic,
139
- severity: options.severities?.[diagnostic.ruleId] || (diagnostic.ruleId === "no-invalid-classes" ? "error" : "warning"),
140
- fix: diagnostic.fix
141
- })) : [];
142
- }
143
- function toSourceFix(context, fix) {
144
- if (context.transformed) return;
145
- return {
146
- kind: "class-list",
147
- safety: "safe",
148
- range: {
149
- start: context.range.start + fix.range.start,
150
- end: context.range.start + fix.range.end
151
- },
152
- text: fix.text,
153
- description: "Replace the class list text.",
154
- requiresFormatting: false
155
- };
156
- }
157
- function toSourceDiagnostic(content, context, diagnostic) {
158
- const range = context.transformed ? context.range : {
159
- start: context.range.start + diagnostic.range.start,
160
- end: context.range.start + diagnostic.range.end
161
- };
162
- const fix = diagnostic.fix && toSourceFix(context, diagnostic.fix);
163
- return {
164
- ruleId: diagnostic.ruleId,
165
- code: diagnostic.code,
166
- severity: diagnostic.severity,
167
- message: diagnostic.message,
168
- range,
169
- loc: toLocationRange(content, range),
170
- source: "Master CSS",
171
- sourceKind: context.sourceKind,
172
- ...diagnostic.data ? { data: diagnostic.data } : {},
173
- ...fix ? { fixes: [fix] } : {}
174
- };
175
- }
176
- function lintMasterCSSContent(options) {
177
- const diagnostics = [];
178
- const rules = resolveRules(options.rules);
179
- const document = options.lintSession.analyzeLintDocument(options.content, getLanguageId(options.filePath));
180
- for (const diagnostic of document.diagnostics ?? []) {
181
- if (diagnostic.severity === "info") continue;
182
- const range = diagnostic.range ?? {
183
- start: 0,
184
- end: 0
185
- };
186
- diagnostics.push({
187
- code: diagnostic.code,
188
- severity: diagnostic.severity,
189
- message: diagnostic.message,
190
- range,
191
- loc: toLocationRange(options.content, range),
192
- source: "Master CSS",
193
- sourceKind: "class-expression"
194
- });
195
- }
196
- for (const context of collectClassListContexts(options.content, options.filePath, options.lintSession, document)) diagnostics.push(...createContextLintDiagnostics(context, rules, options).map((diagnostic) => toSourceDiagnostic(options.content, context, diagnostic)));
197
- const languageId = getLanguageId(options.filePath);
198
- return {
199
- filePath: options.filePath,
200
- languageId,
201
- sourceKind: getFileSourceKind(languageId),
202
- diagnostics
203
- };
204
- }
205
- function applyReplacement(content, range, text) {
206
- return content.slice(0, range.start) + text + content.slice(range.end);
207
- }
208
- function applyFixes(content, fixes) {
209
- let fixed = content;
210
- for (const fix of fixes) fixed = applyReplacement(fixed, fix.range, fix.text);
211
- return fixed;
212
- }
213
- function fixClassListText(context, rules, options) {
214
- if (context.transformed) return context.text;
215
- let fixed = context.text;
216
- for (let pass = 0; pass < MAX_FIX_PASSES; pass++) {
217
- const fix = createContextLintDiagnostics({
218
- ...context,
219
- range: {
220
- start: 0,
221
- end: fixed.length
222
- },
223
- text: fixed,
224
- classNames: options.lintSession.tokenizeClassList(fixed, context.unescape).map(({ token }) => token)
225
- }, rules, options).map((diagnostic) => diagnostic.fix).find((fix) => Boolean(fix));
226
- if (!fix) return fixed;
227
- const next = applyReplacement(fixed, fix.range, fix.text);
228
- if (next === fixed) return fixed;
229
- fixed = next;
230
- }
231
- return fixed;
232
- }
233
- function fixSafeClassLists(content, filePath, rules, options) {
234
- return applyFixes(content, collectClassListContexts(content, filePath, options.lintSession).map((context) => ({
235
- range: context.range,
236
- text: fixClassListText(context, rules, options)
237
- })).filter((replacement) => content.slice(replacement.range.start, replacement.range.end) !== replacement.text).sort((a, b) => b.range.start - a.range.start || b.range.end - a.range.end).map((replacement) => ({
238
- kind: "class-list",
239
- safety: "safe",
240
- range: replacement.range,
241
- text: replacement.text,
242
- description: "Replace the class list text.",
243
- requiresFormatting: false
244
- })));
245
- }
246
- function fixMasterCSSContent(options) {
247
- return fixSafeClassLists(options.content, options.filePath, resolveRules(options.rules), options);
248
- }
249
- function summarizeMasterCSSLintFiles(files) {
250
- const diagnostics = files.flatMap((file) => file.diagnostics);
251
- const fixes = diagnostics.flatMap((diagnostic) => diagnostic.fixes ?? []);
252
- return {
253
- files: files.length,
254
- diagnostics: diagnostics.length,
255
- errors: diagnostics.filter((diagnostic) => diagnostic.severity === "error").length,
256
- warnings: diagnostics.filter((diagnostic) => diagnostic.severity === "warning").length,
257
- fixable: diagnostics.filter((diagnostic) => diagnostic.fixes?.length).length,
258
- safeFixes: fixes.filter((fix) => fix.safety === "safe").length
259
- };
260
- }
261
- export { defaultMasterCSSLintRules, fixMasterCSSContent, lintMasterCSSContent, masterCSSLintRuleIds, resolveMasterCSSLintRules, summarizeMasterCSSLintFiles };
@@ -1,11 +0,0 @@
1
- import { CssNode } from "@eslint/css-tree";
2
- declare const mathFunctions: Set<string>;
3
- /** Substitute only proven result types into a disposable grammar AST. Never
4
- * evaluate values, ranges, variable substitutions, or mutate emitted CSS.
5
- * A nested calc may have a compound intermediate type which its parent cancels.
6
- */
7
- declare function validateMathTypes(ast: CssNode, matches: (value: CssNode) => boolean): {
8
- ast: CssNode;
9
- status?: 'valid' | 'invalid' | 'unknown';
10
- };
11
- export { mathFunctions, validateMathTypes };