swagger-parser-mcp-server 2.0.4 → 2.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 (131) hide show
  1. package/README.md +131 -100
  2. package/dist/application/snapshot/createSnapshotRuntime.d.ts +2 -0
  3. package/dist/application/snapshot/createSnapshotRuntime.d.ts.map +1 -0
  4. package/dist/application/snapshot/createSnapshotRuntime.js +2 -0
  5. package/dist/application/snapshot/createSnapshotRuntime.js.map +1 -0
  6. package/dist/application/snapshot/snapshotCaptureService.d.ts +90 -0
  7. package/dist/application/snapshot/snapshotCaptureService.d.ts.map +1 -0
  8. package/dist/application/snapshot/snapshotCaptureService.js +394 -0
  9. package/dist/application/snapshot/snapshotCaptureService.js.map +1 -0
  10. package/dist/application/snapshot/snapshotRepository.d.ts +77 -0
  11. package/dist/application/snapshot/snapshotRepository.d.ts.map +1 -0
  12. package/dist/application/snapshot/snapshotRepository.js +2 -0
  13. package/dist/application/snapshot/snapshotRepository.js.map +1 -0
  14. package/dist/domain/canonical/canonicalSnapshot.d.ts +61 -0
  15. package/dist/domain/canonical/canonicalSnapshot.d.ts.map +1 -0
  16. package/dist/domain/canonical/canonicalSnapshot.js +300 -0
  17. package/dist/domain/canonical/canonicalSnapshot.js.map +1 -0
  18. package/dist/domain/contracts/runtimeEnvironmentContract.d.ts +21 -0
  19. package/dist/domain/contracts/runtimeEnvironmentContract.d.ts.map +1 -0
  20. package/dist/domain/contracts/runtimeEnvironmentContract.js +50 -0
  21. package/dist/domain/contracts/runtimeEnvironmentContract.js.map +1 -0
  22. package/dist/domain/contracts/snapshotDiffContract.d.ts +270 -0
  23. package/dist/domain/contracts/snapshotDiffContract.d.ts.map +1 -0
  24. package/dist/domain/contracts/snapshotDiffContract.js +99 -0
  25. package/dist/domain/contracts/snapshotDiffContract.js.map +1 -0
  26. package/dist/domain/diff/endpointDiffClassifier.d.ts +78 -0
  27. package/dist/domain/diff/endpointDiffClassifier.d.ts.map +1 -0
  28. package/dist/domain/diff/endpointDiffClassifier.js +317 -0
  29. package/dist/domain/diff/endpointDiffClassifier.js.map +1 -0
  30. package/dist/http.d.ts +3 -0
  31. package/dist/http.d.ts.map +1 -0
  32. package/dist/http.js +52 -0
  33. package/dist/http.js.map +1 -0
  34. package/dist/index.d.ts +2 -0
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +88 -266
  37. package/dist/index.js.map +1 -1
  38. package/dist/infrastructure/postgres/migrationRunner.d.ts +14 -0
  39. package/dist/infrastructure/postgres/migrationRunner.d.ts.map +1 -0
  40. package/dist/infrastructure/postgres/migrationRunner.js +161 -0
  41. package/dist/infrastructure/postgres/migrationRunner.js.map +1 -0
  42. package/dist/infrastructure/postgres/migrations/001_snapshot_schema.sql +29 -0
  43. package/dist/infrastructure/postgres/migrations/002_snapshot_change_history.sql +32 -0
  44. package/dist/infrastructure/postgres/postgresSnapshotRepository.d.ts +25 -0
  45. package/dist/infrastructure/postgres/postgresSnapshotRepository.d.ts.map +1 -0
  46. package/dist/infrastructure/postgres/postgresSnapshotRepository.js +323 -0
  47. package/dist/infrastructure/postgres/postgresSnapshotRepository.js.map +1 -0
  48. package/dist/infrastructure/postgres/runMigrations.d.ts +3 -0
  49. package/dist/infrastructure/postgres/runMigrations.d.ts.map +1 -0
  50. package/dist/infrastructure/postgres/runMigrations.js +33 -0
  51. package/dist/infrastructure/postgres/runMigrations.js.map +1 -0
  52. package/dist/infrastructure/runtime/createSnapshotRuntime.d.ts +17 -0
  53. package/dist/infrastructure/runtime/createSnapshotRuntime.d.ts.map +1 -0
  54. package/dist/infrastructure/runtime/createSnapshotRuntime.js +38 -0
  55. package/dist/infrastructure/runtime/createSnapshotRuntime.js.map +1 -0
  56. package/dist/schemas.d.ts +284 -3
  57. package/dist/schemas.d.ts.map +1 -1
  58. package/dist/schemas.js +110 -1
  59. package/dist/schemas.js.map +1 -1
  60. package/dist/tests/canonicalSnapshot.test.d.ts +2 -0
  61. package/dist/tests/canonicalSnapshot.test.d.ts.map +1 -0
  62. package/dist/tests/canonicalSnapshot.test.js +425 -0
  63. package/dist/tests/canonicalSnapshot.test.js.map +1 -0
  64. package/dist/tests/endpointDiffClassifier.test.d.ts +2 -0
  65. package/dist/tests/endpointDiffClassifier.test.d.ts.map +1 -0
  66. package/dist/tests/endpointDiffClassifier.test.js +633 -0
  67. package/dist/tests/endpointDiffClassifier.test.js.map +1 -0
  68. package/dist/tests/httpSnapshotTransport.test.d.ts +2 -0
  69. package/dist/tests/httpSnapshotTransport.test.d.ts.map +1 -0
  70. package/dist/tests/httpSnapshotTransport.test.js +356 -0
  71. package/dist/tests/httpSnapshotTransport.test.js.map +1 -0
  72. package/dist/tests/indexLifecycle.test.d.ts +2 -0
  73. package/dist/tests/indexLifecycle.test.d.ts.map +1 -0
  74. package/dist/tests/indexLifecycle.test.js +23 -0
  75. package/dist/tests/indexLifecycle.test.js.map +1 -0
  76. package/dist/tests/mcpSnapshotTools.test.d.ts +2 -0
  77. package/dist/tests/mcpSnapshotTools.test.d.ts.map +1 -0
  78. package/dist/tests/mcpSnapshotTools.test.js +316 -0
  79. package/dist/tests/mcpSnapshotTools.test.js.map +1 -0
  80. package/dist/tests/postgresMigrationSmoke.test.d.ts +2 -0
  81. package/dist/tests/postgresMigrationSmoke.test.d.ts.map +1 -0
  82. package/dist/tests/postgresMigrationSmoke.test.js +187 -0
  83. package/dist/tests/postgresMigrationSmoke.test.js.map +1 -0
  84. package/dist/tests/realPostgresTestSchema.d.ts +10 -0
  85. package/dist/tests/realPostgresTestSchema.d.ts.map +1 -0
  86. package/dist/tests/realPostgresTestSchema.js +73 -0
  87. package/dist/tests/realPostgresTestSchema.js.map +1 -0
  88. package/dist/tests/snapshotCapturePipeline.test.d.ts +2 -0
  89. package/dist/tests/snapshotCapturePipeline.test.d.ts.map +1 -0
  90. package/dist/tests/snapshotCapturePipeline.test.js +475 -0
  91. package/dist/tests/snapshotCapturePipeline.test.js.map +1 -0
  92. package/dist/tests/snapshotDiffContract.test.d.ts +2 -0
  93. package/dist/tests/snapshotDiffContract.test.d.ts.map +1 -0
  94. package/dist/tests/snapshotDiffContract.test.js +156 -0
  95. package/dist/tests/snapshotDiffContract.test.js.map +1 -0
  96. package/dist/tests/snapshotPersistence.real.test.d.ts +2 -0
  97. package/dist/tests/snapshotPersistence.real.test.d.ts.map +1 -0
  98. package/dist/tests/snapshotPersistence.real.test.js +310 -0
  99. package/dist/tests/snapshotPersistence.real.test.js.map +1 -0
  100. package/dist/tests/webServerRuntime.test.d.ts +2 -0
  101. package/dist/tests/webServerRuntime.test.d.ts.map +1 -0
  102. package/dist/tests/webServerRuntime.test.js +123 -0
  103. package/dist/tests/webServerRuntime.test.js.map +1 -0
  104. package/dist/transport/createSnapshotToolRuntime.d.ts +7 -0
  105. package/dist/transport/createSnapshotToolRuntime.d.ts.map +1 -0
  106. package/dist/transport/createSnapshotToolRuntime.js +40 -0
  107. package/dist/transport/createSnapshotToolRuntime.js.map +1 -0
  108. package/dist/transport/httpSnapshotServer.d.ts +11 -0
  109. package/dist/transport/httpSnapshotServer.d.ts.map +1 -0
  110. package/dist/transport/httpSnapshotServer.js +216 -0
  111. package/dist/transport/httpSnapshotServer.js.map +1 -0
  112. package/dist/transport/mcpToolRouter.d.ts +81 -0
  113. package/dist/transport/mcpToolRouter.d.ts.map +1 -0
  114. package/dist/transport/mcpToolRouter.js +416 -0
  115. package/dist/transport/mcpToolRouter.js.map +1 -0
  116. package/dist/transport/webServerRuntime.d.ts +17 -0
  117. package/dist/transport/webServerRuntime.d.ts.map +1 -0
  118. package/dist/transport/webServerRuntime.js +73 -0
  119. package/dist/transport/webServerRuntime.js.map +1 -0
  120. package/dist/utils/swaggerCache.d.ts +4 -0
  121. package/dist/utils/swaggerCache.d.ts.map +1 -1
  122. package/dist/utils/swaggerCache.js +8 -0
  123. package/dist/utils/swaggerCache.js.map +1 -1
  124. package/dist/utils/types.d.ts +2 -1
  125. package/dist/utils/types.d.ts.map +1 -1
  126. package/dist/utils/types.js +2 -0
  127. package/dist/utils/types.js.map +1 -1
  128. package/dist/web/dashboard.css +411 -0
  129. package/dist/web/dashboard.html +141 -0
  130. package/dist/web/dashboard.js +540 -0
  131. package/package.json +27 -17
@@ -0,0 +1,633 @@
1
+ import { createCanonicalSnapshot } from '../domain/canonical/canonicalSnapshot.js';
2
+ import { classifyEndpointDiffs } from '../domain/diff/endpointDiffClassifier.js';
3
+ function createDocument(paths) {
4
+ return {
5
+ openapi: '3.0.0',
6
+ info: {
7
+ title: 'Diff Classifier API',
8
+ version: '1.0.0',
9
+ },
10
+ paths,
11
+ };
12
+ }
13
+ function createBaselineDocument() {
14
+ return createDocument({
15
+ '/method-removed': {
16
+ get: {
17
+ responses: {
18
+ '200': {
19
+ description: 'OK',
20
+ content: {
21
+ 'application/json': {
22
+ schema: {
23
+ type: 'object',
24
+ },
25
+ },
26
+ },
27
+ },
28
+ },
29
+ },
30
+ },
31
+ '/request-change': {
32
+ post: {
33
+ requestBody: {
34
+ required: false,
35
+ content: {
36
+ 'application/json': {
37
+ schema: {
38
+ type: 'object',
39
+ properties: {
40
+ amount: { type: 'number' },
41
+ },
42
+ },
43
+ },
44
+ },
45
+ },
46
+ responses: {
47
+ '200': {
48
+ description: 'OK',
49
+ content: {
50
+ 'application/json': {
51
+ schema: {
52
+ type: 'object',
53
+ },
54
+ },
55
+ },
56
+ },
57
+ },
58
+ },
59
+ },
60
+ '/response-required': {
61
+ get: {
62
+ responses: {
63
+ '200': {
64
+ description: 'OK',
65
+ content: {
66
+ 'application/json': {
67
+ schema: {
68
+ type: 'object',
69
+ required: ['id', 'name'],
70
+ properties: {
71
+ id: { type: 'string' },
72
+ name: { type: 'string' },
73
+ },
74
+ },
75
+ },
76
+ },
77
+ },
78
+ },
79
+ },
80
+ },
81
+ '/status-remove': {
82
+ get: {
83
+ responses: {
84
+ '200': {
85
+ description: 'OK',
86
+ content: {
87
+ 'application/json': {
88
+ schema: {
89
+ type: 'object',
90
+ },
91
+ },
92
+ },
93
+ },
94
+ '202': {
95
+ description: 'Accepted',
96
+ content: {
97
+ 'application/json': {
98
+ schema: {
99
+ type: 'object',
100
+ },
101
+ },
102
+ },
103
+ },
104
+ },
105
+ },
106
+ },
107
+ '/status-add': {
108
+ get: {
109
+ responses: {
110
+ '200': {
111
+ description: 'OK',
112
+ content: {
113
+ 'application/json': {
114
+ schema: {
115
+ type: 'object',
116
+ },
117
+ },
118
+ },
119
+ },
120
+ },
121
+ },
122
+ },
123
+ '/unchanged': {
124
+ get: {
125
+ responses: {
126
+ '200': {
127
+ description: 'OK',
128
+ content: {
129
+ 'application/json': {
130
+ schema: {
131
+ type: 'object',
132
+ properties: {
133
+ ok: { type: 'boolean' },
134
+ },
135
+ },
136
+ },
137
+ },
138
+ },
139
+ },
140
+ },
141
+ },
142
+ });
143
+ }
144
+ function createTargetDocument() {
145
+ return createDocument({
146
+ '/method-added': {
147
+ post: {
148
+ responses: {
149
+ '201': {
150
+ description: 'Created',
151
+ content: {
152
+ 'application/json': {
153
+ schema: {
154
+ type: 'object',
155
+ },
156
+ },
157
+ },
158
+ },
159
+ },
160
+ },
161
+ },
162
+ '/request-change': {
163
+ post: {
164
+ requestBody: {
165
+ required: true,
166
+ content: {
167
+ 'application/json': {
168
+ schema: {
169
+ type: 'object',
170
+ properties: {
171
+ amount: { type: 'number' },
172
+ },
173
+ },
174
+ },
175
+ },
176
+ },
177
+ responses: {
178
+ '200': {
179
+ description: 'OK',
180
+ content: {
181
+ 'application/json': {
182
+ schema: {
183
+ type: 'object',
184
+ },
185
+ },
186
+ },
187
+ },
188
+ },
189
+ },
190
+ },
191
+ '/response-required': {
192
+ get: {
193
+ responses: {
194
+ '200': {
195
+ description: 'OK',
196
+ content: {
197
+ 'application/json': {
198
+ schema: {
199
+ type: 'object',
200
+ required: ['id'],
201
+ properties: {
202
+ id: { type: 'string' },
203
+ name: { type: 'string' },
204
+ },
205
+ },
206
+ },
207
+ },
208
+ },
209
+ },
210
+ },
211
+ },
212
+ '/status-remove': {
213
+ get: {
214
+ responses: {
215
+ '200': {
216
+ description: 'OK',
217
+ content: {
218
+ 'application/json': {
219
+ schema: {
220
+ type: 'object',
221
+ },
222
+ },
223
+ },
224
+ },
225
+ },
226
+ },
227
+ },
228
+ '/status-add': {
229
+ get: {
230
+ responses: {
231
+ '200': {
232
+ description: 'OK',
233
+ content: {
234
+ 'application/json': {
235
+ schema: {
236
+ type: 'object',
237
+ },
238
+ },
239
+ },
240
+ },
241
+ '201': {
242
+ description: 'Created',
243
+ content: {
244
+ 'application/json': {
245
+ schema: {
246
+ type: 'object',
247
+ },
248
+ },
249
+ },
250
+ },
251
+ },
252
+ },
253
+ },
254
+ '/unchanged': {
255
+ get: {
256
+ responses: {
257
+ '200': {
258
+ description: 'OK',
259
+ content: {
260
+ 'application/json': {
261
+ schema: {
262
+ type: 'object',
263
+ properties: {
264
+ ok: { type: 'boolean' },
265
+ },
266
+ },
267
+ },
268
+ },
269
+ },
270
+ },
271
+ },
272
+ },
273
+ });
274
+ }
275
+ function createStructureOnlyChangedDocument() {
276
+ return createDocument({
277
+ '/info-only-change': {
278
+ patch: {
279
+ parameters: [
280
+ {
281
+ name: 'traceId',
282
+ in: 'query',
283
+ required: false,
284
+ schema: {
285
+ type: 'string',
286
+ },
287
+ },
288
+ ],
289
+ responses: {
290
+ '200': {
291
+ description: 'OK',
292
+ content: {
293
+ 'application/json': {
294
+ schema: {
295
+ type: 'object',
296
+ },
297
+ },
298
+ },
299
+ },
300
+ },
301
+ },
302
+ },
303
+ });
304
+ }
305
+ function createStructureOnlyChangedTargetDocument() {
306
+ return createDocument({
307
+ '/info-only-change': {
308
+ patch: {
309
+ parameters: [
310
+ {
311
+ name: 'traceId',
312
+ in: 'query',
313
+ required: false,
314
+ schema: {
315
+ type: 'integer',
316
+ },
317
+ },
318
+ ],
319
+ responses: {
320
+ '200': {
321
+ description: 'OK',
322
+ content: {
323
+ 'application/json': {
324
+ schema: {
325
+ type: 'object',
326
+ },
327
+ },
328
+ },
329
+ },
330
+ },
331
+ },
332
+ },
333
+ });
334
+ }
335
+ function createMediaTypeBaselineDocument() {
336
+ return createDocument({
337
+ '/media-type-shift': {
338
+ get: {
339
+ responses: {
340
+ '200': {
341
+ description: 'OK',
342
+ content: {
343
+ 'application/json': {
344
+ schema: {
345
+ type: 'object',
346
+ properties: {
347
+ ok: { type: 'boolean' },
348
+ },
349
+ },
350
+ },
351
+ 'application/xml': {
352
+ schema: {
353
+ type: 'object',
354
+ properties: {
355
+ ok: { type: 'boolean' },
356
+ },
357
+ },
358
+ },
359
+ },
360
+ },
361
+ },
362
+ },
363
+ },
364
+ });
365
+ }
366
+ function createMediaTypeTargetDocument() {
367
+ return createDocument({
368
+ '/media-type-shift': {
369
+ get: {
370
+ responses: {
371
+ '200': {
372
+ description: 'OK',
373
+ content: {
374
+ 'application/xml': {
375
+ schema: {
376
+ type: 'object',
377
+ properties: {
378
+ ok: { type: 'boolean' },
379
+ },
380
+ },
381
+ },
382
+ 'text/csv': {
383
+ schema: {
384
+ type: 'string',
385
+ },
386
+ },
387
+ },
388
+ },
389
+ },
390
+ },
391
+ },
392
+ });
393
+ }
394
+ function createMultiRuleBaselineDocument() {
395
+ return createDocument({
396
+ '/multi-rule': {
397
+ post: {
398
+ requestBody: {
399
+ required: false,
400
+ content: {
401
+ 'application/json': {
402
+ schema: {
403
+ type: 'object',
404
+ properties: {
405
+ value: { type: 'number' },
406
+ },
407
+ },
408
+ },
409
+ },
410
+ },
411
+ responses: {
412
+ '200': {
413
+ description: 'OK',
414
+ content: {
415
+ 'application/json': {
416
+ schema: {
417
+ type: 'object',
418
+ required: ['id', 'name'],
419
+ properties: {
420
+ id: { type: 'string' },
421
+ name: { type: 'string' },
422
+ },
423
+ },
424
+ },
425
+ 'application/xml': {
426
+ schema: {
427
+ type: 'object',
428
+ required: ['id', 'name'],
429
+ properties: {
430
+ id: { type: 'string' },
431
+ name: { type: 'string' },
432
+ },
433
+ },
434
+ },
435
+ },
436
+ },
437
+ '202': {
438
+ description: 'Accepted',
439
+ content: {
440
+ 'application/json': {
441
+ schema: {
442
+ type: 'object',
443
+ },
444
+ },
445
+ },
446
+ },
447
+ },
448
+ },
449
+ },
450
+ });
451
+ }
452
+ function createMultiRuleTargetDocument() {
453
+ return createDocument({
454
+ '/multi-rule': {
455
+ post: {
456
+ requestBody: {
457
+ required: true,
458
+ content: {
459
+ 'application/json': {
460
+ schema: {
461
+ type: 'object',
462
+ properties: {
463
+ value: { type: 'number' },
464
+ },
465
+ },
466
+ },
467
+ },
468
+ },
469
+ responses: {
470
+ '200': {
471
+ description: 'OK',
472
+ content: {
473
+ 'application/json': {
474
+ schema: {
475
+ type: 'object',
476
+ required: ['id'],
477
+ properties: {
478
+ id: { type: 'string' },
479
+ name: { type: 'string' },
480
+ },
481
+ },
482
+ },
483
+ },
484
+ },
485
+ },
486
+ },
487
+ },
488
+ });
489
+ }
490
+ describe('Slice 3: endpoint diff classifier', () => {
491
+ it('should classify method/status/request/required-field changes with stable change reasons', () => {
492
+ const baseline = createCanonicalSnapshot({
493
+ document: createBaselineDocument(),
494
+ sourceUrl: 'https://api.example.com/v1/openapi.json',
495
+ });
496
+ const target = createCanonicalSnapshot({
497
+ document: createTargetDocument(),
498
+ sourceUrl: 'https://api.example.com/v1/openapi.json',
499
+ });
500
+ const result = classifyEndpointDiffs(baseline, target);
501
+ expect(result.changes.map(change => ({
502
+ url: change.url,
503
+ method: change.method,
504
+ classification: change.classification,
505
+ changeReason: change.changeReason,
506
+ }))).toMatchInlineSnapshot(`
507
+ [
508
+ {
509
+ "changeReason": "method_added",
510
+ "classification": "non-breaking",
511
+ "method": "post",
512
+ "url": "/method-added",
513
+ },
514
+ {
515
+ "changeReason": "method_removed",
516
+ "classification": "breaking",
517
+ "method": "get",
518
+ "url": "/method-removed",
519
+ },
520
+ {
521
+ "changeReason": "request_optional_to_required",
522
+ "classification": "breaking",
523
+ "method": "post",
524
+ "url": "/request-change",
525
+ },
526
+ {
527
+ "changeReason": "required_response_field_removed",
528
+ "classification": "breaking",
529
+ "method": "get",
530
+ "url": "/response-required",
531
+ },
532
+ {
533
+ "changeReason": "response_status_added",
534
+ "classification": "non-breaking",
535
+ "method": "get",
536
+ "url": "/status-add",
537
+ },
538
+ {
539
+ "changeReason": "response_status_removed",
540
+ "classification": "breaking",
541
+ "method": "get",
542
+ "url": "/status-remove",
543
+ },
544
+ ]
545
+ `);
546
+ const requestChanged = result.changes.find(change => change.url === '/request-change' && change.method === 'post');
547
+ expect(requestChanged?.before?.requestBody?.required).toBe(false);
548
+ expect(requestChanged?.after?.requestBody?.required).toBe(true);
549
+ expect(result.counts).toEqual({
550
+ total: 6,
551
+ breaking: 4,
552
+ nonBreaking: 2,
553
+ info: 0,
554
+ });
555
+ });
556
+ it('should fallback to info classification for non-breaking unknown structure changes', () => {
557
+ const baseline = createCanonicalSnapshot({
558
+ document: createStructureOnlyChangedDocument(),
559
+ sourceUrl: 'https://api.example.com/v1/openapi.json',
560
+ });
561
+ const target = createCanonicalSnapshot({
562
+ document: createStructureOnlyChangedTargetDocument(),
563
+ sourceUrl: 'https://api.example.com/v1/openapi.json',
564
+ });
565
+ const result = classifyEndpointDiffs(baseline, target);
566
+ expect(result.changes).toHaveLength(1);
567
+ expect(result.changes[0].classification).toBe('info');
568
+ expect(result.changes[0].changeReason).toBe('operation_structure_changed');
569
+ expect(result.counts).toEqual({
570
+ total: 1,
571
+ breaking: 0,
572
+ nonBreaking: 0,
573
+ info: 1,
574
+ });
575
+ });
576
+ it('should classify response media type removal as breaking instead of info fallback', () => {
577
+ const baseline = createCanonicalSnapshot({
578
+ document: createMediaTypeBaselineDocument(),
579
+ sourceUrl: 'https://api.example.com/v1/openapi.json',
580
+ });
581
+ const target = createCanonicalSnapshot({
582
+ document: createMediaTypeTargetDocument(),
583
+ sourceUrl: 'https://api.example.com/v1/openapi.json',
584
+ });
585
+ const result = classifyEndpointDiffs(baseline, target);
586
+ expect(result.changes).toHaveLength(1);
587
+ expect(result.changes[0].classification).toBe('breaking');
588
+ expect(result.changes[0].changeReason).toBe('response_media_type_removed');
589
+ expect(result.changes[0].details.map(detail => detail.reason)).toEqual(expect.arrayContaining(['response_media_type_removed', 'response_media_type_added']));
590
+ });
591
+ it('should keep stable primary changeReason when multiple rules trigger on the same endpoint', () => {
592
+ const baseline = createCanonicalSnapshot({
593
+ document: createMultiRuleBaselineDocument(),
594
+ sourceUrl: 'https://api.example.com/v1/openapi.json',
595
+ });
596
+ const target = createCanonicalSnapshot({
597
+ document: createMultiRuleTargetDocument(),
598
+ sourceUrl: 'https://api.example.com/v1/openapi.json',
599
+ });
600
+ const result = classifyEndpointDiffs(baseline, target);
601
+ const change = result.changes[0];
602
+ expect(result.changes).toHaveLength(1);
603
+ expect(change.classification).toBe('breaking');
604
+ expect(change.changeReason).toBe('request_optional_to_required');
605
+ expect(change.details.map(detail => detail.reason)).toEqual(expect.arrayContaining([
606
+ 'request_optional_to_required',
607
+ 'required_response_field_removed',
608
+ 'response_status_removed',
609
+ 'response_media_type_removed',
610
+ ]));
611
+ });
612
+ it('should fail fast when baseline or target snapshots contain duplicate endpoint keys', () => {
613
+ const baseline = createCanonicalSnapshot({
614
+ document: createStructureOnlyChangedDocument(),
615
+ sourceUrl: 'https://api.example.com/v1/openapi.json',
616
+ });
617
+ const target = createCanonicalSnapshot({
618
+ document: createStructureOnlyChangedTargetDocument(),
619
+ sourceUrl: 'https://api.example.com/v1/openapi.json',
620
+ });
621
+ const duplicateBaseline = {
622
+ ...baseline,
623
+ endpoints: [...baseline.endpoints, baseline.endpoints[0]],
624
+ };
625
+ const duplicateTarget = {
626
+ ...target,
627
+ endpoints: [...target.endpoints, target.endpoints[0]],
628
+ };
629
+ expect(() => classifyEndpointDiffs(duplicateBaseline, target)).toThrow('Duplicate endpoint key detected in baseline snapshot');
630
+ expect(() => classifyEndpointDiffs(baseline, duplicateTarget)).toThrow('Duplicate endpoint key detected in target snapshot');
631
+ });
632
+ });
633
+ //# sourceMappingURL=endpointDiffClassifier.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endpointDiffClassifier.test.js","sourceRoot":"","sources":["../../src/tests/endpointDiffClassifier.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=httpSnapshotTransport.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"httpSnapshotTransport.test.d.ts","sourceRoot":"","sources":["../../src/tests/httpSnapshotTransport.test.ts"],"names":[],"mappings":""}