jsxpression 0.1.0 → 0.1.2
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.d.ts +7 -0
- package/lib/analyze/analysis-error.d.ts.map +1 -1
- package/lib/analyze/analysis-error.js +26 -0
- package/lib/analyze/analysis-error.js.map +1 -0
- package/lib/analyze/analysis-report.d.ts +2 -2
- package/lib/analyze/analysis-report.d.ts.map +1 -1
- package/lib/analyze/analyze.d.ts +5 -0
- package/lib/analyze/analyze.d.ts.map +1 -1
- package/lib/analyze/analyze.js +11 -0
- package/lib/analyze/analyze.js.map +1 -0
- package/lib/analyze/analyze.test.js +312 -312
- package/lib/analyze/analyze.test.js.map +1 -1
- package/lib/analyze/data/analyze.d.ts +5 -0
- package/lib/analyze/data/analyze.d.ts.map +1 -1
- package/lib/analyze/data/analyze.js +12 -0
- package/lib/analyze/data/analyze.js.map +1 -0
- package/lib/analyze/data/data-access.d.ts +7 -0
- package/lib/analyze/data/data-access.d.ts.map +1 -1
- package/lib/analyze/data/data-access.js +275 -0
- package/lib/analyze/data/data-access.js.map +1 -0
- package/lib/analyze/data/index.d.ts +2 -0
- package/lib/analyze/data/index.d.ts.map +1 -1
- package/lib/analyze/data/index.js +6 -0
- package/lib/analyze/data/index.js.map +1 -0
- package/lib/analyze/data/method-calls.d.ts +6 -0
- package/lib/analyze/data/method-calls.d.ts.map +1 -1
- package/lib/analyze/data/method-calls.js +58 -0
- package/lib/analyze/data/method-calls.js.map +1 -0
- package/lib/analyze/data/utils.d.ts +10 -0
- package/lib/analyze/data/utils.d.ts.map +1 -1
- package/lib/analyze/data/utils.js +212 -0
- package/lib/analyze/data/utils.js.map +1 -0
- package/lib/analyze/index.d.ts +4 -0
- package/lib/analyze/index.d.ts.map +1 -1
- package/lib/analyze/index.js +10 -0
- package/lib/analyze/index.js.map +1 -0
- package/lib/analyze/jsx/analyze.d.ts +5 -0
- package/lib/analyze/jsx/analyze.d.ts.map +1 -1
- package/lib/analyze/jsx/analyze.js +13 -0
- package/lib/analyze/jsx/analyze.js.map +1 -0
- package/lib/analyze/jsx/element-attributes.d.ts +6 -0
- package/lib/analyze/jsx/element-attributes.d.ts.map +1 -1
- package/lib/analyze/jsx/element-attributes.js +20 -20
- package/lib/analyze/jsx/element-attributes.js.map +1 -1
- package/lib/analyze/jsx/element-children.d.ts +6 -0
- package/lib/analyze/jsx/element-children.d.ts.map +1 -1
- package/lib/analyze/jsx/element-children.js +69 -0
- package/lib/analyze/jsx/element-children.js.map +1 -0
- package/lib/analyze/jsx/element-tags.d.ts +6 -0
- package/lib/analyze/jsx/element-tags.d.ts.map +1 -1
- package/lib/analyze/jsx/element-tags.js +41 -0
- package/lib/analyze/jsx/element-tags.js.map +1 -0
- package/lib/analyze/jsx/index.d.ts +2 -0
- package/lib/analyze/jsx/index.d.ts.map +1 -1
- package/lib/analyze/jsx/index.js +6 -0
- package/lib/analyze/jsx/index.js.map +1 -0
- package/lib/analyze/security/analyze.d.ts +5 -0
- package/lib/analyze/security/analyze.d.ts.map +1 -1
- package/lib/analyze/security/analyze.js +15 -0
- package/lib/analyze/security/analyze.js.map +1 -0
- package/lib/analyze/security/call-expressions.d.ts +6 -0
- package/lib/analyze/security/call-expressions.d.ts.map +1 -1
- package/lib/analyze/security/call-expressions.js +23 -0
- package/lib/analyze/security/call-expressions.js.map +1 -0
- package/lib/analyze/security/declarations.d.ts +6 -0
- package/lib/analyze/security/declarations.d.ts.map +1 -1
- package/lib/analyze/security/declarations.js +31 -0
- package/lib/analyze/security/declarations.js.map +1 -0
- package/lib/analyze/security/expressions.d.ts +6 -0
- package/lib/analyze/security/expressions.d.ts.map +1 -1
- package/lib/analyze/security/expressions.js +52 -0
- package/lib/analyze/security/expressions.js.map +1 -0
- package/lib/analyze/security/identifiers.d.ts +6 -0
- package/lib/analyze/security/identifiers.d.ts.map +1 -1
- package/lib/analyze/security/identifiers.js +87 -0
- package/lib/analyze/security/identifiers.js.map +1 -0
- package/lib/analyze/security/index.d.ts +2 -0
- package/lib/analyze/security/index.d.ts.map +1 -1
- package/lib/analyze/security/index.js +6 -0
- package/lib/analyze/security/index.js.map +1 -0
- package/lib/analyze/security/member-access.d.ts +6 -0
- package/lib/analyze/security/member-access.d.ts.map +1 -1
- package/lib/analyze/security/member-access.js +24 -0
- package/lib/analyze/security/member-access.js.map +1 -0
- package/lib/analyze/utils.d.ts.map +1 -0
- package/lib/analyze/utils.js +92 -0
- package/lib/analyze/utils.js.map +1 -0
- package/lib/analyze/validation-context.d.ts.map +1 -0
- package/lib/analyze/validation-context.js +27 -0
- package/lib/analyze/validation-context.js.map +1 -0
- package/lib/codegen/generate-typescript-definitions.test.js +190 -190
- package/lib/codegen/generate-typescript-definitions.test.js.map +1 -1
- package/lib/compile/compilation-error.d.ts.map +1 -0
- package/lib/compile/compilation-error.js +28 -0
- package/lib/compile/compilation-error.js.map +1 -0
- package/lib/compile/compile.d.ts +3 -0
- package/lib/compile/compile.d.ts.map +1 -1
- package/lib/compile/compile.js +17 -17
- package/lib/compile/compile.js.map +1 -1
- package/lib/compile/compile.test.js +110 -110
- package/lib/compile/compile.test.js.map +1 -1
- package/lib/compile/index.d.ts +3 -0
- package/lib/compile/index.d.ts.map +1 -0
- package/lib/compile/index.js +8 -0
- package/lib/compile/index.js.map +1 -0
- package/lib/evaluate/evaluate.js +9 -5
- package/lib/evaluate/evaluate.js.map +1 -0
- package/lib/evaluate/evaluate.test.d.ts.map +1 -0
- package/lib/evaluate/evaluate.test.js +252 -0
- package/lib/evaluate/evaluate.test.js.map +1 -0
- package/lib/evaluate/evaluation-error.js +6 -1
- package/lib/evaluate/evaluation-error.js.map +1 -0
- package/lib/evaluate/index.d.ts +3 -0
- package/lib/evaluate/index.d.ts.map +1 -0
- package/lib/evaluate/index.js +8 -0
- package/lib/evaluate/index.js.map +1 -0
- package/lib/index.d.ts +7 -7
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +12 -12
- package/lib/index.js.map +1 -1
- package/lib/jsx.d.ts +92 -0
- package/lib/jsx.d.ts.map +1 -0
- package/lib/jsx.js +43 -0
- package/lib/jsx.js.map +1 -0
- package/lib/parse/index.d.ts +3 -0
- package/lib/parse/index.d.ts.map +1 -0
- package/lib/parse/index.js +8 -0
- package/lib/parse/index.js.map +1 -0
- package/lib/parse/parse-error.d.ts.map +1 -0
- package/lib/parse/parse-error.js +13 -0
- package/lib/parse/parse-error.js.map +1 -0
- package/lib/parse/parse.d.ts +3 -0
- package/lib/parse/parse.d.ts.map +1 -0
- package/lib/parse/parse.js +35 -0
- package/lib/parse/parse.js.map +1 -0
- package/lib/parse/parse.test.d.ts.map +1 -0
- package/lib/parse/parse.test.js +82 -0
- package/lib/parse/parse.test.js.map +1 -0
- package/lib/render.d.ts +2 -2
- package/lib/render.d.ts.map +1 -1
- package/lib/render.js +13 -9
- package/lib/render.js.map +1 -0
- package/lib/render.test.js +303 -0
- package/lib/render.test.js.map +1 -0
- package/lib/schema.js +39 -18
- package/lib/schema.js.map +1 -0
- package/lib/traverse.d.ts +15 -0
- package/lib/traverse.d.ts.map +1 -0
- package/lib/traverse.js +49 -0
- package/lib/traverse.js.map +1 -0
- package/lib/traverse.test.d.ts.map +1 -0
- package/lib/traverse.test.js +86 -0
- package/lib/traverse.test.js.map +1 -0
- package/lib/types.d.ts.map +1 -0
- package/lib/types.js +3 -0
- package/lib/types.js.map +1 -0
- package/lib/validate.d.ts +3 -3
- package/lib/validate.d.ts.map +1 -1
- package/lib/validate.js +11 -7
- package/lib/validate.js.map +1 -0
- package/package.json +2 -1
- package/src/analyze/analysis-error.ts +1 -1
- package/src/analyze/analysis-report.ts +2 -2
- package/src/analyze/analyze.test.ts +4 -4
- package/src/analyze/analyze.ts +5 -5
- package/src/analyze/data/analyze.ts +5 -5
- package/src/analyze/data/data-access.ts +6 -6
- package/src/analyze/data/index.ts +1 -1
- package/src/analyze/data/method-calls.ts +7 -7
- package/src/analyze/data/utils.ts +5 -5
- package/src/analyze/index.ts +3 -3
- package/src/analyze/jsx/analyze.ts +6 -6
- package/src/analyze/jsx/element-attributes.ts +6 -6
- package/src/analyze/jsx/element-children.ts +6 -6
- package/src/analyze/jsx/element-tags.ts +5 -5
- package/src/analyze/jsx/index.ts +1 -1
- package/src/analyze/security/analyze.ts +8 -8
- package/src/analyze/security/call-expressions.ts +5 -5
- package/src/analyze/security/declarations.ts +5 -5
- package/src/analyze/security/expressions.ts +5 -5
- package/src/analyze/security/identifiers.ts +6 -6
- package/src/analyze/security/index.ts +1 -1
- package/src/analyze/security/member-access.ts +5 -5
- package/src/codegen/generate-typescript-definitions.test.ts +2 -2
- package/src/compile/compile.test.ts +2 -2
- package/src/compile/compile.ts +2 -2
- package/src/compile/index.ts +2 -2
- package/src/evaluate/evaluate.test.ts +4 -4
- package/src/evaluate/evaluate.ts +1 -1
- package/src/evaluate/index.ts +2 -2
- package/src/index.ts +7 -7
- package/src/parse/index.ts +2 -2
- package/src/parse/parse.test.ts +2 -2
- package/src/parse/parse.ts +1 -1
- package/src/render.test.ts +4 -4
- package/src/render.ts +5 -5
- package/src/traverse.test.ts +2 -2
- package/src/traverse.ts +1 -1
- package/src/validate.ts +3 -3
|
@@ -1,45 +1,45 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
-
(0,
|
|
6
|
-
(0,
|
|
7
|
-
(0,
|
|
3
|
+
const vitest_js_1 = require("vitest.js");
|
|
4
|
+
const generate_typescript_definitions_js_1 = require("./generate-typescript-definitions.js");
|
|
5
|
+
(0, vitest_js_1.describe)("generateTypeScriptDefinitions", () => {
|
|
6
|
+
(0, vitest_js_1.describe)("basic structure", () => {
|
|
7
|
+
(0, vitest_js_1.it)("should generate valid TypeScript definitions for empty schema", () => {
|
|
8
8
|
const schema = {
|
|
9
9
|
data: {},
|
|
10
10
|
elements: {},
|
|
11
11
|
};
|
|
12
|
-
const result = (0,
|
|
13
|
-
(0,
|
|
14
|
-
(0,
|
|
15
|
-
(0,
|
|
12
|
+
const result = (0, generate_typescript_definitions_js_1.generateTypeScriptDefinitions)(schema);
|
|
13
|
+
(0, vitest_js_1.expect)(result).toContain("declare global");
|
|
14
|
+
(0, vitest_js_1.expect)(result).toContain("namespace JSX");
|
|
15
|
+
(0, vitest_js_1.expect)(result).toContain("export {};");
|
|
16
16
|
});
|
|
17
|
-
(0,
|
|
17
|
+
(0, vitest_js_1.it)("should include builtin types declarations", () => {
|
|
18
18
|
const schema = {
|
|
19
19
|
data: {},
|
|
20
20
|
elements: {},
|
|
21
21
|
};
|
|
22
|
-
const result = (0,
|
|
23
|
-
(0,
|
|
24
|
-
(0,
|
|
25
|
-
(0,
|
|
26
|
-
(0,
|
|
27
|
-
(0,
|
|
28
|
-
(0,
|
|
29
|
-
(0,
|
|
22
|
+
const result = (0, generate_typescript_definitions_js_1.generateTypeScriptDefinitions)(schema);
|
|
23
|
+
(0, vitest_js_1.expect)(result).toContain("namespace JSX");
|
|
24
|
+
(0, vitest_js_1.expect)(result).toContain("type Element");
|
|
25
|
+
(0, vitest_js_1.expect)(result).toContain("type Node");
|
|
26
|
+
(0, vitest_js_1.expect)(result).toContain("interface IntrinsicElements");
|
|
27
|
+
(0, vitest_js_1.expect)(result).toContain("Math");
|
|
28
|
+
(0, vitest_js_1.expect)(result).toContain("String");
|
|
29
|
+
(0, vitest_js_1.expect)(result).toContain("Array");
|
|
30
30
|
});
|
|
31
|
-
(0,
|
|
31
|
+
(0, vitest_js_1.it)("should generate variadic parameters with array types", () => {
|
|
32
32
|
const schema = {
|
|
33
33
|
data: {},
|
|
34
34
|
elements: {},
|
|
35
35
|
};
|
|
36
|
-
const result = (0,
|
|
37
|
-
(0,
|
|
38
|
-
(0,
|
|
36
|
+
const result = (0, generate_typescript_definitions_js_1.generateTypeScriptDefinitions)(schema);
|
|
37
|
+
(0, vitest_js_1.expect)(result).toContain("max(...values: number[]): number");
|
|
38
|
+
(0, vitest_js_1.expect)(result).toContain("min(...values: number[]): number");
|
|
39
39
|
});
|
|
40
40
|
});
|
|
41
|
-
(0,
|
|
42
|
-
(0,
|
|
41
|
+
(0, vitest_js_1.describe)("element types generation", () => {
|
|
42
|
+
(0, vitest_js_1.it)("should generate element with string prop", () => {
|
|
43
43
|
const schema = {
|
|
44
44
|
data: {},
|
|
45
45
|
elements: {
|
|
@@ -50,12 +50,12 @@ const generate_typescript_definitions_1 = require("./generate-typescript-definit
|
|
|
50
50
|
},
|
|
51
51
|
},
|
|
52
52
|
};
|
|
53
|
-
const result = (0,
|
|
54
|
-
(0,
|
|
55
|
-
(0,
|
|
56
|
-
(0,
|
|
53
|
+
const result = (0, generate_typescript_definitions_js_1.generateTypeScriptDefinitions)(schema);
|
|
54
|
+
(0, vitest_js_1.expect)(result).toContain("interface ButtonProps");
|
|
55
|
+
(0, vitest_js_1.expect)(result).toContain("label: string");
|
|
56
|
+
(0, vitest_js_1.expect)(result).toContain("const Button: (props: ButtonProps) => JSX.Element");
|
|
57
57
|
});
|
|
58
|
-
(0,
|
|
58
|
+
(0, vitest_js_1.it)("should generate element with multiple prop types", () => {
|
|
59
59
|
const schema = {
|
|
60
60
|
data: {},
|
|
61
61
|
elements: {
|
|
@@ -69,14 +69,14 @@ const generate_typescript_definitions_1 = require("./generate-typescript-definit
|
|
|
69
69
|
},
|
|
70
70
|
},
|
|
71
71
|
};
|
|
72
|
-
const result = (0,
|
|
73
|
-
(0,
|
|
74
|
-
(0,
|
|
75
|
-
(0,
|
|
76
|
-
(0,
|
|
77
|
-
(0,
|
|
72
|
+
const result = (0, generate_typescript_definitions_js_1.generateTypeScriptDefinitions)(schema);
|
|
73
|
+
(0, vitest_js_1.expect)(result).toContain("interface InputProps");
|
|
74
|
+
(0, vitest_js_1.expect)(result).toContain("name: string");
|
|
75
|
+
(0, vitest_js_1.expect)(result).toContain("value?: string");
|
|
76
|
+
(0, vitest_js_1.expect)(result).toContain("maxLength?: number");
|
|
77
|
+
(0, vitest_js_1.expect)(result).toContain("disabled?: boolean");
|
|
78
78
|
});
|
|
79
|
-
(0,
|
|
79
|
+
(0, vitest_js_1.it)("should generate element with enum prop", () => {
|
|
80
80
|
const schema = {
|
|
81
81
|
data: {},
|
|
82
82
|
elements: {
|
|
@@ -87,11 +87,11 @@ const generate_typescript_definitions_1 = require("./generate-typescript-definit
|
|
|
87
87
|
},
|
|
88
88
|
},
|
|
89
89
|
};
|
|
90
|
-
const result = (0,
|
|
91
|
-
(0,
|
|
92
|
-
(0,
|
|
90
|
+
const result = (0, generate_typescript_definitions_js_1.generateTypeScriptDefinitions)(schema);
|
|
91
|
+
(0, vitest_js_1.expect)(result).toContain("interface ButtonProps");
|
|
92
|
+
(0, vitest_js_1.expect)(result).toContain('size?: "sm" | "md" | "lg"');
|
|
93
93
|
});
|
|
94
|
-
(0,
|
|
94
|
+
(0, vitest_js_1.it)("should generate element with object prop", () => {
|
|
95
95
|
const schema = {
|
|
96
96
|
data: {},
|
|
97
97
|
elements: {
|
|
@@ -108,13 +108,13 @@ const generate_typescript_definitions_1 = require("./generate-typescript-definit
|
|
|
108
108
|
},
|
|
109
109
|
},
|
|
110
110
|
};
|
|
111
|
-
const result = (0,
|
|
112
|
-
(0,
|
|
113
|
-
(0,
|
|
114
|
-
(0,
|
|
115
|
-
(0,
|
|
111
|
+
const result = (0, generate_typescript_definitions_js_1.generateTypeScriptDefinitions)(schema);
|
|
112
|
+
(0, vitest_js_1.expect)(result).toContain("interface CardProps");
|
|
113
|
+
(0, vitest_js_1.expect)(result).toContain("style?:");
|
|
114
|
+
(0, vitest_js_1.expect)(result).toContain("color: string");
|
|
115
|
+
(0, vitest_js_1.expect)(result).toContain("backgroundColor: string");
|
|
116
116
|
});
|
|
117
|
-
(0,
|
|
117
|
+
(0, vitest_js_1.it)("should generate element with array prop", () => {
|
|
118
118
|
const schema = {
|
|
119
119
|
data: {},
|
|
120
120
|
elements: {
|
|
@@ -128,11 +128,11 @@ const generate_typescript_definitions_1 = require("./generate-typescript-definit
|
|
|
128
128
|
},
|
|
129
129
|
},
|
|
130
130
|
};
|
|
131
|
-
const result = (0,
|
|
132
|
-
(0,
|
|
133
|
-
(0,
|
|
131
|
+
const result = (0, generate_typescript_definitions_js_1.generateTypeScriptDefinitions)(schema);
|
|
132
|
+
(0, vitest_js_1.expect)(result).toContain("interface ListProps");
|
|
133
|
+
(0, vitest_js_1.expect)(result).toContain("items?: string[]");
|
|
134
134
|
});
|
|
135
|
-
(0,
|
|
135
|
+
(0, vitest_js_1.it)("should generate element with function prop", () => {
|
|
136
136
|
const schema = {
|
|
137
137
|
data: {},
|
|
138
138
|
elements: {
|
|
@@ -143,11 +143,11 @@ const generate_typescript_definitions_1 = require("./generate-typescript-definit
|
|
|
143
143
|
},
|
|
144
144
|
},
|
|
145
145
|
};
|
|
146
|
-
const result = (0,
|
|
147
|
-
(0,
|
|
148
|
-
(0,
|
|
146
|
+
const result = (0, generate_typescript_definitions_js_1.generateTypeScriptDefinitions)(schema);
|
|
147
|
+
(0, vitest_js_1.expect)(result).toContain("interface ButtonProps");
|
|
148
|
+
(0, vitest_js_1.expect)(result).toContain("onClick?: (...args: any[]) => any");
|
|
149
149
|
});
|
|
150
|
-
(0,
|
|
150
|
+
(0, vitest_js_1.it)("should include children prop by default", () => {
|
|
151
151
|
const schema = {
|
|
152
152
|
data: {},
|
|
153
153
|
elements: {
|
|
@@ -156,11 +156,11 @@ const generate_typescript_definitions_1 = require("./generate-typescript-definit
|
|
|
156
156
|
},
|
|
157
157
|
},
|
|
158
158
|
};
|
|
159
|
-
const result = (0,
|
|
160
|
-
(0,
|
|
161
|
-
(0,
|
|
159
|
+
const result = (0, generate_typescript_definitions_js_1.generateTypeScriptDefinitions)(schema);
|
|
160
|
+
(0, vitest_js_1.expect)(result).toContain("interface ContainerProps");
|
|
161
|
+
(0, vitest_js_1.expect)(result).toContain("children?: JSX.Node");
|
|
162
162
|
});
|
|
163
|
-
(0,
|
|
163
|
+
(0, vitest_js_1.it)("should exclude children prop when content is false", () => {
|
|
164
164
|
const schema = {
|
|
165
165
|
data: {},
|
|
166
166
|
elements: {
|
|
@@ -170,11 +170,11 @@ const generate_typescript_definitions_1 = require("./generate-typescript-definit
|
|
|
170
170
|
},
|
|
171
171
|
},
|
|
172
172
|
};
|
|
173
|
-
const result = (0,
|
|
174
|
-
(0,
|
|
175
|
-
(0,
|
|
173
|
+
const result = (0, generate_typescript_definitions_js_1.generateTypeScriptDefinitions)(schema);
|
|
174
|
+
(0, vitest_js_1.expect)(result).toContain("interface InputProps");
|
|
175
|
+
(0, vitest_js_1.expect)(result).not.toContain("children");
|
|
176
176
|
});
|
|
177
|
-
(0,
|
|
177
|
+
(0, vitest_js_1.it)("should include element description as JSDoc", () => {
|
|
178
178
|
const schema = {
|
|
179
179
|
data: {},
|
|
180
180
|
elements: {
|
|
@@ -186,11 +186,11 @@ const generate_typescript_definitions_1 = require("./generate-typescript-definit
|
|
|
186
186
|
},
|
|
187
187
|
},
|
|
188
188
|
};
|
|
189
|
-
const result = (0,
|
|
190
|
-
(0,
|
|
191
|
-
(0,
|
|
189
|
+
const result = (0, generate_typescript_definitions_js_1.generateTypeScriptDefinitions)(schema);
|
|
190
|
+
(0, vitest_js_1.expect)(result).toContain("A clickable button element");
|
|
191
|
+
(0, vitest_js_1.expect)(result).toContain("The button text");
|
|
192
192
|
});
|
|
193
|
-
(0,
|
|
193
|
+
(0, vitest_js_1.it)("should generate multiple components", () => {
|
|
194
194
|
const schema = {
|
|
195
195
|
data: {},
|
|
196
196
|
elements: {
|
|
@@ -205,28 +205,28 @@ const generate_typescript_definitions_1 = require("./generate-typescript-definit
|
|
|
205
205
|
},
|
|
206
206
|
},
|
|
207
207
|
};
|
|
208
|
-
const result = (0,
|
|
209
|
-
(0,
|
|
210
|
-
(0,
|
|
211
|
-
(0,
|
|
212
|
-
(0,
|
|
213
|
-
(0,
|
|
214
|
-
(0,
|
|
208
|
+
const result = (0, generate_typescript_definitions_js_1.generateTypeScriptDefinitions)(schema);
|
|
209
|
+
(0, vitest_js_1.expect)(result).toContain("interface ButtonProps");
|
|
210
|
+
(0, vitest_js_1.expect)(result).toContain("interface InputProps");
|
|
211
|
+
(0, vitest_js_1.expect)(result).toContain("interface ContainerProps");
|
|
212
|
+
(0, vitest_js_1.expect)(result).toContain("const Button: (props: ButtonProps) => JSX.Element");
|
|
213
|
+
(0, vitest_js_1.expect)(result).toContain("const Input: (props: InputProps) => JSX.Element");
|
|
214
|
+
(0, vitest_js_1.expect)(result).toContain("const Container: (props: ContainerProps) => JSX.Element");
|
|
215
215
|
});
|
|
216
216
|
});
|
|
217
|
-
(0,
|
|
218
|
-
(0,
|
|
217
|
+
(0, vitest_js_1.describe)("data types generation", () => {
|
|
218
|
+
(0, vitest_js_1.it)("should generate data with string property", () => {
|
|
219
219
|
const schema = {
|
|
220
220
|
data: {
|
|
221
221
|
userName: { type: "string" },
|
|
222
222
|
},
|
|
223
223
|
elements: {},
|
|
224
224
|
};
|
|
225
|
-
const result = (0,
|
|
226
|
-
(0,
|
|
227
|
-
(0,
|
|
225
|
+
const result = (0, generate_typescript_definitions_js_1.generateTypeScriptDefinitions)(schema);
|
|
226
|
+
(0, vitest_js_1.expect)(result).toContain("const data:");
|
|
227
|
+
(0, vitest_js_1.expect)(result).toContain("userName: string");
|
|
228
228
|
});
|
|
229
|
-
(0,
|
|
229
|
+
(0, vitest_js_1.it)("should generate data with multiple property types", () => {
|
|
230
230
|
const schema = {
|
|
231
231
|
data: {
|
|
232
232
|
name: { type: "string" },
|
|
@@ -235,13 +235,13 @@ const generate_typescript_definitions_1 = require("./generate-typescript-definit
|
|
|
235
235
|
},
|
|
236
236
|
elements: {},
|
|
237
237
|
};
|
|
238
|
-
const result = (0,
|
|
239
|
-
(0,
|
|
240
|
-
(0,
|
|
241
|
-
(0,
|
|
242
|
-
(0,
|
|
238
|
+
const result = (0, generate_typescript_definitions_js_1.generateTypeScriptDefinitions)(schema);
|
|
239
|
+
(0, vitest_js_1.expect)(result).toContain("const data:");
|
|
240
|
+
(0, vitest_js_1.expect)(result).toContain("name: string");
|
|
241
|
+
(0, vitest_js_1.expect)(result).toContain("age: number");
|
|
242
|
+
(0, vitest_js_1.expect)(result).toContain("active: boolean");
|
|
243
243
|
});
|
|
244
|
-
(0,
|
|
244
|
+
(0, vitest_js_1.it)("should generate data with object property", () => {
|
|
245
245
|
const schema = {
|
|
246
246
|
data: {
|
|
247
247
|
user: {
|
|
@@ -254,13 +254,13 @@ const generate_typescript_definitions_1 = require("./generate-typescript-definit
|
|
|
254
254
|
},
|
|
255
255
|
elements: {},
|
|
256
256
|
};
|
|
257
|
-
const result = (0,
|
|
258
|
-
(0,
|
|
259
|
-
(0,
|
|
260
|
-
(0,
|
|
261
|
-
(0,
|
|
257
|
+
const result = (0, generate_typescript_definitions_js_1.generateTypeScriptDefinitions)(schema);
|
|
258
|
+
(0, vitest_js_1.expect)(result).toContain("const data:");
|
|
259
|
+
(0, vitest_js_1.expect)(result).toContain("user:");
|
|
260
|
+
(0, vitest_js_1.expect)(result).toContain("name: string");
|
|
261
|
+
(0, vitest_js_1.expect)(result).toContain("email: string");
|
|
262
262
|
});
|
|
263
|
-
(0,
|
|
263
|
+
(0, vitest_js_1.it)("should generate data with nested object properties", () => {
|
|
264
264
|
const schema = {
|
|
265
265
|
data: {
|
|
266
266
|
user: {
|
|
@@ -279,14 +279,14 @@ const generate_typescript_definitions_1 = require("./generate-typescript-definit
|
|
|
279
279
|
},
|
|
280
280
|
elements: {},
|
|
281
281
|
};
|
|
282
|
-
const result = (0,
|
|
283
|
-
(0,
|
|
284
|
-
(0,
|
|
285
|
-
(0,
|
|
286
|
-
(0,
|
|
287
|
-
(0,
|
|
282
|
+
const result = (0, generate_typescript_definitions_js_1.generateTypeScriptDefinitions)(schema);
|
|
283
|
+
(0, vitest_js_1.expect)(result).toContain("const data:");
|
|
284
|
+
(0, vitest_js_1.expect)(result).toContain("user:");
|
|
285
|
+
(0, vitest_js_1.expect)(result).toContain("profile:");
|
|
286
|
+
(0, vitest_js_1.expect)(result).toContain("avatar: string");
|
|
287
|
+
(0, vitest_js_1.expect)(result).toContain("bio: string");
|
|
288
288
|
});
|
|
289
|
-
(0,
|
|
289
|
+
(0, vitest_js_1.it)("should generate data with array of primitives", () => {
|
|
290
290
|
const schema = {
|
|
291
291
|
data: {
|
|
292
292
|
tags: {
|
|
@@ -300,12 +300,12 @@ const generate_typescript_definitions_1 = require("./generate-typescript-definit
|
|
|
300
300
|
},
|
|
301
301
|
elements: {},
|
|
302
302
|
};
|
|
303
|
-
const result = (0,
|
|
304
|
-
(0,
|
|
305
|
-
(0,
|
|
306
|
-
(0,
|
|
303
|
+
const result = (0, generate_typescript_definitions_js_1.generateTypeScriptDefinitions)(schema);
|
|
304
|
+
(0, vitest_js_1.expect)(result).toContain("const data:");
|
|
305
|
+
(0, vitest_js_1.expect)(result).toContain("tags: string[]");
|
|
306
|
+
(0, vitest_js_1.expect)(result).toContain("scores: number[]");
|
|
307
307
|
});
|
|
308
|
-
(0,
|
|
308
|
+
(0, vitest_js_1.it)("should generate data with array of objects", () => {
|
|
309
309
|
const schema = {
|
|
310
310
|
data: {
|
|
311
311
|
users: {
|
|
@@ -321,14 +321,14 @@ const generate_typescript_definitions_1 = require("./generate-typescript-definit
|
|
|
321
321
|
},
|
|
322
322
|
elements: {},
|
|
323
323
|
};
|
|
324
|
-
const result = (0,
|
|
325
|
-
(0,
|
|
326
|
-
(0,
|
|
327
|
-
(0,
|
|
328
|
-
(0,
|
|
329
|
-
(0,
|
|
324
|
+
const result = (0, generate_typescript_definitions_js_1.generateTypeScriptDefinitions)(schema);
|
|
325
|
+
(0, vitest_js_1.expect)(result).toContain("const data:");
|
|
326
|
+
(0, vitest_js_1.expect)(result).toContain("users:");
|
|
327
|
+
(0, vitest_js_1.expect)(result).toContain("name: string");
|
|
328
|
+
(0, vitest_js_1.expect)(result).toContain("age: number");
|
|
329
|
+
(0, vitest_js_1.expect)(result).toContain("[]");
|
|
330
330
|
});
|
|
331
|
-
(0,
|
|
331
|
+
(0, vitest_js_1.it)("should include data property descriptions as JSDoc", () => {
|
|
332
332
|
const schema = {
|
|
333
333
|
data: {
|
|
334
334
|
userName: { type: "string", description: "The current user's name" },
|
|
@@ -342,12 +342,12 @@ const generate_typescript_definitions_1 = require("./generate-typescript-definit
|
|
|
342
342
|
},
|
|
343
343
|
elements: {},
|
|
344
344
|
};
|
|
345
|
-
const result = (0,
|
|
346
|
-
(0,
|
|
347
|
-
(0,
|
|
348
|
-
(0,
|
|
345
|
+
const result = (0, generate_typescript_definitions_js_1.generateTypeScriptDefinitions)(schema);
|
|
346
|
+
(0, vitest_js_1.expect)(result).toContain("The current user's name");
|
|
347
|
+
(0, vitest_js_1.expect)(result).toContain("User preferences");
|
|
348
|
+
(0, vitest_js_1.expect)(result).toContain("UI theme preference");
|
|
349
349
|
});
|
|
350
|
-
(0,
|
|
350
|
+
(0, vitest_js_1.it)("should generate data with enum values", () => {
|
|
351
351
|
const schema = {
|
|
352
352
|
data: {
|
|
353
353
|
status: { type: "string", enum: ["pending", "active", "completed"] },
|
|
@@ -355,14 +355,14 @@ const generate_typescript_definitions_1 = require("./generate-typescript-definit
|
|
|
355
355
|
},
|
|
356
356
|
elements: {},
|
|
357
357
|
};
|
|
358
|
-
const result = (0,
|
|
359
|
-
(0,
|
|
360
|
-
(0,
|
|
361
|
-
(0,
|
|
358
|
+
const result = (0, generate_typescript_definitions_js_1.generateTypeScriptDefinitions)(schema);
|
|
359
|
+
(0, vitest_js_1.expect)(result).toContain("const data:");
|
|
360
|
+
(0, vitest_js_1.expect)(result).toContain('status: "pending" | "active" | "completed"');
|
|
361
|
+
(0, vitest_js_1.expect)(result).toContain("priority: 1 | 2 | 3");
|
|
362
362
|
});
|
|
363
363
|
});
|
|
364
|
-
(0,
|
|
365
|
-
(0,
|
|
364
|
+
(0, vitest_js_1.describe)("combined schema", () => {
|
|
365
|
+
(0, vitest_js_1.it)("should generate definitions for both components and data", () => {
|
|
366
366
|
const schema = {
|
|
367
367
|
data: {
|
|
368
368
|
userName: { type: "string" },
|
|
@@ -381,17 +381,17 @@ const generate_typescript_definitions_1 = require("./generate-typescript-definit
|
|
|
381
381
|
},
|
|
382
382
|
},
|
|
383
383
|
};
|
|
384
|
-
const result = (0,
|
|
385
|
-
(0,
|
|
386
|
-
(0,
|
|
387
|
-
(0,
|
|
388
|
-
(0,
|
|
389
|
-
(0,
|
|
390
|
-
(0,
|
|
391
|
-
(0,
|
|
392
|
-
(0,
|
|
384
|
+
const result = (0, generate_typescript_definitions_js_1.generateTypeScriptDefinitions)(schema);
|
|
385
|
+
(0, vitest_js_1.expect)(result).toContain("const data:");
|
|
386
|
+
(0, vitest_js_1.expect)(result).toContain("userName: string");
|
|
387
|
+
(0, vitest_js_1.expect)(result).toContain("count: number");
|
|
388
|
+
(0, vitest_js_1.expect)(result).toContain("interface DisplayProps");
|
|
389
|
+
(0, vitest_js_1.expect)(result).toContain("interface CounterProps");
|
|
390
|
+
(0, vitest_js_1.expect)(result).toContain("const Display: (props: DisplayProps) => JSX.Element");
|
|
391
|
+
(0, vitest_js_1.expect)(result).toContain("const Counter: (props: CounterProps) => JSX.Element");
|
|
392
|
+
(0, vitest_js_1.expect)(result).toContain("namespace JSX");
|
|
393
393
|
});
|
|
394
|
-
(0,
|
|
394
|
+
(0, vitest_js_1.it)("should generate valid TypeScript that can be parsed", () => {
|
|
395
395
|
const schema = {
|
|
396
396
|
data: {
|
|
397
397
|
user: {
|
|
@@ -444,37 +444,37 @@ const generate_typescript_definitions_1 = require("./generate-typescript-definit
|
|
|
444
444
|
},
|
|
445
445
|
},
|
|
446
446
|
};
|
|
447
|
-
const result = (0,
|
|
448
|
-
(0,
|
|
449
|
-
(0,
|
|
450
|
-
(0,
|
|
451
|
-
(0,
|
|
452
|
-
(0,
|
|
453
|
-
(0,
|
|
454
|
-
(0,
|
|
455
|
-
(0,
|
|
456
|
-
(0,
|
|
457
|
-
(0,
|
|
458
|
-
(0,
|
|
459
|
-
(0,
|
|
460
|
-
(0,
|
|
461
|
-
(0,
|
|
462
|
-
(0,
|
|
463
|
-
(0,
|
|
464
|
-
(0,
|
|
465
|
-
(0,
|
|
466
|
-
(0,
|
|
467
|
-
(0,
|
|
468
|
-
(0,
|
|
469
|
-
(0,
|
|
470
|
-
(0,
|
|
471
|
-
(0,
|
|
472
|
-
(0,
|
|
473
|
-
(0,
|
|
447
|
+
const result = (0, generate_typescript_definitions_js_1.generateTypeScriptDefinitions)(schema);
|
|
448
|
+
(0, vitest_js_1.expect)(result).toContain("declare global");
|
|
449
|
+
(0, vitest_js_1.expect)(result).toContain("export {};");
|
|
450
|
+
(0, vitest_js_1.expect)(result).toContain("const data:");
|
|
451
|
+
(0, vitest_js_1.expect)(result).toContain("user:");
|
|
452
|
+
(0, vitest_js_1.expect)(result).toContain("name: string");
|
|
453
|
+
(0, vitest_js_1.expect)(result).toContain("email: string");
|
|
454
|
+
(0, vitest_js_1.expect)(result).toContain("settings:");
|
|
455
|
+
(0, vitest_js_1.expect)(result).toContain('theme: "light" | "dark"');
|
|
456
|
+
(0, vitest_js_1.expect)(result).toContain("notifications: boolean");
|
|
457
|
+
(0, vitest_js_1.expect)(result).toContain("items:");
|
|
458
|
+
(0, vitest_js_1.expect)(result).toContain("id: number");
|
|
459
|
+
(0, vitest_js_1.expect)(result).toContain("tags: string[]");
|
|
460
|
+
(0, vitest_js_1.expect)(result).toContain("interface CardProps");
|
|
461
|
+
(0, vitest_js_1.expect)(result).toContain("title: string");
|
|
462
|
+
(0, vitest_js_1.expect)(result).toContain("subtitle?: string");
|
|
463
|
+
(0, vitest_js_1.expect)(result).toContain('variant?: "default" | "outlined" | "filled"');
|
|
464
|
+
(0, vitest_js_1.expect)(result).toContain("onClick?: (...args: any[]) => any");
|
|
465
|
+
(0, vitest_js_1.expect)(result).toContain("children?: JSX.Node");
|
|
466
|
+
(0, vitest_js_1.expect)(result).toContain("A card element for displaying content");
|
|
467
|
+
(0, vitest_js_1.expect)(result).toContain("interface ListProps");
|
|
468
|
+
(0, vitest_js_1.expect)(result).toContain("items?: string[]");
|
|
469
|
+
(0, vitest_js_1.expect)(result).not.toMatch(/interface ListProps\s*{[^}]*children/);
|
|
470
|
+
(0, vitest_js_1.expect)(result).toContain("namespace JSX");
|
|
471
|
+
(0, vitest_js_1.expect)(result).toContain("Math");
|
|
472
|
+
(0, vitest_js_1.expect)(result).toContain("const Card: (props: CardProps) => JSX.Element");
|
|
473
|
+
(0, vitest_js_1.expect)(result).toContain("const List: (props: ListProps) => JSX.Element");
|
|
474
474
|
});
|
|
475
475
|
});
|
|
476
|
-
(0,
|
|
477
|
-
(0,
|
|
476
|
+
(0, vitest_js_1.describe)("edge cases", () => {
|
|
477
|
+
(0, vitest_js_1.it)("should handle empty props object", () => {
|
|
478
478
|
const schema = {
|
|
479
479
|
data: {},
|
|
480
480
|
elements: {
|
|
@@ -483,12 +483,12 @@ const generate_typescript_definitions_1 = require("./generate-typescript-definit
|
|
|
483
483
|
},
|
|
484
484
|
},
|
|
485
485
|
};
|
|
486
|
-
const result = (0,
|
|
487
|
-
(0,
|
|
488
|
-
(0,
|
|
489
|
-
(0,
|
|
486
|
+
const result = (0, generate_typescript_definitions_js_1.generateTypeScriptDefinitions)(schema);
|
|
487
|
+
(0, vitest_js_1.expect)(result).toContain("interface DividerProps");
|
|
488
|
+
(0, vitest_js_1.expect)(result).toContain("children?: JSX.Node");
|
|
489
|
+
(0, vitest_js_1.expect)(result).toContain("const Divider: (props: DividerProps) => JSX.Element");
|
|
490
490
|
});
|
|
491
|
-
(0,
|
|
491
|
+
(0, vitest_js_1.it)("should handle element with only required props", () => {
|
|
492
492
|
const schema = {
|
|
493
493
|
data: {},
|
|
494
494
|
elements: {
|
|
@@ -500,14 +500,14 @@ const generate_typescript_definitions_1 = require("./generate-typescript-definit
|
|
|
500
500
|
},
|
|
501
501
|
},
|
|
502
502
|
};
|
|
503
|
-
const result = (0,
|
|
504
|
-
(0,
|
|
505
|
-
(0,
|
|
506
|
-
(0,
|
|
507
|
-
(0,
|
|
508
|
-
(0,
|
|
503
|
+
const result = (0, generate_typescript_definitions_js_1.generateTypeScriptDefinitions)(schema);
|
|
504
|
+
(0, vitest_js_1.expect)(result).toContain("interface LabelProps");
|
|
505
|
+
(0, vitest_js_1.expect)(result).toContain("text: string");
|
|
506
|
+
(0, vitest_js_1.expect)(result).toContain("id: string");
|
|
507
|
+
(0, vitest_js_1.expect)(result).not.toMatch(/text\?:/);
|
|
508
|
+
(0, vitest_js_1.expect)(result).not.toMatch(/id\?:/);
|
|
509
509
|
});
|
|
510
|
-
(0,
|
|
510
|
+
(0, vitest_js_1.it)("should handle deeply nested object structures", () => {
|
|
511
511
|
const schema = {
|
|
512
512
|
data: {
|
|
513
513
|
config: {
|
|
@@ -534,14 +534,14 @@ const generate_typescript_definitions_1 = require("./generate-typescript-definit
|
|
|
534
534
|
},
|
|
535
535
|
elements: {},
|
|
536
536
|
};
|
|
537
|
-
const result = (0,
|
|
538
|
-
(0,
|
|
539
|
-
(0,
|
|
540
|
-
(0,
|
|
541
|
-
(0,
|
|
542
|
-
(0,
|
|
537
|
+
const result = (0, generate_typescript_definitions_js_1.generateTypeScriptDefinitions)(schema);
|
|
538
|
+
(0, vitest_js_1.expect)(result).toContain("config:");
|
|
539
|
+
(0, vitest_js_1.expect)(result).toContain("level1:");
|
|
540
|
+
(0, vitest_js_1.expect)(result).toContain("level2:");
|
|
541
|
+
(0, vitest_js_1.expect)(result).toContain("level3:");
|
|
542
|
+
(0, vitest_js_1.expect)(result).toContain("value: string");
|
|
543
543
|
});
|
|
544
|
-
(0,
|
|
544
|
+
(0, vitest_js_1.it)("should handle array of arrays", () => {
|
|
545
545
|
const schema = {
|
|
546
546
|
data: {
|
|
547
547
|
matrix: {
|
|
@@ -554,10 +554,10 @@ const generate_typescript_definitions_1 = require("./generate-typescript-definit
|
|
|
554
554
|
},
|
|
555
555
|
elements: {},
|
|
556
556
|
};
|
|
557
|
-
const result = (0,
|
|
558
|
-
(0,
|
|
557
|
+
const result = (0, generate_typescript_definitions_js_1.generateTypeScriptDefinitions)(schema);
|
|
558
|
+
(0, vitest_js_1.expect)(result).toContain("matrix: number[][]");
|
|
559
559
|
});
|
|
560
|
-
(0,
|
|
560
|
+
(0, vitest_js_1.it)("should handle mixed required and optional props", () => {
|
|
561
561
|
const schema = {
|
|
562
562
|
data: {},
|
|
563
563
|
elements: {
|
|
@@ -573,14 +573,14 @@ const generate_typescript_definitions_1 = require("./generate-typescript-definit
|
|
|
573
573
|
},
|
|
574
574
|
},
|
|
575
575
|
};
|
|
576
|
-
const result = (0,
|
|
577
|
-
(0,
|
|
578
|
-
(0,
|
|
579
|
-
(0,
|
|
580
|
-
(0,
|
|
581
|
-
(0,
|
|
582
|
-
(0,
|
|
583
|
-
(0,
|
|
576
|
+
const result = (0, generate_typescript_definitions_js_1.generateTypeScriptDefinitions)(schema);
|
|
577
|
+
(0, vitest_js_1.expect)(result).toContain("interface FormProps");
|
|
578
|
+
(0, vitest_js_1.expect)(result).toContain("id: string");
|
|
579
|
+
(0, vitest_js_1.expect)(result).toContain("name: string");
|
|
580
|
+
(0, vitest_js_1.expect)(result).toContain("title?: string");
|
|
581
|
+
(0, vitest_js_1.expect)(result).toContain("description?: string");
|
|
582
|
+
(0, vitest_js_1.expect)(result).toContain("onSubmit: (...args: any[]) => any");
|
|
583
|
+
(0, vitest_js_1.expect)(result).toContain("onCancel?: (...args: any[]) => any");
|
|
584
584
|
});
|
|
585
585
|
});
|
|
586
586
|
});
|