apify-schema-tools 3.1.0 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.node-version +1 -1
- package/CHANGELOG.md +7 -1
- package/biome.json +8 -2
- package/dist/apify-schema-tools.js +12 -9
- package/dist/apify-schema-tools.js.map +1 -1
- package/dist/apify.d.ts +1 -1
- package/dist/apify.d.ts.map +1 -1
- package/dist/apify.js +19 -5
- package/dist/apify.js.map +1 -1
- package/dist/cli/check.d.ts +5 -0
- package/dist/cli/check.d.ts.map +1 -0
- package/dist/cli/check.js +86 -0
- package/dist/cli/check.js.map +1 -0
- package/dist/cli/init.d.ts +5 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +92 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/sync.d.ts +5 -0
- package/dist/cli/sync.d.ts.map +1 -0
- package/dist/cli/sync.js +112 -0
- package/dist/cli/sync.js.map +1 -0
- package/dist/configuration.d.ts +14 -5
- package/dist/configuration.d.ts.map +1 -1
- package/dist/configuration.js +9 -5
- package/dist/configuration.js.map +1 -1
- package/dist/main.d.ts +4 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +19 -0
- package/dist/main.js.map +1 -0
- package/dist/middle-schema/compare-schemas.d.ts +3 -0
- package/dist/middle-schema/compare-schemas.d.ts.map +1 -0
- package/dist/middle-schema/compare-schemas.js +90 -0
- package/dist/middle-schema/compare-schemas.js.map +1 -0
- package/dist/middle-schema/generate-typescript.d.ts +7 -0
- package/dist/middle-schema/generate-typescript.d.ts.map +1 -0
- package/dist/middle-schema/generate-typescript.js +70 -0
- package/dist/middle-schema/generate-typescript.js.map +1 -0
- package/dist/middle-schema/parse-json-schema.d.ts +4 -0
- package/dist/middle-schema/parse-json-schema.d.ts.map +1 -0
- package/dist/middle-schema/parse-json-schema.js +65 -0
- package/dist/middle-schema/parse-json-schema.js.map +1 -0
- package/dist/middle-schema/parse-typescript.d.ts +4 -0
- package/dist/middle-schema/parse-typescript.d.ts.map +1 -0
- package/dist/middle-schema/parse-typescript.js +199 -0
- package/dist/middle-schema/parse-typescript.js.map +1 -0
- package/dist/middle-schema/schema-types.d.ts +24 -0
- package/dist/middle-schema/schema-types.d.ts.map +1 -0
- package/dist/middle-schema/schema-types.js +14 -0
- package/dist/middle-schema/schema-types.js.map +1 -0
- package/dist/middle-schema/schema.d.ts +24 -0
- package/dist/middle-schema/schema.d.ts.map +1 -0
- package/dist/middle-schema/schema.js +14 -0
- package/dist/middle-schema/schema.js.map +1 -0
- package/dist/schema/entities/abstract-entity.d.ts +5 -0
- package/dist/schema/entities/abstract-entity.d.ts.map +1 -0
- package/dist/schema/entities/abstract-entity.js +3 -0
- package/dist/schema/entities/abstract-entity.js.map +1 -0
- package/dist/schema/entities/primitive-union.d.ts +12 -0
- package/dist/schema/entities/primitive-union.d.ts.map +1 -0
- package/dist/schema/entities/primitive-union.js +74 -0
- package/dist/schema/entities/primitive-union.js.map +1 -0
- package/dist/schema/entities/primitive.d.ts +15 -0
- package/dist/schema/entities/primitive.d.ts.map +1 -0
- package/dist/schema/entities/primitive.js +54 -0
- package/dist/schema/entities/primitive.js.map +1 -0
- package/dist/schema/parsers/json-schema.d.ts +4 -0
- package/dist/schema/parsers/json-schema.d.ts.map +1 -0
- package/dist/schema/parsers/json-schema.js +12 -0
- package/dist/schema/parsers/json-schema.js.map +1 -0
- package/dist/schema/parsers/typescript.d.ts +3 -0
- package/dist/schema/parsers/typescript.d.ts.map +1 -0
- package/dist/schema/parsers/typescript.js +24 -0
- package/dist/schema/parsers/typescript.js.map +1 -0
- package/dist/schemas/input.d.ts +840 -0
- package/dist/schemas/input.d.ts.map +1 -0
- package/dist/schemas/input.js +349 -0
- package/dist/schemas/input.js.map +1 -0
- package/dist/utils/filesystem.d.ts +8 -0
- package/dist/utils/filesystem.d.ts.map +1 -0
- package/dist/utils/filesystem.js +16 -0
- package/dist/utils/filesystem.js.map +1 -0
- package/dist/utils/json-schemas-interactive-conflict.d.ts +16 -0
- package/dist/utils/json-schemas-interactive-conflict.d.ts.map +1 -0
- package/dist/utils/json-schemas-interactive-conflict.js +165 -0
- package/dist/utils/json-schemas-interactive-conflict.js.map +1 -0
- package/dist/utils/json-schemas.d.ts +42 -0
- package/dist/utils/json-schemas.d.ts.map +1 -0
- package/dist/utils/json-schemas.js +162 -0
- package/dist/utils/json-schemas.js.map +1 -0
- package/dist/zod/schemas/input.d.ts +840 -0
- package/dist/zod/schemas/input.d.ts.map +1 -0
- package/dist/zod/schemas/input.js +393 -0
- package/dist/zod/schemas/input.js.map +1 -0
- package/package.json +12 -12
- package/samples/all-defaults/.actor/input_schema.json +32 -3
- package/samples/all-defaults/src-schemas/input.json +2 -1
- package/samples/deep-merged-schemas/.actor/input_schema.json +36 -3
- package/samples/merged-schemas/.actor/input_schema.json +27 -3
- package/samples/package-json-config/.actor/input_schema.json +32 -3
- package/samples/package-json-config-merged/.actor/input_schema.json +36 -3
- package/src/apify.ts +21 -6
- package/src/cli/check.ts +114 -0
- package/src/cli/init.ts +125 -0
- package/src/cli/sync.ts +164 -0
- package/src/configuration.ts +17 -7
- package/src/main.ts +25 -0
- package/src/middle-schema/compare-schemas.ts +113 -0
- package/src/middle-schema/generate-typescript.ts +88 -0
- package/src/middle-schema/parse-json-schema.ts +104 -0
- package/src/middle-schema/parse-typescript.ts +239 -0
- package/src/middle-schema/schema-types.ts +40 -0
- package/test/apify.test.ts +410 -2
- package/test/cli/check.test.ts +1571 -0
- package/test/cli/init.test.ts +459 -0
- package/test/cli/sync.test.ts +341 -0
- package/test/common.ts +68 -0
- package/test/configuration.test.ts +8 -8
- package/test/middle-schema/compare-schemas.test.ts +585 -0
- package/test/middle-schema/generate-typescript.test.ts +191 -0
- package/test/middle-schema/parse-json-schema.test.ts +178 -0
- package/test/middle-schema/parse-typescript.test.ts +143 -0
- package/test/{json-schema-conflicts.test.ts → utils/json-schemas-interactive-conflict.test.ts} +2 -2
- package/test/{json-schemas.test.ts → utils/json-schemas.test.ts} +3 -3
- package/src/apify-schema-tools.ts +0 -420
- package/src/typescript.ts +0 -563
- package/test/apify-schema-tools.test.ts +0 -2216
- package/test/typescript.test.ts +0 -1079
- /package/src/{filesystem.ts → utils/filesystem.ts} +0 -0
- /package/src/{json-schema-conflicts.ts → utils/json-schemas-interactive-conflict.ts} +0 -0
- /package/src/{json-schemas.ts → utils/json-schemas.ts} +0 -0
|
@@ -0,0 +1,585 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { compareMiddleObjects } from "../../src/middle-schema/compare-schemas.js";
|
|
3
|
+
import type { MiddleObject } from "../../src/middle-schema/schema.js";
|
|
4
|
+
|
|
5
|
+
describe("Compare-schemas utilities", () => {
|
|
6
|
+
describe("compareMiddleObjects", () => {
|
|
7
|
+
const baseSchema: MiddleObject = {
|
|
8
|
+
doc: "Base schema",
|
|
9
|
+
isRequired: true,
|
|
10
|
+
isArray: false,
|
|
11
|
+
properties: {
|
|
12
|
+
name: {
|
|
13
|
+
doc: "User name",
|
|
14
|
+
isRequired: true,
|
|
15
|
+
isArray: false,
|
|
16
|
+
type: "string",
|
|
17
|
+
},
|
|
18
|
+
age: {
|
|
19
|
+
doc: undefined,
|
|
20
|
+
isRequired: false,
|
|
21
|
+
isArray: false,
|
|
22
|
+
type: "number",
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
it("should return true for identical schemas", () => {
|
|
28
|
+
const schemaA: MiddleObject = {
|
|
29
|
+
doc: "Test schema",
|
|
30
|
+
isRequired: true,
|
|
31
|
+
isArray: false,
|
|
32
|
+
properties: {
|
|
33
|
+
name: {
|
|
34
|
+
doc: "User name",
|
|
35
|
+
isRequired: true,
|
|
36
|
+
isArray: false,
|
|
37
|
+
type: "string",
|
|
38
|
+
},
|
|
39
|
+
age: {
|
|
40
|
+
doc: undefined,
|
|
41
|
+
isRequired: false,
|
|
42
|
+
isArray: false,
|
|
43
|
+
type: "number",
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
const schemaB: MiddleObject = {
|
|
48
|
+
doc: "Test schema",
|
|
49
|
+
isRequired: true,
|
|
50
|
+
isArray: false,
|
|
51
|
+
properties: {
|
|
52
|
+
name: {
|
|
53
|
+
doc: "User name",
|
|
54
|
+
isRequired: true,
|
|
55
|
+
isArray: false,
|
|
56
|
+
type: "string",
|
|
57
|
+
},
|
|
58
|
+
age: {
|
|
59
|
+
doc: undefined,
|
|
60
|
+
isRequired: false,
|
|
61
|
+
isArray: false,
|
|
62
|
+
type: "number",
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
expect(compareMiddleObjects(schemaA, schemaB)).toBe(true);
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
it("should return false for schemas with different number of properties", () => {
|
|
71
|
+
const schemaA = baseSchema;
|
|
72
|
+
const schemaB: MiddleObject = {
|
|
73
|
+
doc: "Test schema",
|
|
74
|
+
isRequired: true,
|
|
75
|
+
isArray: false,
|
|
76
|
+
properties: {
|
|
77
|
+
name: {
|
|
78
|
+
doc: "User name",
|
|
79
|
+
isRequired: true,
|
|
80
|
+
isArray: false,
|
|
81
|
+
type: "string",
|
|
82
|
+
},
|
|
83
|
+
age: {
|
|
84
|
+
doc: undefined,
|
|
85
|
+
isRequired: false,
|
|
86
|
+
isArray: false,
|
|
87
|
+
type: "number",
|
|
88
|
+
},
|
|
89
|
+
email: {
|
|
90
|
+
doc: undefined,
|
|
91
|
+
isRequired: true,
|
|
92
|
+
isArray: false,
|
|
93
|
+
type: "string",
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
expect(compareMiddleObjects(schemaA, schemaB)).toBe(false);
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
it("should return false for schemas with different property names", () => {
|
|
102
|
+
const schemaA = baseSchema;
|
|
103
|
+
const schemaB: MiddleObject = {
|
|
104
|
+
doc: "Test schema",
|
|
105
|
+
isRequired: true,
|
|
106
|
+
isArray: false,
|
|
107
|
+
properties: {
|
|
108
|
+
fullName: {
|
|
109
|
+
doc: "User name",
|
|
110
|
+
isRequired: true,
|
|
111
|
+
isArray: false,
|
|
112
|
+
type: "string",
|
|
113
|
+
},
|
|
114
|
+
age: {
|
|
115
|
+
doc: undefined,
|
|
116
|
+
isRequired: false,
|
|
117
|
+
isArray: false,
|
|
118
|
+
type: "number",
|
|
119
|
+
},
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
expect(compareMiddleObjects(schemaA, schemaB)).toBe(false);
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
it("should return false for schemas with different additionalProperties", () => {
|
|
127
|
+
const schemaA = baseSchema;
|
|
128
|
+
const schemaB: MiddleObject = {
|
|
129
|
+
doc: "Test schema",
|
|
130
|
+
isRequired: true,
|
|
131
|
+
isArray: false,
|
|
132
|
+
properties: {
|
|
133
|
+
name: {
|
|
134
|
+
doc: "User name",
|
|
135
|
+
isRequired: true,
|
|
136
|
+
isArray: false,
|
|
137
|
+
type: "string",
|
|
138
|
+
},
|
|
139
|
+
age: {
|
|
140
|
+
doc: undefined,
|
|
141
|
+
isRequired: false,
|
|
142
|
+
isArray: false,
|
|
143
|
+
type: "number",
|
|
144
|
+
},
|
|
145
|
+
},
|
|
146
|
+
additionalProperties: {
|
|
147
|
+
doc: "Additional properties",
|
|
148
|
+
isRequired: true,
|
|
149
|
+
isArray: false,
|
|
150
|
+
type: "boolean",
|
|
151
|
+
},
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
expect(compareMiddleObjects(schemaA, schemaB)).toBe(false);
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
it("should return false for properties with different types", () => {
|
|
158
|
+
const schemaA = baseSchema;
|
|
159
|
+
const schemaB: MiddleObject = {
|
|
160
|
+
doc: "Test schema",
|
|
161
|
+
isRequired: true,
|
|
162
|
+
isArray: false,
|
|
163
|
+
properties: {
|
|
164
|
+
name: {
|
|
165
|
+
doc: "User name",
|
|
166
|
+
isRequired: true,
|
|
167
|
+
isArray: false,
|
|
168
|
+
type: "string",
|
|
169
|
+
},
|
|
170
|
+
age: {
|
|
171
|
+
doc: undefined,
|
|
172
|
+
isRequired: false,
|
|
173
|
+
isArray: false,
|
|
174
|
+
type: "string", // Different type
|
|
175
|
+
},
|
|
176
|
+
},
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
expect(compareMiddleObjects(schemaA, schemaB)).toBe(false);
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
it("should return false for properties with different isRequired values", () => {
|
|
183
|
+
const schemaA = baseSchema;
|
|
184
|
+
const schemaB: MiddleObject = {
|
|
185
|
+
doc: "Test schema",
|
|
186
|
+
isRequired: true,
|
|
187
|
+
isArray: false,
|
|
188
|
+
properties: {
|
|
189
|
+
name: {
|
|
190
|
+
doc: "User name",
|
|
191
|
+
isRequired: false, // Different isRequired
|
|
192
|
+
isArray: false,
|
|
193
|
+
type: "string",
|
|
194
|
+
},
|
|
195
|
+
age: {
|
|
196
|
+
doc: undefined,
|
|
197
|
+
isRequired: false,
|
|
198
|
+
isArray: false,
|
|
199
|
+
type: "number",
|
|
200
|
+
},
|
|
201
|
+
},
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
expect(compareMiddleObjects(schemaA, schemaB)).toBe(false);
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
it("should return false for properties with different isArray values", () => {
|
|
208
|
+
const schemaA = baseSchema;
|
|
209
|
+
const schemaB: MiddleObject = {
|
|
210
|
+
doc: "Test schema",
|
|
211
|
+
isRequired: true,
|
|
212
|
+
isArray: false,
|
|
213
|
+
properties: {
|
|
214
|
+
name: {
|
|
215
|
+
doc: "User name",
|
|
216
|
+
isRequired: true,
|
|
217
|
+
isArray: true, // Different isArray
|
|
218
|
+
type: "string",
|
|
219
|
+
},
|
|
220
|
+
age: {
|
|
221
|
+
doc: undefined,
|
|
222
|
+
isRequired: false,
|
|
223
|
+
isArray: false,
|
|
224
|
+
type: "number",
|
|
225
|
+
},
|
|
226
|
+
},
|
|
227
|
+
};
|
|
228
|
+
|
|
229
|
+
expect(compareMiddleObjects(schemaA, schemaB)).toBe(false);
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
it("should return false for properties with different documentation when ignoreDocs is false", () => {
|
|
233
|
+
const schemaA = baseSchema;
|
|
234
|
+
const schemaB: MiddleObject = {
|
|
235
|
+
doc: "Test schema",
|
|
236
|
+
isRequired: true,
|
|
237
|
+
isArray: false,
|
|
238
|
+
properties: {
|
|
239
|
+
name: {
|
|
240
|
+
doc: "Different documentation", // Different doc
|
|
241
|
+
isRequired: true,
|
|
242
|
+
isArray: false,
|
|
243
|
+
type: "string",
|
|
244
|
+
},
|
|
245
|
+
age: {
|
|
246
|
+
doc: undefined,
|
|
247
|
+
isRequired: false,
|
|
248
|
+
isArray: false,
|
|
249
|
+
type: "number",
|
|
250
|
+
},
|
|
251
|
+
},
|
|
252
|
+
};
|
|
253
|
+
|
|
254
|
+
expect(compareMiddleObjects(schemaA, schemaB, false)).toBe(false);
|
|
255
|
+
expect(compareMiddleObjects(schemaA, schemaB)).toBe(false); // Default is false
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
it("should return true for properties with different documentation when ignoreDocs is true", () => {
|
|
259
|
+
const schemaA = baseSchema;
|
|
260
|
+
const schemaB: MiddleObject = {
|
|
261
|
+
doc: "Test schema",
|
|
262
|
+
isRequired: true,
|
|
263
|
+
isArray: false,
|
|
264
|
+
properties: {
|
|
265
|
+
name: {
|
|
266
|
+
doc: "Different documentation", // Different doc
|
|
267
|
+
isRequired: true,
|
|
268
|
+
isArray: false,
|
|
269
|
+
type: "string",
|
|
270
|
+
},
|
|
271
|
+
age: {
|
|
272
|
+
doc: "Different age doc", // Different doc
|
|
273
|
+
isRequired: false,
|
|
274
|
+
isArray: false,
|
|
275
|
+
type: "number",
|
|
276
|
+
},
|
|
277
|
+
},
|
|
278
|
+
};
|
|
279
|
+
|
|
280
|
+
expect(compareMiddleObjects(schemaA, schemaB, true)).toBe(true);
|
|
281
|
+
});
|
|
282
|
+
|
|
283
|
+
it("should handle enum properties correctly", () => {
|
|
284
|
+
const schemaA: MiddleObject = {
|
|
285
|
+
doc: undefined,
|
|
286
|
+
isRequired: true,
|
|
287
|
+
isArray: false,
|
|
288
|
+
properties: {
|
|
289
|
+
status: {
|
|
290
|
+
doc: undefined,
|
|
291
|
+
isRequired: true,
|
|
292
|
+
isArray: false,
|
|
293
|
+
enum: ["active", "inactive", "pending"],
|
|
294
|
+
},
|
|
295
|
+
},
|
|
296
|
+
};
|
|
297
|
+
const schemaB: MiddleObject = {
|
|
298
|
+
doc: undefined,
|
|
299
|
+
isRequired: true,
|
|
300
|
+
isArray: false,
|
|
301
|
+
properties: {
|
|
302
|
+
status: {
|
|
303
|
+
doc: undefined,
|
|
304
|
+
isRequired: true,
|
|
305
|
+
isArray: false,
|
|
306
|
+
enum: ["active", "inactive", "pending"],
|
|
307
|
+
},
|
|
308
|
+
},
|
|
309
|
+
};
|
|
310
|
+
|
|
311
|
+
expect(compareMiddleObjects(schemaA, schemaB)).toBe(true);
|
|
312
|
+
});
|
|
313
|
+
|
|
314
|
+
it("should return false for enum properties with different values", () => {
|
|
315
|
+
const schemaA: MiddleObject = {
|
|
316
|
+
doc: undefined,
|
|
317
|
+
isRequired: true,
|
|
318
|
+
isArray: false,
|
|
319
|
+
properties: {
|
|
320
|
+
status: {
|
|
321
|
+
doc: undefined,
|
|
322
|
+
isRequired: true,
|
|
323
|
+
isArray: false,
|
|
324
|
+
enum: ["active", "inactive", "pending"],
|
|
325
|
+
},
|
|
326
|
+
},
|
|
327
|
+
};
|
|
328
|
+
const schemaB: MiddleObject = {
|
|
329
|
+
doc: undefined,
|
|
330
|
+
isRequired: true,
|
|
331
|
+
isArray: false,
|
|
332
|
+
properties: {
|
|
333
|
+
status: {
|
|
334
|
+
doc: undefined,
|
|
335
|
+
isRequired: true,
|
|
336
|
+
isArray: false,
|
|
337
|
+
enum: ["active", "inactive", "cancelled"], // Different enum value
|
|
338
|
+
},
|
|
339
|
+
},
|
|
340
|
+
};
|
|
341
|
+
|
|
342
|
+
expect(compareMiddleObjects(schemaA, schemaB)).toBe(false);
|
|
343
|
+
});
|
|
344
|
+
|
|
345
|
+
it("should handle nested object properties correctly", () => {
|
|
346
|
+
const schemaA: MiddleObject = {
|
|
347
|
+
doc: undefined,
|
|
348
|
+
isRequired: true,
|
|
349
|
+
isArray: false,
|
|
350
|
+
properties: {
|
|
351
|
+
user: {
|
|
352
|
+
doc: undefined,
|
|
353
|
+
isRequired: true,
|
|
354
|
+
isArray: false,
|
|
355
|
+
properties: {
|
|
356
|
+
name: {
|
|
357
|
+
doc: undefined,
|
|
358
|
+
isRequired: true,
|
|
359
|
+
isArray: false,
|
|
360
|
+
type: "string",
|
|
361
|
+
},
|
|
362
|
+
age: {
|
|
363
|
+
doc: undefined,
|
|
364
|
+
isRequired: false,
|
|
365
|
+
isArray: false,
|
|
366
|
+
type: "number",
|
|
367
|
+
},
|
|
368
|
+
},
|
|
369
|
+
},
|
|
370
|
+
},
|
|
371
|
+
};
|
|
372
|
+
const schemaB: MiddleObject = {
|
|
373
|
+
doc: undefined,
|
|
374
|
+
isRequired: true,
|
|
375
|
+
isArray: false,
|
|
376
|
+
properties: {
|
|
377
|
+
user: {
|
|
378
|
+
doc: undefined,
|
|
379
|
+
isRequired: true,
|
|
380
|
+
isArray: false,
|
|
381
|
+
properties: {
|
|
382
|
+
name: {
|
|
383
|
+
doc: undefined,
|
|
384
|
+
isRequired: true,
|
|
385
|
+
isArray: false,
|
|
386
|
+
type: "string",
|
|
387
|
+
},
|
|
388
|
+
age: {
|
|
389
|
+
doc: undefined,
|
|
390
|
+
isRequired: false,
|
|
391
|
+
isArray: false,
|
|
392
|
+
type: "number",
|
|
393
|
+
},
|
|
394
|
+
},
|
|
395
|
+
},
|
|
396
|
+
},
|
|
397
|
+
};
|
|
398
|
+
|
|
399
|
+
expect(compareMiddleObjects(schemaA, schemaB)).toBe(true);
|
|
400
|
+
});
|
|
401
|
+
|
|
402
|
+
it("should return false for nested schemas with different structures", () => {
|
|
403
|
+
const schemaA: MiddleObject = {
|
|
404
|
+
doc: undefined,
|
|
405
|
+
isRequired: true,
|
|
406
|
+
isArray: false,
|
|
407
|
+
properties: {
|
|
408
|
+
user: {
|
|
409
|
+
doc: undefined,
|
|
410
|
+
isRequired: true,
|
|
411
|
+
isArray: false,
|
|
412
|
+
properties: {
|
|
413
|
+
name: {
|
|
414
|
+
doc: undefined,
|
|
415
|
+
isRequired: true,
|
|
416
|
+
isArray: false,
|
|
417
|
+
type: "string",
|
|
418
|
+
},
|
|
419
|
+
age: {
|
|
420
|
+
doc: undefined,
|
|
421
|
+
isRequired: false,
|
|
422
|
+
isArray: false,
|
|
423
|
+
type: "number",
|
|
424
|
+
},
|
|
425
|
+
},
|
|
426
|
+
},
|
|
427
|
+
},
|
|
428
|
+
};
|
|
429
|
+
const schemaB: MiddleObject = {
|
|
430
|
+
doc: undefined,
|
|
431
|
+
isRequired: true,
|
|
432
|
+
isArray: false,
|
|
433
|
+
properties: {
|
|
434
|
+
user: {
|
|
435
|
+
doc: undefined,
|
|
436
|
+
isRequired: true,
|
|
437
|
+
isArray: false,
|
|
438
|
+
properties: {
|
|
439
|
+
name: {
|
|
440
|
+
doc: undefined,
|
|
441
|
+
isRequired: true,
|
|
442
|
+
isArray: false,
|
|
443
|
+
type: "string",
|
|
444
|
+
},
|
|
445
|
+
// Missing age property
|
|
446
|
+
},
|
|
447
|
+
},
|
|
448
|
+
},
|
|
449
|
+
};
|
|
450
|
+
|
|
451
|
+
expect(compareMiddleObjects(schemaA, schemaB)).toBe(false);
|
|
452
|
+
});
|
|
453
|
+
|
|
454
|
+
it("should handle union types correctly", () => {
|
|
455
|
+
const schemaA: MiddleObject = {
|
|
456
|
+
doc: undefined,
|
|
457
|
+
isRequired: true,
|
|
458
|
+
isArray: false,
|
|
459
|
+
properties: {
|
|
460
|
+
value: {
|
|
461
|
+
doc: undefined,
|
|
462
|
+
isRequired: true,
|
|
463
|
+
isArray: false,
|
|
464
|
+
type: ["string", "number"],
|
|
465
|
+
},
|
|
466
|
+
},
|
|
467
|
+
};
|
|
468
|
+
const schemaB: MiddleObject = {
|
|
469
|
+
doc: undefined,
|
|
470
|
+
isRequired: true,
|
|
471
|
+
isArray: false,
|
|
472
|
+
properties: {
|
|
473
|
+
value: {
|
|
474
|
+
doc: undefined,
|
|
475
|
+
isRequired: true,
|
|
476
|
+
isArray: false,
|
|
477
|
+
type: ["string", "number"],
|
|
478
|
+
},
|
|
479
|
+
},
|
|
480
|
+
};
|
|
481
|
+
|
|
482
|
+
expect(compareMiddleObjects(schemaA, schemaB)).toBe(true);
|
|
483
|
+
});
|
|
484
|
+
|
|
485
|
+
it("should return false for union types with different order", () => {
|
|
486
|
+
const schemaA: MiddleObject = {
|
|
487
|
+
doc: undefined,
|
|
488
|
+
isRequired: true,
|
|
489
|
+
isArray: false,
|
|
490
|
+
properties: {
|
|
491
|
+
value: {
|
|
492
|
+
doc: undefined,
|
|
493
|
+
isRequired: true,
|
|
494
|
+
isArray: false,
|
|
495
|
+
type: ["string", "number"],
|
|
496
|
+
},
|
|
497
|
+
},
|
|
498
|
+
};
|
|
499
|
+
const schemaB: MiddleObject = {
|
|
500
|
+
doc: undefined,
|
|
501
|
+
isRequired: true,
|
|
502
|
+
isArray: false,
|
|
503
|
+
properties: {
|
|
504
|
+
value: {
|
|
505
|
+
doc: undefined,
|
|
506
|
+
isRequired: true,
|
|
507
|
+
isArray: false,
|
|
508
|
+
type: ["number", "string"], // Different order
|
|
509
|
+
},
|
|
510
|
+
},
|
|
511
|
+
};
|
|
512
|
+
|
|
513
|
+
expect(compareMiddleObjects(schemaA, schemaB)).toBe(false);
|
|
514
|
+
});
|
|
515
|
+
|
|
516
|
+
it("should return false when comparing object property to basic var property", () => {
|
|
517
|
+
const schemaA: MiddleObject = {
|
|
518
|
+
doc: undefined,
|
|
519
|
+
isRequired: true,
|
|
520
|
+
isArray: false,
|
|
521
|
+
properties: {
|
|
522
|
+
data: {
|
|
523
|
+
doc: undefined,
|
|
524
|
+
isRequired: true,
|
|
525
|
+
isArray: false,
|
|
526
|
+
properties: {
|
|
527
|
+
name: {
|
|
528
|
+
doc: undefined,
|
|
529
|
+
isRequired: true,
|
|
530
|
+
isArray: false,
|
|
531
|
+
type: "string",
|
|
532
|
+
},
|
|
533
|
+
},
|
|
534
|
+
},
|
|
535
|
+
},
|
|
536
|
+
};
|
|
537
|
+
const schemaB: MiddleObject = {
|
|
538
|
+
doc: undefined,
|
|
539
|
+
isRequired: true,
|
|
540
|
+
isArray: false,
|
|
541
|
+
properties: {
|
|
542
|
+
data: {
|
|
543
|
+
doc: undefined,
|
|
544
|
+
isRequired: true,
|
|
545
|
+
isArray: false,
|
|
546
|
+
type: "string", // Basic var instead of object
|
|
547
|
+
},
|
|
548
|
+
},
|
|
549
|
+
};
|
|
550
|
+
|
|
551
|
+
expect(compareMiddleObjects(schemaA, schemaB)).toBe(false);
|
|
552
|
+
});
|
|
553
|
+
|
|
554
|
+
it("should return false when comparing enum property to basic var property", () => {
|
|
555
|
+
const schemaA: MiddleObject = {
|
|
556
|
+
doc: undefined,
|
|
557
|
+
isRequired: true,
|
|
558
|
+
isArray: false,
|
|
559
|
+
properties: {
|
|
560
|
+
status: {
|
|
561
|
+
doc: undefined,
|
|
562
|
+
isRequired: true,
|
|
563
|
+
isArray: false,
|
|
564
|
+
enum: ["active", "inactive"],
|
|
565
|
+
},
|
|
566
|
+
},
|
|
567
|
+
};
|
|
568
|
+
const schemaB: MiddleObject = {
|
|
569
|
+
doc: undefined,
|
|
570
|
+
isRequired: true,
|
|
571
|
+
isArray: false,
|
|
572
|
+
properties: {
|
|
573
|
+
status: {
|
|
574
|
+
doc: undefined,
|
|
575
|
+
isRequired: true,
|
|
576
|
+
isArray: false,
|
|
577
|
+
type: "string", // Basic var instead of enum
|
|
578
|
+
},
|
|
579
|
+
},
|
|
580
|
+
};
|
|
581
|
+
|
|
582
|
+
expect(compareMiddleObjects(schemaA, schemaB)).toBe(false);
|
|
583
|
+
});
|
|
584
|
+
});
|
|
585
|
+
});
|