@lukoweb/apitogo 0.1.24 → 0.1.37

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 (477) hide show
  1. package/README.md +92 -0
  2. package/cli.js +13 -13
  3. package/client.d.ts +8 -8
  4. package/dist/cli/cli.js +1117 -624
  5. package/dist/declarations/config/config.d.ts +4 -0
  6. package/dist/declarations/config/loader.d.ts +2 -0
  7. package/dist/declarations/config/resolve-modules.d.ts +34 -0
  8. package/dist/declarations/config/validators/InputNavigationSchema.d.ts +7 -7
  9. package/dist/declarations/config/validators/ModulesSchema.d.ts +417 -0
  10. package/dist/declarations/config/validators/ZudokuConfig.d.ts +123 -4
  11. package/dist/declarations/index.d.ts +3 -1
  12. package/dist/declarations/lib/authentication/components/ProductionUnlockPage.d.ts +1 -0
  13. package/dist/declarations/lib/authentication/hook.d.ts +3 -19
  14. package/dist/declarations/lib/authentication/providers/dev-portal-constants.d.ts +16 -0
  15. package/dist/declarations/lib/authentication/providers/dev-portal-utils.d.ts +9 -0
  16. package/dist/declarations/lib/authentication/providers/dev-portal.d.ts +39 -0
  17. package/dist/declarations/lib/authentication/state.d.ts +12 -26
  18. package/dist/declarations/lib/components/LandingLayout.d.ts +4 -0
  19. package/dist/declarations/lib/components/index.d.ts +2 -0
  20. package/dist/declarations/lib/plugins/api-keys/index.d.ts +2 -1
  21. package/dist/flat-config.d.ts +209 -24
  22. package/docs/components/alert.mdx +130 -0
  23. package/docs/components/badge.mdx +70 -0
  24. package/docs/components/button.mdx +132 -0
  25. package/docs/components/callout.mdx +112 -0
  26. package/docs/components/card.mdx +104 -0
  27. package/docs/components/checkbox.mdx +72 -0
  28. package/docs/components/client-only.mdx +79 -0
  29. package/docs/components/code-tabs.mdx +179 -0
  30. package/docs/components/dialog.mdx +167 -0
  31. package/docs/components/head.mdx +200 -0
  32. package/docs/components/icons.mdx +27 -0
  33. package/docs/components/input.mdx +96 -0
  34. package/docs/components/label.mdx +86 -0
  35. package/docs/components/link.mdx +242 -0
  36. package/docs/components/markdown.mdx +151 -0
  37. package/docs/components/mermaid.mdx +81 -0
  38. package/docs/components/playground.mdx +87 -0
  39. package/docs/components/secret.mdx +79 -0
  40. package/docs/components/select.mdx +176 -0
  41. package/docs/components/shadcn.mdx +73 -0
  42. package/docs/components/slider.mdx +108 -0
  43. package/docs/components/slot.mdx +119 -0
  44. package/docs/components/stepper.mdx +138 -0
  45. package/docs/components/switch.mdx +96 -0
  46. package/docs/components/syntax-highlight.mdx +602 -0
  47. package/docs/components/textarea.mdx +78 -0
  48. package/docs/components/tooltip.mdx +195 -0
  49. package/docs/components/typography.mdx +61 -0
  50. package/docs/concepts/auth-provider-api-identities.md +109 -0
  51. package/docs/configuration/ai-assistants.md +65 -0
  52. package/docs/configuration/api-catalog.md +109 -0
  53. package/docs/configuration/api-reference.md +397 -0
  54. package/docs/configuration/authentication-auth0.md +174 -0
  55. package/docs/configuration/authentication-azure-ad.md +238 -0
  56. package/docs/configuration/authentication-clerk.md +110 -0
  57. package/docs/configuration/authentication-firebase.md +62 -0
  58. package/docs/configuration/authentication-pingfederate.md +136 -0
  59. package/docs/configuration/authentication-supabase.md +226 -0
  60. package/docs/configuration/authentication.md +231 -0
  61. package/docs/configuration/build-configuration.mdx +147 -0
  62. package/docs/configuration/docs.md +282 -0
  63. package/docs/configuration/footer.mdx +214 -0
  64. package/docs/configuration/llms.md +90 -0
  65. package/docs/configuration/make-config.mdx +90 -0
  66. package/docs/configuration/navigation.mdx +422 -0
  67. package/docs/configuration/overview.md +380 -0
  68. package/docs/configuration/protected-routes.md +150 -0
  69. package/docs/configuration/search.md +163 -0
  70. package/docs/configuration/sentry.mdx +44 -0
  71. package/docs/configuration/site.md +124 -0
  72. package/docs/configuration/slots.mdx +125 -0
  73. package/docs/configuration/vite-config.md +18 -0
  74. package/docs/custom-plugins.md +285 -0
  75. package/docs/customization/colors-theme.mdx +276 -0
  76. package/docs/customization/fonts.md +110 -0
  77. package/docs/deploy/apache-nginx.md +41 -0
  78. package/docs/deploy/apitogo.md +139 -0
  79. package/docs/deploy/cloudflare-pages.md +75 -0
  80. package/docs/deploy/direct-upload.md +18 -0
  81. package/docs/deploy/github-pages.md +50 -0
  82. package/docs/deploy/vercel.md +103 -0
  83. package/docs/deployment.md +21 -0
  84. package/docs/extending/events.md +124 -0
  85. package/docs/guides/custom-pages.md +106 -0
  86. package/docs/guides/environment-variables.md +99 -0
  87. package/docs/guides/managing-api-keys-and-identities.md +172 -0
  88. package/docs/guides/mermaid.mdx +70 -0
  89. package/docs/guides/navigation-migration.md +87 -0
  90. package/docs/guides/navigation-rules.mdx +203 -0
  91. package/docs/guides/processors.mdx +234 -0
  92. package/docs/guides/static-files.md +55 -0
  93. package/docs/guides/transforming-examples.md +156 -0
  94. package/docs/guides/using-multiple-apis.md +87 -0
  95. package/docs/markdown/admonitions.md +128 -0
  96. package/docs/markdown/code-blocks.md +196 -0
  97. package/docs/markdown/frontmatter.md +173 -0
  98. package/docs/markdown/mdx.md +68 -0
  99. package/docs/markdown/overview.md +275 -0
  100. package/docs/plugins.md +5 -0
  101. package/docs/quickstart.md +87 -0
  102. package/docs/writing.mdx +72 -0
  103. package/package.json +170 -116
  104. package/src/app/ZuploBuildConfig.ts +36 -36
  105. package/src/app/defaultTheme.css +77 -77
  106. package/src/app/demo-cdn.html +37 -37
  107. package/src/app/demo.html +21 -21
  108. package/src/app/demo.tsx +77 -77
  109. package/src/app/entry.client.tsx +118 -118
  110. package/src/app/entry.server.tsx +160 -160
  111. package/src/app/env.ts +40 -40
  112. package/src/app/font.geist.css +73 -73
  113. package/src/app/main.css +390 -390
  114. package/src/app/main.tsx +8 -1
  115. package/src/app/polyfills.ts +47 -47
  116. package/src/app/processRoutes.tsx +51 -25
  117. package/src/app/sentry.ts +24 -24
  118. package/src/app/standalone.html +23 -23
  119. package/src/app/standalone.tsx +60 -60
  120. package/src/app/utils/createRedirectRoutes.ts +11 -11
  121. package/src/config/config.ts +32 -0
  122. package/src/config/create-plugin.ts +71 -71
  123. package/src/config/file-exists.ts +6 -6
  124. package/src/config/loader.ts +11 -1
  125. package/src/config/resolve-modules.ts +260 -0
  126. package/src/config/validators/BuildSchema.ts +95 -95
  127. package/src/config/validators/HeaderNavigationSchema.ts +41 -41
  128. package/src/config/validators/InputNavigationSchema.test-d.ts +178 -178
  129. package/src/config/validators/InputNavigationSchema.ts +206 -206
  130. package/src/config/validators/ModulesSchema.ts +312 -0
  131. package/src/config/validators/ProtectedRoutesSchema.ts +35 -35
  132. package/src/config/validators/ZudokuConfig.ts +766 -729
  133. package/src/config/validators/auth.ts +3 -3
  134. package/src/config/validators/reason-codes.ts +7 -7
  135. package/src/env.d.ts +11 -11
  136. package/src/index.ts +31 -0
  137. package/src/lib/MissingIcon.tsx +22 -22
  138. package/src/lib/assets/language-icons/bun.tsx +50 -50
  139. package/src/lib/assets/language-icons/c.tsx +31 -31
  140. package/src/lib/assets/language-icons/commonlisp.tsx +22 -22
  141. package/src/lib/assets/language-icons/cpp.tsx +35 -35
  142. package/src/lib/assets/language-icons/csharp.tsx +35 -35
  143. package/src/lib/assets/language-icons/css.tsx +36 -36
  144. package/src/lib/assets/language-icons/dart.tsx +39 -39
  145. package/src/lib/assets/language-icons/elixir.tsx +19 -19
  146. package/src/lib/assets/language-icons/go.tsx +19 -19
  147. package/src/lib/assets/language-icons/graphql.tsx +19 -19
  148. package/src/lib/assets/language-icons/html.tsx +24 -24
  149. package/src/lib/assets/language-icons/java.tsx +35 -35
  150. package/src/lib/assets/language-icons/javascript.tsx +11 -11
  151. package/src/lib/assets/language-icons/json.tsx +19 -19
  152. package/src/lib/assets/language-icons/kotlin.tsx +30 -30
  153. package/src/lib/assets/language-icons/markdown.tsx +19 -19
  154. package/src/lib/assets/language-icons/mdx.tsx +23 -23
  155. package/src/lib/assets/language-icons/npm.tsx +15 -15
  156. package/src/lib/assets/language-icons/objectivec.tsx +23 -23
  157. package/src/lib/assets/language-icons/ocaml.tsx +34 -34
  158. package/src/lib/assets/language-icons/php.tsx +19 -19
  159. package/src/lib/assets/language-icons/pnpm.tsx +32 -32
  160. package/src/lib/assets/language-icons/powershell.tsx +27 -27
  161. package/src/lib/assets/language-icons/python.tsx +23 -23
  162. package/src/lib/assets/language-icons/react.tsx +21 -21
  163. package/src/lib/assets/language-icons/ruby.tsx +19 -19
  164. package/src/lib/assets/language-icons/rust.tsx +19 -19
  165. package/src/lib/assets/language-icons/scala.tsx +19 -19
  166. package/src/lib/assets/language-icons/shell.tsx +19 -19
  167. package/src/lib/assets/language-icons/swift.tsx +19 -19
  168. package/src/lib/assets/language-icons/toml.tsx +23 -23
  169. package/src/lib/assets/language-icons/typescript.tsx +23 -23
  170. package/src/lib/assets/language-icons/xml.tsx +19 -19
  171. package/src/lib/assets/language-icons/yaml.tsx +23 -23
  172. package/src/lib/assets/language-icons/yarn.tsx +17 -17
  173. package/src/lib/assets/language-icons/zig.tsx +32 -32
  174. package/src/lib/auth/issuer.ts +34 -31
  175. package/src/lib/authentication/AuthenticationPlugin.tsx +33 -33
  176. package/src/lib/authentication/authentication.ts +48 -48
  177. package/src/lib/authentication/components/OAuthErrorPage.tsx +197 -197
  178. package/src/lib/authentication/components/ProductionUnlockPage.tsx +27 -0
  179. package/src/lib/authentication/components/SignOut.tsx +15 -15
  180. package/src/lib/authentication/constants.ts +1 -1
  181. package/src/lib/authentication/errors.ts +34 -34
  182. package/src/lib/authentication/hook.ts +141 -139
  183. package/src/lib/authentication/providers/auth0.tsx +91 -91
  184. package/src/lib/authentication/providers/azureb2c.tsx +223 -223
  185. package/src/lib/authentication/providers/dev-portal-constants.ts +21 -0
  186. package/src/lib/authentication/providers/dev-portal-utils.ts +107 -0
  187. package/src/lib/authentication/providers/dev-portal.tsx +270 -0
  188. package/src/lib/authentication/providers/firebase.tsx +486 -486
  189. package/src/lib/authentication/providers/openid.tsx +516 -516
  190. package/src/lib/authentication/providers/supabase.tsx +412 -412
  191. package/src/lib/authentication/providers/util.ts +26 -26
  192. package/src/lib/authentication/state.ts +179 -91
  193. package/src/lib/authentication/ui/icons/Apple.tsx +10 -10
  194. package/src/lib/authentication/ui/icons/Facebook.tsx +15 -15
  195. package/src/lib/authentication/ui/icons/Github.tsx +16 -16
  196. package/src/lib/authentication/ui/icons/Google.tsx +16 -16
  197. package/src/lib/authentication/ui/icons/Microsoft.tsx +12 -12
  198. package/src/lib/authentication/ui/icons/X.tsx +10 -10
  199. package/src/lib/authentication/utils/relativeRedirectUrl.ts +16 -16
  200. package/src/lib/components/AnchorLink.tsx +24 -24
  201. package/src/lib/components/Banner.tsx +52 -52
  202. package/src/lib/components/Bootstrap.tsx +77 -77
  203. package/src/lib/components/BuildCheck.tsx +87 -87
  204. package/src/lib/components/CategoryHeading.tsx +19 -19
  205. package/src/lib/components/ClientOnly.tsx +19 -19
  206. package/src/lib/components/ErrorPage.tsx +26 -26
  207. package/src/lib/components/Footer.tsx +140 -140
  208. package/src/lib/components/Framed.tsx +51 -51
  209. package/src/lib/components/Header.tsx +11 -3
  210. package/src/lib/components/HeaderNavigation.tsx +148 -148
  211. package/src/lib/components/Heading.tsx +84 -84
  212. package/src/lib/components/InlineCode.tsx +15 -15
  213. package/src/lib/components/LandingLayout.tsx +21 -0
  214. package/src/lib/components/LanguageIcon.tsx +199 -199
  215. package/src/lib/components/Markdown.tsx +55 -55
  216. package/src/lib/components/Meta.tsx +46 -46
  217. package/src/lib/components/MobileTopNavigation.tsx +11 -3
  218. package/src/lib/components/NotFoundPage.tsx +37 -37
  219. package/src/lib/components/PageProgress.tsx +28 -28
  220. package/src/lib/components/PagefindSearchMeta.tsx +14 -14
  221. package/src/lib/components/Pagination.tsx +44 -44
  222. package/src/lib/components/PathRenderer.tsx +61 -61
  223. package/src/lib/components/PluginHeads.tsx +17 -17
  224. package/src/lib/components/Search.tsx +70 -70
  225. package/src/lib/components/Slot.tsx +64 -64
  226. package/src/lib/components/Spinner.tsx +5 -5
  227. package/src/lib/components/StatusPage.tsx +96 -96
  228. package/src/lib/components/ThemeSwitch.tsx +49 -49
  229. package/src/lib/components/Typography.tsx +12 -12
  230. package/src/lib/components/Zudoku.tsx +106 -106
  231. package/src/lib/components/cache.ts +27 -27
  232. package/src/lib/components/context/RenderContext.ts +11 -11
  233. package/src/lib/components/context/RouterEventsEmitter.tsx +19 -19
  234. package/src/lib/components/context/SlotProvider.tsx +149 -149
  235. package/src/lib/components/context/ViewportAnchorContext.tsx +137 -137
  236. package/src/lib/components/context/ZudokuContext.ts +140 -140
  237. package/src/lib/components/context/ZudokuProvider.tsx +22 -22
  238. package/src/lib/components/context/ZudokuReactContext.tsx +17 -17
  239. package/src/lib/components/index.ts +2 -0
  240. package/src/lib/components/navigation/Navigation.tsx +51 -51
  241. package/src/lib/components/navigation/NavigationBadge.tsx +48 -48
  242. package/src/lib/components/navigation/NavigationFilterContext.tsx +28 -28
  243. package/src/lib/components/navigation/NavigationWrapper.tsx +49 -49
  244. package/src/lib/components/navigation/Toc.tsx +137 -137
  245. package/src/lib/components/navigation/ZudokuLogo.tsx +25 -25
  246. package/src/lib/components/navigation/ZuploLogo.tsx +14 -14
  247. package/src/lib/components/navigation/utils.ts +234 -234
  248. package/src/lib/core/RouteGuard.tsx +11 -1
  249. package/src/lib/core/ZudokuContext.ts +271 -271
  250. package/src/lib/core/plugins.ts +138 -138
  251. package/src/lib/core/react-query.ts +1 -1
  252. package/src/lib/core/router.ts +1 -1
  253. package/src/lib/core/transform-config.ts +67 -67
  254. package/src/lib/demo/DemoAnnouncement.tsx +17 -17
  255. package/src/lib/errors/ErrorAlert.tsx +28 -28
  256. package/src/lib/errors/RouterError.tsx +18 -18
  257. package/src/lib/errors/ServerError.tsx +5 -5
  258. package/src/lib/errors/TopLevelError.tsx +6 -6
  259. package/src/lib/hooks/index.ts +13 -13
  260. package/src/lib/hooks/useEvent.ts +41 -41
  261. package/src/lib/hooks/useHighlighter.ts +15 -15
  262. package/src/lib/hooks/useHotkey.ts +70 -70
  263. package/src/lib/icons.ts +2 -2
  264. package/src/lib/navigation/applyRules.ts +127 -127
  265. package/src/lib/navigation/pathMatcher.ts +81 -81
  266. package/src/lib/oas/graphql/circular.ts +69 -69
  267. package/src/lib/oas/graphql/constants.ts +2 -2
  268. package/src/lib/oas/graphql/index.ts +791 -791
  269. package/src/lib/oas/parser/dereference/index.ts +84 -84
  270. package/src/lib/oas/parser/dereference/resolveRef.ts +32 -32
  271. package/src/lib/oas/parser/index.ts +129 -129
  272. package/src/lib/oas/parser/schemas/v3.0.json +1489 -1489
  273. package/src/lib/oas/parser/schemas/v3.1.json +1298 -1298
  274. package/src/lib/oas/parser/upgrade/index.ts +174 -174
  275. package/src/lib/plugins/api-catalog/index.tsx +119 -119
  276. package/src/lib/plugins/api-keys/ProtectedRoute.tsx +33 -33
  277. package/src/lib/plugins/api-keys/index.tsx +274 -272
  278. package/src/lib/plugins/api-keys/settings/ApiKeyList.tsx +67 -67
  279. package/src/lib/plugins/custom-pages/index.tsx +32 -32
  280. package/src/lib/plugins/markdown/assets/ChatGPTLogo.tsx +11 -11
  281. package/src/lib/plugins/markdown/assets/ClaudeLogo.tsx +19 -19
  282. package/src/lib/plugins/markdown/index.tsx +62 -62
  283. package/src/lib/plugins/openapi/ColorizedParam.tsx +115 -115
  284. package/src/lib/plugins/openapi/Endpoint.tsx +85 -85
  285. package/src/lib/plugins/openapi/MCPEndpoint.tsx +273 -273
  286. package/src/lib/plugins/openapi/OasProvider.tsx +74 -74
  287. package/src/lib/plugins/openapi/OperationList.tsx +275 -275
  288. package/src/lib/plugins/openapi/ParamInfos.tsx +96 -96
  289. package/src/lib/plugins/openapi/ParameterList.tsx +53 -53
  290. package/src/lib/plugins/openapi/ParameterListItem.tsx +161 -161
  291. package/src/lib/plugins/openapi/PlaygroundDialogWrapper.tsx +67 -67
  292. package/src/lib/plugins/openapi/SidecarBox.tsx +57 -57
  293. package/src/lib/plugins/openapi/SimpleSelect.tsx +46 -46
  294. package/src/lib/plugins/openapi/client/GraphQLClient.tsx +73 -73
  295. package/src/lib/plugins/openapi/client/GraphQLContext.tsx +16 -16
  296. package/src/lib/plugins/openapi/client/createServer.ts +35 -35
  297. package/src/lib/plugins/openapi/client/useCreateQuery.ts +44 -44
  298. package/src/lib/plugins/openapi/components/ConstValue.tsx +24 -24
  299. package/src/lib/plugins/openapi/components/NonHighlightedCode.tsx +22 -22
  300. package/src/lib/plugins/openapi/components/SelectOnClick.tsx +29 -29
  301. package/src/lib/plugins/openapi/context.tsx +16 -16
  302. package/src/lib/plugins/openapi/graphql/fragment-masking.ts +104 -104
  303. package/src/lib/plugins/openapi/graphql/gql.ts +95 -95
  304. package/src/lib/plugins/openapi/graphql/graphql.ts +835 -835
  305. package/src/lib/plugins/openapi/graphql/index.ts +2 -2
  306. package/src/lib/plugins/openapi/index.tsx +221 -221
  307. package/src/lib/plugins/openapi/interfaces.ts +100 -100
  308. package/src/lib/plugins/openapi/playground/Headers.tsx +6 -6
  309. package/src/lib/plugins/openapi/playground/PathParams.tsx +53 -53
  310. package/src/lib/plugins/openapi/playground/Spinner.tsx +87 -87
  311. package/src/lib/plugins/openapi/playground/createUrl.ts +25 -25
  312. package/src/lib/plugins/openapi/playground/fileUtils.ts +36 -36
  313. package/src/lib/plugins/openapi/playground/rememberedIdentity.ts +26 -26
  314. package/src/lib/plugins/openapi/playground/request-panel/UrlPath.tsx +31 -31
  315. package/src/lib/plugins/openapi/playground/request-panel/UrlQueryParams.tsx +29 -29
  316. package/src/lib/plugins/openapi/playground/request-panel/useKeyValueFieldManager.ts +340 -340
  317. package/src/lib/plugins/openapi/playground/result-panel/ResponseStatusBar.tsx +117 -117
  318. package/src/lib/plugins/openapi/playground/result-panel/convertToTypes.ts +36 -36
  319. package/src/lib/plugins/openapi/playground/serializeQueryParams.ts +125 -125
  320. package/src/lib/plugins/openapi/playground/useRememberSkipLoginDialog.tsx +23 -23
  321. package/src/lib/plugins/openapi/processors/removeExtensions.ts +29 -29
  322. package/src/lib/plugins/openapi/processors/removeParameters.ts +103 -103
  323. package/src/lib/plugins/openapi/processors/removePaths.ts +57 -57
  324. package/src/lib/plugins/openapi/processors/traverse.ts +1 -1
  325. package/src/lib/plugins/openapi/schema/SchemaExampleAndDefault.tsx +39 -39
  326. package/src/lib/plugins/openapi/schema/UnionView.tsx +132 -132
  327. package/src/lib/plugins/openapi/schema/union-helpers.ts +123 -123
  328. package/src/lib/plugins/openapi/schema/utils.ts +49 -49
  329. package/src/lib/plugins/openapi/state.ts +36 -36
  330. package/src/lib/plugins/openapi/util/buildTagCategories.ts +54 -54
  331. package/src/lib/plugins/openapi/util/createHttpSnippet.ts +135 -135
  332. package/src/lib/plugins/openapi/util/createNavigationCategory.tsx +39 -39
  333. package/src/lib/plugins/openapi/util/generateSchemaExample.ts +191 -191
  334. package/src/lib/plugins/openapi/util/getRoutes.tsx +265 -265
  335. package/src/lib/plugins/openapi/util/methodColorMap.tsx +11 -11
  336. package/src/lib/plugins/openapi/util/methodToColor.ts +27 -27
  337. package/src/lib/plugins/openapi/util/sanitizeMarkdownForMetatag.tsx +32 -32
  338. package/src/lib/plugins/openapi/util/useWarmupSchema.ts +23 -23
  339. package/src/lib/plugins/search-inkeep/index.tsx +108 -108
  340. package/src/lib/plugins/search-inkeep/inkeep.ts +24 -24
  341. package/src/lib/plugins/search-pagefind/get-results.tsx +74 -74
  342. package/src/lib/plugins/search-pagefind/index.tsx +21 -21
  343. package/src/lib/plugins/search-pagefind/types.ts +118 -118
  344. package/src/lib/shiki-constants.ts +24 -24
  345. package/src/lib/testing/index.tsx +146 -146
  346. package/src/lib/ui/Accordion.tsx +55 -55
  347. package/src/lib/ui/Alert.tsx +84 -84
  348. package/src/lib/ui/AlertDialog.tsx +195 -195
  349. package/src/lib/ui/AspectRatio.tsx +5 -5
  350. package/src/lib/ui/Badge.tsx +48 -48
  351. package/src/lib/ui/Breadcrumb.tsx +115 -115
  352. package/src/lib/ui/Button.tsx +65 -65
  353. package/src/lib/ui/ButtonGroup.tsx +80 -80
  354. package/src/lib/ui/Callout.tsx +113 -113
  355. package/src/lib/ui/Card.tsx +95 -95
  356. package/src/lib/ui/Carousel.tsx +259 -259
  357. package/src/lib/ui/Checkbox.tsx +28 -28
  358. package/src/lib/ui/CodeBlock.tsx +92 -92
  359. package/src/lib/ui/CodeTabPanel.tsx +13 -13
  360. package/src/lib/ui/CodeTabs.tsx +161 -161
  361. package/src/lib/ui/Collapsible.tsx +31 -31
  362. package/src/lib/ui/Dialog.tsx +138 -138
  363. package/src/lib/ui/DismissibleAlert.tsx +74 -74
  364. package/src/lib/ui/Drawer.tsx +121 -121
  365. package/src/lib/ui/DropdownMenu.tsx +254 -254
  366. package/src/lib/ui/EmbeddedCodeBlock.tsx +99 -99
  367. package/src/lib/ui/Form.tsx +176 -176
  368. package/src/lib/ui/Frame.tsx +81 -81
  369. package/src/lib/ui/HoverCard.tsx +26 -26
  370. package/src/lib/ui/Input.tsx +23 -23
  371. package/src/lib/ui/InputGroup.tsx +168 -168
  372. package/src/lib/ui/Item.tsx +213 -213
  373. package/src/lib/ui/Kbd.tsx +28 -28
  374. package/src/lib/ui/Label.tsx +23 -23
  375. package/src/lib/ui/NativeSelect.tsx +48 -48
  376. package/src/lib/ui/NavigationMenu.tsx +169 -169
  377. package/src/lib/ui/Pagination.tsx +115 -115
  378. package/src/lib/ui/Popover.tsx +28 -28
  379. package/src/lib/ui/Progress.tsx +25 -25
  380. package/src/lib/ui/RadioGroup.tsx +41 -41
  381. package/src/lib/ui/ReactComponentDoc.tsx +68 -68
  382. package/src/lib/ui/ScrollArea.tsx +45 -45
  383. package/src/lib/ui/Secret.tsx +133 -133
  384. package/src/lib/ui/Select.tsx +184 -184
  385. package/src/lib/ui/Separator.tsx +25 -25
  386. package/src/lib/ui/Skeleton.tsx +15 -15
  387. package/src/lib/ui/Slider.tsx +25 -25
  388. package/src/lib/ui/Stepper.tsx +8 -8
  389. package/src/lib/ui/Switch.tsx +26 -26
  390. package/src/lib/ui/SyntaxHighlight.tsx +54 -54
  391. package/src/lib/ui/Tabs.tsx +52 -52
  392. package/src/lib/ui/Textarea.tsx +22 -22
  393. package/src/lib/ui/Toggle.tsx +42 -42
  394. package/src/lib/ui/ToggleGroup.tsx +58 -58
  395. package/src/lib/ui/Tooltip.tsx +65 -65
  396. package/src/lib/ui/Value.tsx +42 -42
  397. package/src/lib/ui/util.tsx +8 -8
  398. package/src/lib/util/cn.ts +6 -6
  399. package/src/lib/util/createVariantComponent.tsx +61 -61
  400. package/src/lib/util/ensureArray.ts +3 -3
  401. package/src/lib/util/flattenAllOf.ts +72 -72
  402. package/src/lib/util/flattenAllOfProcessor.ts +74 -74
  403. package/src/lib/util/hastToJsx.tsx +67 -67
  404. package/src/lib/util/humanFileSize.ts +15 -15
  405. package/src/lib/util/invariant.ts +52 -52
  406. package/src/lib/util/joinUrl.ts +60 -60
  407. package/src/lib/util/logInit.ts +9 -9
  408. package/src/lib/util/objectEntries.ts +5 -5
  409. package/src/lib/util/os.ts +18 -18
  410. package/src/lib/util/pastellize.ts +25 -25
  411. package/src/lib/util/problemJson.ts +63 -63
  412. package/src/lib/util/readFrontmatter.ts +14 -14
  413. package/src/lib/util/renderIf.ts +4 -4
  414. package/src/lib/util/scrollIntoViewIfNeeded.ts +18 -18
  415. package/src/lib/util/slugify.ts +21 -21
  416. package/src/lib/util/syncZustandState.ts +22 -22
  417. package/src/lib/util/traverse.ts +70 -70
  418. package/src/lib/util/types.ts +7 -7
  419. package/src/lib/util/url.ts +18 -18
  420. package/src/lib/util/useCopyToClipboard.ts +17 -17
  421. package/src/lib/util/useExposedProps.tsx +27 -27
  422. package/src/lib/util/useIsomorphicLayoutEffect.ts +6 -6
  423. package/src/lib/util/useLatest.ts +18 -18
  424. package/src/lib/util/useOnScreen.ts +34 -34
  425. package/src/lib/util/useScrollToAnchor.ts +70 -70
  426. package/src/lib/util/useScrollToTop.ts +18 -18
  427. package/src/types.d.ts +57 -53
  428. package/src/vite/api/SchemaManager.ts +371 -371
  429. package/src/vite/api/schema-codegen.ts +163 -163
  430. package/src/vite/config.ts +5 -1
  431. package/src/vite/css/collect.ts +42 -42
  432. package/src/vite/css/plugin.ts +105 -105
  433. package/src/vite/debug.ts +18 -18
  434. package/src/vite/dev-portal-env.ts +93 -0
  435. package/src/vite/html.ts +54 -54
  436. package/src/vite/index.ts +2 -2
  437. package/src/vite/mdx/rehype-extract-toc-with-jsx-export.ts +19 -19
  438. package/src/vite/mdx/rehype-extract-toc-with-jsx.ts +70 -70
  439. package/src/vite/mdx/remark-code-tabs.ts +47 -47
  440. package/src/vite/mdx/remark-inject-filepath.ts +13 -13
  441. package/src/vite/mdx/remark-last-modified.ts +103 -103
  442. package/src/vite/mdx/remark-link-rewrite.ts +23 -23
  443. package/src/vite/mdx/remark-normalize-image-url.ts +15 -15
  444. package/src/vite/mdx/remark-static-generation.ts +149 -149
  445. package/src/vite/mdx/utils.ts +32 -32
  446. package/src/vite/output.ts +261 -261
  447. package/src/vite/package-root.ts +12 -12
  448. package/src/vite/pagefind-dev-index.ts +100 -100
  449. package/src/vite/plugin-api-keys.ts +6 -1
  450. package/src/vite/plugin-api.ts +4 -1
  451. package/src/vite/plugin-auth.ts +5 -1
  452. package/src/vite/plugin-component.ts +1 -1
  453. package/src/vite/plugin-config-reload.ts +49 -49
  454. package/src/vite/plugin-doc-metadata.ts +45 -45
  455. package/src/vite/plugin-docs.ts +4 -1
  456. package/src/vite/plugin-metadata.ts +30 -30
  457. package/src/vite/plugin-modules.ts +144 -0
  458. package/src/vite/plugin-shiki-register.ts +97 -97
  459. package/src/vite/plugin-theme.ts +399 -399
  460. package/src/vite/plugin.ts +2 -0
  461. package/src/vite/prerender/utils.ts +76 -76
  462. package/src/vite/prerender/worker.ts +118 -118
  463. package/src/vite/reporter.ts +34 -34
  464. package/src/vite/shadcn-registry.ts +48 -48
  465. package/src/vite/sitemap.ts +78 -78
  466. package/src/vite/ssr-templates/cloudflare.ts +19 -19
  467. package/src/vite/ssr-templates/node.ts +25 -25
  468. package/src/vite/ssr-templates/vercel.ts +22 -22
  469. package/src/vite/zuplo.ts +30 -30
  470. package/src/vite-env.d.ts +6 -6
  471. package/src/zuplo/enrich-with-zuplo-mcp.ts +168 -168
  472. package/src/zuplo/enrich-with-zuplo.ts +256 -256
  473. package/src/zuplo/policy-types.ts +46 -46
  474. package/src/zuplo/with-zuplo-processors.ts +36 -36
  475. package/src/zuplo/with-zuplo.ts +14 -14
  476. package/LICENSE.md +0 -18
  477. package/dist/declarations/lib/components/navigation/ZudokuLogo.d.ts +0 -6
package/src/app/main.tsx CHANGED
@@ -10,6 +10,7 @@ import {
10
10
  import { configuredAuthProvider } from "virtual:zudoku-auth";
11
11
  import { configuredCustomPagesPlugin } from "virtual:zudoku-custom-pages-plugin";
12
12
  import { configuredDocsPlugin } from "virtual:zudoku-docs-plugin";
13
+ import { configuredModulesPlugins } from "virtual:zudoku-modules-plugin";
13
14
  import "virtual:zudoku-theme.css";
14
15
  import {
15
16
  configuredHeaderNavigation,
@@ -18,6 +19,10 @@ import {
18
19
  } from "virtual:zudoku-navigation";
19
20
  import { configuredSearchPlugin } from "virtual:zudoku-search-plugin";
20
21
  import type { ApitogoConfig } from "../config/config.js";
22
+ import {
23
+ resolveModulesConfig,
24
+ getEffectiveRedirects,
25
+ } from "../config/resolve-modules.js";
21
26
  import { BuildCheck } from "../lib/components/BuildCheck.js";
22
27
  import "./main.css";
23
28
  import { Meta } from "../lib/components/Meta.js";
@@ -77,6 +82,7 @@ export const convertApitogoConfigToOptions = (
77
82
  ...(configuredSearchPlugin ? [configuredSearchPlugin] : []),
78
83
  ...(configuredApiKeysPlugin ? [configuredApiKeysPlugin] : []),
79
84
  ...(configuredCustomPagesPlugin ? [configuredCustomPagesPlugin] : []),
85
+ ...configuredModulesPlugins,
80
86
  ...configuredApiCatalogPlugins,
81
87
  ...(config.plugins ?? []),
82
88
  ],
@@ -123,6 +129,7 @@ export const getRoutesByOptions = (
123
129
  };
124
130
 
125
131
  export const getRoutesByConfig = (config: ApitogoConfig): RouteObject[] => {
132
+ const resolvedModules = resolveModulesConfig(config);
126
133
  const options = convertApitogoConfigToOptions(config);
127
134
  const routes = getRoutesByOptions(
128
135
  options,
@@ -130,7 +137,7 @@ export const getRoutesByConfig = (config: ApitogoConfig): RouteObject[] => {
130
137
  );
131
138
 
132
139
  return [
133
- ...createRedirectRoutes(config.redirects),
140
+ ...createRedirectRoutes(getEffectiveRedirects(config, resolvedModules)),
134
141
  {
135
142
  element: (
136
143
  <Apitogo {...options} env={import.meta.env}>
@@ -1,47 +1,47 @@
1
- if (typeof Object.groupBy === "undefined") {
2
- Object.groupBy = <K extends PropertyKey, T>(
3
- items: Iterable<T>,
4
- keySelector: (item: T, index: number) => K,
5
- ): Partial<Record<K, T[]>> => {
6
- const result = {} as Record<K, T[]>;
7
- let index = 0;
8
-
9
- for (const item of items) {
10
- const key = keySelector(item, index++);
11
-
12
- result[key] ??= [];
13
- result[key].push(item);
14
- }
15
- return result;
16
- };
17
- }
18
-
19
- // Freeze --scrollbar-width when react-remove-scroll locks the body, preventing
20
- // the CSS calc(100vw - 100%) from recalculating to 0 and causing layout shift.
21
- if (typeof window !== "undefined") {
22
- new MutationObserver(() => {
23
- const locked = document.body.hasAttribute("data-scroll-locked");
24
- const gap = locked
25
- ? getComputedStyle(document.body).getPropertyValue(
26
- "--removed-body-scroll-bar-size",
27
- )
28
- : "";
29
-
30
- if (gap) {
31
- document.documentElement.style.setProperty("--scrollbar-width", gap);
32
- } else {
33
- document.documentElement.style.removeProperty("--scrollbar-width");
34
- }
35
- }).observe(document.body, {
36
- attributes: true,
37
- attributeFilter: ["data-scroll-locked"],
38
- });
39
- }
40
-
41
- if (typeof window !== "undefined" && !window.requestIdleCallback) {
42
- window.requestIdleCallback = (cb: IdleRequestCallback) =>
43
- Number(
44
- setTimeout(() => cb({ didTimeout: false, timeRemaining: () => 50 }), 1),
45
- );
46
- window.cancelIdleCallback = (id: number) => clearTimeout(id);
47
- }
1
+ if (typeof Object.groupBy === "undefined") {
2
+ Object.groupBy = <K extends PropertyKey, T>(
3
+ items: Iterable<T>,
4
+ keySelector: (item: T, index: number) => K,
5
+ ): Partial<Record<K, T[]>> => {
6
+ const result = {} as Record<K, T[]>;
7
+ let index = 0;
8
+
9
+ for (const item of items) {
10
+ const key = keySelector(item, index++);
11
+
12
+ result[key] ??= [];
13
+ result[key].push(item);
14
+ }
15
+ return result;
16
+ };
17
+ }
18
+
19
+ // Freeze --scrollbar-width when react-remove-scroll locks the body, preventing
20
+ // the CSS calc(100vw - 100%) from recalculating to 0 and causing layout shift.
21
+ if (typeof window !== "undefined") {
22
+ new MutationObserver(() => {
23
+ const locked = document.body.hasAttribute("data-scroll-locked");
24
+ const gap = locked
25
+ ? getComputedStyle(document.body).getPropertyValue(
26
+ "--removed-body-scroll-bar-size",
27
+ )
28
+ : "";
29
+
30
+ if (gap) {
31
+ document.documentElement.style.setProperty("--scrollbar-width", gap);
32
+ } else {
33
+ document.documentElement.style.removeProperty("--scrollbar-width");
34
+ }
35
+ }).observe(document.body, {
36
+ attributes: true,
37
+ attributeFilter: ["data-scroll-locked"],
38
+ });
39
+ }
40
+
41
+ if (typeof window !== "undefined" && !window.requestIdleCallback) {
42
+ window.requestIdleCallback = (cb: IdleRequestCallback) =>
43
+ Number(
44
+ setTimeout(() => cb({ didTimeout: false, timeRemaining: () => 50 }), 1),
45
+ );
46
+ window.cancelIdleCallback = (id: number) => clearTimeout(id);
47
+ }
@@ -1,25 +1,51 @@
1
- import type { RouteObject } from "react-router";
2
- import { Layout } from "../lib/components/Layout.js";
3
-
4
- export const processRoutes = (
5
- routes: RouteObject[],
6
- layoutDisabled?: boolean,
7
- ): RouteObject[] =>
8
- routes.map((r) => {
9
- const shouldWrapWithLayout = layoutDisabled
10
- ? r.handle?.layout === "default"
11
- : r.handle?.layout !== "none";
12
-
13
- const route = r.children
14
- ? {
15
- ...r,
16
- children: shouldWrapWithLayout
17
- ? r.children
18
- : processRoutes(r.children, true),
19
- }
20
- : r;
21
-
22
- return shouldWrapWithLayout
23
- ? { element: <Layout />, children: [route] }
24
- : route;
25
- });
1
+ import type { RouteObject } from "react-router";
2
+ import { LandingLayout } from "../lib/components/LandingLayout.js";
3
+ import { Layout } from "../lib/components/Layout.js";
4
+
5
+ type LayoutMode = "default" | "landing" | "none";
6
+
7
+ const resolveLayoutComponent = (layout: LayoutMode | undefined) => {
8
+ if (layout === "landing") {
9
+ return LandingLayout;
10
+ }
11
+
12
+ return Layout;
13
+ };
14
+
15
+ const shouldWrapRoute = (
16
+ layout: LayoutMode | undefined,
17
+ layoutDisabled?: boolean,
18
+ ) => {
19
+ if (layout === "none") {
20
+ return false;
21
+ }
22
+
23
+ if (layoutDisabled) {
24
+ return layout === "default" || layout === "landing";
25
+ }
26
+
27
+ return true;
28
+ };
29
+
30
+ export const processRoutes = (
31
+ routes: RouteObject[],
32
+ layoutDisabled?: boolean,
33
+ ): RouteObject[] =>
34
+ routes.map((r) => {
35
+ const layout = r.handle?.layout as LayoutMode | undefined;
36
+ const wrapRoute = shouldWrapRoute(layout, layoutDisabled);
37
+ const LayoutComponent = wrapRoute ? resolveLayoutComponent(layout) : null;
38
+
39
+ const route = r.children
40
+ ? {
41
+ ...r,
42
+ children: LayoutComponent
43
+ ? r.children
44
+ : processRoutes(r.children, true),
45
+ }
46
+ : r;
47
+
48
+ return LayoutComponent
49
+ ? { element: <LayoutComponent />, children: [route] }
50
+ : route;
51
+ });
package/src/app/sentry.ts CHANGED
@@ -1,24 +1,24 @@
1
- import * as Sentry from "@sentry/react";
2
- import { useEffect } from "react";
3
- import {
4
- createRoutesFromChildren,
5
- matchRoutes,
6
- useLocation,
7
- useNavigationType,
8
- } from "react-router";
9
-
10
- export const initSentry = ({ dsn }: { dsn: string }) => {
11
- Sentry.init({
12
- dsn,
13
- integrations: [
14
- Sentry.reactRouterV7BrowserTracingIntegration({
15
- useEffect,
16
- useLocation,
17
- useNavigationType,
18
- createRoutesFromChildren,
19
- matchRoutes,
20
- }),
21
- Sentry.replayIntegration(),
22
- ],
23
- });
24
- };
1
+ import * as Sentry from "@sentry/react";
2
+ import { useEffect } from "react";
3
+ import {
4
+ createRoutesFromChildren,
5
+ matchRoutes,
6
+ useLocation,
7
+ useNavigationType,
8
+ } from "react-router";
9
+
10
+ export const initSentry = ({ dsn }: { dsn: string }) => {
11
+ Sentry.init({
12
+ dsn,
13
+ integrations: [
14
+ Sentry.reactRouterV7BrowserTracingIntegration({
15
+ useEffect,
16
+ useLocation,
17
+ useNavigationType,
18
+ createRoutesFromChildren,
19
+ matchRoutes,
20
+ }),
21
+ Sentry.replayIntegration(),
22
+ ],
23
+ });
24
+ };
@@ -1,23 +1,23 @@
1
- <!doctype html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8" />
5
- <link
6
- rel="icon"
7
- type="image/svg+xml"
8
- href="https://cdn.zudoku.dev/logos/favicon.svg"
9
- />
10
- <meta
11
- name="viewport"
12
- content="width=device-width, initial-scale=1.0, minimum-scale=1.0"
13
- />
14
- <title>Zudoku</title>
15
- <script type="module" crossorigin src="./main.js"></script>
16
- <link rel="stylesheet" crossorigin href="./zudoku.css" />
17
- </head>
18
- <body>
19
- <div
20
- data-api-url="https://blue-sloth-main-afc3428.d2.zuplo.dev/schemas/rewiring-america"
21
- ></div>
22
- </body>
23
- </html>
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <link
6
+ rel="icon"
7
+ type="image/svg+xml"
8
+ href="https://cdn.zudoku.dev/logos/favicon.svg"
9
+ />
10
+ <meta
11
+ name="viewport"
12
+ content="width=device-width, initial-scale=1.0, minimum-scale=1.0"
13
+ />
14
+ <title>Zudoku</title>
15
+ <script type="module" crossorigin src="./main.js"></script>
16
+ <link rel="stylesheet" crossorigin href="./zudoku.css" />
17
+ </head>
18
+ <body>
19
+ <div
20
+ data-api-url="https://blue-sloth-main-afc3428.d2.zuplo.dev/schemas/rewiring-america"
21
+ ></div>
22
+ </body>
23
+ </html>
@@ -1,60 +1,60 @@
1
- import { createRoot } from "react-dom/client";
2
- import { createBrowserRouter } from "react-router";
3
- import type { ZudokuConfig } from "../config/validators/ZudokuConfig.js";
4
- import { Bootstrap } from "../lib/components/Bootstrap.js";
5
- import { openApiPlugin } from "../lib/plugins/openapi/index.js";
6
- import "../lib/util/logInit.js";
7
- import "./main.css";
8
- import { getRoutesByConfig } from "./main.js";
9
-
10
- const root = document.querySelector("div[data-api-url]");
11
- if (!root) {
12
- throw new Error("No div found with attribute data-api-url");
13
- }
14
-
15
- const apiUrl = root.getAttribute("data-api-url");
16
-
17
- if (!apiUrl) {
18
- throw new Error("No api url found");
19
- }
20
-
21
- const title = document.getElementsByTagName("title")[0]?.innerText;
22
- const logoUrl = root.getAttribute("data-logo-url");
23
-
24
- // IMPORTANT: This component must not contain tailwind classes
25
- // This directory is not processed by the tailwind plugin
26
-
27
- const config = {
28
- site: {
29
- logo: logoUrl
30
- ? {
31
- src: {
32
- light: logoUrl,
33
- dark: logoUrl,
34
- },
35
- }
36
- : undefined,
37
- title,
38
- },
39
- navigation: [
40
- {
41
- type: "link",
42
- label: "API Reference",
43
- to: "/",
44
- },
45
- ],
46
- plugins: [
47
- // Using the plugin directly because there's no config file to load in the virtual plugins
48
- openApiPlugin({
49
- type: "url",
50
- input: apiUrl,
51
- path: "/",
52
- }),
53
- ],
54
- } satisfies ZudokuConfig;
55
-
56
- const routes = getRoutesByConfig(config);
57
- const router = createBrowserRouter(routes, {
58
- basename: window.location.pathname,
59
- });
60
- createRoot(root).render(<Bootstrap router={router} />);
1
+ import { createRoot } from "react-dom/client";
2
+ import { createBrowserRouter } from "react-router";
3
+ import type { ZudokuConfig } from "../config/validators/ZudokuConfig.js";
4
+ import { Bootstrap } from "../lib/components/Bootstrap.js";
5
+ import { openApiPlugin } from "../lib/plugins/openapi/index.js";
6
+ import "../lib/util/logInit.js";
7
+ import "./main.css";
8
+ import { getRoutesByConfig } from "./main.js";
9
+
10
+ const root = document.querySelector("div[data-api-url]");
11
+ if (!root) {
12
+ throw new Error("No div found with attribute data-api-url");
13
+ }
14
+
15
+ const apiUrl = root.getAttribute("data-api-url");
16
+
17
+ if (!apiUrl) {
18
+ throw new Error("No api url found");
19
+ }
20
+
21
+ const title = document.getElementsByTagName("title")[0]?.innerText;
22
+ const logoUrl = root.getAttribute("data-logo-url");
23
+
24
+ // IMPORTANT: This component must not contain tailwind classes
25
+ // This directory is not processed by the tailwind plugin
26
+
27
+ const config = {
28
+ site: {
29
+ logo: logoUrl
30
+ ? {
31
+ src: {
32
+ light: logoUrl,
33
+ dark: logoUrl,
34
+ },
35
+ }
36
+ : undefined,
37
+ title,
38
+ },
39
+ navigation: [
40
+ {
41
+ type: "link",
42
+ label: "API Reference",
43
+ to: "/",
44
+ },
45
+ ],
46
+ plugins: [
47
+ // Using the plugin directly because there's no config file to load in the virtual plugins
48
+ openApiPlugin({
49
+ type: "url",
50
+ input: apiUrl,
51
+ path: "/",
52
+ }),
53
+ ],
54
+ } satisfies ZudokuConfig;
55
+
56
+ const routes = getRoutesByConfig(config);
57
+ const router = createBrowserRouter(routes, {
58
+ basename: window.location.pathname,
59
+ });
60
+ createRoot(root).render(<Bootstrap router={router} />);
@@ -1,11 +1,11 @@
1
- import { redirect, type RouteObject } from "react-router";
2
- import type { ZudokuRedirect } from "../../config/validators/ZudokuConfig.js";
3
- import { joinUrl } from "../../lib/util/joinUrl.js";
4
-
5
- export const createRedirectRoutes = (
6
- redirects?: ZudokuRedirect[],
7
- ): RouteObject[] =>
8
- (redirects ?? []).map((r) => ({
9
- path: joinUrl(r.from),
10
- loader: () => redirect(r.to, 301),
11
- }));
1
+ import { redirect, type RouteObject } from "react-router";
2
+ import type { ZudokuRedirect } from "../../config/validators/ZudokuConfig.js";
3
+ import { joinUrl } from "../../lib/util/joinUrl.js";
4
+
5
+ export const createRedirectRoutes = (
6
+ redirects?: ZudokuRedirect[],
7
+ ): RouteObject[] =>
8
+ (redirects ?? []).map((r) => ({
9
+ path: joinUrl(r.from),
10
+ loader: () => redirect(r.to, 301),
11
+ }));
@@ -15,6 +15,34 @@ export type ZudokuBuildConfig = BuildConfig;
15
15
 
16
16
  export type LoadedConfig = ConfigWithMeta;
17
17
  export type { ZudokuConfig as ApitogoConfig };
18
+ export type {
19
+ ModulesConfig,
20
+ ResolvedModulesConfig,
21
+ ResolvedLandingContent,
22
+ ResolvedDashboardContent,
23
+ ResolvedProfileContent,
24
+ ResolvedPlansContent,
25
+ ResolvedLandingModule,
26
+ ResolvedUserPanelModule,
27
+ ResolvedDashboardModule,
28
+ ResolvedUserManagementModule,
29
+ ResolvedApiKeysModule,
30
+ ResolvedPlansModule,
31
+ DocsModuleConfig,
32
+ LandingModuleConfig,
33
+ LandingContentConfig,
34
+ LandingFeatureConfig,
35
+ LandingLinkConfig,
36
+ DashboardContentConfig,
37
+ ProfileContentConfig,
38
+ PlansContentConfig,
39
+ PlanTierConfig,
40
+ UserPanelModuleConfig,
41
+ DashboardModuleConfig,
42
+ UserManagementModuleConfig,
43
+ ApiKeysModuleConfig,
44
+ PlansModuleConfig,
45
+ } from "./validators/ModulesSchema.js";
18
46
 
19
47
  export type ClerkAuthenticationConfig = Extract<
20
48
  AuthenticationConfig,
@@ -40,3 +68,7 @@ export type AzureB2CAuthenticationConfig = Extract<
40
68
  AuthenticationConfig,
41
69
  { type: "azureb2c" }
42
70
  >;
71
+ export type DevPortalAuthenticationConfig = Extract<
72
+ AuthenticationConfig,
73
+ { type: "dev-portal" }
74
+ >;
@@ -1,71 +1,71 @@
1
- import {
2
- isTransformConfigPlugin,
3
- type ApitogoPlugin,
4
- } from "../lib/core/plugins.js";
5
-
6
- // Regex from stacktrace-parser for Node.js stack traces
7
- // https://github.com/errwischt/stacktrace-parser
8
- const NODE_STACK_REGEX =
9
- /^\s*at (?:(?:\[object object\])?[^\\/]+(?: \[as \S+\])? )?\(?(.*?):(\d+)(?::(\d+))?\)?\s*$/i;
10
-
11
- const getCallerDir = () => {
12
- const stack = new Error().stack;
13
- if (!stack) return undefined;
14
-
15
- // Stack frames: Error, getCallerDir, createPlugin, <caller>
16
- const lines = stack.split("\n");
17
- const callerLine = lines[3];
18
- if (!callerLine) return undefined;
19
-
20
- const match = callerLine.match(NODE_STACK_REGEX);
21
- let filePath = match?.[1];
22
- if (!filePath) return undefined;
23
-
24
- if (filePath.startsWith("file://")) {
25
- filePath = filePath.slice(7);
26
- }
27
-
28
- // Handle both forward and backslashes for cross-platform support
29
- const lastSlash = Math.max(
30
- filePath.lastIndexOf("/"),
31
- filePath.lastIndexOf("\\"),
32
- );
33
- if (lastSlash === -1) return undefined;
34
-
35
- return filePath.substring(0, lastSlash);
36
- };
37
-
38
- export const createPlugin = <TOptions extends unknown[]>(
39
- factory: (...options: TOptions) => ApitogoPlugin,
40
- ): ((...options: TOptions) => ApitogoPlugin) => {
41
- const pluginDir = getCallerDir();
42
-
43
- return (...options: TOptions) => {
44
- const plugin = factory(...options);
45
-
46
- if (!pluginDir) {
47
- return plugin;
48
- }
49
-
50
- const originalTransformConfig = isTransformConfigPlugin(plugin)
51
- ? plugin.transformConfig
52
- : undefined;
53
-
54
- return {
55
- ...plugin,
56
- transformConfig: async (context) => {
57
- const result =
58
- (await originalTransformConfig?.(context)) ?? context.config;
59
-
60
- return {
61
- ...result,
62
- __pluginDirs: [
63
- ...(context.config.__pluginDirs ?? []),
64
- ...(result.__pluginDirs ?? []),
65
- pluginDir,
66
- ],
67
- };
68
- },
69
- };
70
- };
71
- };
1
+ import {
2
+ isTransformConfigPlugin,
3
+ type ApitogoPlugin,
4
+ } from "../lib/core/plugins.js";
5
+
6
+ // Regex from stacktrace-parser for Node.js stack traces
7
+ // https://github.com/errwischt/stacktrace-parser
8
+ const NODE_STACK_REGEX =
9
+ /^\s*at (?:(?:\[object object\])?[^\\/]+(?: \[as \S+\])? )?\(?(.*?):(\d+)(?::(\d+))?\)?\s*$/i;
10
+
11
+ const getCallerDir = () => {
12
+ const stack = new Error().stack;
13
+ if (!stack) return undefined;
14
+
15
+ // Stack frames: Error, getCallerDir, createPlugin, <caller>
16
+ const lines = stack.split("\n");
17
+ const callerLine = lines[3];
18
+ if (!callerLine) return undefined;
19
+
20
+ const match = callerLine.match(NODE_STACK_REGEX);
21
+ let filePath = match?.[1];
22
+ if (!filePath) return undefined;
23
+
24
+ if (filePath.startsWith("file://")) {
25
+ filePath = filePath.slice(7);
26
+ }
27
+
28
+ // Handle both forward and backslashes for cross-platform support
29
+ const lastSlash = Math.max(
30
+ filePath.lastIndexOf("/"),
31
+ filePath.lastIndexOf("\\"),
32
+ );
33
+ if (lastSlash === -1) return undefined;
34
+
35
+ return filePath.substring(0, lastSlash);
36
+ };
37
+
38
+ export const createPlugin = <TOptions extends unknown[]>(
39
+ factory: (...options: TOptions) => ApitogoPlugin,
40
+ ): ((...options: TOptions) => ApitogoPlugin) => {
41
+ const pluginDir = getCallerDir();
42
+
43
+ return (...options: TOptions) => {
44
+ const plugin = factory(...options);
45
+
46
+ if (!pluginDir) {
47
+ return plugin;
48
+ }
49
+
50
+ const originalTransformConfig = isTransformConfigPlugin(plugin)
51
+ ? plugin.transformConfig
52
+ : undefined;
53
+
54
+ return {
55
+ ...plugin,
56
+ transformConfig: async (context) => {
57
+ const result =
58
+ (await originalTransformConfig?.(context)) ?? context.config;
59
+
60
+ return {
61
+ ...result,
62
+ __pluginDirs: [
63
+ ...(context.config.__pluginDirs ?? []),
64
+ ...(result.__pluginDirs ?? []),
65
+ pluginDir,
66
+ ],
67
+ };
68
+ },
69
+ };
70
+ };
71
+ };
@@ -1,6 +1,6 @@
1
- import { stat } from "node:fs/promises";
2
-
3
- export const fileExists = (path: string) =>
4
- stat(path)
5
- .then(() => true)
6
- .catch(() => false);
1
+ import { stat } from "node:fs/promises";
2
+
3
+ export const fileExists = (path: string) =>
4
+ stat(path)
5
+ .then(() => true)
6
+ .catch(() => false);