feat: enhance API documentation and integrate OpenAPI features

- Added new OpenAPI components and updated the documentation structure with new MDX files for various API references.
- Introduced a script to fix OpenAPI schema issues, ensuring proper response schemas and security definitions.
- Updated package dependencies to include fumadocs-openapi for improved API documentation generation.
- Enhanced global CSS to incorporate new styles from fumadocs-openapi.
- Modified the pnpm-lock.yaml to reflect new package versions and dependencies.
This commit is contained in:
Mauricio Siu
2025-12-07 05:53:15 -06:00
parent f9bf220bb1
commit 55b254da6d
50 changed files with 2705 additions and 419 deletions

View File

@@ -1,6 +1,7 @@
@import 'tailwindcss';
@import 'fumadocs-ui/css/solar.css';
@import 'fumadocs-ui/css/preset.css';
@import 'fumadocs-openapi/css/preset.css';
@import "tw-animate-css";
@custom-variant dark (&:is(.dark *));

View File

@@ -3,5 +3,5 @@
"description": "API Documentation",
"icon": "Code",
"root": true,
"pages": ["---Get Started---", "index", "---API---", "...", "---Reference---"]
"pages": ["---Get Started---", "index", "---Reference---", "..."]
}

View File

@@ -0,0 +1,18 @@
import { generateFiles } from "fumadocs-openapi";
try {
void generateFiles({
input: ["./public/openapi.json"],
output: "./content/docs/api/generated",
per: "tag",
name: (tag, name) => {
console.log(tag, name);
return `reference-${name}`;
},
});
console.log("Done");
} catch (error) {
console.error(error);
}
// united.com/customer-care

View File

@@ -1,6 +1,8 @@
import { docs } from 'fumadocs-mdx:collections/server';
import { type InferPageType, loader } from 'fumadocs-core/source';
import { lucideIconsPlugin } from 'fumadocs-core/source/lucide-icons';
import { createOpenAPI } from 'fumadocs-openapi/server';
import { createAPIPage } from 'fumadocs-openapi/ui';
// See https://fumadocs.dev/docs/headless/source-api for more info
export const source = loader({
@@ -9,6 +11,15 @@ export const source = loader({
plugins: [lucideIconsPlugin()],
});
export const openapi = createOpenAPI({
input: ['./public/openapi.json'],
});
export const APIPage = createAPIPage(openapi, {
// options
});
export function getPageImage(page: InferPageType<typeof source>) {
const segments = [...page.slugs, 'image.png'];

View File

@@ -2,12 +2,14 @@ import defaultMdxComponents from 'fumadocs-ui/mdx';
import type { MDXComponents } from 'mdx/types';
import { ImageZoom } from 'fumadocs-ui/components/image-zoom';
import { Callout } from 'fumadocs-ui/components/callout';
import { APIPage } from '@/lib/source';
export function getMDXComponents(components?: MDXComponents): MDXComponents {
return {
...defaultMdxComponents,
ImageZoom,
Callout,
APIPage,
...components,
p: ({ children }) => (
<p className="text-[#3E4342] dark:text-muted-foreground">

View File

@@ -5,6 +5,9 @@ const withMDX = createMDX();
/** @type {import('next').NextConfig} */
const config = {
reactStrictMode: true,
experimental: {
serverExternalPackages: ['shiki', 'fumadocs-openapi'],
},
};
export default withMDX(config);

View File

@@ -7,7 +7,9 @@
"dev": "next dev",
"start": "next start",
"types:check": "fumadocs-mdx && tsc --noEmit",
"postinstall": "fumadocs-mdx"
"postinstall": "fumadocs-mdx",
"fix-openapi": "node scripts/fix-openapi.mjs",
"build:docs": "npm run fix-openapi && node generate-docs.mjs"
},
"dependencies": {
"@radix-ui/react-dropdown-menu": "^2.1.16",
@@ -15,11 +17,13 @@
"clsx": "^2.1.1",
"fumadocs-core": "16.2.3",
"fumadocs-mdx": "14.1.0",
"fumadocs-openapi": "10.1.1",
"fumadocs-ui": "16.2.3",
"lucide-react": "^0.552.0",
"next": "16.0.1",
"react": "^19.2.0",
"react-dom": "^19.2.0",
"shiki": "1.22.2",
"tailwind-merge": "^2.5.4"
},
"devDependencies": {

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,65 @@
import { readFileSync, writeFileSync } from 'fs';
import { join } from 'path';
const openapiPath = join(process.cwd(), 'public', 'openapi.json');
console.log('Fixing OpenAPI schema...');
try {
const openapi = JSON.parse(readFileSync(openapiPath, 'utf8'));
let fixed = 0;
let securityFixed = false;
// Fix missing Authorization security scheme
if (!openapi.components) {
openapi.components = {};
}
if (!openapi.components.securitySchemes) {
openapi.components.securitySchemes = {};
}
if (!openapi.components.securitySchemes.Authorization) {
openapi.components.securitySchemes.Authorization = {
type: 'apiKey',
in: 'header',
name: 'Authorization',
description: 'API key authentication using Authorization header'
};
securityFixed = true;
}
// Fix empty response schemas
for (const [path, pathItem] of Object.entries(openapi.paths || {})) {
for (const [method, operation] of Object.entries(pathItem)) {
if (operation.responses) {
for (const [status, response] of Object.entries(operation.responses)) {
if (response.content && response.content['application/json']) {
const content = response.content['application/json'];
// Check if schema is completely empty or missing
if (Object.keys(content).length === 0 || !content.schema) {
response.content['application/json'] = {
schema: {
type: 'object',
description: 'Successful response'
}
};
fixed++;
}
}
}
}
}
}
if (fixed > 0 || securityFixed) {
writeFileSync(openapiPath, JSON.stringify(openapi, null, 2));
if (fixed > 0) console.log(`✓ Fixed ${fixed} empty response schemas`);
if (securityFixed) console.log(`✓ Added missing Authorization security scheme`);
} else {
console.log('✓ No fixes needed');
}
} catch (error) {
console.error('Error fixing OpenAPI schema:', error.message);
process.exit(1);
}

322
pnpm-lock.yaml generated
View File

@@ -106,6 +106,9 @@ importers:
fumadocs-mdx:
specifier: 14.1.0
version: 14.1.0(fumadocs-core@16.2.3(@types/react@18.3.5)(lucide-react@0.552.0(react@19.2.1))(next@16.0.1(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(zod@4.1.13))(next@16.0.1(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(react@19.2.1)
fumadocs-openapi:
specifier: 10.1.1
version: 10.1.1(@types/react-dom@18.3.0)(@types/react@18.3.5)(fumadocs-core@16.2.3(@types/react@18.3.5)(lucide-react@0.552.0(react@19.2.1))(next@16.0.1(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(zod@4.1.13))(fumadocs-ui@16.2.3(@types/react-dom@18.3.0)(@types/react@18.3.5)(lucide-react@0.552.0(react@19.2.1))(next@16.0.1(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(tailwindcss@4.1.17)(zod@4.1.13))(prettier@3.3.3)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
fumadocs-ui:
specifier: 16.2.3
version: 16.2.3(@types/react-dom@18.3.0)(@types/react@18.3.5)(lucide-react@0.552.0(react@19.2.1))(next@16.0.1(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(tailwindcss@4.1.17)(zod@4.1.13)
@@ -121,6 +124,9 @@ importers:
react-dom:
specifier: ^19.2.0
version: 19.2.1(react@19.2.1)
shiki:
specifier: 1.22.2
version: 1.22.2
tailwind-merge:
specifier: ^2.5.4
version: 2.5.4
@@ -1074,6 +1080,18 @@ packages:
resolution: {integrity: sha512-vVnuwLqW8WJsg09EanNHnXnzsjYYsZE7JlD4M1sLvDnWGjvYJKNU6VpRqDxOiDChUszDZFKhxQSNYGShF0bKJg==}
engines: {node: '>=18.0.0'}
'@fumari/json-schema-to-typescript@2.0.0':
resolution: {integrity: sha512-X0Wm3QJLj1Rtb1nY2exM6QwMXb9LGyIKLf35+n6xyltDDBLMECOC4R/zPaw3RwgFVmvRLSmLCd+ht4sKabgmNw==}
engines: {node: '>=18.0.0'}
peerDependencies:
'@apidevtools/json-schema-ref-parser': 14.x.x
prettier: 3.x.x
peerDependenciesMeta:
'@apidevtools/json-schema-ref-parser':
optional: true
prettier:
optional: true
'@headlessui/react@2.2.0':
resolution: {integrity: sha512-RzCEg+LXsuI7mHiSomsu/gBJSjpupm6A1qIZ5sWjd7JhARNlMiSA4kKfJpCKwU9tE+zMRterhhrP74PvfJrpXQ==}
engines: {node: '>=10'}
@@ -2107,6 +2125,19 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/react-select@2.2.6':
resolution: {integrity: sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==}
peerDependencies:
'@types/react': 18.3.5
'@types/react-dom': 18.3.0
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta:
'@types/react':
optional: true
'@types/react-dom':
optional: true
'@radix-ui/react-slot@1.1.0':
resolution: {integrity: sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==}
peerDependencies:
@@ -2387,6 +2418,34 @@ packages:
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
'@scalar/helpers@0.1.2':
resolution: {integrity: sha512-eveyTl7vy94keJtT4KsvpYmTG/Z9naSzagygkQUqH8c683mWVBBHyvEsa7aHZSoHeWzaIUt8B0jOU+FtNB9Etw==}
engines: {node: '>=20'}
'@scalar/helpers@0.1.3':
resolution: {integrity: sha512-ehIYd2xcOm3QCczn63kAl8CcVTnFLfQIx7dmpZV4b4G+hPWfW62rxvXV6yZ4TkUdWDl+kddjNoX4aWBwqwgBRQ==}
engines: {node: '>=20'}
'@scalar/json-magic@0.8.2':
resolution: {integrity: sha512-3YnpGYvs9Rx+eaITMTbJB+BrGBUOzpLQeu4ZesetwqbEEf8UXWxZ/Li0+ZSRlRYzlcfmixStjn1NPc4edBcrGA==}
engines: {node: '>=20'}
'@scalar/json-magic@0.8.3':
resolution: {integrity: sha512-YS0s8DuqRnwkvtTVmYd8LwN70Xy5vEtOioooS2FgxAXtwTvWjPS+eu5bLsiXXLmbgU+2gMw6Fh5zKdb8SHsbGw==}
engines: {node: '>=20'}
'@scalar/openapi-parser@0.23.3':
resolution: {integrity: sha512-6QhcYJq+aZu+vuj5iy4pAK7t32jrm+/I3uK0D6M8XzCE4DCrS/2NM0syTLclFlfr8Z7yksNAA1S8Sf+U3g8jiQ==}
engines: {node: '>=20'}
'@scalar/openapi-types@0.5.1':
resolution: {integrity: sha512-8g7s9lPolyDFtijyh3Ob459tpezPuZbkXoFgJwBTHjPZ7ap+TvOJTvLk56CFwxVBVz2BxCzWJqxYyy3FUdeLoA==}
engines: {node: '>=20'}
'@scalar/openapi-upgrader@0.1.4':
resolution: {integrity: sha512-OKSjey1U99BTg1ZTiNL1xxOEOrP9U4aRTH7Pf6JFXpqFH8kGdhrDAIA0uogYYzNq65BaQwK+h31fSrIf/yCLCg==}
engines: {node: '>=20'}
'@shikijs/core@1.22.2':
resolution: {integrity: sha512-bvIQcd8BEeR1yFvOYv6HDiyta2FFVePbzeowf5pPS1avczrPK+cjmaxxh0nx5QzbON7+Sv0sQfQVciO7bN72sg==}
@@ -2639,6 +2698,22 @@ packages:
engines: {node: '>=0.4.0'}
hasBin: true
ajv-draft-04@1.0.0:
resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==}
peerDependencies:
ajv: ^8.5.0
peerDependenciesMeta:
ajv:
optional: true
ajv-formats@3.0.1:
resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==}
peerDependencies:
ajv: ^8.0.0
peerDependenciesMeta:
ajv:
optional: true
ajv@8.17.1:
resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
@@ -3151,6 +3226,10 @@ packages:
fast-uri@3.0.1:
resolution: {integrity: sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==}
fast-xml-parser@4.5.3:
resolution: {integrity: sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig==}
hasBin: true
fastq@1.17.1:
resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
@@ -3303,6 +3382,21 @@ packages:
vite:
optional: true
fumadocs-openapi@10.1.1:
resolution: {integrity: sha512-LKUh/pnTRANQDhZKCC4W6YakZeiJ1H4NmlIBkgySIWOaTYnZPdR3R1miEFcZHL1SxR0QRHujjSJrzTs6O0fUQA==}
peerDependencies:
'@scalar/api-client-react': '*'
'@types/react': 18.3.5
fumadocs-core: ^16.2.0
fumadocs-ui: ^16.2.0
react: ^19.2.0
react-dom: ^19.2.0
peerDependenciesMeta:
'@scalar/api-client-react':
optional: true
'@types/react':
optional: true
fumadocs-openapi@5.5.9:
resolution: {integrity: sha512-MDhdF0LogKPfyofbrBX175wi7dZoC+o87SMwalfoxwLo6uL1B9J+mX1maM5AIR31EL4KPOn9YuqUNAfBDtjmhg==}
peerDependencies:
@@ -3441,9 +3535,6 @@ packages:
hast-util-to-estree@3.1.3:
resolution: {integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==}
hast-util-to-html@9.0.3:
resolution: {integrity: sha512-M17uBDzMJ9RPCqLMO92gNNUDuBSq10a25SDBI08iCCxmorf4Yy6sYHK57n9WAbRAAaU+DuR4W6GN9K4DFZesYg==}
hast-util-to-html@9.0.5:
resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==}
@@ -3609,10 +3700,6 @@ packages:
resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
hasBin: true
js-yaml@4.1.0:
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
hasBin: true
js-yaml@4.1.1:
resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==}
hasBin: true
@@ -3640,10 +3727,18 @@ packages:
resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
engines: {'0': node >= 0.2.0}
jsonpointer@5.0.1:
resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==}
engines: {node: '>=0.10.0'}
kind-of@6.0.3:
resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
engines: {node: '>=0.10.0'}
leven@4.1.0:
resolution: {integrity: sha512-KZ9W9nWDT7rF7Dazg8xyLHGLrmpgq2nVNFUckhqdW3szVP6YhCpp/RAnpmVExA9JvrMynjwSLVrEj3AepHR6ew==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
lightningcss-android-arm64@1.30.2:
resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==}
engines: {node: '>= 12.0.0'}
@@ -4153,6 +4248,9 @@ packages:
openapi-sampler@1.5.1:
resolution: {integrity: sha512-tIWIrZUKNAsbqf3bd9U1oH6JEXo8LNYuDlXw26By67EygpjT+ArFnsxxyTMjFWRfbqo5ozkvgSQDK69Gd8CddA==}
openapi-sampler@1.6.2:
resolution: {integrity: sha512-NyKGiFKfSWAZr4srD/5WDhInOWDhfml32h/FKUqLpEwKJt0kG0LGUU0MdyNkKrVGuJnw6DuPWq/sHCwAMpiRxg==}
p-limit@4.0.0:
resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -4386,6 +4484,12 @@ packages:
peerDependencies:
react: ^16.8.0 || ^17 || ^18 || ^19
react-hook-form@7.68.0:
resolution: {integrity: sha512-oNN3fjrZ/Xo40SWlHf1yCjlMK417JxoSJVUXQjGdvdRCU07NTFei1i1f8ApUAts+IVh14e4EdakeLEA+BEAs/Q==}
engines: {node: '>=18.0.0'}
peerDependencies:
react: ^16.8.0 || ^17 || ^18 || ^19
react-markdown@10.0.0:
resolution: {integrity: sha512-4mTz7Sya/YQ1jYOrkwO73VcFdkFJ8L8I9ehCxdcV0XrClHyOJGKbBk5FR4OOOG+HnyKw5u+C/Aby9TwinCteYA==}
peerDependencies:
@@ -4620,6 +4724,9 @@ packages:
resolution: {integrity: sha512-0SbjchvDrDbeXeQgxWVtSWxww7qcFgk3DtSE2/blHOSlLsSHwIqO2fCrtVa/EudJ7Eqno8A33QNx56rUyGbLuw==}
engines: {node: '>=16'}
sax@1.4.3:
resolution: {integrity: sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==}
scheduler@0.23.2:
resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==}
@@ -4744,6 +4851,9 @@ packages:
resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
engines: {node: '>=12'}
strnum@1.1.2:
resolution: {integrity: sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==}
style-to-js@1.1.21:
resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==}
@@ -5016,6 +5126,10 @@ packages:
resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==}
engines: {node: '>=18'}
xml-js@1.6.11:
resolution: {integrity: sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==}
hasBin: true
y18n@5.0.8:
resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
engines: {node: '>=10'}
@@ -5028,6 +5142,11 @@ packages:
engines: {node: '>= 14'}
hasBin: true
yaml@2.8.0:
resolution: {integrity: sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==}
engines: {node: '>= 14.6'}
hasBin: true
yargs-parser@21.1.1:
resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
engines: {node: '>=12'}
@@ -5046,6 +5165,9 @@ packages:
zod@3.23.8:
resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==}
zod@4.1.11:
resolution: {integrity: sha512-WPsqwxITS2tzx1bzhIKsEs19ABD5vmCVa4xBo2tq/SrV4RNZtfws1EnCWQXM6yh8bD08a1idvkB5MZSBiZsjwg==}
zod@4.1.13:
resolution: {integrity: sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==}
@@ -5065,7 +5187,7 @@ snapshots:
dependencies:
'@jsdevtools/ono': 7.1.3
'@types/json-schema': 7.0.15
js-yaml: 4.1.0
js-yaml: 4.1.1
'@babel/code-frame@7.24.7':
dependencies:
@@ -5655,7 +5777,13 @@ snapshots:
'@fumari/json-schema-to-typescript@1.1.1':
dependencies:
'@apidevtools/json-schema-ref-parser': 11.7.2
js-yaml: 4.1.0
js-yaml: 4.1.1
prettier: 3.3.3
'@fumari/json-schema-to-typescript@2.0.0(prettier@3.3.3)':
dependencies:
js-yaml: 4.1.1
optionalDependencies:
prettier: 3.3.3
'@headlessui/react@2.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)':
@@ -6222,6 +6350,12 @@ snapshots:
optionalDependencies:
'@types/react': 18.3.5
'@radix-ui/react-compose-refs@1.1.2(@types/react@18.3.5)(react@18.3.1)':
dependencies:
react: 18.3.1
optionalDependencies:
'@types/react': 18.3.5
'@radix-ui/react-compose-refs@1.1.2(@types/react@18.3.5)(react@19.2.1)':
dependencies:
react: 19.2.1
@@ -6886,6 +7020,35 @@ snapshots:
'@types/react': 18.3.5
'@types/react-dom': 18.3.0
'@radix-ui/react-select@2.2.6(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)':
dependencies:
'@radix-ui/number': 1.1.1
'@radix-ui/primitive': 1.1.3
'@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
'@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.5)(react@19.2.1)
'@radix-ui/react-context': 1.1.2(@types/react@18.3.5)(react@19.2.1)
'@radix-ui/react-direction': 1.1.1(@types/react@18.3.5)(react@19.2.1)
'@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
'@radix-ui/react-focus-guards': 1.1.3(@types/react@18.3.5)(react@19.2.1)
'@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
'@radix-ui/react-id': 1.1.1(@types/react@18.3.5)(react@19.2.1)
'@radix-ui/react-popper': 1.2.8(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
'@radix-ui/react-portal': 1.1.9(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
'@radix-ui/react-slot': 1.2.3(@types/react@18.3.5)(react@19.2.1)
'@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.5)(react@19.2.1)
'@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.5)(react@19.2.1)
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.5)(react@19.2.1)
'@radix-ui/react-use-previous': 1.1.1(@types/react@18.3.5)(react@19.2.1)
'@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
aria-hidden: 1.2.4
react: 19.2.1
react-dom: 19.2.1(react@19.2.1)
react-remove-scroll: 2.7.2(@types/react@18.3.5)(react@19.2.1)
optionalDependencies:
'@types/react': 18.3.5
'@types/react-dom': 18.3.0
'@radix-ui/react-slot@1.1.0(@types/react@18.3.5)(react@18.2.0)':
dependencies:
'@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.5)(react@18.2.0)
@@ -6907,6 +7070,13 @@ snapshots:
optionalDependencies:
'@types/react': 18.3.5
'@radix-ui/react-slot@1.2.4(@types/react@18.3.5)(react@18.3.1)':
dependencies:
'@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.5)(react@18.3.1)
react: 18.3.1
optionalDependencies:
'@types/react': 18.3.5
'@radix-ui/react-slot@1.2.4(@types/react@18.3.5)(react@19.2.1)':
dependencies:
'@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.5)(react@19.2.1)
@@ -7217,6 +7387,40 @@ snapshots:
dependencies:
react: 18.2.0
'@scalar/helpers@0.1.2': {}
'@scalar/helpers@0.1.3': {}
'@scalar/json-magic@0.8.2':
dependencies:
'@scalar/helpers': 0.1.2
yaml: 2.8.0
'@scalar/json-magic@0.8.3':
dependencies:
'@scalar/helpers': 0.1.3
yaml: 2.8.0
'@scalar/openapi-parser@0.23.3':
dependencies:
'@scalar/json-magic': 0.8.2
'@scalar/openapi-types': 0.5.1
'@scalar/openapi-upgrader': 0.1.4
ajv: 8.17.1
ajv-draft-04: 1.0.0(ajv@8.17.1)
ajv-formats: 3.0.1(ajv@8.17.1)
jsonpointer: 5.0.1
leven: 4.1.0
yaml: 2.8.0
'@scalar/openapi-types@0.5.1':
dependencies:
zod: 4.1.11
'@scalar/openapi-upgrader@0.1.4':
dependencies:
'@scalar/openapi-types': 0.5.1
'@shikijs/core@1.22.2':
dependencies:
'@shikijs/engine-javascript': 1.22.2
@@ -7224,7 +7428,7 @@ snapshots:
'@shikijs/types': 1.22.2
'@shikijs/vscode-textmate': 9.3.0
'@types/hast': 3.0.4
hast-util-to-html: 9.0.3
hast-util-to-html: 9.0.5
'@shikijs/core@3.19.0':
dependencies:
@@ -7491,6 +7695,14 @@ snapshots:
acorn@8.12.1: {}
ajv-draft-04@1.0.0(ajv@8.17.1):
optionalDependencies:
ajv: 8.17.1
ajv-formats@3.0.1(ajv@8.17.1):
optionalDependencies:
ajv: 8.17.1
ajv@8.17.1:
dependencies:
fast-deep-equal: 3.1.3
@@ -7756,7 +7968,7 @@ snapshots:
dependencies:
env-paths: 2.2.1
import-fresh: 3.3.0
js-yaml: 4.1.0
js-yaml: 4.1.1
parse-json: 5.2.0
optionalDependencies:
typescript: 5.9.3
@@ -8051,6 +8263,10 @@ snapshots:
fast-uri@3.0.1: {}
fast-xml-parser@4.5.3:
dependencies:
strnum: 1.1.2
fastq@1.17.1:
dependencies:
reusify: 1.0.4
@@ -8196,26 +8412,58 @@ snapshots:
transitivePeerDependencies:
- supports-color
fumadocs-openapi@10.1.1(@types/react-dom@18.3.0)(@types/react@18.3.5)(fumadocs-core@16.2.3(@types/react@18.3.5)(lucide-react@0.552.0(react@19.2.1))(next@16.0.1(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(zod@4.1.13))(fumadocs-ui@16.2.3(@types/react-dom@18.3.0)(@types/react@18.3.5)(lucide-react@0.552.0(react@19.2.1))(next@16.0.1(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(tailwindcss@4.1.17)(zod@4.1.13))(prettier@3.3.3)(react-dom@19.2.1(react@19.2.1))(react@19.2.1):
dependencies:
'@fumari/json-schema-to-typescript': 2.0.0(prettier@3.3.3)
'@radix-ui/react-accordion': 1.2.12(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
'@radix-ui/react-dialog': 1.1.15(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
'@radix-ui/react-select': 2.2.6(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
'@radix-ui/react-slot': 1.2.4(@types/react@18.3.5)(react@19.2.1)
'@scalar/json-magic': 0.8.3
'@scalar/openapi-parser': 0.23.3
ajv: 8.17.1
class-variance-authority: 0.7.1
fumadocs-core: 16.2.3(@types/react@18.3.5)(lucide-react@0.552.0(react@19.2.1))(next@16.0.1(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(zod@4.1.13)
fumadocs-ui: 16.2.3(@types/react-dom@18.3.0)(@types/react@18.3.5)(lucide-react@0.552.0(react@19.2.1))(next@16.0.1(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(tailwindcss@4.1.17)(zod@4.1.13)
github-slugger: 2.0.0
hast-util-to-jsx-runtime: 2.3.6
js-yaml: 4.1.1
next-themes: 0.4.6(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
openapi-sampler: 1.6.2
react: 19.2.1
react-dom: 19.2.1(react@19.2.1)
react-hook-form: 7.68.0(react@19.2.1)
remark: 15.0.1
remark-rehype: 11.1.2
xml-js: 1.6.11
optionalDependencies:
'@types/react': 18.3.5
transitivePeerDependencies:
- '@apidevtools/json-schema-ref-parser'
- '@types/react-dom'
- prettier
- supports-color
fumadocs-openapi@5.5.9(@types/react-dom@18.3.0)(@types/react@18.3.5)(next@16.0.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tailwindcss@3.4.14):
dependencies:
'@apidevtools/json-schema-ref-parser': 11.7.2
'@fumari/json-schema-to-typescript': 1.1.1
'@radix-ui/react-select': 2.1.2(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@radix-ui/react-slot': 1.1.0(@types/react@18.3.5)(react@18.3.1)
'@radix-ui/react-slot': 1.2.4(@types/react@18.3.5)(react@18.3.1)
class-variance-authority: 0.7.1
fast-glob: 3.3.2
fumadocs-core: 14.3.1(@types/react@18.3.5)(next@16.0.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
fumadocs-ui: 14.3.1(@types/react-dom@18.3.0)(@types/react@18.3.5)(next@16.0.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tailwindcss@3.4.14)
github-slugger: 2.0.0
hast-util-to-jsx-runtime: 2.3.2
js-yaml: 4.1.0
hast-util-to-jsx-runtime: 2.3.5
js-yaml: 4.1.1
next: 16.0.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
openapi-sampler: 1.5.1
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
react-hook-form: 7.53.2(react@18.3.1)
remark: 15.0.1
remark-rehype: 11.1.1
remark-rehype: 11.1.2
shiki: 1.22.2
transitivePeerDependencies:
- '@oramacloud/client'
@@ -8454,20 +8702,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
hast-util-to-html@9.0.3:
dependencies:
'@types/hast': 3.0.4
'@types/unist': 3.0.2
ccount: 2.0.1
comma-separated-tokens: 2.0.3
hast-util-whitespace: 3.0.0
html-void-elements: 3.0.0
mdast-util-to-hast: 13.2.0
property-information: 6.5.0
space-separated-tokens: 2.0.2
stringify-entities: 4.0.4
zwitch: 2.0.4
hast-util-to-html@9.0.5:
dependencies:
'@types/hast': 3.0.4
@@ -8673,10 +8907,6 @@ snapshots:
argparse: 1.0.10
esprima: 4.0.1
js-yaml@4.1.0:
dependencies:
argparse: 2.0.1
js-yaml@4.1.1:
dependencies:
argparse: 2.0.1
@@ -8695,8 +8925,12 @@ snapshots:
jsonparse@1.3.1: {}
jsonpointer@5.0.1: {}
kind-of@6.0.3: {}
leven@4.1.0: {}
lightningcss-android-arm64@1.30.2:
optional: true
@@ -9470,6 +9704,12 @@ snapshots:
'@types/json-schema': 7.0.15
json-pointer: 0.6.2
openapi-sampler@1.6.2:
dependencies:
'@types/json-schema': 7.0.15
fast-xml-parser: 4.5.3
json-pointer: 0.6.2
p-limit@4.0.0:
dependencies:
yocto-queue: 1.1.1
@@ -9666,6 +9906,10 @@ snapshots:
dependencies:
react: 18.3.1
react-hook-form@7.68.0(react@19.2.1):
dependencies:
react: 19.2.1
react-markdown@10.0.0(@types/react@18.3.5)(react@18.2.0):
dependencies:
'@types/hast': 3.0.4
@@ -9988,6 +10232,8 @@ snapshots:
postcss-value-parser: 4.2.0
yoga-wasm-web: 0.3.3
sax@1.4.3: {}
scheduler@0.23.2:
dependencies:
loose-envify: 1.4.0
@@ -10161,6 +10407,8 @@ snapshots:
strip-final-newline@3.0.0: {}
strnum@1.1.2: {}
style-to-js@1.1.21:
dependencies:
style-to-object: 1.0.14
@@ -10495,12 +10743,18 @@ snapshots:
string-width: 7.2.0
strip-ansi: 7.1.0
xml-js@1.6.11:
dependencies:
sax: 1.4.3
y18n@5.0.8: {}
yallist@3.1.1: {}
yaml@2.4.5: {}
yaml@2.8.0: {}
yargs-parser@21.1.1: {}
yargs@17.7.2:
@@ -10519,6 +10773,8 @@ snapshots:
zod@3.23.8: {}
zod@4.1.11: {}
zod@4.1.13: {}
zwitch@2.0.4: {}