pug-tail 0.2.0-alpha.1 → 0.2.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/README.md +1 -1
  3. package/dist/core/compiler/index.d.ts +3 -0
  4. package/dist/core/compiler/index.d.ts.map +1 -0
  5. package/dist/core/compiler/index.js +3 -0
  6. package/dist/core/compiler/index.js.map +1 -0
  7. package/dist/core/compiler/transformer.d.ts +20 -0
  8. package/dist/core/compiler/transformer.d.ts.map +1 -0
  9. package/dist/core/compiler/transformer.js +37 -0
  10. package/dist/core/compiler/transformer.js.map +1 -0
  11. package/dist/core/compiler/traverser.d.ts +18 -0
  12. package/dist/core/compiler/traverser.d.ts.map +1 -0
  13. package/dist/core/compiler/traverser.js +175 -0
  14. package/dist/core/compiler/traverser.js.map +1 -0
  15. package/dist/core/visitors/componentDetector.d.ts +27 -0
  16. package/dist/core/visitors/componentDetector.d.ts.map +1 -0
  17. package/dist/core/visitors/componentDetector.js +118 -0
  18. package/dist/core/visitors/componentDetector.js.map +1 -0
  19. package/dist/core/visitors/componentExpander.d.ts +24 -0
  20. package/dist/core/visitors/componentExpander.d.ts.map +1 -0
  21. package/dist/core/visitors/componentExpander.js +293 -0
  22. package/dist/core/visitors/componentExpander.js.map +1 -0
  23. package/dist/core/visitors/definitionRemover.d.ts +9 -0
  24. package/dist/core/visitors/definitionRemover.d.ts.map +1 -0
  25. package/dist/core/visitors/definitionRemover.js +14 -0
  26. package/dist/core/visitors/definitionRemover.js.map +1 -0
  27. package/dist/core/visitors/includeFlattener.d.ts +12 -0
  28. package/dist/core/visitors/includeFlattener.d.ts.map +1 -0
  29. package/dist/core/visitors/includeFlattener.js +23 -0
  30. package/dist/core/visitors/includeFlattener.js.map +1 -0
  31. package/dist/core/visitors/index.d.ts +6 -0
  32. package/dist/core/visitors/index.d.ts.map +1 -0
  33. package/dist/core/visitors/index.js +6 -0
  34. package/dist/core/visitors/index.js.map +1 -0
  35. package/dist/core/visitors/visitor.d.ts +32 -0
  36. package/dist/core/visitors/visitor.d.ts.map +1 -0
  37. package/dist/core/visitors/visitor.js +3 -0
  38. package/dist/core/visitors/visitor.js.map +1 -0
  39. package/dist/index.d.ts +0 -1
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +0 -1
  42. package/dist/index.js.map +1 -1
  43. package/dist/transform.js +4 -4
  44. package/dist/transform.js.map +1 -1
  45. package/dist/utils/astHelpers.d.ts +4 -0
  46. package/dist/utils/astHelpers.d.ts.map +1 -1
  47. package/dist/utils/astHelpers.js +9 -0
  48. package/dist/utils/astHelpers.js.map +1 -1
  49. package/package.json +2 -2
  50. package/dist/core/astTransformer.d.ts +0 -33
  51. package/dist/core/astTransformer.d.ts.map +0 -1
  52. package/dist/core/astTransformer.js +0 -598
  53. package/dist/core/astTransformer.js.map +0 -1
@@ -1,33 +0,0 @@
1
- import type { Node } from '@/types/pug';
2
- import type { ComponentRegistry } from './componentRegistry.js';
3
- import { type ErrorHandlerOptions } from './errorHandler.js';
4
- import type { SlotResolver } from './slotResolver.js';
5
- export interface ASTTransformerOptions extends ErrorHandlerOptions {
6
- validation?: {
7
- scopeIsolation?: 'error' | 'warn' | 'off';
8
- allowedGlobals?: string[];
9
- };
10
- debug?: boolean;
11
- }
12
- export declare class ASTTransformer {
13
- private registry;
14
- private resolver;
15
- private errorHandler;
16
- private callStack;
17
- private config;
18
- constructor(registry: ComponentRegistry, resolver: SlotResolver, options?: ASTTransformerOptions);
19
- transform(ast: Node): Node;
20
- private detectAndRegisterComponents;
21
- private expandComponents;
22
- private expandComponentsInBlock;
23
- private expandComponentCall;
24
- private replaceSlots;
25
- private getDefaultSlotBlock;
26
- private isComponentCall;
27
- private extractCallName;
28
- private injectAttributes;
29
- private removeComponentDefinitions;
30
- private fixMustEscapeForPropsAttrs;
31
- private flattenIncludes;
32
- }
33
- //# sourceMappingURL=astTransformer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"astTransformer.d.ts","sourceRoot":"","sources":["../../src/core/astTransformer.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EASV,IAAI,EAIL,MAAM,aAAa,CAAA;AAyBpB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAC5D,OAAO,EAAgB,KAAK,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAKlD,MAAM,WAAW,qBAAsB,SAAQ,mBAAmB;IAEhE,UAAU,CAAC,EAAE;QAEX,cAAc,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,CAAA;QAEzC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;KAC1B,CAAA;IAED,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAmBD,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,SAAS,CAAe;IAChC,OAAO,CAAC,MAAM,CAAuB;gBAGnC,QAAQ,EAAE,iBAAiB,EAC3B,QAAQ,EAAE,YAAY,EACtB,OAAO,GAAE,qBAA0B;IAmBrC,SAAS,CAAC,GAAG,EAAE,IAAI,GAAG,IAAI;IAwB1B,OAAO,CAAC,2BAA2B;IAkFnC,OAAO,CAAC,gBAAgB;IAoHxB,OAAO,CAAC,uBAAuB;IAiC/B,OAAO,CAAC,mBAAmB;IAqE3B,OAAO,CAAC,YAAY;IAmMpB,OAAO,CAAC,mBAAmB;IA0B3B,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,eAAe;IAyBvB,OAAO,CAAC,gBAAgB;IAgKxB,OAAO,CAAC,0BAA0B;IA6DlC,OAAO,CAAC,0BAA0B;IAyElC,OAAO,CAAC,eAAe;CA0CxB"}
@@ -1,598 +0,0 @@
1
- import walk from 'pug-walk';
2
- import { getNodeLocationObject, isCapitalizedTag } from '../utils/astHelpers.js';
3
- import { categorizeAttributes } from '../utils/attributeCategorizer.js';
4
- import { addAttributeFallthrough, createAttributesCode, extractAttributes, findSingleRootElement, hasAnyAttributeBlocks, hasMultipleRoots, } from '../utils/attributes/index.js';
5
- import { extractComponentDefinition, extractSlotName, isComponentDefinitionNode, isSlotDefinitionNode, } from '../utils/componentDetector.js';
6
- import { deepCloneBlock } from '../utils/deepClone.js';
7
- import { analyzeComponentScope } from '../utils/scopeAnalyzer.js';
8
- import { createAttrsCode, createPropsCode, detectAttributeUsage, extractReferencedVariables, } from '../utils/usageDetector.js';
9
- import { ErrorHandler } from './errorHandler.js';
10
- export class ASTTransformer {
11
- constructor(registry, resolver, options = {}) {
12
- this.callStack = [];
13
- this.registry = registry;
14
- this.resolver = resolver;
15
- this.errorHandler = new ErrorHandler(options);
16
- this.config = options;
17
- }
18
- transform(ast) {
19
- this.detectAndRegisterComponents(ast);
20
- const transformed = this.expandComponents(ast);
21
- const withoutDefinitions = this.removeComponentDefinitions(transformed);
22
- return this.flattenIncludes(withoutDefinitions);
23
- }
24
- detectAndRegisterComponents(ast) {
25
- walk(ast, (node) => {
26
- if (isComponentDefinitionNode(node)) {
27
- const definition = extractComponentDefinition(node, this.errorHandler);
28
- const usage = detectAttributeUsage(definition.body);
29
- if (usage.fromProps.length > 0 || usage.fromAttrs.length > 0) {
30
- definition.usage = usage;
31
- this.fixMustEscapeForPropsAttrs(definition.body, usage);
32
- }
33
- const scopeAnalysis = analyzeComponentScope(definition.body, this.config.validation);
34
- definition.scopeAnalysis = scopeAnalysis;
35
- const mode = this.config.validation?.scopeIsolation ?? 'error';
36
- if (mode !== 'off' && scopeAnalysis.externalReferences.size > 0) {
37
- for (const varName of scopeAnalysis.externalReferences) {
38
- const error = this.errorHandler.externalVariableReference(varName, definition.name, definition.location);
39
- if (mode === 'error') {
40
- throw error;
41
- }
42
- else {
43
- console.warn(error.message);
44
- }
45
- }
46
- }
47
- this.registry.register(definition);
48
- if (this.config.debug) {
49
- console.log(`[DEBUG] Registered component: ${definition.name}`);
50
- console.log(` - Slots: ${Array.from(definition.slots.keys()).join(', ') || 'none'}`);
51
- console.log(` - Location: ${definition.location.filename}:${definition.location.line}`);
52
- }
53
- }
54
- if (node.type === 'Include' || node.type === 'Extends') {
55
- const fileNode = node;
56
- if (fileNode.file?.ast) {
57
- const fileAst = fileNode.file.ast;
58
- this.detectAndRegisterComponents(fileAst);
59
- }
60
- }
61
- });
62
- }
63
- expandComponents(ast) {
64
- if (ast.type === 'Block') {
65
- return this.expandComponentsInBlock(ast);
66
- }
67
- if (ast.type === 'Tag' && ast.block) {
68
- const expandedBlock = this.expandComponentsInBlock(ast.block);
69
- return {
70
- ...ast,
71
- block: expandedBlock,
72
- };
73
- }
74
- if (ast.type === 'Each') {
75
- const each = ast;
76
- const expandedBlock = each.block
77
- ? this.expandComponentsInBlock(each.block)
78
- : each.block;
79
- const expandedAlternate = each.alternate
80
- ? this.expandComponentsInBlock(each.alternate)
81
- : each.alternate;
82
- return {
83
- ...each,
84
- block: expandedBlock,
85
- alternate: expandedAlternate,
86
- };
87
- }
88
- if (ast.type === 'Conditional') {
89
- const conditional = ast;
90
- const expandedConsequent = conditional.consequent
91
- ? this.expandComponentsInBlock(conditional.consequent)
92
- : conditional.consequent;
93
- let expandedAlternate = conditional.alternate;
94
- if (conditional.alternate) {
95
- if (conditional.alternate.type === 'Block') {
96
- expandedAlternate = this.expandComponentsInBlock(conditional.alternate);
97
- }
98
- else if (conditional.alternate.type === 'Conditional') {
99
- expandedAlternate = this.expandComponents(conditional.alternate);
100
- }
101
- }
102
- return {
103
- ...conditional,
104
- consequent: expandedConsequent,
105
- alternate: expandedAlternate,
106
- };
107
- }
108
- if (ast.type === 'Case') {
109
- const caseNode = ast;
110
- const expandedBlock = caseNode.block
111
- ? this.expandComponentsInBlock(caseNode.block)
112
- : caseNode.block;
113
- return {
114
- ...caseNode,
115
- block: expandedBlock,
116
- };
117
- }
118
- if (ast.type === 'When') {
119
- const whenNode = ast;
120
- const expandedBlock = whenNode.block
121
- ? this.expandComponentsInBlock(whenNode.block)
122
- : whenNode.block;
123
- return {
124
- ...whenNode,
125
- block: expandedBlock,
126
- };
127
- }
128
- if (ast.type === 'While') {
129
- const whileNode = ast;
130
- const expandedBlock = whileNode.block
131
- ? this.expandComponentsInBlock(whileNode.block)
132
- : whileNode.block;
133
- return {
134
- ...whileNode,
135
- block: expandedBlock,
136
- };
137
- }
138
- if (ast.type === 'Include' || ast.type === 'Extends') {
139
- const fileNode = ast;
140
- if (fileNode.file?.ast) {
141
- const expandedFileAst = this.expandComponents(fileNode.file.ast);
142
- return {
143
- ...fileNode,
144
- file: {
145
- ...fileNode.file,
146
- ast: expandedFileAst,
147
- },
148
- };
149
- }
150
- }
151
- return ast;
152
- }
153
- expandComponentsInBlock(block) {
154
- const result = {
155
- type: 'Block',
156
- nodes: [],
157
- line: block.line,
158
- column: block.column,
159
- filename: block.filename,
160
- };
161
- for (const node of block.nodes) {
162
- if (this.isComponentCall(node)) {
163
- const expanded = this.expandComponentCall(node);
164
- const fullyExpanded = this.expandComponentsInBlock(expanded);
165
- result.nodes.push(...fullyExpanded.nodes);
166
- }
167
- else {
168
- const processed = this.expandComponents(node);
169
- result.nodes.push(processed);
170
- }
171
- }
172
- return result;
173
- }
174
- expandComponentCall(callNode) {
175
- if (callNode.type !== 'Tag') {
176
- const location = getNodeLocationObject(callNode);
177
- throw this.errorHandler.unexpectedNodeType('Tag', callNode.type, location);
178
- }
179
- const componentName = this.extractCallName(callNode);
180
- const location = getNodeLocationObject(callNode);
181
- if (this.callStack.includes(componentName)) {
182
- throw this.errorHandler.recursiveComponentCall(componentName, this.callStack, location);
183
- }
184
- this.callStack.push(componentName);
185
- try {
186
- const component = this.registry.get(componentName);
187
- if (!component) {
188
- const available = this.registry.getNames();
189
- throw this.errorHandler.componentNotFound(componentName, location, available);
190
- }
191
- const providedSlots = this.resolver.extractProvidedSlots(callNode);
192
- const componentBodyCopy = deepCloneBlock(component.body);
193
- const attributes = extractAttributes(callNode);
194
- this.injectAttributes(componentBodyCopy, attributes, component);
195
- const result = this.replaceSlots(componentBodyCopy, providedSlots, component.slots, location);
196
- return result;
197
- }
198
- finally {
199
- this.callStack.pop();
200
- }
201
- }
202
- replaceSlots(componentBody, providedSlots, slotDefinitions, callLocation) {
203
- if (process.env.DEBUG || this.config.debug) {
204
- console.log(`[DEBUG] replaceSlots called:`);
205
- console.log(` - Provided slots: ${Array.from(providedSlots.keys()).join(', ') || 'none'}`);
206
- console.log(` - Defined slots: ${Array.from(slotDefinitions.keys()).join(', ') || 'none'}`);
207
- console.log(` - Call location: ${callLocation.filename}:${callLocation.line}`);
208
- }
209
- for (const [slotName] of providedSlots) {
210
- if (!slotDefinitions.has(slotName)) {
211
- if (slotName === 'default') {
212
- continue;
213
- }
214
- const availableSlots = Array.from(slotDefinitions.keys());
215
- throw this.errorHandler.slotNotDefined(slotName, callLocation, availableSlots);
216
- }
217
- }
218
- const result = deepCloneBlock(componentBody);
219
- const transformer = this;
220
- function traverse(block) {
221
- const newNodes = [];
222
- for (let i = 0; i < block.nodes.length; i++) {
223
- const node = block.nodes[i];
224
- if (!node)
225
- continue;
226
- if (isSlotDefinitionNode(node)) {
227
- const slotName = extractSlotName(node);
228
- let replacement;
229
- if (providedSlots.has(slotName)) {
230
- const provided = providedSlots.get(slotName);
231
- if (provided) {
232
- replacement = provided;
233
- }
234
- else {
235
- replacement = transformer.getDefaultSlotBlock(slotName, slotDefinitions, node);
236
- }
237
- }
238
- else {
239
- replacement = transformer.getDefaultSlotBlock(slotName, slotDefinitions, node);
240
- }
241
- newNodes.push(...replacement.nodes);
242
- }
243
- else {
244
- newNodes.push(node);
245
- }
246
- }
247
- block.nodes = newNodes;
248
- for (const node of block.nodes) {
249
- if (!node)
250
- continue;
251
- if (node.type === 'Tag' && node.block) {
252
- if (/^[A-Z]/.test(node.name)) {
253
- continue;
254
- }
255
- traverse(node.block);
256
- }
257
- else if (node.type === 'InterpolatedTag') {
258
- const interpolatedTag = node;
259
- if (interpolatedTag.block) {
260
- traverse(interpolatedTag.block);
261
- }
262
- }
263
- else if (node.type === 'Block') {
264
- traverse(node);
265
- }
266
- else if (node.type === 'Conditional') {
267
- const conditional = node;
268
- if (conditional.consequent) {
269
- traverse(conditional.consequent);
270
- }
271
- if (conditional.alternate) {
272
- if (conditional.alternate.type === 'Block') {
273
- traverse(conditional.alternate);
274
- }
275
- else if (conditional.alternate.type === 'Conditional') {
276
- const altConditional = conditional.alternate;
277
- if (altConditional.consequent) {
278
- traverse(altConditional.consequent);
279
- }
280
- if (altConditional.alternate) {
281
- if (altConditional.alternate.type === 'Block') {
282
- traverse(altConditional.alternate);
283
- }
284
- else if (altConditional.alternate.type === 'Conditional') {
285
- const handleConditional = (cond) => {
286
- if (cond.consequent) {
287
- traverse(cond.consequent);
288
- }
289
- if (cond.alternate) {
290
- if (cond.alternate.type === 'Block') {
291
- traverse(cond.alternate);
292
- }
293
- else if (cond.alternate.type === 'Conditional') {
294
- handleConditional(cond.alternate);
295
- }
296
- }
297
- };
298
- handleConditional(altConditional.alternate);
299
- }
300
- }
301
- }
302
- }
303
- }
304
- else if (node.type === 'Each') {
305
- const each = node;
306
- if (each.block) {
307
- traverse(each.block);
308
- }
309
- if (each.alternate) {
310
- traverse(each.alternate);
311
- }
312
- }
313
- else if (node.type === 'Case') {
314
- const caseNode = node;
315
- if (caseNode.block) {
316
- traverse(caseNode.block);
317
- }
318
- }
319
- else if (node.type === 'When') {
320
- const whenNode = node;
321
- if (whenNode.block) {
322
- traverse(whenNode.block);
323
- }
324
- }
325
- else if (node.type === 'While') {
326
- const whileNode = node;
327
- if (whileNode.block) {
328
- traverse(whileNode.block);
329
- }
330
- }
331
- }
332
- }
333
- traverse(result);
334
- return result;
335
- }
336
- getDefaultSlotBlock(slotName, slotDefinitions, slotNode) {
337
- const slotDef = slotDefinitions.get(slotName);
338
- if (slotDef?.placeholder?.block) {
339
- return deepCloneBlock(slotDef.placeholder.block);
340
- }
341
- return {
342
- type: 'Block',
343
- nodes: [],
344
- line: slotNode.line,
345
- column: slotNode.column,
346
- filename: slotNode.filename,
347
- };
348
- }
349
- isComponentCall(node) {
350
- return isCapitalizedTag(node);
351
- }
352
- extractCallName(callNode) {
353
- return callNode.name;
354
- }
355
- injectAttributes(componentBody, attributes, component) {
356
- if (component.usage) {
357
- const { props, attrs } = categorizeAttributes(attributes, component.usage);
358
- const referencedVars = extractReferencedVariables(props, attrs);
359
- const paramPrefix = referencedVars.size > 0 ? '__pug_arg_' : undefined;
360
- const propsCodes = createPropsCode(props, paramPrefix);
361
- const attrsCodes = createAttrsCode(attrs, paramPrefix);
362
- if (referencedVars.size > 0) {
363
- const paramNames = Array.from(referencedVars).map((v) => `__pug_arg_${v}`);
364
- const argNames = Array.from(referencedVars);
365
- const iifeStart = {
366
- type: 'Code',
367
- val: `;((${paramNames.join(', ')}) => {`,
368
- buffer: false,
369
- mustEscape: false,
370
- isInline: false,
371
- line: 0,
372
- column: 0,
373
- filename: '',
374
- };
375
- const iifeEnd = {
376
- type: 'Code',
377
- val: `})(${argNames.join(', ')})`,
378
- buffer: false,
379
- mustEscape: false,
380
- isInline: false,
381
- line: 0,
382
- column: 0,
383
- filename: '',
384
- };
385
- for (let i = attrsCodes.length - 1; i >= 0; i--) {
386
- const code = attrsCodes[i];
387
- if (code)
388
- componentBody.nodes.unshift(code);
389
- }
390
- for (let i = propsCodes.length - 1; i >= 0; i--) {
391
- const code = propsCodes[i];
392
- if (code)
393
- componentBody.nodes.unshift(code);
394
- }
395
- componentBody.nodes.unshift(iifeStart);
396
- componentBody.nodes.push(iifeEnd);
397
- }
398
- else {
399
- const blockStart = {
400
- type: 'Code',
401
- val: '{',
402
- buffer: false,
403
- mustEscape: false,
404
- isInline: false,
405
- line: 0,
406
- column: 0,
407
- filename: '',
408
- };
409
- const blockEnd = {
410
- type: 'Code',
411
- val: '}',
412
- buffer: false,
413
- mustEscape: false,
414
- isInline: false,
415
- line: 0,
416
- column: 0,
417
- filename: '',
418
- };
419
- for (let i = attrsCodes.length - 1; i >= 0; i--) {
420
- const code = attrsCodes[i];
421
- if (code)
422
- componentBody.nodes.unshift(code);
423
- }
424
- for (let i = propsCodes.length - 1; i >= 0; i--) {
425
- const code = propsCodes[i];
426
- if (code)
427
- componentBody.nodes.unshift(code);
428
- }
429
- componentBody.nodes.unshift(blockStart);
430
- componentBody.nodes.push(blockEnd);
431
- }
432
- }
433
- else {
434
- const attributesCode = createAttributesCode(attributes);
435
- componentBody.nodes.unshift(attributesCode);
436
- }
437
- if (hasAnyAttributeBlocks(componentBody)) {
438
- return;
439
- }
440
- const singleRoot = findSingleRootElement(componentBody);
441
- if (singleRoot) {
442
- if (component.usage) {
443
- const fromAttrsSet = new Set(component.usage.fromAttrs);
444
- const hasExplicitAttrs = singleRoot.attrs?.some((attr) => fromAttrsSet.has(attr.name));
445
- if (!hasExplicitAttrs) {
446
- addAttributeFallthrough(singleRoot, '$attrs');
447
- }
448
- }
449
- else {
450
- addAttributeFallthrough(singleRoot, 'attributes');
451
- }
452
- }
453
- else if (hasMultipleRoots(componentBody)) {
454
- console.warn(`[pug-tail] Component "${component.name}" has multiple root elements. ` +
455
- `Attribute fallthrough is disabled. ` +
456
- `Use &attributes($attrs) explicitly if needed.`);
457
- }
458
- }
459
- removeComponentDefinitions(ast) {
460
- if (ast.type === 'Block') {
461
- const result = {
462
- type: 'Block',
463
- nodes: [],
464
- line: ast.line,
465
- column: ast.column,
466
- filename: ast.filename,
467
- };
468
- for (const node of ast.nodes) {
469
- if (!isComponentDefinitionNode(node)) {
470
- const processed = this.removeComponentDefinitions(node);
471
- result.nodes.push(processed);
472
- }
473
- }
474
- return result;
475
- }
476
- if (ast.type === 'Tag' && ast.block) {
477
- const processedBlock = this.removeComponentDefinitions(ast.block);
478
- return {
479
- ...ast,
480
- block: processedBlock,
481
- };
482
- }
483
- if (ast.type === 'Include' || ast.type === 'Extends') {
484
- const fileNode = ast;
485
- if (fileNode.file?.ast) {
486
- const processedFileAst = this.removeComponentDefinitions(fileNode.file.ast);
487
- return {
488
- ...fileNode,
489
- file: {
490
- ...fileNode.file,
491
- ast: processedFileAst,
492
- },
493
- };
494
- }
495
- }
496
- return ast;
497
- }
498
- fixMustEscapeForPropsAttrs(componentBody, usage) {
499
- const propsVars = new Set(usage.fromProps);
500
- const attrsVars = new Set(usage.fromAttrs);
501
- const allVars = new Set([...propsVars, ...attrsVars]);
502
- const fixNode = (node) => {
503
- if (node.type === 'Tag') {
504
- const tag = node;
505
- if (tag.attrs) {
506
- for (const attr of tag.attrs) {
507
- if (typeof attr.val === 'string' && allVars.has(attr.val.trim())) {
508
- attr.mustEscape = false;
509
- }
510
- }
511
- }
512
- if (tag.block) {
513
- fixBlock(tag.block);
514
- }
515
- }
516
- else if (node.type === 'Block') {
517
- fixBlock(node);
518
- }
519
- else if (node.type === 'Conditional') {
520
- const conditional = node;
521
- if (conditional.consequent)
522
- fixBlock(conditional.consequent);
523
- if (conditional.alternate) {
524
- if (conditional.alternate.type === 'Block') {
525
- fixBlock(conditional.alternate);
526
- }
527
- else if (conditional.alternate.type === 'Conditional') {
528
- fixNode(conditional.alternate);
529
- }
530
- }
531
- }
532
- else if (node.type === 'Each') {
533
- const each = node;
534
- if (each.block)
535
- fixBlock(each.block);
536
- if (each.alternate)
537
- fixBlock(each.alternate);
538
- }
539
- else if (node.type === 'Case') {
540
- const caseNode = node;
541
- if (caseNode.block)
542
- fixBlock(caseNode.block);
543
- }
544
- else if (node.type === 'When') {
545
- const whenNode = node;
546
- if (whenNode.block)
547
- fixBlock(whenNode.block);
548
- }
549
- else if (node.type === 'While') {
550
- const whileNode = node;
551
- if (whileNode.block)
552
- fixBlock(whileNode.block);
553
- }
554
- };
555
- const fixBlock = (block) => {
556
- for (const node of block.nodes) {
557
- if (node)
558
- fixNode(node);
559
- }
560
- };
561
- fixBlock(componentBody);
562
- }
563
- flattenIncludes(ast) {
564
- if (ast.type === 'Block') {
565
- const result = {
566
- type: 'Block',
567
- nodes: [],
568
- line: ast.line,
569
- column: ast.column,
570
- filename: ast.filename,
571
- };
572
- for (const node of ast.nodes) {
573
- if (node.type === 'Include' || node.type === 'Extends') {
574
- const fileNode = node;
575
- if (fileNode.file?.ast) {
576
- const fileAst = fileNode.file.ast;
577
- const flattenedFile = this.flattenIncludes(fileAst);
578
- result.nodes.push(...flattenedFile.nodes);
579
- }
580
- }
581
- else {
582
- const processed = this.flattenIncludes(node);
583
- result.nodes.push(processed);
584
- }
585
- }
586
- return result;
587
- }
588
- if (ast.type === 'Tag' && ast.block) {
589
- const flattenedBlock = this.flattenIncludes(ast.block);
590
- return {
591
- ...ast,
592
- block: flattenedBlock,
593
- };
594
- }
595
- return ast;
596
- }
597
- }
598
- //# sourceMappingURL=astTransformer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"astTransformer.js","sourceRoot":"","sources":["../../src/core/astTransformer.ts"],"names":[],"mappings":"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"}