fumadocs-openapi 10.5.0 → 10.6.1
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/css/generated/shared.css +33 -21
- package/dist/generate-file.d.ts +10 -2
- package/dist/generate-file.d.ts.map +1 -1
- package/dist/generate-file.js +15 -3
- package/dist/generate-file.js.map +1 -1
- package/dist/playground/client.d.ts +32 -10
- package/dist/playground/client.d.ts.map +1 -1
- package/dist/playground/client.js +70 -60
- package/dist/playground/client.js.map +1 -1
- package/dist/playground/components/inputs.js +1 -1
- package/dist/playground/components/inputs.js.map +1 -1
- package/dist/playground/components/server-select.js +3 -4
- package/dist/playground/components/server-select.js.map +1 -1
- package/dist/playground/fetcher.d.ts +20 -1
- package/dist/playground/fetcher.d.ts.map +1 -1
- package/dist/playground/fetcher.js +28 -24
- package/dist/playground/fetcher.js.map +1 -1
- package/dist/playground/index.d.ts +3 -3
- package/dist/playground/index.d.ts.map +1 -1
- package/dist/playground/index.js +2 -2
- package/dist/playground/index.js.map +1 -1
- package/dist/playground/schema.d.ts +1 -0
- package/dist/playground/schema.d.ts.map +1 -1
- package/dist/playground/schema.js +10 -12
- package/dist/playground/schema.js.map +1 -1
- package/dist/requests/generators/python.d.ts +2 -1
- package/dist/requests/generators/python.d.ts.map +1 -1
- package/dist/requests/generators/python.js +13 -2
- package/dist/requests/generators/python.js.map +1 -1
- package/dist/scalar/index.d.ts +2 -1
- package/dist/scalar/index.d.ts.map +1 -1
- package/dist/server/create.d.ts +2 -0
- package/dist/server/create.d.ts.map +1 -1
- package/dist/server/create.js +11 -8
- package/dist/server/create.js.map +1 -1
- package/dist/server/proxy.d.ts +5 -2
- package/dist/server/proxy.d.ts.map +1 -1
- package/dist/server/proxy.js +41 -31
- package/dist/server/proxy.js.map +1 -1
- package/dist/server/source-api.d.ts +2 -0
- package/dist/server/source-api.d.ts.map +1 -1
- package/dist/server/source-api.js +10 -1
- package/dist/server/source-api.js.map +1 -1
- package/dist/types.d.ts +2 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/ui/api-page.d.ts +1 -3
- package/dist/ui/api-page.d.ts.map +1 -1
- package/dist/ui/api-page.js +4 -6
- package/dist/ui/api-page.js.map +1 -1
- package/dist/ui/base.d.ts +20 -16
- package/dist/ui/base.d.ts.map +1 -1
- package/dist/ui/base.js +18 -9
- package/dist/ui/base.js.map +1 -1
- package/dist/ui/{full.client.js → client/full.js} +3 -3
- package/dist/ui/client/full.js.map +1 -0
- package/dist/ui/client/index.d.ts +1 -1
- package/dist/ui/client/index.js.map +1 -1
- package/dist/ui/client/storage-key.js.map +1 -1
- package/dist/ui/components/codeblock.d.ts +2 -2
- package/dist/ui/components/codeblock.d.ts.map +1 -1
- package/dist/ui/components/server-tab.js +43 -0
- package/dist/ui/components/server-tab.js.map +1 -0
- package/dist/ui/contexts/api.js +18 -35
- package/dist/ui/contexts/api.js.map +1 -1
- package/dist/ui/create-client.d.ts +26 -0
- package/dist/ui/create-client.d.ts.map +1 -0
- package/dist/ui/create-client.js +132 -0
- package/dist/ui/create-client.js.map +1 -0
- package/dist/ui/index.d.ts +10 -2
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +21 -1
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/operation/client.js +44 -36
- package/dist/ui/operation/client.js.map +1 -1
- package/dist/ui/operation/{request-tabs.d.ts → get-example-requests.d.ts} +2 -4
- package/dist/ui/operation/get-example-requests.d.ts.map +1 -0
- package/dist/ui/operation/get-example-requests.js +83 -0
- package/dist/ui/operation/get-example-requests.js.map +1 -0
- package/dist/ui/operation/index.js +101 -63
- package/dist/ui/operation/index.js.map +1 -1
- package/dist/ui/operation/request-tabs.js +3 -81
- package/dist/ui/operation/request-tabs.js.map +1 -1
- package/dist/ui/operation/response-tabs.d.ts +1 -1
- package/dist/ui/operation/response-tabs.js +57 -54
- package/dist/ui/operation/response-tabs.js.map +1 -1
- package/dist/ui/operation/usage-tabs/client.js +7 -48
- package/dist/ui/operation/usage-tabs/client.js.map +1 -1
- package/dist/ui/operation/usage-tabs/index.js +14 -10
- package/dist/ui/operation/usage-tabs/index.js.map +1 -1
- package/dist/ui/operation/usage-tabs/lazy.js +1 -2
- package/dist/ui/operation/usage-tabs/lazy.js.map +1 -1
- package/dist/ui/schema/client.d.ts +0 -1
- package/dist/ui/schema/client.d.ts.map +1 -1
- package/dist/ui/schema/index.d.ts +1 -2
- package/dist/ui/schema/index.d.ts.map +1 -1
- package/dist/ui/schema/index.js +4 -2
- package/dist/ui/schema/index.js.map +1 -1
- package/dist/utils/pages/builder.d.ts +1 -1
- package/dist/utils/pages/builder.js +1 -1
- package/dist/utils/process-document.d.ts +1 -1
- package/dist/utils/process-document.js +1 -32
- package/dist/utils/process-document.js.map +1 -1
- package/dist/utils/schema/dereference.js +37 -0
- package/dist/utils/schema/dereference.js.map +1 -0
- package/dist/utils/{schema.d.ts → schema/index.d.ts} +3 -3
- package/dist/utils/schema/index.d.ts.map +1 -0
- package/dist/utils/{schema.js → schema/index.js} +3 -3
- package/dist/utils/schema/index.js.map +1 -0
- package/dist/utils/schema/resolve-ref.js +21 -0
- package/dist/utils/schema/resolve-ref.js.map +1 -0
- package/dist/utils/{schema-to-string.js → schema/to-string.js} +2 -2
- package/dist/utils/schema/to-string.js.map +1 -0
- package/package.json +10 -10
- package/dist/requests/to-python-object.js +0 -17
- package/dist/requests/to-python-object.js.map +0 -1
- package/dist/ui/full.client.js.map +0 -1
- package/dist/ui/full.d.ts +0 -11
- package/dist/ui/full.d.ts.map +0 -1
- package/dist/ui/full.js +0 -36
- package/dist/ui/full.js.map +0 -1
- package/dist/ui/operation/request-tabs.d.ts.map +0 -1
- package/dist/utils/schema-to-string.js.map +0 -1
- package/dist/utils/schema.d.ts.map +0 -1
- package/dist/utils/schema.js.map +0 -1
- /package/dist/utils/{schema-to-string.d.ts → schema/to-string.d.ts} +0 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { resolveRefSync } from "./resolve-ref.js";
|
|
2
|
+
//#region src/utils/schema/dereference.ts
|
|
3
|
+
/**
|
|
4
|
+
* Resolves all $ref pointers in a schema and returns a new schema without any $ref pointers.
|
|
5
|
+
*/
|
|
6
|
+
function dereferenceSync(schema, setOriginalRef) {
|
|
7
|
+
if (typeof schema === "boolean") return schema;
|
|
8
|
+
const visitedNodes = /* @__PURE__ */ new Set();
|
|
9
|
+
const cloned = structuredClone(schema);
|
|
10
|
+
function resolve(current) {
|
|
11
|
+
if (typeof current === "object" && current !== null) {
|
|
12
|
+
if (visitedNodes.has(current)) return current;
|
|
13
|
+
visitedNodes.add(current);
|
|
14
|
+
if (Array.isArray(current)) {
|
|
15
|
+
for (let index = 0; index < current.length; index++) current[index] = resolve(current[index]);
|
|
16
|
+
return current;
|
|
17
|
+
}
|
|
18
|
+
const obj = current;
|
|
19
|
+
if ("$ref" in current && typeof current["$ref"] === "string") {
|
|
20
|
+
const ref = current["$ref"];
|
|
21
|
+
delete current["$ref"];
|
|
22
|
+
const resolved = resolve(resolveRefSync(ref, cloned));
|
|
23
|
+
setOriginalRef(resolved, ref);
|
|
24
|
+
setOriginalRef(current, ref);
|
|
25
|
+
if (typeof resolved === "boolean") throw new Error("invalid schema");
|
|
26
|
+
for (const k in resolved) if (!(k in current)) obj[k] = resolved[k];
|
|
27
|
+
}
|
|
28
|
+
for (const key in current) obj[key] = resolve(obj[key]);
|
|
29
|
+
}
|
|
30
|
+
return current;
|
|
31
|
+
}
|
|
32
|
+
return resolve(cloned);
|
|
33
|
+
}
|
|
34
|
+
//#endregion
|
|
35
|
+
export { dereferenceSync };
|
|
36
|
+
|
|
37
|
+
//# sourceMappingURL=dereference.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dereference.js","names":[],"sources":["../../../src/utils/schema/dereference.ts"],"sourcesContent":["import type { JSONSchema } from 'json-schema-typed/draft-2020-12';\nimport { resolveRefSync } from './resolve-ref';\n\n/**\n * Resolves all $ref pointers in a schema and returns a new schema without any $ref pointers.\n */\nexport function dereferenceSync(\n schema: JSONSchema,\n setOriginalRef: (schema: JSONSchema, ref: string) => void,\n): JSONSchema {\n if (typeof schema === 'boolean') return schema;\n const visitedNodes = new Set<unknown>();\n const cloned = structuredClone(schema);\n\n function resolve(current: unknown): JSONSchema {\n if (typeof current === 'object' && current !== null) {\n // make sure we don't visit the same node twice\n if (visitedNodes.has(current)) {\n return current;\n }\n visitedNodes.add(current);\n\n if (Array.isArray(current)) {\n // array\n for (let index = 0; index < current.length; index++) {\n current[index] = resolve(current[index]);\n }\n\n return current as JSONSchema;\n }\n\n const obj = current as Record<string, unknown>;\n\n // object\n if ('$ref' in current && typeof current['$ref'] === 'string') {\n const ref = current['$ref'];\n delete current['$ref'];\n const resolved = resolve(resolveRefSync(ref, cloned) as JSONSchema);\n setOriginalRef(resolved, ref);\n setOriginalRef(current as JSONSchema, ref);\n\n if (typeof resolved === 'boolean') throw new Error('invalid schema');\n for (const k in resolved) {\n if (!(k in current)) {\n obj[k] = resolved[k as never];\n }\n }\n }\n\n for (const key in current) {\n obj[key] = resolve(obj[key]);\n }\n }\n\n return current as JSONSchema;\n }\n\n return resolve(cloned);\n}\n"],"mappings":";;;;;AAMA,SAAgB,gBACd,QACA,gBACY;AACZ,KAAI,OAAO,WAAW,UAAW,QAAO;CACxC,MAAM,+BAAe,IAAI,KAAc;CACvC,MAAM,SAAS,gBAAgB,OAAO;CAEtC,SAAS,QAAQ,SAA8B;AAC7C,MAAI,OAAO,YAAY,YAAY,YAAY,MAAM;AAEnD,OAAI,aAAa,IAAI,QAAQ,CAC3B,QAAO;AAET,gBAAa,IAAI,QAAQ;AAEzB,OAAI,MAAM,QAAQ,QAAQ,EAAE;AAE1B,SAAK,IAAI,QAAQ,GAAG,QAAQ,QAAQ,QAAQ,QAC1C,SAAQ,SAAS,QAAQ,QAAQ,OAAO;AAG1C,WAAO;;GAGT,MAAM,MAAM;AAGZ,OAAI,UAAU,WAAW,OAAO,QAAQ,YAAY,UAAU;IAC5D,MAAM,MAAM,QAAQ;AACpB,WAAO,QAAQ;IACf,MAAM,WAAW,QAAQ,eAAe,KAAK,OAAO,CAAe;AACnE,mBAAe,UAAU,IAAI;AAC7B,mBAAe,SAAuB,IAAI;AAE1C,QAAI,OAAO,aAAa,UAAW,OAAM,IAAI,MAAM,iBAAiB;AACpE,SAAK,MAAM,KAAK,SACd,KAAI,EAAE,KAAK,SACT,KAAI,KAAK,SAAS;;AAKxB,QAAK,MAAM,OAAO,QAChB,KAAI,OAAO,QAAQ,IAAI,KAAK;;AAIhC,SAAO;;AAGT,QAAO,QAAQ,OAAO"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { ReferenceObject } from "
|
|
1
|
+
import { ReferenceObject } from "../../types.js";
|
|
2
2
|
import { JSONSchema } from "json-schema-typed/draft-2020-12";
|
|
3
3
|
|
|
4
|
-
//#region src/utils/schema.d.ts
|
|
4
|
+
//#region src/utils/schema/index.d.ts
|
|
5
5
|
type NoReference<T> = T extends (infer I)[] ? NoReference<I>[] : T extends ReferenceObject ? Exclude<T, ReferenceObject> : T extends object ? { [K in keyof T]: NoReference<T[K]> } : T;
|
|
6
6
|
type NoReferenceJSONSchema<T> = T extends (infer I)[] ? NoReference<I>[] : T extends {
|
|
7
7
|
$ref?: string;
|
|
@@ -12,4 +12,4 @@ type ParsedSchema = (JSONSchema & {
|
|
|
12
12
|
type ResolvedSchema = NoReferenceJSONSchema<ParsedSchema>;
|
|
13
13
|
//#endregion
|
|
14
14
|
export { NoReference, ParsedSchema, ResolvedSchema };
|
|
15
|
-
//# sourceMappingURL=
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/utils/schema/index.ts"],"mappings":";;;;KAcY,WAAA,MAAiB,CAAA,uBACzB,WAAA,CAAY,CAAA,MACZ,CAAA,SAAU,eAAA,GACR,OAAA,CAAQ,CAAA,EAAG,eAAA,IACX,CAAA,gCAEgB,CAAA,GAAI,WAAA,CAAY,CAAA,CAAE,CAAA,OAEhC,CAAA;AAAA,KAEH,qBAAA,MAA2B,CAAA,uBAC5B,WAAA,CAAY,CAAA,MACZ,CAAA;EAAY,IAAA;AAAA,IACV,IAAA,CAAK,CAAA,YACL,CAAA;AAAA,KAEM,YAAA,IACP,UAAA;EACC,mBAAA;AAAA;AAAA,KAGM,cAAA,GAAiB,qBAAA,CAAsB,YAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { idToTitle } from "
|
|
2
|
-
//#region src/utils/schema.ts
|
|
1
|
+
import { idToTitle } from "../id-to-title.js";
|
|
2
|
+
//#region src/utils/schema/index.ts
|
|
3
3
|
const methodKeys = [
|
|
4
4
|
"get",
|
|
5
5
|
"post",
|
|
@@ -48,4 +48,4 @@ function pickExample(value) {
|
|
|
48
48
|
//#endregion
|
|
49
49
|
export { createMethod, getPreferredType, getTagDisplayName, methodKeys, pickExample };
|
|
50
50
|
|
|
51
|
-
//# sourceMappingURL=
|
|
51
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/utils/schema/index.ts"],"sourcesContent":["import type { JSONSchema } from 'json-schema-typed/draft-2020-12';\nimport type {\n ExampleObject,\n MediaTypeObject,\n MethodInformation,\n OperationObject,\n PathItemObject,\n ReferenceObject,\n TagObject,\n} from '@/types';\nimport { idToTitle } from '@/utils/id-to-title';\n\nexport const methodKeys = ['get', 'post', 'patch', 'delete', 'head', 'put'] as const;\n\nexport type NoReference<T> = T extends (infer I)[]\n ? NoReference<I>[]\n : T extends ReferenceObject\n ? Exclude<T, ReferenceObject>\n : T extends object\n ? {\n [K in keyof T]: NoReference<T[K]>;\n }\n : T;\n\ntype NoReferenceJSONSchema<T> = T extends (infer I)[]\n ? NoReference<I>[]\n : T extends { $ref?: string }\n ? Omit<T, '$ref'>\n : T;\n\nexport type ParsedSchema =\n | (JSONSchema & {\n 'x-playground-lazy'?: boolean;\n })\n | boolean;\nexport type ResolvedSchema = NoReferenceJSONSchema<ParsedSchema>;\n\nexport function getPreferredType(body: Record<string, unknown>): string | undefined {\n if ('application/json' in body) return 'application/json';\n\n return Object.keys(body)[0];\n}\n\nexport function getTagDisplayName(tag: TagObject): string {\n if ('x-displayName' in tag && typeof tag['x-displayName'] === 'string')\n return tag['x-displayName'];\n\n if (tag.summary) return tag.summary;\n return idToTitle(tag.name!);\n}\n\n/**\n * Summarize method endpoint information\n */\nexport function createMethod(\n method: string,\n path: NoReference<PathItemObject>,\n operation: NoReference<OperationObject>,\n): MethodInformation {\n return {\n description: path.description,\n summary: path.summary,\n ...operation,\n servers: operation.servers ?? path.servers,\n parameters: [...(operation.parameters ?? []), ...(path.parameters ?? [])],\n method: method.toUpperCase(),\n };\n}\n\ninterface ExampleLike {\n example?: unknown;\n examples?: {\n [media: string]: ExampleObject;\n };\n content?: {\n [media: string]: MediaTypeObject;\n };\n}\n\nexport function pickExample(value: ExampleLike): unknown | undefined {\n if (value.example !== undefined) {\n return value.example;\n }\n\n if (value.content) {\n const type = getPreferredType(value.content);\n const content = type ? value.content[type] : undefined;\n\n if (type && content) {\n const out = value.examples?.[type].value ?? pickExample(content);\n if (out !== undefined) return out;\n }\n }\n\n if (value.examples) {\n const examples = Object.values(value.examples);\n if (examples.length > 0) return examples[0].value;\n }\n}\n"],"mappings":";;AAYA,MAAa,aAAa;CAAC;CAAO;CAAQ;CAAS;CAAU;CAAQ;CAAM;AAyB3E,SAAgB,iBAAiB,MAAmD;AAClF,KAAI,sBAAsB,KAAM,QAAO;AAEvC,QAAO,OAAO,KAAK,KAAK,CAAC;;AAG3B,SAAgB,kBAAkB,KAAwB;AACxD,KAAI,mBAAmB,OAAO,OAAO,IAAI,qBAAqB,SAC5D,QAAO,IAAI;AAEb,KAAI,IAAI,QAAS,QAAO,IAAI;AAC5B,QAAO,UAAU,IAAI,KAAM;;;;;AAM7B,SAAgB,aACd,QACA,MACA,WACmB;AACnB,QAAO;EACL,aAAa,KAAK;EAClB,SAAS,KAAK;EACd,GAAG;EACH,SAAS,UAAU,WAAW,KAAK;EACnC,YAAY,CAAC,GAAI,UAAU,cAAc,EAAE,EAAG,GAAI,KAAK,cAAc,EAAE,CAAE;EACzE,QAAQ,OAAO,aAAa;EAC7B;;AAaH,SAAgB,YAAY,OAAyC;AACnE,KAAI,MAAM,YAAY,KAAA,EACpB,QAAO,MAAM;AAGf,KAAI,MAAM,SAAS;EACjB,MAAM,OAAO,iBAAiB,MAAM,QAAQ;EAC5C,MAAM,UAAU,OAAO,MAAM,QAAQ,QAAQ,KAAA;AAE7C,MAAI,QAAQ,SAAS;GACnB,MAAM,MAAM,MAAM,WAAW,MAAM,SAAS,YAAY,QAAQ;AAChE,OAAI,QAAQ,KAAA,EAAW,QAAO;;;AAIlC,KAAI,MAAM,UAAU;EAClB,MAAM,WAAW,OAAO,OAAO,MAAM,SAAS;AAC9C,MAAI,SAAS,SAAS,EAAG,QAAO,SAAS,GAAG"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
//#region src/utils/schema/resolve-ref.ts
|
|
2
|
+
function resolveRefSync(ref, schema) {
|
|
3
|
+
if (!ref.startsWith("#")) return;
|
|
4
|
+
const segments = ref.slice(1).split("/");
|
|
5
|
+
let current = schema;
|
|
6
|
+
for (const seg of segments) {
|
|
7
|
+
if (seg.length === 0) continue;
|
|
8
|
+
if (isPlainObject(current)) current = current[seg];
|
|
9
|
+
else return;
|
|
10
|
+
}
|
|
11
|
+
return current;
|
|
12
|
+
}
|
|
13
|
+
function isPlainObject(value) {
|
|
14
|
+
if (typeof value !== "object" || value === null) return false;
|
|
15
|
+
const prototype = Object.getPrototypeOf(value);
|
|
16
|
+
return prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null;
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
19
|
+
export { resolveRefSync };
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=resolve-ref.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-ref.js","names":[],"sources":["../../../src/utils/schema/resolve-ref.ts"],"sourcesContent":["import type { JSONSchema } from 'json-schema-typed/draft-2020-12';\n\nexport function resolveRefSync(ref: string, schema: JSONSchema): unknown | undefined {\n if (!ref.startsWith('#')) return;\n const segments = ref.slice(1).split('/');\n let current: unknown = schema;\n\n for (const seg of segments) {\n if (seg.length === 0) continue;\n\n if (isPlainObject(current)) current = current[seg];\n else return;\n }\n\n return current;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n\n const prototype = Object.getPrototypeOf(value);\n return (\n prototype === null ||\n prototype === Object.prototype ||\n Object.getPrototypeOf(prototype) === null\n );\n}\n"],"mappings":";AAEA,SAAgB,eAAe,KAAa,QAAyC;AACnF,KAAI,CAAC,IAAI,WAAW,IAAI,CAAE;CAC1B,MAAM,WAAW,IAAI,MAAM,EAAE,CAAC,MAAM,IAAI;CACxC,IAAI,UAAmB;AAEvB,MAAK,MAAM,OAAO,UAAU;AAC1B,MAAI,IAAI,WAAW,EAAG;AAEtB,MAAI,cAAc,QAAQ,CAAE,WAAU,QAAQ;MACzC;;AAGP,QAAO;;AAGT,SAAS,cAAc,OAAkD;AACvE,KAAI,OAAO,UAAU,YAAY,UAAU,KACzC,QAAO;CAGT,MAAM,YAAY,OAAO,eAAe,MAAM;AAC9C,QACE,cAAc,QACd,cAAc,OAAO,aACrB,OAAO,eAAe,UAAU,KAAK"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//#region src/utils/schema
|
|
1
|
+
//#region src/utils/schema/to-string.ts
|
|
2
2
|
let FormatFlags = /* @__PURE__ */ function(FormatFlags) {
|
|
3
3
|
FormatFlags[FormatFlags["None"] = 0] = "None";
|
|
4
4
|
FormatFlags[FormatFlags["UseAlias"] = 1] = "UseAlias";
|
|
@@ -55,4 +55,4 @@ function schemaToString(value, _resolver, flags = FormatFlags.None) {
|
|
|
55
55
|
//#endregion
|
|
56
56
|
export { FormatFlags, schemaToString };
|
|
57
57
|
|
|
58
|
-
//# sourceMappingURL=
|
|
58
|
+
//# sourceMappingURL=to-string.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"to-string.js","names":[],"sources":["../../../src/utils/schema/to-string.ts"],"sourcesContent":["import type { ParsedSchema, ResolvedSchema } from '@/utils/schema';\nimport type { ProcessedDocument } from '@/utils/process-document';\n\nexport enum FormatFlags {\n None = 0,\n UseAlias = 1 << 0,\n}\n\ntype Resolver = (schema: ResolvedSchema) => {\n dereferenced: ResolvedSchema;\n raw?: ParsedSchema;\n};\n\nexport function schemaToString(\n value: ResolvedSchema,\n _resolver?: ProcessedDocument | Resolver,\n flags: FormatFlags = FormatFlags.None,\n): string {\n const resolver: Resolver =\n typeof _resolver === 'function'\n ? _resolver\n : (schema) => {\n const ref =\n _resolver && typeof schema === 'object' ? _resolver.getRawRef(schema) : undefined;\n\n return {\n dereferenced: schema,\n raw: ref ? { $ref: ref } : undefined,\n };\n };\n function union(union: readonly ResolvedSchema[], sep: string, flags: FormatFlags) {\n const members = new Set();\n let nullable = false;\n\n for (const item of union) {\n const result = run(item, flags | FormatFlags.UseAlias);\n\n if (result === 'null') {\n nullable = true;\n } else if (result !== 'unknown') {\n members.add(result);\n }\n }\n\n const result = Array.from(members).join(sep);\n return nullable ? `${result} | null` : result;\n }\n\n function run(schema: ResolvedSchema, flags: FormatFlags): string {\n const resolved = resolver(schema);\n schema = resolved.dereferenced;\n\n if (schema === true) return 'any';\n else if (schema === false) return 'never';\n\n if ((flags & FormatFlags.UseAlias) === FormatFlags.UseAlias) {\n if (schema.title) return schema.title;\n\n if (typeof resolved.raw === 'object' && resolved.raw.$ref) {\n const ref = resolved.raw.$ref.split('/');\n if (ref.length > 0) return ref[ref.length - 1];\n }\n }\n\n if (Array.isArray(schema.type)) {\n return union(\n schema.type.map((type) => ({\n ...schema,\n type,\n })),\n ' | ',\n flags,\n );\n }\n\n if (schema.type === 'array')\n return `array<${schema.items ? run(schema.items, flags | FormatFlags.UseAlias) : 'unknown'}>`;\n\n const or = schema.oneOf ?? schema.anyOf;\n if (schema.oneOf && schema.anyOf) {\n return `(${union(schema.oneOf, ' | ', flags)}) & (${union(schema.anyOf, ' | ', flags)})`;\n } else if (or) {\n return union(or, ' | ', flags);\n }\n\n if (schema.allOf) {\n return union(schema.allOf, ' & ', flags);\n }\n\n if (schema.not) return `not ${run(schema.not, flags)}`;\n if (schema.type === 'string' && schema.format === 'binary') return 'file';\n\n if (schema.type && Array.isArray(schema.type)) {\n return schema.type.filter((v) => v !== 'null').join(' | ');\n }\n\n if (schema.type) {\n return schema.type as string;\n }\n\n return 'unknown';\n }\n\n return run(value, flags);\n}\n"],"mappings":";AAGA,IAAY,cAAL,yBAAA,aAAA;AACL,aAAA,YAAA,UAAA,KAAA;AACA,aAAA,YAAA,cAAA,KAAA;;KACD;AAOD,SAAgB,eACd,OACA,WACA,QAAqB,YAAY,MACzB;CACR,MAAM,WACJ,OAAO,cAAc,aACjB,aACC,WAAW;EACV,MAAM,MACJ,aAAa,OAAO,WAAW,WAAW,UAAU,UAAU,OAAO,GAAG,KAAA;AAE1E,SAAO;GACL,cAAc;GACd,KAAK,MAAM,EAAE,MAAM,KAAK,GAAG,KAAA;GAC5B;;CAET,SAAS,MAAM,OAAkC,KAAa,OAAoB;EAChF,MAAM,0BAAU,IAAI,KAAK;EACzB,IAAI,WAAW;AAEf,OAAK,MAAM,QAAQ,OAAO;GACxB,MAAM,SAAS,IAAI,MAAM,QAAQ,YAAY,SAAS;AAEtD,OAAI,WAAW,OACb,YAAW;YACF,WAAW,UACpB,SAAQ,IAAI,OAAO;;EAIvB,MAAM,SAAS,MAAM,KAAK,QAAQ,CAAC,KAAK,IAAI;AAC5C,SAAO,WAAW,GAAG,OAAO,WAAW;;CAGzC,SAAS,IAAI,QAAwB,OAA4B;EAC/D,MAAM,WAAW,SAAS,OAAO;AACjC,WAAS,SAAS;AAElB,MAAI,WAAW,KAAM,QAAO;WACnB,WAAW,MAAO,QAAO;AAElC,OAAK,QAAQ,YAAY,cAAc,YAAY,UAAU;AAC3D,OAAI,OAAO,MAAO,QAAO,OAAO;AAEhC,OAAI,OAAO,SAAS,QAAQ,YAAY,SAAS,IAAI,MAAM;IACzD,MAAM,MAAM,SAAS,IAAI,KAAK,MAAM,IAAI;AACxC,QAAI,IAAI,SAAS,EAAG,QAAO,IAAI,IAAI,SAAS;;;AAIhD,MAAI,MAAM,QAAQ,OAAO,KAAK,CAC5B,QAAO,MACL,OAAO,KAAK,KAAK,UAAU;GACzB,GAAG;GACH;GACD,EAAE,EACH,OACA,MACD;AAGH,MAAI,OAAO,SAAS,QAClB,QAAO,SAAS,OAAO,QAAQ,IAAI,OAAO,OAAO,QAAQ,YAAY,SAAS,GAAG,UAAU;EAE7F,MAAM,KAAK,OAAO,SAAS,OAAO;AAClC,MAAI,OAAO,SAAS,OAAO,MACzB,QAAO,IAAI,MAAM,OAAO,OAAO,OAAO,MAAM,CAAC,OAAO,MAAM,OAAO,OAAO,OAAO,MAAM,CAAC;WAC7E,GACT,QAAO,MAAM,IAAI,OAAO,MAAM;AAGhC,MAAI,OAAO,MACT,QAAO,MAAM,OAAO,OAAO,OAAO,MAAM;AAG1C,MAAI,OAAO,IAAK,QAAO,OAAO,IAAI,OAAO,KAAK,MAAM;AACpD,MAAI,OAAO,SAAS,YAAY,OAAO,WAAW,SAAU,QAAO;AAEnE,MAAI,OAAO,QAAQ,MAAM,QAAQ,OAAO,KAAK,CAC3C,QAAO,OAAO,KAAK,QAAQ,MAAM,MAAM,OAAO,CAAC,KAAK,MAAM;AAG5D,MAAI,OAAO,KACT,QAAO,OAAO;AAGhB,SAAO;;AAGT,QAAO,IAAI,OAAO,MAAM"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fumadocs-openapi",
|
|
3
|
-
"version": "10.
|
|
3
|
+
"version": "10.6.1",
|
|
4
4
|
"description": "Generate MDX docs for your OpenAPI spec",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Docs",
|
|
@@ -36,6 +36,7 @@
|
|
|
36
36
|
"./ui": "./dist/ui/index.js",
|
|
37
37
|
"./ui/base": "./dist/ui/base.js",
|
|
38
38
|
"./ui/client": "./dist/ui/client/index.js",
|
|
39
|
+
"./ui/create-client": "./dist/ui/create-client.js",
|
|
39
40
|
"./package.json": "./package.json",
|
|
40
41
|
"./css/*": "./css/*"
|
|
41
42
|
},
|
|
@@ -52,12 +53,12 @@
|
|
|
52
53
|
"@scalar/json-magic": "^0.12.4",
|
|
53
54
|
"@scalar/openapi-upgrader": "^0.2.2",
|
|
54
55
|
"ajv": "^8.18.0",
|
|
56
|
+
"chokidar": "^5.0.0",
|
|
55
57
|
"class-variance-authority": "^0.7.1",
|
|
56
|
-
"dereference-json-schema": "^0.2.2",
|
|
57
58
|
"github-slugger": "^2.0.0",
|
|
58
59
|
"hast-util-to-jsx-runtime": "^2.3.6",
|
|
59
60
|
"js-yaml": "^4.1.1",
|
|
60
|
-
"lucide-react": "^1.
|
|
61
|
+
"lucide-react": "^1.7.0",
|
|
61
62
|
"next-themes": "^0.4.6",
|
|
62
63
|
"openapi-sampler": "^1.7.2",
|
|
63
64
|
"react-hook-form": "^7.72.0",
|
|
@@ -68,7 +69,7 @@
|
|
|
68
69
|
"@fumari/stf": "1.0.3"
|
|
69
70
|
},
|
|
70
71
|
"devDependencies": {
|
|
71
|
-
"@scalar/api-client-react": "^1.4.
|
|
72
|
+
"@scalar/api-client-react": "^1.4.15",
|
|
72
73
|
"@types/js-yaml": "^4.0.9",
|
|
73
74
|
"@types/node": "25.5.0",
|
|
74
75
|
"@types/openapi-sampler": "^1.0.3",
|
|
@@ -76,12 +77,11 @@
|
|
|
76
77
|
"json-schema-typed": "^8.0.2",
|
|
77
78
|
"shiki": "^4.0.2",
|
|
78
79
|
"tailwindcss": "^4.2.2",
|
|
79
|
-
"tsdown": "0.21.
|
|
80
|
+
"tsdown": "0.21.6",
|
|
80
81
|
"@fumadocs/tailwind": "0.0.3",
|
|
81
|
-
"
|
|
82
|
-
"
|
|
83
|
-
"fumadocs-
|
|
84
|
-
"tsconfig": "0.0.0"
|
|
82
|
+
"fumadocs-ui": "16.7.7",
|
|
83
|
+
"tsconfig": "0.0.0",
|
|
84
|
+
"fumadocs-core": "16.7.7"
|
|
85
85
|
},
|
|
86
86
|
"peerDependencies": {
|
|
87
87
|
"@scalar/api-client-react": "*",
|
|
@@ -111,7 +111,7 @@
|
|
|
111
111
|
"build": "tsdown --config-loader unrun",
|
|
112
112
|
"clean": "rimraf dist",
|
|
113
113
|
"dev": "tsdown --watch --clean false",
|
|
114
|
-
"lint": "
|
|
114
|
+
"lint": "oxlint .",
|
|
115
115
|
"types:check": "tsc --noEmit"
|
|
116
116
|
}
|
|
117
117
|
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
//#region src/requests/to-python-object.ts
|
|
2
|
-
function generatePythonObject(v, imports = /* @__PURE__ */ new Set()) {
|
|
3
|
-
if (v === null) return "None";
|
|
4
|
-
else if (typeof v === "boolean") return v ? "True" : "False";
|
|
5
|
-
else if (typeof v === "string") return JSON.stringify(v);
|
|
6
|
-
else if (typeof v === "number") return v.toString();
|
|
7
|
-
else if (Array.isArray(v)) return `[${v.map((item) => generatePythonObject(item, imports)).join(", ")}]`;
|
|
8
|
-
else if (v instanceof Date) {
|
|
9
|
-
imports.add("datetime");
|
|
10
|
-
return `datetime.datetime(${v.getFullYear()}, ${v.getMonth() + 1}, ${v.getDate()}, ${v.getHours()}, ${v.getMinutes()}, ${v.getSeconds()}, ${v.getMilliseconds()})`;
|
|
11
|
-
} else if (typeof v === "object") return `{\n${Object.entries(v).map(([key, value]) => ` ${JSON.stringify(key)}: ${generatePythonObject(value, imports)}`).join(", \n")}\n}`;
|
|
12
|
-
else throw new Error(`Unsupported type: ${typeof v}`);
|
|
13
|
-
}
|
|
14
|
-
//#endregion
|
|
15
|
-
export { generatePythonObject };
|
|
16
|
-
|
|
17
|
-
//# sourceMappingURL=to-python-object.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"to-python-object.js","names":[],"sources":["../../src/requests/to-python-object.ts"],"sourcesContent":["export function generatePythonObject(v: unknown, imports = new Set()): string {\n if (v === null) {\n return 'None';\n } else if (typeof v === 'boolean') {\n return v ? 'True' : 'False';\n } else if (typeof v === 'string') {\n return JSON.stringify(v);\n } else if (typeof v === 'number') {\n return v.toString();\n } else if (Array.isArray(v)) {\n const items = v.map((item) => generatePythonObject(item, imports));\n return `[${items.join(', ')}]`;\n } else if (v instanceof Date) {\n imports.add('datetime');\n return `datetime.datetime(${v.getFullYear()}, ${v.getMonth() + 1}, ${v.getDate()}, ${v.getHours()}, ${v.getMinutes()}, ${v.getSeconds()}, ${v.getMilliseconds()})`;\n } else if (typeof v === 'object') {\n const entries = Object.entries(v).map(\n ([key, value]) => ` ${JSON.stringify(key)}: ${generatePythonObject(value, imports)}`,\n );\n return `{\\n${entries.join(', \\n')}\\n}`;\n } else {\n throw new Error(`Unsupported type: ${typeof v}`);\n }\n}\n"],"mappings":";AAAA,SAAgB,qBAAqB,GAAY,0BAAU,IAAI,KAAK,EAAU;AAC5E,KAAI,MAAM,KACR,QAAO;UACE,OAAO,MAAM,UACtB,QAAO,IAAI,SAAS;UACX,OAAO,MAAM,SACtB,QAAO,KAAK,UAAU,EAAE;UACf,OAAO,MAAM,SACtB,QAAO,EAAE,UAAU;UACV,MAAM,QAAQ,EAAE,CAEzB,QAAO,IADO,EAAE,KAAK,SAAS,qBAAqB,MAAM,QAAQ,CAAC,CACjD,KAAK,KAAK,CAAC;UACnB,aAAa,MAAM;AAC5B,UAAQ,IAAI,WAAW;AACvB,SAAO,qBAAqB,EAAE,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,iBAAiB,CAAC;YACvJ,OAAO,MAAM,SAItB,QAAO,MAHS,OAAO,QAAQ,EAAE,CAAC,KAC/B,CAAC,KAAK,WAAW,KAAK,KAAK,UAAU,IAAI,CAAC,IAAI,qBAAqB,OAAO,QAAQ,GACpF,CACoB,KAAK,OAAO,CAAC;KAElC,OAAM,IAAI,MAAM,qBAAqB,OAAO,IAAI"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"full.client.js","names":[],"sources":["../../src/ui/full.client.tsx"],"sourcesContent":["'use client';\nimport type { ReactNode } from 'react';\nimport { ClientCodeBlockProvider } from './components/codeblock';\nimport { defaultShikiFactory } from 'fumadocs-core/highlight/shiki/full';\n\nexport function FullProvider({ children }: { children: ReactNode }) {\n return (\n <ClientCodeBlockProvider factory={defaultShikiFactory}>{children}</ClientCodeBlockProvider>\n );\n}\n"],"mappings":";;;;;AAKA,SAAgB,aAAa,EAAE,YAAqC;AAClE,QACE,oBAAC,yBAAD;EAAyB,SAAS;EAAsB;EAAmC,CAAA"}
|
package/dist/ui/full.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { OpenAPIServer } from "../server/create.js";
|
|
2
|
-
import { ApiPageProps } from "./api-page.js";
|
|
3
|
-
import { CreateAPIPageOptions as CreateAPIPageOptions$1 } from "./base.js";
|
|
4
|
-
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
5
|
-
|
|
6
|
-
//#region src/ui/full.d.ts
|
|
7
|
-
type CreateAPIPageOptions = Partial<CreateAPIPageOptions$1>;
|
|
8
|
-
declare function createAPIPage(server: OpenAPIServer, options?: CreateAPIPageOptions): (props: ApiPageProps) => react_jsx_runtime0.JSX.Element;
|
|
9
|
-
//#endregion
|
|
10
|
-
export { CreateAPIPageOptions, createAPIPage };
|
|
11
|
-
//# sourceMappingURL=full.d.ts.map
|
package/dist/ui/full.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"full.d.ts","names":[],"sources":["../../src/ui/full.tsx"],"mappings":";;;;;;KAMY,oBAAA,GAAuB,OAAA,CAAQ,sBAAA;AAAA,iBAE3B,aAAA,CAAc,MAAA,EAAQ,aAAA,EAAe,OAAA,GAAS,oBAAA,IAsBhC,KAAA,EAAO,YAAA,KAAY,kBAAA,CAAA,GAAA,CAAA,OAAA"}
|
package/dist/ui/full.js
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { createAPIPage as createAPIPage$1 } from "./base.js";
|
|
2
|
-
import { FullProvider } from "./full.client.js";
|
|
3
|
-
import { jsx } from "react/jsx-runtime";
|
|
4
|
-
import { defaultShikiFactory } from "fumadocs-core/highlight/shiki/full";
|
|
5
|
-
//#region src/ui/full.tsx
|
|
6
|
-
function createAPIPage(server, options = {}) {
|
|
7
|
-
const APIPage = createAPIPage$1(server, {
|
|
8
|
-
shiki: defaultShikiFactory,
|
|
9
|
-
shikiOptions: { themes: {
|
|
10
|
-
light: "github-light",
|
|
11
|
-
dark: "github-dark"
|
|
12
|
-
} },
|
|
13
|
-
async generateTypeScriptDefinitions(schema, ctx) {
|
|
14
|
-
if (typeof schema !== "object") return;
|
|
15
|
-
const { compile } = await import("@fumari/json-schema-ts");
|
|
16
|
-
try {
|
|
17
|
-
return compile(schema, {
|
|
18
|
-
name: "Response",
|
|
19
|
-
readOnly: ctx.readOnly,
|
|
20
|
-
writeOnly: ctx.writeOnly,
|
|
21
|
-
getSchemaId: ctx.schema.getRawRef
|
|
22
|
-
});
|
|
23
|
-
} catch (e) {
|
|
24
|
-
console.warn("Failed to generate typescript schema:", e);
|
|
25
|
-
}
|
|
26
|
-
},
|
|
27
|
-
...options
|
|
28
|
-
});
|
|
29
|
-
return function APIPageFull(props) {
|
|
30
|
-
return /* @__PURE__ */ jsx(FullProvider, { children: /* @__PURE__ */ jsx(APIPage, { ...props }) });
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
//#endregion
|
|
34
|
-
export { createAPIPage };
|
|
35
|
-
|
|
36
|
-
//# sourceMappingURL=full.js.map
|
package/dist/ui/full.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"full.js","names":["base.createAPIPage"],"sources":["../../src/ui/full.tsx"],"sourcesContent":["import type { OpenAPIServer } from '@/server';\nimport * as base from './base';\nimport type { ApiPageProps } from './api-page';\nimport { defaultShikiFactory } from 'fumadocs-core/highlight/shiki/full';\nimport { FullProvider } from './full.client';\n\nexport type CreateAPIPageOptions = Partial<base.CreateAPIPageOptions>;\n\nexport function createAPIPage(server: OpenAPIServer, options: CreateAPIPageOptions = {}) {\n const APIPage = base.createAPIPage(server, {\n shiki: defaultShikiFactory,\n shikiOptions: { themes: { light: 'github-light', dark: 'github-dark' } },\n async generateTypeScriptDefinitions(schema, ctx) {\n if (typeof schema !== 'object') return;\n const { compile } = await import('@fumari/json-schema-ts');\n\n try {\n return compile(schema, {\n name: 'Response',\n readOnly: ctx.readOnly,\n writeOnly: ctx.writeOnly,\n getSchemaId: ctx.schema.getRawRef,\n });\n } catch (e) {\n console.warn('Failed to generate typescript schema:', e);\n }\n },\n ...options,\n });\n\n return function APIPageFull(props: ApiPageProps) {\n return (\n <FullProvider>\n <APIPage {...props} />\n </FullProvider>\n );\n };\n}\n"],"mappings":";;;;;AAQA,SAAgB,cAAc,QAAuB,UAAgC,EAAE,EAAE;CACvF,MAAM,UAAUA,gBAAmB,QAAQ;EACzC,OAAO;EACP,cAAc,EAAE,QAAQ;GAAE,OAAO;GAAgB,MAAM;GAAe,EAAE;EACxE,MAAM,8BAA8B,QAAQ,KAAK;AAC/C,OAAI,OAAO,WAAW,SAAU;GAChC,MAAM,EAAE,YAAY,MAAM,OAAO;AAEjC,OAAI;AACF,WAAO,QAAQ,QAAQ;KACrB,MAAM;KACN,UAAU,IAAI;KACd,WAAW,IAAI;KACf,aAAa,IAAI,OAAO;KACzB,CAAC;YACK,GAAG;AACV,YAAQ,KAAK,yCAAyC,EAAE;;;EAG5D,GAAG;EACJ,CAAC;AAEF,QAAO,SAAS,YAAY,OAAqB;AAC/C,SACE,oBAAC,cAAD,EAAA,UACE,oBAAC,SAAD,EAAS,GAAI,OAAS,CAAA,EACT,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"request-tabs.d.ts","names":[],"sources":["../../../src/ui/operation/request-tabs.tsx"],"mappings":";;;;UAkBiB,kBAAA;EACf,EAAA;EACA,IAAA;EACA,WAAA;EACA,IAAA,EAAM,cAAA;EACN,OAAA,EAAS,WAAA;AAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schema-to-string.js","names":[],"sources":["../../src/utils/schema-to-string.ts"],"sourcesContent":["import type { ParsedSchema, ResolvedSchema } from '@/utils/schema';\nimport type { ProcessedDocument } from '@/utils/process-document';\n\nexport enum FormatFlags {\n None = 0,\n UseAlias = 1 << 0,\n}\n\ntype Resolver = (schema: ResolvedSchema) => {\n dereferenced: ResolvedSchema;\n raw?: ParsedSchema;\n};\n\nexport function schemaToString(\n value: ResolvedSchema,\n _resolver?: ProcessedDocument | Resolver,\n flags: FormatFlags = FormatFlags.None,\n): string {\n const resolver: Resolver =\n typeof _resolver === 'function'\n ? _resolver\n : (schema) => {\n const ref =\n _resolver && typeof schema === 'object' ? _resolver.getRawRef(schema) : undefined;\n\n return {\n dereferenced: schema,\n raw: ref ? { $ref: ref } : undefined,\n };\n };\n function union(union: readonly ResolvedSchema[], sep: string, flags: FormatFlags) {\n const members = new Set();\n let nullable = false;\n\n for (const item of union) {\n const result = run(item, flags | FormatFlags.UseAlias);\n\n if (result === 'null') {\n nullable = true;\n } else if (result !== 'unknown') {\n members.add(result);\n }\n }\n\n const result = Array.from(members).join(sep);\n return nullable ? `${result} | null` : result;\n }\n\n function run(schema: ResolvedSchema, flags: FormatFlags): string {\n const resolved = resolver(schema);\n schema = resolved.dereferenced;\n\n if (schema === true) return 'any';\n else if (schema === false) return 'never';\n\n if ((flags & FormatFlags.UseAlias) === FormatFlags.UseAlias) {\n if (schema.title) return schema.title;\n\n if (typeof resolved.raw === 'object' && resolved.raw.$ref) {\n const ref = resolved.raw.$ref.split('/');\n if (ref.length > 0) return ref[ref.length - 1];\n }\n }\n\n if (Array.isArray(schema.type)) {\n return union(\n schema.type.map((type) => ({\n ...schema,\n type,\n })),\n ' | ',\n flags,\n );\n }\n\n if (schema.type === 'array')\n return `array<${schema.items ? run(schema.items, flags | FormatFlags.UseAlias) : 'unknown'}>`;\n\n const or = schema.oneOf ?? schema.anyOf;\n if (schema.oneOf && schema.anyOf) {\n return `(${union(schema.oneOf, ' | ', flags)}) & (${union(schema.anyOf, ' | ', flags)})`;\n } else if (or) {\n return union(or, ' | ', flags);\n }\n\n if (schema.allOf) {\n return union(schema.allOf, ' & ', flags);\n }\n\n if (schema.not) return `not ${run(schema.not, flags)}`;\n if (schema.type === 'string' && schema.format === 'binary') return 'file';\n\n if (schema.type && Array.isArray(schema.type)) {\n return schema.type.filter((v) => v !== 'null').join(' | ');\n }\n\n if (schema.type) {\n return schema.type as string;\n }\n\n return 'unknown';\n }\n\n return run(value, flags);\n}\n"],"mappings":";AAGA,IAAY,cAAL,yBAAA,aAAA;AACL,aAAA,YAAA,UAAA,KAAA;AACA,aAAA,YAAA,cAAA,KAAA;;KACD;AAOD,SAAgB,eACd,OACA,WACA,QAAqB,YAAY,MACzB;CACR,MAAM,WACJ,OAAO,cAAc,aACjB,aACC,WAAW;EACV,MAAM,MACJ,aAAa,OAAO,WAAW,WAAW,UAAU,UAAU,OAAO,GAAG,KAAA;AAE1E,SAAO;GACL,cAAc;GACd,KAAK,MAAM,EAAE,MAAM,KAAK,GAAG,KAAA;GAC5B;;CAET,SAAS,MAAM,OAAkC,KAAa,OAAoB;EAChF,MAAM,0BAAU,IAAI,KAAK;EACzB,IAAI,WAAW;AAEf,OAAK,MAAM,QAAQ,OAAO;GACxB,MAAM,SAAS,IAAI,MAAM,QAAQ,YAAY,SAAS;AAEtD,OAAI,WAAW,OACb,YAAW;YACF,WAAW,UACpB,SAAQ,IAAI,OAAO;;EAIvB,MAAM,SAAS,MAAM,KAAK,QAAQ,CAAC,KAAK,IAAI;AAC5C,SAAO,WAAW,GAAG,OAAO,WAAW;;CAGzC,SAAS,IAAI,QAAwB,OAA4B;EAC/D,MAAM,WAAW,SAAS,OAAO;AACjC,WAAS,SAAS;AAElB,MAAI,WAAW,KAAM,QAAO;WACnB,WAAW,MAAO,QAAO;AAElC,OAAK,QAAQ,YAAY,cAAc,YAAY,UAAU;AAC3D,OAAI,OAAO,MAAO,QAAO,OAAO;AAEhC,OAAI,OAAO,SAAS,QAAQ,YAAY,SAAS,IAAI,MAAM;IACzD,MAAM,MAAM,SAAS,IAAI,KAAK,MAAM,IAAI;AACxC,QAAI,IAAI,SAAS,EAAG,QAAO,IAAI,IAAI,SAAS;;;AAIhD,MAAI,MAAM,QAAQ,OAAO,KAAK,CAC5B,QAAO,MACL,OAAO,KAAK,KAAK,UAAU;GACzB,GAAG;GACH;GACD,EAAE,EACH,OACA,MACD;AAGH,MAAI,OAAO,SAAS,QAClB,QAAO,SAAS,OAAO,QAAQ,IAAI,OAAO,OAAO,QAAQ,YAAY,SAAS,GAAG,UAAU;EAE7F,MAAM,KAAK,OAAO,SAAS,OAAO;AAClC,MAAI,OAAO,SAAS,OAAO,MACzB,QAAO,IAAI,MAAM,OAAO,OAAO,OAAO,MAAM,CAAC,OAAO,MAAM,OAAO,OAAO,OAAO,MAAM,CAAC;WAC7E,GACT,QAAO,MAAM,IAAI,OAAO,MAAM;AAGhC,MAAI,OAAO,MACT,QAAO,MAAM,OAAO,OAAO,OAAO,MAAM;AAG1C,MAAI,OAAO,IAAK,QAAO,OAAO,IAAI,OAAO,KAAK,MAAM;AACpD,MAAI,OAAO,SAAS,YAAY,OAAO,WAAW,SAAU,QAAO;AAEnE,MAAI,OAAO,QAAQ,MAAM,QAAQ,OAAO,KAAK,CAC3C,QAAO,OAAO,KAAK,QAAQ,MAAM,MAAM,OAAO,CAAC,KAAK,MAAM;AAG5D,MAAI,OAAO,KACT,QAAO,OAAO;AAGhB,SAAO;;AAGT,QAAO,IAAI,OAAO,MAAM"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","names":[],"sources":["../../src/utils/schema.ts"],"mappings":";;;;KAcY,WAAA,MAAiB,CAAA,uBACzB,WAAA,CAAY,CAAA,MACZ,CAAA,SAAU,eAAA,GACR,OAAA,CAAQ,CAAA,EAAG,eAAA,IACX,CAAA,gCAEgB,CAAA,GAAI,WAAA,CAAY,CAAA,CAAE,CAAA,OAEhC,CAAA;AAAA,KAEH,qBAAA,MAA2B,CAAA,uBAC5B,WAAA,CAAY,CAAA,MACZ,CAAA;EAAY,IAAA;AAAA,IACV,IAAA,CAAK,CAAA,YACL,CAAA;AAAA,KAEM,YAAA,IACP,UAAA;EACC,mBAAA;AAAA;AAAA,KAGM,cAAA,GAAiB,qBAAA,CAAsB,YAAA"}
|
package/dist/utils/schema.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","names":[],"sources":["../../src/utils/schema.ts"],"sourcesContent":["import type { JSONSchema } from 'json-schema-typed/draft-2020-12';\nimport type {\n ExampleObject,\n MediaTypeObject,\n MethodInformation,\n OperationObject,\n PathItemObject,\n ReferenceObject,\n TagObject,\n} from '@/types';\nimport { idToTitle } from '@/utils/id-to-title';\n\nexport const methodKeys = ['get', 'post', 'patch', 'delete', 'head', 'put'] as const;\n\nexport type NoReference<T> = T extends (infer I)[]\n ? NoReference<I>[]\n : T extends ReferenceObject\n ? Exclude<T, ReferenceObject>\n : T extends object\n ? {\n [K in keyof T]: NoReference<T[K]>;\n }\n : T;\n\ntype NoReferenceJSONSchema<T> = T extends (infer I)[]\n ? NoReference<I>[]\n : T extends { $ref?: string }\n ? Omit<T, '$ref'>\n : T;\n\nexport type ParsedSchema =\n | (JSONSchema & {\n 'x-playground-lazy'?: boolean;\n })\n | boolean;\nexport type ResolvedSchema = NoReferenceJSONSchema<ParsedSchema>;\n\nexport function getPreferredType(body: Record<string, unknown>): string | undefined {\n if ('application/json' in body) return 'application/json';\n\n return Object.keys(body)[0];\n}\n\nexport function getTagDisplayName(tag: TagObject): string {\n if ('x-displayName' in tag && typeof tag['x-displayName'] === 'string')\n return tag['x-displayName'];\n\n if (tag.summary) return tag.summary;\n return idToTitle(tag.name!);\n}\n\n/**\n * Summarize method endpoint information\n */\nexport function createMethod(\n method: string,\n path: NoReference<PathItemObject>,\n operation: NoReference<OperationObject>,\n): MethodInformation {\n return {\n description: path.description,\n summary: path.summary,\n ...operation,\n servers: operation.servers ?? path.servers,\n parameters: [...(operation.parameters ?? []), ...(path.parameters ?? [])],\n method: method.toUpperCase(),\n };\n}\n\ninterface ExampleLike {\n example?: unknown;\n examples?: {\n [media: string]: ExampleObject;\n };\n content?: {\n [media: string]: MediaTypeObject;\n };\n}\n\nexport function pickExample(value: ExampleLike): unknown | undefined {\n if (value.example !== undefined) {\n return value.example;\n }\n\n if (value.content) {\n const type = getPreferredType(value.content);\n const content = type ? value.content[type] : undefined;\n\n if (type && content) {\n const out = value.examples?.[type].value ?? pickExample(content);\n if (out !== undefined) return out;\n }\n }\n\n if (value.examples) {\n const examples = Object.values(value.examples);\n if (examples.length > 0) return examples[0].value;\n }\n}\n"],"mappings":";;AAYA,MAAa,aAAa;CAAC;CAAO;CAAQ;CAAS;CAAU;CAAQ;CAAM;AAyB3E,SAAgB,iBAAiB,MAAmD;AAClF,KAAI,sBAAsB,KAAM,QAAO;AAEvC,QAAO,OAAO,KAAK,KAAK,CAAC;;AAG3B,SAAgB,kBAAkB,KAAwB;AACxD,KAAI,mBAAmB,OAAO,OAAO,IAAI,qBAAqB,SAC5D,QAAO,IAAI;AAEb,KAAI,IAAI,QAAS,QAAO,IAAI;AAC5B,QAAO,UAAU,IAAI,KAAM;;;;;AAM7B,SAAgB,aACd,QACA,MACA,WACmB;AACnB,QAAO;EACL,aAAa,KAAK;EAClB,SAAS,KAAK;EACd,GAAG;EACH,SAAS,UAAU,WAAW,KAAK;EACnC,YAAY,CAAC,GAAI,UAAU,cAAc,EAAE,EAAG,GAAI,KAAK,cAAc,EAAE,CAAE;EACzE,QAAQ,OAAO,aAAa;EAC7B;;AAaH,SAAgB,YAAY,OAAyC;AACnE,KAAI,MAAM,YAAY,KAAA,EACpB,QAAO,MAAM;AAGf,KAAI,MAAM,SAAS;EACjB,MAAM,OAAO,iBAAiB,MAAM,QAAQ;EAC5C,MAAM,UAAU,OAAO,MAAM,QAAQ,QAAQ,KAAA;AAE7C,MAAI,QAAQ,SAAS;GACnB,MAAM,MAAM,MAAM,WAAW,MAAM,SAAS,YAAY,QAAQ;AAChE,OAAI,QAAQ,KAAA,EAAW,QAAO;;;AAIlC,KAAI,MAAM,UAAU;EAClB,MAAM,WAAW,OAAO,OAAO,MAAM,SAAS;AAC9C,MAAI,SAAS,SAAS,EAAG,QAAO,SAAS,GAAG"}
|
|
File without changes
|