jsxpression 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 (165) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +368 -0
  3. package/lib/analyze/analysis-error.d.ts.map +1 -0
  4. package/lib/analyze/analysis-report.d.ts +33 -0
  5. package/lib/analyze/analysis-report.d.ts.map +1 -0
  6. package/lib/analyze/analysis-report.js +194 -0
  7. package/lib/analyze/analysis-report.js.map +1 -0
  8. package/lib/analyze/analyze.d.ts.map +1 -0
  9. package/lib/analyze/analyze.test.d.ts.map +1 -0
  10. package/lib/analyze/analyze.test.js +765 -0
  11. package/lib/analyze/analyze.test.js.map +1 -0
  12. package/lib/analyze/data/analyze.d.ts.map +1 -0
  13. package/lib/analyze/data/data-access.d.ts.map +1 -0
  14. package/lib/analyze/data/index.d.ts.map +1 -0
  15. package/lib/analyze/data/method-calls.d.ts.map +1 -0
  16. package/lib/analyze/data/utils.d.ts.map +1 -0
  17. package/lib/analyze/index.d.ts.map +1 -0
  18. package/lib/analyze/jsx/analyze.d.ts.map +1 -0
  19. package/lib/analyze/jsx/element-attributes.d.ts.map +1 -0
  20. package/lib/analyze/jsx/element-attributes.js +89 -0
  21. package/lib/analyze/jsx/element-attributes.js.map +1 -0
  22. package/lib/analyze/jsx/element-children.d.ts.map +1 -0
  23. package/lib/analyze/jsx/element-tags.d.ts.map +1 -0
  24. package/lib/analyze/jsx/index.d.ts.map +1 -0
  25. package/lib/analyze/security/analyze.d.ts.map +1 -0
  26. package/lib/analyze/security/call-expressions.d.ts.map +1 -0
  27. package/lib/analyze/security/declarations.d.ts.map +1 -0
  28. package/lib/analyze/security/expressions.d.ts.map +1 -0
  29. package/lib/analyze/security/identifiers.d.ts.map +1 -0
  30. package/lib/analyze/security/index.d.ts.map +1 -0
  31. package/lib/analyze/security/member-access.d.ts.map +1 -0
  32. package/lib/builtins.d.ts +50 -0
  33. package/lib/builtins.d.ts.map +1 -0
  34. package/lib/builtins.js +1065 -0
  35. package/lib/builtins.js.map +1 -0
  36. package/lib/codegen/builtin-types.d.ts +11 -0
  37. package/lib/codegen/builtin-types.d.ts.map +1 -0
  38. package/lib/codegen/builtin-types.js +151 -0
  39. package/lib/codegen/builtin-types.js.map +1 -0
  40. package/lib/codegen/builtins/builtin-types.d.ts +2 -0
  41. package/lib/codegen/builtins/builtin-types.d.ts.map +1 -0
  42. package/lib/codegen/builtins/builtin-types.js +143 -0
  43. package/lib/codegen/builtins/builtin-types.js.map +1 -0
  44. package/lib/codegen/builtins/index.d.ts +2 -0
  45. package/lib/codegen/builtins/index.d.ts.map +1 -0
  46. package/lib/codegen/builtins/index.js +6 -0
  47. package/lib/codegen/builtins/index.js.map +1 -0
  48. package/lib/codegen/declare-types.d.ts +20 -0
  49. package/lib/codegen/declare-types.d.ts.map +1 -0
  50. package/lib/codegen/declare-types.js +299 -0
  51. package/lib/codegen/declare-types.js.map +1 -0
  52. package/lib/codegen/generate-typescript-definitions.d.ts +31 -0
  53. package/lib/codegen/generate-typescript-definitions.d.ts.map +1 -0
  54. package/lib/codegen/generate-typescript-definitions.js +37 -0
  55. package/lib/codegen/generate-typescript-definitions.js.map +1 -0
  56. package/lib/codegen/generate-typescript-definitions.test.d.ts +2 -0
  57. package/lib/codegen/generate-typescript-definitions.test.d.ts.map +1 -0
  58. package/lib/codegen/generate-typescript-definitions.test.js +587 -0
  59. package/lib/codegen/generate-typescript-definitions.test.js.map +1 -0
  60. package/lib/codegen/index.d.ts +2 -0
  61. package/lib/codegen/index.d.ts.map +1 -0
  62. package/lib/codegen/index.js +6 -0
  63. package/lib/codegen/index.js.map +1 -0
  64. package/lib/codegen/schema/component-types.d.ts +3 -0
  65. package/lib/codegen/schema/component-types.d.ts.map +1 -0
  66. package/lib/codegen/schema/component-types.js +118 -0
  67. package/lib/codegen/schema/component-types.js.map +1 -0
  68. package/lib/codegen/schema/data-types.d.ts +3 -0
  69. package/lib/codegen/schema/data-types.d.ts.map +1 -0
  70. package/lib/codegen/schema/data-types.js +98 -0
  71. package/lib/codegen/schema/data-types.js.map +1 -0
  72. package/lib/codegen/schema/index.d.ts +3 -0
  73. package/lib/codegen/schema/index.d.ts.map +1 -0
  74. package/lib/codegen/schema/index.js +8 -0
  75. package/lib/codegen/schema/index.js.map +1 -0
  76. package/lib/codegen/schema/utils.d.ts +4 -0
  77. package/lib/codegen/schema/utils.d.ts.map +1 -0
  78. package/lib/codegen/schema/utils.js +103 -0
  79. package/lib/codegen/schema/utils.js.map +1 -0
  80. package/lib/codegen/schema-to-types.d.ts +14 -0
  81. package/lib/codegen/schema-to-types.d.ts.map +1 -0
  82. package/lib/codegen/schema-to-types.js +203 -0
  83. package/lib/codegen/schema-to-types.js.map +1 -0
  84. package/lib/compile/compile.d.ts.map +1 -0
  85. package/lib/compile/compile.js +245 -0
  86. package/lib/compile/compile.js.map +1 -0
  87. package/lib/compile/compile.test.d.ts.map +1 -0
  88. package/lib/compile/compile.test.js +148 -0
  89. package/lib/compile/compile.test.js.map +1 -0
  90. package/lib/evaluate/evaluate.d.ts +26 -0
  91. package/lib/evaluate/evaluate.d.ts.map +1 -0
  92. package/lib/evaluate/evaluate.js +40 -0
  93. package/lib/evaluate/evaluation-error.d.ts +4 -0
  94. package/lib/evaluate/evaluation-error.d.ts.map +1 -0
  95. package/lib/evaluate/evaluation-error.js +6 -0
  96. package/lib/index.d.ts +8 -0
  97. package/lib/index.d.ts.map +1 -0
  98. package/lib/index.js +16 -0
  99. package/lib/index.js.map +1 -0
  100. package/lib/render.d.ts +58 -0
  101. package/lib/render.d.ts.map +1 -0
  102. package/lib/render.js +52 -0
  103. package/lib/render.test.d.ts.map +1 -0
  104. package/lib/schema.d.ts +68 -0
  105. package/lib/schema.d.ts.map +1 -0
  106. package/lib/schema.js +106 -0
  107. package/lib/validate.d.ts +41 -0
  108. package/lib/validate.d.ts.map +1 -0
  109. package/lib/validate.js +42 -0
  110. package/package.json +27 -0
  111. package/src/analyze/analysis-error.ts +26 -0
  112. package/src/analyze/analysis-report.ts +228 -0
  113. package/src/analyze/analyze.test.ts +829 -0
  114. package/src/analyze/analyze.ts +10 -0
  115. package/src/analyze/data/analyze.ts +15 -0
  116. package/src/analyze/data/data-access.ts +349 -0
  117. package/src/analyze/data/index.ts +1 -0
  118. package/src/analyze/data/method-calls.ts +96 -0
  119. package/src/analyze/data/utils.ts +329 -0
  120. package/src/analyze/index.ts +3 -0
  121. package/src/analyze/jsx/analyze.ts +17 -0
  122. package/src/analyze/jsx/element-attributes.ts +143 -0
  123. package/src/analyze/jsx/element-children.ts +97 -0
  124. package/src/analyze/jsx/element-tags.ts +55 -0
  125. package/src/analyze/jsx/index.ts +1 -0
  126. package/src/analyze/security/analyze.ts +21 -0
  127. package/src/analyze/security/call-expressions.ts +41 -0
  128. package/src/analyze/security/declarations.ts +67 -0
  129. package/src/analyze/security/expressions.ts +100 -0
  130. package/src/analyze/security/identifiers.ts +113 -0
  131. package/src/analyze/security/index.ts +1 -0
  132. package/src/analyze/security/member-access.ts +35 -0
  133. package/src/analyze/utils.ts +118 -0
  134. package/src/analyze/validation-context.ts +32 -0
  135. package/src/builtins.ts +1149 -0
  136. package/src/codegen/builtins/builtin-types.ts +174 -0
  137. package/src/codegen/builtins/index.ts +1 -0
  138. package/src/codegen/generate-typescript-definitions.test.ts +676 -0
  139. package/src/codegen/generate-typescript-definitions.ts +35 -0
  140. package/src/codegen/index.ts +1 -0
  141. package/src/codegen/schema/component-types.ts +140 -0
  142. package/src/codegen/schema/data-types.ts +109 -0
  143. package/src/codegen/schema/index.ts +2 -0
  144. package/src/codegen/schema/utils.ts +111 -0
  145. package/src/compile/compilation-error.ts +37 -0
  146. package/src/compile/compile.test.ts +180 -0
  147. package/src/compile/compile.ts +282 -0
  148. package/src/compile/index.ts +2 -0
  149. package/src/evaluate/evaluate.test.ts +316 -0
  150. package/src/evaluate/evaluate.ts +81 -0
  151. package/src/evaluate/evaluation-error.ts +6 -0
  152. package/src/evaluate/index.ts +2 -0
  153. package/src/index.ts +10 -0
  154. package/src/jsx.ts +161 -0
  155. package/src/parse/index.ts +2 -0
  156. package/src/parse/parse-error.ts +14 -0
  157. package/src/parse/parse.test.ts +99 -0
  158. package/src/parse/parse.ts +40 -0
  159. package/src/render.test.ts +425 -0
  160. package/src/render.ts +75 -0
  161. package/src/schema.ts +195 -0
  162. package/src/traverse.test.ts +104 -0
  163. package/src/traverse.ts +78 -0
  164. package/src/types.ts +17 -0
  165. package/src/validate.ts +59 -0
@@ -0,0 +1,174 @@
1
+ import { getBuiltins } from "../../builtins.js";
2
+ import type {
3
+ BuiltinSchema,
4
+ BuiltinMethodSchema,
5
+ BuiltinParamSchema,
6
+ BuiltinPropertySchema,
7
+ BuiltinCallbackParamSchema,
8
+ } from "../../builtins.js";
9
+
10
+ function generateJSDoc(description?: string, indent: string = ""): string {
11
+ if (!description) return "";
12
+ return `${indent}/**\n${indent} * ${description}\n${indent} */\n`;
13
+ }
14
+
15
+ function generateCallbackSignature(signature: { params: BuiltinCallbackParamSchema[]; returnType: string }): string {
16
+ const params = signature.params.map((p) => `${p.name}: ${p.type}`).join(", ");
17
+ return `(${params}) => ${signature.returnType}`;
18
+ }
19
+
20
+ function extractGenerics(method: BuiltinMethodSchema): string {
21
+ for (const param of method.params) {
22
+ if (param.kind === "function") {
23
+ const usesU = param.signature.returnType === "U" || param.signature.params.some((p) => p.type === "U");
24
+ if (usesU) return "<U>";
25
+ }
26
+ }
27
+ return "";
28
+ }
29
+
30
+ function generateParam(param: BuiltinParamSchema): string {
31
+ let typeStr: string;
32
+
33
+ if (param.kind === "function") {
34
+ typeStr = generateCallbackSignature(param.signature);
35
+ } else {
36
+ typeStr = param.types.join(" | ");
37
+ // The type should be an array for variadic parameters
38
+ if (param.variadic) {
39
+ typeStr = `${typeStr}[]`;
40
+ }
41
+ }
42
+
43
+ const optional = param.required || param.variadic ? "" : "?";
44
+ const variadic = param.variadic ? "..." : "";
45
+ return `${variadic}${param.name}${optional}: ${typeStr}`;
46
+ }
47
+
48
+ function generateMethod(methodName: string, method: BuiltinMethodSchema, indent: string = " "): string {
49
+ let result = "";
50
+
51
+ if (method.description || method.params.some((p) => p.description)) {
52
+ result += `${indent}/**\n`;
53
+
54
+ if (method.description) {
55
+ result += `${indent} * ${method.description}\n`;
56
+ if (method.params.some((p) => p.description)) {
57
+ result += `${indent} *\n`;
58
+ }
59
+ }
60
+
61
+ for (const param of method.params) {
62
+ if (param.description) {
63
+ result += `${indent} * @param ${param.name} ${param.description}\n`;
64
+ }
65
+ }
66
+
67
+ result += `${indent} * @returns ${method.returnType}\n`;
68
+ result += `${indent} */\n`;
69
+ }
70
+
71
+ const generics = extractGenerics(method);
72
+ const params = method.params.map((p: BuiltinParamSchema) => generateParam(p)).join(", ");
73
+ result += `${indent}${methodName}${generics}(${params}): ${method.returnType};`;
74
+
75
+ return result;
76
+ }
77
+
78
+ function generateProperty(propertyName: string, property: BuiltinPropertySchema, indent: string = " "): string {
79
+ let result = "";
80
+
81
+ if (property.description) {
82
+ result += generateJSDoc(property.description, indent);
83
+ }
84
+
85
+ const readonly = property.readonly ? "readonly " : "";
86
+ result += `${indent}${readonly}${propertyName}: ${property.type};`;
87
+
88
+ return result;
89
+ }
90
+
91
+ function generateNamespaceDeclaration(namespace: string, schema: BuiltinSchema): string {
92
+ let result = "";
93
+
94
+ if (schema.intrinsic) {
95
+ const interfaceName = namespace.replace(".prototype", "");
96
+ const genericParam = schema.generic || "";
97
+
98
+ result += `interface ${interfaceName}${genericParam} {\n`;
99
+
100
+ if (schema.properties) {
101
+ for (const [propName, prop] of Object.entries(schema.properties)) {
102
+ result += generateProperty(propName, prop) + "\n";
103
+ }
104
+ }
105
+
106
+ if (schema.methods) {
107
+ for (const [methodName, method] of Object.entries(schema.methods)) {
108
+ result += generateMethod(methodName, method) + "\n";
109
+ }
110
+ }
111
+
112
+ result += "}\n";
113
+ } else {
114
+ result += `declare const ${namespace}: {\n`;
115
+
116
+ if (schema.properties) {
117
+ for (const [propName, prop] of Object.entries(schema.properties)) {
118
+ result += generateProperty(propName, prop) + "\n";
119
+ }
120
+ }
121
+
122
+ if (schema.methods) {
123
+ for (const [methodName, method] of Object.entries(schema.methods)) {
124
+ result += generateMethod(methodName, method) + "\n";
125
+ }
126
+ }
127
+
128
+ result += "};\n";
129
+ }
130
+
131
+ return result;
132
+ }
133
+
134
+ export function declareBuiltinTypes(): string {
135
+ const builtins = getBuiltins();
136
+
137
+ let declarations = `
138
+ declare global {
139
+ namespace JSX {
140
+ type Element = {
141
+ type: any;
142
+ props: any;
143
+ key?: string | number | null;
144
+ };
145
+ type Node = Element | string | number | boolean | null | undefined | Node[];
146
+ interface IntrinsicElements {
147
+ [elemName: string]: any;
148
+ }
149
+ }
150
+
151
+ interface Iterator<T> {
152
+ next(): IteratorResult<T>;
153
+ }
154
+
155
+ interface IteratorResult<T> {
156
+ done: boolean;
157
+ value: T;
158
+ }
159
+
160
+ `;
161
+
162
+ for (const [namespace, schema] of Object.entries(builtins)) {
163
+ declarations +=
164
+ " " +
165
+ generateNamespaceDeclaration(namespace, schema)
166
+ .replace(/\n/g, "\n ")
167
+ .replace(/\n {2}\n/g, "\n\n")
168
+ .replace(/\n {2}$/, "\n");
169
+ }
170
+
171
+ declarations += `}\n\nexport {};\n`;
172
+
173
+ return declarations;
174
+ }
@@ -0,0 +1 @@
1
+ export { declareBuiltinTypes } from "./builtin-types.js";