@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,87 +0,0 @@
1
- import { freezeToolingResult } from "../immutable.js";
2
- import { withCSSValueValidation } from "../value-validation.js";
3
- import { MASTER_CSS_LANGUAGE_BATCH_VERSION } from "@master/css-binding/tooling";
4
- import { MasterCSSError } from "@master/css-schema";
5
- // src/language/session.ts
6
- function parse(value) {
7
- return value;
8
- }
9
- function validate(value) {
10
- if (value.version !== MASTER_CSS_LANGUAGE_BATCH_VERSION) throw new MasterCSSError({
11
- code: "LANGUAGE_BATCH_VERSION_MISMATCH",
12
- domain: "tooling",
13
- message: `Expected Master CSS language batch version ${MASTER_CSS_LANGUAGE_BATCH_VERSION}, received ${String(value.version)}.`
14
- });
15
- return freezeToolingResult(value);
16
- }
17
- function bindLanguageSession(binding, session, nativeClassNames = []) {
18
- const nativeClasses = new Set(nativeClassNames);
19
- let disposed = false;
20
- const assertActive = () => {
21
- if (disposed) throw new MasterCSSError({
22
- code: "SESSION_DISPOSED",
23
- domain: "tooling",
24
- message: "The Master CSS language session has been disposed."
25
- });
26
- };
27
- const dispose = () => {
28
- if (disposed) return;
29
- disposed = true;
30
- completionIndexCache = void 0;
31
- session.dispose();
32
- };
33
- let completionIndexCache;
34
- return {
35
- binding,
36
- analyzeDocument(request) {
37
- assertActive();
38
- const prepared = session.prepareDocument(request);
39
- try {
40
- return validate(parse(session.finishDocument(prepared.id, [])));
41
- } finally {
42
- session.cancelDocument(prepared.id);
43
- }
44
- },
45
- formatDirectives(request) {
46
- assertActive();
47
- return validate(parse(session.formatDirectives(request)));
48
- },
49
- nativeDeclarationCompletion(request) {
50
- assertActive();
51
- const completion = parse(session.nativeDeclarationCompletion(request));
52
- return completion ? validate(completion) : void 0;
53
- },
54
- classifyClassNames(classNames) {
55
- assertActive();
56
- const values = [...classNames];
57
- return validate(parse(session.classifyClassNames(values)));
58
- },
59
- inspectClassName(className) {
60
- assertActive();
61
- const result = parse(session.inspectClassName(className));
62
- return validate(withCSSValueValidation({
63
- ...result,
64
- diagnostics: nativeClasses.has(className) && !result.rules.length ? [] : result.diagnostics ?? []
65
- }));
66
- },
67
- tokenFamilies() {
68
- assertActive();
69
- return validate(parse(session.tokenFamilies()));
70
- },
71
- completionIndex() {
72
- assertActive();
73
- return completionIndexCache ||= validate(parse(session.completionIndex()));
74
- },
75
- colorPresentation(token) {
76
- assertActive();
77
- return validate(parse(session.colorPresentation(token)));
78
- },
79
- colorTokens(candidates) {
80
- assertActive();
81
- return validate(parse(session.colorTokens(candidates)));
82
- },
83
- dispose,
84
- [Symbol.dispose]: dispose
85
- };
86
- }
87
- export { bindLanguageSession };
@@ -1,13 +0,0 @@
1
- import { MasterCSSManifest } from "@master/css-schema/manifest";
2
- interface ClassPositionSettings {
3
- classAttributes?: string[];
4
- classFunctions?: string[];
5
- classDeclarations?: string[];
6
- classAttributeBindings?: Record<string, [string, string] | false>;
7
- }
8
- declare const languageSettings: LanguageSettings;
9
- interface LanguageSettings extends ClassPositionSettings {
10
- manifest?: MasterCSSManifest;
11
- embeddedSyntaxHighlighting?: 'active' | 'always' | 'off';
12
- }
13
- export { ClassPositionSettings, LanguageSettings, languageSettings as default };
@@ -1,19 +0,0 @@
1
- import { CLASS_ATTRIBUTES, CLASS_DECLARATIONS, CLASS_FUNCTIONS } from "./master-css.js";
2
- // src/language/settings.ts
3
- const languageSettings = {
4
- classAttributes: CLASS_ATTRIBUTES,
5
- classAttributeBindings: {
6
- "className": ["{", "}"],
7
- "class": ["{", "}"],
8
- "class:list": ["{", "}"],
9
- ":class": ["\"", "\""],
10
- "v-bind:class": ["\"", "\""],
11
- "[class]": ["\"", "\""],
12
- "[className]": ["\"", "\""],
13
- "[ngClass]": ["\"", "\""]
14
- },
15
- classDeclarations: CLASS_DECLARATIONS,
16
- classFunctions: CLASS_FUNCTIONS,
17
- embeddedSyntaxHighlighting: "active"
18
- };
19
- export { languageSettings as default };
@@ -1,5 +0,0 @@
1
- declare function getMdnPropertySyntax(name: string | undefined): string | undefined;
2
- declare function getMdnPropertyValueNames(name: string | undefined): string[];
3
- declare function getMdnPseudoClassNames(): string[];
4
- declare function getMdnPseudoElementNames(): string[];
5
- export { getMdnPropertySyntax, getMdnPropertyValueNames, getMdnPseudoClassNames, getMdnPseudoElementNames };
@@ -1,63 +0,0 @@
1
- import propertiesJSON from "mdn-data/css/properties.json" with { type: "json" };
2
- import selectorsJSON from "mdn-data/css/selectors.json" with { type: "json" };
3
- import syntaxesJSON from "mdn-data/css/syntaxes.json" with { type: "json" };
4
- // src/language/utils/mdn-css-data.ts
5
- const mdnCSSData = {
6
- properties: propertiesJSON,
7
- selectors: selectorsJSON,
8
- syntaxes: syntaxesJSON
9
- };
10
- const PAGE_PSEUDO_CLASS_NAMES = /* @__PURE__ */ new Set([
11
- ":first",
12
- ":left",
13
- ":right",
14
- ":blank"
15
- ]);
16
- const REFERENCE_RE = /<('([^']+)'|([a-zA-Z][\w-]*)(?:\s+[^>]*)?)>/g;
17
- const TOKEN_RE = /-?[a-zA-Z_][\w-]*/g;
18
- const VENDOR_PREFIX_RE = /^-(?:webkit|moz|ms)-/;
19
- const NON_KEYWORD_TOKENS = /* @__PURE__ */ new Set([
20
- "∞",
21
- "n",
22
- "of"
23
- ]);
24
- function unique(values) {
25
- return [...new Set(values)];
26
- }
27
- function getMdnPropertySyntax(name) {
28
- if (!name) return;
29
- const exactSyntax = mdnCSSData.properties[name]?.syntax;
30
- if (exactSyntax) return exactSyntax;
31
- if (VENDOR_PREFIX_RE.test(name)) return mdnCSSData.properties[name.replace(VENDOR_PREFIX_RE, "")]?.syntax;
32
- }
33
- function getSyntaxByReference(name) {
34
- return mdnCSSData.properties[name]?.syntax || mdnCSSData.syntaxes[name]?.syntax;
35
- }
36
- function collectSyntaxKeywordValues(syntax, seen = /* @__PURE__ */ new Set()) {
37
- if (!syntax) return [];
38
- const values = [];
39
- let syntaxWithoutReferences = syntax;
40
- for (const match of syntax.matchAll(REFERENCE_RE)) {
41
- const referenceName = match[2] || match[3];
42
- if (!referenceName || seen.has(referenceName)) continue;
43
- seen.add(referenceName);
44
- values.push(...collectSyntaxKeywordValues(getSyntaxByReference(referenceName), seen));
45
- syntaxWithoutReferences = syntaxWithoutReferences.replace(match[0], " ");
46
- }
47
- for (const match of syntaxWithoutReferences.matchAll(TOKEN_RE)) {
48
- const value = match[0];
49
- if (NON_KEYWORD_TOKENS.has(value) || /^-?\d/.test(value)) continue;
50
- values.push(value);
51
- }
52
- return unique(values);
53
- }
54
- function getMdnPropertyValueNames(name) {
55
- return unique(collectSyntaxKeywordValues(getMdnPropertySyntax(name)));
56
- }
57
- function getMdnPseudoClassNames() {
58
- return Object.keys(mdnCSSData.selectors).filter((name) => name.startsWith(":") && !name.startsWith("::") && !PAGE_PSEUDO_CLASS_NAMES.has(name));
59
- }
60
- function getMdnPseudoElementNames() {
61
- return Object.keys(mdnCSSData.selectors).filter((name) => name.startsWith("::"));
62
- }
63
- export { getMdnPropertySyntax, getMdnPropertyValueNames, getMdnPseudoClassNames, getMdnPseudoElementNames };
@@ -1,6 +0,0 @@
1
- import { LexerSession, LexerSessionError } from "./session.js";
2
- import { MasterCSSWasmBindingLoadOptions } from "@master/css-binding/tooling";
3
- declare function createLexerSession(options?: {
4
- wasm?: MasterCSSWasmBindingLoadOptions;
5
- }): Promise<LexerSession>;
6
- export { type LexerSession, LexerSessionError, createLexerSession };
@@ -1,11 +0,0 @@
1
- import { LexerSessionError, bindLexerSession } from "./session.js";
2
- import { createToolingBinding } from "@master/css-binding/tooling";
3
- // src/lexer/browser.ts
4
- async function createLexerSession(options = {}) {
5
- const tooling = await createToolingBinding({
6
- binding: "wasm",
7
- wasm: options.wasm
8
- });
9
- return bindLexerSession(tooling.binding, await tooling.createLexerSession());
10
- }
11
- export { LexerSessionError, createLexerSession };
@@ -1,41 +0,0 @@
1
- interface MasterCSSSourceRange {
2
- readonly start: number;
3
- readonly end: number;
4
- }
5
- interface MasterCSSClassListInput {
6
- readonly source: string;
7
- readonly unescape?: readonly string[];
8
- }
9
- interface MasterCSSClassListAnalysisRequest {
10
- readonly classLists?: readonly MasterCSSClassListInput[];
11
- readonly cssSources?: readonly string[];
12
- readonly escapeIdentifiers?: readonly string[];
13
- }
14
- interface MasterCSSClassListItem {
15
- readonly range: MasterCSSSourceRange;
16
- readonly raw: string;
17
- readonly token: string;
18
- }
19
- interface MasterCSSCSSDirectiveAnalysis {
20
- readonly name: string;
21
- readonly range: MasterCSSSourceRange;
22
- readonly preludeRange: MasterCSSSourceRange;
23
- readonly hasBlock: boolean;
24
- readonly quotedStrings: number;
25
- }
26
- interface MasterCSSCSSImportAnalysis {
27
- readonly range: MasterCSSSourceRange;
28
- readonly statement: string;
29
- readonly source?: string;
30
- }
31
- interface MasterCSSCSSAnalysis {
32
- readonly directives: readonly MasterCSSCSSDirectiveAnalysis[];
33
- readonly imports: readonly MasterCSSCSSImportAnalysis[];
34
- }
35
- interface MasterCSSClassListAnalysis {
36
- readonly version: 1;
37
- readonly classLists: readonly (readonly MasterCSSClassListItem[])[];
38
- readonly cssSources: readonly MasterCSSCSSAnalysis[];
39
- readonly escapedIdentifiers: readonly string[];
40
- }
41
- export { MasterCSSCSSAnalysis, MasterCSSCSSDirectiveAnalysis, MasterCSSCSSImportAnalysis, MasterCSSClassListAnalysis, MasterCSSClassListAnalysisRequest, MasterCSSClassListInput, MasterCSSClassListItem, MasterCSSSourceRange };
@@ -1 +0,0 @@
1
- export {};
@@ -1,8 +0,0 @@
1
- import { MasterCSSCSSAnalysis, MasterCSSCSSDirectiveAnalysis, MasterCSSCSSImportAnalysis, MasterCSSClassListAnalysis, MasterCSSClassListAnalysisRequest, MasterCSSClassListInput, MasterCSSClassListItem, MasterCSSSourceRange } from "./contracts.js";
2
- import { MasterCSSBinding } from "@master/css-binding";
3
- import { MasterCSSManifest } from "@master/css-schema/manifest";
4
- declare function analyzeClassList(request: MasterCSSClassListAnalysisRequest, options: {
5
- readonly manifest: MasterCSSManifest;
6
- readonly binding?: MasterCSSBinding;
7
- }): Promise<MasterCSSClassListAnalysis>;
8
- export { type MasterCSSCSSAnalysis, type MasterCSSCSSDirectiveAnalysis, type MasterCSSCSSImportAnalysis, type MasterCSSClassListAnalysis, type MasterCSSClassListAnalysisRequest, type MasterCSSClassListInput, type MasterCSSClassListItem, type MasterCSSSourceRange, analyzeClassList };
@@ -1,11 +0,0 @@
1
- import { createToolingSession } from "../tooling-session.js";
2
- // src/lexer/index.ts
3
- async function analyzeClassList(request, options) {
4
- const session = await createToolingSession(options);
5
- try {
6
- return session.analyzeClassList(request);
7
- } finally {
8
- session.dispose();
9
- }
10
- }
11
- export { analyzeClassList };
@@ -1,7 +0,0 @@
1
- import { MasterCSSClassListAnalysis, MasterCSSClassListAnalysisRequest } from "./contracts.js";
2
- import "./index.js";
3
- import { MasterCSSManifest } from "@master/css-schema/manifest";
4
- declare function analyzeClassListSync(request: MasterCSSClassListAnalysisRequest, options: {
5
- readonly manifest: MasterCSSManifest;
6
- }): MasterCSSClassListAnalysis;
7
- export { analyzeClassListSync };
@@ -1,11 +0,0 @@
1
- import { createToolingSessionSync } from "../node.js";
2
- // src/lexer/node.ts
3
- function analyzeClassListSync(request, options) {
4
- const session = createToolingSessionSync(options);
5
- try {
6
- return session.analyzeClassList(request);
7
- } finally {
8
- session.dispose();
9
- }
10
- }
11
- export { analyzeClassListSync };
@@ -1,17 +0,0 @@
1
- import { MasterCSSLexerBatch, MasterCSSLexerBatchRequest } from "@master/css-binding/tooling";
2
- type LexerBatchRequest = MasterCSSLexerBatchRequest;
3
- interface BindingLexerSession {
4
- analyze(request: unknown): unknown;
5
- dispose(): void;
6
- }
7
- interface LexerSession {
8
- readonly binding: 'native' | 'wasm';
9
- analyze(request: LexerBatchRequest): MasterCSSLexerBatch;
10
- dispose(): void;
11
- }
12
- declare class LexerSessionError extends Error {
13
- readonly code: 'NATIVE_UNAVAILABLE' | 'LEXER_BATCH_VERSION_MISMATCH';
14
- constructor(code: 'NATIVE_UNAVAILABLE' | 'LEXER_BATCH_VERSION_MISMATCH', message: string);
15
- }
16
- declare function bindLexerSession(binding: LexerSession['binding'], session: BindingLexerSession): LexerSession;
17
- export { LexerBatchRequest, LexerSession, LexerSessionError, bindLexerSession };
@@ -1,25 +0,0 @@
1
- import { MASTER_CSS_LEXER_BATCH_VERSION } from "@master/css-binding/tooling";
2
- // src/lexer/session.ts
3
- var LexerSessionError = class extends Error {
4
- code;
5
- constructor(code, message) {
6
- super(message);
7
- this.code = code;
8
- this.name = "LexerSessionError";
9
- }
10
- };
11
- function parse(value) {
12
- const result = value;
13
- if (result.version !== MASTER_CSS_LEXER_BATCH_VERSION) throw new LexerSessionError("LEXER_BATCH_VERSION_MISMATCH", `Expected Master CSS lexer batch version ${MASTER_CSS_LEXER_BATCH_VERSION}, received ${String(result.version)}.`);
14
- return result;
15
- }
16
- function bindLexerSession(binding, session) {
17
- return {
18
- binding,
19
- analyze(request) {
20
- return parse(session.analyze(request));
21
- },
22
- dispose: () => session.dispose()
23
- };
24
- }
25
- export { LexerSessionError, bindLexerSession };
@@ -1,90 +0,0 @@
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 };
@@ -1 +0,0 @@
1
- export {};
@@ -1,21 +0,0 @@
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 };
@@ -1,97 +0,0 @@
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 };
@@ -1,7 +0,0 @@
1
- declare const defaultClassLintSettings: Readonly<{
2
- classAttributes: readonly string[];
3
- classFunctions: readonly string[];
4
- classDeclarations: readonly string[];
5
- ignoredKeys: readonly string[];
6
- }>;
7
- export { defaultClassLintSettings };
@@ -1,18 +0,0 @@
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 };
@@ -1,17 +0,0 @@
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 };
@@ -1,6 +0,0 @@
1
- // src/lint/contracts.ts
2
- const defaultCanonicalClassNameOptions = Object.freeze({
3
- preferStaticUtilities: true,
4
- preferCompositionUtilities: true
5
- });
6
- export { defaultCanonicalClassNameOptions };
@@ -1,5 +0,0 @@
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 };
@@ -1,15 +0,0 @@
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 };