coffeehaml 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.
Files changed (53) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +175 -0
  3. package/dist/ast.d.ts +107 -0
  4. package/dist/ast.d.ts.map +1 -0
  5. package/dist/ast.js +125 -0
  6. package/dist/ast.js.map +1 -0
  7. package/dist/cli.d.ts +3 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +53 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/compiler.d.ts +10 -0
  12. package/dist/compiler.d.ts.map +1 -0
  13. package/dist/compiler.js +83 -0
  14. package/dist/compiler.js.map +1 -0
  15. package/dist/emitter.d.ts +4 -0
  16. package/dist/emitter.d.ts.map +1 -0
  17. package/dist/emitter.js +464 -0
  18. package/dist/emitter.js.map +1 -0
  19. package/dist/errors.d.ts +3 -0
  20. package/dist/errors.d.ts.map +1 -0
  21. package/dist/errors.js +2 -0
  22. package/dist/errors.js.map +1 -0
  23. package/dist/expressions.d.ts +10 -0
  24. package/dist/expressions.d.ts.map +1 -0
  25. package/dist/expressions.js +70 -0
  26. package/dist/expressions.js.map +1 -0
  27. package/dist/index.d.ts +4 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +3 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/lexer.d.ts +29 -0
  32. package/dist/lexer.d.ts.map +1 -0
  33. package/dist/lexer.js +315 -0
  34. package/dist/lexer.js.map +1 -0
  35. package/dist/parser.d.ts +4 -0
  36. package/dist/parser.d.ts.map +1 -0
  37. package/dist/parser.js +408 -0
  38. package/dist/parser.js.map +1 -0
  39. package/dist/types.d.ts +65 -0
  40. package/dist/types.d.ts.map +1 -0
  41. package/dist/types.js +12 -0
  42. package/dist/types.js.map +1 -0
  43. package/dist/vite-plugin.d.ts +7 -0
  44. package/dist/vite-plugin.d.ts.map +1 -0
  45. package/dist/vite-plugin.js +44 -0
  46. package/dist/vite-plugin.js.map +1 -0
  47. package/docs/README.md +110 -0
  48. package/docs/architecture.md +619 -0
  49. package/docs/ast.md +413 -0
  50. package/docs/examples.md +719 -0
  51. package/docs/grammar.md +432 -0
  52. package/docs/index.html +129 -0
  53. package/package.json +61 -0
@@ -0,0 +1,464 @@
1
+ import { Element, ImplicitDiv, Text, Output, ControlFlow, Comment, Filter, Doctype, Expression, } from './ast.js';
2
+ import { compileExpression } from './expressions.js';
3
+ // ─── Emit State ────────────────────────────────────────────
4
+ class EmitState {
5
+ constructor(options = {}) {
6
+ this.indent = 0;
7
+ this.output = '';
8
+ this.needsFragment = false;
9
+ this.needsImport = false;
10
+ this.sourceMapLines = [];
11
+ this.options = options;
12
+ }
13
+ emit(s) {
14
+ if (s) {
15
+ this.output += ' '.repeat(this.indent * 2) + s;
16
+ }
17
+ }
18
+ emitLine(s = '') {
19
+ if (s) {
20
+ this.output += ' '.repeat(this.indent * 2) + s;
21
+ }
22
+ this.output += '\n';
23
+ }
24
+ indentBlock(fn) {
25
+ this.indent++;
26
+ fn();
27
+ this.indent--;
28
+ }
29
+ }
30
+ // ─── Public API ────────────────────────────────────────────
31
+ export function emit(ast, options = {}) {
32
+ const state = new EmitState(options);
33
+ // Emit import if needed
34
+ state.emitLine(`import { jsx, jsxs, Fragment } from "${options.jsxRuntime || 'react/jsx-runtime'}";`);
35
+ state.emitLine();
36
+ // Emit module body
37
+ emitNodes(ast.children, state, true);
38
+ return { code: state.output };
39
+ }
40
+ // ─── Node Emitters ─────────────────────────────────────────
41
+ function emitNodes(nodes, state, isRoot = false) {
42
+ for (let i = 0; i < nodes.length; i++) {
43
+ const node = nodes[i];
44
+ if (node instanceof ControlFlow) {
45
+ // Control flow wraps subsequent siblings
46
+ const remaining = nodes.slice(i + 1);
47
+ emitControlFlow(node, remaining, state, isRoot);
48
+ return; // control flow consumes remaining nodes
49
+ }
50
+ emitNode(node, state, isRoot);
51
+ }
52
+ }
53
+ function emitNode(node, state, isRoot) {
54
+ if (node instanceof Element)
55
+ emitElement(node, state);
56
+ else if (node instanceof ImplicitDiv)
57
+ emitImplicitDiv(node, state);
58
+ else if (node instanceof Text)
59
+ emitText(node, state);
60
+ else if (node instanceof Output)
61
+ emitOutput(node, state);
62
+ else if (node instanceof ControlFlow)
63
+ emitControlFlow(node, [], state, isRoot);
64
+ else if (node instanceof Comment)
65
+ emitComment(node, state);
66
+ else if (node instanceof Filter)
67
+ emitFilter(node, state);
68
+ else if (node instanceof Doctype)
69
+ emitDoctype(node, state);
70
+ }
71
+ // ─── Element ───────────────────────────────────────────────
72
+ function emitElement(el, state) {
73
+ const hasChildren = el.children.length > 0;
74
+ const fn = hasChildren ? 'jsxs' : 'jsx';
75
+ // Tag
76
+ const tagJs = tagToJs(el);
77
+ // Attributes
78
+ const attrs = buildAttributes(el);
79
+ const attrsJs = attrs.length > 0 ? `{ ${attrs.join(', ')} }` : 'null';
80
+ // Children
81
+ if (hasChildren) {
82
+ state.emit(`${fn}(${tagJs}, ${attrsJs}`);
83
+ if (el.children.length === 1) {
84
+ // Single child — inline
85
+ const childJs = emitChildToJs(el.children[0], state);
86
+ state.output += `, ${childJs});\n`;
87
+ }
88
+ else {
89
+ // Multiple children
90
+ state.output += ',\n';
91
+ state.indentBlock(() => {
92
+ for (let i = 0; i < el.children.length; i++) {
93
+ const childJs = emitChildToJs(el.children[i], state);
94
+ const comma = i < el.children.length - 1 ? ',' : '';
95
+ state.emitLine(`${childJs}${comma}`);
96
+ }
97
+ });
98
+ state.emitLine(');');
99
+ }
100
+ }
101
+ else {
102
+ state.emitLine(`${fn}(${tagJs}, ${attrsJs});`);
103
+ }
104
+ }
105
+ function tagToJs(el) {
106
+ if (el.tag instanceof Expression) {
107
+ return compileExpression(el.tag);
108
+ }
109
+ if (el.isComponent) {
110
+ return el.tag;
111
+ }
112
+ return `"${el.tag}"`;
113
+ }
114
+ function buildAttributes(el) {
115
+ const parts = [];
116
+ // id
117
+ if (el.id) {
118
+ parts.push(`id: "${el.id}"`);
119
+ }
120
+ // class from .class modifiers
121
+ let classNames = [...el.classes];
122
+ // Named attributes
123
+ for (const attr of el.attributes) {
124
+ const valJs = compileExpression(attr.value);
125
+ const name = attrNameToJs(attr.name);
126
+ if (name === 'className' || name === 'class') {
127
+ // Collect class names from className/class attribute
128
+ if (attr.shorthand) {
129
+ classNames.push(`\${${valJs}}`);
130
+ }
131
+ else {
132
+ classNames.push(valJs.replace(/^['"]|['"]$/g, ''));
133
+ }
134
+ }
135
+ else if (attr.shorthand) {
136
+ parts.push(`${name}: ${valJs}`);
137
+ }
138
+ else {
139
+ parts.push(`${name}: ${valJs}`);
140
+ }
141
+ }
142
+ // Emit className
143
+ if (classNames.length > 0) {
144
+ const unique = [...new Set(classNames)];
145
+ if (unique.length === 1 && !unique[0].includes('${')) {
146
+ parts.push(`className: "${unique[0]}"`);
147
+ }
148
+ else {
149
+ const joined = unique.map(c => c.includes('${') ? c : `"${c}"`).join(' + " " + ');
150
+ parts.push(`className: ${joined}`);
151
+ }
152
+ }
153
+ // style as object
154
+ const styleAttr = el.attributes.find(a => attrNameToJs(a.name) === 'style');
155
+ if (styleAttr && !styleAttr.shorthand) {
156
+ // Already handled above — but ensure it's an object expression
157
+ }
158
+ return parts;
159
+ }
160
+ function attrNameToJs(name) {
161
+ // class → className for React
162
+ if (name === 'class')
163
+ return 'className';
164
+ // for → htmlFor for React
165
+ if (name === 'for')
166
+ return 'htmlFor';
167
+ // data-* attributes keep their name
168
+ if (name.includes('-')) {
169
+ // Convert to camelCase quoted: 'data-value' → "data-value"
170
+ return `"${name}"`;
171
+ }
172
+ return name;
173
+ }
174
+ function emitImplicitDiv(div, state) {
175
+ const el = new Element('div', {
176
+ classes: div.classes,
177
+ id: div.id,
178
+ attributes: div.attributes,
179
+ children: div.children,
180
+ isComponent: false,
181
+ isSelfClosing: false,
182
+ location: div.location,
183
+ });
184
+ emitElement(el, state);
185
+ }
186
+ // ─── Child Emission ────────────────────────────────────────
187
+ function emitChildToJs(node, state) {
188
+ if (node instanceof Text) {
189
+ return escapeString(node.value);
190
+ }
191
+ if (node instanceof Output) {
192
+ return compileExpression(node.expression);
193
+ }
194
+ if (node instanceof Element) {
195
+ const hasChildren = node.children.length > 0;
196
+ const fn = hasChildren ? 'jsxs' : 'jsx';
197
+ const tagJs = tagToJs(node);
198
+ const attrs = buildAttributes(node);
199
+ const attrsJs = attrs.length > 0 ? `{ ${attrs.join(', ')} }` : 'null';
200
+ if (hasChildren) {
201
+ const childParts = node.children.map(c => emitChildToJs(c, state));
202
+ return `${fn}(${tagJs}, ${attrsJs}, ${childParts.join(', ')})`;
203
+ }
204
+ return `${fn}(${tagJs}, ${attrsJs})`;
205
+ }
206
+ if (node instanceof ImplicitDiv) {
207
+ const el = new Element('div', {
208
+ classes: node.classes,
209
+ id: node.id,
210
+ attributes: node.attributes,
211
+ children: node.children,
212
+ isComponent: false,
213
+ isSelfClosing: false,
214
+ location: node.location,
215
+ });
216
+ return emitChildToJs(el, state);
217
+ }
218
+ if (node instanceof ControlFlow) {
219
+ return emitControlFlowToJs(node, state);
220
+ }
221
+ if (node instanceof Filter) {
222
+ return emitFilterToJs(node, state);
223
+ }
224
+ return 'null';
225
+ }
226
+ // ─── Control Flow ──────────────────────────────────────────
227
+ function emitControlFlow(cf, remaining, state, _isRoot) {
228
+ if (cf.isLoop) {
229
+ emitLoop(cf, remaining, state);
230
+ }
231
+ else {
232
+ emitConditional(cf, remaining, state);
233
+ }
234
+ }
235
+ function emitLoop(cf, remaining, state) {
236
+ // - for item in items → items.map(item => ...)
237
+ // - for item, i in items → items.map((item, i) => ...)
238
+ // - while condition → (() => { const __r = []; while (cond) __r.push(...); return __r; })()
239
+ if (cf.controlKind === 'for') {
240
+ const expr = cf.expression.source.trim();
241
+ const forMatch = expr.match(/^(.+?)\s+in\s+(.+)$/);
242
+ if (forMatch) {
243
+ const vars = forMatch[1].trim(); // e.g., "item" or "item, index"
244
+ const iterable = forMatch[2].trim();
245
+ state.emit(`...${compileExpression(new Expression(iterable))}.map((${vars}) => `);
246
+ // Wrap children in Fragment if multiple
247
+ if (cf.children.length === 0) {
248
+ state.output += 'null';
249
+ }
250
+ else if (cf.children.length === 1 && cf.children[0] instanceof Element) {
251
+ const childJs = emitChildToJs(cf.children[0], state);
252
+ state.output += childJs;
253
+ }
254
+ else {
255
+ state.output += 'jsxs(Fragment, {}';
256
+ if (cf.children.length > 0) {
257
+ state.output += ', ';
258
+ state.output += cf.children.map(c => emitChildToJs(c, state)).join(', ');
259
+ }
260
+ state.output += ')';
261
+ }
262
+ state.output += ')';
263
+ // Handle remaining nodes (they go after the map)
264
+ if (remaining.length > 0) {
265
+ state.output += ',\n';
266
+ emitNodes(remaining, state);
267
+ }
268
+ else {
269
+ state.output += ';\n';
270
+ }
271
+ return;
272
+ }
273
+ }
274
+ if (cf.controlKind === 'while') {
275
+ const cond = compileExpression(cf.expression);
276
+ state.emitLine(`(() => {`);
277
+ state.indentBlock(() => {
278
+ state.emitLine(`const __result = [];`);
279
+ state.emitLine(`while (${cond}) {`);
280
+ state.indentBlock(() => {
281
+ if (cf.children.length === 1 && cf.children[0] instanceof Element) {
282
+ state.emit(`__result.push(${emitChildToJs(cf.children[0], state)});\n`);
283
+ }
284
+ else {
285
+ state.emit(`__result.push(jsxs(Fragment, {}, ${cf.children.map(c => emitChildToJs(c, state)).join(', ')}));\n`);
286
+ }
287
+ });
288
+ state.emitLine(`}`);
289
+ state.emitLine(`return __result;`);
290
+ });
291
+ state.emit(`})()`);
292
+ if (remaining.length > 0) {
293
+ state.output += ',\n';
294
+ emitNodes(remaining, state);
295
+ }
296
+ else {
297
+ state.output += ';\n';
298
+ }
299
+ return;
300
+ }
301
+ // Fallback
302
+ state.emitLine(`/* TODO: emit loop ${cf.controlKind} */`);
303
+ }
304
+ function emitConditional(cf, remaining, state) {
305
+ // else is always reached via cf.next chain — the " : " was emitted by parent
306
+ if (cf.controlKind === 'else') {
307
+ emitElseBranch(cf, state);
308
+ return;
309
+ }
310
+ // Build ternary chain: cond ? jsx(...) : (elseCond ? jsx(...) : null)
311
+ const condition = compileExpression(cf.expression);
312
+ if (cf.controlKind === 'unless') {
313
+ // unless cond → !(cond)
314
+ state.emit(`!(${condition}) ? `);
315
+ }
316
+ else {
317
+ state.emit(`${condition} ? `);
318
+ }
319
+ // Then branch
320
+ if (cf.children.length === 0) {
321
+ state.output += 'null';
322
+ }
323
+ else if (cf.children.length === 1) {
324
+ state.output += emitChildToJs(cf.children[0], state);
325
+ }
326
+ else {
327
+ state.output += `jsxs(Fragment, {}, ${cf.children.map(c => emitChildToJs(c, state)).join(', ')})`;
328
+ }
329
+ // Else / remaining
330
+ state.output += ' : ';
331
+ if (cf.next) {
332
+ emitConditional(cf.next, [], state);
333
+ }
334
+ else if (remaining.length > 0) {
335
+ if (remaining.length === 1) {
336
+ state.output += emitChildToJs(remaining[0], state);
337
+ }
338
+ else {
339
+ state.output += `jsxs(Fragment, {}, ${remaining.map(c => emitChildToJs(c, state)).join(', ')})`;
340
+ }
341
+ }
342
+ else {
343
+ state.output += 'null';
344
+ }
345
+ state.output += ';\n';
346
+ }
347
+ /** Emit the body of an else branch — no condition prefix. */
348
+ function emitElseBranch(cf, state) {
349
+ if (cf.children.length === 0) {
350
+ state.output += 'null';
351
+ }
352
+ else if (cf.children.length === 1) {
353
+ state.output += emitChildToJs(cf.children[0], state);
354
+ }
355
+ else {
356
+ state.output += `jsxs(Fragment, {}, ${cf.children.map(c => emitChildToJs(c, state)).join(', ')})`;
357
+ }
358
+ }
359
+ function emitControlFlowToJs(cf, state) {
360
+ // Inline version — used when control flow appears as a child
361
+ if (cf.isLoop && cf.controlKind === 'for') {
362
+ const expr = cf.expression.source.trim();
363
+ const forMatch = expr.match(/^(.+?)\s+in\s+(.+)$/);
364
+ if (forMatch) {
365
+ const vars = forMatch[1].trim();
366
+ const iterable = forMatch[2].trim();
367
+ const compiledIterable = compileExpression(new Expression(iterable));
368
+ const body = cf.children.length === 1
369
+ ? emitChildToJs(cf.children[0], state)
370
+ : `jsxs(Fragment, {}, ${cf.children.map(c => emitChildToJs(c, state)).join(', ')})`;
371
+ return `...${compiledIterable}.map((${vars}) => ${body})`;
372
+ }
373
+ }
374
+ if (cf.controlKind === 'else') {
375
+ // inline else — just emit the body
376
+ return cf.children.length === 1
377
+ ? emitChildToJs(cf.children[0], state)
378
+ : cf.children.length > 0
379
+ ? `jsxs(Fragment, {}, ${cf.children.map(c => emitChildToJs(c, state)).join(', ')})`
380
+ : 'null';
381
+ }
382
+ if (cf.isConditional) {
383
+ const condition = compileExpression(cf.expression);
384
+ const condExpr = cf.controlKind === 'unless' ? `!(${condition})` : condition;
385
+ const consequent = cf.children.length === 1
386
+ ? emitChildToJs(cf.children[0], state)
387
+ : cf.children.length > 0
388
+ ? `jsxs(Fragment, {}, ${cf.children.map(c => emitChildToJs(c, state)).join(', ')})`
389
+ : 'null';
390
+ const alternate = cf.next ? emitControlFlowToJs(cf.next, state) : 'null';
391
+ return `${condExpr} ? ${consequent} : ${alternate}`;
392
+ }
393
+ return 'null';
394
+ }
395
+ // ─── Text / Output / Comment / Filter / Doctype ────────────
396
+ function emitText(text, state) {
397
+ // Standalone text at module level — emit as string expression
398
+ state.emitLine(`"${escapeString(text.value)}";`);
399
+ }
400
+ function emitOutput(out, state) {
401
+ const js = compileExpression(out.expression);
402
+ if (out.outputKind === 'escaped') {
403
+ // React handles escaping via jsx text children
404
+ state.emitLine(`jsx(Fragment, {}, ${js});`);
405
+ }
406
+ else {
407
+ state.emitLine(`jsx(Fragment, {}, ${js});`);
408
+ }
409
+ }
410
+ function emitComment(comment, state) {
411
+ if (comment.commentKind === 'html') {
412
+ state.emitLine(`/* <!-- ${comment.text} --> */`);
413
+ }
414
+ // Haml comments (-#) are stripped entirely
415
+ }
416
+ function emitFilter(filter, state) {
417
+ const { filterName, content } = filter;
418
+ // 1. Plugin-registered filter handlers take priority
419
+ const handler = state.options.filters?.[filterName];
420
+ if (handler) {
421
+ const html = handler(content, filterName);
422
+ state.emitLine(`jsx(Fragment, { dangerouslySetInnerHTML: { __html: ${JSON.stringify(html)} } });`);
423
+ return;
424
+ }
425
+ // 2. Built-in passthrough filters
426
+ switch (filterName) {
427
+ case 'css':
428
+ state.emitLine(`/* <style> */`);
429
+ state.emitLine(`"${escapeString(content)}";`);
430
+ break;
431
+ case 'javascript':
432
+ case 'coffee':
433
+ state.emitLine(content);
434
+ break;
435
+ case 'markdown':
436
+ // No handler registered — emit as raw text with a hint
437
+ state.emitLine(`// :markdown filter used but no handler registered. Install 'marked' and add to compilerOptions.filters`);
438
+ state.emitLine(`"${escapeString(content)}";`);
439
+ break;
440
+ default:
441
+ state.emitLine(`"${escapeString(content)}";`);
442
+ }
443
+ }
444
+ /** Emit a filter as a JS expression (for use as a child within parent elements). */
445
+ function emitFilterToJs(filter, state) {
446
+ const { filterName, content } = filter;
447
+ const handler = state.options.filters?.[filterName];
448
+ if (handler) {
449
+ const html = handler(content, filterName);
450
+ return `jsx(Fragment, { dangerouslySetInnerHTML: { __html: ${JSON.stringify(html)} } })`;
451
+ }
452
+ // No handler — emit raw text as a string child
453
+ return escapeString(content);
454
+ }
455
+ function emitDoctype(doctype, state) {
456
+ // Doctype is typically handled by the HTML renderer, but for React
457
+ // we emit it as a comment or skip it
458
+ state.emitLine(`// DOCTYPE ${doctype.value || 'html'}`);
459
+ }
460
+ // ─── Helpers ───────────────────────────────────────────────
461
+ function escapeString(s) {
462
+ return JSON.stringify(s);
463
+ }
464
+ //# sourceMappingURL=emitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emitter.js","sourceRoot":"","sources":["../src/emitter.ts"],"names":[],"mappings":"AAAA,OAAO,EACK,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EACzD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAQ,UAAU,GAC3C,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGrD,8DAA8D;AAE9D,MAAM,SAAS;IAQb,YAAY,UAA0B,EAAE;QAPxC,WAAM,GAAW,CAAC,CAAC;QACnB,WAAM,GAAW,EAAE,CAAC;QACpB,kBAAa,GAAY,KAAK,CAAC;QAC/B,gBAAW,GAAY,KAAK,CAAC;QAE7B,mBAAc,GAAa,EAAE,CAAC;QAG5B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,IAAI,CAAC,CAAS;QACZ,IAAI,CAAC,EAAE,CAAC;YACN,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,IAAY,EAAE;QACrB,IAAI,CAAC,EAAE,CAAC;YACN,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC;IACtB,CAAC;IAED,WAAW,CAAC,EAAc;QACxB,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,EAAE,EAAE,CAAC;QACL,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;CACF;AAED,8DAA8D;AAE9D,MAAM,UAAU,IAAI,CAAC,GAAa,EAAE,UAA0B,EAAE;IAC9D,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;IAErC,wBAAwB;IACxB,KAAK,CAAC,QAAQ,CAAC,wCAAwC,OAAO,CAAC,UAAU,IAAI,mBAAmB,IAAI,CAAC,CAAC;IACtG,KAAK,CAAC,QAAQ,EAAE,CAAC;IAEjB,mBAAmB;IACnB,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAErC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;AAChC,CAAC;AAED,8DAA8D;AAE9D,SAAS,SAAS,CAAC,KAAa,EAAE,KAAgB,EAAE,SAAkB,KAAK;IACzE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAEtB,IAAI,IAAI,YAAY,WAAW,EAAE,CAAC;YAChC,yCAAyC;YACzC,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACrC,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;YAChD,OAAO,CAAC,wCAAwC;QAClD,CAAC;QAED,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAChC,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,IAAU,EAAE,KAAgB,EAAE,MAAe;IAC7D,IAAI,IAAI,YAAY,OAAO;QAAE,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SACjD,IAAI,IAAI,YAAY,WAAW;QAAE,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SAC9D,IAAI,IAAI,YAAY,IAAI;QAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SAChD,IAAI,IAAI,YAAY,MAAM;QAAE,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SACpD,IAAI,IAAI,YAAY,WAAW;QAAE,eAAe,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;SAC1E,IAAI,IAAI,YAAY,OAAO;QAAE,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SACtD,IAAI,IAAI,YAAY,MAAM;QAAE,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SACpD,IAAI,IAAI,YAAY,OAAO;QAAE,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC7D,CAAC;AAED,8DAA8D;AAE9D,SAAS,WAAW,CAAC,EAAW,EAAE,KAAgB;IAChD,MAAM,WAAW,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3C,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IAExC,MAAM;IACN,MAAM,KAAK,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;IAE1B,aAAa;IACb,MAAM,KAAK,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;IAClC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;IAEtE,WAAW;IACX,IAAI,WAAW,EAAE,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC,CAAC;QACzC,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,wBAAwB;YACxB,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACrD,KAAK,CAAC,MAAM,IAAI,KAAK,OAAO,MAAM,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,oBAAoB;YACpB,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC;YACtB,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;gBACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC5C,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;oBACrD,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBACpD,KAAK,CAAC,QAAQ,CAAC,GAAG,OAAO,GAAG,KAAK,EAAE,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED,SAAS,OAAO,CAAC,EAAW;IAC1B,IAAI,EAAE,CAAC,GAAG,YAAY,UAAU,EAAE,CAAC;QACjC,OAAO,iBAAiB,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC,GAAG,CAAC;IAChB,CAAC;IACD,OAAO,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC;AACvB,CAAC;AAED,SAAS,eAAe,CAAC,EAAW;IAClC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK;IACL,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QACV,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED,8BAA8B;IAC9B,IAAI,UAAU,GAAa,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;IAE3C,mBAAmB;IACnB,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAErC,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YAC7C,qDAAqD;YACrD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnB,UAAU,CAAC,IAAI,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACN,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,iBAAiB;IACjB,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;QACxC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACrD,KAAK,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAClF,KAAK,CAAC,IAAI,CAAC,cAAc,MAAM,EAAE,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,MAAM,SAAS,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,CAAC;IAC5E,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;QACtC,+DAA+D;IACjE,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,8BAA8B;IAC9B,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,WAAW,CAAC;IACzC,0BAA0B;IAC1B,IAAI,IAAI,KAAK,KAAK;QAAE,OAAO,SAAS,CAAC;IACrC,oCAAoC;IACpC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,2DAA2D;QAC3D,OAAO,IAAI,IAAI,GAAG,CAAC;IACrB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,eAAe,CAAC,GAAgB,EAAE,KAAgB;IACzD,MAAM,EAAE,GAAG,IAAI,OAAO,CAAC,KAAK,EAAE;QAC5B,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,WAAW,EAAE,KAAK;QAClB,aAAa,EAAE,KAAK;QACpB,QAAQ,EAAE,GAAG,CAAC,QAAQ;KACvB,CAAC,CAAC;IACH,WAAW,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;AACzB,CAAC;AAED,8DAA8D;AAE9D,SAAS,aAAa,CAAC,IAAU,EAAE,KAAgB;IACjD,IAAI,IAAI,YAAY,IAAI,EAAE,CAAC;QACzB,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IACD,IAAI,IAAI,YAAY,MAAM,EAAE,CAAC;QAC3B,OAAO,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,IAAI,YAAY,OAAO,EAAE,CAAC;QAC5B,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QAC7C,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;QACxC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;QAEtE,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;YACnE,OAAO,GAAG,EAAE,IAAI,KAAK,KAAK,OAAO,KAAK,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QACjE,CAAC;QACD,OAAO,GAAG,EAAE,IAAI,KAAK,KAAK,OAAO,GAAG,CAAC;IACvC,CAAC;IACD,IAAI,IAAI,YAAY,WAAW,EAAE,CAAC;QAChC,MAAM,EAAE,GAAG,IAAI,OAAO,CAAC,KAAK,EAAE;YAC5B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,WAAW,EAAE,KAAK;YAClB,aAAa,EAAE,KAAK;YACpB,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC,CAAC;QACH,OAAO,aAAa,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAClC,CAAC;IACD,IAAI,IAAI,YAAY,WAAW,EAAE,CAAC;QAChC,OAAO,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,IAAI,YAAY,MAAM,EAAE,CAAC;QAC3B,OAAO,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8DAA8D;AAE9D,SAAS,eAAe,CACtB,EAAe,EACf,SAAiB,EACjB,KAAgB,EAChB,OAAgB;IAEhB,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;QACd,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IACjC,CAAC;SAAM,CAAC;QACN,eAAe,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,EAAe,EAAE,SAAiB,EAAE,KAAgB;IACpE,+CAA+C;IAC/C,uDAAuD;IACvD,4FAA4F;IAE5F,IAAI,EAAE,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACnD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,gCAAgC;YACjE,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAEpC,KAAK,CAAC,IAAI,CAAC,MAAM,iBAAiB,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,SAAS,IAAI,OAAO,CAAC,CAAC;YAElF,wCAAwC;YACxC,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7B,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC;YACzB,CAAC;iBAAM,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,OAAO,EAAE,CAAC;gBACzE,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBACrD,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,MAAM,IAAI,mBAAmB,CAAC;gBACpC,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC3B,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC;oBACrB,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC3E,CAAC;gBACD,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC;YACtB,CAAC;YAED,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC;YAEpB,iDAAiD;YACjD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC;gBACtB,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC;YACxB,CAAC;YACD,OAAO;QACT,CAAC;IACH,CAAC;IAED,IAAI,EAAE,CAAC,WAAW,KAAK,OAAO,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,iBAAiB,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;QAC9C,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC3B,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;YACrB,KAAK,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;YACvC,KAAK,CAAC,QAAQ,CAAC,UAAU,IAAI,KAAK,CAAC,CAAC;YACpC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;gBACrB,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,OAAO,EAAE,CAAC;oBAClE,KAAK,CAAC,IAAI,CAAC,iBAAiB,aAAa,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC1E,CAAC;qBAAM,CAAC;oBACN,KAAK,CAAC,IAAI,CAAC,oCAAoC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAClH,CAAC;YACH,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACpB,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnB,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC;YACtB,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC;QACxB,CAAC;QACD,OAAO;IACT,CAAC;IAED,WAAW;IACX,KAAK,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC,WAAW,KAAK,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,eAAe,CAAC,EAAe,EAAE,SAAiB,EAAE,KAAgB;IAC3E,6EAA6E;IAC7E,IAAI,EAAE,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;QAC9B,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC1B,OAAO;IACT,CAAC;IAED,sEAAsE;IACtE,MAAM,SAAS,GAAG,iBAAiB,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;IAEnD,IAAI,EAAE,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;QAChC,wBAAwB;QACxB,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,MAAM,CAAC,CAAC;IACnC,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,cAAc;IACd,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC;IACzB,CAAC;SAAM,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpC,KAAK,CAAC,MAAM,IAAI,aAAa,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,MAAM,IAAI,sBAAsB,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IACpG,CAAC;IAED,mBAAmB;IACnB,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC;IAEtB,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;QACZ,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;SAAM,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,KAAK,CAAC,MAAM,IAAI,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,MAAM,IAAI,sBAAsB,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QAClG,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC;AACxB,CAAC;AAED,6DAA6D;AAC7D,SAAS,cAAc,CAAC,EAAe,EAAE,KAAgB;IACvD,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC;IACzB,CAAC;SAAM,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpC,KAAK,CAAC,MAAM,IAAI,aAAa,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,MAAM,IAAI,sBAAsB,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IACpG,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,EAAe,EAAE,KAAgB;IAC5D,6DAA6D;IAC7D,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACnD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAChC,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;YACrE,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;gBACnC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;gBACtC,CAAC,CAAC,sBAAsB,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;YACtF,OAAO,MAAM,gBAAgB,SAAS,IAAI,QAAQ,IAAI,GAAG,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,IAAI,EAAE,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;QAC9B,mCAAmC;QACnC,OAAO,EAAE,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;YAC7B,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;YACtC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;gBACtB,CAAC,CAAC,sBAAsB,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBACnF,CAAC,CAAC,MAAM,CAAC;IACf,CAAC;IAED,IAAI,EAAE,CAAC,aAAa,EAAE,CAAC;QACrB,MAAM,SAAS,GAAG,iBAAiB,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,EAAE,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7E,MAAM,UAAU,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;YACzC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;YACtC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;gBACtB,CAAC,CAAC,sBAAsB,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBACnF,CAAC,CAAC,MAAM,CAAC;QACb,MAAM,SAAS,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACzE,OAAO,GAAG,QAAQ,MAAM,UAAU,MAAM,SAAS,EAAE,CAAC;IACtD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8DAA8D;AAE9D,SAAS,QAAQ,CAAC,IAAU,EAAE,KAAgB;IAC5C,8DAA8D;IAC9D,KAAK,CAAC,QAAQ,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,UAAU,CAAC,GAAW,EAAE,KAAgB;IAC/C,MAAM,EAAE,GAAG,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC7C,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACjC,+CAA+C;QAC/C,KAAK,CAAC,QAAQ,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,QAAQ,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,OAAgB,EAAE,KAAgB;IACrD,IAAI,OAAO,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;QACnC,KAAK,CAAC,QAAQ,CAAC,WAAW,OAAO,CAAC,IAAI,SAAS,CAAC,CAAC;IACnD,CAAC;IACD,2CAA2C;AAC7C,CAAC;AAED,SAAS,UAAU,CAAC,MAAc,EAAE,KAAgB;IAClD,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAEvC,qDAAqD;IACrD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,UAAU,CAAC,CAAC;IACpD,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC1C,KAAK,CAAC,QAAQ,CACZ,sDAAsD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CACnF,CAAC;QACF,OAAO;IACT,CAAC;IAED,kCAAkC;IAClC,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,KAAK;YACR,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;YAChC,KAAK,CAAC,QAAQ,CAAC,IAAI,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM;QACR,KAAK,YAAY,CAAC;QAClB,KAAK,QAAQ;YACX,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACxB,MAAM;QACR,KAAK,UAAU;YACb,uDAAuD;YACvD,KAAK,CAAC,QAAQ,CACZ,yGAAyG,CAC1G,CAAC;YACF,KAAK,CAAC,QAAQ,CAAC,IAAI,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM;QACR;YACE,KAAK,CAAC,QAAQ,CAAC,IAAI,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAED,oFAAoF;AACpF,SAAS,cAAc,CAAC,MAAc,EAAE,KAAgB;IACtD,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAEvC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,UAAU,CAAC,CAAC;IACpD,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC1C,OAAO,sDAAsD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;IAC3F,CAAC;IAED,+CAA+C;IAC/C,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,WAAW,CAAC,OAAgB,EAAE,KAAgB;IACrD,mEAAmE;IACnE,qCAAqC;IACrC,KAAK,CAAC,QAAQ,CAAC,cAAc,OAAO,CAAC,KAAK,IAAI,MAAM,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED,8DAA8D;AAE9D,SAAS,YAAY,CAAC,CAAS;IAC7B,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { CompileError } from './types.js';
2
+ export type { CompilerOptions, CompileResult, CompileWarning, SourceLocation } from './types.js';
3
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
package/dist/errors.js ADDED
@@ -0,0 +1,2 @@
1
+ export { CompileError } from './types.js';
2
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { Expression } from './ast.js';
2
+ /** Parse a CoffeeScript expression string into its AST representation.
3
+ * Uses the host's CoffeeScript installation. Returns null gracefully
4
+ * if CoffeeScript is unavailable or parsing fails. */
5
+ export declare function parseExpression(source: string): Expression;
6
+ /** Compile a CoffeeScript expression to JavaScript.
7
+ * If no parsed AST, compiles from source directly.
8
+ * Returns the source as-is if compilation fails. */
9
+ export declare function compileExpression(expr: Expression): string;
10
+ //# sourceMappingURL=expressions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expressions.d.ts","sourceRoot":"","sources":["../src/expressions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAatC;;uDAEuD;AACvD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAa1D;AAED;;qDAEqD;AACrD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAkB1D"}
@@ -0,0 +1,70 @@
1
+ import { createRequire } from 'module';
2
+ import { Expression } from './ast.js';
3
+ // ESM-safe CoffeeScript loader — uses createRequire for projects with "type": "module"
4
+ const _require = createRequire(import.meta.url);
5
+ function loadCoffeeScript() {
6
+ try {
7
+ return _require('coffeescript');
8
+ }
9
+ catch {
10
+ return null;
11
+ }
12
+ }
13
+ /** Parse a CoffeeScript expression string into its AST representation.
14
+ * Uses the host's CoffeeScript installation. Returns null gracefully
15
+ * if CoffeeScript is unavailable or parsing fails. */
16
+ export function parseExpression(source) {
17
+ const expr = new Expression(source);
18
+ try {
19
+ const CoffeeScript = loadCoffeeScript();
20
+ if (CoffeeScript && typeof CoffeeScript.parse === 'function') {
21
+ expr.parsed = CoffeeScript.parse(source, { bare: true });
22
+ }
23
+ }
24
+ catch {
25
+ // Parse error — store raw source, let emitter handle it
26
+ }
27
+ return expr;
28
+ }
29
+ /** Compile a CoffeeScript expression to JavaScript.
30
+ * If no parsed AST, compiles from source directly.
31
+ * Returns the source as-is if compilation fails. */
32
+ export function compileExpression(expr) {
33
+ if (expr.source.trim() === '')
34
+ return '';
35
+ try {
36
+ const CoffeeScript = loadCoffeeScript();
37
+ if (CoffeeScript && typeof CoffeeScript.compile === 'function') {
38
+ const js = CoffeeScript.compile(expr.source, {
39
+ bare: true,
40
+ inlineMap: false,
41
+ });
42
+ // CoffeeScript.compile wraps result in an IIFE or adds var — strip to get expression
43
+ return stripCoffeeWrapper(js, expr.source);
44
+ }
45
+ }
46
+ catch {
47
+ // Fall through
48
+ }
49
+ return expr.source;
50
+ }
51
+ /** Strip CoffeeScript's wrapper to get a clean expression.
52
+ * CoffeeScript.compile('x + 1', {bare: true}) → "var x;\n\nx + 1;\n"
53
+ * We want just "x + 1" */
54
+ function stripCoffeeWrapper(js, _original) {
55
+ let result = js.trim();
56
+ // Remove trailing semicolon and whitespace
57
+ result = result.replace(/;\s*$/, '');
58
+ // If result is multiline, take the last significant line
59
+ const lines = result.split('\n').filter(l => l.trim() !== '');
60
+ if (lines.length > 0) {
61
+ // Remove 'var' declarations from the expression
62
+ const meaningful = lines.filter(l => !/^\s*var\b/.test(l));
63
+ if (meaningful.length > 0) {
64
+ return meaningful.join('\n');
65
+ }
66
+ return lines[lines.length - 1];
67
+ }
68
+ return result;
69
+ }
70
+ //# sourceMappingURL=expressions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expressions.js","sourceRoot":"","sources":["../src/expressions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,uFAAuF;AACvF,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEhD,SAAS,gBAAgB;IACvB,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,cAAc,CAAC,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;uDAEuD;AACvD,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IAEpC,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,gBAAgB,EAAE,CAAC;QACxC,IAAI,YAAY,IAAI,OAAO,YAAY,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YAC7D,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,wDAAwD;IAC1D,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;qDAEqD;AACrD,MAAM,UAAU,iBAAiB,CAAC,IAAgB;IAChD,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,EAAE,CAAC;IAEzC,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,gBAAgB,EAAE,CAAC;QACxC,IAAI,YAAY,IAAI,OAAO,YAAY,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;YAC/D,MAAM,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE;gBAC3C,IAAI,EAAE,IAAI;gBACV,SAAS,EAAE,KAAK;aACjB,CAAC,CAAC;YACH,qFAAqF;YACrF,OAAO,kBAAkB,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,eAAe;IACjB,CAAC;IAED,OAAO,IAAI,CAAC,MAAM,CAAC;AACrB,CAAC;AAED;;2BAE2B;AAC3B,SAAS,kBAAkB,CAAC,EAAU,EAAE,SAAiB;IACvD,IAAI,MAAM,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;IAEvB,2CAA2C;IAC3C,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAErC,yDAAyD;IACzD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9D,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,gDAAgD;QAChD,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { compile, compileFile, resolveCoffeeHamlFile, COFFEEHAML_EXTENSIONS } from './compiler.js';
2
+ export { CompileError, CompileWarning } from './types.js';
3
+ export type { CompilerOptions, CompileResult, FilterHandler } from './types.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACnG,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC1D,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export { compile, compileFile, resolveCoffeeHamlFile, COFFEEHAML_EXTENSIONS } from './compiler.js';
2
+ export { CompileError } from './types.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACnG,OAAO,EAAE,YAAY,EAAkB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { SourceLocation } from './types.js';
2
+ export declare enum TokenType {
3
+ TAG = "TAG",// %tagname
4
+ CLASS = "CLASS",// .classname
5
+ ID = "ID",// #idname
6
+ ATTRS_PAREN = "ATTRS_PAREN",// (attr: val, ...)
7
+ ATTRS_BRACE = "ATTRS_BRACE",// {attr: val, ...}
8
+ OUTPUT = "OUTPUT",// = expression
9
+ OUTPUT_UNESC = "OUTPUT_UNESC",// != expression
10
+ CONTROL = "CONTROL",// - keyword expression
11
+ COMMENT = "COMMENT",// -# comment
12
+ HTML_COMMENT = "HTML_COMMENT",// / comment
13
+ FILTER = "FILTER",// :filtername
14
+ DOCTYPE = "DOCTYPE",// !!! doctype
15
+ TEXT = "TEXT",// plain text content
16
+ INDENT = "INDENT",// increase indentation
17
+ DEDENT = "DEDENT",// decrease indentation
18
+ NEWLINE = "NEWLINE",// line break
19
+ SELF_CLOSE = "SELF_CLOSE"
20
+ }
21
+ export interface Token {
22
+ type: TokenType;
23
+ value: string;
24
+ location: SourceLocation;
25
+ /** For INDENT/DEDENT: the indent level as a number. */
26
+ indent?: number;
27
+ }
28
+ export declare function tokenize(source: string, filename?: string): Token[];
29
+ //# sourceMappingURL=lexer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexer.d.ts","sourceRoot":"","sources":["../src/lexer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAI5C,oBAAY,SAAS;IACnB,GAAG,QAAiB,CAAa,WAAW;IAC5C,KAAK,UAAiB,CAAW,aAAa;IAC9C,EAAE,OAAiB,CAAc,UAAU;IAC3C,WAAW,gBAAiB,CAAK,mBAAmB;IACpD,WAAW,gBAAiB,CAAK,mBAAmB;IACpD,MAAM,WAAiB,CAAU,eAAe;IAChD,YAAY,iBAAiB,CAAI,gBAAgB;IACjD,OAAO,YAAiB,CAAS,uBAAuB;IACxD,OAAO,YAAiB,CAAS,aAAa;IAC9C,YAAY,iBAAiB,CAAI,YAAY;IAC7C,MAAM,WAAiB,CAAU,cAAc;IAC/C,OAAO,YAAiB,CAAS,cAAc;IAC/C,IAAI,SAAiB,CAAY,qBAAqB;IACtD,MAAM,WAAiB,CAAU,uBAAuB;IACxD,MAAM,WAAiB,CAAU,uBAAuB;IACxD,OAAO,YAAiB,CAAS,aAAa;IAC9C,UAAU,eAAiB;CAC5B;AAID,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,cAAc,CAAC;IACzB,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAID,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,KAAK,EAAE,CA2DnE"}