htl-to-js 0.2.0 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +122 -28
- package/dist/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/loader.js.map +1 -1
- package/dist/transpiler/directives.d.ts +1 -0
- package/dist/transpiler/directives.js +39 -11
- package/dist/transpiler/directives.js.map +1 -1
- package/dist/transpiler/expr.js +16 -8
- package/dist/transpiler/expr.js.map +1 -1
- package/dist/transpiler/index.d.ts +9 -2
- package/dist/transpiler/index.js +151 -46
- package/dist/transpiler/index.js.map +1 -1
- package/dist/transpiler/walker.d.ts +2 -2
- package/dist/transpiler/walker.js +92 -25
- package/dist/transpiler/walker.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -447,14 +447,18 @@ const html = createColumn({ _wrapperClass: 'aem-GridColumn aem-GridColumn--defau
|
|
|
447
447
|
|
|
448
448
|
### `resourceWrappers`
|
|
449
449
|
|
|
450
|
-
Object mapping resource keys to CSS classes (or configuration objects) that wrap `data-sly-resource` slot output. Mimics the extra wrapper divs that AEM's responsive grid adds around its children.
|
|
450
|
+
Object mapping resource keys **or `resourceType` paths** to CSS classes (or configuration objects) that wrap `data-sly-resource` slot output. Mimics the extra wrapper divs that AEM's responsive grid adds around its children.
|
|
451
|
+
|
|
452
|
+
Keys are matched in this order:
|
|
453
|
+
1. **Resource name** — the value in the expression (e.g. `'par'` from `data-sly-resource="${'par' @ ...}"`)
|
|
454
|
+
2. **`resourceType`** — the `@resourceType` option value (e.g. `'mysite/components/responsivegrid'`)
|
|
451
455
|
|
|
452
456
|
**Simple string value** — wraps the slot output in a `<div>` with that class:
|
|
453
457
|
|
|
454
458
|
```js
|
|
455
459
|
options: {
|
|
456
460
|
resourceWrappers: {
|
|
457
|
-
responsivegrid: 'aem-Grid aem-Grid--12 aem-Grid--default--12',
|
|
461
|
+
'mysite/components/responsivegrid': 'aem-Grid aem-Grid--12 aem-Grid--default--12',
|
|
458
462
|
}
|
|
459
463
|
}
|
|
460
464
|
```
|
|
@@ -464,7 +468,7 @@ options: {
|
|
|
464
468
|
```js
|
|
465
469
|
options: {
|
|
466
470
|
resourceWrappers: {
|
|
467
|
-
responsivegrid: {
|
|
471
|
+
'mysite/components/responsivegrid': {
|
|
468
472
|
wrapper: 'aem-Grid aem-Grid--12 aem-Grid--default--12',
|
|
469
473
|
childClass: 'aem-GridColumn aem-GridColumn--default--12',
|
|
470
474
|
}
|
|
@@ -479,43 +483,119 @@ At runtime, the `_resourceWrappers` parameter can override or extend the static
|
|
|
479
483
|
|
|
480
484
|
### `modelTransforms`
|
|
481
485
|
|
|
482
|
-
Object mapping `data-sly-use` class-name patterns to property injections. Enables build-time property merging based on the use class.
|
|
486
|
+
Object mapping `data-sly-use` class-name patterns to property injections. Enables build-time property merging based on the use class. All keys are merged as computed properties into the model variable.
|
|
483
487
|
|
|
484
|
-
|
|
488
|
+
**Example — set default model values:**
|
|
485
489
|
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
490
|
+
```js
|
|
491
|
+
const modelTransforms = {
|
|
492
|
+
'LayoutContainer': {
|
|
493
|
+
layout: "'RESPONSIVE_GRID'",
|
|
494
|
+
},
|
|
495
|
+
};
|
|
496
|
+
```
|
|
492
497
|
|
|
493
|
-
|
|
498
|
+
Any component that uses `data-sly-use.x="com.example.LayoutContainer"` will get `layout` set to `'RESPONSIVE_GRID'` as default (can be overridden at runtime). The value is a JS expression string where `model` is replaced with the actual variable name.
|
|
499
|
+
|
|
500
|
+
**Special key `_includes`** — computes `_includes` slot entries from model data. Unlike regular keys (which are merged into the model object), `_includes` is assigned to the `_includes` parameter directly. Runtime `_includes` take precedence over computed ones.
|
|
494
501
|
|
|
495
502
|
```js
|
|
496
503
|
const modelTransforms = {
|
|
497
|
-
'
|
|
498
|
-
|
|
504
|
+
'ColumnModel': {
|
|
505
|
+
_includes: "Object.fromEntries((model.columns || []).map((col, i) => [col.path, () => (model._content || [])[i] || '']))",
|
|
499
506
|
},
|
|
500
507
|
};
|
|
501
508
|
```
|
|
502
509
|
|
|
503
|
-
|
|
510
|
+
This is the only special key — it belongs in `modelTransforms` because the value is computed from the model data, unlike `resourceWrappers` or `wrapperClass` which are static configuration.
|
|
511
|
+
|
|
512
|
+
### `fileOverrides`
|
|
513
|
+
|
|
514
|
+
Object mapping HTL file names to expression strings (or configuration objects) that replace `data-sly-use.X="file.html"` + `data-sly-call` references. Useful for replacing AEM template files (like `responsiveGrid.html`) that don't exist in your Storybook build.
|
|
515
|
+
|
|
516
|
+
**Simple string value** — replaces the `require()` call with the provided expression:
|
|
517
|
+
|
|
518
|
+
```js
|
|
519
|
+
options: {
|
|
520
|
+
fileOverrides: {
|
|
521
|
+
'responsiveGrid.html': "{ responsiveGrid: ({ container, _includes }) => _includes?.content?.() ?? '' }",
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
```
|
|
525
|
+
|
|
526
|
+
**Object value with `htl`** — provides HTL content that is transpiled inline (no file on disk needed). The templates are compiled and inlined into the output module:
|
|
527
|
+
|
|
528
|
+
```js
|
|
529
|
+
options: {
|
|
530
|
+
fileOverrides: {
|
|
531
|
+
'responsiveGrid.html': {
|
|
532
|
+
htl: `<template data-sly-template.responsiveGrid="\${ @ container }">
|
|
533
|
+
<div id="\${container.id}" class="cmp-container">
|
|
534
|
+
<sly data-sly-resource="\${'content' @ resourceType='wcm/foundation/components/responsivegrid'}"></sly>
|
|
535
|
+
</div>
|
|
536
|
+
</template>`,
|
|
537
|
+
},
|
|
538
|
+
},
|
|
539
|
+
}
|
|
540
|
+
```
|
|
541
|
+
|
|
542
|
+
The HTL content must contain `data-sly-template` definitions. The transpiler compiles them and generates the functions at module scope. Since the template uses `data-sly-resource` with `@resourceType`, the `resourceWrappers` config applies automatically inside the template.
|
|
543
|
+
|
|
544
|
+
**Object value with `expression`** — provides a raw JS expression string instead of HTL:
|
|
545
|
+
|
|
546
|
+
```js
|
|
547
|
+
options: {
|
|
548
|
+
fileOverrides: {
|
|
549
|
+
'responsiveGrid.html': {
|
|
550
|
+
expression: "{ responsiveGrid: ({ container, _includes }) => _includes?.content?.() ?? '' }",
|
|
551
|
+
},
|
|
552
|
+
},
|
|
553
|
+
}
|
|
554
|
+
```
|
|
555
|
+
|
|
556
|
+
When the transpiler encounters `data-sly-use.tpl="responsiveGrid.html"`, instead of generating a `require()` call, it uses the provided value as the default for the `tpl` parameter. The `data-sly-call="${tpl.responsiveGrid @ ...}"` then calls the function directly.
|
|
557
|
+
|
|
558
|
+
The override can be replaced at runtime by passing a different value for the parameter:
|
|
559
|
+
|
|
560
|
+
```js
|
|
561
|
+
// Use default from fileOverrides
|
|
562
|
+
const html = createContainer();
|
|
563
|
+
|
|
564
|
+
// Override at runtime
|
|
565
|
+
const html = createContainer({
|
|
566
|
+
responsiveGridTemplate: { responsiveGrid: myCustomFn },
|
|
567
|
+
});
|
|
568
|
+
```
|
|
504
569
|
|
|
505
570
|
---
|
|
506
571
|
|
|
507
572
|
## AEM component composition example
|
|
508
573
|
|
|
509
|
-
Combining `wrapperClass`, `resourceWrappers`, and `
|
|
574
|
+
Combining `wrapperClass`, `resourceWrappers`, `modelTransforms`, and `fileOverrides` reproduces AEM's full component nesting structure.
|
|
510
575
|
|
|
511
576
|
**Config (shared across all components):**
|
|
512
577
|
|
|
513
578
|
```js
|
|
514
579
|
const options = {
|
|
515
580
|
wrapperClass: true,
|
|
581
|
+
resourceWrappers: {
|
|
582
|
+
'wcm/foundation/components/responsivegrid': {
|
|
583
|
+
wrapper: 'aem-Grid aem-Grid--12 aem-Grid--default--12',
|
|
584
|
+
childClass: 'aem-GridColumn aem-GridColumn--default--12',
|
|
585
|
+
},
|
|
586
|
+
},
|
|
516
587
|
modelTransforms: {
|
|
517
|
-
'
|
|
518
|
-
|
|
588
|
+
'LayoutContainer': {
|
|
589
|
+
layout: "'RESPONSIVE_GRID'",
|
|
590
|
+
},
|
|
591
|
+
},
|
|
592
|
+
fileOverrides: {
|
|
593
|
+
'responsiveGrid.html': {
|
|
594
|
+
htl: `<template data-sly-template.responsiveGrid="\${ @ container }">
|
|
595
|
+
<div id="\${container.id}" class="cmp-container">
|
|
596
|
+
<sly data-sly-resource="\${'content' @ resourceType='wcm/foundation/components/responsivegrid'}"></sly>
|
|
597
|
+
</div>
|
|
598
|
+
</template>`,
|
|
519
599
|
},
|
|
520
600
|
},
|
|
521
601
|
};
|
|
@@ -524,9 +604,14 @@ const options = {
|
|
|
524
604
|
**Container HTL:**
|
|
525
605
|
|
|
526
606
|
```html
|
|
527
|
-
<
|
|
528
|
-
<sly data-sly-
|
|
529
|
-
|
|
607
|
+
<sly data-sly-use.container="com.adobe.cq.wcm.core.components.models.LayoutContainer">
|
|
608
|
+
<sly data-sly-test.responsive="${container.layout == 'RESPONSIVE_GRID'}"
|
|
609
|
+
data-sly-use.responsiveGridTemplate="responsiveGrid.html"
|
|
610
|
+
data-sly-call="${responsiveGridTemplate.responsiveGrid @ container=container}"></sly>
|
|
611
|
+
<sly data-sly-test="${!responsive}"
|
|
612
|
+
data-sly-use.simpleTemplate="simple.html"
|
|
613
|
+
data-sly-call="${simpleTemplate.simple @ container=container}"></sly>
|
|
614
|
+
</sly>
|
|
530
615
|
```
|
|
531
616
|
|
|
532
617
|
**Column HTL:**
|
|
@@ -544,26 +629,35 @@ import { createColumn } from '../column/column.html';
|
|
|
544
629
|
export const Default = {
|
|
545
630
|
render: () => createContainer({
|
|
546
631
|
_includes: {
|
|
547
|
-
|
|
632
|
+
content: () => createColumn(),
|
|
548
633
|
},
|
|
549
634
|
}),
|
|
550
635
|
};
|
|
551
636
|
```
|
|
552
637
|
|
|
553
|
-
**
|
|
638
|
+
**Rendered HTML:**
|
|
554
639
|
|
|
555
640
|
```html
|
|
556
|
-
<div class="container">
|
|
557
|
-
<div class="cmp-container">
|
|
558
|
-
<div class="aem-Grid aem-Grid--12 aem-Grid--default--12">
|
|
559
|
-
<div class="column aem-GridColumn aem-GridColumn--default--12">
|
|
560
|
-
|
|
641
|
+
<div class="container"> <!-- wrapperClass -->
|
|
642
|
+
<div class="cmp-container"> <!-- from responsiveGrid.html htl template -->
|
|
643
|
+
<div class="aem-Grid aem-Grid--12 aem-Grid--default--12"> <!-- resourceWrappers.wrapper -->
|
|
644
|
+
<div class="cmp-column aem-GridColumn aem-GridColumn--default--12"> <!-- resourceWrappers.childClass -->
|
|
645
|
+
Sample Text
|
|
561
646
|
</div>
|
|
562
647
|
</div>
|
|
563
648
|
</div>
|
|
564
649
|
</div>
|
|
565
650
|
```
|
|
566
651
|
|
|
652
|
+
Each option has a single responsibility:
|
|
653
|
+
|
|
654
|
+
| Option | Responsibility |
|
|
655
|
+
|---|---|
|
|
656
|
+
| `wrapperClass` | Component wrapper `<div>` with CSS class |
|
|
657
|
+
| `resourceWrappers` | Wraps `data-sly-resource` output with grid/column divs |
|
|
658
|
+
| `modelTransforms` | Model property defaults (e.g. `layout: 'RESPONSIVE_GRID'`) |
|
|
659
|
+
| `fileOverrides` | Replaces `data-sly-use="file.html"` with inline HTL or JS expressions |
|
|
660
|
+
|
|
567
661
|
---
|
|
568
662
|
|
|
569
663
|
## Programmatic API
|
package/dist/cli.js
CHANGED
|
@@ -25,7 +25,7 @@ Examples:
|
|
|
25
25
|
process.exit(0);
|
|
26
26
|
}
|
|
27
27
|
const watchMode = args.includes('--watch') || args.includes('-w');
|
|
28
|
-
const patternArg = args.find(a => !a.startsWith('-'));
|
|
28
|
+
const patternArg = args.find((a) => !a.startsWith('-'));
|
|
29
29
|
if (!patternArg) {
|
|
30
30
|
console.error('Error: no glob pattern provided.');
|
|
31
31
|
process.exit(1);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;AAEA,8CAA+C;AAC/C,+BAA4B;AAC5B,sDAAyB;AACzB,0DAA6B;AAE7B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEnC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;CAWb,CAAC,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAClE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/loader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":";AAAA,8CAA+C;AAE/C;;;;;;;;;;;;;;;;GAgBG;AACH,SAAS,SAAS,CAAY,MAAc;IAC1C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAErB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAEzD,IAAI,CAAC;QACH,OAAO,IAAA,iBAAS,EAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACxE,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,IAAI,CAAC,SAAS,
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":";AAAA,8CAA+C;AAE/C;;;;;;;;;;;;;;;;GAgBG;AACH,SAAS,SAAS,CAAY,MAAc;IAC1C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAErB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAEzD,IAAI,CAAC;QACH,OAAO,IAAA,iBAAS,EAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACxE,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,IAAI,CAAC,SAAS,CACZ,IAAI,KAAK,CAAC,eAAe,IAAI,CAAC,YAAY,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAC9D,CAAC;QACF,OAAO,sBAAsB,CAAC;IAChC,CAAC;AACH,CAAC;AAED,iBAAS,SAAS,CAAC"}
|
|
@@ -49,7 +49,7 @@ function parseUseDefault(val) {
|
|
|
49
49
|
const atIdx = val.indexOf('@');
|
|
50
50
|
if (atIdx === -1)
|
|
51
51
|
return null;
|
|
52
|
-
const vals = [...val.slice(atIdx + 1).matchAll(/\w+\s*=\s*(\w+)/g)].map(m => m[1]);
|
|
52
|
+
const vals = [...val.slice(atIdx + 1).matchAll(/\w+\s*=\s*(\w+)/g)].map((m) => m[1]);
|
|
53
53
|
return vals.length ? `{ ${vals.join(', ')} }` : null;
|
|
54
54
|
}
|
|
55
55
|
/**
|
|
@@ -68,6 +68,7 @@ function parseDirectives(attrs, sourceDir = '') {
|
|
|
68
68
|
sets: [],
|
|
69
69
|
text: null,
|
|
70
70
|
resource: null,
|
|
71
|
+
resourceType: null,
|
|
71
72
|
template: null,
|
|
72
73
|
call: null,
|
|
73
74
|
include: null,
|
|
@@ -99,19 +100,31 @@ function parseDirectives(attrs, sourceDir = '') {
|
|
|
99
100
|
const testVarMatch = /^data-sly-test\.(\w+)$/.exec(key);
|
|
100
101
|
if (testVarMatch) {
|
|
101
102
|
const varName = testVarMatch[1];
|
|
102
|
-
directives.sets.push({
|
|
103
|
+
directives.sets.push({
|
|
104
|
+
name: varName,
|
|
105
|
+
expr: (0, expr_1.convertExpr)(val),
|
|
106
|
+
raw: true,
|
|
107
|
+
});
|
|
103
108
|
directives.test = varName;
|
|
104
109
|
directives.skip.add(key);
|
|
105
110
|
continue;
|
|
106
111
|
}
|
|
107
112
|
const repeatMatch = /^data-sly-(?:repeat|list)\.(\w+)$/.exec(key);
|
|
108
113
|
if (repeatMatch) {
|
|
109
|
-
directives.repeat = {
|
|
114
|
+
directives.repeat = {
|
|
115
|
+
varName: repeatMatch[1],
|
|
116
|
+
listExpr: (0, expr_1.convertExpr)(val),
|
|
117
|
+
listMode: key.startsWith('data-sly-list.'),
|
|
118
|
+
};
|
|
110
119
|
directives.skip.add(key);
|
|
111
120
|
continue;
|
|
112
121
|
}
|
|
113
122
|
if (key === 'data-sly-list' || key === 'data-sly-repeat') {
|
|
114
|
-
directives.repeat = {
|
|
123
|
+
directives.repeat = {
|
|
124
|
+
varName: 'item',
|
|
125
|
+
listExpr: (0, expr_1.convertExpr)(val),
|
|
126
|
+
listMode: key === 'data-sly-list',
|
|
127
|
+
};
|
|
115
128
|
directives.skip.add(key);
|
|
116
129
|
continue;
|
|
117
130
|
}
|
|
@@ -147,13 +160,16 @@ function parseDirectives(attrs, sourceDir = '') {
|
|
|
147
160
|
if (pathMatch)
|
|
148
161
|
resource = (0, expr_1.convertExpr)('${' + pathMatch[1] + '}');
|
|
149
162
|
}
|
|
163
|
+
const rtMatch = /@\s*resourceType\s*=\s*['"]([^'"]+)['"]/.exec(val);
|
|
164
|
+
if (rtMatch)
|
|
165
|
+
directives.resourceType = rtMatch[1];
|
|
150
166
|
directives.resource = resource;
|
|
151
167
|
directives.skip.add(key);
|
|
152
168
|
continue;
|
|
153
169
|
}
|
|
154
170
|
const templateMatch = /^data-sly-template\.(\w+)$/.exec(key);
|
|
155
171
|
if (templateMatch) {
|
|
156
|
-
const params = [...val.matchAll(/@\s*(\w+)/g)].map(m => m[1]);
|
|
172
|
+
const params = [...val.matchAll(/@\s*(\w+)/g)].map((m) => m[1]);
|
|
157
173
|
directives.template = { name: templateMatch[1], params };
|
|
158
174
|
directives.skip.add(key);
|
|
159
175
|
continue;
|
|
@@ -166,24 +182,33 @@ function parseDirectives(attrs, sourceDir = '') {
|
|
|
166
182
|
const exprs = (0, expr_1.extractExprs)(t);
|
|
167
183
|
const isPureExpr = exprs.length === 1 && exprs[0].index === 0 && exprs[0].end === t.length;
|
|
168
184
|
if (isPureExpr) {
|
|
169
|
-
directives.dynamicAttrs.push({
|
|
185
|
+
directives.dynamicAttrs.push({
|
|
186
|
+
name: attrName,
|
|
187
|
+
expr: (0, expr_1.convertExpr)(val),
|
|
188
|
+
});
|
|
170
189
|
}
|
|
171
190
|
else if (exprs.length > 0) {
|
|
172
191
|
const parts = [];
|
|
173
192
|
let last = 0;
|
|
174
193
|
for (const { index, expr: e, end } of exprs) {
|
|
175
194
|
if (index > last)
|
|
176
|
-
parts.push(t.slice(last, index).replaceAll(
|
|
195
|
+
parts.push(t.slice(last, index).replaceAll('`', '\\`'));
|
|
177
196
|
parts.push(`\${${(0, expr_1.convertExpr)(e)}}`);
|
|
178
197
|
last = end;
|
|
179
198
|
}
|
|
180
199
|
if (last < t.length)
|
|
181
|
-
parts.push(t.slice(last).replaceAll(
|
|
182
|
-
directives.dynamicAttrs.push({
|
|
200
|
+
parts.push(t.slice(last).replaceAll('`', '\\`'));
|
|
201
|
+
directives.dynamicAttrs.push({
|
|
202
|
+
name: attrName,
|
|
203
|
+
expr: '`' + parts.join('') + '`',
|
|
204
|
+
});
|
|
183
205
|
}
|
|
184
206
|
else {
|
|
185
207
|
const escaped = t.replaceAll("'", String.raw `\'`);
|
|
186
|
-
directives.dynamicAttrs.push({
|
|
208
|
+
directives.dynamicAttrs.push({
|
|
209
|
+
name: attrName,
|
|
210
|
+
expr: "'" + escaped + "'",
|
|
211
|
+
});
|
|
187
212
|
}
|
|
188
213
|
directives.skip.add(key);
|
|
189
214
|
directives.skip.add(attrName);
|
|
@@ -213,7 +238,10 @@ function parseDirectives(attrs, sourceDir = '') {
|
|
|
213
238
|
* Output: { fn: "template.default", params: { model: "item", title: "item.title" } }
|
|
214
239
|
*/
|
|
215
240
|
function parseCallExpr(raw) {
|
|
216
|
-
const inner = raw
|
|
241
|
+
const inner = raw
|
|
242
|
+
.trim()
|
|
243
|
+
.replace(/^\$\{([\s\S]+)\}$/, '$1')
|
|
244
|
+
.trim();
|
|
217
245
|
const atIdx = inner.indexOf('@');
|
|
218
246
|
const fn = (atIdx === -1 ? inner : inner.slice(0, atIdx)).trim();
|
|
219
247
|
const params = {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directives.js","sourceRoot":"","sources":["../../src/transpiler/directives.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"directives.js","sourceRoot":"","sources":["../../src/transpiler/directives.ts"],"names":[],"mappings":"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"}
|
package/dist/transpiler/expr.js
CHANGED
|
@@ -21,21 +21,27 @@ function convertExpr(raw) {
|
|
|
21
21
|
inner = inner.slice(2, -1).trim();
|
|
22
22
|
}
|
|
23
23
|
const i18nMatch = /^\s*(['"])([^'"]*?)\1\s*@\s*(?:.*,\s*)?i18n\b/.exec(inner);
|
|
24
|
-
inner = inner.replace(
|
|
25
|
-
/^([\s\S]+?)\s*@\s*join\s*=\s*(?:'([^']*)'|"([^"]*)")/, (_, expr, sepSingle, sepDouble) => {
|
|
24
|
+
inner = inner.replace(/^([\s\S]+?)\s*@\s*join\s*=\s*(?:'([^']*)'|"([^"]*)")/, (_, expr, sepSingle, sepDouble) => {
|
|
26
25
|
const sep = sepSingle ?? sepDouble;
|
|
27
26
|
return `(${expr.trim()}).join('${sep}')`;
|
|
28
27
|
});
|
|
29
28
|
inner = inner.replaceAll(/['"]([^'"]*)['"]\s*@\s*format=\[([^\]]*)\]/g, (_, tmpl, args) => {
|
|
30
|
-
const argList = args.split(',').map(a => a.trim());
|
|
29
|
+
const argList = args.split(',').map((a) => a.trim());
|
|
31
30
|
const parts = tmpl.split(/\{(\d+)\}/);
|
|
32
|
-
return parts
|
|
33
|
-
.map((part, i) =>
|
|
31
|
+
return (parts
|
|
32
|
+
.map((part, i) => i % 2 === 1
|
|
33
|
+
? argList[Number.parseInt(part)] || "''"
|
|
34
|
+
: part
|
|
35
|
+
? `'${part}'`
|
|
36
|
+
: null)
|
|
34
37
|
.filter(Boolean)
|
|
35
|
-
.join(' + ') || "''";
|
|
38
|
+
.join(' + ') || "''");
|
|
36
39
|
});
|
|
37
40
|
const arrays = [];
|
|
38
|
-
inner = inner.replaceAll(/\[[^\]]*\]/g,
|
|
41
|
+
inner = inner.replaceAll(/\[[^\]]*\]/g, (m) => {
|
|
42
|
+
arrays.push(m);
|
|
43
|
+
return `__ARR${arrays.length - 1}__`;
|
|
44
|
+
});
|
|
39
45
|
const OPT_VAL = String.raw `(?:'[^']*'|"[^"]*"|__ARR\d+__|(?:[^,@}'"\n]|'[^']*'|"[^"]*")+)`;
|
|
40
46
|
inner = inner
|
|
41
47
|
.replaceAll(new RegExp(String.raw `\s*@\s*[\w]+\s*=\s*${OPT_VAL}`, 'g'), '')
|
|
@@ -46,7 +52,9 @@ function convertExpr(raw) {
|
|
|
46
52
|
.replaceAll(/\.size\b/g, '.length')
|
|
47
53
|
.replaceAll(/(\w+)\.jcr:(\w+)/g, "$1?.['jcr:$2']")
|
|
48
54
|
.trim();
|
|
49
|
-
arrays.forEach((arr, i) => {
|
|
55
|
+
arrays.forEach((arr, i) => {
|
|
56
|
+
inner = inner.replace(`__ARR${i}__`, arr);
|
|
57
|
+
});
|
|
50
58
|
inner = inner.replaceAll(/(\w|\])(?<!\?)\[/g, '$1?.[');
|
|
51
59
|
inner = inner.replaceAll(/(\w|\])\.(?=([\w$]))/g, (m, a, b) => /\d/.test(a) && /\d/.test(b) ? m : `${a}?.`);
|
|
52
60
|
inner = inner.replaceAll(/([\w$.?[\]]+)\s+in\s+([\w$.?[\]]+)/g, (_match, left, right) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expr.js","sourceRoot":"","sources":["../../src/transpiler/expr.ts"],"names":[],"mappings":";;AAQA,
|
|
1
|
+
{"version":3,"file":"expr.js","sourceRoot":"","sources":["../../src/transpiler/expr.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,14 @@ interface TranspileOptions {
|
|
|
3
3
|
omitAttrs?: RegExp[];
|
|
4
4
|
modelTransforms?: Record<string, Record<string, string>>;
|
|
5
5
|
wrapperClass?: string | boolean;
|
|
6
|
-
resourceWrappers?: Record<string, string
|
|
6
|
+
resourceWrappers?: Record<string, string | {
|
|
7
|
+
wrapper?: string;
|
|
8
|
+
childClass?: string;
|
|
9
|
+
}>;
|
|
10
|
+
fileOverrides?: Record<string, string | {
|
|
11
|
+
expression?: string;
|
|
12
|
+
htl?: string;
|
|
13
|
+
}>;
|
|
7
14
|
}
|
|
8
15
|
/**
|
|
9
16
|
* Transpiles an HTL source string into a JavaScript module that exports
|
|
@@ -13,5 +20,5 @@ interface TranspileOptions {
|
|
|
13
20
|
* @param options
|
|
14
21
|
* @returns A valid CJS module source string
|
|
15
22
|
*/
|
|
16
|
-
export declare function transpile(htlSource: string, { filename, omitAttrs, modelTransforms, wrapperClass, resourceWrappers }?: TranspileOptions): string;
|
|
23
|
+
export declare function transpile(htlSource: string, { filename, omitAttrs, modelTransforms, wrapperClass, resourceWrappers, fileOverrides, }?: TranspileOptions): string;
|
|
17
24
|
export {};
|