htl-to-js 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +489 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +65 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/loader.d.ts +19 -0
- package/dist/loader.js +32 -0
- package/dist/loader.js.map +1 -0
- package/dist/transpiler/directives.d.ts +42 -0
- package/dist/transpiler/directives.js +207 -0
- package/dist/transpiler/directives.js.map +1 -0
- package/dist/transpiler/expr.d.ts +34 -0
- package/dist/transpiler/expr.js +134 -0
- package/dist/transpiler/expr.js.map +1 -0
- package/dist/transpiler/index.d.ts +15 -0
- package/dist/transpiler/index.js +292 -0
- package/dist/transpiler/index.js.map +1 -0
- package/dist/transpiler/walker.d.ts +18 -0
- package/dist/transpiler/walker.js +252 -0
- package/dist/transpiler/walker.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.transpile = transpile;
|
|
7
|
+
const parse5_1 = require("parse5");
|
|
8
|
+
const walker_1 = require("./walker");
|
|
9
|
+
const directives_1 = require("./directives");
|
|
10
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
11
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
12
|
+
const DEFAULT_OMIT_ATTRS = [
|
|
13
|
+
/^data-cmp-data-layer$/, // analytics data layer JSON
|
|
14
|
+
/^data-placeholder-text$/, // author mode placeholder
|
|
15
|
+
/^data-panelcontainer$/, // author mode panel container
|
|
16
|
+
/^data-component-name$/, // AEM component tracking
|
|
17
|
+
/^data-region-id$/, // analytics region tracking
|
|
18
|
+
/^data-emptytext$/, // author mode empty text
|
|
19
|
+
];
|
|
20
|
+
const AEM_IMPLICITS = {
|
|
21
|
+
wcmmode: '{ edit: false, disabled: true, preview: false }',
|
|
22
|
+
properties: '{}',
|
|
23
|
+
pageProperties: '{}',
|
|
24
|
+
inheritedPageProperties: '{}',
|
|
25
|
+
component: '{}',
|
|
26
|
+
currentDesign: '{}',
|
|
27
|
+
currentStyle: '{}',
|
|
28
|
+
currentPage: '{}',
|
|
29
|
+
resource: '{}',
|
|
30
|
+
model: '{}',
|
|
31
|
+
_includes: '{}',
|
|
32
|
+
_i18n: '{}',
|
|
33
|
+
request: '{ requestPathInfo: { selectorString: \'\', suffix: \'\', resourcePath: \'\' }, contextPath: \'\' }',
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Transpiles an HTL source string into a JavaScript module that exports
|
|
37
|
+
* a template function (or multiple named template functions).
|
|
38
|
+
*
|
|
39
|
+
* @param htlSource - Raw HTL file content
|
|
40
|
+
* @param options
|
|
41
|
+
* @returns A valid CJS module source string
|
|
42
|
+
*/
|
|
43
|
+
function transpile(htlSource, { filename = 'component', omitAttrs = DEFAULT_OMIT_ATTRS, modelTransforms = {} } = {}) {
|
|
44
|
+
const expandedSource = htlSource.replaceAll(/<sly\b([^>]*?)\/>/g, '<sly$1></sly>');
|
|
45
|
+
const { normalized: normalizedSource, restoreMap } = normalizeSetVarCasing(expandedSource);
|
|
46
|
+
const document = (0, parse5_1.parseFragment)(normalizedSource);
|
|
47
|
+
const originalTemplateNames = extractOriginalTemplateNames(normalizedSource);
|
|
48
|
+
const templates = findNamedTemplates(document, originalTemplateNames);
|
|
49
|
+
const sourceDir = node_path_1.default.dirname(node_path_1.default.resolve(filename));
|
|
50
|
+
let body;
|
|
51
|
+
if (templates.length > 0) {
|
|
52
|
+
body = transpileNamedTemplates(templates, omitAttrs, sourceDir, modelTransforms);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
body = transpileSingleTemplate(document, filename, omitAttrs, sourceDir, modelTransforms);
|
|
56
|
+
}
|
|
57
|
+
const banner = `// AUTO-GENERATED from ${node_path_1.default.basename(filename)} — DO NOT EDIT\n\n`;
|
|
58
|
+
const helpers = [
|
|
59
|
+
`const _htlAttr = (v) => v == null ? '' : (typeof v === 'object' ? JSON.stringify(v).replace(/"/g, '"') : String(v).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"'));`,
|
|
60
|
+
`const _htlDynAttr = (name, val) => { if (val == null || val === false) return ''; if (val === true) return ' ' + name; return ' ' + name + '="' + _htlAttr(val) + '"'; };`,
|
|
61
|
+
`const _htlSpreadAttrs = (obj) => { if (!obj || typeof obj !== 'object') return ''; return Object.entries(obj).map(([k, v]) => _htlDynAttr(k, v)).join(''); };`,
|
|
62
|
+
'',
|
|
63
|
+
].join('\n');
|
|
64
|
+
return banner + helpers + restoreVarCasing(body, restoreMap);
|
|
65
|
+
}
|
|
66
|
+
// ---------------------------------------------------------------------------
|
|
67
|
+
// Named template mode
|
|
68
|
+
// ---------------------------------------------------------------------------
|
|
69
|
+
function findNamedTemplates(document, originalNames = {}) {
|
|
70
|
+
const templates = [];
|
|
71
|
+
collectTemplates(document.childNodes, templates, originalNames);
|
|
72
|
+
return templates;
|
|
73
|
+
}
|
|
74
|
+
function collectTemplates(nodes, acc, originalNames = {}) {
|
|
75
|
+
for (const node of nodes) {
|
|
76
|
+
if (node.attrs) {
|
|
77
|
+
const tmplAttr = node.attrs.find((a) => a.name.startsWith('data-sly-template.'));
|
|
78
|
+
if (tmplAttr) {
|
|
79
|
+
const lowercasedName = tmplAttr.name.replace('data-sly-template.', '');
|
|
80
|
+
const name = originalNames[lowercasedName] || lowercasedName;
|
|
81
|
+
const atMatch = tmplAttr.value.match(/@\s*([\w,\s]+)/);
|
|
82
|
+
const params = atMatch ? atMatch[1].split(',').map((s) => s.trim()).filter(Boolean) : [];
|
|
83
|
+
acc.push({ name, params, node });
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
if (node.content?.childNodes)
|
|
88
|
+
collectTemplates(node.content.childNodes, acc, originalNames);
|
|
89
|
+
else if (node.childNodes)
|
|
90
|
+
collectTemplates(node.childNodes, acc, originalNames);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function transpileNamedTemplates(templates, omitAttrs, sourceDir, modelTransforms = {}) {
|
|
94
|
+
const localTemplates = Object.fromEntries(templates.map(({ name }) => [name, toPascalFnName('create', name)]));
|
|
95
|
+
const fnNames = [];
|
|
96
|
+
const parts = templates.map(({ name, params, node }) => {
|
|
97
|
+
const ctx = (0, walker_1.createContext)(omitAttrs, sourceDir);
|
|
98
|
+
Object.assign(ctx.localTemplates, localTemplates);
|
|
99
|
+
for (const n of Object.keys(localTemplates))
|
|
100
|
+
ctx.definedVars.add(n);
|
|
101
|
+
const templateDir = (0, directives_1.parseDirectives)((0, walker_1.attrsToObj)(node.attrs || []), sourceDir);
|
|
102
|
+
Object.assign(ctx.uses, templateDir.use);
|
|
103
|
+
Object.assign(ctx.useDefaults, templateDir.useDefaults || {});
|
|
104
|
+
Object.assign(ctx.fileUse, templateDir.fileUse);
|
|
105
|
+
const children = node.content ? node.content.childNodes : node.childNodes;
|
|
106
|
+
const body = (0, walker_1.walkNodes)(children, ctx);
|
|
107
|
+
const fnName = toPascalFnName('create', name);
|
|
108
|
+
fnNames.push(fnName);
|
|
109
|
+
const allParams = [...params];
|
|
110
|
+
for (const useName of Object.keys(ctx.uses)) {
|
|
111
|
+
if (!allParams.includes(useName))
|
|
112
|
+
allParams.push(useName);
|
|
113
|
+
}
|
|
114
|
+
const setDecls = buildSetDecls(ctx.sets);
|
|
115
|
+
for (const implicitName of Object.keys(AEM_IMPLICITS)) {
|
|
116
|
+
if (!allParams.includes(implicitName) && (body.includes(implicitName) || setDecls.includes(implicitName))) {
|
|
117
|
+
allParams.push(implicitName);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
const tempParams = allParams.map(p => ({ name: p, default: '{}' }));
|
|
121
|
+
addFreeVarParams(tempParams, ctx);
|
|
122
|
+
for (const p of tempParams)
|
|
123
|
+
if (!allParams.includes(p.name))
|
|
124
|
+
allParams.push(p.name);
|
|
125
|
+
const paramStr = buildParamStr(allParams.map(p => ({
|
|
126
|
+
name: p,
|
|
127
|
+
default: AEM_IMPLICITS[p] ?? ctx.useDefaults[p] ?? '{}',
|
|
128
|
+
})));
|
|
129
|
+
const transformDecls = buildModelTransformDecls(ctx.uses, modelTransforms);
|
|
130
|
+
return buildFunctionBody(fnName, paramStr, setDecls, body, transformDecls);
|
|
131
|
+
});
|
|
132
|
+
parts.push(`module.exports = { ${fnNames.join(', ')} };`);
|
|
133
|
+
return parts.join('\n\n');
|
|
134
|
+
}
|
|
135
|
+
// ---------------------------------------------------------------------------
|
|
136
|
+
// Single template mode
|
|
137
|
+
// ---------------------------------------------------------------------------
|
|
138
|
+
function transpileSingleTemplate(document, filename, omitAttrs, sourceDir, modelTransforms = {}) {
|
|
139
|
+
const ctx = (0, walker_1.createContext)(omitAttrs, sourceDir);
|
|
140
|
+
const body = (0, walker_1.walkNodes)(document.childNodes, ctx);
|
|
141
|
+
const fnName = toPascalFnName('create', deriveBaseName(filename));
|
|
142
|
+
const params = Object.keys(ctx.uses).map(name => ({ name, default: ctx.useDefaults[name] ?? '{}' }));
|
|
143
|
+
const setDecls = buildSetDecls(ctx.sets);
|
|
144
|
+
for (const [name, defaultVal] of Object.entries(AEM_IMPLICITS)) {
|
|
145
|
+
if (!ctx.uses[name] && (body.includes(name) || setDecls.includes(name))) {
|
|
146
|
+
params.push({ name, default: defaultVal });
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
addFreeVarParams(params, ctx);
|
|
150
|
+
const transformDecls = buildModelTransformDecls(ctx.uses, modelTransforms);
|
|
151
|
+
const paramStr = buildParamStr(params);
|
|
152
|
+
return buildFunctionBody(fnName, paramStr, setDecls, body, transformDecls) + `\nmodule.exports = { ${fnName} };`;
|
|
153
|
+
}
|
|
154
|
+
// ---------------------------------------------------------------------------
|
|
155
|
+
// Code generation helpers
|
|
156
|
+
// ---------------------------------------------------------------------------
|
|
157
|
+
function buildFunctionBody(fnName, paramStr, setDecls, body, transformDecls = '') {
|
|
158
|
+
const lines = [`const ${fnName} = (${paramStr}) => {`];
|
|
159
|
+
if (transformDecls)
|
|
160
|
+
lines.push(transformDecls);
|
|
161
|
+
if (setDecls)
|
|
162
|
+
lines.push(setDecls);
|
|
163
|
+
lines.push(` return /* html */\`${body.trim()}\`;`, '};');
|
|
164
|
+
return lines.join('\n');
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Builds assignment lines that merge computed properties into model variables,
|
|
168
|
+
* based on modelTransforms config.
|
|
169
|
+
*/
|
|
170
|
+
function buildModelTransformDecls(uses, modelTransforms) {
|
|
171
|
+
if (!Object.keys(modelTransforms).length)
|
|
172
|
+
return '';
|
|
173
|
+
const lines = [];
|
|
174
|
+
for (const [varName, useVal] of Object.entries(uses)) {
|
|
175
|
+
for (const [classKey, props] of Object.entries(modelTransforms)) {
|
|
176
|
+
if (String(useVal).includes(classKey)) {
|
|
177
|
+
const modelEntries = Object.entries(props).filter(([k]) => k !== "_includes");
|
|
178
|
+
if (modelEntries.length) {
|
|
179
|
+
const propsStr = modelEntries
|
|
180
|
+
.map(([k, v]) => `${k}: ${String(v).replaceAll(/\bmodel\b/g, varName)}`)
|
|
181
|
+
.join(", ");
|
|
182
|
+
lines.push(` ${varName} = Object.assign({ ${propsStr} }, ${varName});`);
|
|
183
|
+
}
|
|
184
|
+
if (props._includes != null) {
|
|
185
|
+
lines.push(` _includes = Object.assign(${String(props._includes).replaceAll(/\bmodel\b/g, varName)}, _includes);`);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return lines.join('\n');
|
|
191
|
+
}
|
|
192
|
+
function extractOriginalTemplateNames(source) {
|
|
193
|
+
const map = {};
|
|
194
|
+
for (const m of source.matchAll(/data-sly-template\.([A-Za-z_]\w*)/g)) {
|
|
195
|
+
map[m[1].toLowerCase()] = m[1];
|
|
196
|
+
}
|
|
197
|
+
return map;
|
|
198
|
+
}
|
|
199
|
+
const JS_RESERVED = new Set(['class', 'for']);
|
|
200
|
+
const JS_BUILTINS = new Set([
|
|
201
|
+
'true', 'false', 'null', 'undefined', 'NaN', 'Infinity',
|
|
202
|
+
'typeof', 'instanceof', 'in', 'of', 'new', 'delete', 'void',
|
|
203
|
+
'this', 'super', 'class', 'const', 'let', 'var', 'function',
|
|
204
|
+
'return', 'if', 'else', 'for', 'while', 'do', 'switch', 'case',
|
|
205
|
+
'break', 'continue', 'default', 'throw', 'try', 'catch', 'finally',
|
|
206
|
+
'import', 'export', 'async', 'await', 'yield', 'static', 'with',
|
|
207
|
+
'Math', 'JSON', 'Array', 'Object', 'String', 'Number', 'Boolean',
|
|
208
|
+
'Date', 'require', 'module', 'console', 'parseInt', 'parseFloat',
|
|
209
|
+
]);
|
|
210
|
+
/**
|
|
211
|
+
* Scans ctx.refs for variable names that are referenced but not declared
|
|
212
|
+
* anywhere (not in params, AEM implicits, defined vars, or fileUse),
|
|
213
|
+
* and adds them as params with default `{}`.
|
|
214
|
+
*/
|
|
215
|
+
function addFreeVarParams(params, ctx) {
|
|
216
|
+
const known = new Set([
|
|
217
|
+
...params.map(p => p.name),
|
|
218
|
+
...Object.keys(AEM_IMPLICITS),
|
|
219
|
+
...Object.keys(ctx.fileUse || {}),
|
|
220
|
+
...(ctx.definedVars || []),
|
|
221
|
+
]);
|
|
222
|
+
for (const ref of (ctx.refs || [])) {
|
|
223
|
+
if (JS_BUILTINS.has(ref) || known.has(ref) || ref.startsWith('_'))
|
|
224
|
+
continue;
|
|
225
|
+
params.push({ name: ref, default: '{}' });
|
|
226
|
+
known.add(ref);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
function buildParamStr(params) {
|
|
230
|
+
if (!params.length)
|
|
231
|
+
return '';
|
|
232
|
+
const inner = params.map(p => {
|
|
233
|
+
const safe = JS_RESERVED.has(p.name) ? `_${p.name}` : p.name;
|
|
234
|
+
return safe === p.name ? `${p.name} = ${p.default}` : `${p.name}: ${safe} = ${p.default}`;
|
|
235
|
+
}).join(', ');
|
|
236
|
+
return `{ ${inner} } = {}`;
|
|
237
|
+
}
|
|
238
|
+
function buildSetDecls(sets) {
|
|
239
|
+
if (!sets.length)
|
|
240
|
+
return '';
|
|
241
|
+
const seen = new Set();
|
|
242
|
+
return sets
|
|
243
|
+
.filter(s => {
|
|
244
|
+
if (seen.has(s.name))
|
|
245
|
+
return false;
|
|
246
|
+
seen.add(s.name);
|
|
247
|
+
return true;
|
|
248
|
+
})
|
|
249
|
+
.map(s => {
|
|
250
|
+
const safe = JS_RESERVED.has(s.name) ? `_${s.name}` : s.name;
|
|
251
|
+
return s.raw ? ` const ${safe} = ${s.expr};` : ` const ${safe} = \`${s.expr}\`;`;
|
|
252
|
+
})
|
|
253
|
+
.join('\n');
|
|
254
|
+
}
|
|
255
|
+
function deriveBaseName(filename) {
|
|
256
|
+
return node_path_1.default.basename(filename, node_path_1.default.extname(filename));
|
|
257
|
+
}
|
|
258
|
+
function toPascalFnName(prefix, name) {
|
|
259
|
+
const pascal = name
|
|
260
|
+
.replaceAll(/[-_](\w)/g, (_, c) => c.toUpperCase())
|
|
261
|
+
.replace(/^\w/, c => c.toUpperCase());
|
|
262
|
+
return prefix + pascal;
|
|
263
|
+
}
|
|
264
|
+
function normalizeSetVarCasing(source) {
|
|
265
|
+
const restoreMap = {};
|
|
266
|
+
const DIRECTIVES = ['data-sly-set', 'data-sly-use', 'data-sly-repeat', 'data-sly-list', 'data-sly-test'];
|
|
267
|
+
for (const dir of DIRECTIVES) {
|
|
268
|
+
for (const m of source.matchAll(new RegExp(String.raw `${dir}\.([A-Za-z_]\w*)`, 'g'))) {
|
|
269
|
+
if (m[1] !== m[1].toLowerCase())
|
|
270
|
+
restoreMap[m[1].toLowerCase()] = m[1];
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
if (!Object.keys(restoreMap).length)
|
|
274
|
+
return { normalized: source, restoreMap };
|
|
275
|
+
const directivesPattern = DIRECTIVES.map(d => d.replaceAll('-', String.raw `\-`)).join('|');
|
|
276
|
+
let result = source;
|
|
277
|
+
for (const [lower, name] of Object.entries(restoreMap)) {
|
|
278
|
+
result = result.replaceAll(new RegExp(String.raw `((?:${directivesPattern})\.)${name}\b`, 'g'), `$1${lower}`);
|
|
279
|
+
result = result.replaceAll(new RegExp(String.raw `(?<!\.)\b${name}\b`, 'g'), lower);
|
|
280
|
+
}
|
|
281
|
+
return { normalized: result, restoreMap };
|
|
282
|
+
}
|
|
283
|
+
function restoreVarCasing(js, restoreMap) {
|
|
284
|
+
if (!Object.keys(restoreMap).length)
|
|
285
|
+
return js;
|
|
286
|
+
let result = js;
|
|
287
|
+
for (const [lower, original] of Object.entries(restoreMap)) {
|
|
288
|
+
result = result.replaceAll(new RegExp(String.raw `(?<!\.)\b${lower}\b`, 'g'), original);
|
|
289
|
+
}
|
|
290
|
+
return result;
|
|
291
|
+
}
|
|
292
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transpiler/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { SetDecl } from './directives';
|
|
2
|
+
export interface WalkerContext {
|
|
3
|
+
uses: Record<string, string>;
|
|
4
|
+
useDefaults: Record<string, string>;
|
|
5
|
+
fileUse: Record<string, string>;
|
|
6
|
+
sets: SetDecl[];
|
|
7
|
+
omitAttrs: RegExp[];
|
|
8
|
+
sourceDir: string;
|
|
9
|
+
refs: Set<string>;
|
|
10
|
+
definedVars: Set<string>;
|
|
11
|
+
localTemplates: Record<string, string>;
|
|
12
|
+
}
|
|
13
|
+
export declare function createContext(omitAttrs?: RegExp[], sourceDir?: string): WalkerContext;
|
|
14
|
+
export declare function walkNodes(nodes: any[], ctx: WalkerContext): string;
|
|
15
|
+
export declare function attrsToObj(attrsList: Array<{
|
|
16
|
+
name: string;
|
|
17
|
+
value: string;
|
|
18
|
+
}>): Record<string, string>;
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createContext = createContext;
|
|
4
|
+
exports.walkNodes = walkNodes;
|
|
5
|
+
exports.attrsToObj = attrsToObj;
|
|
6
|
+
const directives_1 = require("./directives");
|
|
7
|
+
const expr_1 = require("./expr");
|
|
8
|
+
const VOID_ELEMENTS = new Set([
|
|
9
|
+
'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input',
|
|
10
|
+
'link', 'meta', 'param', 'source', 'track', 'wbr',
|
|
11
|
+
]);
|
|
12
|
+
function createContext(omitAttrs = [], sourceDir = '') {
|
|
13
|
+
return { uses: {}, useDefaults: {}, fileUse: {}, sets: [], omitAttrs, sourceDir, refs: new Set(), definedVars: new Set(), localTemplates: {} };
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Extracts root-level identifiers from a converted expression string,
|
|
17
|
+
* ignoring string literal contents and property names after `.` or `?.`.
|
|
18
|
+
*/
|
|
19
|
+
function addRootRefs(expr, refs) {
|
|
20
|
+
if (!expr)
|
|
21
|
+
return;
|
|
22
|
+
const stripped = String(expr).replaceAll(/'[^']*'/g, '').replaceAll(/"[^"]*"/g, '');
|
|
23
|
+
for (const m of stripped.matchAll(/(?<![?.])\b([a-zA-Z_$][a-zA-Z0-9_$]*)\b/g)) {
|
|
24
|
+
if (stripped[m.index + m[0].length] === '$' && stripped[m.index + m[0].length + 1] === '{')
|
|
25
|
+
continue;
|
|
26
|
+
refs.add(m[1]);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function walkNodes(nodes, ctx) {
|
|
30
|
+
return nodes.map((node) => walkNode(node, ctx)).join('');
|
|
31
|
+
}
|
|
32
|
+
function walkNode(node, ctx) {
|
|
33
|
+
switch (node.nodeName) {
|
|
34
|
+
case '#text':
|
|
35
|
+
return (0, expr_1.convertTextContent)(node.value);
|
|
36
|
+
case '#comment':
|
|
37
|
+
if (node.data?.trimStart().startsWith('/*'))
|
|
38
|
+
return '';
|
|
39
|
+
return `<!--${node.data}-->`;
|
|
40
|
+
case '#document':
|
|
41
|
+
case '#document-fragment':
|
|
42
|
+
return walkNodes(node.childNodes, ctx);
|
|
43
|
+
default:
|
|
44
|
+
return processElement(node, ctx);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
function processElement(node, ctx) {
|
|
48
|
+
const attrsMap = attrsToObj(node.attrs || []);
|
|
49
|
+
const dir = (0, directives_1.parseDirectives)(attrsMap, ctx.sourceDir);
|
|
50
|
+
Object.assign(ctx.uses, dir.use);
|
|
51
|
+
Object.assign(ctx.useDefaults, dir.useDefaults);
|
|
52
|
+
Object.assign(ctx.fileUse, dir.fileUse);
|
|
53
|
+
if (dir.test)
|
|
54
|
+
addRootRefs(dir.test, ctx.refs);
|
|
55
|
+
if (dir.text)
|
|
56
|
+
addRootRefs(dir.text, ctx.refs);
|
|
57
|
+
if (dir.resource)
|
|
58
|
+
addRootRefs(dir.resource, ctx.refs);
|
|
59
|
+
if (dir.element)
|
|
60
|
+
addRootRefs(dir.element, ctx.refs);
|
|
61
|
+
if (dir.unwrap != null)
|
|
62
|
+
addRootRefs(dir.unwrap, ctx.refs);
|
|
63
|
+
if (dir.repeat)
|
|
64
|
+
addRootRefs(dir.repeat.listExpr, ctx.refs);
|
|
65
|
+
if (dir.call)
|
|
66
|
+
Object.values(dir.call.params).forEach(v => addRootRefs(v, ctx.refs));
|
|
67
|
+
for (const s of dir.sets)
|
|
68
|
+
addRootRefs(s.expr, ctx.refs);
|
|
69
|
+
if (dir.dynamicAttrs)
|
|
70
|
+
for (const a of dir.dynamicAttrs)
|
|
71
|
+
addRootRefs(a.expr, ctx.refs);
|
|
72
|
+
if (dir.spreadAttr)
|
|
73
|
+
addRootRefs(dir.spreadAttr, ctx.refs);
|
|
74
|
+
for (const name of Object.keys(dir.use))
|
|
75
|
+
ctx.definedVars.add(name);
|
|
76
|
+
for (const name of Object.keys(dir.fileUse))
|
|
77
|
+
ctx.definedVars.add(name);
|
|
78
|
+
for (const s of dir.sets)
|
|
79
|
+
ctx.definedVars.add(s.name);
|
|
80
|
+
if (dir.repeat) {
|
|
81
|
+
ctx.definedVars.add(dir.repeat.varName);
|
|
82
|
+
ctx.definedVars.add(dir.repeat.varName + 'List');
|
|
83
|
+
ctx.definedVars.add(dir.repeat.varName.toLowerCase() + 'List');
|
|
84
|
+
}
|
|
85
|
+
const localCtx = dir.repeat
|
|
86
|
+
? { uses: ctx.uses, useDefaults: ctx.useDefaults, fileUse: ctx.fileUse, sets: [], omitAttrs: ctx.omitAttrs, sourceDir: ctx.sourceDir, refs: ctx.refs, definedVars: ctx.definedVars, localTemplates: ctx.localTemplates }
|
|
87
|
+
: ctx;
|
|
88
|
+
for (const s of dir.sets)
|
|
89
|
+
localCtx.sets.push(s);
|
|
90
|
+
if (dir.template)
|
|
91
|
+
return walkNodes(node.childNodes, localCtx);
|
|
92
|
+
if (dir.call) {
|
|
93
|
+
const { fn, params } = dir.call;
|
|
94
|
+
const paramsStr = Object.entries(params)
|
|
95
|
+
.map(([k, v]) => `${k}: ${v}`)
|
|
96
|
+
.join(', ');
|
|
97
|
+
let callContent;
|
|
98
|
+
const dotIdx = fn.indexOf('.');
|
|
99
|
+
if (dotIdx === -1) {
|
|
100
|
+
const localFn = ctx.localTemplates[fn];
|
|
101
|
+
if (localFn) {
|
|
102
|
+
const extraParams = paramsStr ? `${paramsStr}, _includes` : '_includes';
|
|
103
|
+
callContent = `\${${localFn}?.({ ${extraParams} }) ?? ''}`;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
const objName = fn.slice(0, dotIdx);
|
|
108
|
+
const methodName = fn.slice(dotIdx + 1);
|
|
109
|
+
const filePath = dir.fileUse[objName] || ctx.fileUse[objName];
|
|
110
|
+
if (filePath) {
|
|
111
|
+
const jsFnName = 'create' + methodName.charAt(0).toUpperCase() + methodName.slice(1);
|
|
112
|
+
const extraParams = paramsStr ? `${paramsStr}, _includes` : '_includes';
|
|
113
|
+
callContent = `\${require('${filePath}').${jsFnName}?.({ ${extraParams} }) ?? ''}`;
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
const localFn = ctx.localTemplates[methodName];
|
|
117
|
+
if (localFn) {
|
|
118
|
+
const extraParams = paramsStr ? `${paramsStr}, _includes` : '_includes';
|
|
119
|
+
callContent = `\${${localFn}?.({ ${extraParams} }) ?? ''}`;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if (!callContent) {
|
|
124
|
+
const extraParams = paramsStr ? `${paramsStr}, _includes` : '_includes';
|
|
125
|
+
callContent = `\${${fn}?.({ ${extraParams} }) ?? ''}`;
|
|
126
|
+
}
|
|
127
|
+
if (node.tagName !== 'sly') {
|
|
128
|
+
const attrsStr = buildAttrs(attrsMap, dir, ctx.omitAttrs);
|
|
129
|
+
const element = `<${node.tagName}${attrsStr}>${callContent}</${node.tagName}>`;
|
|
130
|
+
return applyTest(dir.test, element);
|
|
131
|
+
}
|
|
132
|
+
return applyTest(dir.test, callContent);
|
|
133
|
+
}
|
|
134
|
+
if (dir.include) {
|
|
135
|
+
const raw = dir.include;
|
|
136
|
+
let key;
|
|
137
|
+
if (raw.startsWith('${')) {
|
|
138
|
+
const expr = (0, expr_1.convertExpr)(raw);
|
|
139
|
+
key = `[${expr}]`;
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
const literalPath = raw.replace(/^['"](.+)['"]$/, '$1');
|
|
143
|
+
key = `['${literalPath}']`;
|
|
144
|
+
}
|
|
145
|
+
const includeExpr = `_includes${key}?.() ?? ''`;
|
|
146
|
+
return applyTest(dir.test, `\${${includeExpr}}`);
|
|
147
|
+
}
|
|
148
|
+
if (node.tagName === 'sly' && !dir.repeat) {
|
|
149
|
+
const children = dir.resource
|
|
150
|
+
? `\${_includes?.[${dir.resource}]?.() ?? ''}`
|
|
151
|
+
: walkNodes(node.childNodes, localCtx);
|
|
152
|
+
return applyTest(dir.test, children);
|
|
153
|
+
}
|
|
154
|
+
const tagExpr = dir.element
|
|
155
|
+
? `\${${dir.element} || '${node.tagName}'}`
|
|
156
|
+
: node.tagName;
|
|
157
|
+
const attrsStr = buildAttrs(attrsMap, dir, ctx.omitAttrs);
|
|
158
|
+
const innerContent = buildInnerContent(node, dir, localCtx);
|
|
159
|
+
const element = node.tagName === 'sly'
|
|
160
|
+
? innerContent
|
|
161
|
+
: VOID_ELEMENTS.has(node.tagName)
|
|
162
|
+
? `<${tagExpr}${attrsStr}>`
|
|
163
|
+
: `<${tagExpr}${attrsStr}>${innerContent}</${tagExpr}>`;
|
|
164
|
+
let result = element;
|
|
165
|
+
if (dir.unwrap !== null) {
|
|
166
|
+
result = `\${(${dir.unwrap}) ? \`${innerContent}\` : \`${element}\`}`;
|
|
167
|
+
}
|
|
168
|
+
if (dir.repeat) {
|
|
169
|
+
const { varName, listExpr, listMode } = dir.repeat;
|
|
170
|
+
const listVar = `${varName}List`;
|
|
171
|
+
const listDecl = `const ${listVar} = { index: _i, count: _i + 1, first: _i === 0, last: _i === _arr.length - 1, odd: (_i + 1) % 2 !== 0, even: (_i + 1) % 2 === 0 };`;
|
|
172
|
+
const testVarName = dir.test;
|
|
173
|
+
const hoisted = [];
|
|
174
|
+
const inner = [];
|
|
175
|
+
const seen = new Set();
|
|
176
|
+
for (const s of localCtx.sets) {
|
|
177
|
+
if (seen.has(s.name))
|
|
178
|
+
continue;
|
|
179
|
+
seen.add(s.name);
|
|
180
|
+
if (testVarName && s.name === testVarName)
|
|
181
|
+
hoisted.push(s);
|
|
182
|
+
else
|
|
183
|
+
inner.push(s);
|
|
184
|
+
}
|
|
185
|
+
const toDecl = (s) => {
|
|
186
|
+
const safe = (s.name === 'class' || s.name === 'for') ? `_${s.name}` : s.name;
|
|
187
|
+
return s.raw ? `const ${safe} = ${s.expr};` : `const ${safe} = \`${s.expr}\`;`;
|
|
188
|
+
};
|
|
189
|
+
const setLines = inner.map(toDecl).join(' ');
|
|
190
|
+
const hoistLines = hoisted.map(toDecl).join(' ');
|
|
191
|
+
if (listMode && node.tagName !== 'sly') {
|
|
192
|
+
const childBody = setLines ? `${listDecl} ${setLines} return \`${innerContent}\`;` : `${listDecl} return \`${innerContent}\`;`;
|
|
193
|
+
const childLoop = `\${((${listExpr}) || []).map((${varName}, _i, _arr) => { if (${varName} == null) return ''; ${childBody} }).join('')}`;
|
|
194
|
+
result = VOID_ELEMENTS.has(node.tagName)
|
|
195
|
+
? `<${tagExpr}${attrsStr}>`
|
|
196
|
+
: `<${tagExpr}${attrsStr}>${childLoop}</${tagExpr}>`;
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
const body = setLines ? `${listDecl} ${setLines} return \`${result}\`;` : `${listDecl} return \`${result}\`;`;
|
|
200
|
+
result = `\${((${listExpr}) || []).map((${varName}, _i, _arr) => { if (${varName} == null) return ''; ${body} }).join('')}`;
|
|
201
|
+
}
|
|
202
|
+
if (hoistLines && dir.test) {
|
|
203
|
+
const testExpr = (dir.test === 'class' || dir.test === 'for') ? `_${dir.test}` : dir.test;
|
|
204
|
+
result = `\${(() => { ${hoistLines} return (${testExpr}) ? \`${result}\` : ''; })()}`;
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
if (hoistLines) {
|
|
208
|
+
result = `\${(() => { ${hoistLines} return \`${result}\`; })()}`;
|
|
209
|
+
}
|
|
210
|
+
if (dir.test) {
|
|
211
|
+
result = applyTest(dir.test, result);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
else if (dir.test) {
|
|
216
|
+
result = applyTest(dir.test, result);
|
|
217
|
+
}
|
|
218
|
+
return result;
|
|
219
|
+
}
|
|
220
|
+
function buildInnerContent(node, dir, ctx) {
|
|
221
|
+
if (dir.resource) {
|
|
222
|
+
return `\${_includes?.[${dir.resource}]?.() ?? ''}`;
|
|
223
|
+
}
|
|
224
|
+
if (dir.text)
|
|
225
|
+
return `\${${dir.text}}`;
|
|
226
|
+
return walkNodes(node.childNodes, ctx);
|
|
227
|
+
}
|
|
228
|
+
function buildAttrs(attrsMap, dir, omitAttrs) {
|
|
229
|
+
let result = Object.entries(attrsMap)
|
|
230
|
+
.filter(([key]) => !dir.skip.has(key))
|
|
231
|
+
.filter(([key]) => !omitAttrs.some(pattern => pattern.test(key)))
|
|
232
|
+
.map(([key, val]) => ` ${key}="${(0, expr_1.convertAttrValue)(val)}"`)
|
|
233
|
+
.join('');
|
|
234
|
+
if (dir.dynamicAttrs?.length) {
|
|
235
|
+
for (const { name, expr } of dir.dynamicAttrs) {
|
|
236
|
+
result += `\${_htlDynAttr('${name}', ${expr})}`;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
if (dir.spreadAttr) {
|
|
240
|
+
result += `\${_htlSpreadAttrs(${dir.spreadAttr})}`;
|
|
241
|
+
}
|
|
242
|
+
return result;
|
|
243
|
+
}
|
|
244
|
+
function applyTest(condition, content) {
|
|
245
|
+
if (!condition)
|
|
246
|
+
return content;
|
|
247
|
+
return `\${(${condition}) ? \`${content}\` : ''}`;
|
|
248
|
+
}
|
|
249
|
+
function attrsToObj(attrsList) {
|
|
250
|
+
return Object.fromEntries(attrsList.map(a => [a.name, a.value]));
|
|
251
|
+
}
|
|
252
|
+
//# sourceMappingURL=walker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walker.js","sourceRoot":"","sources":["../../src/transpiler/walker.ts"],"names":[],"mappings":"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"}
|