starlight-versions 0.8.1 → 0.9.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/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # starlight-versions
2
2
 
3
+ ## 0.9.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#68](https://github.com/HiDeoo/starlight-versions/pull/68) [`e313164`](https://github.com/HiDeoo/starlight-versions/commit/e31316400efde94bf27ac1b577e8867beecb27df) Thanks [@HiDeoo](https://github.com/HiDeoo)! - ⚠️ **BREAKING CHANGE:** The minimum supported version of Starlight is now `0.39.0`.
8
+
9
+ Please use the `@astrojs/upgrade` command to upgrade your project:
10
+
11
+ ```sh
12
+ npx @astrojs/upgrade
13
+ ```
14
+
15
+ ## 0.8.2
16
+
17
+ ### Patch Changes
18
+
19
+ - [#64](https://github.com/HiDeoo/starlight-versions/pull/64) [`5e26275`](https://github.com/HiDeoo/starlight-versions/commit/5e262755d6b8f61ba4c17f59f32ff0fa0ff87938) Thanks [@Hexalyse](https://github.com/Hexalyse)! - Fixes a Windows-only issue where archived docs could generate incorrect routes.
20
+
3
21
  ## 0.8.1
4
22
 
5
23
  ### Patch Changes
package/libs/starlight.ts CHANGED
@@ -18,7 +18,7 @@ export function getFrontmatterNodeValue(frontmatter: StarlightFrontmatter) {
18
18
  }
19
19
 
20
20
  export function getDocSlug(docsDir: URL, doc: URL) {
21
- const docPath = path.relative(url.fileURLToPath(docsDir), url.fileURLToPath(doc))
21
+ const docPath = path.relative(url.fileURLToPath(docsDir), url.fileURLToPath(doc)).replaceAll('\\', '/')
22
22
  const slug = slugifyPath(docPath)
23
23
 
24
24
  return slug === 'index' ? '/' : slug.replace(/\/index$/, '')
@@ -36,10 +36,7 @@ export function getDocLocale(slug: string, starlightConfig: StarlightUserConfig)
36
36
  return locales.find((locale) => locale === localeSegment)
37
37
  }
38
38
 
39
- export function addPrefixToSidebarConfig(
40
- prefix: string,
41
- sidebar: NonNullable<StarlightSidebarUserConfig>,
42
- ): NonNullable<StarlightSidebarUserConfig> {
39
+ export function addPrefixToSidebarConfig(prefix: string, sidebar: SidebarConfigInputItem[]): SidebarConfig {
43
40
  return sidebar.map((item) => {
44
41
  if (typeof item === 'string') {
45
42
  return addPrefixToSlug(prefix, item)
@@ -48,13 +45,12 @@ export function addPrefixToSidebarConfig(
48
45
  ...item,
49
46
  items: addPrefixToSidebarConfig(prefix, item.items),
50
47
  }
48
+ } else if (isSidebarLegacyAutoGroup(item)) {
49
+ return addPrefixToLegacyAutogeneratedGroup(prefix, item)
51
50
  } else if ('autogenerate' in item) {
52
51
  return {
53
52
  ...item,
54
- autogenerate: {
55
- ...item.autogenerate,
56
- directory: path.posix.join(prefix, item.autogenerate.directory),
57
- },
53
+ autogenerate: addPrefixToAutogenerate(prefix, item.autogenerate),
58
54
  }
59
55
  } else if ('slug' in item) {
60
56
  return {
@@ -75,6 +71,31 @@ export function addPrefixToSidebarConfig(
75
71
  })
76
72
  }
77
73
 
74
+ function isSidebarLegacyAutoGroup(item: SidebarConfigInputItem): item is SidebarLegacyAutoGroup {
75
+ return typeof item === 'object' && 'autogenerate' in item && 'label' in item
76
+ }
77
+
78
+ function addPrefixToLegacyAutogeneratedGroup(prefix: string, item: SidebarLegacyAutoGroup): SidebarConfigItem {
79
+ const { autogenerate: legacyAutogenerate, ...group } = item
80
+ const autogenerate = addPrefixToAutogenerate(prefix, legacyAutogenerate)
81
+
82
+ if (group.collapsed !== undefined && autogenerate.collapsed === undefined) {
83
+ autogenerate.collapsed = group.collapsed
84
+ }
85
+
86
+ return {
87
+ ...group,
88
+ items: [{ autogenerate }],
89
+ }
90
+ }
91
+
92
+ function addPrefixToAutogenerate<T extends { directory: string }>(prefix: string, autogenerate: T): T {
93
+ return {
94
+ ...autogenerate,
95
+ directory: path.posix.join(prefix, autogenerate.directory),
96
+ }
97
+ }
98
+
78
99
  function addPrefixToSlug(prefix: string, slug: string) {
79
100
  if (slug === '' || slug === 'index') return prefix
80
101
  return `${prefix}/${slug}`
@@ -97,4 +118,11 @@ interface StarlightFrontmatteHero {
97
118
  export type StarlightUserConfig = HookParameters<'config:setup'>['config']
98
119
  export type StarlightSidebarUserConfig = StarlightUserConfig['sidebar']
99
120
 
121
+ type SidebarConfig = NonNullable<StarlightSidebarUserConfig>
122
+ type SidebarConfigItem = SidebarConfig[number]
123
+ type SidebarAutogenerateConfig = Extract<SidebarConfigItem, { autogenerate: { directory: string } }>['autogenerate']
124
+ type SidebarGroupConfig = Extract<SidebarConfigItem, { items: SidebarConfig }>
125
+ type SidebarLegacyAutoGroup = Omit<SidebarGroupConfig, 'items'> & { autogenerate: SidebarAutogenerateConfig }
126
+ type SidebarConfigInputItem = SidebarConfigItem | SidebarLegacyAutoGroup
127
+
100
128
  export type StarlightSidebar = StarlightRouteData['sidebar']
package/libs/versions.ts CHANGED
@@ -303,7 +303,7 @@ async function getSidebarVersionGroup(version: Version, srcDir: URL) {
303
303
  if (!versionConfig.sidebar) {
304
304
  return {
305
305
  label: version.slug,
306
- autogenerate: { directory: version.slug },
306
+ items: [{ autogenerate: { directory: version.slug } }],
307
307
  }
308
308
  }
309
309
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "starlight-versions",
3
- "version": "0.8.1",
3
+ "version": "0.9.0",
4
4
  "license": "MIT",
5
5
  "description": "Starlight plugin to version documentation pages.",
6
6
  "author": "HiDeoo <github@hideoo.dev> (https://hideoo.dev)",
@@ -38,7 +38,7 @@
38
38
  "vitest": "^4.0.18"
39
39
  },
40
40
  "peerDependencies": {
41
- "@astrojs/starlight": ">=0.38.0"
41
+ "@astrojs/starlight": ">=0.39.0"
42
42
  },
43
43
  "engines": {
44
44
  "node": ">=22.12.0"