vocs 2.0.17 → 2.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -0
- package/dist/config.js.map +1 -1
- package/dist/globals.d.ts +16 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/internal/config.d.ts +28 -0
- package/dist/internal/config.d.ts.map +1 -1
- package/dist/internal/config.js +10 -2
- package/dist/internal/config.js.map +1 -1
- package/dist/internal/llms.d.ts +21 -2
- package/dist/internal/llms.d.ts.map +1 -1
- package/dist/internal/llms.js +41 -1
- package/dist/internal/llms.js.map +1 -1
- package/dist/internal/markdown-negotiation.d.ts +36 -0
- package/dist/internal/markdown-negotiation.d.ts.map +1 -0
- package/dist/internal/markdown-negotiation.js +81 -0
- package/dist/internal/markdown-negotiation.js.map +1 -0
- package/dist/internal/markdown.d.ts.map +1 -1
- package/dist/internal/markdown.js +5 -0
- package/dist/internal/markdown.js.map +1 -1
- package/dist/internal/openapi/anchors.d.ts +25 -0
- package/dist/internal/openapi/anchors.d.ts.map +1 -0
- package/dist/internal/openapi/anchors.js +37 -0
- package/dist/internal/openapi/anchors.js.map +1 -0
- package/dist/internal/openapi/app.d.ts +89 -0
- package/dist/internal/openapi/app.d.ts.map +1 -0
- package/dist/internal/openapi/app.js +62 -0
- package/dist/internal/openapi/app.js.map +1 -0
- package/dist/internal/openapi/index.d.ts +8 -0
- package/dist/internal/openapi/index.d.ts.map +1 -0
- package/dist/internal/openapi/index.js +5 -0
- package/dist/internal/openapi/index.js.map +1 -0
- package/dist/internal/openapi/markdown.d.ts +42 -0
- package/dist/internal/openapi/markdown.d.ts.map +1 -0
- package/dist/internal/openapi/markdown.js +235 -0
- package/dist/internal/openapi/markdown.js.map +1 -0
- package/dist/internal/openapi/openapi.d.ts +187 -0
- package/dist/internal/openapi/openapi.d.ts.map +1 -0
- package/dist/internal/openapi/openapi.js +44 -0
- package/dist/internal/openapi/openapi.js.map +1 -0
- package/dist/internal/openapi/openrpc.d.ts +90 -0
- package/dist/internal/openapi/openrpc.d.ts.map +1 -0
- package/dist/internal/openapi/openrpc.js +213 -0
- package/dist/internal/openapi/openrpc.js.map +1 -0
- package/dist/internal/openapi/parser.d.ts +181 -0
- package/dist/internal/openapi/parser.d.ts.map +1 -0
- package/dist/internal/openapi/parser.js +329 -0
- package/dist/internal/openapi/parser.js.map +1 -0
- package/dist/internal/openapi/registry.d.ts +36 -0
- package/dist/internal/openapi/registry.d.ts.map +1 -0
- package/dist/internal/openapi/registry.js +79 -0
- package/dist/internal/openapi/registry.js.map +1 -0
- package/dist/internal/openapi/sample.d.ts +115 -0
- package/dist/internal/openapi/sample.d.ts.map +1 -0
- package/dist/internal/openapi/sample.js +434 -0
- package/dist/internal/openapi/sample.js.map +1 -0
- package/dist/internal/openapi/search.d.ts +19 -0
- package/dist/internal/openapi/search.d.ts.map +1 -0
- package/dist/internal/openapi/search.js +98 -0
- package/dist/internal/openapi/search.js.map +1 -0
- package/dist/internal/openapi/sidebar.d.ts +30 -0
- package/dist/internal/openapi/sidebar.d.ts.map +1 -0
- package/dist/internal/openapi/sidebar.js +67 -0
- package/dist/internal/openapi/sidebar.js.map +1 -0
- package/dist/internal/openapi/union.d.ts +36 -0
- package/dist/internal/openapi/union.d.ts.map +1 -0
- package/dist/internal/openapi/union.js +69 -0
- package/dist/internal/openapi/union.js.map +1 -0
- package/dist/internal/search.d.ts.map +1 -1
- package/dist/internal/search.js +20 -0
- package/dist/internal/search.js.map +1 -1
- package/dist/internal/vite-plugins.d.ts +12 -0
- package/dist/internal/vite-plugins.d.ts.map +1 -1
- package/dist/internal/vite-plugins.js +102 -11
- package/dist/internal/vite-plugins.js.map +1 -1
- package/dist/react/Badge.d.ts +2 -3
- package/dist/react/Badge.d.ts.map +1 -1
- package/dist/react/Layout.client.d.ts.map +1 -1
- package/dist/react/Layout.client.js +2 -2
- package/dist/react/Layout.client.js.map +1 -1
- package/dist/react/OpenApi.d.ts +6 -0
- package/dist/react/OpenApi.d.ts.map +1 -0
- package/dist/react/OpenApi.js +6 -0
- package/dist/react/OpenApi.js.map +1 -0
- package/dist/react/internal/CodeToHtml.client.d.ts +53 -2
- package/dist/react/internal/CodeToHtml.client.d.ts.map +1 -1
- package/dist/react/internal/CodeToHtml.client.js +154 -21
- package/dist/react/internal/CodeToHtml.client.js.map +1 -1
- package/dist/react/internal/Sidebar.d.ts.map +1 -1
- package/dist/react/internal/Sidebar.js +99 -2
- package/dist/react/internal/Sidebar.js.map +1 -1
- package/dist/react/internal/openapi/CodeSample.client.d.ts +21 -0
- package/dist/react/internal/openapi/CodeSample.client.d.ts.map +1 -0
- package/dist/react/internal/openapi/CodeSample.client.js +134 -0
- package/dist/react/internal/openapi/CodeSample.client.js.map +1 -0
- package/dist/react/internal/openapi/CollapsibleChildren.client.d.ts +17 -0
- package/dist/react/internal/openapi/CollapsibleChildren.client.d.ts.map +1 -0
- package/dist/react/internal/openapi/CollapsibleChildren.client.js +18 -0
- package/dist/react/internal/openapi/CollapsibleChildren.client.js.map +1 -0
- package/dist/react/internal/openapi/Disclosure.client.d.ts +28 -0
- package/dist/react/internal/openapi/Disclosure.client.d.ts.map +1 -0
- package/dist/react/internal/openapi/Disclosure.client.js +38 -0
- package/dist/react/internal/openapi/Disclosure.client.js.map +1 -0
- package/dist/react/internal/openapi/Endpoints.d.ts +26 -0
- package/dist/react/internal/openapi/Endpoints.d.ts.map +1 -0
- package/dist/react/internal/openapi/Endpoints.js +33 -0
- package/dist/react/internal/openapi/Endpoints.js.map +1 -0
- package/dist/react/internal/openapi/EndpointsView.d.ts +24 -0
- package/dist/react/internal/openapi/EndpointsView.d.ts.map +1 -0
- package/dist/react/internal/openapi/EndpointsView.js +26 -0
- package/dist/react/internal/openapi/EndpointsView.js.map +1 -0
- package/dist/react/internal/openapi/EnumValues.client.d.ts +14 -0
- package/dist/react/internal/openapi/EnumValues.client.d.ts.map +1 -0
- package/dist/react/internal/openapi/EnumValues.client.js +20 -0
- package/dist/react/internal/openapi/EnumValues.client.js.map +1 -0
- package/dist/react/internal/openapi/HeadingAnchor.d.ts +15 -0
- package/dist/react/internal/openapi/HeadingAnchor.d.ts.map +1 -0
- package/dist/react/internal/openapi/HeadingAnchor.js +12 -0
- package/dist/react/internal/openapi/HeadingAnchor.js.map +1 -0
- package/dist/react/internal/openapi/OpenApiPage.d.ts +79 -0
- package/dist/react/internal/openapi/OpenApiPage.d.ts.map +1 -0
- package/dist/react/internal/openapi/OpenApiPage.js +72 -0
- package/dist/react/internal/openapi/OpenApiPage.js.map +1 -0
- package/dist/react/internal/openapi/Operation.d.ts +25 -0
- package/dist/react/internal/openapi/Operation.d.ts.map +1 -0
- package/dist/react/internal/openapi/Operation.js +101 -0
- package/dist/react/internal/openapi/Operation.js.map +1 -0
- package/dist/react/internal/openapi/Playground.client.d.ts +33 -0
- package/dist/react/internal/openapi/Playground.client.d.ts.map +1 -0
- package/dist/react/internal/openapi/Playground.client.js +170 -0
- package/dist/react/internal/openapi/Playground.client.js.map +1 -0
- package/dist/react/internal/openapi/PropertyExample.client.d.ts +17 -0
- package/dist/react/internal/openapi/PropertyExample.client.d.ts.map +1 -0
- package/dist/react/internal/openapi/PropertyExample.client.js +21 -0
- package/dist/react/internal/openapi/PropertyExample.client.js.map +1 -0
- package/dist/react/internal/openapi/Reference.d.ts +55 -0
- package/dist/react/internal/openapi/Reference.d.ts.map +1 -0
- package/dist/react/internal/openapi/Reference.js +42 -0
- package/dist/react/internal/openapi/Reference.js.map +1 -0
- package/dist/react/internal/openapi/Schema.d.ts +110 -0
- package/dist/react/internal/openapi/Schema.d.ts.map +1 -0
- package/dist/react/internal/openapi/Schema.js +239 -0
- package/dist/react/internal/openapi/Schema.js.map +1 -0
- package/dist/react/internal/openapi/SchemaUnion.client.d.ts +25 -0
- package/dist/react/internal/openapi/SchemaUnion.client.d.ts.map +1 -0
- package/dist/react/internal/openapi/SchemaUnion.client.js +48 -0
- package/dist/react/internal/openapi/SchemaUnion.client.js.map +1 -0
- package/dist/react/internal/openapi/anchor-navigation.client.d.ts +47 -0
- package/dist/react/internal/openapi/anchor-navigation.client.d.ts.map +1 -0
- package/dist/react/internal/openapi/anchor-navigation.client.js +120 -0
- package/dist/react/internal/openapi/anchor-navigation.client.js.map +1 -0
- package/dist/react/internal/openapi/auth.d.ts +28 -0
- package/dist/react/internal/openapi/auth.d.ts.map +1 -0
- package/dist/react/internal/openapi/auth.js +75 -0
- package/dist/react/internal/openapi/auth.js.map +1 -0
- package/dist/react/useLayout.d.ts +2 -0
- package/dist/react/useLayout.d.ts.map +1 -1
- package/dist/react/useLayout.js +2 -0
- package/dist/react/useLayout.js.map +1 -1
- package/dist/server/handlers.d.ts +1 -1
- package/dist/server/handlers.d.ts.map +1 -1
- package/dist/server/handlers.js +26 -5
- package/dist/server/handlers.js.map +1 -1
- package/dist/server/og-assets.d.ts +5 -0
- package/dist/server/og-assets.d.ts.map +1 -0
- package/dist/server/og-assets.js +11 -0
- package/dist/server/og-assets.js.map +1 -0
- package/dist/server/openapi/assets.d.ts +33 -0
- package/dist/server/openapi/assets.d.ts.map +1 -0
- package/dist/server/openapi/assets.generated.d.ts +9 -0
- package/dist/server/openapi/assets.generated.d.ts.map +1 -0
- package/dist/server/openapi/assets.generated.js +1091 -0
- package/dist/server/openapi/assets.generated.js.map +1 -0
- package/dist/server/openapi/assets.js +32 -0
- package/dist/server/openapi/assets.js.map +1 -0
- package/dist/server/openapi/handler.d.ts +103 -0
- package/dist/server/openapi/handler.d.ts.map +1 -0
- package/dist/server/openapi/handler.js +198 -0
- package/dist/server/openapi/handler.js.map +1 -0
- package/dist/server/openapi/handler.test.d.ts +2 -0
- package/dist/server/openapi/handler.test.d.ts.map +1 -0
- package/dist/server/openapi/handler.test.js +203 -0
- package/dist/server/openapi/handler.test.js.map +1 -0
- package/dist/server/openapi/html.d.ts +16 -0
- package/dist/server/openapi/html.d.ts.map +1 -0
- package/dist/server/openapi/html.js +75 -0
- package/dist/server/openapi/html.js.map +1 -0
- package/dist/server/openapi/pages.d.ts +33 -0
- package/dist/server/openapi/pages.d.ts.map +1 -0
- package/dist/server/openapi/pages.js +130 -0
- package/dist/server/openapi/pages.js.map +1 -0
- package/dist/server/openapi/pages.test.d.ts +2 -0
- package/dist/server/openapi/pages.test.d.ts.map +1 -0
- package/dist/server/openapi/pages.test.js +94 -0
- package/dist/server/openapi/pages.test.js.map +1 -0
- package/dist/server/openapi/state.d.ts +42 -0
- package/dist/server/openapi/state.d.ts.map +1 -0
- package/dist/server/openapi/state.js +101 -0
- package/dist/server/openapi/state.js.map +1 -0
- package/dist/styles/index.css +16 -0
- package/dist/styles/markdown.css +9 -7
- package/dist/styles/openapi-playground.css +80 -0
- package/dist/styles/openapi.css +660 -0
- package/dist/vite.d.ts.map +1 -1
- package/dist/vite.js +1 -0
- package/dist/vite.js.map +1 -1
- package/dist/waku/internal/middleware/md-router.d.ts +0 -4
- package/dist/waku/internal/middleware/md-router.d.ts.map +1 -1
- package/dist/waku/internal/middleware/md-router.js +3 -48
- package/dist/waku/internal/middleware/md-router.js.map +1 -1
- package/dist/waku/internal/patches/adapters/vercel-build-enhancer.js +1 -1
- package/dist/waku/internal/patches/adapters/vercel-build-enhancer.js.map +1 -1
- package/dist/waku/internal/patches/router.d.ts.map +1 -1
- package/dist/waku/internal/patches/router.js +114 -1
- package/dist/waku/internal/patches/router.js.map +1 -1
- package/package.json +5 -1
- package/src/config.ts +1 -0
- package/src/globals.d.ts +16 -0
- package/src/index.ts +1 -0
- package/src/internal/config.ts +40 -1
- package/src/internal/llms.ts +51 -1
- package/src/internal/markdown-negotiation.test.ts +42 -0
- package/src/internal/markdown-negotiation.ts +95 -0
- package/src/internal/markdown.ts +5 -0
- package/src/internal/openapi/anchors.ts +44 -0
- package/src/internal/openapi/app.ts +127 -0
- package/src/internal/openapi/index.ts +24 -0
- package/src/internal/openapi/markdown.test.ts +115 -0
- package/src/internal/openapi/markdown.ts +275 -0
- package/src/internal/openapi/openapi.ts +212 -0
- package/src/internal/openapi/openrpc.test.ts +239 -0
- package/src/internal/openapi/openrpc.ts +295 -0
- package/src/internal/openapi/parser.test.ts +203 -0
- package/src/internal/openapi/parser.ts +613 -0
- package/src/internal/openapi/registry.test.ts +89 -0
- package/src/internal/openapi/registry.ts +89 -0
- package/src/internal/openapi/sample.test.ts +283 -0
- package/src/internal/openapi/sample.ts +562 -0
- package/src/internal/openapi/search.test.ts +62 -0
- package/src/internal/openapi/search.ts +108 -0
- package/src/internal/openapi/sidebar.test.ts +131 -0
- package/src/internal/openapi/sidebar.ts +94 -0
- package/src/internal/openapi/union.test.ts +51 -0
- package/src/internal/openapi/union.ts +74 -0
- package/src/internal/search.ts +20 -0
- package/src/internal/test/virtual-config.stub.ts +14 -0
- package/src/internal/vite-plugins.ts +106 -11
- package/src/openapi-app/App.tsx +64 -0
- package/src/openapi-app/blocks.tsx +33 -0
- package/src/openapi-app/client.tsx +25 -0
- package/src/openapi-app/links.test.ts +84 -0
- package/src/openapi-app/links.ts +66 -0
- package/src/openapi-app/payload.ts +20 -0
- package/src/openapi-app/virtual/config.ts +7 -0
- package/src/openapi-app/virtual/group-icons.ts +2 -0
- package/src/openapi-app/virtual/langs.ts +6 -0
- package/src/openapi-app/virtual/openapi.ts +10 -0
- package/src/openapi-app/virtual/search-index.ts +21 -0
- package/src/openapi-app/virtual/slots.ts +4 -0
- package/src/openapi-app/virtual/user-styles.ts +2 -0
- package/src/openapi-app/waku.tsx +154 -0
- package/src/react/Badge.tsx +2 -3
- package/src/react/Layout.client.tsx +17 -4
- package/src/react/OpenApi.tsx +5 -0
- package/src/react/internal/CodeToHtml.client.tsx +283 -22
- package/src/react/internal/Sidebar.tsx +126 -22
- package/src/react/internal/openapi/CodeSample.client.tsx +294 -0
- package/src/react/internal/openapi/CollapsibleChildren.client.tsx +41 -0
- package/src/react/internal/openapi/Disclosure.client.tsx +67 -0
- package/src/react/internal/openapi/Endpoints.tsx +58 -0
- package/src/react/internal/openapi/EndpointsView.tsx +76 -0
- package/src/react/internal/openapi/EnumValues.client.tsx +49 -0
- package/src/react/internal/openapi/HeadingAnchor.tsx +28 -0
- package/src/react/internal/openapi/OpenApiPage.tsx +173 -0
- package/src/react/internal/openapi/Operation.test.tsx +101 -0
- package/src/react/internal/openapi/Operation.tsx +335 -0
- package/src/react/internal/openapi/Playground.client.tsx +234 -0
- package/src/react/internal/openapi/PropertyExample.client.tsx +55 -0
- package/src/react/internal/openapi/Reference.tsx +120 -0
- package/src/react/internal/openapi/Schema.tsx +467 -0
- package/src/react/internal/openapi/SchemaUnion.client.tsx +123 -0
- package/src/react/internal/openapi/anchor-navigation.client.ts +154 -0
- package/src/react/internal/openapi/auth.ts +69 -0
- package/src/react/useLayout.ts +4 -0
- package/src/server/handlers.ts +31 -6
- package/src/server/og-assets.ts +14 -0
- package/src/server/openapi/assets.generated.ts +1093 -0
- package/src/server/openapi/assets.ts +57 -0
- package/src/server/openapi/handler.test.ts +244 -0
- package/src/server/openapi/handler.ts +277 -0
- package/src/server/openapi/html.ts +84 -0
- package/src/server/openapi/pages.test.ts +111 -0
- package/src/server/openapi/pages.ts +153 -0
- package/src/server/openapi/state.ts +136 -0
- package/src/styles/index.css +16 -0
- package/src/styles/markdown.css +9 -7
- package/src/styles/openapi-playground.css +80 -0
- package/src/styles/openapi.css +660 -0
- package/src/vite.ts +1 -0
- package/src/waku/internal/middleware/md-router.ts +8 -52
- package/src/waku/internal/patches/adapters/vercel-build-enhancer.ts +1 -1
- package/src/waku/internal/patches/router.ts +131 -1
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { type HarRequest } from '@scalar/snippetz';
|
|
2
|
+
import { type SchemaPath } from './anchors.js';
|
|
3
|
+
import type { IrOperation } from './parser.js';
|
|
4
|
+
/**
|
|
5
|
+
* A generated request code sample for a single client (e.g. cURL, JS fetch).
|
|
6
|
+
*
|
|
7
|
+
* `lang` is a Shiki language id so the React layer can highlight it with the
|
|
8
|
+
* same highlighter used for the rest of the docs.
|
|
9
|
+
*/
|
|
10
|
+
export type CodeSample = {
|
|
11
|
+
/**
|
|
12
|
+
* Clickable spans within `display` that link to a parameter's documentation
|
|
13
|
+
* row. Each `range` is a `[start, end]` character range into `display`; `id`
|
|
14
|
+
* is the target element id. Used for path parameters, which sit inline within
|
|
15
|
+
* the URL line, so only their value (not the whole line) is clickable.
|
|
16
|
+
*/
|
|
17
|
+
anchors: {
|
|
18
|
+
range: [number, number];
|
|
19
|
+
id: string;
|
|
20
|
+
}[];
|
|
21
|
+
/** Generated source code, used verbatim for the copy-to-clipboard action. */
|
|
22
|
+
code: string;
|
|
23
|
+
/**
|
|
24
|
+
* Collapsed view shown by default when the request has more than 2 query
|
|
25
|
+
* parameters: the same snippet rendered with only the first 2, plus its own
|
|
26
|
+
* `anchors`/`lineAnchors`/`colorRanges` (line counts differ from the full
|
|
27
|
+
* `display`). Absent when there is nothing to collapse.
|
|
28
|
+
*/
|
|
29
|
+
collapsed?: {
|
|
30
|
+
display: string;
|
|
31
|
+
anchors: {
|
|
32
|
+
range: [number, number];
|
|
33
|
+
id: string;
|
|
34
|
+
}[];
|
|
35
|
+
colorRanges: {
|
|
36
|
+
range: [number, number];
|
|
37
|
+
kind: 'key' | 'value';
|
|
38
|
+
}[];
|
|
39
|
+
lineAnchors: (string | undefined)[];
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* `[start, end]` character ranges within `display` to recolor so the URL reads
|
|
43
|
+
* like the JSON response example: parameter names use the JSON-string color
|
|
44
|
+
* (`'key'`) and parameter values the JSON-number color (`'value'`). Covers
|
|
45
|
+
* query parameter names/values; path parameter values are colored via their
|
|
46
|
+
* {@link anchors} entry instead (those already wrap the value).
|
|
47
|
+
*/
|
|
48
|
+
colorRanges: {
|
|
49
|
+
range: [number, number];
|
|
50
|
+
kind: 'key' | 'value';
|
|
51
|
+
}[];
|
|
52
|
+
/**
|
|
53
|
+
* Display variant of {@link code} with each query parameter placed on its own
|
|
54
|
+
* line for readability. Formatted language-aware so it stays syntactically
|
|
55
|
+
* highlightable (TypeScript uses string concatenation; cURL breaks inside the
|
|
56
|
+
* quoted URL). This is what gets highlighted/rendered; `code` is copied.
|
|
57
|
+
*/
|
|
58
|
+
display: string;
|
|
59
|
+
/** Number of query parameters hidden in {@link collapsed}. */
|
|
60
|
+
hiddenQueryCount?: number;
|
|
61
|
+
/** Stable id, e.g. `shell/curl`. */
|
|
62
|
+
id: string;
|
|
63
|
+
/** Display label for the language tab, e.g. `cURL`. */
|
|
64
|
+
label: string;
|
|
65
|
+
/** Shiki language id for highlighting, e.g. `bash`, `js`. */
|
|
66
|
+
lang: string;
|
|
67
|
+
/**
|
|
68
|
+
* Per-line anchor ids (0-based) for `display`. Since each query parameter is
|
|
69
|
+
* placed on its own line, the whole line is made clickable — mirroring the
|
|
70
|
+
* response example lines. `undefined` for non-parameter lines.
|
|
71
|
+
*/
|
|
72
|
+
lineAnchors: (string | undefined)[];
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Builds request code samples for an operation using `@scalar/snippetz` — the
|
|
76
|
+
* same snippet generator Scalar uses. Returns one entry per supported client.
|
|
77
|
+
*/
|
|
78
|
+
export declare function codeSamples(operation: IrOperation, server?: string): CodeSample[];
|
|
79
|
+
/**
|
|
80
|
+
* Constructs a HAR-style request from an operation by filling path/query/header
|
|
81
|
+
* parameters and the request body with representative sample values. This is the
|
|
82
|
+
* input `snippetz` consumes to render code samples.
|
|
83
|
+
*/
|
|
84
|
+
export declare function harRequest(operation: IrOperation, server?: string): Partial<HarRequest>;
|
|
85
|
+
/**
|
|
86
|
+
* A response code sample (the example body for a single status code), ready to
|
|
87
|
+
* be highlighted as JSON in the right-hand panel.
|
|
88
|
+
*/
|
|
89
|
+
export type ResponseSample = {
|
|
90
|
+
status: string;
|
|
91
|
+
description?: string | undefined;
|
|
92
|
+
/**
|
|
93
|
+
* Id base for this response's schema rows, used to resolve per-line anchors
|
|
94
|
+
* (see {@link linePaths}) to the matching documentation row's element id.
|
|
95
|
+
*/
|
|
96
|
+
idBase: string;
|
|
97
|
+
lang: string;
|
|
98
|
+
code: string;
|
|
99
|
+
/**
|
|
100
|
+
* `[start, end]` character ranges (into `code`) of synthesized placeholder
|
|
101
|
+
* values — leaves with no authored `example`/`default`/`enum` whose value was
|
|
102
|
+
* derived solely from the declared type (e.g. `"string"`, `0`). The UI dims
|
|
103
|
+
* these so authored examples stand out.
|
|
104
|
+
*/
|
|
105
|
+
placeholders: [number, number][];
|
|
106
|
+
/**
|
|
107
|
+
* Per-line schema path: `linePaths[i]` is the path of the property whose value
|
|
108
|
+
* appears on line `i` of `code` (undefined for closing braces / blank lines).
|
|
109
|
+
* The UI turns these into clickable anchors to the left-hand schema rows.
|
|
110
|
+
*/
|
|
111
|
+
linePaths: (SchemaPath | undefined)[];
|
|
112
|
+
};
|
|
113
|
+
/** Builds JSON response samples for each response that has a usable schema/example. */
|
|
114
|
+
export declare function responseSamples(operation: IrOperation): ResponseSample[];
|
|
115
|
+
//# sourceMappingURL=sample.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sample.d.ts","sourceRoot":"","sources":["../../../src/internal/openapi/sample.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAY,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAA+B,KAAK,UAAU,EAAQ,MAAM,cAAc,CAAA;AACjF,OAAO,KAAK,EAAe,WAAW,EAAe,MAAM,aAAa,CAAA;AAGxE;;;;;GAKG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB;;;;;OAKG;IACH,OAAO,EAAE;QAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAClD,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAA;IACZ;;;;;OAKG;IACH,SAAS,CAAC,EAAE;QACV,OAAO,EAAE,MAAM,CAAA;QACf,OAAO,EAAE;YAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAAC,EAAE,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;QAClD,WAAW,EAAE;YAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAAC,IAAI,EAAE,KAAK,GAAG,OAAO,CAAA;SAAE,EAAE,CAAA;QACjE,WAAW,EAAE,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAA;KACpC,CAAA;IACD;;;;;;OAMG;IACH,WAAW,EAAE;QAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,IAAI,EAAE,KAAK,GAAG,OAAO,CAAA;KAAE,EAAE,CAAA;IACjE;;;;;OAKG;IACH,OAAO,EAAE,MAAM,CAAA;IACf,8DAA8D;IAC9D,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,oCAAoC;IACpC,EAAE,EAAE,MAAM,CAAA;IACV,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAA;IACb,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAA;IACZ;;;;OAIG;IACH,WAAW,EAAE,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAA;CACpC,CAAA;AAeD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,EAAE,CA0CjF;AA4HD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CA+BvF;AAED;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ;;;;;OAKG;IACH,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAA;IAChC;;;;OAIG;IACH,SAAS,EAAE,CAAC,UAAU,GAAG,SAAS,CAAC,EAAE,CAAA;CACtC,CAAA;AAED,uFAAuF;AACvF,wBAAgB,eAAe,CAAC,SAAS,EAAE,WAAW,GAAG,cAAc,EAAE,CA6BxE"}
|
|
@@ -0,0 +1,434 @@
|
|
|
1
|
+
import { snippetz } from '@scalar/snippetz';
|
|
2
|
+
import { mediaIdBase, responseIdBase, slug } from './anchors.js';
|
|
3
|
+
import { unionVariantSchemas, unionVariantSegment } from './union.js';
|
|
4
|
+
/** Query parameters above this count collapse behind a "Show more" toggle. */
|
|
5
|
+
const collapseQueryThreshold = 2;
|
|
6
|
+
/**
|
|
7
|
+
* The set of clients we expose in the code-sample selector. Kept intentionally
|
|
8
|
+
* small (cURL + JavaScript fetch) to start; the `snippetz` library supports many
|
|
9
|
+
* more targets if we widen this later.
|
|
10
|
+
*/
|
|
11
|
+
const clients = [
|
|
12
|
+
{ id: 'shell/curl', target: 'shell', client: 'curl', label: 'cURL', lang: 'bash' },
|
|
13
|
+
{ id: 'js/fetch', target: 'js', client: 'fetch', label: 'TypeScript', lang: 'ts' },
|
|
14
|
+
];
|
|
15
|
+
/**
|
|
16
|
+
* Builds request code samples for an operation using `@scalar/snippetz` — the
|
|
17
|
+
* same snippet generator Scalar uses. Returns one entry per supported client.
|
|
18
|
+
*/
|
|
19
|
+
export function codeSamples(operation, server) {
|
|
20
|
+
const request = harRequest(operation, server);
|
|
21
|
+
const generator = snippetz();
|
|
22
|
+
const queryCount = request.queryString?.length ?? 0;
|
|
23
|
+
// When there are many query params, also prepare a request limited to the
|
|
24
|
+
// first few so the sample can collapse the rest behind a "Show more" toggle.
|
|
25
|
+
const collapsedRequest = queryCount > collapseQueryThreshold
|
|
26
|
+
? { ...request, queryString: (request.queryString ?? []).slice(0, collapseQueryThreshold) }
|
|
27
|
+
: undefined;
|
|
28
|
+
const samples = [];
|
|
29
|
+
for (const client of clients) {
|
|
30
|
+
const code = generator.print(client.target, client.client, request);
|
|
31
|
+
if (!code)
|
|
32
|
+
continue;
|
|
33
|
+
const display = splitQueryLines(code, client.lang);
|
|
34
|
+
const sample = {
|
|
35
|
+
id: client.id,
|
|
36
|
+
label: client.label,
|
|
37
|
+
lang: client.lang,
|
|
38
|
+
code,
|
|
39
|
+
display,
|
|
40
|
+
anchors: pathAnchors(display, operation),
|
|
41
|
+
colorRanges: queryColorRanges(display, operation),
|
|
42
|
+
lineAnchors: queryLineAnchors(display, operation),
|
|
43
|
+
};
|
|
44
|
+
if (collapsedRequest) {
|
|
45
|
+
const collapsedCode = generator.print(client.target, client.client, collapsedRequest);
|
|
46
|
+
if (collapsedCode) {
|
|
47
|
+
const collapsedDisplay = splitQueryLines(collapsedCode, client.lang);
|
|
48
|
+
sample.collapsed = {
|
|
49
|
+
display: collapsedDisplay,
|
|
50
|
+
anchors: pathAnchors(collapsedDisplay, operation),
|
|
51
|
+
colorRanges: queryColorRanges(collapsedDisplay, operation),
|
|
52
|
+
lineAnchors: queryLineAnchors(collapsedDisplay, operation),
|
|
53
|
+
};
|
|
54
|
+
sample.hiddenQueryCount = queryCount - collapseQueryThreshold;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
samples.push(sample);
|
|
58
|
+
}
|
|
59
|
+
return samples;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Reformats a generated request snippet so each query parameter sits on its own
|
|
63
|
+
* line. The query string lives in the first single-quoted URL containing `?`.
|
|
64
|
+
*
|
|
65
|
+
* - TypeScript: splits the URL literal into `'base' + '?a=1' + '&b=2'`, which is
|
|
66
|
+
* valid JS (and identical at runtime), so the copied/displayed code both work.
|
|
67
|
+
* - cURL (and other shells): inserts literal newlines inside the quoted URL.
|
|
68
|
+
* This is for display only — the unformatted {@link CodeSample.code} is what
|
|
69
|
+
* the copy button uses, so the runnable request stays intact.
|
|
70
|
+
*/
|
|
71
|
+
function splitQueryLines(code, lang) {
|
|
72
|
+
const match = code.match(/'([^'\n]*\?[^'\n]*)'/);
|
|
73
|
+
if (!match)
|
|
74
|
+
return code;
|
|
75
|
+
const [token, url = ''] = match;
|
|
76
|
+
const questionIndex = url.indexOf('?');
|
|
77
|
+
const base = url.slice(0, questionIndex);
|
|
78
|
+
const params = url.slice(questionIndex + 1).split('&');
|
|
79
|
+
if (params.length === 0)
|
|
80
|
+
return code;
|
|
81
|
+
const replacement = lang === 'ts' || lang === 'js'
|
|
82
|
+
? [`'${base}'`, `'?${params[0]}'`, ...params.slice(1).map((p) => `'&${p}'`)].join(' +\n ')
|
|
83
|
+
: `'${base}\n ?${params[0]}${params
|
|
84
|
+
.slice(1)
|
|
85
|
+
.map((p) => `\n &${p}`)
|
|
86
|
+
.join('')}'`;
|
|
87
|
+
return code.replace(token, replacement);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Locates clickable path-parameter spans within a request sample. The
|
|
91
|
+
* substituted value is matched against `display` and mapped to its docs row id
|
|
92
|
+
* (`<operationId>-<slug(name)>`). Path params sit inline within the URL line, so
|
|
93
|
+
* only their value is anchored (query params get whole-line anchors instead).
|
|
94
|
+
*
|
|
95
|
+
* Matching is deliberately conservative: a value is only anchored when it
|
|
96
|
+
* appears exactly once, so an ambiguous value (e.g. a generic `0`/`string` that
|
|
97
|
+
* also appears in the body) silently degrades to non-clickable.
|
|
98
|
+
*/
|
|
99
|
+
function pathAnchors(display, operation) {
|
|
100
|
+
const anchors = [];
|
|
101
|
+
for (const parameter of operation.parameters) {
|
|
102
|
+
if (parameter.deprecated || parameter.in !== 'path')
|
|
103
|
+
continue;
|
|
104
|
+
const value = encodeURIComponent(String(sampleParameter(parameter)));
|
|
105
|
+
const index = singleIndexOf(display, value);
|
|
106
|
+
if (index >= 0)
|
|
107
|
+
anchors.push({
|
|
108
|
+
range: [index, index + value.length],
|
|
109
|
+
id: `${operation.id}-${slug(parameter.name)}`,
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
return anchors;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Maps each line of `display` to a query parameter's docs row id, so the whole
|
|
116
|
+
* line can be made clickable (like response example lines). Relies on
|
|
117
|
+
* {@link splitQueryLines} having placed each query parameter on its own line
|
|
118
|
+
* starting with `?`/`&` (optionally quoted in the TS variant).
|
|
119
|
+
*/
|
|
120
|
+
function queryLineAnchors(display, operation) {
|
|
121
|
+
const ids = new Map();
|
|
122
|
+
for (const parameter of operation.parameters)
|
|
123
|
+
if (parameter.in === 'query' && !parameter.deprecated)
|
|
124
|
+
ids.set(parameter.name, `${operation.id}-${slug(parameter.name)}`);
|
|
125
|
+
return display.split('\n').map((line) => {
|
|
126
|
+
const match = line.match(/^\s*'?[?&]([^=]+)=/);
|
|
127
|
+
return match ? ids.get(match[1] ?? '') : undefined;
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Computes character ranges for each query parameter's name and value within
|
|
132
|
+
* `display` so the UI can recolor them like the JSON response example (names use
|
|
133
|
+
* the JSON-string color, values the JSON-number color). Relies on
|
|
134
|
+
* {@link splitQueryLines} having placed each query parameter on its own line
|
|
135
|
+
* starting with `?`/`&` (optionally quoted in the TS variant).
|
|
136
|
+
*/
|
|
137
|
+
function queryColorRanges(display, operation) {
|
|
138
|
+
const names = new Set();
|
|
139
|
+
for (const parameter of operation.parameters)
|
|
140
|
+
if (parameter.in === 'query' && !parameter.deprecated)
|
|
141
|
+
names.add(parameter.name);
|
|
142
|
+
const ranges = [];
|
|
143
|
+
let offset = 0;
|
|
144
|
+
for (const line of display.split('\n')) {
|
|
145
|
+
// Capture: (prefix incl. quote + ?/&)(name)(=)(value up to closing quote/EOL)
|
|
146
|
+
const match = line.match(/^(\s*'?[?&])([^=]+)(=)([^'\n]*)/);
|
|
147
|
+
if (match) {
|
|
148
|
+
const [, prefix = '', name = '', , value = ''] = match;
|
|
149
|
+
if (names.has(name)) {
|
|
150
|
+
// Color the `?`/`&` separator (last char of the prefix) and the name
|
|
151
|
+
// together as one green span.
|
|
152
|
+
const nameStart = offset + prefix.length - 1;
|
|
153
|
+
const nameEnd = offset + prefix.length + name.length;
|
|
154
|
+
ranges.push({ range: [nameStart, nameEnd], kind: 'key' });
|
|
155
|
+
if (value.length > 0) {
|
|
156
|
+
const valueStart = nameEnd + 1; // skip '='
|
|
157
|
+
ranges.push({ range: [valueStart, valueStart + value.length], kind: 'value' });
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
offset += line.length + 1; // +1 for the consumed newline
|
|
162
|
+
}
|
|
163
|
+
return ranges;
|
|
164
|
+
}
|
|
165
|
+
/** Returns the index of `needle` in `haystack`, or -1 unless it occurs once. */
|
|
166
|
+
function singleIndexOf(haystack, needle) {
|
|
167
|
+
if (!needle)
|
|
168
|
+
return -1;
|
|
169
|
+
const first = haystack.indexOf(needle);
|
|
170
|
+
if (first < 0)
|
|
171
|
+
return -1;
|
|
172
|
+
if (haystack.indexOf(needle, first + 1) >= 0)
|
|
173
|
+
return -1;
|
|
174
|
+
return first;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Constructs a HAR-style request from an operation by filling path/query/header
|
|
178
|
+
* parameters and the request body with representative sample values. This is the
|
|
179
|
+
* input `snippetz` consumes to render code samples.
|
|
180
|
+
*/
|
|
181
|
+
export function harRequest(operation, server) {
|
|
182
|
+
const base = (server ?? '').replace(/\/$/, '');
|
|
183
|
+
let path = operation.path;
|
|
184
|
+
const headers = [];
|
|
185
|
+
const queryString = [];
|
|
186
|
+
for (const parameter of operation.parameters) {
|
|
187
|
+
if (parameter.deprecated)
|
|
188
|
+
continue;
|
|
189
|
+
const value = String(sampleParameter(parameter));
|
|
190
|
+
if (parameter.in === 'path')
|
|
191
|
+
path = path.replace(`{${parameter.name}}`, encodeURIComponent(value));
|
|
192
|
+
else if (parameter.in === 'query')
|
|
193
|
+
queryString.push({ name: parameter.name, value });
|
|
194
|
+
else if (parameter.in === 'header' && parameter.required)
|
|
195
|
+
headers.push({ name: parameter.name, value });
|
|
196
|
+
}
|
|
197
|
+
let postData;
|
|
198
|
+
const media = operation.requestBody?.content[0];
|
|
199
|
+
if (media) {
|
|
200
|
+
headers.push({ name: 'Content-Type', value: media.mediaType });
|
|
201
|
+
postData = { mimeType: media.mediaType, text: sampleBody(media) };
|
|
202
|
+
}
|
|
203
|
+
return {
|
|
204
|
+
method: operation.method,
|
|
205
|
+
url: `${base}${path}`,
|
|
206
|
+
headers,
|
|
207
|
+
queryString,
|
|
208
|
+
...(postData ? { postData } : {}),
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
/** Builds JSON response samples for each response that has a usable schema/example. */
|
|
212
|
+
export function responseSamples(operation) {
|
|
213
|
+
const samples = [];
|
|
214
|
+
for (const response of operation.responses) {
|
|
215
|
+
const media = response.content.find((entry) => entry.mediaType.includes('json'));
|
|
216
|
+
if (!media)
|
|
217
|
+
continue;
|
|
218
|
+
const idBase = mediaIdBase(responseIdBase(operation.id, response.status), media.mediaType, response.content.length);
|
|
219
|
+
// An authored example for the whole media type has no synthesized
|
|
220
|
+
// placeholders; build a tree from the literal value so we can still emit
|
|
221
|
+
// per-line anchors. Otherwise build a tagged tree from the schema so we can
|
|
222
|
+
// also dim type-derived leaves.
|
|
223
|
+
const tree = media.example !== undefined ? sampleTreeFromValue(media.example) : sampleTree(media.schema);
|
|
224
|
+
if (tree === undefined)
|
|
225
|
+
continue;
|
|
226
|
+
const { code, placeholders, linePaths } = serializeSample(tree);
|
|
227
|
+
samples.push({
|
|
228
|
+
status: response.status,
|
|
229
|
+
description: response.description,
|
|
230
|
+
idBase,
|
|
231
|
+
lang: 'json',
|
|
232
|
+
code,
|
|
233
|
+
placeholders,
|
|
234
|
+
linePaths,
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
return samples;
|
|
238
|
+
}
|
|
239
|
+
/** Serializes a request body media type to its example/sample JSON text. */
|
|
240
|
+
function sampleBody(media) {
|
|
241
|
+
const value = media.example ?? sampleFromSchema(media.schema);
|
|
242
|
+
if (media.mediaType.includes('json'))
|
|
243
|
+
return JSON.stringify(value ?? {}, null, 2);
|
|
244
|
+
return typeof value === 'string' ? value : JSON.stringify(value ?? {});
|
|
245
|
+
}
|
|
246
|
+
/** Produces a representative value for a single parameter. */
|
|
247
|
+
function sampleParameter(parameter) {
|
|
248
|
+
const value = sampleFromSchema(parameter.schema);
|
|
249
|
+
if (value !== undefined)
|
|
250
|
+
return value;
|
|
251
|
+
return parameter.name;
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Builds a tagged sample tree from a (dereferenced) JSON Schema, preferring
|
|
255
|
+
* authored `example`/`default`/`enum` values and otherwise synthesizing one
|
|
256
|
+
* from the declared type. Bounded by a recursion depth to guard against cycles.
|
|
257
|
+
*/
|
|
258
|
+
function sampleTree(schema, depth = 0) {
|
|
259
|
+
if (!schema || depth > 6)
|
|
260
|
+
return undefined;
|
|
261
|
+
if (schema['example'] !== undefined)
|
|
262
|
+
return { kind: 'leaf', value: schema['example'], placeholder: false };
|
|
263
|
+
const examples = schema['examples'];
|
|
264
|
+
if (Array.isArray(examples) && examples.length > 0)
|
|
265
|
+
return { kind: 'leaf', value: examples[0], placeholder: false };
|
|
266
|
+
if (schema['default'] !== undefined)
|
|
267
|
+
return { kind: 'leaf', value: schema['default'], placeholder: false };
|
|
268
|
+
const enumValues = schema['enum'];
|
|
269
|
+
if (Array.isArray(enumValues) && enumValues.length > 0)
|
|
270
|
+
return { kind: 'leaf', value: enumValues[0], placeholder: false };
|
|
271
|
+
// oneOf/anyOf variant picker (matching the docs renderer): sample the first
|
|
272
|
+
// variant and tag the resulting node with the variant's path segment, so its
|
|
273
|
+
// children's anchor paths line up with the variant-qualified docs rows.
|
|
274
|
+
if (schema['type'] !== 'array') {
|
|
275
|
+
const variants = unionVariantSchemas(schema);
|
|
276
|
+
if (variants) {
|
|
277
|
+
const node = sampleTree(variants[0], depth + 1);
|
|
278
|
+
if (node && (node.kind === 'object' || node.kind === 'array'))
|
|
279
|
+
return { ...node, pathSegment: unionVariantSegment(0) };
|
|
280
|
+
return node;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
// Composition keywords: fall back to the first usable subschema.
|
|
284
|
+
for (const key of ['allOf', 'anyOf', 'oneOf']) {
|
|
285
|
+
const subschemas = schema[key];
|
|
286
|
+
if (Array.isArray(subschemas) && subschemas[0])
|
|
287
|
+
return sampleTree(subschemas[0], depth + 1);
|
|
288
|
+
}
|
|
289
|
+
const rawType = schema['type'];
|
|
290
|
+
const type = Array.isArray(rawType) ? rawType[0] : rawType;
|
|
291
|
+
if (type === 'object' || schema['properties']) {
|
|
292
|
+
const properties = (schema['properties'] ?? {});
|
|
293
|
+
const entries = [];
|
|
294
|
+
for (const [name, property] of Object.entries(properties)) {
|
|
295
|
+
const node = sampleTree(property, depth + 1);
|
|
296
|
+
// Match `JSON.stringify`, which drops keys whose value is `undefined`.
|
|
297
|
+
if (node !== undefined)
|
|
298
|
+
entries.push([name, node]);
|
|
299
|
+
}
|
|
300
|
+
return { kind: 'object', entries };
|
|
301
|
+
}
|
|
302
|
+
if (type === 'array') {
|
|
303
|
+
const items = schema['items'];
|
|
304
|
+
const item = sampleTree(items, depth + 1);
|
|
305
|
+
return { kind: 'array', items: item === undefined ? [] : [item] };
|
|
306
|
+
}
|
|
307
|
+
if (type === 'string') {
|
|
308
|
+
const format = schema['format'];
|
|
309
|
+
if (format === 'date-time')
|
|
310
|
+
return { kind: 'leaf', value: new Date(0).toISOString(), placeholder: true };
|
|
311
|
+
if (format === 'date')
|
|
312
|
+
return { kind: 'leaf', value: new Date(0).toISOString().slice(0, 10), placeholder: true };
|
|
313
|
+
if (format === 'uuid')
|
|
314
|
+
return { kind: 'leaf', value: '00000000-0000-0000-0000-000000000000', placeholder: true };
|
|
315
|
+
return { kind: 'leaf', value: 'string', placeholder: true };
|
|
316
|
+
}
|
|
317
|
+
if (type === 'integer' || type === 'number')
|
|
318
|
+
return { kind: 'leaf', value: 0, placeholder: true };
|
|
319
|
+
if (type === 'boolean')
|
|
320
|
+
return { kind: 'leaf', value: true, placeholder: true };
|
|
321
|
+
return undefined;
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Builds a {@link SampleNode} tree from an already-resolved literal value (an
|
|
325
|
+
* authored media-type example). All leaves are non-placeholders since the value
|
|
326
|
+
* was authored. Object keys whose value serializes to `undefined` are dropped to
|
|
327
|
+
* match `JSON.stringify`.
|
|
328
|
+
*/
|
|
329
|
+
function sampleTreeFromValue(value) {
|
|
330
|
+
if (Array.isArray(value))
|
|
331
|
+
return { kind: 'array', items: value.map((item) => sampleTreeFromValue(item ?? null)) };
|
|
332
|
+
if (value && typeof value === 'object') {
|
|
333
|
+
const entries = [];
|
|
334
|
+
for (const [key, child] of Object.entries(value)) {
|
|
335
|
+
if (JSON.stringify(child) === undefined)
|
|
336
|
+
continue;
|
|
337
|
+
entries.push([key, sampleTreeFromValue(child)]);
|
|
338
|
+
}
|
|
339
|
+
return { kind: 'object', entries };
|
|
340
|
+
}
|
|
341
|
+
return { kind: 'leaf', value, placeholder: false };
|
|
342
|
+
}
|
|
343
|
+
/** Strips the placeholder tags from a {@link SampleNode} into a plain value. */
|
|
344
|
+
function toValue(node) {
|
|
345
|
+
if (node === undefined)
|
|
346
|
+
return undefined;
|
|
347
|
+
if (node.kind === 'leaf')
|
|
348
|
+
return node.value;
|
|
349
|
+
if (node.kind === 'array')
|
|
350
|
+
return node.items.map(toValue);
|
|
351
|
+
const result = {};
|
|
352
|
+
for (const [name, child] of node.entries)
|
|
353
|
+
result[name] = toValue(child);
|
|
354
|
+
return result;
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Pretty-prints a {@link SampleNode} as JSON (matching
|
|
358
|
+
* `JSON.stringify(value, null, 2)`) while recording `[start, end]` character
|
|
359
|
+
* ranges of placeholder leaf literals.
|
|
360
|
+
*/
|
|
361
|
+
function serializeSample(root) {
|
|
362
|
+
let code = '';
|
|
363
|
+
let line = 0;
|
|
364
|
+
const placeholders = [];
|
|
365
|
+
const linePaths = [];
|
|
366
|
+
function mark(path) {
|
|
367
|
+
if (path.length > 0)
|
|
368
|
+
linePaths[line] = path;
|
|
369
|
+
}
|
|
370
|
+
function newline() {
|
|
371
|
+
code += '\n';
|
|
372
|
+
line++;
|
|
373
|
+
}
|
|
374
|
+
function walk(node, indent, path) {
|
|
375
|
+
const pad = ' '.repeat(indent);
|
|
376
|
+
const padInner = ' '.repeat(indent + 1);
|
|
377
|
+
// Union variant nodes carry a virtual path segment (e.g. `variant-0`) so
|
|
378
|
+
// their children's anchor paths match the variant-qualified docs rows.
|
|
379
|
+
const childBase = node.kind !== 'leaf' && node.pathSegment ? [...path, node.pathSegment] : path;
|
|
380
|
+
if (node.kind === 'object') {
|
|
381
|
+
if (node.entries.length === 0) {
|
|
382
|
+
code += '{}';
|
|
383
|
+
return;
|
|
384
|
+
}
|
|
385
|
+
code += '{';
|
|
386
|
+
newline();
|
|
387
|
+
node.entries.forEach(([key, value], index) => {
|
|
388
|
+
const childPath = [...childBase, key];
|
|
389
|
+
mark(childPath);
|
|
390
|
+
code += `${padInner}${JSON.stringify(key)}: `;
|
|
391
|
+
walk(value, indent + 1, childPath);
|
|
392
|
+
code += index < node.entries.length - 1 ? ',' : '';
|
|
393
|
+
newline();
|
|
394
|
+
});
|
|
395
|
+
code += `${pad}}`;
|
|
396
|
+
return;
|
|
397
|
+
}
|
|
398
|
+
if (node.kind === 'array') {
|
|
399
|
+
if (node.items.length === 0) {
|
|
400
|
+
code += '[]';
|
|
401
|
+
return;
|
|
402
|
+
}
|
|
403
|
+
code += '[';
|
|
404
|
+
newline();
|
|
405
|
+
node.items.forEach((item, index) => {
|
|
406
|
+
// Scalar array items map to the array property's own path.
|
|
407
|
+
if (item.kind === 'leaf')
|
|
408
|
+
mark(childBase);
|
|
409
|
+
code += padInner;
|
|
410
|
+
walk(item, indent + 1, childBase);
|
|
411
|
+
code += index < node.items.length - 1 ? ',' : '';
|
|
412
|
+
newline();
|
|
413
|
+
});
|
|
414
|
+
code += `${pad}]`;
|
|
415
|
+
return;
|
|
416
|
+
}
|
|
417
|
+
const literal = JSON.stringify(node.value) ?? 'null';
|
|
418
|
+
const start = code.length;
|
|
419
|
+
code += literal;
|
|
420
|
+
if (node.placeholder)
|
|
421
|
+
placeholders.push([start, code.length]);
|
|
422
|
+
}
|
|
423
|
+
walk(root, 0, []);
|
|
424
|
+
return { code, placeholders, linePaths };
|
|
425
|
+
}
|
|
426
|
+
/**
|
|
427
|
+
* Generates a representative value from a (dereferenced) JSON Schema, preferring
|
|
428
|
+
* authored `example`/`default`/`enum` values and otherwise synthesizing one from
|
|
429
|
+
* the declared type. Bounded by a recursion depth to guard against cycles.
|
|
430
|
+
*/
|
|
431
|
+
function sampleFromSchema(schema, depth = 0) {
|
|
432
|
+
return toValue(sampleTree(schema, depth));
|
|
433
|
+
}
|
|
434
|
+
//# sourceMappingURL=sample.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sample.js","sourceRoot":"","sources":["../../../src/internal/openapi/sample.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { SearchDocuments } from '../search.js';
|
|
2
|
+
import type { Ir } from './parser.js';
|
|
3
|
+
/**
|
|
4
|
+
* Builds search index documents for an OpenAPI section so the auto-generated
|
|
5
|
+
* reference is discoverable by Vocs's search (which otherwise only crawls
|
|
6
|
+
* `.md`/`.mdx` files).
|
|
7
|
+
*
|
|
8
|
+
* Mirrors the page/anchor structure of the rendered reference:
|
|
9
|
+
* - the `/api` landing page (one `page` document),
|
|
10
|
+
* - each category page `/api/<group>` (one `page` document), and
|
|
11
|
+
* - each operation as a `section` document anchored on its category page
|
|
12
|
+
* (`/api/<group>#<operation>`).
|
|
13
|
+
*
|
|
14
|
+
* Operation documents fold the method, path, parameter names/descriptions and
|
|
15
|
+
* response descriptions into their searchable `text` so endpoints surface for a
|
|
16
|
+
* wide range of queries (summary, path, parameter, status code, …).
|
|
17
|
+
*/
|
|
18
|
+
export declare function toSearchDocuments(ir: Ir): SearchDocuments.Document[];
|
|
19
|
+
//# sourceMappingURL=search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/internal/openapi/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,KAAK,EAAE,EAAE,EAAe,MAAM,aAAa,CAAA;AAElD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,CAqDpE"}
|