@reidelsaltres/pureper 0.1.123 → 0.1.124

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.
@@ -11,8 +11,15 @@
11
11
  * const fragment = parser.parseToDOM(templateString, scopeObject);
12
12
  */
13
13
  export default class HMLEParser {
14
+ private deferredBlocksStack;
15
+ private deferredBlockCounter;
14
16
  private static extractBalancedBraces;
15
17
  private static extractBalancedParens;
18
+ private static isIdentifierStart;
19
+ private static isIdentifierPart;
20
+ private static transformDefStatements;
21
+ private static extractDefStatement;
22
+ private static extractDefExpression;
16
23
  private static rules;
17
24
  private static domRules;
18
25
  variables: Record<string, unknown>;
@@ -43,6 +50,8 @@ export default class HMLEParser {
43
50
  * @returns Processed HTML string
44
51
  */
45
52
  parse(content: string, scope?: Record<string, any>): string;
53
+ private deferBlock;
54
+ private restoreDeferredBlocks;
46
55
  /**
47
56
  * Stage 2: Process DOM rules on a fragment
48
57
  * Walks all elements and applies DOM rules based on attributes
@@ -1 +1 @@
1
- {"version":3,"file":"HMLEParser.d.ts","sourceRoot":"","sources":["../../src/foundation/HMLEParser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA8BH,MAAM,CAAC,OAAO,OAAO,UAAU;IAE3B,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAcpC,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAcpC,OAAO,CAAC,MAAM,CAAC,KAAK,CAkHlB;IAGF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAwIrB;IAEK,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IAE/C;;OAEG;IACI,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAKtD;;OAEG;IACH,OAAO,CAAC,YAAY;IAmBpB;;OAEG;IACI,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG;IAWxE;;OAEG;IACH,OAAO,CAAC,cAAc;IAMtB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAczB;;;;;OAKG;IACI,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM;IAqClE;;;OAGG;IACH,OAAO,CAAC,eAAe;IAuBvB;;;;;OAKG;IACI,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,gBAAgB;IAajF;;;;;OAKG;IACI,cAAc,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI;IAK1G;;;;;;OAMG;IACI,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO;IAM7F;;;;;;OAMG;IACI,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO;IAO/F;;;OAGG;IACI,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO;CAI/E"}
1
+ {"version":3,"file":"HMLEParser.d.ts","sourceRoot":"","sources":["../../src/foundation/HMLEParser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA8BH,MAAM,CAAC,OAAO,OAAO,UAAU;IAC3B,OAAO,CAAC,mBAAmB,CAAkC;IAC7D,OAAO,CAAC,oBAAoB,CAAK;IAEjC,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAcpC,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAapC,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAIhC,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAI/B,OAAO,CAAC,MAAM,CAAC,sBAAsB;IA0HrC,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAwBlC,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAmHnC,OAAO,CAAC,MAAM,CAAC,KAAK,CAoOlB;IAGF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAwIrB;IAEK,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IAE/C;;OAEG;IACI,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAKtD;;OAEG;IACH,OAAO,CAAC,YAAY;IAmBpB;;OAEG;IACI,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG;IAWxE;;OAEG;IACH,OAAO,CAAC,cAAc;IAMtB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAczB;;;;;OAKG;IACI,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM;IAuDlE,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,qBAAqB;IAW7B;;;OAGG;IACH,OAAO,CAAC,eAAe;IAuBvB;;;;;OAKG;IACI,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,gBAAgB;IAajF;;;;;OAKG;IACI,cAAc,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI;IAK1G;;;;;;OAMG;IACI,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO;IAM7F;;;;;;OAMG;IACI,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO;IAO/F;;;OAGG;IACI,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO;CAI/E"}
@@ -29,6 +29,8 @@ class HMLEDOMRule {
29
29
  }
30
30
  }
31
31
  export default class HMLEParser {
32
+ deferredBlocksStack = [];
33
+ deferredBlockCounter = 0;
32
34
  // Extract balanced braces { ... }
33
35
  static extractBalancedBraces(content, start) {
34
36
  if (content[start] !== '{')
@@ -63,6 +65,264 @@ export default class HMLEParser {
63
65
  return null;
64
66
  return { block: content.slice(start + 1, i - 1), end: i };
65
67
  }
68
+ static isIdentifierStart(ch) {
69
+ return /[A-Za-z_$]/.test(ch);
70
+ }
71
+ static isIdentifierPart(ch) {
72
+ return /[A-Za-z0-9_$]/.test(ch);
73
+ }
74
+ static transformDefStatements(code) {
75
+ if (!code.includes('def'))
76
+ return code;
77
+ let result = '';
78
+ let i = 0;
79
+ const len = code.length;
80
+ let inSingle = false;
81
+ let inDouble = false;
82
+ let inTemplate = false;
83
+ let inLineComment = false;
84
+ let inBlockComment = false;
85
+ let escape = false;
86
+ while (i < len) {
87
+ const ch = code[i];
88
+ if (inLineComment) {
89
+ result += ch;
90
+ if (ch === '\n')
91
+ inLineComment = false;
92
+ i++;
93
+ continue;
94
+ }
95
+ if (inBlockComment) {
96
+ result += ch;
97
+ if (ch === '*' && code[i + 1] === '/') {
98
+ result += '/';
99
+ i += 2;
100
+ inBlockComment = false;
101
+ }
102
+ else {
103
+ i++;
104
+ }
105
+ continue;
106
+ }
107
+ if (inSingle) {
108
+ result += ch;
109
+ if (!escape && ch === '\\') {
110
+ escape = true;
111
+ }
112
+ else {
113
+ if (!escape && ch === "'")
114
+ inSingle = false;
115
+ escape = false;
116
+ }
117
+ i++;
118
+ continue;
119
+ }
120
+ if (inDouble) {
121
+ result += ch;
122
+ if (!escape && ch === '\\') {
123
+ escape = true;
124
+ }
125
+ else {
126
+ if (!escape && ch === '"')
127
+ inDouble = false;
128
+ escape = false;
129
+ }
130
+ i++;
131
+ continue;
132
+ }
133
+ if (inTemplate) {
134
+ result += ch;
135
+ if (!escape && ch === '\\') {
136
+ escape = true;
137
+ }
138
+ else {
139
+ if (!escape && ch === '`')
140
+ inTemplate = false;
141
+ escape = false;
142
+ }
143
+ i++;
144
+ continue;
145
+ }
146
+ if (ch === '/' && code[i + 1] === '/') {
147
+ inLineComment = true;
148
+ result += ch;
149
+ i++;
150
+ continue;
151
+ }
152
+ if (ch === '/' && code[i + 1] === '*') {
153
+ inBlockComment = true;
154
+ result += ch;
155
+ i++;
156
+ continue;
157
+ }
158
+ if (ch === "'") {
159
+ inSingle = true;
160
+ result += ch;
161
+ i++;
162
+ continue;
163
+ }
164
+ if (ch === '"') {
165
+ inDouble = true;
166
+ result += ch;
167
+ i++;
168
+ continue;
169
+ }
170
+ if (ch === '`') {
171
+ inTemplate = true;
172
+ result += ch;
173
+ i++;
174
+ continue;
175
+ }
176
+ if (code.startsWith('def', i) && (i === 0 || !HMLEParser.isIdentifierPart(code[i - 1])) && (i + 3 >= len || /\s/.test(code[i + 3]))) {
177
+ const defResult = HMLEParser.extractDefStatement(code, i);
178
+ if (defResult) {
179
+ result += defResult.replacement;
180
+ i = defResult.nextIndex;
181
+ continue;
182
+ }
183
+ }
184
+ result += ch;
185
+ i++;
186
+ }
187
+ return result;
188
+ }
189
+ static extractDefStatement(code, start) {
190
+ const len = code.length;
191
+ let i = start + 3;
192
+ while (i < len && /\s/.test(code[i]))
193
+ i++;
194
+ if (i >= len || !HMLEParser.isIdentifierStart(code[i]))
195
+ return null;
196
+ const nameStart = i;
197
+ i++;
198
+ while (i < len && HMLEParser.isIdentifierPart(code[i]))
199
+ i++;
200
+ const name = code.slice(nameStart, i);
201
+ while (i < len && /\s/.test(code[i]))
202
+ i++;
203
+ if (i >= len || code[i] !== '=')
204
+ return null;
205
+ i++; // skip '='
206
+ while (i < len && /\s/.test(code[i]))
207
+ i++;
208
+ const exprInfo = HMLEParser.extractDefExpression(code, i);
209
+ if (!exprInfo)
210
+ return null;
211
+ const replacement = `(void __hmle_def__("${name}", (${exprInfo.expression})))` + (exprInfo.terminatedWithSemicolon ? ';' : '');
212
+ return { replacement, nextIndex: exprInfo.nextIndex };
213
+ }
214
+ static extractDefExpression(code, start) {
215
+ const len = code.length;
216
+ let i = start;
217
+ let depthParen = 0;
218
+ let depthBrace = 0;
219
+ let depthBracket = 0;
220
+ let inSingle = false;
221
+ let inDouble = false;
222
+ let inTemplate = false;
223
+ let inLineComment = false;
224
+ let inBlockComment = false;
225
+ let escape = false;
226
+ while (i < len) {
227
+ const ch = code[i];
228
+ if (inLineComment) {
229
+ if (ch === '\n')
230
+ inLineComment = false;
231
+ i++;
232
+ continue;
233
+ }
234
+ if (inBlockComment) {
235
+ if (ch === '*' && code[i + 1] === '/') {
236
+ i += 2;
237
+ inBlockComment = false;
238
+ }
239
+ else {
240
+ i++;
241
+ }
242
+ continue;
243
+ }
244
+ if (inSingle) {
245
+ if (!escape && ch === '\\') {
246
+ escape = true;
247
+ }
248
+ else {
249
+ if (!escape && ch === "'")
250
+ inSingle = false;
251
+ escape = false;
252
+ }
253
+ i++;
254
+ continue;
255
+ }
256
+ if (inDouble) {
257
+ if (!escape && ch === '\\') {
258
+ escape = true;
259
+ }
260
+ else {
261
+ if (!escape && ch === '"')
262
+ inDouble = false;
263
+ escape = false;
264
+ }
265
+ i++;
266
+ continue;
267
+ }
268
+ if (inTemplate) {
269
+ if (!escape && ch === '\\') {
270
+ escape = true;
271
+ }
272
+ else {
273
+ if (!escape && ch === '`')
274
+ inTemplate = false;
275
+ escape = false;
276
+ }
277
+ i++;
278
+ continue;
279
+ }
280
+ if (ch === '/' && code[i + 1] === '/') {
281
+ inLineComment = true;
282
+ i += 2;
283
+ continue;
284
+ }
285
+ if (ch === '/' && code[i + 1] === '*') {
286
+ inBlockComment = true;
287
+ i += 2;
288
+ continue;
289
+ }
290
+ if (ch === "'") {
291
+ inSingle = true;
292
+ i++;
293
+ continue;
294
+ }
295
+ if (ch === '"') {
296
+ inDouble = true;
297
+ i++;
298
+ continue;
299
+ }
300
+ if (ch === '`') {
301
+ inTemplate = true;
302
+ i++;
303
+ continue;
304
+ }
305
+ if (ch === '(')
306
+ depthParen++;
307
+ else if (ch === ')')
308
+ depthParen = Math.max(0, depthParen - 1);
309
+ else if (ch === '{')
310
+ depthBrace++;
311
+ else if (ch === '}')
312
+ depthBrace = Math.max(0, depthBrace - 1);
313
+ else if (ch === '[')
314
+ depthBracket++;
315
+ else if (ch === ']')
316
+ depthBracket = Math.max(0, depthBracket - 1);
317
+ if (ch === ';' && depthParen === 0 && depthBrace === 0 && depthBracket === 0) {
318
+ const expression = code.slice(start, i).trim();
319
+ return { expression, nextIndex: i + 1, terminatedWithSemicolon: true };
320
+ }
321
+ i++;
322
+ }
323
+ const expression = code.slice(start).trim();
324
+ return { expression, nextIndex: len, terminatedWithSemicolon: false };
325
+ }
66
326
  // Predefined rules processed in order
67
327
  static rules = [
68
328
  // Rule: @for (item in items) { ... }
@@ -83,8 +343,9 @@ export default class HMLEParser {
83
343
  if (!extracted)
84
344
  return match[0];
85
345
  const inner = extracted.block;
86
- // Support numeric literal or expression that resolves to a number
346
+ // Support numeric literal or expression that resolves to a number/iterable
87
347
  let arr = [];
348
+ let unresolvedIterable = false;
88
349
  // If the iterable part is a plain number literal, use it directly
89
350
  if (/^\d+$/.test(iterableExpr)) {
90
351
  const n = parseInt(iterableExpr, 10);
@@ -92,17 +353,31 @@ export default class HMLEParser {
92
353
  }
93
354
  else {
94
355
  const resolved = parser.resolveExpression(iterableExpr, scope);
95
- if (typeof resolved === 'number' && isFinite(resolved)) {
356
+ if (resolved == null) {
357
+ unresolvedIterable = true;
358
+ }
359
+ else if (typeof resolved === 'number' && isFinite(resolved)) {
96
360
  const n = Math.max(0, Math.floor(resolved));
97
361
  arr = Array.from({ length: n }, (_, i) => i);
98
362
  }
99
363
  else if (Array.isArray(resolved)) {
100
364
  arr = resolved;
101
365
  }
366
+ else if (typeof resolved[Symbol.iterator] === 'function') {
367
+ arr = Array.from(resolved);
368
+ }
369
+ else if (typeof resolved === 'object' && typeof resolved.length === 'number') {
370
+ arr = Array.from(resolved);
371
+ }
102
372
  else {
103
373
  arr = [];
104
374
  }
105
375
  }
376
+ if (unresolvedIterable) {
377
+ const fullBlock = input.slice(match.index, extracted.end);
378
+ const placeholder = parser.deferBlock(fullBlock);
379
+ return { text: placeholder, end: extracted.end };
380
+ }
106
381
  const parts = [];
107
382
  for (let i = 0; i < arr.length; i++) {
108
383
  const item = arr[i];
@@ -125,17 +400,70 @@ export default class HMLEParser {
125
400
  const extracted = HMLEParser.extractBalancedParens(input, blockStart);
126
401
  if (!extracted)
127
402
  return match[0];
128
- const code = extracted.block;
403
+ const originalCode = extracted.block;
404
+ const code = HMLEParser.transformDefStatements(originalCode);
129
405
  const ctx = parser.buildContext(scope);
406
+ const assignToScope = (prop, value) => {
407
+ ctx[prop] = value;
408
+ if (scope)
409
+ scope[prop] = value;
410
+ else
411
+ parser.variables[prop] = value;
412
+ return value;
413
+ };
414
+ ctx.__hmle_def__ = (prop, value) => assignToScope(prop, value);
415
+ const execCtx = new Proxy(ctx, {
416
+ set(target, prop, value) {
417
+ target[prop] = value;
418
+ return true;
419
+ },
420
+ get(target, prop) {
421
+ return target[prop];
422
+ }
423
+ });
424
+ // Prepare code transformation rules:
425
+ // - If the code is a single assignment (no semicolons), execute it but suppress output
426
+ // - If code contains multiple statements separated by semicolons, transform so the
427
+ // last non-empty statement becomes a returned value so it is printed
428
+ let processedCode = code;
429
+ let suppressOutput = false;
430
+ const trimmedCode = code.trim();
431
+ if (trimmedCode.indexOf(';') === -1) {
432
+ // No semicolons: detect simple assignment like `a = 1` or `a += 1` and suppress output
433
+ // Match assignment ops (=, +=, -=, *=, /=, %=)
434
+ if (/^[A-Za-z_$][A-Za-z0-9_$]*\s*(?:[+\-*/%]?=)\s*[\s\S]+$/.test(trimmedCode)) {
435
+ suppressOutput = true;
436
+ }
437
+ }
438
+ else {
439
+ // Multi-statement: if the user used an explicit `return` anywhere,
440
+ // wrap original code in an IIFE so that `return` works as expected.
441
+ if (/\breturn\b/.test(code)) {
442
+ processedCode = '(function(){' + code + '})()';
443
+ }
444
+ else {
445
+ // Fallback: return the last non-empty statement's value
446
+ const parts = code.split(';');
447
+ let last = parts.length - 1;
448
+ while (last >= 0 && parts[last].trim() === '')
449
+ last--;
450
+ if (last >= 0) {
451
+ const head = parts.slice(0, last).join(';');
452
+ const lastExpr = parts[last];
453
+ // Build a small IIFE that runs the head and returns the last expression's value
454
+ processedCode = '(function(){' + (head ? head + ';' : '') + ' return (' + lastExpr + '); })()';
455
+ }
456
+ }
457
+ }
130
458
  let result;
131
459
  try {
132
- const fn = new Function('with(this){ return (' + code + '); }');
133
- result = fn.call(ctx);
460
+ const fn = new Function('with(this){ return (' + processedCode + '); }');
461
+ result = fn.call(execCtx);
134
462
  }
135
463
  catch (e) {
136
464
  try {
137
- const fn2 = new Function('with(this){ ' + code + ' }');
138
- result = fn2.call(ctx);
465
+ const fn2 = new Function('with(this){ ' + processedCode + ' }');
466
+ result = fn2.call(execCtx);
139
467
  }
140
468
  catch (e2) {
141
469
  return { text: '', end: extracted.end };
@@ -145,7 +473,12 @@ export default class HMLEParser {
145
473
  let finalEnd = extracted.end;
146
474
  if (input[extracted.end] === ')')
147
475
  finalEnd = extracted.end + 1;
148
- return { text: parser.stringifyValue(result), end: finalEnd };
476
+ // If result is non-primitive (object/function) or null/undefined - do not print
477
+ let finalText = '';
478
+ if (!suppressOutput && result != null && typeof result !== 'object' && typeof result !== 'function') {
479
+ finalText = parser.stringifyValue(result);
480
+ }
481
+ return { text: finalText, end: finalEnd };
149
482
  }),
150
483
  // Rule: @( code ) — single-paren expression
151
484
  new HMLEParserRule(/@\(/g, (parser, match, input, scope) => {
@@ -153,23 +486,72 @@ export default class HMLEParser {
153
486
  const extracted = HMLEParser.extractBalancedParens(input, blockStart);
154
487
  if (!extracted)
155
488
  return match[0];
156
- const code = extracted.block;
489
+ const originalCode = extracted.block;
490
+ const code = HMLEParser.transformDefStatements(originalCode);
157
491
  const ctx = parser.buildContext(scope);
492
+ const assignToScope = (prop, value) => {
493
+ ctx[prop] = value;
494
+ if (scope)
495
+ scope[prop] = value;
496
+ else
497
+ parser.variables[prop] = value;
498
+ return value;
499
+ };
500
+ ctx.__hmle_def__ = (prop, value) => assignToScope(prop, value);
501
+ const execCtx = new Proxy(ctx, {
502
+ set(target, prop, value) {
503
+ target[prop] = value;
504
+ return true;
505
+ },
506
+ get(target, prop) {
507
+ return target[prop];
508
+ }
509
+ });
510
+ // Prepare processed code / suppression rules similar to double-paren handling
511
+ let processedCode = code;
512
+ let suppressOutput = false;
513
+ const trimmedCode = code.trim();
514
+ if (trimmedCode.indexOf(';') === -1) {
515
+ if (/^[A-Za-z_$][A-Za-z0-9_$]*\s*(?:[+\-*/%]?=)\s*[\s\S]+$/.test(trimmedCode)) {
516
+ suppressOutput = true;
517
+ }
518
+ }
519
+ else {
520
+ // Multi-statement -> if explicit return used, wrap as-is in IIFE
521
+ if (/\breturn\b/.test(code)) {
522
+ processedCode = '(function(){' + code + '})()';
523
+ }
524
+ else {
525
+ const parts = code.split(';');
526
+ let last = parts.length - 1;
527
+ while (last >= 0 && parts[last].trim() === '')
528
+ last--;
529
+ if (last >= 0) {
530
+ const head = parts.slice(0, last).join(';');
531
+ const lastExpr = parts[last];
532
+ processedCode = '(function(){' + (head ? head + ';' : '') + ' return (' + lastExpr + '); })()';
533
+ }
534
+ }
535
+ }
158
536
  let result;
159
537
  try {
160
- const fn = new Function('with(this){ return (' + code + '); }');
161
- result = fn.call(ctx);
538
+ const fn = new Function('with(this){ return (' + processedCode + '); }');
539
+ result = fn.call(execCtx);
162
540
  }
163
541
  catch (e) {
164
542
  try {
165
- const fn2 = new Function('with(this){ ' + code + ' }');
166
- result = fn2.call(ctx);
543
+ const fn2 = new Function('with(this){ ' + processedCode + ' }');
544
+ result = fn2.call(execCtx);
167
545
  }
168
546
  catch (e2) {
169
547
  return { text: '', end: extracted.end };
170
548
  }
171
549
  }
172
- return { text: parser.stringifyValue(result), end: extracted.end };
550
+ let finalText = '';
551
+ if (!suppressOutput && result != null && typeof result !== 'object' && typeof result !== 'function') {
552
+ finalText = parser.stringifyValue(result);
553
+ }
554
+ return { text: finalText, end: extracted.end };
173
555
  }),
174
556
  ];
175
557
  // Stage 2: DOM rules for attribute processing
@@ -381,34 +763,69 @@ export default class HMLEParser {
381
763
  */
382
764
  parse(content, scope) {
383
765
  let working = content;
384
- for (const rule of HMLEParser.rules) {
385
- const pattern = rule.pattern;
386
- let result = '';
387
- let lastIndex = 0;
388
- let match;
389
- // Reset scanning position
390
- pattern.lastIndex = 0;
391
- while ((match = pattern.exec(working)) !== null) {
392
- // Append text before this match
393
- result += working.slice(lastIndex, match.index);
394
- const out = rule.replacer(this, match, working, scope);
395
- if (typeof out === 'string') {
396
- result += out;
397
- lastIndex = match.index + match[0].length;
398
- }
399
- else {
400
- result += out.text;
401
- lastIndex = out.end;
766
+ const maxPasses = 5;
767
+ let pass = 0;
768
+ const deferredBlocks = new Map();
769
+ this.deferredBlocksStack.push(deferredBlocks);
770
+ try {
771
+ while (pass < maxPasses) {
772
+ let passChanged = false;
773
+ deferredBlocks.clear();
774
+ for (const rule of HMLEParser.rules) {
775
+ const pattern = rule.pattern;
776
+ let result = '';
777
+ let lastIndex = 0;
778
+ let match;
779
+ pattern.lastIndex = 0;
780
+ while ((match = pattern.exec(working)) !== null) {
781
+ result += working.slice(lastIndex, match.index);
782
+ const out = rule.replacer(this, match, working, scope);
783
+ if (typeof out === 'string') {
784
+ result += out;
785
+ lastIndex = match.index + match[0].length;
786
+ }
787
+ else {
788
+ result += out.text;
789
+ lastIndex = out.end;
790
+ }
791
+ pattern.lastIndex = lastIndex;
792
+ }
793
+ result += working.slice(lastIndex);
794
+ if (result !== working) {
795
+ passChanged = true;
796
+ working = result;
797
+ }
402
798
  }
403
- // Continue scanning from the correct position
404
- pattern.lastIndex = lastIndex;
799
+ working = this.restoreDeferredBlocks(working);
800
+ if (!passChanged)
801
+ break;
802
+ pass++;
405
803
  }
406
- // Append tail and update working
407
- result += working.slice(lastIndex);
408
- working = result;
804
+ }
805
+ finally {
806
+ this.deferredBlocksStack.pop();
409
807
  }
410
808
  return working;
411
809
  }
810
+ deferBlock(content) {
811
+ const stack = this.deferredBlocksStack[this.deferredBlocksStack.length - 1];
812
+ if (!stack)
813
+ return content;
814
+ const token = `__HMLE_PENDING_BLOCK_${this.deferredBlockCounter++}__`;
815
+ stack.set(token, content);
816
+ return token;
817
+ }
818
+ restoreDeferredBlocks(text) {
819
+ const stack = this.deferredBlocksStack[this.deferredBlocksStack.length - 1];
820
+ if (!stack || stack.size === 0)
821
+ return text;
822
+ let restored = text;
823
+ for (const [token, content] of stack.entries()) {
824
+ restored = restored.replace(token, content);
825
+ }
826
+ stack.clear();
827
+ return restored;
828
+ }
412
829
  /**
413
830
  * Stage 2: Process DOM rules on a fragment
414
831
  * Walks all elements and applies DOM rules based on attributes
@@ -1 +1 @@
1
- {"version":3,"file":"HMLEParser.js","sourceRoot":"","sources":["../../src/foundation/HMLEParser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,8BAA8B;AAC9B,MAAM,cAAc;IACT,OAAO,CAAS;IAChB,QAAQ,CAAqI;IAEpJ,YACI,OAAe,EACf,QAA4I;QAE5I,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC;CACJ;AAED,oDAAoD;AACpD,MAAM,WAAW;IACN,WAAW,CAAS;IACpB,SAAS,CAA2I;IAE3J,YACI,WAAmB,EACnB,SAAmJ;QAEnJ,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/B,CAAC;CACJ;AAED,MAAM,CAAC,OAAO,OAAO,UAAU;IAC3B,kCAAkC;IAC1B,MAAM,CAAC,qBAAqB,CAAC,OAAe,EAAE,KAAa;QAC/D,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QACxC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QAClB,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACrC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG;gBAAE,KAAK,EAAE,CAAC;iBAC3B,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG;gBAAE,KAAK,EAAE,CAAC;YACrC,CAAC,EAAE,CAAC;QACR,CAAC;QACD,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC7B,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;IAC9D,CAAC;IAED,uCAAuC;IAC/B,MAAM,CAAC,qBAAqB,CAAC,OAAe,EAAE,KAAa;QAC/D,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QACxC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QAClB,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACrC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG;gBAAE,KAAK,EAAE,CAAC;iBAC3B,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG;gBAAE,KAAK,EAAE,CAAC;YACrC,CAAC,EAAE,CAAC;QACR,CAAC;QACD,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC7B,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;IAC9D,CAAC;IAED,sCAAsC;IAC9B,MAAM,CAAC,KAAK,GAAqB;QACrC,qCAAqC;QACrC,oGAAoG;QACpG,YAAY;QACZ,iCAAiC;QACjC,sCAAsC;QACtC,2BAA2B;QAC3B,IAAI,cAAc,CAAC,mIAAmI,EAClJ,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YAC5B,2EAA2E;YAC3E,sEAAsE;YACtE,kEAAkE;YAClE,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5B,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC9B,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,kBAAkB;YAExE,MAAM,SAAS,GAAG,UAAU,CAAC,qBAAqB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YACtE,IAAI,CAAC,SAAS;gBAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;YAEhC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;YAC9B,kEAAkE;YAClE,IAAI,GAAG,GAAU,EAAE,CAAC;YACpB,kEAAkE;YAClE,IAAI,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC7B,MAAM,CAAC,GAAG,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;gBACrC,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9D,CAAC;iBAAM,CAAC;gBACJ,MAAM,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;gBAC/D,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACrD,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;oBAC5C,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;gBACjD,CAAC;qBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACjC,GAAG,GAAG,QAAQ,CAAC;gBACnB,CAAC;qBAAM,CAAC;oBACJ,GAAG,GAAG,EAAE,CAAC;gBACb,CAAC;YACL,CAAC;YAED,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAClC,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;gBACpB,IAAI,SAA8B,CAAC;gBACnC,6EAA6E;gBAC7E,IAAI,WAAW,EAAE,CAAC;oBACd,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;gBACnF,CAAC;qBAAM,CAAC;oBACJ,yCAAyC;oBACzC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;gBACjE,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;YAC/C,CAAC;YAED,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,CAAC;QAC1D,CAAC,CACJ;QAED,2DAA2D;QAC3D,IAAI,cAAc,CAAC,QAAQ,EACvB,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YAC5B,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,sBAAsB;YAE5E,MAAM,SAAS,GAAG,UAAU,CAAC,qBAAqB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YACtE,IAAI,CAAC,SAAS;gBAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;YAEhC,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC;YAC7B,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACvC,IAAI,MAAW,CAAC;YAChB,IAAI,CAAC;gBACD,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,sBAAsB,GAAG,IAAI,GAAG,MAAM,CAAC,CAAC;gBAChE,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC1B,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACT,IAAI,CAAC;oBACD,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,cAAc,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;oBACvD,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC3B,CAAC;gBAAC,OAAO,EAAE,EAAE,CAAC;oBACV,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,CAAC;gBAC5C,CAAC;YACL,CAAC;YAED,4BAA4B;YAC5B,IAAI,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC;YAC7B,IAAI,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,GAAG;gBAAE,QAAQ,GAAG,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC;YAE/D,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;QAClE,CAAC,CACJ;QAED,4CAA4C;QAC5C,IAAI,cAAc,CAAC,MAAM,EACrB,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YAC5B,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,gBAAgB;YAEtE,MAAM,SAAS,GAAG,UAAU,CAAC,qBAAqB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YACtE,IAAI,CAAC,SAAS;gBAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;YAEhC,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC;YAC7B,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACvC,IAAI,MAAW,CAAC;YAChB,IAAI,CAAC;gBACD,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,sBAAsB,GAAG,IAAI,GAAG,MAAM,CAAC,CAAC;gBAChE,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC1B,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACT,IAAI,CAAC;oBACD,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,cAAc,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;oBACvD,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC3B,CAAC;gBAAC,OAAO,EAAE,EAAE,CAAC;oBACV,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,CAAC;gBAC5C,CAAC;YACL,CAAC;YAED,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,CAAC;QACvE,CAAC,CACJ;KACJ,CAAC;IAEF,8CAA8C;IACtC,MAAM,CAAC,QAAQ,GAAkB;QACrC,0DAA0D;QAC1D,yCAAyC;QACzC,iFAAiF;QACjF,IAAI,WAAW,CAAC,sBAAsB,EAClC,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YACnD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,qBAAqB;YAC/D,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,wBAAwB;YAChD,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAEvC,MAAM,OAAO,GAAG,CAAC,KAAY,EAAE,EAAE;gBAC7B,wBAAwB;gBACxB,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC5E,IAAI,CAAC;oBACD,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,cAAc,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;oBACtD,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACtB,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACT,OAAO,CAAC,KAAK,CAAC,4BAA4B,SAAS,YAAY,EAAE,CAAC,CAAC,CAAC;gBACxE,CAAC;YACL,CAAC,CAAC;YAEF,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC7C,oCAAoC;QACxC,CAAC,CACJ;QAED,wDAAwD;QACxD,qCAAqC;QACrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;YA4BI;QAEJ,+CAA+C;QAC/C,+BAA+B;QAC/B,IAAI,WAAW,CAAC,YAAY,EACxB,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YACnD,yEAAyE;YACzE,yEAAyE;YACzE,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACvC,IAAI,OAA2B,CAAC;YAChC,IAAI,SAAS,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBACvC,MAAM,SAAS,GAAG,MAAM,CAAC,iBAAiB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;gBAC3D,IAAI,OAAO,SAAS,KAAK,QAAQ;oBAAE,OAAO,GAAG,SAAS,CAAC;qBAClD,IAAI,SAAS,IAAI,IAAI;oBAAE,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;;oBACnD,OAAO,GAAG,SAAS,CAAC,CAAC,iCAAiC;YAC/D,CAAC;YAED,IAAI,OAAO,EAAE,CAAC;gBACV,IAAI,KAAK,EAAE,CAAC;oBACP,KAAa,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;gBACtC,CAAC;qBAAM,CAAC;oBACJ,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;gBACxC,CAAC;YACL,CAAC;YAED,2EAA2E;YAC3E,qCAAqC;QACzC,CAAC,CACJ;QAED,0DAA0D;QAC1D,qCAAqC;QACrC;;;;;;;;;;;;;;YAcI;QAEJ,sDAAsD;QACtD,qCAAqC;QACrC;;;;;;;;;;;;YAYI;QAEJ,iDAAiD;QACjD,8BAA8B;QAC9B;;;;;;;;;;;;;YAaI;KACP,CAAC;IAEK,SAAS,GAA4B,EAAE,CAAC;IAE/C;;OAEG;IACI,WAAW,CAAC,IAAY,EAAE,KAAc;QAC3C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QAC7B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,KAA2B;QAC5C,MAAM,GAAG,GAAwB,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACnE,IAAI,KAAK,EAAE,CAAC;YACR,sBAAsB;YACtB,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC1B,+CAA+C;YAC/C,IAAI,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YACzC,OAAO,KAAK,IAAI,KAAK,KAAK,MAAM,CAAC,SAAS,EAAE,CAAC;gBACzC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;oBAClD,IAAI,GAAG,KAAK,aAAa,IAAI,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,UAAU,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC;wBAC7E,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACtC,CAAC;gBACL,CAAC;gBACD,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YACzC,CAAC;QACL,CAAC;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAED;;OAEG;IACI,iBAAiB,CAAC,IAAY,EAAE,KAA2B;QAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACjE,IAAI,GAAG,GAAQ,QAAQ,CAAC;QACxB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,IAAI,GAAG,IAAI,IAAI;gBAAE,OAAO,SAAS,CAAC;YAClC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,GAAQ;QAC3B,IAAI,GAAG,IAAI,IAAI;YAAE,OAAO,EAAE,CAAC;QAC3B,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,GAAG,CAAC;QACxC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,IAAY,EAAE,GAAwB;QAC5D,IAAI,CAAC;YACD,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,sBAAsB,GAAG,IAAI,GAAG,MAAM,CAAC,CAAC;YAChE,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,IAAI,CAAC;gBACD,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,cAAc,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;gBACvD,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACzB,CAAC;YAAC,OAAO,EAAE,EAAE,CAAC;gBACV,OAAO,SAAS,CAAC;YACrB,CAAC;QACL,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,OAAe,EAAE,KAA2B;QACrD,IAAI,OAAO,GAAG,OAAO,CAAC;QAEtB,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;YAClC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAC7B,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,SAAS,GAAG,CAAC,CAAC;YAClB,IAAI,KAA6B,CAAC;YAElC,0BAA0B;YAC1B,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;YACtB,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC9C,gCAAgC;gBAChC,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;gBAEhD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;gBAEvD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;oBAC1B,MAAM,IAAI,GAAG,CAAC;oBACd,SAAS,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBAC9C,CAAC;qBAAM,CAAC;oBACJ,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC;oBACnB,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC;gBACxB,CAAC;gBAED,8CAA8C;gBAC9C,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;YAClC,CAAC;YAED,iCAAiC;YACjC,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACnC,OAAO,GAAG,MAAM,CAAC;QACrB,CAAC;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;IAED;;;OAGG;IACK,eAAe,CAAC,QAAoC,EAAE,KAA2B;QACrF,MAAM,QAAQ,GAAG,QAAQ,YAAY,gBAAgB;YACjD,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;YAC5C,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAEhE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC7B,gEAAgE;YAChE,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAE7C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACvB,sBAAsB;gBACtB,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;oBACrC,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC;oBAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC/C,IAAI,KAAK,EAAE,CAAC;wBACR,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;wBACnE,MAAM,CAAC,8BAA8B;oBACzC,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACI,UAAU,CAAC,OAAe,EAAE,KAA2B;QAC1D,6BAA6B;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACpD,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC;QAElC,0BAA0B;QAC1B,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAEtC,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED;;;;;OAKG;IACI,cAAc,CAA8B,OAAe,EAAE,KAA2B;QAC3F,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACjD,OAAO,QAAQ,CAAC,iBAA6B,CAAC;IAClD,CAAC;IAED;;;;;;OAMG;IACI,cAAc,CAAC,OAAe,EAAE,MAAe,EAAE,KAA2B;QAC/E,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACjD,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;;;;OAMG;IACI,eAAe,CAAC,OAAe,EAAE,OAAgB,EAAE,KAA2B;QACjF,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACjD,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC;QACvB,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC9B,OAAO,OAAO,CAAC;IACnB,CAAC;IAED;;;OAGG;IACI,aAAa,CAAC,OAAgB,EAAE,KAA2B;QAC9D,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACrC,OAAO,OAAO,CAAC;IACnB,CAAC"}
1
+ {"version":3,"file":"HMLEParser.js","sourceRoot":"","sources":["../../src/foundation/HMLEParser.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reidelsaltres/pureper",
3
- "version": "0.1.123",
3
+ "version": "0.1.124",
4
4
  "description": "Minimal library extracted from the Pureper SPA foundation — utilities and base classes for components/pages.",
5
5
  "type": "module",
6
6
  "main": "out/src/index.js",
@@ -40,6 +40,8 @@ class HMLEDOMRule {
40
40
  }
41
41
 
42
42
  export default class HMLEParser {
43
+ private deferredBlocksStack: Array<Map<string, string>> = [];
44
+ private deferredBlockCounter = 0;
43
45
  // Extract balanced braces { ... }
44
46
  private static extractBalancedBraces(content: string, start: number): { block: string; end: number } | null {
45
47
  if (content[start] !== '{') return null;
@@ -68,6 +70,274 @@ export default class HMLEParser {
68
70
  return { block: content.slice(start + 1, i - 1), end: i };
69
71
  }
70
72
 
73
+ private static isIdentifierStart(ch: string): boolean {
74
+ return /[A-Za-z_$]/.test(ch);
75
+ }
76
+
77
+ private static isIdentifierPart(ch: string): boolean {
78
+ return /[A-Za-z0-9_$]/.test(ch);
79
+ }
80
+
81
+ private static transformDefStatements(code: string): string {
82
+ if (!code.includes('def')) return code;
83
+
84
+ let result = '';
85
+ let i = 0;
86
+ const len = code.length;
87
+ let inSingle = false;
88
+ let inDouble = false;
89
+ let inTemplate = false;
90
+ let inLineComment = false;
91
+ let inBlockComment = false;
92
+ let escape = false;
93
+
94
+ while (i < len) {
95
+ const ch = code[i];
96
+
97
+ if (inLineComment) {
98
+ result += ch;
99
+ if (ch === '\n') inLineComment = false;
100
+ i++;
101
+ continue;
102
+ }
103
+
104
+ if (inBlockComment) {
105
+ result += ch;
106
+ if (ch === '*' && code[i + 1] === '/') {
107
+ result += '/';
108
+ i += 2;
109
+ inBlockComment = false;
110
+ } else {
111
+ i++;
112
+ }
113
+ continue;
114
+ }
115
+
116
+ if (inSingle) {
117
+ result += ch;
118
+ if (!escape && ch === '\\') {
119
+ escape = true;
120
+ } else {
121
+ if (!escape && ch === "'") inSingle = false;
122
+ escape = false;
123
+ }
124
+ i++;
125
+ continue;
126
+ }
127
+
128
+ if (inDouble) {
129
+ result += ch;
130
+ if (!escape && ch === '\\') {
131
+ escape = true;
132
+ } else {
133
+ if (!escape && ch === '"') inDouble = false;
134
+ escape = false;
135
+ }
136
+ i++;
137
+ continue;
138
+ }
139
+
140
+ if (inTemplate) {
141
+ result += ch;
142
+ if (!escape && ch === '\\') {
143
+ escape = true;
144
+ } else {
145
+ if (!escape && ch === '`') inTemplate = false;
146
+ escape = false;
147
+ }
148
+ i++;
149
+ continue;
150
+ }
151
+
152
+ if (ch === '/' && code[i + 1] === '/') {
153
+ inLineComment = true;
154
+ result += ch;
155
+ i++;
156
+ continue;
157
+ }
158
+
159
+ if (ch === '/' && code[i + 1] === '*') {
160
+ inBlockComment = true;
161
+ result += ch;
162
+ i++;
163
+ continue;
164
+ }
165
+
166
+ if (ch === "'") {
167
+ inSingle = true;
168
+ result += ch;
169
+ i++;
170
+ continue;
171
+ }
172
+
173
+ if (ch === '"') {
174
+ inDouble = true;
175
+ result += ch;
176
+ i++;
177
+ continue;
178
+ }
179
+
180
+ if (ch === '`') {
181
+ inTemplate = true;
182
+ result += ch;
183
+ i++;
184
+ continue;
185
+ }
186
+
187
+ if (code.startsWith('def', i) && (i === 0 || !HMLEParser.isIdentifierPart(code[i - 1])) && (i + 3 >= len || /\s/.test(code[i + 3]))) {
188
+ const defResult = HMLEParser.extractDefStatement(code, i);
189
+ if (defResult) {
190
+ result += defResult.replacement;
191
+ i = defResult.nextIndex;
192
+ continue;
193
+ }
194
+ }
195
+
196
+ result += ch;
197
+ i++;
198
+ }
199
+
200
+ return result;
201
+ }
202
+
203
+ private static extractDefStatement(code: string, start: number): { replacement: string; nextIndex: number } | null {
204
+ const len = code.length;
205
+ let i = start + 3;
206
+
207
+ while (i < len && /\s/.test(code[i])) i++;
208
+ if (i >= len || !HMLEParser.isIdentifierStart(code[i])) return null;
209
+
210
+ const nameStart = i;
211
+ i++;
212
+ while (i < len && HMLEParser.isIdentifierPart(code[i])) i++;
213
+ const name = code.slice(nameStart, i);
214
+
215
+ while (i < len && /\s/.test(code[i])) i++;
216
+ if (i >= len || code[i] !== '=') return null;
217
+ i++; // skip '='
218
+ while (i < len && /\s/.test(code[i])) i++;
219
+
220
+ const exprInfo = HMLEParser.extractDefExpression(code, i);
221
+ if (!exprInfo) return null;
222
+
223
+ const replacement = `(void __hmle_def__("${name}", (${exprInfo.expression})))` + (exprInfo.terminatedWithSemicolon ? ';' : '');
224
+ return { replacement, nextIndex: exprInfo.nextIndex };
225
+ }
226
+
227
+ private static extractDefExpression(code: string, start: number): { expression: string; nextIndex: number; terminatedWithSemicolon: boolean } | null {
228
+ const len = code.length;
229
+ let i = start;
230
+ let depthParen = 0;
231
+ let depthBrace = 0;
232
+ let depthBracket = 0;
233
+ let inSingle = false;
234
+ let inDouble = false;
235
+ let inTemplate = false;
236
+ let inLineComment = false;
237
+ let inBlockComment = false;
238
+ let escape = false;
239
+
240
+ while (i < len) {
241
+ const ch = code[i];
242
+
243
+ if (inLineComment) {
244
+ if (ch === '\n') inLineComment = false;
245
+ i++;
246
+ continue;
247
+ }
248
+
249
+ if (inBlockComment) {
250
+ if (ch === '*' && code[i + 1] === '/') {
251
+ i += 2;
252
+ inBlockComment = false;
253
+ } else {
254
+ i++;
255
+ }
256
+ continue;
257
+ }
258
+
259
+ if (inSingle) {
260
+ if (!escape && ch === '\\') {
261
+ escape = true;
262
+ } else {
263
+ if (!escape && ch === "'") inSingle = false;
264
+ escape = false;
265
+ }
266
+ i++;
267
+ continue;
268
+ }
269
+
270
+ if (inDouble) {
271
+ if (!escape && ch === '\\') {
272
+ escape = true;
273
+ } else {
274
+ if (!escape && ch === '"') inDouble = false;
275
+ escape = false;
276
+ }
277
+ i++;
278
+ continue;
279
+ }
280
+
281
+ if (inTemplate) {
282
+ if (!escape && ch === '\\') {
283
+ escape = true;
284
+ } else {
285
+ if (!escape && ch === '`') inTemplate = false;
286
+ escape = false;
287
+ }
288
+ i++;
289
+ continue;
290
+ }
291
+
292
+ if (ch === '/' && code[i + 1] === '/') {
293
+ inLineComment = true;
294
+ i += 2;
295
+ continue;
296
+ }
297
+
298
+ if (ch === '/' && code[i + 1] === '*') {
299
+ inBlockComment = true;
300
+ i += 2;
301
+ continue;
302
+ }
303
+
304
+ if (ch === "'") {
305
+ inSingle = true;
306
+ i++;
307
+ continue;
308
+ }
309
+
310
+ if (ch === '"') {
311
+ inDouble = true;
312
+ i++;
313
+ continue;
314
+ }
315
+
316
+ if (ch === '`') {
317
+ inTemplate = true;
318
+ i++;
319
+ continue;
320
+ }
321
+
322
+ if (ch === '(') depthParen++;
323
+ else if (ch === ')') depthParen = Math.max(0, depthParen - 1);
324
+ else if (ch === '{') depthBrace++;
325
+ else if (ch === '}') depthBrace = Math.max(0, depthBrace - 1);
326
+ else if (ch === '[') depthBracket++;
327
+ else if (ch === ']') depthBracket = Math.max(0, depthBracket - 1);
328
+
329
+ if (ch === ';' && depthParen === 0 && depthBrace === 0 && depthBracket === 0) {
330
+ const expression = code.slice(start, i).trim();
331
+ return { expression, nextIndex: i + 1, terminatedWithSemicolon: true };
332
+ }
333
+
334
+ i++;
335
+ }
336
+
337
+ const expression = code.slice(start).trim();
338
+ return { expression, nextIndex: len, terminatedWithSemicolon: false };
339
+ }
340
+
71
341
  // Predefined rules processed in order
72
342
  private static rules: HMLEParserRule[] = [
73
343
  // Rule: @for (item in items) { ... }
@@ -90,24 +360,37 @@ export default class HMLEParser {
90
360
  if (!extracted) return match[0];
91
361
 
92
362
  const inner = extracted.block;
93
- // Support numeric literal or expression that resolves to a number
363
+ // Support numeric literal or expression that resolves to a number/iterable
94
364
  let arr: any[] = [];
365
+ let unresolvedIterable = false;
95
366
  // If the iterable part is a plain number literal, use it directly
96
367
  if (/^\d+$/.test(iterableExpr)) {
97
368
  const n = parseInt(iterableExpr, 10);
98
369
  arr = Array.from({ length: Math.max(0, n) }, (_, i) => i);
99
370
  } else {
100
371
  const resolved = parser.resolveExpression(iterableExpr, scope);
101
- if (typeof resolved === 'number' && isFinite(resolved)) {
372
+ if (resolved == null) {
373
+ unresolvedIterable = true;
374
+ } else if (typeof resolved === 'number' && isFinite(resolved)) {
102
375
  const n = Math.max(0, Math.floor(resolved));
103
376
  arr = Array.from({ length: n }, (_, i) => i);
104
377
  } else if (Array.isArray(resolved)) {
105
378
  arr = resolved;
379
+ } else if (typeof (resolved as any)[Symbol.iterator] === 'function') {
380
+ arr = Array.from(resolved as Iterable<any>);
381
+ } else if (typeof resolved === 'object' && typeof (resolved as any).length === 'number') {
382
+ arr = Array.from(resolved as ArrayLike<any>);
106
383
  } else {
107
384
  arr = [];
108
385
  }
109
386
  }
110
387
 
388
+ if (unresolvedIterable) {
389
+ const fullBlock = input.slice(match.index, extracted.end);
390
+ const placeholder = parser.deferBlock(fullBlock);
391
+ return { text: placeholder, end: extracted.end };
392
+ }
393
+
111
394
  const parts: string[] = [];
112
395
  for (let i = 0; i < arr.length; i++) {
113
396
  const item = arr[i];
@@ -134,16 +417,66 @@ export default class HMLEParser {
134
417
  const extracted = HMLEParser.extractBalancedParens(input, blockStart);
135
418
  if (!extracted) return match[0];
136
419
 
137
- const code = extracted.block;
420
+ const originalCode = extracted.block;
421
+ const code = HMLEParser.transformDefStatements(originalCode);
138
422
  const ctx = parser.buildContext(scope);
423
+ const assignToScope = (prop: string, value: any) => {
424
+ (ctx as any)[prop] = value;
425
+ if (scope) (scope as any)[prop] = value;
426
+ else parser.variables[prop] = value;
427
+ return value;
428
+ };
429
+ (ctx as any).__hmle_def__ = (prop: string, value: any) => assignToScope(prop, value);
430
+ const execCtx = new Proxy(ctx, {
431
+ set(target, prop, value) {
432
+ (target as any)[prop as any] = value;
433
+ return true;
434
+ },
435
+ get(target, prop) {
436
+ return (target as any)[prop as any];
437
+ }
438
+ });
439
+ // Prepare code transformation rules:
440
+ // - If the code is a single assignment (no semicolons), execute it but suppress output
441
+ // - If code contains multiple statements separated by semicolons, transform so the
442
+ // last non-empty statement becomes a returned value so it is printed
443
+ let processedCode = code;
444
+ let suppressOutput = false;
445
+ const trimmedCode = code.trim();
446
+
447
+ if (trimmedCode.indexOf(';') === -1) {
448
+ // No semicolons: detect simple assignment like `a = 1` or `a += 1` and suppress output
449
+ // Match assignment ops (=, +=, -=, *=, /=, %=)
450
+ if (/^[A-Za-z_$][A-Za-z0-9_$]*\s*(?:[+\-*/%]?=)\s*[\s\S]+$/.test(trimmedCode)) {
451
+ suppressOutput = true;
452
+ }
453
+ } else {
454
+ // Multi-statement: if the user used an explicit `return` anywhere,
455
+ // wrap original code in an IIFE so that `return` works as expected.
456
+ if (/\breturn\b/.test(code)) {
457
+ processedCode = '(function(){' + code + '})()';
458
+ } else {
459
+ // Fallback: return the last non-empty statement's value
460
+ const parts = code.split(';');
461
+ let last = parts.length - 1;
462
+ while (last >= 0 && parts[last].trim() === '') last--;
463
+ if (last >= 0) {
464
+ const head = parts.slice(0, last).join(';');
465
+ const lastExpr = parts[last];
466
+ // Build a small IIFE that runs the head and returns the last expression's value
467
+ processedCode = '(function(){' + (head ? head + ';' : '') + ' return (' + lastExpr + '); })()';
468
+ }
469
+ }
470
+ }
471
+
139
472
  let result: any;
140
473
  try {
141
- const fn = new Function('with(this){ return (' + code + '); }');
142
- result = fn.call(ctx);
474
+ const fn = new Function('with(this){ return (' + processedCode + '); }');
475
+ result = fn.call(execCtx);
143
476
  } catch (e) {
144
477
  try {
145
- const fn2 = new Function('with(this){ ' + code + ' }');
146
- result = fn2.call(ctx);
478
+ const fn2 = new Function('with(this){ ' + processedCode + ' }');
479
+ result = fn2.call(execCtx);
147
480
  } catch (e2) {
148
481
  return { text: '', end: extracted.end };
149
482
  }
@@ -153,7 +486,12 @@ export default class HMLEParser {
153
486
  let finalEnd = extracted.end;
154
487
  if (input[extracted.end] === ')') finalEnd = extracted.end + 1;
155
488
 
156
- return { text: parser.stringifyValue(result), end: finalEnd };
489
+ // If result is non-primitive (object/function) or null/undefined - do not print
490
+ let finalText = '';
491
+ if (!suppressOutput && result != null && typeof result !== 'object' && typeof result !== 'function') {
492
+ finalText = parser.stringifyValue(result);
493
+ }
494
+ return { text: finalText, end: finalEnd };
157
495
  }
158
496
  ),
159
497
 
@@ -165,22 +503,68 @@ export default class HMLEParser {
165
503
  const extracted = HMLEParser.extractBalancedParens(input, blockStart);
166
504
  if (!extracted) return match[0];
167
505
 
168
- const code = extracted.block;
506
+ const originalCode = extracted.block;
507
+ const code = HMLEParser.transformDefStatements(originalCode);
169
508
  const ctx = parser.buildContext(scope);
509
+ const assignToScope = (prop: string, value: any) => {
510
+ (ctx as any)[prop] = value;
511
+ if (scope) (scope as any)[prop] = value;
512
+ else parser.variables[prop] = value;
513
+ return value;
514
+ };
515
+ (ctx as any).__hmle_def__ = (prop: string, value: any) => assignToScope(prop, value);
516
+ const execCtx = new Proxy(ctx, {
517
+ set(target, prop, value) {
518
+ (target as any)[prop as any] = value;
519
+ return true;
520
+ },
521
+ get(target, prop) {
522
+ return (target as any)[prop as any];
523
+ }
524
+ });
525
+ // Prepare processed code / suppression rules similar to double-paren handling
526
+ let processedCode = code;
527
+ let suppressOutput = false;
528
+ const trimmedCode = code.trim();
529
+
530
+ if (trimmedCode.indexOf(';') === -1) {
531
+ if (/^[A-Za-z_$][A-Za-z0-9_$]*\s*(?:[+\-*/%]?=)\s*[\s\S]+$/.test(trimmedCode)) {
532
+ suppressOutput = true;
533
+ }
534
+ } else {
535
+ // Multi-statement -> if explicit return used, wrap as-is in IIFE
536
+ if (/\breturn\b/.test(code)) {
537
+ processedCode = '(function(){' + code + '})()';
538
+ } else {
539
+ const parts = code.split(';');
540
+ let last = parts.length - 1;
541
+ while (last >= 0 && parts[last].trim() === '') last--;
542
+ if (last >= 0) {
543
+ const head = parts.slice(0, last).join(';');
544
+ const lastExpr = parts[last];
545
+ processedCode = '(function(){' + (head ? head + ';' : '') + ' return (' + lastExpr + '); })()';
546
+ }
547
+ }
548
+ }
549
+
170
550
  let result: any;
171
551
  try {
172
- const fn = new Function('with(this){ return (' + code + '); }');
173
- result = fn.call(ctx);
552
+ const fn = new Function('with(this){ return (' + processedCode + '); }');
553
+ result = fn.call(execCtx);
174
554
  } catch (e) {
175
555
  try {
176
- const fn2 = new Function('with(this){ ' + code + ' }');
177
- result = fn2.call(ctx);
556
+ const fn2 = new Function('with(this){ ' + processedCode + ' }');
557
+ result = fn2.call(execCtx);
178
558
  } catch (e2) {
179
559
  return { text: '', end: extracted.end };
180
560
  }
181
561
  }
182
562
 
183
- return { text: parser.stringifyValue(result), end: extracted.end };
563
+ let finalText = '';
564
+ if (!suppressOutput && result != null && typeof result !== 'object' && typeof result !== 'function') {
565
+ finalText = parser.stringifyValue(result);
566
+ }
567
+ return { text: finalText, end: extracted.end };
184
568
  }
185
569
  ),
186
570
  ];
@@ -404,41 +788,78 @@ export default class HMLEParser {
404
788
  */
405
789
  public parse(content: string, scope?: Record<string, any>): string {
406
790
  let working = content;
791
+ const maxPasses = 5;
792
+ let pass = 0;
793
+ const deferredBlocks = new Map<string, string>();
794
+ this.deferredBlocksStack.push(deferredBlocks);
407
795
 
408
- for (const rule of HMLEParser.rules) {
409
- const pattern = rule.pattern;
410
- let result = '';
411
- let lastIndex = 0;
412
- let match: RegExpExecArray | null;
796
+ try {
797
+ while (pass < maxPasses) {
798
+ let passChanged = false;
799
+ deferredBlocks.clear();
800
+
801
+ for (const rule of HMLEParser.rules) {
802
+ const pattern = rule.pattern;
803
+ let result = '';
804
+ let lastIndex = 0;
805
+ let match: RegExpExecArray | null;
806
+
807
+ pattern.lastIndex = 0;
808
+ while ((match = pattern.exec(working)) !== null) {
809
+ result += working.slice(lastIndex, match.index);
810
+
811
+ const out = rule.replacer(this, match, working, scope);
812
+
813
+ if (typeof out === 'string') {
814
+ result += out;
815
+ lastIndex = match.index + match[0].length;
816
+ } else {
817
+ result += out.text;
818
+ lastIndex = out.end;
819
+ }
413
820
 
414
- // Reset scanning position
415
- pattern.lastIndex = 0;
416
- while ((match = pattern.exec(working)) !== null) {
417
- // Append text before this match
418
- result += working.slice(lastIndex, match.index);
821
+ pattern.lastIndex = lastIndex;
822
+ }
419
823
 
420
- const out = rule.replacer(this, match, working, scope);
824
+ result += working.slice(lastIndex);
421
825
 
422
- if (typeof out === 'string') {
423
- result += out;
424
- lastIndex = match.index + match[0].length;
425
- } else {
426
- result += out.text;
427
- lastIndex = out.end;
826
+ if (result !== working) {
827
+ passChanged = true;
828
+ working = result;
829
+ }
428
830
  }
429
831
 
430
- // Continue scanning from the correct position
431
- pattern.lastIndex = lastIndex;
432
- }
832
+ working = this.restoreDeferredBlocks(working);
433
833
 
434
- // Append tail and update working
435
- result += working.slice(lastIndex);
436
- working = result;
834
+ if (!passChanged) break;
835
+ pass++;
836
+ }
837
+ } finally {
838
+ this.deferredBlocksStack.pop();
437
839
  }
438
840
 
439
841
  return working;
440
842
  }
441
843
 
844
+ private deferBlock(content: string): string {
845
+ const stack = this.deferredBlocksStack[this.deferredBlocksStack.length - 1];
846
+ if (!stack) return content;
847
+ const token = `__HMLE_PENDING_BLOCK_${this.deferredBlockCounter++}__`;
848
+ stack.set(token, content);
849
+ return token;
850
+ }
851
+
852
+ private restoreDeferredBlocks(text: string): string {
853
+ const stack = this.deferredBlocksStack[this.deferredBlocksStack.length - 1];
854
+ if (!stack || stack.size === 0) return text;
855
+ let restored = text;
856
+ for (const [token, content] of stack.entries()) {
857
+ restored = restored.replace(token, content);
858
+ }
859
+ stack.clear();
860
+ return restored;
861
+ }
862
+
442
863
  /**
443
864
  * Stage 2: Process DOM rules on a fragment
444
865
  * Walks all elements and applies DOM rules based on attributes