jsxpression 0.1.11 → 0.1.13
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/lib/analyze/analysis-error.js +1 -5
- package/lib/analyze/analysis-error.js.map +1 -1
- package/lib/analyze/analysis-report.js +1 -5
- package/lib/analyze/analysis-report.js.map +1 -1
- package/lib/analyze/analyze.js +6 -9
- package/lib/analyze/analyze.js.map +1 -1
- package/lib/analyze/analyze.test.js +312 -314
- package/lib/analyze/analyze.test.js.map +1 -1
- package/lib/analyze/data/analyze.js +7 -10
- package/lib/analyze/data/analyze.js.map +1 -1
- package/lib/analyze/data/data-access.js +20 -24
- package/lib/analyze/data/data-access.js.map +1 -1
- package/lib/analyze/data/index.js +1 -5
- package/lib/analyze/data/index.js.map +1 -1
- package/lib/analyze/data/method-calls.js +17 -20
- package/lib/analyze/data/method-calls.js.map +1 -1
- package/lib/analyze/data/utils.js +22 -29
- package/lib/analyze/data/utils.js.map +1 -1
- package/lib/analyze/index.js +3 -9
- package/lib/analyze/index.js.map +1 -1
- package/lib/analyze/jsx/analyze.js +8 -11
- package/lib/analyze/jsx/analyze.js.map +1 -1
- package/lib/analyze/jsx/element-attributes.js +21 -24
- package/lib/analyze/jsx/element-attributes.js.map +1 -1
- package/lib/analyze/jsx/element-children.js +20 -23
- package/lib/analyze/jsx/element-children.js.map +1 -1
- package/lib/analyze/jsx/element-tags.js +12 -15
- package/lib/analyze/jsx/element-tags.js.map +1 -1
- package/lib/analyze/jsx/index.js +1 -5
- package/lib/analyze/jsx/index.js.map +1 -1
- package/lib/analyze/security/analyze.js +10 -13
- package/lib/analyze/security/analyze.js.map +1 -1
- package/lib/analyze/security/call-expressions.js +8 -11
- package/lib/analyze/security/call-expressions.js.map +1 -1
- package/lib/analyze/security/declarations.js +12 -15
- package/lib/analyze/security/declarations.js.map +1 -1
- package/lib/analyze/security/expressions.js +14 -17
- package/lib/analyze/security/expressions.js.map +1 -1
- package/lib/analyze/security/identifiers.js +10 -13
- package/lib/analyze/security/identifiers.js.map +1 -1
- package/lib/analyze/security/index.js +1 -5
- package/lib/analyze/security/index.js.map +1 -1
- package/lib/analyze/security/member-access.js +7 -10
- package/lib/analyze/security/member-access.js.map +1 -1
- package/lib/analyze/utils.js +4 -10
- package/lib/analyze/utils.js.map +1 -1
- package/lib/analyze/validation-context.js +1 -5
- package/lib/analyze/validation-context.js.map +1 -1
- package/lib/builtins.js +9 -20
- package/lib/builtins.js.map +1 -1
- package/lib/codegen/builtins/builtin-types.js +3 -6
- package/lib/codegen/builtins/builtin-types.js.map +1 -1
- package/lib/codegen/builtins/index.js +1 -5
- package/lib/codegen/builtins/index.js.map +1 -1
- package/lib/codegen/generate-typescript-definitions.js +4 -7
- package/lib/codegen/generate-typescript-definitions.js.map +1 -1
- package/lib/codegen/generate-typescript-definitions.test.js +190 -192
- package/lib/codegen/generate-typescript-definitions.test.js.map +1 -1
- package/lib/codegen/index.js +1 -5
- package/lib/codegen/index.js.map +1 -1
- package/lib/codegen/schema/component-types.js +3 -6
- package/lib/codegen/schema/component-types.js.map +1 -1
- package/lib/codegen/schema/data-types.js +3 -6
- package/lib/codegen/schema/data-types.js.map +1 -1
- package/lib/codegen/schema/index.js +2 -7
- package/lib/codegen/schema/index.js.map +1 -1
- package/lib/codegen/schema/utils.js +3 -8
- package/lib/codegen/schema/utils.js.map +1 -1
- package/lib/compile/compilation-error.js +1 -5
- package/lib/compile/compilation-error.js.map +1 -1
- package/lib/compile/compile.js +18 -21
- package/lib/compile/compile.js.map +1 -1
- package/lib/compile/compile.test.js +110 -112
- package/lib/compile/compile.test.js.map +1 -1
- package/lib/compile/index.js +2 -7
- package/lib/compile/index.js.map +1 -1
- package/lib/evaluate/evaluate.js +8 -11
- package/lib/evaluate/evaluate.js.map +1 -1
- package/lib/evaluate/evaluate.test.js +56 -58
- package/lib/evaluate/evaluate.test.js.map +1 -1
- package/lib/evaluate/evaluation-error.js +1 -5
- package/lib/evaluate/evaluation-error.js.map +1 -1
- package/lib/evaluate/index.js +2 -7
- package/lib/evaluate/index.js.map +1 -1
- package/lib/index.js +6 -15
- package/lib/index.js.map +1 -1
- package/lib/jsx.js +10 -22
- package/lib/jsx.js.map +1 -1
- package/lib/parse/index.js +2 -7
- package/lib/parse/index.js.map +1 -1
- package/lib/parse/parse-error.js +1 -5
- package/lib/parse/parse-error.js.map +1 -1
- package/lib/parse/parse.js +7 -13
- package/lib/parse/parse.js.map +1 -1
- package/lib/parse/parse.test.js +56 -58
- package/lib/parse/parse.test.js.map +1 -1
- package/lib/render.js +9 -12
- package/lib/render.js.map +1 -1
- package/lib/render.test.js +62 -64
- package/lib/render.test.js.map +1 -1
- package/lib/schema.js +18 -38
- package/lib/schema.js.map +1 -1
- package/lib/traverse.js +8 -11
- package/lib/traverse.js.map +1 -1
- package/lib/traverse.test.js +34 -36
- package/lib/traverse.test.js.map +1 -1
- package/lib/types.js +1 -2
- package/lib/validate.js +7 -10
- package/lib/validate.js.map +1 -1
- package/package.json +3 -2
package/lib/parse/parse.test.js
CHANGED
|
@@ -1,82 +1,80 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
(0, vitest_1.expect)(result.body).toHaveLength(1);
|
|
11
|
-
(0, vitest_1.expect)(result.body[0].type).toBe("ExpressionStatement");
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { parse } from "./parse.js";
|
|
3
|
+
import { ParseError } from "./parse-error.js";
|
|
4
|
+
describe("parse", () => {
|
|
5
|
+
it("should parse valid JSX element", () => {
|
|
6
|
+
const result = parse("<Text x={10}>Hello</Text>");
|
|
7
|
+
expect(result.type).toBe("Program");
|
|
8
|
+
expect(result.body).toHaveLength(1);
|
|
9
|
+
expect(result.body[0].type).toBe("ExpressionStatement");
|
|
12
10
|
});
|
|
13
|
-
|
|
14
|
-
const result =
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
it("should parse JSX fragment", () => {
|
|
12
|
+
const result = parse("<><Text>A</Text><Text>B</Text></>");
|
|
13
|
+
expect(result.type).toBe("Program");
|
|
14
|
+
expect(result.body[0].type).toBe("ExpressionStatement");
|
|
17
15
|
});
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
it("should throw ParseError with position for syntax error", () => {
|
|
17
|
+
expect(() => parse("<Text>Unclosed")).toThrow(ParseError);
|
|
20
18
|
try {
|
|
21
|
-
|
|
19
|
+
parse("<Text>Unclosed");
|
|
22
20
|
}
|
|
23
21
|
catch (error) {
|
|
24
|
-
|
|
22
|
+
expect(error).toBeInstanceOf(ParseError);
|
|
25
23
|
}
|
|
26
24
|
});
|
|
27
|
-
|
|
28
|
-
const result =
|
|
29
|
-
|
|
30
|
-
|
|
25
|
+
it("should parse nested JSX", () => {
|
|
26
|
+
const result = parse("<Outer><Inner><Deep>Text</Deep></Inner></Outer>");
|
|
27
|
+
expect(result.type).toBe("Program");
|
|
28
|
+
expect(result.body[0].type).toBe("ExpressionStatement");
|
|
31
29
|
});
|
|
32
|
-
|
|
33
|
-
const result =
|
|
34
|
-
|
|
35
|
-
|
|
30
|
+
it("should parse JSX with expressions", () => {
|
|
31
|
+
const result = parse("<Text>{props.value}</Text>");
|
|
32
|
+
expect(result.type).toBe("Program");
|
|
33
|
+
expect(result.body[0].type).toBe("ExpressionStatement");
|
|
36
34
|
});
|
|
37
|
-
|
|
38
|
-
const result =
|
|
39
|
-
|
|
40
|
-
|
|
35
|
+
it("should parse JSX with complex expressions", () => {
|
|
36
|
+
const result = parse("<Text>{data.items.map(x => x * 2).join(', ')}</Text>");
|
|
37
|
+
expect(result.type).toBe("Program");
|
|
38
|
+
expect(result.body[0].type).toBe("ExpressionStatement");
|
|
41
39
|
});
|
|
42
|
-
|
|
43
|
-
const result =
|
|
44
|
-
|
|
45
|
-
|
|
40
|
+
it("should parse JSX with attributes", () => {
|
|
41
|
+
const result = parse('<Text x={10} y="hello" z={data.value}>Content</Text>');
|
|
42
|
+
expect(result.type).toBe("Program");
|
|
43
|
+
expect(result.body[0].type).toBe("ExpressionStatement");
|
|
46
44
|
});
|
|
47
|
-
|
|
48
|
-
const result =
|
|
49
|
-
|
|
50
|
-
|
|
45
|
+
it("should parse self-closing JSX elements", () => {
|
|
46
|
+
const result = parse("<Input value={data.name} />");
|
|
47
|
+
expect(result.type).toBe("Program");
|
|
48
|
+
expect(result.body[0].type).toBe("ExpressionStatement");
|
|
51
49
|
});
|
|
52
|
-
|
|
53
|
-
const result =
|
|
54
|
-
|
|
55
|
-
|
|
50
|
+
it("should parse JSX with conditional expressions", () => {
|
|
51
|
+
const result = parse("<Text>{data.show ? 'visible' : 'hidden'}</Text>");
|
|
52
|
+
expect(result.type).toBe("Program");
|
|
53
|
+
expect(result.body[0].type).toBe("ExpressionStatement");
|
|
56
54
|
});
|
|
57
|
-
|
|
58
|
-
const result =
|
|
59
|
-
|
|
60
|
-
|
|
55
|
+
it("should parse empty JSX expressions", () => {
|
|
56
|
+
const result = parse("<Text>{}</Text>");
|
|
57
|
+
expect(result.type).toBe("Program");
|
|
58
|
+
expect(result.body[0].type).toBe("ExpressionStatement");
|
|
61
59
|
});
|
|
62
|
-
|
|
60
|
+
it("should preserve location information in errors", () => {
|
|
63
61
|
try {
|
|
64
|
-
|
|
62
|
+
parse("<Text>Unclosed");
|
|
65
63
|
throw new Error("Should have thrown ParseError");
|
|
66
64
|
}
|
|
67
65
|
catch (error) {
|
|
68
|
-
|
|
69
|
-
if (error instanceof
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
66
|
+
expect(error).toBeInstanceOf(ParseError);
|
|
67
|
+
if (error instanceof ParseError && error.loc) {
|
|
68
|
+
expect(error.loc).toBeDefined();
|
|
69
|
+
expect(error.loc.line).toBe(1);
|
|
70
|
+
expect(error.loc.column).toBe(6);
|
|
73
71
|
}
|
|
74
72
|
}
|
|
75
73
|
});
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
74
|
+
it("should handle invalid JSX syntax", () => {
|
|
75
|
+
expect(() => parse("<>")).toThrow(ParseError);
|
|
76
|
+
expect(() => parse("<Text><")).toThrow(ParseError);
|
|
77
|
+
expect(() => parse("<Text attr>")).toThrow(ParseError);
|
|
80
78
|
});
|
|
81
79
|
});
|
|
82
80
|
//# sourceMappingURL=parse.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.test.js","sourceRoot":"","sources":["../../src/parse/parse.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"parse.test.js","sourceRoot":"","sources":["../../src/parse/parse.test.ts"],"names":[],"mappings":"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"}
|
package/lib/render.js
CHANGED
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const evaluate_js_1 = require("./evaluate/evaluate.js");
|
|
6
|
-
const index_js_2 = require("./parse/index.js");
|
|
7
|
-
const index_js_3 = require("./analyze/index.js");
|
|
1
|
+
import { compile } from "./compile/index.js";
|
|
2
|
+
import { evaluate } from "./evaluate/evaluate.js";
|
|
3
|
+
import { parse } from "./parse/index.js";
|
|
4
|
+
import { analyze, AnalysisError } from "./analyze/index.js";
|
|
8
5
|
/**
|
|
9
6
|
* Renders a JSX expression with data validation and security constraints.
|
|
10
7
|
*
|
|
@@ -45,12 +42,12 @@ const index_js_3 = require("./analyze/index.js");
|
|
|
45
42
|
* );
|
|
46
43
|
* ```
|
|
47
44
|
*/
|
|
48
|
-
function render(source, schema, { minSeverity = 3, ...options } = {}) {
|
|
49
|
-
const ast =
|
|
50
|
-
const report =
|
|
45
|
+
export function render(source, schema, { minSeverity = 3, ...options } = {}) {
|
|
46
|
+
const ast = parse(source);
|
|
47
|
+
const report = analyze(ast, schema);
|
|
51
48
|
if (report.hasIssues(minSeverity)) {
|
|
52
|
-
throw
|
|
49
|
+
throw AnalysisError.fromReport(report);
|
|
53
50
|
}
|
|
54
|
-
return
|
|
51
|
+
return evaluate(compile(ast), schema, options);
|
|
55
52
|
}
|
|
56
53
|
//# sourceMappingURL=render.js.map
|
package/lib/render.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAmB,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAiB5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,UAAU,MAAM,CACpB,MAAc,EACd,MAAc,EACd,EAAE,WAAW,GAAG,CAAC,EAAE,GAAG,OAAO,KAAuB,EAAE;IAEtD,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAEpC,IAAI,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;QAClC,MAAM,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,CAAM,CAAC;AACtD,CAAC"}
|
package/lib/render.test.js
CHANGED
|
@@ -1,18 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
(0, vitest_1.describe)("render", () => {
|
|
9
|
-
(0, vitest_1.it)("should render complete JSX pipeline successfully", () => {
|
|
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", () => {
|
|
10
8
|
const TestComponent = (props, ...children) => ({
|
|
11
9
|
type: "TestComponent",
|
|
12
10
|
props,
|
|
13
11
|
children,
|
|
14
12
|
});
|
|
15
|
-
const result =
|
|
13
|
+
const result = render("<Test x={data.x} y={Math.floor(data.y)}>Hello</Test>", {
|
|
16
14
|
data: {
|
|
17
15
|
x: { type: "number" },
|
|
18
16
|
y: { type: "number" },
|
|
@@ -29,17 +27,17 @@ const index_js_3 = require("./evaluate/index.js");
|
|
|
29
27
|
data: { x: 10, y: 3.7 },
|
|
30
28
|
components: { Test: TestComponent },
|
|
31
29
|
});
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
30
|
+
expect(result.type).toBe("TestComponent");
|
|
31
|
+
expect(result.props).toEqual({ x: 10, y: 3 });
|
|
32
|
+
expect(result.children).toEqual(["Hello"]);
|
|
35
33
|
});
|
|
36
|
-
|
|
34
|
+
it("should render complex expressions end-to-end", () => {
|
|
37
35
|
const TestComponent = (props) => ({
|
|
38
36
|
type: "TestComponent",
|
|
39
37
|
props,
|
|
40
38
|
children: [],
|
|
41
39
|
});
|
|
42
|
-
const result =
|
|
40
|
+
const result = render("<Test values={data.items.filter(x => x > 2).map(x => x * 2).join(', ')}>Text</Test>", {
|
|
43
41
|
data: {
|
|
44
42
|
items: { type: "array", shape: { type: "number" } },
|
|
45
43
|
},
|
|
@@ -54,9 +52,9 @@ const index_js_3 = require("./evaluate/index.js");
|
|
|
54
52
|
data: { items: [1, 2, 3, 4, 5] },
|
|
55
53
|
components: { Test: TestComponent },
|
|
56
54
|
});
|
|
57
|
-
|
|
55
|
+
expect(result.props.values).toBe("6, 8, 10");
|
|
58
56
|
});
|
|
59
|
-
|
|
57
|
+
it("should render nested JSX elements", () => {
|
|
60
58
|
const OuterComponent = (props, ...children) => ({
|
|
61
59
|
type: "OuterComponent",
|
|
62
60
|
props,
|
|
@@ -67,7 +65,7 @@ const index_js_3 = require("./evaluate/index.js");
|
|
|
67
65
|
props,
|
|
68
66
|
children: [],
|
|
69
67
|
});
|
|
70
|
-
const result =
|
|
68
|
+
const result = render("<Outer x={10}><Inner y={20}>Nested</Inner></Outer>", {
|
|
71
69
|
elements: {
|
|
72
70
|
Outer: {
|
|
73
71
|
props: {
|
|
@@ -87,18 +85,18 @@ const index_js_3 = require("./evaluate/index.js");
|
|
|
87
85
|
Inner: InnerComponent,
|
|
88
86
|
},
|
|
89
87
|
});
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
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");
|
|
94
92
|
});
|
|
95
|
-
|
|
93
|
+
it("should render JSX fragments", () => {
|
|
96
94
|
const TestComponent = () => ({
|
|
97
95
|
type: "Test",
|
|
98
96
|
props: {},
|
|
99
97
|
children: [],
|
|
100
98
|
});
|
|
101
|
-
const result =
|
|
99
|
+
const result = render("<><Test>A</Test><Test>B</Test></>", {
|
|
102
100
|
elements: {
|
|
103
101
|
Test: {
|
|
104
102
|
props: {},
|
|
@@ -108,10 +106,10 @@ const index_js_3 = require("./evaluate/index.js");
|
|
|
108
106
|
data: {},
|
|
109
107
|
components: { Test: TestComponent },
|
|
110
108
|
});
|
|
111
|
-
|
|
109
|
+
expect(result).toBeDefined();
|
|
112
110
|
});
|
|
113
|
-
|
|
114
|
-
const result =
|
|
111
|
+
it("should render bare expression containers", () => {
|
|
112
|
+
const result = render("{data.user.name}", {
|
|
115
113
|
data: {
|
|
116
114
|
user: {
|
|
117
115
|
type: "object",
|
|
@@ -125,10 +123,10 @@ const index_js_3 = require("./evaluate/index.js");
|
|
|
125
123
|
data: { user: { name: "Alice" } },
|
|
126
124
|
components: {},
|
|
127
125
|
});
|
|
128
|
-
|
|
126
|
+
expect(result).toBe("Alice");
|
|
129
127
|
});
|
|
130
|
-
|
|
131
|
-
const result =
|
|
128
|
+
it("should render bare mathematical expressions", () => {
|
|
129
|
+
const result = render("{data.count * 2}", {
|
|
132
130
|
data: {
|
|
133
131
|
count: { type: "number" },
|
|
134
132
|
},
|
|
@@ -137,10 +135,10 @@ const index_js_3 = require("./evaluate/index.js");
|
|
|
137
135
|
data: { count: 42 },
|
|
138
136
|
components: {},
|
|
139
137
|
});
|
|
140
|
-
|
|
138
|
+
expect(result).toBe(84);
|
|
141
139
|
});
|
|
142
|
-
|
|
143
|
-
const result =
|
|
140
|
+
it("should render bare method calls", () => {
|
|
141
|
+
const result = render("{data.text.toUpperCase()}", {
|
|
144
142
|
data: {
|
|
145
143
|
text: { type: "string" },
|
|
146
144
|
},
|
|
@@ -149,10 +147,10 @@ const index_js_3 = require("./evaluate/index.js");
|
|
|
149
147
|
data: { text: "hello world" },
|
|
150
148
|
components: {},
|
|
151
149
|
});
|
|
152
|
-
|
|
150
|
+
expect(result).toBe("HELLO WORLD");
|
|
153
151
|
});
|
|
154
|
-
|
|
155
|
-
const result =
|
|
152
|
+
it("should render bare complex expressions", () => {
|
|
153
|
+
const result = render("{data.numbers.map(x => x * 2).join(', ')}", {
|
|
156
154
|
data: {
|
|
157
155
|
numbers: {
|
|
158
156
|
type: "array",
|
|
@@ -164,11 +162,11 @@ const index_js_3 = require("./evaluate/index.js");
|
|
|
164
162
|
data: { numbers: [1, 2, 3, 4] },
|
|
165
163
|
components: {},
|
|
166
164
|
});
|
|
167
|
-
|
|
165
|
+
expect(result).toBe("2, 4, 6, 8");
|
|
168
166
|
});
|
|
169
|
-
|
|
167
|
+
it("should propagate ParseError for syntax errors", () => {
|
|
170
168
|
const TestComponent = () => ({ type: "Test", props: {}, children: [] });
|
|
171
|
-
|
|
169
|
+
expect(() => render("<Text>Unclosed", {
|
|
172
170
|
elements: {
|
|
173
171
|
Text: {
|
|
174
172
|
props: {},
|
|
@@ -176,11 +174,11 @@ const index_js_3 = require("./evaluate/index.js");
|
|
|
176
174
|
},
|
|
177
175
|
}, {
|
|
178
176
|
components: { Text: TestComponent },
|
|
179
|
-
})).toThrow(
|
|
177
|
+
})).toThrow(ParseError);
|
|
180
178
|
});
|
|
181
|
-
|
|
179
|
+
it("should propagate AnalysisError for disallowed identifiers", () => {
|
|
182
180
|
const TestComponent = () => ({ type: "Test", props: {}, children: [] });
|
|
183
|
-
|
|
181
|
+
expect(() => render("<Text>{window.location}</Text>", {
|
|
184
182
|
elements: {
|
|
185
183
|
Text: {
|
|
186
184
|
props: {},
|
|
@@ -188,11 +186,11 @@ const index_js_3 = require("./evaluate/index.js");
|
|
|
188
186
|
},
|
|
189
187
|
}, {
|
|
190
188
|
components: { Text: TestComponent },
|
|
191
|
-
})).toThrow(
|
|
189
|
+
})).toThrow(AnalysisError);
|
|
192
190
|
});
|
|
193
|
-
|
|
191
|
+
it("should propagate AnalysisError for unknown JSX elements", () => {
|
|
194
192
|
const TestComponent = () => ({ type: "Test", props: {}, children: [] });
|
|
195
|
-
|
|
193
|
+
expect(() => render("<UnknownElement>Hello</UnknownElement>", {
|
|
196
194
|
elements: {
|
|
197
195
|
Text: {
|
|
198
196
|
props: {},
|
|
@@ -200,11 +198,11 @@ const index_js_3 = require("./evaluate/index.js");
|
|
|
200
198
|
},
|
|
201
199
|
}, {
|
|
202
200
|
components: { Text: TestComponent },
|
|
203
|
-
})).toThrow(
|
|
201
|
+
})).toThrow(AnalysisError);
|
|
204
202
|
});
|
|
205
|
-
|
|
203
|
+
it("should propagate AnalysisError for disallowed methods", () => {
|
|
206
204
|
const TestComponent = () => ({ type: "Test", props: {}, children: [] });
|
|
207
|
-
|
|
205
|
+
expect(() => render("<Test>{data.items.push(1)}</Test>", {
|
|
208
206
|
data: {
|
|
209
207
|
items: {
|
|
210
208
|
type: "array",
|
|
@@ -219,11 +217,11 @@ const index_js_3 = require("./evaluate/index.js");
|
|
|
219
217
|
}, {
|
|
220
218
|
data: { items: [1, 2, 3] },
|
|
221
219
|
components: { Test: TestComponent },
|
|
222
|
-
})).toThrow(
|
|
220
|
+
})).toThrow(AnalysisError);
|
|
223
221
|
});
|
|
224
|
-
|
|
222
|
+
it("should propagate AnalysisError for unknown components", () => {
|
|
225
223
|
const TestComponent = () => ({ type: "Test", props: {}, children: [] });
|
|
226
|
-
|
|
224
|
+
expect(() => render("<Test>Hello</Test>", {
|
|
227
225
|
elements: {
|
|
228
226
|
Test: {
|
|
229
227
|
props: {},
|
|
@@ -233,13 +231,13 @@ const index_js_3 = require("./evaluate/index.js");
|
|
|
233
231
|
data: {},
|
|
234
232
|
components: { Test: TestComponent },
|
|
235
233
|
})).not.toThrow();
|
|
236
|
-
|
|
234
|
+
expect(() => render("<Other>Hello</Other>", {
|
|
237
235
|
elements: {},
|
|
238
|
-
})).toThrow(
|
|
236
|
+
})).toThrow(AnalysisError);
|
|
239
237
|
});
|
|
240
|
-
|
|
238
|
+
it("should propagate EvaluationError for runtime errors", () => {
|
|
241
239
|
const TestComponent = () => ({ type: "Test", props: {}, children: [] });
|
|
242
|
-
|
|
240
|
+
expect(() => render("<Test value={data.missing.nested}>Hello</Test>", {
|
|
243
241
|
data: {
|
|
244
242
|
missing: {
|
|
245
243
|
type: "object",
|
|
@@ -258,14 +256,14 @@ const index_js_3 = require("./evaluate/index.js");
|
|
|
258
256
|
}, {
|
|
259
257
|
data: {},
|
|
260
258
|
components: { Test: TestComponent },
|
|
261
|
-
})).toThrow(
|
|
259
|
+
})).toThrow(EvaluationError);
|
|
262
260
|
});
|
|
263
|
-
|
|
264
|
-
|
|
261
|
+
it("should handle empty options", () => {
|
|
262
|
+
expect(() => render("<Test>Hello</Test>", { elements: {} })).toThrow(AnalysisError);
|
|
265
263
|
});
|
|
266
|
-
|
|
264
|
+
it("should handle empty props", () => {
|
|
267
265
|
const TestComponent = () => ({ type: "TestComponent", props: {}, children: [] });
|
|
268
|
-
const result =
|
|
266
|
+
const result = render("<Test>Hello</Test>", {
|
|
269
267
|
elements: {
|
|
270
268
|
Test: {
|
|
271
269
|
props: {},
|
|
@@ -274,15 +272,15 @@ const index_js_3 = require("./evaluate/index.js");
|
|
|
274
272
|
}, {
|
|
275
273
|
components: { Test: TestComponent },
|
|
276
274
|
});
|
|
277
|
-
|
|
275
|
+
expect(result.type).toBe("TestComponent");
|
|
278
276
|
});
|
|
279
|
-
|
|
277
|
+
it("should handle conditional rendering with props", () => {
|
|
280
278
|
const TestComponent = (props) => ({
|
|
281
279
|
type: "Test",
|
|
282
280
|
props,
|
|
283
281
|
children: [],
|
|
284
282
|
});
|
|
285
|
-
const result =
|
|
283
|
+
const result = render("<Test msg={data.show ? 'visible' : 'hidden'}>Text</Test>", {
|
|
286
284
|
data: {
|
|
287
285
|
show: { type: "boolean" },
|
|
288
286
|
},
|
|
@@ -297,7 +295,7 @@ const index_js_3 = require("./evaluate/index.js");
|
|
|
297
295
|
data: { show: false },
|
|
298
296
|
components: { Test: TestComponent },
|
|
299
297
|
});
|
|
300
|
-
|
|
298
|
+
expect(result.props.msg).toBe("hidden");
|
|
301
299
|
});
|
|
302
300
|
});
|
|
303
301
|
//# sourceMappingURL=render.test.js.map
|
package/lib/render.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.test.js","sourceRoot":"","sources":["../src/render.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"render.test.js","sourceRoot":"","sources":["../src/render.test.ts"],"names":[],"mappings":"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"}
|