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.
@@ -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, '&quot;') : String(v).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;'));`,
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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"}