fumadocs-openapi 6.0.1 → 6.0.3

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 (155) hide show
  1. package/dist/build-routes.d.ts +15 -0
  2. package/dist/build-routes.d.ts.map +1 -0
  3. package/dist/build-routes.js +38 -0
  4. package/dist/generate-file.d.ts +38 -0
  5. package/dist/generate-file.d.ts.map +1 -0
  6. package/dist/generate-file.js +118 -0
  7. package/dist/generate.d.ts +48 -0
  8. package/dist/generate.d.ts.map +1 -0
  9. package/dist/generate.js +129 -0
  10. package/dist/index.d.ts +4 -274
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +3 -389
  13. package/dist/render/codeblock.d.ts +9 -0
  14. package/dist/render/codeblock.d.ts.map +1 -0
  15. package/dist/render/codeblock.js +13 -0
  16. package/dist/render/heading.d.ts +4 -0
  17. package/dist/render/heading.d.ts.map +1 -0
  18. package/dist/render/heading.js +6 -0
  19. package/dist/render/markdown.d.ts +5 -0
  20. package/dist/render/markdown.d.ts.map +1 -0
  21. package/dist/render/markdown.js +25 -0
  22. package/dist/render/operation.d.ts +17 -0
  23. package/dist/render/operation.d.ts.map +1 -0
  24. package/dist/render/operation.js +230 -0
  25. package/dist/render/playground.d.ts +66 -0
  26. package/dist/render/playground.d.ts.map +1 -0
  27. package/dist/render/playground.js +181 -0
  28. package/dist/render/renderer.d.ts +76 -0
  29. package/dist/render/renderer.d.ts.map +1 -0
  30. package/dist/render/renderer.js +23 -0
  31. package/dist/render/schema.d.ts +29 -0
  32. package/dist/render/schema.d.ts.map +1 -0
  33. package/dist/render/schema.js +151 -0
  34. package/dist/requests/curl.d.ts +3 -0
  35. package/dist/requests/curl.d.ts.map +1 -0
  36. package/dist/requests/curl.js +33 -0
  37. package/dist/requests/go.d.ts +3 -0
  38. package/dist/requests/go.d.ts.map +1 -0
  39. package/dist/requests/go.js +54 -0
  40. package/dist/requests/javascript.d.ts +3 -0
  41. package/dist/requests/javascript.d.ts.map +1 -0
  42. package/dist/requests/javascript.js +49 -0
  43. package/dist/requests/python.d.ts +3 -0
  44. package/dist/requests/python.d.ts.map +1 -0
  45. package/dist/requests/python.js +45 -0
  46. package/dist/scalar/client.d.ts +6 -0
  47. package/dist/scalar/client.d.ts.map +1 -0
  48. package/dist/scalar/client.js +25 -0
  49. package/dist/scalar/index.d.ts +4 -173
  50. package/dist/scalar/index.d.ts.map +1 -0
  51. package/dist/scalar/index.js +4 -11
  52. package/dist/server/api-page.d.ts +33 -0
  53. package/dist/server/api-page.d.ts.map +1 -0
  54. package/dist/server/api-page.js +59 -0
  55. package/dist/server/create-method.d.ts +7 -0
  56. package/dist/server/create-method.d.ts.map +1 -0
  57. package/dist/server/create-method.js +12 -0
  58. package/dist/server/create.d.ts +16 -0
  59. package/dist/server/create.d.ts.map +1 -0
  60. package/dist/server/create.js +11 -0
  61. package/dist/server/index.d.ts +3 -221
  62. package/dist/server/index.d.ts.map +1 -0
  63. package/dist/server/index.js +2 -1493
  64. package/dist/server/proxy.d.ts +8 -0
  65. package/dist/server/proxy.d.ts.map +1 -0
  66. package/dist/server/proxy.js +53 -0
  67. package/dist/server/source-api.d.ts +8 -0
  68. package/dist/server/source-api.d.ts.map +1 -0
  69. package/dist/server/source-api.js +34 -0
  70. package/dist/types.d.ts +60 -0
  71. package/dist/types.d.ts.map +1 -0
  72. package/dist/types.js +1 -0
  73. package/dist/ui/client.d.ts +22 -0
  74. package/dist/ui/client.d.ts.map +1 -0
  75. package/dist/ui/client.js +10 -0
  76. package/dist/ui/components/input.d.ts +6 -0
  77. package/dist/ui/components/input.d.ts.map +1 -0
  78. package/dist/ui/components/input.js +10 -0
  79. package/dist/ui/components/method-label.d.ts +5 -0
  80. package/dist/ui/components/method-label.d.ts.map +1 -0
  81. package/dist/ui/components/method-label.js +33 -0
  82. package/dist/ui/components/select.d.ts +14 -0
  83. package/dist/ui/components/select.d.ts.map +1 -0
  84. package/dist/ui/components/select.js +24 -0
  85. package/dist/ui/components/variants.d.ts +6 -0
  86. package/dist/ui/components/variants.d.ts.map +1 -0
  87. package/dist/ui/components/variants.js +26 -0
  88. package/dist/ui/contexts/api.d.ts +28 -0
  89. package/dist/ui/contexts/api.d.ts.map +1 -0
  90. package/dist/ui/contexts/api.js +74 -0
  91. package/dist/ui/contexts/schema.d.ts +17 -0
  92. package/dist/ui/contexts/schema.d.ts.map +1 -0
  93. package/dist/ui/contexts/schema.js +8 -0
  94. package/dist/ui/index.d.ts +12 -302
  95. package/dist/ui/index.d.ts.map +1 -0
  96. package/dist/ui/index.js +18 -98
  97. package/dist/ui/playground/fetcher.d.ts +34 -0
  98. package/dist/ui/playground/fetcher.d.ts.map +1 -0
  99. package/dist/ui/{fetcher-CsHhplmD.js → playground/fetcher.js} +45 -44
  100. package/dist/ui/playground/get-default-values.d.ts +4 -0
  101. package/dist/ui/playground/get-default-values.d.ts.map +1 -0
  102. package/dist/ui/playground/get-default-values.js +24 -0
  103. package/dist/ui/playground/index.d.ts +44 -0
  104. package/dist/ui/playground/index.d.ts.map +1 -0
  105. package/dist/ui/playground/index.js +187 -0
  106. package/dist/ui/playground/inputs.d.ts +23 -0
  107. package/dist/ui/playground/inputs.d.ts.map +1 -0
  108. package/dist/ui/playground/inputs.js +172 -0
  109. package/dist/ui/playground/resolve.d.ts +6 -0
  110. package/dist/ui/playground/resolve.d.ts.map +1 -0
  111. package/dist/ui/playground/resolve.js +14 -0
  112. package/dist/ui/playground/status-info.d.ts +8 -0
  113. package/dist/ui/playground/status-info.d.ts.map +1 -0
  114. package/dist/ui/playground/status-info.js +40 -0
  115. package/dist/ui/server-select.d.ts +3 -0
  116. package/dist/ui/server-select.d.ts.map +1 -0
  117. package/dist/ui/server-select.js +27 -0
  118. package/dist/utils/combine-schema.d.ts +6 -0
  119. package/dist/utils/combine-schema.d.ts.map +1 -0
  120. package/dist/utils/combine-schema.js +46 -0
  121. package/dist/utils/generate-document.d.ts +20 -0
  122. package/dist/utils/generate-document.d.ts.map +1 -0
  123. package/dist/utils/generate-document.js +82 -0
  124. package/dist/utils/generate-sample.d.ts +33 -0
  125. package/dist/utils/generate-sample.d.ts.map +1 -0
  126. package/dist/utils/generate-sample.js +97 -0
  127. package/dist/utils/get-security.d.ts +8 -0
  128. package/dist/utils/get-security.d.ts.map +1 -0
  129. package/dist/utils/get-security.js +23 -0
  130. package/dist/utils/get-typescript-schema.d.ts +4 -0
  131. package/dist/utils/get-typescript-schema.d.ts.map +1 -0
  132. package/dist/utils/get-typescript-schema.js +18 -0
  133. package/dist/utils/id-to-title.d.ts +2 -0
  134. package/dist/utils/id-to-title.d.ts.map +1 -0
  135. package/dist/utils/id-to-title.js +17 -0
  136. package/dist/utils/input-to-string.d.ts +5 -0
  137. package/dist/utils/input-to-string.d.ts.map +1 -0
  138. package/dist/utils/input-to-string.js +21 -0
  139. package/dist/utils/process-document.d.ts +14 -0
  140. package/dist/utils/process-document.d.ts.map +1 -0
  141. package/dist/utils/process-document.js +32 -0
  142. package/dist/utils/schema.d.ts +9 -0
  143. package/dist/utils/schema.d.ts.map +1 -0
  144. package/dist/utils/schema.js +16 -0
  145. package/dist/utils/server-url.d.ts +2 -0
  146. package/dist/utils/server-url.d.ts.map +1 -0
  147. package/dist/utils/server-url.js +7 -0
  148. package/dist/utils/use-query.d.ts +6 -0
  149. package/dist/utils/use-query.d.ts.map +1 -0
  150. package/dist/utils/use-query.js +22 -0
  151. package/package.json +8 -8
  152. package/dist/scalar/client-client-BXAjVueF.js +0 -93
  153. package/dist/ui/client-client-CYO00OiB.js +0 -107
  154. package/dist/ui/index-client-BUeWwFWK.js +0 -1116
  155. package/dist/ui/server-select-client-Ct_HJ46K.js +0 -86
@@ -0,0 +1,59 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import Slugger from 'github-slugger';
3
+ import { Operation } from '../render/operation.js';
4
+ import { createMethod } from '../server/create-method.js';
5
+ import { createRenders } from '../render/renderer.js';
6
+ import { processDocument, } from '../utils/process-document.js';
7
+ import { getUrl } from '../utils/server-url.js';
8
+ export async function APIPage(props) {
9
+ const { operations, hasHead = true, webhooks, disableCache = process.env.NODE_ENV === 'development', } = props;
10
+ const processed = await processDocument(props.document, disableCache);
11
+ const ctx = await getContext(processed, props);
12
+ const { document } = processed;
13
+ return (_jsxs(ctx.renderer.Root, { baseUrl: ctx.baseUrl, servers: ctx.servers, children: [operations?.map((item) => {
14
+ const pathItem = document.paths?.[item.path];
15
+ if (!pathItem)
16
+ return null;
17
+ const operation = pathItem[item.method];
18
+ if (!operation)
19
+ return null;
20
+ const method = createMethod(item.method, pathItem, operation);
21
+ return (_jsx(Operation, { method: method, path: item.path, ctx: ctx, hasHead: hasHead }, `${item.path}:${item.method}`));
22
+ }), webhooks?.map((item) => {
23
+ const webhook = document.webhooks?.[item.name];
24
+ if (!webhook)
25
+ return;
26
+ const hook = webhook[item.method];
27
+ if (!hook)
28
+ return;
29
+ const method = createMethod(item.method, webhook, hook);
30
+ return (_jsx(Operation, { type: "webhook", method: method, ctx: {
31
+ ...ctx,
32
+ baseUrl: 'http://localhost:8080',
33
+ }, path: `/${item.name}`, hasHead: hasHead }, `${item.name}:${item.method}`));
34
+ })] }));
35
+ }
36
+ export async function getContext(schema, options = {}) {
37
+ const document = schema.document;
38
+ const servers = document.servers && document.servers.length > 0
39
+ ? document.servers
40
+ : [{ url: 'https://example.com' }];
41
+ const server = servers[0];
42
+ return {
43
+ schema,
44
+ proxyUrl: options.proxyUrl,
45
+ showResponseSchema: options.showResponseSchema,
46
+ renderer: {
47
+ ...createRenders(options.shikiOptions),
48
+ ...options.renderer,
49
+ },
50
+ shikiOptions: options.shikiOptions,
51
+ generateTypeScriptSchema: options.generateTypeScriptSchema,
52
+ generateCodeSamples: options.generateCodeSamples,
53
+ baseUrl: getUrl(server.url, server.variables
54
+ ? Object.fromEntries(Object.entries(server.variables).map(([k, v]) => [k, v.default]))
55
+ : {}),
56
+ servers,
57
+ slugger: new Slugger(),
58
+ };
59
+ }
@@ -0,0 +1,7 @@
1
+ import type { MethodInformation, OperationObject, PathItemObject } from '../types.js';
2
+ import type { NoReference } from '../utils/schema.js';
3
+ /**
4
+ * Summarize method endpoint information
5
+ */
6
+ export declare function createMethod(method: string, path: NoReference<PathItemObject>, operation: NoReference<OperationObject>): MethodInformation;
7
+ //# sourceMappingURL=create-method.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-method.d.ts","sourceRoot":"","sources":["../../src/server/create-method.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EACf,cAAc,EACf,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD;;GAEG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,WAAW,CAAC,cAAc,CAAC,EACjC,SAAS,EAAE,WAAW,CAAC,eAAe,CAAC,GACtC,iBAAiB,CAQnB"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Summarize method endpoint information
3
+ */
4
+ export function createMethod(method, path, operation) {
5
+ return {
6
+ description: path.description,
7
+ summary: path.summary,
8
+ ...operation,
9
+ parameters: [...(operation.parameters ?? []), ...(path.parameters ?? [])],
10
+ method: method.toUpperCase(),
11
+ };
12
+ }
@@ -0,0 +1,16 @@
1
+ import { type FC } from 'react';
2
+ import { type ApiPageProps } from '../server/api-page.js';
3
+ import type { DocumentInput } from '../utils/process-document.js';
4
+ import { createProxy } from '../server/proxy.js';
5
+ export interface OpenAPIOptions extends Omit<Partial<ApiPageProps>, 'document'> {
6
+ /**
7
+ * @deprecated Pass document to `APIPage` instead
8
+ */
9
+ documentOrPath?: DocumentInput;
10
+ }
11
+ export interface OpenAPIServer {
12
+ APIPage: FC<ApiPageProps>;
13
+ createProxy: typeof createProxy;
14
+ }
15
+ export declare function createOpenAPI(options?: OpenAPIOptions): OpenAPIServer;
16
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/server/create.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,WAAW,cACf,SAAQ,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC;IAC/C;;OAEG;IACH,cAAc,CAAC,EAAE,aAAa,CAAC;CAChC;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC;IAC1B,WAAW,EAAE,OAAO,WAAW,CAAC;CACjC;AAED,wBAAgB,aAAa,CAAC,OAAO,GAAE,cAAmB,GAAG,aAAa,CAOzE"}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { APIPage } from '../server/api-page.js';
3
+ import { createProxy } from '../server/proxy.js';
4
+ export function createOpenAPI(options = {}) {
5
+ return {
6
+ createProxy,
7
+ APIPage(props) {
8
+ return _jsx(APIPage, { ...options, ...props });
9
+ },
10
+ };
11
+ }
@@ -1,221 +1,3 @@
1
- import { ComponentType, ReactNode, FC } from 'react';
2
- import { OpenAPIV3_1, OpenAPIV3 } from 'openapi-types';
3
- import Slugger from 'github-slugger';
4
- import { CodeToHastOptionsCommon, CodeOptionsThemes, BuiltinTheme } from 'shiki';
5
- import { NextRequest } from 'next/server';
6
- import { BuildPageTreeOptions } from 'fumadocs-core/source';
7
-
8
- type NoReference<T> = T extends (infer I)[] ? NoReference<I>[] : T extends ReferenceObject ? Exclude<T, ReferenceObject> : T extends object ? {
9
- [K in keyof T]: NoReference<T[K]>;
10
- } : T;
11
- type ParsedSchema = OpenAPIV3_1.SchemaObject;
12
-
13
- interface ResponsesProps {
14
- items: string[];
15
- children: ReactNode;
16
- }
17
- interface ResponseProps {
18
- value: string;
19
- children: ReactNode;
20
- }
21
- interface APIInfoProps {
22
- method: string;
23
- route: string;
24
- head: ReactNode;
25
- children: ReactNode;
26
- }
27
- interface PropertyProps {
28
- name: string;
29
- type: string;
30
- required?: boolean;
31
- deprecated?: boolean;
32
- children?: ReactNode;
33
- }
34
- interface ObjectCollapsibleProps {
35
- name: string;
36
- children: ReactNode;
37
- }
38
- interface RequestProps {
39
- language: string;
40
- name: string;
41
- code: string;
42
- }
43
- interface ResponseTypeProps {
44
- lang: string;
45
- code: string;
46
- label: string;
47
- }
48
- interface RootProps {
49
- baseUrl?: string;
50
- servers: ServerObject[];
51
- children: ReactNode;
52
- }
53
- interface Renderer {
54
- Root: ComponentType<RootProps>;
55
- API: ComponentType<{
56
- children: ReactNode;
57
- }>;
58
- APIInfo: ComponentType<APIInfoProps>;
59
- APIExample: ComponentType<{
60
- children: ReactNode;
61
- }>;
62
- Responses: ComponentType<ResponsesProps>;
63
- Response: ComponentType<ResponseProps>;
64
- Requests: ComponentType<{
65
- items: string[];
66
- children: ReactNode;
67
- }>;
68
- Request: ComponentType<RequestProps>;
69
- ResponseTypes: ComponentType<{
70
- children: ReactNode;
71
- }>;
72
- ResponseType: ComponentType<ResponseTypeProps>;
73
- /**
74
- * Collapsible to show object schemas
75
- */
76
- ObjectCollapsible: ComponentType<ObjectCollapsibleProps>;
77
- Property: ComponentType<PropertyProps>;
78
- APIPlayground: ComponentType<{
79
- path: string;
80
- method: MethodInformation;
81
- ctx: RenderContext;
82
- }>;
83
- }
84
-
85
- /**
86
- * Sample info of endpoint
87
- */
88
- interface EndpointSample {
89
- /**
90
- * Request URL, including path and query parameters
91
- */
92
- url: string;
93
- method: string;
94
- body?: {
95
- schema: ParsedSchema;
96
- mediaType: string;
97
- sample: unknown;
98
- };
99
- responses: Record<string, ResponseSample>;
100
- parameters: ParameterSample[];
101
- }
102
- interface ResponseSample {
103
- mediaType: string;
104
- sample: unknown;
105
- schema: ParsedSchema;
106
- }
107
- interface ParameterSample {
108
- name: string;
109
- in: string;
110
- schema: ParsedSchema;
111
- sample: unknown;
112
- }
113
-
114
- interface CodeSample {
115
- lang: string;
116
- label: string;
117
- source: string | ((endpoint: EndpointSample) => string | undefined) | false;
118
- }
119
-
120
- type DocumentInput = string | OpenAPIV3_1.Document | OpenAPIV3.Document;
121
- type ProcessedDocument = {
122
- document: NoReference<Document>;
123
- dereferenceMap: DereferenceMap;
124
- downloaded: Document;
125
- };
126
-
127
- type Document = OpenAPIV3_1.Document;
128
- type OperationObject = OpenAPIV3_1.OperationObject;
129
- type ReferenceObject = OpenAPIV3_1.ReferenceObject;
130
- type ServerObject = NoReference<OpenAPIV3_1.ServerObject>;
131
- type MethodInformation = NoReference<OperationObject> & {
132
- method: string;
133
- };
134
- type Awaitable<T> = T | Promise<T>;
135
- /**
136
- * Dereferenced value and its original `$ref` value
137
- */
138
- type DereferenceMap = Map<unknown, string>;
139
- interface RenderContext {
140
- /**
141
- * The url of proxy to avoid CORS issues
142
- */
143
- proxyUrl?: string;
144
- renderer: Renderer;
145
- baseUrl: string;
146
- servers: ServerObject[];
147
- slugger: Slugger;
148
- /**
149
- * dereferenced schema
150
- */
151
- schema: ProcessedDocument;
152
- /**
153
- * Generate TypeScript definitions from response schema.
154
- *
155
- * Pass `false` to disable it.
156
- *
157
- * @param endpoint - the API endpoint
158
- * @param code - status code
159
- */
160
- generateTypeScriptSchema?: ((endpoint: EndpointSample, code: string) => Awaitable<string>) | false;
161
- /**
162
- * Generate code samples for endpoint.
163
- */
164
- generateCodeSamples?: (endpoint: EndpointSample) => Awaitable<CodeSample[]>;
165
- shikiOptions?: Omit<CodeToHastOptionsCommon, 'lang'> & CodeOptionsThemes<BuiltinTheme>;
166
- /**
167
- * Show full response schema instead of only example response & Typescript definitions
168
- */
169
- showResponseSchema?: boolean;
170
- }
171
-
172
- type ApiPageContextProps = Pick<Partial<RenderContext>, 'shikiOptions' | 'generateTypeScriptSchema' | 'generateCodeSamples' | 'proxyUrl' | 'showResponseSchema'>;
173
- interface ApiPageProps extends ApiPageContextProps {
174
- document: DocumentInput;
175
- hasHead: boolean;
176
- renderer?: Partial<Renderer>;
177
- /**
178
- * An array of operations
179
- */
180
- operations?: OperationItem[];
181
- webhooks?: WebhookItem[];
182
- /**
183
- * By default, it is disabled on dev mode
184
- */
185
- disableCache?: boolean;
186
- }
187
- interface WebhookItem {
188
- name: string;
189
- method: OpenAPIV3_1.HttpMethods;
190
- }
191
- interface OperationItem {
192
- path: string;
193
- method: OpenAPIV3_1.HttpMethods;
194
- }
195
-
196
- declare const keys: readonly ["GET", "POST", "PUT", "DELETE", "PATCH", "HEAD"];
197
- type Proxy = {
198
- [K in (typeof keys)[number]]: (req: NextRequest) => Promise<Response>;
199
- };
200
- declare function createProxy(allowedUrls?: string[]): Proxy;
201
-
202
- interface OpenAPIOptions extends Omit<Partial<ApiPageProps>, 'document'> {
203
- /**
204
- * @deprecated Pass document to `APIPage` instead
205
- */
206
- documentOrPath?: DocumentInput;
207
- }
208
- interface OpenAPIServer {
209
- APIPage: FC<ApiPageProps>;
210
- createProxy: typeof createProxy;
211
- }
212
- declare function createOpenAPI(options?: OpenAPIOptions): OpenAPIServer;
213
-
214
- /**
215
- * Source API Integration
216
- *
217
- * Add this to page tree builder options
218
- */
219
- declare const attachFile: BuildPageTreeOptions['attachFile'];
220
-
221
- export { type OpenAPIOptions, type OpenAPIServer, attachFile, createOpenAPI };
1
+ export * from './create.js';
2
+ export * from './source-api.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC"}