pug-tail 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.

Potentially problematic release.


This version of pug-tail might be problematic. Click here for more details.

Files changed (126) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/LICENSE +21 -0
  3. package/README.md +318 -0
  4. package/dist/cli/config/loader.d.ts +9 -0
  5. package/dist/cli/config/loader.d.ts.map +1 -0
  6. package/dist/cli/config/loader.js +82 -0
  7. package/dist/cli/config/loader.js.map +1 -0
  8. package/dist/cli/config/matcher.d.ts +3 -0
  9. package/dist/cli/config/matcher.d.ts.map +1 -0
  10. package/dist/cli/config/matcher.js +29 -0
  11. package/dist/cli/config/matcher.js.map +1 -0
  12. package/dist/cli/config/types.d.ts +26 -0
  13. package/dist/cli/config/types.d.ts.map +1 -0
  14. package/dist/cli/config/types.js +2 -0
  15. package/dist/cli/config/types.js.map +1 -0
  16. package/dist/cli/dataLoader.d.ts +8 -0
  17. package/dist/cli/dataLoader.d.ts.map +1 -0
  18. package/dist/cli/dataLoader.js +70 -0
  19. package/dist/cli/dataLoader.js.map +1 -0
  20. package/dist/cli/dependencyTracker.d.ts +19 -0
  21. package/dist/cli/dependencyTracker.d.ts.map +1 -0
  22. package/dist/cli/dependencyTracker.js +149 -0
  23. package/dist/cli/dependencyTracker.js.map +1 -0
  24. package/dist/cli/fileProcessor.d.ts +32 -0
  25. package/dist/cli/fileProcessor.d.ts.map +1 -0
  26. package/dist/cli/fileProcessor.js +218 -0
  27. package/dist/cli/fileProcessor.js.map +1 -0
  28. package/dist/cli/pathResolver.d.ts +12 -0
  29. package/dist/cli/pathResolver.d.ts.map +1 -0
  30. package/dist/cli/pathResolver.js +35 -0
  31. package/dist/cli/pathResolver.js.map +1 -0
  32. package/dist/cli/watcher.d.ts +22 -0
  33. package/dist/cli/watcher.d.ts.map +1 -0
  34. package/dist/cli/watcher.js +186 -0
  35. package/dist/cli/watcher.js.map +1 -0
  36. package/dist/cli.d.ts +3 -0
  37. package/dist/cli.d.ts.map +1 -0
  38. package/dist/cli.js +624 -0
  39. package/dist/cli.js.map +1 -0
  40. package/dist/core/astTransformer.d.ts +32 -0
  41. package/dist/core/astTransformer.d.ts.map +1 -0
  42. package/dist/core/astTransformer.js +532 -0
  43. package/dist/core/astTransformer.js.map +1 -0
  44. package/dist/core/componentRegistry.d.ts +14 -0
  45. package/dist/core/componentRegistry.d.ts.map +1 -0
  46. package/dist/core/componentRegistry.js +32 -0
  47. package/dist/core/componentRegistry.js.map +1 -0
  48. package/dist/core/errorHandler.d.ts +24 -0
  49. package/dist/core/errorHandler.d.ts.map +1 -0
  50. package/dist/core/errorHandler.js +102 -0
  51. package/dist/core/errorHandler.js.map +1 -0
  52. package/dist/core/slotResolver.d.ts +9 -0
  53. package/dist/core/slotResolver.d.ts.map +1 -0
  54. package/dist/core/slotResolver.js +88 -0
  55. package/dist/core/slotResolver.js.map +1 -0
  56. package/dist/index.d.ts +10 -0
  57. package/dist/index.d.ts.map +1 -0
  58. package/dist/index.js +8 -0
  59. package/dist/index.js.map +1 -0
  60. package/dist/transform.d.ts +26 -0
  61. package/dist/transform.d.ts.map +1 -0
  62. package/dist/transform.js +247 -0
  63. package/dist/transform.js.map +1 -0
  64. package/dist/types/index.d.ts +41 -0
  65. package/dist/types/index.d.ts.map +1 -0
  66. package/dist/types/index.js +2 -0
  67. package/dist/types/index.js.map +1 -0
  68. package/dist/utils/astHelpers.d.ts +16 -0
  69. package/dist/utils/astHelpers.d.ts.map +1 -0
  70. package/dist/utils/astHelpers.js +66 -0
  71. package/dist/utils/astHelpers.js.map +1 -0
  72. package/dist/utils/attributeCategorizer.d.ts +6 -0
  73. package/dist/utils/attributeCategorizer.d.ts.map +1 -0
  74. package/dist/utils/attributeCategorizer.js +17 -0
  75. package/dist/utils/attributeCategorizer.js.map +1 -0
  76. package/dist/utils/attributes/addAttributeFallthrough.d.ts +4 -0
  77. package/dist/utils/attributes/addAttributeFallthrough.d.ts.map +1 -0
  78. package/dist/utils/attributes/addAttributeFallthrough.js +22 -0
  79. package/dist/utils/attributes/addAttributeFallthrough.js.map +1 -0
  80. package/dist/utils/attributes/createAttributesCode.d.ts +3 -0
  81. package/dist/utils/attributes/createAttributesCode.d.ts.map +1 -0
  82. package/dist/utils/attributes/createAttributesCode.js +21 -0
  83. package/dist/utils/attributes/createAttributesCode.js.map +1 -0
  84. package/dist/utils/attributes/extractAttributes.d.ts +4 -0
  85. package/dist/utils/attributes/extractAttributes.d.ts.map +1 -0
  86. package/dist/utils/attributes/extractAttributes.js +15 -0
  87. package/dist/utils/attributes/extractAttributes.js.map +1 -0
  88. package/dist/utils/attributes/findRootElements.d.ts +7 -0
  89. package/dist/utils/attributes/findRootElements.d.ts.map +1 -0
  90. package/dist/utils/attributes/findRootElements.js +36 -0
  91. package/dist/utils/attributes/findRootElements.js.map +1 -0
  92. package/dist/utils/attributes/index.d.ts +5 -0
  93. package/dist/utils/attributes/index.d.ts.map +1 -0
  94. package/dist/utils/attributes/index.js +5 -0
  95. package/dist/utils/attributes/index.js.map +1 -0
  96. package/dist/utils/babelHelpers.d.ts +3 -0
  97. package/dist/utils/babelHelpers.d.ts.map +1 -0
  98. package/dist/utils/babelHelpers.js +73 -0
  99. package/dist/utils/babelHelpers.js.map +1 -0
  100. package/dist/utils/componentDetector.d.ts +12 -0
  101. package/dist/utils/componentDetector.d.ts.map +1 -0
  102. package/dist/utils/componentDetector.js +206 -0
  103. package/dist/utils/componentDetector.js.map +1 -0
  104. package/dist/utils/dataFilesDetector.d.ts +4 -0
  105. package/dist/utils/dataFilesDetector.d.ts.map +1 -0
  106. package/dist/utils/dataFilesDetector.js +88 -0
  107. package/dist/utils/dataFilesDetector.js.map +1 -0
  108. package/dist/utils/deepClone.d.ts +5 -0
  109. package/dist/utils/deepClone.d.ts.map +1 -0
  110. package/dist/utils/deepClone.js +10 -0
  111. package/dist/utils/deepClone.js.map +1 -0
  112. package/dist/utils/index.d.ts +7 -0
  113. package/dist/utils/index.d.ts.map +1 -0
  114. package/dist/utils/index.js +7 -0
  115. package/dist/utils/index.js.map +1 -0
  116. package/dist/utils/scopeAnalyzer.d.ts +5 -0
  117. package/dist/utils/scopeAnalyzer.d.ts.map +1 -0
  118. package/dist/utils/scopeAnalyzer.js +267 -0
  119. package/dist/utils/scopeAnalyzer.js.map +1 -0
  120. package/dist/utils/usageDetector.d.ts +8 -0
  121. package/dist/utils/usageDetector.d.ts.map +1 -0
  122. package/dist/utils/usageDetector.js +148 -0
  123. package/dist/utils/usageDetector.js.map +1 -0
  124. package/docs/COMPONENTS.md +708 -0
  125. package/docs/CONFIGURATION.md +708 -0
  126. package/package.json +103 -0
@@ -0,0 +1,32 @@
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 flattenIncludes;
31
+ }
32
+ //# sourceMappingURL=astTransformer.d.ts.map
@@ -0,0 +1 @@
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;IA+EnC,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;IA4DlC,OAAO,CAAC,eAAe;CA0CxB"}
@@ -0,0 +1,532 @@
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
+ }
32
+ const scopeAnalysis = analyzeComponentScope(definition.body, this.config.validation);
33
+ definition.scopeAnalysis = scopeAnalysis;
34
+ const mode = this.config.validation?.scopeIsolation ?? 'error';
35
+ if (mode !== 'off' && scopeAnalysis.externalReferences.size > 0) {
36
+ for (const varName of scopeAnalysis.externalReferences) {
37
+ const error = this.errorHandler.externalVariableReference(varName, definition.name, definition.location);
38
+ if (mode === 'error') {
39
+ throw error;
40
+ }
41
+ else {
42
+ console.warn(error.message);
43
+ }
44
+ }
45
+ }
46
+ this.registry.register(definition);
47
+ if (this.config.debug) {
48
+ console.log(`[DEBUG] Registered component: ${definition.name}`);
49
+ console.log(` - Slots: ${Array.from(definition.slots.keys()).join(', ') || 'none'}`);
50
+ console.log(` - Location: ${definition.location.filename}:${definition.location.line}`);
51
+ }
52
+ }
53
+ if (node.type === 'Include' || node.type === 'Extends') {
54
+ const fileNode = node;
55
+ if (fileNode.file?.ast) {
56
+ const fileAst = fileNode.file.ast;
57
+ this.detectAndRegisterComponents(fileAst);
58
+ }
59
+ }
60
+ });
61
+ }
62
+ expandComponents(ast) {
63
+ if (ast.type === 'Block') {
64
+ return this.expandComponentsInBlock(ast);
65
+ }
66
+ if (ast.type === 'Tag' && ast.block) {
67
+ const expandedBlock = this.expandComponentsInBlock(ast.block);
68
+ return {
69
+ ...ast,
70
+ block: expandedBlock,
71
+ };
72
+ }
73
+ if (ast.type === 'Each') {
74
+ const each = ast;
75
+ const expandedBlock = each.block
76
+ ? this.expandComponentsInBlock(each.block)
77
+ : each.block;
78
+ const expandedAlternate = each.alternate
79
+ ? this.expandComponentsInBlock(each.alternate)
80
+ : each.alternate;
81
+ return {
82
+ ...each,
83
+ block: expandedBlock,
84
+ alternate: expandedAlternate,
85
+ };
86
+ }
87
+ if (ast.type === 'Conditional') {
88
+ const conditional = ast;
89
+ const expandedConsequent = conditional.consequent
90
+ ? this.expandComponentsInBlock(conditional.consequent)
91
+ : conditional.consequent;
92
+ let expandedAlternate = conditional.alternate;
93
+ if (conditional.alternate) {
94
+ if (conditional.alternate.type === 'Block') {
95
+ expandedAlternate = this.expandComponentsInBlock(conditional.alternate);
96
+ }
97
+ else if (conditional.alternate.type === 'Conditional') {
98
+ expandedAlternate = this.expandComponents(conditional.alternate);
99
+ }
100
+ }
101
+ return {
102
+ ...conditional,
103
+ consequent: expandedConsequent,
104
+ alternate: expandedAlternate,
105
+ };
106
+ }
107
+ if (ast.type === 'Case') {
108
+ const caseNode = ast;
109
+ const expandedBlock = caseNode.block
110
+ ? this.expandComponentsInBlock(caseNode.block)
111
+ : caseNode.block;
112
+ return {
113
+ ...caseNode,
114
+ block: expandedBlock,
115
+ };
116
+ }
117
+ if (ast.type === 'When') {
118
+ const whenNode = ast;
119
+ const expandedBlock = whenNode.block
120
+ ? this.expandComponentsInBlock(whenNode.block)
121
+ : whenNode.block;
122
+ return {
123
+ ...whenNode,
124
+ block: expandedBlock,
125
+ };
126
+ }
127
+ if (ast.type === 'While') {
128
+ const whileNode = ast;
129
+ const expandedBlock = whileNode.block
130
+ ? this.expandComponentsInBlock(whileNode.block)
131
+ : whileNode.block;
132
+ return {
133
+ ...whileNode,
134
+ block: expandedBlock,
135
+ };
136
+ }
137
+ if (ast.type === 'Include' || ast.type === 'Extends') {
138
+ const fileNode = ast;
139
+ if (fileNode.file?.ast) {
140
+ const expandedFileAst = this.expandComponents(fileNode.file.ast);
141
+ return {
142
+ ...fileNode,
143
+ file: {
144
+ ...fileNode.file,
145
+ ast: expandedFileAst,
146
+ },
147
+ };
148
+ }
149
+ }
150
+ return ast;
151
+ }
152
+ expandComponentsInBlock(block) {
153
+ const result = {
154
+ type: 'Block',
155
+ nodes: [],
156
+ line: block.line,
157
+ column: block.column,
158
+ filename: block.filename,
159
+ };
160
+ for (const node of block.nodes) {
161
+ if (this.isComponentCall(node)) {
162
+ const expanded = this.expandComponentCall(node);
163
+ const fullyExpanded = this.expandComponentsInBlock(expanded);
164
+ result.nodes.push(...fullyExpanded.nodes);
165
+ }
166
+ else {
167
+ const processed = this.expandComponents(node);
168
+ result.nodes.push(processed);
169
+ }
170
+ }
171
+ return result;
172
+ }
173
+ expandComponentCall(callNode) {
174
+ if (callNode.type !== 'Tag') {
175
+ const location = getNodeLocationObject(callNode);
176
+ throw this.errorHandler.unexpectedNodeType('Tag', callNode.type, location);
177
+ }
178
+ const componentName = this.extractCallName(callNode);
179
+ const location = getNodeLocationObject(callNode);
180
+ if (this.callStack.includes(componentName)) {
181
+ throw this.errorHandler.recursiveComponentCall(componentName, this.callStack, location);
182
+ }
183
+ this.callStack.push(componentName);
184
+ try {
185
+ const component = this.registry.get(componentName);
186
+ if (!component) {
187
+ const available = this.registry.getNames();
188
+ throw this.errorHandler.componentNotFound(componentName, location, available);
189
+ }
190
+ const providedSlots = this.resolver.extractProvidedSlots(callNode);
191
+ const componentBodyCopy = deepCloneBlock(component.body);
192
+ const attributes = extractAttributes(callNode);
193
+ this.injectAttributes(componentBodyCopy, attributes, component);
194
+ const result = this.replaceSlots(componentBodyCopy, providedSlots, component.slots, location);
195
+ return result;
196
+ }
197
+ finally {
198
+ this.callStack.pop();
199
+ }
200
+ }
201
+ replaceSlots(componentBody, providedSlots, slotDefinitions, callLocation) {
202
+ if (process.env.DEBUG || this.config.debug) {
203
+ console.log(`[DEBUG] replaceSlots called:`);
204
+ console.log(` - Provided slots: ${Array.from(providedSlots.keys()).join(', ') || 'none'}`);
205
+ console.log(` - Defined slots: ${Array.from(slotDefinitions.keys()).join(', ') || 'none'}`);
206
+ console.log(` - Call location: ${callLocation.filename}:${callLocation.line}`);
207
+ }
208
+ for (const [slotName] of providedSlots) {
209
+ if (!slotDefinitions.has(slotName)) {
210
+ if (slotName === 'default') {
211
+ continue;
212
+ }
213
+ const availableSlots = Array.from(slotDefinitions.keys());
214
+ throw this.errorHandler.slotNotDefined(slotName, callLocation, availableSlots);
215
+ }
216
+ }
217
+ const result = deepCloneBlock(componentBody);
218
+ const transformer = this;
219
+ function traverse(block) {
220
+ const newNodes = [];
221
+ for (let i = 0; i < block.nodes.length; i++) {
222
+ const node = block.nodes[i];
223
+ if (!node)
224
+ continue;
225
+ if (isSlotDefinitionNode(node)) {
226
+ const slotName = extractSlotName(node);
227
+ let replacement;
228
+ if (providedSlots.has(slotName)) {
229
+ const provided = providedSlots.get(slotName);
230
+ if (provided) {
231
+ replacement = provided;
232
+ }
233
+ else {
234
+ replacement = transformer.getDefaultSlotBlock(slotName, slotDefinitions, node);
235
+ }
236
+ }
237
+ else {
238
+ replacement = transformer.getDefaultSlotBlock(slotName, slotDefinitions, node);
239
+ }
240
+ newNodes.push(...replacement.nodes);
241
+ }
242
+ else {
243
+ newNodes.push(node);
244
+ }
245
+ }
246
+ block.nodes = newNodes;
247
+ for (const node of block.nodes) {
248
+ if (!node)
249
+ continue;
250
+ if (node.type === 'Tag' && node.block) {
251
+ if (/^[A-Z]/.test(node.name)) {
252
+ continue;
253
+ }
254
+ traverse(node.block);
255
+ }
256
+ else if (node.type === 'InterpolatedTag') {
257
+ const interpolatedTag = node;
258
+ if (interpolatedTag.block) {
259
+ traverse(interpolatedTag.block);
260
+ }
261
+ }
262
+ else if (node.type === 'Block') {
263
+ traverse(node);
264
+ }
265
+ else if (node.type === 'Conditional') {
266
+ const conditional = node;
267
+ if (conditional.consequent) {
268
+ traverse(conditional.consequent);
269
+ }
270
+ if (conditional.alternate) {
271
+ if (conditional.alternate.type === 'Block') {
272
+ traverse(conditional.alternate);
273
+ }
274
+ else if (conditional.alternate.type === 'Conditional') {
275
+ const altConditional = conditional.alternate;
276
+ if (altConditional.consequent) {
277
+ traverse(altConditional.consequent);
278
+ }
279
+ if (altConditional.alternate) {
280
+ if (altConditional.alternate.type === 'Block') {
281
+ traverse(altConditional.alternate);
282
+ }
283
+ else if (altConditional.alternate.type === 'Conditional') {
284
+ const handleConditional = (cond) => {
285
+ if (cond.consequent) {
286
+ traverse(cond.consequent);
287
+ }
288
+ if (cond.alternate) {
289
+ if (cond.alternate.type === 'Block') {
290
+ traverse(cond.alternate);
291
+ }
292
+ else if (cond.alternate.type === 'Conditional') {
293
+ handleConditional(cond.alternate);
294
+ }
295
+ }
296
+ };
297
+ handleConditional(altConditional.alternate);
298
+ }
299
+ }
300
+ }
301
+ }
302
+ }
303
+ else if (node.type === 'Each') {
304
+ const each = node;
305
+ if (each.block) {
306
+ traverse(each.block);
307
+ }
308
+ if (each.alternate) {
309
+ traverse(each.alternate);
310
+ }
311
+ }
312
+ else if (node.type === 'Case') {
313
+ const caseNode = node;
314
+ if (caseNode.block) {
315
+ traverse(caseNode.block);
316
+ }
317
+ }
318
+ else if (node.type === 'When') {
319
+ const whenNode = node;
320
+ if (whenNode.block) {
321
+ traverse(whenNode.block);
322
+ }
323
+ }
324
+ else if (node.type === 'While') {
325
+ const whileNode = node;
326
+ if (whileNode.block) {
327
+ traverse(whileNode.block);
328
+ }
329
+ }
330
+ }
331
+ }
332
+ traverse(result);
333
+ return result;
334
+ }
335
+ getDefaultSlotBlock(slotName, slotDefinitions, slotNode) {
336
+ const slotDef = slotDefinitions.get(slotName);
337
+ if (slotDef?.placeholder?.block) {
338
+ return deepCloneBlock(slotDef.placeholder.block);
339
+ }
340
+ return {
341
+ type: 'Block',
342
+ nodes: [],
343
+ line: slotNode.line,
344
+ column: slotNode.column,
345
+ filename: slotNode.filename,
346
+ };
347
+ }
348
+ isComponentCall(node) {
349
+ return isCapitalizedTag(node);
350
+ }
351
+ extractCallName(callNode) {
352
+ return callNode.name;
353
+ }
354
+ injectAttributes(componentBody, attributes, component) {
355
+ if (component.usage) {
356
+ const { props, attrs } = categorizeAttributes(attributes, component.usage);
357
+ const referencedVars = extractReferencedVariables(props, attrs);
358
+ const paramPrefix = referencedVars.size > 0 ? '__pug_arg_' : undefined;
359
+ const propsCodes = createPropsCode(props, paramPrefix);
360
+ const attrsCodes = createAttrsCode(attrs, paramPrefix);
361
+ if (referencedVars.size > 0) {
362
+ const paramNames = Array.from(referencedVars).map((v) => `__pug_arg_${v}`);
363
+ const argNames = Array.from(referencedVars);
364
+ const iifeStart = {
365
+ type: 'Code',
366
+ val: `((${paramNames.join(', ')}) => {`,
367
+ buffer: false,
368
+ mustEscape: false,
369
+ isInline: false,
370
+ line: 0,
371
+ column: 0,
372
+ filename: '',
373
+ };
374
+ const iifeEnd = {
375
+ type: 'Code',
376
+ val: `})(${argNames.join(', ')})`,
377
+ buffer: false,
378
+ mustEscape: false,
379
+ isInline: false,
380
+ line: 0,
381
+ column: 0,
382
+ filename: '',
383
+ };
384
+ for (let i = attrsCodes.length - 1; i >= 0; i--) {
385
+ const code = attrsCodes[i];
386
+ if (code)
387
+ componentBody.nodes.unshift(code);
388
+ }
389
+ for (let i = propsCodes.length - 1; i >= 0; i--) {
390
+ const code = propsCodes[i];
391
+ if (code)
392
+ componentBody.nodes.unshift(code);
393
+ }
394
+ componentBody.nodes.unshift(iifeStart);
395
+ componentBody.nodes.push(iifeEnd);
396
+ }
397
+ else {
398
+ const blockStart = {
399
+ type: 'Code',
400
+ val: '{',
401
+ buffer: false,
402
+ mustEscape: false,
403
+ isInline: false,
404
+ line: 0,
405
+ column: 0,
406
+ filename: '',
407
+ };
408
+ const blockEnd = {
409
+ type: 'Code',
410
+ val: '}',
411
+ buffer: false,
412
+ mustEscape: false,
413
+ isInline: false,
414
+ line: 0,
415
+ column: 0,
416
+ filename: '',
417
+ };
418
+ for (let i = attrsCodes.length - 1; i >= 0; i--) {
419
+ const code = attrsCodes[i];
420
+ if (code)
421
+ componentBody.nodes.unshift(code);
422
+ }
423
+ for (let i = propsCodes.length - 1; i >= 0; i--) {
424
+ const code = propsCodes[i];
425
+ if (code)
426
+ componentBody.nodes.unshift(code);
427
+ }
428
+ componentBody.nodes.unshift(blockStart);
429
+ componentBody.nodes.push(blockEnd);
430
+ }
431
+ }
432
+ else {
433
+ const attributesCode = createAttributesCode(attributes);
434
+ componentBody.nodes.unshift(attributesCode);
435
+ }
436
+ if (hasAnyAttributeBlocks(componentBody)) {
437
+ return;
438
+ }
439
+ const singleRoot = findSingleRootElement(componentBody);
440
+ if (singleRoot) {
441
+ if (component.usage) {
442
+ const fromAttrsSet = new Set(component.usage.fromAttrs);
443
+ const hasExplicitAttrs = singleRoot.attrs?.some((attr) => fromAttrsSet.has(attr.name));
444
+ if (!hasExplicitAttrs) {
445
+ addAttributeFallthrough(singleRoot, '$attrs');
446
+ }
447
+ }
448
+ else {
449
+ addAttributeFallthrough(singleRoot, 'attributes');
450
+ }
451
+ }
452
+ else if (hasMultipleRoots(componentBody)) {
453
+ console.warn(`[pug-tail] Component "${component.name}" has multiple root elements. ` +
454
+ `Attribute fallthrough is disabled. ` +
455
+ `Use &attributes($attrs) explicitly if needed.`);
456
+ }
457
+ }
458
+ removeComponentDefinitions(ast) {
459
+ if (ast.type === 'Block') {
460
+ const result = {
461
+ type: 'Block',
462
+ nodes: [],
463
+ line: ast.line,
464
+ column: ast.column,
465
+ filename: ast.filename,
466
+ };
467
+ for (const node of ast.nodes) {
468
+ if (!isComponentDefinitionNode(node)) {
469
+ const processed = this.removeComponentDefinitions(node);
470
+ result.nodes.push(processed);
471
+ }
472
+ }
473
+ return result;
474
+ }
475
+ if (ast.type === 'Tag' && ast.block) {
476
+ const processedBlock = this.removeComponentDefinitions(ast.block);
477
+ return {
478
+ ...ast,
479
+ block: processedBlock,
480
+ };
481
+ }
482
+ if (ast.type === 'Include' || ast.type === 'Extends') {
483
+ const fileNode = ast;
484
+ if (fileNode.file?.ast) {
485
+ const processedFileAst = this.removeComponentDefinitions(fileNode.file.ast);
486
+ return {
487
+ ...fileNode,
488
+ file: {
489
+ ...fileNode.file,
490
+ ast: processedFileAst,
491
+ },
492
+ };
493
+ }
494
+ }
495
+ return ast;
496
+ }
497
+ flattenIncludes(ast) {
498
+ if (ast.type === 'Block') {
499
+ const result = {
500
+ type: 'Block',
501
+ nodes: [],
502
+ line: ast.line,
503
+ column: ast.column,
504
+ filename: ast.filename,
505
+ };
506
+ for (const node of ast.nodes) {
507
+ if (node.type === 'Include' || node.type === 'Extends') {
508
+ const fileNode = node;
509
+ if (fileNode.file?.ast) {
510
+ const fileAst = fileNode.file.ast;
511
+ const flattenedFile = this.flattenIncludes(fileAst);
512
+ result.nodes.push(...flattenedFile.nodes);
513
+ }
514
+ }
515
+ else {
516
+ const processed = this.flattenIncludes(node);
517
+ result.nodes.push(processed);
518
+ }
519
+ }
520
+ return result;
521
+ }
522
+ if (ast.type === 'Tag' && ast.block) {
523
+ const flattenedBlock = this.flattenIncludes(ast.block);
524
+ return {
525
+ ...ast,
526
+ block: flattenedBlock,
527
+ };
528
+ }
529
+ return ast;
530
+ }
531
+ }
532
+ //# sourceMappingURL=astTransformer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"astTransformer.js","sourceRoot":"","sources":["../../src/core/astTransformer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { ComponentDefinition } from '../types/index.js';
2
+ import { type ErrorHandlerOptions } from './errorHandler.js';
3
+ export declare class ComponentRegistry {
4
+ private components;
5
+ private errorHandler;
6
+ constructor(options?: ErrorHandlerOptions);
7
+ register(definition: ComponentDefinition): void;
8
+ get(name: string): ComponentDefinition | undefined;
9
+ has(name: string): boolean;
10
+ getNames(): string[];
11
+ size(): number;
12
+ clear(): void;
13
+ }
14
+ //# sourceMappingURL=componentRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"componentRegistry.d.ts","sourceRoot":"","sources":["../../src/core/componentRegistry.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAgB,KAAK,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAmBvE,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,UAAU,CAA8C;IAChE,OAAO,CAAC,YAAY,CAAc;gBAEtB,OAAO,GAAE,mBAAwB;IAoB7C,QAAQ,CAAC,UAAU,EAAE,mBAAmB,GAAG,IAAI;IA6B/C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS;IAiBlD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAe1B,QAAQ,IAAI,MAAM,EAAE;IAcpB,IAAI,IAAI,MAAM;IASd,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,32 @@
1
+ import { ErrorHandler } from './errorHandler.js';
2
+ export class ComponentRegistry {
3
+ constructor(options = {}) {
4
+ this.components = new Map();
5
+ this.errorHandler = new ErrorHandler(options);
6
+ }
7
+ register(definition) {
8
+ if (this.components.has(definition.name)) {
9
+ const existing = this.components.get(definition.name);
10
+ if (existing) {
11
+ throw this.errorHandler.duplicateComponent(definition.name, existing.location, definition.location);
12
+ }
13
+ }
14
+ this.components.set(definition.name, definition);
15
+ }
16
+ get(name) {
17
+ return this.components.get(name);
18
+ }
19
+ has(name) {
20
+ return this.components.has(name);
21
+ }
22
+ getNames() {
23
+ return Array.from(this.components.keys());
24
+ }
25
+ size() {
26
+ return this.components.size;
27
+ }
28
+ clear() {
29
+ this.components.clear();
30
+ }
31
+ }
32
+ //# sourceMappingURL=componentRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"componentRegistry.js","sourceRoot":"","sources":["../../src/core/componentRegistry.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAA4B,MAAM,gBAAgB,CAAA;AAmBvE,MAAM,OAAO,iBAAiB;IAI5B,YAAY,UAA+B,EAAE;QAHrC,eAAU,GAAqC,IAAI,GAAG,EAAE,CAAA;QAI9D,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,CAAA;IAC/C,CAAC;IAkBD,QAAQ,CAAC,UAA+B;QACtC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;YACrD,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,IAAI,CAAC,YAAY,CAAC,kBAAkB,CACxC,UAAU,CAAC,IAAI,EACf,QAAQ,CAAC,QAAQ,EACjB,UAAU,CAAC,QAAQ,CACpB,CAAA;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;IAClD,CAAC;IAgBD,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAClC,CAAC;IAeD,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAClC,CAAC;IAaD,QAAQ;QACN,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAA;IAC3C,CAAC;IAYD,IAAI;QACF,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAA;IAC7B,CAAC;IAOD,KAAK;QACH,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAA;IACzB,CAAC;CACF"}