domflax 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +214 -0
- package/dist/chunk-4HHISSMR.js +2227 -0
- package/dist/chunk-4HHISSMR.js.map +1 -0
- package/dist/chunk-6WVVF6AD.js +55 -0
- package/dist/chunk-6WVVF6AD.js.map +1 -0
- package/dist/chunk-77SLHRN6.js +2047 -0
- package/dist/chunk-77SLHRN6.js.map +1 -0
- package/dist/chunk-ZJ2S36GY.js +175 -0
- package/dist/chunk-ZJ2S36GY.js.map +1 -0
- package/dist/cli.cjs +5207 -0
- package/dist/cli.cjs.map +1 -0
- package/dist/cli.d.cts +1 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +1310 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.cjs +4383 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +539 -0
- package/dist/index.d.ts +539 -0
- package/dist/index.js +110 -0
- package/dist/index.js.map +1 -0
- package/dist/pattern-CX6iBzTD.d.ts +237 -0
- package/dist/pattern-P4FIKAUB.d.cts +237 -0
- package/dist/pattern-kit.cjs +630 -0
- package/dist/pattern-kit.cjs.map +1 -0
- package/dist/pattern-kit.d.cts +80 -0
- package/dist/pattern-kit.d.ts +80 -0
- package/dist/pattern-kit.js +55 -0
- package/dist/pattern-kit.js.map +1 -0
- package/dist/types-BQ7l6dVe.d.cts +749 -0
- package/dist/types-BQ7l6dVe.d.ts +749 -0
- package/dist/verify.cjs +2747 -0
- package/dist/verify.cjs.map +1 -0
- package/dist/verify.d.cts +245 -0
- package/dist/verify.d.ts +245 -0
- package/dist/verify.js +2700 -0
- package/dist/verify.js.map +1 -0
- package/dist/webpack-loader.cjs +4149 -0
- package/dist/webpack-loader.cjs.map +1 -0
- package/dist/webpack-loader.d.cts +21 -0
- package/dist/webpack-loader.d.ts +21 -0
- package/dist/webpack-loader.js +30 -0
- package/dist/webpack-loader.js.map +1 -0
- package/package.json +99 -0
|
@@ -0,0 +1,749 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @domflax/core — public type contract (packages/core/src/types.ts)
|
|
3
|
+
*
|
|
4
|
+
* SINGLE SOURCE OF TRUTH for the whole monorepo. Pure type/interface declarations
|
|
5
|
+
* only: ZERO runtime. Every downstream package imports these exact names.
|
|
6
|
+
*
|
|
7
|
+
* Compiles under: strict, verbatimModuleSyntax, isolatedDeclarations, erasableSyntaxOnly,
|
|
8
|
+
* isolatedModules. No `const enum` (TS6 erasableSyntaxOnly): every closed set is a
|
|
9
|
+
* string/number literal UNION here; the matching frozen `as const` runtime objects live in
|
|
10
|
+
* sibling runtime modules (constants.ts), not in this file.
|
|
11
|
+
*/
|
|
12
|
+
type Brand<T, B extends string> = T & {
|
|
13
|
+
readonly __brand: B;
|
|
14
|
+
};
|
|
15
|
+
/** Distributive Omit that preserves discriminated-union narrowing. */
|
|
16
|
+
type DistributiveOmit<T, K extends keyof T> = T extends unknown ? Omit<T, K> : never;
|
|
17
|
+
/**
|
|
18
|
+
* Deep-immutable view. The pass manager hands patterns a DeepReadonly<IRElement>/
|
|
19
|
+
* DeepReadonly<IRDocument> so invariant #4 ("rule authors can never mutate the IR") is a
|
|
20
|
+
* COMPILE-TIME guarantee, not a convention (review-2 blocker). In dev the runtime additionally
|
|
21
|
+
* wraps these in a throw-on-write Proxy.
|
|
22
|
+
*/
|
|
23
|
+
type DeepReadonly<T> = T extends (...args: never[]) => unknown ? T : T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<DeepReadonly<K>, DeepReadonly<V>> : T extends ReadonlySet<infer U> ? ReadonlySet<DeepReadonly<U>> : T extends Map<infer K, infer V> ? ReadonlyMap<DeepReadonly<K>, DeepReadonly<V>> : T extends Set<infer U> ? ReadonlySet<DeepReadonly<U>> : T extends readonly (infer U)[] ? readonly DeepReadonly<U>[] : T extends object ? {
|
|
24
|
+
readonly [K in keyof T]: DeepReadonly<T[K]>;
|
|
25
|
+
} : T;
|
|
26
|
+
type IRNodeId = Brand<number, 'IRNodeId'>;
|
|
27
|
+
type SourceFileId = Brand<number, 'SourceFileId'>;
|
|
28
|
+
type ExprRef = Brand<number, 'ExprRef'>;
|
|
29
|
+
type PatternName = string;
|
|
30
|
+
interface IdAllocator {
|
|
31
|
+
next(): IRNodeId;
|
|
32
|
+
/** Peek the next id without consuming, for deterministic dry-run validation. */
|
|
33
|
+
readonly peek: IRNodeId;
|
|
34
|
+
}
|
|
35
|
+
/** SAFETY: 0 lint · 1 safe · 2 default · 3 aggressive. (Runtime `SAFETY` object lives in constants.ts.) */
|
|
36
|
+
type SafetyLevel = 0 | 1 | 2 | 3;
|
|
37
|
+
interface Position {
|
|
38
|
+
readonly line: number;
|
|
39
|
+
readonly column: number;
|
|
40
|
+
}
|
|
41
|
+
interface SourceSpan {
|
|
42
|
+
readonly file: SourceFileId;
|
|
43
|
+
readonly start: number;
|
|
44
|
+
readonly end: number;
|
|
45
|
+
readonly startLoc?: Position;
|
|
46
|
+
readonly endLoc?: Position;
|
|
47
|
+
}
|
|
48
|
+
type FileKind = 'jsx' | 'tsx' | 'html' | 'unknown';
|
|
49
|
+
type FrontendKind = 'jsx' | 'html';
|
|
50
|
+
interface SourceFile {
|
|
51
|
+
readonly id: SourceFileId;
|
|
52
|
+
readonly path: string;
|
|
53
|
+
readonly text: string;
|
|
54
|
+
readonly frontend: FrontendKind;
|
|
55
|
+
readonly eol: '\n' | '\r\n';
|
|
56
|
+
readonly indentUnit: string;
|
|
57
|
+
native?: unknown;
|
|
58
|
+
}
|
|
59
|
+
type CssProperty = Brand<string, 'CssProperty'>;
|
|
60
|
+
type CssValue = Brand<string, 'CssValue'>;
|
|
61
|
+
type ConditionKey = Brand<string, 'ConditionKey'>;
|
|
62
|
+
type DeclSignature = Brand<string, 'DeclSignature'>;
|
|
63
|
+
interface StyleCondition {
|
|
64
|
+
readonly media: string;
|
|
65
|
+
readonly states: readonly string[];
|
|
66
|
+
readonly pseudoElement: string;
|
|
67
|
+
}
|
|
68
|
+
type StyleOrigin = {
|
|
69
|
+
readonly kind: 'class';
|
|
70
|
+
readonly tokenIndex: number;
|
|
71
|
+
readonly className: string;
|
|
72
|
+
} | {
|
|
73
|
+
readonly kind: 'inline';
|
|
74
|
+
} | {
|
|
75
|
+
readonly kind: 'inherited';
|
|
76
|
+
readonly from: IRNodeId;
|
|
77
|
+
} | {
|
|
78
|
+
readonly kind: 'synthetic';
|
|
79
|
+
};
|
|
80
|
+
/**
|
|
81
|
+
* `relativeToParent` is set when the value uses a parent-relative unit (em/ex/ch/%/lh, or
|
|
82
|
+
* font-relative line-height). The applier REFUSES to fold such a declaration onto a child whose
|
|
83
|
+
* font-size/inline reference differs (review-1 major: relative-unit fold). Computed by the
|
|
84
|
+
* normalizer at parse time (purely syntactic detection — no value resolution).
|
|
85
|
+
*/
|
|
86
|
+
interface StyleDecl {
|
|
87
|
+
readonly property: CssProperty;
|
|
88
|
+
readonly value: CssValue;
|
|
89
|
+
readonly important: boolean;
|
|
90
|
+
readonly relativeToParent: boolean;
|
|
91
|
+
readonly inherited: boolean;
|
|
92
|
+
readonly origin?: StyleOrigin;
|
|
93
|
+
readonly shadowed?: readonly StyleOrigin[];
|
|
94
|
+
}
|
|
95
|
+
interface StyleBlock {
|
|
96
|
+
readonly condition: StyleCondition;
|
|
97
|
+
readonly decls: ReadonlyMap<CssProperty, StyleDecl>;
|
|
98
|
+
}
|
|
99
|
+
interface StyleMap {
|
|
100
|
+
readonly blocks: ReadonlyMap<ConditionKey, StyleBlock>;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Canonical, versioned set of inherited CSS properties (review-1 major: fold allowlist
|
|
104
|
+
* completeness). The SINGLE source consumed by foldInheritedStyles, hasOwnVisualStyle reasoning,
|
|
105
|
+
* and the verifier. Includes author custom properties via the `--` predicate handled in runtime.
|
|
106
|
+
*/
|
|
107
|
+
interface InheritedPropertyTable {
|
|
108
|
+
readonly version: string;
|
|
109
|
+
readonly properties: ReadonlySet<CssProperty>;
|
|
110
|
+
isInherited(property: CssProperty): boolean;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Syntactic-only normalizer (shorthand expansion, color/unit canonicalization, ordering).
|
|
114
|
+
* NEVER resolves initial/inherited/computed defaults — that is the verifier's job. The SAME
|
|
115
|
+
* instance/version is shared by resolver + patterns + verifier (correctness lynchpin).
|
|
116
|
+
*/
|
|
117
|
+
interface StyleNormalizer {
|
|
118
|
+
readonly version: string;
|
|
119
|
+
normalizeDeclaration(prop: string, value: string, important: boolean): readonly StyleDecl[];
|
|
120
|
+
normalizeValue(prop: CssProperty, raw: string): CssValue;
|
|
121
|
+
normalizeStyleMap(sm: StyleMap): StyleMap;
|
|
122
|
+
equals(a: StyleMap, b: StyleMap): boolean;
|
|
123
|
+
readonly inherited: InheritedPropertyTable;
|
|
124
|
+
}
|
|
125
|
+
interface NodeMeta {
|
|
126
|
+
hasRef: boolean;
|
|
127
|
+
hasEventHandlers: boolean;
|
|
128
|
+
hasKey: boolean;
|
|
129
|
+
hasSpreadAttrs: boolean;
|
|
130
|
+
hasDynamicChildren: boolean;
|
|
131
|
+
isComponent: boolean;
|
|
132
|
+
hasDangerousHtml: boolean;
|
|
133
|
+
targetedByCombinator: boolean;
|
|
134
|
+
targetedByStructuralPseudo: boolean;
|
|
135
|
+
selectorDependents: number;
|
|
136
|
+
hasOwnVisualStyle: boolean;
|
|
137
|
+
establishesBox: boolean;
|
|
138
|
+
establishesStackingContext: boolean;
|
|
139
|
+
isContainingBlock: boolean;
|
|
140
|
+
establishesFormattingContext: boolean;
|
|
141
|
+
declaresCustomProperties: boolean;
|
|
142
|
+
whitespaceSensitive: boolean;
|
|
143
|
+
touched: boolean;
|
|
144
|
+
synthetic: boolean;
|
|
145
|
+
safetyFloor: SafetyLevel;
|
|
146
|
+
}
|
|
147
|
+
interface ClassToken {
|
|
148
|
+
readonly value: string;
|
|
149
|
+
readonly span?: SourceSpan;
|
|
150
|
+
}
|
|
151
|
+
type ClassSegment = {
|
|
152
|
+
readonly kind: 'static';
|
|
153
|
+
readonly span?: SourceSpan;
|
|
154
|
+
readonly tokens: readonly ClassToken[];
|
|
155
|
+
} | {
|
|
156
|
+
readonly kind: 'dynamic';
|
|
157
|
+
readonly span?: SourceSpan;
|
|
158
|
+
readonly expr: ExprRef;
|
|
159
|
+
};
|
|
160
|
+
type ClassListForm = 'string-literal' | 'template-literal' | 'call' | 'conditional' | 'member' | 'absent';
|
|
161
|
+
interface ClassList {
|
|
162
|
+
readonly form: ClassListForm;
|
|
163
|
+
readonly segments: readonly ClassSegment[];
|
|
164
|
+
readonly valueSpan: SourceSpan | null;
|
|
165
|
+
readonly attrSpan?: SourceSpan;
|
|
166
|
+
readonly hasDynamic: boolean;
|
|
167
|
+
readonly opaque: boolean;
|
|
168
|
+
readonly rewritable: boolean;
|
|
169
|
+
}
|
|
170
|
+
type AttrValue = {
|
|
171
|
+
readonly kind: 'static';
|
|
172
|
+
readonly value: string | boolean;
|
|
173
|
+
readonly span?: SourceSpan;
|
|
174
|
+
} | {
|
|
175
|
+
readonly kind: 'dynamic';
|
|
176
|
+
readonly expr: ExprRef;
|
|
177
|
+
readonly span?: SourceSpan;
|
|
178
|
+
};
|
|
179
|
+
interface AttrMap {
|
|
180
|
+
readonly entries: ReadonlyMap<string, AttrValue>;
|
|
181
|
+
readonly spreads: readonly ExprRef[];
|
|
182
|
+
readonly order: readonly string[];
|
|
183
|
+
}
|
|
184
|
+
interface InlineStyle {
|
|
185
|
+
readonly decls: ReadonlyMap<CssProperty, StyleDecl>;
|
|
186
|
+
readonly dynamic: readonly ExprRef[] | null;
|
|
187
|
+
readonly span?: SourceSpan;
|
|
188
|
+
}
|
|
189
|
+
type IRNodeKind = 'element' | 'text' | 'expr' | 'fragment' | 'comment';
|
|
190
|
+
type IRNamespace = 'html' | 'svg' | 'mathml' | 'component';
|
|
191
|
+
interface IRNodeBase {
|
|
192
|
+
readonly id: IRNodeId;
|
|
193
|
+
readonly kind: IRNodeKind;
|
|
194
|
+
parent: IRNodeId | null;
|
|
195
|
+
span: SourceSpan | null;
|
|
196
|
+
meta: NodeMeta;
|
|
197
|
+
}
|
|
198
|
+
interface IRElement extends IRNodeBase {
|
|
199
|
+
readonly kind: 'element';
|
|
200
|
+
tag: string;
|
|
201
|
+
namespace: IRNamespace;
|
|
202
|
+
isComponent: boolean;
|
|
203
|
+
selfClosing: boolean;
|
|
204
|
+
classes: ClassList;
|
|
205
|
+
inlineStyle: InlineStyle;
|
|
206
|
+
computed: StyleMap;
|
|
207
|
+
attrs: AttrMap;
|
|
208
|
+
children: IRNodeId[];
|
|
209
|
+
}
|
|
210
|
+
interface IRText extends IRNodeBase {
|
|
211
|
+
readonly kind: 'text';
|
|
212
|
+
value: string;
|
|
213
|
+
collapsible: boolean;
|
|
214
|
+
}
|
|
215
|
+
interface IRExpr extends IRNodeBase {
|
|
216
|
+
readonly kind: 'expr';
|
|
217
|
+
expr: ExprRef;
|
|
218
|
+
}
|
|
219
|
+
interface IRFragment extends IRNodeBase {
|
|
220
|
+
readonly kind: 'fragment';
|
|
221
|
+
children: IRNodeId[];
|
|
222
|
+
}
|
|
223
|
+
interface IRComment extends IRNodeBase {
|
|
224
|
+
readonly kind: 'comment';
|
|
225
|
+
value: string;
|
|
226
|
+
}
|
|
227
|
+
type IRNode = IRElement | IRText | IRExpr | IRFragment | IRComment;
|
|
228
|
+
type ExprKind = 'call' | 'member' | 'conditional' | 'template' | 'identifier' | 'spread' | 'other';
|
|
229
|
+
interface ExprRecord {
|
|
230
|
+
readonly ref: ExprRef;
|
|
231
|
+
readonly span: SourceSpan;
|
|
232
|
+
readonly kind: ExprKind;
|
|
233
|
+
payload?: unknown;
|
|
234
|
+
}
|
|
235
|
+
interface ExprRegistry {
|
|
236
|
+
get(r: ExprRef): ExprRecord | undefined;
|
|
237
|
+
intern(rec: Omit<ExprRecord, 'ref'>): ExprRef;
|
|
238
|
+
releasePayloads(): void;
|
|
239
|
+
}
|
|
240
|
+
interface Backref {
|
|
241
|
+
readonly nodeId: IRNodeId;
|
|
242
|
+
readonly span: SourceSpan;
|
|
243
|
+
readonly openTagSpan: SourceSpan | null;
|
|
244
|
+
readonly closeTagSpan: SourceSpan | null;
|
|
245
|
+
readonly innerSpan: SourceSpan | null;
|
|
246
|
+
readonly selfClosing: boolean;
|
|
247
|
+
}
|
|
248
|
+
interface BackrefTable {
|
|
249
|
+
get(id: IRNodeId): Backref | undefined;
|
|
250
|
+
span(id: IRNodeId): SourceSpan | null;
|
|
251
|
+
childrenSpan(id: IRNodeId): SourceSpan | null;
|
|
252
|
+
}
|
|
253
|
+
/** ONE document type (D9): absorbs IRModule / SourceModule. */
|
|
254
|
+
interface IRDocument {
|
|
255
|
+
root: IRNodeId;
|
|
256
|
+
nodes: Map<IRNodeId, IRNode>;
|
|
257
|
+
exprs: ExprRegistry;
|
|
258
|
+
sources: Map<SourceFileId, SourceFile>;
|
|
259
|
+
backref: BackrefTable;
|
|
260
|
+
frontend: FrontendKind;
|
|
261
|
+
alloc: IdAllocator;
|
|
262
|
+
}
|
|
263
|
+
type VisitSignal = void | 'skip' | 'stop';
|
|
264
|
+
interface VisitContext {
|
|
265
|
+
readonly doc: DeepReadonly<IRDocument>;
|
|
266
|
+
readonly depth: number;
|
|
267
|
+
parent(): IRNode | null;
|
|
268
|
+
}
|
|
269
|
+
interface Visitor {
|
|
270
|
+
enter?(n: IRNode, c: VisitContext): VisitSignal;
|
|
271
|
+
exit?(n: IRNode, c: VisitContext): VisitSignal;
|
|
272
|
+
}
|
|
273
|
+
interface ElementSpec {
|
|
274
|
+
readonly kind: 'element';
|
|
275
|
+
readonly tag: string;
|
|
276
|
+
readonly namespace?: IRNamespace;
|
|
277
|
+
readonly classes?: StyleMap;
|
|
278
|
+
readonly attrs?: ReadonlyMap<string, string | boolean>;
|
|
279
|
+
readonly children?: readonly NodeSpec[];
|
|
280
|
+
readonly selfClosing?: boolean;
|
|
281
|
+
}
|
|
282
|
+
interface TextSpec {
|
|
283
|
+
readonly kind: 'text';
|
|
284
|
+
readonly value: string;
|
|
285
|
+
}
|
|
286
|
+
interface ExprSpec {
|
|
287
|
+
readonly kind: 'expr';
|
|
288
|
+
readonly expr: ExprRef;
|
|
289
|
+
}
|
|
290
|
+
interface FragmentSpec {
|
|
291
|
+
readonly kind: 'fragment';
|
|
292
|
+
readonly children: readonly NodeSpec[];
|
|
293
|
+
}
|
|
294
|
+
interface CommentSpec {
|
|
295
|
+
readonly kind: 'comment';
|
|
296
|
+
readonly value: string;
|
|
297
|
+
}
|
|
298
|
+
/** Reuse an existing live node (preserves its IRNodeId — D10). */
|
|
299
|
+
interface NodeRefSpec {
|
|
300
|
+
readonly kind: 'ref';
|
|
301
|
+
readonly ref: IRNodeId;
|
|
302
|
+
}
|
|
303
|
+
type NodeSpec = ElementSpec | TextSpec | ExprSpec | FragmentSpec | CommentSpec | NodeRefSpec;
|
|
304
|
+
type Severity = 'error' | 'warn' | 'info' | 'debug';
|
|
305
|
+
type DiagnosticCode = 'DF_PATTERN_THREW' | 'DF_OP_PRECONDITION_FAILED' | 'DF_CROSSED_DYNAMIC_BOUNDARY' | 'DF_SAFETY_CEILING_EXCEEDED' | 'DF_STYLE_CONFLICT_UNRESOLVED' | 'DF_FIXPOINT_BUDGET' | 'DF_FIXPOINT_OSCILLATION' | 'DF_NON_INHERITABLE_FOLD' | 'DF_RELATIVE_UNIT_FOLD' | 'DF_CUSTOM_PROP_COUPLING' | 'DF_STRUCTURAL_PSEUDO_TARGET' | 'DF_SELECTOR_MEMBERSHIP' | 'DF_NODE_REMOVED' | 'DF_PATTERN_APPLIED' | 'DF_VERIFY_REVERTED' | 'DF_VERIFY_INCONCLUSIVE';
|
|
306
|
+
interface Diagnostic {
|
|
307
|
+
readonly code: DiagnosticCode;
|
|
308
|
+
readonly severity: Severity;
|
|
309
|
+
readonly message: string;
|
|
310
|
+
readonly span?: SourceSpan;
|
|
311
|
+
readonly nodeId?: IRNodeId;
|
|
312
|
+
readonly pattern?: PatternName;
|
|
313
|
+
readonly phase?: PassPhase;
|
|
314
|
+
readonly iteration?: number;
|
|
315
|
+
readonly data?: Readonly<Record<string, unknown>>;
|
|
316
|
+
readonly cause?: unknown;
|
|
317
|
+
}
|
|
318
|
+
interface PassTraceEntry {
|
|
319
|
+
readonly phase: PassPhase;
|
|
320
|
+
readonly iteration: number;
|
|
321
|
+
readonly pattern: PatternName;
|
|
322
|
+
readonly nodeId: IRNodeId;
|
|
323
|
+
readonly opCount: number;
|
|
324
|
+
}
|
|
325
|
+
interface Reporter {
|
|
326
|
+
report(d: Diagnostic): void;
|
|
327
|
+
trace?(e: PassTraceEntry): void;
|
|
328
|
+
}
|
|
329
|
+
type OpaqueReason = 'combinator-variant' | 'container-query' | 'tw-var-coupling' | 'author-var-coupling' | 'descendant-selector' | 'structural-pseudo' | 'compound-membership' | 'dynamic-at-rule' | 'unsupported-unit' | 'arbitrary-property';
|
|
330
|
+
interface OpaqueToken {
|
|
331
|
+
readonly token: string;
|
|
332
|
+
readonly reason: OpaqueReason;
|
|
333
|
+
readonly detail?: string;
|
|
334
|
+
}
|
|
335
|
+
interface ResolverDiagnostic {
|
|
336
|
+
readonly severity: Severity;
|
|
337
|
+
readonly message: string;
|
|
338
|
+
readonly token?: string;
|
|
339
|
+
}
|
|
340
|
+
interface ResolveInput {
|
|
341
|
+
readonly classes: readonly string[];
|
|
342
|
+
readonly inlineStyle?: string;
|
|
343
|
+
readonly element?: {
|
|
344
|
+
readonly tagName: string;
|
|
345
|
+
readonly namespace?: 'html' | 'svg';
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
interface ResolveResult {
|
|
349
|
+
readonly styles: StyleMap;
|
|
350
|
+
readonly resolved: readonly string[];
|
|
351
|
+
readonly unknown: readonly string[];
|
|
352
|
+
readonly opaque: readonly OpaqueToken[];
|
|
353
|
+
readonly warnings: readonly ResolverDiagnostic[];
|
|
354
|
+
}
|
|
355
|
+
/** How a class participates in project selectors — drives compress safety (review-1). */
|
|
356
|
+
interface SelectorUsage {
|
|
357
|
+
readonly asSubject: boolean;
|
|
358
|
+
readonly asAncestor: boolean;
|
|
359
|
+
readonly asCompound: boolean;
|
|
360
|
+
readonly asSibling: boolean;
|
|
361
|
+
readonly asHasArgument: boolean;
|
|
362
|
+
readonly asStructural: boolean;
|
|
363
|
+
/** True iff the class is referenced ONLY as a plain subject — i.e. safe to drop/rename. */
|
|
364
|
+
readonly droppable: boolean;
|
|
365
|
+
}
|
|
366
|
+
interface SyntheticClass {
|
|
367
|
+
readonly className: string;
|
|
368
|
+
readonly decls: StyleMap;
|
|
369
|
+
readonly css: string;
|
|
370
|
+
}
|
|
371
|
+
interface EmitContext {
|
|
372
|
+
readonly normalizer: StyleNormalizer;
|
|
373
|
+
readonly sink: SyntheticSink;
|
|
374
|
+
readonly preserveTokens?: readonly string[];
|
|
375
|
+
readonly budgetMs?: number;
|
|
376
|
+
}
|
|
377
|
+
interface SyntheticSink {
|
|
378
|
+
register(s: SyntheticClass): string;
|
|
379
|
+
drain(): readonly SyntheticClass[];
|
|
380
|
+
}
|
|
381
|
+
interface EmitResult {
|
|
382
|
+
readonly classes: readonly string[];
|
|
383
|
+
readonly residual?: SyntheticClass;
|
|
384
|
+
readonly exact: boolean;
|
|
385
|
+
readonly warnings: readonly ResolverDiagnostic[];
|
|
386
|
+
}
|
|
387
|
+
interface StyleResolver {
|
|
388
|
+
readonly id: string;
|
|
389
|
+
readonly provider: string;
|
|
390
|
+
readonly fingerprint: string;
|
|
391
|
+
owns(token: string): boolean;
|
|
392
|
+
resolve(input: ResolveInput): ResolveResult;
|
|
393
|
+
emit(styles: StyleMap, ctx: EmitContext): EmitResult;
|
|
394
|
+
/** Reports every project selector referencing a class — compress safety (review-1 major). */
|
|
395
|
+
selectorUsage(token: string): SelectorUsage;
|
|
396
|
+
}
|
|
397
|
+
interface SelectorIndex {
|
|
398
|
+
targetedByCombinator(id: IRNodeId): boolean;
|
|
399
|
+
targetedByStructuralPseudo(id: IRNodeId): boolean;
|
|
400
|
+
/**
|
|
401
|
+
* Set of node ids whose combinator / structural-pseudo match-set would CHANGE if `id` were
|
|
402
|
+
* unwrapped/removed (self, child, and former siblings). Empty ⇒ structurally safe.
|
|
403
|
+
* (review-1 blocker: guard the child & siblings, not just the wrapper.)
|
|
404
|
+
*/
|
|
405
|
+
reparentImpact(id: IRNodeId): ReadonlySet<IRNodeId>;
|
|
406
|
+
}
|
|
407
|
+
interface OpOrigin {
|
|
408
|
+
readonly pattern: PatternName;
|
|
409
|
+
readonly category: PassCategory;
|
|
410
|
+
readonly safety: SafetyLevel;
|
|
411
|
+
}
|
|
412
|
+
type StyleConflictPolicy = 'target-wins' | 'source-wins' | 'abort';
|
|
413
|
+
type RewriteOp = {
|
|
414
|
+
readonly op: 'removeNode';
|
|
415
|
+
readonly target: IRNodeId;
|
|
416
|
+
readonly origin: OpOrigin;
|
|
417
|
+
} | {
|
|
418
|
+
readonly op: 'unwrap';
|
|
419
|
+
readonly target: IRNodeId;
|
|
420
|
+
readonly origin: OpOrigin;
|
|
421
|
+
} | {
|
|
422
|
+
readonly op: 'replaceWith';
|
|
423
|
+
readonly target: IRNodeId;
|
|
424
|
+
readonly replacement: NodeSpec;
|
|
425
|
+
readonly origin: OpOrigin;
|
|
426
|
+
} | {
|
|
427
|
+
readonly op: 'wrap';
|
|
428
|
+
readonly target: IRNodeId;
|
|
429
|
+
readonly wrapper: ElementSpec;
|
|
430
|
+
readonly origin: OpOrigin;
|
|
431
|
+
} | {
|
|
432
|
+
readonly op: 'insertBefore';
|
|
433
|
+
readonly anchor: IRNodeId;
|
|
434
|
+
readonly node: NodeSpec;
|
|
435
|
+
readonly origin: OpOrigin;
|
|
436
|
+
} | {
|
|
437
|
+
readonly op: 'insertAfter';
|
|
438
|
+
readonly anchor: IRNodeId;
|
|
439
|
+
readonly node: NodeSpec;
|
|
440
|
+
readonly origin: OpOrigin;
|
|
441
|
+
} | {
|
|
442
|
+
readonly op: 'moveNode';
|
|
443
|
+
readonly target: IRNodeId;
|
|
444
|
+
readonly newParent: IRNodeId;
|
|
445
|
+
readonly index: number;
|
|
446
|
+
readonly origin: OpOrigin;
|
|
447
|
+
} | {
|
|
448
|
+
readonly op: 'mergeSiblings';
|
|
449
|
+
readonly first: IRNodeId;
|
|
450
|
+
readonly second: IRNodeId;
|
|
451
|
+
readonly origin: OpOrigin;
|
|
452
|
+
} | {
|
|
453
|
+
readonly op: 'setClassList';
|
|
454
|
+
readonly target: IRNodeId;
|
|
455
|
+
readonly style: StyleMap;
|
|
456
|
+
readonly preserveOpaque: boolean;
|
|
457
|
+
readonly origin: OpOrigin;
|
|
458
|
+
} | {
|
|
459
|
+
readonly op: 'mergeStyle';
|
|
460
|
+
readonly target: IRNodeId;
|
|
461
|
+
readonly source: IRNodeId | null;
|
|
462
|
+
readonly style: StyleMap;
|
|
463
|
+
readonly onConflict: StyleConflictPolicy;
|
|
464
|
+
readonly origin: OpOrigin;
|
|
465
|
+
} | {
|
|
466
|
+
readonly op: 'foldInheritedStyles';
|
|
467
|
+
readonly from: IRNodeId;
|
|
468
|
+
readonly into: readonly IRNodeId[];
|
|
469
|
+
readonly properties: readonly CssProperty[] | 'all-inherited';
|
|
470
|
+
readonly conditions: 'base' | 'all';
|
|
471
|
+
readonly origin: OpOrigin;
|
|
472
|
+
};
|
|
473
|
+
/** Author-emitted op data: identical union minus `origin` (the scheduler stamps origin). */
|
|
474
|
+
type RewriteOpDraft = DistributiveOmit<RewriteOp, 'origin'>;
|
|
475
|
+
type ElementLike = IRElement | DeepReadonly<IRElement>;
|
|
476
|
+
type NodeLike = IRNode | DeepReadonly<IRNode>;
|
|
477
|
+
/**
|
|
478
|
+
* Pattern-kit's factory: produces op DRAFTS (no origin) and builds detached NodeSpecs purely —
|
|
479
|
+
* it never touches doc.alloc/doc.nodes, so `evaluate` stays pure (review-2).
|
|
480
|
+
*/
|
|
481
|
+
interface RewriteFactory {
|
|
482
|
+
unwrap(target: ElementLike): RewriteOpDraft;
|
|
483
|
+
removeNode(target: NodeLike): RewriteOpDraft;
|
|
484
|
+
replaceWith(target: NodeLike, replacement: NodeSpec): RewriteOpDraft;
|
|
485
|
+
wrap(target: NodeLike, wrapper: ElementSpec): RewriteOpDraft;
|
|
486
|
+
insertBefore(anchor: NodeLike, node: NodeSpec): RewriteOpDraft;
|
|
487
|
+
insertAfter(anchor: NodeLike, node: NodeSpec): RewriteOpDraft;
|
|
488
|
+
moveNode(target: NodeLike, newParent: ElementLike, index: number): RewriteOpDraft;
|
|
489
|
+
mergeSiblings(first: NodeLike, second: NodeLike): RewriteOpDraft;
|
|
490
|
+
setClassList(target: ElementLike, style: StyleMap, preserveOpaque?: boolean): RewriteOpDraft;
|
|
491
|
+
mergeStyle(target: ElementLike, source: ElementLike | null, style: StyleMap, onConflict?: StyleConflictPolicy): RewriteOpDraft;
|
|
492
|
+
/**
|
|
493
|
+
* Folds inheritable declarations. `conditions:'all'` folds across every StyleCondition
|
|
494
|
+
* (states/media/pseudo-element), not just BASE_CONDITION (review-1 major). Relative-unit
|
|
495
|
+
* declarations are rejected by the applier with DF_RELATIVE_UNIT_FOLD.
|
|
496
|
+
*/
|
|
497
|
+
foldInheritedStyles(from: ElementLike, into: ElementLike | readonly ElementLike[], opts?: {
|
|
498
|
+
only?: readonly CssProperty[];
|
|
499
|
+
conditions?: 'base' | 'all';
|
|
500
|
+
}): RewriteOpDraft;
|
|
501
|
+
element(spec: ElementSpec): NodeSpec;
|
|
502
|
+
text(value: string): NodeSpec;
|
|
503
|
+
keep(node: NodeLike): NodeSpec;
|
|
504
|
+
}
|
|
505
|
+
type PassPhase = 'flatten' | 'compress' | 'extract';
|
|
506
|
+
type PassCategory = `${PassPhase}/${string}`;
|
|
507
|
+
type Captures = Record<string, unknown>;
|
|
508
|
+
/** Read-only style predicate over a normalized StyleMap (queries MEANING, not strings). */
|
|
509
|
+
type StylePredicate = (sm: StyleMap) => boolean;
|
|
510
|
+
/**
|
|
511
|
+
* Relational precondition (review-2 blocker): describes ancestor/sibling/child subtree shape AND
|
|
512
|
+
* ancestor LAYOUT context (review-4 blocker) so fuzzProve generates trees that exercise the
|
|
513
|
+
* relational + parent-constraint branches, not just node-local ones.
|
|
514
|
+
*/
|
|
515
|
+
interface TreeShapeSketch {
|
|
516
|
+
readonly tag?: string | readonly string[];
|
|
517
|
+
readonly requiredComputed?: Readonly<Record<string, string>>;
|
|
518
|
+
readonly meta?: Partial<Record<keyof NodeMeta, boolean>>;
|
|
519
|
+
readonly children?: readonly TreeShapeSketch[];
|
|
520
|
+
}
|
|
521
|
+
type ParentLayoutContext = 'block-flow' | 'flex-item' | 'flex-item-stretch' | 'grid-item' | 'fixed-size-ancestor' | 'percentage-sized-child' | 'inline-context';
|
|
522
|
+
interface PreconditionSketch {
|
|
523
|
+
readonly requiredComputed?: Readonly<Record<string, string>>;
|
|
524
|
+
readonly childCount?: {
|
|
525
|
+
readonly min?: number;
|
|
526
|
+
readonly max?: number;
|
|
527
|
+
};
|
|
528
|
+
readonly forbid?: readonly string[];
|
|
529
|
+
readonly ancestor?: TreeShapeSketch;
|
|
530
|
+
readonly siblings?: readonly TreeShapeSketch[];
|
|
531
|
+
readonly childShapes?: readonly TreeShapeSketch[];
|
|
532
|
+
readonly parentContexts?: readonly ParentLayoutContext[];
|
|
533
|
+
}
|
|
534
|
+
interface PatternDoc {
|
|
535
|
+
readonly title: string;
|
|
536
|
+
readonly summary: string;
|
|
537
|
+
readonly before?: string;
|
|
538
|
+
readonly after?: string;
|
|
539
|
+
readonly safetyRationale?: string;
|
|
540
|
+
}
|
|
541
|
+
/** Result of a successful match: op drafts (origin stamped later) + optional captures/diagnostics. */
|
|
542
|
+
interface MatchResult<C extends Captures = Captures> {
|
|
543
|
+
readonly ops: readonly RewriteOpDraft[];
|
|
544
|
+
readonly captures?: C;
|
|
545
|
+
readonly diagnostics?: readonly Diagnostic[];
|
|
546
|
+
}
|
|
547
|
+
interface MatchContext {
|
|
548
|
+
readonly node: DeepReadonly<IRElement>;
|
|
549
|
+
readonly doc: DeepReadonly<IRDocument>;
|
|
550
|
+
readonly resolver: StyleResolver;
|
|
551
|
+
readonly selectors: SelectorIndex;
|
|
552
|
+
readonly safety: SafetyLevel;
|
|
553
|
+
readonly phase: PassPhase;
|
|
554
|
+
readonly iteration: number;
|
|
555
|
+
parent(): DeepReadonly<IRElement> | null;
|
|
556
|
+
elementChildren(): readonly DeepReadonly<IRElement>[];
|
|
557
|
+
onlyElementChild(): DeepReadonly<IRElement> | null;
|
|
558
|
+
computed(): StyleMap;
|
|
559
|
+
computedOf(n: NodeLike): StyleMap;
|
|
560
|
+
isOpaque(n?: ElementLike): boolean;
|
|
561
|
+
ancestors(): readonly DeepReadonly<IRElement>[];
|
|
562
|
+
closest(pred: (el: DeepReadonly<IRElement>) => boolean): DeepReadonly<IRElement> | null;
|
|
563
|
+
prevSibling(): DeepReadonly<IRNode> | null;
|
|
564
|
+
nextSibling(): DeepReadonly<IRNode> | null;
|
|
565
|
+
nthChildIndex(): number;
|
|
566
|
+
}
|
|
567
|
+
/** Context handed to the `rewrite` phase: a MatchContext plus the typed captures. */
|
|
568
|
+
interface RewriteContext<C extends Captures = Captures> extends MatchContext {
|
|
569
|
+
readonly captures: C;
|
|
570
|
+
}
|
|
571
|
+
interface Pattern {
|
|
572
|
+
readonly name: PatternName;
|
|
573
|
+
readonly category: PassCategory;
|
|
574
|
+
readonly safety: SafetyLevel;
|
|
575
|
+
readonly priority?: number;
|
|
576
|
+
readonly precondition?: PreconditionSketch;
|
|
577
|
+
readonly doc?: PatternDoc;
|
|
578
|
+
/** Pure. Returns a MatchResult (op drafts) or null on no-match. MUST NOT mutate. */
|
|
579
|
+
evaluate(ctx: MatchContext, rw: RewriteFactory): MatchResult | null;
|
|
580
|
+
}
|
|
581
|
+
interface Pass {
|
|
582
|
+
readonly phase: PassPhase;
|
|
583
|
+
readonly category: PassCategory;
|
|
584
|
+
readonly patterns: readonly Pattern[];
|
|
585
|
+
}
|
|
586
|
+
interface FixpointConfig {
|
|
587
|
+
readonly maxIterations: number;
|
|
588
|
+
readonly phases: Partial<Record<PassPhase, number>>;
|
|
589
|
+
readonly onBudgetExhausted: 'warn' | 'error';
|
|
590
|
+
readonly detectOscillation: boolean;
|
|
591
|
+
}
|
|
592
|
+
type HaltReason = 'converged' | 'budget' | 'oscillation' | 'error';
|
|
593
|
+
interface PhaseRunResult {
|
|
594
|
+
readonly phase: PassPhase;
|
|
595
|
+
readonly iterations: number;
|
|
596
|
+
readonly converged: boolean;
|
|
597
|
+
readonly haltReason: HaltReason;
|
|
598
|
+
readonly touched: ReadonlySet<IRNodeId>;
|
|
599
|
+
readonly diagnostics: readonly Diagnostic[];
|
|
600
|
+
}
|
|
601
|
+
interface RewriteGroup {
|
|
602
|
+
readonly pattern: PatternName;
|
|
603
|
+
readonly anchor: IRNodeId;
|
|
604
|
+
readonly ops: readonly RewriteOp[];
|
|
605
|
+
}
|
|
606
|
+
interface ApplyContext {
|
|
607
|
+
readonly doc: IRDocument;
|
|
608
|
+
readonly safetyCeiling: SafetyLevel;
|
|
609
|
+
readonly normalizer: StyleNormalizer;
|
|
610
|
+
readonly selectors: SelectorIndex;
|
|
611
|
+
readonly resolver: StyleResolver;
|
|
612
|
+
}
|
|
613
|
+
interface StructuralInverse {
|
|
614
|
+
readonly kind: 'structural';
|
|
615
|
+
readonly describe: string;
|
|
616
|
+
readonly snapshot: unknown;
|
|
617
|
+
}
|
|
618
|
+
interface AppliedOp {
|
|
619
|
+
readonly op: RewriteOp;
|
|
620
|
+
readonly inverse: RewriteOp | StructuralInverse;
|
|
621
|
+
}
|
|
622
|
+
interface OpValidationIssue {
|
|
623
|
+
readonly op: RewriteOp;
|
|
624
|
+
readonly code: DiagnosticCode;
|
|
625
|
+
readonly message: string;
|
|
626
|
+
}
|
|
627
|
+
interface SkippedOpGroup {
|
|
628
|
+
readonly group: RewriteGroup;
|
|
629
|
+
readonly issues: readonly OpValidationIssue[];
|
|
630
|
+
}
|
|
631
|
+
interface ApplyResult {
|
|
632
|
+
readonly touched: ReadonlySet<IRNodeId>;
|
|
633
|
+
readonly removed: ReadonlySet<IRNodeId>;
|
|
634
|
+
readonly created: ReadonlySet<IRNodeId>;
|
|
635
|
+
readonly appliedGroups: number;
|
|
636
|
+
readonly skipped: readonly SkippedOpGroup[];
|
|
637
|
+
readonly journal: readonly AppliedOp[];
|
|
638
|
+
readonly diagnostics: readonly Diagnostic[];
|
|
639
|
+
}
|
|
640
|
+
interface PassManager {
|
|
641
|
+
run(doc: IRDocument, ctx: ApplyContext, config?: FixpointConfig): readonly PhaseRunResult[];
|
|
642
|
+
}
|
|
643
|
+
interface FrontendConfig {
|
|
644
|
+
readonly jsxImportSource?: string;
|
|
645
|
+
readonly preserveComments?: boolean;
|
|
646
|
+
readonly [key: string]: unknown;
|
|
647
|
+
}
|
|
648
|
+
interface FrontendParseContext {
|
|
649
|
+
readonly id: string;
|
|
650
|
+
readonly kind: FileKind;
|
|
651
|
+
readonly resolver: StyleResolver;
|
|
652
|
+
readonly normalizer: StyleNormalizer;
|
|
653
|
+
readonly config: FrontendConfig;
|
|
654
|
+
onDiagnostic(d: Diagnostic): void;
|
|
655
|
+
babelAst?: unknown;
|
|
656
|
+
}
|
|
657
|
+
interface ParseResult {
|
|
658
|
+
readonly doc: IRDocument;
|
|
659
|
+
readonly diagnostics: readonly Diagnostic[];
|
|
660
|
+
}
|
|
661
|
+
interface Frontend {
|
|
662
|
+
readonly name: string;
|
|
663
|
+
readonly langs: readonly FileKind[];
|
|
664
|
+
canParse(id: string, code: string): boolean;
|
|
665
|
+
parse(code: string, ctx: FrontendParseContext): ParseResult;
|
|
666
|
+
}
|
|
667
|
+
interface ReindentSpec {
|
|
668
|
+
readonly baseIndent: string;
|
|
669
|
+
readonly delta: number;
|
|
670
|
+
}
|
|
671
|
+
interface TextEdit {
|
|
672
|
+
readonly span: SourceSpan;
|
|
673
|
+
readonly replacement: string;
|
|
674
|
+
readonly reindent?: ReindentSpec;
|
|
675
|
+
readonly origin: string;
|
|
676
|
+
}
|
|
677
|
+
interface EditPlan {
|
|
678
|
+
readonly moduleId: string;
|
|
679
|
+
readonly ops: readonly RewriteOp[];
|
|
680
|
+
readonly provenance: ReadonlyMap<number, PatternName>;
|
|
681
|
+
}
|
|
682
|
+
interface EncodedSourceMap {
|
|
683
|
+
readonly version: 3;
|
|
684
|
+
readonly sources: readonly string[];
|
|
685
|
+
readonly sourcesContent?: readonly (string | null)[];
|
|
686
|
+
readonly names: readonly string[];
|
|
687
|
+
readonly mappings: string;
|
|
688
|
+
readonly file?: string;
|
|
689
|
+
}
|
|
690
|
+
interface BackendContext {
|
|
691
|
+
readonly normalizer: StyleNormalizer;
|
|
692
|
+
readonly resolver: StyleResolver;
|
|
693
|
+
readonly sink: SyntheticSink;
|
|
694
|
+
readonly eol: '\n' | '\r\n';
|
|
695
|
+
onDiagnostic(d: Diagnostic): void;
|
|
696
|
+
}
|
|
697
|
+
interface CodegenResult {
|
|
698
|
+
readonly code: string;
|
|
699
|
+
readonly map: EncodedSourceMap | null;
|
|
700
|
+
readonly edits: readonly TextEdit[];
|
|
701
|
+
readonly diagnostics: readonly Diagnostic[];
|
|
702
|
+
}
|
|
703
|
+
interface Backend {
|
|
704
|
+
readonly name: string;
|
|
705
|
+
readonly langs: readonly FileKind[];
|
|
706
|
+
print(doc: IRDocument, plan: EditPlan, ctx: BackendContext): CodegenResult;
|
|
707
|
+
}
|
|
708
|
+
interface PipelineConfig {
|
|
709
|
+
readonly safety: SafetyLevel;
|
|
710
|
+
readonly fixpoint?: Partial<FixpointConfig>;
|
|
711
|
+
readonly preserveComments?: boolean;
|
|
712
|
+
readonly emitSourceMap?: boolean;
|
|
713
|
+
}
|
|
714
|
+
interface PipelineInput {
|
|
715
|
+
readonly code: string;
|
|
716
|
+
readonly id: string;
|
|
717
|
+
readonly kind: FileKind;
|
|
718
|
+
readonly frontend: Frontend;
|
|
719
|
+
readonly backend: Backend;
|
|
720
|
+
readonly resolver: StyleResolver;
|
|
721
|
+
readonly normalizer: StyleNormalizer;
|
|
722
|
+
readonly passes: readonly Pass[];
|
|
723
|
+
readonly config?: PipelineConfig;
|
|
724
|
+
readonly reporter?: Reporter;
|
|
725
|
+
readonly babelAst?: unknown;
|
|
726
|
+
}
|
|
727
|
+
interface PipelineStats {
|
|
728
|
+
readonly nodesIn: number;
|
|
729
|
+
readonly nodesOut: number;
|
|
730
|
+
readonly opsApplied: number;
|
|
731
|
+
readonly iterations: Readonly<Record<PassPhase, number>>;
|
|
732
|
+
readonly durationMs: number;
|
|
733
|
+
}
|
|
734
|
+
interface PipelineOutput {
|
|
735
|
+
readonly code: string;
|
|
736
|
+
readonly map: EncodedSourceMap | null;
|
|
737
|
+
readonly changed: boolean;
|
|
738
|
+
readonly touched: readonly SourceSpan[];
|
|
739
|
+
readonly diagnostics: readonly Diagnostic[];
|
|
740
|
+
readonly stats: PipelineStats;
|
|
741
|
+
readonly doc: IRDocument;
|
|
742
|
+
readonly editPlan: EditPlan;
|
|
743
|
+
}
|
|
744
|
+
/** The pure single-file pipeline. Adapters/orchestrator call this; the verifier reuses it. */
|
|
745
|
+
interface Pipeline {
|
|
746
|
+
run(input: PipelineInput): PipelineOutput;
|
|
747
|
+
}
|
|
748
|
+
|
|
749
|
+
export type { EncodedSourceMap as $, AttrMap as A, BackrefTable as B, CssProperty as C, PreconditionSketch as D, ElementLike as E, FrontendKind as F, PatternDoc as G, Diagnostic as H, IRNodeId as I, ApplyResult as J, RewriteGroup as K, ApplyContext as L, MatchContext as M, NodeLike as N, RewriteOp as O, Pattern as P, FixpointConfig as Q, RewriteOpDraft as R, StyleMap as S, StyleResolver as T, SelectorIndex as U, Visitor as V, Pass as W, PassManager as X, PhaseRunResult as Y, Pipeline as Z, SyntheticSink as _, StyleConflictPolicy as a, TextEdit as a$, AppliedOp as a0, AttrValue as a1, Backend as a2, BackendContext as a3, Brand as a4, ClassListForm as a5, ClassSegment as a6, ClassToken as a7, CodegenResult as a8, CommentSpec as a9, ParentLayoutContext as aA, ParseResult as aB, PassPhase as aC, PassTraceEntry as aD, PatternName as aE, PipelineConfig as aF, PipelineInput as aG, PipelineOutput as aH, PipelineStats as aI, Position as aJ, ReindentSpec as aK, Reporter as aL, ResolveInput as aM, ResolveResult as aN, ResolverDiagnostic as aO, RewriteContext as aP, SelectorUsage as aQ, Severity as aR, SkippedOpGroup as aS, SourceFile as aT, SourceFileId as aU, StructuralInverse as aV, StyleBlock as aW, StyleDecl as aX, StyleOrigin as aY, StylePredicate as aZ, SyntheticClass as a_, CssValue as aa, DeclSignature as ab, DeepReadonly as ac, DiagnosticCode as ad, DistributiveOmit as ae, EditPlan as af, ElementSpec as ag, EmitContext as ah, EmitResult as ai, ExprKind as aj, ExprRecord as ak, ExprSpec as al, FileKind as am, FragmentSpec as an, Frontend as ao, FrontendConfig as ap, FrontendParseContext as aq, HaltReason as ar, IRNodeBase as as, IRNodeKind as at, InheritedPropertyTable as au, NodeRefSpec as av, OpOrigin as aw, OpValidationIssue as ax, OpaqueReason as ay, OpaqueToken as az, NodeSpec as b, TextSpec as b0, TreeShapeSketch as b1, VisitContext as b2, VisitSignal as b3, StyleNormalizer as c, StyleCondition as d, ConditionKey as e, IRNamespace as f, ClassList as g, InlineStyle as h, SourceSpan as i, NodeMeta as j, Backref as k, IRNode as l, IRComment as m, IRDocument as n, IRElement as o, ExprRef as p, IRExpr as q, ExprRegistry as r, IRFragment as s, IdAllocator as t, IRText as u, SafetyLevel as v, Captures as w, RewriteFactory as x, MatchResult as y, PassCategory as z };
|