@kirchdev/duxt 0.1.0
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/LICENSE +21 -0
- package/README.md +151 -0
- package/app/app.config.ts +13 -0
- package/app/app.vue +122 -0
- package/app/assets/css/duxt.css +555 -0
- package/app/assets/css/typeset.css +498 -0
- package/app/components/DuxtBrand.vue +53 -0
- package/app/components/DuxtBreadcrumb.vue +37 -0
- package/app/components/DuxtCodeBlock.vue +143 -0
- package/app/components/DuxtCopyPage.vue +117 -0
- package/app/components/DuxtFooter.vue +86 -0
- package/app/components/DuxtHeader.vue +496 -0
- package/app/components/DuxtJsonEditor.vue +359 -0
- package/app/components/DuxtLandingProse.vue +90 -0
- package/app/components/DuxtLandingShowcase.vue +295 -0
- package/app/components/DuxtLiveWindow.vue +343 -0
- package/app/components/DuxtLocale.vue +86 -0
- package/app/components/DuxtMetaList.vue +76 -0
- package/app/components/DuxtNavigation.vue +94 -0
- package/app/components/DuxtNavigationLink.vue +41 -0
- package/app/components/DuxtOpenApiCallbacks.vue +92 -0
- package/app/components/DuxtOpenApiClient.vue +1339 -0
- package/app/components/DuxtOpenApiMedia.vue +108 -0
- package/app/components/DuxtOpenApiMethod.vue +59 -0
- package/app/components/DuxtOpenApiParameters.vue +114 -0
- package/app/components/DuxtOpenApiResponses.vue +109 -0
- package/app/components/DuxtOpenApiSchema.vue +365 -0
- package/app/components/DuxtOpenApiSecurity.vue +115 -0
- package/app/components/DuxtPageFeedback.vue +56 -0
- package/app/components/DuxtPageInfo.vue +194 -0
- package/app/components/DuxtPageNav.vue +93 -0
- package/app/components/DuxtPreviewSkeleton.vue +262 -0
- package/app/components/DuxtProgress.vue +45 -0
- package/app/components/DuxtSearch.vue +271 -0
- package/app/components/DuxtSections.vue +65 -0
- package/app/components/DuxtShortcuts.vue +46 -0
- package/app/components/DuxtSkipLink.vue +34 -0
- package/app/components/DuxtToc.vue +86 -0
- package/app/components/DuxtTranslationBanner.vue +64 -0
- package/app/components/DuxtVersion.vue +168 -0
- package/app/components/DuxtVersionBanner.vue +109 -0
- package/app/components/OgImage/Duxt.satori.vue +82 -0
- package/app/components/content/Accordion.vue +37 -0
- package/app/components/content/AccordionItem.vue +46 -0
- package/app/components/content/Callout.vue +58 -0
- package/app/components/content/ChangelogGroup.vue +91 -0
- package/app/components/content/ChangelogReleases.vue +520 -0
- package/app/components/content/CodeGroup.vue +183 -0
- package/app/components/content/DevtoolsPanel.vue +107 -0
- package/app/components/content/Field.vue +50 -0
- package/app/components/content/FieldGroup.vue +8 -0
- package/app/components/content/FileTree.vue +92 -0
- package/app/components/content/Mermaid.vue +70 -0
- package/app/components/content/OpenApiOperation.vue +185 -0
- package/app/components/content/OpenApiOperations.vue +72 -0
- package/app/components/content/OpenApiOverview.vue +302 -0
- package/app/components/content/PackageManagers.vue +187 -0
- package/app/components/content/PageCards.vue +48 -0
- package/app/components/content/Partial.vue +65 -0
- package/app/components/content/Preview.vue +173 -0
- package/app/components/content/ProseA.vue +55 -0
- package/app/components/content/ProseH2.vue +53 -0
- package/app/components/content/ProseH3.vue +53 -0
- package/app/components/content/ProseH4.vue +53 -0
- package/app/components/content/ProseImg.vue +87 -0
- package/app/components/content/ProsePre.vue +58 -0
- package/app/components/content/ProseTable.vue +11 -0
- package/app/components/content/Since.vue +21 -0
- package/app/components/content/Steps.vue +20 -0
- package/app/components/content/Tab.vue +23 -0
- package/app/components/content/TabGroup.vue +58 -0
- package/app/components/ui/alert/Alert.vue +21 -0
- package/app/components/ui/alert/AlertDescription.vue +22 -0
- package/app/components/ui/alert/AlertTitle.vue +22 -0
- package/app/components/ui/alert/index.ts +24 -0
- package/app/components/ui/badge/Badge.vue +28 -0
- package/app/components/ui/badge/index.ts +52 -0
- package/app/components/ui/breadcrumb/Breadcrumb.vue +13 -0
- package/app/components/ui/breadcrumb/BreadcrumbEllipsis.vue +22 -0
- package/app/components/ui/breadcrumb/BreadcrumbItem.vue +17 -0
- package/app/components/ui/breadcrumb/BreadcrumbLink.vue +24 -0
- package/app/components/ui/breadcrumb/BreadcrumbList.vue +22 -0
- package/app/components/ui/breadcrumb/BreadcrumbPage.vue +20 -0
- package/app/components/ui/breadcrumb/BreadcrumbSeparator.vue +21 -0
- package/app/components/ui/breadcrumb/index.ts +7 -0
- package/app/components/ui/button/Button.vue +31 -0
- package/app/components/ui/button/index.ts +39 -0
- package/app/components/ui/card/Card.vue +22 -0
- package/app/components/ui/card/CardAction.vue +22 -0
- package/app/components/ui/card/CardContent.vue +14 -0
- package/app/components/ui/card/CardDescription.vue +17 -0
- package/app/components/ui/card/CardFooter.vue +17 -0
- package/app/components/ui/card/CardHeader.vue +22 -0
- package/app/components/ui/card/CardTitle.vue +17 -0
- package/app/components/ui/card/index.ts +7 -0
- package/app/components/ui/collapsible/Collapsible.vue +19 -0
- package/app/components/ui/collapsible/CollapsibleContent.vue +12 -0
- package/app/components/ui/collapsible/CollapsibleTrigger.vue +12 -0
- package/app/components/ui/collapsible/index.ts +3 -0
- package/app/components/ui/command/Command.vue +98 -0
- package/app/components/ui/command/CommandDialog.vue +42 -0
- package/app/components/ui/command/CommandEmpty.vue +31 -0
- package/app/components/ui/command/CommandGroup.vue +52 -0
- package/app/components/ui/command/CommandInput.vue +45 -0
- package/app/components/ui/command/CommandItem.vue +85 -0
- package/app/components/ui/command/CommandList.vue +32 -0
- package/app/components/ui/command/CommandSeparator.vue +23 -0
- package/app/components/ui/command/CommandShortcut.vue +19 -0
- package/app/components/ui/command/index.ts +29 -0
- package/app/components/ui/dialog/Dialog.vue +15 -0
- package/app/components/ui/dialog/DialogClose.vue +12 -0
- package/app/components/ui/dialog/DialogContent.vue +61 -0
- package/app/components/ui/dialog/DialogDescription.vue +25 -0
- package/app/components/ui/dialog/DialogFooter.vue +30 -0
- package/app/components/ui/dialog/DialogHeader.vue +17 -0
- package/app/components/ui/dialog/DialogOverlay.vue +28 -0
- package/app/components/ui/dialog/DialogScrollContent.vue +65 -0
- package/app/components/ui/dialog/DialogTitle.vue +25 -0
- package/app/components/ui/dialog/DialogTrigger.vue +12 -0
- package/app/components/ui/dialog/index.ts +10 -0
- package/app/components/ui/dropdown-menu/DropdownMenu.vue +19 -0
- package/app/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +47 -0
- package/app/components/ui/dropdown-menu/DropdownMenuContent.vue +47 -0
- package/app/components/ui/dropdown-menu/DropdownMenuGroup.vue +12 -0
- package/app/components/ui/dropdown-menu/DropdownMenuItem.vue +41 -0
- package/app/components/ui/dropdown-menu/DropdownMenuLabel.vue +27 -0
- package/app/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue +21 -0
- package/app/components/ui/dropdown-menu/DropdownMenuRadioItem.vue +48 -0
- package/app/components/ui/dropdown-menu/DropdownMenuSeparator.vue +23 -0
- package/app/components/ui/dropdown-menu/DropdownMenuShortcut.vue +19 -0
- package/app/components/ui/dropdown-menu/DropdownMenuSub.vue +19 -0
- package/app/components/ui/dropdown-menu/DropdownMenuSubContent.vue +34 -0
- package/app/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue +34 -0
- package/app/components/ui/dropdown-menu/DropdownMenuTrigger.vue +17 -0
- package/app/components/ui/dropdown-menu/index.ts +16 -0
- package/app/components/ui/input/Input.vue +35 -0
- package/app/components/ui/input/index.ts +1 -0
- package/app/components/ui/navigation-menu/NavigationMenu.vue +42 -0
- package/app/components/ui/navigation-menu/NavigationMenuContent.vue +35 -0
- package/app/components/ui/navigation-menu/NavigationMenuIndicator.vue +32 -0
- package/app/components/ui/navigation-menu/NavigationMenuItem.vue +23 -0
- package/app/components/ui/navigation-menu/NavigationMenuLink.vue +30 -0
- package/app/components/ui/navigation-menu/NavigationMenuList.vue +30 -0
- package/app/components/ui/navigation-menu/NavigationMenuTrigger.vue +31 -0
- package/app/components/ui/navigation-menu/NavigationMenuViewport.vue +30 -0
- package/app/components/ui/navigation-menu/index.ts +14 -0
- package/app/components/ui/scroll-area/ScrollArea.vue +31 -0
- package/app/components/ui/scroll-area/ScrollBar.vue +38 -0
- package/app/components/ui/scroll-area/index.ts +2 -0
- package/app/components/ui/select/Select.vue +15 -0
- package/app/components/ui/select/SelectContent.vue +59 -0
- package/app/components/ui/select/SelectGroup.vue +19 -0
- package/app/components/ui/select/SelectItem.vue +42 -0
- package/app/components/ui/select/SelectItemText.vue +12 -0
- package/app/components/ui/select/SelectLabel.vue +16 -0
- package/app/components/ui/select/SelectScrollDownButton.vue +28 -0
- package/app/components/ui/select/SelectScrollUpButton.vue +28 -0
- package/app/components/ui/select/SelectSeparator.vue +20 -0
- package/app/components/ui/select/SelectTrigger.vue +32 -0
- package/app/components/ui/select/SelectValue.vue +12 -0
- package/app/components/ui/select/index.ts +11 -0
- package/app/components/ui/separator/Separator.vue +30 -0
- package/app/components/ui/separator/index.ts +1 -0
- package/app/components/ui/sheet/Sheet.vue +15 -0
- package/app/components/ui/sheet/SheetClose.vue +12 -0
- package/app/components/ui/sheet/SheetContent.vue +68 -0
- package/app/components/ui/sheet/SheetDescription.vue +23 -0
- package/app/components/ui/sheet/SheetFooter.vue +15 -0
- package/app/components/ui/sheet/SheetHeader.vue +15 -0
- package/app/components/ui/sheet/SheetOverlay.vue +28 -0
- package/app/components/ui/sheet/SheetTitle.vue +23 -0
- package/app/components/ui/sheet/SheetTrigger.vue +12 -0
- package/app/components/ui/sheet/index.ts +8 -0
- package/app/components/ui/sidebar/Sidebar.vue +110 -0
- package/app/components/ui/sidebar/SidebarContent.vue +23 -0
- package/app/components/ui/sidebar/SidebarFooter.vue +18 -0
- package/app/components/ui/sidebar/SidebarGroup.vue +18 -0
- package/app/components/ui/sidebar/SidebarGroupAction.vue +31 -0
- package/app/components/ui/sidebar/SidebarGroupContent.vue +18 -0
- package/app/components/ui/sidebar/SidebarGroupLabel.vue +30 -0
- package/app/components/ui/sidebar/SidebarHeader.vue +18 -0
- package/app/components/ui/sidebar/SidebarInput.vue +19 -0
- package/app/components/ui/sidebar/SidebarInset.vue +23 -0
- package/app/components/ui/sidebar/SidebarMenu.vue +18 -0
- package/app/components/ui/sidebar/SidebarMenuAction.vue +42 -0
- package/app/components/ui/sidebar/SidebarMenuBadge.vue +28 -0
- package/app/components/ui/sidebar/SidebarMenuButton.vue +60 -0
- package/app/components/ui/sidebar/SidebarMenuButtonChild.vue +36 -0
- package/app/components/ui/sidebar/SidebarMenuItem.vue +18 -0
- package/app/components/ui/sidebar/SidebarMenuSkeleton.vue +35 -0
- package/app/components/ui/sidebar/SidebarMenuSub.vue +24 -0
- package/app/components/ui/sidebar/SidebarMenuSubButton.vue +43 -0
- package/app/components/ui/sidebar/SidebarMenuSubItem.vue +18 -0
- package/app/components/ui/sidebar/SidebarProvider.vue +109 -0
- package/app/components/ui/sidebar/SidebarRail.vue +35 -0
- package/app/components/ui/sidebar/SidebarSeparator.vue +19 -0
- package/app/components/ui/sidebar/SidebarTrigger.vue +26 -0
- package/app/components/ui/sidebar/index.ts +62 -0
- package/app/components/ui/sidebar/utils.ts +19 -0
- package/app/components/ui/skeleton/Skeleton.vue +17 -0
- package/app/components/ui/skeleton/index.ts +1 -0
- package/app/components/ui/sonner/Sonner.vue +67 -0
- package/app/components/ui/sonner/index.ts +1 -0
- package/app/components/ui/tabs/Tabs.vue +26 -0
- package/app/components/ui/tabs/TabsContent.vue +23 -0
- package/app/components/ui/tabs/TabsList.vue +28 -0
- package/app/components/ui/tabs/TabsTrigger.vue +30 -0
- package/app/components/ui/tabs/index.ts +4 -0
- package/app/components/ui/textarea/Textarea.vue +32 -0
- package/app/components/ui/textarea/index.ts +1 -0
- package/app/components/ui/tooltip/Tooltip.vue +15 -0
- package/app/components/ui/tooltip/TooltipContent.vue +49 -0
- package/app/components/ui/tooltip/TooltipProvider.vue +14 -0
- package/app/components/ui/tooltip/TooltipTrigger.vue +12 -0
- package/app/components/ui/tooltip/index.ts +4 -0
- package/app/composables/useActiveHeading.ts +90 -0
- package/app/composables/useDuxtAnimatedHeight.ts +155 -0
- package/app/composables/useDuxtBreadcrumb.ts +60 -0
- package/app/composables/useDuxtChoice.ts +28 -0
- package/app/composables/useDuxtCollection.ts +89 -0
- package/app/composables/useDuxtConfig.ts +47 -0
- package/app/composables/useDuxtNavigation.ts +87 -0
- package/app/composables/useDuxtPageFocus.ts +30 -0
- package/app/composables/useDuxtPath.ts +42 -0
- package/app/composables/useDuxtSearch.ts +208 -0
- package/app/composables/useDuxtSection.ts +44 -0
- package/app/composables/useDuxtSectionRow.ts +49 -0
- package/app/composables/useDuxtShortcuts.ts +58 -0
- package/app/composables/useDuxtSiteUrl.ts +27 -0
- package/app/composables/useDuxtToast.ts +25 -0
- package/app/composables/useDuxtVersion.ts +138 -0
- package/app/composables/useFuzzySearch.ts +83 -0
- package/app/composables/usePackageManager.ts +4 -0
- package/app/composables/useRecentPages.ts +52 -0
- package/app/error.vue +133 -0
- package/app/layouts/changelog.vue +85 -0
- package/app/layouts/default.vue +23 -0
- package/app/layouts/docs.vue +62 -0
- package/app/layouts/reference.vue +85 -0
- package/app/lib/utils.ts +7 -0
- package/app/middleware/duxt-section-layout.global.ts +57 -0
- package/app/pages/[...slug].vue +441 -0
- package/app/pages/index.vue +479 -0
- package/app/types/duxt.d.ts +955 -0
- package/app/utils/aside.ts +16 -0
- package/app/utils/changelog.ts +182 -0
- package/app/utils/code-highlight.ts +116 -0
- package/app/utils/duxt-config.ts +185 -0
- package/app/utils/duxt-text.ts +135 -0
- package/app/utils/file-icons.ts +62 -0
- package/app/utils/generated-sections.ts +190 -0
- package/app/utils/generated-toc.ts +216 -0
- package/app/utils/heading-link.ts +32 -0
- package/app/utils/locale-path.ts +45 -0
- package/app/utils/navigation-tree.ts +206 -0
- package/app/utils/nearest-page.ts +72 -0
- package/app/utils/openapi.ts +1028 -0
- package/app/utils/package-command.ts +162 -0
- package/app/utils/request-samples.ts +635 -0
- package/app/utils/section-scope.ts +97 -0
- package/app/utils/sheet-navigation.ts +100 -0
- package/app/utils/source-file.ts +84 -0
- package/app/utils/version-choices.ts +68 -0
- package/app/utils/version-paths.ts +65 -0
- package/bin/duxt-report.mjs +45 -0
- package/components.json +19 -0
- package/content-cache.ts +193 -0
- package/content.config.ts +38 -0
- package/duxt-app-config.ts +124 -0
- package/highlight-langs.ts +68 -0
- package/i18n/i18n.config.ts +16 -0
- package/i18n/locales/de/duxt/changelog.json +17 -0
- package/i18n/locales/de/duxt/code.json +13 -0
- package/i18n/locales/de/duxt/defaults.json +22 -0
- package/i18n/locales/de/duxt/devtools.json +7 -0
- package/i18n/locales/de/duxt/error.json +10 -0
- package/i18n/locales/de/duxt/footer.json +7 -0
- package/i18n/locales/de/duxt/locale.json +7 -0
- package/i18n/locales/de/duxt/nav.json +17 -0
- package/i18n/locales/de/duxt/openapi.json +89 -0
- package/i18n/locales/de/duxt/page.json +34 -0
- package/i18n/locales/de/duxt/search.json +12 -0
- package/i18n/locales/de/duxt/shortcuts.json +11 -0
- package/i18n/locales/de/duxt/theme.json +7 -0
- package/i18n/locales/de/duxt/toc.json +7 -0
- package/i18n/locales/de/duxt/version.json +25 -0
- package/i18n/locales/en/duxt/changelog.json +17 -0
- package/i18n/locales/en/duxt/code.json +13 -0
- package/i18n/locales/en/duxt/defaults.json +22 -0
- package/i18n/locales/en/duxt/devtools.json +7 -0
- package/i18n/locales/en/duxt/error.json +10 -0
- package/i18n/locales/en/duxt/footer.json +7 -0
- package/i18n/locales/en/duxt/locale.json +7 -0
- package/i18n/locales/en/duxt/nav.json +17 -0
- package/i18n/locales/en/duxt/openapi.json +89 -0
- package/i18n/locales/en/duxt/page.json +34 -0
- package/i18n/locales/en/duxt/search.json +12 -0
- package/i18n/locales/en/duxt/shortcuts.json +11 -0
- package/i18n/locales/en/duxt/theme.json +7 -0
- package/i18n/locales/en/duxt/toc.json +7 -0
- package/i18n/locales/en/duxt/version.json +25 -0
- package/i18n/locales/es/duxt/changelog.json +17 -0
- package/i18n/locales/es/duxt/code.json +13 -0
- package/i18n/locales/es/duxt/defaults.json +22 -0
- package/i18n/locales/es/duxt/devtools.json +7 -0
- package/i18n/locales/es/duxt/error.json +10 -0
- package/i18n/locales/es/duxt/footer.json +7 -0
- package/i18n/locales/es/duxt/locale.json +7 -0
- package/i18n/locales/es/duxt/nav.json +17 -0
- package/i18n/locales/es/duxt/openapi.json +89 -0
- package/i18n/locales/es/duxt/page.json +34 -0
- package/i18n/locales/es/duxt/search.json +12 -0
- package/i18n/locales/es/duxt/shortcuts.json +11 -0
- package/i18n/locales/es/duxt/theme.json +7 -0
- package/i18n/locales/es/duxt/toc.json +7 -0
- package/i18n/locales/es/duxt/version.json +25 -0
- package/i18n/locales/fr/duxt/changelog.json +17 -0
- package/i18n/locales/fr/duxt/code.json +13 -0
- package/i18n/locales/fr/duxt/defaults.json +22 -0
- package/i18n/locales/fr/duxt/devtools.json +7 -0
- package/i18n/locales/fr/duxt/error.json +10 -0
- package/i18n/locales/fr/duxt/footer.json +7 -0
- package/i18n/locales/fr/duxt/locale.json +7 -0
- package/i18n/locales/fr/duxt/nav.json +17 -0
- package/i18n/locales/fr/duxt/openapi.json +89 -0
- package/i18n/locales/fr/duxt/page.json +34 -0
- package/i18n/locales/fr/duxt/search.json +12 -0
- package/i18n/locales/fr/duxt/shortcuts.json +11 -0
- package/i18n/locales/fr/duxt/theme.json +7 -0
- package/i18n/locales/fr/duxt/toc.json +7 -0
- package/i18n/locales/fr/duxt/version.json +25 -0
- package/i18n/locales/pt/duxt/changelog.json +17 -0
- package/i18n/locales/pt/duxt/code.json +13 -0
- package/i18n/locales/pt/duxt/defaults.json +22 -0
- package/i18n/locales/pt/duxt/devtools.json +7 -0
- package/i18n/locales/pt/duxt/error.json +10 -0
- package/i18n/locales/pt/duxt/footer.json +7 -0
- package/i18n/locales/pt/duxt/locale.json +7 -0
- package/i18n/locales/pt/duxt/nav.json +17 -0
- package/i18n/locales/pt/duxt/openapi.json +89 -0
- package/i18n/locales/pt/duxt/page.json +34 -0
- package/i18n/locales/pt/duxt/search.json +12 -0
- package/i18n/locales/pt/duxt/shortcuts.json +11 -0
- package/i18n/locales/pt/duxt/theme.json +7 -0
- package/i18n/locales/pt/duxt/toc.json +7 -0
- package/i18n/locales/pt/duxt/version.json +25 -0
- package/i18n/locales/pt-BR/duxt/error.json +8 -0
- package/i18n/locales/pt-BR/duxt/nav.json +10 -0
- package/i18n/locales/pt-BR/duxt/page.json +10 -0
- package/i18n/locales/pt-BR/duxt/search.json +11 -0
- package/i18n/locales/pt-BR/duxt/version.json +13 -0
- package/mdc.config.ts +28 -0
- package/modules/config.ts +440 -0
- package/modules/devtools.ts +126 -0
- package/modules/git-meta.ts +349 -0
- package/modules/redirects.ts +152 -0
- package/modules/validate.ts +137 -0
- package/nuxt.config.ts +530 -0
- package/openapi-model.ts +358 -0
- package/openapi-parse.ts +1052 -0
- package/package.json +161 -0
- package/public/devtools/cache.html +318 -0
- package/public/devtools/checks.html +309 -0
- package/public/devtools/config.html +461 -0
- package/public/devtools/i18n.html +309 -0
- package/public/devtools/pages.html +348 -0
- package/public/devtools/paths.html +315 -0
- package/public/devtools/redirects.html +309 -0
- package/public/devtools/search.html +324 -0
- package/public/devtools/sources.html +309 -0
- package/public/devtools/versions.html +318 -0
- package/report.ts +303 -0
- package/repository-root.ts +26 -0
- package/section-reports.ts +55 -0
- package/sections-changelog.ts +644 -0
- package/sections-openapi.ts +450 -0
- package/sections-resolve.ts +711 -0
- package/sections.ts +157 -0
- package/server/devtools/content.ts +120 -0
- package/server/devtools/context.ts +38 -0
- package/server/devtools/entry-path.ts +30 -0
- package/server/devtools/handler.ts +104 -0
- package/server/devtools/preview.ts +461 -0
- package/server/devtools/render/content.ts +233 -0
- package/server/devtools/render/sources.ts +414 -0
- package/server/devtools/render/system.ts +352 -0
- package/server/devtools/shell.ts +611 -0
- package/server/devtools/sources.ts +122 -0
- package/server/devtools/system.ts +178 -0
- package/server/mcp/tools/list-pages.ts +52 -0
- package/server/mcp/tools/read-page.ts +57 -0
- package/server/mcp/tools/search-docs.ts +74 -0
- package/server/middleware/raw-markdown.ts +86 -0
- package/server/routes/llms-full.txt.get.ts +75 -0
- package/server/routes/llms.txt.get.ts +63 -0
- package/server/routes/rss.xml.get.ts +125 -0
- package/server/utils/duxt-server-text.ts +46 -0
- package/sources-git.ts +113 -0
- package/sources-resolve.ts +908 -0
- package/sources.ts +287 -0
- package/validate-report.ts +494 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { fileURLToPath } from 'node:url';
|
|
2
|
+
import { defineContentConfig } from '@nuxt/content';
|
|
3
|
+
import { readDuxtBuildConfig } from './duxt-app-config';
|
|
4
|
+
import { duxtSectionTypes } from './sections-resolve';
|
|
5
|
+
import { duxtGeneratedCollections } from './sections';
|
|
6
|
+
import { duxtSources } from './sources';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* The collections, generated from the site's own `app.config.ts`.
|
|
10
|
+
*
|
|
11
|
+
* A consumer therefore writes NO content.config.ts and no source list file:
|
|
12
|
+
* `duxt.sources` in `app.config.ts` is the only declaration, and both halves of
|
|
13
|
+
* the layer read it from there — this file for the collections, the duxt module
|
|
14
|
+
* for the resolved manifest the theme needs at runtime.
|
|
15
|
+
*
|
|
16
|
+
* Content merges `content.config.ts` from every layer with later ones winning,
|
|
17
|
+
* so a consumer who needs collections this shorthand cannot express still
|
|
18
|
+
* writes an own file and takes over completely.
|
|
19
|
+
*
|
|
20
|
+
* Two directories are tried, in order: the site being built, then this layer.
|
|
21
|
+
* The fallback is the case the brief calls the most common one — a single
|
|
22
|
+
* `docs/` folder, no versions, nothing configured at all.
|
|
23
|
+
*/
|
|
24
|
+
const layerDir = fileURLToPath(new URL('.', import.meta.url));
|
|
25
|
+
const config = readDuxtBuildConfig([process.cwd(), layerDir]);
|
|
26
|
+
|
|
27
|
+
const sources = config?.sources ?? [{ path: 'docs' }];
|
|
28
|
+
const options = config?.sourceOptions ?? {};
|
|
29
|
+
const types = duxtSectionTypes(config?.sectionTypes);
|
|
30
|
+
|
|
31
|
+
export default defineContentConfig({
|
|
32
|
+
collections: {
|
|
33
|
+
...duxtSources(sources, options),
|
|
34
|
+
// Off until a source declares one, so a site that generates nothing gets
|
|
35
|
+
// exactly the collections it always got, under the names it always had.
|
|
36
|
+
...duxtGeneratedCollections(sources, options, types)
|
|
37
|
+
}
|
|
38
|
+
});
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { createJiti } from 'jiti';
|
|
4
|
+
import type { DuxtSource, DuxtSourcesOptions } from './sources-resolve';
|
|
5
|
+
import type { DuxtSectionTypes } from './sections-resolve';
|
|
6
|
+
|
|
7
|
+
/** The build-time half of `app.config`'s `duxt` key. */
|
|
8
|
+
export interface DuxtBuildConfig {
|
|
9
|
+
/** Documentation sources — one folder, or many, in this repo or others. */
|
|
10
|
+
sources?: DuxtSource[];
|
|
11
|
+
/** How those sources become URL prefixes. */
|
|
12
|
+
sourceOptions?: DuxtSourcesOptions;
|
|
13
|
+
/**
|
|
14
|
+
* Types a source's `generated` sections may name, beyond the layer's own.
|
|
15
|
+
*
|
|
16
|
+
* The registry is open, and this is the whole of it: a map rather than a
|
|
17
|
+
* registration call, because `content.config.ts` and the duxt module are
|
|
18
|
+
* loaded by two different loaders and a mutable registry each of them wrote
|
|
19
|
+
* into would be two registries.
|
|
20
|
+
*/
|
|
21
|
+
sectionTypes?: DuxtSectionTypes;
|
|
22
|
+
/** Which of the layer's locales this site serves. */
|
|
23
|
+
locales?: string[];
|
|
24
|
+
/**
|
|
25
|
+
* The site's name — also what the MCP server calls itself.
|
|
26
|
+
*
|
|
27
|
+
* Typed structurally rather than as `DuxtText`: this file is loaded by the
|
|
28
|
+
* build, outside the Nuxt runtime whose generated types carry that global.
|
|
29
|
+
* Same reason `scripts/check-previews.ts` declares the preview module's
|
|
30
|
+
* shape instead of importing it.
|
|
31
|
+
*/
|
|
32
|
+
title?: string | Record<string, string>;
|
|
33
|
+
/**
|
|
34
|
+
* The try-it client's code samples — read here for their LANGUAGES only.
|
|
35
|
+
*
|
|
36
|
+
* `modules/config.ts` turns the ids into the grammar set the runtime
|
|
37
|
+
* highlighter loads, so a site pays for the languages its samples use and no
|
|
38
|
+
* others. The generator functions are irrelevant to the build and are left
|
|
39
|
+
* alone; only `language` and `id` are looked at.
|
|
40
|
+
*
|
|
41
|
+
* Typed structurally rather than as `DuxtRequestSample[]` for the same reason
|
|
42
|
+
* `title` is not a `DuxtText`: this file is loaded by the build, outside the
|
|
43
|
+
* Nuxt runtime whose generated types carry that global.
|
|
44
|
+
*/
|
|
45
|
+
requestSamples?: (string | { id?: string; language?: string })[];
|
|
46
|
+
/**
|
|
47
|
+
* Extra grammars to load into the runtime highlighter.
|
|
48
|
+
*
|
|
49
|
+
* For `x-codeSamples`: a hand-written sample in the OpenAPI document is
|
|
50
|
+
* highlighted in the browser like a generated one, but its language cannot be
|
|
51
|
+
* known here — a remote source has not been cloned yet when this runs, and
|
|
52
|
+
* `parse` is synchronous, so the samples cannot be coloured at build time
|
|
53
|
+
* either. A document carrying Ruby samples therefore names `ruby` here, and
|
|
54
|
+
* pays for that one grammar.
|
|
55
|
+
*/
|
|
56
|
+
sampleLanguages?: string[];
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Read `duxt` out of the nearest `app.config.ts`.
|
|
61
|
+
*
|
|
62
|
+
* `app.config.ts` is a RUNTIME file — Nuxt compiles it into a virtual module
|
|
63
|
+
* for the browser and never hands its value to the build, which is why
|
|
64
|
+
* `nuxt.options.appConfig` is empty of it. But sources decide collections and
|
|
65
|
+
* locales decide routes, and both are settled long before a browser exists.
|
|
66
|
+
* So the file is executed here instead of read, exactly as c12 executes
|
|
67
|
+
* `content.config.ts` — the same seam, in the same repository.
|
|
68
|
+
*
|
|
69
|
+
* This is what lets a consumer configure duxt in ONE file. Before it, the
|
|
70
|
+
* source list had to live in a `duxt.sources.ts` of its own purely because two
|
|
71
|
+
* loaders needed it and neither could see the other's result.
|
|
72
|
+
*
|
|
73
|
+
* Synchronous on purpose: `content.config.ts` is loaded synchronously by
|
|
74
|
+
* Content, and an async default export there is not a thing.
|
|
75
|
+
*/
|
|
76
|
+
export function readDuxtBuildConfig(
|
|
77
|
+
dirs: string[]
|
|
78
|
+
): DuxtBuildConfig | undefined {
|
|
79
|
+
const jiti = createJiti(import.meta.url, { interopDefault: true });
|
|
80
|
+
|
|
81
|
+
// `defineAppConfig` is a Nuxt auto-import that does not exist in plain Node.
|
|
82
|
+
// It is the identity function, so a stub is the whole of it.
|
|
83
|
+
const globals = globalThis as {
|
|
84
|
+
defineAppConfig?: (value: unknown) => unknown;
|
|
85
|
+
};
|
|
86
|
+
const had = 'defineAppConfig' in globals;
|
|
87
|
+
globals.defineAppConfig ??= (value: unknown) => value;
|
|
88
|
+
|
|
89
|
+
try {
|
|
90
|
+
for (const dir of dirs) {
|
|
91
|
+
if (!dir) continue;
|
|
92
|
+
|
|
93
|
+
const file = [
|
|
94
|
+
join(dir, 'app', 'app.config.ts'),
|
|
95
|
+
join(dir, 'app.config.ts')
|
|
96
|
+
].find((candidate) => existsSync(candidate));
|
|
97
|
+
|
|
98
|
+
if (!file) continue;
|
|
99
|
+
|
|
100
|
+
try {
|
|
101
|
+
const loaded = jiti(file) as
|
|
102
|
+
| { duxt?: DuxtBuildConfig }
|
|
103
|
+
| { default?: { duxt?: DuxtBuildConfig } };
|
|
104
|
+
|
|
105
|
+
const duxt =
|
|
106
|
+
(loaded as { duxt?: DuxtBuildConfig }).duxt ??
|
|
107
|
+
(loaded as { default?: { duxt?: DuxtBuildConfig } }).default?.duxt;
|
|
108
|
+
|
|
109
|
+
if (duxt) return duxt;
|
|
110
|
+
} catch (error) {
|
|
111
|
+
// A consumer's app.config may touch something that only exists inside
|
|
112
|
+
// the Nuxt runtime. Falling through to the layer's own defaults is the
|
|
113
|
+
// behaviour without this reader at all — a warning, not a dead build.
|
|
114
|
+
console.warn(
|
|
115
|
+
`[duxt] could not read ${file}: ${(error as Error).message}`
|
|
116
|
+
);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
} finally {
|
|
120
|
+
if (!had) delete globals.defineAppConfig;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
return undefined;
|
|
124
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EVERY language Shiki ships, aliases included — the list Content highlights
|
|
3
|
+
* fences with.
|
|
4
|
+
*
|
|
5
|
+
* Split from `nuxt.config.ts` for the reason `sources-resolve.ts` is split from
|
|
6
|
+
* `sources.ts`: the config half imports `nuxt/config` and a Vite plugin, and a
|
|
7
|
+
* test cannot load either. This half is data, so `tests/highlight-langs.test.ts`
|
|
8
|
+
* can check the same array the build uses rather than a copy of it.
|
|
9
|
+
*
|
|
10
|
+
* A documentation layer does not know what its consumers document, and the
|
|
11
|
+
* choice is not symmetric: `langs` is merged with defu across layers, so a
|
|
12
|
+
* consumer can only ADD to this list, never remove from it. Too short a list
|
|
13
|
+
* costs somebody a config change they will not discover; too long a list costs
|
|
14
|
+
* them 0.3 s of build time.
|
|
15
|
+
*
|
|
16
|
+
* NOTHING REACHES A BROWSER. Content highlights fences at build time inside
|
|
17
|
+
* rehype, so a grammar is a build-time cost and never a client byte — measured
|
|
18
|
+
* at 358 ms and 39 MB of heap for the whole set, once per build, because
|
|
19
|
+
* Content caches the highlighter on a hash of these options. That is why the
|
|
20
|
+
* "load it on demand" rule that governs `mermaid` and CodeMirror does not apply
|
|
21
|
+
* here, and why `app/utils/code-highlight.ts` — which DOES run in the browser —
|
|
22
|
+
* still carries a hand-picked handful.
|
|
23
|
+
*
|
|
24
|
+
* THE ALIASES ARE LISTED BECAUSE THE LOOKUP IS AN EXACT KEY ACCESS.
|
|
25
|
+
* `@nuxtjs/mdc` resolves a fence's language against the record built from this
|
|
26
|
+
* very list, and learns a grammar's own aliases only after loading it. So
|
|
27
|
+
* ```javascript``` used to colour only when a ```js``` fence happened to come
|
|
28
|
+
* first in the same build — a fault that moved with file order, and fell back to
|
|
29
|
+
* plain text silently, because the warning behind it is `process.dev` only.
|
|
30
|
+
*
|
|
31
|
+
* Read from `shiki` rather than typed out: a hand-written list goes stale at the
|
|
32
|
+
* next release. What that buys instead is a coupling — the ids come from the
|
|
33
|
+
* layer's `shiki`, the grammars from the `@shikijs/langs` that Content
|
|
34
|
+
* resolves — and `tests/highlight-langs.test.ts` is what holds it, because an id
|
|
35
|
+
* missing over there throws during the build rather than degrading.
|
|
36
|
+
*/
|
|
37
|
+
// Metadata and a lazy import map, not the grammars themselves: importing this
|
|
38
|
+
// costs 3 KB gzip and loads nothing.
|
|
39
|
+
import { type BundledLanguage, bundledLanguagesInfo } from 'shiki/langs';
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* A name Content can turn into a package subpath.
|
|
43
|
+
*
|
|
44
|
+
* Content resolves each configured language as `@shikijs/langs/<name>`, and four
|
|
45
|
+
* of Shiki's aliases cannot be a file there: `c++`, `c#`, `f#` and `文言`. They
|
|
46
|
+
* are not missing grammars — `cpp`, `csharp`, `fsharp` and `wenyan` all exist —
|
|
47
|
+
* only names no `exports` pattern can serve. Passing one through anyway is not a
|
|
48
|
+
* fence that degrades but a BUILD THAT THROWS, because Content imports every
|
|
49
|
+
* configured language eagerly when it creates the highlighter.
|
|
50
|
+
*
|
|
51
|
+
* A ```c++``` fence therefore colours only once `cpp` has loaded in the same
|
|
52
|
+
* build, which is the order-dependence the alias list exists to remove. It
|
|
53
|
+
* cannot be closed from here: Content keys its record by the string it was
|
|
54
|
+
* given, and these four strings have no module to give it.
|
|
55
|
+
*/
|
|
56
|
+
const subpathSafe = /^[a-z0-9][a-z0-9._-]*$/;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Cast because `bundledLanguagesInfo` types `id` and `aliases` as plain strings
|
|
60
|
+
* while Content's `langs` takes the `BundledLanguage` union — which is built from
|
|
61
|
+
* these very names, ids and aliases alike. So it narrows a string back to the
|
|
62
|
+
* union it came from rather than asserting anything new, and the test beside this
|
|
63
|
+
* file checks the values instead of trusting the cast.
|
|
64
|
+
*/
|
|
65
|
+
export const highlightLangs = [
|
|
66
|
+
...bundledLanguagesInfo.map((language) => language.id),
|
|
67
|
+
...bundledLanguagesInfo.flatMap((language) => language.aliases ?? [])
|
|
68
|
+
].filter((name) => subpathSafe.test(name)) as BundledLanguage[];
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* vue-i18n's own options, the half `nuxt.config.ts` does not cover.
|
|
3
|
+
*
|
|
4
|
+
* `fallbackLocale` is the one gildstone does not have and duxt cannot do
|
|
5
|
+
* without. gildstone sets a fallback under `detectBrowserLanguage`, but that
|
|
6
|
+
* answers a different question — which locale a VISITOR gets when their browser
|
|
7
|
+
* asks for one the site has not got. This one answers which locale supplies a
|
|
8
|
+
* MISSING KEY, and for a published layer that is the everyday case: a consumer
|
|
9
|
+
* activates a language duxt ships no strings for, and without this the
|
|
10
|
+
* interface renders `duxt.search.placeholder` into the search box instead of
|
|
11
|
+
* a word.
|
|
12
|
+
*/
|
|
13
|
+
export default defineI18nConfig(() => ({
|
|
14
|
+
legacy: false,
|
|
15
|
+
fallbackLocale: 'en-GB'
|
|
16
|
+
}));
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"duxt": {
|
|
3
|
+
"changelog": {
|
|
4
|
+
"releases": "Versionen",
|
|
5
|
+
"filter": "Nach Art der Änderung filtern",
|
|
6
|
+
"latest": "Neueste",
|
|
7
|
+
"changes": "Änderungen",
|
|
8
|
+
"kinds": "Änderungsarten",
|
|
9
|
+
"last": "Letztes Release",
|
|
10
|
+
"more": "und {count} weitere",
|
|
11
|
+
"kind": "Änderungsart",
|
|
12
|
+
"reset": "Zurücksetzen",
|
|
13
|
+
"history": "Versionsverlauf",
|
|
14
|
+
"selected": "Ausgewählte Änderungsarten"
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"duxt": {
|
|
3
|
+
"code": {
|
|
4
|
+
"copy": "Code kopieren",
|
|
5
|
+
"copyCommand": "Befehl kopieren",
|
|
6
|
+
"copied": "Kopiert",
|
|
7
|
+
"preview": "Vorschau",
|
|
8
|
+
"source": "Code",
|
|
9
|
+
"previewTabs": "Beispiel und Quelltext",
|
|
10
|
+
"copiedToast": "In die Zwischenablage kopiert"
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"duxt": {
|
|
3
|
+
"defaults": {
|
|
4
|
+
"title": "Dokumentation",
|
|
5
|
+
"navigation": {
|
|
6
|
+
"docs": "Docs"
|
|
7
|
+
},
|
|
8
|
+
"landing": {
|
|
9
|
+
"actions": {
|
|
10
|
+
"docs": "Dokumentation lesen"
|
|
11
|
+
},
|
|
12
|
+
"preview": "Live-Vorschau der Dokumentation",
|
|
13
|
+
"previewOpen": "Öffnen",
|
|
14
|
+
"featuresTitle": "Funktionen",
|
|
15
|
+
"demoTitle": "Live-Demo"
|
|
16
|
+
},
|
|
17
|
+
"aside": {
|
|
18
|
+
"title": "Community"
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"duxt": {
|
|
3
|
+
"nav": {
|
|
4
|
+
"open": "Navigation öffnen",
|
|
5
|
+
"sections": "Bereiche",
|
|
6
|
+
"previous": "Zurück",
|
|
7
|
+
"next": "Weiter",
|
|
8
|
+
"skip": "Zum Inhalt springen",
|
|
9
|
+
"main": "Hauptnavigation",
|
|
10
|
+
"docs": "Dokumentation",
|
|
11
|
+
"pagination": "Seitennavigation",
|
|
12
|
+
"breadcrumb": "Navigationspfad",
|
|
13
|
+
"menu": "Navigation",
|
|
14
|
+
"pages": "Seiten"
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
{
|
|
2
|
+
"duxt": {
|
|
3
|
+
"openapi": {
|
|
4
|
+
"required": "Erforderlich",
|
|
5
|
+
"deprecated": "Veraltet",
|
|
6
|
+
"readOnly": "Nur lesbar",
|
|
7
|
+
"writeOnly": "Nur schreibbar",
|
|
8
|
+
"externalRef": "In einer anderen Datei definiert, die dieser Build nicht liest:",
|
|
9
|
+
"circular": "Verweist auf sich selbst; oben ausgeklappt.",
|
|
10
|
+
"truncated": "Tiefer verschachtelt, als diese Ansicht zeigt.",
|
|
11
|
+
"items": "Jedes Element",
|
|
12
|
+
"additionalProperties": "Jede weitere Eigenschaft",
|
|
13
|
+
"noAdditionalProperties": "Weitere Eigenschaften sind nicht erlaubt.",
|
|
14
|
+
"discriminator": "Unterschieden anhand von",
|
|
15
|
+
"parameters": "Parameter",
|
|
16
|
+
"requestBody": "Anfragekörper",
|
|
17
|
+
"responses": "Antworten",
|
|
18
|
+
"headers": "Kopfzeilen",
|
|
19
|
+
"noBody": "Kein Inhalt.",
|
|
20
|
+
"links": "Was als Nächstes möglich ist",
|
|
21
|
+
"security": "Autorisierung",
|
|
22
|
+
"noAuth": "Dieser Endpunkt benötigt keine Authentifizierung.",
|
|
23
|
+
"anyOfThese": "Eines davon genügt",
|
|
24
|
+
"callbacks": "Rückrufe",
|
|
25
|
+
"webhook": "Webhook",
|
|
26
|
+
"endpoints": "Endpunkte",
|
|
27
|
+
"servers": "Server",
|
|
28
|
+
"authentication": "Authentifizierung",
|
|
29
|
+
"contact": "Kontakt",
|
|
30
|
+
"license": "Lizenz",
|
|
31
|
+
"terms": "Nutzungsbedingungen",
|
|
32
|
+
"moreInfo": "Weitere Informationen",
|
|
33
|
+
"in": {
|
|
34
|
+
"path": "Pfad",
|
|
35
|
+
"query": "Abfrage",
|
|
36
|
+
"header": "Kopfzeile",
|
|
37
|
+
"cookie": "Cookie"
|
|
38
|
+
},
|
|
39
|
+
"composition": {
|
|
40
|
+
"oneOf": "Genau eines von",
|
|
41
|
+
"anyOf": "Mindestens eines von",
|
|
42
|
+
"allOf": "Alle von",
|
|
43
|
+
"not": "Alles außer"
|
|
44
|
+
},
|
|
45
|
+
"constraints": {
|
|
46
|
+
"minimum": "min",
|
|
47
|
+
"maximum": "max",
|
|
48
|
+
"exclusiveMinimum": "größer als",
|
|
49
|
+
"exclusiveMaximum": "kleiner als",
|
|
50
|
+
"multipleOf": "Vielfaches von",
|
|
51
|
+
"minLength": "Mindestlänge",
|
|
52
|
+
"maxLength": "Höchstlänge",
|
|
53
|
+
"pattern": "Muster",
|
|
54
|
+
"minItems": "min. Elemente",
|
|
55
|
+
"maxItems": "max. Elemente",
|
|
56
|
+
"uniqueItems": "eindeutig",
|
|
57
|
+
"minProperties": "min. Eigenschaften",
|
|
58
|
+
"maxProperties": "max. Eigenschaften"
|
|
59
|
+
},
|
|
60
|
+
"client": {
|
|
61
|
+
"title": "Anfrage senden",
|
|
62
|
+
"server": "Server",
|
|
63
|
+
"auth": "Authentifizierung",
|
|
64
|
+
"username": "Benutzername",
|
|
65
|
+
"credentials": "Was Sie hier eingeben, bleibt in diesem Tab, wird nicht gespeichert und geht nur an den gewählten Server.",
|
|
66
|
+
"certificate": "Dieses Verfahren benötigt ein Client-Zertifikat, das eine Seite nicht bereitstellen kann.",
|
|
67
|
+
"cookie": "Ihr Browser lässt eine Seite keinen Cookie setzen, daher kann dies von hier nicht gesendet werden.",
|
|
68
|
+
"mediaType": "Medientyp",
|
|
69
|
+
"send": "Senden",
|
|
70
|
+
"direct": "Die Anfrage sendet Ihr Browser direkt an diesen Server.",
|
|
71
|
+
"blocked": "Die Anfrage hat den Server nicht erreicht. Möglicherweise erlaubt er keine Anfragen von einer anderen Herkunft, oder die Adresse ist von hier nicht erreichbar.",
|
|
72
|
+
"samples": "Beispielanfrage",
|
|
73
|
+
"sampleClient": "Client",
|
|
74
|
+
"fromSpec": "Von der API mitgeliefert — folgt deinen Änderungen oben also nicht.",
|
|
75
|
+
"form": "Formular",
|
|
76
|
+
"json": "JSON",
|
|
77
|
+
"format": "Formatieren",
|
|
78
|
+
"invalidJson": "Noch kein gültiges JSON — die Anfrage wird so gesendet, wie sie dasteht.",
|
|
79
|
+
"noForm": "Dieser Body lässt sich nicht als Formular darstellen: bitte als JSON bearbeiten."
|
|
80
|
+
},
|
|
81
|
+
"version": "API-Version",
|
|
82
|
+
"operations": "Operationen",
|
|
83
|
+
"groups": "Gruppen",
|
|
84
|
+
"serverCount": "Server",
|
|
85
|
+
"fields": "{count} Felder",
|
|
86
|
+
"expects": "Erwartete Antwort"
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"duxt": {
|
|
3
|
+
"page": {
|
|
4
|
+
"edit": "Diese Seite bearbeiten",
|
|
5
|
+
"compare": "Änderungen vergleichen",
|
|
6
|
+
"lastUpdated": "Zuletzt aktualisiert am {date}",
|
|
7
|
+
"released": "Veröffentlicht am {date}",
|
|
8
|
+
"contributors": "Geschrieben von",
|
|
9
|
+
"copyFailed": "Die Seite konnte nicht kopiert werden.",
|
|
10
|
+
"helpful": {
|
|
11
|
+
"question": "War diese Seite hilfreich?",
|
|
12
|
+
"yes": "Ja",
|
|
13
|
+
"no": "Nein",
|
|
14
|
+
"thanks": "Vielen Dank."
|
|
15
|
+
},
|
|
16
|
+
"tabs": "Varianten",
|
|
17
|
+
"since": "Neu in {version}",
|
|
18
|
+
"copy": {
|
|
19
|
+
"label": "Seite kopieren",
|
|
20
|
+
"more": "Weitere Wege, diese Seite zu kopieren",
|
|
21
|
+
"view": "Als Markdown ansehen",
|
|
22
|
+
"chatgpt": "In ChatGPT öffnen",
|
|
23
|
+
"claude": "In Claude öffnen",
|
|
24
|
+
"prompt": "Lies {url}, damit ich dir dazu Fragen stellen kann."
|
|
25
|
+
},
|
|
26
|
+
"view": "Quelle ansehen",
|
|
27
|
+
"untranslated": {
|
|
28
|
+
"title": "Diese Seite ist noch nicht in deiner Sprache verfügbar",
|
|
29
|
+
"description": "Du liest sie auf {language}."
|
|
30
|
+
},
|
|
31
|
+
"anchor": "Link zu diesem Abschnitt"
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"duxt": {
|
|
3
|
+
"search": {
|
|
4
|
+
"label": "Suchen",
|
|
5
|
+
"placeholder": "Dokumentation durchsuchen…",
|
|
6
|
+
"recent": "Zuletzt angesehen",
|
|
7
|
+
"sections": "Bereiche",
|
|
8
|
+
"empty": "Nichts gefunden für „{query}“.",
|
|
9
|
+
"approximate": "Keine genaue Übereinstimmung für „{query}“ — die nächstliegenden Treffer."
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"duxt": {
|
|
3
|
+
"version": {
|
|
4
|
+
"old": "Sie lesen die Dokumentation einer alten Version. Erwägen Sie ein Upgrade Ihres Projekts auf {preferred}.",
|
|
5
|
+
"upcoming": "Sie lesen die Dokumentation einer kommenden Version. Dokumentation und Funktionen können sich noch ändern.",
|
|
6
|
+
"deprecated": "Sie lesen die Dokumentation von {version}. Diese Version ist veraltet und wird nicht mehr gepflegt. Erwägen Sie ein Upgrade auf {preferred}.",
|
|
7
|
+
"eol": "Sie lesen die Dokumentation von {version}. Diese Version hat das Ende ihrer Lebensdauer erreicht und erhält keine Änderungen mehr.",
|
|
8
|
+
"goToCurrent": "Zu {preferred} wechseln",
|
|
9
|
+
"status": {
|
|
10
|
+
"upcoming": "kommend",
|
|
11
|
+
"current": "aktuell",
|
|
12
|
+
"maintained": "gepflegt",
|
|
13
|
+
"deprecated": "veraltet",
|
|
14
|
+
"eol": "eingestellt"
|
|
15
|
+
},
|
|
16
|
+
"titles": {
|
|
17
|
+
"upcoming": "Kommende Version",
|
|
18
|
+
"old": "Alte Version",
|
|
19
|
+
"deprecated": "Veraltete Version",
|
|
20
|
+
"eol": "Eingestellte Version"
|
|
21
|
+
},
|
|
22
|
+
"label": "Version"
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"duxt": {
|
|
3
|
+
"changelog": {
|
|
4
|
+
"releases": "Releases",
|
|
5
|
+
"filter": "Filter by kind of change",
|
|
6
|
+
"latest": "Latest",
|
|
7
|
+
"changes": "Changes",
|
|
8
|
+
"kinds": "Kinds of change",
|
|
9
|
+
"last": "Last release",
|
|
10
|
+
"more": "and {count} more",
|
|
11
|
+
"kind": "Kind of change",
|
|
12
|
+
"reset": "Reset",
|
|
13
|
+
"history": "Release history",
|
|
14
|
+
"selected": "Selected kinds of change"
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"duxt": {
|
|
3
|
+
"defaults": {
|
|
4
|
+
"title": "Documentation",
|
|
5
|
+
"navigation": {
|
|
6
|
+
"docs": "Docs"
|
|
7
|
+
},
|
|
8
|
+
"landing": {
|
|
9
|
+
"actions": {
|
|
10
|
+
"docs": "Read the docs"
|
|
11
|
+
},
|
|
12
|
+
"preview": "Live preview of the documentation",
|
|
13
|
+
"previewOpen": "Open",
|
|
14
|
+
"featuresTitle": "Features",
|
|
15
|
+
"demoTitle": "Live demo"
|
|
16
|
+
},
|
|
17
|
+
"aside": {
|
|
18
|
+
"title": "Community"
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|