@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.
Files changed (119) hide show
  1. package/README.md +768 -0
  2. package/dist/compiler/attribute-processor.d.ts +128 -0
  3. package/dist/compiler/attribute-processor.d.ts.map +1 -0
  4. package/dist/compiler/attribute-processor.js +380 -0
  5. package/dist/compiler/attribute-processor.js.map +1 -0
  6. package/dist/compiler/babel-preset.d.ts +6 -0
  7. package/dist/compiler/babel-preset.d.ts.map +1 -0
  8. package/dist/compiler/babel-preset.js +27 -0
  9. package/dist/compiler/babel-preset.js.map +1 -0
  10. package/dist/compiler/builder.d.ts +22 -0
  11. package/dist/compiler/builder.d.ts.map +1 -0
  12. package/dist/compiler/builder.js +62 -0
  13. package/dist/compiler/builder.js.map +1 -0
  14. package/dist/compiler/compiler-utils.d.ts +81 -0
  15. package/dist/compiler/compiler-utils.d.ts.map +1 -0
  16. package/dist/compiler/compiler-utils.js +410 -0
  17. package/dist/compiler/compiler-utils.js.map +1 -0
  18. package/dist/compiler/config.d.ts +77 -0
  19. package/dist/compiler/config.d.ts.map +1 -0
  20. package/dist/compiler/config.js +78 -0
  21. package/dist/compiler/config.js.map +1 -0
  22. package/dist/compiler/postprocess.d.ts +5 -0
  23. package/dist/compiler/postprocess.d.ts.map +1 -0
  24. package/dist/compiler/postprocess.js +3 -0
  25. package/dist/compiler/postprocess.js.map +1 -0
  26. package/dist/compiler/preprocess.d.ts +5 -0
  27. package/dist/compiler/preprocess.d.ts.map +1 -0
  28. package/dist/compiler/preprocess.js +28 -0
  29. package/dist/compiler/preprocess.js.map +1 -0
  30. package/dist/compiler/transform-jsx.d.ts +5 -0
  31. package/dist/compiler/transform-jsx.d.ts.map +1 -0
  32. package/dist/compiler/transform-jsx.js +25 -0
  33. package/dist/compiler/transform-jsx.js.map +1 -0
  34. package/dist/compiler/transpiler.d.ts +48 -0
  35. package/dist/compiler/transpiler.d.ts.map +1 -0
  36. package/dist/compiler/transpiler.js +463 -0
  37. package/dist/compiler/transpiler.js.map +1 -0
  38. package/dist/compiler/vite-plugin.d.ts +38 -0
  39. package/dist/compiler/vite-plugin.d.ts.map +1 -0
  40. package/dist/compiler/vite-plugin.js +96 -0
  41. package/dist/compiler/vite-plugin.js.map +1 -0
  42. package/dist/runtime/choose-component.d.ts +39 -0
  43. package/dist/runtime/choose-component.d.ts.map +1 -0
  44. package/dist/runtime/choose-component.js +40 -0
  45. package/dist/runtime/choose-component.js.map +1 -0
  46. package/dist/runtime/compiler-ctors.d.ts +21 -0
  47. package/dist/runtime/compiler-ctors.d.ts.map +1 -0
  48. package/dist/runtime/compiler-ctors.js +21 -0
  49. package/dist/runtime/compiler-ctors.js.map +1 -0
  50. package/dist/runtime/for-component.d.ts +25 -0
  51. package/dist/runtime/for-component.d.ts.map +1 -0
  52. package/dist/runtime/for-component.js +35 -0
  53. package/dist/runtime/for-component.js.map +1 -0
  54. package/dist/runtime/literal-map.d.ts +22 -0
  55. package/dist/runtime/literal-map.d.ts.map +1 -0
  56. package/dist/runtime/literal-map.js +29 -0
  57. package/dist/runtime/literal-map.js.map +1 -0
  58. package/dist/runtime/rest-directive.d.ts +28 -0
  59. package/dist/runtime/rest-directive.d.ts.map +1 -0
  60. package/dist/runtime/rest-directive.js +49 -0
  61. package/dist/runtime/rest-directive.js.map +1 -0
  62. package/dist/runtime/show-component.d.ts +33 -0
  63. package/dist/runtime/show-component.d.ts.map +1 -0
  64. package/dist/runtime/show-component.js +30 -0
  65. package/dist/runtime/show-component.js.map +1 -0
  66. package/dist/runtime/tagged-template.d.ts +12 -0
  67. package/dist/runtime/tagged-template.d.ts.map +1 -0
  68. package/dist/runtime/tagged-template.js +12 -0
  69. package/dist/runtime/tagged-template.js.map +1 -0
  70. package/dist/runtime/type-helpers.d.ts +80 -0
  71. package/dist/runtime/type-helpers.d.ts.map +1 -0
  72. package/dist/runtime/type-helpers.js +85 -0
  73. package/dist/runtime/type-helpers.js.map +1 -0
  74. package/dist/shared/jsx-types.d.ts +2139 -0
  75. package/dist/shared/jsx-types.d.ts.map +1 -0
  76. package/dist/shared/jsx-types.js +2 -0
  77. package/dist/shared/jsx-types.js.map +1 -0
  78. package/dist/shared/jsx-utils.d.ts +30 -0
  79. package/dist/shared/jsx-utils.d.ts.map +1 -0
  80. package/dist/shared/jsx-utils.js +58 -0
  81. package/dist/shared/jsx-utils.js.map +1 -0
  82. package/dist/shared/mathml-tags.d.ts +12 -0
  83. package/dist/shared/mathml-tags.d.ts.map +1 -0
  84. package/dist/shared/mathml-tags.js +215 -0
  85. package/dist/shared/mathml-tags.js.map +1 -0
  86. package/dist/shared/svg-tags.d.ts +13 -0
  87. package/dist/shared/svg-tags.d.ts.map +1 -0
  88. package/dist/shared/svg-tags.js +95 -0
  89. package/dist/shared/svg-tags.js.map +1 -0
  90. package/dist/utils.d.ts +30 -0
  91. package/dist/utils.d.ts.map +1 -0
  92. package/dist/utils.js +30 -0
  93. package/dist/utils.js.map +1 -0
  94. package/package.json +52 -0
  95. package/src/compiler/attribute-processor.ts +579 -0
  96. package/src/compiler/babel-preset.ts +34 -0
  97. package/src/compiler/builder.ts +86 -0
  98. package/src/compiler/compiler-utils.ts +789 -0
  99. package/src/compiler/config.ts +77 -0
  100. package/src/compiler/postprocess.ts +7 -0
  101. package/src/compiler/preprocess.ts +40 -0
  102. package/src/compiler/transform-jsx.ts +36 -0
  103. package/src/compiler/transpiler.ts +644 -0
  104. package/src/compiler/vite-plugin.ts +114 -0
  105. package/src/external.d.ts +9 -0
  106. package/src/runtime/choose-component.ts +53 -0
  107. package/src/runtime/compiler-ctors.ts +28 -0
  108. package/src/runtime/for-component.ts +54 -0
  109. package/src/runtime/literal-map.ts +37 -0
  110. package/src/runtime/rest-directive.ts +66 -0
  111. package/src/runtime/show-component.ts +48 -0
  112. package/src/runtime/tagged-template.ts +11 -0
  113. package/src/runtime/type-helpers.ts +91 -0
  114. package/src/shared/jsx-types.ts +2556 -0
  115. package/src/shared/jsx-utils.ts +85 -0
  116. package/src/shared/mathml-tags.ts +235 -0
  117. package/src/shared/svg-tags.ts +103 -0
  118. package/src/tsconfig.json +4 -0
  119. package/src/utils.ts +30 -0
@@ -0,0 +1,62 @@
1
+ import * as t from '@babel/types';
2
+ import { CreateCompiledPart } from './attribute-processor.js';
3
+ export class TemplateBuilder {
4
+ constructor() {
5
+ this.currentQuasi = [];
6
+ this.quasis = [];
7
+ this.expressions = [];
8
+ }
9
+ commitQuasi() {
10
+ this.quasis.push(t.templateElement({ raw: this.currentQuasi.join(''), cooked: '' }));
11
+ this.currentQuasi.length = 0;
12
+ }
13
+ addText(text) {
14
+ this.currentQuasi.push(text);
15
+ }
16
+ addExpression(expression) {
17
+ this.commitQuasi();
18
+ this.expressions.push(expression);
19
+ }
20
+ createTaggedTemplate(identifier) {
21
+ if (this.currentQuasi.length)
22
+ this.commitQuasi();
23
+ const ttl = t.taggedTemplateExpression(t.identifier(identifier), t.templateLiteral(this.quasis, this.expressions));
24
+ this.quasis = [];
25
+ this.expressions = [];
26
+ return ttl;
27
+ }
28
+ }
29
+ export class CompiledBuilder {
30
+ constructor() {
31
+ this.templateText = '';
32
+ this.parts = [];
33
+ this.values = [];
34
+ }
35
+ addText(text) {
36
+ this.templateText += text;
37
+ }
38
+ addPart(part) {
39
+ this.parts.push(part);
40
+ }
41
+ addValue(value) {
42
+ this.values.push(value);
43
+ }
44
+ addChild(index, value) {
45
+ this.addPart(CreateCompiledPart.child(index));
46
+ this.addValue(value);
47
+ }
48
+ createCompiledTemplate() {
49
+ const taggedTemplate = t.taggedTemplateExpression(t.identifier('__$t'), t.templateLiteral([t.templateElement({ raw: this.templateText })], []));
50
+ return t.objectExpression([
51
+ t.objectProperty(t.stringLiteral('h'), taggedTemplate),
52
+ t.objectProperty(t.stringLiteral('parts'), t.arrayExpression(this.parts)),
53
+ ]);
54
+ }
55
+ createExpression(variableName) {
56
+ return t.objectExpression([
57
+ t.objectProperty(t.stringLiteral('_$litType$'), t.identifier(variableName)),
58
+ t.objectProperty(t.stringLiteral('values'), t.arrayExpression(this.values)),
59
+ ]);
60
+ }
61
+ }
62
+ //# sourceMappingURL=builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/compiler/builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ import type { Binding, NodePath } from '@babel/traverse';
2
+ import * as t from '@babel/types';
3
+ import type { ProcessorContext } from './attribute-processor.js';
4
+ import { VARIABLES } from './config.js';
5
+ export type Values<T> = T[keyof T];
6
+ export declare const isComponent: (tagName: string) => boolean;
7
+ export declare const getProgramFromPath: (path: NodePath) => t.Program;
8
+ export declare class Ensure {
9
+ static findProgram(path: NodePath): NodePath<t.Program>;
10
+ static import(importSource: (value: string) => boolean, importName: (value: string) => boolean, createImport: () => t.ImportDeclaration, program: t.Program, path: NodePath): void;
11
+ static getNodePath<T extends t.Node>(node: T, path: NodePath): NodePath<T> | undefined;
12
+ static getClosestStatementPath(path: NodePath): NodePath<t.Statement>;
13
+ static getClosestBinding(path: NodePath, name: string): Binding | undefined;
14
+ /**
15
+ * Finds the closest arrow function expression with an expression body
16
+ * starting from the given path.
17
+ * Returns the NodePath of the arrow function expression if found, otherwise undefined.
18
+ */
19
+ static getArrowExpressionPath(path: NodePath): NodePath<t.ArrowFunctionExpression> | undefined;
20
+ /**
21
+ * Hoists the expression to a variable declaration in the closest scope.
22
+ *
23
+ * If the path is inside an arrow function with an expression body, it converts
24
+ * the arrow function body to a block statement and inserts the variable declaration
25
+ * before the return statement.
26
+ *
27
+ * If the path is not inside such an arrow function, it inserts the variable declaration
28
+ * before the closest statement and replaces the target node with the new variable identifier.
29
+ */
30
+ static replaceAndHoistAsVariable(path: NodePath, variableName: string, expression: t.Expression, expandArrow?: boolean): t.Identifier;
31
+ static hoistAsTopLevelVariable(path: NodePath, variableName: string, expression: t.Expression): t.Identifier;
32
+ static componentTagDeclaration(path: NodePath, tagName: string, variableName: string, createDeclaration: () => t.VariableDeclarator): t.Identifier;
33
+ static componentLiteral(tagName: string, variableName: string, path: NodePath, program: t.Program): t.Identifier;
34
+ }
35
+ export declare class EnsureImport {
36
+ static html(program: t.Program, path: NodePath): void;
37
+ static htmlStatic(program: t.Program, path: NodePath): void;
38
+ static svg(program: t.Program, path: NodePath): void;
39
+ static svgStatic(program: t.Program, path: NodePath): void;
40
+ static mathml(program: t.Program, path: NodePath): void;
41
+ static mathmlStatic(program: t.Program, path: NodePath): void;
42
+ static unsafeStatic(program: t.Program, path: NodePath): void;
43
+ static createRef(program: t.Program, path: NodePath): void;
44
+ static styleMap(program: t.Program, path: NodePath): void;
45
+ static classMap(program: t.Program, path: NodePath): void;
46
+ static rest(program: t.Program, path: NodePath): void;
47
+ static literalMap(program: t.Program, path: NodePath): void;
48
+ static taggedTemplateUtil(program: t.Program, path: NodePath): void;
49
+ static booleanPart(program: t.Program, path: NodePath): void;
50
+ static attributePart(program: t.Program, path: NodePath): void;
51
+ static propertyPart(program: t.Program, path: NodePath): void;
52
+ static elementPart(program: t.Program, path: NodePath): void;
53
+ static eventPart(program: t.Program, path: NodePath): void;
54
+ static childPart(program: t.Program, path: NodePath): void;
55
+ }
56
+ export type ValidJSXElement = t.JSXElement & {
57
+ openingElement: t.JSXOpeningElement & {
58
+ name: t.JSXIdentifier | t.JSXMemberExpression;
59
+ };
60
+ };
61
+ export declare const isValidJSXElement: (path: NodePath) => path is NodePath<ValidJSXElement>;
62
+ export declare const isValidOpeningElement: (path: NodePath) => path is NodePath<t.JSXElement | t.JSXFragment>;
63
+ export declare const getJSXElementName: (node: t.JSXElement) => string;
64
+ export declare const isJSXCustomElementComponent: (nodeOrName: t.JSXElement | string) => boolean;
65
+ export declare const isJSXFunctionElementComponent: (pathOrName: NodePath<t.JSXElement | t.JSXFragment> | string) => boolean;
66
+ export declare const isJSXElementPath: (path: NodePath) => path is NodePath<t.JSXElement>;
67
+ export declare const isJSXFragmentPath: (path: NodePath) => path is NodePath<t.JSXFragment>;
68
+ /**
69
+ * Determines if a JSX element will result in a static template.
70
+ * This function traverses the JSX tree to check if any custom element components
71
+ * are present, which would make the template static.
72
+ *
73
+ * @param path - The NodePath of the JSX element to analyze
74
+ * @returns true if the template will be static, false otherwise
75
+ */
76
+ export declare const isJSXElementStatic: (path: NodePath<t.JSXElement | t.JSXFragment>) => boolean;
77
+ export declare const ensureImports: (context: ProcessorContext) => void;
78
+ export type TemplateType = Values<Pick<typeof VARIABLES, 'HTML' | 'SVG' | 'MATHML'>>;
79
+ export declare const getTemplateType: (path: NodePath<t.JSXElement | t.JSXFragment>) => TemplateType;
80
+ export declare const getTemplateTag: (tagName: string) => Values<Pick<typeof VARIABLES, "HTML" | "SVG" | "MATHML">>;
81
+ //# sourceMappingURL=compiler-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiler-utils.d.ts","sourceRoot":"","sources":["../../src/compiler/compiler-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,410 @@
1
+ import * as t from '@babel/types';
2
+ import { isMathmlTag } from '../shared/mathml-tags.js';
3
+ import { isSvgTag } from '../shared/svg-tags.js';
4
+ import { COMPONENT_POSTFIX, ERROR_MESSAGES, SOURCES, VARIABLES } from './config.js';
5
+ export const isComponent = (tagName) => {
6
+ return (tagName[0] && tagName[0].toLowerCase() !== tagName[0])
7
+ || tagName.includes('.')
8
+ || /[^a-zA-Z]/.test(tagName[0] ?? '');
9
+ };
10
+ export const getProgramFromPath = (path) => {
11
+ const program = path.findParent(p => t.isProgram(p.node))?.node;
12
+ if (!program)
13
+ throw new Error(ERROR_MESSAGES.NO_PROGRAM_FOUND);
14
+ return program;
15
+ };
16
+ export class Ensure {
17
+ static findProgram(path) {
18
+ const programPath = path.findParent(p => t.isProgram(p.node));
19
+ if (!programPath)
20
+ throw new Error('Could not find program path');
21
+ return programPath;
22
+ }
23
+ static import(importSource, importName, createImport, program, path) {
24
+ // Check if the import already exists
25
+ const hasImport = program.body.some(node => {
26
+ if (!t.isImportDeclaration(node))
27
+ return false;
28
+ // Check if the import source matches
29
+ const isCorrectImport = importSource(node.source.value);
30
+ if (!isCorrectImport)
31
+ return false;
32
+ // Check if the import name matches
33
+ return node.specifiers.some(spec => {
34
+ return t.isImportSpecifier(spec)
35
+ ? t.isIdentifier(spec.imported)
36
+ ? importName(spec.imported.name)
37
+ : importName(spec.imported.value)
38
+ : false;
39
+ });
40
+ });
41
+ // If not found, add the import
42
+ if (!hasImport) {
43
+ const importDeclaration = createImport();
44
+ const programPath = path.findParent(p => t.isProgram(p.node));
45
+ // Insert at the top of the file
46
+ const [insertedPath] = programPath.unshiftContainer('body', importDeclaration);
47
+ programPath.scope.registerDeclaration(insertedPath);
48
+ }
49
+ }
50
+ static getNodePath(node, path) {
51
+ // First, traverse upwards to find the root (Program) path
52
+ let rootPath = path;
53
+ while (rootPath.parentPath)
54
+ rootPath = rootPath.parentPath;
55
+ // Now traverse down from the root to find the target node
56
+ let foundPath;
57
+ rootPath.traverse({
58
+ enter(path) {
59
+ if (path.node === node) {
60
+ foundPath = path;
61
+ path.stop();
62
+ }
63
+ },
64
+ });
65
+ return foundPath;
66
+ }
67
+ static getClosestStatementPath(path) {
68
+ let statementPath = path;
69
+ while (statementPath && !statementPath.isStatement())
70
+ statementPath = statementPath.parentPath;
71
+ if (!statementPath)
72
+ throw new Error(`Could not find statement path for node insertion`);
73
+ return statementPath;
74
+ }
75
+ static getClosestBinding(path, name) {
76
+ let currentScope = path.scope;
77
+ while (currentScope) {
78
+ const existingBinding = currentScope.getBinding(name);
79
+ if (existingBinding)
80
+ return existingBinding;
81
+ currentScope = currentScope.parent;
82
+ }
83
+ }
84
+ /**
85
+ * Finds the closest arrow function expression with an expression body
86
+ * starting from the given path.
87
+ * Returns the NodePath of the arrow function expression if found, otherwise undefined.
88
+ */
89
+ static getArrowExpressionPath(path) {
90
+ // Check if we're inside an arrow function with an expression body
91
+ let currentPath = path;
92
+ let arrowFunctionPath;
93
+ while (currentPath && currentPath.parentPath) {
94
+ if (t.isArrowFunctionExpression(currentPath.node) && t.isExpression(currentPath.node.body)) {
95
+ arrowFunctionPath = currentPath;
96
+ break;
97
+ }
98
+ currentPath = currentPath.parentPath;
99
+ }
100
+ return arrowFunctionPath;
101
+ }
102
+ /**
103
+ * Hoists the expression to a variable declaration in the closest scope.
104
+ *
105
+ * If the path is inside an arrow function with an expression body, it converts
106
+ * the arrow function body to a block statement and inserts the variable declaration
107
+ * before the return statement.
108
+ *
109
+ * If the path is not inside such an arrow function, it inserts the variable declaration
110
+ * before the closest statement and replaces the target node with the new variable identifier.
111
+ */
112
+ static replaceAndHoistAsVariable(path, variableName, expression, expandArrow = true) {
113
+ if (this.getClosestBinding(path, variableName))
114
+ return t.identifier(variableName);
115
+ const nodeToReplace = path.node;
116
+ // Create the new variable declaration
117
+ const identifier = t.identifier(variableName);
118
+ const declarator = t.variableDeclarator(identifier, expression);
119
+ const variableDeclaration = t.variableDeclaration('const', [declarator]);
120
+ // Check if we're inside an arrow function with an expression body
121
+ // If expandArrow is false, we skip this check and always insert
122
+ // the variable declaration as a regular statement.
123
+ const arrowFunctionPath = expandArrow ? this.getArrowExpressionPath(path) : undefined;
124
+ if (arrowFunctionPath) {
125
+ // Convert arrow function expression body to block statement
126
+ const returnStatement = t.returnStatement(identifier);
127
+ const blockStatement = t.blockStatement([variableDeclaration, returnStatement]);
128
+ // Replace the arrow function body
129
+ arrowFunctionPath.get('body').replaceWith(blockStatement);
130
+ // Replace the target node with an identifier pointing to the new variable
131
+ const nodePath = this.getNodePath(nodeToReplace, path);
132
+ nodePath?.replaceWith(identifier);
133
+ }
134
+ else {
135
+ // Fall back to the original behavior
136
+ const statementPath = this.getClosestStatementPath(path);
137
+ // Insert the new declaration before the current statement
138
+ const [insertedPath] = statementPath.insertBefore(variableDeclaration);
139
+ // Register the new declaration with the appropriate scope
140
+ statementPath.scope.registerDeclaration(insertedPath);
141
+ // Replace the target node with an identifier pointing to the new variable
142
+ const nodePath = this.getNodePath(nodeToReplace, path);
143
+ nodePath?.replaceWith(identifier);
144
+ }
145
+ return identifier;
146
+ }
147
+ static hoistAsTopLevelVariable(path, variableName, expression) {
148
+ // Find the program path
149
+ const programPath = this.findProgram(path);
150
+ // Check if variable with this name already exists at the top level
151
+ const existingBinding = programPath.scope.getBinding(variableName);
152
+ if (existingBinding)
153
+ return t.identifier(variableName);
154
+ // Create the variable declaration
155
+ const identifier = t.identifier(variableName);
156
+ const declarator = t.variableDeclarator(identifier, expression);
157
+ const variableDeclaration = t.variableDeclaration('const', [declarator]);
158
+ // Find the last import declaration index
159
+ const programBody = programPath.node.body;
160
+ const lastImportIndex = programBody.reduceRight((lastIndex, node, index) => {
161
+ return lastIndex === -1 && t.isImportDeclaration(node) ? index : lastIndex;
162
+ }, -1);
163
+ // Insert after the last import, or at the beginning if no imports
164
+ const insertionIndex = lastImportIndex + 1;
165
+ if (insertionIndex === 0 || insertionIndex >= programBody.length) {
166
+ // No imports found or at the end - add to the beginning/end
167
+ const [insertedPath] = insertionIndex === 0
168
+ ? programPath.unshiftContainer('body', variableDeclaration)
169
+ : programPath.pushContainer('body', variableDeclaration);
170
+ programPath.scope.registerDeclaration(insertedPath);
171
+ }
172
+ else {
173
+ // Insert after the last import
174
+ const bodyPaths = programPath.get('body');
175
+ const targetPath = bodyPaths[insertionIndex];
176
+ if (targetPath) {
177
+ const [insertedPath] = targetPath.insertBefore(variableDeclaration);
178
+ programPath.scope.registerDeclaration(insertedPath);
179
+ }
180
+ }
181
+ return identifier;
182
+ }
183
+ static componentTagDeclaration(path, tagName, variableName, createDeclaration) {
184
+ // Start from the current scope and work upward
185
+ let currentScope = path.scope;
186
+ while (currentScope) {
187
+ // First check if the prefixed variable already exists
188
+ const prefixedBinding = currentScope.getBinding(variableName);
189
+ if (prefixedBinding)
190
+ return t.identifier(variableName);
191
+ // Then check if the tagName exists
192
+ const tagNameBinding = currentScope.getBinding(tagName);
193
+ if (tagNameBinding) {
194
+ // Found the tagName binding, now insert the prefixed declaration just below it
195
+ const declarator = createDeclaration();
196
+ const variableDeclaration = t.variableDeclaration('const', [declarator]);
197
+ // Find the statement-level path to insert after
198
+ // This handles cases where the binding might be an import specifier or variable declarator
199
+ let statementPath = tagNameBinding.path;
200
+ while (statementPath && !statementPath.isStatement())
201
+ statementPath = statementPath.parentPath;
202
+ if (!statementPath)
203
+ throw new Error(ERROR_MESSAGES.NO_STATEMENT_PATH(tagName));
204
+ // Insert the new declaration after the tagName declaration
205
+ const [insertedPath] = statementPath.insertAfter(variableDeclaration);
206
+ // Register the new declaration with the appropriate scope
207
+ statementPath.scope.registerDeclaration(insertedPath);
208
+ return t.identifier(variableName);
209
+ }
210
+ // Move up to the parent scope
211
+ currentScope = currentScope.parent;
212
+ }
213
+ // If tagName is not found in any scope, throw an error
214
+ throw new Error(ERROR_MESSAGES.TAG_NAME_NOT_FOUND(tagName));
215
+ }
216
+ static componentLiteral(tagName, variableName, path, program) {
217
+ EnsureImport.literalMap(program, path);
218
+ variableName = variableName.replace(COMPONENT_POSTFIX, '');
219
+ tagName = tagName.replace(COMPONENT_POSTFIX, '');
220
+ return this.componentTagDeclaration(path, tagName, variableName, () => t.variableDeclarator(t.identifier(variableName), t.callExpression(t.memberExpression(t.identifier(VARIABLES.LITERAL_MAP), t.identifier('get')), [t.identifier(tagName + COMPONENT_POSTFIX)])));
221
+ }
222
+ }
223
+ export class EnsureImport {
224
+ static html(program, path) {
225
+ Ensure.import((source) => source === SOURCES.HTML || source === SOURCES.HTML_ALT, (name) => name === VARIABLES.HTML, () => t.importDeclaration([t.importSpecifier(t.identifier(VARIABLES.HTML), t.identifier(VARIABLES.HTML))], t.stringLiteral(SOURCES.HTML)), program, path);
226
+ }
227
+ static htmlStatic(program, path) {
228
+ Ensure.import((source) => source === SOURCES.HTML_STATIC || source === SOURCES.HTML_STATIC_ALT, (name) => name === VARIABLES.HTML, () => t.importDeclaration([
229
+ t.importSpecifier(t.identifier(VARIABLES.HTML_STATIC), t.identifier(VARIABLES.HTML)),
230
+ ], t.stringLiteral(SOURCES.HTML_STATIC)), program, path);
231
+ }
232
+ static svg(program, path) {
233
+ Ensure.import((source) => source === SOURCES.SVG || source === SOURCES.SVG_ALT, (name) => name === VARIABLES.SVG, () => t.importDeclaration([t.importSpecifier(t.identifier(VARIABLES.SVG), t.identifier(VARIABLES.SVG))], t.stringLiteral(SOURCES.SVG)), program, path);
234
+ }
235
+ static svgStatic(program, path) {
236
+ Ensure.import((source) => source === SOURCES.SVG_STATIC || source === SOURCES.SVG_STATIC_ALT, (name) => name === VARIABLES.SVG, () => t.importDeclaration([
237
+ t.importSpecifier(t.identifier(VARIABLES.SVG_STATIC), t.identifier(VARIABLES.SVG)),
238
+ ], t.stringLiteral(SOURCES.SVG_STATIC)), program, path);
239
+ }
240
+ static mathml(program, path) {
241
+ Ensure.import((source) => source === SOURCES.MATHML || source === SOURCES.MATHML_ALT, (name) => name === VARIABLES.MATHML, () => t.importDeclaration([t.importSpecifier(t.identifier(VARIABLES.MATHML), t.identifier(VARIABLES.MATHML))], t.stringLiteral(SOURCES.MATHML)), program, path);
242
+ }
243
+ static mathmlStatic(program, path) {
244
+ Ensure.import((source) => source === SOURCES.MATHML_STATIC || source === SOURCES.MATHML_STATIC_ALT, (name) => name === VARIABLES.MATHML, () => t.importDeclaration([
245
+ t.importSpecifier(t.identifier(VARIABLES.MATHML_STATIC), t.identifier(VARIABLES.MATHML)),
246
+ ], t.stringLiteral(SOURCES.MATHML_STATIC)), program, path);
247
+ }
248
+ static unsafeStatic(program, path) {
249
+ Ensure.import((source) => source === SOURCES.UNSAFE_STATIC || source === SOURCES.UNSAFE_STATIC_ALT, (name) => name === VARIABLES.UNSAFE_STATIC, () => t.importDeclaration([
250
+ t.importSpecifier(t.identifier(VARIABLES.UNSAFE_STATIC), t.identifier(VARIABLES.UNSAFE_STATIC)),
251
+ ], t.stringLiteral(SOURCES.UNSAFE_STATIC)), program, path);
252
+ }
253
+ static createRef(program, path) {
254
+ Ensure.import((source) => source === SOURCES.REF_ALT || source === SOURCES.REF, (name) => name === VARIABLES.REF, () => t.importDeclaration([
255
+ t.importSpecifier(t.identifier(VARIABLES.REF), t.identifier(VARIABLES.REF)),
256
+ ], t.stringLiteral(SOURCES.REF)), program, path);
257
+ }
258
+ static styleMap(program, path) {
259
+ Ensure.import((source) => source === SOURCES.STYLE_MAP_ALT || source === SOURCES.STYLE_MAP, (name) => name === VARIABLES.STYLE_MAP, () => t.importDeclaration([
260
+ t.importSpecifier(t.identifier(VARIABLES.STYLE_MAP), t.identifier(VARIABLES.STYLE_MAP)),
261
+ ], t.stringLiteral(SOURCES.STYLE_MAP)), program, path);
262
+ }
263
+ static classMap(program, path) {
264
+ Ensure.import((source) => source === SOURCES.CLASS_MAP_ALT || source === SOURCES.CLASS_MAP, (name) => name === VARIABLES.CLASS_MAP, () => t.importDeclaration([
265
+ t.importSpecifier(t.identifier(VARIABLES.CLASS_MAP), t.identifier(VARIABLES.CLASS_MAP)),
266
+ ], t.stringLiteral(SOURCES.CLASS_MAP)), program, path);
267
+ }
268
+ static rest(program, path) {
269
+ Ensure.import((source) => source === SOURCES.REST, (name) => name === VARIABLES.REST, () => t.importDeclaration([
270
+ t.importSpecifier(t.identifier(VARIABLES.REST), t.identifier(VARIABLES.REST)),
271
+ ], t.stringLiteral(SOURCES.REST)), program, path);
272
+ }
273
+ static literalMap(program, path) {
274
+ Ensure.import((source) => source === SOURCES.LITERAL_MAP, (name) => name === VARIABLES.LITERAL_MAP, () => t.importDeclaration([
275
+ t.importSpecifier(t.identifier(VARIABLES.LITERAL_MAP), t.identifier(VARIABLES.LITERAL_MAP)),
276
+ ], t.stringLiteral(SOURCES.LITERAL_MAP)), program, path);
277
+ }
278
+ static taggedTemplateUtil(program, path) {
279
+ Ensure.import((source) => source === SOURCES.JSX_LIT, (name) => name === VARIABLES.TAGGED_TEMPLATE_UTIL, () => t.importDeclaration([
280
+ t.importSpecifier(t.identifier(VARIABLES.TAGGED_TEMPLATE_UTIL), t.identifier(VARIABLES.TAGGED_TEMPLATE_UTIL)),
281
+ ], t.stringLiteral(SOURCES.JSX_LIT)), program, path);
282
+ }
283
+ static booleanPart(program, path) {
284
+ Ensure.import((source) => source === SOURCES.JSX_LIT, (name) => name === VARIABLES.BOOLEAN_PART, () => t.importDeclaration([
285
+ t.importSpecifier(t.identifier(VARIABLES.BOOLEAN_PART), t.identifier(VARIABLES.BOOLEAN_PART)),
286
+ ], t.stringLiteral(SOURCES.JSX_LIT)), program, path);
287
+ }
288
+ static attributePart(program, path) {
289
+ Ensure.import((source) => source === SOURCES.JSX_LIT, (name) => name === VARIABLES.ATTRIBUTE_PART, () => t.importDeclaration([
290
+ t.importSpecifier(t.identifier(VARIABLES.ATTRIBUTE_PART), t.identifier(VARIABLES.ATTRIBUTE_PART)),
291
+ ], t.stringLiteral(SOURCES.JSX_LIT)), program, path);
292
+ }
293
+ static propertyPart(program, path) {
294
+ Ensure.import((source) => source === SOURCES.JSX_LIT, (name) => name === VARIABLES.PROPERTY_PART, () => t.importDeclaration([
295
+ t.importSpecifier(t.identifier(VARIABLES.PROPERTY_PART), t.identifier(VARIABLES.PROPERTY_PART)),
296
+ ], t.stringLiteral(SOURCES.JSX_LIT)), program, path);
297
+ }
298
+ static elementPart(program, path) {
299
+ Ensure.import((source) => source === SOURCES.JSX_LIT, (name) => name === VARIABLES.ELEMENT_PART, () => t.importDeclaration([
300
+ t.importSpecifier(t.identifier(VARIABLES.ELEMENT_PART), t.identifier(VARIABLES.ELEMENT_PART)),
301
+ ], t.stringLiteral(SOURCES.JSX_LIT)), program, path);
302
+ }
303
+ static eventPart(program, path) {
304
+ Ensure.import((source) => source === SOURCES.JSX_LIT, (name) => name === VARIABLES.EVENT_PART, () => t.importDeclaration([
305
+ t.importSpecifier(t.identifier(VARIABLES.EVENT_PART), t.identifier(VARIABLES.EVENT_PART)),
306
+ ], t.stringLiteral(SOURCES.JSX_LIT)), program, path);
307
+ }
308
+ static childPart(program, path) {
309
+ Ensure.import((source) => source === SOURCES.JSX_LIT, (name) => name === VARIABLES.CHILD_PART, () => t.importDeclaration([
310
+ t.importSpecifier(t.identifier(VARIABLES.CHILD_PART), t.identifier(VARIABLES.CHILD_PART)),
311
+ ], t.stringLiteral(SOURCES.JSX_LIT)), program, path);
312
+ }
313
+ }
314
+ export const isValidJSXElement = (path) => {
315
+ const node = path.node;
316
+ return t.isJSXElement(node)
317
+ && t.isJSXOpeningElement(node.openingElement)
318
+ && (t.isJSXIdentifier(node.openingElement.name)
319
+ || t.isJSXMemberExpression(node.openingElement.name));
320
+ };
321
+ export const isValidOpeningElement = (path) => {
322
+ return t.isJSXElement(path.node) || t.isJSXFragment(path.node);
323
+ };
324
+ export const getJSXElementName = (node) => {
325
+ const openingElement = node.openingElement;
326
+ const name = t.isJSXIdentifier(openingElement.name)
327
+ ? openingElement.name.name
328
+ : t.isJSXMemberExpression(openingElement.name)
329
+ ? t.isJSXIdentifier(openingElement.name.object)
330
+ ? openingElement.name.object.name + '.' + openingElement.name.property.name
331
+ : ''
332
+ : '';
333
+ return name;
334
+ };
335
+ export const isJSXCustomElementComponent = (nodeOrName) => {
336
+ const tagName = typeof nodeOrName !== 'string'
337
+ ? getJSXElementName(nodeOrName)
338
+ : nodeOrName;
339
+ if (tagName.endsWith(COMPONENT_POSTFIX))
340
+ return true;
341
+ return false;
342
+ };
343
+ export const isJSXFunctionElementComponent = (pathOrName) => {
344
+ let tagName;
345
+ if (typeof pathOrName === 'string') {
346
+ tagName = pathOrName;
347
+ }
348
+ else {
349
+ const node = pathOrName.node;
350
+ // If it's a fragment, we cannot determine the tag name.
351
+ if (t.isJSXFragment(node))
352
+ return false;
353
+ tagName = getJSXElementName(node);
354
+ }
355
+ if (!isComponent(tagName))
356
+ return false;
357
+ if (tagName.endsWith(COMPONENT_POSTFIX))
358
+ return false;
359
+ return true;
360
+ };
361
+ export const isJSXElementPath = (path) => t.isJSXElement(path.node);
362
+ export const isJSXFragmentPath = (path) => t.isJSXFragment(path.node);
363
+ /**
364
+ * Determines if a JSX element will result in a static template.
365
+ * This function traverses the JSX tree to check if any custom element components
366
+ * are present, which would make the template static.
367
+ *
368
+ * @param path - The NodePath of the JSX element to analyze
369
+ * @returns true if the template will be static, false otherwise
370
+ */
371
+ export const isJSXElementStatic = (path) => {
372
+ if (t.isJSXElement(path.node) && isJSXCustomElementComponent(path.node))
373
+ return true;
374
+ for (const childPath of path.get('children')) {
375
+ if (!isJSXElementPath(childPath) && !isJSXFragmentPath(childPath))
376
+ continue;
377
+ if (isJSXElementStatic(childPath))
378
+ return true;
379
+ }
380
+ return false;
381
+ };
382
+ export const ensureImports = (context) => {
383
+ const record = EnsureImport;
384
+ // Ensure all imports used in the JSX element are imported.
385
+ context.importsUsed.forEach(importName => {
386
+ const key = importName;
387
+ if (key in record)
388
+ record[key](context.program, context.path);
389
+ });
390
+ };
391
+ export const getTemplateType = (path) => {
392
+ if (t.isJSXElement(path.node)) {
393
+ const name = getJSXElementName(path.node);
394
+ return getTemplateTag(name);
395
+ }
396
+ for (const childPath of path.get('children')) {
397
+ if (!isJSXElementPath(childPath) && !isJSXFragmentPath(childPath))
398
+ continue;
399
+ return getTemplateType(childPath);
400
+ }
401
+ return VARIABLES.HTML;
402
+ };
403
+ export const getTemplateTag = (tagName) => {
404
+ if (isSvgTag(tagName))
405
+ return VARIABLES.SVG;
406
+ if (isMathmlTag(tagName))
407
+ return VARIABLES.MATHML;
408
+ return VARIABLES.HTML;
409
+ };
410
+ //# sourceMappingURL=compiler-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiler-utils.js","sourceRoot":"","sources":["../../src/compiler/compiler-utils.ts"],"names":[],"mappings":"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"}