@lukoweb/apitogo 0.1.24 → 0.1.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +92 -0
- package/cli.js +13 -13
- package/client.d.ts +8 -8
- package/dist/cli/cli.js +1117 -624
- package/dist/declarations/config/config.d.ts +4 -0
- package/dist/declarations/config/loader.d.ts +2 -0
- package/dist/declarations/config/resolve-modules.d.ts +34 -0
- package/dist/declarations/config/validators/InputNavigationSchema.d.ts +7 -7
- package/dist/declarations/config/validators/ModulesSchema.d.ts +417 -0
- package/dist/declarations/config/validators/ZudokuConfig.d.ts +123 -4
- package/dist/declarations/index.d.ts +3 -1
- package/dist/declarations/lib/authentication/components/ProductionUnlockPage.d.ts +1 -0
- package/dist/declarations/lib/authentication/hook.d.ts +3 -19
- package/dist/declarations/lib/authentication/providers/dev-portal-constants.d.ts +16 -0
- package/dist/declarations/lib/authentication/providers/dev-portal-utils.d.ts +9 -0
- package/dist/declarations/lib/authentication/providers/dev-portal.d.ts +39 -0
- package/dist/declarations/lib/authentication/state.d.ts +12 -26
- package/dist/declarations/lib/components/LandingLayout.d.ts +4 -0
- package/dist/declarations/lib/components/index.d.ts +2 -0
- package/dist/declarations/lib/plugins/api-keys/index.d.ts +2 -1
- package/dist/flat-config.d.ts +209 -24
- package/docs/components/alert.mdx +130 -0
- package/docs/components/badge.mdx +70 -0
- package/docs/components/button.mdx +132 -0
- package/docs/components/callout.mdx +112 -0
- package/docs/components/card.mdx +104 -0
- package/docs/components/checkbox.mdx +72 -0
- package/docs/components/client-only.mdx +79 -0
- package/docs/components/code-tabs.mdx +179 -0
- package/docs/components/dialog.mdx +167 -0
- package/docs/components/head.mdx +200 -0
- package/docs/components/icons.mdx +27 -0
- package/docs/components/input.mdx +96 -0
- package/docs/components/label.mdx +86 -0
- package/docs/components/link.mdx +242 -0
- package/docs/components/markdown.mdx +151 -0
- package/docs/components/mermaid.mdx +81 -0
- package/docs/components/playground.mdx +87 -0
- package/docs/components/secret.mdx +79 -0
- package/docs/components/select.mdx +176 -0
- package/docs/components/shadcn.mdx +73 -0
- package/docs/components/slider.mdx +108 -0
- package/docs/components/slot.mdx +119 -0
- package/docs/components/stepper.mdx +138 -0
- package/docs/components/switch.mdx +96 -0
- package/docs/components/syntax-highlight.mdx +602 -0
- package/docs/components/textarea.mdx +78 -0
- package/docs/components/tooltip.mdx +195 -0
- package/docs/components/typography.mdx +61 -0
- package/docs/concepts/auth-provider-api-identities.md +109 -0
- package/docs/configuration/ai-assistants.md +65 -0
- package/docs/configuration/api-catalog.md +109 -0
- package/docs/configuration/api-reference.md +397 -0
- package/docs/configuration/authentication-auth0.md +174 -0
- package/docs/configuration/authentication-azure-ad.md +238 -0
- package/docs/configuration/authentication-clerk.md +110 -0
- package/docs/configuration/authentication-firebase.md +62 -0
- package/docs/configuration/authentication-pingfederate.md +136 -0
- package/docs/configuration/authentication-supabase.md +226 -0
- package/docs/configuration/authentication.md +231 -0
- package/docs/configuration/build-configuration.mdx +147 -0
- package/docs/configuration/docs.md +282 -0
- package/docs/configuration/footer.mdx +214 -0
- package/docs/configuration/llms.md +90 -0
- package/docs/configuration/make-config.mdx +90 -0
- package/docs/configuration/navigation.mdx +422 -0
- package/docs/configuration/overview.md +380 -0
- package/docs/configuration/protected-routes.md +150 -0
- package/docs/configuration/search.md +163 -0
- package/docs/configuration/sentry.mdx +44 -0
- package/docs/configuration/site.md +124 -0
- package/docs/configuration/slots.mdx +125 -0
- package/docs/configuration/vite-config.md +18 -0
- package/docs/custom-plugins.md +285 -0
- package/docs/customization/colors-theme.mdx +276 -0
- package/docs/customization/fonts.md +110 -0
- package/docs/deploy/apache-nginx.md +41 -0
- package/docs/deploy/apitogo.md +139 -0
- package/docs/deploy/cloudflare-pages.md +75 -0
- package/docs/deploy/direct-upload.md +18 -0
- package/docs/deploy/github-pages.md +50 -0
- package/docs/deploy/vercel.md +103 -0
- package/docs/deployment.md +21 -0
- package/docs/extending/events.md +124 -0
- package/docs/guides/custom-pages.md +106 -0
- package/docs/guides/environment-variables.md +99 -0
- package/docs/guides/managing-api-keys-and-identities.md +172 -0
- package/docs/guides/mermaid.mdx +70 -0
- package/docs/guides/navigation-migration.md +87 -0
- package/docs/guides/navigation-rules.mdx +203 -0
- package/docs/guides/processors.mdx +234 -0
- package/docs/guides/static-files.md +55 -0
- package/docs/guides/transforming-examples.md +156 -0
- package/docs/guides/using-multiple-apis.md +87 -0
- package/docs/markdown/admonitions.md +128 -0
- package/docs/markdown/code-blocks.md +196 -0
- package/docs/markdown/frontmatter.md +173 -0
- package/docs/markdown/mdx.md +68 -0
- package/docs/markdown/overview.md +275 -0
- package/docs/plugins.md +5 -0
- package/docs/quickstart.md +87 -0
- package/docs/writing.mdx +72 -0
- package/package.json +170 -116
- package/src/app/ZuploBuildConfig.ts +36 -36
- package/src/app/defaultTheme.css +77 -77
- package/src/app/demo-cdn.html +37 -37
- package/src/app/demo.html +21 -21
- package/src/app/demo.tsx +77 -77
- package/src/app/entry.client.tsx +118 -118
- package/src/app/entry.server.tsx +160 -160
- package/src/app/env.ts +40 -40
- package/src/app/font.geist.css +73 -73
- package/src/app/main.css +390 -390
- package/src/app/main.tsx +8 -1
- package/src/app/polyfills.ts +47 -47
- package/src/app/processRoutes.tsx +51 -25
- package/src/app/sentry.ts +24 -24
- package/src/app/standalone.html +23 -23
- package/src/app/standalone.tsx +60 -60
- package/src/app/utils/createRedirectRoutes.ts +11 -11
- package/src/config/config.ts +32 -0
- package/src/config/create-plugin.ts +71 -71
- package/src/config/file-exists.ts +6 -6
- package/src/config/loader.ts +11 -1
- package/src/config/resolve-modules.ts +260 -0
- package/src/config/validators/BuildSchema.ts +95 -95
- package/src/config/validators/HeaderNavigationSchema.ts +41 -41
- package/src/config/validators/InputNavigationSchema.test-d.ts +178 -178
- package/src/config/validators/InputNavigationSchema.ts +206 -206
- package/src/config/validators/ModulesSchema.ts +312 -0
- package/src/config/validators/ProtectedRoutesSchema.ts +35 -35
- package/src/config/validators/ZudokuConfig.ts +766 -729
- package/src/config/validators/auth.ts +3 -3
- package/src/config/validators/reason-codes.ts +7 -7
- package/src/env.d.ts +11 -11
- package/src/index.ts +31 -0
- package/src/lib/MissingIcon.tsx +22 -22
- package/src/lib/assets/language-icons/bun.tsx +50 -50
- package/src/lib/assets/language-icons/c.tsx +31 -31
- package/src/lib/assets/language-icons/commonlisp.tsx +22 -22
- package/src/lib/assets/language-icons/cpp.tsx +35 -35
- package/src/lib/assets/language-icons/csharp.tsx +35 -35
- package/src/lib/assets/language-icons/css.tsx +36 -36
- package/src/lib/assets/language-icons/dart.tsx +39 -39
- package/src/lib/assets/language-icons/elixir.tsx +19 -19
- package/src/lib/assets/language-icons/go.tsx +19 -19
- package/src/lib/assets/language-icons/graphql.tsx +19 -19
- package/src/lib/assets/language-icons/html.tsx +24 -24
- package/src/lib/assets/language-icons/java.tsx +35 -35
- package/src/lib/assets/language-icons/javascript.tsx +11 -11
- package/src/lib/assets/language-icons/json.tsx +19 -19
- package/src/lib/assets/language-icons/kotlin.tsx +30 -30
- package/src/lib/assets/language-icons/markdown.tsx +19 -19
- package/src/lib/assets/language-icons/mdx.tsx +23 -23
- package/src/lib/assets/language-icons/npm.tsx +15 -15
- package/src/lib/assets/language-icons/objectivec.tsx +23 -23
- package/src/lib/assets/language-icons/ocaml.tsx +34 -34
- package/src/lib/assets/language-icons/php.tsx +19 -19
- package/src/lib/assets/language-icons/pnpm.tsx +32 -32
- package/src/lib/assets/language-icons/powershell.tsx +27 -27
- package/src/lib/assets/language-icons/python.tsx +23 -23
- package/src/lib/assets/language-icons/react.tsx +21 -21
- package/src/lib/assets/language-icons/ruby.tsx +19 -19
- package/src/lib/assets/language-icons/rust.tsx +19 -19
- package/src/lib/assets/language-icons/scala.tsx +19 -19
- package/src/lib/assets/language-icons/shell.tsx +19 -19
- package/src/lib/assets/language-icons/swift.tsx +19 -19
- package/src/lib/assets/language-icons/toml.tsx +23 -23
- package/src/lib/assets/language-icons/typescript.tsx +23 -23
- package/src/lib/assets/language-icons/xml.tsx +19 -19
- package/src/lib/assets/language-icons/yaml.tsx +23 -23
- package/src/lib/assets/language-icons/yarn.tsx +17 -17
- package/src/lib/assets/language-icons/zig.tsx +32 -32
- package/src/lib/auth/issuer.ts +34 -31
- package/src/lib/authentication/AuthenticationPlugin.tsx +33 -33
- package/src/lib/authentication/authentication.ts +48 -48
- package/src/lib/authentication/components/OAuthErrorPage.tsx +197 -197
- package/src/lib/authentication/components/ProductionUnlockPage.tsx +27 -0
- package/src/lib/authentication/components/SignOut.tsx +15 -15
- package/src/lib/authentication/constants.ts +1 -1
- package/src/lib/authentication/errors.ts +34 -34
- package/src/lib/authentication/hook.ts +141 -139
- package/src/lib/authentication/providers/auth0.tsx +91 -91
- package/src/lib/authentication/providers/azureb2c.tsx +223 -223
- package/src/lib/authentication/providers/dev-portal-constants.ts +21 -0
- package/src/lib/authentication/providers/dev-portal-utils.ts +107 -0
- package/src/lib/authentication/providers/dev-portal.tsx +270 -0
- package/src/lib/authentication/providers/firebase.tsx +486 -486
- package/src/lib/authentication/providers/openid.tsx +516 -516
- package/src/lib/authentication/providers/supabase.tsx +412 -412
- package/src/lib/authentication/providers/util.ts +26 -26
- package/src/lib/authentication/state.ts +179 -91
- package/src/lib/authentication/ui/icons/Apple.tsx +10 -10
- package/src/lib/authentication/ui/icons/Facebook.tsx +15 -15
- package/src/lib/authentication/ui/icons/Github.tsx +16 -16
- package/src/lib/authentication/ui/icons/Google.tsx +16 -16
- package/src/lib/authentication/ui/icons/Microsoft.tsx +12 -12
- package/src/lib/authentication/ui/icons/X.tsx +10 -10
- package/src/lib/authentication/utils/relativeRedirectUrl.ts +16 -16
- package/src/lib/components/AnchorLink.tsx +24 -24
- package/src/lib/components/Banner.tsx +52 -52
- package/src/lib/components/Bootstrap.tsx +77 -77
- package/src/lib/components/BuildCheck.tsx +87 -87
- package/src/lib/components/CategoryHeading.tsx +19 -19
- package/src/lib/components/ClientOnly.tsx +19 -19
- package/src/lib/components/ErrorPage.tsx +26 -26
- package/src/lib/components/Footer.tsx +140 -140
- package/src/lib/components/Framed.tsx +51 -51
- package/src/lib/components/Header.tsx +11 -3
- package/src/lib/components/HeaderNavigation.tsx +148 -148
- package/src/lib/components/Heading.tsx +84 -84
- package/src/lib/components/InlineCode.tsx +15 -15
- package/src/lib/components/LandingLayout.tsx +21 -0
- package/src/lib/components/LanguageIcon.tsx +199 -199
- package/src/lib/components/Markdown.tsx +55 -55
- package/src/lib/components/Meta.tsx +46 -46
- package/src/lib/components/MobileTopNavigation.tsx +11 -3
- package/src/lib/components/NotFoundPage.tsx +37 -37
- package/src/lib/components/PageProgress.tsx +28 -28
- package/src/lib/components/PagefindSearchMeta.tsx +14 -14
- package/src/lib/components/Pagination.tsx +44 -44
- package/src/lib/components/PathRenderer.tsx +61 -61
- package/src/lib/components/PluginHeads.tsx +17 -17
- package/src/lib/components/Search.tsx +70 -70
- package/src/lib/components/Slot.tsx +64 -64
- package/src/lib/components/Spinner.tsx +5 -5
- package/src/lib/components/StatusPage.tsx +96 -96
- package/src/lib/components/ThemeSwitch.tsx +49 -49
- package/src/lib/components/Typography.tsx +12 -12
- package/src/lib/components/Zudoku.tsx +106 -106
- package/src/lib/components/cache.ts +27 -27
- package/src/lib/components/context/RenderContext.ts +11 -11
- package/src/lib/components/context/RouterEventsEmitter.tsx +19 -19
- package/src/lib/components/context/SlotProvider.tsx +149 -149
- package/src/lib/components/context/ViewportAnchorContext.tsx +137 -137
- package/src/lib/components/context/ZudokuContext.ts +140 -140
- package/src/lib/components/context/ZudokuProvider.tsx +22 -22
- package/src/lib/components/context/ZudokuReactContext.tsx +17 -17
- package/src/lib/components/index.ts +2 -0
- package/src/lib/components/navigation/Navigation.tsx +51 -51
- package/src/lib/components/navigation/NavigationBadge.tsx +48 -48
- package/src/lib/components/navigation/NavigationFilterContext.tsx +28 -28
- package/src/lib/components/navigation/NavigationWrapper.tsx +49 -49
- package/src/lib/components/navigation/Toc.tsx +137 -137
- package/src/lib/components/navigation/ZudokuLogo.tsx +25 -25
- package/src/lib/components/navigation/ZuploLogo.tsx +14 -14
- package/src/lib/components/navigation/utils.ts +234 -234
- package/src/lib/core/RouteGuard.tsx +11 -1
- package/src/lib/core/ZudokuContext.ts +271 -271
- package/src/lib/core/plugins.ts +138 -138
- package/src/lib/core/react-query.ts +1 -1
- package/src/lib/core/router.ts +1 -1
- package/src/lib/core/transform-config.ts +67 -67
- package/src/lib/demo/DemoAnnouncement.tsx +17 -17
- package/src/lib/errors/ErrorAlert.tsx +28 -28
- package/src/lib/errors/RouterError.tsx +18 -18
- package/src/lib/errors/ServerError.tsx +5 -5
- package/src/lib/errors/TopLevelError.tsx +6 -6
- package/src/lib/hooks/index.ts +13 -13
- package/src/lib/hooks/useEvent.ts +41 -41
- package/src/lib/hooks/useHighlighter.ts +15 -15
- package/src/lib/hooks/useHotkey.ts +70 -70
- package/src/lib/icons.ts +2 -2
- package/src/lib/navigation/applyRules.ts +127 -127
- package/src/lib/navigation/pathMatcher.ts +81 -81
- package/src/lib/oas/graphql/circular.ts +69 -69
- package/src/lib/oas/graphql/constants.ts +2 -2
- package/src/lib/oas/graphql/index.ts +791 -791
- package/src/lib/oas/parser/dereference/index.ts +84 -84
- package/src/lib/oas/parser/dereference/resolveRef.ts +32 -32
- package/src/lib/oas/parser/index.ts +129 -129
- package/src/lib/oas/parser/schemas/v3.0.json +1489 -1489
- package/src/lib/oas/parser/schemas/v3.1.json +1298 -1298
- package/src/lib/oas/parser/upgrade/index.ts +174 -174
- package/src/lib/plugins/api-catalog/index.tsx +119 -119
- package/src/lib/plugins/api-keys/ProtectedRoute.tsx +33 -33
- package/src/lib/plugins/api-keys/index.tsx +274 -272
- package/src/lib/plugins/api-keys/settings/ApiKeyList.tsx +67 -67
- package/src/lib/plugins/custom-pages/index.tsx +32 -32
- package/src/lib/plugins/markdown/assets/ChatGPTLogo.tsx +11 -11
- package/src/lib/plugins/markdown/assets/ClaudeLogo.tsx +19 -19
- package/src/lib/plugins/markdown/index.tsx +62 -62
- package/src/lib/plugins/openapi/ColorizedParam.tsx +115 -115
- package/src/lib/plugins/openapi/Endpoint.tsx +85 -85
- package/src/lib/plugins/openapi/MCPEndpoint.tsx +273 -273
- package/src/lib/plugins/openapi/OasProvider.tsx +74 -74
- package/src/lib/plugins/openapi/OperationList.tsx +275 -275
- package/src/lib/plugins/openapi/ParamInfos.tsx +96 -96
- package/src/lib/plugins/openapi/ParameterList.tsx +53 -53
- package/src/lib/plugins/openapi/ParameterListItem.tsx +161 -161
- package/src/lib/plugins/openapi/PlaygroundDialogWrapper.tsx +67 -67
- package/src/lib/plugins/openapi/SidecarBox.tsx +57 -57
- package/src/lib/plugins/openapi/SimpleSelect.tsx +46 -46
- package/src/lib/plugins/openapi/client/GraphQLClient.tsx +73 -73
- package/src/lib/plugins/openapi/client/GraphQLContext.tsx +16 -16
- package/src/lib/plugins/openapi/client/createServer.ts +35 -35
- package/src/lib/plugins/openapi/client/useCreateQuery.ts +44 -44
- package/src/lib/plugins/openapi/components/ConstValue.tsx +24 -24
- package/src/lib/plugins/openapi/components/NonHighlightedCode.tsx +22 -22
- package/src/lib/plugins/openapi/components/SelectOnClick.tsx +29 -29
- package/src/lib/plugins/openapi/context.tsx +16 -16
- package/src/lib/plugins/openapi/graphql/fragment-masking.ts +104 -104
- package/src/lib/plugins/openapi/graphql/gql.ts +95 -95
- package/src/lib/plugins/openapi/graphql/graphql.ts +835 -835
- package/src/lib/plugins/openapi/graphql/index.ts +2 -2
- package/src/lib/plugins/openapi/index.tsx +221 -221
- package/src/lib/plugins/openapi/interfaces.ts +100 -100
- package/src/lib/plugins/openapi/playground/Headers.tsx +6 -6
- package/src/lib/plugins/openapi/playground/PathParams.tsx +53 -53
- package/src/lib/plugins/openapi/playground/Spinner.tsx +87 -87
- package/src/lib/plugins/openapi/playground/createUrl.ts +25 -25
- package/src/lib/plugins/openapi/playground/fileUtils.ts +36 -36
- package/src/lib/plugins/openapi/playground/rememberedIdentity.ts +26 -26
- package/src/lib/plugins/openapi/playground/request-panel/UrlPath.tsx +31 -31
- package/src/lib/plugins/openapi/playground/request-panel/UrlQueryParams.tsx +29 -29
- package/src/lib/plugins/openapi/playground/request-panel/useKeyValueFieldManager.ts +340 -340
- package/src/lib/plugins/openapi/playground/result-panel/ResponseStatusBar.tsx +117 -117
- package/src/lib/plugins/openapi/playground/result-panel/convertToTypes.ts +36 -36
- package/src/lib/plugins/openapi/playground/serializeQueryParams.ts +125 -125
- package/src/lib/plugins/openapi/playground/useRememberSkipLoginDialog.tsx +23 -23
- package/src/lib/plugins/openapi/processors/removeExtensions.ts +29 -29
- package/src/lib/plugins/openapi/processors/removeParameters.ts +103 -103
- package/src/lib/plugins/openapi/processors/removePaths.ts +57 -57
- package/src/lib/plugins/openapi/processors/traverse.ts +1 -1
- package/src/lib/plugins/openapi/schema/SchemaExampleAndDefault.tsx +39 -39
- package/src/lib/plugins/openapi/schema/UnionView.tsx +132 -132
- package/src/lib/plugins/openapi/schema/union-helpers.ts +123 -123
- package/src/lib/plugins/openapi/schema/utils.ts +49 -49
- package/src/lib/plugins/openapi/state.ts +36 -36
- package/src/lib/plugins/openapi/util/buildTagCategories.ts +54 -54
- package/src/lib/plugins/openapi/util/createHttpSnippet.ts +135 -135
- package/src/lib/plugins/openapi/util/createNavigationCategory.tsx +39 -39
- package/src/lib/plugins/openapi/util/generateSchemaExample.ts +191 -191
- package/src/lib/plugins/openapi/util/getRoutes.tsx +265 -265
- package/src/lib/plugins/openapi/util/methodColorMap.tsx +11 -11
- package/src/lib/plugins/openapi/util/methodToColor.ts +27 -27
- package/src/lib/plugins/openapi/util/sanitizeMarkdownForMetatag.tsx +32 -32
- package/src/lib/plugins/openapi/util/useWarmupSchema.ts +23 -23
- package/src/lib/plugins/search-inkeep/index.tsx +108 -108
- package/src/lib/plugins/search-inkeep/inkeep.ts +24 -24
- package/src/lib/plugins/search-pagefind/get-results.tsx +74 -74
- package/src/lib/plugins/search-pagefind/index.tsx +21 -21
- package/src/lib/plugins/search-pagefind/types.ts +118 -118
- package/src/lib/shiki-constants.ts +24 -24
- package/src/lib/testing/index.tsx +146 -146
- package/src/lib/ui/Accordion.tsx +55 -55
- package/src/lib/ui/Alert.tsx +84 -84
- package/src/lib/ui/AlertDialog.tsx +195 -195
- package/src/lib/ui/AspectRatio.tsx +5 -5
- package/src/lib/ui/Badge.tsx +48 -48
- package/src/lib/ui/Breadcrumb.tsx +115 -115
- package/src/lib/ui/Button.tsx +65 -65
- package/src/lib/ui/ButtonGroup.tsx +80 -80
- package/src/lib/ui/Callout.tsx +113 -113
- package/src/lib/ui/Card.tsx +95 -95
- package/src/lib/ui/Carousel.tsx +259 -259
- package/src/lib/ui/Checkbox.tsx +28 -28
- package/src/lib/ui/CodeBlock.tsx +92 -92
- package/src/lib/ui/CodeTabPanel.tsx +13 -13
- package/src/lib/ui/CodeTabs.tsx +161 -161
- package/src/lib/ui/Collapsible.tsx +31 -31
- package/src/lib/ui/Dialog.tsx +138 -138
- package/src/lib/ui/DismissibleAlert.tsx +74 -74
- package/src/lib/ui/Drawer.tsx +121 -121
- package/src/lib/ui/DropdownMenu.tsx +254 -254
- package/src/lib/ui/EmbeddedCodeBlock.tsx +99 -99
- package/src/lib/ui/Form.tsx +176 -176
- package/src/lib/ui/Frame.tsx +81 -81
- package/src/lib/ui/HoverCard.tsx +26 -26
- package/src/lib/ui/Input.tsx +23 -23
- package/src/lib/ui/InputGroup.tsx +168 -168
- package/src/lib/ui/Item.tsx +213 -213
- package/src/lib/ui/Kbd.tsx +28 -28
- package/src/lib/ui/Label.tsx +23 -23
- package/src/lib/ui/NativeSelect.tsx +48 -48
- package/src/lib/ui/NavigationMenu.tsx +169 -169
- package/src/lib/ui/Pagination.tsx +115 -115
- package/src/lib/ui/Popover.tsx +28 -28
- package/src/lib/ui/Progress.tsx +25 -25
- package/src/lib/ui/RadioGroup.tsx +41 -41
- package/src/lib/ui/ReactComponentDoc.tsx +68 -68
- package/src/lib/ui/ScrollArea.tsx +45 -45
- package/src/lib/ui/Secret.tsx +133 -133
- package/src/lib/ui/Select.tsx +184 -184
- package/src/lib/ui/Separator.tsx +25 -25
- package/src/lib/ui/Skeleton.tsx +15 -15
- package/src/lib/ui/Slider.tsx +25 -25
- package/src/lib/ui/Stepper.tsx +8 -8
- package/src/lib/ui/Switch.tsx +26 -26
- package/src/lib/ui/SyntaxHighlight.tsx +54 -54
- package/src/lib/ui/Tabs.tsx +52 -52
- package/src/lib/ui/Textarea.tsx +22 -22
- package/src/lib/ui/Toggle.tsx +42 -42
- package/src/lib/ui/ToggleGroup.tsx +58 -58
- package/src/lib/ui/Tooltip.tsx +65 -65
- package/src/lib/ui/Value.tsx +42 -42
- package/src/lib/ui/util.tsx +8 -8
- package/src/lib/util/cn.ts +6 -6
- package/src/lib/util/createVariantComponent.tsx +61 -61
- package/src/lib/util/ensureArray.ts +3 -3
- package/src/lib/util/flattenAllOf.ts +72 -72
- package/src/lib/util/flattenAllOfProcessor.ts +74 -74
- package/src/lib/util/hastToJsx.tsx +67 -67
- package/src/lib/util/humanFileSize.ts +15 -15
- package/src/lib/util/invariant.ts +52 -52
- package/src/lib/util/joinUrl.ts +60 -60
- package/src/lib/util/logInit.ts +9 -9
- package/src/lib/util/objectEntries.ts +5 -5
- package/src/lib/util/os.ts +18 -18
- package/src/lib/util/pastellize.ts +25 -25
- package/src/lib/util/problemJson.ts +63 -63
- package/src/lib/util/readFrontmatter.ts +14 -14
- package/src/lib/util/renderIf.ts +4 -4
- package/src/lib/util/scrollIntoViewIfNeeded.ts +18 -18
- package/src/lib/util/slugify.ts +21 -21
- package/src/lib/util/syncZustandState.ts +22 -22
- package/src/lib/util/traverse.ts +70 -70
- package/src/lib/util/types.ts +7 -7
- package/src/lib/util/url.ts +18 -18
- package/src/lib/util/useCopyToClipboard.ts +17 -17
- package/src/lib/util/useExposedProps.tsx +27 -27
- package/src/lib/util/useIsomorphicLayoutEffect.ts +6 -6
- package/src/lib/util/useLatest.ts +18 -18
- package/src/lib/util/useOnScreen.ts +34 -34
- package/src/lib/util/useScrollToAnchor.ts +70 -70
- package/src/lib/util/useScrollToTop.ts +18 -18
- package/src/types.d.ts +57 -53
- package/src/vite/api/SchemaManager.ts +371 -371
- package/src/vite/api/schema-codegen.ts +163 -163
- package/src/vite/config.ts +5 -1
- package/src/vite/css/collect.ts +42 -42
- package/src/vite/css/plugin.ts +105 -105
- package/src/vite/debug.ts +18 -18
- package/src/vite/dev-portal-env.ts +93 -0
- package/src/vite/html.ts +54 -54
- package/src/vite/index.ts +2 -2
- package/src/vite/mdx/rehype-extract-toc-with-jsx-export.ts +19 -19
- package/src/vite/mdx/rehype-extract-toc-with-jsx.ts +70 -70
- package/src/vite/mdx/remark-code-tabs.ts +47 -47
- package/src/vite/mdx/remark-inject-filepath.ts +13 -13
- package/src/vite/mdx/remark-last-modified.ts +103 -103
- package/src/vite/mdx/remark-link-rewrite.ts +23 -23
- package/src/vite/mdx/remark-normalize-image-url.ts +15 -15
- package/src/vite/mdx/remark-static-generation.ts +149 -149
- package/src/vite/mdx/utils.ts +32 -32
- package/src/vite/output.ts +261 -261
- package/src/vite/package-root.ts +12 -12
- package/src/vite/pagefind-dev-index.ts +100 -100
- package/src/vite/plugin-api-keys.ts +6 -1
- package/src/vite/plugin-api.ts +4 -1
- package/src/vite/plugin-auth.ts +5 -1
- package/src/vite/plugin-component.ts +1 -1
- package/src/vite/plugin-config-reload.ts +49 -49
- package/src/vite/plugin-doc-metadata.ts +45 -45
- package/src/vite/plugin-docs.ts +4 -1
- package/src/vite/plugin-metadata.ts +30 -30
- package/src/vite/plugin-modules.ts +144 -0
- package/src/vite/plugin-shiki-register.ts +97 -97
- package/src/vite/plugin-theme.ts +399 -399
- package/src/vite/plugin.ts +2 -0
- package/src/vite/prerender/utils.ts +76 -76
- package/src/vite/prerender/worker.ts +118 -118
- package/src/vite/reporter.ts +34 -34
- package/src/vite/shadcn-registry.ts +48 -48
- package/src/vite/sitemap.ts +78 -78
- package/src/vite/ssr-templates/cloudflare.ts +19 -19
- package/src/vite/ssr-templates/node.ts +25 -25
- package/src/vite/ssr-templates/vercel.ts +22 -22
- package/src/vite/zuplo.ts +30 -30
- package/src/vite-env.d.ts +6 -6
- package/src/zuplo/enrich-with-zuplo-mcp.ts +168 -168
- package/src/zuplo/enrich-with-zuplo.ts +256 -256
- package/src/zuplo/policy-types.ts +46 -46
- package/src/zuplo/with-zuplo-processors.ts +36 -36
- package/src/zuplo/with-zuplo.ts +14 -14
- package/LICENSE.md +0 -18
- package/dist/declarations/lib/components/navigation/ZudokuLogo.d.ts +0 -6
package/src/config/loader.ts
CHANGED
|
@@ -13,6 +13,8 @@ import { getZudokuRootDir } from "../cli/common/package-json.js";
|
|
|
13
13
|
import { runPluginTransformConfig } from "../lib/core/transform-config.js";
|
|
14
14
|
import invariant from "../lib/util/invariant.js";
|
|
15
15
|
import { fileExists } from "./file-exists.js";
|
|
16
|
+
import { resolveModulesConfig } from "./resolve-modules.js";
|
|
17
|
+
import type { ResolvedModulesConfig } from "./validators/ModulesSchema.js";
|
|
16
18
|
import type { ZudokuConfig } from "./validators/ZudokuConfig.js";
|
|
17
19
|
import { validateConfig } from "./validators/ZudokuConfig.js";
|
|
18
20
|
|
|
@@ -24,6 +26,7 @@ export type ConfigWithMeta = ZudokuConfig & {
|
|
|
24
26
|
mode: typeof process.env.ZUDOKU_ENV;
|
|
25
27
|
dependencies: string[];
|
|
26
28
|
};
|
|
29
|
+
__resolvedModules: ResolvedModulesConfig;
|
|
27
30
|
};
|
|
28
31
|
|
|
29
32
|
let config: ConfigWithMeta | undefined;
|
|
@@ -108,6 +111,7 @@ async function loadZudokuConfigWithMeta(
|
|
|
108
111
|
dependencies,
|
|
109
112
|
configPath,
|
|
110
113
|
},
|
|
114
|
+
__resolvedModules: resolveModulesConfig(config),
|
|
111
115
|
};
|
|
112
116
|
|
|
113
117
|
return configWithMetadata;
|
|
@@ -210,7 +214,11 @@ export async function loadZudokuConfig(
|
|
|
210
214
|
|
|
211
215
|
try {
|
|
212
216
|
const loadedConfig = await loadZudokuConfigWithMeta(rootDir);
|
|
213
|
-
|
|
217
|
+
const transformedConfig = await runPluginTransformConfig(loadedConfig);
|
|
218
|
+
config = {
|
|
219
|
+
...transformedConfig,
|
|
220
|
+
__resolvedModules: resolveModulesConfig(transformedConfig),
|
|
221
|
+
};
|
|
214
222
|
|
|
215
223
|
if (!process.env.APITOGO_JSON_ONLY) {
|
|
216
224
|
logger.info(
|
|
@@ -236,6 +244,7 @@ export async function loadZudokuConfig(
|
|
|
236
244
|
}
|
|
237
245
|
|
|
238
246
|
export const setStandaloneConfig = (rootDir: string) => {
|
|
247
|
+
const emptyConfig = {};
|
|
239
248
|
config = {
|
|
240
249
|
__meta: {
|
|
241
250
|
rootDir,
|
|
@@ -244,5 +253,6 @@ export const setStandaloneConfig = (rootDir: string) => {
|
|
|
244
253
|
dependencies: [],
|
|
245
254
|
configPath: "",
|
|
246
255
|
},
|
|
256
|
+
__resolvedModules: resolveModulesConfig(emptyConfig),
|
|
247
257
|
};
|
|
248
258
|
};
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
import {
|
|
2
|
+
type ResolvedModulesConfig,
|
|
3
|
+
ModulesSchema,
|
|
4
|
+
type LandingContentConfig,
|
|
5
|
+
type ResolvedLandingContent,
|
|
6
|
+
type DashboardContentConfig,
|
|
7
|
+
type ProfileContentConfig,
|
|
8
|
+
type PlansContentConfig,
|
|
9
|
+
type ResolvedDashboardContent,
|
|
10
|
+
type ResolvedProfileContent,
|
|
11
|
+
type ResolvedPlansContent,
|
|
12
|
+
} from "./validators/ModulesSchema.js";
|
|
13
|
+
import type { ZudokuConfig } from "./validators/ZudokuConfig.js";
|
|
14
|
+
|
|
15
|
+
const DEFAULT_DOCS_FILES = "/pages/**/*.{md,mdx}";
|
|
16
|
+
|
|
17
|
+
const hasExplicitModules = (config: ZudokuConfig) =>
|
|
18
|
+
config.modules !== undefined;
|
|
19
|
+
|
|
20
|
+
export const joinPanelPath = (basePath: string, routePath: string): string => {
|
|
21
|
+
if (routePath.startsWith("/")) {
|
|
22
|
+
return routePath.replace(/\/+$/, "") || "/";
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const base = basePath.replace(/\/+$/, "");
|
|
26
|
+
const route = routePath.replace(/^\/+/, "");
|
|
27
|
+
|
|
28
|
+
if (!base) {
|
|
29
|
+
return `/${route}`;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return `/${`${base}/${route}`.replace(/^\/+/, "")}`;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
const DEFAULT_LANDING_FEATURES: ResolvedLandingContent["features"] = [
|
|
36
|
+
{
|
|
37
|
+
title: "Documentation",
|
|
38
|
+
description:
|
|
39
|
+
"Write guides and references in Markdown or MDX with full navigation and search.",
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
title: "API Reference",
|
|
43
|
+
description:
|
|
44
|
+
"Publish interactive OpenAPI docs with a built-in playground and code samples.",
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
title: "Developer Portal",
|
|
48
|
+
description:
|
|
49
|
+
"Extend with landing pages, authentication, API keys, and subscription modules.",
|
|
50
|
+
},
|
|
51
|
+
];
|
|
52
|
+
|
|
53
|
+
export const resolveLandingContent = (
|
|
54
|
+
config: ZudokuConfig,
|
|
55
|
+
content?: LandingContentConfig,
|
|
56
|
+
): ResolvedLandingContent => {
|
|
57
|
+
const siteTitle =
|
|
58
|
+
config.metadata?.applicationName ?? config.site?.title ?? "APIToGo";
|
|
59
|
+
|
|
60
|
+
return {
|
|
61
|
+
hero: {
|
|
62
|
+
title: content?.hero?.title ?? siteTitle,
|
|
63
|
+
subtitle: content?.hero?.subtitle ?? "Developer portal",
|
|
64
|
+
description:
|
|
65
|
+
content?.hero?.description ??
|
|
66
|
+
config.metadata?.description ??
|
|
67
|
+
"Ship beautiful API documentation and developer experiences with APIToGo.",
|
|
68
|
+
},
|
|
69
|
+
features: content?.features ?? DEFAULT_LANDING_FEATURES,
|
|
70
|
+
primaryAction: content?.primaryAction ?? {
|
|
71
|
+
label: "Get started",
|
|
72
|
+
href: "/introduction",
|
|
73
|
+
},
|
|
74
|
+
secondaryAction: content?.secondaryAction ?? {
|
|
75
|
+
label: "API Reference",
|
|
76
|
+
href: "/api",
|
|
77
|
+
},
|
|
78
|
+
showPoweredBy: content?.showPoweredBy,
|
|
79
|
+
};
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
const DEFAULT_DASHBOARD_QUICK_LINKS: ResolvedDashboardContent["quickLinks"] = [
|
|
83
|
+
{ label: "Documentation", href: "/introduction" },
|
|
84
|
+
{ label: "API Reference", href: "/api" },
|
|
85
|
+
];
|
|
86
|
+
|
|
87
|
+
export const resolveDashboardContent = (
|
|
88
|
+
content?: DashboardContentConfig,
|
|
89
|
+
): ResolvedDashboardContent => ({
|
|
90
|
+
title: content?.title ?? "Dashboard",
|
|
91
|
+
subtitle: content?.subtitle ?? "Account",
|
|
92
|
+
description:
|
|
93
|
+
content?.description ??
|
|
94
|
+
"Overview of your account activity, documentation shortcuts, and next steps.",
|
|
95
|
+
quickLinks: content?.quickLinks ?? DEFAULT_DASHBOARD_QUICK_LINKS,
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
export const resolveProfileContent = (
|
|
99
|
+
content?: ProfileContentConfig,
|
|
100
|
+
): ResolvedProfileContent => ({
|
|
101
|
+
title: content?.title ?? "Profile",
|
|
102
|
+
description:
|
|
103
|
+
content?.description ??
|
|
104
|
+
"View your account details and manage profile settings.",
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
export const resolvePlansContent = (
|
|
108
|
+
content?: PlansContentConfig,
|
|
109
|
+
): ResolvedPlansContent => ({
|
|
110
|
+
title: content?.title ?? "Plans & billing",
|
|
111
|
+
description:
|
|
112
|
+
content?.description ??
|
|
113
|
+
"Manage subscription tiers, billing details, and usage limits.",
|
|
114
|
+
tiers: content?.tiers,
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
export const resolveModulesConfig = (
|
|
118
|
+
config: ZudokuConfig,
|
|
119
|
+
): ResolvedModulesConfig => {
|
|
120
|
+
const parsedModules = ModulesSchema.parse(config.modules);
|
|
121
|
+
const modules = parsedModules ?? {};
|
|
122
|
+
const explicit = hasExplicitModules(config);
|
|
123
|
+
|
|
124
|
+
const docsModule = modules.docs;
|
|
125
|
+
const docsEnabled = explicit ? (docsModule?.enabled ?? true) : true;
|
|
126
|
+
|
|
127
|
+
const landingModule = modules.landing;
|
|
128
|
+
const landingEnabled = landingModule?.enabled ?? false;
|
|
129
|
+
|
|
130
|
+
const userPanelModule = modules.userPanel;
|
|
131
|
+
const dashboardConfig = userPanelModule?.dashboard;
|
|
132
|
+
const userManagementConfig = userPanelModule?.userManagement;
|
|
133
|
+
const apiKeysModuleConfig = userPanelModule?.apiKeys;
|
|
134
|
+
const plansConfig = userPanelModule?.plans;
|
|
135
|
+
|
|
136
|
+
const dashboardEnabled =
|
|
137
|
+
dashboardConfig?.enabled ?? (explicit ? false : false);
|
|
138
|
+
|
|
139
|
+
const userManagementEnabled = explicit
|
|
140
|
+
? (userManagementConfig?.enabled ?? !!config.authentication)
|
|
141
|
+
: !!config.authentication;
|
|
142
|
+
|
|
143
|
+
const apiKeysEnabled = explicit
|
|
144
|
+
? (apiKeysModuleConfig?.enabled ?? config.apiKeys?.enabled ?? false)
|
|
145
|
+
: (config.apiKeys?.enabled ?? false);
|
|
146
|
+
|
|
147
|
+
const plansEnabled = plansConfig?.enabled ?? false;
|
|
148
|
+
|
|
149
|
+
const userPanelEnabled =
|
|
150
|
+
userPanelModule?.enabled ??
|
|
151
|
+
(dashboardEnabled ||
|
|
152
|
+
userManagementEnabled ||
|
|
153
|
+
apiKeysEnabled ||
|
|
154
|
+
plansEnabled);
|
|
155
|
+
|
|
156
|
+
const basePath = userPanelModule?.basePath ?? "/account";
|
|
157
|
+
|
|
158
|
+
return {
|
|
159
|
+
docs: {
|
|
160
|
+
enabled: docsEnabled,
|
|
161
|
+
files: docsModule?.files ?? config.docs?.files,
|
|
162
|
+
publishMarkdown:
|
|
163
|
+
docsModule?.publishMarkdown ?? config.docs?.publishMarkdown,
|
|
164
|
+
defaultOptions: docsModule?.defaultOptions ?? config.docs?.defaultOptions,
|
|
165
|
+
llms: docsModule?.llms ?? config.docs?.llms,
|
|
166
|
+
},
|
|
167
|
+
landing: {
|
|
168
|
+
enabled: landingEnabled,
|
|
169
|
+
path: landingModule?.path ?? "/",
|
|
170
|
+
component: landingModule?.component,
|
|
171
|
+
layout: landingModule?.layout ?? "landing",
|
|
172
|
+
content: resolveLandingContent(config, landingModule?.content),
|
|
173
|
+
},
|
|
174
|
+
userPanel: {
|
|
175
|
+
enabled: userPanelEnabled,
|
|
176
|
+
basePath,
|
|
177
|
+
dashboard: {
|
|
178
|
+
enabled: dashboardEnabled,
|
|
179
|
+
path: joinPanelPath(basePath, dashboardConfig?.path ?? "dashboard"),
|
|
180
|
+
content: resolveDashboardContent(dashboardConfig?.content),
|
|
181
|
+
},
|
|
182
|
+
userManagement: {
|
|
183
|
+
enabled: userManagementEnabled,
|
|
184
|
+
routes: {
|
|
185
|
+
login: userManagementConfig?.routes?.login ?? "/signin",
|
|
186
|
+
register: userManagementConfig?.routes?.register ?? "/signup",
|
|
187
|
+
profile: joinPanelPath(
|
|
188
|
+
basePath,
|
|
189
|
+
userManagementConfig?.routes?.profile ?? "profile",
|
|
190
|
+
),
|
|
191
|
+
logout: userManagementConfig?.routes?.logout ?? "/signout",
|
|
192
|
+
},
|
|
193
|
+
content: resolveProfileContent(userManagementConfig?.content),
|
|
194
|
+
},
|
|
195
|
+
apiKeys: {
|
|
196
|
+
enabled: apiKeysEnabled,
|
|
197
|
+
path: joinPanelPath(
|
|
198
|
+
basePath,
|
|
199
|
+
apiKeysModuleConfig?.path ?? "settings/api-keys",
|
|
200
|
+
),
|
|
201
|
+
},
|
|
202
|
+
plans: {
|
|
203
|
+
enabled: plansEnabled,
|
|
204
|
+
path: joinPanelPath(basePath, plansConfig?.path ?? "plans"),
|
|
205
|
+
content: resolvePlansContent(plansConfig?.content),
|
|
206
|
+
},
|
|
207
|
+
},
|
|
208
|
+
};
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
export const getEffectiveRedirects = (
|
|
212
|
+
config: ZudokuConfig,
|
|
213
|
+
resolved: ResolvedModulesConfig,
|
|
214
|
+
) => {
|
|
215
|
+
const redirects = config.redirects ?? [];
|
|
216
|
+
|
|
217
|
+
if (!resolved.landing.enabled) {
|
|
218
|
+
return redirects;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
const landingPath = normalizePath(resolved.landing.path);
|
|
222
|
+
|
|
223
|
+
return redirects.filter(
|
|
224
|
+
(redirect) => normalizePath(redirect.from) !== landingPath,
|
|
225
|
+
);
|
|
226
|
+
};
|
|
227
|
+
|
|
228
|
+
const normalizePath = (path: string) => {
|
|
229
|
+
if (path === "/") {
|
|
230
|
+
return "/";
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
return path.replace(/\/+$/, "") || "/";
|
|
234
|
+
};
|
|
235
|
+
|
|
236
|
+
export const getEffectiveDocsConfig = (
|
|
237
|
+
config: ZudokuConfig,
|
|
238
|
+
resolved: ResolvedModulesConfig,
|
|
239
|
+
) => {
|
|
240
|
+
if (!resolved.docs.enabled) {
|
|
241
|
+
return undefined;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
return {
|
|
245
|
+
files: resolved.docs.files ?? config.docs?.files ?? [DEFAULT_DOCS_FILES],
|
|
246
|
+
publishMarkdown:
|
|
247
|
+
resolved.docs.publishMarkdown ?? config.docs?.publishMarkdown ?? false,
|
|
248
|
+
defaultOptions: resolved.docs.defaultOptions ?? config.docs?.defaultOptions,
|
|
249
|
+
llms: resolved.docs.llms ?? config.docs?.llms,
|
|
250
|
+
};
|
|
251
|
+
};
|
|
252
|
+
|
|
253
|
+
export const isDocsModuleEnabled = (config: ZudokuConfig) =>
|
|
254
|
+
resolveModulesConfig(config).docs.enabled;
|
|
255
|
+
|
|
256
|
+
export const isLandingModuleEnabled = (config: ZudokuConfig) =>
|
|
257
|
+
resolveModulesConfig(config).landing.enabled;
|
|
258
|
+
|
|
259
|
+
export const isUserPanelModuleEnabled = (config: ZudokuConfig) =>
|
|
260
|
+
resolveModulesConfig(config).userPanel.enabled;
|
|
@@ -1,95 +1,95 @@
|
|
|
1
|
-
import path from "node:path";
|
|
2
|
-
import type { PluggableList } from "unified";
|
|
3
|
-
import { runnerImport } from "vite";
|
|
4
|
-
import { z } from "zod";
|
|
5
|
-
import type { OpenAPIDocument } from "../../lib/oas/graphql/index.js";
|
|
6
|
-
import { fileExists } from "../file-exists.js";
|
|
7
|
-
import { getCurrentConfig } from "../loader.js";
|
|
8
|
-
|
|
9
|
-
// Schema for build processors
|
|
10
|
-
export const BuildProcessorSchema = z.custom<
|
|
11
|
-
(data: {
|
|
12
|
-
file: string;
|
|
13
|
-
schema: OpenAPIDocument;
|
|
14
|
-
params: Record<string, string>;
|
|
15
|
-
dereference: (schema: OpenAPIDocument) => Promise<OpenAPIDocument>;
|
|
16
|
-
}) => OpenAPIDocument | Promise<OpenAPIDocument>
|
|
17
|
-
>((val) => typeof val === "function");
|
|
18
|
-
|
|
19
|
-
export type Processor = z.infer<typeof BuildProcessorSchema>;
|
|
20
|
-
export type ProcessorArg = Parameters<Processor>[0];
|
|
21
|
-
|
|
22
|
-
const PluginConfigSchema = z
|
|
23
|
-
.custom<PluggableList>()
|
|
24
|
-
.or(
|
|
25
|
-
z.custom<(defaultPlugins: PluggableList) => PluggableList>(
|
|
26
|
-
(val) => typeof val === "function",
|
|
27
|
-
),
|
|
28
|
-
);
|
|
29
|
-
|
|
30
|
-
export const BuildConfigSchema = z.object({
|
|
31
|
-
processors: z.array(BuildProcessorSchema).optional(),
|
|
32
|
-
remarkPlugins: PluginConfigSchema.optional(),
|
|
33
|
-
rehypePlugins: PluginConfigSchema.optional(),
|
|
34
|
-
prerender: z.object({ workers: z.number().optional() }).optional(),
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
const buildConfigFiles = [
|
|
38
|
-
"apitogo.build.js",
|
|
39
|
-
"apitogo.build.jsx",
|
|
40
|
-
"apitogo.build.ts",
|
|
41
|
-
"apitogo.build.tsx",
|
|
42
|
-
"apitogo.build.mjs",
|
|
43
|
-
"zudoku.build.js",
|
|
44
|
-
"zudoku.build.jsx",
|
|
45
|
-
"zudoku.build.ts",
|
|
46
|
-
"zudoku.build.tsx",
|
|
47
|
-
"zudoku.build.mjs",
|
|
48
|
-
];
|
|
49
|
-
|
|
50
|
-
async function getBuildConfigFilePath(rootDir: string) {
|
|
51
|
-
for (const fileName of buildConfigFiles) {
|
|
52
|
-
const filepath = path.join(rootDir, fileName);
|
|
53
|
-
if (await fileExists(filepath)) {
|
|
54
|
-
return filepath;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
return undefined;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
export const getBuildConfig = async () => {
|
|
61
|
-
const initialConfig = getCurrentConfig();
|
|
62
|
-
const buildFilePath = await getBuildConfigFilePath(
|
|
63
|
-
initialConfig.__meta.rootDir,
|
|
64
|
-
);
|
|
65
|
-
|
|
66
|
-
if (!buildFilePath) return undefined;
|
|
67
|
-
|
|
68
|
-
const buildModule = await runnerImport<{ default: BuildConfig }>(
|
|
69
|
-
buildFilePath,
|
|
70
|
-
).then((m) => m.module.default);
|
|
71
|
-
|
|
72
|
-
return validateBuildConfig(buildModule);
|
|
73
|
-
};
|
|
74
|
-
|
|
75
|
-
export type BuildConfig = z.infer<typeof BuildConfigSchema>;
|
|
76
|
-
|
|
77
|
-
export function validateBuildConfig(config: unknown): BuildConfig | undefined {
|
|
78
|
-
const validationResult = BuildConfigSchema.safeParse(config);
|
|
79
|
-
|
|
80
|
-
if (!validationResult.success) {
|
|
81
|
-
// In production (build mode), throw an error to fail the build
|
|
82
|
-
if (process.env.NODE_ENV === "production") {
|
|
83
|
-
throw new Error(z.prettifyError(validationResult.error));
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
// In development mode, log warnings but don't fail
|
|
87
|
-
// biome-ignore lint/suspicious/noConsole: Logging allowed here
|
|
88
|
-
console.warn("Build config validation errors:");
|
|
89
|
-
// biome-ignore lint/suspicious/noConsole: Logging allowed here
|
|
90
|
-
console.warn(z.prettifyError(validationResult.error));
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
return validationResult.data;
|
|
95
|
-
}
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import type { PluggableList } from "unified";
|
|
3
|
+
import { runnerImport } from "vite";
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
import type { OpenAPIDocument } from "../../lib/oas/graphql/index.js";
|
|
6
|
+
import { fileExists } from "../file-exists.js";
|
|
7
|
+
import { getCurrentConfig } from "../loader.js";
|
|
8
|
+
|
|
9
|
+
// Schema for build processors
|
|
10
|
+
export const BuildProcessorSchema = z.custom<
|
|
11
|
+
(data: {
|
|
12
|
+
file: string;
|
|
13
|
+
schema: OpenAPIDocument;
|
|
14
|
+
params: Record<string, string>;
|
|
15
|
+
dereference: (schema: OpenAPIDocument) => Promise<OpenAPIDocument>;
|
|
16
|
+
}) => OpenAPIDocument | Promise<OpenAPIDocument>
|
|
17
|
+
>((val) => typeof val === "function");
|
|
18
|
+
|
|
19
|
+
export type Processor = z.infer<typeof BuildProcessorSchema>;
|
|
20
|
+
export type ProcessorArg = Parameters<Processor>[0];
|
|
21
|
+
|
|
22
|
+
const PluginConfigSchema = z
|
|
23
|
+
.custom<PluggableList>()
|
|
24
|
+
.or(
|
|
25
|
+
z.custom<(defaultPlugins: PluggableList) => PluggableList>(
|
|
26
|
+
(val) => typeof val === "function",
|
|
27
|
+
),
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
export const BuildConfigSchema = z.object({
|
|
31
|
+
processors: z.array(BuildProcessorSchema).optional(),
|
|
32
|
+
remarkPlugins: PluginConfigSchema.optional(),
|
|
33
|
+
rehypePlugins: PluginConfigSchema.optional(),
|
|
34
|
+
prerender: z.object({ workers: z.number().optional() }).optional(),
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
const buildConfigFiles = [
|
|
38
|
+
"apitogo.build.js",
|
|
39
|
+
"apitogo.build.jsx",
|
|
40
|
+
"apitogo.build.ts",
|
|
41
|
+
"apitogo.build.tsx",
|
|
42
|
+
"apitogo.build.mjs",
|
|
43
|
+
"zudoku.build.js",
|
|
44
|
+
"zudoku.build.jsx",
|
|
45
|
+
"zudoku.build.ts",
|
|
46
|
+
"zudoku.build.tsx",
|
|
47
|
+
"zudoku.build.mjs",
|
|
48
|
+
];
|
|
49
|
+
|
|
50
|
+
async function getBuildConfigFilePath(rootDir: string) {
|
|
51
|
+
for (const fileName of buildConfigFiles) {
|
|
52
|
+
const filepath = path.join(rootDir, fileName);
|
|
53
|
+
if (await fileExists(filepath)) {
|
|
54
|
+
return filepath;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export const getBuildConfig = async () => {
|
|
61
|
+
const initialConfig = getCurrentConfig();
|
|
62
|
+
const buildFilePath = await getBuildConfigFilePath(
|
|
63
|
+
initialConfig.__meta.rootDir,
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
if (!buildFilePath) return undefined;
|
|
67
|
+
|
|
68
|
+
const buildModule = await runnerImport<{ default: BuildConfig }>(
|
|
69
|
+
buildFilePath,
|
|
70
|
+
).then((m) => m.module.default);
|
|
71
|
+
|
|
72
|
+
return validateBuildConfig(buildModule);
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
export type BuildConfig = z.infer<typeof BuildConfigSchema>;
|
|
76
|
+
|
|
77
|
+
export function validateBuildConfig(config: unknown): BuildConfig | undefined {
|
|
78
|
+
const validationResult = BuildConfigSchema.safeParse(config);
|
|
79
|
+
|
|
80
|
+
if (!validationResult.success) {
|
|
81
|
+
// In production (build mode), throw an error to fail the build
|
|
82
|
+
if (process.env.NODE_ENV === "production") {
|
|
83
|
+
throw new Error(z.prettifyError(validationResult.error));
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// In development mode, log warnings but don't fail
|
|
87
|
+
// biome-ignore lint/suspicious/noConsole: Logging allowed here
|
|
88
|
+
console.warn("Build config validation errors:");
|
|
89
|
+
// biome-ignore lint/suspicious/noConsole: Logging allowed here
|
|
90
|
+
console.warn(z.prettifyError(validationResult.error));
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
return validationResult.data;
|
|
95
|
+
}
|
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
import { IconNames } from "./icon-types.js";
|
|
3
|
-
|
|
4
|
-
const IconSchema = z.enum(IconNames);
|
|
5
|
-
|
|
6
|
-
const HeaderNavLinkItemSchema = z.object({
|
|
7
|
-
label: z.string(),
|
|
8
|
-
icon: IconSchema.optional(),
|
|
9
|
-
description: z.string().optional(),
|
|
10
|
-
to: z.string(),
|
|
11
|
-
target: z.enum(["_self", "_blank"]).optional(),
|
|
12
|
-
});
|
|
13
|
-
|
|
14
|
-
const HeaderNavGroupSchema = z.object({
|
|
15
|
-
label: z.string(),
|
|
16
|
-
items: z.array(HeaderNavLinkItemSchema),
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
const HeaderNavItemSchema = z.union([
|
|
20
|
-
z.object({
|
|
21
|
-
label: z.string(),
|
|
22
|
-
icon: IconSchema.optional(),
|
|
23
|
-
to: z.string(),
|
|
24
|
-
target: z.enum(["_self", "_blank"]).optional(),
|
|
25
|
-
}),
|
|
26
|
-
z.object({
|
|
27
|
-
label: z.string(),
|
|
28
|
-
items: z.array(z.union([HeaderNavLinkItemSchema, HeaderNavGroupSchema])),
|
|
29
|
-
}),
|
|
30
|
-
]);
|
|
31
|
-
|
|
32
|
-
export const HeaderNavigationSchema = z.array(HeaderNavItemSchema);
|
|
33
|
-
|
|
34
|
-
export const isHeaderNavGroup = (
|
|
35
|
-
item: HeaderNavItem | HeaderNavLinkItem | HeaderNavGroup,
|
|
36
|
-
): item is HeaderNavGroup => "items" in item;
|
|
37
|
-
|
|
38
|
-
export type HeaderNavLinkItem = z.infer<typeof HeaderNavLinkItemSchema>;
|
|
39
|
-
export type HeaderNavGroup = z.infer<typeof HeaderNavGroupSchema>;
|
|
40
|
-
export type HeaderNavItem = z.infer<typeof HeaderNavItemSchema>;
|
|
41
|
-
export type HeaderNavigation = z.infer<typeof HeaderNavigationSchema>;
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { IconNames } from "./icon-types.js";
|
|
3
|
+
|
|
4
|
+
const IconSchema = z.enum(IconNames);
|
|
5
|
+
|
|
6
|
+
const HeaderNavLinkItemSchema = z.object({
|
|
7
|
+
label: z.string(),
|
|
8
|
+
icon: IconSchema.optional(),
|
|
9
|
+
description: z.string().optional(),
|
|
10
|
+
to: z.string(),
|
|
11
|
+
target: z.enum(["_self", "_blank"]).optional(),
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
const HeaderNavGroupSchema = z.object({
|
|
15
|
+
label: z.string(),
|
|
16
|
+
items: z.array(HeaderNavLinkItemSchema),
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
const HeaderNavItemSchema = z.union([
|
|
20
|
+
z.object({
|
|
21
|
+
label: z.string(),
|
|
22
|
+
icon: IconSchema.optional(),
|
|
23
|
+
to: z.string(),
|
|
24
|
+
target: z.enum(["_self", "_blank"]).optional(),
|
|
25
|
+
}),
|
|
26
|
+
z.object({
|
|
27
|
+
label: z.string(),
|
|
28
|
+
items: z.array(z.union([HeaderNavLinkItemSchema, HeaderNavGroupSchema])),
|
|
29
|
+
}),
|
|
30
|
+
]);
|
|
31
|
+
|
|
32
|
+
export const HeaderNavigationSchema = z.array(HeaderNavItemSchema);
|
|
33
|
+
|
|
34
|
+
export const isHeaderNavGroup = (
|
|
35
|
+
item: HeaderNavItem | HeaderNavLinkItem | HeaderNavGroup,
|
|
36
|
+
): item is HeaderNavGroup => "items" in item;
|
|
37
|
+
|
|
38
|
+
export type HeaderNavLinkItem = z.infer<typeof HeaderNavLinkItemSchema>;
|
|
39
|
+
export type HeaderNavGroup = z.infer<typeof HeaderNavGroupSchema>;
|
|
40
|
+
export type HeaderNavItem = z.infer<typeof HeaderNavItemSchema>;
|
|
41
|
+
export type HeaderNavigation = z.infer<typeof HeaderNavigationSchema>;
|