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.
- package/README.md +131 -100
- package/dist/application/snapshot/createSnapshotRuntime.d.ts +2 -0
- package/dist/application/snapshot/createSnapshotRuntime.d.ts.map +1 -0
- package/dist/application/snapshot/createSnapshotRuntime.js +2 -0
- package/dist/application/snapshot/createSnapshotRuntime.js.map +1 -0
- package/dist/application/snapshot/snapshotCaptureService.d.ts +90 -0
- package/dist/application/snapshot/snapshotCaptureService.d.ts.map +1 -0
- package/dist/application/snapshot/snapshotCaptureService.js +394 -0
- package/dist/application/snapshot/snapshotCaptureService.js.map +1 -0
- package/dist/application/snapshot/snapshotRepository.d.ts +77 -0
- package/dist/application/snapshot/snapshotRepository.d.ts.map +1 -0
- package/dist/application/snapshot/snapshotRepository.js +2 -0
- package/dist/application/snapshot/snapshotRepository.js.map +1 -0
- package/dist/domain/canonical/canonicalSnapshot.d.ts +61 -0
- package/dist/domain/canonical/canonicalSnapshot.d.ts.map +1 -0
- package/dist/domain/canonical/canonicalSnapshot.js +300 -0
- package/dist/domain/canonical/canonicalSnapshot.js.map +1 -0
- package/dist/domain/contracts/runtimeEnvironmentContract.d.ts +21 -0
- package/dist/domain/contracts/runtimeEnvironmentContract.d.ts.map +1 -0
- package/dist/domain/contracts/runtimeEnvironmentContract.js +50 -0
- package/dist/domain/contracts/runtimeEnvironmentContract.js.map +1 -0
- package/dist/domain/contracts/snapshotDiffContract.d.ts +270 -0
- package/dist/domain/contracts/snapshotDiffContract.d.ts.map +1 -0
- package/dist/domain/contracts/snapshotDiffContract.js +99 -0
- package/dist/domain/contracts/snapshotDiffContract.js.map +1 -0
- package/dist/domain/diff/endpointDiffClassifier.d.ts +78 -0
- package/dist/domain/diff/endpointDiffClassifier.d.ts.map +1 -0
- package/dist/domain/diff/endpointDiffClassifier.js +317 -0
- package/dist/domain/diff/endpointDiffClassifier.js.map +1 -0
- package/dist/http.d.ts +3 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +52 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +88 -266
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/postgres/migrationRunner.d.ts +14 -0
- package/dist/infrastructure/postgres/migrationRunner.d.ts.map +1 -0
- package/dist/infrastructure/postgres/migrationRunner.js +161 -0
- package/dist/infrastructure/postgres/migrationRunner.js.map +1 -0
- package/dist/infrastructure/postgres/migrations/001_snapshot_schema.sql +29 -0
- package/dist/infrastructure/postgres/migrations/002_snapshot_change_history.sql +32 -0
- package/dist/infrastructure/postgres/postgresSnapshotRepository.d.ts +25 -0
- package/dist/infrastructure/postgres/postgresSnapshotRepository.d.ts.map +1 -0
- package/dist/infrastructure/postgres/postgresSnapshotRepository.js +323 -0
- package/dist/infrastructure/postgres/postgresSnapshotRepository.js.map +1 -0
- package/dist/infrastructure/postgres/runMigrations.d.ts +3 -0
- package/dist/infrastructure/postgres/runMigrations.d.ts.map +1 -0
- package/dist/infrastructure/postgres/runMigrations.js +33 -0
- package/dist/infrastructure/postgres/runMigrations.js.map +1 -0
- package/dist/infrastructure/runtime/createSnapshotRuntime.d.ts +17 -0
- package/dist/infrastructure/runtime/createSnapshotRuntime.d.ts.map +1 -0
- package/dist/infrastructure/runtime/createSnapshotRuntime.js +38 -0
- package/dist/infrastructure/runtime/createSnapshotRuntime.js.map +1 -0
- package/dist/schemas.d.ts +284 -3
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +110 -1
- package/dist/schemas.js.map +1 -1
- package/dist/tests/canonicalSnapshot.test.d.ts +2 -0
- package/dist/tests/canonicalSnapshot.test.d.ts.map +1 -0
- package/dist/tests/canonicalSnapshot.test.js +425 -0
- package/dist/tests/canonicalSnapshot.test.js.map +1 -0
- package/dist/tests/endpointDiffClassifier.test.d.ts +2 -0
- package/dist/tests/endpointDiffClassifier.test.d.ts.map +1 -0
- package/dist/tests/endpointDiffClassifier.test.js +633 -0
- package/dist/tests/endpointDiffClassifier.test.js.map +1 -0
- package/dist/tests/httpSnapshotTransport.test.d.ts +2 -0
- package/dist/tests/httpSnapshotTransport.test.d.ts.map +1 -0
- package/dist/tests/httpSnapshotTransport.test.js +356 -0
- package/dist/tests/httpSnapshotTransport.test.js.map +1 -0
- package/dist/tests/indexLifecycle.test.d.ts +2 -0
- package/dist/tests/indexLifecycle.test.d.ts.map +1 -0
- package/dist/tests/indexLifecycle.test.js +23 -0
- package/dist/tests/indexLifecycle.test.js.map +1 -0
- package/dist/tests/mcpSnapshotTools.test.d.ts +2 -0
- package/dist/tests/mcpSnapshotTools.test.d.ts.map +1 -0
- package/dist/tests/mcpSnapshotTools.test.js +316 -0
- package/dist/tests/mcpSnapshotTools.test.js.map +1 -0
- package/dist/tests/postgresMigrationSmoke.test.d.ts +2 -0
- package/dist/tests/postgresMigrationSmoke.test.d.ts.map +1 -0
- package/dist/tests/postgresMigrationSmoke.test.js +187 -0
- package/dist/tests/postgresMigrationSmoke.test.js.map +1 -0
- package/dist/tests/realPostgresTestSchema.d.ts +10 -0
- package/dist/tests/realPostgresTestSchema.d.ts.map +1 -0
- package/dist/tests/realPostgresTestSchema.js +73 -0
- package/dist/tests/realPostgresTestSchema.js.map +1 -0
- package/dist/tests/snapshotCapturePipeline.test.d.ts +2 -0
- package/dist/tests/snapshotCapturePipeline.test.d.ts.map +1 -0
- package/dist/tests/snapshotCapturePipeline.test.js +475 -0
- package/dist/tests/snapshotCapturePipeline.test.js.map +1 -0
- package/dist/tests/snapshotDiffContract.test.d.ts +2 -0
- package/dist/tests/snapshotDiffContract.test.d.ts.map +1 -0
- package/dist/tests/snapshotDiffContract.test.js +156 -0
- package/dist/tests/snapshotDiffContract.test.js.map +1 -0
- package/dist/tests/snapshotPersistence.real.test.d.ts +2 -0
- package/dist/tests/snapshotPersistence.real.test.d.ts.map +1 -0
- package/dist/tests/snapshotPersistence.real.test.js +310 -0
- package/dist/tests/snapshotPersistence.real.test.js.map +1 -0
- package/dist/tests/webServerRuntime.test.d.ts +2 -0
- package/dist/tests/webServerRuntime.test.d.ts.map +1 -0
- package/dist/tests/webServerRuntime.test.js +123 -0
- package/dist/tests/webServerRuntime.test.js.map +1 -0
- package/dist/transport/createSnapshotToolRuntime.d.ts +7 -0
- package/dist/transport/createSnapshotToolRuntime.d.ts.map +1 -0
- package/dist/transport/createSnapshotToolRuntime.js +40 -0
- package/dist/transport/createSnapshotToolRuntime.js.map +1 -0
- package/dist/transport/httpSnapshotServer.d.ts +11 -0
- package/dist/transport/httpSnapshotServer.d.ts.map +1 -0
- package/dist/transport/httpSnapshotServer.js +216 -0
- package/dist/transport/httpSnapshotServer.js.map +1 -0
- package/dist/transport/mcpToolRouter.d.ts +81 -0
- package/dist/transport/mcpToolRouter.d.ts.map +1 -0
- package/dist/transport/mcpToolRouter.js +416 -0
- package/dist/transport/mcpToolRouter.js.map +1 -0
- package/dist/transport/webServerRuntime.d.ts +17 -0
- package/dist/transport/webServerRuntime.d.ts.map +1 -0
- package/dist/transport/webServerRuntime.js +73 -0
- package/dist/transport/webServerRuntime.js.map +1 -0
- package/dist/utils/swaggerCache.d.ts +4 -0
- package/dist/utils/swaggerCache.d.ts.map +1 -1
- package/dist/utils/swaggerCache.js +8 -0
- package/dist/utils/swaggerCache.js.map +1 -1
- package/dist/utils/types.d.ts +2 -1
- package/dist/utils/types.d.ts.map +1 -1
- package/dist/utils/types.js +2 -0
- package/dist/utils/types.js.map +1 -1
- package/dist/web/dashboard.css +411 -0
- package/dist/web/dashboard.html +141 -0
- package/dist/web/dashboard.js +540 -0
- 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":"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"}
|
|
@@ -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":"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"}
|
package/dist/http.d.ts
ADDED
|
@@ -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
|
package/dist/http.js.map
ADDED
|
@@ -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
package/dist/index.d.ts.map
CHANGED
|
@@ -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"}
|