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 @@
1
+ {"version":3,"file":"assets.generated.js","sourceRoot":"","sources":["../../../src/server/openapi/assets.generated.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { assets } from './assets.generated.js';
2
+ /** URL path segment under which standalone assets are served. */
3
+ export const assetRoot = '/_vocs/openapi/';
4
+ /** Returns the prebuilt bundle manifest. */
5
+ export function manifest() {
6
+ return assets;
7
+ }
8
+ /**
9
+ * Resolves a request pathname to a bundled asset, matching by the
10
+ * {@link assetRoot} marker so assets resolve regardless of the Hono mount path
11
+ * (e.g. `/docs/_vocs/openapi/client.js` → `client.js`).
12
+ */
13
+ export function match(pathname) {
14
+ const index = pathname.lastIndexOf(assetRoot);
15
+ if (index === -1)
16
+ return undefined;
17
+ const name = pathname.slice(index + assetRoot.length);
18
+ return assets.files[name];
19
+ }
20
+ /** Builds a `Response` for a bundled asset with long-lived caching. */
21
+ export function response(asset) {
22
+ const body = asset.encoding === 'base64'
23
+ ? Uint8Array.from(atob(asset.body), (c) => c.charCodeAt(0))
24
+ : asset.body;
25
+ return new Response(body, {
26
+ headers: {
27
+ 'content-type': asset.type,
28
+ 'cache-control': 'public, max-age=31536000, immutable',
29
+ },
30
+ });
31
+ }
32
+ //# sourceMappingURL=assets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets.js","sourceRoot":"","sources":["../../../src/server/openapi/assets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAwB9C,iEAAiE;AACjE,MAAM,CAAC,MAAM,SAAS,GAAG,iBAAiB,CAAA;AAE1C,4CAA4C;AAC5C,MAAM,UAAU,QAAQ;IACtB,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,KAAK,CAAC,QAAgB;IACpC,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;IAC7C,IAAI,KAAK,KAAK,CAAC,CAAC;QAAE,OAAO,SAAS,CAAA;IAClC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAA;IACrD,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;AAC3B,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,QAAQ,CAAC,KAAgB;IACvC,MAAM,IAAI,GACR,KAAK,CAAC,QAAQ,KAAK,QAAQ;QACzB,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC3D,CAAC,CAAC,KAAK,CAAC,IAAI,CAAA;IAChB,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;QACxB,OAAO,EAAE;YACP,cAAc,EAAE,KAAK,CAAC,IAAI;YAC1B,eAAe,EAAE,qCAAqC;SACvD;KACF,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,103 @@
1
+ import { getRequestListener } from '@hono/node-server';
2
+ import { Hono } from 'hono';
3
+ import type * as OpenApi from '../../internal/openapi/openapi.js';
4
+ /**
5
+ * A standalone OpenAPI reference handler: a Hono app augmented with a Node
6
+ * request `listener` so it can be mounted onto a Hono server (`app.route(...)`),
7
+ * served via the Web-standard `fetch`, or run with `node:http`.
8
+ */
9
+ export type Handler<app extends Hono = Hono> = app & {
10
+ /** Node.js `(req, res)` request listener (for `http.createServer`). */
11
+ listener: ReturnType<typeof getRequestListener>;
12
+ };
13
+ /**
14
+ * Creates a standalone, mountable OpenAPI reference (Scalar-style, rendered
15
+ * entirely client-side by a prebuilt browser bundle shipped inside Vocs).
16
+ *
17
+ * Accepts the same config as a `vocs.config.ts` `openapi[]` entry, except `path`
18
+ * is optional (the mount location is provided by the host server; `path` only
19
+ * seeds generated link bases). Supply `pages` to add `.md`/`.mdx` override/guide
20
+ * content to the sidebar.
21
+ *
22
+ * @example
23
+ * ```ts
24
+ * import { Hono } from 'hono'
25
+ * import { Handler } from 'vocs/server'
26
+ *
27
+ * const app = new Hono()
28
+ * app.route('/docs', Handler.openApi({ spec: 'https://example.com/openapi.json' }))
29
+ * export default app
30
+ * ```
31
+ *
32
+ * @example
33
+ * ```ts
34
+ * // Node.js
35
+ * import * as http from 'node:http'
36
+ * import { Handler } from 'vocs/server'
37
+ *
38
+ * const ref = Handler.openApi({ spec: './openapi.yaml' })
39
+ * http.createServer(ref.listener).listen(3000)
40
+ * ```
41
+ */
42
+ export declare function openApi(config: OpenApi.Config, options?: openApi.Options): Handler;
43
+ export declare namespace openApi {
44
+ type Options = {
45
+ /**
46
+ * Directory file-path specs/pages are resolved against.
47
+ * @default process.cwd()
48
+ */
49
+ rootDir?: string | undefined;
50
+ /**
51
+ * Custom CSS injected into the shell `<head>` as an inline `<style>`, after
52
+ * the design-system stylesheets so it overrides them. Use it to tweak the
53
+ * standalone reference's theme without rebuilding the bundle.
54
+ *
55
+ * - A string of CSS.
56
+ * - `{ file }`: a path to a `.css` file, resolved against `rootDir` and read
57
+ * with `node:fs` (Node only; pass a string on filesystem-less runtimes).
58
+ *
59
+ * @example
60
+ * ```ts
61
+ * Handler.openApi({ spec }, { css: ':root { --vocs-color-accent: #7c3aed }' })
62
+ * ```
63
+ *
64
+ * @example
65
+ * ```ts
66
+ * Handler.openApi({ spec }, { css: { file: './api-theme.css' } })
67
+ * ```
68
+ */
69
+ css?: string | {
70
+ file: string;
71
+ } | undefined;
72
+ /**
73
+ * How to handle requests that don't target one of the reference's own
74
+ * routes (the intro/landing, a group/page, or the asset root).
75
+ *
76
+ * - `'render'` (default): render the HTML shell for any path, so client-side
77
+ * deep links work when the handler owns the whole mount (standalone docs).
78
+ * - `'next'`: call Hono's `next()` so the host app handles the request. Use
79
+ * this when mounting at the host root next to other routes (e.g. a JSON
80
+ * API + JSON `notFound`):
81
+ *
82
+ * @example
83
+ * ```ts
84
+ * app.route('/', Handler.openApi({ spec }, { fallback: 'next' }))
85
+ * ```
86
+ *
87
+ * @default 'render'
88
+ */
89
+ fallback?: 'render' | 'next' | undefined;
90
+ };
91
+ }
92
+ /**
93
+ * Composes multiple handlers onto a single Hono app mounted at `path`
94
+ * (default `/`).
95
+ */
96
+ export declare function compose(handlers: readonly Handler[], options?: compose.Options): Handler;
97
+ export declare namespace compose {
98
+ type Options = {
99
+ /** Mount path for every composed handler. @default "/" */
100
+ path?: string | undefined;
101
+ };
102
+ }
103
+ //# sourceMappingURL=handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/server/openapi/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAK3B,OAAO,KAAK,KAAK,OAAO,MAAM,mCAAmC,CAAA;AAMjE;;;;GAIG;AACH,MAAM,MAAM,OAAO,CAAC,GAAG,SAAS,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG;IACnD,uEAAuE;IACvE,QAAQ,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAA;CAChD,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,GAAE,OAAO,CAAC,OAAY,GAAG,OAAO,CA2FtF;AAED,MAAM,CAAC,OAAO,WAAW,OAAO,CAAC;IAC/B,KAAK,OAAO,GAAG;QACb;;;WAGG;QACH,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC5B;;;;;;;;;;;;;;;;;;WAkBG;QACH,GAAG,CAAC,EAAE,MAAM,GAAG;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,GAAG,SAAS,CAAA;QAC3C;;;;;;;;;;;;;;;;WAgBG;QACH,QAAQ,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAA;KACzC,CAAA;CACF;AA0CD;;;GAGG;AACH,wBAAgB,OAAO,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,EAAE,OAAO,GAAE,OAAO,CAAC,OAAY,GAAG,OAAO,CAK5F;AAED,MAAM,CAAC,OAAO,WAAW,OAAO,CAAC;IAC/B,KAAK,OAAO,GAAG;QACb,0DAA0D;QAC1D,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC1B,CAAA;CACF"}
@@ -0,0 +1,198 @@
1
+ import { getRequestListener } from '@hono/node-server';
2
+ import { Hono } from 'hono';
3
+ import { prefersMarkdown } from '../../internal/markdown-negotiation.js';
4
+ import { inferMount, join, knownRoutes } from '../../internal/openapi/app.js';
5
+ import * as Markdown from '../../internal/openapi/markdown.js';
6
+ import { normalizePath } from '../../internal/openapi/openapi.js';
7
+ import * as Assets from './assets.js';
8
+ import * as Html from './html.js';
9
+ import * as State from './state.js';
10
+ /**
11
+ * Creates a standalone, mountable OpenAPI reference (Scalar-style, rendered
12
+ * entirely client-side by a prebuilt browser bundle shipped inside Vocs).
13
+ *
14
+ * Accepts the same config as a `vocs.config.ts` `openapi[]` entry, except `path`
15
+ * is optional (the mount location is provided by the host server; `path` only
16
+ * seeds generated link bases). Supply `pages` to add `.md`/`.mdx` override/guide
17
+ * content to the sidebar.
18
+ *
19
+ * @example
20
+ * ```ts
21
+ * import { Hono } from 'hono'
22
+ * import { Handler } from 'vocs/server'
23
+ *
24
+ * const app = new Hono()
25
+ * app.route('/docs', Handler.openApi({ spec: 'https://example.com/openapi.json' }))
26
+ * export default app
27
+ * ```
28
+ *
29
+ * @example
30
+ * ```ts
31
+ * // Node.js
32
+ * import * as http from 'node:http'
33
+ * import { Handler } from 'vocs/server'
34
+ *
35
+ * const ref = Handler.openApi({ spec: './openapi.yaml' })
36
+ * http.createServer(ref.listener).listen(3000)
37
+ * ```
38
+ */
39
+ export function openApi(config, options = {}) {
40
+ const app = new Hono();
41
+ // Parse the spec + compile pages once, lazily, and memoize. The first
42
+ // request's origin seeds `baseUrl` so a relative `x-openrpc` URL (e.g.
43
+ // `/openrpc.json`) can be fetched at runtime; the OpenRPC document is
44
+ // host-independent, so reusing the first origin across requests is correct.
45
+ let state;
46
+ const prepare = (baseUrl) => {
47
+ if (!state)
48
+ state = State.prepare(config, { rootDir: options.rootDir, baseUrl });
49
+ return state;
50
+ };
51
+ // Resolve custom CSS once, lazily, and memoize (a `file` read needs `node:fs`,
52
+ // so only touch it when a file is actually configured).
53
+ let css;
54
+ const resolveCss = () => {
55
+ if (!css)
56
+ css = State.resolveCss(options.css, { rootDir: options.rootDir });
57
+ return css;
58
+ };
59
+ app.get('*', async (c, next) => {
60
+ const { pathname, origin } = new URL(c.req.url);
61
+ // Serve a bundled asset if the path targets the asset root.
62
+ const asset = Assets.match(pathname);
63
+ if (asset)
64
+ return Assets.response(asset);
65
+ const payload = await prepare(origin);
66
+ const routes = knownRoutes(payload);
67
+ // Serve the Markdown / agent-facing version of a route: `<route>.md`, any
68
+ // route requested with `Accept: text/markdown`, or an AI/terminal client.
69
+ // Shares the exact negotiation rules of the site `.md` router (Open Graph
70
+ // bots and search engines stay on HTML). Generated routes (overview +
71
+ // categories) win over overrides, and authored guide pages serve their own
72
+ // Markdown.
73
+ const wantsMarkdown = prefersMarkdown({
74
+ pathname,
75
+ userAgent: c.req.header('user-agent'),
76
+ accept: c.req.header('accept'),
77
+ });
78
+ if (wantsMarkdown) {
79
+ const basePathname = pathname.endsWith('.md') ? pathname.slice(0, -3) : pathname;
80
+ const mount = options.fallback === 'next'
81
+ ? mountFromRoutePath(c.req.routePath)
82
+ : inferMount(basePathname, routes);
83
+ const markdown = resolveMarkdown(payload, relativeRoute(basePathname, mount), mount);
84
+ if (markdown)
85
+ return c.text(markdown, 200, { 'content-type': 'text/markdown; charset=utf-8' });
86
+ // Explicit `.md` for an unknown route falls through to the normal handling
87
+ // below (renders the shell, or `next()` in fallback mode).
88
+ }
89
+ // Fallthrough mode: only own the reference's own routes (the intro/landing,
90
+ // each group/page, and the asset root above) and defer everything else to
91
+ // the host app via `next()`. This lets the handler be mounted at the host
92
+ // root (`app.route('/', handler)`) alongside a JSON API and a JSON
93
+ // `notFound` without its catch-all swallowing them. The mount prefix comes
94
+ // from Hono's matched `routePath` (e.g. `/api/*`), so it's exact — unlike
95
+ // suffix inference, an API path like `/api/v1/blocks` is never mistaken for
96
+ // a docs route.
97
+ if (options.fallback === 'next') {
98
+ const mount = mountFromRoutePath(c.req.routePath);
99
+ const relative = (pathname.startsWith(mount) ? pathname.slice(mount.length) : pathname) || '/';
100
+ if (!isKnownRoute(relative, routes))
101
+ return next();
102
+ }
103
+ // Otherwise render the HTML shell (client-side router takes over).
104
+ const manifest = Assets.manifest();
105
+ if (!manifest.built)
106
+ return c.text('[vocs] The standalone OpenAPI bundle has not been built. Run `pnpm build` (or install a published build of `vocs`).', 500);
107
+ // Infer the host mount prefix so asset URLs route back to this handler
108
+ // regardless of where it is mounted (and independent of a trailing slash).
109
+ const mount = options.fallback === 'next'
110
+ ? mountFromRoutePath(c.req.routePath)
111
+ : inferMount(pathname, routes);
112
+ const customCss = await resolveCss();
113
+ // The shell references content-hashed assets, so it must never be cached:
114
+ // a stale shell would point at an old hash (404 after a rebuild), leaving
115
+ // the page rendered but unstyled. Assets themselves stay `immutable`.
116
+ return c.html(Html.render(payload, manifest, mount, customCss), 200, {
117
+ 'cache-control': 'no-store, must-revalidate',
118
+ });
119
+ });
120
+ return withListener(app);
121
+ }
122
+ /** Derives the host mount prefix from Hono's matched `routePath` (`/api/*` → `/api`, `/*` → ``). */
123
+ function mountFromRoutePath(routePath) {
124
+ return (routePath ?? '').replace(/\*+$/, '').replace(/\/+$/, '');
125
+ }
126
+ /** Whether a mount-relative path is one of the reference's known section routes. */
127
+ function isKnownRoute(relativePath, routes) {
128
+ const path = stripTrailingSlash(relativePath) || '/';
129
+ return routes.some((route) => (stripTrailingSlash(route) || '/') === path);
130
+ }
131
+ /** Strips the host mount prefix from a pathname, yielding a section route. */
132
+ function relativeRoute(pathname, mount) {
133
+ const path = pathname.startsWith(mount) ? pathname.slice(mount.length) : pathname;
134
+ return stripTrailingSlash(path) || '/';
135
+ }
136
+ /**
137
+ * Resolves the Markdown for a section route: the generated overview (intro), a
138
+ * generated category page, or an authored guide page's own Markdown. Returns
139
+ * `null` for unknown routes. `mount` is the live host prefix, prepended to the
140
+ * overview's endpoint links so they resolve back to this handler.
141
+ */
142
+ function resolveMarkdown(payload, relative, mount) {
143
+ const base = payload.ir.path || '/';
144
+ const linkBase = `${mount}${base === '/' ? '' : base}`;
145
+ const introRoute = base === '/' ? '/' : normalizePath(base);
146
+ if (relative === introRoute)
147
+ return Markdown.renderOverview(payload.ir, linkBase);
148
+ for (const group of payload.ir.groups)
149
+ if (relative === join(base, `/${group.id}`))
150
+ return Markdown.renderGroup(payload.ir, group);
151
+ for (const page of payload.pages)
152
+ if (page.markdown && relative === join(base, page.path))
153
+ return page.markdown;
154
+ return null;
155
+ }
156
+ function stripTrailingSlash(value) {
157
+ return value.length > 1 && value.endsWith('/') ? value.slice(0, -1) : value;
158
+ }
159
+ /**
160
+ * Composes multiple handlers onto a single Hono app mounted at `path`
161
+ * (default `/`).
162
+ */
163
+ export function compose(handlers, options = {}) {
164
+ const app = new Hono();
165
+ for (const handler of handlers)
166
+ app.route(options.path ?? '/', handler);
167
+ app.notFound(() => new Response('Not Found', { status: 404 }));
168
+ return withListener(app);
169
+ }
170
+ /**
171
+ * Augments a Hono app with a Node request `listener`.
172
+ *
173
+ * The listener is created lazily on first access. `getRequestListener`
174
+ * (from `@hono/node-server`) overwrites the global `Request`/`Response` with
175
+ * non-configurable Node polyfills the first time it runs; on edge runtimes
176
+ * (Cloudflare Workers, Deno, Bun) that would replace the native `Response` and
177
+ * make every `c.json()`/`c.html()` produce a value the runtime rejects. Edge
178
+ * consumers only ever call `.fetch()` (or mount via `app.route(...)`) and never
179
+ * touch `.listener`, so deferring its creation keeps the global `Response`
180
+ * native there, while Node consumers (`http.createServer(ref.listener)`) get the
181
+ * same behavior as before on first access.
182
+ */
183
+ function withListener(app) {
184
+ let listener;
185
+ // Define the getter directly (not via `Object.assign`, which would invoke it
186
+ // immediately while copying the property and defeat the laziness).
187
+ Object.defineProperty(app, 'listener', {
188
+ configurable: true,
189
+ enumerable: true,
190
+ get() {
191
+ if (!listener)
192
+ listener = getRequestListener((request) => app.fetch(request));
193
+ return listener;
194
+ },
195
+ });
196
+ return app;
197
+ }
198
+ //# sourceMappingURL=handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/server/openapi/handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=handler.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.test.d.ts","sourceRoot":"","sources":["../../../src/server/openapi/handler.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,203 @@
1
+ import * as fs from 'node:fs/promises';
2
+ import * as os from 'node:os';
3
+ import * as path from 'node:path';
4
+ import { Hono } from 'hono';
5
+ import { describe, expect, test } from 'vitest';
6
+ import { openApi } from './handler.js';
7
+ const spec = {
8
+ openapi: '3.1.0',
9
+ info: { title: 'Demo API', version: '1.0.0', description: 'A demo.' },
10
+ servers: [{ url: 'https://api.example.com' }],
11
+ tags: [{ name: 'Pets', description: 'Pet operations' }],
12
+ paths: {
13
+ '/pets': {
14
+ get: {
15
+ operationId: 'listPets',
16
+ summary: 'List pets',
17
+ tags: ['Pets'],
18
+ responses: { '200': { description: 'OK' } },
19
+ },
20
+ },
21
+ },
22
+ };
23
+ describe('Handler.openApi', () => {
24
+ test('serves the HTML shell with embedded payload', async () => {
25
+ const ref = openApi({ spec });
26
+ const response = await ref.fetch(new Request('http://localhost/'));
27
+ expect(response.status).toBe(200);
28
+ expect(response.headers.get('content-type')).toContain('text/html');
29
+ const html = await response.text();
30
+ expect(html).toContain('id="vocs-openapi-data"');
31
+ expect(html).toContain('Demo API');
32
+ // Asset references are absolute, prefixed by the inferred mount (root here).
33
+ expect(html).toContain('/_vocs/openapi/');
34
+ // Embedded payload includes the parsed group.
35
+ expect(html).toContain('"Pets"');
36
+ expect(html).toContain('listPets');
37
+ });
38
+ test('serves the prebuilt client bundle', async () => {
39
+ const ref = openApi({ spec });
40
+ const response = await ref.fetch(new Request('http://localhost/_vocs/openapi/client.js'));
41
+ expect(response.status).toBe(200);
42
+ expect(response.headers.get('content-type')).toContain('javascript');
43
+ expect(response.headers.get('cache-control')).toContain('immutable');
44
+ const body = await response.text();
45
+ expect(body.length).toBeGreaterThan(0);
46
+ });
47
+ test('serves assets regardless of mount prefix', async () => {
48
+ const ref = openApi({ spec });
49
+ const response = await ref.fetch(new Request('http://localhost/docs/_vocs/openapi/client.js'));
50
+ expect(response.status).toBe(200);
51
+ expect(response.headers.get('content-type')).toContain('javascript');
52
+ });
53
+ test('exposes a Node request listener', () => {
54
+ const ref = openApi({ spec });
55
+ expect(typeof ref.listener).toBe('function');
56
+ });
57
+ test('accepts an already-started spec promise', async () => {
58
+ const ref = openApi({ spec: Promise.resolve(spec) });
59
+ const response = await ref.fetch(new Request('http://localhost/'));
60
+ expect(response.status).toBe(200);
61
+ expect(await response.text()).toContain('listPets');
62
+ });
63
+ describe('custom css', () => {
64
+ test('injects an inline CSS string into the shell head, after the bundle styles', async () => {
65
+ const ref = openApi({ spec }, { css: ':root { --vocs-color-accent: #7c3aed }' });
66
+ const html = await (await ref.fetch(new Request('http://localhost/'))).text();
67
+ expect(html).toContain('<style>:root { --vocs-color-accent: #7c3aed }</style>');
68
+ // Custom CSS comes after the design-system stylesheets so it wins.
69
+ expect(html.indexOf('rel="stylesheet"')).toBeLessThan(html.indexOf('<style>'));
70
+ });
71
+ test('omits the inline <style> when no css is configured', async () => {
72
+ const ref = openApi({ spec });
73
+ const html = await (await ref.fetch(new Request('http://localhost/'))).text();
74
+ expect(html).not.toContain('<style>');
75
+ });
76
+ test('reads css from a { file }', async () => {
77
+ const dir = await fs.mkdtemp(path.join(os.tmpdir(), 'vocs-openapi-css-'));
78
+ await fs.writeFile(path.join(dir, 'theme.css'), '.body { color: red }');
79
+ const ref = openApi({ spec }, { css: { file: 'theme.css' }, rootDir: dir });
80
+ const html = await (await ref.fetch(new Request('http://localhost/'))).text();
81
+ expect(html).toContain('<style>.body { color: red }</style>');
82
+ await fs.rm(dir, { recursive: true, force: true });
83
+ });
84
+ test('neutralizes a closing </style> tag without corrupting CSS', async () => {
85
+ const ref = openApi({ spec }, { css: 'a > b { color: red } /* </style><script>x</script> */' });
86
+ const html = await (await ref.fetch(new Request('http://localhost/'))).text();
87
+ // `>` combinators are preserved. The closing tags are escaped so they
88
+ // can't break out of the `<style>` block (the opening `<script>` is inert
89
+ // as CSS text once `</style>` can't terminate the block).
90
+ expect(html).toContain('a > b { color: red }');
91
+ expect(html).toContain('<\\/style>');
92
+ expect(html).toContain('<\\/script>');
93
+ expect(html).not.toContain('</style><script>');
94
+ });
95
+ });
96
+ describe("fallback: 'next'", () => {
97
+ test('renders the reference at the host root, falls through elsewhere', async () => {
98
+ const app = new Hono();
99
+ app.get('/v1/blocks', (c) => c.json({ who: 'api' }));
100
+ app.route('/', openApi({ spec }, { fallback: 'next' }));
101
+ app.notFound((c) => c.json({ error: 'not_found' }, 404));
102
+ // Reference landing page is owned by the handler.
103
+ const landing = await app.request('http://localhost/');
104
+ expect(landing.status).toBe(200);
105
+ expect(landing.headers.get('content-type')).toContain('text/html');
106
+ // Assets resolve back to the root mount.
107
+ expect(await landing.text()).toContain('/_vocs/openapi/');
108
+ // A known section route (the "Pets" group) renders the shell too.
109
+ const group = await app.request('http://localhost/pets');
110
+ expect(group.status).toBe(200);
111
+ expect(group.headers.get('content-type')).toContain('text/html');
112
+ // Bundled assets are served by the handler.
113
+ const asset = await app.request('http://localhost/_vocs/openapi/client.js');
114
+ expect(asset.status).toBe(200);
115
+ expect(asset.headers.get('content-type')).toContain('javascript');
116
+ // The host API route wins.
117
+ const api = await app.request('http://localhost/v1/blocks');
118
+ expect(api.status).toBe(200);
119
+ expect(await api.json()).toEqual({ who: 'api' });
120
+ // An unrelated path falls through to the host notFound (not the shell).
121
+ const missing = await app.request('http://localhost/v1/missing');
122
+ expect(missing.status).toBe(404);
123
+ expect(await missing.json()).toEqual({ error: 'not_found' });
124
+ });
125
+ test('derives the mount prefix from the host basePath', async () => {
126
+ const app = new Hono().basePath('/api');
127
+ app.route('/', openApi({ spec }, { fallback: 'next' }));
128
+ const landing = await app.request('http://localhost/api/');
129
+ expect(landing.status).toBe(200);
130
+ // Asset URLs are prefixed with the host basePath so they route back here.
131
+ expect(await landing.text()).toContain('/api/_vocs/openapi/');
132
+ const asset = await app.request('http://localhost/api/_vocs/openapi/client.js');
133
+ expect(asset.status).toBe(200);
134
+ });
135
+ });
136
+ describe('markdown', () => {
137
+ test('serves the generated overview at `<intro>.md`', async () => {
138
+ const ref = openApi({ spec, path: '/api' });
139
+ const response = await ref.fetch(new Request('http://localhost/api.md'));
140
+ expect(response.status).toBe(200);
141
+ expect(response.headers.get('content-type')).toContain('text/markdown');
142
+ const md = await response.text();
143
+ expect(md).toContain('# Demo API');
144
+ expect(md).toContain('## Endpoints');
145
+ expect(md).toContain('- [`GET /pets`](/api/pets#listpets): List pets');
146
+ });
147
+ test('serves a generated category at `<group>.md`', async () => {
148
+ const ref = openApi({ spec, path: '/api' });
149
+ const response = await ref.fetch(new Request('http://localhost/api/pets.md'));
150
+ expect(response.status).toBe(200);
151
+ expect(response.headers.get('content-type')).toContain('text/markdown');
152
+ const md = await response.text();
153
+ expect(md).toContain('## List pets');
154
+ expect(md).toContain('`GET /pets`');
155
+ });
156
+ test('honors `Accept: text/markdown` without a `.md` suffix', async () => {
157
+ const ref = openApi({ spec, path: '/api' });
158
+ const response = await ref.fetch(new Request('http://localhost/api', { headers: { accept: 'text/markdown' } }));
159
+ expect(response.status).toBe(200);
160
+ expect(response.headers.get('content-type')).toContain('text/markdown');
161
+ expect(await response.text()).toContain('# Demo API');
162
+ });
163
+ test('serves an authored guide page as its own Markdown', async () => {
164
+ const ref = openApi({
165
+ spec,
166
+ path: '/api',
167
+ pages: [{ path: '/guide', content: '---\ntitle: Guide\n---\n# Guide\n\nHello there.' }],
168
+ });
169
+ const response = await ref.fetch(new Request('http://localhost/api/guide.md'));
170
+ expect(response.status).toBe(200);
171
+ expect(response.headers.get('content-type')).toContain('text/markdown');
172
+ const md = await response.text();
173
+ expect(md).toContain('# Guide');
174
+ expect(md).toContain('Hello there.');
175
+ });
176
+ test('serves Markdown to terminal clients (curl) without a `.md` suffix', async () => {
177
+ const ref = openApi({ spec, path: '/api' });
178
+ const response = await ref.fetch(new Request('http://localhost/api', { headers: { 'user-agent': 'curl/8.4.0' } }));
179
+ expect(response.status).toBe(200);
180
+ expect(response.headers.get('content-type')).toContain('text/markdown');
181
+ expect(await response.text()).toContain('# Demo API');
182
+ });
183
+ test('serves Markdown to AI agents without a `.md` suffix', async () => {
184
+ const ref = openApi({ spec, path: '/api' });
185
+ const response = await ref.fetch(new Request('http://localhost/api', { headers: { 'user-agent': 'ChatGPT-User/2.0' } }));
186
+ expect(response.status).toBe(200);
187
+ expect(response.headers.get('content-type')).toContain('text/markdown');
188
+ });
189
+ test('does not serve Markdown to search engines without a `.md` suffix', async () => {
190
+ const ref = openApi({ spec, path: '/api' });
191
+ const response = await ref.fetch(new Request('http://localhost/api', { headers: { 'user-agent': 'Googlebot/2.1' } }));
192
+ expect(response.headers.get('content-type') ?? '').not.toContain('text/markdown');
193
+ });
194
+ test('prefixes overview links with the live host mount', async () => {
195
+ const app = new Hono().basePath('/docs');
196
+ app.route('/', openApi({ spec, path: '/api' }, { fallback: 'next' }));
197
+ const response = await app.request('http://localhost/docs/api.md');
198
+ expect(response.status).toBe(200);
199
+ expect(await response.text()).toContain('](/docs/api/pets#listpets)');
200
+ });
201
+ });
202
+ });
203
+ //# sourceMappingURL=handler.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.test.js","sourceRoot":"","sources":["../../../src/server/openapi/handler.test.ts"],"names":[],"mappings":"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"}