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.
- package/CHANGELOG.md +33 -0
- package/README.md +1 -1
- package/dist/core/compiler/index.d.ts +3 -0
- package/dist/core/compiler/index.d.ts.map +1 -0
- package/dist/core/compiler/index.js +3 -0
- package/dist/core/compiler/index.js.map +1 -0
- package/dist/core/compiler/transformer.d.ts +20 -0
- package/dist/core/compiler/transformer.d.ts.map +1 -0
- package/dist/core/compiler/transformer.js +37 -0
- package/dist/core/compiler/transformer.js.map +1 -0
- package/dist/core/compiler/traverser.d.ts +18 -0
- package/dist/core/compiler/traverser.d.ts.map +1 -0
- package/dist/core/compiler/traverser.js +175 -0
- package/dist/core/compiler/traverser.js.map +1 -0
- package/dist/core/visitors/componentDetector.d.ts +27 -0
- package/dist/core/visitors/componentDetector.d.ts.map +1 -0
- package/dist/core/visitors/componentDetector.js +118 -0
- package/dist/core/visitors/componentDetector.js.map +1 -0
- package/dist/core/visitors/componentExpander.d.ts +24 -0
- package/dist/core/visitors/componentExpander.d.ts.map +1 -0
- package/dist/core/visitors/componentExpander.js +293 -0
- package/dist/core/visitors/componentExpander.js.map +1 -0
- package/dist/core/visitors/definitionRemover.d.ts +9 -0
- package/dist/core/visitors/definitionRemover.d.ts.map +1 -0
- package/dist/core/visitors/definitionRemover.js +14 -0
- package/dist/core/visitors/definitionRemover.js.map +1 -0
- package/dist/core/visitors/includeFlattener.d.ts +12 -0
- package/dist/core/visitors/includeFlattener.d.ts.map +1 -0
- package/dist/core/visitors/includeFlattener.js +23 -0
- package/dist/core/visitors/includeFlattener.js.map +1 -0
- package/dist/core/visitors/index.d.ts +6 -0
- package/dist/core/visitors/index.d.ts.map +1 -0
- package/dist/core/visitors/index.js +6 -0
- package/dist/core/visitors/index.js.map +1 -0
- package/dist/core/visitors/visitor.d.ts +32 -0
- package/dist/core/visitors/visitor.d.ts.map +1 -0
- package/dist/core/visitors/visitor.js +3 -0
- package/dist/core/visitors/visitor.js.map +1 -0
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/transform.js +4 -4
- package/dist/transform.js.map +1 -1
- package/dist/utils/astHelpers.d.ts +4 -0
- package/dist/utils/astHelpers.d.ts.map +1 -1
- package/dist/utils/astHelpers.js +9 -0
- package/dist/utils/astHelpers.js.map +1 -1
- package/package.json +2 -2
- package/dist/core/astTransformer.d.ts +0 -33
- package/dist/core/astTransformer.d.ts.map +0 -1
- package/dist/core/astTransformer.js +0 -598
- package/dist/core/astTransformer.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,34 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.2.0-alpha.0] - 2026-01-18
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- **Property Shorthand Syntax**: Vue/Svelte-style shorthand for component props
|
|
13
|
+
- `Card(title, count)` automatically expands to `Card(title=title, count=count)`
|
|
14
|
+
- Supports mixing shorthand and explicit syntax in the same call
|
|
15
|
+
- Works with boolean attributes correctly
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
|
|
19
|
+
- **BREAKING**: Renamed `render` configuration option to `entry`
|
|
20
|
+
- `files.render` → `files.entry` in config files
|
|
21
|
+
- `--render-files` → `-e, --entry-files` CLI option
|
|
22
|
+
- Rationale: "entry" is more intuitive and industry-standard (Webpack, Vite, Rollup)
|
|
23
|
+
- Migration: Update `render:` to `entry:` in `pugtail.config.js`
|
|
24
|
+
|
|
25
|
+
### Fixed
|
|
26
|
+
|
|
27
|
+
- Boolean attributes now correctly use `mustEscape: false` for proper rendering
|
|
28
|
+
- Import path resolution issue in `transform.ts` (changed from `@/cli` to relative path)
|
|
29
|
+
|
|
30
|
+
### Documentation
|
|
31
|
+
|
|
32
|
+
- Applied shorthand syntax to example pages
|
|
33
|
+
- Simplified and clarified examples/README.md
|
|
34
|
+
- Updated all documentation to use `entry` terminology
|
|
35
|
+
|
|
8
36
|
## [0.1.0-alpha.0] - 2026-01-10
|
|
9
37
|
|
|
10
38
|
### Added
|
|
@@ -34,4 +62,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
34
62
|
- **Watch Mode**: CLI supports file watching for development
|
|
35
63
|
- **Error Handling**: Detailed error messages with file locations
|
|
36
64
|
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
**Note**: Versions 0.1.0-alpha.1 through 0.1.0-alpha.7 contained iterative improvements and bug fixes during initial alpha testing. Detailed changelogs are maintained from v0.2.0-alpha.0 onwards.
|
|
68
|
+
|
|
69
|
+
[0.2.0-alpha.0]: https://github.com/megurock/pug-tail/releases/tag/v0.2.0-alpha.0
|
|
37
70
|
[0.1.0-alpha.0]: https://github.com/megurock/pug-tail/releases/tag/v0.1.0-alpha.0
|
package/README.md
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/compiler/index.ts"],"names":[],"mappings":"AAMA,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/compiler/index.ts"],"names":[],"mappings":"AAMA,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Node } from '@/types/pug';
|
|
2
|
+
import type { ComponentRegistry } from '../componentRegistry.js';
|
|
3
|
+
import type { ErrorHandler, ErrorHandlerOptions } from '../errorHandler.js';
|
|
4
|
+
export interface TransformerOptions extends ErrorHandlerOptions {
|
|
5
|
+
validation?: {
|
|
6
|
+
scopeIsolation?: 'error' | 'warn' | 'off';
|
|
7
|
+
allowedGlobals?: string[];
|
|
8
|
+
};
|
|
9
|
+
debug?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare class Transformer {
|
|
12
|
+
private registry;
|
|
13
|
+
private errorHandler;
|
|
14
|
+
private traverser;
|
|
15
|
+
private config;
|
|
16
|
+
constructor(registry: ComponentRegistry, errorHandler: ErrorHandler, options?: TransformerOptions);
|
|
17
|
+
transform(ast: Node): Node;
|
|
18
|
+
private createPipeline;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=transformer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transformer.d.ts","sourceRoot":"","sources":["../../../src/core/compiler/transformer.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAiBxE,MAAM,WAAW,kBAAmB,SAAQ,mBAAmB;IAE7D,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;AAoBD,qBAAa,WAAW;IAKpB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,YAAY;IALtB,OAAO,CAAC,SAAS,CAAW;IAC5B,OAAO,CAAC,MAAM,CAAoB;gBAGxB,QAAQ,EAAE,iBAAiB,EAC3B,YAAY,EAAE,YAAY,EAClC,OAAO,GAAE,kBAAuB;IAiBlC,SAAS,CAAC,GAAG,EAAE,IAAI,GAAG,IAAI;IAkB1B,OAAO,CAAC,cAAc;CAkCvB"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { ComponentDetectorVisitor, } from '../visitors/componentDetector.js';
|
|
2
|
+
import { ComponentExpanderVisitor, } from '../visitors/componentExpander.js';
|
|
3
|
+
import { DefinitionRemoverVisitor } from '../visitors/definitionRemover.js';
|
|
4
|
+
import { IncludeFlattenerVisitor } from '../visitors/includeFlattener.js';
|
|
5
|
+
import { Traverser } from './traverser.js';
|
|
6
|
+
export class Transformer {
|
|
7
|
+
constructor(registry, errorHandler, options = {}) {
|
|
8
|
+
this.registry = registry;
|
|
9
|
+
this.errorHandler = errorHandler;
|
|
10
|
+
this.traverser = new Traverser();
|
|
11
|
+
this.config = options;
|
|
12
|
+
}
|
|
13
|
+
transform(ast) {
|
|
14
|
+
const pipeline = this.createPipeline();
|
|
15
|
+
let transformedAst = ast;
|
|
16
|
+
for (const visitor of pipeline) {
|
|
17
|
+
transformedAst = this.traverser.traverse(transformedAst, visitor);
|
|
18
|
+
}
|
|
19
|
+
return transformedAst;
|
|
20
|
+
}
|
|
21
|
+
createPipeline() {
|
|
22
|
+
const detectorOptions = {
|
|
23
|
+
validation: this.config.validation,
|
|
24
|
+
debug: this.config.debug,
|
|
25
|
+
};
|
|
26
|
+
const expanderOptions = {
|
|
27
|
+
debug: this.config.debug,
|
|
28
|
+
};
|
|
29
|
+
return [
|
|
30
|
+
new ComponentDetectorVisitor(this.registry, this.errorHandler, detectorOptions),
|
|
31
|
+
new ComponentExpanderVisitor(this.registry, this.errorHandler, expanderOptions),
|
|
32
|
+
new DefinitionRemoverVisitor(),
|
|
33
|
+
new IncludeFlattenerVisitor(),
|
|
34
|
+
];
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=transformer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transformer.js","sourceRoot":"","sources":["../../../src/core/compiler/transformer.ts"],"names":[],"mappings":"AAYA,OAAO,EAEL,wBAAwB,GACzB,MAAM,+BAA+B,CAAA;AACtC,OAAO,EAEL,wBAAwB,GACzB,MAAM,+BAA+B,CAAA;AACtC,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAA;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAA;AAEtE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAmCvC,MAAM,OAAO,WAAW;IAItB,YACU,QAA2B,EAC3B,YAA0B,EAClC,UAA8B,EAAE;QAFxB,aAAQ,GAAR,QAAQ,CAAmB;QAC3B,iBAAY,GAAZ,YAAY,CAAc;QAGlC,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,EAAE,CAAA;QAChC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAA;IACvB,CAAC;IAaD,SAAS,CAAC,GAAS;QAEjB,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE,CAAA;QAGtC,IAAI,cAAc,GAAG,GAAG,CAAA;QACxB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;QACnE,CAAC;QAED,OAAO,cAAc,CAAA;IACvB,CAAC;IAOO,cAAc;QAEpB,MAAM,eAAe,GAA6B;YAChD,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;YAClC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;SACzB,CAAA;QAED,MAAM,eAAe,GAA6B;YAChD,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;SACzB,CAAA;QAGD,OAAO;YAEL,IAAI,wBAAwB,CAC1B,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,YAAY,EACjB,eAAe,CACM;YAGvB,IAAI,wBAAwB,CAC1B,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,YAAY,EACjB,eAAe,CACM;YAGvB,IAAI,wBAAwB,EAAE;YAG9B,IAAI,uBAAuB,EAAE;SAC9B,CAAA;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Node } from '@/types/pug';
|
|
2
|
+
import type { Visitor } from '../visitors/visitor.js';
|
|
3
|
+
export declare class Traverser {
|
|
4
|
+
traverse(ast: Node, visitor: Visitor): Node;
|
|
5
|
+
private traverseNode;
|
|
6
|
+
private traverseChildren;
|
|
7
|
+
private traverseBlock;
|
|
8
|
+
private traverseTag;
|
|
9
|
+
private traverseInterpolatedTag;
|
|
10
|
+
private traverseConditional;
|
|
11
|
+
private traverseEach;
|
|
12
|
+
private traverseCase;
|
|
13
|
+
private traverseWhen;
|
|
14
|
+
private traverseWhile;
|
|
15
|
+
private traverseInclude;
|
|
16
|
+
private traverseExtends;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=traverser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traverser.d.ts","sourceRoot":"","sources":["../../../src/core/compiler/traverser.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAQV,IAAI,EAIL,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAE,OAAO,EAAkB,MAAM,qBAAqB,CAAA;AAqBlE,qBAAa,SAAS;IAUpB,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAmB3C,OAAO,CAAC,YAAY;IAyDpB,OAAO,CAAC,gBAAgB;IAmDxB,OAAO,CAAC,aAAa;IAyBrB,OAAO,CAAC,WAAW;IAoBnB,OAAO,CAAC,uBAAuB;IAoB/B,OAAO,CAAC,mBAAmB;IA4C3B,OAAO,CAAC,YAAY;IA2BpB,OAAO,CAAC,YAAY;IAoBpB,OAAO,CAAC,YAAY;IAoBpB,OAAO,CAAC,aAAa;IAoBrB,OAAO,CAAC,eAAe;IAwBvB,OAAO,CAAC,eAAe;CAkBxB"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
export class Traverser {
|
|
2
|
+
traverse(ast, visitor) {
|
|
3
|
+
const result = this.traverseNode(ast, null, visitor);
|
|
4
|
+
if (result === null) {
|
|
5
|
+
throw new Error('Root node cannot be null');
|
|
6
|
+
}
|
|
7
|
+
return result;
|
|
8
|
+
}
|
|
9
|
+
traverseNode(node, parent, visitor) {
|
|
10
|
+
const methods = visitor[node.type];
|
|
11
|
+
const isVisitorMethods = (value) => {
|
|
12
|
+
return (value !== null &&
|
|
13
|
+
value !== undefined &&
|
|
14
|
+
typeof value === 'object' &&
|
|
15
|
+
('enter' in value || 'exit' in value));
|
|
16
|
+
};
|
|
17
|
+
if (isVisitorMethods(methods) && methods.enter) {
|
|
18
|
+
const result = methods.enter(node, parent);
|
|
19
|
+
if (result !== undefined) {
|
|
20
|
+
node = result;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
if (node === null) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
node = this.traverseChildren(node, visitor);
|
|
27
|
+
if (isVisitorMethods(methods) && methods.exit) {
|
|
28
|
+
const result = methods.exit(node, parent);
|
|
29
|
+
if (result !== undefined) {
|
|
30
|
+
node = result;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return node;
|
|
34
|
+
}
|
|
35
|
+
traverseChildren(node, visitor) {
|
|
36
|
+
switch (node.type) {
|
|
37
|
+
case 'Block':
|
|
38
|
+
return this.traverseBlock(node, visitor);
|
|
39
|
+
case 'Tag':
|
|
40
|
+
return this.traverseTag(node, visitor);
|
|
41
|
+
case 'InterpolatedTag':
|
|
42
|
+
return this.traverseInterpolatedTag(node, visitor);
|
|
43
|
+
case 'Conditional':
|
|
44
|
+
return this.traverseConditional(node, visitor);
|
|
45
|
+
case 'Each':
|
|
46
|
+
return this.traverseEach(node, visitor);
|
|
47
|
+
case 'Case':
|
|
48
|
+
return this.traverseCase(node, visitor);
|
|
49
|
+
case 'When':
|
|
50
|
+
return this.traverseWhen(node, visitor);
|
|
51
|
+
case 'While':
|
|
52
|
+
return this.traverseWhile(node, visitor);
|
|
53
|
+
case 'Include':
|
|
54
|
+
return this.traverseInclude(node, visitor);
|
|
55
|
+
case 'Extends':
|
|
56
|
+
return this.traverseExtends(node, visitor);
|
|
57
|
+
case 'Text':
|
|
58
|
+
case 'Comment':
|
|
59
|
+
case 'Code':
|
|
60
|
+
case 'Mixin':
|
|
61
|
+
case 'RawInclude':
|
|
62
|
+
return node;
|
|
63
|
+
default:
|
|
64
|
+
return node;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
traverseBlock(block, visitor) {
|
|
68
|
+
const transformedNodes = [];
|
|
69
|
+
for (const childNode of block.nodes) {
|
|
70
|
+
if (!childNode)
|
|
71
|
+
continue;
|
|
72
|
+
const transformed = this.traverseNode(childNode, block, visitor);
|
|
73
|
+
if (transformed !== null) {
|
|
74
|
+
transformedNodes.push(transformed);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
...block,
|
|
79
|
+
nodes: transformedNodes,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
traverseTag(tag, visitor) {
|
|
83
|
+
const result = { ...tag };
|
|
84
|
+
if (tag.block) {
|
|
85
|
+
const transformedBlock = this.traverseNode(tag.block, tag, visitor);
|
|
86
|
+
result.block = transformedBlock;
|
|
87
|
+
}
|
|
88
|
+
return result;
|
|
89
|
+
}
|
|
90
|
+
traverseInterpolatedTag(tag, visitor) {
|
|
91
|
+
const result = { ...tag };
|
|
92
|
+
if (tag.block) {
|
|
93
|
+
const transformedBlock = this.traverseNode(tag.block, tag, visitor);
|
|
94
|
+
result.block = transformedBlock;
|
|
95
|
+
}
|
|
96
|
+
return result;
|
|
97
|
+
}
|
|
98
|
+
traverseConditional(conditional, visitor) {
|
|
99
|
+
const result = { ...conditional };
|
|
100
|
+
if (conditional.consequent) {
|
|
101
|
+
const transformedConsequent = this.traverseNode(conditional.consequent, conditional, visitor);
|
|
102
|
+
result.consequent = transformedConsequent;
|
|
103
|
+
}
|
|
104
|
+
if (conditional.alternate) {
|
|
105
|
+
if (conditional.alternate.type === 'Block') {
|
|
106
|
+
const transformedAlternate = this.traverseNode(conditional.alternate, conditional, visitor);
|
|
107
|
+
result.alternate = transformedAlternate;
|
|
108
|
+
}
|
|
109
|
+
else if (conditional.alternate.type === 'Conditional') {
|
|
110
|
+
const transformedAlternate = this.traverseNode(conditional.alternate, conditional, visitor);
|
|
111
|
+
result.alternate = transformedAlternate;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return result;
|
|
115
|
+
}
|
|
116
|
+
traverseEach(each, visitor) {
|
|
117
|
+
const result = { ...each };
|
|
118
|
+
if (each.block) {
|
|
119
|
+
const transformedBlock = this.traverseNode(each.block, each, visitor);
|
|
120
|
+
result.block = transformedBlock;
|
|
121
|
+
}
|
|
122
|
+
if (each.alternate) {
|
|
123
|
+
const transformedAlternate = this.traverseNode(each.alternate, each, visitor);
|
|
124
|
+
result.alternate = transformedAlternate;
|
|
125
|
+
}
|
|
126
|
+
return result;
|
|
127
|
+
}
|
|
128
|
+
traverseCase(caseNode, visitor) {
|
|
129
|
+
const result = { ...caseNode };
|
|
130
|
+
if (caseNode.block) {
|
|
131
|
+
const transformedBlock = this.traverseNode(caseNode.block, caseNode, visitor);
|
|
132
|
+
result.block = transformedBlock;
|
|
133
|
+
}
|
|
134
|
+
return result;
|
|
135
|
+
}
|
|
136
|
+
traverseWhen(whenNode, visitor) {
|
|
137
|
+
const result = { ...whenNode };
|
|
138
|
+
if (whenNode.block) {
|
|
139
|
+
const transformedBlock = this.traverseNode(whenNode.block, whenNode, visitor);
|
|
140
|
+
result.block = transformedBlock;
|
|
141
|
+
}
|
|
142
|
+
return result;
|
|
143
|
+
}
|
|
144
|
+
traverseWhile(whileNode, visitor) {
|
|
145
|
+
const result = { ...whileNode };
|
|
146
|
+
if (whileNode.block) {
|
|
147
|
+
const transformedBlock = this.traverseNode(whileNode.block, whileNode, visitor);
|
|
148
|
+
result.block = transformedBlock;
|
|
149
|
+
}
|
|
150
|
+
return result;
|
|
151
|
+
}
|
|
152
|
+
traverseInclude(include, visitor) {
|
|
153
|
+
const result = { ...include };
|
|
154
|
+
if (include.file?.ast) {
|
|
155
|
+
const transformedAst = this.traverseNode(include.file.ast, include, visitor);
|
|
156
|
+
result.file = {
|
|
157
|
+
...include.file,
|
|
158
|
+
ast: transformedAst,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
return result;
|
|
162
|
+
}
|
|
163
|
+
traverseExtends(extendsNode, visitor) {
|
|
164
|
+
const result = { ...extendsNode };
|
|
165
|
+
if (extendsNode.file?.ast) {
|
|
166
|
+
const transformedAst = this.traverseNode(extendsNode.file.ast, extendsNode, visitor);
|
|
167
|
+
result.file = {
|
|
168
|
+
...extendsNode.file,
|
|
169
|
+
ast: transformedAst,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
return result;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=traverser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traverser.js","sourceRoot":"","sources":["../../../src/core/compiler/traverser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { Node } from '@/types/pug';
|
|
2
|
+
import type { ComponentRegistry } from '../componentRegistry.js';
|
|
3
|
+
import type { ErrorHandler } from '../errorHandler.js';
|
|
4
|
+
export interface ComponentDetectorOptions {
|
|
5
|
+
validation?: {
|
|
6
|
+
scopeIsolation?: 'error' | 'warn' | 'off';
|
|
7
|
+
allowedGlobals?: string[];
|
|
8
|
+
};
|
|
9
|
+
debug?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare class ComponentDetectorVisitor {
|
|
12
|
+
private registry;
|
|
13
|
+
private errorHandler;
|
|
14
|
+
private options;
|
|
15
|
+
constructor(registry: ComponentRegistry, errorHandler: ErrorHandler, options?: ComponentDetectorOptions);
|
|
16
|
+
Tag: {
|
|
17
|
+
enter: (node: Node, _parent: Node | null) => Node | undefined;
|
|
18
|
+
};
|
|
19
|
+
Include: {
|
|
20
|
+
enter: (_node: Node, _parent: Node | null) => Node | undefined;
|
|
21
|
+
};
|
|
22
|
+
Extends: {
|
|
23
|
+
enter: (_node: Node, _parent: Node | null) => Node | undefined;
|
|
24
|
+
};
|
|
25
|
+
private fixMustEscapeForPropsAttrs;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=componentDetector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"componentDetector.d.ts","sourceRoot":"","sources":["../../../src/core/visitors/componentDetector.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAS,IAAI,EAAO,MAAM,aAAa,CAAA;AAOnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAKnD,MAAM,WAAW,wBAAwB;IAEvC,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;AAuBD,qBAAa,wBAAwB;IAEjC,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,OAAO;gBAFP,QAAQ,EAAE,iBAAiB,EAC3B,YAAY,EAAE,YAAY,EAC1B,OAAO,GAAE,wBAA6B;IAMhD,GAAG;sBACa,IAAI,WAAW,IAAI,GAAG,IAAI,KAAG,IAAI,GAAG,SAAS;MA+D5D;IASD,OAAO;uBACU,IAAI,WAAW,IAAI,GAAG,IAAI,KAAG,IAAI,GAAG,SAAS;MAK7D;IASD,OAAO;uBACU,IAAI,WAAW,IAAI,GAAG,IAAI,KAAG,IAAI,GAAG,SAAS;MAK7D;IAYD,OAAO,CAAC,0BAA0B;CA+DnC"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { extractComponentDefinition, isComponentDefinitionNode, } from '../../utils/componentDetector.js';
|
|
2
|
+
import { analyzeComponentScope } from '../../utils/scopeAnalyzer.js';
|
|
3
|
+
import { detectAttributeUsage } from '../../utils/usageDetector.js';
|
|
4
|
+
export class ComponentDetectorVisitor {
|
|
5
|
+
constructor(registry, errorHandler, options = {}) {
|
|
6
|
+
this.registry = registry;
|
|
7
|
+
this.errorHandler = errorHandler;
|
|
8
|
+
this.options = options;
|
|
9
|
+
this.Tag = {
|
|
10
|
+
enter: (node, _parent) => {
|
|
11
|
+
if (!isComponentDefinitionNode(node)) {
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
const definition = extractComponentDefinition(node, this.errorHandler);
|
|
15
|
+
const usage = detectAttributeUsage(definition.body);
|
|
16
|
+
if (usage.fromProps.length > 0 || usage.fromAttrs.length > 0) {
|
|
17
|
+
definition.usage = usage;
|
|
18
|
+
this.fixMustEscapeForPropsAttrs(definition.body, usage);
|
|
19
|
+
}
|
|
20
|
+
const scopeAnalysis = analyzeComponentScope(definition.body, this.options.validation);
|
|
21
|
+
definition.scopeAnalysis = scopeAnalysis;
|
|
22
|
+
const mode = this.options.validation?.scopeIsolation ?? 'error';
|
|
23
|
+
if (mode !== 'off' && scopeAnalysis.externalReferences.size > 0) {
|
|
24
|
+
for (const varName of scopeAnalysis.externalReferences) {
|
|
25
|
+
const error = this.errorHandler.externalVariableReference(varName, definition.name, definition.location);
|
|
26
|
+
if (mode === 'error') {
|
|
27
|
+
throw error;
|
|
28
|
+
}
|
|
29
|
+
console.warn(error.message);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
this.registry.register(definition);
|
|
33
|
+
if (this.options.debug) {
|
|
34
|
+
console.log(`[DEBUG] Registered component: ${definition.name}`);
|
|
35
|
+
console.log(` - Slots: ${Array.from(definition.slots.keys()).join(', ') || 'none'}`);
|
|
36
|
+
console.log(` - Location: ${definition.location.filename}:${definition.location.line}`);
|
|
37
|
+
}
|
|
38
|
+
return undefined;
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
this.Include = {
|
|
42
|
+
enter: (_node, _parent) => {
|
|
43
|
+
return undefined;
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
this.Extends = {
|
|
47
|
+
enter: (_node, _parent) => {
|
|
48
|
+
return undefined;
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
fixMustEscapeForPropsAttrs(componentBody, usage) {
|
|
53
|
+
const propsVars = new Set(usage.fromProps);
|
|
54
|
+
const attrsVars = new Set(usage.fromAttrs);
|
|
55
|
+
const allVars = new Set([...propsVars, ...attrsVars]);
|
|
56
|
+
const fixNode = (node) => {
|
|
57
|
+
if (node.type === 'Tag') {
|
|
58
|
+
const tag = node;
|
|
59
|
+
if (tag.attrs) {
|
|
60
|
+
for (const attr of tag.attrs) {
|
|
61
|
+
if (typeof attr.val === 'string' && allVars.has(attr.val.trim())) {
|
|
62
|
+
attr.mustEscape = false;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
if (tag.block) {
|
|
67
|
+
fixBlock(tag.block);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
else if (node.type === 'Block') {
|
|
71
|
+
fixBlock(node);
|
|
72
|
+
}
|
|
73
|
+
else if (node.type === 'Conditional') {
|
|
74
|
+
const conditional = node;
|
|
75
|
+
if (conditional.consequent)
|
|
76
|
+
fixBlock(conditional.consequent);
|
|
77
|
+
if (conditional.alternate) {
|
|
78
|
+
if (conditional.alternate.type === 'Block') {
|
|
79
|
+
fixBlock(conditional.alternate);
|
|
80
|
+
}
|
|
81
|
+
else if (conditional.alternate.type === 'Conditional') {
|
|
82
|
+
fixNode(conditional.alternate);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else if (node.type === 'Each') {
|
|
87
|
+
const each = node;
|
|
88
|
+
if (each.block)
|
|
89
|
+
fixBlock(each.block);
|
|
90
|
+
if (each.alternate)
|
|
91
|
+
fixBlock(each.alternate);
|
|
92
|
+
}
|
|
93
|
+
else if (node.type === 'Case') {
|
|
94
|
+
const caseNode = node;
|
|
95
|
+
if (caseNode.block)
|
|
96
|
+
fixBlock(caseNode.block);
|
|
97
|
+
}
|
|
98
|
+
else if (node.type === 'When') {
|
|
99
|
+
const whenNode = node;
|
|
100
|
+
if (whenNode.block)
|
|
101
|
+
fixBlock(whenNode.block);
|
|
102
|
+
}
|
|
103
|
+
else if (node.type === 'While') {
|
|
104
|
+
const whileNode = node;
|
|
105
|
+
if (whileNode.block)
|
|
106
|
+
fixBlock(whileNode.block);
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
const fixBlock = (block) => {
|
|
110
|
+
for (const node of block.nodes) {
|
|
111
|
+
if (node)
|
|
112
|
+
fixNode(node);
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
fixBlock(componentBody);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=componentDetector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"componentDetector.js","sourceRoot":"","sources":["../../../src/core/visitors/componentDetector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Node } from '@/types/pug';
|
|
2
|
+
import type { ComponentRegistry } from '../componentRegistry.js';
|
|
3
|
+
import type { ErrorHandler } from '../errorHandler.js';
|
|
4
|
+
import type { Visitor } from './visitor.js';
|
|
5
|
+
export interface ComponentExpanderOptions {
|
|
6
|
+
debug?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare class ComponentExpanderVisitor implements Visitor {
|
|
9
|
+
private registry;
|
|
10
|
+
private errorHandler;
|
|
11
|
+
[nodeType: string]: unknown;
|
|
12
|
+
private callStack;
|
|
13
|
+
private slotResolver;
|
|
14
|
+
constructor(registry: ComponentRegistry, errorHandler: ErrorHandler, options?: ComponentExpanderOptions);
|
|
15
|
+
Block: {
|
|
16
|
+
enter: (node: Node, _parent: Node | null) => Node;
|
|
17
|
+
};
|
|
18
|
+
private isComponentCall;
|
|
19
|
+
private expandComponentCall;
|
|
20
|
+
private injectAttributes;
|
|
21
|
+
private replaceSlots;
|
|
22
|
+
private getDefaultSlotBlock;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=componentExpander.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"componentExpander.d.ts","sourceRoot":"","sources":["../../../src/core/visitors/componentExpander.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAOV,IAAI,EAIL,MAAM,aAAa,CAAA;AAqBpB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAEnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKxC,MAAM,WAAW,wBAAwB;IAEvC,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAsBD,qBAAa,wBAAyB,YAAW,OAAO;IAOpD,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,YAAY;IANtB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAA;IAC3B,OAAO,CAAC,SAAS,CAAe;IAChC,OAAO,CAAC,YAAY,CAAc;gBAGxB,QAAQ,EAAE,iBAAiB,EAC3B,YAAY,EAAE,YAAY,EAClC,OAAO,GAAE,wBAA6B;IAaxC,KAAK;sBACW,IAAI,WAAW,IAAI,GAAG,IAAI,KAAG,IAAI;MA2BhD;IAOD,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,mBAAmB;IAqE3B,OAAO,CAAC,gBAAgB;IAgJxB,OAAO,CAAC,YAAY;IA0IpB,OAAO,CAAC,mBAAmB;CAmB5B"}
|