@astrojs/starlight 0.41.10 → 0.42.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/dist/_virtual/_rolldown/runtime.js +13 -0
- package/dist/components/MobileMenuToggle.astro +65 -0
- package/{components → dist/components}/PageFrame.astro +32 -8
- package/dist/components-internals/Icons.d.ts +415 -0
- package/dist/components-internals/Icons.js +140 -0
- package/dist/components-internals/SidebarPersistState.d.ts +1 -0
- package/dist/components-internals/SidebarPersistState.js +53 -0
- package/dist/components-internals/TableOfContents/starlight-toc.d.ts +18 -0
- package/dist/components-internals/TableOfContents/starlight-toc.js +88 -0
- package/dist/constants.d.ts +4 -0
- package/dist/constants.js +4 -0
- package/{expressive-code.d.ts → dist/expressive-code.d.ts} +6 -13
- package/dist/expressive-code.js +31 -0
- package/dist/global.d.ts +62 -0
- package/dist/global.js +2 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +109 -0
- package/dist/integrations/aside-utils.d.ts +9 -0
- package/dist/integrations/aside-utils.js +35 -0
- package/dist/integrations/expressive-code/hast.d.ts +1 -0
- package/dist/integrations/expressive-code/hast.js +2 -0
- package/dist/integrations/expressive-code/index.d.ts +60 -0
- package/dist/integrations/expressive-code/index.js +48 -0
- package/dist/integrations/expressive-code/preprocessor.d.ts +17 -0
- package/dist/integrations/expressive-code/preprocessor.js +76 -0
- package/dist/integrations/expressive-code/themes/night-owl-dark.js +4 -0
- package/dist/integrations/expressive-code/themes/night-owl-light.js +4 -0
- package/dist/integrations/expressive-code/theming.d.ts +16 -0
- package/dist/integrations/expressive-code/theming.js +71 -0
- package/dist/integrations/expressive-code/translations.d.ts +8 -0
- package/dist/integrations/expressive-code/translations.js +26 -0
- package/dist/integrations/markdown-icon.d.ts +8 -0
- package/dist/integrations/markdown-icon.js +14 -0
- package/dist/integrations/markdown-plugins.d.ts +18 -0
- package/dist/integrations/markdown-plugins.js +36 -0
- package/dist/integrations/markdown-processor.d.ts +29 -0
- package/dist/integrations/markdown-processor.js +44 -0
- package/dist/integrations/pagefind.d.ts +7 -0
- package/dist/integrations/pagefind.js +34 -0
- package/dist/integrations/rehype-code-rtl-support.d.ts +21 -0
- package/dist/integrations/rehype-code-rtl-support.js +36 -0
- package/dist/integrations/rehype-heading-links.d.ts +10 -0
- package/dist/integrations/rehype-heading-links.js +57 -0
- package/dist/integrations/remark-asides.d.ts +32 -0
- package/dist/integrations/remark-asides.js +166 -0
- package/dist/integrations/remark-rehype.d.ts +17 -0
- package/dist/integrations/remark-rehype.js +51 -0
- package/dist/integrations/satteri.d.ts +13 -0
- package/dist/integrations/satteri.js +209 -0
- package/dist/integrations/shared/absolutePathToLang.d.ts +10 -0
- package/dist/integrations/shared/absolutePathToLang.js +13 -0
- package/dist/integrations/shared/localeToLang.d.ts +10 -0
- package/dist/integrations/shared/localeToLang.js +13 -0
- package/dist/integrations/shared/slugToLocale.d.ts +12 -0
- package/dist/integrations/shared/slugToLocale.js +15 -0
- package/dist/integrations/sitemap.d.ts +12 -0
- package/dist/integrations/sitemap.js +19 -0
- package/dist/integrations/vite-layer-order.d.ts +15 -0
- package/dist/integrations/vite-layer-order.js +56 -0
- package/dist/integrations/vite-lazy-barrel-optimization.d.ts +12 -0
- package/dist/integrations/vite-lazy-barrel-optimization.js +33 -0
- package/dist/integrations/vite-virtual-modules.d.ts +14 -0
- package/dist/integrations/vite-virtual-modules.js +108 -0
- package/dist/internal.d.ts +3 -0
- package/dist/internal.js +3 -0
- package/dist/loaders.d.ts +20 -0
- package/dist/loaders.js +49 -0
- package/dist/locals.d.ts +15 -0
- package/dist/locals.js +33 -0
- package/dist/package.js +4 -0
- package/{props.ts → dist/props.d.ts} +6 -4
- package/dist/props.js +1 -0
- package/dist/route-data.d.ts +7 -0
- package/dist/route-data.js +6 -0
- package/dist/schema.d.ts +426 -0
- package/dist/schema.js +103 -0
- package/dist/schemas/badge.d.ts +86 -0
- package/dist/schemas/badge.js +39 -0
- package/dist/schemas/components.d.ts +236 -0
- package/dist/schemas/components.js +36 -0
- package/dist/schemas/expressiveCode.d.ts +7 -0
- package/dist/schemas/expressiveCode.js +5 -0
- package/dist/schemas/favicon.d.ts +9 -0
- package/dist/schemas/favicon.js +32 -0
- package/dist/schemas/head.d.ts +33 -0
- package/dist/schemas/head.js +41 -0
- package/dist/schemas/hero.d.ts +319 -0
- package/dist/schemas/hero.js +73 -0
- package/dist/schemas/i18n.d.ts +125 -0
- package/dist/schemas/i18n.js +76 -0
- package/dist/schemas/icon.d.ts +284 -0
- package/dist/schemas/icon.js +7 -0
- package/dist/schemas/locale.d.ts +20 -0
- package/dist/schemas/locale.js +11 -0
- package/dist/schemas/logo.d.ts +32 -0
- package/dist/schemas/logo.js +14 -0
- package/dist/schemas/pagefind.d.ts +166 -0
- package/dist/schemas/pagefind.js +31 -0
- package/dist/schemas/prevNextLink.d.ts +10 -0
- package/dist/schemas/prevNextLink.js +14 -0
- package/dist/schemas/sidebar.d.ts +205 -0
- package/dist/schemas/sidebar.js +71 -0
- package/dist/schemas/site-title.d.ts +7 -0
- package/dist/schemas/site-title.js +17 -0
- package/dist/schemas/social.d.ts +292 -0
- package/dist/schemas/social.js +18 -0
- package/dist/schemas/tableOfContents.d.ts +24 -0
- package/dist/schemas/tableOfContents.js +16 -0
- package/{style → dist/style}/anchor-links.css +13 -1
- package/dist/translations/ar.js +36 -0
- package/dist/translations/ca.js +46 -0
- package/dist/translations/cs.js +46 -0
- package/dist/translations/da.js +33 -0
- package/dist/translations/de.js +33 -0
- package/dist/translations/el.js +33 -0
- package/dist/translations/en.js +33 -0
- package/dist/translations/es.js +46 -0
- package/dist/translations/fa.js +33 -0
- package/dist/translations/fi.js +33 -0
- package/dist/translations/fr.js +36 -0
- package/dist/translations/gl.js +46 -0
- package/dist/translations/he.js +33 -0
- package/dist/translations/hi.js +36 -0
- package/dist/translations/hu.js +46 -0
- package/dist/translations/id.js +33 -0
- package/dist/translations/index.d.ts +48 -0
- package/dist/translations/index.js +75 -0
- package/dist/translations/it.js +36 -0
- package/dist/translations/ja.js +36 -0
- package/dist/translations/ko.js +36 -0
- package/dist/translations/lv.js +33 -0
- package/dist/translations/nb.js +33 -0
- package/dist/translations/nl.js +33 -0
- package/dist/translations/pl.js +36 -0
- package/dist/translations/pt.js +36 -0
- package/dist/translations/ro.js +33 -0
- package/dist/translations/ru.js +36 -0
- package/dist/translations/sk.js +33 -0
- package/dist/translations/sv.js +33 -0
- package/dist/translations/th.js +33 -0
- package/dist/translations/tr.js +33 -0
- package/dist/translations/uk.js +33 -0
- package/dist/translations/vi.js +33 -0
- package/dist/translations/zh-CN.js +36 -0
- package/dist/translations/zh-TW.js +36 -0
- package/dist/types.d.ts +4 -0
- package/dist/types.js +1 -0
- package/{user-components → dist/user-components}/FileTree.astro +1 -1
- package/{user-components → dist/user-components}/Steps.astro +1 -1
- package/{user-components → dist/user-components}/TabItem.astro +1 -1
- package/{user-components → dist/user-components}/Tabs.astro +1 -1
- package/dist/user-components/file-tree-icons.d.ts +178 -0
- package/dist/user-components/file-tree-icons.js +632 -0
- package/dist/user-components/file-tree-processor.d.ts +16 -0
- package/dist/user-components/file-tree-processor.js +132 -0
- package/dist/user-components/steps-processor.d.ts +10 -0
- package/dist/user-components/steps-processor.js +39 -0
- package/dist/user-components/tabs-processor.d.ts +23 -0
- package/dist/user-components/tabs-processor.js +70 -0
- package/dist/utils/base.d.ts +7 -0
- package/dist/utils/base.js +15 -0
- package/dist/utils/canonical.d.ts +10 -0
- package/dist/utils/canonical.js +14 -0
- package/dist/utils/collection-fs.d.ts +13 -0
- package/dist/utils/collection-fs.js +19 -0
- package/{utils/collection.ts → dist/utils/collection.d.ts} +9 -20
- package/dist/utils/collection.js +26 -0
- package/dist/utils/createPathFormatter.d.ts +9 -0
- package/dist/utils/createPathFormatter.js +35 -0
- package/dist/utils/createTranslationSystem.d.ts +23 -0
- package/dist/utils/createTranslationSystem.js +84 -0
- package/dist/utils/error-map.d.ts +23 -0
- package/dist/utils/error-map.js +125 -0
- package/dist/utils/format-path.d.ts +4 -0
- package/dist/utils/format-path.js +9 -0
- package/dist/utils/generateToC.d.ts +14 -0
- package/dist/utils/generateToC.js +25 -0
- package/dist/utils/git.d.ts +12 -0
- package/dist/utils/git.js +71 -0
- package/dist/utils/gitInlined.d.ts +6 -0
- package/dist/utils/gitInlined.js +11 -0
- package/dist/utils/head.d.ts +7 -0
- package/dist/utils/head.js +233 -0
- package/dist/utils/i18n.d.ts +50 -0
- package/dist/utils/i18n.js +141 -0
- package/dist/utils/localizedUrl.d.ts +8 -0
- package/dist/utils/localizedUrl.js +28 -0
- package/dist/utils/navigation.d.ts +19 -0
- package/dist/utils/navigation.js +353 -0
- package/dist/utils/path.d.ts +21 -0
- package/dist/utils/path.js +51 -0
- package/dist/utils/plugins.d.ts +721 -0
- package/dist/utils/plugins.js +174 -0
- package/dist/utils/routing/data.d.ts +20 -0
- package/dist/utils/routing/data.js +127 -0
- package/dist/utils/routing/index.d.ts +21 -0
- package/dist/utils/routing/index.js +106 -0
- package/dist/utils/routing/middleware.d.ts +11 -0
- package/dist/utils/routing/middleware.js +65 -0
- package/dist/utils/routing/types.d.ts +93 -0
- package/dist/utils/routing/types.js +1 -0
- package/dist/utils/slugs.d.ts +45 -0
- package/dist/utils/slugs.js +104 -0
- package/dist/utils/starlight-page.d.ts +36 -0
- package/dist/utils/starlight-page.js +120 -0
- package/dist/utils/translations-fs.d.ts +15 -0
- package/dist/utils/translations-fs.js +39 -0
- package/dist/utils/translations.d.ts +20 -0
- package/dist/utils/translations.js +29 -0
- package/dist/utils/types.d.ts +5 -0
- package/dist/utils/types.js +1 -0
- package/dist/utils/url.d.ts +7 -0
- package/{utils/url.ts → dist/utils/url.js} +5 -4
- package/dist/utils/user-config.d.ts +2055 -0
- package/dist/utils/user-config.js +136 -0
- package/dist/utils/validateLogoImports.d.ts +5 -0
- package/dist/utils/validateLogoImports.js +16 -0
- package/dist/utils/zodDeepMerge.d.ts +16 -0
- package/dist/utils/zodDeepMerge.js +53 -0
- package/package.json +62 -33
- package/CHANGELOG.md +0 -3043
- package/components/MobileMenuToggle.astro +0 -114
- package/components-internals/Icons.ts +0 -248
- package/components-internals/SidebarPersistState.ts +0 -71
- package/components-internals/TableOfContents/starlight-toc.ts +0 -127
- package/constants.ts +0 -4
- package/expressive-code.mjs +0 -23
- package/global.d.ts +0 -11
- package/i18n.d.ts +0 -18
- package/index.ts +0 -200
- package/integrations/aside-utils.ts +0 -41
- package/integrations/expressive-code/hast.d.ts +0 -5
- package/integrations/expressive-code/hast.mjs +0 -9
- package/integrations/expressive-code/index.ts +0 -125
- package/integrations/expressive-code/preprocessor.ts +0 -126
- package/integrations/expressive-code/themes/night-owl-dark.jsonc +0 -1796
- package/integrations/expressive-code/themes/night-owl-light.jsonc +0 -1695
- package/integrations/expressive-code/theming.ts +0 -105
- package/integrations/expressive-code/translations.ts +0 -36
- package/integrations/markdown-icon.ts +0 -13
- package/integrations/markdown-plugins.ts +0 -71
- package/integrations/markdown-processor.ts +0 -64
- package/integrations/pagefind.ts +0 -60
- package/integrations/rehype-code-rtl-support.ts +0 -37
- package/integrations/rehype-heading-links.ts +0 -79
- package/integrations/remark-asides.ts +0 -219
- package/integrations/remark-rehype.ts +0 -87
- package/integrations/satteri.ts +0 -265
- package/integrations/shared/absolutePathToLang.ts +0 -26
- package/integrations/shared/localeToLang.ts +0 -15
- package/integrations/shared/slugToLocale.ts +0 -18
- package/integrations/sitemap.ts +0 -23
- package/integrations/vite-layer-order.ts +0 -69
- package/integrations/vite-lazy-barrel-optimization.ts +0 -40
- package/integrations/vite-virtual-modules.ts +0 -175
- package/internal.ts +0 -6
- package/loaders.ts +0 -63
- package/locals.d.ts +0 -43
- package/locals.ts +0 -43
- package/route-data.ts +0 -11
- package/schema.ts +0 -167
- package/schemas/badge.ts +0 -40
- package/schemas/components.ts +0 -265
- package/schemas/expressiveCode.ts +0 -12
- package/schemas/favicon.ts +0 -40
- package/schemas/head.ts +0 -50
- package/schemas/hero.ts +0 -69
- package/schemas/i18n.ts +0 -244
- package/schemas/icon.ts +0 -7
- package/schemas/logo.ts +0 -28
- package/schemas/pagefind.ts +0 -128
- package/schemas/prevNextLink.ts +0 -18
- package/schemas/sidebar.ts +0 -163
- package/schemas/site-title.ts +0 -20
- package/schemas/social.ts +0 -23
- package/schemas/tableOfContents.ts +0 -21
- package/translations/README.md +0 -14
- package/translations/ar.json +0 -33
- package/translations/ca.json +0 -43
- package/translations/cs.json +0 -43
- package/translations/da.json +0 -30
- package/translations/de.json +0 -30
- package/translations/el.json +0 -30
- package/translations/en.json +0 -30
- package/translations/es.json +0 -43
- package/translations/fa.json +0 -30
- package/translations/fi.json +0 -30
- package/translations/fr.json +0 -33
- package/translations/gl.json +0 -43
- package/translations/he.json +0 -30
- package/translations/hi.json +0 -33
- package/translations/hu.json +0 -43
- package/translations/id.json +0 -30
- package/translations/index.ts +0 -76
- package/translations/it.json +0 -33
- package/translations/ja.json +0 -33
- package/translations/ko.json +0 -33
- package/translations/lv.json +0 -30
- package/translations/nb.json +0 -30
- package/translations/nl.json +0 -30
- package/translations/pl.json +0 -33
- package/translations/pt.json +0 -33
- package/translations/ro.json +0 -30
- package/translations/ru.json +0 -33
- package/translations/sk.json +0 -30
- package/translations/sv.json +0 -30
- package/translations/th.json +0 -30
- package/translations/tr.json +0 -30
- package/translations/uk.json +0 -30
- package/translations/vi.json +0 -30
- package/translations/zh-CN.json +0 -33
- package/translations/zh-TW.json +0 -33
- package/types.ts +0 -7
- package/user-components/file-tree-icons.ts +0 -782
- package/user-components/rehype-file-tree.ts +0 -251
- package/user-components/rehype-steps.ts +0 -85
- package/user-components/rehype-tabs.ts +0 -121
- package/utils/base.ts +0 -15
- package/utils/canonical.ts +0 -19
- package/utils/collection-fs.ts +0 -20
- package/utils/createPathFormatter.ts +0 -60
- package/utils/createTranslationSystem.ts +0 -137
- package/utils/error-map.ts +0 -222
- package/utils/format-path.ts +0 -7
- package/utils/generateToC.ts +0 -33
- package/utils/git.ts +0 -121
- package/utils/gitInlined.ts +0 -20
- package/utils/head.ts +0 -235
- package/utils/i18n.ts +0 -221
- package/utils/localizedUrl.ts +0 -51
- package/utils/navigation.ts +0 -566
- package/utils/path.ts +0 -58
- package/utils/plugins.ts +0 -498
- package/utils/routing/data.ts +0 -154
- package/utils/routing/index.ts +0 -135
- package/utils/routing/middleware.ts +0 -81
- package/utils/routing/types.ts +0 -101
- package/utils/slugs.ts +0 -119
- package/utils/starlight-page.ts +0 -205
- package/utils/translations-fs.ts +0 -54
- package/utils/translations.ts +0 -57
- package/utils/types.ts +0 -15
- package/utils/user-config.ts +0 -348
- package/utils/validateLogoImports.ts +0 -21
- package/utils/zodDeepMerge.ts +0 -144
- package/virtual-internal.d.ts +0 -149
- package/virtual.d.ts +0 -27
- /package/{components → dist/components}/AnchorHeading.astro +0 -0
- /package/{components → dist/components}/Banner.astro +0 -0
- /package/{components → dist/components}/ContentNotice.astro +0 -0
- /package/{components → dist/components}/ContentPanel.astro +0 -0
- /package/{components → dist/components}/DraftContentNotice.astro +0 -0
- /package/{components → dist/components}/EditLink.astro +0 -0
- /package/{components → dist/components}/FallbackContentNotice.astro +0 -0
- /package/{components → dist/components}/Footer.astro +0 -0
- /package/{components → dist/components}/Head.astro +0 -0
- /package/{components → dist/components}/Header.astro +0 -0
- /package/{components → dist/components}/Hero.astro +0 -0
- /package/{components → dist/components}/LanguageSelect.astro +0 -0
- /package/{components → dist/components}/LastUpdated.astro +0 -0
- /package/{components → dist/components}/MarkdownContent.astro +0 -0
- /package/{components → dist/components}/MobileMenuFooter.astro +0 -0
- /package/{components → dist/components}/MobileTableOfContents.astro +0 -0
- /package/{components → dist/components}/Page.astro +0 -0
- /package/{components → dist/components}/PageSidebar.astro +0 -0
- /package/{components → dist/components}/PageTitle.astro +0 -0
- /package/{components → dist/components}/Pagination.astro +0 -0
- /package/{components → dist/components}/Search.astro +0 -0
- /package/{components → dist/components}/Select.astro +0 -0
- /package/{components → dist/components}/Sidebar.astro +0 -0
- /package/{components → dist/components}/SidebarPersister.astro +0 -0
- /package/{components → dist/components}/SidebarRestorePoint.astro +0 -0
- /package/{components → dist/components}/SidebarSublist.astro +0 -0
- /package/{components → dist/components}/SiteTitle.astro +0 -0
- /package/{components → dist/components}/SkipLink.astro +0 -0
- /package/{components → dist/components}/SocialIcons.astro +0 -0
- /package/{components → dist/components}/StarlightPage.astro +0 -0
- /package/{components → dist/components}/TableOfContents.astro +0 -0
- /package/{components → dist/components}/ThemeProvider.astro +0 -0
- /package/{components → dist/components}/ThemeSelect.astro +0 -0
- /package/{components → dist/components}/TwoColumnContent.astro +0 -0
- /package/{components-internals → dist/components-internals}/TableOfContents/TableOfContentsList.astro +0 -0
- /package/{components.ts → dist/components.ts} +0 -0
- /package/{routes → dist/routes}/common.astro +0 -0
- /package/{routes → dist/routes}/ssr/404.astro +0 -0
- /package/{routes → dist/routes}/ssr/index.astro +0 -0
- /package/{routes → dist/routes}/static/404.astro +0 -0
- /package/{routes → dist/routes}/static/index.astro +0 -0
- /package/{style → dist/style}/asides.css +0 -0
- /package/{style → dist/style}/layers.css +0 -0
- /package/{style → dist/style}/markdown.css +0 -0
- /package/{style → dist/style}/print.css +0 -0
- /package/{style → dist/style}/props.css +0 -0
- /package/{style → dist/style}/reset.css +0 -0
- /package/{style → dist/style}/util.css +0 -0
- /package/{user-components → dist/user-components}/Aside.astro +0 -0
- /package/{user-components → dist/user-components}/Badge.astro +0 -0
- /package/{user-components → dist/user-components}/Card.astro +0 -0
- /package/{user-components → dist/user-components}/CardGrid.astro +0 -0
- /package/{user-components → dist/user-components}/Icon.astro +0 -0
- /package/{user-components → dist/user-components}/LinkButton.astro +0 -0
- /package/{user-components → dist/user-components}/LinkCard.astro +0 -0
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import type { ViteUserConfig } from 'astro';
|
|
2
|
-
import MagicString from 'magic-string';
|
|
3
|
-
|
|
4
|
-
// https://vite.dev/guide/api-plugin#hook-filters
|
|
5
|
-
const pluginTransformIdIncludeFilter = /\.astro$/;
|
|
6
|
-
const pluginTransformIdExcludeFilter = /@astrojs\/starlight\/components\/StarlightPage\.astro$/;
|
|
7
|
-
const pluginTransformCodeFilter = 'StarlightPage.astro';
|
|
8
|
-
|
|
9
|
-
const starlightPageImportSource = '@astrojs/starlight/components/StarlightPage.astro';
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Vite plugin that ensures the StarlightPage component is always imported first when imported in
|
|
13
|
-
* an Astro file.
|
|
14
|
-
*
|
|
15
|
-
* This is necessary to ensure a predictable CSS layer order which is defined by the `<Page />`
|
|
16
|
-
* imported by the `<StarlightPage />` component. If a user imports any other component using
|
|
17
|
-
* cascade layers before the `<StarlightPage />` component, it will result in undesired layers
|
|
18
|
-
* being created before we explicitly set the expected layer order.
|
|
19
|
-
*/
|
|
20
|
-
export function vitePluginStarlightCssLayerOrder(): VitePlugin {
|
|
21
|
-
return {
|
|
22
|
-
name: 'vite-plugin-starlight-css-layer-order',
|
|
23
|
-
enforce: 'pre',
|
|
24
|
-
transform: {
|
|
25
|
-
filter: {
|
|
26
|
-
id: { include: pluginTransformIdIncludeFilter, exclude: pluginTransformIdExcludeFilter },
|
|
27
|
-
code: pluginTransformCodeFilter,
|
|
28
|
-
},
|
|
29
|
-
handler(code, id) {
|
|
30
|
-
let ast: ReturnType<typeof this.parse>;
|
|
31
|
-
|
|
32
|
-
try {
|
|
33
|
-
ast = this.parse(code);
|
|
34
|
-
} catch {
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
let hasStarlightPageImport = false;
|
|
39
|
-
|
|
40
|
-
for (const node of ast.body) {
|
|
41
|
-
if (node.type !== 'ImportDeclaration') continue;
|
|
42
|
-
if (node.source.value !== starlightPageImportSource) continue;
|
|
43
|
-
|
|
44
|
-
const importDefaultSpecifier = node.specifiers.find(
|
|
45
|
-
(specifier) => specifier.type === 'ImportDefaultSpecifier'
|
|
46
|
-
);
|
|
47
|
-
if (!importDefaultSpecifier) continue;
|
|
48
|
-
|
|
49
|
-
hasStarlightPageImport = true;
|
|
50
|
-
break;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
if (!hasStarlightPageImport) return;
|
|
54
|
-
|
|
55
|
-
// Format path to unix style path.
|
|
56
|
-
const filename = id.replace(/\\/g, '/');
|
|
57
|
-
const ms = new MagicString(code, { filename });
|
|
58
|
-
ms.prepend(`import "${starlightPageImportSource}";\n`);
|
|
59
|
-
|
|
60
|
-
return {
|
|
61
|
-
code: ms.toString(),
|
|
62
|
-
map: ms.generateMap({ hires: 'boundary' }),
|
|
63
|
-
};
|
|
64
|
-
},
|
|
65
|
-
},
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
type VitePlugin = NonNullable<ViteUserConfig['plugins']>[number];
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { fileURLToPath } from 'node:url';
|
|
2
|
-
import type { ViteUserConfig } from 'astro';
|
|
3
|
-
|
|
4
|
-
// https://vite.dev/guide/api-plugin#hook-filters
|
|
5
|
-
const componentsBarrelIdFilter = /[\\/]components\.ts(?:\?.*)?$/;
|
|
6
|
-
|
|
7
|
-
const backSlashRegex = /\\/g;
|
|
8
|
-
const queryStringRegex = /\?.*$/;
|
|
9
|
-
|
|
10
|
-
const starlightComponentsBarrelId = normalizeId(
|
|
11
|
-
fileURLToPath(new URL('../components.ts', import.meta.url))
|
|
12
|
-
);
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Vite plugin that marks the Starlight components barrel file as having no side effects so that
|
|
16
|
-
* lazy barrel optimization can be applied to it.
|
|
17
|
-
*
|
|
18
|
-
* @see https://rolldown.rs/in-depth/lazy-barrel-optimization
|
|
19
|
-
*/
|
|
20
|
-
export function vitePluginStarlightLazyBarrelOptimization(): VitePlugin {
|
|
21
|
-
return {
|
|
22
|
-
name: 'vite-plugin-starlight-lazy-barrel-optimization',
|
|
23
|
-
enforce: 'pre',
|
|
24
|
-
transform: {
|
|
25
|
-
filter: {
|
|
26
|
-
id: componentsBarrelIdFilter,
|
|
27
|
-
},
|
|
28
|
-
handler(code, id) {
|
|
29
|
-
if (normalizeId(id) !== starlightComponentsBarrelId) return;
|
|
30
|
-
return { code, moduleSideEffects: false };
|
|
31
|
-
},
|
|
32
|
-
},
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
function normalizeId(id: string) {
|
|
37
|
-
return id.replace(backSlashRegex, '/').replace(queryStringRegex, '');
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
type VitePlugin = NonNullable<ViteUserConfig['plugins']>[number];
|
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
import type { AstroConfig, HookParameters, ViteUserConfig } from 'astro';
|
|
2
|
-
import { existsSync } from 'node:fs';
|
|
3
|
-
import { resolve } from 'node:path';
|
|
4
|
-
import { fileURLToPath } from 'node:url';
|
|
5
|
-
import { resolveCollectionPath } from '../utils/collection-fs';
|
|
6
|
-
import type { StarlightConfig } from '../utils/user-config';
|
|
7
|
-
import { getAllNewestCommitDate } from '../utils/git';
|
|
8
|
-
import type { PluginTranslations } from '../utils/plugins';
|
|
9
|
-
|
|
10
|
-
// https://vite.dev/guide/api-plugin#hook-filters
|
|
11
|
-
const pluginResolveIdIdFilter = /^virtual:starlight\//;
|
|
12
|
-
// eslint-disable-next-line no-control-regex -- virtual module prefix
|
|
13
|
-
const pluginLoadIdFilter = /^\x00virtual:starlight\//;
|
|
14
|
-
|
|
15
|
-
function resolveVirtualModuleId<T extends string>(id: T): `\0${T}` {
|
|
16
|
-
return `\0${id}`;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/** Vite plugin that exposes Starlight user config and project context via virtual modules. */
|
|
20
|
-
export function vitePluginStarlightVirtualModules(
|
|
21
|
-
{
|
|
22
|
-
command,
|
|
23
|
-
isNodeCompatibleEnv,
|
|
24
|
-
}: {
|
|
25
|
-
command: HookParameters<'astro:config:setup'>['command'];
|
|
26
|
-
isNodeCompatibleEnv: boolean;
|
|
27
|
-
},
|
|
28
|
-
opts: StarlightConfig,
|
|
29
|
-
{
|
|
30
|
-
build,
|
|
31
|
-
legacy,
|
|
32
|
-
root,
|
|
33
|
-
srcDir,
|
|
34
|
-
trailingSlash,
|
|
35
|
-
}: Pick<AstroConfig, 'root' | 'srcDir' | 'trailingSlash'> & {
|
|
36
|
-
build: Pick<AstroConfig['build'], 'format'>;
|
|
37
|
-
legacy: Pick<AstroConfig['legacy'], 'collectionsBackwardsCompat'>;
|
|
38
|
-
},
|
|
39
|
-
pluginTranslations: PluginTranslations
|
|
40
|
-
): NonNullable<ViteUserConfig['plugins']>[number] {
|
|
41
|
-
/**
|
|
42
|
-
* Resolves module IDs to a usable format:
|
|
43
|
-
* - Relative paths (e.g. `'./module.js'`) are resolved against `base` and formatted as an absolute path.
|
|
44
|
-
* - Package identifiers (e.g. `'module'`) are returned unchanged.
|
|
45
|
-
*
|
|
46
|
-
* By default, `base` is the project root directory.
|
|
47
|
-
*/
|
|
48
|
-
const resolveId = (id: string, base = root) =>
|
|
49
|
-
JSON.stringify(id.startsWith('.') ? resolve(fileURLToPath(base), id) : id);
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Resolves a path to a Starlight file relative to this file.
|
|
53
|
-
* @example
|
|
54
|
-
* resolveLocalPath('../utils/git.ts');
|
|
55
|
-
* // => '"/users/houston/docs/node_modules/@astrojs/starlight/utils/git.ts"'
|
|
56
|
-
*/
|
|
57
|
-
const resolveLocalPath = (path: string) =>
|
|
58
|
-
JSON.stringify(fileURLToPath(new URL(path, import.meta.url)));
|
|
59
|
-
|
|
60
|
-
const rootPath = fileURLToPath(root);
|
|
61
|
-
const docsPath = resolveCollectionPath('docs', srcDir);
|
|
62
|
-
|
|
63
|
-
let collectionConfigImportPath = resolve(fileURLToPath(srcDir), './content.config.ts');
|
|
64
|
-
// If using the collections backwards compatibility mode and the config doesn't exist, fallback
|
|
65
|
-
// to the legacy location. We need to test this ahead of time as we cannot `try/catch` a failing
|
|
66
|
-
// import in the virtual module as this would fail at build time when Rollup tries to resolve a
|
|
67
|
-
// non-existent path.
|
|
68
|
-
if (legacy.collectionsBackwardsCompat && !existsSync(collectionConfigImportPath)) {
|
|
69
|
-
collectionConfigImportPath = resolve(fileURLToPath(srcDir), './content/config.ts');
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
const virtualComponentModules = Object.fromEntries(
|
|
73
|
-
Object.entries(opts.components).map(([name, path]) => [
|
|
74
|
-
`virtual:starlight/components/${name}`,
|
|
75
|
-
`export { default } from ${resolveId(path)};`,
|
|
76
|
-
])
|
|
77
|
-
);
|
|
78
|
-
|
|
79
|
-
/** Map of virtual module names to their code contents as strings. */
|
|
80
|
-
const modules = {
|
|
81
|
-
'virtual:starlight/user-config': `export default ${JSON.stringify(opts)}`,
|
|
82
|
-
'virtual:starlight/project-context': `export default ${JSON.stringify({
|
|
83
|
-
build: { format: build.format },
|
|
84
|
-
root,
|
|
85
|
-
srcDir,
|
|
86
|
-
trailingSlash,
|
|
87
|
-
})}`,
|
|
88
|
-
'virtual:starlight/git-info':
|
|
89
|
-
(command !== 'build' && isNodeCompatibleEnv
|
|
90
|
-
? `import { makeAPI } from ${resolveLocalPath('../utils/git.ts')};` +
|
|
91
|
-
`const api = makeAPI(${JSON.stringify(rootPath)});`
|
|
92
|
-
: `import { makeAPI } from ${resolveLocalPath('../utils/gitInlined.ts')};` +
|
|
93
|
-
`const api = makeAPI(${JSON.stringify(getAllNewestCommitDate(rootPath, docsPath))});`) +
|
|
94
|
-
'export const getNewestCommitDate = api.getNewestCommitDate;',
|
|
95
|
-
/**
|
|
96
|
-
* Module containing styles for features that can be toggled on or off such as heading anchor links.
|
|
97
|
-
*/
|
|
98
|
-
'virtual:starlight/optional-css': opts.markdown.headingLinks
|
|
99
|
-
? `import ${resolveLocalPath('../style/anchor-links.css')};`
|
|
100
|
-
: '',
|
|
101
|
-
/**
|
|
102
|
-
* Module containing imports of user-specified custom CSS files.
|
|
103
|
-
*/
|
|
104
|
-
'virtual:starlight/user-css': opts.customCss.map((id) => `import ${resolveId(id)};`).join(''),
|
|
105
|
-
'virtual:starlight/user-images': opts.logo
|
|
106
|
-
? 'src' in opts.logo
|
|
107
|
-
? `import src from ${resolveId(
|
|
108
|
-
opts.logo.src
|
|
109
|
-
)}; export const logos = { dark: src, light: src };`
|
|
110
|
-
: `import dark from ${resolveId(opts.logo.dark)}; import light from ${resolveId(
|
|
111
|
-
opts.logo.light
|
|
112
|
-
)}; export const logos = { dark, light };`
|
|
113
|
-
: 'export const logos = {};',
|
|
114
|
-
'virtual:starlight/collection-config': `let userCollections;
|
|
115
|
-
try {
|
|
116
|
-
userCollections = (await import(${JSON.stringify(collectionConfigImportPath)})).collections;
|
|
117
|
-
} catch {}
|
|
118
|
-
export const collections = userCollections;`,
|
|
119
|
-
'virtual:starlight/plugin-translations': `export default ${JSON.stringify(pluginTranslations)}`,
|
|
120
|
-
/**
|
|
121
|
-
* Exports an array of route middleware functions.
|
|
122
|
-
* For example, might generate a module that looks like:
|
|
123
|
-
*
|
|
124
|
-
* ```js
|
|
125
|
-
* import { onRequest as routeMiddleware0 } from "/users/houston/docs/src/middleware";
|
|
126
|
-
* import { onRequest as routeMiddleware1 } from "@houston-inc/plugin/middleware";
|
|
127
|
-
*
|
|
128
|
-
* export const routeMiddleware = [
|
|
129
|
-
* routeMiddleware0,
|
|
130
|
-
* routeMiddleware1,
|
|
131
|
-
* ];
|
|
132
|
-
* ```
|
|
133
|
-
*/
|
|
134
|
-
'virtual:starlight/route-middleware':
|
|
135
|
-
opts.routeMiddleware
|
|
136
|
-
.reduce(
|
|
137
|
-
([imports, entries], id, index) => {
|
|
138
|
-
const importName = `routeMiddleware${index}`;
|
|
139
|
-
imports += `import { onRequest as ${importName} } from ${resolveId(id)};\n`;
|
|
140
|
-
entries += `\t${importName},\n`;
|
|
141
|
-
return [imports, entries] as [string, string];
|
|
142
|
-
},
|
|
143
|
-
['', 'export const routeMiddleware = [\n'] as [string, string]
|
|
144
|
-
)
|
|
145
|
-
.join('\n') + '];',
|
|
146
|
-
/** Map of modules exporting Starlight’s templating components. */
|
|
147
|
-
'virtual:starlight/pagefind-config': `export const pagefindUserConfig = ${JSON.stringify(opts.pagefind || {})}`,
|
|
148
|
-
...virtualComponentModules,
|
|
149
|
-
} satisfies Record<string, string>;
|
|
150
|
-
|
|
151
|
-
/** Mapping names prefixed with `\0` to their original form. */
|
|
152
|
-
const resolutionMap = Object.fromEntries(
|
|
153
|
-
(Object.keys(modules) as (keyof typeof modules)[]).map((key) => [
|
|
154
|
-
resolveVirtualModuleId(key),
|
|
155
|
-
key,
|
|
156
|
-
])
|
|
157
|
-
);
|
|
158
|
-
|
|
159
|
-
return {
|
|
160
|
-
name: 'vite-plugin-starlight-user-config',
|
|
161
|
-
resolveId: {
|
|
162
|
-
filter: { id: pluginResolveIdIdFilter },
|
|
163
|
-
handler(id): string | void {
|
|
164
|
-
if (id in modules) return resolveVirtualModuleId(id);
|
|
165
|
-
},
|
|
166
|
-
},
|
|
167
|
-
load: {
|
|
168
|
-
filter: { id: pluginLoadIdFilter },
|
|
169
|
-
handler(id): string | void {
|
|
170
|
-
const resolution = resolutionMap[id];
|
|
171
|
-
if (resolution) return modules[resolution];
|
|
172
|
-
},
|
|
173
|
-
},
|
|
174
|
-
};
|
|
175
|
-
}
|
package/internal.ts
DELETED
package/loaders.ts
DELETED
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { glob, type Loader, type LoaderContext } from 'astro/loaders';
|
|
2
|
-
import { getCollectionPathFromRoot, type StarlightCollection } from './utils/collection';
|
|
3
|
-
|
|
4
|
-
// https://github.com/withastro/astro/blob/main/packages/astro/src/core/constants.ts#L87
|
|
5
|
-
// https://github.com/withastro/astro/blob/main/packages/integrations/mdx/src/index.ts#L59
|
|
6
|
-
const docsExtensions = ['markdown', 'mdown', 'mkdn', 'mkd', 'mdwn', 'md', 'mdx'];
|
|
7
|
-
const i18nExtensions = ['json', 'yml', 'yaml'];
|
|
8
|
-
|
|
9
|
-
type GlobOptions = Parameters<typeof glob>[0];
|
|
10
|
-
type GenerateIdFunction = NonNullable<GlobOptions['generateId']>;
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Loads content files from the `src/content/docs/` directory, ignoring filenames starting with `_`.
|
|
14
|
-
*/
|
|
15
|
-
export function docsLoader({
|
|
16
|
-
generateId,
|
|
17
|
-
}: {
|
|
18
|
-
/**
|
|
19
|
-
* Function that generates an ID for an entry. Default implementation generates a slug from the entry path.
|
|
20
|
-
* @returns The ID of the entry. Must be unique per collection.
|
|
21
|
-
**/
|
|
22
|
-
generateId?: GenerateIdFunction;
|
|
23
|
-
} = {}): Loader {
|
|
24
|
-
return {
|
|
25
|
-
name: 'starlight-docs-loader',
|
|
26
|
-
load: createGlobLoadFn('docs', generateId),
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Loads data files from the `src/content/i18n/` directory, ignoring filenames starting with `_`.
|
|
32
|
-
*/
|
|
33
|
-
export function i18nLoader(): Loader {
|
|
34
|
-
return {
|
|
35
|
-
name: 'starlight-i18n-loader',
|
|
36
|
-
load: createGlobLoadFn('i18n'),
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
function createGlobLoadFn(
|
|
41
|
-
collection: StarlightCollection,
|
|
42
|
-
generateId?: GenerateIdFunction
|
|
43
|
-
): Loader['load'] {
|
|
44
|
-
return (context: LoaderContext) => {
|
|
45
|
-
const extensions = collection === 'docs' ? docsExtensions : i18nExtensions;
|
|
46
|
-
|
|
47
|
-
if (
|
|
48
|
-
collection === 'docs' &&
|
|
49
|
-
context.config.integrations.find(({ name }) => name === '@astrojs/markdoc')
|
|
50
|
-
) {
|
|
51
|
-
// https://github.com/withastro/astro/blob/main/packages/integrations/markdoc/src/content-entry-type.ts#L28
|
|
52
|
-
extensions.push('mdoc');
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
const options: GlobOptions = {
|
|
56
|
-
base: getCollectionPathFromRoot(collection, context.config),
|
|
57
|
-
pattern: `**/[^_]*.{${extensions.join(',')}}`,
|
|
58
|
-
};
|
|
59
|
-
if (generateId) options.generateId = generateId;
|
|
60
|
-
|
|
61
|
-
return glob(options).load(context);
|
|
62
|
-
};
|
|
63
|
-
}
|
package/locals.d.ts
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* This namespace is reserved for Starlight (only used for i18n at the moment).
|
|
3
|
-
* It can be extended by plugins using module augmentation and interface merging.
|
|
4
|
-
* For an example, see: https://starlight.astro.build/reference/plugins/#injecttranslations
|
|
5
|
-
*/
|
|
6
|
-
declare namespace StarlightApp {
|
|
7
|
-
interface I18n {}
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Extending Astro’s `App.Locals` interface registers types for the middleware added by Starlight.
|
|
12
|
-
*/
|
|
13
|
-
declare namespace App {
|
|
14
|
-
interface Locals {
|
|
15
|
-
/**
|
|
16
|
-
* Starlight’s localization API, powered by i18next.
|
|
17
|
-
*
|
|
18
|
-
* @see https://starlight.astro.build/guides/i18n/#using-ui-translations
|
|
19
|
-
*
|
|
20
|
-
* @example
|
|
21
|
-
* // Render a UI string for the current locale.
|
|
22
|
-
* <p>{Astro.locals.t('404.text')}</p>
|
|
23
|
-
*/
|
|
24
|
-
t: import('./utils/createTranslationSystem').I18nT;
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Starlight’s data for the current route.
|
|
28
|
-
*
|
|
29
|
-
* @see https://starlight.astro.build/guides/route-data/
|
|
30
|
-
*
|
|
31
|
-
* @throws Will throw an error if accessed on non-Starlight routes.
|
|
32
|
-
*
|
|
33
|
-
* @example
|
|
34
|
-
* // Render the title for the current page
|
|
35
|
-
* <h1>{Astro.locals.starlightRoute.entry.data.title}</h1>
|
|
36
|
-
*
|
|
37
|
-
* @example
|
|
38
|
-
* // Check if the current page should render the sidebar
|
|
39
|
-
* const { hasSidebar } = Astro.locals.starlightRoute;
|
|
40
|
-
*/
|
|
41
|
-
starlightRoute: import('./utils/routing/types').StarlightRouteData;
|
|
42
|
-
}
|
|
43
|
-
}
|
package/locals.ts
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import type { APIContext } from 'astro';
|
|
2
|
-
import { AstroError } from 'astro/errors';
|
|
3
|
-
import { defineMiddleware } from 'astro:middleware';
|
|
4
|
-
import type { StarlightRouteData } from './route-data';
|
|
5
|
-
import { useTranslations } from './utils/translations';
|
|
6
|
-
|
|
7
|
-
export const onRequest = defineMiddleware(async (context, next) => {
|
|
8
|
-
context.locals.t = useTranslations(context.currentLocale);
|
|
9
|
-
initializeStarlightRoute(context);
|
|
10
|
-
return next();
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Sets up a `starlightRoute` property on locals. Initially, this will throw an error if accessed.
|
|
15
|
-
* When rendering, Starlight’s routes set `starlightRoute` with the resolved route data object for
|
|
16
|
-
* the current page.
|
|
17
|
-
*
|
|
18
|
-
* This ensures Starlight components can easily access `starlightRoute` without needing type guards,
|
|
19
|
-
* we can throw a helpful message if `starlightRoute` is accessed on non-Starlight pages, and we
|
|
20
|
-
* avoid generating route data in this middleware which also runs for non-Starlight route.
|
|
21
|
-
*/
|
|
22
|
-
export function initializeStarlightRoute(context: APIContext) {
|
|
23
|
-
if ('starlightRoute' in context.locals) return;
|
|
24
|
-
const state: { routeData: StarlightRouteData | undefined } = { routeData: undefined };
|
|
25
|
-
Object.defineProperty(context.locals, 'starlightRoute', {
|
|
26
|
-
get() {
|
|
27
|
-
if (!state.routeData) {
|
|
28
|
-
throw new AstroError(
|
|
29
|
-
'`locals.starlightRoute` is not defined',
|
|
30
|
-
'This usually means a component that accesses `locals.starlightRoute` is being rendered outside of a Starlight page, which is not supported.\n\n' +
|
|
31
|
-
'If this is a component you authored, you can do one of the following:\n\n' +
|
|
32
|
-
'1. Avoid using this component in non-Starlight pages.\n' +
|
|
33
|
-
'2. Wrap the code that reads `locals.starlightRoute` in a `try/catch` block and handle the cases where `starlightRoute` is not available.\n\n' +
|
|
34
|
-
'If this is a Starlight built-in or third-party component, you may need to report a bug or avoid this use of the component.'
|
|
35
|
-
);
|
|
36
|
-
}
|
|
37
|
-
return state.routeData;
|
|
38
|
-
},
|
|
39
|
-
set(routeData: StarlightRouteData) {
|
|
40
|
-
state.routeData = routeData;
|
|
41
|
-
},
|
|
42
|
-
});
|
|
43
|
-
}
|
package/route-data.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { APIContext } from 'astro';
|
|
2
|
-
export type { StarlightRouteData } from './utils/routing/types';
|
|
3
|
-
|
|
4
|
-
export type RouteMiddlewareHandler = (
|
|
5
|
-
context: APIContext,
|
|
6
|
-
next: () => Promise<void>
|
|
7
|
-
) => void | Promise<void>;
|
|
8
|
-
|
|
9
|
-
export function defineRouteMiddleware(fn: RouteMiddlewareHandler) {
|
|
10
|
-
return fn;
|
|
11
|
-
}
|
package/schema.ts
DELETED
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
import { z } from 'astro/zod';
|
|
2
|
-
import type { SchemaContext } from 'astro:content';
|
|
3
|
-
import { HeadConfigSchema } from './schemas/head';
|
|
4
|
-
import { PrevNextLinkConfigSchema } from './schemas/prevNextLink';
|
|
5
|
-
import { FrontmatterTableOfContentsSchema } from './schemas/tableOfContents';
|
|
6
|
-
import { BadgeConfigSchema } from './schemas/badge';
|
|
7
|
-
import { HeroSchema } from './schemas/hero';
|
|
8
|
-
import { SidebarLinkItemHTMLAttributesSchema } from './schemas/sidebar';
|
|
9
|
-
import { deepMergeSchemas, type DeepMergedSchema } from './utils/zodDeepMerge';
|
|
10
|
-
export { i18nSchema } from './schemas/i18n';
|
|
11
|
-
|
|
12
|
-
/** Default content collection schema for Starlight’s `docs` collection. */
|
|
13
|
-
const StarlightFrontmatterSchema = (context: SchemaContext) =>
|
|
14
|
-
z.object({
|
|
15
|
-
/** The title of the current page. Required. */
|
|
16
|
-
title: z.string(),
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* A short description of the current page’s content. Optional, but recommended.
|
|
20
|
-
* A good description is 150–160 characters long and outlines the key content
|
|
21
|
-
* of the page in a clear and engaging way.
|
|
22
|
-
*/
|
|
23
|
-
description: z.string().optional(),
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Custom URL where a reader can edit this page.
|
|
27
|
-
* Overrides the `editLink.baseUrl` global config if set.
|
|
28
|
-
*
|
|
29
|
-
* Can also be set to `false` to disable showing an edit link on this page.
|
|
30
|
-
*/
|
|
31
|
-
editUrl: z.union([z.url(), z.boolean()]).optional().default(true),
|
|
32
|
-
|
|
33
|
-
/** Set custom `<head>` tags just for this page. */
|
|
34
|
-
head: HeadConfigSchema({ source: 'content' }),
|
|
35
|
-
|
|
36
|
-
/** Override global table of contents configuration for this page. */
|
|
37
|
-
tableOfContents: FrontmatterTableOfContentsSchema(),
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Set the layout style for this page.
|
|
41
|
-
* Can be `'doc'` (the default) or `'splash'` for a wider layout without any sidebars.
|
|
42
|
-
*/
|
|
43
|
-
template: z.enum(['doc', 'splash']).default('doc'),
|
|
44
|
-
|
|
45
|
-
/** Display a hero section on this page. */
|
|
46
|
-
hero: HeroSchema(context).optional(),
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* The last update date of the current page.
|
|
50
|
-
* Overrides the `lastUpdated` global config or the date generated from the Git history.
|
|
51
|
-
*/
|
|
52
|
-
lastUpdated: z.union([z.date(), z.boolean()]).optional(),
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* The previous navigation link configuration.
|
|
56
|
-
* Overrides the `pagination` global config or the link text and/or URL.
|
|
57
|
-
*/
|
|
58
|
-
prev: PrevNextLinkConfigSchema(),
|
|
59
|
-
/**
|
|
60
|
-
* The next navigation link configuration.
|
|
61
|
-
* Overrides the `pagination` global config or the link text and/or URL.
|
|
62
|
-
*/
|
|
63
|
-
next: PrevNextLinkConfigSchema(),
|
|
64
|
-
|
|
65
|
-
sidebar: z
|
|
66
|
-
.object({
|
|
67
|
-
/**
|
|
68
|
-
* The order of this page in the navigation.
|
|
69
|
-
* Pages are sorted by this value in ascending order. Then by slug.
|
|
70
|
-
* If not provided, pages will be sorted alphabetically by slug.
|
|
71
|
-
* If two pages have the same order value, they will be sorted alphabetically by slug.
|
|
72
|
-
*/
|
|
73
|
-
order: z.number().optional(),
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* The label for this page in the navigation.
|
|
77
|
-
* Defaults to the page `title` if not set.
|
|
78
|
-
*/
|
|
79
|
-
label: z.string().optional(),
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* Prevents this page from being included in autogenerated sidebar groups.
|
|
83
|
-
*/
|
|
84
|
-
hidden: z.boolean().default(false),
|
|
85
|
-
/**
|
|
86
|
-
* Adds a badge to the sidebar link.
|
|
87
|
-
* Can be a string or an object with a variant and text.
|
|
88
|
-
* Variants include 'note', 'tip', 'caution', 'danger', 'success', and 'default'.
|
|
89
|
-
* Passing only a string defaults to the 'default' variant which uses the site accent color.
|
|
90
|
-
*/
|
|
91
|
-
badge: BadgeConfigSchema(),
|
|
92
|
-
/** HTML attributes to add to the sidebar link. */
|
|
93
|
-
attrs: SidebarLinkItemHTMLAttributesSchema(),
|
|
94
|
-
})
|
|
95
|
-
.prefault({}),
|
|
96
|
-
|
|
97
|
-
/** Display an announcement banner at the top of this page. */
|
|
98
|
-
banner: z
|
|
99
|
-
.object({
|
|
100
|
-
/** The content of the banner. Supports HTML syntax. */
|
|
101
|
-
content: z.string(),
|
|
102
|
-
})
|
|
103
|
-
.optional(),
|
|
104
|
-
|
|
105
|
-
/** Pagefind indexing for this page - set to false to disable. */
|
|
106
|
-
pagefind: z.boolean().default(true),
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* Indicates that this page is a draft and will not be included in production builds.
|
|
110
|
-
* Note that the page will still be available when running Astro in development mode.
|
|
111
|
-
*/
|
|
112
|
-
draft: z.boolean().default(false),
|
|
113
|
-
});
|
|
114
|
-
/** Type of Starlight’s default frontmatter schema. */
|
|
115
|
-
type DefaultSchema = ReturnType<typeof StarlightFrontmatterSchema>;
|
|
116
|
-
|
|
117
|
-
/** Base subset of Zod types that we support passing to the `extend` option. */
|
|
118
|
-
type BaseObjectSchema = z.ZodObject<z.ZodRawShape, z.core.$ZodObjectConfig>;
|
|
119
|
-
type BaseSchema = BaseObjectSchema | z.ZodUnion<readonly BaseObjectSchema[]>;
|
|
120
|
-
|
|
121
|
-
/** Type that extends Starlight’s default schema with an optional, user-defined schema. */
|
|
122
|
-
type ExtendedSchema<T extends BaseSchema = never> = [T] extends [never]
|
|
123
|
-
? DefaultSchema
|
|
124
|
-
: DeepMergedSchema<DefaultSchema, T>;
|
|
125
|
-
|
|
126
|
-
interface DocsSchemaOpts<T extends BaseSchema> {
|
|
127
|
-
/**
|
|
128
|
-
* Extend Starlight’s schema with additional fields.
|
|
129
|
-
*
|
|
130
|
-
* @example
|
|
131
|
-
* // Extend the built-in schema with a Zod schema.
|
|
132
|
-
* docsSchema({
|
|
133
|
-
* extend: z.object({
|
|
134
|
-
* // Add a new field to the schema.
|
|
135
|
-
* category: z.enum(['tutorial', 'guide', 'reference']).optional(),
|
|
136
|
-
* }),
|
|
137
|
-
* })
|
|
138
|
-
*
|
|
139
|
-
* // Use the Astro image helper.
|
|
140
|
-
* docsSchema({
|
|
141
|
-
* extend: ({ image }) => {
|
|
142
|
-
* return z.object({
|
|
143
|
-
* cover: image(),
|
|
144
|
-
* });
|
|
145
|
-
* },
|
|
146
|
-
* })
|
|
147
|
-
*/
|
|
148
|
-
extend?: T | ((context: SchemaContext) => T);
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
/** Content collection schema for Starlight’s `docs` collection. */
|
|
152
|
-
export function docsSchema<T extends BaseSchema = never>(
|
|
153
|
-
...args: [DocsSchemaOpts<T>?]
|
|
154
|
-
): (context: SchemaContext) => ExtendedSchema<T> {
|
|
155
|
-
const [options = {}] = args;
|
|
156
|
-
const { extend } = options;
|
|
157
|
-
|
|
158
|
-
return (context: SchemaContext) => {
|
|
159
|
-
const UserSchema = typeof extend === 'function' ? extend(context) : extend;
|
|
160
|
-
|
|
161
|
-
return (
|
|
162
|
-
UserSchema
|
|
163
|
-
? deepMergeSchemas(StarlightFrontmatterSchema(context), UserSchema)
|
|
164
|
-
: StarlightFrontmatterSchema(context)
|
|
165
|
-
) as ExtendedSchema<T>;
|
|
166
|
-
};
|
|
167
|
-
}
|
package/schemas/badge.ts
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { z } from 'astro/zod';
|
|
2
|
-
|
|
3
|
-
const badgeBaseSchema = z.object({
|
|
4
|
-
variant: z.enum(['note', 'danger', 'success', 'caution', 'tip', 'default']).default('default'),
|
|
5
|
-
class: z.string().optional(),
|
|
6
|
-
});
|
|
7
|
-
|
|
8
|
-
const badgeSchema = z.object({
|
|
9
|
-
...badgeBaseSchema.shape,
|
|
10
|
-
text: z.string(),
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
const i18nBadgeSchema = z.object({
|
|
14
|
-
...badgeBaseSchema.shape,
|
|
15
|
-
text: z.union([z.string(), z.record(z.string(), z.string())]),
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
export const BadgeComponentSchema = z.looseObject({
|
|
19
|
-
...badgeSchema.shape,
|
|
20
|
-
size: z.enum(['small', 'medium', 'large']).default('small'),
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
export type BadgeComponentProps = z.input<typeof BadgeComponentSchema>;
|
|
24
|
-
|
|
25
|
-
export const BadgeConfigSchema = () =>
|
|
26
|
-
z
|
|
27
|
-
.union([z.string(), badgeSchema])
|
|
28
|
-
.transform((badge) => {
|
|
29
|
-
if (typeof badge === 'string') {
|
|
30
|
-
return { variant: 'default' as const, text: badge };
|
|
31
|
-
}
|
|
32
|
-
return badge;
|
|
33
|
-
})
|
|
34
|
-
.optional();
|
|
35
|
-
|
|
36
|
-
export const I18nBadgeConfigSchema = () => z.union([z.string(), i18nBadgeSchema]).optional();
|
|
37
|
-
|
|
38
|
-
export type Badge = z.output<typeof badgeSchema>;
|
|
39
|
-
export type I18nBadge = z.output<typeof i18nBadgeSchema>;
|
|
40
|
-
export type I18nBadgeConfig = z.output<ReturnType<typeof I18nBadgeConfigSchema>>;
|