@reactra/babel-plugin 0.1.0-alpha.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 +21 -0
- package/README.md +17 -0
- package/dist/ast/index.d.ts +2 -0
- package/dist/ast/index.d.ts.map +1 -0
- package/dist/ast/index.js +3 -0
- package/dist/ast/index.js.map +1 -0
- package/dist/ast/nodes.d.ts +437 -0
- package/dist/ast/nodes.d.ts.map +1 -0
- package/dist/ast/nodes.js +35 -0
- package/dist/ast/nodes.js.map +1 -0
- package/dist/behaviours/index.d.ts +18 -0
- package/dist/behaviours/index.d.ts.map +1 -0
- package/dist/behaviours/index.js +36 -0
- package/dist/behaviours/index.js.map +1 -0
- package/dist/behaviours/plugin.d.ts +22 -0
- package/dist/behaviours/plugin.d.ts.map +1 -0
- package/dist/behaviours/plugin.js +70 -0
- package/dist/behaviours/plugin.js.map +1 -0
- package/dist/behaviours/replayable.d.ts +10 -0
- package/dist/behaviours/replayable.d.ts.map +1 -0
- package/dist/behaviours/replayable.js +86 -0
- package/dist/behaviours/replayable.js.map +1 -0
- package/dist/behaviours/types.d.ts +77 -0
- package/dist/behaviours/types.d.ts.map +1 -0
- package/dist/behaviours/types.js +10 -0
- package/dist/behaviours/types.js.map +1 -0
- package/dist/behaviours/undoable.d.ts +10 -0
- package/dist/behaviours/undoable.d.ts.map +1 -0
- package/dist/behaviours/undoable.js +62 -0
- package/dist/behaviours/undoable.js.map +1 -0
- package/dist/compile.d.ts +69 -0
- package/dist/compile.d.ts.map +1 -0
- package/dist/compile.js +75 -0
- package/dist/compile.js.map +1 -0
- package/dist/conventions/index.d.ts +110 -0
- package/dist/conventions/index.d.ts.map +1 -0
- package/dist/conventions/index.js +193 -0
- package/dist/conventions/index.js.map +1 -0
- package/dist/index.d.ts +48 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +77 -0
- package/dist/index.js.map +1 -0
- package/dist/passes/index.d.ts +5 -0
- package/dist/passes/index.d.ts.map +1 -0
- package/dist/passes/index.js +6 -0
- package/dist/passes/index.js.map +1 -0
- package/dist/passes/pass-1-parse.d.ts +3 -0
- package/dist/passes/pass-1-parse.d.ts.map +1 -0
- package/dist/passes/pass-1-parse.js +21 -0
- package/dist/passes/pass-1-parse.js.map +1 -0
- package/dist/passes/pass-2-extract.d.ts +4 -0
- package/dist/passes/pass-2-extract.d.ts.map +1 -0
- package/dist/passes/pass-2-extract.js +762 -0
- package/dist/passes/pass-2-extract.js.map +1 -0
- package/dist/passes/pass-3-readset.d.ts +11 -0
- package/dist/passes/pass-3-readset.d.ts.map +1 -0
- package/dist/passes/pass-3-readset.js +338 -0
- package/dist/passes/pass-3-readset.js.map +1 -0
- package/dist/passes/pass-9-codegen.d.ts +27 -0
- package/dist/passes/pass-9-codegen.d.ts.map +1 -0
- package/dist/passes/pass-9-codegen.js +2755 -0
- package/dist/passes/pass-9-codegen.js.map +1 -0
- package/dist/preprocess/helpers.d.ts +71 -0
- package/dist/preprocess/helpers.d.ts.map +1 -0
- package/dist/preprocess/helpers.js +342 -0
- package/dist/preprocess/helpers.js.map +1 -0
- package/dist/preprocess/index.d.ts +6 -0
- package/dist/preprocess/index.d.ts.map +1 -0
- package/dist/preprocess/index.js +11 -0
- package/dist/preprocess/index.js.map +1 -0
- package/dist/preprocess/keywords.d.ts +28 -0
- package/dist/preprocess/keywords.d.ts.map +1 -0
- package/dist/preprocess/keywords.js +99 -0
- package/dist/preprocess/keywords.js.map +1 -0
- package/dist/preprocess/lexer.d.ts +8 -0
- package/dist/preprocess/lexer.d.ts.map +1 -0
- package/dist/preprocess/lexer.js +143 -0
- package/dist/preprocess/lexer.js.map +1 -0
- package/dist/preprocess/preprocess.d.ts +3 -0
- package/dist/preprocess/preprocess.d.ts.map +1 -0
- package/dist/preprocess/preprocess.js +568 -0
- package/dist/preprocess/preprocess.js.map +1 -0
- package/dist/preprocess/rewriters.d.ts +35 -0
- package/dist/preprocess/rewriters.d.ts.map +1 -0
- package/dist/preprocess/rewriters.js +1391 -0
- package/dist/preprocess/rewriters.js.map +1 -0
- package/dist/preprocess/source-map.d.ts +70 -0
- package/dist/preprocess/source-map.d.ts.map +1 -0
- package/dist/preprocess/source-map.js +253 -0
- package/dist/preprocess/source-map.js.map +1 -0
- package/dist/preprocess/types.d.ts +57 -0
- package/dist/preprocess/types.d.ts.map +1 -0
- package/dist/preprocess/types.js +7 -0
- package/dist/preprocess/types.js.map +1 -0
- package/dist/sidecar.d.ts +137 -0
- package/dist/sidecar.d.ts.map +1 -0
- package/dist/sidecar.js +172 -0
- package/dist/sidecar.js.map +1 -0
- package/package.json +42 -0
|
@@ -0,0 +1,568 @@
|
|
|
1
|
+
// Pre-processor entry — Compiler §4 Pass 1.1.
|
|
2
|
+
//
|
|
3
|
+
// Walks the token stream, tracks Reactra scope (module / component-body
|
|
4
|
+
// / store-body / view-body), and dispatches to per-keyword rewriters that
|
|
5
|
+
// emit __reactra_*__() marker calls. The result is JS-valid source that
|
|
6
|
+
// Babel parses in Pass 1.
|
|
7
|
+
import { lex, skipTrivia, skipTriviaBack } from "./lexer.js";
|
|
8
|
+
import { slice } from "./helpers.js";
|
|
9
|
+
import { rewriteAction, rewriteCommand, rewriteAwait, rewriteBlock, rewriteDerived, rewriteEffect, rewriteErrorBoundary, rewriteInject, rewriteInput, rewriteMeta, rewriteParam, rewritePrefetch, rewritePreserved, rewriteProvide, rewriteQuery, rewriteRef, rewriteResource, rewriteState, rewriteSuspense, rewriteTransition, rewriteUses, } from "./rewriters.js";
|
|
10
|
+
/**
|
|
11
|
+
* Back-walk an optional header `uses A, B` clause ending at token `i` (the
|
|
12
|
+
* last token before `{`, trivia already skipped). Commits only when the
|
|
13
|
+
* ident run is terminated by the `uses` keyword — `component Name {` walks
|
|
14
|
+
* back over `Name`, finds `component`, and returns null with no side effects.
|
|
15
|
+
* Returns the names (source order) and the index before the clause.
|
|
16
|
+
*/
|
|
17
|
+
const parseHeaderUsesBack = (tokens, i) => {
|
|
18
|
+
const names = [];
|
|
19
|
+
let j = i;
|
|
20
|
+
while (j >= 0 && tokens[j].kind === "ident") {
|
|
21
|
+
names.unshift(tokens[j].text);
|
|
22
|
+
const prev = skipTriviaBack(tokens, j - 1);
|
|
23
|
+
if (prev < 0)
|
|
24
|
+
return null;
|
|
25
|
+
if (tokens[prev].kind === "ident" && tokens[prev].text === "uses") {
|
|
26
|
+
return { names, before: skipTriviaBack(tokens, prev - 1) };
|
|
27
|
+
}
|
|
28
|
+
if (tokens[prev].kind === "punct" && tokens[prev].text === ",") {
|
|
29
|
+
j = skipTriviaBack(tokens, prev - 1);
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
return null;
|
|
35
|
+
};
|
|
36
|
+
export const preprocess = (source) => {
|
|
37
|
+
const tokens = lex(source);
|
|
38
|
+
const rewrites = [];
|
|
39
|
+
const stack = [{ kind: "module" }];
|
|
40
|
+
const here = () => stack[stack.length - 1].kind;
|
|
41
|
+
for (let i = 0; i < tokens.length; i++) {
|
|
42
|
+
const tok = tokens[i];
|
|
43
|
+
if (tok.kind === "punct") {
|
|
44
|
+
if (tok.text === "{") {
|
|
45
|
+
const prevIdx = skipTriviaBack(tokens, i - 1);
|
|
46
|
+
const prev = prevIdx >= 0 ? tokens[prevIdx] : null;
|
|
47
|
+
if (prev?.kind === "ident" && prev.text === "view" && here() === "component-body") {
|
|
48
|
+
// Emit open rewrite covering `view {` -> `__reactra_view__(() => (<>`
|
|
49
|
+
rewrites.push({
|
|
50
|
+
span: { start: prev.start, end: tok.end },
|
|
51
|
+
text: `__reactra_view__(() => (<>`,
|
|
52
|
+
});
|
|
53
|
+
stack.push({ kind: "view-body", closeRewrite: `</>))` });
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
const sig = detectSignatureBrace(tokens, i);
|
|
57
|
+
if (sig) {
|
|
58
|
+
const open = emitSignatureOpen(sig);
|
|
59
|
+
const close = emitSignatureClose(sig);
|
|
60
|
+
rewrites.push({ span: sig.span, text: open });
|
|
61
|
+
stack.push({ kind: sig.kind, closeRewrite: close });
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
// Plain JS block / object literal
|
|
65
|
+
stack.push({ kind: "block" });
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
if (tok.text === "}") {
|
|
69
|
+
if (stack.length > 1) {
|
|
70
|
+
const popped = stack.pop();
|
|
71
|
+
if (popped.closeRewrite !== undefined) {
|
|
72
|
+
rewrites.push({
|
|
73
|
+
span: { start: tok.start, end: tok.end },
|
|
74
|
+
text: popped.closeRewrite,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
if (tok.kind !== "ident")
|
|
82
|
+
continue;
|
|
83
|
+
const scope = here();
|
|
84
|
+
const rewritten = dispatch(tokens, i, scope);
|
|
85
|
+
if (rewritten) {
|
|
86
|
+
rewrites.push(rewritten.rewrite);
|
|
87
|
+
i = rewritten.consumedUpTo;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return { code: applyRewrites(source, rewrites), rewrites, diagnostics: [] };
|
|
91
|
+
};
|
|
92
|
+
const dispatch = (tokens, i, scope) => {
|
|
93
|
+
const text = tokens[i].text;
|
|
94
|
+
// Component-body keywords
|
|
95
|
+
if (scope === "component-body") {
|
|
96
|
+
switch (text) {
|
|
97
|
+
case "state":
|
|
98
|
+
return rewriteState(tokens, i);
|
|
99
|
+
case "derived":
|
|
100
|
+
return rewriteDerived(tokens, i);
|
|
101
|
+
case "action":
|
|
102
|
+
return rewriteAction(tokens, i);
|
|
103
|
+
case "command":
|
|
104
|
+
return rewriteCommand(tokens, i);
|
|
105
|
+
case "resource":
|
|
106
|
+
return rewriteResource(tokens, i);
|
|
107
|
+
case "ref":
|
|
108
|
+
return rewriteRef(tokens, i);
|
|
109
|
+
case "mount":
|
|
110
|
+
return rewriteBlock("mount", tokens, i);
|
|
111
|
+
case "effect": {
|
|
112
|
+
// v3.0: bare `effect {}` is retired — only `effect on(...)` is a DSL form.
|
|
113
|
+
// Detect the bare form here and throw R027 BEFORE Babel sees the raw token
|
|
114
|
+
// (a Babel parse of `effect {}` in strict mode would be a SyntaxError with
|
|
115
|
+
// no Reactra context). If `on` follows, delegate normally.
|
|
116
|
+
const nextIdx = skipTrivia(tokens, i + 1);
|
|
117
|
+
if (tokens[nextIdx]?.text !== "on") {
|
|
118
|
+
throw new Error(`[reactra:compile] R027: bare \`effect {}\` (no \`on\` clause) was retired in Reactra v2. ` +
|
|
119
|
+
`Use \`mount { … }\` for run-once side effects, ` +
|
|
120
|
+
`or \`effect on(dep) { … }\` to watch a dependency. ` +
|
|
121
|
+
`(Component DSL §3.3 / §14 R027.)`);
|
|
122
|
+
}
|
|
123
|
+
return rewriteEffect(tokens, i);
|
|
124
|
+
}
|
|
125
|
+
case "cleanup":
|
|
126
|
+
// R027: `cleanup` keyword retired in DSL v2. Teardown is the `return`ed
|
|
127
|
+
// function of the paired `mount` or `effect on(...)` body (§3.3).
|
|
128
|
+
throw new Error(`[reactra:compile] R027: \`cleanup\` was retired in Reactra v2. ` +
|
|
129
|
+
`Return a teardown function from \`mount { … return () => { … } }\` ` +
|
|
130
|
+
`or \`effect on(dep) { … return () => { … } }\` instead. ` +
|
|
131
|
+
`(Component DSL §3.3 / §14 R027.)`);
|
|
132
|
+
case "view":
|
|
133
|
+
// view is handled by the scope tracker — see the `{` branch above.
|
|
134
|
+
return null;
|
|
135
|
+
case "uses":
|
|
136
|
+
return rewriteUses(tokens, i);
|
|
137
|
+
case "inject":
|
|
138
|
+
return rewriteInject(tokens, i);
|
|
139
|
+
case "provide":
|
|
140
|
+
return rewriteProvide(tokens, i);
|
|
141
|
+
case "param":
|
|
142
|
+
return rewriteParam(tokens, i);
|
|
143
|
+
case "query":
|
|
144
|
+
return rewriteQuery(tokens, i);
|
|
145
|
+
case "meta":
|
|
146
|
+
return rewriteMeta(tokens, i);
|
|
147
|
+
case "prefetch":
|
|
148
|
+
return rewritePrefetch(tokens, i);
|
|
149
|
+
case "transition":
|
|
150
|
+
return rewriteTransition(tokens, i);
|
|
151
|
+
case "errorBoundary":
|
|
152
|
+
return rewriteErrorBoundary(tokens, i);
|
|
153
|
+
case "suspense":
|
|
154
|
+
return rewriteSuspense(tokens, i);
|
|
155
|
+
default:
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
// Store-body keywords
|
|
160
|
+
if (scope === "store-body") {
|
|
161
|
+
switch (text) {
|
|
162
|
+
case "state":
|
|
163
|
+
return rewriteState(tokens, i);
|
|
164
|
+
case "derived":
|
|
165
|
+
return rewriteDerived(tokens, i);
|
|
166
|
+
case "action":
|
|
167
|
+
return rewriteAction(tokens, i);
|
|
168
|
+
case "resource":
|
|
169
|
+
return rewriteResource(tokens, i);
|
|
170
|
+
case "uses":
|
|
171
|
+
return rewriteUses(tokens, i);
|
|
172
|
+
case "inject":
|
|
173
|
+
return rewriteInject(tokens, i);
|
|
174
|
+
case "input":
|
|
175
|
+
return rewriteInput(tokens, i);
|
|
176
|
+
case "preserved":
|
|
177
|
+
return rewritePreserved(tokens, i);
|
|
178
|
+
default:
|
|
179
|
+
return null;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
// Service-body keywords (subset — services use state/derived/action/inject/uses)
|
|
183
|
+
if (scope === "service-body") {
|
|
184
|
+
switch (text) {
|
|
185
|
+
case "state":
|
|
186
|
+
return rewriteState(tokens, i);
|
|
187
|
+
case "derived":
|
|
188
|
+
return rewriteDerived(tokens, i);
|
|
189
|
+
case "action":
|
|
190
|
+
return rewriteAction(tokens, i);
|
|
191
|
+
case "resource":
|
|
192
|
+
return rewriteResource(tokens, i);
|
|
193
|
+
case "inject":
|
|
194
|
+
return rewriteInject(tokens, i);
|
|
195
|
+
case "uses":
|
|
196
|
+
return rewriteUses(tokens, i);
|
|
197
|
+
default:
|
|
198
|
+
return null;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
// View-body keywords
|
|
202
|
+
if (scope === "view-body") {
|
|
203
|
+
if (text === "await")
|
|
204
|
+
return rewriteAwait(tokens, i);
|
|
205
|
+
return null;
|
|
206
|
+
}
|
|
207
|
+
return null;
|
|
208
|
+
};
|
|
209
|
+
/**
|
|
210
|
+
* Look back from a `{` and decide whether it opens a top-level Reactra
|
|
211
|
+
* declaration (component, store, or service). Returns the parsed signature
|
|
212
|
+
* info (including the source span for the open-rewrite), or `null` if this
|
|
213
|
+
* `{` opens something else (an object literal, a plain block, etc.).
|
|
214
|
+
*/
|
|
215
|
+
const detectSignatureBrace = (tokens, braceIdx) => {
|
|
216
|
+
return (detectComponentSignature(tokens, braceIdx) ??
|
|
217
|
+
detectServiceSignature(tokens, braceIdx) ??
|
|
218
|
+
detectStoreSignature(tokens, braceIdx));
|
|
219
|
+
};
|
|
220
|
+
/**
|
|
221
|
+
* Detect `{` opening a component body. Matches:
|
|
222
|
+
* export component Name { ... }
|
|
223
|
+
* component Name { ... } (rare — pages must be exported)
|
|
224
|
+
* export component Name(props: P) { ... } (function-style with props arg)
|
|
225
|
+
*/
|
|
226
|
+
const detectComponentSignature = (tokens, braceIdx) => {
|
|
227
|
+
let i = skipTriviaBack(tokens, braceIdx - 1);
|
|
228
|
+
// Optional header `uses A, B` clause — always the LAST header element,
|
|
229
|
+
// immediately before `{` (Component DSL §9 / Compiler §4 Pass 1.1).
|
|
230
|
+
let headerUses;
|
|
231
|
+
const usesClause = parseHeaderUsesBack(tokens, i);
|
|
232
|
+
if (usesClause) {
|
|
233
|
+
headerUses = usesClause.names;
|
|
234
|
+
i = usesClause.before;
|
|
235
|
+
}
|
|
236
|
+
// Optional React-style props parameter — `export component X(<param>) {`
|
|
237
|
+
// (Component DSL §1.1). Captured verbatim; re-emitted on the component arrow.
|
|
238
|
+
let propsParam;
|
|
239
|
+
if (i >= 0 && tokens[i].kind === "punct" && tokens[i].text === ")") {
|
|
240
|
+
const closeIdx = i;
|
|
241
|
+
i = skipMatchedParens(tokens, i); // index BEFORE the open `(`
|
|
242
|
+
const inner = slice(tokens, i + 2, closeIdx - 1).trim();
|
|
243
|
+
if (inner.length > 0)
|
|
244
|
+
propsParam = inner;
|
|
245
|
+
i = skipTriviaBack(tokens, i);
|
|
246
|
+
}
|
|
247
|
+
// Component name
|
|
248
|
+
if (i < 0 || tokens[i].kind !== "ident")
|
|
249
|
+
return null;
|
|
250
|
+
const name = tokens[i].text;
|
|
251
|
+
i = skipTriviaBack(tokens, i - 1);
|
|
252
|
+
if (i < 0 || tokens[i].text !== "component")
|
|
253
|
+
return null;
|
|
254
|
+
let signatureFirst = tokens[i];
|
|
255
|
+
// Optional `export`
|
|
256
|
+
const beforeComponent = skipTriviaBack(tokens, i - 1);
|
|
257
|
+
let exported = false;
|
|
258
|
+
if (beforeComponent >= 0 && tokens[beforeComponent].text === "export") {
|
|
259
|
+
exported = true;
|
|
260
|
+
signatureFirst = tokens[beforeComponent];
|
|
261
|
+
}
|
|
262
|
+
return {
|
|
263
|
+
kind: "component-body",
|
|
264
|
+
span: { start: signatureFirst.start, end: tokens[braceIdx].end },
|
|
265
|
+
name,
|
|
266
|
+
exported,
|
|
267
|
+
propsParam,
|
|
268
|
+
headerUses,
|
|
269
|
+
};
|
|
270
|
+
};
|
|
271
|
+
/**
|
|
272
|
+
* Detect `{` opening a store body. Supports both the v1 and v2 grammar:
|
|
273
|
+
*
|
|
274
|
+
* **v1 (legacy, still accepted):**
|
|
275
|
+
* route store Name { ... }
|
|
276
|
+
* route store Name(key: T) { ... }
|
|
277
|
+
* route store Name for subtree "/path" { ... }
|
|
278
|
+
* session store Name { ... }
|
|
279
|
+
* export store Name { ... } (global — no lifetime word)
|
|
280
|
+
*
|
|
281
|
+
* **v2 (Compiler §4 Pass 1.1 / DSL v3.0):**
|
|
282
|
+
* export app store Name { ... } (app-scoped global)
|
|
283
|
+
* export route store Name { ... }
|
|
284
|
+
* export route store Name(key: T) { ... }
|
|
285
|
+
* export session store Name { ... }
|
|
286
|
+
* export subtree store Name "/path" { ... } (path right after name, not `for subtree`)
|
|
287
|
+
* app store Name { ... } / route store Name { ... } / session store Name { ... } (non-exported)
|
|
288
|
+
* subtree store Name "/path" { ... }
|
|
289
|
+
*
|
|
290
|
+
* `export` is now an independent JS-visibility token before the lifetime word;
|
|
291
|
+
* `exported` is decoupled from the lifetime. `app`/`subtree` are contextual
|
|
292
|
+
* lifetime words, not reserved keywords.
|
|
293
|
+
*
|
|
294
|
+
* SignatureInfo.modifier carries the lifetime word (`app|route|session|subtree`)
|
|
295
|
+
* so `emitSignatureOpen` can pick the correct marker function and wire the path.
|
|
296
|
+
*/
|
|
297
|
+
const detectStoreSignature = (tokens, braceIdx) => {
|
|
298
|
+
let i = skipTriviaBack(tokens, braceIdx - 1);
|
|
299
|
+
// Optional header `uses A, B` clause — last header element, before `{`
|
|
300
|
+
// (Component DSL §9: the clause is component-or-store).
|
|
301
|
+
let headerUses;
|
|
302
|
+
const usesClause = parseHeaderUsesBack(tokens, i);
|
|
303
|
+
if (usesClause) {
|
|
304
|
+
headerUses = usesClause.names;
|
|
305
|
+
i = usesClause.before;
|
|
306
|
+
}
|
|
307
|
+
// Optional parameterised-store key signature: `(key: T)`
|
|
308
|
+
let keySig;
|
|
309
|
+
if (i >= 0 && tokens[i].kind === "punct" && tokens[i].text === ")") {
|
|
310
|
+
const closeIdx = i;
|
|
311
|
+
i = skipMatchedParens(tokens, i);
|
|
312
|
+
keySig = slice(tokens, i + 2, closeIdx - 1).trim();
|
|
313
|
+
i = skipTriviaBack(tokens, i);
|
|
314
|
+
}
|
|
315
|
+
// v2: optional path string right after the store name: `subtree store Name "/path" {`
|
|
316
|
+
// (backward: `{` ← `"/path"` ← `Name` ← `store` ← `subtree`).
|
|
317
|
+
// v1: `route store Name for subtree "/path" {`
|
|
318
|
+
// (backward: `{` ← `"/path"` ← `subtree` ← `for` ← `Name` ← `store` ← `route`).
|
|
319
|
+
// In both cases the string appears before the name in backward order — we consume it
|
|
320
|
+
// tentatively here, then validate the lifetime below.
|
|
321
|
+
let subtreePath;
|
|
322
|
+
if (i >= 0 && tokens[i].kind === "string") {
|
|
323
|
+
const pathStr = tokens[i].text.slice(1, -1); // strip quotes
|
|
324
|
+
const prev = skipTriviaBack(tokens, i - 1);
|
|
325
|
+
if (prev >= 0) {
|
|
326
|
+
const prevText = tokens[prev].text;
|
|
327
|
+
if (prevText === "subtree") {
|
|
328
|
+
// v1 form: string ← subtree ← for ← Name ← store ← ...
|
|
329
|
+
const prev2 = skipTriviaBack(tokens, prev - 1);
|
|
330
|
+
if (prev2 >= 0 && tokens[prev2].text === "for") {
|
|
331
|
+
subtreePath = pathStr;
|
|
332
|
+
i = skipTriviaBack(tokens, prev2 - 1);
|
|
333
|
+
}
|
|
334
|
+
else {
|
|
335
|
+
return null; // `subtree "/path"` without `for` is invalid v1
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
else if (tokens[prev].kind === "ident") {
|
|
339
|
+
// v2 form: string ← Name ← store ← subtree ← ...
|
|
340
|
+
// Consume the path; leave `i` pointing at the name.
|
|
341
|
+
subtreePath = pathStr;
|
|
342
|
+
i = prev;
|
|
343
|
+
}
|
|
344
|
+
else {
|
|
345
|
+
return null;
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
else {
|
|
349
|
+
return null;
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
// Store name
|
|
353
|
+
if (i < 0 || tokens[i].kind !== "ident")
|
|
354
|
+
return null;
|
|
355
|
+
const name = tokens[i].text;
|
|
356
|
+
i = skipTriviaBack(tokens, i - 1);
|
|
357
|
+
if (i < 0 || tokens[i].text !== "store")
|
|
358
|
+
return null;
|
|
359
|
+
let signatureFirst = tokens[i];
|
|
360
|
+
// Lifetime word — the token before `store`.
|
|
361
|
+
// Valid: `app | route | session | subtree`.
|
|
362
|
+
// v1 also: bare `export store X {}` → treat lifetime as `app` for consistency.
|
|
363
|
+
const beforeStore = skipTriviaBack(tokens, i - 1);
|
|
364
|
+
let lifetime;
|
|
365
|
+
let exported = false;
|
|
366
|
+
if (beforeStore < 0)
|
|
367
|
+
return null;
|
|
368
|
+
const lifetimeTok = tokens[beforeStore];
|
|
369
|
+
if (lifetimeTok.text === "app" ||
|
|
370
|
+
lifetimeTok.text === "route" ||
|
|
371
|
+
lifetimeTok.text === "session" ||
|
|
372
|
+
lifetimeTok.text === "subtree") {
|
|
373
|
+
lifetime = lifetimeTok.text;
|
|
374
|
+
signatureFirst = lifetimeTok;
|
|
375
|
+
// Optional `export` before the lifetime word (v2 `export app store X`, etc.)
|
|
376
|
+
const beforeLifetime = skipTriviaBack(tokens, beforeStore - 1);
|
|
377
|
+
if (beforeLifetime >= 0 && tokens[beforeLifetime].text === "export") {
|
|
378
|
+
exported = true;
|
|
379
|
+
signatureFirst = tokens[beforeLifetime];
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
else if (lifetimeTok.text === "export") {
|
|
383
|
+
// v1: `export store X {}` — `export` directly before `store`, no lifetime word.
|
|
384
|
+
// Map to `app` lifetime (global store) for v2 compatibility.
|
|
385
|
+
lifetime = "app";
|
|
386
|
+
exported = true;
|
|
387
|
+
signatureFirst = lifetimeTok;
|
|
388
|
+
}
|
|
389
|
+
else {
|
|
390
|
+
// Unknown token — `store X {}` alone is ambiguous; ignore.
|
|
391
|
+
return null;
|
|
392
|
+
}
|
|
393
|
+
// Validate: a subtree path is only valid with the `subtree` lifetime.
|
|
394
|
+
if (subtreePath !== undefined && lifetime !== "subtree" && lifetime !== "route") {
|
|
395
|
+
// Only `subtree store X "/p"` or v1 `route store X for subtree "/p"` carry a path.
|
|
396
|
+
return null;
|
|
397
|
+
}
|
|
398
|
+
return {
|
|
399
|
+
kind: "store-body",
|
|
400
|
+
span: { start: signatureFirst.start, end: tokens[braceIdx].end },
|
|
401
|
+
name,
|
|
402
|
+
modifier: lifetime,
|
|
403
|
+
exported,
|
|
404
|
+
subtreePath,
|
|
405
|
+
keySig,
|
|
406
|
+
headerUses,
|
|
407
|
+
};
|
|
408
|
+
};
|
|
409
|
+
/**
|
|
410
|
+
* Detect `{` opening a service body. Matches:
|
|
411
|
+
* service Name { ... }
|
|
412
|
+
* service scoped Name { ... }
|
|
413
|
+
* service server Name { ... }
|
|
414
|
+
* export service Name { ... }
|
|
415
|
+
* service Name implements IX { ... }
|
|
416
|
+
*/
|
|
417
|
+
const detectServiceSignature = (tokens, braceIdx) => {
|
|
418
|
+
let i = skipTriviaBack(tokens, braceIdx - 1);
|
|
419
|
+
// Optional `implements IX` — skip the interface name + `implements` keyword.
|
|
420
|
+
if (i >= 0 && tokens[i].kind === "ident") {
|
|
421
|
+
const back = skipTriviaBack(tokens, i - 1);
|
|
422
|
+
if (back >= 0 && tokens[back].text === "implements") {
|
|
423
|
+
i = skipTriviaBack(tokens, back - 1);
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
// Service name
|
|
427
|
+
if (i < 0 || tokens[i].kind !== "ident")
|
|
428
|
+
return null;
|
|
429
|
+
const name = tokens[i].text;
|
|
430
|
+
i = skipTriviaBack(tokens, i - 1);
|
|
431
|
+
if (i < 0)
|
|
432
|
+
return null;
|
|
433
|
+
let signatureFirst = tokens[i];
|
|
434
|
+
// Optional modifier: scoped / server
|
|
435
|
+
let modifier;
|
|
436
|
+
if (tokens[i].text === "scoped" || tokens[i].text === "server") {
|
|
437
|
+
modifier = tokens[i].text;
|
|
438
|
+
i = skipTriviaBack(tokens, i - 1);
|
|
439
|
+
if (i < 0)
|
|
440
|
+
return null;
|
|
441
|
+
signatureFirst = tokens[i];
|
|
442
|
+
}
|
|
443
|
+
if (tokens[i].text !== "service")
|
|
444
|
+
return null;
|
|
445
|
+
signatureFirst = tokens[i];
|
|
446
|
+
// Optional `export`
|
|
447
|
+
const beforeService = skipTriviaBack(tokens, i - 1);
|
|
448
|
+
let exported = false;
|
|
449
|
+
if (beforeService >= 0 && tokens[beforeService].text === "export") {
|
|
450
|
+
exported = true;
|
|
451
|
+
signatureFirst = tokens[beforeService];
|
|
452
|
+
}
|
|
453
|
+
return {
|
|
454
|
+
kind: "service-body",
|
|
455
|
+
span: { start: signatureFirst.start, end: tokens[braceIdx].end },
|
|
456
|
+
name,
|
|
457
|
+
modifier,
|
|
458
|
+
exported,
|
|
459
|
+
};
|
|
460
|
+
};
|
|
461
|
+
/** Helper: given `i` pointing at `)`, return the token index just BEFORE the matching `(` */
|
|
462
|
+
const skipMatchedParens = (tokens, closeParenIdx) => {
|
|
463
|
+
let depth = 1;
|
|
464
|
+
let i = closeParenIdx - 1;
|
|
465
|
+
while (i >= 0 && depth > 0) {
|
|
466
|
+
const t = tokens[i];
|
|
467
|
+
if (t.kind === "punct" && t.text === ")")
|
|
468
|
+
depth++;
|
|
469
|
+
else if (t.kind === "punct" && t.text === "(")
|
|
470
|
+
depth--;
|
|
471
|
+
i--;
|
|
472
|
+
}
|
|
473
|
+
return i;
|
|
474
|
+
};
|
|
475
|
+
/**
|
|
476
|
+
* Build the source text that REPLACES a Reactra signature up to and including `{`.
|
|
477
|
+
*
|
|
478
|
+
* `exported` drives the `export const` / `const` prefix independently of the
|
|
479
|
+
* lifetime word (v2 decoupling). The lifetime (modifier) selects the marker:
|
|
480
|
+
* `app` → `__reactra_app_store__` → kind `"export-store"` (safe default)
|
|
481
|
+
* `session` → `__reactra_session_store__`
|
|
482
|
+
* `subtree` → `__reactra_route_store_subtree__` (carries path arg)
|
|
483
|
+
* `route` + keySig → `__reactra_route_store_keyed__`
|
|
484
|
+
* `route` → `__reactra_route_store__`
|
|
485
|
+
*/
|
|
486
|
+
const emitSignatureOpen = (sig) => {
|
|
487
|
+
// v2: `exported` is independent of the lifetime (was conflated in v1 `export store`).
|
|
488
|
+
const prefix = sig.exported ? "export const" : "const";
|
|
489
|
+
// Header `uses A, B` lowers to the same marker the body-line form produces,
|
|
490
|
+
// injected as the FIRST body statement (Compiler §4 Pass 1.1). Part of the
|
|
491
|
+
// signature rewrite → compiler-generated boilerplate, unmapped by design
|
|
492
|
+
// (§8 — no fabricated srcMap sub-run).
|
|
493
|
+
const usesMarker = sig.headerUses
|
|
494
|
+
? ` __reactra_uses__(${sig.headerUses.map((n) => `"${n}"`).join(", ")});`
|
|
495
|
+
: "";
|
|
496
|
+
if (sig.kind === "component-body") {
|
|
497
|
+
// §1.1 — the React-style props parameter is re-emitted verbatim on the arrow.
|
|
498
|
+
return `${prefix} ${sig.name} = __reactra_component__("${sig.name}", (${sig.propsParam ?? ""}) => {${usesMarker}`;
|
|
499
|
+
}
|
|
500
|
+
if (sig.kind === "service-body") {
|
|
501
|
+
const marker = sig.modifier ? `__reactra_service_${sig.modifier}__` : `__reactra_service__`;
|
|
502
|
+
return `${prefix} ${sig.name} = ${marker}("${sig.name}", () => {`;
|
|
503
|
+
}
|
|
504
|
+
// store-body: select marker by lifetime word.
|
|
505
|
+
// `app` → __reactra_app_store__ (v2; maps to "export-store" kind — safe default)
|
|
506
|
+
// `session` → __reactra_session_store__
|
|
507
|
+
// `subtree` → __reactra_route_store_subtree__ (carries path)
|
|
508
|
+
// `route` + keySig → __reactra_route_store_keyed__
|
|
509
|
+
// `route` → __reactra_route_store__
|
|
510
|
+
//
|
|
511
|
+
// F4 (Phase 2 limitation): a keyed store (parenthesised key signature) only
|
|
512
|
+
// composes with `route` lifetime today. The other lifetimes (`app`/`session`/
|
|
513
|
+
// `subtree`) don't have a per-key instantiation contract in the runtime yet
|
|
514
|
+
// (full keyed-any-scope support per Store §3.1 is a follow-up). Rather than
|
|
515
|
+
// silently drop the key (the original bug), emit a clear compile error so the
|
|
516
|
+
// author knows to migrate to `route store X(key)` or file the follow-up.
|
|
517
|
+
if (sig.keySig && sig.modifier !== "route" && sig.modifier !== null) {
|
|
518
|
+
throw new Error(`[reactra:compile] keyed stores currently compose only with \`route store\` (Phase 2 limitation). ` +
|
|
519
|
+
`\`export ${sig.modifier} store ${sig.name}(${sig.keySig})\` is not yet supported — ` +
|
|
520
|
+
`use \`route store ${sig.name}(${sig.keySig})\` or open a follow-up for keyed-\`${sig.modifier}\` support ` +
|
|
521
|
+
`(Store §3.1).`);
|
|
522
|
+
}
|
|
523
|
+
let storeMarker;
|
|
524
|
+
if (sig.modifier === "app") {
|
|
525
|
+
storeMarker = "__reactra_app_store__";
|
|
526
|
+
}
|
|
527
|
+
else if (sig.modifier === "session") {
|
|
528
|
+
storeMarker = "__reactra_session_store__";
|
|
529
|
+
}
|
|
530
|
+
else if (sig.modifier === "subtree" || (sig.modifier === "route" && sig.subtreePath)) {
|
|
531
|
+
// v2 subtree lifetime, or v1 `route store X for subtree "/p"` (both carry a path)
|
|
532
|
+
storeMarker = "__reactra_route_store_subtree__";
|
|
533
|
+
}
|
|
534
|
+
else if (sig.keySig) {
|
|
535
|
+
storeMarker = "__reactra_route_store_keyed__";
|
|
536
|
+
}
|
|
537
|
+
else {
|
|
538
|
+
storeMarker = "__reactra_route_store__";
|
|
539
|
+
}
|
|
540
|
+
const args = [`"${sig.name}"`];
|
|
541
|
+
if (sig.subtreePath)
|
|
542
|
+
args.push(`"${sig.subtreePath}"`);
|
|
543
|
+
const factory = sig.keySig ? `(${sig.keySig}) => {${usesMarker}` : `() => {${usesMarker}`;
|
|
544
|
+
return `${prefix} ${sig.name} = ${storeMarker}(${args.join(", ")}, ${factory}`;
|
|
545
|
+
};
|
|
546
|
+
/** Build the source text that REPLACES the `}` closing a Reactra body. */
|
|
547
|
+
const emitSignatureClose = (_sig) => {
|
|
548
|
+
// The factory arrow opened in emitSignatureOpen ends with `{`, so close with `})`.
|
|
549
|
+
return `})`;
|
|
550
|
+
};
|
|
551
|
+
const applyRewrites = (source, rewrites) => {
|
|
552
|
+
if (rewrites.length === 0)
|
|
553
|
+
return source;
|
|
554
|
+
const sorted = [...rewrites].sort((a, b) => a.span.start - b.span.start);
|
|
555
|
+
let cursor = 0;
|
|
556
|
+
let out = "";
|
|
557
|
+
for (const r of sorted) {
|
|
558
|
+
if (r.span.start < cursor) {
|
|
559
|
+
throw new Error(`Overlapping rewrites at ${r.span.start}`);
|
|
560
|
+
}
|
|
561
|
+
out += source.slice(cursor, r.span.start);
|
|
562
|
+
out += r.text;
|
|
563
|
+
cursor = r.span.end;
|
|
564
|
+
}
|
|
565
|
+
out += source.slice(cursor);
|
|
566
|
+
return out;
|
|
567
|
+
};
|
|
568
|
+
//# sourceMappingURL=preprocess.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preprocess.js","sourceRoot":"","sources":["../../src/preprocess/preprocess.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,EAAE;AACF,wEAAwE;AACxE,0EAA0E;AAC1E,wEAAwE;AACxE,0BAA0B;AAE1B,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AACpC,OAAO,EACL,aAAa,EACb,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,aAAa,EACb,oBAAoB,EACpB,aAAa,EACb,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,UAAU,EACV,eAAe,EACf,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,WAAW,GACZ,MAAM,gBAAgB,CAAA;AA4CvB;;;;;;GAMG;AACH,MAAM,mBAAmB,GAAG,CAC1B,MAAe,EACf,CAAS,EACmC,EAAE;IAC9C,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,OAAO,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC,CAAE,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC7C,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,CAAA;QAC9B,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;QAC1C,IAAI,IAAI,GAAG,CAAC;YAAE,OAAO,IAAI,CAAA;QACzB,IAAI,MAAM,CAAC,IAAI,CAAE,CAAC,IAAI,KAAK,OAAO,IAAI,MAAM,CAAC,IAAI,CAAE,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACpE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,CAAC,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,EAAE,CAAA;QAC5D,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,CAAE,CAAC,IAAI,KAAK,OAAO,IAAI,MAAM,CAAC,IAAI,CAAE,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;YACjE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,CAAA;YACpC,SAAQ;QACV,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,MAAc,EAAoB,EAAE;IAC7D,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAA;IAC1B,MAAM,QAAQ,GAAc,EAAE,CAAA;IAC9B,MAAM,KAAK,GAAiB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;IAEhD,MAAM,IAAI,GAAG,GAAuB,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,IAAI,CAAA;IAEpE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAE,CAAA;QAEtB,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACzB,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;gBACrB,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;gBAC7C,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;gBAClD,IAAI,IAAI,EAAE,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,EAAE,KAAK,gBAAgB,EAAE,CAAC;oBAClF,sEAAsE;oBACtE,QAAQ,CAAC,IAAI,CAAC;wBACZ,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE;wBACzC,IAAI,EAAE,4BAA4B;qBACnC,CAAC,CAAA;oBACF,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAA;oBACxD,SAAQ;gBACV,CAAC;gBAED,MAAM,GAAG,GAAG,oBAAoB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;gBAC3C,IAAI,GAAG,EAAE,CAAC;oBACR,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAA;oBACnC,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAA;oBACrC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;oBAC7C,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAA;oBACnD,SAAQ;gBACV,CAAC;gBAED,kCAAkC;gBAClC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;gBAC7B,SAAQ;YACV,CAAC;YACD,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;gBACrB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACrB,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,EAAG,CAAA;oBAC3B,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;wBACtC,QAAQ,CAAC,IAAI,CAAC;4BACZ,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE;4BACxC,IAAI,EAAE,MAAM,CAAC,YAAY;yBAC1B,CAAC,CAAA;oBACJ,CAAC;gBACH,CAAC;gBACD,SAAQ;YACV,CAAC;QACH,CAAC;QAED,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO;YAAE,SAAQ;QAElC,MAAM,KAAK,GAAG,IAAI,EAAE,CAAA;QACpB,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,CAAA;QAC5C,IAAI,SAAS,EAAE,CAAC;YACd,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;YAChC,CAAC,GAAG,SAAS,CAAC,YAAY,CAAA;QAC5B,CAAC;IACH,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,EAAE,CAAA;AAC7E,CAAC,CAAA;AAED,MAAM,QAAQ,GAAG,CACf,MAAe,EACf,CAAS,EACT,KAAyB,EAC0B,EAAE;IACrD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC,IAAI,CAAA;IAE5B,0BAA0B;IAC1B,IAAI,KAAK,KAAK,gBAAgB,EAAE,CAAC;QAC/B,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,OAAO;gBACV,OAAO,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YAChC,KAAK,SAAS;gBACZ,OAAO,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YAClC,KAAK,QAAQ;gBACX,OAAO,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YACjC,KAAK,SAAS;gBACZ,OAAO,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YAClC,KAAK,UAAU;gBACb,OAAO,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YACnC,KAAK,KAAK;gBACR,OAAO,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YAC9B,KAAK,OAAO;gBACV,OAAO,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;YACzC,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,2EAA2E;gBAC3E,2EAA2E;gBAC3E,2EAA2E;gBAC3E,2DAA2D;gBAC3D,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;gBACzC,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC;oBACnC,MAAM,IAAI,KAAK,CACb,2FAA2F;wBACzF,iDAAiD;wBACjD,qDAAqD;wBACrD,kCAAkC,CACrC,CAAA;gBACH,CAAC;gBACD,OAAO,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YACjC,CAAC;YACD,KAAK,SAAS;gBACZ,wEAAwE;gBACxE,kEAAkE;gBAClE,MAAM,IAAI,KAAK,CACb,iEAAiE;oBAC/D,qEAAqE;oBACrE,0DAA0D;oBAC1D,kCAAkC,CACrC,CAAA;YACH,KAAK,MAAM;gBACT,mEAAmE;gBACnE,OAAO,IAAI,CAAA;YACb,KAAK,MAAM;gBACT,OAAO,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YAC/B,KAAK,QAAQ;gBACX,OAAO,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YACjC,KAAK,SAAS;gBACZ,OAAO,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YAClC,KAAK,OAAO;gBACV,OAAO,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YAChC,KAAK,OAAO;gBACV,OAAO,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YAChC,KAAK,MAAM;gBACT,OAAO,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YAC/B,KAAK,UAAU;gBACb,OAAO,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YACnC,KAAK,YAAY;gBACf,OAAO,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YACrC,KAAK,eAAe;gBAClB,OAAO,oBAAoB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YACxC,KAAK,UAAU;gBACb,OAAO,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YACnC;gBACE,OAAO,IAAI,CAAA;QACf,CAAC;IACH,CAAC;IAED,sBAAsB;IACtB,IAAI,KAAK,KAAK,YAAY,EAAE,CAAC;QAC3B,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,OAAO;gBACV,OAAO,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YAChC,KAAK,SAAS;gBACZ,OAAO,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YAClC,KAAK,QAAQ;gBACX,OAAO,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YACjC,KAAK,UAAU;gBACb,OAAO,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YACnC,KAAK,MAAM;gBACT,OAAO,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YAC/B,KAAK,QAAQ;gBACX,OAAO,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YACjC,KAAK,OAAO;gBACV,OAAO,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YAChC,KAAK,WAAW;gBACd,OAAO,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YACpC;gBACE,OAAO,IAAI,CAAA;QACf,CAAC;IACH,CAAC;IAED,iFAAiF;IACjF,IAAI,KAAK,KAAK,cAAc,EAAE,CAAC;QAC7B,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,OAAO;gBACV,OAAO,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YAChC,KAAK,SAAS;gBACZ,OAAO,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YAClC,KAAK,QAAQ;gBACX,OAAO,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YACjC,KAAK,UAAU;gBACb,OAAO,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YACnC,KAAK,QAAQ;gBACX,OAAO,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YACjC,KAAK,MAAM;gBACT,OAAO,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YAC/B;gBACE,OAAO,IAAI,CAAA;QACf,CAAC;IACH,CAAC;IAED,qBAAqB;IACrB,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;QAC1B,IAAI,IAAI,KAAK,OAAO;YAAE,OAAO,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QACpD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,oBAAoB,GAAG,CAAC,MAAe,EAAE,QAAgB,EAAwB,EAAE;IACvF,OAAO,CACL,wBAAwB,CAAC,MAAM,EAAE,QAAQ,CAAC;QAC1C,sBAAsB,CAAC,MAAM,EAAE,QAAQ,CAAC;QACxC,oBAAoB,CAAC,MAAM,EAAE,QAAQ,CAAC,CACvC,CAAA;AACH,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,wBAAwB,GAAG,CAC/B,MAAe,EACf,QAAgB,EACM,EAAE;IACxB,IAAI,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAA;IAE5C,uEAAuE;IACvE,oEAAoE;IACpE,IAAI,UAAgC,CAAA;IACpC,MAAM,UAAU,GAAG,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACjD,IAAI,UAAU,EAAE,CAAC;QACf,UAAU,GAAG,UAAU,CAAC,KAAK,CAAA;QAC7B,CAAC,GAAG,UAAU,CAAC,MAAM,CAAA;IACvB,CAAC;IAED,yEAAyE;IACzE,8EAA8E;IAC9E,IAAI,UAA8B,CAAA;IAClC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC,CAAE,CAAC,IAAI,KAAK,OAAO,IAAI,MAAM,CAAC,CAAC,CAAE,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;QACrE,MAAM,QAAQ,GAAG,CAAC,CAAA;QAClB,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA,CAAC,4BAA4B;QAC7D,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QACvD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,UAAU,GAAG,KAAK,CAAA;QACxC,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAC/B,CAAC;IAED,iBAAiB;IACjB,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAE,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,IAAI,CAAA;IACrD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC,IAAI,CAAA;IAE5B,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;IACjC,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAE,CAAC,IAAI,KAAK,WAAW;QAAE,OAAO,IAAI,CAAA;IACzD,IAAI,cAAc,GAAG,MAAM,CAAC,CAAC,CAAE,CAAA;IAE/B,oBAAoB;IACpB,MAAM,eAAe,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;IACrD,IAAI,QAAQ,GAAG,KAAK,CAAA;IACpB,IAAI,eAAe,IAAI,CAAC,IAAI,MAAM,CAAC,eAAe,CAAE,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACvE,QAAQ,GAAG,IAAI,CAAA;QACf,cAAc,GAAG,MAAM,CAAC,eAAe,CAAE,CAAA;IAC3C,CAAC;IAED,OAAO;QACL,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAE,CAAC,GAAG,EAAE;QACjE,IAAI;QACJ,QAAQ;QACR,UAAU;QACV,UAAU;KACX,CAAA;AACH,CAAC,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,oBAAoB,GAAG,CAC3B,MAAe,EACf,QAAgB,EACM,EAAE;IACxB,IAAI,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAA;IAE5C,uEAAuE;IACvE,wDAAwD;IACxD,IAAI,UAAgC,CAAA;IACpC,MAAM,UAAU,GAAG,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACjD,IAAI,UAAU,EAAE,CAAC;QACf,UAAU,GAAG,UAAU,CAAC,KAAK,CAAA;QAC7B,CAAC,GAAG,UAAU,CAAC,MAAM,CAAA;IACvB,CAAC;IAED,yDAAyD;IACzD,IAAI,MAA0B,CAAA;IAC9B,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC,CAAE,CAAC,IAAI,KAAK,OAAO,IAAI,MAAM,CAAC,CAAC,CAAE,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;QACrE,MAAM,QAAQ,GAAG,CAAC,CAAA;QAClB,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QAChC,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QAClD,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAC/B,CAAC;IAED,sFAAsF;IACtF,8DAA8D;IAC9D,+CAA+C;IAC/C,gFAAgF;IAChF,qFAAqF;IACrF,sDAAsD;IACtD,IAAI,WAA+B,CAAA;IACnC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC,CAAE,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA,CAAC,eAAe;QAC5D,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;QAC1C,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;YACd,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAE,CAAC,IAAI,CAAA;YACnC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,uDAAuD;gBACvD,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,CAAA;gBAC9C,IAAI,KAAK,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,CAAE,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;oBAChD,WAAW,GAAG,OAAO,CAAA;oBACrB,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;gBACvC,CAAC;qBAAM,CAAC;oBACN,OAAO,IAAI,CAAA,CAAC,gDAAgD;gBAC9D,CAAC;YACH,CAAC;iBAAM,IAAI,MAAM,CAAC,IAAI,CAAE,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC1C,iDAAiD;gBACjD,oDAAoD;gBACpD,WAAW,GAAG,OAAO,CAAA;gBACrB,CAAC,GAAG,IAAI,CAAA;YACV,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,CAAA;YACb,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IAED,aAAa;IACb,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAE,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,IAAI,CAAA;IACrD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC,IAAI,CAAA;IAE5B,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;IACjC,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAE,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,IAAI,CAAA;IACrD,IAAI,cAAc,GAAG,MAAM,CAAC,CAAC,CAAE,CAAA;IAE/B,4CAA4C;IAC5C,4CAA4C;IAC5C,+EAA+E;IAC/E,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;IACjD,IAAI,QAA4B,CAAA;IAChC,IAAI,QAAQ,GAAG,KAAK,CAAA;IAEpB,IAAI,WAAW,GAAG,CAAC;QAAE,OAAO,IAAI,CAAA;IAChC,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAE,CAAA;IAExC,IACE,WAAW,CAAC,IAAI,KAAK,KAAK;QAC1B,WAAW,CAAC,IAAI,KAAK,OAAO;QAC5B,WAAW,CAAC,IAAI,KAAK,SAAS;QAC9B,WAAW,CAAC,IAAI,KAAK,SAAS,EAC9B,CAAC;QACD,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAA;QAC3B,cAAc,GAAG,WAAW,CAAA;QAC5B,6EAA6E;QAC7E,MAAM,cAAc,GAAG,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,CAAC,CAAC,CAAA;QAC9D,IAAI,cAAc,IAAI,CAAC,IAAI,MAAM,CAAC,cAAc,CAAE,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrE,QAAQ,GAAG,IAAI,CAAA;YACf,cAAc,GAAG,MAAM,CAAC,cAAc,CAAE,CAAA;QAC1C,CAAC;IACH,CAAC;SAAM,IAAI,WAAW,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACzC,gFAAgF;QAChF,6DAA6D;QAC7D,QAAQ,GAAG,KAAK,CAAA;QAChB,QAAQ,GAAG,IAAI,CAAA;QACf,cAAc,GAAG,WAAW,CAAA;IAC9B,CAAC;SAAM,CAAC;QACN,2DAA2D;QAC3D,OAAO,IAAI,CAAA;IACb,CAAC;IAED,sEAAsE;IACtE,IAAI,WAAW,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QAChF,mFAAmF;QACnF,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAE,CAAC,GAAG,EAAE;QACjE,IAAI;QACJ,QAAQ,EAAE,QAAQ;QAClB,QAAQ;QACR,WAAW;QACX,MAAM;QACN,UAAU;KACX,CAAA;AACH,CAAC,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,sBAAsB,GAAG,CAC7B,MAAe,EACf,QAAgB,EACM,EAAE;IACxB,IAAI,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAA;IAE5C,6EAA6E;IAC7E,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC,CAAE,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;QAC1C,IAAI,IAAI,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAE,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACrD,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,CAAA;QACtC,CAAC;IACH,CAAC;IAED,eAAe;IACf,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAE,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,IAAI,CAAA;IACrD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC,IAAI,CAAA;IAE5B,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;IACjC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAA;IACtB,IAAI,cAAc,GAAG,MAAM,CAAC,CAAC,CAAE,CAAA;IAE/B,qCAAqC;IACrC,IAAI,QAA4B,CAAA;IAChC,IAAI,MAAM,CAAC,CAAC,CAAE,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,CAAC,CAAE,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACjE,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC,IAAI,CAAA;QAC1B,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;QACjC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAA;QACtB,cAAc,GAAG,MAAM,CAAC,CAAC,CAAE,CAAA;IAC7B,CAAC;IAED,IAAI,MAAM,CAAC,CAAC,CAAE,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAA;IAC9C,cAAc,GAAG,MAAM,CAAC,CAAC,CAAE,CAAA;IAE3B,oBAAoB;IACpB,MAAM,aAAa,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;IACnD,IAAI,QAAQ,GAAG,KAAK,CAAA;IACpB,IAAI,aAAa,IAAI,CAAC,IAAI,MAAM,CAAC,aAAa,CAAE,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACnE,QAAQ,GAAG,IAAI,CAAA;QACf,cAAc,GAAG,MAAM,CAAC,aAAa,CAAE,CAAA;IACzC,CAAC;IAED,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAE,CAAC,GAAG,EAAE;QACjE,IAAI;QACJ,QAAQ;QACR,QAAQ;KACT,CAAA;AACH,CAAC,CAAA;AAED,6FAA6F;AAC7F,MAAM,iBAAiB,GAAG,CAAC,MAAe,EAAE,aAAqB,EAAU,EAAE;IAC3E,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,IAAI,CAAC,GAAG,aAAa,GAAG,CAAC,CAAA;IACzB,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAE,CAAA;QACpB,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,IAAI,KAAK,GAAG;YAAE,KAAK,EAAE,CAAA;aAC5C,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,IAAI,KAAK,GAAG;YAAE,KAAK,EAAE,CAAA;QACtD,CAAC,EAAE,CAAA;IACL,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC,CAAA;AAED;;;;;;;;;;GAUG;AACH,MAAM,iBAAiB,GAAG,CAAC,GAAkB,EAAU,EAAE;IACvD,sFAAsF;IACtF,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAA;IACtD,4EAA4E;IAC5E,2EAA2E;IAC3E,yEAAyE;IACzE,uCAAuC;IACvC,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU;QAC/B,CAAC,CAAC,qBAAqB,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;QACzE,CAAC,CAAC,EAAE,CAAA;IACN,IAAI,GAAG,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QAClC,8EAA8E;QAC9E,OAAO,GAAG,MAAM,IAAI,GAAG,CAAC,IAAI,6BAA6B,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,UAAU,IAAI,EAAE,SAAS,UAAU,EAAE,CAAA;IACnH,CAAC;IACD,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,qBAAqB,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAA;QAC3F,OAAO,GAAG,MAAM,IAAI,GAAG,CAAC,IAAI,MAAM,MAAM,KAAK,GAAG,CAAC,IAAI,YAAY,CAAA;IACnE,CAAC;IACD,8CAA8C;IAC9C,gGAAgG;IAChG,0CAA0C;IAC1C,+DAA+D;IAC/D,qDAAqD;IACrD,wCAAwC;IACxC,EAAE;IACF,4EAA4E;IAC5E,8EAA8E;IAC9E,4EAA4E;IAC5E,4EAA4E;IAC5E,8EAA8E;IAC9E,yEAAyE;IACzE,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,GAAG,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QACpE,MAAM,IAAI,KAAK,CACb,mGAAmG;YACjG,YAAY,GAAG,CAAC,QAAQ,UAAU,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,MAAM,6BAA6B;YACrF,qBAAqB,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,MAAM,uCAAuC,GAAG,CAAC,QAAQ,aAAa;YAC3G,eAAe,CAClB,CAAA;IACH,CAAC;IACD,IAAI,WAAmB,CAAA;IACvB,IAAI,GAAG,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;QAC3B,WAAW,GAAG,uBAAuB,CAAA;IACvC,CAAC;SAAM,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACtC,WAAW,GAAG,2BAA2B,CAAA;IAC3C,CAAC;SAAM,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;QACvF,kFAAkF;QAClF,WAAW,GAAG,iCAAiC,CAAA;IACjD,CAAC;SAAM,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACtB,WAAW,GAAG,+BAA+B,CAAA;IAC/C,CAAC;SAAM,CAAC;QACN,WAAW,GAAG,yBAAyB,CAAA;IACzC,CAAC;IAED,MAAM,IAAI,GAAa,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,CAAA;IACxC,IAAI,GAAG,CAAC,WAAW;QAAE,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,WAAW,GAAG,CAAC,CAAA;IACtD,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,SAAS,UAAU,EAAE,CAAC,CAAC,CAAC,UAAU,UAAU,EAAE,CAAA;IACzF,OAAO,GAAG,MAAM,IAAI,GAAG,CAAC,IAAI,MAAM,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,OAAO,EAAE,CAAA;AAChF,CAAC,CAAA;AAED,0EAA0E;AAC1E,MAAM,kBAAkB,GAAG,CAAC,IAAmB,EAAU,EAAE;IACzD,mFAAmF;IACnF,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED,MAAM,aAAa,GAAG,CAAC,MAAc,EAAE,QAAmB,EAAU,EAAE;IACpE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAA;IACxC,MAAM,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACxE,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,IAAI,GAAG,GAAG,EAAE,CAAA;IACZ,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,MAAM,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;QAC5D,CAAC;QACD,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACzC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAA;QACb,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAA;IACrB,CAAC;IACD,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IAC3B,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { Rewrite, Token } from "./types.ts";
|
|
2
|
+
export interface RewriteResult {
|
|
3
|
+
rewrite: Rewrite;
|
|
4
|
+
/** index of the last token consumed by this rewrite (inclusive) */
|
|
5
|
+
consumedUpTo: number;
|
|
6
|
+
}
|
|
7
|
+
export declare const rewriteState: (tokens: Token[], i: number) => RewriteResult | null;
|
|
8
|
+
export declare const rewriteDerived: (tokens: Token[], i: number) => RewriteResult | null;
|
|
9
|
+
export declare const rewriteRef: (tokens: Token[], i: number) => RewriteResult | null;
|
|
10
|
+
export declare const rewriteAction: (tokens: Token[], i: number) => RewriteResult | null;
|
|
11
|
+
export declare const rewriteCommand: (tokens: Token[], i: number) => RewriteResult | null;
|
|
12
|
+
export declare const rewriteResource: (tokens: Token[], i: number) => RewriteResult | null;
|
|
13
|
+
export declare const rewriteBlock: (markerName: string, tokens: Token[], i: number) => RewriteResult | null;
|
|
14
|
+
/**
|
|
15
|
+
* `effect on(x) { body }` → `__reactra_effect_on__(() => x, () => { body })`
|
|
16
|
+
*
|
|
17
|
+
* DSL v3.0: bare `effect {}` is retired (teardown is a `return` inside `mount`
|
|
18
|
+
* or `effect on`). When the token after `effect` is not `on`, this rewriter
|
|
19
|
+
* returns `null` — the source is not a DSL construct and falls through as plain JS.
|
|
20
|
+
*/
|
|
21
|
+
export declare const rewriteEffect: (tokens: Token[], i: number) => RewriteResult | null;
|
|
22
|
+
export declare const rewriteAwait: (tokens: Token[], i: number) => RewriteResult | null;
|
|
23
|
+
export declare const rewriteUses: (tokens: Token[], i: number) => RewriteResult | null;
|
|
24
|
+
export declare const rewriteInject: (tokens: Token[], i: number) => RewriteResult | null;
|
|
25
|
+
export declare const rewriteProvide: (tokens: Token[], i: number) => RewriteResult | null;
|
|
26
|
+
export declare const rewriteParam: (tokens: Token[], i: number) => RewriteResult | null;
|
|
27
|
+
export declare const rewriteQuery: (tokens: Token[], i: number) => RewriteResult | null;
|
|
28
|
+
export declare const rewriteMeta: (tokens: Token[], i: number) => RewriteResult | null;
|
|
29
|
+
export declare const rewritePrefetch: (tokens: Token[], i: number) => RewriteResult | null;
|
|
30
|
+
export declare const rewriteInput: (tokens: Token[], i: number) => RewriteResult | null;
|
|
31
|
+
export declare const rewritePreserved: (tokens: Token[], i: number) => RewriteResult | null;
|
|
32
|
+
export declare const rewriteErrorBoundary: (tokens: Token[], i: number) => RewriteResult | null;
|
|
33
|
+
export declare const rewriteSuspense: (tokens: Token[], i: number) => RewriteResult | null;
|
|
34
|
+
export declare const rewriteTransition: (tokens: Token[], i: number) => RewriteResult | null;
|
|
35
|
+
//# sourceMappingURL=rewriters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rewriters.d.ts","sourceRoot":"","sources":["../../src/preprocess/rewriters.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAe,MAAM,YAAY,CAAA;AAE7D,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAA;IAChB,mEAAmE;IACnE,YAAY,EAAE,MAAM,CAAA;CACrB;AAsBD,eAAO,MAAM,YAAY,GAAI,QAAQ,KAAK,EAAE,EAAE,GAAG,MAAM,KAAG,aAAa,GAAG,IAmDzE,CAAA;AAmBD,eAAO,MAAM,cAAc,GAAI,QAAQ,KAAK,EAAE,EAAE,GAAG,MAAM,KAAG,aAAa,GAAG,IAkD3E,CAAA;AAkCD,eAAO,MAAM,UAAU,GAAI,QAAQ,KAAK,EAAE,EAAE,GAAG,MAAM,KAAG,aAAa,GAAG,IA6BvE,CAAA;AAMD,eAAO,MAAM,aAAa,GAAI,QAAQ,KAAK,EAAE,EAAE,GAAG,MAAM,KAAG,aAAa,GAAG,IAkD1E,CAAA;AASD,eAAO,MAAM,cAAc,GAAI,QAAQ,KAAK,EAAE,EAAE,GAAG,MAAM,KAAG,aAAa,GAAG,IA6F3E,CAAA;AA2ED,eAAO,MAAM,eAAe,GAAI,QAAQ,KAAK,EAAE,EAAE,GAAG,MAAM,KAAG,aAAa,GAAG,IAuH5E,CAAA;AAQD,eAAO,MAAM,YAAY,GACvB,YAAY,MAAM,EAClB,QAAQ,KAAK,EAAE,EACf,GAAG,MAAM,KACR,aAAa,GAAG,IAalB,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,GAAI,QAAQ,KAAK,EAAE,EAAE,GAAG,MAAM,KAAG,aAAa,GAAG,IA6B1E,CAAA;AAqBD,eAAO,MAAM,YAAY,GAAI,QAAQ,KAAK,EAAE,EAAE,GAAG,MAAM,KAAG,aAAa,GAAG,IA2GzE,CAAA;AAKD,eAAO,MAAM,WAAW,GAAI,QAAQ,KAAK,EAAE,EAAE,GAAG,MAAM,KAAG,aAAa,GAAG,IAmCxE,CAAA;AAsBD,eAAO,MAAM,aAAa,GAAI,QAAQ,KAAK,EAAE,EAAE,GAAG,MAAM,KAAG,aAAa,GAAG,IAuD1E,CAAA;AAmLD,eAAO,MAAM,cAAc,GAAI,QAAQ,KAAK,EAAE,EAAE,GAAG,MAAM,KAAG,aAAa,GAAG,IAkB3E,CAAA;AAOD,eAAO,MAAM,YAAY,GAAI,QAAQ,KAAK,EAAE,EAAE,GAAG,MAAM,KAAG,aAAa,GAAG,IAuBzE,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,QAAQ,KAAK,EAAE,EAAE,GAAG,MAAM,KAAG,aAAa,GAAG,IAoEzE,CAAA;AAKD,eAAO,MAAM,WAAW,GAAI,QAAQ,KAAK,EAAE,EAAE,GAAG,MAAM,KAAG,aAAa,GAAG,IAgBxE,CAAA;AAMD,eAAO,MAAM,eAAe,GAAI,QAAQ,KAAK,EAAE,EAAE,GAAG,MAAM,KAAG,aAAa,GAAG,IAe5E,CAAA;AAUD,eAAO,MAAM,YAAY,GAAI,QAAQ,KAAK,EAAE,EAAE,GAAG,MAAM,KAAG,aAAa,GAAG,IAuDzE,CAAA;AAcD,eAAO,MAAM,gBAAgB,GAAI,QAAQ,KAAK,EAAE,EAAE,GAAG,MAAM,KAAG,aAAa,GAAG,IAiC7E,CAAA;AAQD,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,KAAK,EAAE,EACf,GAAG,MAAM,KACR,aAAa,GAAG,IAmBlB,CAAA;AAQD,eAAO,MAAM,eAAe,GAAI,QAAQ,KAAK,EAAE,EAAE,GAAG,MAAM,KAAG,aAAa,GAAG,IAa5E,CAAA;AAWD,eAAO,MAAM,iBAAiB,GAAI,QAAQ,KAAK,EAAE,EAAE,GAAG,MAAM,KAAG,aAAa,GAAG,IA6C9E,CAAA"}
|