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.
Files changed (306) hide show
  1. package/dist/config.d.ts +1 -0
  2. package/dist/config.d.ts.map +1 -1
  3. package/dist/config.js +1 -0
  4. package/dist/config.js.map +1 -1
  5. package/dist/globals.d.ts +16 -0
  6. package/dist/index.d.ts +1 -0
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +1 -0
  9. package/dist/index.js.map +1 -1
  10. package/dist/internal/config.d.ts +28 -0
  11. package/dist/internal/config.d.ts.map +1 -1
  12. package/dist/internal/config.js +10 -2
  13. package/dist/internal/config.js.map +1 -1
  14. package/dist/internal/llms.d.ts +21 -2
  15. package/dist/internal/llms.d.ts.map +1 -1
  16. package/dist/internal/llms.js +41 -1
  17. package/dist/internal/llms.js.map +1 -1
  18. package/dist/internal/markdown-negotiation.d.ts +36 -0
  19. package/dist/internal/markdown-negotiation.d.ts.map +1 -0
  20. package/dist/internal/markdown-negotiation.js +81 -0
  21. package/dist/internal/markdown-negotiation.js.map +1 -0
  22. package/dist/internal/markdown.d.ts.map +1 -1
  23. package/dist/internal/markdown.js +5 -0
  24. package/dist/internal/markdown.js.map +1 -1
  25. package/dist/internal/openapi/anchors.d.ts +25 -0
  26. package/dist/internal/openapi/anchors.d.ts.map +1 -0
  27. package/dist/internal/openapi/anchors.js +37 -0
  28. package/dist/internal/openapi/anchors.js.map +1 -0
  29. package/dist/internal/openapi/app.d.ts +89 -0
  30. package/dist/internal/openapi/app.d.ts.map +1 -0
  31. package/dist/internal/openapi/app.js +62 -0
  32. package/dist/internal/openapi/app.js.map +1 -0
  33. package/dist/internal/openapi/index.d.ts +8 -0
  34. package/dist/internal/openapi/index.d.ts.map +1 -0
  35. package/dist/internal/openapi/index.js +5 -0
  36. package/dist/internal/openapi/index.js.map +1 -0
  37. package/dist/internal/openapi/markdown.d.ts +42 -0
  38. package/dist/internal/openapi/markdown.d.ts.map +1 -0
  39. package/dist/internal/openapi/markdown.js +235 -0
  40. package/dist/internal/openapi/markdown.js.map +1 -0
  41. package/dist/internal/openapi/openapi.d.ts +187 -0
  42. package/dist/internal/openapi/openapi.d.ts.map +1 -0
  43. package/dist/internal/openapi/openapi.js +44 -0
  44. package/dist/internal/openapi/openapi.js.map +1 -0
  45. package/dist/internal/openapi/openrpc.d.ts +90 -0
  46. package/dist/internal/openapi/openrpc.d.ts.map +1 -0
  47. package/dist/internal/openapi/openrpc.js +213 -0
  48. package/dist/internal/openapi/openrpc.js.map +1 -0
  49. package/dist/internal/openapi/parser.d.ts +181 -0
  50. package/dist/internal/openapi/parser.d.ts.map +1 -0
  51. package/dist/internal/openapi/parser.js +329 -0
  52. package/dist/internal/openapi/parser.js.map +1 -0
  53. package/dist/internal/openapi/registry.d.ts +36 -0
  54. package/dist/internal/openapi/registry.d.ts.map +1 -0
  55. package/dist/internal/openapi/registry.js +79 -0
  56. package/dist/internal/openapi/registry.js.map +1 -0
  57. package/dist/internal/openapi/sample.d.ts +115 -0
  58. package/dist/internal/openapi/sample.d.ts.map +1 -0
  59. package/dist/internal/openapi/sample.js +434 -0
  60. package/dist/internal/openapi/sample.js.map +1 -0
  61. package/dist/internal/openapi/search.d.ts +19 -0
  62. package/dist/internal/openapi/search.d.ts.map +1 -0
  63. package/dist/internal/openapi/search.js +98 -0
  64. package/dist/internal/openapi/search.js.map +1 -0
  65. package/dist/internal/openapi/sidebar.d.ts +30 -0
  66. package/dist/internal/openapi/sidebar.d.ts.map +1 -0
  67. package/dist/internal/openapi/sidebar.js +67 -0
  68. package/dist/internal/openapi/sidebar.js.map +1 -0
  69. package/dist/internal/openapi/union.d.ts +36 -0
  70. package/dist/internal/openapi/union.d.ts.map +1 -0
  71. package/dist/internal/openapi/union.js +69 -0
  72. package/dist/internal/openapi/union.js.map +1 -0
  73. package/dist/internal/search.d.ts.map +1 -1
  74. package/dist/internal/search.js +20 -0
  75. package/dist/internal/search.js.map +1 -1
  76. package/dist/internal/vite-plugins.d.ts +12 -0
  77. package/dist/internal/vite-plugins.d.ts.map +1 -1
  78. package/dist/internal/vite-plugins.js +102 -11
  79. package/dist/internal/vite-plugins.js.map +1 -1
  80. package/dist/react/Badge.d.ts +2 -3
  81. package/dist/react/Badge.d.ts.map +1 -1
  82. package/dist/react/Layout.client.d.ts.map +1 -1
  83. package/dist/react/Layout.client.js +2 -2
  84. package/dist/react/Layout.client.js.map +1 -1
  85. package/dist/react/OpenApi.d.ts +6 -0
  86. package/dist/react/OpenApi.d.ts.map +1 -0
  87. package/dist/react/OpenApi.js +6 -0
  88. package/dist/react/OpenApi.js.map +1 -0
  89. package/dist/react/internal/CodeToHtml.client.d.ts +53 -2
  90. package/dist/react/internal/CodeToHtml.client.d.ts.map +1 -1
  91. package/dist/react/internal/CodeToHtml.client.js +154 -21
  92. package/dist/react/internal/CodeToHtml.client.js.map +1 -1
  93. package/dist/react/internal/Sidebar.d.ts.map +1 -1
  94. package/dist/react/internal/Sidebar.js +99 -2
  95. package/dist/react/internal/Sidebar.js.map +1 -1
  96. package/dist/react/internal/openapi/CodeSample.client.d.ts +21 -0
  97. package/dist/react/internal/openapi/CodeSample.client.d.ts.map +1 -0
  98. package/dist/react/internal/openapi/CodeSample.client.js +134 -0
  99. package/dist/react/internal/openapi/CodeSample.client.js.map +1 -0
  100. package/dist/react/internal/openapi/CollapsibleChildren.client.d.ts +17 -0
  101. package/dist/react/internal/openapi/CollapsibleChildren.client.d.ts.map +1 -0
  102. package/dist/react/internal/openapi/CollapsibleChildren.client.js +18 -0
  103. package/dist/react/internal/openapi/CollapsibleChildren.client.js.map +1 -0
  104. package/dist/react/internal/openapi/Disclosure.client.d.ts +28 -0
  105. package/dist/react/internal/openapi/Disclosure.client.d.ts.map +1 -0
  106. package/dist/react/internal/openapi/Disclosure.client.js +38 -0
  107. package/dist/react/internal/openapi/Disclosure.client.js.map +1 -0
  108. package/dist/react/internal/openapi/Endpoints.d.ts +26 -0
  109. package/dist/react/internal/openapi/Endpoints.d.ts.map +1 -0
  110. package/dist/react/internal/openapi/Endpoints.js +33 -0
  111. package/dist/react/internal/openapi/Endpoints.js.map +1 -0
  112. package/dist/react/internal/openapi/EndpointsView.d.ts +24 -0
  113. package/dist/react/internal/openapi/EndpointsView.d.ts.map +1 -0
  114. package/dist/react/internal/openapi/EndpointsView.js +26 -0
  115. package/dist/react/internal/openapi/EndpointsView.js.map +1 -0
  116. package/dist/react/internal/openapi/EnumValues.client.d.ts +14 -0
  117. package/dist/react/internal/openapi/EnumValues.client.d.ts.map +1 -0
  118. package/dist/react/internal/openapi/EnumValues.client.js +20 -0
  119. package/dist/react/internal/openapi/EnumValues.client.js.map +1 -0
  120. package/dist/react/internal/openapi/HeadingAnchor.d.ts +15 -0
  121. package/dist/react/internal/openapi/HeadingAnchor.d.ts.map +1 -0
  122. package/dist/react/internal/openapi/HeadingAnchor.js +12 -0
  123. package/dist/react/internal/openapi/HeadingAnchor.js.map +1 -0
  124. package/dist/react/internal/openapi/OpenApiPage.d.ts +79 -0
  125. package/dist/react/internal/openapi/OpenApiPage.d.ts.map +1 -0
  126. package/dist/react/internal/openapi/OpenApiPage.js +72 -0
  127. package/dist/react/internal/openapi/OpenApiPage.js.map +1 -0
  128. package/dist/react/internal/openapi/Operation.d.ts +25 -0
  129. package/dist/react/internal/openapi/Operation.d.ts.map +1 -0
  130. package/dist/react/internal/openapi/Operation.js +101 -0
  131. package/dist/react/internal/openapi/Operation.js.map +1 -0
  132. package/dist/react/internal/openapi/Playground.client.d.ts +33 -0
  133. package/dist/react/internal/openapi/Playground.client.d.ts.map +1 -0
  134. package/dist/react/internal/openapi/Playground.client.js +170 -0
  135. package/dist/react/internal/openapi/Playground.client.js.map +1 -0
  136. package/dist/react/internal/openapi/PropertyExample.client.d.ts +17 -0
  137. package/dist/react/internal/openapi/PropertyExample.client.d.ts.map +1 -0
  138. package/dist/react/internal/openapi/PropertyExample.client.js +21 -0
  139. package/dist/react/internal/openapi/PropertyExample.client.js.map +1 -0
  140. package/dist/react/internal/openapi/Reference.d.ts +55 -0
  141. package/dist/react/internal/openapi/Reference.d.ts.map +1 -0
  142. package/dist/react/internal/openapi/Reference.js +42 -0
  143. package/dist/react/internal/openapi/Reference.js.map +1 -0
  144. package/dist/react/internal/openapi/Schema.d.ts +110 -0
  145. package/dist/react/internal/openapi/Schema.d.ts.map +1 -0
  146. package/dist/react/internal/openapi/Schema.js +239 -0
  147. package/dist/react/internal/openapi/Schema.js.map +1 -0
  148. package/dist/react/internal/openapi/SchemaUnion.client.d.ts +25 -0
  149. package/dist/react/internal/openapi/SchemaUnion.client.d.ts.map +1 -0
  150. package/dist/react/internal/openapi/SchemaUnion.client.js +48 -0
  151. package/dist/react/internal/openapi/SchemaUnion.client.js.map +1 -0
  152. package/dist/react/internal/openapi/anchor-navigation.client.d.ts +47 -0
  153. package/dist/react/internal/openapi/anchor-navigation.client.d.ts.map +1 -0
  154. package/dist/react/internal/openapi/anchor-navigation.client.js +120 -0
  155. package/dist/react/internal/openapi/anchor-navigation.client.js.map +1 -0
  156. package/dist/react/internal/openapi/auth.d.ts +28 -0
  157. package/dist/react/internal/openapi/auth.d.ts.map +1 -0
  158. package/dist/react/internal/openapi/auth.js +75 -0
  159. package/dist/react/internal/openapi/auth.js.map +1 -0
  160. package/dist/react/useLayout.d.ts +2 -0
  161. package/dist/react/useLayout.d.ts.map +1 -1
  162. package/dist/react/useLayout.js +2 -0
  163. package/dist/react/useLayout.js.map +1 -1
  164. package/dist/server/handlers.d.ts +1 -1
  165. package/dist/server/handlers.d.ts.map +1 -1
  166. package/dist/server/handlers.js +26 -5
  167. package/dist/server/handlers.js.map +1 -1
  168. package/dist/server/og-assets.d.ts +5 -0
  169. package/dist/server/og-assets.d.ts.map +1 -0
  170. package/dist/server/og-assets.js +11 -0
  171. package/dist/server/og-assets.js.map +1 -0
  172. package/dist/server/openapi/assets.d.ts +33 -0
  173. package/dist/server/openapi/assets.d.ts.map +1 -0
  174. package/dist/server/openapi/assets.generated.d.ts +9 -0
  175. package/dist/server/openapi/assets.generated.d.ts.map +1 -0
  176. package/dist/server/openapi/assets.generated.js +1091 -0
  177. package/dist/server/openapi/assets.generated.js.map +1 -0
  178. package/dist/server/openapi/assets.js +32 -0
  179. package/dist/server/openapi/assets.js.map +1 -0
  180. package/dist/server/openapi/handler.d.ts +103 -0
  181. package/dist/server/openapi/handler.d.ts.map +1 -0
  182. package/dist/server/openapi/handler.js +198 -0
  183. package/dist/server/openapi/handler.js.map +1 -0
  184. package/dist/server/openapi/handler.test.d.ts +2 -0
  185. package/dist/server/openapi/handler.test.d.ts.map +1 -0
  186. package/dist/server/openapi/handler.test.js +203 -0
  187. package/dist/server/openapi/handler.test.js.map +1 -0
  188. package/dist/server/openapi/html.d.ts +16 -0
  189. package/dist/server/openapi/html.d.ts.map +1 -0
  190. package/dist/server/openapi/html.js +75 -0
  191. package/dist/server/openapi/html.js.map +1 -0
  192. package/dist/server/openapi/pages.d.ts +33 -0
  193. package/dist/server/openapi/pages.d.ts.map +1 -0
  194. package/dist/server/openapi/pages.js +130 -0
  195. package/dist/server/openapi/pages.js.map +1 -0
  196. package/dist/server/openapi/pages.test.d.ts +2 -0
  197. package/dist/server/openapi/pages.test.d.ts.map +1 -0
  198. package/dist/server/openapi/pages.test.js +94 -0
  199. package/dist/server/openapi/pages.test.js.map +1 -0
  200. package/dist/server/openapi/state.d.ts +42 -0
  201. package/dist/server/openapi/state.d.ts.map +1 -0
  202. package/dist/server/openapi/state.js +101 -0
  203. package/dist/server/openapi/state.js.map +1 -0
  204. package/dist/styles/index.css +16 -0
  205. package/dist/styles/markdown.css +9 -7
  206. package/dist/styles/openapi-playground.css +80 -0
  207. package/dist/styles/openapi.css +660 -0
  208. package/dist/vite.d.ts.map +1 -1
  209. package/dist/vite.js +1 -0
  210. package/dist/vite.js.map +1 -1
  211. package/dist/waku/internal/middleware/md-router.d.ts +0 -4
  212. package/dist/waku/internal/middleware/md-router.d.ts.map +1 -1
  213. package/dist/waku/internal/middleware/md-router.js +3 -48
  214. package/dist/waku/internal/middleware/md-router.js.map +1 -1
  215. package/dist/waku/internal/patches/adapters/vercel-build-enhancer.js +1 -1
  216. package/dist/waku/internal/patches/adapters/vercel-build-enhancer.js.map +1 -1
  217. package/dist/waku/internal/patches/router.d.ts.map +1 -1
  218. package/dist/waku/internal/patches/router.js +114 -1
  219. package/dist/waku/internal/patches/router.js.map +1 -1
  220. package/package.json +5 -1
  221. package/src/config.ts +1 -0
  222. package/src/globals.d.ts +16 -0
  223. package/src/index.ts +1 -0
  224. package/src/internal/config.ts +40 -1
  225. package/src/internal/llms.ts +51 -1
  226. package/src/internal/markdown-negotiation.test.ts +42 -0
  227. package/src/internal/markdown-negotiation.ts +95 -0
  228. package/src/internal/markdown.ts +5 -0
  229. package/src/internal/openapi/anchors.ts +44 -0
  230. package/src/internal/openapi/app.ts +127 -0
  231. package/src/internal/openapi/index.ts +24 -0
  232. package/src/internal/openapi/markdown.test.ts +115 -0
  233. package/src/internal/openapi/markdown.ts +275 -0
  234. package/src/internal/openapi/openapi.ts +212 -0
  235. package/src/internal/openapi/openrpc.test.ts +239 -0
  236. package/src/internal/openapi/openrpc.ts +295 -0
  237. package/src/internal/openapi/parser.test.ts +203 -0
  238. package/src/internal/openapi/parser.ts +613 -0
  239. package/src/internal/openapi/registry.test.ts +89 -0
  240. package/src/internal/openapi/registry.ts +89 -0
  241. package/src/internal/openapi/sample.test.ts +283 -0
  242. package/src/internal/openapi/sample.ts +562 -0
  243. package/src/internal/openapi/search.test.ts +62 -0
  244. package/src/internal/openapi/search.ts +108 -0
  245. package/src/internal/openapi/sidebar.test.ts +131 -0
  246. package/src/internal/openapi/sidebar.ts +94 -0
  247. package/src/internal/openapi/union.test.ts +51 -0
  248. package/src/internal/openapi/union.ts +74 -0
  249. package/src/internal/search.ts +20 -0
  250. package/src/internal/test/virtual-config.stub.ts +14 -0
  251. package/src/internal/vite-plugins.ts +106 -11
  252. package/src/openapi-app/App.tsx +64 -0
  253. package/src/openapi-app/blocks.tsx +33 -0
  254. package/src/openapi-app/client.tsx +25 -0
  255. package/src/openapi-app/links.test.ts +84 -0
  256. package/src/openapi-app/links.ts +66 -0
  257. package/src/openapi-app/payload.ts +20 -0
  258. package/src/openapi-app/virtual/config.ts +7 -0
  259. package/src/openapi-app/virtual/group-icons.ts +2 -0
  260. package/src/openapi-app/virtual/langs.ts +6 -0
  261. package/src/openapi-app/virtual/openapi.ts +10 -0
  262. package/src/openapi-app/virtual/search-index.ts +21 -0
  263. package/src/openapi-app/virtual/slots.ts +4 -0
  264. package/src/openapi-app/virtual/user-styles.ts +2 -0
  265. package/src/openapi-app/waku.tsx +154 -0
  266. package/src/react/Badge.tsx +2 -3
  267. package/src/react/Layout.client.tsx +17 -4
  268. package/src/react/OpenApi.tsx +5 -0
  269. package/src/react/internal/CodeToHtml.client.tsx +283 -22
  270. package/src/react/internal/Sidebar.tsx +126 -22
  271. package/src/react/internal/openapi/CodeSample.client.tsx +294 -0
  272. package/src/react/internal/openapi/CollapsibleChildren.client.tsx +41 -0
  273. package/src/react/internal/openapi/Disclosure.client.tsx +67 -0
  274. package/src/react/internal/openapi/Endpoints.tsx +58 -0
  275. package/src/react/internal/openapi/EndpointsView.tsx +76 -0
  276. package/src/react/internal/openapi/EnumValues.client.tsx +49 -0
  277. package/src/react/internal/openapi/HeadingAnchor.tsx +28 -0
  278. package/src/react/internal/openapi/OpenApiPage.tsx +173 -0
  279. package/src/react/internal/openapi/Operation.test.tsx +101 -0
  280. package/src/react/internal/openapi/Operation.tsx +335 -0
  281. package/src/react/internal/openapi/Playground.client.tsx +234 -0
  282. package/src/react/internal/openapi/PropertyExample.client.tsx +55 -0
  283. package/src/react/internal/openapi/Reference.tsx +120 -0
  284. package/src/react/internal/openapi/Schema.tsx +467 -0
  285. package/src/react/internal/openapi/SchemaUnion.client.tsx +123 -0
  286. package/src/react/internal/openapi/anchor-navigation.client.ts +154 -0
  287. package/src/react/internal/openapi/auth.ts +69 -0
  288. package/src/react/useLayout.ts +4 -0
  289. package/src/server/handlers.ts +31 -6
  290. package/src/server/og-assets.ts +14 -0
  291. package/src/server/openapi/assets.generated.ts +1093 -0
  292. package/src/server/openapi/assets.ts +57 -0
  293. package/src/server/openapi/handler.test.ts +244 -0
  294. package/src/server/openapi/handler.ts +277 -0
  295. package/src/server/openapi/html.ts +84 -0
  296. package/src/server/openapi/pages.test.ts +111 -0
  297. package/src/server/openapi/pages.ts +153 -0
  298. package/src/server/openapi/state.ts +136 -0
  299. package/src/styles/index.css +16 -0
  300. package/src/styles/markdown.css +9 -7
  301. package/src/styles/openapi-playground.css +80 -0
  302. package/src/styles/openapi.css +660 -0
  303. package/src/vite.ts +1 -0
  304. package/src/waku/internal/middleware/md-router.ts +8 -52
  305. package/src/waku/internal/patches/adapters/vercel-build-enhancer.ts +1 -1
  306. package/src/waku/internal/patches/router.ts +131 -1
@@ -0,0 +1,181 @@
1
+ import type * as OpenApi from './openapi.js';
2
+ /**
3
+ * HTTP methods recognized on an OpenAPI path item, in canonical display order.
4
+ */
5
+ export declare const methods: readonly ["get", "post", "put", "patch", "delete", "head", "options", "trace"];
6
+ export type Method = (typeof methods)[number];
7
+ /**
8
+ * Intermediate representation of a parsed OpenAPI document.
9
+ *
10
+ * This is the serializable shape consumed by the React rendering layer (via the
11
+ * `virtual:vocs/openapi` module) and the sidebar generator. It intentionally
12
+ * keeps raw JSON Schema objects (`parameters`, `requestBody`, `responses`) so
13
+ * the renderer can display them without a lossy transform.
14
+ */
15
+ export type Ir = {
16
+ /** Mount path the section is served at (e.g. `/api`). */
17
+ path: string;
18
+ /**
19
+ * Spec source handed to the interactive client (Scalar API client). A `url`
20
+ * when the configured spec is a URL (the client fetches it directly), else
21
+ * the upgraded document `content` so the client works for file/inline specs.
22
+ */
23
+ client: {
24
+ url: string;
25
+ } | {
26
+ content: Record<string, unknown>;
27
+ };
28
+ /** Document metadata. */
29
+ info: {
30
+ title: string;
31
+ version?: string | undefined;
32
+ description?: string | undefined;
33
+ };
34
+ /** Servers the API is hosted at. */
35
+ servers: IrServer[];
36
+ /** Operations grouped by category (tag or path segment). */
37
+ groups: IrGroup[];
38
+ /**
39
+ * Doc-only "trait" pages: tags marked `x-traitTag: true` (Redoc convention),
40
+ * which carry Markdown `description` content but no operations. The standalone
41
+ * handler renders each as a guide page nested under `Introduction`.
42
+ */
43
+ traits: IrTrait[];
44
+ /** Named security schemes from `components.securitySchemes`. */
45
+ securitySchemes: Record<string, IrSecurityScheme>;
46
+ };
47
+ export type IrTrait = {
48
+ /** Stable slug used as the page route segment. */
49
+ id: string;
50
+ /** Display name (the page title fallback). */
51
+ name: string;
52
+ /** Page body (Markdown). */
53
+ description?: string | undefined;
54
+ /** Optional subtitle rendered under the title (`x-subtitle`). */
55
+ subtitle?: string | undefined;
56
+ /**
57
+ * Sidebar group to nest the page under (`x-parent`, a tag/group name). When
58
+ * omitted, the page nests under `Introduction`. When it names an existing
59
+ * operation group, the page joins that group; otherwise a new sidebar group
60
+ * with that name is created.
61
+ */
62
+ parent?: string | undefined;
63
+ };
64
+ export type IrServer = {
65
+ url: string;
66
+ description?: string | undefined;
67
+ };
68
+ export type IrGroup = {
69
+ /** Stable slug used as the section anchor on the page. */
70
+ id: string;
71
+ /** Display name of the category. */
72
+ name: string;
73
+ /** Optional category description (Markdown). */
74
+ description?: string | undefined;
75
+ /** Operations belonging to this category. */
76
+ operations: IrOperation[];
77
+ };
78
+ export type IrOperation = {
79
+ /** Stable slug used as the operation's anchor on the page. */
80
+ id: string;
81
+ /** HTTP method (uppercased for display, e.g. `GET`). */
82
+ method: string;
83
+ /** Templated path (e.g. `/pets/{petId}`). */
84
+ path: string;
85
+ /**
86
+ * Name of the host operation's request example to preselect in the
87
+ * interactive client. Set for JSON-RPC operations expanded from an OpenRPC
88
+ * document (the JSON-RPC method name); lets "Try" prefill the right envelope
89
+ * even though every method shares the same path + verb.
90
+ */
91
+ rpcExample?: string | undefined;
92
+ summary?: string | undefined;
93
+ description?: string | undefined;
94
+ deprecated?: boolean | undefined;
95
+ /** Merged path-level + operation-level parameters. */
96
+ parameters: IrParameter[];
97
+ /** Request body (if any). */
98
+ requestBody?: IrBody | undefined;
99
+ /** Responses keyed by status code (e.g. `200`, `default`). */
100
+ responses: IrResponse[];
101
+ /** Security requirements that apply to this operation. */
102
+ security?: Record<string, string[]>[] | undefined;
103
+ };
104
+ export type IrParameter = {
105
+ name: string;
106
+ /**
107
+ * Where the parameter is supplied. `rpc` is a Vocs extension for JSON-RPC
108
+ * method params expanded from an OpenRPC document (rendered like query/path
109
+ * params but carried in the request body envelope).
110
+ */
111
+ in: 'path' | 'query' | 'header' | 'cookie' | 'rpc';
112
+ required?: boolean | undefined;
113
+ deprecated?: boolean | undefined;
114
+ description?: string | undefined;
115
+ /** Raw JSON Schema for the parameter value. */
116
+ schema?: Record<string, unknown> | undefined;
117
+ /** Example value provided at the parameter level. */
118
+ example?: unknown;
119
+ };
120
+ export type IrBody = {
121
+ required?: boolean | undefined;
122
+ description?: string | undefined;
123
+ /**
124
+ * Suppress the rendered "Request Body" section while still using the body to
125
+ * generate request code samples. Set for JSON-RPC operations expanded from an
126
+ * OpenRPC document, whose params are shown in a "Parameters" section instead.
127
+ */
128
+ hidden?: boolean | undefined;
129
+ /** Content keyed by media type (e.g. `application/json`). */
130
+ content: IrMediaType[];
131
+ };
132
+ export type IrMediaType = {
133
+ mediaType: string;
134
+ /** Raw JSON Schema for the media type. */
135
+ schema?: Record<string, unknown> | undefined;
136
+ /** Example value(s), if provided. */
137
+ example?: unknown;
138
+ };
139
+ export type IrResponse = {
140
+ /** Status code or `default`. */
141
+ status: string;
142
+ description?: string | undefined;
143
+ content: IrMediaType[];
144
+ /** Response headers, keyed by header name in the spec. */
145
+ headers: IrHeader[];
146
+ };
147
+ export type IrHeader = {
148
+ name: string;
149
+ required?: boolean | undefined;
150
+ deprecated?: boolean | undefined;
151
+ description?: string | undefined;
152
+ /** Raw JSON Schema for the header value. */
153
+ schema?: Record<string, unknown> | undefined;
154
+ /** Example value provided at the header level. */
155
+ example?: unknown;
156
+ };
157
+ export type IrSecurityScheme = Record<string, unknown> & {
158
+ type: string;
159
+ description?: string | undefined;
160
+ };
161
+ /**
162
+ * Parses an OpenAPI spec into the Vocs intermediate representation.
163
+ *
164
+ * Loads the spec (inline object, file path, raw content, or URL), upgrades it
165
+ * to OpenAPI 3.1, dereferences all `$ref`s, then groups operations into
166
+ * categories (by tag) for the sidebar and per-category pages.
167
+ */
168
+ export declare function parse(config: OpenApi.Config, options?: parse.Options): Promise<Ir>;
169
+ export declare namespace parse {
170
+ type Options = {
171
+ /** Directory file-path specs are resolved against. @default process.cwd() */
172
+ rootDir?: string | undefined;
173
+ /**
174
+ * Base URL relative `x-openrpc` URLs (e.g. `/openrpc.json`) resolve against
175
+ * when the spec itself wasn't loaded from a URL — the request origin in the
176
+ * standalone server handler.
177
+ */
178
+ baseUrl?: string | undefined;
179
+ };
180
+ }
181
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/internal/openapi/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,329 @@
1
+ import { dereference, upgrade } from '@scalar/openapi-parser';
2
+ import GithubSlugger from 'github-slugger';
3
+ import * as OpenRpc from './openrpc.js';
4
+ /**
5
+ * HTTP methods recognized on an OpenAPI path item, in canonical display order.
6
+ */
7
+ export const methods = [
8
+ 'get',
9
+ 'post',
10
+ 'put',
11
+ 'patch',
12
+ 'delete',
13
+ 'head',
14
+ 'options',
15
+ 'trace',
16
+ ];
17
+ /**
18
+ * Parses an OpenAPI spec into the Vocs intermediate representation.
19
+ *
20
+ * Loads the spec (inline object, file path, raw content, or URL), upgrades it
21
+ * to OpenAPI 3.1, dereferences all `$ref`s, then groups operations into
22
+ * categories (by tag) for the sidebar and per-category pages.
23
+ */
24
+ export async function parse(config, options = {}) {
25
+ const { rootDir = typeof process !== 'undefined' ? process.cwd() : '.' } = options;
26
+ // Resolve a lazy provider or an already-started promise (e.g. a
27
+ // runtime-generated spec) to its value.
28
+ const input = typeof config.spec === 'function' ? config.spec() : config.spec;
29
+ const spec = await input;
30
+ const raw = await load(spec, rootDir);
31
+ const { specification } = upgrade(raw);
32
+ const { schema } = dereference(specification);
33
+ const document = (schema ?? specification);
34
+ const isUrl = typeof spec === 'string' && (spec.startsWith('http://') || spec.startsWith('https://'));
35
+ const specUrl = isUrl ? spec : undefined;
36
+ // Base for resolving relative `x-openrpc` URLs (e.g. `/openrpc.json`): the
37
+ // spec URL when the spec was loaded from a URL, else the caller-provided base
38
+ // (the request origin in the standalone server handler).
39
+ const openrpcBaseUrl = specUrl ?? options.baseUrl;
40
+ const servers = (document.servers ?? [])
41
+ .map((server) => ({
42
+ url: resolveServerUrl(server.url ?? '', specUrl),
43
+ description: server.description,
44
+ }))
45
+ .filter((server) => server.url);
46
+ const securitySchemes = document.components?.securitySchemes ?? {};
47
+ const { groups, injections } = await buildGroups(document, { baseUrl: openrpcBaseUrl });
48
+ // Inject JSON-RPC examples onto the host operation in the spec the
49
+ // interactive client loads, so each "Try" can preselect its method's
50
+ // envelope. The examples must live in the document Scalar reads; when the
51
+ // spec was a URL it would otherwise fetch the un-augmented version, so fall
52
+ // back to handing it the augmented `content` instead.
53
+ for (const injection of injections)
54
+ injectRpcExamples(specification, injection);
55
+ const client = isUrl && injections.length === 0
56
+ ? { url: spec }
57
+ : { content: specification };
58
+ return {
59
+ path: config.path ?? '/',
60
+ client,
61
+ info: {
62
+ title: document.info?.title ?? 'API Reference',
63
+ version: document.info?.version,
64
+ description: document.info?.description,
65
+ },
66
+ servers,
67
+ groups,
68
+ traits: buildTraits(document),
69
+ securitySchemes,
70
+ };
71
+ }
72
+ /**
73
+ * Adds named JSON-RPC request examples to a host operation's
74
+ * `application/json` request body in the (upgraded) spec document. Scalar
75
+ * builds one selectable request example per key, which the "Try" button
76
+ * navigates to via the operation's `rpcExample`.
77
+ */
78
+ function injectRpcExamples(specification, injection) {
79
+ const paths = specification['paths'];
80
+ const operation = paths?.[injection.path]?.[injection.method];
81
+ if (!operation)
82
+ return;
83
+ let requestBody = operation['requestBody'];
84
+ // A `$ref`'d or absent body can't be merged in place; replace with an inline
85
+ // one carrying just the examples (the params already render in the docs).
86
+ if (!requestBody || typeof requestBody !== 'object' || '$ref' in requestBody) {
87
+ requestBody = {};
88
+ operation['requestBody'] = requestBody;
89
+ }
90
+ if (!requestBody['content'])
91
+ requestBody['content'] = {};
92
+ const content = requestBody['content'];
93
+ if (!content['application/json'])
94
+ content['application/json'] = {};
95
+ const media = content['application/json'];
96
+ media['examples'] = { ...media['examples'], ...injection.examples };
97
+ }
98
+ /** Builds doc-only "trait" pages from tags marked `x-traitTag: true`. */
99
+ function buildTraits(document) {
100
+ const slugger = new GithubSlugger();
101
+ const traits = [];
102
+ for (const tag of document.tags ?? []) {
103
+ if (!tag.name || !tag['x-traitTag'])
104
+ continue;
105
+ traits.push({
106
+ id: slugger.slug(tag.name),
107
+ name: tag.name,
108
+ description: tag.description,
109
+ subtitle: tag['x-subtitle'],
110
+ parent: tag['x-parent'],
111
+ });
112
+ }
113
+ return traits;
114
+ }
115
+ /**
116
+ * Resolves a server URL to an absolute one.
117
+ *
118
+ * OpenAPI server URLs are often relative (e.g. `/` or `/v2`), meaning "relative
119
+ * to the host serving this document". When the spec was loaded from a URL we
120
+ * resolve such URLs against that origin (matching how Scalar and other tools
121
+ * behave) so generated code samples point at a real, callable host. Absolute
122
+ * URLs are returned untouched; relative URLs for file/inline specs are kept
123
+ * as-is. Any trailing slash is trimmed so callers can append paths directly.
124
+ */
125
+ function resolveServerUrl(url, specUrl) {
126
+ if (!url)
127
+ return '';
128
+ if (/^https?:\/\//.test(url))
129
+ return url.replace(/\/$/, '');
130
+ if (!specUrl)
131
+ return url;
132
+ try {
133
+ return new URL(url, specUrl).toString().replace(/\/$/, '');
134
+ }
135
+ catch {
136
+ return url;
137
+ }
138
+ }
139
+ /** Resolves a spec input to a raw definition (object or string content). */
140
+ async function load(spec, rootDir) {
141
+ if (typeof spec === 'object')
142
+ return spec;
143
+ if (spec.startsWith('http://') || spec.startsWith('https://')) {
144
+ const response = await fetch(spec);
145
+ if (!response.ok)
146
+ throw new Error(`Failed to fetch OpenAPI spec from ${spec}: ${response.statusText}`);
147
+ return response.text();
148
+ }
149
+ // Raw JSON/YAML content passed inline as a string — no filesystem needed.
150
+ // (Avoids importing `node:*` in non-Node runtimes like Cloudflare Workers,
151
+ // where local-file specs are unsupported anyway.)
152
+ if (looksLikeRawContent(spec))
153
+ return spec;
154
+ // Treat as a file path relative to rootDir; fall back to raw content. `node:*`
155
+ // is imported dynamically so URL/inline specs stay runtime-portable.
156
+ try {
157
+ const [{ default: fs }, path] = await Promise.all([
158
+ import('node:fs/promises').then((module) => ({ default: module })),
159
+ import('node:path'),
160
+ ]);
161
+ const filePath = path.isAbsolute(spec) ? spec : path.resolve(rootDir, spec);
162
+ return await fs.readFile(filePath, 'utf-8');
163
+ }
164
+ catch {
165
+ return spec;
166
+ }
167
+ }
168
+ /**
169
+ * Heuristic for raw inline spec content (vs. a file path): JSON starts with `{`,
170
+ * and a YAML document typically contains a newline or an `openapi:`/`swagger:`
171
+ * key. File paths are single-line and do not.
172
+ */
173
+ function looksLikeRawContent(spec) {
174
+ const trimmed = spec.trimStart();
175
+ if (trimmed.startsWith('{'))
176
+ return true;
177
+ if (/\n/.test(spec) && /(^|\n)\s*(openapi|swagger)\s*:/.test(spec))
178
+ return true;
179
+ return false;
180
+ }
181
+ /** Groups operations by their first tag. */
182
+ async function buildGroups(document, options = {}) {
183
+ const slugger = new GithubSlugger();
184
+ const order = [];
185
+ const byName = new Map();
186
+ const descriptions = new Map();
187
+ const injections = [];
188
+ // Seed group order from document-level `tags` so authoring order is preserved.
189
+ // Skip `x-traitTag` tags — they're doc-only pages, not operation categories.
190
+ for (const tag of document.tags ?? []) {
191
+ if (!tag.name || tag['x-traitTag'])
192
+ continue;
193
+ if (!byName.has(tag.name)) {
194
+ byName.set(tag.name, []);
195
+ order.push(tag.name);
196
+ descriptions.set(tag.name, tag.description);
197
+ }
198
+ }
199
+ const paths = document.paths ?? {};
200
+ for (const [pathname, item] of Object.entries(paths)) {
201
+ if (!item || typeof item !== 'object')
202
+ continue;
203
+ const pathParameters = item.parameters ?? [];
204
+ for (const method of methods) {
205
+ const operation = item[method];
206
+ if (!operation)
207
+ continue;
208
+ const groupName = operation.tags?.[0] ?? 'default';
209
+ if (!byName.has(groupName)) {
210
+ byName.set(groupName, []);
211
+ order.push(groupName);
212
+ }
213
+ const built = buildOperation({
214
+ method,
215
+ pathname,
216
+ operation,
217
+ pathParameters,
218
+ slugger,
219
+ });
220
+ // `x-openrpc` expands one operation into one operation per JSON-RPC method
221
+ // (each its own sidebar entry/section). On failure, fall back to the
222
+ // single host operation so the docs still render.
223
+ if (operation['x-openrpc']) {
224
+ try {
225
+ const { operations, examples } = await OpenRpc.expand(built, operation['x-openrpc'], {
226
+ baseUrl: options.baseUrl,
227
+ });
228
+ byName.get(groupName)?.push(...(operations.length > 0 ? operations : [built]));
229
+ // Record the named JSON-RPC examples so the caller can inject them
230
+ // onto the host operation in the spec handed to the interactive
231
+ // client (Scalar selects the right one per "Try" click).
232
+ if (operations.length > 0 && Object.keys(examples).length > 0)
233
+ injections.push({ path: pathname, method, examples });
234
+ }
235
+ catch (error) {
236
+ // Fall back to the single host operation so the docs still render, but
237
+ // surface why the JSON-RPC methods are missing (e.g. a relative
238
+ // `x-openrpc` URL with no base, or an unreachable document).
239
+ console.warn(`[vocs] Failed to expand x-openrpc for ${method.toUpperCase()} ${pathname}: ${error instanceof Error ? error.message : String(error)}`);
240
+ byName.get(groupName)?.push(built);
241
+ }
242
+ }
243
+ else {
244
+ byName.get(groupName)?.push(built);
245
+ }
246
+ }
247
+ }
248
+ const groups = order
249
+ .map((name) => ({
250
+ id: slugger.slug(name),
251
+ name,
252
+ description: descriptions.get(name),
253
+ operations: byName.get(name) ?? [],
254
+ }))
255
+ .filter((group) => group.operations.length > 0);
256
+ return { groups, injections };
257
+ }
258
+ function buildOperation(options) {
259
+ const { method, pathname, operation, pathParameters, slugger } = options;
260
+ const idSource = operation.operationId || `${method}-${pathname}`;
261
+ // Merge path-level parameters with operation-level (operation wins on conflict).
262
+ const merged = new Map();
263
+ for (const parameter of [...pathParameters, ...(operation.parameters ?? [])]) {
264
+ if (!parameter?.name || !parameter.in)
265
+ continue;
266
+ merged.set(`${parameter.in}:${parameter.name}`, parameter);
267
+ }
268
+ return {
269
+ id: slugger.slug(idSource),
270
+ method: method.toUpperCase(),
271
+ path: pathname,
272
+ summary: operation.summary,
273
+ description: operation.description,
274
+ deprecated: operation.deprecated,
275
+ parameters: [...merged.values()].map((parameter) => ({
276
+ name: parameter.name,
277
+ in: parameter.in,
278
+ required: parameter.required,
279
+ deprecated: parameter.deprecated,
280
+ description: parameter.description,
281
+ schema: parameter.schema,
282
+ example: parameter.example,
283
+ })),
284
+ requestBody: buildBody(operation.requestBody),
285
+ responses: buildResponses(operation.responses),
286
+ security: operation.security,
287
+ };
288
+ }
289
+ function buildBody(body) {
290
+ if (!body)
291
+ return undefined;
292
+ return {
293
+ required: body.required,
294
+ description: body.description,
295
+ content: buildContent(body.content),
296
+ };
297
+ }
298
+ function buildResponses(responses) {
299
+ if (!responses)
300
+ return [];
301
+ return Object.entries(responses).map(([status, response]) => ({
302
+ status,
303
+ description: response?.description,
304
+ content: buildContent(response?.content),
305
+ headers: buildHeaders(response?.headers),
306
+ }));
307
+ }
308
+ function buildHeaders(headers) {
309
+ if (!headers)
310
+ return [];
311
+ return Object.entries(headers).map(([name, header]) => ({
312
+ name,
313
+ required: header?.required,
314
+ deprecated: header?.deprecated,
315
+ description: header?.description,
316
+ schema: header?.schema,
317
+ example: header?.example,
318
+ }));
319
+ }
320
+ function buildContent(content) {
321
+ if (!content)
322
+ return [];
323
+ return Object.entries(content).map(([mediaType, value]) => ({
324
+ mediaType,
325
+ schema: value?.schema,
326
+ example: value?.example,
327
+ }));
328
+ }
329
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/internal/openapi/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { Config } from '../config.js';
2
+ import type { SidebarItem } from '../sidebar.js';
3
+ import { type Ir } from './parser.js';
4
+ type Specs = Record<string, Ir>;
5
+ /**
6
+ * Parses all configured OpenAPI specs into IRs, memoized across plugins and
7
+ * Vite environments. Call {@link invalidate} to force a re-parse (e.g. when a
8
+ * local spec file changes).
9
+ */
10
+ export declare function build(config: Config): Promise<Specs>;
11
+ /** Returns the cached specs, or `null` if not yet built. */
12
+ export declare function peek(): Specs | null;
13
+ /** Clears the cache so the next {@link build} re-parses. */
14
+ export declare function invalidate(): void;
15
+ /**
16
+ * Returns the OpenAPI-generated sidebars keyed by mount path, derived from the
17
+ * cached IRs. Empty if specs haven't been built yet or none are configured.
18
+ */
19
+ export declare function sidebars(config?: Config): Record<string, {
20
+ backLink: boolean;
21
+ items: SidebarItem<true>[];
22
+ }>;
23
+ /**
24
+ * Merges OpenAPI-generated sidebars into a user's `sidebar` config.
25
+ *
26
+ * Returns the original config unchanged when no OpenAPI sidebars exist.
27
+ * Array-form sidebars are converted to path-keyed form (under `/`) so the
28
+ * OpenAPI section can be scoped to its own mount path.
29
+ *
30
+ * Per-entry `sidebar.top` / `sidebar.bottom` items (links to consumer guide
31
+ * pages mounted under the same path) are prepended/appended around the
32
+ * generated items. Never mutates inputs.
33
+ */
34
+ export declare function mergeSidebar(config: Config): Config;
35
+ export {};
36
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/internal/openapi/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,KAAK,EAAE,EAAS,MAAM,aAAa,CAAA;AAG5C,KAAK,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;AAK/B;;;;GAIG;AACH,wBAAsB,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAc1D;AAED,4DAA4D;AAC5D,wBAAgB,IAAI,IAAI,KAAK,GAAG,IAAI,CAEnC;AAED,4DAA4D;AAC5D,wBAAgB,UAAU,IAAI,IAAI,CAGjC;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CACtB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAAC,MAAM,EAAE;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,CAAA;CAAE,CAAC,CAQnE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAmBnD"}
@@ -0,0 +1,79 @@
1
+ import { parse } from './parser.js';
2
+ import * as Sidebar from './sidebar.js';
3
+ let cache = null;
4
+ let building = null;
5
+ /**
6
+ * Parses all configured OpenAPI specs into IRs, memoized across plugins and
7
+ * Vite environments. Call {@link invalidate} to force a re-parse (e.g. when a
8
+ * local spec file changes).
9
+ */
10
+ export async function build(config) {
11
+ if (cache)
12
+ return cache;
13
+ if (building)
14
+ return building;
15
+ building = (async () => {
16
+ const next = {};
17
+ for (const entry of config.openapi ?? [])
18
+ next[entry.path] = await parse(entry, { rootDir: config.rootDir });
19
+ cache = next;
20
+ building = null;
21
+ return next;
22
+ })();
23
+ return building;
24
+ }
25
+ /** Returns the cached specs, or `null` if not yet built. */
26
+ export function peek() {
27
+ return cache;
28
+ }
29
+ /** Clears the cache so the next {@link build} re-parses. */
30
+ export function invalidate() {
31
+ cache = null;
32
+ building = null;
33
+ }
34
+ /**
35
+ * Returns the OpenAPI-generated sidebars keyed by mount path, derived from the
36
+ * cached IRs. Empty if specs haven't been built yet or none are configured.
37
+ */
38
+ export function sidebars(config) {
39
+ const result = {};
40
+ if (!cache)
41
+ return result;
42
+ for (const [path, ir] of Object.entries(cache)) {
43
+ const collapsed = config?.openapi?.find((entry) => entry.path === path)?.sidebar?.collapsed;
44
+ result[path] = { backLink: true, items: Sidebar.toSidebar(ir, { collapsed }) };
45
+ }
46
+ return result;
47
+ }
48
+ /**
49
+ * Merges OpenAPI-generated sidebars into a user's `sidebar` config.
50
+ *
51
+ * Returns the original config unchanged when no OpenAPI sidebars exist.
52
+ * Array-form sidebars are converted to path-keyed form (under `/`) so the
53
+ * OpenAPI section can be scoped to its own mount path.
54
+ *
55
+ * Per-entry `sidebar.top` / `sidebar.bottom` items (links to consumer guide
56
+ * pages mounted under the same path) are prepended/appended around the
57
+ * generated items. Never mutates inputs.
58
+ */
59
+ export function mergeSidebar(config) {
60
+ const generated = sidebars(config);
61
+ if (Object.keys(generated).length === 0)
62
+ return config;
63
+ const userSidebar = config.sidebar;
64
+ let merged;
65
+ if (!userSidebar)
66
+ merged = {};
67
+ else if (Array.isArray(userSidebar))
68
+ merged = { '/': userSidebar };
69
+ else
70
+ merged = { ...userSidebar };
71
+ for (const [path, sidebar] of Object.entries(generated)) {
72
+ const entry = config.openapi?.find((candidate) => candidate.path === path);
73
+ const top = entry?.sidebar?.top ?? [];
74
+ const bottom = entry?.sidebar?.bottom ?? [];
75
+ merged[path] = { ...sidebar, items: [...top, ...sidebar.items, ...bottom] };
76
+ }
77
+ return { ...config, sidebar: merged };
78
+ }
79
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/internal/openapi/registry.ts"],"names":[],"mappings":"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"}