@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
package/README.md
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# @master/css-tooling
|
|
2
|
+
|
|
3
|
+
Rust-backed extraction and developer tooling for Master CSS.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @master/css-tooling
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
The package groups related tooling responsibilities behind explicit subpaths:
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
import { createToolingSession } from '@master/css-tooling'
|
|
15
|
+
import { analyzeClassList } from '@master/css-tooling/lexer'
|
|
16
|
+
import { extractSource } from '@master/css-tooling/source'
|
|
17
|
+
import { validateClassNames } from '@master/css-tooling/validator'
|
|
18
|
+
import { lintClassNames } from '@master/css-tooling/lint'
|
|
19
|
+
import { analyzeDocument } from '@master/css-tooling/language'
|
|
20
|
+
import { MasterCSSScanner } from '@master/css-tooling/scanner/node'
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Every semantic operation requires an explicit manifest. Use
|
|
24
|
+
`createToolingSession({ manifest })` to share one binding/cache across validator,
|
|
25
|
+
lint, and language operations. Feature subpaths provide async one-shot APIs; their
|
|
26
|
+
`./node` entries provide native synchronous counterparts with a `Sync` suffix.
|
|
27
|
+
`MasterCSSScanner` is available only from `./scanner/node` and owns filesystem/watch
|
|
28
|
+
graph lifecycle.
|
|
29
|
+
|
|
30
|
+
Both language sessions and composite tooling sessions expose `tokenFamilies()`.
|
|
31
|
+
The readonly result is `{ version, families }`, derived from the active manifest's
|
|
32
|
+
loaded utilities. Each family has `utility`, `prefix`, `namespace`, `properties`, and
|
|
33
|
+
`argument: 'value' | 'key'`. Definitions are included even without current token
|
|
34
|
+
values; class completions still require tokens. Direct-value families forward a
|
|
35
|
+
CSS value, while string recipes receive a token key. Theme-only manifests must
|
|
36
|
+
load or define utilities explicitly.
|
|
37
|
+
|
|
38
|
+
`scanner.scanSource(source, content)` uses the same built-in adapters and Rust
|
|
39
|
+
scanner as `scan`, returning a `MasterCSSScannerSourceResult` with `changed` and
|
|
40
|
+
all `candidates` extracted from that input. Candidates include repeated classes,
|
|
41
|
+
cache hits and blocklisted candidates; they are source occurrences, not a list of
|
|
42
|
+
newly generated rules. Use the scanner state for final classification. `scan` and
|
|
43
|
+
`scanModule` continue to return a boolean indicating a scanner change.
|
|
44
|
+
|
|
45
|
+
For host parsers that decode enclosing HTML before parsing expressions,
|
|
46
|
+
`session.decodeHTMLAttribute(source)` decodes attribute contents without their
|
|
47
|
+
delimiters and returns `{ value, spans }`. Each span maps a decoded UTF-16 `range`
|
|
48
|
+
to its original UTF-16 `sourceRange`; an entire character reference stays one
|
|
49
|
+
indivisible source span. The decoder follows HTML attribute reference rules and
|
|
50
|
+
input newline normalization. `MasterCSSDecodedHTMLAttribute` is available from
|
|
51
|
+
`@master/css-tooling/source`. Both native and tooling-Wasm bindings support this
|
|
52
|
+
operation; older bindings without the mapping response fail explicitly.
|
|
53
|
+
|
|
54
|
+
Scanner source adapters are first-party implementation details. The package does not
|
|
55
|
+
provide a public third-party adapter registry.
|
|
56
|
+
|
|
57
|
+
Shiki helpers and the shared TextMate grammar live in
|
|
58
|
+
`@master/css-language-service`.
|
package/dist/browser.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { MasterCSSToolingSession, createToolingSession } from "./tooling-session.js";
|
package/dist/css.d.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { SyntaxError } from "./validator/types/syntax-error.js";
|
|
2
|
+
declare function validateCSS(text: string, parseOptions?: {
|
|
3
|
+
parseAtrulePrelude: boolean;
|
|
4
|
+
parseRulePrelude: boolean;
|
|
5
|
+
parseValue: boolean;
|
|
6
|
+
parseCustomProperty: boolean;
|
|
7
|
+
}): any[];
|
|
8
|
+
declare function parseCSSDeclarations(text: string): Record<string, string>;
|
|
9
|
+
declare function isTargetError(error: SyntaxError | null): SyntaxError | null;
|
|
10
|
+
declare function validateAtrule(node: {
|
|
11
|
+
name: any;
|
|
12
|
+
prelude: any;
|
|
13
|
+
block: {
|
|
14
|
+
children: any[];
|
|
15
|
+
};
|
|
16
|
+
}, nestedInRule?: boolean): (SyntaxError & {
|
|
17
|
+
atrule: any;
|
|
18
|
+
})[];
|
|
19
|
+
declare function validateAtrulePrelude(atrule: string, prelude: any): (SyntaxError & {
|
|
20
|
+
atrule: string;
|
|
21
|
+
})[];
|
|
22
|
+
declare function validateAtruleDescriptor(atrule: any, descriptor: string, value: any): (SyntaxError & {
|
|
23
|
+
atrule: any;
|
|
24
|
+
descriptor: string;
|
|
25
|
+
})[];
|
|
26
|
+
declare function validateDeclaration(property: string, value: any): any[];
|
|
27
|
+
declare function validateRule(node: {
|
|
28
|
+
block: {
|
|
29
|
+
children: any[];
|
|
30
|
+
};
|
|
31
|
+
}): any[];
|
|
32
|
+
export { isTargetError, parseCSSDeclarations, validateAtrule, validateAtruleDescriptor, validateAtrulePrelude, validateCSS, validateDeclaration, validateRule };
|
package/dist/css.js
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { generate, lexer, parse, property, walk } from "@eslint/css-tree";
|
|
2
|
+
// src/css.ts
|
|
3
|
+
function validateCSS(text, parseOptions = {
|
|
4
|
+
parseAtrulePrelude: false,
|
|
5
|
+
parseRulePrelude: false,
|
|
6
|
+
parseValue: false,
|
|
7
|
+
parseCustomProperty: false
|
|
8
|
+
}) {
|
|
9
|
+
const errors = [];
|
|
10
|
+
const ast = parse(text, {
|
|
11
|
+
...parseOptions,
|
|
12
|
+
onParseError(error) {
|
|
13
|
+
errors.push(error);
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
walk(ast, {
|
|
17
|
+
visit: "Atrule",
|
|
18
|
+
enter(node) {
|
|
19
|
+
errors.push(...validateAtrule(node, !!this.rule));
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
walk(ast, {
|
|
23
|
+
visit: "Rule",
|
|
24
|
+
enter(node) {
|
|
25
|
+
errors.push(...validateRule(node));
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
return errors;
|
|
29
|
+
}
|
|
30
|
+
function parseCSSDeclarations(text) {
|
|
31
|
+
const declarations = {};
|
|
32
|
+
const ast = parse(text, { positions: true });
|
|
33
|
+
walk(ast, {
|
|
34
|
+
visit: "Declaration",
|
|
35
|
+
enter(node) {
|
|
36
|
+
const value = node.value.loc ? text.slice(node.value.loc.start.offset, node.value.loc.end.offset) : generate(node.value);
|
|
37
|
+
declarations[node.property] = node.important ? `${value}!important` : value;
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
return declarations;
|
|
41
|
+
}
|
|
42
|
+
function isTargetError(error) {
|
|
43
|
+
if (!error) return null;
|
|
44
|
+
if (error.name === "UnsupportedMatchingTree") return null;
|
|
45
|
+
if (error.name !== "SyntaxError" && error.name !== "SyntaxMatchError" && error.name !== "SyntaxReferenceError") return null;
|
|
46
|
+
return error;
|
|
47
|
+
}
|
|
48
|
+
function validateAtrule(node, nestedInRule = false) {
|
|
49
|
+
const atrule = node.name;
|
|
50
|
+
const errors = [];
|
|
51
|
+
let error;
|
|
52
|
+
if (error = isTargetError(lexer.checkAtruleName(atrule))) {
|
|
53
|
+
errors.push(Object.assign(error, { atrule }));
|
|
54
|
+
return errors;
|
|
55
|
+
}
|
|
56
|
+
errors.push(...validateAtrulePrelude(atrule, node.prelude));
|
|
57
|
+
if (node.block && node.block.children) node.block.children.forEach((child) => {
|
|
58
|
+
if (child.type === "Declaration") errors.push(...nestedInRule && [
|
|
59
|
+
"media",
|
|
60
|
+
"supports",
|
|
61
|
+
"container",
|
|
62
|
+
"layer",
|
|
63
|
+
"scope",
|
|
64
|
+
"starting-style"
|
|
65
|
+
].includes(atrule.toLowerCase()) ? validateDeclaration(child.property, child.value) : validateAtruleDescriptor(atrule, child.property, child.value));
|
|
66
|
+
});
|
|
67
|
+
return errors;
|
|
68
|
+
}
|
|
69
|
+
function validateAtrulePrelude(atrule, prelude) {
|
|
70
|
+
const errors = [];
|
|
71
|
+
let error;
|
|
72
|
+
if (error = isTargetError(lexer.checkAtrulePrelude(atrule, prelude))) errors.push(Object.assign(error, { atrule }));
|
|
73
|
+
else if (error = isTargetError(lexer.matchAtrulePrelude(atrule, prelude).error)) errors.push(Object.assign(error, {
|
|
74
|
+
atrule,
|
|
75
|
+
...error.rawMessage === "Mismatch" && {
|
|
76
|
+
details: error.message,
|
|
77
|
+
message: "Invalid value for `@" + atrule + "` prelude"
|
|
78
|
+
}
|
|
79
|
+
}));
|
|
80
|
+
return errors;
|
|
81
|
+
}
|
|
82
|
+
function validateAtruleDescriptor(atrule, descriptor, value) {
|
|
83
|
+
const errors = [];
|
|
84
|
+
let error;
|
|
85
|
+
if (error = isTargetError(lexer.checkAtruleDescriptorName(atrule, descriptor))) errors.push(Object.assign(error, {
|
|
86
|
+
atrule,
|
|
87
|
+
descriptor
|
|
88
|
+
}));
|
|
89
|
+
else if (error = isTargetError(lexer.matchAtruleDescriptor(atrule, descriptor, value).error)) errors.push(Object.assign(error, {
|
|
90
|
+
atrule,
|
|
91
|
+
descriptor,
|
|
92
|
+
...error.rawMessage === "Mismatch" && {
|
|
93
|
+
details: error.message,
|
|
94
|
+
message: "Invalid value for `" + descriptor + "` descriptor"
|
|
95
|
+
}
|
|
96
|
+
}));
|
|
97
|
+
return errors;
|
|
98
|
+
}
|
|
99
|
+
function validateDeclaration(property$1, value) {
|
|
100
|
+
const errors = [];
|
|
101
|
+
let error;
|
|
102
|
+
if (property(property$1).custom) return errors;
|
|
103
|
+
if (error = isTargetError(lexer.checkPropertyName(property$1))) errors.push(Object.assign(error, { property: property$1 }));
|
|
104
|
+
else if (error = isTargetError(lexer.matchProperty(property$1, value).error)) errors.push(Object.assign(error, {
|
|
105
|
+
property: property$1,
|
|
106
|
+
...error.rawMessage === "Mismatch" && {
|
|
107
|
+
details: error.message,
|
|
108
|
+
message: "Invalid value for `" + property$1 + "` property"
|
|
109
|
+
}
|
|
110
|
+
}));
|
|
111
|
+
return errors;
|
|
112
|
+
}
|
|
113
|
+
function validateRule(node) {
|
|
114
|
+
const errors = [];
|
|
115
|
+
if (node.block && node.block.children) node.block.children.forEach((child) => {
|
|
116
|
+
if (child.type === "Declaration") errors.push(...validateDeclaration(child.property, child.value));
|
|
117
|
+
});
|
|
118
|
+
return errors;
|
|
119
|
+
}
|
|
120
|
+
export { isTargetError, parseCSSDeclarations, validateAtrule, validateAtruleDescriptor, validateAtrulePrelude, validateCSS, validateDeclaration, validateRule };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// src/immutable.ts
|
|
2
|
+
function freezeToolingResult(value) {
|
|
3
|
+
if (value === null || typeof value !== "object" || Object.isFrozen(value)) return value;
|
|
4
|
+
for (const nested of Object.values(value)) freezeToolingResult(nested);
|
|
5
|
+
return Object.freeze(value);
|
|
6
|
+
}
|
|
7
|
+
export { freezeToolingResult };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { MasterCSSDocumentAnalysis, MasterCSSDocumentAnalysisRequest, MasterCSSFormatDirectivesRequest, MasterCSSFormatDirectivesResult, MasterCSSLanguageClassListContext, MasterCSSLanguageClassPosition, MasterCSSLanguageTokenFamilies, MasterCSSTokenFamily } from "./language/contracts.js";
|
|
2
|
+
import { MasterCSSToolingSession, MasterCSSToolingSessionOptions, createToolingSession } from "./tooling-session.js";
|
|
3
|
+
export { type MasterCSSDocumentAnalysis, type MasterCSSDocumentAnalysisRequest, type MasterCSSFormatDirectivesRequest, type MasterCSSFormatDirectivesResult, type MasterCSSLanguageClassListContext, type MasterCSSLanguageClassPosition, type MasterCSSLanguageTokenFamilies, type MasterCSSTokenFamily, MasterCSSToolingSession, type MasterCSSToolingSessionOptions, createToolingSession };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { MasterCSSToolingSession, createToolingSession } from "./tooling-session.js";
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { LanguageSession, bindLanguageSession } from "./session.js";
|
|
2
|
+
import { MasterCSSManifest } from "@master/css-schema/manifest";
|
|
3
|
+
declare function createLanguageSession(manifest: MasterCSSManifest, options?: {
|
|
4
|
+
readonly binding?: 'auto' | 'native' | 'wasm';
|
|
5
|
+
}): Promise<LanguageSession>;
|
|
6
|
+
export { type LanguageSession, bindLanguageSession, createLanguageSession };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { bindLanguageSession } from "./session.js";
|
|
2
|
+
import { createToolingBinding } from "@master/css-binding/tooling";
|
|
3
|
+
// src/language/binding-session.ts
|
|
4
|
+
async function createLanguageSession(manifest, options = {}) {
|
|
5
|
+
const tooling = await createToolingBinding({ binding: options.binding });
|
|
6
|
+
return bindLanguageSession(tooling.binding, await tooling.createLanguageSession(manifest));
|
|
7
|
+
}
|
|
8
|
+
export { bindLanguageSession, createLanguageSession };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { SEMANTIC_TOKENS_LEGEND, SEMANTIC_TOKEN_MODIFIERS, SEMANTIC_TOKEN_TYPES } from "./common.js";
|
|
2
|
+
import { LanguageSession } from "./session.js";
|
|
3
|
+
import { MasterCSSWasmBindingLoadOptions } from "@master/css-binding/tooling";
|
|
4
|
+
import { MasterCSSManifest } from "@master/css-schema/manifest";
|
|
5
|
+
interface BrowserLanguageSessionOptions {
|
|
6
|
+
manifest: MasterCSSManifest;
|
|
7
|
+
wasm?: MasterCSSWasmBindingLoadOptions;
|
|
8
|
+
}
|
|
9
|
+
declare function createLanguageSession(options: BrowserLanguageSessionOptions): Promise<LanguageSession>;
|
|
10
|
+
export { BrowserLanguageSessionOptions, type LanguageSession, type MasterCSSWasmBindingLoadOptions, SEMANTIC_TOKENS_LEGEND, SEMANTIC_TOKEN_MODIFIERS, SEMANTIC_TOKEN_TYPES, createLanguageSession };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { bindLanguageSession } from "./session.js";
|
|
2
|
+
import { SEMANTIC_TOKENS_LEGEND, SEMANTIC_TOKEN_MODIFIERS, SEMANTIC_TOKEN_TYPES } from "./common.js";
|
|
3
|
+
import { createToolingBinding } from "@master/css-binding/tooling";
|
|
4
|
+
// src/language/browser.ts
|
|
5
|
+
async function createLanguageSession(options) {
|
|
6
|
+
const tooling = await createToolingBinding({
|
|
7
|
+
binding: "wasm",
|
|
8
|
+
wasm: options.wasm
|
|
9
|
+
});
|
|
10
|
+
return bindLanguageSession(tooling.binding, await tooling.createLanguageSession(options.manifest));
|
|
11
|
+
}
|
|
12
|
+
export { SEMANTIC_TOKENS_LEGEND, SEMANTIC_TOKEN_MODIFIERS, SEMANTIC_TOKEN_TYPES, createLanguageSession };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
declare const INVOKED_TRIGGER_CHARACTERS: string[];
|
|
2
|
+
declare const VALUE_TRIGGER_CHARACTERS: string[];
|
|
3
|
+
declare const SELECTOR_TRIGGER_CHARACTERS: string[];
|
|
4
|
+
declare const AT_TRIGGER_CHARACTER = "@";
|
|
5
|
+
declare const QUERY_TRIGGER_CHARACTERS: string[];
|
|
6
|
+
declare const SEMANTIC_TOKEN_TYPES: readonly ['class', 'enumMember', 'property', 'variable', 'function', 'number', 'string', 'keyword', 'modifier', 'operator', 'type'];
|
|
7
|
+
declare const SEMANTIC_TOKEN_MODIFIERS: readonly ['declaration', 'defaultLibrary', 'component', 'directive', 'important', 'pseudoClass', 'pseudoElement', 'query', 'quoted', 'selector', 'unit', 'blockBrace', 'declarationSeparator', 'declarationTerminator', 'directiveTerminator', 'functionPunctuation', 'valueSeparator', 'valueOperator', 'queryOperator', 'queryPunctuation', 'selectorCombinator', 'selectorPunctuation', 'pseudoClassDelimiter', 'pseudoElementDelimiter'];
|
|
8
|
+
declare const SEMANTIC_TOKENS_LEGEND: {
|
|
9
|
+
tokenTypes: ("class" | "enumMember" | "function" | "keyword" | "modifier" | "number" | "operator" | "property" | "string" | "type" | "variable")[];
|
|
10
|
+
tokenModifiers: ("blockBrace" | "component" | "declaration" | "declarationSeparator" | "declarationTerminator" | "defaultLibrary" | "directive" | "directiveTerminator" | "functionPunctuation" | "important" | "pseudoClass" | "pseudoClassDelimiter" | "pseudoElement" | "pseudoElementDelimiter" | "query" | "queryOperator" | "queryPunctuation" | "quoted" | "selector" | "selectorCombinator" | "selectorPunctuation" | "unit" | "valueOperator" | "valueSeparator")[];
|
|
11
|
+
};
|
|
12
|
+
export { AT_TRIGGER_CHARACTER, INVOKED_TRIGGER_CHARACTERS, QUERY_TRIGGER_CHARACTERS, SELECTOR_TRIGGER_CHARACTERS, SEMANTIC_TOKENS_LEGEND, SEMANTIC_TOKEN_MODIFIERS, SEMANTIC_TOKEN_TYPES, VALUE_TRIGGER_CHARACTERS };
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { QUERY_COMPARISON_OPERATORS, QUERY_LOGICAL_OPERATORS, SELECTOR_SIGNS } from "./master-css.js";
|
|
2
|
+
// src/language/common.ts
|
|
3
|
+
const INVOKED_TRIGGER_CHARACTERS = [
|
|
4
|
+
"\"",
|
|
5
|
+
" ",
|
|
6
|
+
"'"
|
|
7
|
+
];
|
|
8
|
+
const VALUE_TRIGGER_CHARACTERS = [",", "|"];
|
|
9
|
+
const SELECTOR_TRIGGER_CHARACTERS = SELECTOR_SIGNS;
|
|
10
|
+
const AT_TRIGGER_CHARACTER = "@";
|
|
11
|
+
const QUERY_TRIGGER_CHARACTERS = [...QUERY_COMPARISON_OPERATORS, ...QUERY_LOGICAL_OPERATORS];
|
|
12
|
+
const SEMANTIC_TOKEN_TYPES = [
|
|
13
|
+
"class",
|
|
14
|
+
"enumMember",
|
|
15
|
+
"property",
|
|
16
|
+
"variable",
|
|
17
|
+
"function",
|
|
18
|
+
"number",
|
|
19
|
+
"string",
|
|
20
|
+
"keyword",
|
|
21
|
+
"modifier",
|
|
22
|
+
"operator",
|
|
23
|
+
"type"
|
|
24
|
+
];
|
|
25
|
+
const SEMANTIC_TOKEN_MODIFIERS = [
|
|
26
|
+
"declaration",
|
|
27
|
+
"defaultLibrary",
|
|
28
|
+
"component",
|
|
29
|
+
"directive",
|
|
30
|
+
"important",
|
|
31
|
+
"pseudoClass",
|
|
32
|
+
"pseudoElement",
|
|
33
|
+
"query",
|
|
34
|
+
"quoted",
|
|
35
|
+
"selector",
|
|
36
|
+
"unit",
|
|
37
|
+
"blockBrace",
|
|
38
|
+
"declarationSeparator",
|
|
39
|
+
"declarationTerminator",
|
|
40
|
+
"directiveTerminator",
|
|
41
|
+
"functionPunctuation",
|
|
42
|
+
"valueSeparator",
|
|
43
|
+
"valueOperator",
|
|
44
|
+
"queryOperator",
|
|
45
|
+
"queryPunctuation",
|
|
46
|
+
"selectorCombinator",
|
|
47
|
+
"selectorPunctuation",
|
|
48
|
+
"pseudoClassDelimiter",
|
|
49
|
+
"pseudoElementDelimiter"
|
|
50
|
+
];
|
|
51
|
+
const SEMANTIC_TOKENS_LEGEND = {
|
|
52
|
+
tokenTypes: [...SEMANTIC_TOKEN_TYPES],
|
|
53
|
+
tokenModifiers: [...SEMANTIC_TOKEN_MODIFIERS]
|
|
54
|
+
};
|
|
55
|
+
export { AT_TRIGGER_CHARACTER, INVOKED_TRIGGER_CHARACTERS, QUERY_TRIGGER_CHARACTERS, SELECTOR_TRIGGER_CHARACTERS, SEMANTIC_TOKENS_LEGEND, SEMANTIC_TOKEN_MODIFIERS, SEMANTIC_TOKEN_TYPES, VALUE_TRIGGER_CHARACTERS };
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import { CSS_VALUE_CHECK, DeclarationValidation } from "../value-validation.js";
|
|
2
|
+
import { CSS_SYNTAX_CHECK } from "../syntax-validation.js";
|
|
3
|
+
import { SemanticTokenItem } from "./semantic/types.js";
|
|
4
|
+
import { MasterCSSLanguageInspection as MasterCSSLanguageInspection$1, MasterCSSLanguageTokenFamilies, MasterCSSTokenFamily } from "@master/css-binding/tooling";
|
|
5
|
+
import { MasterCSSScopedThemeValue } from "@master/css-schema/manifest";
|
|
6
|
+
import { MasterCSSHydrationRule } from "@master/css-schema/hydration-manifest";
|
|
7
|
+
type MasterCSSLanguageClassKind = 'unknown' | 'component' | 'semantic' | 'utility' | 'declaration' | 'token';
|
|
8
|
+
interface MasterCSSLanguageClassListContext {
|
|
9
|
+
readonly start: number;
|
|
10
|
+
readonly end: number;
|
|
11
|
+
readonly unescape?: readonly string[];
|
|
12
|
+
}
|
|
13
|
+
interface MasterCSSLanguageClassPosition {
|
|
14
|
+
readonly range: Readonly<{
|
|
15
|
+
start: number;
|
|
16
|
+
end: number;
|
|
17
|
+
}>;
|
|
18
|
+
readonly contextRange: Readonly<{
|
|
19
|
+
start: number;
|
|
20
|
+
end: number;
|
|
21
|
+
}>;
|
|
22
|
+
readonly raw: string;
|
|
23
|
+
readonly token: string;
|
|
24
|
+
}
|
|
25
|
+
interface MasterCSSDocumentAnalysisRequest {
|
|
26
|
+
readonly source: string;
|
|
27
|
+
readonly languageId: string;
|
|
28
|
+
readonly hostRanges?: readonly MasterCSSLanguageClassListContext[];
|
|
29
|
+
readonly settings?: Readonly<{
|
|
30
|
+
classAttributes?: readonly string[];
|
|
31
|
+
classFunctions?: readonly string[];
|
|
32
|
+
classDeclarations?: readonly string[];
|
|
33
|
+
}>;
|
|
34
|
+
}
|
|
35
|
+
interface MasterCSSDocumentAnalysis {
|
|
36
|
+
readonly version: 6;
|
|
37
|
+
readonly classPositions: readonly MasterCSSLanguageClassPosition[];
|
|
38
|
+
readonly keyframePositions: readonly MasterCSSLanguageClassPosition[];
|
|
39
|
+
readonly diagnostics: readonly import('@master/css-binding/tooling').MasterCSSDiagnostic[];
|
|
40
|
+
readonly semanticTokens: readonly SemanticTokenItem[];
|
|
41
|
+
readonly semanticTokenData: readonly number[];
|
|
42
|
+
}
|
|
43
|
+
interface MasterCSSNativeDeclarationCompletionRequest extends MasterCSSDocumentAnalysisRequest {
|
|
44
|
+
/** The UTF-16 cursor offset in the source. */
|
|
45
|
+
readonly offset: number;
|
|
46
|
+
}
|
|
47
|
+
/** The completion context of a cursor inside a `(property:value)` class head. */
|
|
48
|
+
interface MasterCSSNativeDeclarationCompletion {
|
|
49
|
+
readonly version: number;
|
|
50
|
+
/** `none` is a string, comment, URL or nested function or block, where nothing completes. */
|
|
51
|
+
readonly kind: 'property' | 'value' | 'none';
|
|
52
|
+
/** The property of a value context. */
|
|
53
|
+
readonly property?: string;
|
|
54
|
+
/** The class text of the component before the cursor. */
|
|
55
|
+
readonly prefix: string;
|
|
56
|
+
/** The source range a completion replaces, including the component's rest after the cursor. */
|
|
57
|
+
readonly range?: Readonly<{
|
|
58
|
+
start: number;
|
|
59
|
+
end: number;
|
|
60
|
+
}>;
|
|
61
|
+
/** Text a completion must end with, such as the `)` an unclosed head lacks. */
|
|
62
|
+
readonly suffix?: string;
|
|
63
|
+
}
|
|
64
|
+
interface MasterCSSFormatDirectivesRequest {
|
|
65
|
+
readonly source: string;
|
|
66
|
+
readonly range?: Readonly<{
|
|
67
|
+
start: number;
|
|
68
|
+
end: number;
|
|
69
|
+
}>;
|
|
70
|
+
readonly styleRanges?: readonly Readonly<{
|
|
71
|
+
start: number;
|
|
72
|
+
end: number;
|
|
73
|
+
}>[];
|
|
74
|
+
}
|
|
75
|
+
interface MasterCSSFormatDirectivesResult {
|
|
76
|
+
readonly version: 6;
|
|
77
|
+
readonly edits: readonly Readonly<{
|
|
78
|
+
range: Readonly<{
|
|
79
|
+
start: number;
|
|
80
|
+
end: number;
|
|
81
|
+
}>;
|
|
82
|
+
text: string;
|
|
83
|
+
}>[];
|
|
84
|
+
}
|
|
85
|
+
interface MasterCSSLanguageClass {
|
|
86
|
+
readonly className: string;
|
|
87
|
+
readonly kind: MasterCSSLanguageClassKind;
|
|
88
|
+
readonly matcherTypes: readonly ('static' | 'key' | 'token' | 'function')[];
|
|
89
|
+
readonly keyToken?: string;
|
|
90
|
+
readonly valueToken?: string;
|
|
91
|
+
readonly stateToken?: string;
|
|
92
|
+
readonly important: boolean;
|
|
93
|
+
}
|
|
94
|
+
interface MasterCSSLanguageClassifications {
|
|
95
|
+
readonly version: 6;
|
|
96
|
+
readonly variableNames: readonly string[];
|
|
97
|
+
readonly classes: readonly MasterCSSLanguageClass[];
|
|
98
|
+
}
|
|
99
|
+
interface MasterCSSLanguageVariable {
|
|
100
|
+
readonly namespace?: string;
|
|
101
|
+
readonly name: string;
|
|
102
|
+
readonly key: string;
|
|
103
|
+
readonly type: string;
|
|
104
|
+
readonly values: readonly MasterCSSScopedThemeValue[];
|
|
105
|
+
readonly dependencies?: readonly string[];
|
|
106
|
+
}
|
|
107
|
+
interface MasterCSSLanguageClassVariable {
|
|
108
|
+
readonly key: string;
|
|
109
|
+
readonly variable: MasterCSSLanguageVariable;
|
|
110
|
+
}
|
|
111
|
+
interface MasterCSSLanguageInspection {
|
|
112
|
+
readonly version: 6;
|
|
113
|
+
readonly className: string;
|
|
114
|
+
readonly definitionSource?: MasterCSSLanguageInspection$1['definitionSource'];
|
|
115
|
+
readonly matchStatus: MasterCSSLanguageInspection$1['matchStatus'];
|
|
116
|
+
readonly declarations: readonly DeclarationValidation[];
|
|
117
|
+
readonly checks: readonly (typeof CSS_VALUE_CHECK | typeof CSS_SYNTAX_CHECK)[];
|
|
118
|
+
readonly cssSyntaxStatus: MasterCSSLanguageInspection$1['cssSyntaxStatus'];
|
|
119
|
+
readonly cssValueStatus: MasterCSSLanguageInspection$1['cssValueStatus'];
|
|
120
|
+
readonly browserSupport: MasterCSSLanguageInspection$1['browserSupport'];
|
|
121
|
+
readonly kind: MasterCSSLanguageClassKind;
|
|
122
|
+
readonly base: string;
|
|
123
|
+
readonly suffix: string;
|
|
124
|
+
readonly key?: string;
|
|
125
|
+
readonly value?: string;
|
|
126
|
+
readonly keyToken?: string;
|
|
127
|
+
readonly valueToken?: string;
|
|
128
|
+
readonly stateToken?: string;
|
|
129
|
+
readonly important: boolean;
|
|
130
|
+
readonly matcherTypes: readonly ('static' | 'key' | 'token' | 'function')[];
|
|
131
|
+
readonly variables: readonly MasterCSSLanguageClassVariable[];
|
|
132
|
+
readonly rules: readonly MasterCSSHydrationRule[];
|
|
133
|
+
readonly diagnostics?: MasterCSSLanguageInspection$1['diagnostics'];
|
|
134
|
+
readonly text: string;
|
|
135
|
+
}
|
|
136
|
+
type MasterCSSLanguageCompletionKind = 'property' | 'value' | 'function';
|
|
137
|
+
interface MasterCSSLanguageCompletionEntry {
|
|
138
|
+
readonly label: string;
|
|
139
|
+
readonly kind: MasterCSSLanguageCompletionKind;
|
|
140
|
+
readonly detail?: string;
|
|
141
|
+
readonly documentationText?: string;
|
|
142
|
+
readonly sortText?: string;
|
|
143
|
+
readonly insertText?: string;
|
|
144
|
+
readonly triggerSuggest: boolean;
|
|
145
|
+
}
|
|
146
|
+
interface MasterCSSLanguageCompletionIndex {
|
|
147
|
+
readonly version: 6;
|
|
148
|
+
readonly classEntries: readonly MasterCSSLanguageCompletionEntry[];
|
|
149
|
+
readonly keyframes: readonly Readonly<{
|
|
150
|
+
name: string;
|
|
151
|
+
insertText: string;
|
|
152
|
+
text: string;
|
|
153
|
+
sources: readonly NonNullable<MasterCSSLanguageInspection$1['definitionSource']>[];
|
|
154
|
+
}>[];
|
|
155
|
+
}
|
|
156
|
+
interface MasterCSSLanguageColorPresentation {
|
|
157
|
+
readonly version: 6;
|
|
158
|
+
readonly editable: boolean;
|
|
159
|
+
readonly replacementPrefix?: string;
|
|
160
|
+
/** Text after the color, such as the `)` closing a `(property:` replacement prefix. */
|
|
161
|
+
readonly replacementSuffix?: string;
|
|
162
|
+
readonly colorToken: string;
|
|
163
|
+
readonly sourceFormat?: MasterCSSLanguageColorFormat;
|
|
164
|
+
}
|
|
165
|
+
interface MasterCSSLanguageColorFormat {
|
|
166
|
+
readonly syntax: string;
|
|
167
|
+
readonly space?: string;
|
|
168
|
+
}
|
|
169
|
+
interface MasterCSSLanguageColorCandidate {
|
|
170
|
+
readonly className: string;
|
|
171
|
+
readonly start: number;
|
|
172
|
+
}
|
|
173
|
+
interface MasterCSSLanguageColorToken {
|
|
174
|
+
readonly range: Readonly<{
|
|
175
|
+
start: number;
|
|
176
|
+
end: number;
|
|
177
|
+
}>;
|
|
178
|
+
readonly expression: MasterCSSLanguageColorExpression;
|
|
179
|
+
}
|
|
180
|
+
type MasterCSSLanguageColorExpression = Readonly<{
|
|
181
|
+
kind: 'literal';
|
|
182
|
+
value: string;
|
|
183
|
+
alpha?: number;
|
|
184
|
+
}> | Readonly<{
|
|
185
|
+
kind: 'mix';
|
|
186
|
+
space: string;
|
|
187
|
+
hue?: string;
|
|
188
|
+
left: MasterCSSLanguageColorExpression;
|
|
189
|
+
right: MasterCSSLanguageColorExpression;
|
|
190
|
+
progress: number;
|
|
191
|
+
alphaMultiplier: number;
|
|
192
|
+
}>;
|
|
193
|
+
interface MasterCSSLanguageColorTokens {
|
|
194
|
+
readonly version: 6;
|
|
195
|
+
readonly tokens: readonly MasterCSSLanguageColorToken[];
|
|
196
|
+
}
|
|
197
|
+
export { MasterCSSDocumentAnalysis, MasterCSSDocumentAnalysisRequest, MasterCSSFormatDirectivesRequest, MasterCSSFormatDirectivesResult, MasterCSSLanguageClass, MasterCSSLanguageClassKind, MasterCSSLanguageClassListContext, MasterCSSLanguageClassPosition, MasterCSSLanguageClassVariable, MasterCSSLanguageClassifications, MasterCSSLanguageColorCandidate, MasterCSSLanguageColorExpression, MasterCSSLanguageColorFormat, MasterCSSLanguageColorPresentation, MasterCSSLanguageColorToken, MasterCSSLanguageColorTokens, MasterCSSLanguageCompletionEntry, MasterCSSLanguageCompletionIndex, MasterCSSLanguageCompletionKind, MasterCSSLanguageInspection, type MasterCSSLanguageTokenFamilies, MasterCSSLanguageVariable, MasterCSSNativeDeclarationCompletion, MasterCSSNativeDeclarationCompletionRequest, type MasterCSSTokenFamily };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { AT_TRIGGER_CHARACTER, INVOKED_TRIGGER_CHARACTERS, QUERY_TRIGGER_CHARACTERS, SELECTOR_TRIGGER_CHARACTERS, SEMANTIC_TOKENS_LEGEND, SEMANTIC_TOKEN_MODIFIERS, SEMANTIC_TOKEN_TYPES, VALUE_TRIGGER_CHARACTERS } from "./common.js";
|
|
2
|
+
import { HighlightTokenRole, SemanticTokenItem, SemanticTokenModifier, SemanticTokenType } from "./semantic/types.js";
|
|
3
|
+
import { MasterCSSDocumentAnalysis, MasterCSSDocumentAnalysisRequest, MasterCSSFormatDirectivesRequest, MasterCSSFormatDirectivesResult, MasterCSSLanguageClass, MasterCSSLanguageClassKind, MasterCSSLanguageClassListContext, MasterCSSLanguageClassPosition, MasterCSSLanguageClassVariable, MasterCSSLanguageClassifications, MasterCSSLanguageColorCandidate, MasterCSSLanguageColorExpression, MasterCSSLanguageColorFormat, MasterCSSLanguageColorPresentation, MasterCSSLanguageColorToken, MasterCSSLanguageColorTokens, MasterCSSLanguageCompletionEntry, MasterCSSLanguageCompletionIndex, MasterCSSLanguageCompletionKind, MasterCSSLanguageInspection, MasterCSSLanguageTokenFamilies, MasterCSSLanguageVariable, MasterCSSNativeDeclarationCompletion, MasterCSSNativeDeclarationCompletionRequest, MasterCSSTokenFamily } from "./contracts.js";
|
|
4
|
+
import { LanguageSession } from "./session.js";
|
|
5
|
+
import { AT_SIGN, CLASS_ATTRIBUTES, CLASS_DECLARATIONS, CLASS_FUNCTIONS, DELIMITER_SIGN, QUERY_COMPARISON_OPERATORS, QUERY_LOGICAL_OPERATORS, SELECTOR_SIGNS, SEPARATOR_SIGN, matchesLanguageServiceNativeDeclaration } from "./master-css.js";
|
|
6
|
+
import { MASTER_CSS_SEMANTIC_TOKEN_SCOPE_MAP, getMasterCSSSemanticTokenScopeKeys } from "./semantic/scopes.js";
|
|
7
|
+
import { MasterCSSBinding } from "@master/css-binding";
|
|
8
|
+
import { MasterCSSManifest } from "@master/css-schema/manifest";
|
|
9
|
+
/**
|
|
10
|
+
* Create a reusable language-only session using a native or Wasm binding.
|
|
11
|
+
* Results are immutable snapshots. Dispose the session when its owner is finished.
|
|
12
|
+
*/
|
|
13
|
+
declare function createLanguageSession(options: {
|
|
14
|
+
readonly manifest: MasterCSSManifest;
|
|
15
|
+
readonly binding?: MasterCSSBinding;
|
|
16
|
+
}): Promise<LanguageSession>;
|
|
17
|
+
declare function analyzeDocument(request: MasterCSSDocumentAnalysisRequest, options: {
|
|
18
|
+
readonly manifest: MasterCSSManifest;
|
|
19
|
+
readonly binding?: MasterCSSBinding;
|
|
20
|
+
}): Promise<MasterCSSDocumentAnalysis>;
|
|
21
|
+
declare function inspectClassName(className: string, options: {
|
|
22
|
+
readonly manifest: MasterCSSManifest;
|
|
23
|
+
readonly binding?: MasterCSSBinding;
|
|
24
|
+
}): Promise<MasterCSSLanguageInspection>;
|
|
25
|
+
declare function formatDirectives(request: MasterCSSFormatDirectivesRequest, options: {
|
|
26
|
+
readonly manifest: MasterCSSManifest;
|
|
27
|
+
readonly binding?: MasterCSSBinding;
|
|
28
|
+
}): Promise<MasterCSSFormatDirectivesResult>;
|
|
29
|
+
export { AT_SIGN, AT_TRIGGER_CHARACTER, CLASS_ATTRIBUTES, CLASS_DECLARATIONS, CLASS_FUNCTIONS, DELIMITER_SIGN, type HighlightTokenRole, INVOKED_TRIGGER_CHARACTERS, MASTER_CSS_SEMANTIC_TOKEN_SCOPE_MAP, type MasterCSSDocumentAnalysis, type MasterCSSDocumentAnalysisRequest, type MasterCSSFormatDirectivesRequest, type MasterCSSFormatDirectivesResult, type MasterCSSLanguageClass, type MasterCSSLanguageClassKind, type MasterCSSLanguageClassListContext, type MasterCSSLanguageClassPosition, type MasterCSSLanguageClassVariable, type MasterCSSLanguageClassifications, type MasterCSSLanguageColorCandidate, type MasterCSSLanguageColorExpression, type MasterCSSLanguageColorFormat, type MasterCSSLanguageColorPresentation, type MasterCSSLanguageColorToken, type MasterCSSLanguageColorTokens, type MasterCSSLanguageCompletionEntry, type MasterCSSLanguageCompletionIndex, type MasterCSSLanguageCompletionKind, type MasterCSSLanguageInspection, type LanguageSession as MasterCSSLanguageSession, type MasterCSSLanguageTokenFamilies, type MasterCSSLanguageVariable, type MasterCSSNativeDeclarationCompletion, type MasterCSSNativeDeclarationCompletionRequest, type MasterCSSTokenFamily, QUERY_COMPARISON_OPERATORS, QUERY_LOGICAL_OPERATORS, QUERY_TRIGGER_CHARACTERS, SELECTOR_SIGNS, SELECTOR_TRIGGER_CHARACTERS, SEMANTIC_TOKENS_LEGEND, SEMANTIC_TOKEN_MODIFIERS, SEMANTIC_TOKEN_TYPES, SEPARATOR_SIGN, type SemanticTokenItem, type SemanticTokenModifier, type SemanticTokenType, VALUE_TRIGGER_CHARACTERS, analyzeDocument, createLanguageSession, formatDirectives, getMasterCSSSemanticTokenScopeKeys, inspectClassName, matchesLanguageServiceNativeDeclaration };
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { bindLanguageSession } from "./session.js";
|
|
2
|
+
import { AT_SIGN, CLASS_ATTRIBUTES, CLASS_DECLARATIONS, CLASS_FUNCTIONS, DELIMITER_SIGN, QUERY_COMPARISON_OPERATORS, QUERY_LOGICAL_OPERATORS, SELECTOR_SIGNS, SEPARATOR_SIGN, matchesLanguageServiceNativeDeclaration } from "./master-css.js";
|
|
3
|
+
import { AT_TRIGGER_CHARACTER, INVOKED_TRIGGER_CHARACTERS, QUERY_TRIGGER_CHARACTERS, SELECTOR_TRIGGER_CHARACTERS, SEMANTIC_TOKENS_LEGEND, SEMANTIC_TOKEN_MODIFIERS, SEMANTIC_TOKEN_TYPES, VALUE_TRIGGER_CHARACTERS } from "./common.js";
|
|
4
|
+
import { MASTER_CSS_SEMANTIC_TOKEN_SCOPE_MAP, getMasterCSSSemanticTokenScopeKeys } from "./semantic/scopes.js";
|
|
5
|
+
import { createToolingBinding } from "@master/css-binding/tooling";
|
|
6
|
+
// src/language/index.ts
|
|
7
|
+
/**
|
|
8
|
+
* Create a reusable language-only session using a native or Wasm binding.
|
|
9
|
+
* Results are immutable snapshots. Dispose the session when its owner is finished.
|
|
10
|
+
*/
|
|
11
|
+
async function createLanguageSession(options) {
|
|
12
|
+
const binding = await createToolingBinding({ binding: options.binding });
|
|
13
|
+
return bindLanguageSession(binding.binding, await binding.createLanguageSession(options.manifest));
|
|
14
|
+
}
|
|
15
|
+
async function analyzeDocument(request, options) {
|
|
16
|
+
const session = await createLanguageSession(options);
|
|
17
|
+
try {
|
|
18
|
+
return session.analyzeDocument(request);
|
|
19
|
+
} finally {
|
|
20
|
+
session.dispose();
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
async function inspectClassName(className, options) {
|
|
24
|
+
const session = await createLanguageSession(options);
|
|
25
|
+
try {
|
|
26
|
+
return session.inspectClassName(className);
|
|
27
|
+
} finally {
|
|
28
|
+
session.dispose();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
async function formatDirectives(request, options) {
|
|
32
|
+
const session = await createLanguageSession(options);
|
|
33
|
+
try {
|
|
34
|
+
return session.formatDirectives(request);
|
|
35
|
+
} finally {
|
|
36
|
+
session.dispose();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export { AT_SIGN, AT_TRIGGER_CHARACTER, CLASS_ATTRIBUTES, CLASS_DECLARATIONS, CLASS_FUNCTIONS, DELIMITER_SIGN, INVOKED_TRIGGER_CHARACTERS, MASTER_CSS_SEMANTIC_TOKEN_SCOPE_MAP, QUERY_COMPARISON_OPERATORS, QUERY_LOGICAL_OPERATORS, QUERY_TRIGGER_CHARACTERS, SELECTOR_SIGNS, SELECTOR_TRIGGER_CHARACTERS, SEMANTIC_TOKENS_LEGEND, SEMANTIC_TOKEN_MODIFIERS, SEMANTIC_TOKEN_TYPES, SEPARATOR_SIGN, VALUE_TRIGGER_CHARACTERS, analyzeDocument, createLanguageSession, formatDirectives, getMasterCSSSemanticTokenScopeKeys, inspectClassName, matchesLanguageServiceNativeDeclaration };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
declare function matchesLanguageServiceNativeDeclaration({ property }: {
|
|
2
|
+
property: string;
|
|
3
|
+
}): boolean;
|
|
4
|
+
declare const SELECTOR_SIGNS: string[];
|
|
5
|
+
declare const QUERY_COMPARISON_OPERATORS: string[];
|
|
6
|
+
declare const QUERY_LOGICAL_OPERATORS: string[];
|
|
7
|
+
declare const DELIMITER_SIGN = "|";
|
|
8
|
+
declare const SEPARATOR_SIGN = ",";
|
|
9
|
+
declare const AT_SIGN = "@";
|
|
10
|
+
declare const CLASS_ATTRIBUTES: string[];
|
|
11
|
+
declare const CLASS_DECLARATIONS: string[];
|
|
12
|
+
declare const CLASS_FUNCTIONS: string[];
|
|
13
|
+
export { AT_SIGN, CLASS_ATTRIBUTES, CLASS_DECLARATIONS, CLASS_FUNCTIONS, DELIMITER_SIGN, QUERY_COMPARISON_OPERATORS, QUERY_LOGICAL_OPERATORS, SELECTOR_SIGNS, SEPARATOR_SIGN, matchesLanguageServiceNativeDeclaration };
|