@master/css-tooling 0.0.0-site.1793659883.g69c9aebcf628
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 -0
- package/dist/browser.d.ts +2 -0
- package/dist/browser.js +1 -0
- package/dist/css-tree-version.d.ts +2 -0
- package/dist/css-tree-version.js +4 -0
- package/dist/css.d.ts +32 -0
- package/dist/css.js +120 -0
- package/dist/immutable.d.ts +2 -0
- package/dist/immutable.js +7 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +1 -0
- package/dist/language/binding-session.d.ts +6 -0
- package/dist/language/binding-session.js +8 -0
- package/dist/language/browser.d.ts +10 -0
- package/dist/language/browser.js +12 -0
- package/dist/language/common.d.ts +12 -0
- package/dist/language/common.js +55 -0
- package/dist/language/contracts.d.ts +197 -0
- package/dist/language/contracts.js +1 -0
- package/dist/language/index.d.ts +29 -0
- package/dist/language/index.js +39 -0
- package/dist/language/master-css.d.ts +13 -0
- package/dist/language/master-css.js +35 -0
- package/dist/language/node.d.ts +21 -0
- package/dist/language/node.js +36 -0
- package/dist/language/semantic/scopes.d.ts +55 -0
- package/dist/language/semantic/scopes.js +73 -0
- package/dist/language/semantic/types.d.ts +11 -0
- package/dist/language/semantic/types.js +1 -0
- package/dist/language/session.d.ts +37 -0
- package/dist/language/session.js +87 -0
- package/dist/language/settings.d.ts +13 -0
- package/dist/language/settings.js +19 -0
- package/dist/language/utils/mdn-css-data.d.ts +5 -0
- package/dist/language/utils/mdn-css-data.js +63 -0
- package/dist/lexer/browser.d.ts +6 -0
- package/dist/lexer/browser.js +11 -0
- package/dist/lexer/contracts.d.ts +41 -0
- package/dist/lexer/contracts.js +1 -0
- package/dist/lexer/index.d.ts +8 -0
- package/dist/lexer/index.js +11 -0
- package/dist/lexer/node.d.ts +7 -0
- package/dist/lexer/node.js +11 -0
- package/dist/lexer/session.d.ts +17 -0
- package/dist/lexer/session.js +25 -0
- package/dist/lint/analysis.d.ts +90 -0
- package/dist/lint/analysis.js +1 -0
- package/dist/lint/binding-session.d.ts +21 -0
- package/dist/lint/binding-session.js +97 -0
- package/dist/lint/constants.d.ts +7 -0
- package/dist/lint/constants.js +18 -0
- package/dist/lint/contracts.d.ts +17 -0
- package/dist/lint/contracts.js +6 -0
- package/dist/lint/diagnostic-format.d.ts +5 -0
- package/dist/lint/diagnostic-format.js +15 -0
- package/dist/lint/diagnostics.d.ts +42 -0
- package/dist/lint/diagnostics.js +1 -0
- package/dist/lint/index.d.ts +21 -0
- package/dist/lint/index.js +30 -0
- package/dist/lint/node.d.ts +6 -0
- package/dist/lint/node.js +11 -0
- package/dist/lint/rule-signatures.d.ts +23 -0
- package/dist/lint/rule-signatures.js +27 -0
- package/dist/lint/source.d.ts +70 -0
- package/dist/lint/source.js +261 -0
- package/dist/math-types.d.ts +11 -0
- package/dist/math-types.js +236 -0
- package/dist/math-validation.d.ts +7 -0
- package/dist/math-validation.js +74 -0
- package/dist/node.d.ts +12 -0
- package/dist/node.js +32 -0
- package/dist/scanner/binding-session.d.ts +29 -0
- package/dist/scanner/binding-session.js +37 -0
- package/dist/scanner/core.d.ts +130 -0
- package/dist/scanner/core.js +480 -0
- package/dist/scanner/index.d.ts +3 -0
- package/dist/scanner/index.js +3 -0
- package/dist/scanner/node.d.ts +5 -0
- package/dist/scanner/node.js +4 -0
- package/dist/scanner/options/index.d.ts +16 -0
- package/dist/scanner/options/index.js +57 -0
- package/dist/scanner/source-policy.d.ts +15 -0
- package/dist/scanner/source-policy.js +131 -0
- package/dist/source/adapters/optional-peer.d.ts +5 -0
- package/dist/source/adapters/optional-peer.js +29 -0
- package/dist/source/adapters/oxc.d.ts +2 -0
- package/dist/source/adapters/oxc.js +6 -0
- package/dist/source/adapters/svelte.d.ts +5 -0
- package/dist/source/adapters/svelte.js +82 -0
- package/dist/source/adapters/types.d.ts +11 -0
- package/dist/source/adapters/types.js +9 -0
- package/dist/source/adapters/vue.d.ts +5 -0
- package/dist/source/adapters/vue.js +50 -0
- package/dist/source/browser.d.ts +7 -0
- package/dist/source/browser.js +11 -0
- package/dist/source/contracts.d.ts +35 -0
- package/dist/source/contracts.js +1 -0
- package/dist/source/index.d.ts +8 -0
- package/dist/source/index.js +11 -0
- package/dist/source/native.d.ts +5 -0
- package/dist/source/native.js +53 -0
- package/dist/source/node.d.ts +7 -0
- package/dist/source/node.js +11 -0
- package/dist/source/session.d.ts +25 -0
- package/dist/source/session.js +37 -0
- package/dist/syntax-validation.d.ts +10 -0
- package/dist/syntax-validation.js +54 -0
- package/dist/tooling-session.d.ts +66 -0
- package/dist/tooling-session.js +188 -0
- package/dist/validator/binding-session.d.ts +17 -0
- package/dist/validator/binding-session.js +29 -0
- package/dist/validator/contracts.d.ts +24 -0
- package/dist/validator/contracts.js +1 -0
- package/dist/validator/index.d.ts +10 -0
- package/dist/validator/index.js +13 -0
- package/dist/validator/node.d.ts +6 -0
- package/dist/validator/node.js +11 -0
- package/dist/validator/types/syntax-error.d.ts +22 -0
- package/dist/validator/types/syntax-error.js +1 -0
- package/dist/value-validation.d.ts +46 -0
- package/dist/value-validation.js +162 -0
- package/package.json +127 -0
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { CanonicalClassNameOptions, RawValuePolicyOptions, RemoteStylingPolicyOptions } from "./contracts.js";
|
|
2
|
+
import { MasterCSSLintDiagnosticData, MasterCSSLintRuleId } from "./diagnostics.js";
|
|
3
|
+
interface MasterCSSLintClassConflict {
|
|
4
|
+
readonly className: string;
|
|
5
|
+
readonly conflicts: readonly string[];
|
|
6
|
+
}
|
|
7
|
+
interface MasterCSSLintPartialClassConflict {
|
|
8
|
+
readonly className: string;
|
|
9
|
+
readonly conflict: string;
|
|
10
|
+
}
|
|
11
|
+
interface MasterCSSLintAnalysis {
|
|
12
|
+
readonly version: 4;
|
|
13
|
+
readonly sortedClassNames: readonly string[];
|
|
14
|
+
readonly conflicts: readonly MasterCSSLintClassConflict[];
|
|
15
|
+
readonly partialConflicts: readonly MasterCSSLintPartialClassConflict[];
|
|
16
|
+
}
|
|
17
|
+
interface MasterCSSLintClassListOptions {
|
|
18
|
+
readonly disallowUnknownClass?: boolean;
|
|
19
|
+
readonly rawValuePolicy?: RawValuePolicyOptions;
|
|
20
|
+
readonly remoteStylingPolicy?: RemoteStylingPolicyOptions;
|
|
21
|
+
readonly canonicalOptions?: CanonicalClassNameOptions;
|
|
22
|
+
}
|
|
23
|
+
interface MasterCSSLintEdit {
|
|
24
|
+
readonly range: Readonly<{
|
|
25
|
+
start: number;
|
|
26
|
+
end: number;
|
|
27
|
+
}>;
|
|
28
|
+
readonly text: string;
|
|
29
|
+
readonly scope: 'class-list';
|
|
30
|
+
}
|
|
31
|
+
interface MasterCSSLintDiagnosticInput {
|
|
32
|
+
readonly ruleId: MasterCSSLintRuleId;
|
|
33
|
+
readonly code: string;
|
|
34
|
+
readonly message: string;
|
|
35
|
+
readonly range: Readonly<{
|
|
36
|
+
start: number;
|
|
37
|
+
end: number;
|
|
38
|
+
}>;
|
|
39
|
+
readonly data?: MasterCSSLintDiagnosticData;
|
|
40
|
+
readonly fix?: MasterCSSLintEdit;
|
|
41
|
+
}
|
|
42
|
+
interface MasterCSSLintClassListAnalysis {
|
|
43
|
+
readonly version: 4;
|
|
44
|
+
readonly analysis: MasterCSSLintAnalysis;
|
|
45
|
+
readonly diagnostics: readonly MasterCSSLintDiagnosticInput[];
|
|
46
|
+
readonly sortEdit?: MasterCSSLintEdit;
|
|
47
|
+
readonly conflictEdit?: MasterCSSLintEdit;
|
|
48
|
+
readonly conflictRange?: Readonly<{
|
|
49
|
+
start: number;
|
|
50
|
+
end: number;
|
|
51
|
+
}>;
|
|
52
|
+
}
|
|
53
|
+
interface MasterCSSLintCanonicalClassSuggestion {
|
|
54
|
+
readonly className: string;
|
|
55
|
+
readonly recommended: string;
|
|
56
|
+
}
|
|
57
|
+
interface MasterCSSLintCanonicalClassGroupSuggestion {
|
|
58
|
+
readonly classNames: readonly string[];
|
|
59
|
+
readonly recommended: string;
|
|
60
|
+
}
|
|
61
|
+
interface MasterCSSLintRawValueCandidate {
|
|
62
|
+
readonly className: string;
|
|
63
|
+
readonly key: string;
|
|
64
|
+
readonly segments: readonly string[];
|
|
65
|
+
readonly properties: readonly string[];
|
|
66
|
+
}
|
|
67
|
+
interface MasterCSSLintDocumentAnalysis {
|
|
68
|
+
readonly diagnostics: readonly import('@master/css-binding/tooling').MasterCSSDiagnostic[];
|
|
69
|
+
readonly classPositions: readonly Readonly<{
|
|
70
|
+
range: Readonly<{
|
|
71
|
+
start: number;
|
|
72
|
+
end: number;
|
|
73
|
+
}>;
|
|
74
|
+
contextRange: Readonly<{
|
|
75
|
+
start: number;
|
|
76
|
+
end: number;
|
|
77
|
+
}>;
|
|
78
|
+
raw: string;
|
|
79
|
+
token: string;
|
|
80
|
+
}>[];
|
|
81
|
+
}
|
|
82
|
+
interface MasterCSSLintToken {
|
|
83
|
+
readonly range: Readonly<{
|
|
84
|
+
start: number;
|
|
85
|
+
end: number;
|
|
86
|
+
}>;
|
|
87
|
+
readonly raw: string;
|
|
88
|
+
readonly token: string;
|
|
89
|
+
}
|
|
90
|
+
export { MasterCSSLintAnalysis, MasterCSSLintCanonicalClassGroupSuggestion, MasterCSSLintCanonicalClassSuggestion, MasterCSSLintClassConflict, MasterCSSLintClassListAnalysis, MasterCSSLintClassListOptions, MasterCSSLintDiagnosticInput, MasterCSSLintDocumentAnalysis, MasterCSSLintEdit, MasterCSSLintPartialClassConflict, MasterCSSLintRawValueCandidate, MasterCSSLintToken };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { CanonicalClassNameOptions } from "./contracts.js";
|
|
2
|
+
import { MasterCSSLintAnalysis, MasterCSSLintCanonicalClassGroupSuggestion, MasterCSSLintCanonicalClassSuggestion, MasterCSSLintClassListAnalysis, MasterCSSLintClassListOptions, MasterCSSLintDocumentAnalysis, MasterCSSLintRawValueCandidate, MasterCSSLintToken } from "./analysis.js";
|
|
3
|
+
import { MasterCSSLanguageBindingSession, MasterCSSLintBindingSession, MasterCSSValidatorBindingSession } from "@master/css-binding/tooling";
|
|
4
|
+
import { MasterCSSManifest } from "@master/css-schema/manifest";
|
|
5
|
+
interface LintSession {
|
|
6
|
+
suggestClasses: MasterCSSLintBindingSession['suggestClasses'];
|
|
7
|
+
inspectDesignSystem: MasterCSSLintBindingSession['inspectDesignSystem'];
|
|
8
|
+
tokenizeClassList(classList: string, unescape?: string | false): readonly MasterCSSLintToken[];
|
|
9
|
+
analyzeDocument(source: string, languageId: string): MasterCSSLintDocumentAnalysis;
|
|
10
|
+
analyze(classNames: string[]): MasterCSSLintAnalysis;
|
|
11
|
+
canonicalClassGroups(classNames: string[], options?: CanonicalClassNameOptions): readonly MasterCSSLintCanonicalClassGroupSuggestion[];
|
|
12
|
+
canonicalClassNames(classNames: string[], options?: CanonicalClassNameOptions): readonly MasterCSSLintCanonicalClassSuggestion[];
|
|
13
|
+
rawValueCandidates(classNames: string[]): readonly MasterCSSLintRawValueCandidate[];
|
|
14
|
+
analyzeClassList(classList: string, classNames: string[], options?: MasterCSSLintClassListOptions): MasterCSSLintClassListAnalysis;
|
|
15
|
+
dispose(): void;
|
|
16
|
+
}
|
|
17
|
+
declare function bindLintSession(lint: MasterCSSLintBindingSession, validator: MasterCSSValidatorBindingSession, language: MasterCSSLanguageBindingSession): LintSession;
|
|
18
|
+
declare function createLintSession(manifest: MasterCSSManifest, options?: {
|
|
19
|
+
readonly binding?: 'auto' | 'native' | 'wasm';
|
|
20
|
+
}): Promise<LintSession>;
|
|
21
|
+
export { LintSession, bindLintSession, createLintSession };
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { validateRuleDeclarations } from "../value-validation.js";
|
|
2
|
+
import { MASTER_CSS_LINT_BATCH_VERSION, createToolingBinding } from "@master/css-binding/tooling";
|
|
3
|
+
// src/lint/binding-session.ts
|
|
4
|
+
function resolveRawValuePolicy(options) {
|
|
5
|
+
if (!options) return;
|
|
6
|
+
if (options.allowRawValues) return {
|
|
7
|
+
allowRawValues: true,
|
|
8
|
+
allowProperties: options.allowProperties || [],
|
|
9
|
+
requireProperties: options.requireProperties || [],
|
|
10
|
+
allowedPatterns: []
|
|
11
|
+
};
|
|
12
|
+
return {
|
|
13
|
+
allowRawValues: false,
|
|
14
|
+
allowProperties: options.allowProperties || [],
|
|
15
|
+
requireProperties: options.requireProperties || [],
|
|
16
|
+
allowedPatterns: options.allowedPatterns || []
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
function collectHostRuleErrors(batch) {
|
|
20
|
+
return batch.classes.map(({ rules }) => rules.map(({ text }) => validateRuleDeclarations(text).filter((declaration) => declaration.status === "invalid").map((declaration) => `Invalid CSS value: ${declaration.property}:${declaration.value}`)));
|
|
21
|
+
}
|
|
22
|
+
function bindLintSession(lint, validator, language) {
|
|
23
|
+
const resolveInputs = (classNames) => {
|
|
24
|
+
const validation = validator.generateClassRules(classNames);
|
|
25
|
+
return {
|
|
26
|
+
nativeSupport: void 0,
|
|
27
|
+
...lint.resolveValidation(validation, collectHostRuleErrors(validation))
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
return {
|
|
31
|
+
inspectDesignSystem: (request) => lint.inspectDesignSystem(request),
|
|
32
|
+
suggestClasses: (declarations) => lint.suggestClasses(declarations),
|
|
33
|
+
tokenizeClassList(classList, unescape) {
|
|
34
|
+
return language.analyzeDocument({
|
|
35
|
+
source: classList,
|
|
36
|
+
languageId: "class-list",
|
|
37
|
+
hostRanges: [{
|
|
38
|
+
start: 0,
|
|
39
|
+
end: classList.length,
|
|
40
|
+
unescape: unescape ? [unescape] : []
|
|
41
|
+
}]
|
|
42
|
+
}).classPositions;
|
|
43
|
+
},
|
|
44
|
+
analyzeDocument(source, languageId) {
|
|
45
|
+
return language.analyzeDocument({
|
|
46
|
+
source,
|
|
47
|
+
languageId
|
|
48
|
+
});
|
|
49
|
+
},
|
|
50
|
+
analyze(classNames) {
|
|
51
|
+
const inputs = resolveInputs(classNames);
|
|
52
|
+
return lint.analyze(classNames, inputs.nativeSupport, inputs.invalidGeneratedClasses);
|
|
53
|
+
},
|
|
54
|
+
canonicalClassNames(classNames, options) {
|
|
55
|
+
const inputs = resolveInputs(classNames);
|
|
56
|
+
return lint.canonicalClassNames(classNames, inputs.nativeSupport, options).suggestions;
|
|
57
|
+
},
|
|
58
|
+
canonicalClassGroups(classNames, options) {
|
|
59
|
+
const inputs = resolveInputs(classNames);
|
|
60
|
+
return lint.canonicalClassGroups(classNames, inputs.nativeSupport, options).suggestions;
|
|
61
|
+
},
|
|
62
|
+
rawValueCandidates(classNames) {
|
|
63
|
+
const inputs = resolveInputs(classNames);
|
|
64
|
+
return lint.rawValueCandidates(classNames, inputs.nativeSupport, inputs.invalidGeneratedClasses).candidates;
|
|
65
|
+
},
|
|
66
|
+
analyzeClassList(classList, classNames, options) {
|
|
67
|
+
const inputs = resolveInputs(classNames);
|
|
68
|
+
return lint.analyzeClassListPolicy({
|
|
69
|
+
version: MASTER_CSS_LINT_BATCH_VERSION,
|
|
70
|
+
classList,
|
|
71
|
+
classNames,
|
|
72
|
+
nativeSupport: inputs.nativeSupport,
|
|
73
|
+
invalidGeneratedClasses: inputs.invalidGeneratedClasses,
|
|
74
|
+
validationErrors: inputs.validationErrors,
|
|
75
|
+
disallowUnknownClass: options?.disallowUnknownClass,
|
|
76
|
+
canonicalOptions: options?.canonicalOptions,
|
|
77
|
+
rawValuePolicy: resolveRawValuePolicy(options?.rawValuePolicy),
|
|
78
|
+
remoteStylingPolicy: options?.remoteStylingPolicy && { ...options.remoteStylingPolicy }
|
|
79
|
+
});
|
|
80
|
+
},
|
|
81
|
+
dispose() {
|
|
82
|
+
lint.dispose();
|
|
83
|
+
validator.dispose();
|
|
84
|
+
language.dispose();
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
async function createLintSession(manifest, options = {}) {
|
|
89
|
+
const tooling = await createToolingBinding({ binding: options.binding });
|
|
90
|
+
const [lint, validator, language] = await Promise.all([
|
|
91
|
+
tooling.createLintSession(manifest),
|
|
92
|
+
tooling.createValidatorSession(manifest),
|
|
93
|
+
tooling.createLanguageSession(manifest)
|
|
94
|
+
]);
|
|
95
|
+
return bindLintSession(lint, validator, language);
|
|
96
|
+
}
|
|
97
|
+
export { bindLintSession, createLintSession };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// src/lint/constants.ts
|
|
2
|
+
const defaultClassLintSettings = Object.freeze({
|
|
3
|
+
classAttributes: Object.freeze(["class", "className"]),
|
|
4
|
+
classFunctions: Object.freeze([
|
|
5
|
+
"clsx",
|
|
6
|
+
"cva",
|
|
7
|
+
"ctl",
|
|
8
|
+
"cv",
|
|
9
|
+
"class",
|
|
10
|
+
"classnames",
|
|
11
|
+
"classVariant",
|
|
12
|
+
"styled(?:\\s+)?(?:\\.\\w+)?",
|
|
13
|
+
"classList(?:\\s+)?\\.(?:add|remove|toggle|replace)"
|
|
14
|
+
]),
|
|
15
|
+
classDeclarations: Object.freeze([]),
|
|
16
|
+
ignoredKeys: Object.freeze(["compoundVariants", "defaultVariants"])
|
|
17
|
+
});
|
|
18
|
+
export { defaultClassLintSettings };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
interface RawValuePolicyOptions {
|
|
2
|
+
allowRawValues?: boolean;
|
|
3
|
+
allowProperties?: readonly string[];
|
|
4
|
+
/** Limit enforcement to these native properties; omitted or empty means all token-backed properties. */
|
|
5
|
+
requireProperties?: readonly string[];
|
|
6
|
+
allowedPatterns?: readonly string[];
|
|
7
|
+
}
|
|
8
|
+
interface RemoteStylingPolicyOptions {
|
|
9
|
+
/** Classes in one list that may style other elements through a combinator (`_`, `>`, `+`, `~`); default 3. */
|
|
10
|
+
max?: number;
|
|
11
|
+
}
|
|
12
|
+
interface CanonicalClassNameOptions {
|
|
13
|
+
preferStaticUtilities?: boolean;
|
|
14
|
+
preferCompositionUtilities?: boolean;
|
|
15
|
+
}
|
|
16
|
+
declare const defaultCanonicalClassNameOptions: Readonly<Required<CanonicalClassNameOptions>>;
|
|
17
|
+
export { CanonicalClassNameOptions, RawValuePolicyOptions, RemoteStylingPolicyOptions, defaultCanonicalClassNameOptions };
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
declare function quoteDiagnosticValue(value: string): string;
|
|
2
|
+
declare function formatClassName(className: string): string;
|
|
3
|
+
declare function formatClassList(classNames: string[] | string): string;
|
|
4
|
+
declare function formatReason(reason: string): string;
|
|
5
|
+
export { formatClassList, formatClassName, formatReason, quoteDiagnosticValue };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// src/lint/diagnostic-format.ts
|
|
2
|
+
function quoteDiagnosticValue(value) {
|
|
3
|
+
return JSON.stringify(value);
|
|
4
|
+
}
|
|
5
|
+
function formatClassName(className) {
|
|
6
|
+
return quoteDiagnosticValue(className);
|
|
7
|
+
}
|
|
8
|
+
function formatClassList(classNames) {
|
|
9
|
+
return quoteDiagnosticValue(Array.isArray(classNames) ? classNames.join(" ") : classNames);
|
|
10
|
+
}
|
|
11
|
+
function formatReason(reason) {
|
|
12
|
+
const normalized = reason.trim();
|
|
13
|
+
return /[.!?]$/.test(normalized) ? normalized : `${normalized}.`;
|
|
14
|
+
}
|
|
15
|
+
export { formatClassList, formatClassName, formatReason, quoteDiagnosticValue };
|
|
@@ -0,0 +1,42 @@
|
|
|
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 };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,21 @@
|
|
|
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 };
|
|
@@ -0,0 +1,30 @@
|
|
|
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 };
|
|
@@ -0,0 +1,6 @@
|
|
|
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 };
|
|
@@ -0,0 +1,11 @@
|
|
|
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 };
|
|
@@ -0,0 +1,23 @@
|
|
|
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 };
|
|
@@ -0,0 +1,27 @@
|
|
|
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 };
|
|
@@ -0,0 +1,70 @@
|
|
|
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 };
|