@zuplo/openapi-tools 6.65.8 → 6.66.2

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 (75) hide show
  1. package/dist/constants.d.ts +13 -0
  2. package/dist/constants.d.ts.map +1 -0
  3. package/dist/constants.js +25 -0
  4. package/dist/constants.js.map +1 -0
  5. package/dist/file-format.d.ts +59 -0
  6. package/dist/file-format.d.ts.map +1 -0
  7. package/dist/file-format.js +142 -0
  8. package/dist/file-format.js.map +1 -0
  9. package/dist/file-format.spec.d.ts +2 -0
  10. package/dist/file-format.spec.d.ts.map +1 -0
  11. package/dist/file-format.spec.js +289 -0
  12. package/dist/file-format.spec.js.map +1 -0
  13. package/dist/index.d.ts +10 -1
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +10 -1
  16. package/dist/index.js.map +1 -1
  17. package/dist/interfaces.d.ts +32 -5
  18. package/dist/interfaces.d.ts.map +1 -1
  19. package/dist/interfaces.js +0 -1
  20. package/dist/interfaces.js.map +1 -1
  21. package/dist/merge-fixtures.spec.d.ts +2 -0
  22. package/dist/merge-fixtures.spec.d.ts.map +1 -0
  23. package/dist/merge-fixtures.spec.js +181 -0
  24. package/dist/merge-fixtures.spec.js.map +1 -0
  25. package/dist/{openapi-utils.d.ts → merge.d.ts} +2 -22
  26. package/dist/merge.d.ts.map +1 -0
  27. package/dist/{openapi-utils.js → merge.js} +6 -186
  28. package/dist/merge.js.map +1 -0
  29. package/dist/merge.spec.d.ts +2 -0
  30. package/dist/merge.spec.d.ts.map +1 -0
  31. package/dist/merge.spec.js +399 -0
  32. package/dist/merge.spec.js.map +1 -0
  33. package/dist/operation-utils.d.ts +29 -0
  34. package/dist/operation-utils.d.ts.map +1 -0
  35. package/dist/operation-utils.js +123 -0
  36. package/dist/operation-utils.js.map +1 -0
  37. package/dist/overlay.d.ts +78 -0
  38. package/dist/overlay.d.ts.map +1 -0
  39. package/dist/overlay.js +477 -0
  40. package/dist/overlay.js.map +1 -0
  41. package/dist/overlay.spec.d.ts +2 -0
  42. package/dist/overlay.spec.d.ts.map +1 -0
  43. package/dist/overlay.spec.js +697 -0
  44. package/dist/overlay.spec.js.map +1 -0
  45. package/dist/parsing.d.ts +17 -0
  46. package/dist/parsing.d.ts.map +1 -0
  47. package/dist/parsing.js +32 -0
  48. package/dist/parsing.js.map +1 -0
  49. package/dist/path-transform.d.ts +11 -0
  50. package/dist/path-transform.d.ts.map +1 -0
  51. package/dist/path-transform.js +51 -0
  52. package/dist/path-transform.js.map +1 -0
  53. package/dist/path-transform.spec.d.ts +2 -0
  54. package/dist/path-transform.spec.d.ts.map +1 -0
  55. package/dist/path-transform.spec.js +269 -0
  56. package/dist/path-transform.spec.js.map +1 -0
  57. package/dist/url-utils.d.ts +14 -0
  58. package/dist/url-utils.d.ts.map +1 -0
  59. package/dist/url-utils.js +40 -0
  60. package/dist/url-utils.js.map +1 -0
  61. package/dist/url-utils.spec.d.ts +2 -0
  62. package/dist/url-utils.spec.d.ts.map +1 -0
  63. package/dist/url-utils.spec.js +93 -0
  64. package/dist/url-utils.spec.js.map +1 -0
  65. package/dist/validation.d.ts +210 -0
  66. package/dist/validation.d.ts.map +1 -0
  67. package/dist/validation.js +119 -0
  68. package/dist/validation.js.map +1 -0
  69. package/package.json +9 -10
  70. package/dist/index.spec.d.ts +0 -2
  71. package/dist/index.spec.d.ts.map +0 -1
  72. package/dist/index.spec.js +0 -526
  73. package/dist/index.spec.js.map +0 -1
  74. package/dist/openapi-utils.d.ts.map +0 -1
  75. package/dist/openapi-utils.js.map +0 -1
@@ -1,10 +1,19 @@
1
- import { RouteConfiguration } from "@zuplo/runtime";
2
- import { ErrorObject } from "ajv";
3
1
  import { OpenAPIV3_1 } from "openapi-types";
2
+ /**
3
+ * Validation error object structure
4
+ * Simplified from AJV's ErrorObject for broader compatibility
5
+ */
6
+ export interface ValidationError {
7
+ keyword: string;
8
+ instancePath: string;
9
+ schemaPath: string;
10
+ message?: string;
11
+ params?: Record<string, unknown>;
12
+ }
4
13
  export interface ValidationResult {
5
14
  isValid: boolean;
6
- errors: ErrorObject[];
7
- warnings: ErrorObject[];
15
+ errors: ValidationError[];
16
+ warnings: ValidationError[];
8
17
  }
9
18
  type Modify<T, R> = Omit<T, keyof R> & R;
10
19
  export type ZuploHttpMethods = OpenAPIV3_1.HttpMethods | string;
@@ -36,7 +45,25 @@ export type PathMode = "open-api" | "url-pattern";
36
45
  export type ZuploOpenApiOperationObject = Modify<OpenAPIV3_1.OperationObject<ZuploOpenApiOperationExtension>, {
37
46
  operationId: string;
38
47
  }>;
39
- export type ZuploOpenApiOperationProperties = Omit<RouteConfiguration, "operationId" | "path" | "methods" | "label" | "key" | "summary" | "description" | "parameters" | "responses" | "tags" | "version" | "raw">;
48
+ /**
49
+ * Zuplo OpenAPI operation properties
50
+ * This is a subset of RouteConfiguration that can be specified in the OpenAPI document.
51
+ * Uses a flexible type to avoid dependency on @zuplo/runtime in the openapi-tools package.
52
+ */
53
+ export interface ZuploOpenApiOperationProperties {
54
+ handler?: {
55
+ export: string;
56
+ module: string;
57
+ options?: Record<string, unknown>;
58
+ };
59
+ policies?: {
60
+ inbound?: unknown[];
61
+ outbound?: unknown[];
62
+ };
63
+ corsPolicy?: string;
64
+ rateLimitPolicy?: string;
65
+ [key: string]: unknown;
66
+ }
40
67
  export interface ZuploOpenApiOperationExtension {
41
68
  [ZUPLO_OPEN_API_ROUTE_KEY]?: ZuploOpenApiOperationProperties;
42
69
  [OPEN_API_INTERNAL_PROPERTY_VENDOR_TAG]?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAED,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;AACzC,MAAM,MAAM,gBAAgB,GAAG,WAAW,CAAC,WAAW,GAAG,MAAM,CAAC;AAGhE,eAAO,MAAM,4BAA4B,YAAY,CAAC;AACtD,eAAO,MAAM,qCAAqC,eAAe,CAAC;AAClE,eAAO,MAAM,uBAAuB,gBACa,CAAC;AAClD,eAAO,MAAM,wBAAwB,iBACa,CAAC;AAEnD,MAAM,MAAM,oBAAoB,GAAG,MAAM,CACvC,WAAW,CAAC,QAAQ,CAAC,8BAA8B,CAAC,EACpD;IACE,KAAK,EAAE,uBAAuB,GAAG,SAAS,CAAC;CAC5C,CACF,CAAC;AACF,MAAM,MAAM,uBAAuB,GAAG,MAAM,CAC1C,MAAM,EACN,0BAA0B,GAAG,SAAS,CACvC,CAAC;AACF,MAAM,MAAM,0BAA0B,GAAG,MAAM,CAC7C,WAAW,CAAC,cAAc,CAAC,8BAA8B,CAAC,GACxD,6BAA6B,EAC/B;IACE,GAAG,CAAC,EAAE,2BAA2B,CAAC;IAClC,GAAG,CAAC,EAAE,2BAA2B,CAAC;IAClC,IAAI,CAAC,EAAE,2BAA2B,CAAC;IACnC,MAAM,CAAC,EAAE,2BAA2B,CAAC;IACrC,OAAO,CAAC,EAAE,2BAA2B,CAAC;IACtC,IAAI,CAAC,EAAE,2BAA2B,CAAC;IACnC,KAAK,CAAC,EAAE,2BAA2B,CAAC;IACpC,KAAK,CAAC,EAAE,2BAA2B,CAAC;CACrC,CACF,CAAC;AACF,MAAM,WAAW,6BAA6B;IAC5C,CAAC,uBAAuB,CAAC,CAAC,EAAE,8BAA8B,CAAC;CAC5D;AACD,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,EAAE,QAAQ,CAAC;CACpB;AACD,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,aAAa,CAAC;AAClD,MAAM,MAAM,2BAA2B,GAAG,MAAM,CAC9C,WAAW,CAAC,eAAe,CAAC,8BAA8B,CAAC,EAC3D;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CACxB,CAAC;AACF,MAAM,MAAM,+BAA+B,GAAG,IAAI,CAChD,kBAAkB,EAChB,aAAa,GACb,MAAM,GACN,SAAS,GACT,OAAO,GACP,KAAK,GACL,SAAS,GACT,aAAa,GACb,YAAY,GACZ,WAAW,GACX,MAAM,GACN,SAAS,GACT,KAAK,CACR,CAAC;AACF,MAAM,WAAW,8BAA8B;IAC7C,CAAC,wBAAwB,CAAC,CAAC,EAAE,+BAA+B,CAAC;IAC7D,CAAC,qCAAqC,CAAC,CAAC,EAAE,OAAO,CAAC;CACnD"}
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- // TODO: This should all be moved to the backend eventually
2
1
  export const ZUPLO_OPEN_API_VENDOR_PREFIX = "x-zuplo";
3
2
  export const OPEN_API_INTERNAL_PROPERTY_VENDOR_TAG = "x-internal";
4
3
  export const ZUPLO_OPEN_API_PATH_KEY = `${ZUPLO_OPEN_API_VENDOR_PREFIX}-path`;
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"AAaA,2DAA2D;AAC3D,MAAM,CAAC,MAAM,4BAA4B,GAAG,SAAS,CAAC;AACtD,MAAM,CAAC,MAAM,qCAAqC,GAAG,YAAY,CAAC;AAClE,MAAM,CAAC,MAAM,uBAAuB,GAClC,GAAG,4BAA4B,OAAgB,CAAC;AAClD,MAAM,CAAC,MAAM,wBAAwB,GACnC,GAAG,4BAA4B,QAAiB,CAAC"}
1
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"AAuBA,MAAM,CAAC,MAAM,4BAA4B,GAAG,SAAS,CAAC;AACtD,MAAM,CAAC,MAAM,qCAAqC,GAAG,YAAY,CAAC;AAClE,MAAM,CAAC,MAAM,uBAAuB,GAClC,GAAG,4BAA4B,OAAgB,CAAC;AAClD,MAAM,CAAC,MAAM,wBAAwB,GACnC,GAAG,4BAA4B,QAAiB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=merge-fixtures.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-fixtures.spec.d.ts","sourceRoot":"","sources":["../src/merge-fixtures.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,181 @@
1
+ import assert from "node:assert";
2
+ import fs from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { describe, it } from "node:test";
5
+ import { fileURLToPath } from "node:url";
6
+ import { mergeOpenApiDocuments } from "./merge.js";
7
+ const __filename = fileURLToPath(import.meta.url);
8
+ const __dirname = path.dirname(__filename);
9
+ // Test fixtures are in the package root
10
+ // When running from dist/, __dirname is packages/openapi-tools/dist
11
+ const testFixturesPath = path.join(__dirname, "..", "test-fixtures");
12
+ /**
13
+ * Determine merge options based on fixture directory name
14
+ */
15
+ function getMergeOptionsFromFixtureName(fixtureName) {
16
+ // Check for operation-id merge mode
17
+ if (fixtureName.includes("operation-id")) {
18
+ return { mergeMode: "operation-id" };
19
+ }
20
+ // Check for path transformation options
21
+ if (fixtureName.includes("path-transformation-prepend")) {
22
+ return { mergeMode: "operation-id", prependServerPath: true };
23
+ }
24
+ // Default to path-method merge mode
25
+ return { mergeMode: "path-method" };
26
+ }
27
+ /**
28
+ * Recursively sort object keys for consistent comparison
29
+ * Also removes undefined values to match JSON.stringify behavior
30
+ */
31
+ function sortObjectKeys(obj) {
32
+ if (obj === null || typeof obj !== "object") {
33
+ return obj;
34
+ }
35
+ if (Array.isArray(obj)) {
36
+ return obj.map(sortObjectKeys);
37
+ }
38
+ const sortedObj = {};
39
+ const keys = Object.keys(obj).sort();
40
+ for (const key of keys) {
41
+ const value = obj[key];
42
+ // Skip undefined values (matching JSON.stringify behavior)
43
+ if (value !== undefined) {
44
+ sortedObj[key] = sortObjectKeys(value);
45
+ }
46
+ }
47
+ return sortedObj;
48
+ }
49
+ /**
50
+ * Deep comparison that provides useful diff information
51
+ */
52
+ function deepCompare(actual, expected, path = "") {
53
+ if (actual === expected) {
54
+ return { equal: true };
55
+ }
56
+ if (typeof actual !== typeof expected) {
57
+ return {
58
+ equal: false,
59
+ message: `Type mismatch at ${path || "root"}: expected ${typeof expected}, got ${typeof actual}`,
60
+ };
61
+ }
62
+ if (actual === null || expected === null) {
63
+ return {
64
+ equal: false,
65
+ message: `Null mismatch at ${path || "root"}: expected ${expected}, got ${actual}`,
66
+ };
67
+ }
68
+ if (typeof actual !== "object") {
69
+ return {
70
+ equal: false,
71
+ message: `Value mismatch at ${path || "root"}: expected ${JSON.stringify(expected)}, got ${JSON.stringify(actual)}`,
72
+ };
73
+ }
74
+ if (Array.isArray(actual) !== Array.isArray(expected)) {
75
+ return {
76
+ equal: false,
77
+ message: `Array/Object mismatch at ${path || "root"}`,
78
+ };
79
+ }
80
+ if (Array.isArray(actual) && Array.isArray(expected)) {
81
+ if (actual.length !== expected.length) {
82
+ return {
83
+ equal: false,
84
+ message: `Array length mismatch at ${path || "root"}: expected ${expected.length}, got ${actual.length}`,
85
+ };
86
+ }
87
+ for (let i = 0; i < actual.length; i++) {
88
+ const result = deepCompare(actual[i], expected[i], `${path}[${i}]`);
89
+ if (!result.equal) {
90
+ return result;
91
+ }
92
+ }
93
+ return { equal: true };
94
+ }
95
+ const actualObj = actual;
96
+ const expectedObj = expected;
97
+ const actualKeys = Object.keys(actualObj).sort();
98
+ const expectedKeys = Object.keys(expectedObj).sort();
99
+ // Check for missing keys
100
+ for (const key of expectedKeys) {
101
+ if (!(key in actualObj)) {
102
+ return {
103
+ equal: false,
104
+ message: `Missing key at ${path ? `${path}.${key}` : key}`,
105
+ };
106
+ }
107
+ }
108
+ // Check for extra keys
109
+ for (const key of actualKeys) {
110
+ if (!(key in expectedObj)) {
111
+ return {
112
+ equal: false,
113
+ message: `Extra key at ${path ? `${path}.${key}` : key}`,
114
+ };
115
+ }
116
+ }
117
+ // Recursively compare values
118
+ for (const key of expectedKeys) {
119
+ const result = deepCompare(actualObj[key], expectedObj[key], path ? `${path}.${key}` : key);
120
+ if (!result.equal) {
121
+ return result;
122
+ }
123
+ }
124
+ return { equal: true };
125
+ }
126
+ describe("OpenAPI Merge Fixtures", async () => {
127
+ // Discover all fixture directories
128
+ let fixtureDirectories;
129
+ try {
130
+ const entries = await fs.readdir(testFixturesPath, { withFileTypes: true });
131
+ fixtureDirectories = entries
132
+ .filter((entry) => entry.isDirectory())
133
+ .map((entry) => entry.name)
134
+ .filter((name) => /^\d{2}-/.test(name)) // Only include numbered directories
135
+ .sort();
136
+ }
137
+ catch (error) {
138
+ console.error("Failed to read test fixtures directory:", error);
139
+ fixtureDirectories = [];
140
+ }
141
+ for (const fixtureName of fixtureDirectories) {
142
+ it(`should merge correctly: ${fixtureName}`, async () => {
143
+ const fixtureDir = path.join(testFixturesPath, fixtureName);
144
+ // Read fixture files
145
+ const [sourceContent, destinationContent, expectedMergedContent] = await Promise.all([
146
+ fs.readFile(path.join(fixtureDir, "source.json"), "utf-8"),
147
+ fs.readFile(path.join(fixtureDir, "destination.json"), "utf-8"),
148
+ fs.readFile(path.join(fixtureDir, "merged.json"), "utf-8"),
149
+ ]);
150
+ const source = JSON.parse(sourceContent);
151
+ const destination = JSON.parse(destinationContent);
152
+ const expectedMerged = JSON.parse(expectedMergedContent);
153
+ // Determine merge options from fixture name
154
+ const config = getMergeOptionsFromFixtureName(fixtureName);
155
+ const mergeOptions = {
156
+ mergeMode: config.mergeMode,
157
+ prependServerPath: config.prependServerPath,
158
+ prependPath: config.prependPath,
159
+ };
160
+ // Perform the merge
161
+ const { mergedDocument } = mergeOpenApiDocuments(destination, source, mergeOptions);
162
+ // Compare the merged result with the expected result
163
+ // Sort keys for consistent comparison
164
+ const sortedActual = sortObjectKeys(mergedDocument);
165
+ const sortedExpected = sortObjectKeys(expectedMerged);
166
+ const comparison = deepCompare(sortedActual, sortedExpected);
167
+ if (!comparison.equal) {
168
+ // Provide detailed diff for debugging
169
+ console.log("\n--- Fixture:", fixtureName, "---");
170
+ console.log("Merge options:", JSON.stringify(mergeOptions));
171
+ console.log("Difference:", comparison.message);
172
+ console.log("\nExpected:");
173
+ console.log(JSON.stringify(sortedExpected, null, 2));
174
+ console.log("\nActual:");
175
+ console.log(JSON.stringify(sortedActual, null, 2));
176
+ }
177
+ assert.ok(comparison.equal, `Merge result does not match expected: ${comparison.message}`);
178
+ });
179
+ }
180
+ });
181
+ //# sourceMappingURL=merge-fixtures.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-fixtures.spec.js","sourceRoot":"","sources":["../src/merge-fixtures.spec.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { OpenAPIV3_1 } from "openapi-types";
2
- import { ZuploOpenApiDocument } from "./interfaces.js";
2
+ import { type ZuploOpenApiDocument } from "./interfaces.js";
3
3
  export type MergeMode = "operation-id" | "path-method";
4
4
  export interface MergeOptions {
5
5
  /**
@@ -16,16 +16,6 @@ export interface MergeOptions {
16
16
  */
17
17
  prependPath?: string;
18
18
  }
19
- export declare const OPERATION_PATH_MERGE_DELIMITER = ">";
20
- export declare const parseOpenApiFile: (file: File) => Promise<ZuploOpenApiDocument | OpenAPIV3_1.Document<{}>>;
21
- /**
22
- * Extract pathname from the first server URL in an OpenAPI document
23
- */
24
- export declare function extractServerPathname(document: OpenAPIV3_1.Document | ZuploOpenApiDocument): string;
25
- /**
26
- * Transform paths by prepending a server pathname to all path keys
27
- */
28
- export declare function transformPathsWithServerPathname<T extends OpenAPIV3_1.Document | ZuploOpenApiDocument>(document: T, serverPathname: string): T;
29
19
  export declare const mergeOpenApiDocuments: (originalDocument: ZuploOpenApiDocument, newDocument: OpenAPIV3_1.Document | ZuploOpenApiDocument, options: MergeMode | MergeOptions) => {
30
20
  mergedDocument: ZuploOpenApiDocument;
31
21
  created: Set<string>;
@@ -44,14 +34,4 @@ export declare const mergeOpenApiDocumentOnPathMethod: (originalDocument: ZuploO
44
34
  merged: Set<string>;
45
35
  retained: Set<string>;
46
36
  };
47
- export declare const getOperationKey: (method: string, path: string) => string;
48
- /**
49
- * Add operation ID to any operations that don't have one, this makes
50
- * onboarding smoother for new users
51
- */
52
- export declare const addOperationIdsAsNecessary: (openApi: OpenAPIV3_1.Document | ZuploOpenApiDocument) => ZuploOpenApiDocument;
53
- /**
54
- *
55
- */
56
- export declare const removeOperationsWithoutAnId: (openApi: OpenAPIV3_1.Document | ZuploOpenApiDocument) => ZuploOpenApiDocument;
57
- //# sourceMappingURL=openapi-utils.d.ts.map
37
+ //# sourceMappingURL=merge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../src/merge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGjD,OAAO,EAIL,KAAK,oBAAoB,EAI1B,MAAM,iBAAiB,CAAC;AAWzB,MAAM,MAAM,SAAS,GAAG,cAAc,GAAG,aAAa,CAAC;AAEvD,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,SAAS,EAAE,SAAS,CAAC;IACrB;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAKD,eAAO,MAAM,qBAAqB,GAChC,kBAAkB,oBAAoB,EACtC,aAAa,WAAW,CAAC,QAAQ,GAAG,oBAAoB,EACxD,SAAS,SAAS,GAAG,YAAY;oBAyCjB,oBAAoB;aAC3B,GAAG,CAAC,MAAM,CAAC;YACZ,GAAG,CAAC,MAAM,CAAC;cACT,GAAG,CAAC,MAAM,CAAC;CATtB,CAAC;AAEF,eAAO,MAAM,iCAAiC,GAC5C,kBAAkB,oBAAoB,EACtC,aAAa,oBAAoB,GAAG,WAAW,CAAC,QAAQ,KACvD;IACD,cAAc,EAAE,oBAAoB,CAAC;IACrC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACrB,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAsKvB,CAAC;AAwDF,eAAO,MAAM,gCAAgC,GAC3C,kBAAkB,oBAAoB,EACtC,aAAa,oBAAoB,GAAG,WAAW,CAAC,QAAQ,KACvD;IACD,cAAc,EAAE,oBAAoB,CAAC;IACrC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACrB,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAwEvB,CAAC"}
@@ -1,75 +1,10 @@
1
- import yaml from "js-yaml";
2
1
  import { v4 } from "uuid";
2
+ import { HTTP_METHODS } from "./constants.js";
3
3
  import { OPEN_API_INTERNAL_PROPERTY_VENDOR_TAG, ZUPLO_OPEN_API_PATH_KEY, ZUPLO_OPEN_API_ROUTE_KEY, } from "./interfaces.js";
4
- const METHODS = [
5
- "get",
6
- "put",
7
- "post",
8
- "delete",
9
- "options",
10
- "head",
11
- "patch",
12
- "trace",
13
- ];
14
- export const OPERATION_PATH_MERGE_DELIMITER = ">";
15
- export const parseOpenApiFile = async (file) => {
16
- const fileText = await file.text();
17
- const fileName = file.name;
18
- if (fileName.endsWith(".json")) {
19
- return JSON.parse(fileText);
20
- }
21
- return yaml.load(fileText);
22
- };
23
- /**
24
- * Extract pathname from the first server URL in an OpenAPI document
25
- */
26
- export function extractServerPathname(document) {
27
- if (!document.servers || document.servers.length === 0) {
28
- return "";
29
- }
30
- const firstServer = document.servers[0];
31
- if (!firstServer || !firstServer.url) {
32
- return "";
33
- }
34
- try {
35
- const url = new URL(firstServer.url);
36
- return url.pathname === "/" ? "" : url.pathname;
37
- }
38
- catch {
39
- // If the URL is relative or malformed, treat it as a pathname
40
- const serverUrl = firstServer.url;
41
- // Remove query params and fragments if any
42
- const pathname = serverUrl.split("?")[0].split("#")[0];
43
- // If it doesn't start with /, it's likely a relative path, prepend /
44
- return pathname.startsWith("/") ? pathname : `/${pathname}`;
45
- }
46
- }
47
- /**
48
- * Transform paths by prepending a server pathname to all path keys
49
- */
50
- export function transformPathsWithServerPathname(document, serverPathname) {
51
- if (!serverPathname || serverPathname === "/" || !document.paths) {
52
- return document;
53
- }
54
- // Ensure pathname starts with / and doesn't end with /
55
- const normalizedPathname = serverPathname.startsWith("/")
56
- ? serverPathname
57
- : `/${serverPathname}`;
58
- const finalPathname = normalizedPathname.endsWith("/")
59
- ? normalizedPathname.slice(0, -1)
60
- : normalizedPathname;
61
- const transformedPaths = {};
62
- for (const [path, pathItem] of Object.entries(document.paths)) {
63
- if (pathItem) {
64
- const newPath = `${finalPathname}${path}`;
65
- transformedPaths[newPath] = pathItem;
66
- }
67
- }
68
- return {
69
- ...document,
70
- paths: transformedPaths,
71
- };
72
- }
4
+ import { getAllOperationKeys, getOperationKey, indexOperationsById, } from "./operation-utils.js";
5
+ import { extractServerPathname, transformPathsWithServerPathname, } from "./path-transform.js";
6
+ // Use HTTP_METHODS from constants for internal consistency
7
+ const METHODS = HTTP_METHODS;
73
8
  export const mergeOpenApiDocuments = (originalDocument, newDocument, options) => {
74
9
  // Support backward compatibility with old API
75
10
  const mergeOptions = typeof options === "string" ? { mergeMode: options } : options;
@@ -400,119 +335,4 @@ const mergeOperationObjects = (originalOperationObject, newOperationObject) => {
400
335
  ...newOperationObject,
401
336
  };
402
337
  };
403
- const getAllOperationKeys = (pathsObject) => {
404
- return Object.entries(pathsObject).flatMap(([path, pathObject]) => {
405
- const pathItemObject = pathObject;
406
- const { get, put, post, delete: deleteOperation, options, head, patch, trace, } = pathItemObject;
407
- const methods = [];
408
- if (get) {
409
- methods.push("get");
410
- }
411
- if (put) {
412
- methods.push("put");
413
- }
414
- if (post) {
415
- methods.push("post");
416
- }
417
- if (deleteOperation) {
418
- methods.push("delete");
419
- }
420
- if (options) {
421
- methods.push("options");
422
- }
423
- if (head) {
424
- methods.push("head");
425
- }
426
- if (patch) {
427
- methods.push("patch");
428
- }
429
- if (trace) {
430
- methods.push("trace");
431
- }
432
- return methods.map((method) => getOperationKey(method, path));
433
- });
434
- };
435
- export const getOperationKey = (method, path) => `${method}${OPERATION_PATH_MERGE_DELIMITER}${path}`;
436
- /**
437
- * Create an index of operations by their operationId
438
- *
439
- * @param openapiSpec The OpenAPI specification object
440
- * @returns A map of operationId -> { path, method }
441
- */
442
- const indexOperationsById = (openapiSpec) => {
443
- const operationsIndex = {};
444
- const paths = openapiSpec.paths;
445
- if (paths) {
446
- Object.entries(paths).forEach(([path, pathItem]) => {
447
- if (pathItem) {
448
- METHODS.forEach((method) => {
449
- const operation = pathItem[method];
450
- if (operation?.operationId) {
451
- operationsIndex[operation.operationId] = {
452
- path,
453
- method,
454
- };
455
- }
456
- });
457
- }
458
- });
459
- }
460
- return operationsIndex;
461
- };
462
- /**
463
- * Add operation ID to any operations that don't have one, this makes
464
- * onboarding smoother for new users
465
- */
466
- export const addOperationIdsAsNecessary = (openApi) => {
467
- const paths = openApi.paths;
468
- if (!paths) {
469
- return openApi;
470
- }
471
- for (const path of Object.keys(paths)) {
472
- const pathItem = paths[path];
473
- if (!pathItem) {
474
- continue;
475
- }
476
- const methods = [
477
- "get",
478
- "put",
479
- "post",
480
- "delete",
481
- "options",
482
- "head",
483
- "patch",
484
- "trace",
485
- ];
486
- for (const method of methods) {
487
- const operation = pathItem[method];
488
- if (operation && !operation.operationId) {
489
- operation.operationId = v4();
490
- }
491
- }
492
- }
493
- return openApi;
494
- };
495
- /**
496
- *
497
- */
498
- export const removeOperationsWithoutAnId = (openApi) => {
499
- const newDocument = { ...openApi };
500
- const paths = newDocument.paths;
501
- if (!paths) {
502
- return openApi;
503
- }
504
- for (const path of Object.keys(paths)) {
505
- const pathItem = paths[path];
506
- if (!pathItem) {
507
- continue;
508
- }
509
- for (const method of METHODS) {
510
- const operation = pathItem[method];
511
- if (operation && !operation.operationId) {
512
- delete pathItem[method];
513
- }
514
- }
515
- }
516
- return openApi;
517
- };
518
- //# sourceMappingURL=openapi-utils.js.map
338
+ //# sourceMappingURL=merge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.js","sourceRoot":"","sources":["../src/merge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=merge.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.spec.d.ts","sourceRoot":"","sources":["../src/merge.spec.ts"],"names":[],"mappings":""}