@furystack/rest-service 12.2.0 → 12.3.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 (74) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/esm/api-manager.d.ts +1 -1
  3. package/esm/api-manager.d.ts.map +1 -1
  4. package/esm/api-manager.js +3 -2
  5. package/esm/api-manager.js.map +1 -1
  6. package/esm/endpoint-generators/create-get-openapi-document-action.d.ts +29 -0
  7. package/esm/endpoint-generators/create-get-openapi-document-action.d.ts.map +1 -0
  8. package/esm/endpoint-generators/create-get-openapi-document-action.js +61 -0
  9. package/esm/endpoint-generators/create-get-openapi-document-action.js.map +1 -0
  10. package/esm/endpoint-generators/index.d.ts +2 -0
  11. package/esm/endpoint-generators/index.d.ts.map +1 -1
  12. package/esm/endpoint-generators/index.js +2 -0
  13. package/esm/endpoint-generators/index.js.map +1 -1
  14. package/esm/endpoint-generators/with-schema-and-openapi-action.d.ts +23 -0
  15. package/esm/endpoint-generators/with-schema-and-openapi-action.d.ts.map +1 -0
  16. package/esm/endpoint-generators/with-schema-and-openapi-action.js +2 -0
  17. package/esm/endpoint-generators/with-schema-and-openapi-action.js.map +1 -0
  18. package/esm/openapi/auth-provider-to-security-scheme.d.ts +14 -0
  19. package/esm/openapi/auth-provider-to-security-scheme.d.ts.map +1 -0
  20. package/esm/openapi/auth-provider-to-security-scheme.js +35 -0
  21. package/esm/openapi/auth-provider-to-security-scheme.js.map +1 -0
  22. package/esm/openapi/auth-provider-to-security-scheme.spec.d.ts +2 -0
  23. package/esm/openapi/auth-provider-to-security-scheme.spec.d.ts.map +1 -0
  24. package/esm/openapi/auth-provider-to-security-scheme.spec.js +42 -0
  25. package/esm/openapi/auth-provider-to-security-scheme.spec.js.map +1 -0
  26. package/esm/openapi/generate-openapi-document.d.ts +21 -0
  27. package/esm/openapi/generate-openapi-document.d.ts.map +1 -0
  28. package/esm/openapi/generate-openapi-document.js +144 -0
  29. package/esm/openapi/generate-openapi-document.js.map +1 -0
  30. package/esm/openapi/generate-openapi-document.spec.d.ts +2 -0
  31. package/esm/openapi/generate-openapi-document.spec.d.ts.map +1 -0
  32. package/esm/openapi/generate-openapi-document.spec.js +643 -0
  33. package/esm/openapi/generate-openapi-document.spec.js.map +1 -0
  34. package/esm/openapi/openapi-round-trip.advanced-api.json +363 -0
  35. package/esm/openapi/openapi-round-trip.crud-api.json +115 -0
  36. package/esm/openapi/openapi-round-trip.example-api.json +71 -0
  37. package/esm/openapi/openapi-round-trip.spec.d.ts +2 -0
  38. package/esm/openapi/openapi-round-trip.spec.d.ts.map +1 -0
  39. package/esm/openapi/openapi-round-trip.spec.js +525 -0
  40. package/esm/openapi/openapi-round-trip.spec.js.map +1 -0
  41. package/esm/swagger/generate-swagger-json.spec.js +1 -1
  42. package/esm/swagger/generate-swagger-json.spec.js.map +1 -1
  43. package/esm/validate.integration.spec.js +153 -32
  44. package/esm/validate.integration.spec.js.map +1 -1
  45. package/package.json +9 -9
  46. package/src/api-manager.ts +7 -3
  47. package/src/endpoint-generators/create-get-openapi-document-action.ts +96 -0
  48. package/src/endpoint-generators/index.ts +2 -0
  49. package/src/endpoint-generators/with-schema-and-openapi-action.ts +14 -0
  50. package/src/openapi/auth-provider-to-security-scheme.spec.ts +50 -0
  51. package/src/openapi/auth-provider-to-security-scheme.ts +41 -0
  52. package/src/openapi/generate-openapi-document.spec.ts +733 -0
  53. package/src/openapi/generate-openapi-document.ts +198 -0
  54. package/src/openapi/openapi-round-trip.advanced-api.json +363 -0
  55. package/src/openapi/openapi-round-trip.crud-api.json +115 -0
  56. package/src/openapi/openapi-round-trip.example-api.json +71 -0
  57. package/src/openapi/openapi-round-trip.spec.ts +621 -0
  58. package/src/swagger/generate-swagger-json.spec.ts +1 -1
  59. package/src/validate.integration.spec.ts +184 -33
  60. package/esm/endpoint-generators/create-get-swagger-json-action.d.ts +0 -14
  61. package/esm/endpoint-generators/create-get-swagger-json-action.d.ts.map +0 -1
  62. package/esm/endpoint-generators/create-get-swagger-json-action.js +0 -18
  63. package/esm/endpoint-generators/create-get-swagger-json-action.js.map +0 -1
  64. package/esm/endpoint-generators/with-schema-and-swagger-action.d.ts +0 -21
  65. package/esm/endpoint-generators/with-schema-and-swagger-action.d.ts.map +0 -1
  66. package/esm/endpoint-generators/with-schema-and-swagger-action.js +0 -2
  67. package/esm/endpoint-generators/with-schema-and-swagger-action.js.map +0 -1
  68. package/esm/swagger/generate-swagger-json.d.ts +0 -14
  69. package/esm/swagger/generate-swagger-json.d.ts.map +0 -1
  70. package/esm/swagger/generate-swagger-json.js +0 -108
  71. package/esm/swagger/generate-swagger-json.js.map +0 -1
  72. package/src/endpoint-generators/create-get-swagger-json-action.ts +0 -26
  73. package/src/endpoint-generators/with-schema-and-swagger-action.ts +0 -11
  74. package/src/swagger/generate-swagger-json.ts +0 -132
@@ -0,0 +1,525 @@
1
+ import { openApiToSchema, resolveOpenApiRefs } from '@furystack/rest';
2
+ import { describe, expect, expectTypeOf, it } from 'vitest';
3
+ import { generateOpenApiDocument } from './generate-openapi-document.js';
4
+ import exampleApiDoc from './openapi-round-trip.example-api.json' with { type: 'json' };
5
+ import crudApiDoc from './openapi-round-trip.crud-api.json' with { type: 'json' };
6
+ import advancedApiDoc from './openapi-round-trip.advanced-api.json' with { type: 'json' };
7
+ const roundTrip = (doc) => {
8
+ const schema = openApiToSchema(doc);
9
+ return generateOpenApiDocument({
10
+ api: schema.endpoints,
11
+ title: schema.name,
12
+ description: schema.description,
13
+ version: schema.version,
14
+ metadata: schema.metadata,
15
+ });
16
+ };
17
+ describe('OpenAPI round-trip: learn.openapis.org example (imported from JSON)', () => {
18
+ describe('Type-level extraction from JSON import', () => {
19
+ it('Should produce a valid RestApi type', () => {
20
+ expectTypeOf().toExtend();
21
+ });
22
+ it('Should have GET method with both paths', () => {
23
+ expectTypeOf().toHaveProperty('/');
24
+ expectTypeOf().toHaveProperty('/v2');
25
+ });
26
+ it('Should have unknown result (no schema defined, only examples)', () => {
27
+ expectTypeOf().toEqualTypeOf();
28
+ expectTypeOf().toEqualTypeOf();
29
+ });
30
+ });
31
+ describe('Runtime round-trip from JSON import', () => {
32
+ it('Should satisfy OpenApiDocument at runtime', () => {
33
+ const doc = exampleApiDoc;
34
+ expect(doc.openapi).toBe('3.1.0');
35
+ });
36
+ it('Should preserve document info through round-trip', () => {
37
+ const regenerated = roundTrip(exampleApiDoc);
38
+ expect(regenerated.info.title).toBe('Simple API overview');
39
+ expect(regenerated.info.version).toBe('2.0.0');
40
+ });
41
+ it('Should preserve paths through round-trip', () => {
42
+ const regenerated = roundTrip(exampleApiDoc);
43
+ expect(Object.keys(regenerated.paths ?? {}).sort()).toEqual(['/', '/v2']);
44
+ });
45
+ it('Should preserve HTTP methods through round-trip', () => {
46
+ const regenerated = roundTrip(exampleApiDoc);
47
+ expect(regenerated.paths['/']?.get).toBeDefined();
48
+ expect(regenerated.paths['/']?.post).toBeUndefined();
49
+ expect(regenerated.paths['/v2']?.get).toBeDefined();
50
+ expect(regenerated.paths['/v2']?.post).toBeUndefined();
51
+ });
52
+ it('Should produce valid OpenAPI 3.1 structure', () => {
53
+ const regenerated = roundTrip(exampleApiDoc);
54
+ expect(regenerated.openapi).toBe('3.1.0');
55
+ expect(regenerated.info).toBeDefined();
56
+ expect(regenerated.paths).toBeDefined();
57
+ expect(regenerated.components).toBeDefined();
58
+ });
59
+ });
60
+ });
61
+ describe('Round-trip: CRUD API (imported from JSON)', () => {
62
+ const typedCrudDoc = crudApiDoc;
63
+ describe('Runtime round-trip from JSON import', () => {
64
+ it('Should preserve document info', () => {
65
+ const regenerated = roundTrip(typedCrudDoc);
66
+ expect(regenerated.info.title).toBe('CRUD API');
67
+ expect(regenerated.info.version).toBe('1.0.0');
68
+ });
69
+ it('Should preserve all paths', () => {
70
+ const regenerated = roundTrip(typedCrudDoc);
71
+ expect(Object.keys(regenerated.paths ?? {}).sort()).toEqual(['/users', '/users/{id}']);
72
+ });
73
+ it('Should preserve all HTTP methods', () => {
74
+ const regenerated = roundTrip(typedCrudDoc);
75
+ expect(regenerated.paths['/users']?.get).toBeDefined();
76
+ expect(regenerated.paths['/users']?.post).toBeDefined();
77
+ expect(regenerated.paths['/users/{id}']?.get).toBeDefined();
78
+ expect(regenerated.paths['/users/{id}']?.delete).toBeDefined();
79
+ });
80
+ it('Should preserve path parameters', () => {
81
+ const regenerated = roundTrip(typedCrudDoc);
82
+ const getParams = regenerated.paths['/users/{id}']?.get?.parameters;
83
+ expect(getParams.some((p) => p.name === 'id' && p.in === 'path')).toBe(true);
84
+ });
85
+ it('Should preserve response schemas', () => {
86
+ const regenerated = roundTrip(typedCrudDoc);
87
+ expect(regenerated.components?.schemas?.listUsers).toEqual(crudApiDoc.paths['/users'].get.responses['200'].content['application/json'].schema);
88
+ expect(regenerated.components?.schemas?.createUser).toEqual(crudApiDoc.paths['/users'].post.responses['201'].content['application/json'].schema);
89
+ });
90
+ });
91
+ });
92
+ describe('Round-trip: individual construct tests', () => {
93
+ describe('Response schema', () => {
94
+ const doc = {
95
+ openapi: '3.1.0',
96
+ info: { title: 'Test', version: '1.0.0' },
97
+ paths: {
98
+ '/users': {
99
+ get: {
100
+ operationId: 'listUsers',
101
+ responses: {
102
+ '200': {
103
+ description: 'OK',
104
+ content: {
105
+ 'application/json': {
106
+ schema: {
107
+ type: 'array',
108
+ items: { type: 'object', properties: { id: { type: 'string' }, name: { type: 'string' } } },
109
+ },
110
+ },
111
+ },
112
+ },
113
+ },
114
+ },
115
+ },
116
+ },
117
+ };
118
+ it('Should extract typed response at the type level', () => {
119
+ expectTypeOf().toExtend();
120
+ });
121
+ it('Should preserve response schema through round-trip', () => {
122
+ const regenerated = roundTrip(doc);
123
+ expect(regenerated.components?.schemas?.listUsers).toEqual(doc.paths['/users'].get.responses['200'].content['application/json'].schema);
124
+ });
125
+ });
126
+ describe('Path parameters', () => {
127
+ const doc = {
128
+ openapi: '3.1.0',
129
+ info: { title: 'Test', version: '1.0.0' },
130
+ paths: {
131
+ '/users/{userId}/posts/{postId}': {
132
+ get: {
133
+ parameters: [
134
+ { name: 'userId', in: 'path', required: true, schema: { type: 'string' } },
135
+ { name: 'postId', in: 'path', required: true, schema: { type: 'string' } },
136
+ ],
137
+ responses: { '200': { description: 'OK' } },
138
+ },
139
+ },
140
+ },
141
+ };
142
+ it('Should extract path params at the type level', () => {
143
+ expectTypeOf().toHaveProperty('userId');
144
+ expectTypeOf().toHaveProperty('postId');
145
+ });
146
+ it('Should convert {param} to :param and back through round-trip', () => {
147
+ const regenerated = roundTrip(doc);
148
+ expect(regenerated.paths?.['/users/{userId}/posts/{postId}']).toBeDefined();
149
+ const params = regenerated.paths?.['/users/{userId}/posts/{postId}']?.get?.parameters;
150
+ expect(params.some((p) => p.name === 'userId' && p.in === 'path')).toBe(true);
151
+ expect(params.some((p) => p.name === 'postId' && p.in === 'path')).toBe(true);
152
+ });
153
+ });
154
+ describe('Request body', () => {
155
+ const doc = {
156
+ openapi: '3.1.0',
157
+ info: { title: 'Test', version: '1.0.0' },
158
+ paths: {
159
+ '/users': {
160
+ post: {
161
+ operationId: 'createUser',
162
+ requestBody: {
163
+ required: true,
164
+ content: {
165
+ 'application/json': {
166
+ schema: {
167
+ type: 'object',
168
+ properties: { name: { type: 'string' }, email: { type: 'string' } },
169
+ required: ['name', 'email'],
170
+ },
171
+ },
172
+ },
173
+ },
174
+ responses: {
175
+ '201': {
176
+ description: 'Created',
177
+ content: {
178
+ 'application/json': {
179
+ schema: { type: 'object', properties: { id: { type: 'string' } } },
180
+ },
181
+ },
182
+ },
183
+ },
184
+ },
185
+ },
186
+ },
187
+ };
188
+ it('Should extract request body type', () => {
189
+ expectTypeOf().toExtend();
190
+ });
191
+ it('Should extract response type from 201', () => {
192
+ expectTypeOf().toExtend();
193
+ });
194
+ });
195
+ describe('Query parameters', () => {
196
+ const doc = {
197
+ openapi: '3.1.0',
198
+ info: { title: 'Test', version: '1.0.0' },
199
+ paths: {
200
+ '/search': {
201
+ get: {
202
+ parameters: [
203
+ { name: 'q', in: 'query', schema: { type: 'string' } },
204
+ { name: 'limit', in: 'query', schema: { type: 'integer' } },
205
+ ],
206
+ responses: {
207
+ '200': {
208
+ description: 'OK',
209
+ content: { 'application/json': { schema: { type: 'array', items: { type: 'string' } } } },
210
+ },
211
+ },
212
+ },
213
+ },
214
+ },
215
+ };
216
+ it('Should extract query params at the type level', () => {
217
+ expectTypeOf().toHaveProperty('q');
218
+ expectTypeOf().toHaveProperty('limit');
219
+ });
220
+ it('Should preserve result type', () => {
221
+ expectTypeOf().toExtend();
222
+ });
223
+ });
224
+ describe('Authentication', () => {
225
+ const doc = {
226
+ openapi: '3.1.0',
227
+ info: { title: 'Test', version: '1.0.0' },
228
+ paths: {
229
+ '/public': {
230
+ get: { security: [], responses: { '200': { description: 'OK' } } },
231
+ },
232
+ '/private': {
233
+ get: { security: [{ bearerAuth: [] }], responses: { '200': { description: 'OK' } } },
234
+ },
235
+ },
236
+ };
237
+ it('Should preserve authentication through openApiToSchema', () => {
238
+ const schema = openApiToSchema(doc);
239
+ expect(schema.endpoints.GET['/public'].isAuthenticated).toBe(false);
240
+ expect(schema.endpoints.GET['/private'].isAuthenticated).toBe(true);
241
+ });
242
+ it('Should preserve security scheme names through round-trip', () => {
243
+ const regenerated = roundTrip(doc);
244
+ expect(regenerated.paths?.['/public']?.get?.security).toEqual([]);
245
+ expect(regenerated.paths?.['/private']?.get?.security).toEqual([{ bearerAuth: [] }]);
246
+ });
247
+ });
248
+ describe('HEAD, OPTIONS, TRACE methods', () => {
249
+ const doc = {
250
+ openapi: '3.1.0',
251
+ info: { title: 'Test', version: '1.0.0' },
252
+ paths: {
253
+ '/items': {
254
+ head: { responses: { '200': { description: 'OK' } } },
255
+ options: { responses: { '200': { description: 'OK' } } },
256
+ trace: { responses: { '200': { description: 'OK' } } },
257
+ },
258
+ },
259
+ };
260
+ it('Should preserve HEAD, OPTIONS, TRACE through round-trip', () => {
261
+ const regenerated = roundTrip(doc);
262
+ expect(regenerated.paths?.['/items']?.head).toBeDefined();
263
+ expect(regenerated.paths?.['/items']?.options).toBeDefined();
264
+ expect(regenerated.paths?.['/items']?.trace).toBeDefined();
265
+ });
266
+ });
267
+ describe('No response schema', () => {
268
+ const doc = {
269
+ openapi: '3.1.0',
270
+ info: { title: 'Test', version: '1.0.0' },
271
+ paths: {
272
+ '/health': {
273
+ get: { responses: { '200': { description: 'OK' } } },
274
+ },
275
+ },
276
+ };
277
+ it('Should have unknown result type', () => {
278
+ expectTypeOf().toEqualTypeOf();
279
+ });
280
+ it('Should still produce the endpoint in the round-trip', () => {
281
+ const regenerated = roundTrip(doc);
282
+ expect(regenerated.paths?.['/health']?.get).toBeDefined();
283
+ const response = regenerated.paths?.['/health']?.get?.responses?.['200'];
284
+ expect(response).toBeDefined();
285
+ });
286
+ });
287
+ });
288
+ // ─── Advanced API round-trip ─────────────────────────────────────────────────
289
+ describe('Round-trip: advanced API (imported from JSON)', () => {
290
+ const resolvedDoc = resolveOpenApiRefs(advancedApiDoc);
291
+ const advancedRoundTrip = (doc) => {
292
+ const resolved = resolveOpenApiRefs(doc);
293
+ const schema = openApiToSchema(resolved);
294
+ return generateOpenApiDocument({
295
+ api: schema.endpoints,
296
+ title: schema.name,
297
+ description: schema.description,
298
+ version: schema.version,
299
+ metadata: schema.metadata,
300
+ });
301
+ };
302
+ describe('$ref resolution', () => {
303
+ it('Should resolve $ref in response schemas', () => {
304
+ const getPetResp = resolvedDoc.paths?.['/pets/{petId}']?.get?.responses?.['200'];
305
+ const content = getPetResp.content;
306
+ const { schema } = content['application/json'];
307
+ expect(schema.allOf).toBeDefined();
308
+ });
309
+ it('Should resolve $ref parameters from components', () => {
310
+ const params = resolvedDoc.paths?.['/pets']?.get?.parameters;
311
+ const limitParam = params.find((p) => p.name === 'limit');
312
+ expect(limitParam).toBeDefined();
313
+ expect(limitParam?.in).toBe('query');
314
+ });
315
+ it('Should resolve $ref in request body schemas', () => {
316
+ const body = resolvedDoc.paths?.['/pets']?.post?.requestBody;
317
+ const content = body.content;
318
+ const { schema } = content['application/json'];
319
+ expect(schema.type).toBe('object');
320
+ expect(schema.properties).toBeDefined();
321
+ });
322
+ it('Should resolve nested $ref within allOf', () => {
323
+ const petSchema = resolvedDoc.components?.schemas?.Pet;
324
+ const allOfItems = petSchema.allOf;
325
+ const firstItem = allOfItems[0];
326
+ expect(firstItem.type).toBe('object');
327
+ expect(firstItem.properties).toBeDefined();
328
+ });
329
+ });
330
+ describe('Document-level metadata round-trip', () => {
331
+ it('Should preserve info fields', () => {
332
+ const regenerated = advancedRoundTrip(advancedApiDoc);
333
+ expect(regenerated.info.title).toBe('Advanced Pet Store API');
334
+ expect(regenerated.info.version).toBe('2.1.0');
335
+ expect(regenerated.info.description).toBe('A feature-rich API exercising all OpenAPI 3.1 constructs');
336
+ expect(regenerated.info.summary).toBe('Pet store with advanced features');
337
+ expect(regenerated.info.termsOfService).toBe('https://example.com/terms');
338
+ });
339
+ it('Should preserve contact info', () => {
340
+ const regenerated = advancedRoundTrip(advancedApiDoc);
341
+ expect(regenerated.info.contact).toEqual({
342
+ name: 'API Support',
343
+ url: 'https://example.com/support',
344
+ email: 'support@example.com',
345
+ });
346
+ });
347
+ it('Should preserve license info', () => {
348
+ const regenerated = advancedRoundTrip(advancedApiDoc);
349
+ expect(regenerated.info.license).toEqual({ name: 'MIT', identifier: 'MIT' });
350
+ });
351
+ it('Should preserve servers with variables', () => {
352
+ const regenerated = advancedRoundTrip(advancedApiDoc);
353
+ expect(regenerated.servers).toHaveLength(1);
354
+ expect(regenerated.servers?.[0].url).toBe('https://{environment}.example.com/api/{version}');
355
+ expect(regenerated.servers?.[0].variables?.environment?.default).toBe('production');
356
+ });
357
+ it('Should preserve tags', () => {
358
+ const regenerated = advancedRoundTrip(advancedApiDoc);
359
+ expect(regenerated.tags).toHaveLength(2);
360
+ expect(regenerated.tags?.find((t) => t.name === 'pets')).toBeDefined();
361
+ expect(regenerated.tags?.find((t) => t.name === 'store')?.externalDocs?.url).toBe('https://example.com/docs/store');
362
+ });
363
+ it('Should preserve externalDocs', () => {
364
+ const regenerated = advancedRoundTrip(advancedApiDoc);
365
+ expect(regenerated.externalDocs).toEqual({
366
+ description: 'Full documentation',
367
+ url: 'https://example.com/docs',
368
+ });
369
+ });
370
+ it('Should preserve security schemes', () => {
371
+ const regenerated = advancedRoundTrip(advancedApiDoc);
372
+ expect(regenerated.components?.securitySchemes?.bearerAuth).toEqual({
373
+ type: 'http',
374
+ scheme: 'bearer',
375
+ bearerFormat: 'JWT',
376
+ });
377
+ expect(regenerated.components?.securitySchemes?.apiKey).toBeDefined();
378
+ });
379
+ });
380
+ describe('Operation metadata round-trip', () => {
381
+ it('Should preserve operation summary and description', () => {
382
+ const regenerated = advancedRoundTrip(advancedApiDoc);
383
+ expect(regenerated.paths?.['/pets']?.get?.summary).toBe('List all pets');
384
+ expect(regenerated.paths?.['/pets']?.get?.description).toBe('Returns a paginated list of pets with optional filtering');
385
+ });
386
+ it('Should preserve operation tags', () => {
387
+ const regenerated = advancedRoundTrip(advancedApiDoc);
388
+ expect(regenerated.paths?.['/pets']?.get?.tags).toEqual(['pets']);
389
+ expect(regenerated.paths?.['/store/inventory']?.get?.tags).toEqual(['store']);
390
+ });
391
+ it('Should preserve deprecated flag', () => {
392
+ const regenerated = advancedRoundTrip(advancedApiDoc);
393
+ expect(regenerated.paths?.['/pets/{petId}']?.delete?.deprecated).toBe(true);
394
+ });
395
+ it('Should preserve authentication: public override with empty security', () => {
396
+ const schema = openApiToSchema(resolvedDoc);
397
+ expect(schema.endpoints.GET?.['/pets']?.isAuthenticated).toBe(false);
398
+ });
399
+ it('Should preserve authentication: inherited from document-level security', () => {
400
+ const schema = openApiToSchema(resolvedDoc);
401
+ expect(schema.endpoints.GET?.['/pets/:petId']?.isAuthenticated).toBe(true);
402
+ });
403
+ });
404
+ describe('Structural round-trip', () => {
405
+ it('Should preserve all paths', () => {
406
+ const regenerated = advancedRoundTrip(advancedApiDoc);
407
+ const paths = Object.keys(regenerated.paths ?? {}).sort();
408
+ expect(paths).toEqual(['/pets', '/pets/{petId}', '/store/inventory', '/store/orders']);
409
+ });
410
+ it('Should preserve all HTTP methods per path', () => {
411
+ const regenerated = advancedRoundTrip(advancedApiDoc);
412
+ expect(regenerated.paths?.['/pets']?.get).toBeDefined();
413
+ expect(regenerated.paths?.['/pets']?.post).toBeDefined();
414
+ expect(regenerated.paths?.['/pets/{petId}']?.get).toBeDefined();
415
+ expect(regenerated.paths?.['/pets/{petId}']?.patch).toBeDefined();
416
+ expect(regenerated.paths?.['/pets/{petId}']?.delete).toBeDefined();
417
+ expect(regenerated.paths?.['/store/inventory']?.get).toBeDefined();
418
+ expect(regenerated.paths?.['/store/orders']?.post).toBeDefined();
419
+ });
420
+ it('Should preserve path parameters', () => {
421
+ const regenerated = advancedRoundTrip(advancedApiDoc);
422
+ const params = regenerated.paths?.['/pets/{petId}']?.get?.parameters;
423
+ expect(params.some((p) => p.name === 'petId' && p.in === 'path')).toBe(true);
424
+ });
425
+ });
426
+ describe('Type-level extraction (as const inline subset)', () => {
427
+ const typedDoc = {
428
+ openapi: '3.1.0',
429
+ info: { title: 'Test', version: '1.0.0' },
430
+ paths: {
431
+ '/pets': {
432
+ get: {
433
+ tags: ['pets'],
434
+ summary: 'List all pets',
435
+ description: 'Returns a list of pets',
436
+ security: [],
437
+ responses: {
438
+ '200': {
439
+ description: 'OK',
440
+ content: {
441
+ 'application/json': {
442
+ schema: { type: 'object', properties: { name: { type: 'string' } } },
443
+ },
444
+ },
445
+ },
446
+ },
447
+ },
448
+ post: {
449
+ requestBody: {
450
+ content: {
451
+ 'application/json': {
452
+ schema: { $ref: '#/components/schemas/CreatePet' },
453
+ },
454
+ },
455
+ },
456
+ responses: { '201': { description: 'Created' } },
457
+ },
458
+ },
459
+ '/pets/{petId}': {
460
+ get: {
461
+ responses: {
462
+ '200': {
463
+ description: 'OK',
464
+ content: {
465
+ 'application/json': {
466
+ schema: { $ref: '#/components/schemas/Pet' },
467
+ },
468
+ },
469
+ },
470
+ },
471
+ },
472
+ delete: {
473
+ deprecated: true,
474
+ description: 'Use archive instead',
475
+ responses: { '204': { description: 'Deleted' } },
476
+ },
477
+ },
478
+ },
479
+ components: {
480
+ schemas: {
481
+ Pet: {
482
+ allOf: [
483
+ { $ref: '#/components/schemas/CreatePet' },
484
+ { type: 'object', properties: { id: { type: 'string' } }, required: ['id'] },
485
+ ],
486
+ },
487
+ CreatePet: {
488
+ type: 'object',
489
+ properties: { name: { type: 'string' } },
490
+ required: ['name'],
491
+ },
492
+ },
493
+ },
494
+ };
495
+ it('Should produce a valid RestApi type', () => {
496
+ expectTypeOf().toExtend();
497
+ });
498
+ it('Should have GET and POST on /pets, GET and DELETE on /pets/:petId', () => {
499
+ expectTypeOf().toHaveProperty('/pets');
500
+ expectTypeOf().toHaveProperty('/pets');
501
+ expectTypeOf().toHaveProperty('/pets/:petId');
502
+ expectTypeOf().toHaveProperty('/pets/:petId');
503
+ });
504
+ it('Should resolve $ref in GET /pets/:petId response via allOf', () => {
505
+ expectTypeOf().toHaveProperty('id');
506
+ expectTypeOf().toHaveProperty('name');
507
+ });
508
+ it('Should resolve $ref in POST /pets request body', () => {
509
+ expectTypeOf().toHaveProperty('name');
510
+ });
511
+ it('Should extract path params from /pets/{petId}', () => {
512
+ expectTypeOf().toHaveProperty('petId');
513
+ });
514
+ it('Should extract tags metadata', () => {
515
+ expectTypeOf().toHaveProperty('tags');
516
+ expectTypeOf().toHaveProperty('summary');
517
+ expectTypeOf().toHaveProperty('description');
518
+ });
519
+ it('Should extract deprecated flag', () => {
520
+ expectTypeOf().toHaveProperty('deprecated');
521
+ expectTypeOf().toHaveProperty('description');
522
+ });
523
+ });
524
+ });
525
+ //# sourceMappingURL=openapi-round-trip.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openapi-round-trip.spec.js","sourceRoot":"","sources":["../../src/openapi/openapi-round-trip.spec.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { describe, expect, it } from 'vitest';
2
- import { generateSwaggerJsonFromApiSchema } from './generate-swagger-json.js';
2
+ import { generateSwaggerJsonFromApiSchema } from '../openapi/generate-openapi-document.js';
3
3
  describe('generateSwaggerJsonFromApiSchema', () => {
4
4
  it('Should generate a basic Swagger document with correct OpenAPI structure', () => {
5
5
  const api = {
@@ -1 +1 @@
1
- {"version":3,"file":"generate-swagger-json.spec.js","sourceRoot":"","sources":["../../src/swagger/generate-swagger-json.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generate-swagger-json.spec.js","sourceRoot":"","sources":["../../src/swagger/generate-swagger-json.spec.ts"],"names":[],"mappings":"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"}