@brainfish-ai/devdoc 0.1.42 → 0.1.43
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/dist/cli/commands/dev.js +19 -10
- package/package.json +3 -2
- package/renderer/app/api/assets/[...path]/route.js +108 -0
- package/renderer/app/api/assets/route.js +114 -0
- package/renderer/app/api/assets/upload/route.js +163 -0
- package/renderer/app/api/auth-schemes/route.js +58 -0
- package/renderer/app/api/chat/route.js +759 -0
- package/renderer/app/api/codegen/route.js +52 -0
- package/renderer/app/api/collections/route.js +675 -0
- package/renderer/app/api/debug/route.js +47 -0
- package/renderer/app/api/deploy/route.js +199 -0
- package/renderer/app/api/device/route.js +36 -0
- package/renderer/app/api/docs/route.js +205 -0
- package/renderer/app/api/domains/add/route.js +121 -0
- package/renderer/app/api/domains/lookup/route.js +43 -0
- package/renderer/app/api/domains/remove/route.js +89 -0
- package/renderer/app/api/domains/status/route.js +140 -0
- package/renderer/app/api/domains/verify/route.js +168 -0
- package/renderer/app/api/keys/regenerate/route.js +71 -0
- package/renderer/app/api/local-assets/[...path]/route.js +108 -0
- package/renderer/app/api/openapi-spec/route.js +73 -0
- package/renderer/app/api/projects/[slug]/route.js +129 -0
- package/renderer/app/api/projects/[slug]/stats/route.js +80 -0
- package/renderer/app/api/projects/register/route.js +176 -0
- package/renderer/app/api/proxy/route.js +139 -0
- package/renderer/app/api/proxy-stream/route.js +156 -0
- package/renderer/app/api/redirects/route.js +35 -0
- package/renderer/app/api/schema/route.js +85 -0
- package/renderer/app/api/subdomains/check/route.js +158 -0
- package/renderer/app/api/suggestions/route.js +175 -0
- package/renderer/app/layout.js +47 -0
- package/renderer/app/llms-full.txt/route.js +257 -0
- package/renderer/app/llms.txt/route.js +219 -0
- package/renderer/app/page.js +12 -0
- package/renderer/app/robots.txt/route.js +66 -0
- package/renderer/app/sitemap.xml/route.js +145 -0
- package/renderer/components/docs/index.js +8 -0
- package/renderer/components/docs/mdx/accordion.js +113 -0
- package/renderer/components/docs/mdx/badge.js +72 -0
- package/renderer/components/docs/mdx/callouts.js +137 -0
- package/renderer/components/docs/mdx/cards.js +175 -0
- package/renderer/components/docs/mdx/changelog.js +100 -0
- package/renderer/components/docs/mdx/code-block.js +147 -0
- package/renderer/components/docs/mdx/code-group.js +287 -0
- package/renderer/components/docs/mdx/file-embeds.js +82 -0
- package/renderer/components/docs/mdx/frame.js +59 -0
- package/renderer/components/docs/mdx/highlight.js +90 -0
- package/renderer/components/docs/mdx/iframe.js +69 -0
- package/renderer/components/docs/mdx/image.js +135 -0
- package/renderer/components/docs/mdx/index.js +134 -0
- package/renderer/components/docs/mdx/landing.js +315 -0
- package/renderer/components/docs/mdx/mermaid.js +212 -0
- package/renderer/components/docs/mdx/param-field.js +112 -0
- package/renderer/components/docs/mdx/steps.js +74 -0
- package/renderer/components/docs/mdx/tabs.js +50 -0
- package/renderer/components/docs/mdx-renderer.js +77 -0
- package/renderer/components/docs/navigation/breadcrumbs.js +64 -0
- package/renderer/components/docs/navigation/index.js +6 -0
- package/renderer/components/docs/navigation/page-nav.js +57 -0
- package/renderer/components/docs/navigation/sidebar.js +375 -0
- package/renderer/components/docs/navigation/toc.js +89 -0
- package/renderer/components/docs/notice.js +77 -0
- package/renderer/components/docs-header.js +202 -0
- package/renderer/components/docs-viewer/agent/agent-chat.js +1930 -0
- package/renderer/components/docs-viewer/agent/cards/debug-context-card.js +107 -0
- package/renderer/components/docs-viewer/agent/cards/endpoint-context-card.js +57 -0
- package/renderer/components/docs-viewer/agent/cards/index.js +45 -0
- package/renderer/components/docs-viewer/agent/cards/response-options-card.js +154 -0
- package/renderer/components/docs-viewer/agent/cards/types.js +22 -0
- package/renderer/components/docs-viewer/agent/chat-message.js +2 -0
- package/renderer/components/docs-viewer/agent/index.js +4 -0
- package/renderer/components/docs-viewer/agent/messages/assistant-message.js +108 -0
- package/renderer/components/docs-viewer/agent/messages/chat-message.js +34 -0
- package/renderer/components/docs-viewer/agent/messages/index.js +6 -0
- package/renderer/components/docs-viewer/agent/messages/tool-call-display.js +1065 -0
- package/renderer/components/docs-viewer/agent/messages/types.js +2 -0
- package/renderer/components/docs-viewer/agent/messages/typing-indicator.js +26 -0
- package/renderer/components/docs-viewer/agent/messages/user-message.js +37 -0
- package/renderer/components/docs-viewer/code-editor/{index.tsx → index.js} +1 -1
- package/renderer/components/docs-viewer/code-editor/notes-mode.js +1338 -0
- package/renderer/components/docs-viewer/content/changelog-page.js +297 -0
- package/renderer/components/docs-viewer/content/doc-page.js +264 -0
- package/renderer/components/docs-viewer/content/documentation-viewer.js +14 -0
- package/renderer/components/docs-viewer/content/index.js +29 -0
- package/renderer/components/docs-viewer/content/not-found-page.js +300 -0
- package/renderer/components/docs-viewer/content/request-details.js +528 -0
- package/renderer/components/docs-viewer/content/sections/auth.js +108 -0
- package/renderer/components/docs-viewer/content/sections/body.js +80 -0
- package/renderer/components/docs-viewer/content/sections/headers.js +64 -0
- package/renderer/components/docs-viewer/content/sections/overview.js +56 -0
- package/renderer/components/docs-viewer/content/sections/parameters.js +64 -0
- package/renderer/components/docs-viewer/content/sections/responses.js +91 -0
- package/renderer/components/docs-viewer/global-auth-modal.js +427 -0
- package/renderer/components/docs-viewer/index.js +1552 -0
- package/renderer/components/docs-viewer/playground/auth-editor.js +418 -0
- package/renderer/components/docs-viewer/playground/body-editor.js +240 -0
- package/renderer/components/docs-viewer/playground/code-editor.js +135 -0
- package/renderer/components/docs-viewer/playground/code-snippet.js +393 -0
- package/renderer/components/docs-viewer/playground/graphql-playground.js +734 -0
- package/renderer/components/docs-viewer/playground/index.js +682 -0
- package/renderer/components/docs-viewer/playground/key-value-editor.js +317 -0
- package/renderer/components/docs-viewer/playground/method-selector.js +65 -0
- package/renderer/components/docs-viewer/playground/request-builder.js +181 -0
- package/renderer/components/docs-viewer/playground/request-tabs.js +240 -0
- package/renderer/components/docs-viewer/playground/response-cards/idle-card.js +42 -0
- package/renderer/components/docs-viewer/playground/response-cards/index.js +72 -0
- package/renderer/components/docs-viewer/playground/response-cards/loading-card.js +24 -0
- package/renderer/components/docs-viewer/playground/response-cards/network-error-card.js +28 -0
- package/renderer/components/docs-viewer/playground/response-cards/response-body-card.js +308 -0
- package/renderer/components/docs-viewer/playground/response-cards/types.js +9 -0
- package/renderer/components/docs-viewer/playground/response-viewer.js +18 -0
- package/renderer/components/docs-viewer/search/index.js +2 -0
- package/renderer/components/docs-viewer/search/search-dialog.js +367 -0
- package/renderer/components/docs-viewer/search/use-search.js +89 -0
- package/renderer/components/docs-viewer/shared/markdown-renderer.js +423 -0
- package/renderer/components/docs-viewer/shared/method-badge.js +23 -0
- package/renderer/components/docs-viewer/shared/schema-viewer.js +321 -0
- package/renderer/components/docs-viewer/sidebar/collection-tree.js +222 -0
- package/renderer/components/docs-viewer/sidebar/endpoint-options.js +512 -0
- package/renderer/components/docs-viewer/sidebar/index.js +196 -0
- package/renderer/components/docs-viewer/sidebar/right-sidebar.js +163 -0
- package/renderer/components/docs-viewer/sidebar/sidebar-group.js +87 -0
- package/renderer/components/docs-viewer/sidebar/sidebar-item.js +172 -0
- package/renderer/components/docs-viewer/sidebar/sidebar-section.js +31 -0
- package/renderer/components/theme-provider.js +10 -0
- package/renderer/components/theme-toggle.js +106 -0
- package/renderer/components/ui/badge.js +29 -0
- package/renderer/components/ui/button.js +40 -0
- package/renderer/components/ui/dialog.js +50 -0
- package/renderer/components/ui/dropdown-menu.js +143 -0
- package/renderer/components/ui/input.js +12 -0
- package/renderer/components/ui/label.js +13 -0
- package/renderer/components/ui/navigation-menu.js +83 -0
- package/renderer/components/ui/select.js +116 -0
- package/renderer/components/ui/spinner.js +92 -0
- package/renderer/components/ui/tabs.js +34 -0
- package/renderer/components/ui/tooltip.js +43 -0
- package/renderer/hooks/use-code-copy.js +76 -0
- package/renderer/hooks/use-openapi-title.js +33 -0
- package/renderer/lib/api-docs/agent/index.js +4 -0
- package/renderer/lib/api-docs/agent/indexer.js +254 -0
- package/renderer/lib/api-docs/agent/spec-summary.js +227 -0
- package/renderer/lib/api-docs/agent/types.js +5 -0
- package/renderer/lib/api-docs/auth/auth-context.js +157 -0
- package/renderer/lib/api-docs/auth/auth-storage.js +66 -0
- package/renderer/lib/api-docs/auth/crypto.js +64 -0
- package/renderer/lib/api-docs/auth/index.js +3 -0
- package/renderer/lib/api-docs/code-editor/db.js +145 -0
- package/renderer/lib/api-docs/code-editor/hooks.js +254 -0
- package/renderer/lib/api-docs/code-editor/{index.ts → index.js} +3 -4
- package/renderer/lib/api-docs/code-editor/mode-context.js +154 -0
- package/renderer/lib/api-docs/code-editor/types.js +53 -0
- package/renderer/lib/api-docs/codegen/definitions.js +258 -0
- package/renderer/lib/api-docs/codegen/har.js +171 -0
- package/renderer/lib/api-docs/codegen/index.js +118 -0
- package/renderer/lib/api-docs/factories.js +136 -0
- package/renderer/lib/api-docs/{index.ts → index.js} +5 -10
- package/renderer/lib/api-docs/mobile-context.js +79 -0
- package/renderer/lib/api-docs/navigation-context.js +62 -0
- package/renderer/lib/api-docs/parsers/graphql/index.js +50 -0
- package/renderer/lib/api-docs/parsers/graphql/parser.js +350 -0
- package/renderer/lib/api-docs/parsers/graphql/transformer.js +215 -0
- package/renderer/lib/api-docs/parsers/graphql/types.js +46 -0
- package/renderer/lib/api-docs/parsers/openapi/dereferencer.js +43 -0
- package/renderer/lib/api-docs/parsers/openapi/extractors/auth.js +486 -0
- package/renderer/lib/api-docs/parsers/openapi/extractors/body.js +295 -0
- package/renderer/lib/api-docs/parsers/openapi/extractors/index.js +132 -0
- package/renderer/lib/api-docs/parsers/openapi/index.js +127 -0
- package/renderer/lib/api-docs/parsers/openapi/transformer.js +192 -0
- package/renderer/lib/api-docs/parsers/openapi/validator.js +24 -0
- package/renderer/lib/api-docs/playground/context.js +65 -0
- package/renderer/lib/api-docs/playground/navigation-context.js +74 -0
- package/renderer/lib/api-docs/playground/request-builder.js +163 -0
- package/renderer/lib/api-docs/playground/request-runner.js +224 -0
- package/renderer/lib/api-docs/playground/types.js +5 -0
- package/renderer/lib/api-docs/types.js +23 -0
- package/renderer/lib/api-docs/utils.js +212 -0
- package/renderer/lib/cache.js +157 -0
- package/renderer/lib/docs/config/domain-schema.js +161 -0
- package/renderer/lib/docs/config/index.js +5 -0
- package/renderer/lib/docs/config/loader.js +113 -0
- package/renderer/lib/docs/config/schema.js +269 -0
- package/renderer/lib/docs/index.js +8 -0
- package/renderer/lib/docs/mdx/compiler.js +128 -0
- package/renderer/lib/docs/mdx/frontmatter.js +73 -0
- package/renderer/lib/docs/mdx/index.js +8 -0
- package/renderer/lib/docs/navigation/generator.js +269 -0
- package/renderer/lib/docs/navigation/index.js +4 -0
- package/renderer/lib/docs/navigation/types.js +9 -0
- package/renderer/lib/docs-navigation-context.js +40 -0
- package/renderer/lib/multi-tenant/context.js +80 -0
- package/renderer/lib/storage/blob.js +767 -0
- package/renderer/lib/utils/icons.js +30 -0
- package/renderer/lib/utils.js +5 -0
- package/renderer/next.config.js +62 -0
- package/renderer/tsconfig.json +23 -5
- package/renderer/app/api/assets/[...path]/route.ts +0 -123
- package/renderer/app/api/assets/route.ts +0 -124
- package/renderer/app/api/assets/upload/route.ts +0 -177
- package/renderer/app/api/auth-schemes/route.ts +0 -77
- package/renderer/app/api/chat/route.ts +0 -858
- package/renderer/app/api/codegen/route.ts +0 -72
- package/renderer/app/api/collections/route.ts +0 -1002
- package/renderer/app/api/debug/route.ts +0 -53
- package/renderer/app/api/deploy/route.ts +0 -234
- package/renderer/app/api/device/route.ts +0 -42
- package/renderer/app/api/docs/route.ts +0 -201
- package/renderer/app/api/domains/add/route.ts +0 -132
- package/renderer/app/api/domains/lookup/route.ts +0 -43
- package/renderer/app/api/domains/remove/route.ts +0 -100
- package/renderer/app/api/domains/status/route.ts +0 -158
- package/renderer/app/api/domains/verify/route.ts +0 -181
- package/renderer/app/api/keys/regenerate/route.ts +0 -80
- package/renderer/app/api/local-assets/[...path]/route.ts +0 -122
- package/renderer/app/api/openapi-spec/route.ts +0 -151
- package/renderer/app/api/projects/[slug]/route.ts +0 -153
- package/renderer/app/api/projects/[slug]/stats/route.ts +0 -96
- package/renderer/app/api/projects/register/route.ts +0 -152
- package/renderer/app/api/proxy/route.ts +0 -149
- package/renderer/app/api/proxy-stream/route.ts +0 -168
- package/renderer/app/api/redirects/route.ts +0 -47
- package/renderer/app/api/schema/route.ts +0 -73
- package/renderer/app/api/subdomains/check/route.ts +0 -172
- package/renderer/app/api/suggestions/route.ts +0 -144
- package/renderer/app/layout.tsx +0 -54
- package/renderer/app/llms-full.txt/route.ts +0 -346
- package/renderer/app/llms.txt/route.ts +0 -279
- package/renderer/app/page.tsx +0 -14
- package/renderer/app/robots.txt/route.ts +0 -84
- package/renderer/app/sitemap.xml/route.ts +0 -199
- package/renderer/components/docs/index.ts +0 -12
- package/renderer/components/docs/mdx/accordion.tsx +0 -169
- package/renderer/components/docs/mdx/badge.tsx +0 -132
- package/renderer/components/docs/mdx/callouts.tsx +0 -154
- package/renderer/components/docs/mdx/cards.tsx +0 -241
- package/renderer/components/docs/mdx/changelog.tsx +0 -120
- package/renderer/components/docs/mdx/code-block.tsx +0 -186
- package/renderer/components/docs/mdx/code-group.tsx +0 -421
- package/renderer/components/docs/mdx/file-embeds.tsx +0 -105
- package/renderer/components/docs/mdx/frame.tsx +0 -112
- package/renderer/components/docs/mdx/highlight.tsx +0 -151
- package/renderer/components/docs/mdx/iframe.tsx +0 -134
- package/renderer/components/docs/mdx/image.tsx +0 -235
- package/renderer/components/docs/mdx/index.ts +0 -237
- package/renderer/components/docs/mdx/landing.tsx +0 -684
- package/renderer/components/docs/mdx/mermaid.tsx +0 -240
- package/renderer/components/docs/mdx/param-field.tsx +0 -200
- package/renderer/components/docs/mdx/steps.tsx +0 -113
- package/renderer/components/docs/mdx/tabs.tsx +0 -86
- package/renderer/components/docs/mdx-renderer.tsx +0 -100
- package/renderer/components/docs/navigation/breadcrumbs.tsx +0 -76
- package/renderer/components/docs/navigation/index.ts +0 -8
- package/renderer/components/docs/navigation/page-nav.tsx +0 -64
- package/renderer/components/docs/navigation/sidebar.tsx +0 -515
- package/renderer/components/docs/navigation/toc.tsx +0 -113
- package/renderer/components/docs/notice.tsx +0 -105
- package/renderer/components/docs-header.tsx +0 -278
- package/renderer/components/docs-viewer/agent/agent-chat.tsx +0 -2076
- package/renderer/components/docs-viewer/agent/cards/debug-context-card.tsx +0 -90
- package/renderer/components/docs-viewer/agent/cards/endpoint-context-card.tsx +0 -49
- package/renderer/components/docs-viewer/agent/cards/index.tsx +0 -50
- package/renderer/components/docs-viewer/agent/cards/response-options-card.tsx +0 -212
- package/renderer/components/docs-viewer/agent/cards/types.ts +0 -84
- package/renderer/components/docs-viewer/agent/chat-message.tsx +0 -17
- package/renderer/components/docs-viewer/agent/index.tsx +0 -6
- package/renderer/components/docs-viewer/agent/messages/assistant-message.tsx +0 -119
- package/renderer/components/docs-viewer/agent/messages/chat-message.tsx +0 -46
- package/renderer/components/docs-viewer/agent/messages/index.ts +0 -17
- package/renderer/components/docs-viewer/agent/messages/tool-call-display.tsx +0 -721
- package/renderer/components/docs-viewer/agent/messages/types.ts +0 -61
- package/renderer/components/docs-viewer/agent/messages/typing-indicator.tsx +0 -24
- package/renderer/components/docs-viewer/agent/messages/user-message.tsx +0 -51
- package/renderer/components/docs-viewer/code-editor/notes-mode.tsx +0 -1283
- package/renderer/components/docs-viewer/content/changelog-page.tsx +0 -331
- package/renderer/components/docs-viewer/content/doc-page.tsx +0 -367
- package/renderer/components/docs-viewer/content/documentation-viewer.tsx +0 -17
- package/renderer/components/docs-viewer/content/index.tsx +0 -29
- package/renderer/components/docs-viewer/content/not-found-page.tsx +0 -330
- package/renderer/components/docs-viewer/content/request-details.tsx +0 -330
- package/renderer/components/docs-viewer/content/sections/auth.tsx +0 -69
- package/renderer/components/docs-viewer/content/sections/body.tsx +0 -66
- package/renderer/components/docs-viewer/content/sections/headers.tsx +0 -43
- package/renderer/components/docs-viewer/content/sections/overview.tsx +0 -40
- package/renderer/components/docs-viewer/content/sections/parameters.tsx +0 -43
- package/renderer/components/docs-viewer/content/sections/responses.tsx +0 -87
- package/renderer/components/docs-viewer/global-auth-modal.tsx +0 -352
- package/renderer/components/docs-viewer/index.tsx +0 -1670
- package/renderer/components/docs-viewer/playground/auth-editor.tsx +0 -280
- package/renderer/components/docs-viewer/playground/body-editor.tsx +0 -221
- package/renderer/components/docs-viewer/playground/code-editor.tsx +0 -224
- package/renderer/components/docs-viewer/playground/code-snippet.tsx +0 -387
- package/renderer/components/docs-viewer/playground/graphql-playground.tsx +0 -745
- package/renderer/components/docs-viewer/playground/index.tsx +0 -671
- package/renderer/components/docs-viewer/playground/key-value-editor.tsx +0 -261
- package/renderer/components/docs-viewer/playground/method-selector.tsx +0 -60
- package/renderer/components/docs-viewer/playground/request-builder.tsx +0 -179
- package/renderer/components/docs-viewer/playground/request-tabs.tsx +0 -237
- package/renderer/components/docs-viewer/playground/response-cards/idle-card.tsx +0 -21
- package/renderer/components/docs-viewer/playground/response-cards/index.tsx +0 -93
- package/renderer/components/docs-viewer/playground/response-cards/loading-card.tsx +0 -16
- package/renderer/components/docs-viewer/playground/response-cards/network-error-card.tsx +0 -23
- package/renderer/components/docs-viewer/playground/response-cards/response-body-card.tsx +0 -268
- package/renderer/components/docs-viewer/playground/response-cards/types.ts +0 -82
- package/renderer/components/docs-viewer/playground/response-viewer.tsx +0 -43
- package/renderer/components/docs-viewer/search/index.ts +0 -2
- package/renderer/components/docs-viewer/search/search-dialog.tsx +0 -331
- package/renderer/components/docs-viewer/search/use-search.ts +0 -117
- package/renderer/components/docs-viewer/shared/markdown-renderer.tsx +0 -431
- package/renderer/components/docs-viewer/shared/method-badge.tsx +0 -41
- package/renderer/components/docs-viewer/shared/schema-viewer.tsx +0 -349
- package/renderer/components/docs-viewer/sidebar/collection-tree.tsx +0 -259
- package/renderer/components/docs-viewer/sidebar/endpoint-options.tsx +0 -316
- package/renderer/components/docs-viewer/sidebar/index.tsx +0 -282
- package/renderer/components/docs-viewer/sidebar/right-sidebar.tsx +0 -202
- package/renderer/components/docs-viewer/sidebar/sidebar-group.tsx +0 -118
- package/renderer/components/docs-viewer/sidebar/sidebar-item.tsx +0 -212
- package/renderer/components/docs-viewer/sidebar/sidebar-section.tsx +0 -38
- package/renderer/components/theme-provider.tsx +0 -11
- package/renderer/components/theme-toggle.tsx +0 -76
- package/renderer/components/ui/badge.tsx +0 -46
- package/renderer/components/ui/button.tsx +0 -59
- package/renderer/components/ui/dialog.tsx +0 -118
- package/renderer/components/ui/dropdown-menu.tsx +0 -257
- package/renderer/components/ui/input.tsx +0 -21
- package/renderer/components/ui/label.tsx +0 -24
- package/renderer/components/ui/navigation-menu.tsx +0 -168
- package/renderer/components/ui/select.tsx +0 -190
- package/renderer/components/ui/spinner.tsx +0 -114
- package/renderer/components/ui/tabs.tsx +0 -66
- package/renderer/components/ui/tooltip.tsx +0 -61
- package/renderer/hooks/use-code-copy.ts +0 -88
- package/renderer/hooks/use-openapi-title.ts +0 -44
- package/renderer/lib/api-docs/agent/index.ts +0 -6
- package/renderer/lib/api-docs/agent/indexer.ts +0 -323
- package/renderer/lib/api-docs/agent/spec-summary.ts +0 -335
- package/renderer/lib/api-docs/agent/types.ts +0 -116
- package/renderer/lib/api-docs/auth/auth-context.tsx +0 -225
- package/renderer/lib/api-docs/auth/auth-storage.ts +0 -87
- package/renderer/lib/api-docs/auth/crypto.ts +0 -89
- package/renderer/lib/api-docs/auth/index.ts +0 -4
- package/renderer/lib/api-docs/code-editor/db.ts +0 -164
- package/renderer/lib/api-docs/code-editor/hooks.ts +0 -266
- package/renderer/lib/api-docs/code-editor/mode-context.tsx +0 -207
- package/renderer/lib/api-docs/code-editor/types.ts +0 -105
- package/renderer/lib/api-docs/codegen/definitions.ts +0 -297
- package/renderer/lib/api-docs/codegen/har.ts +0 -251
- package/renderer/lib/api-docs/codegen/index.ts +0 -159
- package/renderer/lib/api-docs/factories.ts +0 -170
- package/renderer/lib/api-docs/mobile-context.tsx +0 -112
- package/renderer/lib/api-docs/navigation-context.tsx +0 -88
- package/renderer/lib/api-docs/parsers/graphql/README.md +0 -129
- package/renderer/lib/api-docs/parsers/graphql/index.ts +0 -91
- package/renderer/lib/api-docs/parsers/graphql/parser.ts +0 -491
- package/renderer/lib/api-docs/parsers/graphql/transformer.ts +0 -246
- package/renderer/lib/api-docs/parsers/graphql/types.ts +0 -283
- package/renderer/lib/api-docs/parsers/openapi/README.md +0 -32
- package/renderer/lib/api-docs/parsers/openapi/dereferencer.ts +0 -60
- package/renderer/lib/api-docs/parsers/openapi/extractors/auth.ts +0 -574
- package/renderer/lib/api-docs/parsers/openapi/extractors/body.ts +0 -403
- package/renderer/lib/api-docs/parsers/openapi/extractors/index.ts +0 -232
- package/renderer/lib/api-docs/parsers/openapi/index.ts +0 -171
- package/renderer/lib/api-docs/parsers/openapi/transformer.ts +0 -278
- package/renderer/lib/api-docs/parsers/openapi/validator.ts +0 -31
- package/renderer/lib/api-docs/playground/context.tsx +0 -107
- package/renderer/lib/api-docs/playground/navigation-context.tsx +0 -124
- package/renderer/lib/api-docs/playground/request-builder.ts +0 -223
- package/renderer/lib/api-docs/playground/request-runner.ts +0 -282
- package/renderer/lib/api-docs/playground/types.ts +0 -35
- package/renderer/lib/api-docs/types.ts +0 -269
- package/renderer/lib/api-docs/utils.ts +0 -311
- package/renderer/lib/cache.ts +0 -193
- package/renderer/lib/docs/config/domain-schema.ts +0 -260
- package/renderer/lib/docs/config/index.ts +0 -43
- package/renderer/lib/docs/config/loader.ts +0 -142
- package/renderer/lib/docs/config/schema.ts +0 -308
- package/renderer/lib/docs/index.ts +0 -12
- package/renderer/lib/docs/mdx/compiler.ts +0 -176
- package/renderer/lib/docs/mdx/frontmatter.ts +0 -91
- package/renderer/lib/docs/mdx/index.ts +0 -26
- package/renderer/lib/docs/navigation/generator.ts +0 -348
- package/renderer/lib/docs/navigation/index.ts +0 -12
- package/renderer/lib/docs/navigation/types.ts +0 -123
- package/renderer/lib/docs-navigation-context.tsx +0 -80
- package/renderer/lib/multi-tenant/context.ts +0 -105
- package/renderer/lib/storage/blob.ts +0 -1083
- package/renderer/lib/utils/icons.ts +0 -48
- package/renderer/lib/utils.ts +0 -6
- package/renderer/next.config.ts +0 -76
|
@@ -1,348 +0,0 @@
|
|
|
1
|
-
import { relative, basename, extname } from 'path'
|
|
2
|
-
import {
|
|
3
|
-
type DocsConfig,
|
|
4
|
-
type NavigationTab,
|
|
5
|
-
type NavigationGroup,
|
|
6
|
-
resolvePagePath,
|
|
7
|
-
loadPageContent,
|
|
8
|
-
} from '../config'
|
|
9
|
-
import { extractFrontmatter, safeParseFrontmatter } from '../mdx'
|
|
10
|
-
import type {
|
|
11
|
-
Navigation,
|
|
12
|
-
NavTab,
|
|
13
|
-
NavGroup,
|
|
14
|
-
NavItem,
|
|
15
|
-
PageNavContext,
|
|
16
|
-
BreadcrumbItem,
|
|
17
|
-
PageMeta,
|
|
18
|
-
} from './types'
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Navigation Generator
|
|
22
|
-
*
|
|
23
|
-
* Builds navigation structure from docs.json configuration
|
|
24
|
-
*/
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Generate navigation from configuration
|
|
28
|
-
*/
|
|
29
|
-
export function generateNavigation(
|
|
30
|
-
config: DocsConfig,
|
|
31
|
-
docsDir: string
|
|
32
|
-
): Navigation {
|
|
33
|
-
const nav = config.navigation
|
|
34
|
-
const navigation: Navigation = {}
|
|
35
|
-
|
|
36
|
-
// Handle tabbed navigation
|
|
37
|
-
if (nav.tabs && nav.tabs.length > 0) {
|
|
38
|
-
navigation.tabs = nav.tabs.map(tab => buildNavTab(tab, docsDir))
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
// Handle single-page navigation (no tabs)
|
|
42
|
-
if (nav.groups && nav.groups.length > 0) {
|
|
43
|
-
navigation.groups = nav.groups.map(group => buildNavGroup(group, docsDir))
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
// Add global anchors
|
|
47
|
-
if (nav.global?.anchors) {
|
|
48
|
-
navigation.anchors = nav.global.anchors.map(anchor => ({
|
|
49
|
-
title: anchor.anchor,
|
|
50
|
-
href: anchor.href,
|
|
51
|
-
icon: anchor.icon,
|
|
52
|
-
external: anchor.href.startsWith('http'),
|
|
53
|
-
}))
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
return navigation
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Build a navigation tab
|
|
61
|
-
*/
|
|
62
|
-
function buildNavTab(
|
|
63
|
-
tab: NavigationTab,
|
|
64
|
-
docsDir: string
|
|
65
|
-
): NavTab {
|
|
66
|
-
const slug = tab.tab.toLowerCase().replace(/\s+/g, '-')
|
|
67
|
-
|
|
68
|
-
// Only docs tabs have groups
|
|
69
|
-
if ('groups' in tab && tab.groups) {
|
|
70
|
-
const groups = tab.groups.map(group => buildNavGroup(group, docsDir))
|
|
71
|
-
return {
|
|
72
|
-
title: tab.tab,
|
|
73
|
-
slug,
|
|
74
|
-
groups,
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
// For openapi/changelog tabs, return empty groups
|
|
79
|
-
return {
|
|
80
|
-
title: tab.tab,
|
|
81
|
-
slug,
|
|
82
|
-
groups: [],
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* Build a navigation group
|
|
88
|
-
*/
|
|
89
|
-
function buildNavGroup(
|
|
90
|
-
group: NavigationGroup,
|
|
91
|
-
docsDir: string
|
|
92
|
-
): NavGroup {
|
|
93
|
-
const items = group.pages
|
|
94
|
-
.map(page => buildNavItemOrGroup(page, docsDir))
|
|
95
|
-
.filter((item): item is NavItem | NavGroup => item !== null)
|
|
96
|
-
|
|
97
|
-
return {
|
|
98
|
-
title: group.group,
|
|
99
|
-
icon: group.icon,
|
|
100
|
-
items,
|
|
101
|
-
collapsible: true,
|
|
102
|
-
defaultCollapsed: false,
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
/**
|
|
107
|
-
* Build a navigation item or nested group from a page reference
|
|
108
|
-
*/
|
|
109
|
-
function buildNavItemOrGroup(
|
|
110
|
-
pageRef: string | { group: string; pages: (string | object)[] },
|
|
111
|
-
docsDir: string
|
|
112
|
-
): NavItem | NavGroup | null {
|
|
113
|
-
// Handle nested groups
|
|
114
|
-
if (typeof pageRef === 'object' && 'group' in pageRef) {
|
|
115
|
-
const nestedItems = pageRef.pages
|
|
116
|
-
.map(p => buildNavItemOrGroup(p as string | { group: string; pages: (string | object)[] }, docsDir))
|
|
117
|
-
.filter((item): item is NavItem | NavGroup => item !== null)
|
|
118
|
-
|
|
119
|
-
return {
|
|
120
|
-
title: pageRef.group,
|
|
121
|
-
items: nestedItems,
|
|
122
|
-
collapsible: true,
|
|
123
|
-
defaultCollapsed: false,
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
return buildNavItem(pageRef, docsDir)
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
/**
|
|
131
|
-
* Build a navigation item from a page reference
|
|
132
|
-
*/
|
|
133
|
-
function buildNavItem(
|
|
134
|
-
pageRef: string,
|
|
135
|
-
docsDir: string
|
|
136
|
-
): NavItem | null {
|
|
137
|
-
// Check if it's an external link
|
|
138
|
-
if (pageRef.startsWith('http://') || pageRef.startsWith('https://')) {
|
|
139
|
-
return {
|
|
140
|
-
title: pageRef,
|
|
141
|
-
href: pageRef,
|
|
142
|
-
external: true,
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
// Resolve the page file
|
|
147
|
-
const filePath = resolvePagePath(docsDir, pageRef)
|
|
148
|
-
|
|
149
|
-
if (!filePath) {
|
|
150
|
-
console.warn(`Page not found: ${pageRef}`)
|
|
151
|
-
return {
|
|
152
|
-
title: pageRef,
|
|
153
|
-
href: `/${pageRef}`,
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
// Load and parse frontmatter
|
|
158
|
-
try {
|
|
159
|
-
const content = loadPageContent(filePath)
|
|
160
|
-
const { data } = extractFrontmatter(content)
|
|
161
|
-
const frontmatter = safeParseFrontmatter(data)
|
|
162
|
-
|
|
163
|
-
// Build URL path
|
|
164
|
-
const urlPath = pageRef === 'index' ? '/' : `/${pageRef}`
|
|
165
|
-
|
|
166
|
-
return {
|
|
167
|
-
title: frontmatter?.sidebarTitle || frontmatter?.title || pageRef,
|
|
168
|
-
href: urlPath,
|
|
169
|
-
icon: frontmatter?.icon,
|
|
170
|
-
deprecated: frontmatter?.deprecated,
|
|
171
|
-
}
|
|
172
|
-
} catch (error) {
|
|
173
|
-
console.warn(`Failed to load page metadata: ${pageRef}`, error)
|
|
174
|
-
return {
|
|
175
|
-
title: pageRef,
|
|
176
|
-
href: `/${pageRef}`,
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
/**
|
|
182
|
-
* Helper to check if an item is a NavItem (has href)
|
|
183
|
-
*/
|
|
184
|
-
function isNavItem(item: NavItem | NavGroup): item is NavItem {
|
|
185
|
-
return 'href' in item && typeof item.href === 'string'
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
/**
|
|
189
|
-
* Recursively collect all NavItems from items array (handles nested groups)
|
|
190
|
-
*/
|
|
191
|
-
function collectNavItems(items: (NavItem | NavGroup)[]): NavItem[] {
|
|
192
|
-
const result: NavItem[] = []
|
|
193
|
-
for (const item of items) {
|
|
194
|
-
if (isNavItem(item)) {
|
|
195
|
-
result.push(item)
|
|
196
|
-
} else if ('items' in item && Array.isArray(item.items)) {
|
|
197
|
-
result.push(...collectNavItems(item.items))
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
return result
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
/**
|
|
204
|
-
* Find navigation context for a specific page
|
|
205
|
-
*/
|
|
206
|
-
export function findPageNavContext(
|
|
207
|
-
navigation: Navigation,
|
|
208
|
-
currentPath: string
|
|
209
|
-
): PageNavContext {
|
|
210
|
-
const breadcrumbs: BreadcrumbItem[] = []
|
|
211
|
-
let prev: NavItem | undefined
|
|
212
|
-
let next: NavItem | undefined
|
|
213
|
-
let currentTab: NavTab | undefined
|
|
214
|
-
let currentGroup: NavGroup | undefined
|
|
215
|
-
let currentItem: NavItem | undefined
|
|
216
|
-
|
|
217
|
-
// Normalize path
|
|
218
|
-
const normalizedPath = currentPath.startsWith('/') ? currentPath : `/${currentPath}`
|
|
219
|
-
|
|
220
|
-
// Flatten all items for prev/next calculation
|
|
221
|
-
const allItems: NavItem[] = []
|
|
222
|
-
|
|
223
|
-
// Search in tabs
|
|
224
|
-
if (navigation.tabs) {
|
|
225
|
-
for (const tab of navigation.tabs) {
|
|
226
|
-
for (const group of tab.groups) {
|
|
227
|
-
const groupItems = collectNavItems(group.items)
|
|
228
|
-
allItems.push(...groupItems)
|
|
229
|
-
|
|
230
|
-
for (const item of groupItems) {
|
|
231
|
-
if (item.href === normalizedPath) {
|
|
232
|
-
currentTab = tab
|
|
233
|
-
currentGroup = group
|
|
234
|
-
currentItem = item
|
|
235
|
-
|
|
236
|
-
// Build breadcrumbs
|
|
237
|
-
breadcrumbs.push({ title: tab.title, href: `/${tab.slug}` })
|
|
238
|
-
breadcrumbs.push({ title: group.title, href: '#' })
|
|
239
|
-
breadcrumbs.push({ title: item.title, href: item.href })
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
// Search in groups (non-tabbed)
|
|
247
|
-
if (navigation.groups) {
|
|
248
|
-
for (const group of navigation.groups) {
|
|
249
|
-
const groupItems = collectNavItems(group.items)
|
|
250
|
-
allItems.push(...groupItems)
|
|
251
|
-
|
|
252
|
-
for (const item of groupItems) {
|
|
253
|
-
if (item.href === normalizedPath) {
|
|
254
|
-
currentGroup = group
|
|
255
|
-
currentItem = item
|
|
256
|
-
|
|
257
|
-
// Build breadcrumbs
|
|
258
|
-
breadcrumbs.push({ title: group.title, href: '#' })
|
|
259
|
-
breadcrumbs.push({ title: item.title, href: item.href })
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
// Find prev/next
|
|
266
|
-
const currentIndex = allItems.findIndex(item => item.href === normalizedPath)
|
|
267
|
-
if (currentIndex > 0) {
|
|
268
|
-
prev = allItems[currentIndex - 1]
|
|
269
|
-
}
|
|
270
|
-
if (currentIndex >= 0 && currentIndex < allItems.length - 1) {
|
|
271
|
-
next = allItems[currentIndex + 1]
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
return {
|
|
275
|
-
breadcrumbs,
|
|
276
|
-
prev,
|
|
277
|
-
next,
|
|
278
|
-
currentTab,
|
|
279
|
-
currentGroup,
|
|
280
|
-
currentItem,
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
/**
|
|
285
|
-
* Get all page paths from navigation
|
|
286
|
-
*/
|
|
287
|
-
export function getAllPagePaths(navigation: Navigation): string[] {
|
|
288
|
-
const paths: string[] = []
|
|
289
|
-
|
|
290
|
-
if (navigation.tabs) {
|
|
291
|
-
for (const tab of navigation.tabs) {
|
|
292
|
-
for (const group of tab.groups) {
|
|
293
|
-
const items = collectNavItems(group.items)
|
|
294
|
-
for (const item of items) {
|
|
295
|
-
if (!item.external) {
|
|
296
|
-
paths.push(item.href)
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
if (navigation.groups) {
|
|
304
|
-
for (const group of navigation.groups) {
|
|
305
|
-
const items = collectNavItems(group.items)
|
|
306
|
-
for (const item of items) {
|
|
307
|
-
if (!item.external) {
|
|
308
|
-
paths.push(item.href)
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
return paths
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
/**
|
|
318
|
-
* Load page metadata from file
|
|
319
|
-
*/
|
|
320
|
-
export function loadPageMeta(
|
|
321
|
-
filePath: string,
|
|
322
|
-
docsDir: string
|
|
323
|
-
): PageMeta | null {
|
|
324
|
-
try {
|
|
325
|
-
const content = loadPageContent(filePath)
|
|
326
|
-
const { data } = extractFrontmatter(content)
|
|
327
|
-
const frontmatter = safeParseFrontmatter(data)
|
|
328
|
-
|
|
329
|
-
// Calculate URL path from file path
|
|
330
|
-
const relativePath = relative(docsDir, filePath)
|
|
331
|
-
const urlPath = '/' + relativePath
|
|
332
|
-
.replace(/\.(mdx?|md)$/, '')
|
|
333
|
-
.replace(/\/index$/, '')
|
|
334
|
-
.replace(/^index$/, '')
|
|
335
|
-
|
|
336
|
-
return {
|
|
337
|
-
filePath: relativePath,
|
|
338
|
-
urlPath: urlPath || '/',
|
|
339
|
-
title: frontmatter?.title || basename(filePath, extname(filePath)),
|
|
340
|
-
description: frontmatter?.description,
|
|
341
|
-
sidebarTitle: frontmatter?.sidebarTitle,
|
|
342
|
-
icon: frontmatter?.icon,
|
|
343
|
-
hidden: frontmatter?.hidden,
|
|
344
|
-
}
|
|
345
|
-
} catch {
|
|
346
|
-
return null
|
|
347
|
-
}
|
|
348
|
-
}
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Navigation Types
|
|
3
|
-
*
|
|
4
|
-
* Types for the documentation navigation system
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* A navigation item representing a single page
|
|
9
|
-
*/
|
|
10
|
-
export interface NavItem {
|
|
11
|
-
/** Display title */
|
|
12
|
-
title: string
|
|
13
|
-
/** URL path to the page */
|
|
14
|
-
href: string
|
|
15
|
-
/** Icon name (Phosphor icons) */
|
|
16
|
-
icon?: string
|
|
17
|
-
/** Whether the page is marked as deprecated */
|
|
18
|
-
deprecated?: boolean
|
|
19
|
-
/** Whether this is an external link */
|
|
20
|
-
external?: boolean
|
|
21
|
-
/** Optional badge text */
|
|
22
|
-
badge?: string
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* A group of navigation items
|
|
27
|
-
*/
|
|
28
|
-
export interface NavGroup {
|
|
29
|
-
/** Group title */
|
|
30
|
-
title: string
|
|
31
|
-
/** Icon for the group */
|
|
32
|
-
icon?: string
|
|
33
|
-
/** Pages in this group (can include nested groups) */
|
|
34
|
-
items: (NavItem | NavGroup)[]
|
|
35
|
-
/** Whether the group is collapsible */
|
|
36
|
-
collapsible?: boolean
|
|
37
|
-
/** Default collapsed state */
|
|
38
|
-
defaultCollapsed?: boolean
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* A navigation tab (top-level section)
|
|
43
|
-
*/
|
|
44
|
-
export interface NavTab {
|
|
45
|
-
/** Tab title */
|
|
46
|
-
title: string
|
|
47
|
-
/** URL segment for this tab */
|
|
48
|
-
slug: string
|
|
49
|
-
/** Groups within this tab */
|
|
50
|
-
groups: NavGroup[]
|
|
51
|
-
/** Icon for the tab */
|
|
52
|
-
icon?: string
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Complete navigation structure
|
|
57
|
-
*/
|
|
58
|
-
export interface Navigation {
|
|
59
|
-
/** Navigation tabs (if using tabbed navigation) */
|
|
60
|
-
tabs?: NavTab[]
|
|
61
|
-
/** Groups (if using single-page navigation) */
|
|
62
|
-
groups?: NavGroup[]
|
|
63
|
-
/** Global anchors (shown on all pages) */
|
|
64
|
-
anchors?: NavItem[]
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Breadcrumb item
|
|
69
|
-
*/
|
|
70
|
-
export interface BreadcrumbItem {
|
|
71
|
-
title: string
|
|
72
|
-
href: string
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* Page navigation context
|
|
77
|
-
*/
|
|
78
|
-
export interface PageNavContext {
|
|
79
|
-
/** Current page's breadcrumbs */
|
|
80
|
-
breadcrumbs: BreadcrumbItem[]
|
|
81
|
-
/** Previous page in navigation */
|
|
82
|
-
prev?: NavItem
|
|
83
|
-
/** Next page in navigation */
|
|
84
|
-
next?: NavItem
|
|
85
|
-
/** Current tab (if using tabs) */
|
|
86
|
-
currentTab?: NavTab
|
|
87
|
-
/** Current group */
|
|
88
|
-
currentGroup?: NavGroup
|
|
89
|
-
/** Current item */
|
|
90
|
-
currentItem?: NavItem
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
/**
|
|
94
|
-
* Table of contents item (from page headings)
|
|
95
|
-
*/
|
|
96
|
-
export interface TocItem {
|
|
97
|
-
id: string
|
|
98
|
-
title: string
|
|
99
|
-
level: number
|
|
100
|
-
children?: TocItem[]
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* Page metadata for navigation
|
|
105
|
-
*/
|
|
106
|
-
export interface PageMeta {
|
|
107
|
-
/** File path relative to content directory */
|
|
108
|
-
filePath: string
|
|
109
|
-
/** URL path */
|
|
110
|
-
urlPath: string
|
|
111
|
-
/** Page title from frontmatter */
|
|
112
|
-
title: string
|
|
113
|
-
/** Page description */
|
|
114
|
-
description?: string
|
|
115
|
-
/** Sidebar title (shorter) */
|
|
116
|
-
sidebarTitle?: string
|
|
117
|
-
/** Icon name */
|
|
118
|
-
icon?: string
|
|
119
|
-
/** Whether the page is hidden from navigation */
|
|
120
|
-
hidden?: boolean
|
|
121
|
-
/** Page order within group */
|
|
122
|
-
order?: number
|
|
123
|
-
}
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
'use client'
|
|
2
|
-
|
|
3
|
-
import React, { createContext, useContext, useCallback } from 'react'
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Docs Navigation Context
|
|
7
|
-
*
|
|
8
|
-
* Provides navigation functions for doc components (like Card) to use
|
|
9
|
-
* the correct navigation method based on the current view.
|
|
10
|
-
*
|
|
11
|
-
* In ApiDocs view: Uses hash-based navigation
|
|
12
|
-
* In standalone /docs view: Uses Next.js router
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
interface DocsNavigationContextValue {
|
|
16
|
-
// Navigate to a doc page by slug
|
|
17
|
-
navigateToPage: (slug: string) => void
|
|
18
|
-
// Navigate to an endpoint by ID
|
|
19
|
-
navigateToEndpoint: (endpointId: string) => void
|
|
20
|
-
// Switch to a different tab
|
|
21
|
-
switchToTab: (tabId: string) => void
|
|
22
|
-
// Check if we're in the integrated ApiDocs view
|
|
23
|
-
isApiDocsView: boolean
|
|
24
|
-
// Current active tab
|
|
25
|
-
activeTab?: string
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
const DocsNavigationContext = createContext<DocsNavigationContextValue | null>(null)
|
|
29
|
-
|
|
30
|
-
interface DocsNavigationProviderProps {
|
|
31
|
-
children: React.ReactNode
|
|
32
|
-
onNavigateToPage?: (slug: string) => void
|
|
33
|
-
onNavigateToEndpoint?: (endpointId: string) => void
|
|
34
|
-
onSwitchTab?: (tabId: string) => void
|
|
35
|
-
activeTab?: string
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export function DocsNavigationProvider({
|
|
39
|
-
children,
|
|
40
|
-
onNavigateToPage,
|
|
41
|
-
onNavigateToEndpoint,
|
|
42
|
-
onSwitchTab,
|
|
43
|
-
activeTab,
|
|
44
|
-
}: DocsNavigationProviderProps) {
|
|
45
|
-
const navigateToPage = useCallback((slug: string) => {
|
|
46
|
-
if (onNavigateToPage) {
|
|
47
|
-
onNavigateToPage(slug)
|
|
48
|
-
}
|
|
49
|
-
}, [onNavigateToPage])
|
|
50
|
-
|
|
51
|
-
const navigateToEndpoint = useCallback((endpointId: string) => {
|
|
52
|
-
if (onNavigateToEndpoint) {
|
|
53
|
-
onNavigateToEndpoint(endpointId)
|
|
54
|
-
}
|
|
55
|
-
}, [onNavigateToEndpoint])
|
|
56
|
-
|
|
57
|
-
const switchToTab = useCallback((tabId: string) => {
|
|
58
|
-
if (onSwitchTab) {
|
|
59
|
-
onSwitchTab(tabId)
|
|
60
|
-
}
|
|
61
|
-
}, [onSwitchTab])
|
|
62
|
-
|
|
63
|
-
return (
|
|
64
|
-
<DocsNavigationContext.Provider
|
|
65
|
-
value={{
|
|
66
|
-
navigateToPage,
|
|
67
|
-
navigateToEndpoint,
|
|
68
|
-
switchToTab,
|
|
69
|
-
isApiDocsView: !!onNavigateToPage,
|
|
70
|
-
activeTab,
|
|
71
|
-
}}
|
|
72
|
-
>
|
|
73
|
-
{children}
|
|
74
|
-
</DocsNavigationContext.Provider>
|
|
75
|
-
)
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
export function useDocsNavigation() {
|
|
79
|
-
return useContext(DocsNavigationContext)
|
|
80
|
-
}
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Multi-tenant project context utilities
|
|
3
|
-
* Handles extracting project slug from hostname and managing project context
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
export interface ProjectContext {
|
|
7
|
-
slug: string
|
|
8
|
-
isMultiTenant: boolean
|
|
9
|
-
hostname: string
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Known hostnames that should use local file system (not multi-tenant)
|
|
14
|
-
*/
|
|
15
|
-
const LOCAL_HOSTNAMES = [
|
|
16
|
-
'localhost',
|
|
17
|
-
'127.0.0.1',
|
|
18
|
-
'0.0.0.0',
|
|
19
|
-
]
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* The main platform domain
|
|
23
|
-
*/
|
|
24
|
-
const PLATFORM_DOMAIN = process.env.DEVDOC_PLATFORM_DOMAIN || 'devdoc.sh'
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Extract project context from hostname
|
|
28
|
-
*
|
|
29
|
-
* Examples:
|
|
30
|
-
* - my-docs.devdoc.sh -> { slug: 'my-docs', isMultiTenant: true }
|
|
31
|
-
* - localhost:3000 -> { slug: null, isMultiTenant: false }
|
|
32
|
-
* - docs.company.com -> { slug: lookup from custom domains, isMultiTenant: true }
|
|
33
|
-
*/
|
|
34
|
-
export function extractProjectContext(hostname: string): ProjectContext {
|
|
35
|
-
// Remove port if present
|
|
36
|
-
const host = hostname.split(':')[0]
|
|
37
|
-
|
|
38
|
-
// Check if it's a local development hostname
|
|
39
|
-
if (LOCAL_HOSTNAMES.includes(host)) {
|
|
40
|
-
return {
|
|
41
|
-
slug: '',
|
|
42
|
-
isMultiTenant: false,
|
|
43
|
-
hostname: host,
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
// Check if it's a subdomain of the platform domain
|
|
48
|
-
if (host.endsWith(`.${PLATFORM_DOMAIN}`)) {
|
|
49
|
-
const slug = host.replace(`.${PLATFORM_DOMAIN}`, '')
|
|
50
|
-
return {
|
|
51
|
-
slug,
|
|
52
|
-
isMultiTenant: true,
|
|
53
|
-
hostname: host,
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
// Check if it's the main platform domain
|
|
58
|
-
if (host === PLATFORM_DOMAIN || host === `www.${PLATFORM_DOMAIN}`) {
|
|
59
|
-
return {
|
|
60
|
-
slug: '',
|
|
61
|
-
isMultiTenant: false,
|
|
62
|
-
hostname: host,
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
// Custom domain - need to lookup in database
|
|
67
|
-
// For now, return the full hostname as slug placeholder
|
|
68
|
-
// This will be resolved via the domains API
|
|
69
|
-
return {
|
|
70
|
-
slug: host, // Will be resolved to actual slug via custom domains lookup
|
|
71
|
-
isMultiTenant: true,
|
|
72
|
-
hostname: host,
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* Check if running in multi-tenant mode
|
|
78
|
-
*/
|
|
79
|
-
export function isMultiTenantMode(): boolean {
|
|
80
|
-
return process.env.MULTI_TENANT_MODE === 'true'
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* Get the current project slug from environment or context
|
|
85
|
-
*/
|
|
86
|
-
export function getCurrentProjectSlug(): string | null {
|
|
87
|
-
return process.env.DEVDOC_PROJECT_SLUG || null
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* Build the URL for a project's docs
|
|
92
|
-
*/
|
|
93
|
-
export function getProjectUrl(slug: string): string {
|
|
94
|
-
const protocol = process.env.NODE_ENV === 'production' ? 'https' : 'http'
|
|
95
|
-
return `${protocol}://${slug}.${PLATFORM_DOMAIN}`
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* Validate a project slug format
|
|
100
|
-
*/
|
|
101
|
-
export function isValidSlug(slug: string): boolean {
|
|
102
|
-
// Must be lowercase alphanumeric with hyphens, 3-50 chars
|
|
103
|
-
const slugRegex = /^[a-z0-9][a-z0-9-]{1,48}[a-z0-9]$/
|
|
104
|
-
return slugRegex.test(slug)
|
|
105
|
-
}
|