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