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,99 @@
1
+ import { z } from 'zod';
2
+ export const httpMethodSchema = z.enum(['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']);
3
+ export const changeClassificationSchema = z.enum(['breaking', 'non-breaking', 'info']);
4
+ export const warningCodeSchema = z.enum(['VERSION_ONLY_CHANGE', 'VERSION_MISMATCH']);
5
+ export const diffSummarySchema = z
6
+ .object({
7
+ projectKey: z.string().min(1),
8
+ sourceUrl: z.string().url(),
9
+ baselineSnapshotId: z.string().min(1),
10
+ targetSnapshotId: z.string().min(1),
11
+ comparedAt: z.string().datetime({ offset: true }),
12
+ hasChanges: z.boolean(),
13
+ isNoopCapture: z.boolean(),
14
+ })
15
+ .strict();
16
+ export const diffCountsSchema = z
17
+ .object({
18
+ total: z.number().int().nonnegative(),
19
+ breaking: z.number().int().nonnegative(),
20
+ nonBreaking: z.number().int().nonnegative(),
21
+ info: z.number().int().nonnegative(),
22
+ })
23
+ .strict()
24
+ .superRefine((counts, context) => {
25
+ const calculatedTotal = counts.breaking + counts.nonBreaking + counts.info;
26
+ if (counts.total !== calculatedTotal) {
27
+ context.addIssue({
28
+ code: z.ZodIssueCode.custom,
29
+ message: 'counts.total must equal breaking + nonBreaking + info',
30
+ });
31
+ }
32
+ });
33
+ export const endpointChangeSchema = z
34
+ .object({
35
+ url: z.string().min(1),
36
+ method: httpMethodSchema,
37
+ classification: changeClassificationSchema,
38
+ changeReason: z.string().min(1),
39
+ })
40
+ .strict();
41
+ export const warningSchema = z
42
+ .object({
43
+ code: warningCodeSchema,
44
+ message: z.string().min(1),
45
+ })
46
+ .strict();
47
+ export const snapshotDiffResultSchema = z
48
+ .object({
49
+ summary: diffSummarySchema,
50
+ counts: diffCountsSchema,
51
+ changes: z.array(endpointChangeSchema),
52
+ warnings: z.array(warningSchema),
53
+ })
54
+ .strict()
55
+ .superRefine((result, context) => {
56
+ if (result.counts.total !== result.changes.length) {
57
+ context.addIssue({
58
+ code: z.ZodIssueCode.custom,
59
+ message: 'counts.total must equal changes.length',
60
+ });
61
+ }
62
+ if (result.summary.hasChanges !== result.counts.total > 0) {
63
+ context.addIssue({
64
+ code: z.ZodIssueCode.custom,
65
+ message: 'summary.hasChanges must match whether counts.total is greater than 0',
66
+ });
67
+ }
68
+ const classificationCounts = result.changes.reduce((acc, change) => {
69
+ if (change.classification === 'breaking') {
70
+ acc.breaking += 1;
71
+ }
72
+ else if (change.classification === 'non-breaking') {
73
+ acc.nonBreaking += 1;
74
+ }
75
+ else if (change.classification === 'info') {
76
+ acc.info += 1;
77
+ }
78
+ return acc;
79
+ }, { breaking: 0, nonBreaking: 0, info: 0 });
80
+ if (result.counts.breaking !== classificationCounts.breaking) {
81
+ context.addIssue({
82
+ code: z.ZodIssueCode.custom,
83
+ message: 'counts.breaking must equal number of changes classified as breaking',
84
+ });
85
+ }
86
+ if (result.counts.nonBreaking !== classificationCounts.nonBreaking) {
87
+ context.addIssue({
88
+ code: z.ZodIssueCode.custom,
89
+ message: 'counts.nonBreaking must equal number of changes classified as non-breaking',
90
+ });
91
+ }
92
+ if (result.counts.info !== classificationCounts.info) {
93
+ context.addIssue({
94
+ code: z.ZodIssueCode.custom,
95
+ message: 'counts.info must equal number of changes classified as info',
96
+ });
97
+ }
98
+ });
99
+ //# sourceMappingURL=snapshotDiffContract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshotDiffContract.js","sourceRoot":"","sources":["../../../src/domain/contracts/snapshotDiffContract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;AAC9G,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;AACvF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,qBAAqB,EAAE,kBAAkB,CAAC,CAAC,CAAC;AAErF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC;KAC/B,MAAM,CAAC;IACN,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IAC3B,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrC,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACnC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACjD,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE;IACvB,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE;CAC3B,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC;KAC9B,MAAM,CAAC;IACN,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACrC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACxC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IAC3C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;CACrC,CAAC;KACD,MAAM,EAAE;KACR,WAAW,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;IAC/B,MAAM,eAAe,GAAG,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC;IAC3E,IAAI,MAAM,CAAC,KAAK,KAAK,eAAe,EAAE,CAAC;QACrC,OAAO,CAAC,QAAQ,CAAC;YACf,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,OAAO,EAAE,uDAAuD;SACjE,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC;KAClC,MAAM,CAAC;IACN,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACtB,MAAM,EAAE,gBAAgB;IACxB,cAAc,EAAE,0BAA0B;IAC1C,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAChC,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC;KAC3B,MAAM,CAAC;IACN,IAAI,EAAE,iBAAiB;IACvB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC3B,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC;KACtC,MAAM,CAAC;IACN,OAAO,EAAE,iBAAiB;IAC1B,MAAM,EAAE,gBAAgB;IACxB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC;IACtC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC;CACjC,CAAC;KACD,MAAM,EAAE;KACR,WAAW,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;IAC/B,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QAClD,OAAO,CAAC,QAAQ,CAAC;YACf,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,OAAO,EAAE,wCAAwC;SAClD,CAAC,CAAC;IACL,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,KAAK,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;QAC1D,OAAO,CAAC,QAAQ,CAAC;YACf,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,OAAO,EAAE,sEAAsE;SAChF,CAAC,CAAC;IACL,CAAC;IAED,MAAM,oBAAoB,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAChD,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;QACd,IAAI,MAAM,CAAC,cAAc,KAAK,UAAU,EAAE,CAAC;YACzC,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC;QACpB,CAAC;aAAM,IAAI,MAAM,CAAC,cAAc,KAAK,cAAc,EAAE,CAAC;YACpD,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC;QACvB,CAAC;aAAM,IAAI,MAAM,CAAC,cAAc,KAAK,MAAM,EAAE,CAAC;YAC5C,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC;QAChB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,EACD,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CACzC,CAAC;IAEF,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,KAAK,oBAAoB,CAAC,QAAQ,EAAE,CAAC;QAC7D,OAAO,CAAC,QAAQ,CAAC;YACf,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,OAAO,EAAE,qEAAqE;SAC/E,CAAC,CAAC;IACL,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,KAAK,oBAAoB,CAAC,WAAW,EAAE,CAAC;QACnE,OAAO,CAAC,QAAQ,CAAC;YACf,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,OAAO,EAAE,4EAA4E;SACtF,CAAC,CAAC;IACL,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,oBAAoB,CAAC,IAAI,EAAE,CAAC;QACrD,OAAO,CAAC,QAAQ,CAAC;YACf,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,OAAO,EAAE,6DAA6D;SACvE,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,78 @@
1
+ import { CanonicalEndpointSnapshot, CanonicalOperationShape, CanonicalSnapshot } from '../canonical/canonicalSnapshot.js';
2
+ export type DiffClassification = 'breaking' | 'non-breaking' | 'info';
3
+ export type EndpointChangeReason = 'method_added' | 'method_removed' | 'request_optional_to_required' | 'response_status_removed' | 'response_status_added' | 'response_media_type_removed' | 'response_media_type_added' | 'required_response_field_removed' | 'operation_structure_changed';
4
+ export type EndpointChangeDetail = {
5
+ reason: 'method_added';
6
+ classification: 'non-breaking';
7
+ message: string;
8
+ } | {
9
+ reason: 'method_removed';
10
+ classification: 'breaking';
11
+ message: string;
12
+ } | {
13
+ reason: 'request_optional_to_required';
14
+ classification: 'breaking';
15
+ message: string;
16
+ } | {
17
+ reason: 'response_status_removed';
18
+ classification: 'breaking';
19
+ message: string;
20
+ metadata: {
21
+ removedStatusCodes: string[];
22
+ };
23
+ } | {
24
+ reason: 'response_status_added';
25
+ classification: 'non-breaking';
26
+ message: string;
27
+ metadata: {
28
+ addedStatusCodes: string[];
29
+ };
30
+ } | {
31
+ reason: 'response_media_type_removed';
32
+ classification: 'breaking';
33
+ message: string;
34
+ metadata: {
35
+ statusCode: string;
36
+ removedMediaTypes: string[];
37
+ };
38
+ } | {
39
+ reason: 'response_media_type_added';
40
+ classification: 'non-breaking';
41
+ message: string;
42
+ metadata: {
43
+ statusCode: string;
44
+ addedMediaTypes: string[];
45
+ };
46
+ } | {
47
+ reason: 'required_response_field_removed';
48
+ classification: 'breaking';
49
+ message: string;
50
+ metadata: {
51
+ removedRequiredResponseFields: string[];
52
+ };
53
+ } | {
54
+ reason: 'operation_structure_changed';
55
+ classification: 'info';
56
+ message: string;
57
+ };
58
+ export interface EndpointDiff {
59
+ url: string;
60
+ method: CanonicalEndpointSnapshot['method'];
61
+ classification: DiffClassification;
62
+ changeReason: EndpointChangeReason;
63
+ before: CanonicalOperationShape | null;
64
+ after: CanonicalOperationShape | null;
65
+ details: EndpointChangeDetail[];
66
+ }
67
+ export interface DiffCounts {
68
+ total: number;
69
+ breaking: number;
70
+ nonBreaking: number;
71
+ info: number;
72
+ }
73
+ export interface EndpointDiffClassificationResult {
74
+ changes: EndpointDiff[];
75
+ counts: DiffCounts;
76
+ }
77
+ export declare function classifyEndpointDiffs(baseline: CanonicalSnapshot, target: CanonicalSnapshot): EndpointDiffClassificationResult;
78
+ //# sourceMappingURL=endpointDiffClassifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endpointDiffClassifier.d.ts","sourceRoot":"","sources":["../../../src/domain/diff/endpointDiffClassifier.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,317 @@
1
+ const CLASSIFICATION_PRIORITY = {
2
+ breaking: 3,
3
+ 'non-breaking': 2,
4
+ info: 1,
5
+ };
6
+ const REASON_PRIORITY_ORDER = {
7
+ method_removed: 1,
8
+ request_optional_to_required: 2,
9
+ required_response_field_removed: 3,
10
+ response_status_removed: 4,
11
+ response_media_type_removed: 5,
12
+ method_added: 6,
13
+ response_status_added: 7,
14
+ response_media_type_added: 8,
15
+ operation_structure_changed: 9,
16
+ };
17
+ function getReasonPriority(reason) {
18
+ const priority = REASON_PRIORITY_ORDER[reason];
19
+ if (priority === undefined) {
20
+ throw new Error(`Reason priority is not configured for: ${reason}`);
21
+ }
22
+ return priority;
23
+ }
24
+ function endpointKey(endpoint) {
25
+ return `${endpoint.path}::${endpoint.method}`;
26
+ }
27
+ function sortEndpointChanges(changes) {
28
+ return [...changes].sort((left, right) => `${left.url}:${left.method}`.localeCompare(`${right.url}:${right.method}`));
29
+ }
30
+ function getPrimaryDetail(details) {
31
+ return [...details].sort((left, right) => {
32
+ const classificationDelta = CLASSIFICATION_PRIORITY[right.classification] - CLASSIFICATION_PRIORITY[left.classification];
33
+ if (classificationDelta !== 0) {
34
+ return classificationDelta;
35
+ }
36
+ return getReasonPriority(left.reason) - getReasonPriority(right.reason);
37
+ })[0];
38
+ }
39
+ function isRecord(value) {
40
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
41
+ }
42
+ function collectRequiredPaths(schema, parentPath = '') {
43
+ const paths = new Set();
44
+ if (!isRecord(schema)) {
45
+ return paths;
46
+ }
47
+ const required = Array.isArray(schema.required) ? schema.required.filter(item => typeof item === 'string') : [];
48
+ const properties = isRecord(schema.properties) ? schema.properties : {};
49
+ required.forEach(propertyName => {
50
+ const propertyPath = parentPath ? `${parentPath}.${propertyName}` : propertyName;
51
+ paths.add(propertyPath);
52
+ const child = properties[propertyName];
53
+ if (isRecord(child) && child.type === 'array' && child.items !== undefined) {
54
+ collectRequiredPaths(child.items, `${propertyPath}[]`).forEach(path => paths.add(path));
55
+ return;
56
+ }
57
+ collectRequiredPaths(child, propertyPath).forEach(path => paths.add(path));
58
+ });
59
+ const compositionKeys = ['allOf', 'anyOf', 'oneOf'];
60
+ compositionKeys.forEach(compositionKey => {
61
+ const compositionValue = schema[compositionKey];
62
+ if (!Array.isArray(compositionValue)) {
63
+ return;
64
+ }
65
+ compositionValue.forEach(item => {
66
+ collectRequiredPaths(item, parentPath).forEach(path => paths.add(path));
67
+ });
68
+ });
69
+ return paths;
70
+ }
71
+ function mapResponseRequiredFields(responses) {
72
+ const requiredByStatus = new Map();
73
+ responses.forEach(response => {
74
+ const requiredByMediaType = new Map();
75
+ response.content.forEach(content => {
76
+ if (!content.hasSchema || content.schema === undefined) {
77
+ return;
78
+ }
79
+ requiredByMediaType.set(content.mediaType, collectRequiredPaths(content.schema));
80
+ });
81
+ requiredByStatus.set(response.statusCode, requiredByMediaType);
82
+ });
83
+ return requiredByStatus;
84
+ }
85
+ function detectRemovedRequiredResponseFields(before, after) {
86
+ const removedFieldPaths = [];
87
+ const beforeByStatus = mapResponseRequiredFields(before.responses);
88
+ const afterByStatus = mapResponseRequiredFields(after.responses);
89
+ beforeByStatus.forEach((beforeMediaMap, statusCode) => {
90
+ const afterMediaMap = afterByStatus.get(statusCode);
91
+ if (!afterMediaMap) {
92
+ return;
93
+ }
94
+ beforeMediaMap.forEach((beforeRequiredPaths, mediaType) => {
95
+ const afterRequiredPaths = afterMediaMap.get(mediaType);
96
+ if (!afterRequiredPaths) {
97
+ return;
98
+ }
99
+ beforeRequiredPaths.forEach(requiredPath => {
100
+ if (!afterRequiredPaths.has(requiredPath)) {
101
+ removedFieldPaths.push(`${statusCode}:${mediaType}:${requiredPath}`);
102
+ }
103
+ });
104
+ });
105
+ });
106
+ return removedFieldPaths.sort();
107
+ }
108
+ function detectResponseMediaTypeChanges(before, after) {
109
+ const details = [];
110
+ const beforeByStatus = new Map(before.responses.map(response => [response.statusCode, response]));
111
+ const afterByStatus = new Map(after.responses.map(response => [response.statusCode, response]));
112
+ beforeByStatus.forEach((beforeResponse, statusCode) => {
113
+ const afterResponse = afterByStatus.get(statusCode);
114
+ if (!afterResponse) {
115
+ return;
116
+ }
117
+ const beforeMediaTypes = new Set(beforeResponse.content.map(content => content.mediaType));
118
+ const afterMediaTypes = new Set(afterResponse.content.map(content => content.mediaType));
119
+ const removedMediaTypes = Array.from(beforeMediaTypes)
120
+ .filter(mediaType => !afterMediaTypes.has(mediaType))
121
+ .sort();
122
+ if (removedMediaTypes.length > 0) {
123
+ details.push({
124
+ reason: 'response_media_type_removed',
125
+ classification: 'breaking',
126
+ message: `Response media type removed for ${statusCode}: ${removedMediaTypes.join(', ')}`,
127
+ metadata: {
128
+ statusCode,
129
+ removedMediaTypes,
130
+ },
131
+ });
132
+ }
133
+ const addedMediaTypes = Array.from(afterMediaTypes)
134
+ .filter(mediaType => !beforeMediaTypes.has(mediaType))
135
+ .sort();
136
+ if (addedMediaTypes.length > 0) {
137
+ details.push({
138
+ reason: 'response_media_type_added',
139
+ classification: 'non-breaking',
140
+ message: `Response media type added for ${statusCode}: ${addedMediaTypes.join(', ')}`,
141
+ metadata: {
142
+ statusCode,
143
+ addedMediaTypes,
144
+ },
145
+ });
146
+ }
147
+ });
148
+ return details;
149
+ }
150
+ function detectOperationDetails(before, after) {
151
+ const details = [];
152
+ const beforeRequestRequired = before.requestBody?.required === true;
153
+ const afterRequestRequired = after.requestBody?.required === true;
154
+ if (!beforeRequestRequired && afterRequestRequired) {
155
+ details.push({
156
+ reason: 'request_optional_to_required',
157
+ classification: 'breaking',
158
+ message: 'Request body changed from optional to required.',
159
+ });
160
+ }
161
+ const beforeStatusCodes = new Set(before.responses.map(response => response.statusCode));
162
+ const afterStatusCodes = new Set(after.responses.map(response => response.statusCode));
163
+ const removedStatusCodes = Array.from(beforeStatusCodes)
164
+ .filter(statusCode => !afterStatusCodes.has(statusCode))
165
+ .sort();
166
+ if (removedStatusCodes.length > 0) {
167
+ details.push({
168
+ reason: 'response_status_removed',
169
+ classification: 'breaking',
170
+ message: `Response status code removed: ${removedStatusCodes.join(', ')}`,
171
+ metadata: {
172
+ removedStatusCodes,
173
+ },
174
+ });
175
+ }
176
+ const addedStatusCodes = Array.from(afterStatusCodes)
177
+ .filter(statusCode => !beforeStatusCodes.has(statusCode))
178
+ .sort();
179
+ if (addedStatusCodes.length > 0) {
180
+ details.push({
181
+ reason: 'response_status_added',
182
+ classification: 'non-breaking',
183
+ message: `Response status code added: ${addedStatusCodes.join(', ')}`,
184
+ metadata: {
185
+ addedStatusCodes,
186
+ },
187
+ });
188
+ }
189
+ const removedRequiredResponseFields = detectRemovedRequiredResponseFields(before, after);
190
+ if (removedRequiredResponseFields.length > 0) {
191
+ details.push({
192
+ reason: 'required_response_field_removed',
193
+ classification: 'breaking',
194
+ message: `Required response field removed: ${removedRequiredResponseFields.join(', ')}`,
195
+ metadata: {
196
+ removedRequiredResponseFields,
197
+ },
198
+ });
199
+ }
200
+ details.push(...detectResponseMediaTypeChanges(before, after));
201
+ if (details.length === 0) {
202
+ details.push({
203
+ reason: 'operation_structure_changed',
204
+ classification: 'info',
205
+ message: 'Operation structure changed without a classified breaking rule.',
206
+ });
207
+ }
208
+ return details;
209
+ }
210
+ function createMethodAddedChange(endpoint) {
211
+ const details = [
212
+ {
213
+ reason: 'method_added',
214
+ classification: 'non-breaking',
215
+ message: 'Operation was added.',
216
+ },
217
+ ];
218
+ return {
219
+ url: endpoint.path,
220
+ method: endpoint.method,
221
+ classification: 'non-breaking',
222
+ changeReason: 'method_added',
223
+ before: null,
224
+ after: endpoint.canonicalOperation,
225
+ details,
226
+ };
227
+ }
228
+ function createMethodRemovedChange(endpoint) {
229
+ const details = [
230
+ {
231
+ reason: 'method_removed',
232
+ classification: 'breaking',
233
+ message: 'Operation was removed.',
234
+ },
235
+ ];
236
+ return {
237
+ url: endpoint.path,
238
+ method: endpoint.method,
239
+ classification: 'breaking',
240
+ changeReason: 'method_removed',
241
+ before: endpoint.canonicalOperation,
242
+ after: null,
243
+ details,
244
+ };
245
+ }
246
+ function toCounts(changes) {
247
+ return changes.reduce((acc, change) => {
248
+ acc.total += 1;
249
+ if (change.classification === 'breaking') {
250
+ acc.breaking += 1;
251
+ }
252
+ else if (change.classification === 'non-breaking') {
253
+ acc.nonBreaking += 1;
254
+ }
255
+ else {
256
+ acc.info += 1;
257
+ }
258
+ return acc;
259
+ }, {
260
+ total: 0,
261
+ breaking: 0,
262
+ nonBreaking: 0,
263
+ info: 0,
264
+ });
265
+ }
266
+ function buildEndpointMap(snapshot, snapshotLabel) {
267
+ const endpointMap = new Map();
268
+ snapshot.endpoints.forEach(endpoint => {
269
+ const key = endpointKey(endpoint);
270
+ if (endpointMap.has(key)) {
271
+ throw new Error(`Duplicate endpoint key detected in ${snapshotLabel} snapshot: ${key}`);
272
+ }
273
+ endpointMap.set(key, endpoint);
274
+ });
275
+ return endpointMap;
276
+ }
277
+ export function classifyEndpointDiffs(baseline, target) {
278
+ const baselineMap = buildEndpointMap(baseline, 'baseline');
279
+ const targetMap = buildEndpointMap(target, 'target');
280
+ const keys = Array.from(new Set([...baselineMap.keys(), ...targetMap.keys()])).sort();
281
+ const changes = [];
282
+ keys.forEach(key => {
283
+ const beforeEndpoint = baselineMap.get(key);
284
+ const afterEndpoint = targetMap.get(key);
285
+ if (beforeEndpoint && !afterEndpoint) {
286
+ changes.push(createMethodRemovedChange(beforeEndpoint));
287
+ return;
288
+ }
289
+ if (!beforeEndpoint && afterEndpoint) {
290
+ changes.push(createMethodAddedChange(afterEndpoint));
291
+ return;
292
+ }
293
+ if (!beforeEndpoint || !afterEndpoint) {
294
+ return;
295
+ }
296
+ if (beforeEndpoint.fingerprint === afterEndpoint.fingerprint) {
297
+ return;
298
+ }
299
+ const details = detectOperationDetails(beforeEndpoint.canonicalOperation, afterEndpoint.canonicalOperation);
300
+ const primaryDetail = getPrimaryDetail(details);
301
+ changes.push({
302
+ url: beforeEndpoint.path,
303
+ method: beforeEndpoint.method,
304
+ classification: primaryDetail.classification,
305
+ changeReason: primaryDetail.reason,
306
+ before: beforeEndpoint.canonicalOperation,
307
+ after: afterEndpoint.canonicalOperation,
308
+ details,
309
+ });
310
+ });
311
+ const sortedChanges = sortEndpointChanges(changes);
312
+ return {
313
+ changes: sortedChanges,
314
+ counts: toCounts(sortedChanges),
315
+ };
316
+ }
317
+ //# sourceMappingURL=endpointDiffClassifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endpointDiffClassifier.js","sourceRoot":"","sources":["../../../src/domain/diff/endpointDiffClassifier.ts"],"names":[],"mappings":"AA0GA,MAAM,uBAAuB,GAAuC;IAClE,QAAQ,EAAE,CAAC;IACX,cAAc,EAAE,CAAC;IACjB,IAAI,EAAE,CAAC;CACR,CAAC;AAEF,MAAM,qBAAqB,GAAyC;IAClE,cAAc,EAAE,CAAC;IACjB,4BAA4B,EAAE,CAAC;IAC/B,+BAA+B,EAAE,CAAC;IAClC,uBAAuB,EAAE,CAAC;IAC1B,2BAA2B,EAAE,CAAC;IAC9B,YAAY,EAAE,CAAC;IACf,qBAAqB,EAAE,CAAC;IACxB,yBAAyB,EAAE,CAAC;IAC5B,2BAA2B,EAAE,CAAC;CAC/B,CAAC;AAEF,SAAS,iBAAiB,CAAC,MAA4B;IACrD,MAAM,QAAQ,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,0CAA0C,MAAM,EAAE,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,WAAW,CAAC,QAA4D;IAC/E,OAAO,GAAG,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;AAChD,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAuB;IAClD,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AACxH,CAAC;AAED,SAAS,gBAAgB,CAAC,OAA+B;IACvD,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACvC,MAAM,mBAAmB,GACvB,uBAAuB,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,uBAAuB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC/F,IAAI,mBAAmB,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,mBAAmB,CAAC;QAC7B,CAAC;QAED,OAAO,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACR,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAe,EAAE,UAAU,GAAG,EAAE;IAC5D,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAChH,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IAExE,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;QAC9B,MAAM,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,YAAY,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC;QACjF,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAExB,MAAM,KAAK,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;QACvC,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC3E,oBAAoB,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,YAAY,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YACxF,OAAO;QACT,CAAC;QAED,oBAAoB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,MAAM,eAAe,GAAuC,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACxF,eAAe,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;QACvC,MAAM,gBAAgB,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;QAChD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACrC,OAAO;QACT,CAAC;QACD,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC9B,oBAAoB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,yBAAyB,CAAC,SAA8B;IAC/D,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAoC,CAAC;IAErE,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QAC3B,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAuB,CAAC;QAE3D,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACjC,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBACvD,OAAO;YACT,CAAC;YAED,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QACnF,CAAC,CAAC,CAAC;QAEH,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,SAAS,mCAAmC,CAC1C,MAA+B,EAC/B,KAA8B;IAE9B,MAAM,iBAAiB,GAAa,EAAE,CAAC;IAEvC,MAAM,cAAc,GAAG,yBAAyB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACnE,MAAM,aAAa,GAAG,yBAAyB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAEjE,cAAc,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,UAAU,EAAE,EAAE;QACpD,MAAM,aAAa,GAAG,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACpD,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QAED,cAAc,CAAC,OAAO,CAAC,CAAC,mBAAmB,EAAE,SAAS,EAAE,EAAE;YACxD,MAAM,kBAAkB,GAAG,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACxD,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBACxB,OAAO;YACT,CAAC;YAED,mBAAmB,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;gBACzC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;oBAC1C,iBAAiB,CAAC,IAAI,CAAC,GAAG,UAAU,IAAI,SAAS,IAAI,YAAY,EAAE,CAAC,CAAC;gBACvE,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,iBAAiB,CAAC,IAAI,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,8BAA8B,CACrC,MAA+B,EAC/B,KAA8B;IAE9B,MAAM,OAAO,GAA2B,EAAE,CAAC;IAE3C,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAClG,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEhG,cAAc,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,UAAU,EAAE,EAAE;QACpD,MAAM,aAAa,GAAG,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACpD,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QAED,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3F,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QAEzF,MAAM,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC;aACnD,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;aACpD,IAAI,EAAE,CAAC;QACV,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,IAAI,CAAC;gBACX,MAAM,EAAE,6BAA6B;gBACrC,cAAc,EAAE,UAAU;gBAC1B,OAAO,EAAE,mCAAmC,UAAU,KAAK,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACzF,QAAQ,EAAE;oBACR,UAAU;oBACV,iBAAiB;iBAClB;aACF,CAAC,CAAC;QACL,CAAC;QAED,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC;aAChD,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;aACrD,IAAI,EAAE,CAAC;QACV,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC;gBACX,MAAM,EAAE,2BAA2B;gBACnC,cAAc,EAAE,cAAc;gBAC9B,OAAO,EAAE,iCAAiC,UAAU,KAAK,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACrF,QAAQ,EAAE;oBACR,UAAU;oBACV,eAAe;iBAChB;aACF,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,sBAAsB,CAC7B,MAA+B,EAC/B,KAA8B;IAE9B,MAAM,OAAO,GAA2B,EAAE,CAAC;IAE3C,MAAM,qBAAqB,GAAG,MAAM,CAAC,WAAW,EAAE,QAAQ,KAAK,IAAI,CAAC;IACpE,MAAM,oBAAoB,GAAG,KAAK,CAAC,WAAW,EAAE,QAAQ,KAAK,IAAI,CAAC;IAClE,IAAI,CAAC,qBAAqB,IAAI,oBAAoB,EAAE,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC;YACX,MAAM,EAAE,8BAA8B;YACtC,cAAc,EAAE,UAAU;YAC1B,OAAO,EAAE,iDAAiD;SAC3D,CAAC,CAAC;IACL,CAAC;IAED,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IACzF,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IAEvF,MAAM,kBAAkB,GAAG,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC;SACrD,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;SACvD,IAAI,EAAE,CAAC;IACV,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC;YACX,MAAM,EAAE,yBAAyB;YACjC,cAAc,EAAE,UAAU;YAC1B,OAAO,EAAE,iCAAiC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACzE,QAAQ,EAAE;gBACR,kBAAkB;aACnB;SACF,CAAC,CAAC;IACL,CAAC;IAED,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC;SAClD,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;SACxD,IAAI,EAAE,CAAC;IACV,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,IAAI,CAAC;YACX,MAAM,EAAE,uBAAuB;YAC/B,cAAc,EAAE,cAAc;YAC9B,OAAO,EAAE,+BAA+B,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACrE,QAAQ,EAAE;gBACR,gBAAgB;aACjB;SACF,CAAC,CAAC;IACL,CAAC;IAED,MAAM,6BAA6B,GAAG,mCAAmC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACzF,IAAI,6BAA6B,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC;YACX,MAAM,EAAE,iCAAiC;YACzC,cAAc,EAAE,UAAU;YAC1B,OAAO,EAAE,oCAAoC,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACvF,QAAQ,EAAE;gBACR,6BAA6B;aAC9B;SACF,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,GAAG,8BAA8B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IAE/D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC;YACX,MAAM,EAAE,6BAA6B;YACrC,cAAc,EAAE,MAAM;YACtB,OAAO,EAAE,iEAAiE;SAC3E,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,uBAAuB,CAAC,QAAmC;IAClE,MAAM,OAAO,GAA2B;QACtC;YACE,MAAM,EAAE,cAAc;YACtB,cAAc,EAAE,cAAc;YAC9B,OAAO,EAAE,sBAAsB;SAChC;KACF,CAAC;IAEF,OAAO;QACL,GAAG,EAAE,QAAQ,CAAC,IAAI;QAClB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,cAAc,EAAE,cAAc;QAC9B,YAAY,EAAE,cAAc;QAC5B,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,QAAQ,CAAC,kBAAkB;QAClC,OAAO;KACR,CAAC;AACJ,CAAC;AAED,SAAS,yBAAyB,CAAC,QAAmC;IACpE,MAAM,OAAO,GAA2B;QACtC;YACE,MAAM,EAAE,gBAAgB;YACxB,cAAc,EAAE,UAAU;YAC1B,OAAO,EAAE,wBAAwB;SAClC;KACF,CAAC;IAEF,OAAO;QACL,GAAG,EAAE,QAAQ,CAAC,IAAI;QAClB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,cAAc,EAAE,UAAU;QAC1B,YAAY,EAAE,gBAAgB;QAC9B,MAAM,EAAE,QAAQ,CAAC,kBAAkB;QACnC,KAAK,EAAE,IAAI;QACX,OAAO;KACR,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,OAAuB;IACvC,OAAO,OAAO,CAAC,MAAM,CACnB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;QACd,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC;QACf,IAAI,MAAM,CAAC,cAAc,KAAK,UAAU,EAAE,CAAC;YACzC,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC;QACpB,CAAC;aAAM,IAAI,MAAM,CAAC,cAAc,KAAK,cAAc,EAAE,CAAC;YACpD,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC;QAChB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,EACD;QACE,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,CAAC;QACX,WAAW,EAAE,CAAC;QACd,IAAI,EAAE,CAAC;KACR,CACF,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CACvB,QAA2B,EAC3B,aAAoC;IAEpC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAqC,CAAC;IAEjE,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QACpC,MAAM,GAAG,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,sCAAsC,aAAa,cAAc,GAAG,EAAE,CAAC,CAAC;QAC1F,CAAC;QACD,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,QAA2B,EAC3B,MAAyB;IAEzB,MAAM,WAAW,GAAG,gBAAgB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC3D,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAErD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACtF,MAAM,OAAO,GAAmB,EAAE,CAAC;IAEnC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACjB,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEzC,IAAI,cAAc,IAAI,CAAC,aAAa,EAAE,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,CAAC,CAAC;YACxD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,cAAc,IAAI,aAAa,EAAE,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC,CAAC,CAAC;YACrD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,cAAc,IAAI,CAAC,aAAa,EAAE,CAAC;YACtC,OAAO;QACT,CAAC;QAED,IAAI,cAAc,CAAC,WAAW,KAAK,aAAa,CAAC,WAAW,EAAE,CAAC;YAC7D,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,sBAAsB,CAAC,cAAc,CAAC,kBAAkB,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAC;QAC5G,MAAM,aAAa,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAEhD,OAAO,CAAC,IAAI,CAAC;YACX,GAAG,EAAE,cAAc,CAAC,IAAI;YACxB,MAAM,EAAE,cAAc,CAAC,MAAM;YAC7B,cAAc,EAAE,aAAa,CAAC,cAAc;YAC5C,YAAY,EAAE,aAAa,CAAC,MAAM;YAClC,MAAM,EAAE,cAAc,CAAC,kBAAkB;YACzC,KAAK,EAAE,aAAa,CAAC,kBAAkB;YACvC,OAAO;SACR,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACnD,OAAO;QACL,OAAO,EAAE,aAAa;QACtB,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC;KAChC,CAAC;AACJ,CAAC"}
package/dist/http.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":""}
package/dist/http.js ADDED
@@ -0,0 +1,52 @@
1
+ #!/usr/bin/env node
2
+ import { createSnapshotToolRuntime } from './transport/createSnapshotToolRuntime.js';
3
+ import { startSnapshotWebServer } from './transport/webServerRuntime.js';
4
+ function isDirectExecution() {
5
+ const entryPoint = process.argv[1] ?? '';
6
+ return /(?:^|[/\\])http\.(?:ts|js)$/.test(entryPoint);
7
+ }
8
+ if (isDirectExecution()) {
9
+ const runtime = createSnapshotToolRuntime(process.env);
10
+ let webServer = null;
11
+ let shuttingDown = false;
12
+ const shutdown = async (exitCode) => {
13
+ if (shuttingDown) {
14
+ return;
15
+ }
16
+ shuttingDown = true;
17
+ if (webServer) {
18
+ await webServer.close().catch(() => undefined);
19
+ webServer = null;
20
+ }
21
+ await runtime.dispose().catch(() => undefined);
22
+ process.exit(exitCode);
23
+ };
24
+ process.on('SIGINT', () => {
25
+ void shutdown(0);
26
+ });
27
+ process.on('SIGTERM', () => {
28
+ void shutdown(0);
29
+ });
30
+ process.on('uncaughtException', error => {
31
+ console.error(error);
32
+ void shutdown(1);
33
+ });
34
+ process.on('unhandledRejection', reason => {
35
+ console.error(reason);
36
+ void shutdown(1);
37
+ });
38
+ startSnapshotWebServer({
39
+ env: process.env,
40
+ toolRouter: runtime.toolRouter,
41
+ forceEnable: true,
42
+ })
43
+ .then(startedServer => {
44
+ webServer = startedServer;
45
+ console.error(`Swagger Snapshot HTTP Server running on http://${startedServer.host}:${startedServer.port}`);
46
+ })
47
+ .catch(error => {
48
+ console.error(error);
49
+ void shutdown(1);
50
+ });
51
+ }
52
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AACrF,OAAO,EAA2B,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAElG,SAAS,iBAAiB;IACxB,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACzC,OAAO,6BAA6B,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACxD,CAAC;AAED,IAAI,iBAAiB,EAAE,EAAE,CAAC;IACxB,MAAM,OAAO,GAAG,yBAAyB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACvD,IAAI,SAAS,GAAmC,IAAI,CAAC;IAErD,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,MAAM,QAAQ,GAAG,KAAK,EAAE,QAAgB,EAAiB,EAAE;QACzD,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QACD,YAAY,GAAG,IAAI,CAAC;QACpB,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAC/C,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;QACD,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACxB,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;QACzB,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,KAAK,CAAC,EAAE;QACtC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,MAAM,CAAC,EAAE;QACxC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACtB,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,sBAAsB,CAAC;QACrB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,WAAW,EAAE,IAAI;KAClB,CAAC;SACC,IAAI,CAAC,aAAa,CAAC,EAAE;QACpB,SAAS,GAAG,aAAa,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,kDAAkD,aAAa,CAAC,IAAI,IAAI,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9G,CAAC,CAAC;SACD,KAAK,CAAC,KAAK,CAAC,EAAE;QACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC,CAAC,CAAC;AACP,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,5 @@
1
1
  #!/usr/bin/env node
2
+ type StdioInput = Pick<NodeJS.ReadStream, 'once' | 'off'>;
3
+ export declare function attachStdioShutdownHooks(stdin: StdioInput, onClosed: () => void): () => void;
2
4
  export {};
3
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAOA,KAAK,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC;AAE1D,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAiB5F"}