jsxpression 0.1.28 → 0.1.29

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 (137) hide show
  1. package/README.md +155 -188
  2. package/lib/analyze/analysis-report.d.ts +2 -2
  3. package/lib/analyze/analysis-report.d.ts.map +1 -1
  4. package/lib/analyze/analysis-report.js +4 -0
  5. package/lib/analyze/analysis-report.js.map +1 -1
  6. package/lib/analyze/data/data-access.d.ts.map +1 -1
  7. package/lib/analyze/data/data-access.js +45 -82
  8. package/lib/analyze/data/data-access.js.map +1 -1
  9. package/lib/analyze/data/method-calls.d.ts.map +1 -1
  10. package/lib/analyze/data/method-calls.js +4 -3
  11. package/lib/analyze/data/method-calls.js.map +1 -1
  12. package/lib/analyze/data/utils.d.ts +2 -3
  13. package/lib/analyze/data/utils.d.ts.map +1 -1
  14. package/lib/analyze/data/utils.js +10 -36
  15. package/lib/analyze/data/utils.js.map +1 -1
  16. package/lib/analyze/jsx/element-attributes.d.ts +1 -1
  17. package/lib/analyze/jsx/element-attributes.d.ts.map +1 -1
  18. package/lib/analyze/jsx/element-attributes.js +13 -3
  19. package/lib/analyze/jsx/element-attributes.js.map +1 -1
  20. package/lib/analyze/jsx/element-children.d.ts +1 -1
  21. package/lib/analyze/jsx/element-children.d.ts.map +1 -1
  22. package/lib/analyze/jsx/element-children.js +16 -5
  23. package/lib/analyze/jsx/element-children.js.map +1 -1
  24. package/lib/analyze/jsx/element-tags.d.ts +1 -1
  25. package/lib/analyze/jsx/element-tags.d.ts.map +1 -1
  26. package/lib/analyze/jsx/element-tags.js +12 -2
  27. package/lib/analyze/jsx/element-tags.js.map +1 -1
  28. package/lib/analyze/security/analyze.d.ts.map +1 -1
  29. package/lib/analyze/security/analyze.js +2 -4
  30. package/lib/analyze/security/analyze.js.map +1 -1
  31. package/lib/analyze/security/call-expressions.d.ts +2 -2
  32. package/lib/analyze/security/call-expressions.d.ts.map +1 -1
  33. package/lib/analyze/security/call-expressions.js +21 -5
  34. package/lib/analyze/security/call-expressions.js.map +1 -1
  35. package/lib/analyze/security/declarations.d.ts +1 -1
  36. package/lib/analyze/security/declarations.d.ts.map +1 -1
  37. package/lib/analyze/security/declarations.js +22 -2
  38. package/lib/analyze/security/declarations.js.map +1 -1
  39. package/lib/analyze/security/expressions.d.ts.map +1 -1
  40. package/lib/analyze/security/expressions.js +10 -2
  41. package/lib/analyze/security/expressions.js.map +1 -1
  42. package/lib/analyze/security/identifiers.d.ts +2 -2
  43. package/lib/analyze/security/identifiers.d.ts.map +1 -1
  44. package/lib/analyze/security/identifiers.js +159 -19
  45. package/lib/analyze/security/identifiers.js.map +1 -1
  46. package/lib/builtins.d.ts.map +1 -1
  47. package/lib/builtins.js +5 -0
  48. package/lib/builtins.js.map +1 -1
  49. package/lib/compile/compile.d.ts.map +1 -1
  50. package/lib/compile/compile.js +131 -61
  51. package/lib/compile/compile.js.map +1 -1
  52. package/lib/evaluate/evaluate.d.ts +3 -3
  53. package/lib/evaluate/evaluate.d.ts.map +1 -1
  54. package/lib/evaluate/evaluate.js +28 -7
  55. package/lib/evaluate/evaluate.js.map +1 -1
  56. package/lib/jsx.d.ts +2 -19
  57. package/lib/jsx.d.ts.map +1 -1
  58. package/lib/jsx.js +0 -6
  59. package/lib/jsx.js.map +1 -1
  60. package/lib/parse/parse.d.ts.map +1 -1
  61. package/lib/parse/parse.js +4 -3
  62. package/lib/parse/parse.js.map +1 -1
  63. package/lib/render.d.ts +4 -4
  64. package/lib/render.d.ts.map +1 -1
  65. package/lib/render.js +7 -9
  66. package/lib/render.js.map +1 -1
  67. package/lib/schema.d.ts +2 -7
  68. package/lib/schema.d.ts.map +1 -1
  69. package/lib/schema.js +0 -43
  70. package/lib/schema.js.map +1 -1
  71. package/lib/traverse.d.ts +4 -4
  72. package/lib/traverse.d.ts.map +1 -1
  73. package/lib/traverse.js +118 -40
  74. package/lib/traverse.js.map +1 -1
  75. package/lib/validate.d.ts +1 -1
  76. package/lib/validate.js +1 -1
  77. package/package.json +4 -3
  78. package/src/analyze/analysis-report.ts +6 -2
  79. package/src/analyze/analyze.test.ts +108 -69
  80. package/src/analyze/data/data-access.ts +45 -90
  81. package/src/analyze/data/method-calls.ts +4 -3
  82. package/src/analyze/data/utils.ts +11 -40
  83. package/src/analyze/jsx/element-attributes.ts +24 -9
  84. package/src/analyze/jsx/element-children.ts +20 -6
  85. package/src/analyze/jsx/element-tags.ts +15 -3
  86. package/src/analyze/security/analyze.ts +1 -3
  87. package/src/analyze/security/call-expressions.ts +37 -17
  88. package/src/analyze/security/declarations.ts +35 -9
  89. package/src/analyze/security/expressions.ts +17 -3
  90. package/src/analyze/security/identifiers.ts +172 -28
  91. package/src/builtins.ts +6 -0
  92. package/src/codegen/generate-typescript-definitions.test.ts +16 -23
  93. package/src/compile/compile.test.ts +153 -30
  94. package/src/compile/compile.ts +163 -73
  95. package/src/evaluate/evaluate.test.ts +276 -14
  96. package/src/evaluate/evaluate.ts +34 -10
  97. package/src/jsx.ts +2 -31
  98. package/src/parse/parse.test.ts +4 -4
  99. package/src/parse/parse.ts +4 -3
  100. package/src/render.test.ts +476 -27
  101. package/src/render.ts +7 -14
  102. package/src/schema.ts +1 -55
  103. package/src/traverse.ts +135 -49
  104. package/src/validate.ts +1 -1
  105. package/LICENSE +0 -21
  106. package/lib/analyze/analyze.test.d.ts +0 -2
  107. package/lib/analyze/analyze.test.d.ts.map +0 -1
  108. package/lib/analyze/analyze.test.js +0 -763
  109. package/lib/analyze/analyze.test.js.map +0 -1
  110. package/lib/analyze/security/member-access.d.ts +0 -6
  111. package/lib/codegen/generate-typescript-definitions.test.d.ts +0 -2
  112. package/lib/codegen/generate-typescript-definitions.test.d.ts.map +0 -1
  113. package/lib/codegen/generate-typescript-definitions.test.js +0 -649
  114. package/lib/codegen/generate-typescript-definitions.test.js.map +0 -1
  115. package/lib/compile/compile.test.d.ts +0 -2
  116. package/lib/compile/compile.test.d.ts.map +0 -1
  117. package/lib/compile/compile.test.js +0 -146
  118. package/lib/compile/compile.test.js.map +0 -1
  119. package/lib/evaluate/evaluate.test.d.ts +0 -2
  120. package/lib/evaluate/evaluate.test.d.ts.map +0 -1
  121. package/lib/evaluate/evaluate.test.js +0 -260
  122. package/lib/evaluate/evaluate.test.js.map +0 -1
  123. package/lib/parse/parse.test.d.ts +0 -2
  124. package/lib/parse/parse.test.d.ts.map +0 -1
  125. package/lib/parse/parse.test.js +0 -80
  126. package/lib/parse/parse.test.js.map +0 -1
  127. package/lib/render.test.d.ts +0 -2
  128. package/lib/render.test.d.ts.map +0 -1
  129. package/lib/render.test.js +0 -301
  130. package/lib/render.test.js.map +0 -1
  131. package/lib/traverse.test.d.ts +0 -2
  132. package/lib/traverse.test.d.ts.map +0 -1
  133. package/lib/traverse.test.js +0 -84
  134. package/lib/traverse.test.js.map +0 -1
  135. package/lib/types.d.ts +0 -12
  136. package/src/analyze/security/member-access.ts +0 -35
  137. package/src/types.ts +0 -17
@@ -1,301 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import { render } from "./render.js";
3
- import { ParseError } from "./parse/index.js";
4
- import { AnalysisError } from "./analyze/index.js";
5
- import { EvaluationError } from "./evaluate/index.js";
6
- describe("render", () => {
7
- it("should render complete JSX pipeline successfully", () => {
8
- const TestComponent = (props, ...children) => ({
9
- type: "TestComponent",
10
- props,
11
- children,
12
- });
13
- const result = render("<Test x={data.x} y={Math.floor(data.y)}>Hello</Test>", {
14
- data: {
15
- x: { type: "number" },
16
- y: { type: "number" },
17
- },
18
- elements: {
19
- Test: {
20
- props: {
21
- x: { type: "number" },
22
- y: { type: "number" },
23
- },
24
- },
25
- },
26
- }, {
27
- data: { x: 10, y: 3.7 },
28
- components: { Test: TestComponent },
29
- });
30
- expect(result.type).toBe("TestComponent");
31
- expect(result.props).toEqual({ x: 10, y: 3 });
32
- expect(result.children).toEqual(["Hello"]);
33
- });
34
- it("should render complex expressions end-to-end", () => {
35
- const TestComponent = (props) => ({
36
- type: "TestComponent",
37
- props,
38
- children: [],
39
- });
40
- const result = render("<Test values={data.items.filter(x => x > 2).map(x => x * 2).join(', ')}>Text</Test>", {
41
- data: {
42
- items: { type: "array", shape: { type: "number" } },
43
- },
44
- elements: {
45
- Test: {
46
- props: {
47
- values: { type: "string" },
48
- },
49
- },
50
- },
51
- }, {
52
- data: { items: [1, 2, 3, 4, 5] },
53
- components: { Test: TestComponent },
54
- });
55
- expect(result.props.values).toBe("6, 8, 10");
56
- });
57
- it("should render nested JSX elements", () => {
58
- const OuterComponent = (props, ...children) => ({
59
- type: "OuterComponent",
60
- props,
61
- children,
62
- });
63
- const InnerComponent = (props) => ({
64
- type: "InnerComponent",
65
- props,
66
- children: [],
67
- });
68
- const result = render("<Outer x={10}><Inner y={20}>Nested</Inner></Outer>", {
69
- elements: {
70
- Outer: {
71
- props: {
72
- x: { type: "number" },
73
- },
74
- },
75
- Inner: {
76
- props: {
77
- y: { type: "number" },
78
- },
79
- },
80
- },
81
- }, {
82
- data: {},
83
- components: {
84
- Outer: OuterComponent,
85
- Inner: InnerComponent,
86
- },
87
- });
88
- expect(result.type).toBe("OuterComponent");
89
- expect(result.props).toEqual({ x: 10 });
90
- expect(result.children).toHaveLength(1);
91
- expect(result.children[0].type).toBe("InnerComponent");
92
- });
93
- it("should render JSX fragments", () => {
94
- const TestComponent = () => ({
95
- type: "Test",
96
- props: {},
97
- children: [],
98
- });
99
- const result = render("<><Test>A</Test><Test>B</Test></>", {
100
- elements: {
101
- Test: {
102
- props: {},
103
- },
104
- },
105
- }, {
106
- data: {},
107
- components: { Test: TestComponent },
108
- });
109
- expect(result).toBeDefined();
110
- });
111
- it("should render bare expression containers", () => {
112
- const result = render("{data.user.name}", {
113
- data: {
114
- user: {
115
- type: "object",
116
- shape: {
117
- name: { type: "string" },
118
- },
119
- },
120
- },
121
- elements: {},
122
- }, {
123
- data: { user: { name: "Alice" } },
124
- components: {},
125
- });
126
- expect(result).toBe("Alice");
127
- });
128
- it("should render bare mathematical expressions", () => {
129
- const result = render("{data.count * 2}", {
130
- data: {
131
- count: { type: "number" },
132
- },
133
- elements: {},
134
- }, {
135
- data: { count: 42 },
136
- components: {},
137
- });
138
- expect(result).toBe(84);
139
- });
140
- it("should render bare method calls", () => {
141
- const result = render("{data.text.toUpperCase()}", {
142
- data: {
143
- text: { type: "string" },
144
- },
145
- elements: {},
146
- }, {
147
- data: { text: "hello world" },
148
- components: {},
149
- });
150
- expect(result).toBe("HELLO WORLD");
151
- });
152
- it("should render bare complex expressions", () => {
153
- const result = render("{data.numbers.map(x => x * 2).join(', ')}", {
154
- data: {
155
- numbers: {
156
- type: "array",
157
- shape: { type: "number" },
158
- },
159
- },
160
- elements: {},
161
- }, {
162
- data: { numbers: [1, 2, 3, 4] },
163
- components: {},
164
- });
165
- expect(result).toBe("2, 4, 6, 8");
166
- });
167
- it("should propagate ParseError for syntax errors", () => {
168
- const TestComponent = () => ({ type: "Test", props: {}, children: [] });
169
- expect(() => render("<Text>Unclosed", {
170
- elements: {
171
- Text: {
172
- props: {},
173
- },
174
- },
175
- }, {
176
- components: { Text: TestComponent },
177
- })).toThrow(ParseError);
178
- });
179
- it("should propagate AnalysisError for disallowed identifiers", () => {
180
- const TestComponent = () => ({ type: "Test", props: {}, children: [] });
181
- expect(() => render("<Text>{window.location}</Text>", {
182
- elements: {
183
- Text: {
184
- props: {},
185
- },
186
- },
187
- }, {
188
- components: { Text: TestComponent },
189
- })).toThrow(AnalysisError);
190
- });
191
- it("should propagate AnalysisError for unknown JSX elements", () => {
192
- const TestComponent = () => ({ type: "Test", props: {}, children: [] });
193
- expect(() => render("<UnknownElement>Hello</UnknownElement>", {
194
- elements: {
195
- Text: {
196
- props: {},
197
- },
198
- },
199
- }, {
200
- components: { Text: TestComponent },
201
- })).toThrow(AnalysisError);
202
- });
203
- it("should propagate AnalysisError for disallowed methods", () => {
204
- const TestComponent = () => ({ type: "Test", props: {}, children: [] });
205
- expect(() => render("<Test>{data.items.push(1)}</Test>", {
206
- data: {
207
- items: {
208
- type: "array",
209
- shape: { type: "number" },
210
- },
211
- },
212
- elements: {
213
- Test: {
214
- props: {},
215
- },
216
- },
217
- }, {
218
- data: { items: [1, 2, 3] },
219
- components: { Test: TestComponent },
220
- })).toThrow(AnalysisError);
221
- });
222
- it("should propagate AnalysisError for unknown components", () => {
223
- const TestComponent = () => ({ type: "Test", props: {}, children: [] });
224
- expect(() => render("<Test>Hello</Test>", {
225
- elements: {
226
- Test: {
227
- props: {},
228
- },
229
- },
230
- }, {
231
- data: {},
232
- components: { Test: TestComponent },
233
- })).not.toThrow();
234
- expect(() => render("<Other>Hello</Other>", {
235
- elements: {},
236
- })).toThrow(AnalysisError);
237
- });
238
- it("should propagate EvaluationError for runtime errors", () => {
239
- const TestComponent = () => ({ type: "Test", props: {}, children: [] });
240
- expect(() => render("<Test value={data.missing.nested}>Hello</Test>", {
241
- data: {
242
- missing: {
243
- type: "object",
244
- shape: {
245
- nested: { type: "number" },
246
- },
247
- },
248
- },
249
- elements: {
250
- Test: {
251
- props: {
252
- value: { type: "number" },
253
- },
254
- },
255
- },
256
- }, {
257
- data: {},
258
- components: { Test: TestComponent },
259
- })).toThrow(EvaluationError);
260
- });
261
- it("should handle empty options", () => {
262
- expect(() => render("<Test>Hello</Test>", { elements: {} })).toThrow(AnalysisError);
263
- });
264
- it("should handle empty props", () => {
265
- const TestComponent = () => ({ type: "TestComponent", props: {}, children: [] });
266
- const result = render("<Test>Hello</Test>", {
267
- elements: {
268
- Test: {
269
- props: {},
270
- },
271
- },
272
- }, {
273
- components: { Test: TestComponent },
274
- });
275
- expect(result.type).toBe("TestComponent");
276
- });
277
- it("should handle conditional rendering with props", () => {
278
- const TestComponent = (props) => ({
279
- type: "Test",
280
- props,
281
- children: [],
282
- });
283
- const result = render("<Test msg={data.show ? 'visible' : 'hidden'}>Text</Test>", {
284
- data: {
285
- show: { type: "boolean" },
286
- },
287
- elements: {
288
- Test: {
289
- props: {
290
- msg: { type: "string" },
291
- },
292
- },
293
- },
294
- }, {
295
- data: { show: false },
296
- components: { Test: TestComponent },
297
- });
298
- expect(result.props.msg).toBe("hidden");
299
- });
300
- });
301
- //# sourceMappingURL=render.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"render.test.js","sourceRoot":"","sources":["../src/render.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=traverse.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"traverse.test.d.ts","sourceRoot":"","sources":["../src/traverse.test.ts"],"names":[],"mappings":""}
@@ -1,84 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import { traverse } from "./traverse.js";
3
- import { parse } from "./parse/index.js";
4
- describe("traverse", () => {
5
- it("should call JSXElement visitor", () => {
6
- const ast = parse("<Text>Hello</Text>");
7
- const visits = [];
8
- traverse(ast, {
9
- JSXElement() {
10
- visits.push("JSXElement");
11
- },
12
- });
13
- expect(visits).toContain("JSXElement");
14
- });
15
- it("should call JSXFragment visitor", () => {
16
- const ast = parse("<>Fragment</>");
17
- const visits = [];
18
- traverse(ast, {
19
- JSXFragment() {
20
- visits.push("JSXFragment");
21
- },
22
- });
23
- expect(visits).toContain("JSXFragment");
24
- });
25
- it("should call Identifier visitor for expressions", () => {
26
- const ast = parse("<Text>{props.value}</Text>");
27
- const identifiers = [];
28
- traverse(ast, {
29
- Identifier(node) {
30
- identifiers.push(node.name);
31
- },
32
- });
33
- expect(identifiers).toContain("props");
34
- });
35
- it("should call JSXAttribute visitor", () => {
36
- const ast = parse("<Text x={10} y={20}>Hello</Text>");
37
- let attributeCount = 0;
38
- traverse(ast, {
39
- JSXAttribute() {
40
- attributeCount++;
41
- },
42
- });
43
- expect(attributeCount).toBe(2);
44
- });
45
- it("should call JSXExpressionContainer visitor", () => {
46
- const ast = parse("<Text>{props.value}</Text>");
47
- const visits = [];
48
- traverse(ast, {
49
- JSXExpressionContainer() {
50
- visits.push("JSXExpressionContainer");
51
- },
52
- });
53
- expect(visits).toContain("JSXExpressionContainer");
54
- });
55
- it("should traverse nested JSX elements", () => {
56
- const ast = parse("<Outer><Inner>Text</Inner></Outer>");
57
- let jsxCount = 0;
58
- traverse(ast, {
59
- JSXElement() {
60
- jsxCount++;
61
- },
62
- });
63
- expect(jsxCount).toBe(2);
64
- });
65
- it("should handle multiple visitor types simultaneously", () => {
66
- const ast = parse("<Text x={props.value}>Hello</Text>");
67
- const visits = [];
68
- traverse(ast, {
69
- JSXElement() {
70
- visits.push("JSXElement");
71
- },
72
- JSXAttribute() {
73
- visits.push("JSXAttribute");
74
- },
75
- Identifier(node) {
76
- visits.push("Identifier:" + node.name);
77
- },
78
- });
79
- expect(visits).toContain("JSXElement");
80
- expect(visits).toContain("JSXAttribute");
81
- expect(visits).toContain("Identifier:props");
82
- });
83
- });
84
- //# sourceMappingURL=traverse.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"traverse.test.js","sourceRoot":"","sources":["../src/traverse.test.ts"],"names":[],"mappings":"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"}
package/lib/types.d.ts DELETED
@@ -1,12 +0,0 @@
1
- export type PropsDict = Record<string, unknown>;
2
- export type DataDict = Record<string, unknown>;
3
- export type ComponentDict = Record<string, Component>;
4
- export type CreateElement<T = any> = (type: Component, props?: PropsDict, ...children: any[]) => T;
5
- export type Node = {
6
- type: string;
7
- props: PropsDict;
8
- children: Node[];
9
- };
10
- export type H = (type: string, props?: PropsDict, ...children: Node[]) => Node;
11
- export type Component = (...args: any[]) => any;
12
- //# sourceMappingURL=types.d.ts.map
@@ -1,35 +0,0 @@
1
- import type { Program, Expression, Super } from "acorn";
2
- import { traverse } from "../../traverse.js";
3
- import type { Schema } from "../../schema.js";
4
- import { ValidationContext } from "../validation-context.js";
5
- import { AnalysisReport } from "../analysis-report.js";
6
- import { getNodeRange } from "../utils.js";
7
-
8
- export function analyzeMemberAccess(
9
- ast: Program,
10
- _schema: Schema,
11
- validationContext: ValidationContext
12
- ): AnalysisReport {
13
- const analysisReport = new AnalysisReport();
14
-
15
- traverse(ast, {
16
- MemberExpression(node) {
17
- let depth = 0;
18
- let currentNode: Expression | Super = node;
19
- while (currentNode.type === "MemberExpression") {
20
- depth += 1;
21
- currentNode = currentNode.object;
22
- }
23
- if (depth > 5) {
24
- analysisReport.addIssue(
25
- "MEMBER_CHAIN_TOO_DEEP",
26
- "member chain too deep",
27
- getNodeRange(node),
28
- validationContext.getSnapshot()
29
- );
30
- }
31
- },
32
- });
33
-
34
- return analysisReport;
35
- }
package/src/types.ts DELETED
@@ -1,17 +0,0 @@
1
- export type PropsDict = Record<string, unknown>;
2
-
3
- export type DataDict = Record<string, unknown>;
4
-
5
- export type ComponentDict = Record<string, Component>;
6
-
7
- export type CreateElement<T = any> = (type: Component, props?: PropsDict, ...children: any[]) => T;
8
-
9
- export type Node = {
10
- type: string;
11
- props: PropsDict;
12
- children: Node[];
13
- };
14
-
15
- export type H = (type: string, props?: PropsDict, ...children: Node[]) => Node;
16
-
17
- export type Component = (...args: any[]) => any;