wuchale 0.3.2 → 0.4.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.
@@ -0,0 +1,89 @@
1
+ import MagicString from "magic-string";
2
+ import type { ItemType } from "./gemini.js";
3
+ import type { AST } from "svelte/compiler";
4
+ import type Estree from 'estree';
5
+ export type HeuristicFunc = (text: string, scope: TxtScope) => boolean;
6
+ type TxtScope = "script" | "markup" | "attribute";
7
+ type ElementNode = AST.ElementLike & {
8
+ inCompoundText: boolean;
9
+ };
10
+ export declare function defaultHeuristic(text: string, scope?: string): boolean;
11
+ export declare class NestText extends String {
12
+ scope: TxtScope;
13
+ context: string;
14
+ constructor(txt: string, scope: TxtScope, context?: string | null);
15
+ toKey: () => string;
16
+ }
17
+ export interface Translations {
18
+ [key: string]: ItemType;
19
+ }
20
+ export declare class IndexTracker {
21
+ indices: {
22
+ [key: string]: number;
23
+ };
24
+ nextIndex: number;
25
+ constructor(sourceTranslations: Translations);
26
+ get: (txt: string) => number;
27
+ }
28
+ export default class Preprocess {
29
+ index: IndexTracker;
30
+ importFrom: string;
31
+ heuristic: HeuristicFunc;
32
+ content: string;
33
+ mstr: MagicString;
34
+ forceInclude: boolean | null;
35
+ context: string;
36
+ insideDerived: boolean;
37
+ constructor(index: IndexTracker, heuristic?: HeuristicFunc, importFrom?: string);
38
+ checkHeuristic: (text: string, scope: TxtScope) => [boolean, NestText];
39
+ visitLiteral: (node: Estree.Literal & {
40
+ start: number;
41
+ end: number;
42
+ }) => NestText[];
43
+ visitArrayExpression: (node: Estree.ArrayExpression) => NestText[];
44
+ visitObjectExpression: (node: Estree.ObjectExpression) => NestText[];
45
+ visitProperty: (node: Estree.Property) => NestText[];
46
+ visitSpreadElement: (node: Estree.SpreadElement) => NestText[];
47
+ visitMemberExpression: (node: Estree.MemberExpression) => NestText[];
48
+ visitCallExpression: (node: Estree.CallExpression) => NestText[];
49
+ visitBinaryExpression: (node: Estree.BinaryExpression) => NestText[];
50
+ visitAssignmentExpression: (node: Estree.BinaryExpression) => NestText[];
51
+ visitExpressionStatement: (node: Estree.ExpressionStatement) => NestText[];
52
+ visitForOfStatement: (node: Estree.ForOfStatement) => NestText[];
53
+ visitForInStatement: (node: Estree.ForInStatement) => NestText[];
54
+ visitStatement: (node: Estree.ForStatement) => NestText[];
55
+ visitVariableDeclaration: (node: Estree.VariableDeclaration) => NestText[];
56
+ visitExportDefaultDeclaration: (node: Estree.ExportDefaultDeclaration) => NestText[];
57
+ visitArrowFunctionExpression: (node: Estree.ArrowFunctionExpression) => NestText[];
58
+ visitBlockStatement: (node: Estree.BlockStatement) => NestText[];
59
+ visitReturnStatement: (node: Estree.ReturnStatement) => NestText[];
60
+ visitIfStatement: (node: Estree.IfStatement) => NestText[];
61
+ visitTemplateLiteral: (node: Estree.TemplateLiteral) => NestText[];
62
+ visitExpressionTag: (node: AST.ExpressionTag) => NestText[];
63
+ checkHasCompoundText: (node: AST.ElementLike) => boolean;
64
+ visitRegularElement: (node: ElementNode & {
65
+ fragment: AST.Fragment & {
66
+ nodes: ElementNode[];
67
+ };
68
+ }) => NestText[];
69
+ visitComponent: (node: ElementNode & {
70
+ fragment: AST.Fragment & {
71
+ nodes: ElementNode[];
72
+ };
73
+ }) => NestText[];
74
+ visitText: (node: AST.Text) => NestText[];
75
+ visitSpreadAttribute: (node: AST.SpreadAttribute) => NestText[];
76
+ visitAttribute: (node: AST.Attribute) => NestText[];
77
+ visitFragment: (node: AST.Fragment) => NestText[];
78
+ visitSnippetBlock: (node: AST.SnippetBlock) => NestText[];
79
+ visitIfBlock: (node: AST.IfBlock) => NestText[];
80
+ visitEachBlock: (node: AST.EachBlock) => NestText[];
81
+ visitKeyBlock: (node: AST.KeyBlock) => NestText[];
82
+ visitAwaitBlock: (node: AST.AwaitBlock) => NestText[];
83
+ visitProgram: (node: Estree.Program, needImport?: boolean) => NestText[];
84
+ visitRoot: (node: AST.Root) => NestText[];
85
+ processCommentDirectives: (data: string) => void;
86
+ visit: (node: AST.SvelteNode & Estree.BaseNode) => NestText[];
87
+ process: (content: string, ast: Estree.Program | AST.Root) => NestText[];
88
+ }
89
+ export {};
@@ -0,0 +1,560 @@
1
+ // $$ cd .. && npm run build && npm run test
2
+ import MagicString from "magic-string";
3
+ const snipPrefix = 'wuchaleSnippet';
4
+ const nodesWithChildren = ['RegularElement', 'Component'];
5
+ const rtComponent = 'WuchaleTrans';
6
+ const rtFunc = 'wuchaleTrans';
7
+ const importModule = `import {${rtFunc}} from "wuchale/runtime.svelte.js"`;
8
+ const importComponent = `import ${rtComponent} from "wuchale/runtime.svelte"`;
9
+ export function defaultHeuristic(text, scope = 'markup') {
10
+ if (scope === 'markup') {
11
+ return true;
12
+ }
13
+ // script and attribute
14
+ const range = 'AZ';
15
+ const startCode = text.charCodeAt(0);
16
+ return startCode >= range.charCodeAt(0) && startCode <= range.charCodeAt(1);
17
+ }
18
+ export class NestText extends String {
19
+ scope;
20
+ context;
21
+ constructor(txt, scope, context = null) {
22
+ super(txt);
23
+ this.scope = scope;
24
+ this.context = context ?? null;
25
+ }
26
+ toKey = () => `${this.toString()}\n${this.context ?? ''}`.trim();
27
+ }
28
+ export class IndexTracker {
29
+ indices;
30
+ nextIndex;
31
+ constructor(sourceTranslations) {
32
+ this.indices = {};
33
+ this.nextIndex = 0;
34
+ for (const txt of Object.keys(sourceTranslations)) {
35
+ // guaranteed order for strings since ES2015
36
+ this.indices[txt] = this.nextIndex;
37
+ this.nextIndex++;
38
+ }
39
+ }
40
+ get = (txt) => {
41
+ if (txt in this.indices) {
42
+ return this.indices[txt];
43
+ }
44
+ const index = this.nextIndex;
45
+ this.indices[txt] = index;
46
+ this.nextIndex++;
47
+ return index;
48
+ };
49
+ }
50
+ export default class Preprocess {
51
+ index;
52
+ importFrom;
53
+ heuristic;
54
+ content;
55
+ mstr;
56
+ forceInclude;
57
+ context;
58
+ insideDerived = false;
59
+ constructor(index, heuristic = defaultHeuristic, importFrom = '') {
60
+ this.index = index;
61
+ this.importFrom = importFrom;
62
+ this.heuristic = heuristic;
63
+ this.content = '';
64
+ this.mstr = null;
65
+ this.forceInclude = null;
66
+ this.content = null;
67
+ }
68
+ checkHeuristic = (text, scope) => {
69
+ text = text.replace(/\s+/g, ' ').trim();
70
+ if (text === '') {
71
+ // nothing to ask
72
+ return [false, null];
73
+ }
74
+ const extract = this.forceInclude || this.heuristic(text, scope);
75
+ return [extract, new NestText(text, scope)];
76
+ };
77
+ visitLiteral = (node) => {
78
+ if (typeof node.value !== 'string') {
79
+ return [];
80
+ }
81
+ const { start, end } = node;
82
+ const [pass, txt] = this.checkHeuristic(node.value, 'script');
83
+ if (!pass) {
84
+ return [];
85
+ }
86
+ txt.context = this.context;
87
+ this.mstr.update(start, end, `${rtFunc}(${this.index.get(txt.toKey())})`);
88
+ return [txt];
89
+ };
90
+ visitArrayExpression = (node) => {
91
+ const txts = [];
92
+ for (const elm of node.elements) {
93
+ txts.push(...this.visit(elm));
94
+ }
95
+ return txts;
96
+ };
97
+ visitObjectExpression = (node) => {
98
+ const txts = [];
99
+ for (const prop of node.properties) {
100
+ txts.push(...this.visit(prop));
101
+ }
102
+ return txts;
103
+ };
104
+ visitProperty = (node) => [
105
+ ...this.visit(node.key),
106
+ ...this.visit(node.value),
107
+ ];
108
+ visitSpreadElement = (node) => this.visit(node.argument);
109
+ visitMemberExpression = (node) => {
110
+ return [
111
+ ...this.visit(node.object),
112
+ ...this.visit(node.property),
113
+ ];
114
+ };
115
+ visitCallExpression = (node) => {
116
+ const txts = [...this.visit(node.callee)];
117
+ for (const arg of node.arguments) {
118
+ txts.push(...this.visit(arg));
119
+ }
120
+ return txts;
121
+ };
122
+ visitBinaryExpression = (node) => {
123
+ return [
124
+ ...this.visit(node.left),
125
+ ...this.visit(node.right),
126
+ ];
127
+ };
128
+ visitAssignmentExpression = this.visitBinaryExpression;
129
+ visitExpressionStatement = (node) => this.visit(node.expression);
130
+ visitForOfStatement = (node) => {
131
+ return [
132
+ ...this.visit(node.left),
133
+ ...this.visit(node.right),
134
+ ...this.visit(node.body),
135
+ ];
136
+ };
137
+ visitForInStatement = (node) => {
138
+ return [
139
+ ...this.visit(node.left),
140
+ ...this.visit(node.right),
141
+ ...this.visit(node.body),
142
+ ];
143
+ };
144
+ visitStatement = (node) => {
145
+ return [
146
+ ...this.visit(node.init),
147
+ ...this.visit(node.test),
148
+ ...this.visit(node.update),
149
+ ...this.visit(node.body),
150
+ ];
151
+ };
152
+ visitVariableDeclaration = (node) => {
153
+ const txts = [];
154
+ let atTopLevel = !this.insideDerived;
155
+ for (const dec of node.declarations) {
156
+ if (!dec.init) {
157
+ continue;
158
+ }
159
+ // visit only contents inside $derived
160
+ if (atTopLevel) {
161
+ if (dec.init.type !== 'CallExpression') {
162
+ continue;
163
+ }
164
+ const callee = dec.init.callee;
165
+ const isDerived = callee.type === 'Identifier' && callee.name === '$derived';
166
+ const isDerivedBy = callee.type === 'MemberExpression'
167
+ && callee.object.type === 'Identifier'
168
+ && callee.object.name === '$derived'
169
+ && callee.property.type === 'Identifier'
170
+ && callee.property.name === 'by';
171
+ if (!isDerived && !isDerivedBy) {
172
+ continue;
173
+ }
174
+ this.insideDerived = true;
175
+ }
176
+ const decVisit = this.visit(dec.init);
177
+ if (!decVisit.length) {
178
+ continue;
179
+ }
180
+ txts.push(...decVisit);
181
+ }
182
+ if (atTopLevel) {
183
+ this.insideDerived = false;
184
+ }
185
+ return txts;
186
+ };
187
+ visitExportDefaultDeclaration = (node) => this.visit(node.declaration);
188
+ visitArrowFunctionExpression = (node) => this.visit(node.body);
189
+ visitBlockStatement = (node) => {
190
+ const txts = [];
191
+ for (const statement of node.body) {
192
+ txts.push(...this.visit(statement));
193
+ }
194
+ return txts;
195
+ };
196
+ visitReturnStatement = (node) => this.visit(node.argument);
197
+ visitIfStatement = (node) => {
198
+ const txts = this.visit(node.test);
199
+ txts.push(...this.visit(node.consequent));
200
+ if (node.alternate) {
201
+ txts.push(...this.visit(node.alternate));
202
+ }
203
+ return txts;
204
+ };
205
+ visitTemplateLiteral = (node) => {
206
+ const txts = [];
207
+ const quasi0 = node.quasis[0];
208
+ // @ts-ignore
209
+ const { start: start0, end: end0 } = quasi0;
210
+ const [pass, txt0] = this.checkHeuristic(quasi0.value.cooked, 'script');
211
+ if (!pass) {
212
+ return txts;
213
+ }
214
+ let txt = txt0.toString();
215
+ for (const [i, expr] of node.expressions.entries()) {
216
+ txts.push(...this.visit(expr));
217
+ const quasi = node.quasis[i + 1];
218
+ txt += `{${i}}${quasi.value.cooked}`;
219
+ // @ts-ignore
220
+ const { start, end } = quasi;
221
+ this.mstr.remove(start - 1, end);
222
+ if (i + 1 === node.expressions.length) {
223
+ continue;
224
+ }
225
+ this.mstr.update(end, end + 2, ', ');
226
+ }
227
+ const nTxt = new NestText(txt, txt0.scope, this.context);
228
+ let repl = `${rtFunc}(${this.index.get(nTxt.toKey())}`;
229
+ if (node.expressions.length) {
230
+ repl += ', ';
231
+ }
232
+ this.mstr.update(start0 - 1, end0 + 2, repl);
233
+ // @ts-ignore
234
+ this.mstr.update(node.end - 1, node.end, ')');
235
+ txts.push(nTxt);
236
+ return txts;
237
+ };
238
+ visitExpressionTag = (node) => this.visit(node.expression);
239
+ checkHasCompoundText = (node) => {
240
+ let text = false;
241
+ let nonText = false;
242
+ for (const child of node.fragment.nodes ?? []) {
243
+ if (child.type === 'Text') {
244
+ if (child.data.trim()) {
245
+ text = true;
246
+ }
247
+ }
248
+ else if (child.type !== 'Comment') {
249
+ nonText = true;
250
+ }
251
+ }
252
+ return text && nonText; // mixed content
253
+ };
254
+ visitRegularElement = (node) => {
255
+ const txts = [];
256
+ for (const attrib of node.attributes) {
257
+ txts.push(...this.visit(attrib));
258
+ }
259
+ if (node.fragment.nodes.length === 0) {
260
+ return txts;
261
+ }
262
+ let hasTextChild = false;
263
+ let hasNonTextChild = false;
264
+ const textNodesToModify = {};
265
+ for (const [i, child] of node.fragment.nodes.entries()) {
266
+ if (child.type === 'Text') {
267
+ const [pass, modify] = this.checkHeuristic(child.data, 'markup');
268
+ if (pass) {
269
+ hasTextChild = true;
270
+ textNodesToModify[i] = modify;
271
+ }
272
+ else if (i === 0 && modify != null) { // non whitespace
273
+ return txts; // explicitly to ignore
274
+ }
275
+ }
276
+ else if (child.type !== 'Comment') {
277
+ hasNonTextChild = true;
278
+ }
279
+ // no break because of textNodesToModify, already started, finish it
280
+ }
281
+ let hasCompoundText = hasTextChild && hasNonTextChild;
282
+ let txt = '';
283
+ let iArg = 0;
284
+ let iTag = 0;
285
+ const lastChildEnd = node.fragment.nodes.slice(-1)[0].end;
286
+ for (const [i, child] of node.fragment.nodes.entries()) {
287
+ if (child.type === 'Comment') {
288
+ continue;
289
+ }
290
+ if (child.type === 'Text') {
291
+ const modify = textNodesToModify[i];
292
+ if (modify == null) { // whitespace
293
+ continue;
294
+ }
295
+ txt += ' ' + modify;
296
+ if (node.inCompoundText && node.fragment.nodes.length === 1) {
297
+ this.mstr.update(child.start, child.end, `{ctx[1]}`);
298
+ }
299
+ else {
300
+ this.mstr.remove(child.start, child.end);
301
+ }
302
+ continue;
303
+ }
304
+ if (!node.inCompoundText && !hasCompoundText) {
305
+ txts.push(...this.visit(child));
306
+ continue;
307
+ }
308
+ if (child.type === 'ExpressionTag') {
309
+ txts.push(...this.visitExpressionTag(child));
310
+ txt += ` {${iArg}}`;
311
+ this.mstr.move(child.start + 1, child.end - 1, lastChildEnd);
312
+ if (iArg > 0) {
313
+ this.mstr.update(child.start, child.start + 1, ', ');
314
+ }
315
+ else {
316
+ this.mstr.remove(child.start, child.start + 1);
317
+ }
318
+ this.mstr.remove(child.end - 1, child.end);
319
+ iArg++;
320
+ continue;
321
+ }
322
+ // elements and components
323
+ // @ts-ignore
324
+ child.inCompoundText = true;
325
+ let chTxt = '';
326
+ for (const txt of this.visit(child)) {
327
+ if (nodesWithChildren.includes(child.type) && txt.scope === 'markup') {
328
+ chTxt += txt.toString();
329
+ }
330
+ else { // attributes, blocks
331
+ txts.push(txt);
332
+ }
333
+ }
334
+ if (nodesWithChildren.includes(child.type)) {
335
+ chTxt = `<${iTag}>${chTxt}</${iTag}>`;
336
+ }
337
+ else {
338
+ // InlineComponent
339
+ chTxt = `<${iTag}/>`;
340
+ }
341
+ const snippetName = `${snipPrefix}${iTag}`;
342
+ const snippetBegin = `\n{#snippet ${snippetName}(ctx)}\n`;
343
+ const snippetEnd = '\n{/snippet}';
344
+ this.mstr.appendRight(child.start, snippetBegin);
345
+ this.mstr.prependLeft(child.end, snippetEnd);
346
+ iTag++;
347
+ if (!txt.endsWith(' ')) {
348
+ txt += ' ';
349
+ }
350
+ txt += chTxt;
351
+ }
352
+ txt = txt.trim();
353
+ if (!txt) {
354
+ return txts;
355
+ }
356
+ const nTxt = new NestText(txt, 'markup', this.context);
357
+ txts.push(nTxt);
358
+ if (iTag > 0) {
359
+ const snippets = [];
360
+ // reference all new snippets added
361
+ for (let i = 0; i < iTag; i++) {
362
+ snippets.push(`${snipPrefix}${i}`);
363
+ }
364
+ let begin = `\n<${rtComponent} tags={[${snippets.join(', ')}]} `;
365
+ if (node.inCompoundText) {
366
+ begin += `ctx={ctx}`;
367
+ }
368
+ else {
369
+ begin += `id={${this.index.get(nTxt.toKey())}}`;
370
+ }
371
+ let end = ' />\n';
372
+ if (iArg > 0) {
373
+ begin += ' args={[';
374
+ end = ']}' + end;
375
+ }
376
+ this.mstr.appendLeft(lastChildEnd, begin);
377
+ this.mstr.appendRight(lastChildEnd, end);
378
+ }
379
+ else if (!node.inCompoundText) {
380
+ this.mstr.appendLeft(lastChildEnd, `{${rtFunc}(${this.index.get(nTxt.toKey())}, `);
381
+ this.mstr.appendRight(lastChildEnd, ')}');
382
+ }
383
+ return txts;
384
+ };
385
+ visitComponent = this.visitRegularElement;
386
+ visitText = (node) => {
387
+ const [pass, txt] = this.checkHeuristic(node.data, 'markup');
388
+ if (!pass) {
389
+ return [];
390
+ }
391
+ txt.context = this.context;
392
+ this.mstr.update(node.start, node.end, `{${rtFunc}(${this.index.get(txt.toKey())})}`);
393
+ return [txt];
394
+ };
395
+ visitSpreadAttribute = (node) => {
396
+ return this.visit(node.expression);
397
+ };
398
+ visitAttribute = (node) => {
399
+ if (node.value === true) {
400
+ return [];
401
+ }
402
+ const txts = [];
403
+ let values;
404
+ if (Array.isArray(node.value)) {
405
+ values = node.value;
406
+ }
407
+ else {
408
+ values = [node.value];
409
+ }
410
+ for (const value of values) {
411
+ if (value.type !== 'Text') { // ExpressionTag
412
+ txts.push(...this.visit(value));
413
+ continue;
414
+ }
415
+ // Text
416
+ const { start, end } = value;
417
+ const [pass, txt] = this.checkHeuristic(value.data, 'attribute');
418
+ if (!pass) {
419
+ continue;
420
+ }
421
+ txt.context = this.context;
422
+ txts.push(txt);
423
+ this.mstr.update(value.start, value.end, `{${rtFunc}(${this.index.get(txt.toKey())})}`);
424
+ if (!`'"`.includes(this.content[start - 1])) {
425
+ continue;
426
+ }
427
+ this.mstr.remove(start - 1, start);
428
+ this.mstr.remove(end, end + 1);
429
+ }
430
+ return txts;
431
+ };
432
+ visitFragment = (node) => {
433
+ const txts = [];
434
+ for (const child of node.nodes) {
435
+ txts.push(...this.visit(child));
436
+ }
437
+ return txts;
438
+ };
439
+ visitSnippetBlock = (node) => this.visitFragment(node.body);
440
+ visitIfBlock = (node) => {
441
+ const txts = this.visit(node.test);
442
+ txts.push(...this.visit(node.consequent));
443
+ if (node.alternate) {
444
+ txts.push(...this.visit(node.alternate));
445
+ }
446
+ return txts;
447
+ };
448
+ visitEachBlock = (node) => {
449
+ const txts = [
450
+ ...this.visit(node.expression),
451
+ ...this.visit(node.body),
452
+ ];
453
+ if (node.fallback) {
454
+ txts.push(...this.visit(node.fallback));
455
+ }
456
+ if (node.key) {
457
+ txts.push(...this.visit(node.key));
458
+ }
459
+ return txts;
460
+ };
461
+ visitKeyBlock = (node) => {
462
+ return [
463
+ ...this.visit(node.expression),
464
+ ...this.visit(node.fragment),
465
+ ];
466
+ };
467
+ visitAwaitBlock = (node) => {
468
+ const txts = [
469
+ ...this.visit(node.expression),
470
+ ...this.visitFragment(node.then),
471
+ ];
472
+ if (node.pending) {
473
+ txts.push(...this.visitFragment(node.pending));
474
+ }
475
+ if (node.catch) {
476
+ txts.push(...this.visitFragment(node.catch));
477
+ }
478
+ return txts;
479
+ };
480
+ visitProgram = (node, needImport = true) => {
481
+ const txts = [];
482
+ for (const child of node.body) {
483
+ txts.push(...this.visit(child));
484
+ }
485
+ if (needImport) {
486
+ // @ts-ignore
487
+ this.mstr.appendRight(node.start, importModule + '\n');
488
+ }
489
+ return txts;
490
+ };
491
+ visitRoot = (node) => {
492
+ const txts = this.visitFragment(node.fragment);
493
+ if (node.instance) {
494
+ txts.push(...this.visitProgram(node.instance.content, false));
495
+ }
496
+ // @ts-ignore: module is a reserved keyword, not sure how to specify the type
497
+ if (node.module) {
498
+ // @ts-ignore
499
+ txts.push(...this.visitProgram(node.module.content, false));
500
+ }
501
+ const importStmt = `\n${importModule}\n${importComponent}\n`;
502
+ if (node.instance) {
503
+ // @ts-ignore
504
+ this.mstr.appendRight(node.instance.content.start, importStmt);
505
+ }
506
+ else if (node.module) {
507
+ // @ts-ignore
508
+ this.mstr.appendRight(node.module.content.start, importStmt);
509
+ }
510
+ else {
511
+ this.mstr.prepend(`<script>${importStmt}</script>\n`);
512
+ }
513
+ return txts;
514
+ };
515
+ processCommentDirectives = (data) => {
516
+ if (data === '@wc-ignore') {
517
+ this.forceInclude = false;
518
+ }
519
+ if (data === '@wc-include') {
520
+ this.forceInclude = true;
521
+ }
522
+ const ctxStart = '@wc-context:';
523
+ if (data.startsWith(ctxStart)) {
524
+ this.context = data.slice(ctxStart.length).trim();
525
+ }
526
+ };
527
+ visit = (node) => {
528
+ if (node.type === 'Comment') {
529
+ this.processCommentDirectives(node.data.trim());
530
+ return [];
531
+ }
532
+ // for estree
533
+ for (const comment of node.leadingComments ?? []) {
534
+ this.processCommentDirectives(comment.value.trim());
535
+ }
536
+ let txts = [];
537
+ if (this.forceInclude !== false) {
538
+ const methodName = `visit${node.type}`;
539
+ if (methodName in this) {
540
+ txts = this[methodName](node);
541
+ // } else {
542
+ // console.log(node)
543
+ }
544
+ }
545
+ this.forceInclude = null;
546
+ if (this.context != null) {
547
+ for (const txt of txts) {
548
+ txt.context = this.context;
549
+ }
550
+ }
551
+ this.context = null;
552
+ return txts;
553
+ };
554
+ process = (content, ast) => {
555
+ this.content = content;
556
+ this.mstr = new MagicString(content);
557
+ return this.visit(ast);
558
+ };
559
+ }
560
+ //# sourceMappingURL=prep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prep.js","sourceRoot":"","sources":["../../src/preprocess/prep.ts"],"names":[],"mappings":"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"}