zudoku 0.3.0-dev.5 → 0.3.0-dev.50

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 (483) hide show
  1. package/dist/app/App.d.ts +1 -2
  2. package/dist/app/App.js +1 -28
  3. package/dist/app/App.js.map +1 -1
  4. package/dist/app/demo.d.ts +2 -0
  5. package/dist/app/demo.js +27 -0
  6. package/dist/app/demo.js.map +1 -0
  7. package/dist/app/entry.client.d.ts +2 -0
  8. package/dist/app/entry.client.js +35 -0
  9. package/dist/app/entry.client.js.map +1 -0
  10. package/dist/app/entry.server.d.ts +12 -0
  11. package/dist/app/entry.server.js +104 -0
  12. package/dist/app/entry.server.js.map +1 -0
  13. package/dist/app/main.d.ts +6 -1
  14. package/dist/app/main.js +54 -12
  15. package/dist/app/main.js.map +1 -1
  16. package/dist/app/standalone.d.ts +2 -0
  17. package/dist/app/standalone.js +32 -0
  18. package/dist/app/standalone.js.map +1 -0
  19. package/dist/app/tailwind.d.ts +1 -1
  20. package/dist/app/tailwind.js +0 -4
  21. package/dist/app/tailwind.js.map +1 -1
  22. package/dist/app/zudoku-manifest.d.ts +1 -0
  23. package/dist/app/zudoku-manifest.js +20 -0
  24. package/dist/app/zudoku-manifest.js.map +1 -0
  25. package/dist/cli/cmds/dev.js +5 -0
  26. package/dist/cli/cmds/dev.js.map +1 -1
  27. package/dist/cli/dev/handler.d.ts +1 -0
  28. package/dist/cli/dev/handler.js +3 -1
  29. package/dist/cli/dev/handler.js.map +1 -1
  30. package/dist/config/config.d.ts +5 -39
  31. package/dist/config/validators/validate.d.ts +799 -2
  32. package/dist/config/validators/validate.js +134 -1
  33. package/dist/config/validators/validate.js.map +1 -1
  34. package/dist/internal.d.ts +1 -0
  35. package/dist/internal.js +2 -0
  36. package/dist/internal.js.map +1 -0
  37. package/dist/lib/authentication/Callback.js +1 -1
  38. package/dist/lib/authentication/Callback.js.map +1 -1
  39. package/dist/lib/authentication/authentication.d.ts +2 -2
  40. package/dist/lib/authentication/hook.d.ts +1 -0
  41. package/dist/lib/authentication/hook.js +1 -0
  42. package/dist/lib/authentication/hook.js.map +1 -1
  43. package/dist/lib/authentication/providers/auth0.js +1 -0
  44. package/dist/lib/authentication/providers/auth0.js.map +1 -1
  45. package/dist/lib/authentication/providers/clerk.js +4 -0
  46. package/dist/lib/authentication/providers/clerk.js.map +1 -1
  47. package/dist/lib/authentication/providers/openid.d.ts +1 -1
  48. package/dist/lib/authentication/providers/openid.js +2 -0
  49. package/dist/lib/authentication/providers/openid.js.map +1 -1
  50. package/dist/lib/authentication/state.d.ts +1 -0
  51. package/dist/lib/authentication/state.js +1 -0
  52. package/dist/lib/authentication/state.js.map +1 -1
  53. package/dist/lib/components/Bootstrap.d.ts +12 -0
  54. package/dist/lib/components/Bootstrap.js +9 -0
  55. package/dist/lib/components/Bootstrap.js.map +1 -0
  56. package/dist/lib/components/DevPortal.d.ts +4 -19
  57. package/dist/lib/components/DevPortal.js +17 -12
  58. package/dist/lib/components/DevPortal.js.map +1 -1
  59. package/dist/lib/components/ErrorPage.d.ts +6 -0
  60. package/dist/lib/components/ErrorPage.js +9 -0
  61. package/dist/lib/components/ErrorPage.js.map +1 -0
  62. package/dist/lib/components/Header.js +3 -3
  63. package/dist/lib/components/Header.js.map +1 -1
  64. package/dist/lib/components/Heading.d.ts +9 -4
  65. package/dist/lib/components/Heading.js +17 -2
  66. package/dist/lib/components/Heading.js.map +1 -1
  67. package/dist/lib/components/InlineCode.d.ts +5 -0
  68. package/dist/lib/components/InlineCode.js +4 -0
  69. package/dist/lib/components/InlineCode.js.map +1 -0
  70. package/dist/lib/components/Layout.js +3 -2
  71. package/dist/lib/components/Layout.js.map +1 -1
  72. package/dist/lib/components/NotFoundPage.d.ts +1 -0
  73. package/dist/lib/components/NotFoundPage.js +12 -0
  74. package/dist/lib/components/NotFoundPage.js.map +1 -0
  75. package/dist/lib/components/SyntaxHighlight.d.ts +3 -2
  76. package/dist/lib/components/SyntaxHighlight.js +21 -19
  77. package/dist/lib/components/SyntaxHighlight.js.map +1 -1
  78. package/dist/lib/components/TopNavigation.d.ts +1 -1
  79. package/dist/lib/components/TopNavigation.js +4 -0
  80. package/dist/lib/components/TopNavigation.js.map +1 -1
  81. package/dist/lib/components/context/DevPortalProvider.d.ts +1 -1
  82. package/dist/lib/components/context/DevPortalProvider.js +2 -2
  83. package/dist/lib/components/context/DevPortalProvider.js.map +1 -1
  84. package/dist/lib/components/index.d.ts +28 -3
  85. package/dist/lib/components/index.js +17 -3
  86. package/dist/lib/components/index.js.map +1 -1
  87. package/dist/lib/core/DevPortalContext.d.ts +36 -6
  88. package/dist/lib/core/DevPortalContext.js +9 -6
  89. package/dist/lib/core/DevPortalContext.js.map +1 -1
  90. package/dist/lib/core/plugins.d.ts +7 -4
  91. package/dist/lib/core/plugins.js +1 -0
  92. package/dist/lib/core/plugins.js.map +1 -1
  93. package/dist/lib/errors/ErrorAlert.d.ts +3 -0
  94. package/dist/lib/errors/ErrorAlert.js +8 -0
  95. package/dist/lib/errors/ErrorAlert.js.map +1 -0
  96. package/dist/lib/errors/RouterError.d.ts +1 -0
  97. package/dist/lib/errors/RouterError.js +12 -0
  98. package/dist/lib/errors/RouterError.js.map +1 -0
  99. package/dist/lib/errors/ServerError.d.ts +3 -0
  100. package/dist/lib/errors/ServerError.js +6 -0
  101. package/dist/lib/errors/ServerError.js.map +1 -0
  102. package/dist/lib/errors/TopLevelError.d.ts +2 -0
  103. package/dist/lib/errors/TopLevelError.js +7 -0
  104. package/dist/lib/errors/TopLevelError.js.map +1 -0
  105. package/dist/lib/oas/graphql/index.js +1 -1
  106. package/dist/lib/oas/graphql/index.js.map +1 -1
  107. package/dist/lib/oas/parser/index.d.ts +1 -1
  108. package/dist/lib/oas/parser/index.js +38 -12
  109. package/dist/lib/oas/parser/index.js.map +1 -1
  110. package/dist/lib/plugins/api-keys/CreateApiKey.d.ts +4 -0
  111. package/dist/lib/plugins/{api-key → api-keys}/CreateApiKey.js +1 -1
  112. package/dist/lib/plugins/api-keys/CreateApiKey.js.map +1 -0
  113. package/dist/lib/plugins/api-keys/SettingsApiKeys.d.ts +4 -0
  114. package/dist/lib/plugins/api-keys/SettingsApiKeys.js +39 -0
  115. package/dist/lib/plugins/api-keys/SettingsApiKeys.js.map +1 -0
  116. package/dist/lib/plugins/{api-key → api-keys}/index.d.ts +2 -3
  117. package/dist/lib/plugins/{api-key → api-keys}/index.js +15 -4
  118. package/dist/lib/plugins/api-keys/index.js.map +1 -0
  119. package/dist/lib/plugins/markdown/MdxPage.d.ts +3 -2
  120. package/dist/lib/plugins/markdown/MdxPage.js +7 -6
  121. package/dist/lib/plugins/markdown/MdxPage.js.map +1 -1
  122. package/dist/lib/plugins/markdown/Toc.js +1 -1
  123. package/dist/lib/plugins/markdown/Toc.js.map +1 -1
  124. package/dist/lib/plugins/markdown/generateRoutes.d.ts +3 -3
  125. package/dist/lib/plugins/markdown/generateRoutes.js +4 -4
  126. package/dist/lib/plugins/markdown/generateRoutes.js.map +1 -1
  127. package/dist/lib/plugins/markdown/index.d.ts +4 -1
  128. package/dist/lib/plugins/markdown/index.js +3 -7
  129. package/dist/lib/plugins/markdown/index.js.map +1 -1
  130. package/dist/lib/plugins/openapi/OperationList.js +16 -5
  131. package/dist/lib/plugins/openapi/OperationList.js.map +1 -1
  132. package/dist/lib/plugins/openapi/OperationListItem.js +10 -5
  133. package/dist/lib/plugins/openapi/OperationListItem.js.map +1 -1
  134. package/dist/lib/plugins/openapi/ParameterList.js +1 -1
  135. package/dist/lib/plugins/openapi/ParameterList.js.map +1 -1
  136. package/dist/lib/plugins/openapi/ParameterListItem.js +1 -1
  137. package/dist/lib/plugins/openapi/ParameterListItem.js.map +1 -1
  138. package/dist/lib/plugins/openapi/{MakeRequest.d.ts → PlaygroundDialogWrapper.d.ts} +1 -1
  139. package/dist/lib/plugins/openapi/{MakeRequest.js → PlaygroundDialogWrapper.js} +5 -5
  140. package/dist/lib/plugins/openapi/PlaygroundDialogWrapper.js.map +1 -0
  141. package/dist/lib/plugins/openapi/RequestBodySidecarBox.js +1 -9
  142. package/dist/lib/plugins/openapi/RequestBodySidecarBox.js.map +1 -1
  143. package/dist/lib/plugins/openapi/ResponsesSidecarBox.js +1 -1
  144. package/dist/lib/plugins/openapi/ResponsesSidecarBox.js.map +1 -1
  145. package/dist/lib/plugins/openapi/Route.d.ts +6 -0
  146. package/dist/lib/plugins/openapi/Route.js +8 -0
  147. package/dist/lib/plugins/openapi/Route.js.map +1 -0
  148. package/dist/lib/plugins/openapi/SchemaListView.js +6 -27
  149. package/dist/lib/plugins/openapi/SchemaListView.js.map +1 -1
  150. package/dist/lib/plugins/openapi/SchemaListViewItem.d.ts +7 -0
  151. package/dist/lib/plugins/openapi/SchemaListViewItem.js +16 -0
  152. package/dist/lib/plugins/openapi/SchemaListViewItem.js.map +1 -0
  153. package/dist/lib/plugins/openapi/SchemaListViewItemGroup.d.ts +8 -0
  154. package/dist/lib/plugins/openapi/SchemaListViewItemGroup.js +17 -0
  155. package/dist/lib/plugins/openapi/SchemaListViewItemGroup.js.map +1 -0
  156. package/dist/lib/plugins/openapi/Sidecar.js +10 -8
  157. package/dist/lib/plugins/openapi/Sidecar.js.map +1 -1
  158. package/dist/lib/plugins/openapi/{Select.d.ts → SimpleSelect.d.ts} +3 -2
  159. package/dist/lib/plugins/openapi/SimpleSelect.js +5 -0
  160. package/dist/lib/plugins/openapi/SimpleSelect.js.map +1 -0
  161. package/dist/lib/plugins/openapi/client/createMemoryClient.d.ts +12 -0
  162. package/dist/lib/plugins/openapi/client/createMemoryClient.js +46 -0
  163. package/dist/lib/plugins/openapi/client/createMemoryClient.js.map +1 -0
  164. package/dist/lib/plugins/openapi/client/createServer.d.ts +4 -0
  165. package/dist/lib/plugins/openapi/client/createServer.js +30 -0
  166. package/dist/lib/plugins/openapi/client/createServer.js.map +1 -0
  167. package/dist/lib/plugins/openapi/client/createWorkerClient.d.ts +10 -0
  168. package/dist/lib/plugins/openapi/{worker/createSharedWorkerClient.js → client/createWorkerClient.js} +15 -2
  169. package/dist/lib/plugins/openapi/client/createWorkerClient.js.map +1 -0
  170. package/dist/lib/plugins/openapi/client/interfaces.d.ts +4 -0
  171. package/dist/lib/plugins/openapi/client/interfaces.js +2 -0
  172. package/dist/lib/plugins/openapi/client/interfaces.js.map +1 -0
  173. package/dist/lib/plugins/openapi/{worker → client}/worker.js +2 -2
  174. package/dist/lib/plugins/openapi/client/worker.js.map +1 -0
  175. package/dist/lib/plugins/openapi/context.d.ts +5 -0
  176. package/dist/lib/plugins/openapi/context.js +11 -0
  177. package/dist/lib/plugins/openapi/context.js.map +1 -0
  178. package/dist/lib/plugins/openapi/index.d.ts +4 -18
  179. package/dist/lib/plugins/openapi/index.js +35 -20
  180. package/dist/lib/plugins/openapi/index.js.map +1 -1
  181. package/dist/lib/plugins/openapi/interfaces.d.ts +15 -0
  182. package/dist/lib/plugins/openapi/interfaces.js +2 -0
  183. package/dist/lib/plugins/openapi/interfaces.js.map +1 -0
  184. package/dist/lib/plugins/openapi/playground/Headers.d.ts +2 -3
  185. package/dist/lib/plugins/openapi/playground/Headers.js +16 -6
  186. package/dist/lib/plugins/openapi/playground/Headers.js.map +1 -1
  187. package/dist/lib/plugins/openapi/playground/PathParams.d.ts +1 -1
  188. package/dist/lib/plugins/openapi/playground/Playground.d.ts +4 -3
  189. package/dist/lib/plugins/openapi/playground/Playground.js +8 -12
  190. package/dist/lib/plugins/openapi/playground/Playground.js.map +1 -1
  191. package/dist/lib/plugins/openapi/playground/PlaygroundDialog.d.ts +3 -0
  192. package/dist/lib/plugins/openapi/playground/PlaygroundDialog.js +10 -0
  193. package/dist/lib/plugins/openapi/playground/PlaygroundDialog.js.map +1 -0
  194. package/dist/lib/plugins/openapi/playground/QueryParams.d.ts +1 -1
  195. package/dist/lib/plugins/openapi/playground/QueryParams.js +2 -1
  196. package/dist/lib/plugins/openapi/playground/QueryParams.js.map +1 -1
  197. package/dist/lib/plugins/openapi/playground/createUrl.d.ts +1 -1
  198. package/dist/lib/plugins/openapi/util/prose.d.ts +1 -0
  199. package/dist/lib/plugins/openapi/util/prose.js +4 -0
  200. package/dist/lib/plugins/openapi/util/prose.js.map +1 -0
  201. package/dist/lib/plugins/openapi-worker.d.ts +1 -1
  202. package/dist/lib/plugins/openapi-worker.js +1 -1
  203. package/dist/lib/plugins/openapi-worker.js.map +1 -1
  204. package/dist/lib/plugins/redirect/index.d.ts +0 -1
  205. package/dist/lib/plugins/redirect/index.js +3 -4
  206. package/dist/lib/plugins/redirect/index.js.map +1 -1
  207. package/dist/lib/ui/Callout.js +2 -2
  208. package/dist/lib/ui/Callout.js.map +1 -1
  209. package/dist/lib/ui/button-variants.d.ts +1 -1
  210. package/dist/lib/util/MdxComponents.d.ts +2 -2
  211. package/dist/lib/util/MdxComponents.js +6 -4
  212. package/dist/lib/util/MdxComponents.js.map +1 -1
  213. package/dist/lib/util/groupBy.d.ts +1 -6
  214. package/dist/lib/util/groupBy.js +10 -8
  215. package/dist/lib/util/groupBy.js.map +1 -1
  216. package/dist/lib/util/logInit.d.ts +1 -0
  217. package/dist/lib/util/logInit.js +9 -0
  218. package/dist/lib/util/logInit.js.map +1 -0
  219. package/dist/lib/util/objectEntries.d.ts +4 -0
  220. package/dist/lib/util/objectEntries.js +2 -0
  221. package/dist/lib/util/objectEntries.js.map +1 -0
  222. package/dist/lib/util/renderIf.d.ts +1 -0
  223. package/dist/lib/util/renderIf.js +2 -0
  224. package/dist/lib/util/renderIf.js.map +1 -0
  225. package/dist/vite/build.js +26 -6
  226. package/dist/vite/build.js.map +1 -1
  227. package/dist/vite/config.d.ts +13 -12
  228. package/dist/vite/config.js +100 -55
  229. package/dist/vite/config.js.map +1 -1
  230. package/dist/vite/config.test.js +7 -4
  231. package/dist/vite/config.test.js.map +1 -1
  232. package/dist/vite/dev-server.d.ts +2 -1
  233. package/dist/vite/dev-server.js +43 -15
  234. package/dist/vite/dev-server.js.map +1 -1
  235. package/dist/vite/html.js +18 -5
  236. package/dist/vite/html.js.map +1 -1
  237. package/dist/vite/plugin-api-keys.js +7 -8
  238. package/dist/vite/plugin-api-keys.js.map +1 -1
  239. package/dist/vite/plugin-api.js +9 -20
  240. package/dist/vite/plugin-api.js.map +1 -1
  241. package/dist/vite/plugin-auth.js +5 -6
  242. package/dist/vite/plugin-auth.js.map +1 -1
  243. package/dist/vite/plugin-component.js +4 -2
  244. package/dist/vite/plugin-component.js.map +1 -1
  245. package/dist/vite/plugin-config.d.ts +0 -2
  246. package/dist/vite/plugin-config.js +2 -13
  247. package/dist/vite/plugin-config.js.map +1 -1
  248. package/dist/vite/plugin-custom-css.d.ts +6 -0
  249. package/dist/vite/plugin-custom-css.js +55 -0
  250. package/dist/vite/plugin-custom-css.js.map +1 -0
  251. package/dist/vite/plugin-docs.js +15 -5
  252. package/dist/vite/plugin-docs.js.map +1 -1
  253. package/dist/vite/plugin-docs.test.js +1 -1
  254. package/dist/vite/plugin-docs.test.js.map +1 -1
  255. package/dist/vite/plugin-mdx.d.ts +3 -1
  256. package/dist/vite/plugin-mdx.js +5 -5
  257. package/dist/vite/plugin-mdx.js.map +1 -1
  258. package/dist/vite/plugin-metadata.js +1 -1
  259. package/dist/vite/plugin-metadata.js.map +1 -1
  260. package/dist/vite/plugin-redirect.js +10 -10
  261. package/dist/vite/plugin-redirect.js.map +1 -1
  262. package/dist/vite/plugin.js +3 -5
  263. package/dist/vite/plugin.js.map +1 -1
  264. package/dist/vite/prerender.d.ts +17 -0
  265. package/dist/vite/prerender.js +55 -0
  266. package/dist/vite/prerender.js.map +1 -0
  267. package/lib/AnchorLink-CZUp-F0P.js +705 -0
  268. package/lib/AnchorLink-CZUp-F0P.js.map +1 -0
  269. package/lib/DevPortalProvider-Do9oJqme.js +1081 -0
  270. package/lib/DevPortalProvider-Do9oJqme.js.map +1 -0
  271. package/lib/Markdown-Dbzrtopg.js +15030 -0
  272. package/lib/Markdown-Dbzrtopg.js.map +1 -0
  273. package/lib/MdxPage-JvboTsbK.js +190 -0
  274. package/lib/MdxPage-JvboTsbK.js.map +1 -0
  275. package/lib/OperationList-DGdaixGa.js +5562 -0
  276. package/lib/OperationList-DGdaixGa.js.map +1 -0
  277. package/lib/Route-C1LyvITr.js +13 -0
  278. package/lib/Route-C1LyvITr.js.map +1 -0
  279. package/lib/Select-DHm1jDdS.js +4571 -0
  280. package/lib/Select-DHm1jDdS.js.map +1 -0
  281. package/lib/Spinner-BSk0ImmP.js +182 -0
  282. package/lib/Spinner-BSk0ImmP.js.map +1 -0
  283. package/lib/_commonjsHelpers-BVfed4GL.js +29 -0
  284. package/lib/_commonjsHelpers-BVfed4GL.js.map +1 -0
  285. package/lib/assets/index-BPdJm2ty.js +1 -0
  286. package/lib/assets/index-BPdJm2ty.js.map +1 -0
  287. package/lib/assets/{worker-BCcpCNJ7.js → worker-BjPv-hjP.js} +10742 -10318
  288. package/lib/assets/worker-BjPv-hjP.js.map +1 -0
  289. package/lib/context-_fYfJFgk.js +14 -0
  290. package/lib/context-_fYfJFgk.js.map +1 -0
  291. package/lib/hook-DCYGmylw.js +77 -0
  292. package/lib/hook-DCYGmylw.js.map +1 -0
  293. package/lib/index-CXXn0D4E.js +412 -0
  294. package/lib/index-CXXn0D4E.js.map +1 -0
  295. package/lib/index-DSZ4Cj5q.js +725 -0
  296. package/lib/index-DSZ4Cj5q.js.map +1 -0
  297. package/lib/index-pI9JkN46.js +4765 -0
  298. package/lib/index-pI9JkN46.js.map +1 -0
  299. package/lib/jsx-runtime-CJZJivg2.js +1526 -0
  300. package/lib/jsx-runtime-CJZJivg2.js.map +1 -0
  301. package/lib/prism-bash.min-DadFsM4Z.js +1 -0
  302. package/lib/prism-bash.min-DadFsM4Z.js.map +1 -0
  303. package/lib/prism-csharp.min-Yizuc34Y.js +35 -0
  304. package/lib/prism-csharp.min-Yizuc34Y.js.map +1 -0
  305. package/lib/prism-java.min-d5iT_mOd.js +1 -0
  306. package/lib/prism-java.min-d5iT_mOd.js.map +1 -0
  307. package/lib/prism-json.min-B1GJqK1k.js +1 -0
  308. package/lib/prism-json.min-B1GJqK1k.js.map +1 -0
  309. package/lib/prism-markup-templating-DZrrEs0A.js +1 -0
  310. package/lib/prism-markup-templating-DZrrEs0A.js.map +1 -0
  311. package/lib/prism-objectivec.min-BXSWqpJJ.js +2 -0
  312. package/lib/prism-objectivec.min-BXSWqpJJ.js.map +1 -0
  313. package/lib/prism-php.min-o7FpoMP_.js +1 -0
  314. package/lib/prism-php.min-o7FpoMP_.js.map +1 -0
  315. package/lib/prism-ruby.min-C7LwcKyz.js +1 -0
  316. package/lib/prism-ruby.min-C7LwcKyz.js.map +1 -0
  317. package/lib/router-CBw2vqJE.js +2973 -0
  318. package/lib/router-CBw2vqJE.js.map +1 -0
  319. package/lib/slugify-CiPVjteN.js +28 -0
  320. package/lib/slugify-CiPVjteN.js.map +1 -0
  321. package/lib/state-D36MLDHk.js +289 -0
  322. package/lib/state-D36MLDHk.js.map +1 -0
  323. package/lib/urql-DMlBWUKL.js +1 -0
  324. package/lib/urql-DMlBWUKL.js.map +1 -0
  325. package/lib/util-_jwUlTBU.js +41 -0
  326. package/lib/util-_jwUlTBU.js.map +1 -0
  327. package/lib/zudoku.auth-auth0.js +3 -1
  328. package/lib/zudoku.auth-auth0.js.map +1 -0
  329. package/lib/zudoku.auth-clerk.js +11 -8
  330. package/lib/zudoku.auth-clerk.js.map +1 -0
  331. package/lib/zudoku.auth-openid.js +8 -4
  332. package/lib/zudoku.auth-openid.js.map +1 -0
  333. package/lib/zudoku.components.js +804 -447
  334. package/lib/zudoku.components.js.map +1 -0
  335. package/lib/zudoku.openapi-worker.js +15032 -146
  336. package/lib/zudoku.openapi-worker.js.map +1 -0
  337. package/lib/zudoku.plugin-api-keys.js +302 -0
  338. package/lib/zudoku.plugin-api-keys.js.map +1 -0
  339. package/lib/zudoku.plugin-markdown.js +49 -0
  340. package/lib/zudoku.plugin-markdown.js.map +1 -0
  341. package/lib/zudoku.plugin-openapi.js +10 -0
  342. package/lib/zudoku.plugin-openapi.js.map +1 -0
  343. package/lib/zudoku.plugin-redirect.js +11 -0
  344. package/lib/zudoku.plugin-redirect.js.map +1 -0
  345. package/package.json +37 -15
  346. package/src/app/App.tsx +0 -40
  347. package/src/app/demo-cdn.html +26 -0
  348. package/src/app/demo.html +18 -0
  349. package/src/app/demo.tsx +40 -0
  350. package/src/app/entry.client.tsx +47 -0
  351. package/src/app/entry.server.tsx +158 -0
  352. package/src/app/main.css +74 -0
  353. package/src/app/main.tsx +71 -15
  354. package/src/app/standalone.html +20 -0
  355. package/src/app/standalone.tsx +46 -0
  356. package/src/app/tailwind.ts +2 -6
  357. package/src/app/zudoku-manifest.ts +22 -0
  358. package/src/lib/authentication/Callback.tsx +1 -1
  359. package/src/lib/authentication/authentication.ts +2 -5
  360. package/src/lib/authentication/hook.ts +1 -0
  361. package/src/lib/authentication/providers/auth0.tsx +1 -0
  362. package/src/lib/authentication/providers/clerk.tsx +3 -0
  363. package/src/lib/authentication/providers/openid.tsx +3 -1
  364. package/src/lib/authentication/state.ts +2 -0
  365. package/src/lib/components/Bootstrap.tsx +37 -0
  366. package/src/lib/components/DevPortal.tsx +41 -56
  367. package/src/lib/components/ErrorPage.tsx +28 -0
  368. package/src/lib/components/Header.tsx +13 -7
  369. package/src/lib/components/Heading.tsx +26 -7
  370. package/src/lib/components/InlineCode.tsx +19 -0
  371. package/src/lib/components/Layout.tsx +9 -7
  372. package/src/lib/components/NotFoundPage.tsx +39 -0
  373. package/src/lib/components/SyntaxHighlight.tsx +27 -19
  374. package/src/lib/components/TopNavigation.tsx +5 -0
  375. package/src/lib/components/context/DevPortalProvider.ts +2 -2
  376. package/src/lib/components/index.ts +21 -3
  377. package/src/lib/core/DevPortalContext.ts +46 -17
  378. package/src/lib/core/plugins.ts +10 -5
  379. package/src/lib/errors/ErrorAlert.tsx +21 -0
  380. package/src/lib/errors/RouterError.tsx +13 -0
  381. package/src/lib/errors/ServerError.tsx +5 -0
  382. package/src/lib/errors/TopLevelError.tsx +8 -0
  383. package/src/lib/oas/graphql/index.ts +2 -2
  384. package/src/lib/oas/parser/index.ts +41 -20
  385. package/src/lib/plugins/{api-key → api-keys}/CreateApiKey.tsx +2 -8
  386. package/src/lib/plugins/api-keys/SettingsApiKeys.tsx +139 -0
  387. package/src/lib/plugins/{api-key → api-keys}/index.tsx +22 -9
  388. package/src/lib/plugins/markdown/MdxPage.tsx +51 -34
  389. package/src/lib/plugins/markdown/Toc.tsx +1 -1
  390. package/src/lib/plugins/markdown/generateRoutes.tsx +16 -6
  391. package/src/lib/plugins/markdown/index.tsx +10 -7
  392. package/src/lib/plugins/openapi/OperationList.tsx +40 -4
  393. package/src/lib/plugins/openapi/OperationListItem.tsx +69 -42
  394. package/src/lib/plugins/openapi/ParameterList.tsx +1 -1
  395. package/src/lib/plugins/openapi/ParameterListItem.tsx +3 -4
  396. package/src/lib/plugins/openapi/{MakeRequest.tsx → PlaygroundDialogWrapper.tsx} +4 -4
  397. package/src/lib/plugins/openapi/RequestBodySidecarBox.tsx +2 -16
  398. package/src/lib/plugins/openapi/ResponsesSidecarBox.tsx +3 -1
  399. package/src/lib/plugins/openapi/Route.tsx +21 -0
  400. package/src/lib/plugins/openapi/SchemaListView.tsx +23 -192
  401. package/src/lib/plugins/openapi/SchemaListViewItem.tsx +110 -0
  402. package/src/lib/plugins/openapi/SchemaListViewItemGroup.tsx +63 -0
  403. package/src/lib/plugins/openapi/Sidecar.tsx +15 -10
  404. package/src/lib/plugins/openapi/{Select.tsx → SimpleSelect.tsx} +6 -3
  405. package/src/lib/plugins/openapi/client/createMemoryClient.ts +56 -0
  406. package/src/lib/plugins/openapi/client/createServer.ts +33 -0
  407. package/src/lib/plugins/openapi/{worker/createSharedWorkerClient.ts → client/createWorkerClient.ts} +21 -2
  408. package/src/lib/plugins/openapi/client/interfaces.ts +5 -0
  409. package/src/lib/plugins/openapi/{worker → client}/worker.ts +3 -3
  410. package/src/lib/plugins/openapi/context.tsx +16 -0
  411. package/src/lib/plugins/openapi/index.tsx +59 -52
  412. package/src/lib/plugins/openapi/interfaces.ts +9 -0
  413. package/src/lib/plugins/openapi/playground/Headers.tsx +60 -33
  414. package/src/lib/plugins/openapi/playground/PathParams.tsx +1 -1
  415. package/src/lib/plugins/openapi/playground/Playground.tsx +158 -193
  416. package/src/lib/plugins/openapi/playground/PlaygroundDialog.tsx +34 -0
  417. package/src/lib/plugins/openapi/playground/QueryParams.tsx +7 -2
  418. package/src/lib/plugins/openapi/playground/createUrl.ts +1 -1
  419. package/src/lib/plugins/openapi/util/prose.ts +7 -0
  420. package/src/lib/plugins/openapi-worker.ts +1 -1
  421. package/src/lib/plugins/redirect/index.tsx +3 -4
  422. package/src/lib/ui/Callout.tsx +4 -4
  423. package/src/lib/util/MdxComponents.tsx +6 -14
  424. package/src/lib/util/groupBy.ts +7 -12
  425. package/src/lib/util/logInit.ts +9 -0
  426. package/src/lib/util/objectEntries.ts +5 -0
  427. package/src/lib/util/renderIf.ts +4 -0
  428. package/dist/lib/components/Link.d.ts +0 -1
  429. package/dist/lib/components/Link.js +0 -2
  430. package/dist/lib/components/Link.js.map +0 -1
  431. package/dist/lib/components/Router.d.ts +0 -4
  432. package/dist/lib/components/Router.js +0 -20
  433. package/dist/lib/components/Router.js.map +0 -1
  434. package/dist/lib/core/helmet.d.ts +0 -4
  435. package/dist/lib/core/helmet.js +0 -5
  436. package/dist/lib/core/helmet.js.map +0 -1
  437. package/dist/lib/core/icons.d.ts +0 -1
  438. package/dist/lib/core/icons.js +0 -2
  439. package/dist/lib/core/icons.js.map +0 -1
  440. package/dist/lib/core/router.d.ts +0 -1
  441. package/dist/lib/core/router.js +0 -2
  442. package/dist/lib/core/router.js.map +0 -1
  443. package/dist/lib/plugins/api-key/CreateApiKey.d.ts +0 -5
  444. package/dist/lib/plugins/api-key/CreateApiKey.js.map +0 -1
  445. package/dist/lib/plugins/api-key/SettingsApiKeys.d.ts +0 -5
  446. package/dist/lib/plugins/api-key/SettingsApiKeys.js +0 -37
  447. package/dist/lib/plugins/api-key/SettingsApiKeys.js.map +0 -1
  448. package/dist/lib/plugins/api-key/index.js.map +0 -1
  449. package/dist/lib/plugins/index.d.ts +0 -4
  450. package/dist/lib/plugins/index.js +0 -5
  451. package/dist/lib/plugins/index.js.map +0 -1
  452. package/dist/lib/plugins/openapi/MakeRequest.js.map +0 -1
  453. package/dist/lib/plugins/openapi/Select.js +0 -5
  454. package/dist/lib/plugins/openapi/Select.js.map +0 -1
  455. package/dist/lib/plugins/openapi/worker/createSharedWorkerClient.d.ts +0 -5
  456. package/dist/lib/plugins/openapi/worker/createSharedWorkerClient.js.map +0 -1
  457. package/dist/lib/plugins/openapi/worker/shared-worker.d.ts +0 -1
  458. package/dist/lib/plugins/openapi/worker/shared-worker.js +0 -6
  459. package/dist/lib/plugins/openapi/worker/shared-worker.js.map +0 -1
  460. package/dist/lib/plugins/openapi/worker/worker.js.map +0 -1
  461. package/dist/vite/common.d.ts +0 -1
  462. package/dist/vite/common.js +0 -5
  463. package/dist/vite/common.js.map +0 -1
  464. package/dist/vite/plugin-html.d.ts +0 -3
  465. package/dist/vite/plugin-html.js +0 -47
  466. package/dist/vite/plugin-html.js.map +0 -1
  467. package/dist/vite/plugin-openapi-worker.d.ts +0 -4
  468. package/dist/vite/plugin-openapi-worker.js +0 -28
  469. package/dist/vite/plugin-openapi-worker.js.map +0 -1
  470. package/lib/Spinner-DWHrSHMP.js +0 -8411
  471. package/lib/clerk-Wslx_mPo.js +0 -19685
  472. package/lib/index-DNx3xWa2.js +0 -3461
  473. package/lib/state-DfftBQ9X.js +0 -312
  474. package/lib/zudoku.plugins.js +0 -19873
  475. package/src/lib/components/Link.tsx +0 -1
  476. package/src/lib/components/Router.tsx +0 -28
  477. package/src/lib/core/helmet.ts +0 -5
  478. package/src/lib/core/icons.tsx +0 -1
  479. package/src/lib/core/router.tsx +0 -1
  480. package/src/lib/plugins/api-key/SettingsApiKeys.tsx +0 -122
  481. package/src/lib/plugins/index.ts +0 -4
  482. package/src/lib/plugins/openapi/worker/shared-worker.ts +0 -5
  483. /package/dist/lib/plugins/openapi/{worker → client}/worker.d.ts +0 -0
@@ -0,0 +1,110 @@
1
+ import * as Collapsible from "@radix-ui/react-collapsible";
2
+ import { ListPlusIcon } from "lucide-react";
3
+ import { Markdown } from "../../components/Markdown.js";
4
+ import { SchemaObject } from "../../oas/parser/index.js";
5
+ import { Button } from "../../ui/Button.js";
6
+ import { cn } from "../../util/cn.js";
7
+ import { SchemaListView } from "./SchemaListView.js";
8
+
9
+ export const SchemaListViewItem = ({
10
+ propertyName,
11
+ property,
12
+ nestingLevel,
13
+ isRequired,
14
+ }: {
15
+ propertyName: string;
16
+ isRequired: boolean;
17
+ property: SchemaObject;
18
+ nestingLevel: number;
19
+ }) => {
20
+ return (
21
+ <div
22
+ key={propertyName}
23
+ className={cn(
24
+ "p-4 bg-border/20 hover:bg-border/30 flex gap-1 flex-col text-sm",
25
+ property.deprecated && "opacity-50",
26
+ )}
27
+ >
28
+ <div className="flex items-center gap-2 relative">
29
+ <code>
30
+ {propertyName} {property.title}
31
+ </code>
32
+
33
+ {property.type && (
34
+ <span className="text-muted-foreground">{property.type}</span>
35
+ )}
36
+ {property.deprecated && (
37
+ <span className="text-muted-foreground">Deprecated</span>
38
+ )}
39
+ {!isRequired && (
40
+ <span className="py-px px-1.5 font-medium border border-border rounded-lg">
41
+ optional {property.required}
42
+ </span>
43
+ )}
44
+ </div>
45
+ {property.description && (
46
+ <Markdown
47
+ content={property.description}
48
+ className="text-sm leading-normal line-clamp-4 "
49
+ />
50
+ )}
51
+
52
+ {property.enum && (
53
+ <span className="text-sm text-muted-foreground flex gap-1 flex-wrap items-center">
54
+ <span>Possible values</span>
55
+ {/* Make values unique, some schemas have duplicates */}
56
+ {[...new Set(property.enum.filter((value) => value))]
57
+ .map((value) => (
58
+ <span
59
+ key={value}
60
+ className="font-mono text-xs border-border border bg-muted rounded px-1"
61
+ >
62
+ {value}
63
+ </span>
64
+ ))
65
+ .slice(0, 4)}
66
+ {property.enum.length > 4 && (
67
+ <span className="font-mono text-xs border-border border bg-muted rounded px-1">
68
+ ...
69
+ </span>
70
+ )}
71
+ </span>
72
+ )}
73
+
74
+ {(property.type === "object" &&
75
+ (property.properties?.length ??
76
+ Object.entries(property.additionalProperties ?? {}).length > 0)) ||
77
+ (property.type === "array" && property.items.type === "object") ? (
78
+ <Collapsible.Root className="CollapsibleRoot" defaultOpen={false}>
79
+ <Collapsible.Trigger asChild>
80
+ <Button variant="ghost" size="sm">
81
+ Show nested fields
82
+ <ListPlusIcon size={18} className="ml-1.5" />
83
+ </Button>
84
+ </Collapsible.Trigger>
85
+
86
+ <Collapsible.Content>
87
+ {property.type === "object" && (
88
+ <div className="mt-2.5">
89
+ <SchemaListView
90
+ schema={property}
91
+ level={nestingLevel + 1}
92
+ defaultOpen
93
+ />
94
+ </div>
95
+ )}
96
+ {property.type === "array" && property.items.type === "object" && (
97
+ <div className="mt-2.5">
98
+ <SchemaListView
99
+ schema={property.items}
100
+ defaultOpen
101
+ level={nestingLevel + 1}
102
+ />
103
+ </div>
104
+ )}
105
+ </Collapsible.Content>
106
+ </Collapsible.Root>
107
+ ) : null}
108
+ </div>
109
+ );
110
+ };
@@ -0,0 +1,63 @@
1
+ import * as Collapsible from "@radix-ui/react-collapsible";
2
+ import { useState } from "react";
3
+ import { SchemaObject } from "../../oas/parser/index.js";
4
+ import { cn } from "../../util/cn.js";
5
+ import { SchemaListViewItem } from "./SchemaListViewItem.js";
6
+
7
+ export const SchemaListViewItemGroup = ({
8
+ group,
9
+ properties,
10
+ nestingLevel,
11
+ required,
12
+ defaultOpen = false,
13
+ }: {
14
+ group: "optional" | "required" | "deprecated";
15
+ defaultOpen?: boolean;
16
+ properties: [string, SchemaObject][];
17
+ nestingLevel: number;
18
+ required: string[];
19
+ }) => {
20
+ const notCollapsible =
21
+ defaultOpen ||
22
+ group === "required" ||
23
+ properties.length === 1 ||
24
+ nestingLevel === 0;
25
+
26
+ const [open, setOpen] = useState(notCollapsible);
27
+
28
+ if (properties.length === 0) {
29
+ return;
30
+ }
31
+
32
+ return (
33
+ <Collapsible.Root
34
+ className="CollapsibleRoot"
35
+ open={open}
36
+ onOpenChange={setOpen}
37
+ >
38
+ {!open && (
39
+ <Collapsible.Trigger
40
+ className={cn(
41
+ "py-2 hover:bg-muted w-full",
42
+ group === "optional" && "font-semibold",
43
+ group === "deprecated" && "text-muted-foreground",
44
+ )}
45
+ >
46
+ {properties.length} {group} fields
47
+ </Collapsible.Trigger>
48
+ )}
49
+
50
+ <Collapsible.Content className="divide-y divide-border">
51
+ {properties.map(([propertyName, property]) => (
52
+ <SchemaListViewItem
53
+ key={propertyName}
54
+ property={property}
55
+ propertyName={propertyName}
56
+ nestingLevel={nestingLevel}
57
+ isRequired={required.includes(propertyName)}
58
+ />
59
+ ))}
60
+ </Collapsible.Content>
61
+ </Collapsible.Root>
62
+ );
63
+ };
@@ -1,16 +1,17 @@
1
1
  import { HTTPSnippet } from "@zudoku/httpsnippet";
2
- import { Fragment, useMemo, useState } from "react";
2
+ import { Fragment, useMemo } from "react";
3
+ import { useSearchParams } from "react-router-dom";
3
4
  import { SyntaxHighlight } from "../../components/SyntaxHighlight.js";
4
5
  import type { SchemaObject } from "../../oas/parser/index.js";
5
6
  import { cn } from "../../util/cn.js";
6
7
  import { ColorizedParam } from "./ColorizedParam.js";
7
- import { MakeRequest } from "./MakeRequest.js";
8
8
  import { MethodTextColorMap } from "./MethodBadge.js";
9
9
  import type { OperationListItemResult } from "./OperationList.js";
10
+ import { PlaygroundDialogWrapper } from "./PlaygroundDialogWrapper.js";
10
11
  import { RequestBodySidecarBox } from "./RequestBodySidecarBox.js";
11
12
  import { ResponsesSidecarBox } from "./ResponsesSidecarBox.js";
12
- import { Select } from "./Select.js";
13
13
  import * as SidecarBox from "./SidecarBox.js";
14
+ import { SimpleSelect } from "./SimpleSelect.js";
14
15
  import { generateSchemaExample } from "./util/generateSchemaExample.js";
15
16
 
16
17
  const getConverted = (snippet: HTTPSnippet, option: string) => {
@@ -64,7 +65,10 @@ export const Sidecar = ({
64
65
  }) => {
65
66
  const methodTextColor =
66
67
  MethodTextColorMap[operation.method as keyof typeof MethodTextColorMap];
67
- const [option, setOption] = useState("curl");
68
+
69
+ const [searchParams, setSearchParams] = useSearchParams();
70
+ const selectedLang = searchParams.get("lang") ?? "shell";
71
+
68
72
  const requestBodyContent = operation.requestBody?.content;
69
73
 
70
74
  const path = operation.path.split("/").map((part) => (
@@ -105,8 +109,8 @@ export const Sidecar = ({
105
109
  } as never, // 👈 never touch this
106
110
  );
107
111
 
108
- return getConverted(snippet, option);
109
- }, [option, operation.method, operation.path, requestBodyContent]);
112
+ return getConverted(snippet, selectedLang);
113
+ }, [selectedLang, operation.method, operation.path, requestBodyContent]);
110
114
 
111
115
  return (
112
116
  <aside className="flex flex-col overflow-hidden sticky top-[--scroll-padding] gap-4">
@@ -120,9 +124,10 @@ export const Sidecar = ({
120
124
  {path}
121
125
  </span>
122
126
  <div className="flex gap-2 items-center">
123
- <Select
127
+ <SimpleSelect
124
128
  className="self-start"
125
- onChange={(e) => setOption(e.target.value)}
129
+ value={selectedLang}
130
+ onChange={(e) => setSearchParams({ lang: e.target.value })}
126
131
  options={[
127
132
  { value: "shell", label: "cURL" },
128
133
  { value: "js", label: "Javascript" },
@@ -137,12 +142,12 @@ export const Sidecar = ({
137
142
  { value: "swift", label: "Swift" },
138
143
  ]}
139
144
  />
140
- <MakeRequest operation={operation} />
145
+ <PlaygroundDialogWrapper operation={operation} />
141
146
  </div>
142
147
  </SidecarBox.Head>
143
148
  <SidecarBox.Body>
144
149
  <SyntaxHighlight
145
- language={option}
150
+ language={selectedLang}
146
151
  noBackground
147
152
  className="text-xs"
148
153
  code={code}
@@ -1,13 +1,15 @@
1
+ import { ChevronsUpDownIcon } from "lucide-react";
1
2
  import type { ChangeEventHandler } from "react";
2
- import { ChevronsUpDownIcon } from "../../core/icons.js";
3
3
  import { cn } from "../../util/cn.js";
4
4
 
5
- export const Select = ({
5
+ export const SimpleSelect = ({
6
+ value,
6
7
  onChange,
7
8
  className,
8
9
  options,
9
10
  }: {
10
- onChange?: ChangeEventHandler<HTMLSelectElement>;
11
+ value: string;
12
+ onChange: ChangeEventHandler<HTMLSelectElement>;
11
13
  className?: string;
12
14
  options: {
13
15
  value: string;
@@ -20,6 +22,7 @@ export const Select = ({
20
22
  "row-start-1 col-start-1 border border-input text-foreground px-2 py-1 pe-6",
21
23
  "rounded-md appearance-none bg-zinc-50 hover:bg-white dark:bg-zinc-800 hover:dark:bg-zinc-800/75",
22
24
  )}
25
+ value={value}
23
26
  onChange={onChange}
24
27
  >
25
28
  {options.map((option) => (
@@ -0,0 +1,56 @@
1
+ /* eslint-disable no-console */
2
+ import {
3
+ cacheExchange,
4
+ Client,
5
+ fetchExchange,
6
+ mapExchange,
7
+ } from "../util/urql.js";
8
+ import { createServer } from "./createServer.js";
9
+ import { CreateClientFunction } from "./interfaces.js";
10
+
11
+ export type WorkerGraphQLMessage = { id: string; body: string };
12
+
13
+ const localServer = createServer();
14
+
15
+ /**
16
+ * Creates an in memory Client that does not use Workers. This allows
17
+ * developers to run the simple standalone version of zudoku using the CDN
18
+ * hosted scripts. Worker's cannot be loaded cross domain so in this case
19
+ * we sacrifice performance for making it work cross domain.
20
+ */
21
+ export const createClient: CreateClientFunction = () => {
22
+ return new Client({
23
+ url: "/__z/graphql",
24
+ // Custom fetch to send the GraphQL request to the worker and convert the response back to a `Response` object
25
+ fetch: async (req, init) => {
26
+ if (!init?.body) throw new Error("No body");
27
+ const response = await localServer.fetch(
28
+ new Request("http://localhost/__z/graphql", {
29
+ method: "POST",
30
+ body: init.body,
31
+ headers: {
32
+ "Content-Type": "application/json",
33
+ },
34
+ }),
35
+ );
36
+ return response;
37
+ // port.postMessage({
38
+ // id: e.data.id,
39
+ // body: await response.text(),
40
+ // } satisfies WorkerGraphQLMessage);
41
+ },
42
+ exchanges: [
43
+ cacheExchange,
44
+ mapExchange({
45
+ onError(error, operation) {
46
+ console.error(error);
47
+ console.groupCollapsed("Operation info");
48
+ console.log("body", operation.query.loc?.source.body.trim());
49
+ console.log("variables", operation.variables);
50
+ console.groupEnd();
51
+ },
52
+ }),
53
+ fetchExchange,
54
+ ],
55
+ });
56
+ };
@@ -0,0 +1,33 @@
1
+ import { useLogger } from "@envelop/core";
2
+ import { createGraphQLServer } from "../../../oas/graphql/index.js";
3
+
4
+ const map = new Map<string, number>();
5
+
6
+ /**
7
+ * Creates the GraphQL server
8
+ */
9
+ export const createServer = () =>
10
+ createGraphQLServer({
11
+ plugins: [
12
+ // eslint-disable-next-line react-hooks/rules-of-hooks
13
+ useLogger({
14
+ logFn: (eventName, { args }) => {
15
+ if (import.meta.env.PROD) return;
16
+
17
+ if (eventName.endsWith("-start")) {
18
+ map.set(`${eventName}-${args.operationName}`, performance.now());
19
+ } else if (eventName.endsWith("-end")) {
20
+ const startEvent = eventName.replace("-end", "-start");
21
+ const start = map.get(`${startEvent}-${args.operationName}`);
22
+ if (start) {
23
+ // eslint-disable-next-line no-console
24
+ console.log(
25
+ `${args.operationName} query took ${performance.now() - start}ms`,
26
+ );
27
+ map.delete(`${startEvent}-${args.operationName}`);
28
+ }
29
+ }
30
+ },
31
+ }),
32
+ ],
33
+ });
@@ -7,15 +7,34 @@ import {
7
7
  fetchExchange,
8
8
  mapExchange,
9
9
  } from "../util/urql.js";
10
+ import { createClient as createMemoryClient } from "./createMemoryClient.js";
11
+ import { CreateClientFunction } from "./interfaces.js";
10
12
 
11
13
  export type WorkerGraphQLMessage = { id: string; body: string };
12
-
13
14
  const ulid = monotonicFactory();
14
- export const createSharedWorkerClient = () => {
15
+
16
+ /**
17
+ * This loads the client from a worker and uses mess port to send requests
18
+ * and responses between the main thread and the worker.
19
+ */
20
+ export const createClient: CreateClientFunction = ({
21
+ useMemoryClient,
22
+ }: {
23
+ useMemoryClient: boolean;
24
+ }) => {
25
+ if (useMemoryClient || typeof SharedWorker === "undefined") {
26
+ return createMemoryClient({ useMemoryClient });
27
+ }
28
+ // NOTE: This URL needs to be inline with the SharedWorker otherwse
29
+ // vite build does not recognize the worker file as a module.
15
30
  const worker = new SharedWorker(new URL("./worker.ts", import.meta.url), {
16
31
  type: "module",
17
32
  });
18
33
 
34
+ worker.onerror = (e) => {
35
+ console.error(e);
36
+ };
37
+
19
38
  worker.port.start();
20
39
 
21
40
  const [waitFor, notify] = createWaitForNotify<string>();
@@ -0,0 +1,5 @@
1
+ import { Client } from "urql";
2
+
3
+ export type CreateClientFunction = (config: {
4
+ useMemoryClient: boolean;
5
+ }) => Client;
@@ -1,7 +1,7 @@
1
- import { createGraphQLServer } from "../../../oas/graphql/index.js";
2
- import { type WorkerGraphQLMessage } from "./createSharedWorkerClient.js";
1
+ import { createServer } from "./createServer.js";
2
+ import { type WorkerGraphQLMessage } from "./createWorkerClient.js";
3
3
 
4
- const localServer = createGraphQLServer();
4
+ const localServer = createServer();
5
5
 
6
6
  const worker = self as unknown as SharedWorkerGlobalScope;
7
7
 
@@ -0,0 +1,16 @@
1
+ import { createContext, useContext } from "react";
2
+ import { OasPluginConfig } from "./interfaces.js";
3
+
4
+ const OasContext = createContext<{ config: OasPluginConfig } | undefined>(
5
+ undefined,
6
+ );
7
+
8
+ export const OasConfigProvider = OasContext.Provider;
9
+
10
+ export const useOasConfig = () => {
11
+ const ctx = useContext(OasContext);
12
+ if (!ctx) {
13
+ throw new Error("useOasConfig must be used within a OasConfigProvider");
14
+ }
15
+ return ctx.config;
16
+ };
@@ -1,61 +1,20 @@
1
- import { createContext, useContext } from "react";
1
+ import { matchPath, useRouteError, type RouteObject } from "react-router-dom";
2
2
  import {
3
3
  type DevPortalPlugin,
4
4
  type PluginNavigationCategory,
5
5
  } from "../../core/plugins.js";
6
- import { Outlet, matchPath, type RouteObject } from "../../core/router.js";
7
6
  import { MethodBadge } from "./MethodBadge.js";
8
- import { OperationList } from "./OperationList.js";
9
7
  import { graphql } from "./graphql/index.js";
10
8
  import {
11
- Provider,
12
9
  Client as UrqlClient,
13
10
  cacheExchange,
14
11
  fetchExchange,
15
12
  } from "./util/urql.js";
16
13
 
17
- import { createSharedWorkerClient } from "virtual:zudoku-openapi-worker";
18
- import type { createSharedWorkerClient as createSharedWorkerClientType } from "./worker/createSharedWorkerClient.js";
19
-
20
- const OasContext = createContext<{ config: OasPluginConfig } | undefined>(
21
- undefined,
22
- );
23
-
24
- export const OasConfigProvider = OasContext.Provider;
25
-
26
- export const useOasConfig = () => {
27
- const ctx = useContext(OasContext);
28
- if (!ctx) {
29
- throw new Error("useOasConfig must be used within a OasConfigProvider");
30
- }
31
- return ctx.config;
32
- };
33
-
34
- type OasSource =
35
- | { type: "url"; input: string }
36
- | { type: "yaml"; input: string }
37
- | { type: "json"; input: object };
38
-
39
- export type OasPluginConfig = {
40
- server?: string;
41
- path?: string;
42
- } & OasSource;
43
-
44
- const OasContextProvider = ({
45
- config,
46
- client,
47
- }: {
48
- config: OasPluginConfig;
49
- client: typeof UrqlClient;
50
- }) => {
51
- return (
52
- <Provider value={client}>
53
- <OasConfigProvider value={{ config }}>
54
- <Outlet />
55
- </OasConfigProvider>
56
- </Provider>
57
- );
58
- };
14
+ import { createClient } from "zudoku/openapi-worker";
15
+ import { ErrorPage } from "../../components/ErrorPage.js";
16
+ import { SyntaxHighlight } from "../../components/SyntaxHighlight.js";
17
+ import { OasPluginConfig } from "./interfaces.js";
59
18
 
60
19
  const GetCategoriesQuery = graphql(`
61
20
  query GetCategories($input: JSON!, $type: SchemaType!) {
@@ -77,7 +36,25 @@ const GetCategoriesQuery = graphql(`
77
36
  }
78
37
  `);
79
38
 
80
- export const openApiPlugin = (config: OasPluginConfig): DevPortalPlugin => {
39
+ const OpenApiErrorPage = () => {
40
+ const error = useRouteError();
41
+ const message =
42
+ error instanceof Error ? (
43
+ <SyntaxHighlight code={error.message} />
44
+ ) : (
45
+ "An unknown error occurred"
46
+ );
47
+
48
+ return (
49
+ <ErrorPage category="Error" title="An error occurred" message={message} />
50
+ );
51
+ };
52
+
53
+ type InternalOasPluginConfig = { inMemory?: boolean };
54
+
55
+ export const openApiPlugin = (
56
+ config: OasPluginConfig & InternalOasPluginConfig,
57
+ ): DevPortalPlugin => {
81
58
  const basePath = config.path ?? "/reference";
82
59
 
83
60
  const client = config.server
@@ -85,11 +62,25 @@ export const openApiPlugin = (config: OasPluginConfig): DevPortalPlugin => {
85
62
  url: config.server,
86
63
  exchanges: [cacheExchange, fetchExchange],
87
64
  })
88
- : (createSharedWorkerClient() as ReturnType<
89
- typeof createSharedWorkerClientType
90
- >);
65
+ : createClient({ useMemoryClient: config.inMemory ?? false });
91
66
 
92
67
  return {
68
+ getHead: () => {
69
+ if (config.type === "url") {
70
+ return (
71
+ <link
72
+ rel="preload"
73
+ href={config.input}
74
+ as="fetch"
75
+ crossOrigin="anonymous"
76
+ />
77
+ );
78
+ }
79
+
80
+ if (config.server) {
81
+ return <link rel="preconnect" href={config.server} />;
82
+ }
83
+ },
93
84
  getNavigation: async (path: string) => {
94
85
  if (!matchPath({ path: basePath, end: false }, path)) {
95
86
  return [];
@@ -135,11 +126,27 @@ export const openApiPlugin = (config: OasPluginConfig): DevPortalPlugin => {
135
126
  getRoutes: () =>
136
127
  [
137
128
  {
138
- element: <OasContextProvider config={config} client={client} />,
129
+ async lazy() {
130
+ const { OpenApiRoute } = await import("./Route.js");
131
+ return {
132
+ element: <OpenApiRoute client={client} config={config} />,
133
+ };
134
+ },
135
+ errorElement: <OpenApiErrorPage />,
139
136
  children: [
140
137
  {
141
138
  path: basePath,
142
- children: [{ index: true, element: <OperationList /> }],
139
+ children: [
140
+ {
141
+ index: true,
142
+ async lazy() {
143
+ const { OperationList } = await import(
144
+ "./OperationList.js"
145
+ );
146
+ return { element: <OperationList /> };
147
+ },
148
+ },
149
+ ],
143
150
  },
144
151
  ],
145
152
  },
@@ -0,0 +1,9 @@
1
+ type OasSource =
2
+ | { type: "url"; input: string }
3
+ | { type: "yaml"; input: string }
4
+ | { type: "json"; input: object };
5
+
6
+ export type OasPluginConfig = {
7
+ server?: string;
8
+ path?: string;
9
+ } & OasSource;