@arcmantle/lit-jsx 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +768 -0
- package/dist/compiler/attribute-processor.d.ts +128 -0
- package/dist/compiler/attribute-processor.d.ts.map +1 -0
- package/dist/compiler/attribute-processor.js +380 -0
- package/dist/compiler/attribute-processor.js.map +1 -0
- package/dist/compiler/babel-preset.d.ts +6 -0
- package/dist/compiler/babel-preset.d.ts.map +1 -0
- package/dist/compiler/babel-preset.js +27 -0
- package/dist/compiler/babel-preset.js.map +1 -0
- package/dist/compiler/builder.d.ts +22 -0
- package/dist/compiler/builder.d.ts.map +1 -0
- package/dist/compiler/builder.js +62 -0
- package/dist/compiler/builder.js.map +1 -0
- package/dist/compiler/compiler-utils.d.ts +81 -0
- package/dist/compiler/compiler-utils.d.ts.map +1 -0
- package/dist/compiler/compiler-utils.js +410 -0
- package/dist/compiler/compiler-utils.js.map +1 -0
- package/dist/compiler/config.d.ts +77 -0
- package/dist/compiler/config.d.ts.map +1 -0
- package/dist/compiler/config.js +78 -0
- package/dist/compiler/config.js.map +1 -0
- package/dist/compiler/postprocess.d.ts +5 -0
- package/dist/compiler/postprocess.d.ts.map +1 -0
- package/dist/compiler/postprocess.js +3 -0
- package/dist/compiler/postprocess.js.map +1 -0
- package/dist/compiler/preprocess.d.ts +5 -0
- package/dist/compiler/preprocess.d.ts.map +1 -0
- package/dist/compiler/preprocess.js +28 -0
- package/dist/compiler/preprocess.js.map +1 -0
- package/dist/compiler/transform-jsx.d.ts +5 -0
- package/dist/compiler/transform-jsx.d.ts.map +1 -0
- package/dist/compiler/transform-jsx.js +25 -0
- package/dist/compiler/transform-jsx.js.map +1 -0
- package/dist/compiler/transpiler.d.ts +48 -0
- package/dist/compiler/transpiler.d.ts.map +1 -0
- package/dist/compiler/transpiler.js +463 -0
- package/dist/compiler/transpiler.js.map +1 -0
- package/dist/compiler/vite-plugin.d.ts +38 -0
- package/dist/compiler/vite-plugin.d.ts.map +1 -0
- package/dist/compiler/vite-plugin.js +96 -0
- package/dist/compiler/vite-plugin.js.map +1 -0
- package/dist/runtime/choose-component.d.ts +39 -0
- package/dist/runtime/choose-component.d.ts.map +1 -0
- package/dist/runtime/choose-component.js +40 -0
- package/dist/runtime/choose-component.js.map +1 -0
- package/dist/runtime/compiler-ctors.d.ts +21 -0
- package/dist/runtime/compiler-ctors.d.ts.map +1 -0
- package/dist/runtime/compiler-ctors.js +21 -0
- package/dist/runtime/compiler-ctors.js.map +1 -0
- package/dist/runtime/for-component.d.ts +25 -0
- package/dist/runtime/for-component.d.ts.map +1 -0
- package/dist/runtime/for-component.js +35 -0
- package/dist/runtime/for-component.js.map +1 -0
- package/dist/runtime/literal-map.d.ts +22 -0
- package/dist/runtime/literal-map.d.ts.map +1 -0
- package/dist/runtime/literal-map.js +29 -0
- package/dist/runtime/literal-map.js.map +1 -0
- package/dist/runtime/rest-directive.d.ts +28 -0
- package/dist/runtime/rest-directive.d.ts.map +1 -0
- package/dist/runtime/rest-directive.js +49 -0
- package/dist/runtime/rest-directive.js.map +1 -0
- package/dist/runtime/show-component.d.ts +33 -0
- package/dist/runtime/show-component.d.ts.map +1 -0
- package/dist/runtime/show-component.js +30 -0
- package/dist/runtime/show-component.js.map +1 -0
- package/dist/runtime/tagged-template.d.ts +12 -0
- package/dist/runtime/tagged-template.d.ts.map +1 -0
- package/dist/runtime/tagged-template.js +12 -0
- package/dist/runtime/tagged-template.js.map +1 -0
- package/dist/runtime/type-helpers.d.ts +80 -0
- package/dist/runtime/type-helpers.d.ts.map +1 -0
- package/dist/runtime/type-helpers.js +85 -0
- package/dist/runtime/type-helpers.js.map +1 -0
- package/dist/shared/jsx-types.d.ts +2139 -0
- package/dist/shared/jsx-types.d.ts.map +1 -0
- package/dist/shared/jsx-types.js +2 -0
- package/dist/shared/jsx-types.js.map +1 -0
- package/dist/shared/jsx-utils.d.ts +30 -0
- package/dist/shared/jsx-utils.d.ts.map +1 -0
- package/dist/shared/jsx-utils.js +58 -0
- package/dist/shared/jsx-utils.js.map +1 -0
- package/dist/shared/mathml-tags.d.ts +12 -0
- package/dist/shared/mathml-tags.d.ts.map +1 -0
- package/dist/shared/mathml-tags.js +215 -0
- package/dist/shared/mathml-tags.js.map +1 -0
- package/dist/shared/svg-tags.d.ts +13 -0
- package/dist/shared/svg-tags.d.ts.map +1 -0
- package/dist/shared/svg-tags.js +95 -0
- package/dist/shared/svg-tags.js.map +1 -0
- package/dist/utils.d.ts +30 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +30 -0
- package/dist/utils.js.map +1 -0
- package/package.json +52 -0
- package/src/compiler/attribute-processor.ts +579 -0
- package/src/compiler/babel-preset.ts +34 -0
- package/src/compiler/builder.ts +86 -0
- package/src/compiler/compiler-utils.ts +789 -0
- package/src/compiler/config.ts +77 -0
- package/src/compiler/postprocess.ts +7 -0
- package/src/compiler/preprocess.ts +40 -0
- package/src/compiler/transform-jsx.ts +36 -0
- package/src/compiler/transpiler.ts +644 -0
- package/src/compiler/vite-plugin.ts +114 -0
- package/src/external.d.ts +9 -0
- package/src/runtime/choose-component.ts +53 -0
- package/src/runtime/compiler-ctors.ts +28 -0
- package/src/runtime/for-component.ts +54 -0
- package/src/runtime/literal-map.ts +37 -0
- package/src/runtime/rest-directive.ts +66 -0
- package/src/runtime/show-component.ts +48 -0
- package/src/runtime/tagged-template.ts +11 -0
- package/src/runtime/type-helpers.ts +91 -0
- package/src/shared/jsx-types.ts +2556 -0
- package/src/shared/jsx-utils.ts +85 -0
- package/src/shared/mathml-tags.ts +235 -0
- package/src/shared/svg-tags.ts +103 -0
- package/src/tsconfig.json +4 -0
- package/src/utils.ts +30 -0
|
@@ -0,0 +1,463 @@
|
|
|
1
|
+
import * as t from '@babel/types';
|
|
2
|
+
import { CompiledAttributeProcessor, CreateCompiledPart, TemplateAttributeProcessor, } from './attribute-processor.js';
|
|
3
|
+
import { CompiledBuilder, TemplateBuilder } from './builder.js';
|
|
4
|
+
import { ensureImports, getProgramFromPath, getTemplateType, isJSXElementPath, isJSXElementStatic, isJSXFragmentPath, isValidOpeningElement, } from './compiler-utils.js';
|
|
5
|
+
import { Ensure, getJSXElementName, isJSXCustomElementComponent, isJSXFunctionElementComponent, isValidJSXElement, } from './compiler-utils.js';
|
|
6
|
+
import { COMPONENT_LITERAL_PREFIX, ERROR_MESSAGES, VARIABLES, WHITESPACE_TAGS, } from './config.js';
|
|
7
|
+
class JSXTranspiler {
|
|
8
|
+
start(path) {
|
|
9
|
+
const context = this.createContext(path);
|
|
10
|
+
this.process(context);
|
|
11
|
+
const expression = this.createExpression(context);
|
|
12
|
+
ensureImports(context);
|
|
13
|
+
return expression;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export class TemplateTranspiler extends JSXTranspiler {
|
|
17
|
+
createContext(path) {
|
|
18
|
+
const context = {
|
|
19
|
+
program: getProgramFromPath(path),
|
|
20
|
+
path,
|
|
21
|
+
literalName: '',
|
|
22
|
+
tagName: '',
|
|
23
|
+
isInitialElement: true,
|
|
24
|
+
builder: new TemplateBuilder(),
|
|
25
|
+
importsUsed: new Set(),
|
|
26
|
+
};
|
|
27
|
+
return context;
|
|
28
|
+
}
|
|
29
|
+
process(context) {
|
|
30
|
+
if (t.isJSXFragment(context.path.node)) {
|
|
31
|
+
context.builder.addText('');
|
|
32
|
+
this.children(context);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
context.tagName = getJSXElementName(context.path.node);
|
|
36
|
+
if (isJSXCustomElementComponent(context.tagName)) {
|
|
37
|
+
this.openingTag(context);
|
|
38
|
+
this.attributes(context);
|
|
39
|
+
this.children(context);
|
|
40
|
+
this.closingTag(context);
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
if (isJSXFunctionElementComponent(context.tagName)) {
|
|
44
|
+
// Process attributes and children into a props object
|
|
45
|
+
if (!context.isInitialElement)
|
|
46
|
+
this.functionalComponent(context);
|
|
47
|
+
// If this is the initial element, this should not happen.
|
|
48
|
+
// and it should instead have been processed as a single expression.
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
this.openingTag(context);
|
|
52
|
+
this.attributes(context);
|
|
53
|
+
this.children(context);
|
|
54
|
+
this.closingTag(context);
|
|
55
|
+
}
|
|
56
|
+
openingTag(context) {
|
|
57
|
+
if (isJSXCustomElementComponent(context.tagName)) {
|
|
58
|
+
const literalIdentifier = Ensure.componentLiteral(context.tagName, COMPONENT_LITERAL_PREFIX + context.tagName, context.path, context.program);
|
|
59
|
+
context.literalName = literalIdentifier.name;
|
|
60
|
+
context.builder.addText('<');
|
|
61
|
+
context.builder.addExpression(literalIdentifier);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
// If the tag is not a component, we will treat it as a regular HTML element.
|
|
65
|
+
context.builder.addText('<' + context.tagName);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
attributes(context) {
|
|
69
|
+
if (!isValidJSXElement(context.path))
|
|
70
|
+
throw new Error(ERROR_MESSAGES.INVALID_OPENING_TAG);
|
|
71
|
+
const { attributes } = context.path.node.openingElement;
|
|
72
|
+
const processor = new TemplateAttributeProcessor();
|
|
73
|
+
for (const attr of attributes.values())
|
|
74
|
+
processor.processAttribute(attr, context);
|
|
75
|
+
// Close the opening tag
|
|
76
|
+
context.builder.addText('>');
|
|
77
|
+
}
|
|
78
|
+
children(context) {
|
|
79
|
+
for (const [index, child] of context.path.node.children.entries()) {
|
|
80
|
+
if (t.isJSXText(child)) {
|
|
81
|
+
if (WHITESPACE_TAGS.includes(context.tagName))
|
|
82
|
+
context.builder.addText(child.value);
|
|
83
|
+
else
|
|
84
|
+
context.builder.addText(child.value.trim());
|
|
85
|
+
}
|
|
86
|
+
else if (t.isJSXExpressionContainer(child)) {
|
|
87
|
+
if (t.isJSXEmptyExpression(child.expression))
|
|
88
|
+
continue;
|
|
89
|
+
context.builder.addExpression(child.expression);
|
|
90
|
+
}
|
|
91
|
+
else if (t.isJSXElement(child)) {
|
|
92
|
+
const currentPath = context.path.get(`children.${index}`);
|
|
93
|
+
// Recursively process child elements
|
|
94
|
+
if (isJSXElementPath(currentPath) || isJSXFragmentPath(currentPath)) {
|
|
95
|
+
this.process({
|
|
96
|
+
...context,
|
|
97
|
+
path: currentPath,
|
|
98
|
+
isInitialElement: false,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
closingTag(context) {
|
|
105
|
+
// If it's a component tag, we need to close it with the static literal.
|
|
106
|
+
if (context.literalName) {
|
|
107
|
+
context.builder.addText('</');
|
|
108
|
+
context.builder.addExpression(t.identifier(context.literalName));
|
|
109
|
+
context.builder.addText('>');
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
context.builder.addText('</' + context.tagName + '>');
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
createExpression(context) {
|
|
116
|
+
const isStatic = isJSXElementStatic(context.path);
|
|
117
|
+
const templateType = getTemplateType(context.path);
|
|
118
|
+
let identifier = '';
|
|
119
|
+
if (isStatic) {
|
|
120
|
+
if (templateType === VARIABLES.HTML) {
|
|
121
|
+
identifier = VARIABLES.HTML_STATIC;
|
|
122
|
+
context.importsUsed.add('htmlStatic');
|
|
123
|
+
}
|
|
124
|
+
// This will not happen, as svg and mathml dynamic tags are not supported yet.
|
|
125
|
+
else if (templateType === VARIABLES.SVG) {
|
|
126
|
+
identifier = VARIABLES.SVG_STATIC;
|
|
127
|
+
context.importsUsed.add('svgStatic');
|
|
128
|
+
}
|
|
129
|
+
// This will not happen, as svg and mathml dynamic tags are not supported yet.
|
|
130
|
+
else if (templateType === VARIABLES.MATHML) {
|
|
131
|
+
identifier = VARIABLES.MATHML_STATIC;
|
|
132
|
+
context.importsUsed.add('mathmlStatic');
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
throw new Error(ERROR_MESSAGES.UNKNOWN_TEMPLATE_TYPE(templateType));
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
if (templateType === VARIABLES.HTML) {
|
|
140
|
+
identifier = VARIABLES.HTML;
|
|
141
|
+
context.importsUsed.add('html');
|
|
142
|
+
}
|
|
143
|
+
else if (templateType === VARIABLES.SVG) {
|
|
144
|
+
identifier = VARIABLES.SVG;
|
|
145
|
+
context.importsUsed.add('svg');
|
|
146
|
+
}
|
|
147
|
+
else if (templateType === VARIABLES.MATHML) {
|
|
148
|
+
identifier = VARIABLES.MATHML;
|
|
149
|
+
context.importsUsed.add('mathml');
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
throw new Error(ERROR_MESSAGES.UNKNOWN_TEMPLATE_TYPE(templateType));
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return context.builder.createTaggedTemplate(identifier);
|
|
156
|
+
}
|
|
157
|
+
createFunctionalComponent(path) {
|
|
158
|
+
const context = this.createContext(path);
|
|
159
|
+
if (!isValidJSXElement(context.path))
|
|
160
|
+
throw new Error(ERROR_MESSAGES.INVALID_OPENING_TAG);
|
|
161
|
+
const properties = [];
|
|
162
|
+
const attributes = context.path.node.openingElement.attributes;
|
|
163
|
+
const tagName = getJSXElementName(context.path.node);
|
|
164
|
+
for (const attr of attributes) {
|
|
165
|
+
// Handle spread attributes by spreading the object
|
|
166
|
+
if (t.isJSXSpreadAttribute(attr)) {
|
|
167
|
+
properties.push(t.spreadElement(attr.argument));
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
const name = attr.name.name.toString();
|
|
171
|
+
const camelCaseName = name
|
|
172
|
+
.replace(/-([a-zA-Z])/g, (_, letter) => letter.toUpperCase());
|
|
173
|
+
let value;
|
|
174
|
+
if (attr.value) {
|
|
175
|
+
if (t.isJSXExpressionContainer(attr.value)) {
|
|
176
|
+
// If the expression is empty, skip it
|
|
177
|
+
if (t.isJSXEmptyExpression(attr.value.expression))
|
|
178
|
+
continue;
|
|
179
|
+
value = attr.value.expression;
|
|
180
|
+
}
|
|
181
|
+
else if (t.isStringLiteral(attr.value)) {
|
|
182
|
+
value = attr.value;
|
|
183
|
+
}
|
|
184
|
+
// Other literal types
|
|
185
|
+
else {
|
|
186
|
+
value = attr.value;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
// Boolean attribute (no value means true)
|
|
191
|
+
value = t.booleanLiteral(true);
|
|
192
|
+
}
|
|
193
|
+
properties.push(t.objectProperty(t.identifier(camelCaseName), value));
|
|
194
|
+
}
|
|
195
|
+
// Process children
|
|
196
|
+
if (context.path.node.children.length > 0) {
|
|
197
|
+
const childrenArray = [];
|
|
198
|
+
const childrenPaths = context.path.get(`children`);
|
|
199
|
+
for (const childPath of childrenPaths) {
|
|
200
|
+
const child = childPath.node;
|
|
201
|
+
if (t.isJSXText(child)) {
|
|
202
|
+
const trimmedValue = child.value.trim();
|
|
203
|
+
if (trimmedValue)
|
|
204
|
+
childrenArray.push(t.stringLiteral(trimmedValue));
|
|
205
|
+
}
|
|
206
|
+
else if (t.isJSXExpressionContainer(child)) {
|
|
207
|
+
if (t.isJSXEmptyExpression(child.expression))
|
|
208
|
+
continue;
|
|
209
|
+
childrenArray.push(child.expression);
|
|
210
|
+
}
|
|
211
|
+
else if (t.isJSXElement(child)) {
|
|
212
|
+
if (!isValidOpeningElement(childPath))
|
|
213
|
+
throw new Error(ERROR_MESSAGES.INVALID_OPENING_TAG);
|
|
214
|
+
const isStatic = isJSXElementStatic(childPath);
|
|
215
|
+
const templateType = getTemplateType(childPath);
|
|
216
|
+
if (isStatic || templateType !== 'html') {
|
|
217
|
+
// Create a new builder for this child element
|
|
218
|
+
const childContext = {
|
|
219
|
+
...context,
|
|
220
|
+
path: childPath,
|
|
221
|
+
builder: new TemplateBuilder(),
|
|
222
|
+
isInitialElement: false,
|
|
223
|
+
};
|
|
224
|
+
this.process(childContext);
|
|
225
|
+
childrenArray.push(this.createExpression(childContext));
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
// For compiled version, we need to process child elements differently
|
|
229
|
+
// Create a new compiled builder for this child element
|
|
230
|
+
const childContext = {
|
|
231
|
+
...context,
|
|
232
|
+
path: childPath,
|
|
233
|
+
builder: new CompiledBuilder(),
|
|
234
|
+
currentIndex: 0,
|
|
235
|
+
isInitialElement: false,
|
|
236
|
+
};
|
|
237
|
+
const transpiler = new CompiledTranspiler();
|
|
238
|
+
transpiler.process(childContext);
|
|
239
|
+
// Add the child expression to the array
|
|
240
|
+
childrenArray.push(transpiler.createExpression(childContext));
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
// Add children property if there are any children
|
|
245
|
+
if (childrenArray.length > 0) {
|
|
246
|
+
// If there's only one child, we can use it directly.
|
|
247
|
+
// If there are multiple children, we wrap them in an array.
|
|
248
|
+
// This is because JSX Component Functions expects
|
|
249
|
+
// either a single child or an array of children.
|
|
250
|
+
const childrenValue = childrenArray.length === 1
|
|
251
|
+
? childrenArray[0]
|
|
252
|
+
: t.arrayExpression(childrenArray);
|
|
253
|
+
properties.push(t.objectProperty(t.identifier('children'), childrenValue));
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
const expression = t.callExpression(t.identifier(tagName), [t.objectExpression(properties)]);
|
|
257
|
+
return expression;
|
|
258
|
+
}
|
|
259
|
+
functionalComponent(context) {
|
|
260
|
+
const expression = this.createFunctionalComponent(context.path);
|
|
261
|
+
context.builder.addText('');
|
|
262
|
+
context.builder.addExpression(expression);
|
|
263
|
+
context.builder.addText('');
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
export class CompiledTranspiler extends JSXTranspiler {
|
|
267
|
+
createContext(path) {
|
|
268
|
+
const context = {
|
|
269
|
+
program: getProgramFromPath(path),
|
|
270
|
+
path,
|
|
271
|
+
currentIndex: 0,
|
|
272
|
+
tagName: '',
|
|
273
|
+
isInitialElement: true,
|
|
274
|
+
builder: new CompiledBuilder(),
|
|
275
|
+
importsUsed: new Set(['taggedTemplateUtil']),
|
|
276
|
+
};
|
|
277
|
+
return context;
|
|
278
|
+
}
|
|
279
|
+
process(context) {
|
|
280
|
+
if (t.isJSXFragment(context.path.node)) {
|
|
281
|
+
context.builder.addText('');
|
|
282
|
+
this.children(context);
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
context.tagName = getJSXElementName(context.path.node);
|
|
286
|
+
if (isJSXFunctionElementComponent(context.tagName)) {
|
|
287
|
+
// Process attributes and children into a props object
|
|
288
|
+
if (!context.isInitialElement)
|
|
289
|
+
this.functionalComponent(context);
|
|
290
|
+
// If this is the initial element, this should not happen.
|
|
291
|
+
// and it should instead have been processed as a single expression.
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
this.openingTag(context);
|
|
295
|
+
this.attributes(context);
|
|
296
|
+
this.children(context);
|
|
297
|
+
this.closingTag(context);
|
|
298
|
+
}
|
|
299
|
+
openingTag(context) {
|
|
300
|
+
context.builder.addText('<' + context.tagName);
|
|
301
|
+
}
|
|
302
|
+
attributes(context) {
|
|
303
|
+
if (!isValidJSXElement(context.path))
|
|
304
|
+
throw new Error(ERROR_MESSAGES.INVALID_OPENING_TAG);
|
|
305
|
+
const { attributes } = context.path.node.openingElement;
|
|
306
|
+
const processor = new CompiledAttributeProcessor();
|
|
307
|
+
// Process the attributes
|
|
308
|
+
for (const attr of attributes.values())
|
|
309
|
+
processor.processAttribute(attr, context);
|
|
310
|
+
// Close the opening tag
|
|
311
|
+
context.builder.addText('>');
|
|
312
|
+
}
|
|
313
|
+
children(context) {
|
|
314
|
+
for (const childPath of context.path.get('children').values()) {
|
|
315
|
+
const child = childPath.node;
|
|
316
|
+
// Index is incremented to ensure correct part indices.
|
|
317
|
+
const partIndex = context.currentIndex + 1;
|
|
318
|
+
if (t.isJSXText(child)) {
|
|
319
|
+
if (WHITESPACE_TAGS.includes(context.tagName))
|
|
320
|
+
context.builder.addText(child.value);
|
|
321
|
+
else
|
|
322
|
+
context.builder.addText(child.value.trim());
|
|
323
|
+
}
|
|
324
|
+
else if (t.isJSXExpressionContainer(child)) {
|
|
325
|
+
if (t.isJSXEmptyExpression(child.expression))
|
|
326
|
+
throw new Error(ERROR_MESSAGES.EMPTY_EXPRESSION);
|
|
327
|
+
context.builder.addText('<?>');
|
|
328
|
+
context.builder.addValue(child.expression);
|
|
329
|
+
context.builder.addPart(CreateCompiledPart.child(partIndex));
|
|
330
|
+
}
|
|
331
|
+
else if (t.isJSXElement(child)) {
|
|
332
|
+
if (!isValidJSXElement(childPath))
|
|
333
|
+
throw new Error(ERROR_MESSAGES.INVALID_OPENING_TAG);
|
|
334
|
+
// Recursively process child elements
|
|
335
|
+
this.process({
|
|
336
|
+
...context,
|
|
337
|
+
path: childPath,
|
|
338
|
+
currentIndex: partIndex,
|
|
339
|
+
isInitialElement: false,
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
closingTag(context) {
|
|
345
|
+
context.builder.addText('</' + context.tagName + '>');
|
|
346
|
+
}
|
|
347
|
+
createExpression(context) {
|
|
348
|
+
const variableName = context.path.scope.generateUid();
|
|
349
|
+
const compiledTemplate = context.builder.createCompiledTemplate();
|
|
350
|
+
const compiledExpression = context.builder.createExpression(variableName);
|
|
351
|
+
Ensure.hoistAsTopLevelVariable(context.path, variableName, compiledTemplate);
|
|
352
|
+
return compiledExpression;
|
|
353
|
+
}
|
|
354
|
+
createFunctionalComponent(path) {
|
|
355
|
+
const context = this.createContext(path);
|
|
356
|
+
if (!isValidJSXElement(context.path))
|
|
357
|
+
throw new Error(ERROR_MESSAGES.INVALID_OPENING_TAG);
|
|
358
|
+
const properties = [];
|
|
359
|
+
const attributes = context.path.node.openingElement.attributes;
|
|
360
|
+
const tagName = getJSXElementName(context.path.node);
|
|
361
|
+
for (const attr of attributes) {
|
|
362
|
+
// Handle spread attributes by spreading the object
|
|
363
|
+
if (t.isJSXSpreadAttribute(attr)) {
|
|
364
|
+
properties.push(t.spreadElement(attr.argument));
|
|
365
|
+
continue;
|
|
366
|
+
}
|
|
367
|
+
const name = attr.name.name.toString();
|
|
368
|
+
const camelCaseName = name
|
|
369
|
+
.replace(/-([a-zA-Z])/g, (_, letter) => letter.toUpperCase());
|
|
370
|
+
let value;
|
|
371
|
+
if (attr.value) {
|
|
372
|
+
if (t.isJSXExpressionContainer(attr.value)) {
|
|
373
|
+
// If the expression is empty, skip it
|
|
374
|
+
if (t.isJSXEmptyExpression(attr.value.expression))
|
|
375
|
+
continue;
|
|
376
|
+
value = attr.value.expression;
|
|
377
|
+
}
|
|
378
|
+
else if (t.isStringLiteral(attr.value)) {
|
|
379
|
+
value = attr.value;
|
|
380
|
+
}
|
|
381
|
+
// Other literal types
|
|
382
|
+
else {
|
|
383
|
+
value = attr.value;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
else {
|
|
387
|
+
// Boolean attribute (no value means true)
|
|
388
|
+
value = t.booleanLiteral(true);
|
|
389
|
+
}
|
|
390
|
+
properties.push(t.objectProperty(t.identifier(camelCaseName), value));
|
|
391
|
+
}
|
|
392
|
+
// Process children
|
|
393
|
+
if (context.path.node.children.length > 0) {
|
|
394
|
+
const childrenArray = [];
|
|
395
|
+
for (const childPath of context.path.get('children')) {
|
|
396
|
+
const child = childPath.node;
|
|
397
|
+
if (t.isJSXText(child)) {
|
|
398
|
+
const trimmedValue = child.value.trim();
|
|
399
|
+
if (trimmedValue)
|
|
400
|
+
childrenArray.push(t.stringLiteral(trimmedValue));
|
|
401
|
+
}
|
|
402
|
+
else if (t.isJSXExpressionContainer(child)) {
|
|
403
|
+
if (t.isJSXEmptyExpression(child.expression))
|
|
404
|
+
continue;
|
|
405
|
+
childrenArray.push(child.expression);
|
|
406
|
+
}
|
|
407
|
+
else if (t.isJSXElement(child)) {
|
|
408
|
+
if (!isValidJSXElement(childPath))
|
|
409
|
+
throw new Error(ERROR_MESSAGES.INVALID_OPENING_TAG);
|
|
410
|
+
const isStatic = isJSXElementStatic(childPath);
|
|
411
|
+
const templateType = getTemplateType(childPath);
|
|
412
|
+
if (isStatic || templateType !== 'html') {
|
|
413
|
+
// Create a new builder for this child element
|
|
414
|
+
const childContext = {
|
|
415
|
+
...context,
|
|
416
|
+
literalName: '',
|
|
417
|
+
path: childPath,
|
|
418
|
+
builder: new TemplateBuilder(),
|
|
419
|
+
isInitialElement: false,
|
|
420
|
+
};
|
|
421
|
+
const transpiler = new TemplateTranspiler();
|
|
422
|
+
transpiler.process(childContext);
|
|
423
|
+
childrenArray.push(transpiler.createExpression(childContext));
|
|
424
|
+
}
|
|
425
|
+
else {
|
|
426
|
+
// For compiled version, we need to process child elements differently
|
|
427
|
+
// Create a new compiled builder for this child element
|
|
428
|
+
const childContext = {
|
|
429
|
+
...context,
|
|
430
|
+
path: childPath,
|
|
431
|
+
builder: new CompiledBuilder(),
|
|
432
|
+
currentIndex: context.currentIndex + 1,
|
|
433
|
+
isInitialElement: false,
|
|
434
|
+
};
|
|
435
|
+
this.process(childContext);
|
|
436
|
+
// Add the child expression to the array
|
|
437
|
+
childrenArray.push(this.createExpression(childContext));
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
// Add children property if there are any children
|
|
442
|
+
if (childrenArray.length > 0) {
|
|
443
|
+
// If there's only one child, we can use it directly.
|
|
444
|
+
// If there are multiple children, we wrap them in an array.
|
|
445
|
+
// This is because JSX Component Functions expects
|
|
446
|
+
// either a single child or an array of children.
|
|
447
|
+
const childrenValue = childrenArray.length === 1
|
|
448
|
+
? childrenArray[0]
|
|
449
|
+
: t.arrayExpression(childrenArray);
|
|
450
|
+
properties.push(t.objectProperty(t.identifier('children'), childrenValue));
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
const expression = t.callExpression(t.identifier(tagName), [t.objectExpression(properties)]);
|
|
454
|
+
return expression;
|
|
455
|
+
}
|
|
456
|
+
functionalComponent(context) {
|
|
457
|
+
const expression = this.createFunctionalComponent(context.path);
|
|
458
|
+
context.builder.addText('<?>');
|
|
459
|
+
context.builder.addValue(expression);
|
|
460
|
+
context.builder.addPart(CreateCompiledPart.child(context.currentIndex + 1));
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
//# sourceMappingURL=transpiler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transpiler.js","sourceRoot":"","sources":["../../src/compiler/transpiler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Vite plugin for lit-jsx preserve-JSX compilation mode.
|
|
3
|
+
*
|
|
4
|
+
* This plugin provides compile-time JSX transformation using Babel to convert
|
|
5
|
+
* JSX syntax directly into optimized Lit templates. Unlike the React compatibility
|
|
6
|
+
* mode, this preserves JSX through the entire build pipeline for maximum performance.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* // vite.config.ts
|
|
11
|
+
* import { litJsx } from "@arcmantle/lit-jsx/vite-jsx-preserve";
|
|
12
|
+
*
|
|
13
|
+
* export default {
|
|
14
|
+
* plugins: [litJsx({
|
|
15
|
+
* babel: {
|
|
16
|
+
* // Custom Babel options
|
|
17
|
+
* }
|
|
18
|
+
* })]
|
|
19
|
+
* };
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
import * as babel from '@babel/core';
|
|
23
|
+
import type { PluginOption } from 'vite';
|
|
24
|
+
/**
|
|
25
|
+
* Vite plugin for jsx-lit with preserve-JSX compilation.
|
|
26
|
+
*
|
|
27
|
+
* This plugin uses Babel to transform JSX directly into Lit templates at build time,
|
|
28
|
+
* providing optimal performance by eliminating runtime JSX processing entirely.
|
|
29
|
+
*
|
|
30
|
+
* @param options - Configuration options for the plugin
|
|
31
|
+
* @param options.babel - Babel transform options or function returning options
|
|
32
|
+
* @returns Vite plugin configuration
|
|
33
|
+
*/
|
|
34
|
+
export declare const litJsx: (options?: {
|
|
35
|
+
/** Options for the Babel transform */
|
|
36
|
+
babel?: babel.TransformOptions | ((code: string, id: string) => babel.TransformOptions | Promise<babel.TransformOptions>);
|
|
37
|
+
}) => PluginOption;
|
|
38
|
+
//# sourceMappingURL=vite-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vite-plugin.d.ts","sourceRoot":"","sources":["../../src/compiler/vite-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,KAAK,MAAM,aAAa,CAAC;AAErC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAQzC;;;;;;;;;GASG;AACH,eAAO,MAAM,MAAM,GAAI,UAAS;IAC/B,sCAAsC;IACtC,KAAK,CAAC,EACH,KAAK,CAAC,gBAAgB,GACtB,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,KAAK,CAAC,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;CACvF,KAAG,YAkER,CAAC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Vite plugin for lit-jsx preserve-JSX compilation mode.
|
|
3
|
+
*
|
|
4
|
+
* This plugin provides compile-time JSX transformation using Babel to convert
|
|
5
|
+
* JSX syntax directly into optimized Lit templates. Unlike the React compatibility
|
|
6
|
+
* mode, this preserves JSX through the entire build pipeline for maximum performance.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* // vite.config.ts
|
|
11
|
+
* import { litJsx } from "@arcmantle/lit-jsx/vite-jsx-preserve";
|
|
12
|
+
*
|
|
13
|
+
* export default {
|
|
14
|
+
* plugins: [litJsx({
|
|
15
|
+
* babel: {
|
|
16
|
+
* // Custom Babel options
|
|
17
|
+
* }
|
|
18
|
+
* })]
|
|
19
|
+
* };
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
import * as babel from '@babel/core';
|
|
23
|
+
import { mergeAndConcat } from 'merge-anything';
|
|
24
|
+
import { litJsxBabelPreset } from './babel-preset.js';
|
|
25
|
+
/**
|
|
26
|
+
* Vite plugin for jsx-lit with preserve-JSX compilation.
|
|
27
|
+
*
|
|
28
|
+
* This plugin uses Babel to transform JSX directly into Lit templates at build time,
|
|
29
|
+
* providing optimal performance by eliminating runtime JSX processing entirely.
|
|
30
|
+
*
|
|
31
|
+
* @param options - Configuration options for the plugin
|
|
32
|
+
* @param options.babel - Babel transform options or function returning options
|
|
33
|
+
* @returns Vite plugin configuration
|
|
34
|
+
*/
|
|
35
|
+
export const litJsx = (options = {}) => {
|
|
36
|
+
let projectRoot;
|
|
37
|
+
return {
|
|
38
|
+
name: 'lit-jsx-preserve',
|
|
39
|
+
config: {
|
|
40
|
+
order: 'pre',
|
|
41
|
+
handler(userConfig, env) {
|
|
42
|
+
projectRoot = userConfig.root ?? process.cwd();
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
transform: {
|
|
46
|
+
filter: {
|
|
47
|
+
id: ['**/*.jsx', '**/*.tsx'],
|
|
48
|
+
code: ['/>', '</'],
|
|
49
|
+
},
|
|
50
|
+
order: 'pre',
|
|
51
|
+
async handler(source, id) {
|
|
52
|
+
const plugins = ['jsx', 'decorators', 'decoratorAutoAccessors'];
|
|
53
|
+
if (id.endsWith('.tsx'))
|
|
54
|
+
plugins.push('typescript');
|
|
55
|
+
// Default value for babel user options
|
|
56
|
+
let babelUserOptions = {};
|
|
57
|
+
if (options.babel) {
|
|
58
|
+
if (typeof options.babel === 'function') {
|
|
59
|
+
const babelOptions = options.babel(source, id);
|
|
60
|
+
babelUserOptions = babelOptions instanceof Promise
|
|
61
|
+
? await babelOptions
|
|
62
|
+
: babelOptions;
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
babelUserOptions = options.babel;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
const babelOptions = {
|
|
69
|
+
root: projectRoot,
|
|
70
|
+
filename: id,
|
|
71
|
+
sourceFileName: id,
|
|
72
|
+
presets: [
|
|
73
|
+
[
|
|
74
|
+
litJsxBabelPreset,
|
|
75
|
+
/* merged into the metadata obj through state.opts */
|
|
76
|
+
{},
|
|
77
|
+
],
|
|
78
|
+
],
|
|
79
|
+
plugins: [],
|
|
80
|
+
ast: false,
|
|
81
|
+
sourceMaps: true,
|
|
82
|
+
configFile: false,
|
|
83
|
+
babelrc: false,
|
|
84
|
+
parserOpts: {
|
|
85
|
+
plugins,
|
|
86
|
+
},
|
|
87
|
+
};
|
|
88
|
+
const opts = mergeAndConcat(babelUserOptions, babelOptions);
|
|
89
|
+
const result = await babel.transformAsync(source, opts);
|
|
90
|
+
if (result?.code)
|
|
91
|
+
return { code: result.code, map: result.map };
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
};
|
|
96
|
+
//# sourceMappingURL=vite-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vite-plugin.js","sourceRoot":"","sources":["../../src/compiler/vite-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,KAAK,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAMtD;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,UAKnB,EAAE,EAAgB,EAAE;IACvB,IAAI,WAAmB,CAAC;IAExB,OAAO;QACN,IAAI,EAAI,kBAAkB;QAC1B,MAAM,EAAE;YACP,KAAK,EAAE,KAAK;YACZ,OAAO,CAAC,UAAU,EAAE,GAAG;gBACtB,WAAW,GAAG,UAAU,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAChD,CAAC;SACD;QACD,SAAS,EAAE;YACV,MAAM,EAAE;gBACP,EAAE,EAAI,CAAE,UAAU,EAAE,UAAU,CAAE;gBAChC,IAAI,EAAE,CAAE,IAAI,EAAE,IAAI,CAAE;aACpB;YACD,KAAK,EAAE,KAAK;YACZ,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE;gBACvB,MAAM,OAAO,GAAiB,CAAE,KAAK,EAAE,YAAY,EAAE,wBAAwB,CAAE,CAAC;gBAChF,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;oBACtB,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAE5B,uCAAuC;gBACvC,IAAI,gBAAgB,GAA2B,EAAE,CAAC;gBAElD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;oBACnB,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;wBACzC,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;wBAC/C,gBAAgB,GAAG,YAAY,YAAY,OAAO;4BACjD,CAAC,CAAC,MAAM,YAAY;4BACpB,CAAC,CAAC,YAAY,CAAC;oBACjB,CAAC;yBACI,CAAC;wBACL,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC;oBAClC,CAAC;gBACF,CAAC;gBAED,MAAM,YAAY,GAA2B;oBAC5C,IAAI,EAAY,WAAW;oBAC3B,QAAQ,EAAQ,EAAE;oBAClB,cAAc,EAAE,EAAE;oBAClB,OAAO,EAAS;wBACf;4BACC,iBAAiB;4BACjB,qDAAqD;4BACrD,EAAE;yBACF;qBACD;oBACD,OAAO,EAAK,EAAE;oBACd,GAAG,EAAS,KAAK;oBACjB,UAAU,EAAE,IAAI;oBAChB,UAAU,EAAE,KAAK;oBACjB,OAAO,EAAK,KAAK;oBACjB,UAAU,EAAE;wBACX,OAAO;qBACP;iBACD,CAAC;gBAEF,MAAM,IAAI,GAAG,cAAc,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;gBAC5D,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAExD,IAAI,MAAM,EAAE,IAAI;oBACf,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC;YAChD,CAAC;SACD;KACD,CAAC;AACH,CAAC,CAAC"}
|