schemantic 0.1.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.
Files changed (131) hide show
  1. package/CHANGELOG.md +92 -0
  2. package/LICENSE +21 -0
  3. package/README.md +827 -0
  4. package/dist/__tests__/setup.d.ts +6 -0
  5. package/dist/__tests__/setup.d.ts.map +1 -0
  6. package/dist/__tests__/setup.js +30 -0
  7. package/dist/__tests__/setup.js.map +1 -0
  8. package/dist/__tests__/test-config.d.ts +36 -0
  9. package/dist/__tests__/test-config.d.ts.map +1 -0
  10. package/dist/__tests__/test-config.js +563 -0
  11. package/dist/__tests__/test-config.js.map +1 -0
  12. package/dist/cli/index.d.ts +118 -0
  13. package/dist/cli/index.d.ts.map +1 -0
  14. package/dist/cli/index.js +657 -0
  15. package/dist/cli/index.js.map +1 -0
  16. package/dist/core/index.d.ts +5 -0
  17. package/dist/core/index.d.ts.map +1 -0
  18. package/dist/core/index.js +21 -0
  19. package/dist/core/index.js.map +1 -0
  20. package/dist/core/schemantic.d.ts +95 -0
  21. package/dist/core/schemantic.d.ts.map +1 -0
  22. package/dist/core/schemantic.js +543 -0
  23. package/dist/core/schemantic.js.map +1 -0
  24. package/dist/generators/api-client-generator.d.ts +145 -0
  25. package/dist/generators/api-client-generator.d.ts.map +1 -0
  26. package/dist/generators/api-client-generator.js +856 -0
  27. package/dist/generators/api-client-generator.js.map +1 -0
  28. package/dist/generators/base.d.ts +117 -0
  29. package/dist/generators/base.d.ts.map +1 -0
  30. package/dist/generators/base.js +232 -0
  31. package/dist/generators/base.js.map +1 -0
  32. package/dist/generators/enum-generator.d.ts +52 -0
  33. package/dist/generators/enum-generator.d.ts.map +1 -0
  34. package/dist/generators/enum-generator.js +178 -0
  35. package/dist/generators/enum-generator.js.map +1 -0
  36. package/dist/generators/factory.d.ts +59 -0
  37. package/dist/generators/factory.d.ts.map +1 -0
  38. package/dist/generators/factory.js +127 -0
  39. package/dist/generators/factory.js.map +1 -0
  40. package/dist/generators/hook-generator.d.ts +36 -0
  41. package/dist/generators/hook-generator.d.ts.map +1 -0
  42. package/dist/generators/hook-generator.js +495 -0
  43. package/dist/generators/hook-generator.js.map +1 -0
  44. package/dist/generators/index.d.ts +10 -0
  45. package/dist/generators/index.d.ts.map +1 -0
  46. package/dist/generators/index.js +26 -0
  47. package/dist/generators/index.js.map +1 -0
  48. package/dist/generators/object-generator.d.ts +48 -0
  49. package/dist/generators/object-generator.d.ts.map +1 -0
  50. package/dist/generators/object-generator.js +280 -0
  51. package/dist/generators/object-generator.js.map +1 -0
  52. package/dist/generators/primitive-generator.d.ts +40 -0
  53. package/dist/generators/primitive-generator.d.ts.map +1 -0
  54. package/dist/generators/primitive-generator.js +150 -0
  55. package/dist/generators/primitive-generator.js.map +1 -0
  56. package/dist/index.d.ts +17 -0
  57. package/dist/index.d.ts.map +1 -0
  58. package/dist/index.js +42 -0
  59. package/dist/index.js.map +1 -0
  60. package/dist/parsers/base.d.ts +101 -0
  61. package/dist/parsers/base.d.ts.map +1 -0
  62. package/dist/parsers/base.js +77 -0
  63. package/dist/parsers/base.js.map +1 -0
  64. package/dist/parsers/factory.d.ts +64 -0
  65. package/dist/parsers/factory.d.ts.map +1 -0
  66. package/dist/parsers/factory.js +116 -0
  67. package/dist/parsers/factory.js.map +1 -0
  68. package/dist/parsers/index.d.ts +7 -0
  69. package/dist/parsers/index.d.ts.map +1 -0
  70. package/dist/parsers/index.js +23 -0
  71. package/dist/parsers/index.js.map +1 -0
  72. package/dist/parsers/openapi.d.ts +52 -0
  73. package/dist/parsers/openapi.d.ts.map +1 -0
  74. package/dist/parsers/openapi.js +396 -0
  75. package/dist/parsers/openapi.js.map +1 -0
  76. package/dist/plugins/branded-types.d.ts +28 -0
  77. package/dist/plugins/branded-types.d.ts.map +1 -0
  78. package/dist/plugins/branded-types.js +568 -0
  79. package/dist/plugins/branded-types.js.map +1 -0
  80. package/dist/plugins/builtin.d.ts +38 -0
  81. package/dist/plugins/builtin.d.ts.map +1 -0
  82. package/dist/plugins/builtin.js +283 -0
  83. package/dist/plugins/builtin.js.map +1 -0
  84. package/dist/plugins/index.d.ts +7 -0
  85. package/dist/plugins/index.d.ts.map +1 -0
  86. package/dist/plugins/index.js +23 -0
  87. package/dist/plugins/index.js.map +1 -0
  88. package/dist/plugins/loader.d.ts +92 -0
  89. package/dist/plugins/loader.d.ts.map +1 -0
  90. package/dist/plugins/loader.js +245 -0
  91. package/dist/plugins/loader.js.map +1 -0
  92. package/dist/plugins/manager.d.ts +99 -0
  93. package/dist/plugins/manager.d.ts.map +1 -0
  94. package/dist/plugins/manager.js +233 -0
  95. package/dist/plugins/manager.js.map +1 -0
  96. package/dist/plugins/performance-monitoring.d.ts +98 -0
  97. package/dist/plugins/performance-monitoring.d.ts.map +1 -0
  98. package/dist/plugins/performance-monitoring.js +596 -0
  99. package/dist/plugins/performance-monitoring.js.map +1 -0
  100. package/dist/plugins/request-deduplication.d.ts +27 -0
  101. package/dist/plugins/request-deduplication.d.ts.map +1 -0
  102. package/dist/plugins/request-deduplication.js +650 -0
  103. package/dist/plugins/request-deduplication.js.map +1 -0
  104. package/dist/plugins/zod-validation.d.ts +63 -0
  105. package/dist/plugins/zod-validation.d.ts.map +1 -0
  106. package/dist/plugins/zod-validation.js +743 -0
  107. package/dist/plugins/zod-validation.js.map +1 -0
  108. package/dist/types/core.d.ts +203 -0
  109. package/dist/types/core.d.ts.map +1 -0
  110. package/dist/types/core.js +24 -0
  111. package/dist/types/core.js.map +1 -0
  112. package/dist/types/index.d.ts +7 -0
  113. package/dist/types/index.d.ts.map +1 -0
  114. package/dist/types/index.js +23 -0
  115. package/dist/types/index.js.map +1 -0
  116. package/dist/types/openapi.d.ts +250 -0
  117. package/dist/types/openapi.d.ts.map +1 -0
  118. package/dist/types/openapi.js +8 -0
  119. package/dist/types/openapi.js.map +1 -0
  120. package/dist/types/schema.d.ts +68 -0
  121. package/dist/types/schema.d.ts.map +1 -0
  122. package/dist/types/schema.js +22 -0
  123. package/dist/types/schema.js.map +1 -0
  124. package/docs/ADVANCED_PLUGINS_IMPLEMENTATION.md +355 -0
  125. package/docs/ADVANCED_PLUGIN_DEVELOPMENT.md +309 -0
  126. package/docs/API.md +600 -0
  127. package/docs/CONFIGURATION.md +722 -0
  128. package/docs/FASTAPI_TUTORIAL.md +1497 -0
  129. package/docs/PLUGINS.md +683 -0
  130. package/docs/PLUGIN_DEVELOPMENT.md +720 -0
  131. package/package.json +90 -0
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Jest setup file for global test configuration
3
+ */
4
+ declare const originalConsoleError: (message?: any, ...optionalParams: any[]) => void;
5
+ declare const originalConsoleWarn: (message?: any, ...optionalParams: any[]) => void;
6
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/__tests__/setup.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,QAAA,MAAM,oBAAoB,mDAAgB,CAAC;AAC3C,QAAA,MAAM,mBAAmB,mDAAe,CAAC"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ /**
3
+ * Jest setup file for global test configuration
4
+ */
5
+ // Increase test timeout for integration tests
6
+ jest.setTimeout(30000);
7
+ // Mock console methods to reduce noise during tests
8
+ const originalConsoleError = console.error;
9
+ const originalConsoleWarn = console.warn;
10
+ beforeEach(() => {
11
+ // Mock console.error and console.warn to suppress expected errors in tests
12
+ console.error = jest.fn();
13
+ console.warn = jest.fn();
14
+ });
15
+ afterEach(() => {
16
+ // Restore original console methods
17
+ console.error = originalConsoleError;
18
+ console.warn = originalConsoleWarn;
19
+ // Clear all mocks
20
+ jest.clearAllMocks();
21
+ });
22
+ // Set up environment variables for testing
23
+ process.env.NODE_ENV = "test";
24
+ // Dummy test to satisfy Jest requirement
25
+ describe("Setup", () => {
26
+ it("should configure test environment", () => {
27
+ expect(process.env.NODE_ENV).toBe("test");
28
+ });
29
+ });
30
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/__tests__/setup.ts"],"names":[],"mappings":";AAAA;;GAEG;AAEH,8CAA8C;AAC9C,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAEvB,oDAAoD;AACpD,MAAM,oBAAoB,GAAG,OAAO,CAAC,KAAK,CAAC;AAC3C,MAAM,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;AAEzC,UAAU,CAAC,GAAG,EAAE;IACd,2EAA2E;IAC3E,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IAC1B,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;AAC3B,CAAC,CAAC,CAAC;AAEH,SAAS,CAAC,GAAG,EAAE;IACb,mCAAmC;IACnC,OAAO,CAAC,KAAK,GAAG,oBAAoB,CAAC;IACrC,OAAO,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAEnC,kBAAkB;IAClB,IAAI,CAAC,aAAa,EAAE,CAAC;AACvB,CAAC,CAAC,CAAC;AAEH,2CAA2C;AAC3C,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,MAAM,CAAC;AAE9B,yCAAyC;AACzC,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;IACrB,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Test configuration and utilities
3
+ */
4
+ import { SchemanticConfig } from "../types/core";
5
+ import { OpenAPISchema } from "../types/openapi";
6
+ /**
7
+ * Create a test configuration
8
+ */
9
+ export declare function createTestConfig(overrides?: Partial<SchemanticConfig>): SchemanticConfig;
10
+ /**
11
+ * Create a minimal test schema
12
+ */
13
+ export declare function createTestSchema(): OpenAPISchema;
14
+ /**
15
+ * Create a complex test schema with various types
16
+ */
17
+ export declare function createComplexTestSchema(): OpenAPISchema;
18
+ /**
19
+ * Mock file system operations for tests
20
+ */
21
+ export declare const mockFs: {
22
+ mkdir: jest.Mock<any, any, any>;
23
+ writeFile: jest.Mock<any, any, any>;
24
+ readFile: jest.Mock<any, any, any>;
25
+ access: jest.Mock<any, any, any>;
26
+ readdir: jest.Mock<any, any, any>;
27
+ };
28
+ /**
29
+ * Setup mock file system
30
+ */
31
+ export declare function setupMockFs(): void;
32
+ /**
33
+ * Reset mock file system
34
+ */
35
+ export declare function resetMockFs(): void;
36
+ //# sourceMappingURL=test-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-config.d.ts","sourceRoot":"","sources":["../../src/__tests__/test-config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAkB,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,GAAE,OAAO,CAAC,gBAAgB,CAAM,GACxC,gBAAgB,CAiBlB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CA0QhD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,aAAa,CAoNvD;AAED;;GAEG;AACH,eAAO,MAAM,MAAM;;;;;;CAMlB,CAAC;AAEF;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAQlC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAElC"}
@@ -0,0 +1,563 @@
1
+ "use strict";
2
+ /**
3
+ * Test configuration and utilities
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.mockFs = void 0;
7
+ exports.createTestConfig = createTestConfig;
8
+ exports.createTestSchema = createTestSchema;
9
+ exports.createComplexTestSchema = createComplexTestSchema;
10
+ exports.setupMockFs = setupMockFs;
11
+ exports.resetMockFs = resetMockFs;
12
+ const core_1 = require("../types/core");
13
+ /**
14
+ * Create a test configuration
15
+ */
16
+ function createTestConfig(overrides = {}) {
17
+ const config = {
18
+ outputDir: "./test-output",
19
+ generateTypes: true,
20
+ generateApiClient: true,
21
+ useStrictTypes: true,
22
+ useOptionalChaining: true,
23
+ useNullishCoalescing: true,
24
+ namingConvention: "camelCase",
25
+ preserveComments: true,
26
+ generateIndexFile: true,
27
+ generateBarrelExports: true,
28
+ ...core_1.DEFAULT_CONFIG,
29
+ ...overrides,
30
+ };
31
+ return config;
32
+ }
33
+ /**
34
+ * Create a minimal test schema
35
+ */
36
+ function createTestSchema() {
37
+ return {
38
+ openapi: "3.0.0",
39
+ info: {
40
+ title: "Test API",
41
+ version: "1.0.0",
42
+ description: "A test API for unit tests",
43
+ },
44
+ paths: {
45
+ "/users": {
46
+ get: {
47
+ operationId: "getUsers",
48
+ summary: "Get all users",
49
+ responses: {
50
+ "200": {
51
+ description: "List of users",
52
+ content: {
53
+ "application/json": {
54
+ schema: {
55
+ type: "array",
56
+ items: {
57
+ $ref: "#/components/schemas/User",
58
+ },
59
+ },
60
+ },
61
+ },
62
+ },
63
+ },
64
+ },
65
+ post: {
66
+ operationId: "createUser",
67
+ summary: "Create a new user",
68
+ requestBody: {
69
+ content: {
70
+ "application/json": {
71
+ schema: {
72
+ $ref: "#/components/schemas/CreateUserRequest",
73
+ },
74
+ },
75
+ },
76
+ },
77
+ responses: {
78
+ "201": {
79
+ description: "Created user",
80
+ content: {
81
+ "application/json": {
82
+ schema: {
83
+ $ref: "#/components/schemas/User",
84
+ },
85
+ },
86
+ },
87
+ },
88
+ },
89
+ },
90
+ },
91
+ "/users/{id}": {
92
+ get: {
93
+ operationId: "getUserById",
94
+ summary: "Get user by ID",
95
+ parameters: [
96
+ {
97
+ name: "id",
98
+ in: "path",
99
+ required: true,
100
+ schema: {
101
+ type: "string",
102
+ },
103
+ },
104
+ ],
105
+ responses: {
106
+ "200": {
107
+ description: "User details",
108
+ content: {
109
+ "application/json": {
110
+ schema: {
111
+ $ref: "#/components/schemas/User",
112
+ },
113
+ },
114
+ },
115
+ },
116
+ "404": {
117
+ description: "User not found",
118
+ },
119
+ },
120
+ },
121
+ put: {
122
+ operationId: "updateUser",
123
+ summary: "Update user",
124
+ parameters: [
125
+ {
126
+ name: "id",
127
+ in: "path",
128
+ required: true,
129
+ schema: {
130
+ type: "string",
131
+ },
132
+ },
133
+ ],
134
+ requestBody: {
135
+ content: {
136
+ "application/json": {
137
+ schema: {
138
+ $ref: "#/components/schemas/UpdateUserRequest",
139
+ },
140
+ },
141
+ },
142
+ },
143
+ responses: {
144
+ "200": {
145
+ description: "Updated user",
146
+ content: {
147
+ "application/json": {
148
+ schema: {
149
+ $ref: "#/components/schemas/User",
150
+ },
151
+ },
152
+ },
153
+ },
154
+ },
155
+ },
156
+ delete: {
157
+ operationId: "deleteUser",
158
+ summary: "Delete user",
159
+ parameters: [
160
+ {
161
+ name: "id",
162
+ in: "path",
163
+ required: true,
164
+ schema: {
165
+ type: "string",
166
+ },
167
+ },
168
+ ],
169
+ responses: {
170
+ "204": {
171
+ description: "User deleted",
172
+ },
173
+ "404": {
174
+ description: "User not found",
175
+ },
176
+ },
177
+ },
178
+ },
179
+ },
180
+ components: {
181
+ schemas: {
182
+ User: {
183
+ type: "object",
184
+ description: "A user object",
185
+ properties: {
186
+ id: {
187
+ type: "string",
188
+ format: "uuid",
189
+ description: "Unique identifier",
190
+ },
191
+ email: {
192
+ type: "string",
193
+ format: "email",
194
+ description: "User email address",
195
+ },
196
+ firstName: {
197
+ type: "string",
198
+ description: "User first name",
199
+ },
200
+ lastName: {
201
+ type: "string",
202
+ description: "User last name",
203
+ },
204
+ role: {
205
+ type: "string",
206
+ enum: ["admin", "user", "moderator"],
207
+ description: "User role",
208
+ },
209
+ isActive: {
210
+ type: "boolean",
211
+ description: "Whether the user is active",
212
+ },
213
+ createdAt: {
214
+ type: "string",
215
+ format: "date-time",
216
+ description: "Creation timestamp",
217
+ },
218
+ updatedAt: {
219
+ type: "string",
220
+ format: "date-time",
221
+ description: "Last update timestamp",
222
+ },
223
+ },
224
+ required: ["id", "email", "firstName", "lastName"],
225
+ },
226
+ CreateUserRequest: {
227
+ type: "object",
228
+ description: "Request to create a new user",
229
+ properties: {
230
+ email: {
231
+ type: "string",
232
+ format: "email",
233
+ description: "User email address",
234
+ },
235
+ firstName: {
236
+ type: "string",
237
+ description: "User first name",
238
+ },
239
+ lastName: {
240
+ type: "string",
241
+ description: "User last name",
242
+ },
243
+ role: {
244
+ type: "string",
245
+ enum: ["admin", "user", "moderator"],
246
+ default: "user",
247
+ description: "User role",
248
+ },
249
+ },
250
+ required: ["email", "firstName", "lastName"],
251
+ },
252
+ UpdateUserRequest: {
253
+ type: "object",
254
+ description: "Request to update a user",
255
+ properties: {
256
+ email: {
257
+ type: "string",
258
+ format: "email",
259
+ description: "User email address",
260
+ },
261
+ firstName: {
262
+ type: "string",
263
+ description: "User first name",
264
+ },
265
+ lastName: {
266
+ type: "string",
267
+ description: "User last name",
268
+ },
269
+ role: {
270
+ type: "string",
271
+ enum: ["admin", "user", "moderator"],
272
+ description: "User role",
273
+ },
274
+ isActive: {
275
+ type: "boolean",
276
+ description: "Whether the user is active",
277
+ },
278
+ },
279
+ },
280
+ Error: {
281
+ type: "object",
282
+ description: "Error response",
283
+ properties: {
284
+ code: {
285
+ type: "string",
286
+ description: "Error code",
287
+ },
288
+ message: {
289
+ type: "string",
290
+ description: "Error message",
291
+ },
292
+ details: {
293
+ type: "object",
294
+ description: "Additional error details",
295
+ },
296
+ },
297
+ required: ["code", "message"],
298
+ },
299
+ },
300
+ },
301
+ };
302
+ }
303
+ /**
304
+ * Create a complex test schema with various types
305
+ */
306
+ function createComplexTestSchema() {
307
+ return {
308
+ openapi: "3.0.0",
309
+ info: {
310
+ title: "Complex Test API",
311
+ version: "1.0.0",
312
+ description: "A complex test API with various schema types",
313
+ },
314
+ paths: {
315
+ "/products": {
316
+ get: {
317
+ operationId: "getProducts",
318
+ parameters: [
319
+ {
320
+ name: "category",
321
+ in: "query",
322
+ schema: {
323
+ type: "string",
324
+ enum: ["electronics", "clothing", "books"],
325
+ },
326
+ },
327
+ {
328
+ name: "limit",
329
+ in: "query",
330
+ schema: {
331
+ type: "integer",
332
+ minimum: 1,
333
+ maximum: 100,
334
+ default: 20,
335
+ },
336
+ },
337
+ {
338
+ name: "offset",
339
+ in: "query",
340
+ schema: {
341
+ type: "integer",
342
+ minimum: 0,
343
+ default: 0,
344
+ },
345
+ },
346
+ ],
347
+ responses: {
348
+ "200": {
349
+ description: "List of products",
350
+ content: {
351
+ "application/json": {
352
+ schema: {
353
+ type: "object",
354
+ properties: {
355
+ products: {
356
+ type: "array",
357
+ items: {
358
+ $ref: "#/components/schemas/Product",
359
+ },
360
+ },
361
+ total: {
362
+ type: "integer",
363
+ },
364
+ hasMore: {
365
+ type: "boolean",
366
+ },
367
+ },
368
+ },
369
+ },
370
+ },
371
+ },
372
+ },
373
+ },
374
+ },
375
+ },
376
+ components: {
377
+ schemas: {
378
+ Product: {
379
+ type: "object",
380
+ properties: {
381
+ id: {
382
+ type: "string",
383
+ format: "uuid",
384
+ },
385
+ name: {
386
+ type: "string",
387
+ },
388
+ description: {
389
+ type: "string",
390
+ },
391
+ price: {
392
+ type: "number",
393
+ format: "decimal",
394
+ },
395
+ category: {
396
+ $ref: "#/components/schemas/Category",
397
+ },
398
+ tags: {
399
+ type: "array",
400
+ items: {
401
+ type: "string",
402
+ },
403
+ },
404
+ metadata: {
405
+ type: "object",
406
+ additionalProperties: true,
407
+ },
408
+ specifications: {
409
+ type: "object",
410
+ properties: {
411
+ weight: {
412
+ type: "number",
413
+ },
414
+ dimensions: {
415
+ type: "object",
416
+ properties: {
417
+ width: { type: "number" },
418
+ height: { type: "number" },
419
+ depth: { type: "number" },
420
+ },
421
+ },
422
+ },
423
+ },
424
+ availability: {
425
+ type: "object",
426
+ properties: {
427
+ inStock: {
428
+ type: "boolean",
429
+ },
430
+ quantity: {
431
+ type: "integer",
432
+ minimum: 0,
433
+ },
434
+ lastRestocked: {
435
+ type: "string",
436
+ format: "date-time",
437
+ },
438
+ },
439
+ },
440
+ },
441
+ required: ["id", "name", "price", "category"],
442
+ },
443
+ Category: {
444
+ type: "object",
445
+ properties: {
446
+ id: {
447
+ type: "string",
448
+ },
449
+ name: {
450
+ type: "string",
451
+ },
452
+ parent: {
453
+ $ref: "#/components/schemas/Category",
454
+ },
455
+ },
456
+ required: ["id", "name"],
457
+ },
458
+ Order: {
459
+ type: "object",
460
+ properties: {
461
+ id: {
462
+ type: "string",
463
+ format: "uuid",
464
+ },
465
+ customerId: {
466
+ type: "string",
467
+ format: "uuid",
468
+ },
469
+ items: {
470
+ type: "array",
471
+ items: {
472
+ type: "object",
473
+ properties: {
474
+ productId: {
475
+ type: "string",
476
+ format: "uuid",
477
+ },
478
+ quantity: {
479
+ type: "integer",
480
+ minimum: 1,
481
+ },
482
+ price: {
483
+ type: "number",
484
+ format: "decimal",
485
+ },
486
+ },
487
+ required: ["productId", "quantity", "price"],
488
+ },
489
+ },
490
+ status: {
491
+ type: "string",
492
+ enum: [
493
+ "pending",
494
+ "confirmed",
495
+ "shipped",
496
+ "delivered",
497
+ "cancelled",
498
+ ],
499
+ },
500
+ total: {
501
+ type: "number",
502
+ format: "decimal",
503
+ },
504
+ createdAt: {
505
+ type: "string",
506
+ format: "date-time",
507
+ },
508
+ updatedAt: {
509
+ type: "string",
510
+ format: "date-time",
511
+ },
512
+ },
513
+ required: ["id", "customerId", "items", "status", "total"],
514
+ },
515
+ },
516
+ },
517
+ };
518
+ }
519
+ /**
520
+ * Mock file system operations for tests
521
+ */
522
+ exports.mockFs = {
523
+ mkdir: jest.fn(),
524
+ writeFile: jest.fn(),
525
+ readFile: jest.fn(),
526
+ access: jest.fn(),
527
+ readdir: jest.fn(),
528
+ };
529
+ /**
530
+ * Setup mock file system
531
+ */
532
+ function setupMockFs() {
533
+ jest.mock("fs/promises", () => exports.mockFs);
534
+ exports.mockFs.mkdir.mockResolvedValue(undefined);
535
+ exports.mockFs.writeFile.mockResolvedValue(undefined);
536
+ exports.mockFs.readFile.mockResolvedValue("{}");
537
+ exports.mockFs.access.mockResolvedValue(undefined);
538
+ exports.mockFs.readdir.mockResolvedValue([]);
539
+ }
540
+ /**
541
+ * Reset mock file system
542
+ */
543
+ function resetMockFs() {
544
+ jest.clearAllMocks();
545
+ }
546
+ /**
547
+ * Basic test to ensure the test utilities work
548
+ */
549
+ describe("Test Utilities", () => {
550
+ it("should create test configuration", () => {
551
+ const config = createTestConfig();
552
+ expect(config).toBeDefined();
553
+ expect(config.outputDir).toBe("./test-output");
554
+ expect(config.generateTypes).toBe(true);
555
+ });
556
+ it("should create test schema", () => {
557
+ const schema = createTestSchema();
558
+ expect(schema).toBeDefined();
559
+ expect(schema.openapi).toBe("3.0.0");
560
+ expect(schema.info.title).toBe("Test API");
561
+ });
562
+ });
563
+ //# sourceMappingURL=test-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-config.js","sourceRoot":"","sources":["../../src/__tests__/test-config.ts"],"names":[],"mappings":"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"}