@sdk-it/spec 0.25.0 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +2 -2
- package/dist/lib/create-operation.d.ts +28 -0
- package/dist/lib/create-operation.d.ts.map +1 -0
- package/dist/lib/create-operation.js +62 -0
- package/dist/lib/create-operation.js.map +7 -0
- package/dist/lib/for-each-operation.d.ts.map +1 -1
- package/dist/lib/for-each-operation.js +0 -3
- package/dist/lib/for-each-operation.js.map +2 -2
- package/dist/lib/guess/guess-resource.d.ts +7 -0
- package/dist/lib/guess/guess-resource.d.ts.map +1 -0
- package/dist/lib/guess/guess-resource.js +76 -0
- package/dist/lib/guess/guess-resource.js.map +7 -0
- package/dist/lib/metadata.test.js +359 -0
- package/dist/lib/metadata.test.js.map +7 -0
- package/dist/lib/operation.d.ts +1 -32
- package/dist/lib/operation.d.ts.map +1 -1
- package/dist/lib/operation.js +33 -313
- package/dist/lib/operation.js.map +2 -2
- package/dist/lib/options.d.ts +43 -2
- package/dist/lib/options.d.ts.map +1 -1
- package/dist/lib/options.js +31 -8
- package/dist/lib/options.js.map +2 -2
- package/dist/lib/overview-docs/overview-auth.d.ts +4 -0
- package/dist/lib/overview-docs/overview-auth.d.ts.map +1 -0
- package/dist/lib/overview-docs/overview-auth.js +173 -0
- package/dist/lib/overview-docs/overview-auth.js.map +7 -0
- package/dist/lib/overview-docs/overview-docs.d.ts +4 -0
- package/dist/lib/overview-docs/overview-docs.d.ts.map +1 -0
- package/dist/lib/overview-docs/overview-docs.js +20 -0
- package/dist/lib/overview-docs/overview-docs.js.map +7 -0
- package/dist/lib/overview-docs/overview-errors.d.ts +4 -0
- package/dist/lib/overview-docs/overview-errors.d.ts.map +1 -0
- package/dist/lib/overview-docs/overview-errors.js +137 -0
- package/dist/lib/overview-docs/overview-errors.js.map +7 -0
- package/dist/lib/overview-docs/overview-intro.d.ts +4 -0
- package/dist/lib/overview-docs/overview-intro.d.ts.map +1 -0
- package/dist/lib/overview-docs/overview-intro.js +77 -0
- package/dist/lib/overview-docs/overview-intro.js.map +7 -0
- package/dist/lib/overview-docs/overview-pagination.d.ts +4 -0
- package/dist/lib/overview-docs/overview-pagination.d.ts.map +1 -0
- package/dist/lib/overview-docs/overview-pagination.js +80 -0
- package/dist/lib/overview-docs/overview-pagination.js.map +7 -0
- package/dist/lib/overview-docs/overview-quick-reference.d.ts +4 -0
- package/dist/lib/overview-docs/overview-quick-reference.d.ts.map +1 -0
- package/dist/lib/overview-docs/overview-sdk-examples.d.ts +4 -0
- package/dist/lib/overview-docs/overview-sdk-examples.d.ts.map +1 -0
- package/dist/lib/overview-docs/overview-usage.d.ts +4 -0
- package/dist/lib/overview-docs/overview-usage.d.ts.map +1 -0
- package/dist/lib/pagination/guess-pagination.d.ts +50 -0
- package/dist/lib/pagination/guess-pagination.d.ts.map +1 -0
- package/dist/lib/pagination/guess-pagination.js +222 -0
- package/dist/lib/pagination/guess-pagination.js.map +7 -0
- package/dist/lib/pagination/pagination.d.ts +2 -49
- package/dist/lib/pagination/pagination.d.ts.map +1 -1
- package/dist/lib/pagination/pagination.js +43 -209
- package/dist/lib/pagination/pagination.js.map +2 -2
- package/dist/lib/pagination/pagination.test.js +2 -1
- package/dist/lib/pagination/pagination.test.js.map +2 -2
- package/dist/lib/sidebar.d.ts +4 -23
- package/dist/lib/sidebar.d.ts.map +1 -1
- package/dist/lib/sidebar.js +22 -65
- package/dist/lib/sidebar.js.map +3 -3
- package/dist/lib/tune-request-body.d.ts +5 -0
- package/dist/lib/tune-request-body.d.ts.map +1 -0
- package/dist/lib/tune-request-body.js +91 -0
- package/dist/lib/tune-request-body.js.map +7 -0
- package/dist/lib/tune-response.d.ts +5 -0
- package/dist/lib/tune-response.d.ts.map +1 -0
- package/dist/lib/tune-response.js +102 -0
- package/dist/lib/tune-response.js.map +7 -0
- package/dist/lib/types.d.ts +9 -4
- package/dist/lib/types.d.ts.map +1 -1
- package/package.json +2 -2
- package/dist/lib/overview-docs.js +0 -276
- package/dist/lib/overview-docs.js.map +0 -7
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/lib/tune-response.ts"],
|
|
4
|
+
"sourcesContent": ["import type {\n MediaTypeObject,\n OperationObject,\n ResponseObject,\n} from 'openapi3-ts/oas31';\n\nimport { isRef, parseRef, resolveRef } from '@sdk-it/core/ref.js';\nimport { isEmpty, pascalcase } from '@sdk-it/core/utils.js';\n\nimport { findUniqueSchemaName } from './find-unique-schema-name.js';\nimport {\n isSseContentType,\n isSuccessStatusCode,\n isTextContentType,\n parseJsonContentType,\n} from './is.js';\nimport { type ResponsesConfig } from './options.js';\nimport type { OurOpenAPIObject } from './types.js';\n\nexport function resolveResponses(\n spec: OurOpenAPIObject,\n operationId: string,\n operation: OperationObject,\n responsesConfig?: ResponsesConfig,\n) {\n const responses = operation.responses ?? {};\n operation.responses ??= {};\n let foundSuccessResponse = false;\n for (const status in responses) {\n if (status === 'default') {\n delete responses[status]; // Skip default response\n continue;\n }\n // use structuredClone to avoid mutating a response object\n // that is referenced by multiple operations\n operation.responses[status] = structuredClone(\n resolveRef<ResponseObject>(spec, responses[status]),\n );\n\n if (isSuccessStatusCode(status)) {\n foundSuccessResponse = true;\n }\n }\n\n if (!foundSuccessResponse) {\n operation.responses['200'] = {\n description: 'OK',\n content: {\n 'application/json': {\n schema: {},\n },\n },\n };\n }\n\n for (const status in operation.responses) {\n const response = operation.responses[status] as ResponseObject;\n const statusCode = +status;\n\n const outputName =\n statusCode !== 200\n ? pascalcase(operationId) + status\n : findUniqueSchemaName(spec, operationId, [\n 'output',\n 'payload',\n 'result',\n ]);\n\n if (!responsesConfig?.flattenErrorResponses) {\n if (!isSuccessStatusCode(status)) {\n continue;\n }\n }\n\n if (isEmpty(response.content)) {\n response.content = {\n 'application/octet-stream': {},\n };\n }\n\n response['x-response-name'] = outputName;\n\n // if (isErrorStatusCode(status)) {\n // const mediaType = response.content?.['application/json'];\n // if (mediaType && isRef(mediaType.schema)) {\n // const { model } = parseRef(mediaType.schema.$ref);\n // Object.assign(config.spec.components.schemas[model], {\n // 'x-responsebody': true,\n // // do not assign response ref to a group\n // // because they are supposed to be in a separate file only inlined\n // // schemas are grouped by operationId\n // });\n // response['x-response-name'] = model;\n // }\n // continue;\n // }\n\n for (const [contentType, mediaType] of Object.entries(\n response.content as Record<string, MediaTypeObject>,\n )) {\n if (isRef(mediaType.schema)) {\n const { model } = parseRef(mediaType.schema.$ref);\n Object.assign(spec.components.schemas[model], {\n 'x-responsebody': true,\n // do not assign response ref to a group\n // because they are supposed to be in a separate file only inlined\n // schemas are grouped by operationId\n });\n response['x-response-name'] = model;\n continue;\n }\n if (isSseContentType(contentType)) {\n continue; // Skip SSE content types\n }\n if (parseJsonContentType(contentType)) {\n if (isEmpty(mediaType.schema)) {\n // add \"additionalProperties\" because we're certain this is a response body is of json type\n spec.components.schemas[outputName] = {\n type: 'object',\n additionalProperties: true,\n };\n }\n } else {\n spec.components.schemas[outputName] = {\n ...spec.components.schemas[outputName],\n 'x-stream': !isTextContentType(contentType),\n };\n }\n\n spec.components.schemas[outputName] = {\n ...spec.components.schemas[outputName],\n ...mediaType.schema,\n 'x-responsebody': true,\n 'x-response-group': operationId,\n };\n operation.responses[status].content[contentType].schema = {\n $ref: `#/components/schemas/${outputName}`,\n };\n }\n }\n\n return operation.responses;\n}\n"],
|
|
5
|
+
"mappings": "AAMA,SAAS,OAAO,UAAU,kBAAkB;AAC5C,SAAS,SAAS,kBAAkB;AAEpC,SAAS,4BAA4B;AACrC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,eAAqC;AAG9B,SAAS,iBACd,MACA,aACA,WACA,iBACA;AACA,QAAM,YAAY,UAAU,aAAa,CAAC;AAC1C,YAAU,cAAc,CAAC;AACzB,MAAI,uBAAuB;AAC3B,aAAW,UAAU,WAAW;AAC9B,QAAI,WAAW,WAAW;AACxB,aAAO,UAAU,MAAM;AACvB;AAAA,IACF;AAGA,cAAU,UAAU,MAAM,IAAI;AAAA,MAC5B,WAA2B,MAAM,UAAU,MAAM,CAAC;AAAA,IACpD;AAEA,QAAI,oBAAoB,MAAM,GAAG;AAC/B,6BAAuB;AAAA,IACzB;AAAA,EACF;AAEA,MAAI,CAAC,sBAAsB;AACzB,cAAU,UAAU,KAAK,IAAI;AAAA,MAC3B,aAAa;AAAA,MACb,SAAS;AAAA,QACP,oBAAoB;AAAA,UAClB,QAAQ,CAAC;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,aAAW,UAAU,UAAU,WAAW;AACxC,UAAM,WAAW,UAAU,UAAU,MAAM;AAC3C,UAAM,aAAa,CAAC;AAEpB,UAAM,aACJ,eAAe,MACX,WAAW,WAAW,IAAI,SAC1B,qBAAqB,MAAM,aAAa;AAAA,MACtC;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAEP,QAAI,CAAC,iBAAiB,uBAAuB;AAC3C,UAAI,CAAC,oBAAoB,MAAM,GAAG;AAChC;AAAA,MACF;AAAA,IACF;AAEA,QAAI,QAAQ,SAAS,OAAO,GAAG;AAC7B,eAAS,UAAU;AAAA,QACjB,4BAA4B,CAAC;AAAA,MAC/B;AAAA,IACF;AAEA,aAAS,iBAAiB,IAAI;AAiB9B,eAAW,CAAC,aAAa,SAAS,KAAK,OAAO;AAAA,MAC5C,SAAS;AAAA,IACX,GAAG;AACD,UAAI,MAAM,UAAU,MAAM,GAAG;AAC3B,cAAM,EAAE,MAAM,IAAI,SAAS,UAAU,OAAO,IAAI;AAChD,eAAO,OAAO,KAAK,WAAW,QAAQ,KAAK,GAAG;AAAA,UAC5C,kBAAkB;AAAA;AAAA;AAAA;AAAA,QAIpB,CAAC;AACD,iBAAS,iBAAiB,IAAI;AAC9B;AAAA,MACF;AACA,UAAI,iBAAiB,WAAW,GAAG;AACjC;AAAA,MACF;AACA,UAAI,qBAAqB,WAAW,GAAG;AACrC,YAAI,QAAQ,UAAU,MAAM,GAAG;AAE7B,eAAK,WAAW,QAAQ,UAAU,IAAI;AAAA,YACpC,MAAM;AAAA,YACN,sBAAsB;AAAA,UACxB;AAAA,QACF;AAAA,MACF,OAAO;AACL,aAAK,WAAW,QAAQ,UAAU,IAAI;AAAA,UACpC,GAAG,KAAK,WAAW,QAAQ,UAAU;AAAA,UACrC,YAAY,CAAC,kBAAkB,WAAW;AAAA,QAC5C;AAAA,MACF;AAEA,WAAK,WAAW,QAAQ,UAAU,IAAI;AAAA,QACpC,GAAG,KAAK,WAAW,QAAQ,UAAU;AAAA,QACrC,GAAG,UAAU;AAAA,QACb,kBAAkB;AAAA,QAClB,oBAAoB;AAAA,MACtB;AACA,gBAAU,UAAU,MAAM,EAAE,QAAQ,WAAW,EAAE,SAAS;AAAA,QACxD,MAAM,wBAAwB,UAAU;AAAA,MAC1C;AAAA,IACF;AAAA,EACF;AAEA,SAAO,UAAU;AACnB;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/dist/lib/types.d.ts
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import type { ComponentsObject, MediaTypeObject, OpenAPIObject, OperationObject, ParameterObject, PathsObject, ReferenceObject, RequestBodyObject, ResponseObject, SchemaObject, SecuritySchemeObject } from 'openapi3-ts/oas31';
|
|
2
|
-
import type {
|
|
2
|
+
import type { PaginationGuess } from './pagination/guess-pagination.js';
|
|
3
|
+
import type { SidebarData, TagGroups } from './sidebar.js';
|
|
3
4
|
export interface OurOpenAPIObject extends OpenAPIObject {
|
|
4
5
|
'x-sdk-augmented'?: boolean;
|
|
5
6
|
'x-docs': SidebarData;
|
|
7
|
+
'x-tagGroups': TagGroups[];
|
|
6
8
|
components: Omit<ComponentsObject, 'schemas'> & {
|
|
7
9
|
schemas: Record<string, SchemaObject | ReferenceObject>;
|
|
8
|
-
securitySchemes: Record<string, SecuritySchemeObject
|
|
10
|
+
securitySchemes: Record<string, SecuritySchemeObject>;
|
|
9
11
|
};
|
|
10
12
|
paths: PathsObject;
|
|
11
13
|
}
|
|
@@ -18,20 +20,23 @@ export type TunedOperationObject = Omit<OperationObject, 'operationId' | 'tags'
|
|
|
18
20
|
tags: string[];
|
|
19
21
|
operationId: string;
|
|
20
22
|
parameters: ParameterObject[];
|
|
23
|
+
['x-fn-name']: string;
|
|
24
|
+
['x-fn-group']?: string;
|
|
21
25
|
responses: Record<string, Omit<ResponseObject, 'content'> & {
|
|
22
26
|
content: Record<string, MediaTypeObject>;
|
|
23
27
|
}>;
|
|
24
28
|
requestBody: OurRequestBodyObject;
|
|
25
29
|
};
|
|
26
30
|
export interface OperationEntry {
|
|
27
|
-
name?: string;
|
|
28
31
|
method: string;
|
|
29
32
|
path: string;
|
|
30
|
-
groupName: string;
|
|
31
33
|
tag: string;
|
|
32
34
|
}
|
|
33
35
|
export type Operation = {
|
|
34
36
|
entry: OperationEntry;
|
|
35
37
|
operation: TunedOperationObject;
|
|
36
38
|
};
|
|
39
|
+
export type OperationPagination = PaginationGuess & {
|
|
40
|
+
items: string;
|
|
41
|
+
};
|
|
37
42
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/lib/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,eAAe,EACf,eAAe,EACf,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,oBAAoB,EACrB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,eAAe,EACf,eAAe,EACf,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,oBAAoB,EACrB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACrD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,EAAE,WAAW,CAAC;IACtB,aAAa,EAAE,SAAS,EAAE,CAAC;IAC3B,UAAU,EAAE,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,GAAG;QAC9C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,eAAe,CAAC,CAAC;QACxD,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;KACvD,CAAC;IACF,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,MAAM,WAAW,oBAAqB,SAAQ,iBAAiB;IAC7D,OAAO,EAAE,MAAM,CACb,MAAM,EACN,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,GAAG;QAAE,MAAM,EAAE,eAAe,CAAA;KAAE,CAC9D,CAAC;CACH;AAED,MAAM,MAAM,oBAAoB,GAAG,IAAI,CACrC,eAAe,EACf,aAAa,GAAG,MAAM,GAAG,YAAY,GAAG,WAAW,GAAG,aAAa,CACpE,GAAG;IACF,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IACtB,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CACf,MAAM,EACN,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,GAAG;QAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;KAC1C,CACF,CAAC;IACF,WAAW,EAAE,oBAAoB,CAAC;CACnC,CAAC;AAEF,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AACD,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,cAAc,CAAC;IACtB,SAAS,EAAE,oBAAoB,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,eAAe,GAAG;IAClD,KAAK,EAAE,MAAM,CAAC;CACf,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sdk-it/spec",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.27.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"!**/*.tsbuildinfo"
|
|
27
27
|
],
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@sdk-it/core": "0.
|
|
29
|
+
"@sdk-it/core": "0.27.0",
|
|
30
30
|
"openapi3-ts": "4.4.0",
|
|
31
31
|
"pluralize": "^8.0.0",
|
|
32
32
|
"stringcase": "^4.3.1",
|
|
@@ -1,276 +0,0 @@
|
|
|
1
|
-
import { resolveRef } from "@sdk-it/core/ref.js";
|
|
2
|
-
import { forEachOperation } from "./for-each-operation.js";
|
|
3
|
-
import { isErrorStatusCode } from "./is.js";
|
|
4
|
-
function generateIntroductionMarkdown(spec) {
|
|
5
|
-
const info = spec.info;
|
|
6
|
-
let markdown = "";
|
|
7
|
-
if (info.title) {
|
|
8
|
-
markdown += `# ${info.title}
|
|
9
|
-
|
|
10
|
-
`;
|
|
11
|
-
}
|
|
12
|
-
if (info.description) {
|
|
13
|
-
markdown += `${info.description}
|
|
14
|
-
|
|
15
|
-
`;
|
|
16
|
-
}
|
|
17
|
-
if (info.version) {
|
|
18
|
-
markdown += `**Version:** ${info.version}
|
|
19
|
-
|
|
20
|
-
`;
|
|
21
|
-
}
|
|
22
|
-
if (info.contact) {
|
|
23
|
-
markdown += `## Contact
|
|
24
|
-
|
|
25
|
-
`;
|
|
26
|
-
if (info.contact.name) {
|
|
27
|
-
markdown += `**Name:** ${info.contact.name}
|
|
28
|
-
|
|
29
|
-
`;
|
|
30
|
-
}
|
|
31
|
-
if (info.contact.email) {
|
|
32
|
-
markdown += `**Email:** ${info.contact.email}
|
|
33
|
-
|
|
34
|
-
`;
|
|
35
|
-
}
|
|
36
|
-
if (info.contact.url) {
|
|
37
|
-
markdown += `**URL:** ${info.contact.url}
|
|
38
|
-
|
|
39
|
-
`;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
if (info.license) {
|
|
43
|
-
markdown += `## License
|
|
44
|
-
|
|
45
|
-
`;
|
|
46
|
-
if (info.license.name) {
|
|
47
|
-
markdown += `**License:** ${info.license.name}`;
|
|
48
|
-
if (info.license.url) {
|
|
49
|
-
markdown += ` ([${info.license.url}](${info.license.url}))`;
|
|
50
|
-
}
|
|
51
|
-
markdown += `
|
|
52
|
-
|
|
53
|
-
`;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
markdown += `## Available SDKs
|
|
57
|
-
|
|
58
|
-
`;
|
|
59
|
-
const sdkLinks = [
|
|
60
|
-
"/typescript-sdk",
|
|
61
|
-
"/python-sdk",
|
|
62
|
-
"/go-sdk",
|
|
63
|
-
"/java-sdk",
|
|
64
|
-
"/php-sdk",
|
|
65
|
-
"/ruby-sdk",
|
|
66
|
-
"/dart-sdk"
|
|
67
|
-
];
|
|
68
|
-
for (const link of sdkLinks) {
|
|
69
|
-
const sdkName = link.replace("/", "").replace("-sdk", "").toUpperCase();
|
|
70
|
-
markdown += `- [${sdkName} SDK](${link})
|
|
71
|
-
`;
|
|
72
|
-
}
|
|
73
|
-
return markdown;
|
|
74
|
-
}
|
|
75
|
-
function getStatusDescription(statusCode) {
|
|
76
|
-
const descriptions = {
|
|
77
|
-
"400": "Bad Request - The request was invalid or cannot be served.",
|
|
78
|
-
"401": "Unauthorized - Authentication is required and has failed or has not been provided.",
|
|
79
|
-
"403": "Forbidden - The request was valid, but the server is refusing action.",
|
|
80
|
-
"404": "Not Found - The requested resource could not be found.",
|
|
81
|
-
"422": "Unprocessable Entity - The request was well-formed but contains semantic errors.",
|
|
82
|
-
"429": "Too Many Requests - The user has sent too many requests in a given amount of time.",
|
|
83
|
-
"500": "Internal Server Error - The server encountered an unexpected condition.",
|
|
84
|
-
"502": "Bad Gateway - The server received an invalid response from the upstream server.",
|
|
85
|
-
"503": "Service Unavailable - The server is currently unavailable."
|
|
86
|
-
};
|
|
87
|
-
return descriptions[statusCode] || "An error occurred while processing the request.";
|
|
88
|
-
}
|
|
89
|
-
function generateErrorsMarkdown(errorSchemas) {
|
|
90
|
-
let markdown = `# Error Handling
|
|
91
|
-
|
|
92
|
-
`;
|
|
93
|
-
markdown += `This API uses conventional HTTP response codes to indicate the success or failure of an API request.
|
|
94
|
-
|
|
95
|
-
`;
|
|
96
|
-
markdown += `## HTTP Status Codes
|
|
97
|
-
|
|
98
|
-
`;
|
|
99
|
-
const errors = Array.from(errorSchemas.values()).sort(
|
|
100
|
-
(a, b) => parseInt(a.statusCode) - parseInt(b.statusCode)
|
|
101
|
-
);
|
|
102
|
-
for (const error of errors) {
|
|
103
|
-
markdown += `### ${error.statusCode} - ${error.title}
|
|
104
|
-
|
|
105
|
-
`;
|
|
106
|
-
const description = error.description || getStatusDescription(error.statusCode);
|
|
107
|
-
if (description) {
|
|
108
|
-
markdown += `${description}
|
|
109
|
-
|
|
110
|
-
`;
|
|
111
|
-
}
|
|
112
|
-
if (error.schema) {
|
|
113
|
-
markdown += `**Response Schema:**
|
|
114
|
-
|
|
115
|
-
`;
|
|
116
|
-
markdown += `\`\`\`json
|
|
117
|
-
${JSON.stringify(
|
|
118
|
-
error.schema,
|
|
119
|
-
null,
|
|
120
|
-
2
|
|
121
|
-
)}
|
|
122
|
-
\`\`\`
|
|
123
|
-
|
|
124
|
-
`;
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
return markdown;
|
|
128
|
-
}
|
|
129
|
-
function getSecuritySchemeDescription(scheme) {
|
|
130
|
-
switch (scheme.type.toLowerCase()) {
|
|
131
|
-
case "apikey":
|
|
132
|
-
return `This API uses an API key for authentication. The key should be sent in the \`${scheme.in}\` named \`${scheme.name}\`.`;
|
|
133
|
-
case "http":
|
|
134
|
-
if (scheme.scheme === "bearer") {
|
|
135
|
-
return `This API uses HTTP Bearer authentication. A token should be included in the Authorization header.`;
|
|
136
|
-
}
|
|
137
|
-
return `This API uses HTTP ${scheme.scheme} authentication.`;
|
|
138
|
-
case "oauth2": {
|
|
139
|
-
const flows = Object.keys(scheme.flows || {});
|
|
140
|
-
return `This API uses OAuth 2.0 for authentication with the following flow(s): ${flows.join(
|
|
141
|
-
", "
|
|
142
|
-
)}.`;
|
|
143
|
-
}
|
|
144
|
-
case "openidconnect":
|
|
145
|
-
return `This API uses OpenID Connect for authentication. The OpenID Connect URL is: ${scheme.openIdConnectUrl}`;
|
|
146
|
-
default:
|
|
147
|
-
return "This API uses a custom authentication scheme.";
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
function generateAuthorizationMarkdown(spec) {
|
|
151
|
-
let markdown = `# Authorization
|
|
152
|
-
|
|
153
|
-
`;
|
|
154
|
-
const securitySchemes = spec.components?.securitySchemes || {};
|
|
155
|
-
const globalSecurity = spec.security || [];
|
|
156
|
-
if (Object.keys(securitySchemes).length > 0) {
|
|
157
|
-
markdown += `This API uses the following authentication schemes:
|
|
158
|
-
|
|
159
|
-
`;
|
|
160
|
-
markdown += `## Security Schemes
|
|
161
|
-
|
|
162
|
-
`;
|
|
163
|
-
for (const [name, scheme] of Object.entries(securitySchemes)) {
|
|
164
|
-
const schemeObj = resolveRef(spec, scheme);
|
|
165
|
-
markdown += `### ${name}
|
|
166
|
-
|
|
167
|
-
`;
|
|
168
|
-
const description = schemeObj.description || getSecuritySchemeDescription(schemeObj);
|
|
169
|
-
markdown += `${description}
|
|
170
|
-
|
|
171
|
-
`;
|
|
172
|
-
markdown += `**Type:** \`${schemeObj.type}\`
|
|
173
|
-
|
|
174
|
-
`;
|
|
175
|
-
if (schemeObj.type === "http") {
|
|
176
|
-
markdown += `**Scheme:** \`${schemeObj.scheme}\`
|
|
177
|
-
|
|
178
|
-
`;
|
|
179
|
-
if (schemeObj.bearerFormat) {
|
|
180
|
-
markdown += `**Bearer Format:** \`${schemeObj.bearerFormat}\`
|
|
181
|
-
|
|
182
|
-
`;
|
|
183
|
-
}
|
|
184
|
-
} else if (schemeObj.type === "oauth2") {
|
|
185
|
-
markdown += `**Flows:**
|
|
186
|
-
|
|
187
|
-
`;
|
|
188
|
-
markdown += `\`\`\`json
|
|
189
|
-
${JSON.stringify(
|
|
190
|
-
schemeObj.flows,
|
|
191
|
-
null,
|
|
192
|
-
2
|
|
193
|
-
)}
|
|
194
|
-
\`\`\`
|
|
195
|
-
|
|
196
|
-
`;
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
if (globalSecurity.length > 0) {
|
|
201
|
-
markdown += `## Global Security Requirements
|
|
202
|
-
|
|
203
|
-
`;
|
|
204
|
-
markdown += `These security schemes are required for all operations.
|
|
205
|
-
|
|
206
|
-
`;
|
|
207
|
-
markdown += `\`\`\`json
|
|
208
|
-
${JSON.stringify(
|
|
209
|
-
globalSecurity,
|
|
210
|
-
null,
|
|
211
|
-
2
|
|
212
|
-
)}
|
|
213
|
-
\`\`\`
|
|
214
|
-
|
|
215
|
-
`;
|
|
216
|
-
}
|
|
217
|
-
return markdown;
|
|
218
|
-
}
|
|
219
|
-
function extractOverviewDocs(spec) {
|
|
220
|
-
const introduction = {
|
|
221
|
-
id: "introduction",
|
|
222
|
-
title: "Introduction",
|
|
223
|
-
url: "/introduction",
|
|
224
|
-
description: "API overview and getting started guide",
|
|
225
|
-
content: generateIntroductionMarkdown(spec)
|
|
226
|
-
};
|
|
227
|
-
const errorSchemas = /* @__PURE__ */ new Map();
|
|
228
|
-
forEachOperation(spec, (entry, operation) => {
|
|
229
|
-
if (operation.responses) {
|
|
230
|
-
for (const [statusCode, response] of Object.entries(
|
|
231
|
-
operation.responses
|
|
232
|
-
)) {
|
|
233
|
-
if (isErrorStatusCode(statusCode)) {
|
|
234
|
-
const content = response.content;
|
|
235
|
-
if (content?.["application/json"]?.schema) {
|
|
236
|
-
const key = `${statusCode}`;
|
|
237
|
-
if (!errorSchemas.has(key)) {
|
|
238
|
-
errorSchemas.set(key, {
|
|
239
|
-
statusCode,
|
|
240
|
-
title: response.description || `${statusCode} Error`,
|
|
241
|
-
description: response.description,
|
|
242
|
-
schema: content["application/json"].schema
|
|
243
|
-
});
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
});
|
|
250
|
-
const errors = {
|
|
251
|
-
id: "errors",
|
|
252
|
-
title: "Errors",
|
|
253
|
-
url: "/errors",
|
|
254
|
-
description: "Error handling and HTTP status codes",
|
|
255
|
-
content: generateErrorsMarkdown(errorSchemas)
|
|
256
|
-
};
|
|
257
|
-
const authorization = {
|
|
258
|
-
id: "authorization",
|
|
259
|
-
url: "/authorization",
|
|
260
|
-
title: "Authorization",
|
|
261
|
-
description: "Authentication methods and security schemes",
|
|
262
|
-
content: generateAuthorizationMarkdown(spec)
|
|
263
|
-
};
|
|
264
|
-
const docs = [introduction, errors, authorization];
|
|
265
|
-
return [
|
|
266
|
-
{
|
|
267
|
-
id: "overview",
|
|
268
|
-
category: "Overview",
|
|
269
|
-
items: docs
|
|
270
|
-
}
|
|
271
|
-
];
|
|
272
|
-
}
|
|
273
|
-
export {
|
|
274
|
-
extractOverviewDocs
|
|
275
|
-
};
|
|
276
|
-
//# sourceMappingURL=overview-docs.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/lib/overview-docs.ts"],
|
|
4
|
-
"sourcesContent": ["import type { SchemaObject, SecuritySchemeObject } from 'openapi3-ts/oas31';\n\nimport { resolveRef } from '@sdk-it/core/ref.js';\n\nimport { forEachOperation } from './for-each-operation.js';\nimport { isErrorStatusCode } from './is.js';\nimport type { NavItem, SidebarData } from './sidebar.js';\nimport type { OurOpenAPIObject } from './types.js';\n\ninterface ErrorSchema {\n statusCode: string;\n title: string;\n description?: string;\n schema: SchemaObject;\n}\n\nfunction generateIntroductionMarkdown(spec: OurOpenAPIObject): string {\n const info = spec.info;\n let markdown = '';\n\n if (info.title) {\n markdown += `# ${info.title}\\n\\n`;\n }\n\n if (info.description) {\n markdown += `${info.description}\\n\\n`;\n }\n\n if (info.version) {\n markdown += `**Version:** ${info.version}\\n\\n`;\n }\n\n if (info.contact) {\n markdown += `## Contact\\n\\n`;\n if (info.contact.name) {\n markdown += `**Name:** ${info.contact.name}\\n\\n`;\n }\n if (info.contact.email) {\n markdown += `**Email:** ${info.contact.email}\\n\\n`;\n }\n if (info.contact.url) {\n markdown += `**URL:** ${info.contact.url}\\n\\n`;\n }\n }\n\n if (info.license) {\n markdown += `## License\\n\\n`;\n if (info.license.name) {\n markdown += `**License:** ${info.license.name}`;\n if (info.license.url) {\n markdown += ` ([${info.license.url}](${info.license.url}))`;\n }\n markdown += `\\n\\n`;\n }\n }\n\n // Add SDK links\n markdown += `## Available SDKs\\n\\n`;\n const sdkLinks = [\n '/typescript-sdk',\n '/python-sdk',\n '/go-sdk',\n '/java-sdk',\n '/php-sdk',\n '/ruby-sdk',\n '/dart-sdk',\n ];\n\n for (const link of sdkLinks) {\n const sdkName = link.replace('/', '').replace('-sdk', '').toUpperCase();\n markdown += `- [${sdkName} SDK](${link})\\n`;\n }\n\n return markdown;\n}\n\nfunction getStatusDescription(statusCode: string): string {\n const descriptions: Record<string, string> = {\n '400': 'Bad Request - The request was invalid or cannot be served.',\n '401':\n 'Unauthorized - Authentication is required and has failed or has not been provided.',\n '403':\n 'Forbidden - The request was valid, but the server is refusing action.',\n '404': 'Not Found - The requested resource could not be found.',\n '422':\n 'Unprocessable Entity - The request was well-formed but contains semantic errors.',\n '429':\n 'Too Many Requests - The user has sent too many requests in a given amount of time.',\n '500':\n 'Internal Server Error - The server encountered an unexpected condition.',\n '502':\n 'Bad Gateway - The server received an invalid response from the upstream server.',\n '503': 'Service Unavailable - The server is currently unavailable.',\n };\n return (\n descriptions[statusCode] ||\n 'An error occurred while processing the request.'\n );\n}\n\nfunction generateErrorsMarkdown(\n errorSchemas: Map<string, ErrorSchema>,\n): string {\n let markdown = `# Error Handling\\n\\n`;\n markdown += `This API uses conventional HTTP response codes to indicate the success or failure of an API request.\\n\\n`;\n markdown += `## HTTP Status Codes\\n\\n`;\n\n const errors = Array.from(errorSchemas.values()).sort(\n (a, b) => parseInt(a.statusCode) - parseInt(b.statusCode),\n );\n\n for (const error of errors) {\n markdown += `### ${error.statusCode} - ${error.title}\\n\\n`;\n const description =\n error.description || getStatusDescription(error.statusCode);\n if (description) {\n markdown += `${description}\\n\\n`;\n }\n if (error.schema) {\n markdown += `**Response Schema:**\\n\\n`;\n markdown += `\\`\\`\\`json\\n${JSON.stringify(\n error.schema,\n null,\n 2,\n )}\\n\\`\\`\\`\\n\\n`;\n }\n }\n\n return markdown;\n}\n\nfunction getSecuritySchemeDescription(scheme: SecuritySchemeObject): string {\n switch (scheme.type.toLowerCase()) {\n case 'apikey':\n return `This API uses an API key for authentication. The key should be sent in the \\`${scheme.in}\\` named \\`${scheme.name}\\`.`;\n case 'http':\n if (scheme.scheme === 'bearer') {\n return `This API uses HTTP Bearer authentication. A token should be included in the Authorization header.`;\n }\n return `This API uses HTTP ${scheme.scheme} authentication.`;\n case 'oauth2': {\n const flows = Object.keys(scheme.flows || {});\n return `This API uses OAuth 2.0 for authentication with the following flow(s): ${flows.join(\n ', ',\n )}.`;\n }\n case 'openidconnect':\n return `This API uses OpenID Connect for authentication. The OpenID Connect URL is: ${scheme.openIdConnectUrl}`;\n default:\n return 'This API uses a custom authentication scheme.';\n }\n}\n\nfunction generateAuthorizationMarkdown(spec: OurOpenAPIObject): string {\n let markdown = `# Authorization\\n\\n`;\n\n const securitySchemes = spec.components?.securitySchemes || {};\n const globalSecurity = spec.security || [];\n\n if (Object.keys(securitySchemes).length > 0) {\n markdown += `This API uses the following authentication schemes:\\n\\n`;\n markdown += `## Security Schemes\\n\\n`;\n\n for (const [name, scheme] of Object.entries(securitySchemes)) {\n const schemeObj = resolveRef<SecuritySchemeObject>(spec, scheme);\n markdown += `### ${name}\\n\\n`;\n\n const description =\n schemeObj.description || getSecuritySchemeDescription(schemeObj);\n markdown += `${description}\\n\\n`;\n\n markdown += `**Type:** \\`${schemeObj.type}\\`\\n\\n`;\n\n if (schemeObj.type === 'http') {\n markdown += `**Scheme:** \\`${schemeObj.scheme}\\`\\n\\n`;\n if (schemeObj.bearerFormat) {\n markdown += `**Bearer Format:** \\`${schemeObj.bearerFormat}\\`\\n\\n`;\n }\n } else if (schemeObj.type === 'oauth2') {\n markdown += `**Flows:**\\n\\n`;\n markdown += `\\`\\`\\`json\\n${JSON.stringify(\n schemeObj.flows,\n null,\n 2,\n )}\\n\\`\\`\\`\\n\\n`;\n }\n }\n }\n\n if (globalSecurity.length > 0) {\n markdown += `## Global Security Requirements\\n\\n`;\n markdown += `These security schemes are required for all operations.\\n\\n`;\n markdown += `\\`\\`\\`json\\n${JSON.stringify(\n globalSecurity,\n null,\n 2,\n )}\\n\\`\\`\\`\\n\\n`;\n }\n\n return markdown;\n}\n\nexport function extractOverviewDocs(spec: OurOpenAPIObject): SidebarData {\n const introduction: NavItem = {\n id: 'introduction',\n title: 'Introduction',\n url: '/introduction',\n description: 'API overview and getting started guide',\n content: generateIntroductionMarkdown(spec),\n };\n\n const errorSchemas = new Map<string, ErrorSchema>();\n\n forEachOperation(spec, (entry, operation) => {\n if (operation.responses) {\n for (const [statusCode, response] of Object.entries(\n operation.responses,\n )) {\n if (isErrorStatusCode(statusCode)) {\n const content = response.content;\n if (content?.['application/json']?.schema) {\n const key = `${statusCode}`;\n if (!errorSchemas.has(key)) {\n errorSchemas.set(key, {\n statusCode,\n title: response.description || `${statusCode} Error`,\n description: response.description,\n schema: content['application/json'].schema as SchemaObject,\n });\n }\n }\n }\n }\n }\n });\n\n const errors: NavItem = {\n id: 'errors',\n title: 'Errors',\n url: '/errors',\n description: 'Error handling and HTTP status codes',\n content: generateErrorsMarkdown(errorSchemas),\n };\n\n const authorization: NavItem = {\n id: 'authorization',\n url: '/authorization',\n title: 'Authorization',\n description: 'Authentication methods and security schemes',\n content: generateAuthorizationMarkdown(spec),\n };\n const docs: NavItem[] = [introduction, errors, authorization];\n\n return [\n {\n id: 'overview',\n category: 'Overview',\n items: docs,\n },\n ];\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|