@xyd-js/openapi 0.1.0-xyd.1 → 0.1.0-xyd.10
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/CHANGELOG.md +63 -0
- package/LICENSE +21 -0
- package/dist/index.cjs +14 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +14 -5
- package/dist/index.js.map +1 -1
- package/examples/dist/index.cjs +2 -0
- package/examples/dist/index.cjs.map +1 -0
- package/examples/dist/index.d.cts +2 -0
- package/examples/dist/index.d.ts +2 -0
- package/examples/dist/index.js +2 -0
- package/examples/dist/index.js.map +1 -0
- package/examples/semi/index.ts +16 -0
- package/examples/semi/openapi.yaml +365 -0
- package/examples/semi/references.json +500 -0
- package/examples/webhooks/references.json +895 -0
- package/package.json +4 -3
- package/src/paths.ts +4 -5
- package/src/properties.ts +6 -0
- package/src/schema.ts +10 -4
- package/src/utils.ts +1 -0
- package/tsup.examples-config.ts +2 -2
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# @xyd-js/openapi
|
|
2
|
+
|
|
3
|
+
## 0.1.0-xyd.10
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- @xyd-js/uniform@0.1.0-xyd.14
|
|
8
|
+
|
|
9
|
+
## 0.1.0-xyd.9
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- @xyd-js/uniform@0.1.0-xyd.13
|
|
14
|
+
|
|
15
|
+
## 0.1.0-xyd.8
|
|
16
|
+
|
|
17
|
+
### Patch Changes
|
|
18
|
+
|
|
19
|
+
- @xyd-js/uniform@0.1.0-xyd.12
|
|
20
|
+
|
|
21
|
+
## 0.1.0-xyd.7
|
|
22
|
+
|
|
23
|
+
### Patch Changes
|
|
24
|
+
|
|
25
|
+
- refactor, tweaks and ui changes
|
|
26
|
+
- Updated dependencies
|
|
27
|
+
- @xyd-js/uniform@0.1.0-xyd.11
|
|
28
|
+
|
|
29
|
+
## 0.1.0-xyd.6
|
|
30
|
+
|
|
31
|
+
### Patch Changes
|
|
32
|
+
|
|
33
|
+
- @xyd-js/uniform@0.1.0-xyd.10
|
|
34
|
+
|
|
35
|
+
## 0.1.0-xyd.5
|
|
36
|
+
|
|
37
|
+
### Patch Changes
|
|
38
|
+
|
|
39
|
+
- @xyd-js/uniform@0.1.0-xyd.9
|
|
40
|
+
|
|
41
|
+
## 0.1.0-xyd.4
|
|
42
|
+
|
|
43
|
+
### Patch Changes
|
|
44
|
+
|
|
45
|
+
- use react-router 7.1.1
|
|
46
|
+
- Updated dependencies
|
|
47
|
+
- @xyd-js/uniform@0.1.0-xyd.8
|
|
48
|
+
|
|
49
|
+
## 0.1.0-xyd.3
|
|
50
|
+
|
|
51
|
+
### Patch Changes
|
|
52
|
+
|
|
53
|
+
- another update
|
|
54
|
+
- Updated dependencies
|
|
55
|
+
- @xyd-js/uniform@0.1.0-xyd.7
|
|
56
|
+
|
|
57
|
+
## 0.1.0-xyd.2
|
|
58
|
+
|
|
59
|
+
### Patch Changes
|
|
60
|
+
|
|
61
|
+
- initial changeset bump
|
|
62
|
+
- Updated dependencies
|
|
63
|
+
- @xyd-js/uniform@0.1.0-xyd.6
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 xyd
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/dist/index.cjs
CHANGED
|
@@ -78,6 +78,10 @@ function schemaObjectToDefinitionProperties(v) {
|
|
|
78
78
|
];
|
|
79
79
|
}, []);
|
|
80
80
|
}
|
|
81
|
+
if (objProp.type === "array") {
|
|
82
|
+
const items = objProp.items;
|
|
83
|
+
merged = schemaObjectToDefinitionProperties(items);
|
|
84
|
+
}
|
|
81
85
|
return {
|
|
82
86
|
name,
|
|
83
87
|
type: objProp.type || "",
|
|
@@ -210,7 +214,7 @@ function httpMethodToUniformMethod(method) {
|
|
|
210
214
|
function oapPathToReference(httpMethod, path2, oapPath) {
|
|
211
215
|
const mType = httpMethodToUniformMethod(httpMethod);
|
|
212
216
|
if (!mType) {
|
|
213
|
-
console.error(`Unsupported method: ${httpMethod}`);
|
|
217
|
+
console.error(`Unsupported method v222: ${httpMethod}`);
|
|
214
218
|
return null;
|
|
215
219
|
}
|
|
216
220
|
const definitions = [];
|
|
@@ -227,7 +231,7 @@ function oapPathToReference(httpMethod, path2, oapPath) {
|
|
|
227
231
|
type: mType,
|
|
228
232
|
context: {
|
|
229
233
|
method: httpMethod,
|
|
230
|
-
path: path2
|
|
234
|
+
path: `${encodeURIComponent(path2)}`
|
|
231
235
|
},
|
|
232
236
|
examples: {
|
|
233
237
|
groups: exampleGroups
|
|
@@ -241,7 +245,7 @@ function oapPathToReference(httpMethod, path2, oapPath) {
|
|
|
241
245
|
let title;
|
|
242
246
|
switch (key) {
|
|
243
247
|
case "path":
|
|
244
|
-
title = "
|
|
248
|
+
title = "Path parameters";
|
|
245
249
|
break;
|
|
246
250
|
case "query":
|
|
247
251
|
title = "Query";
|
|
@@ -353,10 +357,11 @@ function fixAllOfBug(schema) {
|
|
|
353
357
|
|
|
354
358
|
// src/schema.ts
|
|
355
359
|
function oapSchemaToReferences(schema) {
|
|
360
|
+
var _a, _b;
|
|
356
361
|
const references = [];
|
|
357
362
|
const oas = new import_oas.default(schema);
|
|
363
|
+
const server = ((_b = (_a = schema.servers) == null ? void 0 : _a[0]) == null ? void 0 : _b.url) || "";
|
|
358
364
|
Object.entries(schema.paths).forEach(([path2, oapPath]) => {
|
|
359
|
-
let type;
|
|
360
365
|
SUPPORTED_HTTP_METHODS.forEach((eachMethod) => {
|
|
361
366
|
const httpMethod = eachMethod.toLowerCase();
|
|
362
367
|
switch (httpMethod) {
|
|
@@ -368,8 +373,10 @@ function oapSchemaToReferences(schema) {
|
|
|
368
373
|
break;
|
|
369
374
|
case "delete":
|
|
370
375
|
break;
|
|
376
|
+
case "patch":
|
|
377
|
+
break;
|
|
371
378
|
default:
|
|
372
|
-
console.error(`Unsupported method: ${httpMethod}`);
|
|
379
|
+
console.error(`Unsupported method v111: ${httpMethod}`);
|
|
373
380
|
return;
|
|
374
381
|
}
|
|
375
382
|
const reference = oapPathToReference(
|
|
@@ -378,6 +385,8 @@ function oapSchemaToReferences(schema) {
|
|
|
378
385
|
oapPath
|
|
379
386
|
);
|
|
380
387
|
if (reference) {
|
|
388
|
+
const ctx = reference.context;
|
|
389
|
+
ctx.path = `${encodeURIComponent(server)}${encodeURIComponent(path2)}`;
|
|
381
390
|
const operation = oas.operation(path2, httpMethod);
|
|
382
391
|
reference.examples.groups = oapExamples(oas, operation);
|
|
383
392
|
references.push(reference);
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../index.ts","../src/const.ts","../src/parameters.ts","../src/properties.ts","../src/requestBody.ts","../src/responses.ts","../src/schema.ts","../src/paths.ts","../src/utils.ts","../src/examples.ts"],"sourcesContent":["export {\n deferencedOpenAPI,\n oapSchemaToReferences\n} from \"./src\";","export const SUPPORTED_HTTP_METHODS: string[] = [\n 'get',\n 'put',\n 'patch',\n 'post',\n 'delete',\n // 'options',\n // 'head',\n // 'trace'\n];","import {OpenAPIV3} from \"openapi-types\";\nimport {DefinitionProperty} from \"@xyd-js/uniform\";\n\n// oapParametersToDefinitionProperties converts OpenAPI parameters to uniform DefinitionProperties\nexport function oapParametersToDefinitionProperties(\n parameters: OpenAPIV3.ParameterObject[]\n): { [key: string]: DefinitionProperty[] } {\n const parameterIn: { [key: string]: DefinitionProperty[] } = {}\n\n parameters.forEach((param) => {\n if (!parameterIn[param.in]) {\n parameterIn[param.in] = []\n }\n\n const schema = param.schema as OpenAPIV3.SchemaObject\n\n const property: DefinitionProperty = {\n name: param.name,\n type: schema.type || \"\",\n description: param.description || \"\"\n }\n\n parameterIn[param.in].push(property)\n })\n\n return parameterIn\n}\n","import {OpenAPIV3} from \"openapi-types\";\nimport {DefinitionProperty} from \"@xyd-js/uniform\";\n\n// schemaObjectToDefinitionProperties converts OpenAPI schema object to uniform DefinitionProperty[]\nexport function schemaObjectToDefinitionProperties(v: OpenAPIV3.SchemaObject): DefinitionProperty[] {\n return Object.entries(v.properties || {}).map(([name, prop]) => {\n let objProp = prop as OpenAPIV3.SchemaObject\n\n let merged: DefinitionProperty[] = []\n\n if (objProp.allOf) {\n merged = objProp.allOf.reduce((acc, of) => {\n return [\n ...acc,\n ...schemaObjectToDefinitionProperties(of as OpenAPIV3.SchemaObject)\n ]\n }, [] as DefinitionProperty[])\n }\n\n return {\n name: name,\n type: objProp.type || \"\",\n description: objProp.description || \"\",\n properties: (\n merged?.length\n ? merged\n : objProp.properties ? schemaObjectToDefinitionProperties(objProp) : []\n )\n }\n })\n}","import {OpenAPIV3} from \"openapi-types\";\nimport {DefinitionProperty} from \"@xyd-js/uniform\";\n\nimport {schemaObjectToDefinitionProperties} from \"./properties\";\n\n// oapRequestBodyToDefinitionProperties converts OpenAPI request body to uniform DefinitionProperties\nexport function oapRequestBodyToDefinitionProperties(\n reqBody: OpenAPIV3.RequestBodyObject\n): DefinitionProperty[] | null {\n // TODO: support other content types ???\n const schema = reqBody.content['application/json'].schema as OpenAPIV3.SchemaObject\n\n let schemaObject: OpenAPIV3.SchemaObject | undefined\n\n if (schema.allOf) {\n return schema.allOf.reduce((acc, of) => {\n const fakeBody: OpenAPIV3.RequestBodyObject = {\n content: {\n 'application/json': {\n schema: of\n }\n }\n }\n\n return [\n ...acc,\n ...oapRequestBodyToDefinitionProperties(fakeBody) || []\n ]\n }, [] as DefinitionProperty[])\n }\n\n switch (schema.type) {\n case 'object': {\n schemaObject = schema\n break\n }\n case 'array': {\n const arrSchema = schema as OpenAPIV3.ArraySchemaObject\n\n const items = arrSchema.items as OpenAPIV3.SchemaObject\n\n schemaObject = items\n break\n }\n default:\n // TODO: primitive types ???\n break\n }\n\n if (!schemaObject) {\n return null\n }\n\n return schemaObjectToDefinitionProperties(schemaObject)\n}","import {OpenAPIV3} from \"openapi-types\";\nimport {DefinitionProperty} from \"@xyd-js/uniform\";\n\nimport {schemaObjectToDefinitionProperties} from \"./properties\";\n\nexport function oapResponseToDefinitionProperties(\n responses: OpenAPIV3.ResponsesObject\n): DefinitionProperty[] | null {\n let schemaObject: OpenAPIV3.SchemaObject | undefined\n // TODO: support another statuses\n if (responses[\"default\"]) {\n const w = responses[\"default\"] as OpenAPIV3.ResponseObject\n\n schemaObject = w?.content?.['application/json']?.schema as OpenAPIV3.SchemaObject\n } else if (responses[\"200\"]) {\n const w = responses[\"200\"] as OpenAPIV3.ResponseObject\n\n schemaObject = w?.content?.['application/json']?.schema as OpenAPIV3.SchemaObject\n }\n\n if (!schemaObject) {\n return null\n }\n\n switch (schemaObject.type) {\n case 'array':\n const arrSchema = schemaObject as OpenAPIV3.ArraySchemaObject\n\n const items = arrSchema.items as OpenAPIV3.SchemaObject\n\n schemaObject = items\n break\n default:\n break\n }\n\n return schemaObjectToDefinitionProperties(schemaObject)\n}","import {OpenAPIV3} from \"openapi-types\";\nimport Oas from \"oas\";\nimport {Reference, ReferenceType} from \"@xyd-js/uniform\";\n\nimport {SUPPORTED_HTTP_METHODS} from \"./const\";\nimport {oapPathToReference} from \"./paths\";\nimport {oapExamples} from \"./examples\";\n\n// TODO: support one-of\n// TODO: support $ref - currently we use $refParser.dereference that converts $ref into objects\n// TODO: better method check system - currently we need to manually check that in few methods\n\n// oapSchemaToReferences converts an OpenAPI schema to a list of uniform References\nexport function oapSchemaToReferences(\n schema: OpenAPIV3.Document\n): Reference[] {\n const references: Reference[] = [];\n const oas = new Oas(schema as any);\n\n Object.entries(schema.paths).forEach(([path, oapPath]) => {\n let type: ReferenceType;\n\n SUPPORTED_HTTP_METHODS.forEach((eachMethod) => {\n const httpMethod = eachMethod.toLowerCase()\n\n switch (httpMethod) {\n case 'get':\n break\n case 'put':\n break\n case 'post':\n break\n case 'delete':\n break\n default:\n console.error(`Unsupported method: ${httpMethod}`)\n return\n }\n\n const reference = oapPathToReference(\n httpMethod,\n path,\n oapPath as OpenAPIV3.PathItemObject\n )\n\n if (reference) {\n const operation = oas.operation(path, httpMethod);\n reference.examples.groups = oapExamples(oas, operation)\n\n references.push(reference)\n }\n })\n })\n\n return references\n}\n","import {OpenAPIV3} from \"openapi-types\";\nimport {Definition, ExampleGroup, Reference, ReferenceCategory} from \"@xyd-js/uniform\";\n\nimport {oapParametersToDefinitionProperties} from \"./parameters\";\nimport {oapRequestBodyToDefinitionProperties} from \"./requestBody\";\nimport {oapResponseToDefinitionProperties} from \"./responses\";\nimport {\n httpMethodToUniformMethod,\n toPascalCase\n} from \"./utils\";\n\n// oapPathToReference converts an OpenAPI path to a uniform Reference\nexport function oapPathToReference(\n httpMethod: \"get\" | \"put\" | \"post\" | \"delete\", // TODO: ts type\n path: string,\n oapPath: OpenAPIV3.PathItemObject,\n): Reference | null {\n const mType = httpMethodToUniformMethod(httpMethod)\n\n if (!mType) {\n console.error(`Unsupported method: ${httpMethod}`)\n return null\n }\n\n const definitions: Definition[] = []\n const exampleGroups: ExampleGroup[] = []\n\n const oapMethod = oapPath?.[httpMethod] as OpenAPIV3.OperationObject\n\n if (!oapMethod) {\n return null\n }\n\n const endpointRef: Reference = {\n title: oapMethod?.summary || \"\",\n canonical: toPascalCase(oapMethod?.summary || \"\"),\n description: oapMethod?.description || \"\",\n\n category: ReferenceCategory.REST,\n type: mType,\n\n context: {\n method: httpMethod,\n\n path\n },\n\n examples: {\n groups: exampleGroups,\n },\n definitions: definitions,\n }\n\n if (oapMethod.parameters) {\n const parameters = oapMethod.parameters as OpenAPIV3.ParameterObject[]\n\n const paramtersMap = oapParametersToDefinitionProperties(parameters) // TODO: finish\n\n Object.entries(paramtersMap).forEach(([key, definitionProperties]) => {\n let title: string\n\n // TODO: add context to definition\n switch (key) {\n case 'path':\n title = \"Paths\"\n break\n case 'query':\n title = \"Query\"\n break\n case 'header':\n title = \"Header\"\n break\n default:\n console.error(`Unsupported parameter type: ${key} for ${httpMethod} ${path}`)\n return\n }\n\n definitions.push({\n title,\n properties: definitionProperties\n })\n })\n }\n\n if (oapMethod.requestBody) {\n const reqBody = oapMethod.requestBody as OpenAPIV3.RequestBodyObject\n\n definitions.push({\n title: 'Request body',\n properties: oapRequestBodyToDefinitionProperties(reqBody) || []\n })\n }\n\n if (oapMethod.responses) {\n const responses = oapMethod.responses as OpenAPIV3.ResponsesObject\n\n definitions.push({\n title: 'Response',\n properties: oapResponseToDefinitionProperties(responses) || []\n })\n }\n\n return endpointRef\n}\n","import path from \"path\";\nimport fs from \"fs\";\nimport yaml from \"js-yaml\";\nimport $refParser from \"json-schema-ref-parser\";\nimport {OpenAPIV3} from \"openapi-types\";\n\nimport {ReferenceType} from \"@xyd-js/uniform\";\n\ntype Parameters = {\n query?: Record<string, string | number | boolean>;\n headers?: Record<string, string>;\n};\n\nexport function toPascalCase(str: string): string {\n return str\n .split(/[\\s_-]+/)\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join('');\n}\n\n// readOpenApiSpec reads an OpenAPI spec file and returns the content\nfunction readOpenApiSpec(filePath: string) {\n const ext = path.extname(filePath).toLowerCase();\n const content = fs.readFileSync(filePath, 'utf-8');\n\n if (ext === '.yaml' || ext === '.yml') {\n return yaml.load(content);\n } else if (ext === '.json') {\n return JSON.parse(content);\n } else {\n throw new Error('Unsupported file format. Use JSON or YAML.');\n }\n}\n\n// deferencedOpenAPI reads an OpenAPI spec file and returns a dereferenced OpenAPIV3.Document\n// dereferenced means that all $ref references are resolved automatically\nexport async function deferencedOpenAPI(openApiPath: string) {\n const openApiSpec = readOpenApiSpec(openApiPath);\n\n //@ts-ignore TODO: fix ts\n await $refParser.dereference(openApiSpec);\n\n return openApiSpec as OpenAPIV3.Document\n}\n\n// httpMethodToUniformMethod converts an HTTP method to a uniform ReferenceType\nexport function httpMethodToUniformMethod(method: string): ReferenceType | null {\n switch (method) {\n case 'get':\n return ReferenceType.REST_HTTP_GET\n case 'put':\n return ReferenceType.REST_HTTP_PUT\n case 'patch':\n return ReferenceType.REST_HTTP_PATCH\n case 'post':\n return ReferenceType.REST_HTTP_POST\n case 'delete':\n return ReferenceType.REST_HTTP_DELETE\n // case 'options':\n // return ReferenceType.REST_HTTP_OPTIONS\n // case 'head':\n // return ReferenceType.REST_HTTP_HEAD\n // case 'trace':\n // return ReferenceType.REST_HTTP_TRACE\n default:\n return null\n }\n}\n\n// schemaToRequestBody generates a request body from an OpenAPI schema\nfunction schemaToRequestBody(schema: OpenAPIV3.SchemaObject): string {\n const requestBody: any = {};\n\n if (schema.type === 'object' && schema.properties) {\n for (const [key, value] of Object.entries(schema.properties)) {\n if ((value as OpenAPIV3.SchemaObject).default !== undefined) {\n requestBody[key] = (value as OpenAPIV3.SchemaObject).default;\n } else {\n requestBody[key] = null; // or some placeholder value\n }\n }\n }\n\n return JSON.stringify(requestBody);\n}\n\n// generateRequestInitFromOpenAPIObject generates a RequestInit object from an OpenAPI object\nexport function generateRequestInitFromOapOperation(\n urlPath: string,\n operation: OpenAPIV3.OperationObject\n): { url: string, reqInit: RequestInit } {\n const reqInit: RequestInit = {}\n let queryParams = '';\n\n if (operation.parameters) {\n const parameters = operation.parameters as OpenAPIV3.ParameterObject[]\n\n const params = new URLSearchParams(\n Object.entries(parameters).map(([key, value]) => [key, String(value)])\n ).toString();\n\n queryParams += `?${params}`;\n }\n\n if (operation.requestBody) {\n const reqBody = operation.requestBody as OpenAPIV3.RequestBodyObject;\n const contentType = Object.keys(reqBody.content || {})[0];\n\n if (contentType === \"application/json\") {\n const schema = reqBody.content['application/json'].schema as OpenAPIV3.SchemaObject\n\n reqInit.body = schemaToRequestBody(schema);\n reqInit.headers = {\n 'Content-Type': 'application/json',\n }\n }\n }\n\n return {\n url: `${urlPath}${queryParams}`,\n reqInit,\n };\n}\n\n","import {OpenAPIV3} from \"openapi-types\";\nimport Oas from \"oas\";\n// @ts-ignore\nimport {Operation} from 'oas/operation'; // TODO: fix ts\nimport oasToSnippet from \"@readme/oas-to-snippet\";\nimport OpenAPISampler from \"openapi-sampler\";\nimport type {JSONSchema7} from \"json-schema\";\n\nimport {ExampleGroup, Example} from \"@xyd-js/uniform\";\n\n// TODO: option with another languages\n// TODO: uniform plugins\n// TODO: fs uniform plugins\nexport function oapExamples(\n oas: Oas,\n operation: Operation\n): ExampleGroup[] {\n const exampleGroups: ExampleGroup[] = []\n\n if (operation.schema.requestBody) {\n const body = operation.schema.requestBody as OpenAPIV3.RequestBodyObject\n const schema = fixAllOfBug(\n body.content[\"application/json\"].schema as JSONSchema7\n )\n\n if (!schema) {\n return exampleGroups\n }\n\n const fakeData = OpenAPISampler.sample(schema)\n\n // TODO: snippet languages options\n const {code} = oasToSnippet(oas, operation, {\n body: fakeData\n }, null, \"shell\");\n\n const examples: Example[] = []\n\n examples.push({\n codeblock: {\n tabs: [{\n title: \"curl\",\n language: \"curl\",\n code: code || \"\",\n }]\n }\n })\n\n exampleGroups.push({\n description: \"Example request\",\n examples\n })\n }\n\n if (operation.schema.responses) {\n const responses = operation.schema.responses as OpenAPIV3.ResponsesObject\n\n const examples: Example[] = []\n\n Object.entries(responses).forEach(([status, r]) => {\n const response = r as OpenAPIV3.ResponseObject\n const schema = response?.content?.[\"application/json\"].schema as JSONSchema7\n\n if (!schema) {\n return\n }\n\n const fakeData = OpenAPISampler.sample(schema)\n\n examples.push({\n codeblock: {\n title: status,\n tabs: [{\n title: \"json\",\n language: \"json\",\n code: JSON.stringify(fakeData, null, 2) || \"\",\n }]\n }\n })\n })\n\n exampleGroups.push({\n description: \"Response\",\n examples\n })\n }\n\n return exampleGroups\n}\n\n/*\nfixAllOfBug fixes below case:\n\n```yaml\n allOf:\n - $ref: '#/components/schemas/SomeSchema'\n - type: object\n required:\n properties:\n```\n*/\nfunction fixAllOfBug(schema: JSONSchema7) {\n const modifiedSchema = {...schema}\n\n if (schema.allOf) {\n schema.allOf.forEach((prop, i) => {\n const propObj = prop as object\n\n if (\"properties\" in propObj && !propObj[\"properties\"]) {\n delete modifiedSchema.allOf?.[i]\n }\n })\n }\n\n return modifiedSchema\n}"],"mappings":"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","names":["import_uniform","path","fs","yaml","$refParser","path","OpenAPISampler","oasToSnippet","Oas","path"]}
|
|
1
|
+
{"version":3,"sources":["../index.ts","../src/const.ts","../src/parameters.ts","../src/properties.ts","../src/requestBody.ts","../src/responses.ts","../src/schema.ts","../src/paths.ts","../src/utils.ts","../src/examples.ts"],"sourcesContent":["export {\n deferencedOpenAPI,\n oapSchemaToReferences\n} from \"./src\";","export const SUPPORTED_HTTP_METHODS: string[] = [\n 'get',\n 'put',\n 'patch',\n 'post',\n 'delete',\n // 'options',\n // 'head',\n // 'trace'\n];","import {OpenAPIV3} from \"openapi-types\";\nimport {DefinitionProperty} from \"@xyd-js/uniform\";\n\n// oapParametersToDefinitionProperties converts OpenAPI parameters to uniform DefinitionProperties\nexport function oapParametersToDefinitionProperties(\n parameters: OpenAPIV3.ParameterObject[]\n): { [key: string]: DefinitionProperty[] } {\n const parameterIn: { [key: string]: DefinitionProperty[] } = {}\n\n parameters.forEach((param) => {\n if (!parameterIn[param.in]) {\n parameterIn[param.in] = []\n }\n\n const schema = param.schema as OpenAPIV3.SchemaObject\n\n const property: DefinitionProperty = {\n name: param.name,\n type: schema.type || \"\",\n description: param.description || \"\"\n }\n\n parameterIn[param.in].push(property)\n })\n\n return parameterIn\n}\n","import {OpenAPIV3} from \"openapi-types\";\nimport {DefinitionProperty} from \"@xyd-js/uniform\";\n\n// schemaObjectToDefinitionProperties converts OpenAPI schema object to uniform DefinitionProperty[]\nexport function schemaObjectToDefinitionProperties(v: OpenAPIV3.SchemaObject): DefinitionProperty[] {\n return Object.entries(v.properties || {}).map(([name, prop]) => {\n let objProp = prop as OpenAPIV3.SchemaObject\n\n let merged: DefinitionProperty[] = []\n\n if (objProp.allOf) {\n merged = objProp.allOf.reduce((acc, of) => {\n return [\n ...acc,\n ...schemaObjectToDefinitionProperties(of as OpenAPIV3.SchemaObject)\n ]\n }, [] as DefinitionProperty[])\n }\n\n if (objProp.type === \"array\") {\n const items = objProp.items as OpenAPIV3.SchemaObject\n\n merged = schemaObjectToDefinitionProperties(items)\n }\n\n return {\n name: name,\n type: objProp.type || \"\",\n description: objProp.description || \"\",\n properties: (\n merged?.length\n ? merged\n : objProp.properties ? schemaObjectToDefinitionProperties(objProp) : []\n )\n }\n })\n}","import {OpenAPIV3} from \"openapi-types\";\nimport {DefinitionProperty} from \"@xyd-js/uniform\";\n\nimport {schemaObjectToDefinitionProperties} from \"./properties\";\n\n// oapRequestBodyToDefinitionProperties converts OpenAPI request body to uniform DefinitionProperties\nexport function oapRequestBodyToDefinitionProperties(\n reqBody: OpenAPIV3.RequestBodyObject\n): DefinitionProperty[] | null {\n // TODO: support other content types ???\n const schema = reqBody.content['application/json'].schema as OpenAPIV3.SchemaObject\n\n let schemaObject: OpenAPIV3.SchemaObject | undefined\n\n if (schema.allOf) {\n return schema.allOf.reduce((acc, of) => {\n const fakeBody: OpenAPIV3.RequestBodyObject = {\n content: {\n 'application/json': {\n schema: of\n }\n }\n }\n\n return [\n ...acc,\n ...oapRequestBodyToDefinitionProperties(fakeBody) || []\n ]\n }, [] as DefinitionProperty[])\n }\n\n switch (schema.type) {\n case 'object': {\n schemaObject = schema\n break\n }\n case 'array': {\n const arrSchema = schema as OpenAPIV3.ArraySchemaObject\n\n const items = arrSchema.items as OpenAPIV3.SchemaObject\n\n schemaObject = items\n break\n }\n default:\n // TODO: primitive types ???\n break\n }\n\n if (!schemaObject) {\n return null\n }\n\n return schemaObjectToDefinitionProperties(schemaObject)\n}","import {OpenAPIV3} from \"openapi-types\";\nimport {DefinitionProperty} from \"@xyd-js/uniform\";\n\nimport {schemaObjectToDefinitionProperties} from \"./properties\";\n\nexport function oapResponseToDefinitionProperties(\n responses: OpenAPIV3.ResponsesObject\n): DefinitionProperty[] | null {\n let schemaObject: OpenAPIV3.SchemaObject | undefined\n // TODO: support another statuses\n if (responses[\"default\"]) {\n const w = responses[\"default\"] as OpenAPIV3.ResponseObject\n\n schemaObject = w?.content?.['application/json']?.schema as OpenAPIV3.SchemaObject\n } else if (responses[\"200\"]) {\n const w = responses[\"200\"] as OpenAPIV3.ResponseObject\n\n schemaObject = w?.content?.['application/json']?.schema as OpenAPIV3.SchemaObject\n }\n\n if (!schemaObject) {\n return null\n }\n\n switch (schemaObject.type) {\n case 'array':\n const arrSchema = schemaObject as OpenAPIV3.ArraySchemaObject\n\n const items = arrSchema.items as OpenAPIV3.SchemaObject\n\n schemaObject = items\n break\n default:\n break\n }\n\n return schemaObjectToDefinitionProperties(schemaObject)\n}","import {OpenAPIV3} from \"openapi-types\";\nimport Oas from \"oas\";\n\nimport type {Reference, OpenAPIReferenceContext} from \"@xyd-js/uniform\";\n\nimport {SUPPORTED_HTTP_METHODS} from \"./const\";\nimport {oapPathToReference} from \"./paths\";\nimport {oapExamples} from \"./examples\";\n\n// TODO: support one-of\n// TODO: support $ref - currently we use $refParser.dereference that converts $ref into objects\n// TODO: better method check system - currently we need to manually check that in few methods\n\n// oapSchemaToReferences converts an OpenAPI schema to a list of uniform References\nexport function oapSchemaToReferences(\n schema: OpenAPIV3.Document\n): Reference[] {\n const references: Reference[] = [];\n const oas = new Oas(schema as any);\n\n const server = schema.servers?.[0]?.url || \"\"\n\n Object.entries(schema.paths).forEach(([path, oapPath]) => {\n SUPPORTED_HTTP_METHODS.forEach((eachMethod) => {\n const httpMethod = eachMethod.toLowerCase()\n\n switch (httpMethod) {\n case 'get':\n break\n case 'put':\n break\n case 'post':\n break\n case 'delete':\n break\n case 'patch':\n break\n default:\n console.error(`Unsupported method v111: ${httpMethod}`)\n return\n }\n\n const reference = oapPathToReference(\n httpMethod,\n path,\n oapPath as OpenAPIV3.PathItemObject\n )\n\n if (reference) {\n const ctx = reference.context as OpenAPIReferenceContext\n ctx.path = `${encodeURIComponent(server)}${encodeURIComponent(path)}` // TODO: it should be inside `oapPathToReference` ?\n\n const operation = oas.operation(path, httpMethod);\n reference.examples.groups = oapExamples(oas, operation)\n\n references.push(reference)\n }\n })\n })\n\n return references\n}\n","import {OpenAPIV3} from \"openapi-types\";\nimport {Definition, ExampleGroup, Reference, ReferenceCategory} from \"@xyd-js/uniform\";\n\nimport {oapParametersToDefinitionProperties} from \"./parameters\";\nimport {oapRequestBodyToDefinitionProperties} from \"./requestBody\";\nimport {oapResponseToDefinitionProperties} from \"./responses\";\nimport {\n httpMethodToUniformMethod,\n toPascalCase\n} from \"./utils\";\n\n// oapPathToReference converts an OpenAPI path to a uniform Reference\nexport function oapPathToReference(\n httpMethod: \"get\" | \"put\" | \"post\" | \"delete\" | \"patch\", // TODO: ts type\n path: string,\n oapPath: OpenAPIV3.PathItemObject,\n): Reference | null {\n const mType = httpMethodToUniformMethod(httpMethod)\n\n if (!mType) {\n console.error(`Unsupported method v222: ${httpMethod}`)\n return null\n }\n\n const definitions: Definition[] = []\n const exampleGroups: ExampleGroup[] = []\n\n const oapMethod = oapPath?.[httpMethod] as OpenAPIV3.OperationObject\n\n if (!oapMethod) {\n return null\n }\n\n const endpointRef: Reference = {\n title: oapMethod?.summary || \"\",\n canonical: toPascalCase(oapMethod?.summary || \"\"),\n description: oapMethod?.description || \"\",\n\n category: ReferenceCategory.REST,\n type: mType,\n\n context: {\n method: httpMethod,\n\n path: `${encodeURIComponent(path)}`,\n },\n\n examples: {\n groups: exampleGroups,\n },\n definitions: definitions,\n }\n\n if (oapMethod.parameters) {\n const parameters = oapMethod.parameters as OpenAPIV3.ParameterObject[]\n\n const paramtersMap = oapParametersToDefinitionProperties(parameters) // TODO: finish\n\n Object.entries(paramtersMap).forEach(([key, definitionProperties]) => {\n let title: string\n\n switch (key) {\n case 'path':\n title = \"Path parameters\"\n break\n case 'query':\n title = \"Query\"\n break\n case 'header':\n title = \"Header\"\n break\n default:\n console.error(`Unsupported parameter type: ${key} for ${httpMethod} ${path}`)\n return\n }\n\n definitions.push({\n title,\n properties: definitionProperties\n })\n })\n }\n\n if (oapMethod.requestBody) {\n const reqBody = oapMethod.requestBody as OpenAPIV3.RequestBodyObject\n\n definitions.push({\n title: 'Request body',\n properties: oapRequestBodyToDefinitionProperties(reqBody) || []\n })\n }\n\n if (oapMethod.responses) {\n const responses = oapMethod.responses as OpenAPIV3.ResponsesObject\n\n definitions.push({\n title: 'Response',\n properties: oapResponseToDefinitionProperties(responses) || []\n })\n }\n\n return endpointRef\n}\n","import path from \"path\";\nimport fs from \"fs\";\nimport yaml from \"js-yaml\";\nimport $refParser from \"json-schema-ref-parser\";\nimport {OpenAPIV3} from \"openapi-types\";\n\nimport {ReferenceType} from \"@xyd-js/uniform\";\n\ntype Parameters = {\n query?: Record<string, string | number | boolean>;\n headers?: Record<string, string>;\n};\n\nexport function toPascalCase(str: string): string {\n return str\n .split(/[\\s_-]+/)\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join('');\n}\n\n// TODO: support from url?\n// readOpenApiSpec reads an OpenAPI spec file and returns the content\nfunction readOpenApiSpec(filePath: string) {\n const ext = path.extname(filePath).toLowerCase();\n const content = fs.readFileSync(filePath, 'utf-8');\n\n if (ext === '.yaml' || ext === '.yml') {\n return yaml.load(content);\n } else if (ext === '.json') {\n return JSON.parse(content);\n } else {\n throw new Error('Unsupported file format. Use JSON or YAML.');\n }\n}\n\n// deferencedOpenAPI reads an OpenAPI spec file and returns a dereferenced OpenAPIV3.Document\n// dereferenced means that all $ref references are resolved automatically\nexport async function deferencedOpenAPI(openApiPath: string) {\n const openApiSpec = readOpenApiSpec(openApiPath);\n\n //@ts-ignore TODO: fix ts\n await $refParser.dereference(openApiSpec);\n\n return openApiSpec as OpenAPIV3.Document\n}\n\n// httpMethodToUniformMethod converts an HTTP method to a uniform ReferenceType\nexport function httpMethodToUniformMethod(method: string): ReferenceType | null {\n switch (method) {\n case 'get':\n return ReferenceType.REST_HTTP_GET\n case 'put':\n return ReferenceType.REST_HTTP_PUT\n case 'patch':\n return ReferenceType.REST_HTTP_PATCH\n case 'post':\n return ReferenceType.REST_HTTP_POST\n case 'delete':\n return ReferenceType.REST_HTTP_DELETE\n // case 'options':\n // return ReferenceType.REST_HTTP_OPTIONS\n // case 'head':\n // return ReferenceType.REST_HTTP_HEAD\n // case 'trace':\n // return ReferenceType.REST_HTTP_TRACE\n default:\n return null\n }\n}\n\n// schemaToRequestBody generates a request body from an OpenAPI schema\nfunction schemaToRequestBody(schema: OpenAPIV3.SchemaObject): string {\n const requestBody: any = {};\n\n if (schema.type === 'object' && schema.properties) {\n for (const [key, value] of Object.entries(schema.properties)) {\n if ((value as OpenAPIV3.SchemaObject).default !== undefined) {\n requestBody[key] = (value as OpenAPIV3.SchemaObject).default;\n } else {\n requestBody[key] = null; // or some placeholder value\n }\n }\n }\n\n return JSON.stringify(requestBody);\n}\n\n// generateRequestInitFromOpenAPIObject generates a RequestInit object from an OpenAPI object\nexport function generateRequestInitFromOapOperation(\n urlPath: string,\n operation: OpenAPIV3.OperationObject\n): { url: string, reqInit: RequestInit } {\n const reqInit: RequestInit = {}\n let queryParams = '';\n\n if (operation.parameters) {\n const parameters = operation.parameters as OpenAPIV3.ParameterObject[]\n\n const params = new URLSearchParams(\n Object.entries(parameters).map(([key, value]) => [key, String(value)])\n ).toString();\n\n queryParams += `?${params}`;\n }\n\n if (operation.requestBody) {\n const reqBody = operation.requestBody as OpenAPIV3.RequestBodyObject;\n const contentType = Object.keys(reqBody.content || {})[0];\n\n if (contentType === \"application/json\") {\n const schema = reqBody.content['application/json'].schema as OpenAPIV3.SchemaObject\n\n reqInit.body = schemaToRequestBody(schema);\n reqInit.headers = {\n 'Content-Type': 'application/json',\n }\n }\n }\n\n return {\n url: `${urlPath}${queryParams}`,\n reqInit,\n };\n}\n\n","import {OpenAPIV3} from \"openapi-types\";\nimport Oas from \"oas\";\n// @ts-ignore\nimport {Operation} from 'oas/operation'; // TODO: fix ts\nimport oasToSnippet from \"@readme/oas-to-snippet\";\nimport OpenAPISampler from \"openapi-sampler\";\nimport type {JSONSchema7} from \"json-schema\";\n\nimport {ExampleGroup, Example} from \"@xyd-js/uniform\";\n\n// TODO: option with another languages\n// TODO: uniform plugins\n// TODO: fs uniform plugins\nexport function oapExamples(\n oas: Oas,\n operation: Operation\n): ExampleGroup[] {\n const exampleGroups: ExampleGroup[] = []\n\n if (operation.schema.requestBody) {\n const body = operation.schema.requestBody as OpenAPIV3.RequestBodyObject\n const schema = fixAllOfBug(\n body.content[\"application/json\"].schema as JSONSchema7\n )\n\n if (!schema) {\n return exampleGroups\n }\n\n const fakeData = OpenAPISampler.sample(schema)\n\n // TODO: snippet languages options\n const {code} = oasToSnippet(oas, operation, {\n body: fakeData\n }, null, \"shell\");\n\n const examples: Example[] = []\n\n examples.push({\n codeblock: {\n tabs: [{\n title: \"curl\",\n language: \"curl\",\n code: code || \"\",\n }]\n }\n })\n\n exampleGroups.push({\n description: \"Example request\",\n examples\n })\n }\n\n if (operation.schema.responses) {\n const responses = operation.schema.responses as OpenAPIV3.ResponsesObject\n\n const examples: Example[] = []\n\n Object.entries(responses).forEach(([status, r]) => {\n const response = r as OpenAPIV3.ResponseObject\n const schema = response?.content?.[\"application/json\"].schema as JSONSchema7\n\n if (!schema) {\n return\n }\n\n const fakeData = OpenAPISampler.sample(schema)\n\n examples.push({\n codeblock: {\n title: status,\n tabs: [{\n title: \"json\",\n language: \"json\",\n code: JSON.stringify(fakeData, null, 2) || \"\",\n }]\n }\n })\n })\n\n exampleGroups.push({\n description: \"Response\",\n examples\n })\n }\n\n return exampleGroups\n}\n\n/*\nfixAllOfBug fixes below case:\n\n```yaml\n allOf:\n - $ref: '#/components/schemas/SomeSchema'\n - type: object\n required:\n properties:\n```\n*/\nfunction fixAllOfBug(schema: JSONSchema7) {\n const modifiedSchema = {...schema}\n\n if (schema.allOf) {\n schema.allOf.forEach((prop, i) => {\n const propObj = prop as object\n\n if (\"properties\" in propObj && !propObj[\"properties\"]) {\n delete modifiedSchema.allOf?.[i]\n }\n })\n }\n\n return modifiedSchema\n}"],"mappings":"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","names":["import_uniform","path","fs","yaml","$refParser","path","OpenAPISampler","oasToSnippet","Oas","path"]}
|
package/dist/index.js
CHANGED
|
@@ -41,6 +41,10 @@ function schemaObjectToDefinitionProperties(v) {
|
|
|
41
41
|
];
|
|
42
42
|
}, []);
|
|
43
43
|
}
|
|
44
|
+
if (objProp.type === "array") {
|
|
45
|
+
const items = objProp.items;
|
|
46
|
+
merged = schemaObjectToDefinitionProperties(items);
|
|
47
|
+
}
|
|
44
48
|
return {
|
|
45
49
|
name,
|
|
46
50
|
type: objProp.type || "",
|
|
@@ -173,7 +177,7 @@ function httpMethodToUniformMethod(method) {
|
|
|
173
177
|
function oapPathToReference(httpMethod, path2, oapPath) {
|
|
174
178
|
const mType = httpMethodToUniformMethod(httpMethod);
|
|
175
179
|
if (!mType) {
|
|
176
|
-
console.error(`Unsupported method: ${httpMethod}`);
|
|
180
|
+
console.error(`Unsupported method v222: ${httpMethod}`);
|
|
177
181
|
return null;
|
|
178
182
|
}
|
|
179
183
|
const definitions = [];
|
|
@@ -190,7 +194,7 @@ function oapPathToReference(httpMethod, path2, oapPath) {
|
|
|
190
194
|
type: mType,
|
|
191
195
|
context: {
|
|
192
196
|
method: httpMethod,
|
|
193
|
-
path: path2
|
|
197
|
+
path: `${encodeURIComponent(path2)}`
|
|
194
198
|
},
|
|
195
199
|
examples: {
|
|
196
200
|
groups: exampleGroups
|
|
@@ -204,7 +208,7 @@ function oapPathToReference(httpMethod, path2, oapPath) {
|
|
|
204
208
|
let title;
|
|
205
209
|
switch (key) {
|
|
206
210
|
case "path":
|
|
207
|
-
title = "
|
|
211
|
+
title = "Path parameters";
|
|
208
212
|
break;
|
|
209
213
|
case "query":
|
|
210
214
|
title = "Query";
|
|
@@ -316,10 +320,11 @@ function fixAllOfBug(schema) {
|
|
|
316
320
|
|
|
317
321
|
// src/schema.ts
|
|
318
322
|
function oapSchemaToReferences(schema) {
|
|
323
|
+
var _a, _b;
|
|
319
324
|
const references = [];
|
|
320
325
|
const oas = new Oas(schema);
|
|
326
|
+
const server = ((_b = (_a = schema.servers) == null ? void 0 : _a[0]) == null ? void 0 : _b.url) || "";
|
|
321
327
|
Object.entries(schema.paths).forEach(([path2, oapPath]) => {
|
|
322
|
-
let type;
|
|
323
328
|
SUPPORTED_HTTP_METHODS.forEach((eachMethod) => {
|
|
324
329
|
const httpMethod = eachMethod.toLowerCase();
|
|
325
330
|
switch (httpMethod) {
|
|
@@ -331,8 +336,10 @@ function oapSchemaToReferences(schema) {
|
|
|
331
336
|
break;
|
|
332
337
|
case "delete":
|
|
333
338
|
break;
|
|
339
|
+
case "patch":
|
|
340
|
+
break;
|
|
334
341
|
default:
|
|
335
|
-
console.error(`Unsupported method: ${httpMethod}`);
|
|
342
|
+
console.error(`Unsupported method v111: ${httpMethod}`);
|
|
336
343
|
return;
|
|
337
344
|
}
|
|
338
345
|
const reference = oapPathToReference(
|
|
@@ -341,6 +348,8 @@ function oapSchemaToReferences(schema) {
|
|
|
341
348
|
oapPath
|
|
342
349
|
);
|
|
343
350
|
if (reference) {
|
|
351
|
+
const ctx = reference.context;
|
|
352
|
+
ctx.path = `${encodeURIComponent(server)}${encodeURIComponent(path2)}`;
|
|
344
353
|
const operation = oas.operation(path2, httpMethod);
|
|
345
354
|
reference.examples.groups = oapExamples(oas, operation);
|
|
346
355
|
references.push(reference);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/const.ts","../src/parameters.ts","../src/properties.ts","../src/requestBody.ts","../src/responses.ts","../src/schema.ts","../src/paths.ts","../src/utils.ts","../src/examples.ts"],"sourcesContent":["export const SUPPORTED_HTTP_METHODS: string[] = [\n 'get',\n 'put',\n 'patch',\n 'post',\n 'delete',\n // 'options',\n // 'head',\n // 'trace'\n];","import {OpenAPIV3} from \"openapi-types\";\nimport {DefinitionProperty} from \"@xyd-js/uniform\";\n\n// oapParametersToDefinitionProperties converts OpenAPI parameters to uniform DefinitionProperties\nexport function oapParametersToDefinitionProperties(\n parameters: OpenAPIV3.ParameterObject[]\n): { [key: string]: DefinitionProperty[] } {\n const parameterIn: { [key: string]: DefinitionProperty[] } = {}\n\n parameters.forEach((param) => {\n if (!parameterIn[param.in]) {\n parameterIn[param.in] = []\n }\n\n const schema = param.schema as OpenAPIV3.SchemaObject\n\n const property: DefinitionProperty = {\n name: param.name,\n type: schema.type || \"\",\n description: param.description || \"\"\n }\n\n parameterIn[param.in].push(property)\n })\n\n return parameterIn\n}\n","import {OpenAPIV3} from \"openapi-types\";\nimport {DefinitionProperty} from \"@xyd-js/uniform\";\n\n// schemaObjectToDefinitionProperties converts OpenAPI schema object to uniform DefinitionProperty[]\nexport function schemaObjectToDefinitionProperties(v: OpenAPIV3.SchemaObject): DefinitionProperty[] {\n return Object.entries(v.properties || {}).map(([name, prop]) => {\n let objProp = prop as OpenAPIV3.SchemaObject\n\n let merged: DefinitionProperty[] = []\n\n if (objProp.allOf) {\n merged = objProp.allOf.reduce((acc, of) => {\n return [\n ...acc,\n ...schemaObjectToDefinitionProperties(of as OpenAPIV3.SchemaObject)\n ]\n }, [] as DefinitionProperty[])\n }\n\n return {\n name: name,\n type: objProp.type || \"\",\n description: objProp.description || \"\",\n properties: (\n merged?.length\n ? merged\n : objProp.properties ? schemaObjectToDefinitionProperties(objProp) : []\n )\n }\n })\n}","import {OpenAPIV3} from \"openapi-types\";\nimport {DefinitionProperty} from \"@xyd-js/uniform\";\n\nimport {schemaObjectToDefinitionProperties} from \"./properties\";\n\n// oapRequestBodyToDefinitionProperties converts OpenAPI request body to uniform DefinitionProperties\nexport function oapRequestBodyToDefinitionProperties(\n reqBody: OpenAPIV3.RequestBodyObject\n): DefinitionProperty[] | null {\n // TODO: support other content types ???\n const schema = reqBody.content['application/json'].schema as OpenAPIV3.SchemaObject\n\n let schemaObject: OpenAPIV3.SchemaObject | undefined\n\n if (schema.allOf) {\n return schema.allOf.reduce((acc, of) => {\n const fakeBody: OpenAPIV3.RequestBodyObject = {\n content: {\n 'application/json': {\n schema: of\n }\n }\n }\n\n return [\n ...acc,\n ...oapRequestBodyToDefinitionProperties(fakeBody) || []\n ]\n }, [] as DefinitionProperty[])\n }\n\n switch (schema.type) {\n case 'object': {\n schemaObject = schema\n break\n }\n case 'array': {\n const arrSchema = schema as OpenAPIV3.ArraySchemaObject\n\n const items = arrSchema.items as OpenAPIV3.SchemaObject\n\n schemaObject = items\n break\n }\n default:\n // TODO: primitive types ???\n break\n }\n\n if (!schemaObject) {\n return null\n }\n\n return schemaObjectToDefinitionProperties(schemaObject)\n}","import {OpenAPIV3} from \"openapi-types\";\nimport {DefinitionProperty} from \"@xyd-js/uniform\";\n\nimport {schemaObjectToDefinitionProperties} from \"./properties\";\n\nexport function oapResponseToDefinitionProperties(\n responses: OpenAPIV3.ResponsesObject\n): DefinitionProperty[] | null {\n let schemaObject: OpenAPIV3.SchemaObject | undefined\n // TODO: support another statuses\n if (responses[\"default\"]) {\n const w = responses[\"default\"] as OpenAPIV3.ResponseObject\n\n schemaObject = w?.content?.['application/json']?.schema as OpenAPIV3.SchemaObject\n } else if (responses[\"200\"]) {\n const w = responses[\"200\"] as OpenAPIV3.ResponseObject\n\n schemaObject = w?.content?.['application/json']?.schema as OpenAPIV3.SchemaObject\n }\n\n if (!schemaObject) {\n return null\n }\n\n switch (schemaObject.type) {\n case 'array':\n const arrSchema = schemaObject as OpenAPIV3.ArraySchemaObject\n\n const items = arrSchema.items as OpenAPIV3.SchemaObject\n\n schemaObject = items\n break\n default:\n break\n }\n\n return schemaObjectToDefinitionProperties(schemaObject)\n}","import {OpenAPIV3} from \"openapi-types\";\nimport Oas from \"oas\";\nimport {Reference, ReferenceType} from \"@xyd-js/uniform\";\n\nimport {SUPPORTED_HTTP_METHODS} from \"./const\";\nimport {oapPathToReference} from \"./paths\";\nimport {oapExamples} from \"./examples\";\n\n// TODO: support one-of\n// TODO: support $ref - currently we use $refParser.dereference that converts $ref into objects\n// TODO: better method check system - currently we need to manually check that in few methods\n\n// oapSchemaToReferences converts an OpenAPI schema to a list of uniform References\nexport function oapSchemaToReferences(\n schema: OpenAPIV3.Document\n): Reference[] {\n const references: Reference[] = [];\n const oas = new Oas(schema as any);\n\n Object.entries(schema.paths).forEach(([path, oapPath]) => {\n let type: ReferenceType;\n\n SUPPORTED_HTTP_METHODS.forEach((eachMethod) => {\n const httpMethod = eachMethod.toLowerCase()\n\n switch (httpMethod) {\n case 'get':\n break\n case 'put':\n break\n case 'post':\n break\n case 'delete':\n break\n default:\n console.error(`Unsupported method: ${httpMethod}`)\n return\n }\n\n const reference = oapPathToReference(\n httpMethod,\n path,\n oapPath as OpenAPIV3.PathItemObject\n )\n\n if (reference) {\n const operation = oas.operation(path, httpMethod);\n reference.examples.groups = oapExamples(oas, operation)\n\n references.push(reference)\n }\n })\n })\n\n return references\n}\n","import {OpenAPIV3} from \"openapi-types\";\nimport {Definition, ExampleGroup, Reference, ReferenceCategory} from \"@xyd-js/uniform\";\n\nimport {oapParametersToDefinitionProperties} from \"./parameters\";\nimport {oapRequestBodyToDefinitionProperties} from \"./requestBody\";\nimport {oapResponseToDefinitionProperties} from \"./responses\";\nimport {\n httpMethodToUniformMethod,\n toPascalCase\n} from \"./utils\";\n\n// oapPathToReference converts an OpenAPI path to a uniform Reference\nexport function oapPathToReference(\n httpMethod: \"get\" | \"put\" | \"post\" | \"delete\", // TODO: ts type\n path: string,\n oapPath: OpenAPIV3.PathItemObject,\n): Reference | null {\n const mType = httpMethodToUniformMethod(httpMethod)\n\n if (!mType) {\n console.error(`Unsupported method: ${httpMethod}`)\n return null\n }\n\n const definitions: Definition[] = []\n const exampleGroups: ExampleGroup[] = []\n\n const oapMethod = oapPath?.[httpMethod] as OpenAPIV3.OperationObject\n\n if (!oapMethod) {\n return null\n }\n\n const endpointRef: Reference = {\n title: oapMethod?.summary || \"\",\n canonical: toPascalCase(oapMethod?.summary || \"\"),\n description: oapMethod?.description || \"\",\n\n category: ReferenceCategory.REST,\n type: mType,\n\n context: {\n method: httpMethod,\n\n path\n },\n\n examples: {\n groups: exampleGroups,\n },\n definitions: definitions,\n }\n\n if (oapMethod.parameters) {\n const parameters = oapMethod.parameters as OpenAPIV3.ParameterObject[]\n\n const paramtersMap = oapParametersToDefinitionProperties(parameters) // TODO: finish\n\n Object.entries(paramtersMap).forEach(([key, definitionProperties]) => {\n let title: string\n\n // TODO: add context to definition\n switch (key) {\n case 'path':\n title = \"Paths\"\n break\n case 'query':\n title = \"Query\"\n break\n case 'header':\n title = \"Header\"\n break\n default:\n console.error(`Unsupported parameter type: ${key} for ${httpMethod} ${path}`)\n return\n }\n\n definitions.push({\n title,\n properties: definitionProperties\n })\n })\n }\n\n if (oapMethod.requestBody) {\n const reqBody = oapMethod.requestBody as OpenAPIV3.RequestBodyObject\n\n definitions.push({\n title: 'Request body',\n properties: oapRequestBodyToDefinitionProperties(reqBody) || []\n })\n }\n\n if (oapMethod.responses) {\n const responses = oapMethod.responses as OpenAPIV3.ResponsesObject\n\n definitions.push({\n title: 'Response',\n properties: oapResponseToDefinitionProperties(responses) || []\n })\n }\n\n return endpointRef\n}\n","import path from \"path\";\nimport fs from \"fs\";\nimport yaml from \"js-yaml\";\nimport $refParser from \"json-schema-ref-parser\";\nimport {OpenAPIV3} from \"openapi-types\";\n\nimport {ReferenceType} from \"@xyd-js/uniform\";\n\ntype Parameters = {\n query?: Record<string, string | number | boolean>;\n headers?: Record<string, string>;\n};\n\nexport function toPascalCase(str: string): string {\n return str\n .split(/[\\s_-]+/)\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join('');\n}\n\n// readOpenApiSpec reads an OpenAPI spec file and returns the content\nfunction readOpenApiSpec(filePath: string) {\n const ext = path.extname(filePath).toLowerCase();\n const content = fs.readFileSync(filePath, 'utf-8');\n\n if (ext === '.yaml' || ext === '.yml') {\n return yaml.load(content);\n } else if (ext === '.json') {\n return JSON.parse(content);\n } else {\n throw new Error('Unsupported file format. Use JSON or YAML.');\n }\n}\n\n// deferencedOpenAPI reads an OpenAPI spec file and returns a dereferenced OpenAPIV3.Document\n// dereferenced means that all $ref references are resolved automatically\nexport async function deferencedOpenAPI(openApiPath: string) {\n const openApiSpec = readOpenApiSpec(openApiPath);\n\n //@ts-ignore TODO: fix ts\n await $refParser.dereference(openApiSpec);\n\n return openApiSpec as OpenAPIV3.Document\n}\n\n// httpMethodToUniformMethod converts an HTTP method to a uniform ReferenceType\nexport function httpMethodToUniformMethod(method: string): ReferenceType | null {\n switch (method) {\n case 'get':\n return ReferenceType.REST_HTTP_GET\n case 'put':\n return ReferenceType.REST_HTTP_PUT\n case 'patch':\n return ReferenceType.REST_HTTP_PATCH\n case 'post':\n return ReferenceType.REST_HTTP_POST\n case 'delete':\n return ReferenceType.REST_HTTP_DELETE\n // case 'options':\n // return ReferenceType.REST_HTTP_OPTIONS\n // case 'head':\n // return ReferenceType.REST_HTTP_HEAD\n // case 'trace':\n // return ReferenceType.REST_HTTP_TRACE\n default:\n return null\n }\n}\n\n// schemaToRequestBody generates a request body from an OpenAPI schema\nfunction schemaToRequestBody(schema: OpenAPIV3.SchemaObject): string {\n const requestBody: any = {};\n\n if (schema.type === 'object' && schema.properties) {\n for (const [key, value] of Object.entries(schema.properties)) {\n if ((value as OpenAPIV3.SchemaObject).default !== undefined) {\n requestBody[key] = (value as OpenAPIV3.SchemaObject).default;\n } else {\n requestBody[key] = null; // or some placeholder value\n }\n }\n }\n\n return JSON.stringify(requestBody);\n}\n\n// generateRequestInitFromOpenAPIObject generates a RequestInit object from an OpenAPI object\nexport function generateRequestInitFromOapOperation(\n urlPath: string,\n operation: OpenAPIV3.OperationObject\n): { url: string, reqInit: RequestInit } {\n const reqInit: RequestInit = {}\n let queryParams = '';\n\n if (operation.parameters) {\n const parameters = operation.parameters as OpenAPIV3.ParameterObject[]\n\n const params = new URLSearchParams(\n Object.entries(parameters).map(([key, value]) => [key, String(value)])\n ).toString();\n\n queryParams += `?${params}`;\n }\n\n if (operation.requestBody) {\n const reqBody = operation.requestBody as OpenAPIV3.RequestBodyObject;\n const contentType = Object.keys(reqBody.content || {})[0];\n\n if (contentType === \"application/json\") {\n const schema = reqBody.content['application/json'].schema as OpenAPIV3.SchemaObject\n\n reqInit.body = schemaToRequestBody(schema);\n reqInit.headers = {\n 'Content-Type': 'application/json',\n }\n }\n }\n\n return {\n url: `${urlPath}${queryParams}`,\n reqInit,\n };\n}\n\n","import {OpenAPIV3} from \"openapi-types\";\nimport Oas from \"oas\";\n// @ts-ignore\nimport {Operation} from 'oas/operation'; // TODO: fix ts\nimport oasToSnippet from \"@readme/oas-to-snippet\";\nimport OpenAPISampler from \"openapi-sampler\";\nimport type {JSONSchema7} from \"json-schema\";\n\nimport {ExampleGroup, Example} from \"@xyd-js/uniform\";\n\n// TODO: option with another languages\n// TODO: uniform plugins\n// TODO: fs uniform plugins\nexport function oapExamples(\n oas: Oas,\n operation: Operation\n): ExampleGroup[] {\n const exampleGroups: ExampleGroup[] = []\n\n if (operation.schema.requestBody) {\n const body = operation.schema.requestBody as OpenAPIV3.RequestBodyObject\n const schema = fixAllOfBug(\n body.content[\"application/json\"].schema as JSONSchema7\n )\n\n if (!schema) {\n return exampleGroups\n }\n\n const fakeData = OpenAPISampler.sample(schema)\n\n // TODO: snippet languages options\n const {code} = oasToSnippet(oas, operation, {\n body: fakeData\n }, null, \"shell\");\n\n const examples: Example[] = []\n\n examples.push({\n codeblock: {\n tabs: [{\n title: \"curl\",\n language: \"curl\",\n code: code || \"\",\n }]\n }\n })\n\n exampleGroups.push({\n description: \"Example request\",\n examples\n })\n }\n\n if (operation.schema.responses) {\n const responses = operation.schema.responses as OpenAPIV3.ResponsesObject\n\n const examples: Example[] = []\n\n Object.entries(responses).forEach(([status, r]) => {\n const response = r as OpenAPIV3.ResponseObject\n const schema = response?.content?.[\"application/json\"].schema as JSONSchema7\n\n if (!schema) {\n return\n }\n\n const fakeData = OpenAPISampler.sample(schema)\n\n examples.push({\n codeblock: {\n title: status,\n tabs: [{\n title: \"json\",\n language: \"json\",\n code: JSON.stringify(fakeData, null, 2) || \"\",\n }]\n }\n })\n })\n\n exampleGroups.push({\n description: \"Response\",\n examples\n })\n }\n\n return exampleGroups\n}\n\n/*\nfixAllOfBug fixes below case:\n\n```yaml\n allOf:\n - $ref: '#/components/schemas/SomeSchema'\n - type: object\n required:\n properties:\n```\n*/\nfunction fixAllOfBug(schema: JSONSchema7) {\n const modifiedSchema = {...schema}\n\n if (schema.allOf) {\n schema.allOf.forEach((prop, i) => {\n const propObj = prop as object\n\n if (\"properties\" in propObj && !propObj[\"properties\"]) {\n delete modifiedSchema.allOf?.[i]\n }\n })\n }\n\n return modifiedSchema\n}"],"mappings":"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","names":["path","path"]}
|
|
1
|
+
{"version":3,"sources":["../src/const.ts","../src/parameters.ts","../src/properties.ts","../src/requestBody.ts","../src/responses.ts","../src/schema.ts","../src/paths.ts","../src/utils.ts","../src/examples.ts"],"sourcesContent":["export const SUPPORTED_HTTP_METHODS: string[] = [\n 'get',\n 'put',\n 'patch',\n 'post',\n 'delete',\n // 'options',\n // 'head',\n // 'trace'\n];","import {OpenAPIV3} from \"openapi-types\";\nimport {DefinitionProperty} from \"@xyd-js/uniform\";\n\n// oapParametersToDefinitionProperties converts OpenAPI parameters to uniform DefinitionProperties\nexport function oapParametersToDefinitionProperties(\n parameters: OpenAPIV3.ParameterObject[]\n): { [key: string]: DefinitionProperty[] } {\n const parameterIn: { [key: string]: DefinitionProperty[] } = {}\n\n parameters.forEach((param) => {\n if (!parameterIn[param.in]) {\n parameterIn[param.in] = []\n }\n\n const schema = param.schema as OpenAPIV3.SchemaObject\n\n const property: DefinitionProperty = {\n name: param.name,\n type: schema.type || \"\",\n description: param.description || \"\"\n }\n\n parameterIn[param.in].push(property)\n })\n\n return parameterIn\n}\n","import {OpenAPIV3} from \"openapi-types\";\nimport {DefinitionProperty} from \"@xyd-js/uniform\";\n\n// schemaObjectToDefinitionProperties converts OpenAPI schema object to uniform DefinitionProperty[]\nexport function schemaObjectToDefinitionProperties(v: OpenAPIV3.SchemaObject): DefinitionProperty[] {\n return Object.entries(v.properties || {}).map(([name, prop]) => {\n let objProp = prop as OpenAPIV3.SchemaObject\n\n let merged: DefinitionProperty[] = []\n\n if (objProp.allOf) {\n merged = objProp.allOf.reduce((acc, of) => {\n return [\n ...acc,\n ...schemaObjectToDefinitionProperties(of as OpenAPIV3.SchemaObject)\n ]\n }, [] as DefinitionProperty[])\n }\n\n if (objProp.type === \"array\") {\n const items = objProp.items as OpenAPIV3.SchemaObject\n\n merged = schemaObjectToDefinitionProperties(items)\n }\n\n return {\n name: name,\n type: objProp.type || \"\",\n description: objProp.description || \"\",\n properties: (\n merged?.length\n ? merged\n : objProp.properties ? schemaObjectToDefinitionProperties(objProp) : []\n )\n }\n })\n}","import {OpenAPIV3} from \"openapi-types\";\nimport {DefinitionProperty} from \"@xyd-js/uniform\";\n\nimport {schemaObjectToDefinitionProperties} from \"./properties\";\n\n// oapRequestBodyToDefinitionProperties converts OpenAPI request body to uniform DefinitionProperties\nexport function oapRequestBodyToDefinitionProperties(\n reqBody: OpenAPIV3.RequestBodyObject\n): DefinitionProperty[] | null {\n // TODO: support other content types ???\n const schema = reqBody.content['application/json'].schema as OpenAPIV3.SchemaObject\n\n let schemaObject: OpenAPIV3.SchemaObject | undefined\n\n if (schema.allOf) {\n return schema.allOf.reduce((acc, of) => {\n const fakeBody: OpenAPIV3.RequestBodyObject = {\n content: {\n 'application/json': {\n schema: of\n }\n }\n }\n\n return [\n ...acc,\n ...oapRequestBodyToDefinitionProperties(fakeBody) || []\n ]\n }, [] as DefinitionProperty[])\n }\n\n switch (schema.type) {\n case 'object': {\n schemaObject = schema\n break\n }\n case 'array': {\n const arrSchema = schema as OpenAPIV3.ArraySchemaObject\n\n const items = arrSchema.items as OpenAPIV3.SchemaObject\n\n schemaObject = items\n break\n }\n default:\n // TODO: primitive types ???\n break\n }\n\n if (!schemaObject) {\n return null\n }\n\n return schemaObjectToDefinitionProperties(schemaObject)\n}","import {OpenAPIV3} from \"openapi-types\";\nimport {DefinitionProperty} from \"@xyd-js/uniform\";\n\nimport {schemaObjectToDefinitionProperties} from \"./properties\";\n\nexport function oapResponseToDefinitionProperties(\n responses: OpenAPIV3.ResponsesObject\n): DefinitionProperty[] | null {\n let schemaObject: OpenAPIV3.SchemaObject | undefined\n // TODO: support another statuses\n if (responses[\"default\"]) {\n const w = responses[\"default\"] as OpenAPIV3.ResponseObject\n\n schemaObject = w?.content?.['application/json']?.schema as OpenAPIV3.SchemaObject\n } else if (responses[\"200\"]) {\n const w = responses[\"200\"] as OpenAPIV3.ResponseObject\n\n schemaObject = w?.content?.['application/json']?.schema as OpenAPIV3.SchemaObject\n }\n\n if (!schemaObject) {\n return null\n }\n\n switch (schemaObject.type) {\n case 'array':\n const arrSchema = schemaObject as OpenAPIV3.ArraySchemaObject\n\n const items = arrSchema.items as OpenAPIV3.SchemaObject\n\n schemaObject = items\n break\n default:\n break\n }\n\n return schemaObjectToDefinitionProperties(schemaObject)\n}","import {OpenAPIV3} from \"openapi-types\";\nimport Oas from \"oas\";\n\nimport type {Reference, OpenAPIReferenceContext} from \"@xyd-js/uniform\";\n\nimport {SUPPORTED_HTTP_METHODS} from \"./const\";\nimport {oapPathToReference} from \"./paths\";\nimport {oapExamples} from \"./examples\";\n\n// TODO: support one-of\n// TODO: support $ref - currently we use $refParser.dereference that converts $ref into objects\n// TODO: better method check system - currently we need to manually check that in few methods\n\n// oapSchemaToReferences converts an OpenAPI schema to a list of uniform References\nexport function oapSchemaToReferences(\n schema: OpenAPIV3.Document\n): Reference[] {\n const references: Reference[] = [];\n const oas = new Oas(schema as any);\n\n const server = schema.servers?.[0]?.url || \"\"\n\n Object.entries(schema.paths).forEach(([path, oapPath]) => {\n SUPPORTED_HTTP_METHODS.forEach((eachMethod) => {\n const httpMethod = eachMethod.toLowerCase()\n\n switch (httpMethod) {\n case 'get':\n break\n case 'put':\n break\n case 'post':\n break\n case 'delete':\n break\n case 'patch':\n break\n default:\n console.error(`Unsupported method v111: ${httpMethod}`)\n return\n }\n\n const reference = oapPathToReference(\n httpMethod,\n path,\n oapPath as OpenAPIV3.PathItemObject\n )\n\n if (reference) {\n const ctx = reference.context as OpenAPIReferenceContext\n ctx.path = `${encodeURIComponent(server)}${encodeURIComponent(path)}` // TODO: it should be inside `oapPathToReference` ?\n\n const operation = oas.operation(path, httpMethod);\n reference.examples.groups = oapExamples(oas, operation)\n\n references.push(reference)\n }\n })\n })\n\n return references\n}\n","import {OpenAPIV3} from \"openapi-types\";\nimport {Definition, ExampleGroup, Reference, ReferenceCategory} from \"@xyd-js/uniform\";\n\nimport {oapParametersToDefinitionProperties} from \"./parameters\";\nimport {oapRequestBodyToDefinitionProperties} from \"./requestBody\";\nimport {oapResponseToDefinitionProperties} from \"./responses\";\nimport {\n httpMethodToUniformMethod,\n toPascalCase\n} from \"./utils\";\n\n// oapPathToReference converts an OpenAPI path to a uniform Reference\nexport function oapPathToReference(\n httpMethod: \"get\" | \"put\" | \"post\" | \"delete\" | \"patch\", // TODO: ts type\n path: string,\n oapPath: OpenAPIV3.PathItemObject,\n): Reference | null {\n const mType = httpMethodToUniformMethod(httpMethod)\n\n if (!mType) {\n console.error(`Unsupported method v222: ${httpMethod}`)\n return null\n }\n\n const definitions: Definition[] = []\n const exampleGroups: ExampleGroup[] = []\n\n const oapMethod = oapPath?.[httpMethod] as OpenAPIV3.OperationObject\n\n if (!oapMethod) {\n return null\n }\n\n const endpointRef: Reference = {\n title: oapMethod?.summary || \"\",\n canonical: toPascalCase(oapMethod?.summary || \"\"),\n description: oapMethod?.description || \"\",\n\n category: ReferenceCategory.REST,\n type: mType,\n\n context: {\n method: httpMethod,\n\n path: `${encodeURIComponent(path)}`,\n },\n\n examples: {\n groups: exampleGroups,\n },\n definitions: definitions,\n }\n\n if (oapMethod.parameters) {\n const parameters = oapMethod.parameters as OpenAPIV3.ParameterObject[]\n\n const paramtersMap = oapParametersToDefinitionProperties(parameters) // TODO: finish\n\n Object.entries(paramtersMap).forEach(([key, definitionProperties]) => {\n let title: string\n\n switch (key) {\n case 'path':\n title = \"Path parameters\"\n break\n case 'query':\n title = \"Query\"\n break\n case 'header':\n title = \"Header\"\n break\n default:\n console.error(`Unsupported parameter type: ${key} for ${httpMethod} ${path}`)\n return\n }\n\n definitions.push({\n title,\n properties: definitionProperties\n })\n })\n }\n\n if (oapMethod.requestBody) {\n const reqBody = oapMethod.requestBody as OpenAPIV3.RequestBodyObject\n\n definitions.push({\n title: 'Request body',\n properties: oapRequestBodyToDefinitionProperties(reqBody) || []\n })\n }\n\n if (oapMethod.responses) {\n const responses = oapMethod.responses as OpenAPIV3.ResponsesObject\n\n definitions.push({\n title: 'Response',\n properties: oapResponseToDefinitionProperties(responses) || []\n })\n }\n\n return endpointRef\n}\n","import path from \"path\";\nimport fs from \"fs\";\nimport yaml from \"js-yaml\";\nimport $refParser from \"json-schema-ref-parser\";\nimport {OpenAPIV3} from \"openapi-types\";\n\nimport {ReferenceType} from \"@xyd-js/uniform\";\n\ntype Parameters = {\n query?: Record<string, string | number | boolean>;\n headers?: Record<string, string>;\n};\n\nexport function toPascalCase(str: string): string {\n return str\n .split(/[\\s_-]+/)\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join('');\n}\n\n// TODO: support from url?\n// readOpenApiSpec reads an OpenAPI spec file and returns the content\nfunction readOpenApiSpec(filePath: string) {\n const ext = path.extname(filePath).toLowerCase();\n const content = fs.readFileSync(filePath, 'utf-8');\n\n if (ext === '.yaml' || ext === '.yml') {\n return yaml.load(content);\n } else if (ext === '.json') {\n return JSON.parse(content);\n } else {\n throw new Error('Unsupported file format. Use JSON or YAML.');\n }\n}\n\n// deferencedOpenAPI reads an OpenAPI spec file and returns a dereferenced OpenAPIV3.Document\n// dereferenced means that all $ref references are resolved automatically\nexport async function deferencedOpenAPI(openApiPath: string) {\n const openApiSpec = readOpenApiSpec(openApiPath);\n\n //@ts-ignore TODO: fix ts\n await $refParser.dereference(openApiSpec);\n\n return openApiSpec as OpenAPIV3.Document\n}\n\n// httpMethodToUniformMethod converts an HTTP method to a uniform ReferenceType\nexport function httpMethodToUniformMethod(method: string): ReferenceType | null {\n switch (method) {\n case 'get':\n return ReferenceType.REST_HTTP_GET\n case 'put':\n return ReferenceType.REST_HTTP_PUT\n case 'patch':\n return ReferenceType.REST_HTTP_PATCH\n case 'post':\n return ReferenceType.REST_HTTP_POST\n case 'delete':\n return ReferenceType.REST_HTTP_DELETE\n // case 'options':\n // return ReferenceType.REST_HTTP_OPTIONS\n // case 'head':\n // return ReferenceType.REST_HTTP_HEAD\n // case 'trace':\n // return ReferenceType.REST_HTTP_TRACE\n default:\n return null\n }\n}\n\n// schemaToRequestBody generates a request body from an OpenAPI schema\nfunction schemaToRequestBody(schema: OpenAPIV3.SchemaObject): string {\n const requestBody: any = {};\n\n if (schema.type === 'object' && schema.properties) {\n for (const [key, value] of Object.entries(schema.properties)) {\n if ((value as OpenAPIV3.SchemaObject).default !== undefined) {\n requestBody[key] = (value as OpenAPIV3.SchemaObject).default;\n } else {\n requestBody[key] = null; // or some placeholder value\n }\n }\n }\n\n return JSON.stringify(requestBody);\n}\n\n// generateRequestInitFromOpenAPIObject generates a RequestInit object from an OpenAPI object\nexport function generateRequestInitFromOapOperation(\n urlPath: string,\n operation: OpenAPIV3.OperationObject\n): { url: string, reqInit: RequestInit } {\n const reqInit: RequestInit = {}\n let queryParams = '';\n\n if (operation.parameters) {\n const parameters = operation.parameters as OpenAPIV3.ParameterObject[]\n\n const params = new URLSearchParams(\n Object.entries(parameters).map(([key, value]) => [key, String(value)])\n ).toString();\n\n queryParams += `?${params}`;\n }\n\n if (operation.requestBody) {\n const reqBody = operation.requestBody as OpenAPIV3.RequestBodyObject;\n const contentType = Object.keys(reqBody.content || {})[0];\n\n if (contentType === \"application/json\") {\n const schema = reqBody.content['application/json'].schema as OpenAPIV3.SchemaObject\n\n reqInit.body = schemaToRequestBody(schema);\n reqInit.headers = {\n 'Content-Type': 'application/json',\n }\n }\n }\n\n return {\n url: `${urlPath}${queryParams}`,\n reqInit,\n };\n}\n\n","import {OpenAPIV3} from \"openapi-types\";\nimport Oas from \"oas\";\n// @ts-ignore\nimport {Operation} from 'oas/operation'; // TODO: fix ts\nimport oasToSnippet from \"@readme/oas-to-snippet\";\nimport OpenAPISampler from \"openapi-sampler\";\nimport type {JSONSchema7} from \"json-schema\";\n\nimport {ExampleGroup, Example} from \"@xyd-js/uniform\";\n\n// TODO: option with another languages\n// TODO: uniform plugins\n// TODO: fs uniform plugins\nexport function oapExamples(\n oas: Oas,\n operation: Operation\n): ExampleGroup[] {\n const exampleGroups: ExampleGroup[] = []\n\n if (operation.schema.requestBody) {\n const body = operation.schema.requestBody as OpenAPIV3.RequestBodyObject\n const schema = fixAllOfBug(\n body.content[\"application/json\"].schema as JSONSchema7\n )\n\n if (!schema) {\n return exampleGroups\n }\n\n const fakeData = OpenAPISampler.sample(schema)\n\n // TODO: snippet languages options\n const {code} = oasToSnippet(oas, operation, {\n body: fakeData\n }, null, \"shell\");\n\n const examples: Example[] = []\n\n examples.push({\n codeblock: {\n tabs: [{\n title: \"curl\",\n language: \"curl\",\n code: code || \"\",\n }]\n }\n })\n\n exampleGroups.push({\n description: \"Example request\",\n examples\n })\n }\n\n if (operation.schema.responses) {\n const responses = operation.schema.responses as OpenAPIV3.ResponsesObject\n\n const examples: Example[] = []\n\n Object.entries(responses).forEach(([status, r]) => {\n const response = r as OpenAPIV3.ResponseObject\n const schema = response?.content?.[\"application/json\"].schema as JSONSchema7\n\n if (!schema) {\n return\n }\n\n const fakeData = OpenAPISampler.sample(schema)\n\n examples.push({\n codeblock: {\n title: status,\n tabs: [{\n title: \"json\",\n language: \"json\",\n code: JSON.stringify(fakeData, null, 2) || \"\",\n }]\n }\n })\n })\n\n exampleGroups.push({\n description: \"Response\",\n examples\n })\n }\n\n return exampleGroups\n}\n\n/*\nfixAllOfBug fixes below case:\n\n```yaml\n allOf:\n - $ref: '#/components/schemas/SomeSchema'\n - type: object\n required:\n properties:\n```\n*/\nfunction fixAllOfBug(schema: JSONSchema7) {\n const modifiedSchema = {...schema}\n\n if (schema.allOf) {\n schema.allOf.forEach((prop, i) => {\n const propObj = prop as object\n\n if (\"properties\" in propObj && !propObj[\"properties\"]) {\n delete modifiedSchema.allOf?.[i]\n }\n })\n }\n\n return modifiedSchema\n}"],"mappings":"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","names":["path","path"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var C=Object.create;var b=Object.defineProperty;var $=Object.getOwnPropertyDescriptor;var H=Object.getOwnPropertyNames;var J=Object.getPrototypeOf,N=Object.prototype.hasOwnProperty;var G=(t,e,r,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of H(e))!N.call(t,o)&&o!==r&&b(t,o,{get:()=>e[o],enumerable:!(s=$(e,o))||s.enumerable});return t};var m=(t,e,r)=>(r=t!=null?C(J(t)):{},G(e||!t||!t.__esModule?b(r,"default",{value:t,enumerable:!0}):r,t));var P=m(require("path"),1);var j=["get","put","patch","post","delete"];function I(t){let e={};return t.forEach(r=>{e[r.in]||(e[r.in]=[]);let s=r.schema,o={name:r.name,type:s.type||"",description:r.description||""};e[r.in].push(o)}),e}function u(t){return Object.entries(t.properties||{}).map(([e,r])=>{let s=r,o=[];if(s.allOf&&(o=s.allOf.reduce((p,n)=>[...p,...u(n)],[])),s.type==="array"){let p=s.items;o=u(p)}return{name:e,type:s.type||"",description:s.description||"",properties:o!=null&&o.length?o:s.properties?u(s):[]}})}function d(t){let e=t.content["application/json"].schema,r;if(e.allOf)return e.allOf.reduce((s,o)=>{let p={content:{"application/json":{schema:o}}};return[...s,...d(p)||[]]},[]);switch(e.type){case"object":{r=e;break}case"array":{r=e.items;break}default:break}return r?u(r):null}function A(t){var r,s,o,p;let e;if(t.default){let n=t.default;e=(s=(r=n==null?void 0:n.content)==null?void 0:r["application/json"])==null?void 0:s.schema}else if(t[200]){let n=t[200];e=(p=(o=n==null?void 0:n.content)==null?void 0:o["application/json"])==null?void 0:p.schema}if(!e)return null;switch(e.type){case"array":e=e.items;break;default:break}return u(e)}var w=m(require("oas"),1);var E=require("@xyd-js/uniform");var S=m(require("path"),1),R=m(require("fs"),1),T=m(require("js-yaml"),1),x=m(require("json-schema-ref-parser"),1),O=require("@xyd-js/uniform");function V(t){return t.split(/[\s_-]+/).map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join("")}function L(t){let e=S.default.extname(t).toLowerCase(),r=R.default.readFileSync(t,"utf-8");if(e===".yaml"||e===".yml")return T.default.load(r);if(e===".json")return JSON.parse(r);throw new Error("Unsupported file format. Use JSON or YAML.")}async function g(t){let e=L(t);return await x.default.dereference(e),e}function D(t){switch(t){case"get":return O.ReferenceType.REST_HTTP_GET;case"put":return O.ReferenceType.REST_HTTP_PUT;case"patch":return O.ReferenceType.REST_HTTP_PATCH;case"post":return O.ReferenceType.REST_HTTP_POST;case"delete":return O.ReferenceType.REST_HTTP_DELETE;default:return null}}function q(t,e,r){let s=D(t);if(!s)return console.error(`Unsupported method v222: ${t}`),null;let o=[],p=[],n=r==null?void 0:r[t];if(!n)return null;let i={title:(n==null?void 0:n.summary)||"",canonical:V((n==null?void 0:n.summary)||""),description:(n==null?void 0:n.description)||"",category:E.ReferenceCategory.REST,type:s,context:{method:t,path:`${encodeURIComponent(e)}`},examples:{groups:p},definitions:o};if(n.parameters){let c=n.parameters,f=I(c);Object.entries(f).forEach(([a,y])=>{let l;switch(a){case"path":l="Paths";break;case"query":l="Query";break;case"header":l="Header";break;default:console.error(`Unsupported parameter type: ${a} for ${t} ${e}`);return}o.push({title:l,properties:y})})}if(n.requestBody){let c=n.requestBody;o.push({title:"Request body",properties:d(c)||[]})}if(n.responses){let c=n.responses;o.push({title:"Response",properties:A(c)||[]})}return i}var k=m(require("@readme/oas-to-snippet"),1),h=m(require("openapi-sampler"),1);function B(t,e){let r=[];if(e.schema.requestBody){let s=e.schema.requestBody,o=v(s.content["application/json"].schema);if(!o)return r;let p=h.default.sample(o),{code:n}=(0,k.default)(t,e,{body:p},null,"shell"),i=[];i.push({codeblock:{tabs:[{title:"curl",language:"curl",code:n||""}]}}),r.push({description:"Example request",examples:i})}if(e.schema.responses){let s=e.schema.responses,o=[];Object.entries(s).forEach(([p,n])=>{var a;let i=n,c=(a=i==null?void 0:i.content)==null?void 0:a["application/json"].schema;if(!c)return;let f=h.default.sample(c);o.push({codeblock:{title:p,tabs:[{title:"json",language:"json",code:JSON.stringify(f,null,2)||""}]}})}),r.push({description:"Response",examples:o})}return r}function v(t){let e={...t};return t.allOf&&t.allOf.forEach((r,s)=>{var p;let o=r;"properties"in o&&!o.properties&&((p=e.allOf)==null||delete p[s])}),e}function U(t){var o,p;let e=[],r=new w.default(t),s=((p=(o=t.servers)==null?void 0:o[0])==null?void 0:p.url)||"";return Object.entries(t.paths).forEach(([n,i])=>{j.forEach(c=>{let f=c.toLowerCase();switch(f){case"get":break;case"put":break;case"post":break;case"delete":break;case"patch":break;default:console.error(`Unsupported method v111: ${f}`);return}let a=q(f,n,i);if(a){let y=a.context;y.path=`${encodeURIComponent(s)}${encodeURIComponent(n)}`;let l=r.operation(n,f);a.examples.groups=B(r,l),e.push(a)}})}),e}var _=m(require("fs"),1);(async()=>{let t=P.default.join(process.cwd(),"./examples/semi/openapi.yaml"),e=await g(t),r=U(e);console.log(P.default.join(process.cwd(),"./examples/semi/references.json")),_.default.writeFileSync(P.default.join(process.cwd(),"./examples/semi/references.json"),JSON.stringify(r,null,2)),console.log(2)})();
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../semi/index.ts","../../src/const.ts","../../src/parameters.ts","../../src/properties.ts","../../src/requestBody.ts","../../src/responses.ts","../../src/schema.ts","../../src/paths.ts","../../src/utils.ts","../../src/examples.ts"],"sourcesContent":["import path from 'path';\n\nimport {\n deferencedOpenAPI,\n oapSchemaToReferences,\n} from \"../../src\";\nimport fs from \"fs\";\n\n(async () => {\n const openApiPath = path.join(process.cwd(), './examples/semi/openapi.yaml');\n const schema = await deferencedOpenAPI(openApiPath)\n const references = oapSchemaToReferences(schema)\n\n console.log(path.join(process.cwd(), './examples/semi/references.json'))\n fs.writeFileSync(path.join(process.cwd(), './examples/semi/references.json'), JSON.stringify(references, null, 2))\n console.log(2)\n})()\n\n","export const SUPPORTED_HTTP_METHODS: string[] = [\n 'get',\n 'put',\n 'patch',\n 'post',\n 'delete',\n // 'options',\n // 'head',\n // 'trace'\n];","import {OpenAPIV3} from \"openapi-types\";\nimport {DefinitionProperty} from \"@xyd-js/uniform\";\n\n// oapParametersToDefinitionProperties converts OpenAPI parameters to uniform DefinitionProperties\nexport function oapParametersToDefinitionProperties(\n parameters: OpenAPIV3.ParameterObject[]\n): { [key: string]: DefinitionProperty[] } {\n const parameterIn: { [key: string]: DefinitionProperty[] } = {}\n\n parameters.forEach((param) => {\n if (!parameterIn[param.in]) {\n parameterIn[param.in] = []\n }\n\n const schema = param.schema as OpenAPIV3.SchemaObject\n\n const property: DefinitionProperty = {\n name: param.name,\n type: schema.type || \"\",\n description: param.description || \"\"\n }\n\n parameterIn[param.in].push(property)\n })\n\n return parameterIn\n}\n","import {OpenAPIV3} from \"openapi-types\";\nimport {DefinitionProperty} from \"@xyd-js/uniform\";\n\n// schemaObjectToDefinitionProperties converts OpenAPI schema object to uniform DefinitionProperty[]\nexport function schemaObjectToDefinitionProperties(v: OpenAPIV3.SchemaObject): DefinitionProperty[] {\n return Object.entries(v.properties || {}).map(([name, prop]) => {\n let objProp = prop as OpenAPIV3.SchemaObject\n\n let merged: DefinitionProperty[] = []\n\n if (objProp.allOf) {\n merged = objProp.allOf.reduce((acc, of) => {\n return [\n ...acc,\n ...schemaObjectToDefinitionProperties(of as OpenAPIV3.SchemaObject)\n ]\n }, [] as DefinitionProperty[])\n }\n\n if (objProp.type === \"array\") {\n const items = objProp.items as OpenAPIV3.SchemaObject\n\n merged = schemaObjectToDefinitionProperties(items)\n }\n\n return {\n name: name,\n type: objProp.type || \"\",\n description: objProp.description || \"\",\n properties: (\n merged?.length\n ? merged\n : objProp.properties ? schemaObjectToDefinitionProperties(objProp) : []\n )\n }\n })\n}","import {OpenAPIV3} from \"openapi-types\";\nimport {DefinitionProperty} from \"@xyd-js/uniform\";\n\nimport {schemaObjectToDefinitionProperties} from \"./properties\";\n\n// oapRequestBodyToDefinitionProperties converts OpenAPI request body to uniform DefinitionProperties\nexport function oapRequestBodyToDefinitionProperties(\n reqBody: OpenAPIV3.RequestBodyObject\n): DefinitionProperty[] | null {\n // TODO: support other content types ???\n const schema = reqBody.content['application/json'].schema as OpenAPIV3.SchemaObject\n\n let schemaObject: OpenAPIV3.SchemaObject | undefined\n\n if (schema.allOf) {\n return schema.allOf.reduce((acc, of) => {\n const fakeBody: OpenAPIV3.RequestBodyObject = {\n content: {\n 'application/json': {\n schema: of\n }\n }\n }\n\n return [\n ...acc,\n ...oapRequestBodyToDefinitionProperties(fakeBody) || []\n ]\n }, [] as DefinitionProperty[])\n }\n\n switch (schema.type) {\n case 'object': {\n schemaObject = schema\n break\n }\n case 'array': {\n const arrSchema = schema as OpenAPIV3.ArraySchemaObject\n\n const items = arrSchema.items as OpenAPIV3.SchemaObject\n\n schemaObject = items\n break\n }\n default:\n // TODO: primitive types ???\n break\n }\n\n if (!schemaObject) {\n return null\n }\n\n return schemaObjectToDefinitionProperties(schemaObject)\n}","import {OpenAPIV3} from \"openapi-types\";\nimport {DefinitionProperty} from \"@xyd-js/uniform\";\n\nimport {schemaObjectToDefinitionProperties} from \"./properties\";\n\nexport function oapResponseToDefinitionProperties(\n responses: OpenAPIV3.ResponsesObject\n): DefinitionProperty[] | null {\n let schemaObject: OpenAPIV3.SchemaObject | undefined\n // TODO: support another statuses\n if (responses[\"default\"]) {\n const w = responses[\"default\"] as OpenAPIV3.ResponseObject\n\n schemaObject = w?.content?.['application/json']?.schema as OpenAPIV3.SchemaObject\n } else if (responses[\"200\"]) {\n const w = responses[\"200\"] as OpenAPIV3.ResponseObject\n\n schemaObject = w?.content?.['application/json']?.schema as OpenAPIV3.SchemaObject\n }\n\n if (!schemaObject) {\n return null\n }\n\n switch (schemaObject.type) {\n case 'array':\n const arrSchema = schemaObject as OpenAPIV3.ArraySchemaObject\n\n const items = arrSchema.items as OpenAPIV3.SchemaObject\n\n schemaObject = items\n break\n default:\n break\n }\n\n return schemaObjectToDefinitionProperties(schemaObject)\n}","import {OpenAPIV3} from \"openapi-types\";\nimport Oas from \"oas\";\n\nimport type {Reference, OpenAPIReferenceContext} from \"@xyd-js/uniform\";\n\nimport {SUPPORTED_HTTP_METHODS} from \"./const\";\nimport {oapPathToReference} from \"./paths\";\nimport {oapExamples} from \"./examples\";\n\n// TODO: support one-of\n// TODO: support $ref - currently we use $refParser.dereference that converts $ref into objects\n// TODO: better method check system - currently we need to manually check that in few methods\n\n// oapSchemaToReferences converts an OpenAPI schema to a list of uniform References\nexport function oapSchemaToReferences(\n schema: OpenAPIV3.Document\n): Reference[] {\n const references: Reference[] = [];\n const oas = new Oas(schema as any);\n\n const server = schema.servers?.[0]?.url || \"\"\n\n Object.entries(schema.paths).forEach(([path, oapPath]) => {\n SUPPORTED_HTTP_METHODS.forEach((eachMethod) => {\n const httpMethod = eachMethod.toLowerCase()\n\n switch (httpMethod) {\n case 'get':\n break\n case 'put':\n break\n case 'post':\n break\n case 'delete':\n break\n case 'patch':\n break\n default:\n console.error(`Unsupported method v111: ${httpMethod}`)\n return\n }\n\n const reference = oapPathToReference(\n httpMethod,\n path,\n oapPath as OpenAPIV3.PathItemObject\n )\n\n if (reference) {\n const ctx = reference.context as OpenAPIReferenceContext\n ctx.path = `${encodeURIComponent(server)}${encodeURIComponent(path)}` // TODO: it should be inside `oapPathToReference` ?\n\n const operation = oas.operation(path, httpMethod);\n reference.examples.groups = oapExamples(oas, operation)\n\n references.push(reference)\n }\n })\n })\n\n return references\n}\n","import {OpenAPIV3} from \"openapi-types\";\nimport {Definition, ExampleGroup, Reference, ReferenceCategory} from \"@xyd-js/uniform\";\n\nimport {oapParametersToDefinitionProperties} from \"./parameters\";\nimport {oapRequestBodyToDefinitionProperties} from \"./requestBody\";\nimport {oapResponseToDefinitionProperties} from \"./responses\";\nimport {\n httpMethodToUniformMethod,\n toPascalCase\n} from \"./utils\";\n\n// oapPathToReference converts an OpenAPI path to a uniform Reference\nexport function oapPathToReference(\n httpMethod: \"get\" | \"put\" | \"post\" | \"delete\" | \"patch\", // TODO: ts type\n path: string,\n oapPath: OpenAPIV3.PathItemObject,\n): Reference | null {\n const mType = httpMethodToUniformMethod(httpMethod)\n\n if (!mType) {\n console.error(`Unsupported method v222: ${httpMethod}`)\n return null\n }\n\n const definitions: Definition[] = []\n const exampleGroups: ExampleGroup[] = []\n\n const oapMethod = oapPath?.[httpMethod] as OpenAPIV3.OperationObject\n\n if (!oapMethod) {\n return null\n }\n\n const endpointRef: Reference = {\n title: oapMethod?.summary || \"\",\n canonical: toPascalCase(oapMethod?.summary || \"\"),\n description: oapMethod?.description || \"\",\n\n category: ReferenceCategory.REST,\n type: mType,\n\n context: {\n method: httpMethod,\n\n path: `${encodeURIComponent(path)}`,\n },\n\n examples: {\n groups: exampleGroups,\n },\n definitions: definitions,\n }\n\n if (oapMethod.parameters) {\n const parameters = oapMethod.parameters as OpenAPIV3.ParameterObject[]\n\n const paramtersMap = oapParametersToDefinitionProperties(parameters) // TODO: finish\n\n Object.entries(paramtersMap).forEach(([key, definitionProperties]) => {\n let title: string\n\n // TODO: add context to definition\n switch (key) {\n case 'path':\n title = \"Paths\"\n break\n case 'query':\n title = \"Query\"\n break\n case 'header':\n title = \"Header\"\n break\n default:\n console.error(`Unsupported parameter type: ${key} for ${httpMethod} ${path}`)\n return\n }\n\n definitions.push({\n title,\n properties: definitionProperties\n })\n })\n }\n\n if (oapMethod.requestBody) {\n const reqBody = oapMethod.requestBody as OpenAPIV3.RequestBodyObject\n\n definitions.push({\n title: 'Request body',\n properties: oapRequestBodyToDefinitionProperties(reqBody) || []\n })\n }\n\n if (oapMethod.responses) {\n const responses = oapMethod.responses as OpenAPIV3.ResponsesObject\n\n definitions.push({\n title: 'Response',\n properties: oapResponseToDefinitionProperties(responses) || []\n })\n }\n\n return endpointRef\n}\n","import path from \"path\";\nimport fs from \"fs\";\nimport yaml from \"js-yaml\";\nimport $refParser from \"json-schema-ref-parser\";\nimport {OpenAPIV3} from \"openapi-types\";\n\nimport {ReferenceType} from \"@xyd-js/uniform\";\n\ntype Parameters = {\n query?: Record<string, string | number | boolean>;\n headers?: Record<string, string>;\n};\n\nexport function toPascalCase(str: string): string {\n return str\n .split(/[\\s_-]+/)\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join('');\n}\n\n// readOpenApiSpec reads an OpenAPI spec file and returns the content\nfunction readOpenApiSpec(filePath: string) {\n const ext = path.extname(filePath).toLowerCase();\n const content = fs.readFileSync(filePath, 'utf-8');\n\n if (ext === '.yaml' || ext === '.yml') {\n return yaml.load(content);\n } else if (ext === '.json') {\n return JSON.parse(content);\n } else {\n throw new Error('Unsupported file format. Use JSON or YAML.');\n }\n}\n\n// deferencedOpenAPI reads an OpenAPI spec file and returns a dereferenced OpenAPIV3.Document\n// dereferenced means that all $ref references are resolved automatically\nexport async function deferencedOpenAPI(openApiPath: string) {\n const openApiSpec = readOpenApiSpec(openApiPath);\n\n //@ts-ignore TODO: fix ts\n await $refParser.dereference(openApiSpec);\n\n return openApiSpec as OpenAPIV3.Document\n}\n\n// httpMethodToUniformMethod converts an HTTP method to a uniform ReferenceType\nexport function httpMethodToUniformMethod(method: string): ReferenceType | null {\n switch (method) {\n case 'get':\n return ReferenceType.REST_HTTP_GET\n case 'put':\n return ReferenceType.REST_HTTP_PUT\n case 'patch':\n return ReferenceType.REST_HTTP_PATCH\n case 'post':\n return ReferenceType.REST_HTTP_POST\n case 'delete':\n return ReferenceType.REST_HTTP_DELETE\n // case 'options':\n // return ReferenceType.REST_HTTP_OPTIONS\n // case 'head':\n // return ReferenceType.REST_HTTP_HEAD\n // case 'trace':\n // return ReferenceType.REST_HTTP_TRACE\n default:\n return null\n }\n}\n\n// schemaToRequestBody generates a request body from an OpenAPI schema\nfunction schemaToRequestBody(schema: OpenAPIV3.SchemaObject): string {\n const requestBody: any = {};\n\n if (schema.type === 'object' && schema.properties) {\n for (const [key, value] of Object.entries(schema.properties)) {\n if ((value as OpenAPIV3.SchemaObject).default !== undefined) {\n requestBody[key] = (value as OpenAPIV3.SchemaObject).default;\n } else {\n requestBody[key] = null; // or some placeholder value\n }\n }\n }\n\n return JSON.stringify(requestBody);\n}\n\n// generateRequestInitFromOpenAPIObject generates a RequestInit object from an OpenAPI object\nexport function generateRequestInitFromOapOperation(\n urlPath: string,\n operation: OpenAPIV3.OperationObject\n): { url: string, reqInit: RequestInit } {\n const reqInit: RequestInit = {}\n let queryParams = '';\n\n if (operation.parameters) {\n const parameters = operation.parameters as OpenAPIV3.ParameterObject[]\n\n const params = new URLSearchParams(\n Object.entries(parameters).map(([key, value]) => [key, String(value)])\n ).toString();\n\n queryParams += `?${params}`;\n }\n\n if (operation.requestBody) {\n const reqBody = operation.requestBody as OpenAPIV3.RequestBodyObject;\n const contentType = Object.keys(reqBody.content || {})[0];\n\n if (contentType === \"application/json\") {\n const schema = reqBody.content['application/json'].schema as OpenAPIV3.SchemaObject\n\n reqInit.body = schemaToRequestBody(schema);\n reqInit.headers = {\n 'Content-Type': 'application/json',\n }\n }\n }\n\n return {\n url: `${urlPath}${queryParams}`,\n reqInit,\n };\n}\n\n","import {OpenAPIV3} from \"openapi-types\";\nimport Oas from \"oas\";\n// @ts-ignore\nimport {Operation} from 'oas/operation'; // TODO: fix ts\nimport oasToSnippet from \"@readme/oas-to-snippet\";\nimport OpenAPISampler from \"openapi-sampler\";\nimport type {JSONSchema7} from \"json-schema\";\n\nimport {ExampleGroup, Example} from \"@xyd-js/uniform\";\n\n// TODO: option with another languages\n// TODO: uniform plugins\n// TODO: fs uniform plugins\nexport function oapExamples(\n oas: Oas,\n operation: Operation\n): ExampleGroup[] {\n const exampleGroups: ExampleGroup[] = []\n\n if (operation.schema.requestBody) {\n const body = operation.schema.requestBody as OpenAPIV3.RequestBodyObject\n const schema = fixAllOfBug(\n body.content[\"application/json\"].schema as JSONSchema7\n )\n\n if (!schema) {\n return exampleGroups\n }\n\n const fakeData = OpenAPISampler.sample(schema)\n\n // TODO: snippet languages options\n const {code} = oasToSnippet(oas, operation, {\n body: fakeData\n }, null, \"shell\");\n\n const examples: Example[] = []\n\n examples.push({\n codeblock: {\n tabs: [{\n title: \"curl\",\n language: \"curl\",\n code: code || \"\",\n }]\n }\n })\n\n exampleGroups.push({\n description: \"Example request\",\n examples\n })\n }\n\n if (operation.schema.responses) {\n const responses = operation.schema.responses as OpenAPIV3.ResponsesObject\n\n const examples: Example[] = []\n\n Object.entries(responses).forEach(([status, r]) => {\n const response = r as OpenAPIV3.ResponseObject\n const schema = response?.content?.[\"application/json\"].schema as JSONSchema7\n\n if (!schema) {\n return\n }\n\n const fakeData = OpenAPISampler.sample(schema)\n\n examples.push({\n codeblock: {\n title: status,\n tabs: [{\n title: \"json\",\n language: \"json\",\n code: JSON.stringify(fakeData, null, 2) || \"\",\n }]\n }\n })\n })\n\n exampleGroups.push({\n description: \"Response\",\n examples\n })\n }\n\n return exampleGroups\n}\n\n/*\nfixAllOfBug fixes below case:\n\n```yaml\n allOf:\n - $ref: '#/components/schemas/SomeSchema'\n - type: object\n required:\n properties:\n```\n*/\nfunction fixAllOfBug(schema: JSONSchema7) {\n const modifiedSchema = {...schema}\n\n if (schema.allOf) {\n schema.allOf.forEach((prop, i) => {\n const propObj = prop as object\n\n if (\"properties\" in propObj && !propObj[\"properties\"]) {\n delete modifiedSchema.allOf?.[i]\n }\n })\n }\n\n return modifiedSchema\n}"],"mappings":"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","names":["import_path","SUPPORTED_HTTP_METHODS","oapParametersToDefinitionProperties","parameters","parameterIn","param","schema","property","schemaObjectToDefinitionProperties","v","name","prop","objProp","merged","acc","of","items","oapRequestBodyToDefinitionProperties","reqBody","schema","schemaObject","acc","of","fakeBody","schemaObjectToDefinitionProperties","oapResponseToDefinitionProperties","responses","_a","_b","_c","_d","schemaObject","w","schemaObjectToDefinitionProperties","import_oas","import_uniform","import_path","import_fs","import_js_yaml","import_json_schema_ref_parser","import_uniform","toPascalCase","str","word","readOpenApiSpec","filePath","ext","path","content","fs","yaml","deferencedOpenAPI","openApiPath","openApiSpec","$refParser","httpMethodToUniformMethod","method","oapPathToReference","httpMethod","path","oapPath","mType","httpMethodToUniformMethod","definitions","exampleGroups","oapMethod","endpointRef","toPascalCase","parameters","paramtersMap","oapParametersToDefinitionProperties","key","definitionProperties","title","reqBody","oapRequestBodyToDefinitionProperties","responses","oapResponseToDefinitionProperties","import_oas_to_snippet","import_openapi_sampler","oapExamples","oas","operation","exampleGroups","body","schema","fixAllOfBug","fakeData","OpenAPISampler","code","oasToSnippet","examples","responses","status","r","_a","response","modifiedSchema","prop","i","propObj","oapSchemaToReferences","schema","_a","_b","references","oas","Oas","server","path","oapPath","SUPPORTED_HTTP_METHODS","eachMethod","httpMethod","reference","oapPathToReference","ctx","operation","oapExamples","import_fs","openApiPath","path","schema","deferencedOpenAPI","references","oapSchemaToReferences","fs"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import y from"path";var d=["get","put","patch","post","delete"];function h(t){let e={};return t.forEach(r=>{e[r.in]||(e[r.in]=[]);let s=r.schema,n={name:r.name,type:s.type||"",description:r.description||""};e[r.in].push(n)}),e}function f(t){return Object.entries(t.properties||{}).map(([e,r])=>{let s=r,n=[];if(s.allOf&&(n=s.allOf.reduce((p,o)=>[...p,...f(o)],[])),s.type==="array"){let p=s.items;n=f(p)}return{name:e,type:s.type||"",description:s.description||"",properties:n!=null&&n.length?n:s.properties?f(s):[]}})}function P(t){let e=t.content["application/json"].schema,r;if(e.allOf)return e.allOf.reduce((s,n)=>{let p={content:{"application/json":{schema:n}}};return[...s,...P(p)||[]]},[]);switch(e.type){case"object":{r=e;break}case"array":{r=e.items;break}default:break}return r?f(r):null}function b(t){var r,s,n,p;let e;if(t.default){let o=t.default;e=(s=(r=o==null?void 0:o.content)==null?void 0:r["application/json"])==null?void 0:s.schema}else if(t[200]){let o=t[200];e=(p=(n=o==null?void 0:o.content)==null?void 0:n["application/json"])==null?void 0:p.schema}if(!e)return null;switch(e.type){case"array":e=e.items;break;default:break}return f(e)}import U from"oas";import{ReferenceCategory as k}from"@xyd-js/uniform";import V from"path";import g from"fs";import D from"js-yaml";import E from"json-schema-ref-parser";import{ReferenceType as l}from"@xyd-js/uniform";function j(t){return t.split(/[\s_-]+/).map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join("")}function q(t){let e=V.extname(t).toLowerCase(),r=g.readFileSync(t,"utf-8");if(e===".yaml"||e===".yml")return D.load(r);if(e===".json")return JSON.parse(r);throw new Error("Unsupported file format. Use JSON or YAML.")}async function I(t){let e=q(t);return await E.dereference(e),e}function A(t){switch(t){case"get":return l.REST_HTTP_GET;case"put":return l.REST_HTTP_PUT;case"patch":return l.REST_HTTP_PATCH;case"post":return l.REST_HTTP_POST;case"delete":return l.REST_HTTP_DELETE;default:return null}}function S(t,e,r){let s=A(t);if(!s)return console.error(`Unsupported method v222: ${t}`),null;let n=[],p=[],o=r==null?void 0:r[t];if(!o)return null;let i={title:(o==null?void 0:o.summary)||"",canonical:j((o==null?void 0:o.summary)||""),description:(o==null?void 0:o.description)||"",category:k.REST,type:s,context:{method:t,path:`${encodeURIComponent(e)}`},examples:{groups:p},definitions:n};if(o.parameters){let c=o.parameters,m=h(c);Object.entries(m).forEach(([a,O])=>{let u;switch(a){case"path":u="Paths";break;case"query":u="Query";break;case"header":u="Header";break;default:console.error(`Unsupported parameter type: ${a} for ${t} ${e}`);return}n.push({title:u,properties:O})})}if(o.requestBody){let c=o.requestBody;n.push({title:"Request body",properties:P(c)||[]})}if(o.responses){let c=o.responses;n.push({title:"Response",properties:b(c)||[]})}return i}import B from"@readme/oas-to-snippet";import R from"openapi-sampler";function T(t,e){let r=[];if(e.schema.requestBody){let s=e.schema.requestBody,n=w(s.content["application/json"].schema);if(!n)return r;let p=R.sample(n),{code:o}=B(t,e,{body:p},null,"shell"),i=[];i.push({codeblock:{tabs:[{title:"curl",language:"curl",code:o||""}]}}),r.push({description:"Example request",examples:i})}if(e.schema.responses){let s=e.schema.responses,n=[];Object.entries(s).forEach(([p,o])=>{var a;let i=o,c=(a=i==null?void 0:i.content)==null?void 0:a["application/json"].schema;if(!c)return;let m=R.sample(c);n.push({codeblock:{title:p,tabs:[{title:"json",language:"json",code:JSON.stringify(m,null,2)||""}]}})}),r.push({description:"Response",examples:n})}return r}function w(t){let e={...t};return t.allOf&&t.allOf.forEach((r,s)=>{var p;let n=r;"properties"in n&&!n.properties&&((p=e.allOf)==null||delete p[s])}),e}function x(t){var n,p;let e=[],r=new U(t),s=((p=(n=t.servers)==null?void 0:n[0])==null?void 0:p.url)||"";return Object.entries(t.paths).forEach(([o,i])=>{d.forEach(c=>{let m=c.toLowerCase();switch(m){case"get":break;case"put":break;case"post":break;case"delete":break;case"patch":break;default:console.error(`Unsupported method v111: ${m}`);return}let a=S(m,o,i);if(a){let O=a.context;O.path=`${encodeURIComponent(s)}${encodeURIComponent(o)}`;let u=r.operation(o,m);a.examples.groups=T(r,u),e.push(a)}})}),e}import _ from"fs";(async()=>{let t=y.join(process.cwd(),"./examples/semi/openapi.yaml"),e=await I(t),r=x(e);console.log(y.join(process.cwd(),"./examples/semi/references.json")),_.writeFileSync(y.join(process.cwd(),"./examples/semi/references.json"),JSON.stringify(r,null,2)),console.log(2)})();
|
|
2
|
+
//# sourceMappingURL=index.js.map
|