fumadocs-openapi 8.1.12 → 9.0.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.
Files changed (49) hide show
  1. package/dist/generate-file.d.ts +55 -20
  2. package/dist/generate-file.d.ts.map +1 -1
  3. package/dist/generate-file.js +93 -68
  4. package/dist/generate.d.ts +10 -10
  5. package/dist/generate.d.ts.map +1 -1
  6. package/dist/generate.js +33 -64
  7. package/dist/index.d.ts +1 -1
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +0 -1
  10. package/dist/playground/inputs.d.ts +4 -8
  11. package/dist/playground/inputs.d.ts.map +1 -1
  12. package/dist/playground/inputs.js +56 -37
  13. package/dist/render/api-page.d.ts.map +1 -1
  14. package/dist/render/markdown.d.ts.map +1 -1
  15. package/dist/render/markdown.js +15 -11
  16. package/dist/render/operation/api-example.js +10 -6
  17. package/dist/render/operation/index.d.ts +1 -1
  18. package/dist/render/operation/index.d.ts.map +1 -1
  19. package/dist/render/operation/index.js +4 -16
  20. package/dist/render/renderer.d.ts +1 -0
  21. package/dist/render/renderer.d.ts.map +1 -1
  22. package/dist/render/schema.d.ts +5 -15
  23. package/dist/render/schema.d.ts.map +1 -1
  24. package/dist/render/schema.js +178 -97
  25. package/dist/server/create.d.ts +1 -7
  26. package/dist/server/create.d.ts.map +1 -1
  27. package/dist/server/proxy.d.ts +11 -1
  28. package/dist/server/proxy.d.ts.map +1 -1
  29. package/dist/server/proxy.js +10 -3
  30. package/dist/server/source-api.d.ts +3 -2
  31. package/dist/server/source-api.d.ts.map +1 -1
  32. package/dist/ui/client.js +1 -1
  33. package/dist/ui/index.d.ts +1 -1
  34. package/dist/ui/index.d.ts.map +1 -1
  35. package/dist/ui/index.js +4 -4
  36. package/dist/utils/combine-schema.d.ts.map +1 -1
  37. package/dist/utils/combine-schema.js +22 -27
  38. package/dist/utils/generate-document.d.ts +4 -7
  39. package/dist/utils/generate-document.d.ts.map +1 -1
  40. package/dist/utils/generate-document.js +10 -6
  41. package/dist/utils/process-document.d.ts +1 -1
  42. package/dist/utils/process-document.d.ts.map +1 -1
  43. package/dist/utils/process-document.js +8 -5
  44. package/dist/utils/schema-to-string.d.ts.map +1 -1
  45. package/dist/utils/schema-to-string.js +8 -21
  46. package/dist/utils/schema.d.ts +1 -1
  47. package/dist/utils/schema.d.ts.map +1 -1
  48. package/dist/utils/schema.js +5 -8
  49. package/package.json +12 -12
@@ -1 +1 @@
1
- {"version":3,"file":"process-document.d.ts","sourceRoot":"","sources":["../../src/utils/process-document.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAK5D,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,WAAW,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;AAE/E,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IAChC,cAAc,EAAE,cAAc,CAAC;IAC/B,UAAU,EAAE,QAAQ,CAAC;CACtB,CAAC;AAIF;;GAEG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,aAAa,EACvB,YAAY,UAAQ,GACnB,OAAO,CAAC,iBAAiB,CAAC,CA8B5B"}
1
+ {"version":3,"file":"process-document.d.ts","sourceRoot":"","sources":["../../src/utils/process-document.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAK5D,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,WAAW,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;AAE/E,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IAChC,cAAc,EAAE,cAAc,CAAC;IAC/B,UAAU,EAAE,QAAQ,CAAC;CACtB,CAAC;AAIF;;GAEG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,aAAa,EACpB,YAAY,UAAQ,GACnB,OAAO,CAAC,iBAAiB,CAAC,CAoC5B"}
@@ -5,14 +5,17 @@ const cache = new Map();
5
5
  /**
6
6
  * process & reference input document to a Fumadocs OpenAPI compatible format
7
7
  */
8
- export async function processDocument(document, disableCache = false) {
9
- const cached = !disableCache && typeof document === 'string' ? cache.get(document) : null;
8
+ export async function processDocument(input, disableCache = false) {
9
+ const cached = !disableCache && typeof input === 'string' ? cache.get(input) : null;
10
10
  if (cached)
11
11
  return cached;
12
12
  const dereferenceMap = new Map();
13
- const loaded = await load(document, {
13
+ const loaded = await load(input, {
14
14
  plugins: [readFiles(), fetchUrls()],
15
15
  });
16
+ if (loaded.errors && loaded.errors.length > 0) {
17
+ throw new Error(loaded.errors.map((err) => `${err.code}: ${err.message}`).join('\n'));
18
+ }
16
19
  // upgrade
17
20
  loaded.specification = upgrade(loaded.specification).specification;
18
21
  const { schema: dereferenced } = await dereference(loaded.filesystem, {
@@ -25,8 +28,8 @@ export async function processDocument(document, disableCache = false) {
25
28
  dereferenceMap,
26
29
  downloaded: loaded.specification,
27
30
  };
28
- if (!disableCache && typeof document === 'string') {
29
- cache.set(document, processed);
31
+ if (!disableCache && typeof input === 'string') {
32
+ cache.set(input, processed);
30
33
  }
31
34
  return processed;
32
35
  }
@@ -1 +1 @@
1
- {"version":3,"file":"schema-to-string.d.ts","sourceRoot":"","sources":["../../src/utils/schema-to-string.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEjE,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,UAAO,GAAG,MAAM,CAuE5E"}
1
+ {"version":3,"file":"schema-to-string.d.ts","sourceRoot":"","sources":["../../src/utils/schema-to-string.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEjE,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,UAAO,GAAG,MAAM,CA0D5E"}
@@ -17,6 +17,7 @@ export function schemaToString(schema, isRoot = true) {
17
17
  ...schema,
18
18
  type,
19
19
  }, false))
20
+ .filter((v) => v !== 'unknown' && v !== 'null')
20
21
  .join(' | ');
21
22
  }
22
23
  if (schema.type === 'array')
@@ -24,39 +25,25 @@ export function schemaToString(schema, isRoot = true) {
24
25
  if (schema.oneOf) {
25
26
  return schema.oneOf
26
27
  .map((one) => schemaToString(one, false))
27
- .filter((v) => v !== 'unknown')
28
+ .filter((v) => v !== 'unknown' && v !== 'null')
28
29
  .join(' | ');
29
30
  }
30
- if (schema.allOf) {
31
- return schema.allOf
31
+ const combinedOf = schema.anyOf ?? schema.allOf;
32
+ if (combinedOf) {
33
+ return combinedOf
32
34
  .map((one) => schemaToString(one, false))
33
- .filter((v) => v !== 'unknown')
35
+ .filter((v) => v !== 'unknown' && v !== 'null')
34
36
  .join(' & ');
35
37
  }
36
38
  if (schema.not)
37
39
  return `not ${schemaToString(schema.not, false)}`;
38
- if (schema.anyOf) {
39
- const union = schema.anyOf
40
- .map((one) => schemaToString(one, false))
41
- .filter((v) => v !== 'unknown');
42
- if (union.length > 1) {
43
- return `Any properties in ${union.join(',')}`;
44
- }
45
- else if (union.length === 1) {
46
- return union[0];
47
- }
48
- }
49
40
  if (schema.type === 'string' && schema.format === 'binary')
50
41
  return 'file';
51
42
  if (schema.type && Array.isArray(schema.type)) {
52
- const nonNullTypes = schema.type.filter((v) => v !== 'null');
53
- if (nonNullTypes.length > 0)
54
- return nonNullTypes.join(' | ');
43
+ return schema.type.filter((v) => v !== 'null').join(' | ');
55
44
  }
56
- else if (schema.type && schema.type !== 'null') {
45
+ if (schema.type) {
57
46
  return schema.type;
58
47
  }
59
- if (typeof schema.type === 'string')
60
- return schema.type;
61
48
  return 'unknown';
62
49
  }
@@ -9,6 +9,6 @@ type NoReferenceJSONSchema<T> = T extends (infer I)[] ? NoReference<I>[] : T ext
9
9
  export type ParsedSchema = JSONSchema;
10
10
  export type ResolvedSchema = NoReferenceJSONSchema<ParsedSchema>;
11
11
  export declare function getPreferredType<B extends Record<string, unknown>>(body: B): keyof B | undefined;
12
- export declare function isNullable(schema: ParsedSchema, includeOneOf?: boolean): boolean;
12
+ export declare function isNullable(schema: ParsedSchema): boolean;
13
13
  export {};
14
14
  //# sourceMappingURL=schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/utils/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE1C,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GAC9C,WAAW,CAAC,CAAC,CAAC,EAAE,GAChB,CAAC,SAAS,eAAe,GACvB,OAAO,CAAC,CAAC,EAAE,eAAe,CAAC,GAC3B,CAAC,SAAS,MAAM,GACd;KACG,CAAC,IAAI,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAClC,GACD,CAAC,CAAC;AAEV,KAAK,qBAAqB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GACjD,WAAW,CAAC,CAAC,CAAC,EAAE,GAChB,CAAC,SAAS;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACzB,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,GACf,CAAC,CAAC;AAER,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC;AACtC,MAAM,MAAM,cAAc,GAAG,qBAAqB,CAAC,YAAY,CAAC,CAAC;AAEjE,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChE,IAAI,EAAE,CAAC,GACN,MAAM,CAAC,GAAG,SAAS,CAIrB;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,UAAO,GAAG,OAAO,CAU7E"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/utils/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE1C,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GAC9C,WAAW,CAAC,CAAC,CAAC,EAAE,GAChB,CAAC,SAAS,eAAe,GACvB,OAAO,CAAC,CAAC,EAAE,eAAe,CAAC,GAC3B,CAAC,SAAS,MAAM,GACd;KACG,CAAC,IAAI,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAClC,GACD,CAAC,CAAC;AAEV,KAAK,qBAAqB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GACjD,WAAW,CAAC,CAAC,CAAC,EAAE,GAChB,CAAC,SAAS;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACzB,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,GACf,CAAC,CAAC;AAER,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC;AACtC,MAAM,MAAM,cAAc,GAAG,qBAAqB,CAAC,YAAY,CAAC,CAAC;AAEjE,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChE,IAAI,EAAE,CAAC,GACN,MAAM,CAAC,GAAG,SAAS,CAIrB;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAQxD"}
@@ -3,16 +3,13 @@ export function getPreferredType(body) {
3
3
  return 'application/json';
4
4
  return Object.keys(body)[0];
5
5
  }
6
- export function isNullable(schema, includeOneOf = true) {
6
+ export function isNullable(schema) {
7
7
  if (typeof schema === 'boolean')
8
8
  return false;
9
9
  if (Array.isArray(schema.type) && schema.type.includes('null'))
10
10
  return true;
11
- if (includeOneOf && (schema.anyOf || schema.oneOf)) {
12
- if (schema.anyOf?.some((item) => isNullable(item)))
13
- return true;
14
- if (schema.oneOf?.some((item) => isNullable(item)))
15
- return true;
16
- }
17
- return false;
11
+ const combined = schema.anyOf ?? schema.oneOf ?? schema.allOf;
12
+ if (combined && combined.some(isNullable))
13
+ return true;
14
+ return schema.type === 'null';
18
15
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fumadocs-openapi",
3
- "version": "8.1.12",
3
+ "version": "9.0.1",
4
4
  "description": "Generate MDX docs for your OpenAPI spec",
5
5
  "keywords": [
6
6
  "NextJs",
@@ -46,10 +46,10 @@
46
46
  ],
47
47
  "dependencies": {
48
48
  "@fumari/json-schema-to-typescript": "^1.1.3",
49
- "@radix-ui/react-dialog": "^1.1.13",
50
- "@radix-ui/react-select": "^2.2.4",
51
- "@radix-ui/react-slot": "^1.2.2",
52
- "@scalar/openapi-parser": "0.10.17",
49
+ "@radix-ui/react-dialog": "^1.1.14",
50
+ "@radix-ui/react-select": "^2.2.5",
51
+ "@radix-ui/react-slot": "^1.2.3",
52
+ "@scalar/openapi-parser": "0.11.1",
53
53
  "ajv": "^8.17.1",
54
54
  "class-variance-authority": "^0.7.1",
55
55
  "github-slugger": "^2.0.0",
@@ -63,22 +63,22 @@
63
63
  "shiki": "^3.4.2",
64
64
  "tinyglobby": "^0.2.13",
65
65
  "xml-js": "^1.6.11",
66
- "fumadocs-core": "15.3.4",
67
- "fumadocs-ui": "15.3.4"
66
+ "fumadocs-core": "15.4.0",
67
+ "fumadocs-ui": "15.4.0"
68
68
  },
69
69
  "devDependencies": {
70
- "@scalar/api-client-react": "^1.2.34",
70
+ "@scalar/api-client-react": "^1.3.3",
71
71
  "@types/js-yaml": "^4.0.9",
72
- "@types/node": "22.15.19",
72
+ "@types/node": "22.15.21",
73
73
  "@types/openapi-sampler": "^1.0.3",
74
- "@types/react": "^19.1.4",
74
+ "@types/react": "^19.1.5",
75
75
  "json-schema-typed": "^8.0.1",
76
76
  "next": "15.3.2",
77
77
  "openapi-types": "^12.1.3",
78
78
  "tailwindcss": "^4.1.7",
79
79
  "tsc-alias": "^1.8.16",
80
- "eslint-config-custom": "0.0.0",
81
- "tsconfig": "0.0.0"
80
+ "tsconfig": "0.0.0",
81
+ "eslint-config-custom": "0.0.0"
82
82
  },
83
83
  "peerDependencies": {
84
84
  "@scalar/api-client-react": "*",