@zuplo/cli 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.
- package/dist/__tests__/import-openapi.test.js +90 -1
- package/dist/__tests__/import-openapi.test.js.map +1 -1
- package/dist/open-api/convert/handler.js +2 -2
- package/dist/open-api/convert/handler.js.map +1 -1
- package/dist/open-api/merge/handler.d.ts +1 -1
- package/dist/open-api/merge/handler.d.ts.map +1 -1
- package/dist/open-api/merge/handler.js +4 -5
- package/dist/open-api/merge/handler.js.map +1 -1
- package/dist/open-api/overlay/handler.js +1 -2
- package/dist/open-api/overlay/handler.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -4
- package/dist/__tests__/import-openapi-utils.test.d.ts +0 -2
- package/dist/__tests__/import-openapi-utils.test.d.ts.map +0 -1
- package/dist/__tests__/import-openapi-utils.test.js +0 -125
- package/dist/__tests__/import-openapi-utils.test.js.map +0 -1
- package/dist/__tests__/oas-test-data.d.ts +0 -98
- package/dist/__tests__/oas-test-data.d.ts.map +0 -1
- package/dist/__tests__/oas-test-data.js +0 -114
- package/dist/__tests__/oas-test-data.js.map +0 -1
- package/dist/common/file-format.d.ts +0 -25
- package/dist/common/file-format.d.ts.map +0 -1
- package/dist/common/file-format.js +0 -72
- package/dist/common/file-format.js.map +0 -1
- package/dist/common/open-api/constants.d.ts +0 -13
- package/dist/common/open-api/constants.d.ts.map +0 -1
- package/dist/common/open-api/constants.js +0 -16
- package/dist/common/open-api/constants.js.map +0 -1
- package/dist/common/open-api/index.d.ts +0 -3
- package/dist/common/open-api/index.d.ts.map +0 -1
- package/dist/common/open-api/index.js +0 -3
- package/dist/common/open-api/index.js.map +0 -1
- package/dist/common/open-api/validation.d.ts +0 -297
- package/dist/common/open-api/validation.d.ts.map +0 -1
- package/dist/common/open-api/validation.js +0 -88
- package/dist/common/open-api/validation.js.map +0 -1
- package/dist/open-api/convert/convert-engine.d.ts +0 -26
- package/dist/open-api/convert/convert-engine.d.ts.map +0 -1
- package/dist/open-api/convert/convert-engine.js +0 -20
- package/dist/open-api/convert/convert-engine.js.map +0 -1
- package/dist/open-api/convert/convert-engine.spec.d.ts +0 -2
- package/dist/open-api/convert/convert-engine.spec.d.ts.map +0 -1
- package/dist/open-api/convert/convert-engine.spec.js +0 -268
- package/dist/open-api/convert/convert-engine.spec.js.map +0 -1
- package/dist/open-api/merge/ajv.d.ts +0 -34
- package/dist/open-api/merge/ajv.d.ts.map +0 -1
- package/dist/open-api/merge/ajv.js +0 -2
- package/dist/open-api/merge/ajv.js.map +0 -1
- package/dist/open-api/merge/interfaces.d.ts +0 -72
- package/dist/open-api/merge/interfaces.d.ts.map +0 -1
- package/dist/open-api/merge/interfaces.js +0 -5
- package/dist/open-api/merge/interfaces.js.map +0 -1
- package/dist/open-api/merge/merge-engine.d.ts +0 -20
- package/dist/open-api/merge/merge-engine.d.ts.map +0 -1
- package/dist/open-api/merge/merge-engine.js +0 -34
- package/dist/open-api/merge/merge-engine.js.map +0 -1
- package/dist/open-api/merge/merge-engine.spec.d.ts +0 -2
- package/dist/open-api/merge/merge-engine.spec.d.ts.map +0 -1
- package/dist/open-api/merge/merge-engine.spec.js +0 -117
- package/dist/open-api/merge/merge-engine.spec.js.map +0 -1
- package/dist/open-api/merge/utils.d.ts +0 -11
- package/dist/open-api/merge/utils.d.ts.map +0 -1
- package/dist/open-api/merge/utils.js +0 -33
- package/dist/open-api/merge/utils.js.map +0 -1
- package/dist/open-api/overlay/overlay-engine.d.ts +0 -45
- package/dist/open-api/overlay/overlay-engine.d.ts.map +0 -1
- package/dist/open-api/overlay/overlay-engine.js +0 -309
- package/dist/open-api/overlay/overlay-engine.js.map +0 -1
- package/dist/open-api/overlay/overlay-engine.spec.d.ts +0 -2
- package/dist/open-api/overlay/overlay-engine.spec.d.ts.map +0 -1
- package/dist/open-api/overlay/overlay-engine.spec.js +0 -687
- package/dist/open-api/overlay/overlay-engine.spec.js.map +0 -1
|
@@ -1,268 +0,0 @@
|
|
|
1
|
-
import assert from "node:assert";
|
|
2
|
-
import { describe, it } from "node:test";
|
|
3
|
-
import { convertDocument, detectFormat, generateOutputPath, parseContent, serializeContent, } from "./convert-engine.js";
|
|
4
|
-
describe("OpenAPI Convert Engine", () => {
|
|
5
|
-
describe("detectFormat", () => {
|
|
6
|
-
it("should detect JSON format from .json extension", () => {
|
|
7
|
-
assert.strictEqual(detectFormat("api.json"), "json");
|
|
8
|
-
assert.strictEqual(detectFormat("/path/to/openapi.json"), "json");
|
|
9
|
-
assert.strictEqual(detectFormat("FILE.JSON"), "json");
|
|
10
|
-
});
|
|
11
|
-
it("should detect YAML format from .yaml extension", () => {
|
|
12
|
-
assert.strictEqual(detectFormat("api.yaml"), "yaml");
|
|
13
|
-
assert.strictEqual(detectFormat("/path/to/openapi.yaml"), "yaml");
|
|
14
|
-
assert.strictEqual(detectFormat("FILE.YAML"), "yaml");
|
|
15
|
-
});
|
|
16
|
-
it("should detect YAML format from .yml extension", () => {
|
|
17
|
-
assert.strictEqual(detectFormat("api.yml"), "yaml");
|
|
18
|
-
assert.strictEqual(detectFormat("/path/to/openapi.yml"), "yaml");
|
|
19
|
-
assert.strictEqual(detectFormat("FILE.YML"), "yaml");
|
|
20
|
-
});
|
|
21
|
-
it("should return null for unknown extensions", () => {
|
|
22
|
-
assert.strictEqual(detectFormat("api.txt"), null);
|
|
23
|
-
assert.strictEqual(detectFormat("api"), null);
|
|
24
|
-
assert.strictEqual(detectFormat("api.xml"), null);
|
|
25
|
-
});
|
|
26
|
-
});
|
|
27
|
-
describe("parseContent", () => {
|
|
28
|
-
it("should parse JSON content", () => {
|
|
29
|
-
const content = '{"openapi": "3.1.0", "info": {"title": "Test"}}';
|
|
30
|
-
const result = parseContent(content, "json");
|
|
31
|
-
assert.deepStrictEqual(result, {
|
|
32
|
-
openapi: "3.1.0",
|
|
33
|
-
info: { title: "Test" },
|
|
34
|
-
});
|
|
35
|
-
});
|
|
36
|
-
it("should parse YAML content", () => {
|
|
37
|
-
const content = `openapi: 3.1.0
|
|
38
|
-
info:
|
|
39
|
-
title: Test
|
|
40
|
-
version: 1.0.0`;
|
|
41
|
-
const result = parseContent(content, "yaml");
|
|
42
|
-
assert.deepStrictEqual(result, {
|
|
43
|
-
openapi: "3.1.0",
|
|
44
|
-
info: { title: "Test", version: "1.0.0" },
|
|
45
|
-
});
|
|
46
|
-
});
|
|
47
|
-
it("should throw error for invalid JSON", () => {
|
|
48
|
-
const content = "{invalid json}";
|
|
49
|
-
assert.throws(() => parseContent(content, "json"), {
|
|
50
|
-
name: "SyntaxError",
|
|
51
|
-
});
|
|
52
|
-
});
|
|
53
|
-
it("should throw error for invalid YAML", () => {
|
|
54
|
-
const content = ":\ninvalid: : yaml";
|
|
55
|
-
assert.throws(() => parseContent(content, "yaml"));
|
|
56
|
-
});
|
|
57
|
-
it("should handle arrays", () => {
|
|
58
|
-
const jsonContent = "[1, 2, 3]";
|
|
59
|
-
const yamlContent = "- 1\n- 2\n- 3";
|
|
60
|
-
assert.deepStrictEqual(parseContent(jsonContent, "json"), [1, 2, 3]);
|
|
61
|
-
assert.deepStrictEqual(parseContent(yamlContent, "yaml"), [1, 2, 3]);
|
|
62
|
-
});
|
|
63
|
-
it("should handle nested structures", () => {
|
|
64
|
-
const content = {
|
|
65
|
-
openapi: "3.1.0",
|
|
66
|
-
paths: {
|
|
67
|
-
"/users": {
|
|
68
|
-
get: {
|
|
69
|
-
summary: "Get users",
|
|
70
|
-
parameters: [{ name: "limit", in: "query" }],
|
|
71
|
-
},
|
|
72
|
-
},
|
|
73
|
-
},
|
|
74
|
-
};
|
|
75
|
-
const jsonContent = JSON.stringify(content);
|
|
76
|
-
const result = parseContent(jsonContent, "json");
|
|
77
|
-
assert.deepStrictEqual(result, content);
|
|
78
|
-
});
|
|
79
|
-
});
|
|
80
|
-
describe("serializeContent", () => {
|
|
81
|
-
const testDocument = {
|
|
82
|
-
openapi: "3.1.0",
|
|
83
|
-
info: {
|
|
84
|
-
title: "Test API",
|
|
85
|
-
version: "1.0.0",
|
|
86
|
-
},
|
|
87
|
-
};
|
|
88
|
-
it("should serialize to JSON with proper formatting", () => {
|
|
89
|
-
const result = serializeContent(testDocument, "json");
|
|
90
|
-
assert.strictEqual(typeof result, "string");
|
|
91
|
-
assert.strictEqual(result.includes('"openapi": "3.1.0"'), true);
|
|
92
|
-
assert.strictEqual(result.includes('"title": "Test API"'), true);
|
|
93
|
-
assert.strictEqual(result.endsWith("\n"), true);
|
|
94
|
-
const parsed = JSON.parse(result);
|
|
95
|
-
assert.deepStrictEqual(parsed, testDocument);
|
|
96
|
-
});
|
|
97
|
-
it("should serialize to YAML with proper formatting", () => {
|
|
98
|
-
const result = serializeContent(testDocument, "yaml");
|
|
99
|
-
assert.strictEqual(typeof result, "string");
|
|
100
|
-
assert.strictEqual(result.includes("openapi: 3.1.0"), true);
|
|
101
|
-
assert.strictEqual(result.includes("title: Test API"), true);
|
|
102
|
-
assert.strictEqual(result.includes("version: 1.0.0"), true);
|
|
103
|
-
});
|
|
104
|
-
it("should handle arrays in JSON", () => {
|
|
105
|
-
const doc = { items: [1, 2, 3] };
|
|
106
|
-
const result = serializeContent(doc, "json");
|
|
107
|
-
assert.strictEqual(result.includes('"items": [\n'), true);
|
|
108
|
-
const parsed = JSON.parse(result);
|
|
109
|
-
assert.deepStrictEqual(parsed, doc);
|
|
110
|
-
});
|
|
111
|
-
it("should handle arrays in YAML", () => {
|
|
112
|
-
const doc = { items: [1, 2, 3] };
|
|
113
|
-
const result = serializeContent(doc, "yaml");
|
|
114
|
-
assert.strictEqual(result.includes("items:"), true);
|
|
115
|
-
assert.strictEqual(result.includes("- 1"), true);
|
|
116
|
-
});
|
|
117
|
-
it("should handle special characters in YAML", () => {
|
|
118
|
-
const doc = {
|
|
119
|
-
description: 'This has a colon: and quotes "test"',
|
|
120
|
-
};
|
|
121
|
-
const result = serializeContent(doc, "yaml");
|
|
122
|
-
assert.strictEqual(typeof result, "string");
|
|
123
|
-
assert.strictEqual(result.includes("description:"), true);
|
|
124
|
-
});
|
|
125
|
-
it("should handle null values", () => {
|
|
126
|
-
const doc = { value: null };
|
|
127
|
-
const jsonResult = serializeContent(doc, "json");
|
|
128
|
-
const yamlResult = serializeContent(doc, "yaml");
|
|
129
|
-
assert.strictEqual(jsonResult.includes('"value": null'), true);
|
|
130
|
-
assert.strictEqual(yamlResult.includes("value:"), true);
|
|
131
|
-
});
|
|
132
|
-
});
|
|
133
|
-
describe("convertDocument", () => {
|
|
134
|
-
const testDocument = {
|
|
135
|
-
openapi: "3.1.0",
|
|
136
|
-
info: {
|
|
137
|
-
title: "Test API",
|
|
138
|
-
version: "1.0.0",
|
|
139
|
-
},
|
|
140
|
-
paths: {},
|
|
141
|
-
};
|
|
142
|
-
it("should convert from JSON to YAML", () => {
|
|
143
|
-
const jsonContent = JSON.stringify(testDocument);
|
|
144
|
-
const result = convertDocument(jsonContent, "json", "yaml");
|
|
145
|
-
assert.strictEqual(result.format, "yaml");
|
|
146
|
-
assert.strictEqual(typeof result.content, "string");
|
|
147
|
-
assert.strictEqual(result.content.includes("openapi: 3.1.0"), true);
|
|
148
|
-
assert.strictEqual(result.content.includes("title: Test API"), true);
|
|
149
|
-
});
|
|
150
|
-
it("should convert from YAML to JSON", () => {
|
|
151
|
-
const yamlContent = `openapi: 3.1.0
|
|
152
|
-
info:
|
|
153
|
-
title: Test API
|
|
154
|
-
version: 1.0.0
|
|
155
|
-
paths: {}`;
|
|
156
|
-
const result = convertDocument(yamlContent, "yaml", "json");
|
|
157
|
-
assert.strictEqual(result.format, "json");
|
|
158
|
-
assert.strictEqual(typeof result.content, "string");
|
|
159
|
-
const parsed = JSON.parse(result.content);
|
|
160
|
-
assert.strictEqual(parsed.openapi, "3.1.0");
|
|
161
|
-
assert.strictEqual(parsed.info.title, "Test API");
|
|
162
|
-
});
|
|
163
|
-
it("should preserve data through JSON to YAML to JSON conversion", () => {
|
|
164
|
-
const originalJson = JSON.stringify(testDocument);
|
|
165
|
-
const yamlResult = convertDocument(originalJson, "json", "yaml");
|
|
166
|
-
const jsonResult = convertDocument(yamlResult.content, "yaml", "json");
|
|
167
|
-
const finalDocument = JSON.parse(jsonResult.content);
|
|
168
|
-
assert.deepStrictEqual(finalDocument, testDocument);
|
|
169
|
-
});
|
|
170
|
-
it("should preserve data through YAML to JSON to YAML conversion", () => {
|
|
171
|
-
const originalYaml = `openapi: 3.1.0
|
|
172
|
-
info:
|
|
173
|
-
title: Test API
|
|
174
|
-
version: 1.0.0
|
|
175
|
-
paths: {}`;
|
|
176
|
-
const originalDoc = parseContent(originalYaml, "yaml");
|
|
177
|
-
const jsonResult = convertDocument(originalYaml, "yaml", "json");
|
|
178
|
-
const yamlResult = convertDocument(jsonResult.content, "json", "yaml");
|
|
179
|
-
const finalDocument = parseContent(yamlResult.content, "yaml");
|
|
180
|
-
assert.deepStrictEqual(finalDocument, originalDoc);
|
|
181
|
-
});
|
|
182
|
-
it("should handle complex nested structures", () => {
|
|
183
|
-
const complexDoc = {
|
|
184
|
-
openapi: "3.1.0",
|
|
185
|
-
paths: {
|
|
186
|
-
"/users/{id}": {
|
|
187
|
-
get: {
|
|
188
|
-
parameters: [
|
|
189
|
-
{ name: "id", in: "path", required: true },
|
|
190
|
-
{ name: "fields", in: "query", required: false },
|
|
191
|
-
],
|
|
192
|
-
responses: {
|
|
193
|
-
"200": {
|
|
194
|
-
description: "Success",
|
|
195
|
-
content: {
|
|
196
|
-
"application/json": {
|
|
197
|
-
schema: {
|
|
198
|
-
type: "object",
|
|
199
|
-
properties: {
|
|
200
|
-
id: { type: "string" },
|
|
201
|
-
name: { type: "string" },
|
|
202
|
-
},
|
|
203
|
-
},
|
|
204
|
-
},
|
|
205
|
-
},
|
|
206
|
-
},
|
|
207
|
-
},
|
|
208
|
-
},
|
|
209
|
-
},
|
|
210
|
-
},
|
|
211
|
-
};
|
|
212
|
-
const jsonContent = JSON.stringify(complexDoc);
|
|
213
|
-
const yamlResult = convertDocument(jsonContent, "json", "yaml");
|
|
214
|
-
const backToJson = convertDocument(yamlResult.content, "yaml", "json");
|
|
215
|
-
const finalDoc = JSON.parse(backToJson.content);
|
|
216
|
-
assert.deepStrictEqual(finalDoc, complexDoc);
|
|
217
|
-
});
|
|
218
|
-
it("should handle empty objects and arrays", () => {
|
|
219
|
-
const doc = {
|
|
220
|
-
empty_object: {},
|
|
221
|
-
empty_array: [],
|
|
222
|
-
nested: {
|
|
223
|
-
also_empty: {},
|
|
224
|
-
},
|
|
225
|
-
};
|
|
226
|
-
const jsonContent = JSON.stringify(doc);
|
|
227
|
-
const yamlResult = convertDocument(jsonContent, "json", "yaml");
|
|
228
|
-
const backToJson = convertDocument(yamlResult.content, "yaml", "json");
|
|
229
|
-
const finalDoc = JSON.parse(backToJson.content);
|
|
230
|
-
assert.deepStrictEqual(finalDoc, doc);
|
|
231
|
-
});
|
|
232
|
-
});
|
|
233
|
-
describe("generateOutputPath", () => {
|
|
234
|
-
it("should replace .json with .yaml", () => {
|
|
235
|
-
assert.strictEqual(generateOutputPath("api.json", "yaml"), "api.yaml");
|
|
236
|
-
});
|
|
237
|
-
it("should replace .yaml with .json", () => {
|
|
238
|
-
assert.strictEqual(generateOutputPath("api.yaml", "json"), "api.json");
|
|
239
|
-
});
|
|
240
|
-
it("should replace .yml with .json", () => {
|
|
241
|
-
assert.strictEqual(generateOutputPath("api.yml", "json"), "api.json");
|
|
242
|
-
});
|
|
243
|
-
it("should handle paths with directories", () => {
|
|
244
|
-
assert.strictEqual(generateOutputPath("/path/to/api.json", "yaml"), "/path/to/api.yaml");
|
|
245
|
-
assert.strictEqual(generateOutputPath("/path/to/api.yaml", "json"), "/path/to/api.json");
|
|
246
|
-
});
|
|
247
|
-
it("should handle relative paths", () => {
|
|
248
|
-
assert.strictEqual(generateOutputPath("./docs/api.json", "yaml"), "./docs/api.yaml");
|
|
249
|
-
assert.strictEqual(generateOutputPath("../specs/api.yaml", "json"), "../specs/api.json");
|
|
250
|
-
});
|
|
251
|
-
it("should handle files with multiple dots in name", () => {
|
|
252
|
-
assert.strictEqual(generateOutputPath("api.v1.0.json", "yaml"), "api.v1.0.yaml");
|
|
253
|
-
assert.strictEqual(generateOutputPath("my.api.spec.yaml", "json"), "my.api.spec.json");
|
|
254
|
-
});
|
|
255
|
-
it("should append extension if file has no extension", () => {
|
|
256
|
-
assert.strictEqual(generateOutputPath("api", "json"), "api.json");
|
|
257
|
-
assert.strictEqual(generateOutputPath("openapi", "yaml"), "openapi.yaml");
|
|
258
|
-
});
|
|
259
|
-
it("should handle Windows-style paths", () => {
|
|
260
|
-
assert.strictEqual(generateOutputPath("C:\\Users\\docs\\api.json", "yaml"), "C:\\Users\\docs\\api.yaml");
|
|
261
|
-
});
|
|
262
|
-
it("should always use .yaml extension (not .yml) for yaml output", () => {
|
|
263
|
-
assert.strictEqual(generateOutputPath("api.yml", "yaml"), "api.yaml");
|
|
264
|
-
assert.strictEqual(generateOutputPath("api.json", "yaml"), "api.yaml");
|
|
265
|
-
});
|
|
266
|
-
});
|
|
267
|
-
});
|
|
268
|
-
//# sourceMappingURL=convert-engine.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"convert-engine.spec.js","sourceRoot":"","sources":["../../../src/open-api/convert/convert-engine.spec.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from \"node:assert\";\nimport { describe, it } from \"node:test\";\nimport {\n convertDocument,\n detectFormat,\n generateOutputPath,\n parseContent,\n serializeContent,\n} from \"./convert-engine.js\";\n\ndescribe(\"OpenAPI Convert Engine\", () => {\n describe(\"detectFormat\", () => {\n it(\"should detect JSON format from .json extension\", () => {\n assert.strictEqual(detectFormat(\"api.json\"), \"json\");\n assert.strictEqual(detectFormat(\"/path/to/openapi.json\"), \"json\");\n assert.strictEqual(detectFormat(\"FILE.JSON\"), \"json\");\n });\n\n it(\"should detect YAML format from .yaml extension\", () => {\n assert.strictEqual(detectFormat(\"api.yaml\"), \"yaml\");\n assert.strictEqual(detectFormat(\"/path/to/openapi.yaml\"), \"yaml\");\n assert.strictEqual(detectFormat(\"FILE.YAML\"), \"yaml\");\n });\n\n it(\"should detect YAML format from .yml extension\", () => {\n assert.strictEqual(detectFormat(\"api.yml\"), \"yaml\");\n assert.strictEqual(detectFormat(\"/path/to/openapi.yml\"), \"yaml\");\n assert.strictEqual(detectFormat(\"FILE.YML\"), \"yaml\");\n });\n\n it(\"should return null for unknown extensions\", () => {\n assert.strictEqual(detectFormat(\"api.txt\"), null);\n assert.strictEqual(detectFormat(\"api\"), null);\n assert.strictEqual(detectFormat(\"api.xml\"), null);\n });\n });\n\n describe(\"parseContent\", () => {\n it(\"should parse JSON content\", () => {\n const content = '{\"openapi\": \"3.1.0\", \"info\": {\"title\": \"Test\"}}';\n const result = parseContent(content, \"json\");\n\n assert.deepStrictEqual(result, {\n openapi: \"3.1.0\",\n info: { title: \"Test\" },\n });\n });\n\n it(\"should parse YAML content\", () => {\n const content = `openapi: 3.1.0\ninfo:\n title: Test\n version: 1.0.0`;\n const result = parseContent(content, \"yaml\");\n\n assert.deepStrictEqual(result, {\n openapi: \"3.1.0\",\n info: { title: \"Test\", version: \"1.0.0\" },\n });\n });\n\n it(\"should throw error for invalid JSON\", () => {\n const content = \"{invalid json}\";\n assert.throws(() => parseContent(content, \"json\"), {\n name: \"SyntaxError\",\n });\n });\n\n it(\"should throw error for invalid YAML\", () => {\n const content = \":\\ninvalid: : yaml\";\n assert.throws(() => parseContent(content, \"yaml\"));\n });\n\n it(\"should handle arrays\", () => {\n const jsonContent = \"[1, 2, 3]\";\n const yamlContent = \"- 1\\n- 2\\n- 3\";\n\n assert.deepStrictEqual(parseContent(jsonContent, \"json\"), [1, 2, 3]);\n assert.deepStrictEqual(parseContent(yamlContent, \"yaml\"), [1, 2, 3]);\n });\n\n it(\"should handle nested structures\", () => {\n const content = {\n openapi: \"3.1.0\",\n paths: {\n \"/users\": {\n get: {\n summary: \"Get users\",\n parameters: [{ name: \"limit\", in: \"query\" }],\n },\n },\n },\n };\n\n const jsonContent = JSON.stringify(content);\n const result = parseContent(jsonContent, \"json\");\n\n assert.deepStrictEqual(result, content);\n });\n });\n\n describe(\"serializeContent\", () => {\n const testDocument = {\n openapi: \"3.1.0\",\n info: {\n title: \"Test API\",\n version: \"1.0.0\",\n },\n };\n\n it(\"should serialize to JSON with proper formatting\", () => {\n const result = serializeContent(testDocument, \"json\");\n\n assert.strictEqual(typeof result, \"string\");\n assert.strictEqual(result.includes('\"openapi\": \"3.1.0\"'), true);\n assert.strictEqual(result.includes('\"title\": \"Test API\"'), true);\n assert.strictEqual(result.endsWith(\"\\n\"), true);\n\n // Verify it's valid JSON\n const parsed = JSON.parse(result);\n assert.deepStrictEqual(parsed, testDocument);\n });\n\n it(\"should serialize to YAML with proper formatting\", () => {\n const result = serializeContent(testDocument, \"yaml\");\n\n assert.strictEqual(typeof result, \"string\");\n assert.strictEqual(result.includes(\"openapi: 3.1.0\"), true);\n assert.strictEqual(result.includes(\"title: Test API\"), true);\n assert.strictEqual(result.includes(\"version: 1.0.0\"), true);\n });\n\n it(\"should handle arrays in JSON\", () => {\n const doc = { items: [1, 2, 3] };\n const result = serializeContent(doc, \"json\");\n\n assert.strictEqual(result.includes('\"items\": [\\n'), true);\n const parsed = JSON.parse(result);\n assert.deepStrictEqual(parsed, doc);\n });\n\n it(\"should handle arrays in YAML\", () => {\n const doc = { items: [1, 2, 3] };\n const result = serializeContent(doc, \"yaml\");\n\n assert.strictEqual(result.includes(\"items:\"), true);\n assert.strictEqual(result.includes(\"- 1\"), true);\n });\n\n it(\"should handle special characters in YAML\", () => {\n const doc = {\n description: 'This has a colon: and quotes \"test\"',\n };\n const result = serializeContent(doc, \"yaml\");\n\n assert.strictEqual(typeof result, \"string\");\n // Should be properly escaped\n assert.strictEqual(result.includes(\"description:\"), true);\n });\n\n it(\"should handle null values\", () => {\n const doc = { value: null };\n const jsonResult = serializeContent(doc, \"json\");\n const yamlResult = serializeContent(doc, \"yaml\");\n\n assert.strictEqual(jsonResult.includes('\"value\": null'), true);\n assert.strictEqual(yamlResult.includes(\"value:\"), true);\n });\n });\n\n describe(\"convertDocument\", () => {\n const testDocument = {\n openapi: \"3.1.0\",\n info: {\n title: \"Test API\",\n version: \"1.0.0\",\n },\n paths: {},\n };\n\n it(\"should convert from JSON to YAML\", () => {\n const jsonContent = JSON.stringify(testDocument);\n const result = convertDocument(jsonContent, \"json\", \"yaml\");\n\n assert.strictEqual(result.format, \"yaml\");\n assert.strictEqual(typeof result.content, \"string\");\n assert.strictEqual(result.content.includes(\"openapi: 3.1.0\"), true);\n assert.strictEqual(result.content.includes(\"title: Test API\"), true);\n });\n\n it(\"should convert from YAML to JSON\", () => {\n const yamlContent = `openapi: 3.1.0\ninfo:\n title: Test API\n version: 1.0.0\npaths: {}`;\n const result = convertDocument(yamlContent, \"yaml\", \"json\");\n\n assert.strictEqual(result.format, \"json\");\n assert.strictEqual(typeof result.content, \"string\");\n\n const parsed = JSON.parse(result.content);\n assert.strictEqual(parsed.openapi, \"3.1.0\");\n assert.strictEqual(parsed.info.title, \"Test API\");\n });\n\n it(\"should preserve data through JSON to YAML to JSON conversion\", () => {\n const originalJson = JSON.stringify(testDocument);\n\n // JSON -> YAML\n const yamlResult = convertDocument(originalJson, \"json\", \"yaml\");\n\n // YAML -> JSON\n const jsonResult = convertDocument(yamlResult.content, \"yaml\", \"json\");\n\n const finalDocument = JSON.parse(jsonResult.content);\n assert.deepStrictEqual(finalDocument, testDocument);\n });\n\n it(\"should preserve data through YAML to JSON to YAML conversion\", () => {\n const originalYaml = `openapi: 3.1.0\ninfo:\n title: Test API\n version: 1.0.0\npaths: {}`;\n\n // Parse original to compare\n const originalDoc = parseContent(originalYaml, \"yaml\");\n\n // YAML -> JSON\n const jsonResult = convertDocument(originalYaml, \"yaml\", \"json\");\n\n // JSON -> YAML\n const yamlResult = convertDocument(jsonResult.content, \"json\", \"yaml\");\n\n const finalDocument = parseContent(yamlResult.content, \"yaml\");\n assert.deepStrictEqual(finalDocument, originalDoc);\n });\n\n it(\"should handle complex nested structures\", () => {\n const complexDoc = {\n openapi: \"3.1.0\",\n paths: {\n \"/users/{id}\": {\n get: {\n parameters: [\n { name: \"id\", in: \"path\", required: true },\n { name: \"fields\", in: \"query\", required: false },\n ],\n responses: {\n \"200\": {\n description: \"Success\",\n content: {\n \"application/json\": {\n schema: {\n type: \"object\",\n properties: {\n id: { type: \"string\" },\n name: { type: \"string\" },\n },\n },\n },\n },\n },\n },\n },\n },\n },\n };\n\n const jsonContent = JSON.stringify(complexDoc);\n const yamlResult = convertDocument(jsonContent, \"json\", \"yaml\");\n const backToJson = convertDocument(yamlResult.content, \"yaml\", \"json\");\n\n const finalDoc = JSON.parse(backToJson.content);\n assert.deepStrictEqual(finalDoc, complexDoc);\n });\n\n it(\"should handle empty objects and arrays\", () => {\n const doc = {\n empty_object: {},\n empty_array: [],\n nested: {\n also_empty: {},\n },\n };\n\n const jsonContent = JSON.stringify(doc);\n const yamlResult = convertDocument(jsonContent, \"json\", \"yaml\");\n const backToJson = convertDocument(yamlResult.content, \"yaml\", \"json\");\n\n const finalDoc = JSON.parse(backToJson.content);\n assert.deepStrictEqual(finalDoc, doc);\n });\n });\n\n describe(\"generateOutputPath\", () => {\n it(\"should replace .json with .yaml\", () => {\n assert.strictEqual(generateOutputPath(\"api.json\", \"yaml\"), \"api.yaml\");\n });\n\n it(\"should replace .yaml with .json\", () => {\n assert.strictEqual(generateOutputPath(\"api.yaml\", \"json\"), \"api.json\");\n });\n\n it(\"should replace .yml with .json\", () => {\n assert.strictEqual(generateOutputPath(\"api.yml\", \"json\"), \"api.json\");\n });\n\n it(\"should handle paths with directories\", () => {\n assert.strictEqual(\n generateOutputPath(\"/path/to/api.json\", \"yaml\"),\n \"/path/to/api.yaml\"\n );\n assert.strictEqual(\n generateOutputPath(\"/path/to/api.yaml\", \"json\"),\n \"/path/to/api.json\"\n );\n });\n\n it(\"should handle relative paths\", () => {\n assert.strictEqual(\n generateOutputPath(\"./docs/api.json\", \"yaml\"),\n \"./docs/api.yaml\"\n );\n assert.strictEqual(\n generateOutputPath(\"../specs/api.yaml\", \"json\"),\n \"../specs/api.json\"\n );\n });\n\n it(\"should handle files with multiple dots in name\", () => {\n assert.strictEqual(\n generateOutputPath(\"api.v1.0.json\", \"yaml\"),\n \"api.v1.0.yaml\"\n );\n assert.strictEqual(\n generateOutputPath(\"my.api.spec.yaml\", \"json\"),\n \"my.api.spec.json\"\n );\n });\n\n it(\"should append extension if file has no extension\", () => {\n assert.strictEqual(generateOutputPath(\"api\", \"json\"), \"api.json\");\n assert.strictEqual(generateOutputPath(\"openapi\", \"yaml\"), \"openapi.yaml\");\n });\n\n it(\"should handle Windows-style paths\", () => {\n assert.strictEqual(\n generateOutputPath(\"C:\\\\Users\\\\docs\\\\api.json\", \"yaml\"),\n \"C:\\\\Users\\\\docs\\\\api.yaml\"\n );\n });\n\n it(\"should always use .yaml extension (not .yml) for yaml output\", () => {\n assert.strictEqual(generateOutputPath(\"api.yml\", \"yaml\"), \"api.yaml\");\n assert.strictEqual(generateOutputPath(\"api.json\", \"yaml\"), \"api.yaml\");\n });\n });\n});\n"]}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
export interface ErrorObject<
|
|
2
|
-
K extends string = string,
|
|
3
|
-
P = Record<string, any>,
|
|
4
|
-
S = unknown,
|
|
5
|
-
> {
|
|
6
|
-
keyword: K;
|
|
7
|
-
instancePath: string;
|
|
8
|
-
schemaPath: string;
|
|
9
|
-
params: P;
|
|
10
|
-
propertyName?: string;
|
|
11
|
-
message?: string;
|
|
12
|
-
schema?: S;
|
|
13
|
-
parentSchema?: AnySchemaObject;
|
|
14
|
-
data?: unknown;
|
|
15
|
-
}
|
|
16
|
-
interface _SchemaObject {
|
|
17
|
-
id?: string;
|
|
18
|
-
$id?: string;
|
|
19
|
-
$schema?: string;
|
|
20
|
-
[x: string]: any;
|
|
21
|
-
}
|
|
22
|
-
export interface SchemaObject extends _SchemaObject {
|
|
23
|
-
id?: string;
|
|
24
|
-
$id?: string;
|
|
25
|
-
$schema?: string;
|
|
26
|
-
$async?: false;
|
|
27
|
-
[x: string]: any;
|
|
28
|
-
}
|
|
29
|
-
export interface AsyncSchema extends _SchemaObject {
|
|
30
|
-
$async: true;
|
|
31
|
-
}
|
|
32
|
-
export type AnySchemaObject = SchemaObject | AsyncSchema;
|
|
33
|
-
export {};
|
|
34
|
-
//# sourceMappingURL=ajv.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ajv.d.ts","sourceRoot":"","sources":["../../../src/open-api/merge/ajv.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAW,CAC1B,CAAC,SAAS,MAAM,GAAG,MAAM,EACzB,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACvB,CAAC,GAAG,OAAO;IAEX,OAAO,EAAE,CAAC,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,CAAC,CAAC;IACV,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,YAAY,CAAC,EAAE,eAAe,CAAC;IAC/B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAGD,UAAU,aAAa;IACrB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;CAClB;AACD,MAAM,WAAW,YAAa,SAAQ,aAAa;IACjD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;CAClB;AACD,MAAM,WAAW,WAAY,SAAQ,aAAa;IAChD,MAAM,EAAE,IAAI,CAAC;CACd;AACD,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,WAAW,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ajv.js","sourceRoot":"","sources":["../../../src/open-api/merge/ajv.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * This file contains types copied from AJV to avoid a direct dependency on it.\n *\n */\n\n/** biome-ignore-all lint/suspicious/noExplicitAny: Third party api */\nexport interface ErrorObject<\n K extends string = string,\n P = Record<string, any>,\n S = unknown,\n> {\n keyword: K;\n instancePath: string;\n schemaPath: string;\n params: P;\n propertyName?: string;\n message?: string;\n schema?: S;\n parentSchema?: AnySchemaObject;\n data?: unknown;\n}\n\n// biome-ignore lint/style/useNamingConvention: Copy from AJV\ninterface _SchemaObject {\n id?: string;\n $id?: string;\n $schema?: string;\n [x: string]: any;\n}\nexport interface SchemaObject extends _SchemaObject {\n id?: string;\n $id?: string;\n $schema?: string;\n $async?: false;\n [x: string]: any;\n}\nexport interface AsyncSchema extends _SchemaObject {\n $async: true;\n}\nexport type AnySchemaObject = SchemaObject | AsyncSchema;\n"]}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import { RouteConfiguration } from "@zuplo/runtime";
|
|
2
|
-
import { OpenAPIV3_1 } from "openapi-types";
|
|
3
|
-
import type { ErrorObject } from "./ajv.js";
|
|
4
|
-
export type ValidationResult = {
|
|
5
|
-
isValid: boolean;
|
|
6
|
-
errors: ErrorObject[];
|
|
7
|
-
warnings: ErrorObject[];
|
|
8
|
-
};
|
|
9
|
-
type Modify<T, R> = Omit<T, keyof R> & R;
|
|
10
|
-
export type ZuploHttpMethods = OpenAPIV3_1.HttpMethods | string;
|
|
11
|
-
export declare const ZUPLO_OPEN_API_VENDOR_PREFIX = "x-zuplo";
|
|
12
|
-
export declare const OPEN_API_INTERNAL_PROPERTY_VENDOR_TAG = "x-internal";
|
|
13
|
-
export declare const ZUPLO_OPEN_API_PATH_KEY: "x-zuplo-path";
|
|
14
|
-
export declare const ZUPLO_OPEN_API_ROUTE_KEY: "x-zuplo-route";
|
|
15
|
-
export type ZuploOpenApiDocument = Modify<
|
|
16
|
-
OpenAPIV3_1.Document<ZuploOpenApiOperationExtension>,
|
|
17
|
-
{
|
|
18
|
-
paths: ZuploOpenApiPathsObject | undefined;
|
|
19
|
-
}
|
|
20
|
-
>;
|
|
21
|
-
export type ZuploOpenApiPathsObject = Record<
|
|
22
|
-
string,
|
|
23
|
-
ZuploOpenApiPathItemObject | undefined
|
|
24
|
-
>;
|
|
25
|
-
export type ZuploOpenApiPathItemObject = Modify<
|
|
26
|
-
OpenAPIV3_1.PathItemObject<ZuploOpenApiOperationExtension> &
|
|
27
|
-
ZuploOpenApiPathItemExtension,
|
|
28
|
-
{
|
|
29
|
-
get?: ZuploOpenApiOperationObject;
|
|
30
|
-
put?: ZuploOpenApiOperationObject;
|
|
31
|
-
post?: ZuploOpenApiOperationObject;
|
|
32
|
-
delete?: ZuploOpenApiOperationObject;
|
|
33
|
-
options?: ZuploOpenApiOperationObject;
|
|
34
|
-
head?: ZuploOpenApiOperationObject;
|
|
35
|
-
patch?: ZuploOpenApiOperationObject;
|
|
36
|
-
trace?: ZuploOpenApiOperationObject;
|
|
37
|
-
}
|
|
38
|
-
>;
|
|
39
|
-
export type ZuploOpenApiPathItemExtension = {
|
|
40
|
-
[ZUPLO_OPEN_API_PATH_KEY]?: ZuploOpenApiPathItemProperties;
|
|
41
|
-
};
|
|
42
|
-
export type ZuploOpenApiPathItemProperties = {
|
|
43
|
-
pathMode: PathMode;
|
|
44
|
-
};
|
|
45
|
-
export type PathMode = "open-api" | "url-pattern";
|
|
46
|
-
export type ZuploOpenApiOperationObject = Modify<
|
|
47
|
-
OpenAPIV3_1.OperationObject<ZuploOpenApiOperationExtension>,
|
|
48
|
-
{
|
|
49
|
-
operationId: string;
|
|
50
|
-
}
|
|
51
|
-
>;
|
|
52
|
-
export type ZuploOpenApiOperationProperties = Omit<
|
|
53
|
-
RouteConfiguration,
|
|
54
|
-
| "operationId"
|
|
55
|
-
| "path"
|
|
56
|
-
| "methods"
|
|
57
|
-
| "label"
|
|
58
|
-
| "key"
|
|
59
|
-
| "summary"
|
|
60
|
-
| "description"
|
|
61
|
-
| "parameters"
|
|
62
|
-
| "responses"
|
|
63
|
-
| "tags"
|
|
64
|
-
| "version"
|
|
65
|
-
| "raw"
|
|
66
|
-
>;
|
|
67
|
-
export type ZuploOpenApiOperationExtension = {
|
|
68
|
-
[ZUPLO_OPEN_API_ROUTE_KEY]?: ZuploOpenApiOperationProperties;
|
|
69
|
-
[OPEN_API_INTERNAL_PROPERTY_VENDOR_TAG]?: boolean;
|
|
70
|
-
};
|
|
71
|
-
export {};
|
|
72
|
-
//# sourceMappingURL=interfaces.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../src/open-api/merge/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB,CAAC;AAEF,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,MAAM,6BAA6B,GAAG;IAC1C,CAAC,uBAAuB,CAAC,CAAC,EAAE,8BAA8B,CAAC;CAC5D,CAAC;AACF,MAAM,MAAM,8BAA8B,GAAG;IAC3C,QAAQ,EAAE,QAAQ,CAAC;CACpB,CAAC;AACF,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,MAAM,8BAA8B,GAAG;IAC3C,CAAC,wBAAwB,CAAC,CAAC,EAAE,+BAA+B,CAAC;IAC7D,CAAC,qCAAqC,CAAC,CAAC,EAAE,OAAO,CAAC;CACnD,CAAC"}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
export const ZUPLO_OPEN_API_VENDOR_PREFIX = "x-zuplo";
|
|
2
|
-
export const OPEN_API_INTERNAL_PROPERTY_VENDOR_TAG = "x-internal";
|
|
3
|
-
export const ZUPLO_OPEN_API_PATH_KEY = `${ZUPLO_OPEN_API_VENDOR_PREFIX}-path`;
|
|
4
|
-
export const ZUPLO_OPEN_API_ROUTE_KEY = `${ZUPLO_OPEN_API_VENDOR_PREFIX}-route`;
|
|
5
|
-
//# sourceMappingURL=interfaces.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../src/open-api/merge/interfaces.ts"],"names":[],"mappings":"AAcA,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","sourcesContent":["import { RouteConfiguration } from \"@zuplo/runtime\";\nimport { OpenAPIV3_1 } from \"openapi-types\";\nimport type { ErrorObject } from \"./ajv.js\";\n\nexport type ValidationResult = {\n isValid: boolean;\n errors: ErrorObject[];\n warnings: ErrorObject[];\n};\n\ntype Modify<T, R> = Omit<T, keyof R> & R;\nexport type ZuploHttpMethods = OpenAPIV3_1.HttpMethods | string;\n\n// TODO: This should all be moved to the backend eventually\nexport const ZUPLO_OPEN_API_VENDOR_PREFIX = \"x-zuplo\";\nexport const OPEN_API_INTERNAL_PROPERTY_VENDOR_TAG = \"x-internal\";\nexport const ZUPLO_OPEN_API_PATH_KEY =\n `${ZUPLO_OPEN_API_VENDOR_PREFIX}-path` as const;\nexport const ZUPLO_OPEN_API_ROUTE_KEY =\n `${ZUPLO_OPEN_API_VENDOR_PREFIX}-route` as const;\n\nexport type ZuploOpenApiDocument = Modify<\n OpenAPIV3_1.Document<ZuploOpenApiOperationExtension>,\n {\n paths: ZuploOpenApiPathsObject | undefined;\n }\n>;\nexport type ZuploOpenApiPathsObject = Record<\n string,\n ZuploOpenApiPathItemObject | undefined\n>;\nexport type ZuploOpenApiPathItemObject = Modify<\n OpenAPIV3_1.PathItemObject<ZuploOpenApiOperationExtension> &\n ZuploOpenApiPathItemExtension,\n {\n get?: ZuploOpenApiOperationObject;\n put?: ZuploOpenApiOperationObject;\n post?: ZuploOpenApiOperationObject;\n delete?: ZuploOpenApiOperationObject;\n options?: ZuploOpenApiOperationObject;\n head?: ZuploOpenApiOperationObject;\n patch?: ZuploOpenApiOperationObject;\n trace?: ZuploOpenApiOperationObject;\n }\n>;\nexport type ZuploOpenApiPathItemExtension = {\n [ZUPLO_OPEN_API_PATH_KEY]?: ZuploOpenApiPathItemProperties;\n};\nexport type ZuploOpenApiPathItemProperties = {\n pathMode: PathMode;\n};\nexport type PathMode = \"open-api\" | \"url-pattern\";\nexport type ZuploOpenApiOperationObject = Modify<\n OpenAPIV3_1.OperationObject<ZuploOpenApiOperationExtension>,\n { operationId: string }\n>;\nexport type ZuploOpenApiOperationProperties = Omit<\n RouteConfiguration,\n | \"operationId\"\n | \"path\"\n | \"methods\"\n | \"label\"\n | \"key\"\n | \"summary\"\n | \"description\"\n | \"parameters\"\n | \"responses\"\n | \"tags\"\n | \"version\"\n | \"raw\"\n>;\nexport type ZuploOpenApiOperationExtension = {\n [ZUPLO_OPEN_API_ROUTE_KEY]?: ZuploOpenApiOperationProperties;\n [OPEN_API_INTERNAL_PROPERTY_VENDOR_TAG]?: boolean;\n};\n"]}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
detectFormatFromContent as detectFormatFromContentCommon,
|
|
3
|
-
detectFormatFromExtension,
|
|
4
|
-
type FileFormat,
|
|
5
|
-
} from "../../common/file-format.js";
|
|
6
|
-
import { OPEN_API_FILE_TYPES } from "../../common/open-api/index.js";
|
|
7
|
-
import type { ZuploOpenApiDocument } from "./interfaces.js";
|
|
8
|
-
import { addOperationIdsAsNecessary, parseOpenApiFile } from "./utils.js";
|
|
9
|
-
export type MergeMode = "path-method" | "operation-id";
|
|
10
|
-
export type { ZuploOpenApiDocument, FileFormat };
|
|
11
|
-
export { OPEN_API_FILE_TYPES, addOperationIdsAsNecessary, parseOpenApiFile };
|
|
12
|
-
export {
|
|
13
|
-
detectFormatFromExtension as detectFormat,
|
|
14
|
-
detectFormatFromContentCommon as detectFormatFromContent,
|
|
15
|
-
};
|
|
16
|
-
export declare const BASE_TEMPLATE =
|
|
17
|
-
'\n{\n "openapi": "3.1.0",\n "info": {\n "version": "1.0.0",\n "title": "My Zuplo API"\n },\n "paths": {}\n}\n\n';
|
|
18
|
-
export declare function isUrl(source: string): boolean;
|
|
19
|
-
export declare function guessFileNameFromUrl(url: string): string;
|
|
20
|
-
//# sourceMappingURL=merge-engine.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merge-engine.d.ts","sourceRoot":"","sources":["../../../src/open-api/merge/merge-engine.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,IAAI,6BAA6B,EACxD,yBAAyB,EACzB,KAAK,UAAU,EAChB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE1E,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,cAAc,CAAC;AACvD,YAAY,EAAE,oBAAoB,EAAE,UAAU,EAAE,CAAC;AAGjD,OAAO,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,CAAC;AAG7E,OAAO,EACL,yBAAyB,IAAI,YAAY,EACzC,6BAA6B,IAAI,uBAAuB,GACzD,CAAC;AAEF,eAAO,MAAM,aAAa,8IAUzB,CAAC;AAKF,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAO7C;AAKD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAOxD"}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { detectFormatFromContent as detectFormatFromContentCommon, detectFormatFromExtension, } from "../../common/file-format.js";
|
|
2
|
-
import { OPEN_API_FILE_TYPES } from "../../common/open-api/index.js";
|
|
3
|
-
import { addOperationIdsAsNecessary, parseOpenApiFile } from "./utils.js";
|
|
4
|
-
export { OPEN_API_FILE_TYPES, addOperationIdsAsNecessary, parseOpenApiFile };
|
|
5
|
-
export { detectFormatFromExtension as detectFormat, detectFormatFromContentCommon as detectFormatFromContent, };
|
|
6
|
-
export const BASE_TEMPLATE = `
|
|
7
|
-
{
|
|
8
|
-
"openapi": "3.1.0",
|
|
9
|
-
"info": {
|
|
10
|
-
"version": "1.0.0",
|
|
11
|
-
"title": "My Zuplo API"
|
|
12
|
-
},
|
|
13
|
-
"paths": {}
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
`;
|
|
17
|
-
export function isUrl(source) {
|
|
18
|
-
try {
|
|
19
|
-
new URL(source);
|
|
20
|
-
return true;
|
|
21
|
-
}
|
|
22
|
-
catch {
|
|
23
|
-
return false;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
export function guessFileNameFromUrl(url) {
|
|
27
|
-
const parsedUrl = new URL(url);
|
|
28
|
-
const basename = parsedUrl.pathname
|
|
29
|
-
.split("/")
|
|
30
|
-
.pop()
|
|
31
|
-
?.replace(/\.[^/.]+$/, "");
|
|
32
|
-
return basename || `imported-${Buffer.from(url).toString("base64")}`;
|
|
33
|
-
}
|
|
34
|
-
//# sourceMappingURL=merge-engine.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merge-engine.js","sourceRoot":"","sources":["../../../src/open-api/merge/merge-engine.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,IAAI,6BAA6B,EACxD,yBAAyB,GAE1B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAErE,OAAO,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAM1E,OAAO,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,CAAC;AAG7E,OAAO,EACL,yBAAyB,IAAI,YAAY,EACzC,6BAA6B,IAAI,uBAAuB,GACzD,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;CAU5B,CAAC;AAKF,MAAM,UAAU,KAAK,CAAC,MAAc;IAClC,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAKD,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ;SAChC,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,EAAE;QACN,EAAE,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC7B,OAAO,QAAQ,IAAI,YAAY,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;AACvE,CAAC","sourcesContent":["import {\n detectFormatFromContent as detectFormatFromContentCommon,\n detectFormatFromExtension,\n type FileFormat,\n} from \"../../common/file-format.js\";\nimport { OPEN_API_FILE_TYPES } from \"../../common/open-api/index.js\";\nimport type { ZuploOpenApiDocument } from \"./interfaces.js\";\nimport { addOperationIdsAsNecessary, parseOpenApiFile } from \"./utils.js\";\n\nexport type MergeMode = \"path-method\" | \"operation-id\";\nexport type { ZuploOpenApiDocument, FileFormat };\n\n// Re-export utilities\nexport { OPEN_API_FILE_TYPES, addOperationIdsAsNecessary, parseOpenApiFile };\n\n// Re-export common file format functions for backward compatibility\nexport {\n detectFormatFromExtension as detectFormat,\n detectFormatFromContentCommon as detectFormatFromContent,\n};\n\nexport const BASE_TEMPLATE = `\n{\n \"openapi\": \"3.1.0\",\n \"info\": {\n \"version\": \"1.0.0\",\n \"title\": \"My Zuplo API\"\n },\n \"paths\": {}\n}\n\n`;\n\n/**\n * Detect if source is a URL\n */\nexport function isUrl(source: string): boolean {\n try {\n new URL(source);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Guess file name from URL\n */\nexport function guessFileNameFromUrl(url: string): string {\n const parsedUrl = new URL(url);\n const basename = parsedUrl.pathname\n .split(\"/\")\n .pop()\n ?.replace(/\\.[^/.]+$/, \"\");\n return basename || `imported-${Buffer.from(url).toString(\"base64\")}`;\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merge-engine.spec.d.ts","sourceRoot":"","sources":["../../../src/open-api/merge/merge-engine.spec.ts"],"names":[],"mappings":""}
|