svedocs 0.1.0-beta.3 → 0.1.0-beta.5

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.
Files changed (175) hide show
  1. package/README.md +38 -0
  2. package/dist/ai/providers.d.ts.map +1 -1
  3. package/dist/ai/providers.js +37 -39
  4. package/dist/ai/runtime.d.ts +2 -0
  5. package/dist/ai/runtime.d.ts.map +1 -1
  6. package/dist/ai/runtime.js +8 -3
  7. package/dist/cloudflare.d.ts +2 -0
  8. package/dist/cloudflare.d.ts.map +1 -1
  9. package/dist/cloudflare.js +3 -0
  10. package/dist/config.d.ts +47 -0
  11. package/dist/config.d.ts.map +1 -1
  12. package/dist/config.js +51 -7
  13. package/dist/core/checks.js +2 -2
  14. package/dist/core/config.d.ts +1 -0
  15. package/dist/core/config.d.ts.map +1 -1
  16. package/dist/core/config.js +13 -32
  17. package/dist/core/content.d.ts.map +1 -1
  18. package/dist/core/content.js +135 -11
  19. package/dist/core/i18n.d.ts +5 -0
  20. package/dist/core/i18n.d.ts.map +1 -0
  21. package/dist/core/i18n.js +117 -0
  22. package/dist/core/links.d.ts +1 -4
  23. package/dist/core/links.d.ts.map +1 -1
  24. package/dist/core/links.js +9 -43
  25. package/dist/core/messages.d.ts +149 -0
  26. package/dist/core/messages.d.ts.map +1 -0
  27. package/dist/core/messages.js +163 -0
  28. package/dist/core/routes.d.ts +36 -0
  29. package/dist/core/routes.d.ts.map +1 -0
  30. package/dist/core/routes.js +152 -0
  31. package/dist/core/types.d.ts +192 -0
  32. package/dist/core/types.d.ts.map +1 -1
  33. package/dist/core/utils.d.ts +1 -0
  34. package/dist/core/utils.d.ts.map +1 -1
  35. package/dist/core/utils.js +8 -0
  36. package/dist/core.d.ts +1 -0
  37. package/dist/core.d.ts.map +1 -1
  38. package/dist/core.js +1 -0
  39. package/dist/index.d.ts +1 -1
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/mdx/code.d.ts +3 -1
  42. package/dist/mdx/code.d.ts.map +1 -1
  43. package/dist/mdx/code.js +10 -6
  44. package/dist/mdx/compile.d.ts +3 -1
  45. package/dist/mdx/compile.d.ts.map +1 -1
  46. package/dist/mdx/compile.js +9 -14
  47. package/dist/mdx/diff.d.ts +2 -0
  48. package/dist/mdx/diff.d.ts.map +1 -1
  49. package/dist/mdx/diff.js +17 -9
  50. package/dist/mdx/headings.d.ts +4 -0
  51. package/dist/mdx/headings.d.ts.map +1 -0
  52. package/dist/mdx/headings.js +42 -0
  53. package/dist/mdx/links.d.ts +4 -0
  54. package/dist/mdx/links.d.ts.map +1 -0
  55. package/dist/mdx/links.js +144 -0
  56. package/dist/og/image.d.ts +4 -0
  57. package/dist/og/image.d.ts.map +1 -1
  58. package/dist/og/image.js +8 -0
  59. package/dist/og/metadata.d.ts +5 -1
  60. package/dist/og/metadata.d.ts.map +1 -1
  61. package/dist/og/metadata.js +77 -7
  62. package/dist/og/types.d.ts +6 -0
  63. package/dist/og/types.d.ts.map +1 -1
  64. package/dist/routes.d.ts +2 -0
  65. package/dist/routes.d.ts.map +1 -0
  66. package/dist/routes.js +1 -0
  67. package/dist/search/cloudflare.d.ts +2 -1
  68. package/dist/search/cloudflare.d.ts.map +1 -1
  69. package/dist/search/cloudflare.js +10 -1
  70. package/dist/search/local.d.ts.map +1 -1
  71. package/dist/search/local.js +64 -21
  72. package/dist/search/runtime.js +1 -1
  73. package/dist/search/utils.d.ts +1 -0
  74. package/dist/search/utils.d.ts.map +1 -1
  75. package/dist/search/utils.js +38 -0
  76. package/dist/svelte.d.ts +2 -0
  77. package/dist/svelte.d.ts.map +1 -1
  78. package/dist/svelte.js +4 -15
  79. package/dist/theme/Article.svelte +62 -22
  80. package/dist/theme/Article.svelte.d.ts +2 -1
  81. package/dist/theme/Article.svelte.d.ts.map +1 -1
  82. package/dist/theme/AskAiPanel.svelte +18 -12
  83. package/dist/theme/AskAiPanel.svelte.d.ts +2 -1
  84. package/dist/theme/AskAiPanel.svelte.d.ts.map +1 -1
  85. package/dist/theme/Brand.svelte +19 -0
  86. package/dist/theme/Brand.svelte.d.ts +22 -0
  87. package/dist/theme/Brand.svelte.d.ts.map +1 -0
  88. package/dist/theme/DocsApp.svelte +130 -45
  89. package/dist/theme/DocsApp.svelte.d.ts +16 -18
  90. package/dist/theme/DocsApp.svelte.d.ts.map +1 -1
  91. package/dist/theme/DocsLayout.svelte +36 -21
  92. package/dist/theme/DocsLayout.svelte.d.ts.map +1 -1
  93. package/dist/theme/DocsShell.svelte +91 -0
  94. package/dist/theme/DocsShell.svelte.d.ts +34 -0
  95. package/dist/theme/DocsShell.svelte.d.ts.map +1 -0
  96. package/dist/theme/ErrorPage.svelte +104 -0
  97. package/dist/theme/ErrorPage.svelte.d.ts +34 -0
  98. package/dist/theme/ErrorPage.svelte.d.ts.map +1 -0
  99. package/dist/theme/Footer.svelte +6 -28
  100. package/dist/theme/Footer.svelte.d.ts +2 -0
  101. package/dist/theme/Footer.svelte.d.ts.map +1 -1
  102. package/dist/theme/FooterLinks.svelte +37 -0
  103. package/dist/theme/FooterLinks.svelte.d.ts +22 -0
  104. package/dist/theme/FooterLinks.svelte.d.ts.map +1 -0
  105. package/dist/theme/HomePage.svelte +83 -41
  106. package/dist/theme/HomePage.svelte.d.ts +6 -1
  107. package/dist/theme/HomePage.svelte.d.ts.map +1 -1
  108. package/dist/theme/LayoutShell.svelte +119 -0
  109. package/dist/theme/LayoutShell.svelte.d.ts +43 -0
  110. package/dist/theme/LayoutShell.svelte.d.ts.map +1 -0
  111. package/dist/theme/LocalizedLink.svelte +21 -0
  112. package/dist/theme/LocalizedLink.svelte.d.ts +38 -0
  113. package/dist/theme/LocalizedLink.svelte.d.ts.map +1 -0
  114. package/dist/theme/MobileNav.svelte +5 -2
  115. package/dist/theme/MobileNav.svelte.d.ts +2 -1
  116. package/dist/theme/MobileNav.svelte.d.ts.map +1 -1
  117. package/dist/theme/Navbar.svelte +14 -37
  118. package/dist/theme/Navbar.svelte.d.ts.map +1 -1
  119. package/dist/theme/PageLayout.svelte +31 -30
  120. package/dist/theme/PageLayout.svelte.d.ts +2 -1
  121. package/dist/theme/PageLayout.svelte.d.ts.map +1 -1
  122. package/dist/theme/PageShell.svelte +98 -0
  123. package/dist/theme/PageShell.svelte.d.ts +35 -0
  124. package/dist/theme/PageShell.svelte.d.ts.map +1 -0
  125. package/dist/theme/PageTools.svelte +11 -8
  126. package/dist/theme/PageTools.svelte.d.ts +2 -1
  127. package/dist/theme/PageTools.svelte.d.ts.map +1 -1
  128. package/dist/theme/RenderError.svelte +62 -0
  129. package/dist/theme/RenderError.svelte.d.ts +31 -0
  130. package/dist/theme/RenderError.svelte.d.ts.map +1 -0
  131. package/dist/theme/RootLayout.svelte +167 -45
  132. package/dist/theme/RootLayout.svelte.d.ts +4 -0
  133. package/dist/theme/RootLayout.svelte.d.ts.map +1 -1
  134. package/dist/theme/RouteRenderError.svelte +53 -0
  135. package/dist/theme/RouteRenderError.svelte.d.ts +34 -0
  136. package/dist/theme/RouteRenderError.svelte.d.ts.map +1 -0
  137. package/dist/theme/SafeRenderError.svelte +49 -0
  138. package/dist/theme/SafeRenderError.svelte.d.ts +33 -0
  139. package/dist/theme/SafeRenderError.svelte.d.ts.map +1 -0
  140. package/dist/theme/ScopeSwitcher.svelte +9 -5
  141. package/dist/theme/ScopeSwitcher.svelte.d.ts +2 -0
  142. package/dist/theme/ScopeSwitcher.svelte.d.ts.map +1 -1
  143. package/dist/theme/SearchDialog.svelte +16 -14
  144. package/dist/theme/SearchDialog.svelte.d.ts +2 -1
  145. package/dist/theme/SearchDialog.svelte.d.ts.map +1 -1
  146. package/dist/theme/SidebarTree.svelte +19 -7
  147. package/dist/theme/SidebarTree.svelte.d.ts.map +1 -1
  148. package/dist/theme/SocialNav.svelte +17 -0
  149. package/dist/theme/SocialNav.svelte.d.ts +22 -0
  150. package/dist/theme/SocialNav.svelte.d.ts.map +1 -0
  151. package/dist/theme/TableOfContents.svelte +6 -4
  152. package/dist/theme/TableOfContents.svelte.d.ts +2 -1
  153. package/dist/theme/TableOfContents.svelte.d.ts.map +1 -1
  154. package/dist/theme/ThemeToggle.svelte +8 -2
  155. package/dist/theme/ThemeToggle.svelte.d.ts +2 -0
  156. package/dist/theme/ThemeToggle.svelte.d.ts.map +1 -1
  157. package/dist/theme/TopNav.svelte +23 -0
  158. package/dist/theme/TopNav.svelte.d.ts +22 -0
  159. package/dist/theme/TopNav.svelte.d.ts.map +1 -0
  160. package/dist/theme/base.css +142 -2
  161. package/dist/theme/defaults.d.ts.map +1 -1
  162. package/dist/theme/defaults.js +26 -1
  163. package/dist/theme/headless.d.ts +21 -2
  164. package/dist/theme/headless.d.ts.map +1 -1
  165. package/dist/theme/headless.js +221 -58
  166. package/dist/theme/index.d.ts +10 -0
  167. package/dist/theme/index.d.ts.map +1 -1
  168. package/dist/theme/index.js +10 -0
  169. package/dist/theme/styles.css +526 -2
  170. package/dist/theme/types.d.ts +154 -1
  171. package/dist/theme/types.d.ts.map +1 -1
  172. package/dist/vite.d.ts +4 -1
  173. package/dist/vite.d.ts.map +1 -1
  174. package/dist/vite.js +81 -7
  175. package/package.json +5 -2
package/README.md CHANGED
@@ -18,6 +18,44 @@ Integrated SvelteKit documentation framework package.
18
18
 
19
19
  All rendering, theme, search, AI, SEO, OG, and Cloudflare capabilities are intentionally kept inside this package.
20
20
 
21
+ ## Theme Development
22
+
23
+ The default theme is optional and replaceable. Import the full bundled CSS when you want the standard look:
24
+
25
+ ```svelte
26
+ <script lang="ts">
27
+ import 'svedocs/theme/styles.css';
28
+ </script>
29
+ ```
30
+
31
+ Custom themes can import only `svedocs/theme/base.css` for reset, accessibility, prose, and code structure, or skip theme CSS entirely and own every style.
32
+
33
+ Register replacement components in the Vite plugin, not `svedocs.config.ts`, because Svelte component paths are build-time imports:
34
+
35
+ ```ts
36
+ import { svedocs } from 'svedocs/vite';
37
+ import svedocsConfig from './svedocs.config';
38
+
39
+ svedocs({
40
+ config: svedocsConfig,
41
+ theme: {
42
+ components: {
43
+ Navbar: '$lib/theme/Navbar.svelte',
44
+ Article: '$lib/theme/Article.svelte',
45
+ Search: '$lib/theme/Search.svelte',
46
+ AskAi: '$lib/theme/AskAi.svelte',
47
+ Error: '$lib/theme/Error.svelte'
48
+ }
49
+ }
50
+ });
51
+ ```
52
+
53
+ Generated routes import `virtual:svedocs/theme-components` and pass the map to `DocsApp`. You can replace broad page layouts such as `Root`, `Layout`, `Docs`, `Page`, `Home`, and `Error`, or smaller pieces such as `Navbar`, `Sidebar`, `Article`, `Toc`, `Search`, `AskAi`, `Footer`, `ThemeToggle`, `PageTools`, and `RenderError`.
54
+
55
+ Use `svedocs/theme/types` for stable props and `svedocs/theme/headless` for unstyled behavior controllers such as search, Ask AI, ToC tracking, theme mode, mobile nav, page tools, and code-copy behavior. Replacement page layouts should keep passing `pages`, `tree`, `search`, `config`, `loadSearch`, and `themeComponents` into nested default components so navigation highlighting, mobile menus, and runtime panels stay connected.
56
+
57
+ Generated templates include `src/routes/+error.svelte`. Register `theme.components.Error` to customize full-route error pages and `theme.components.RenderError` to customize local render-boundary failures inside layouts, articles, and tools.
58
+
21
59
  ## MDX/SVX Components
22
60
 
23
61
  The Vite plugin loads `svedocs.config.ts` by default. You can also pass a config object explicitly and register shared authoring components or layouts:
@@ -1 +1 @@
1
- {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/ai/providers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAItD,OAAO,KAAK,EACV,UAAU,EACV,eAAe,EACf,WAAW,EAGX,0BAA0B,EAC3B,MAAM,YAAY,CAAC;AAEpB,wBAAgB,oBAAoB,IAAI,UAAU,CAajD;AAED,wBAAgB,kCAAkC,CAAC,KAAK,EAAE;IACxD,OAAO,EAAE,eAAe,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,UAAU,CAsFb;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC7C,EAAE,EAAE,0BAA0B,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,GAAG,UAAU,CA2Bb;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,mBAAmB,EAAE,EAC9B,QAAQ,EAAE,MAAM,EAChB,KAAK,SAAI,GACR,WAAW,EAAE,CAMf;AAED,eAAO,MAAM,cAAc,YAAyB,CAAC"}
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/ai/providers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAItD,OAAO,KAAK,EACV,UAAU,EACV,eAAe,EACf,WAAW,EAGX,0BAA0B,EAC3B,MAAM,YAAY,CAAC;AAEpB,wBAAgB,oBAAoB,IAAI,UAAU,CAajD;AAED,wBAAgB,kCAAkC,CAAC,KAAK,EAAE;IACxD,OAAO,EAAE,eAAe,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,UAAU,CAuDb;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC7C,EAAE,EAAE,0BAA0B,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,GAAG,UAAU,CA2Bb;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,mBAAmB,EAAE,EAC9B,QAAQ,EAAE,MAAM,EAChB,KAAK,SAAI,GACR,WAAW,EAAE,CAMf;AAED,eAAO,MAAM,cAAc,YAAyB,CAAC"}
@@ -1,5 +1,5 @@
1
- import { normalizeCloudflareAiSearchResults } from '../search/cloudflare.js';
2
- import { searchRecords } from '../search.js';
1
+ import { createCloudflareAiSearchScopeFilters, normalizeCloudflareAiSearchResults } from '../search/cloudflare.js';
2
+ import { matchesSearchScope, searchRecords } from '../search.js';
3
3
  export function createMockAiProvider() {
4
4
  return {
5
5
  name: 'mock',
@@ -24,44 +24,24 @@ export function createCloudflareAiSearchAiProvider(input) {
24
24
  const result = await instance.search({
25
25
  messages: conversation,
26
26
  ai_search_options: {
27
- retrieval: {
28
- retrieval_type: 'hybrid',
29
- max_num_results: maxResults
30
- }
27
+ retrieval: createCloudflareAiSearchRetrieval(maxResults, question.scope)
31
28
  }
32
29
  });
33
30
  return {
34
31
  answer: result.response ?? result.answer ?? 'No answer was returned.',
35
- citations: normalizeCloudflareAiSearchResults(result, question.question)
36
- .slice(0, maxResults)
37
- .map((result) => ({
38
- title: result.title,
39
- url: result.url,
40
- ...(result.section ? { section: result.section } : {})
41
- }))
32
+ citations: createCloudflareAiSearchCitations(result, question, maxResults)
42
33
  };
43
34
  }
44
35
  const result = await instance.chatCompletions({
45
36
  messages: conversation,
46
37
  ...(input.model ? { model: input.model } : {}),
47
38
  ai_search_options: {
48
- retrieval: {
49
- retrieval_type: 'hybrid',
50
- max_num_results: maxResults
51
- }
39
+ retrieval: createCloudflareAiSearchRetrieval(maxResults, question.scope)
52
40
  }
53
41
  });
54
42
  return {
55
43
  answer: readAiSearchAnswer(result),
56
- citations: normalizeCitations(result.citations).length > 0
57
- ? normalizeCitations(result.citations)
58
- : normalizeCloudflareAiSearchResults(result, question.question)
59
- .slice(0, maxResults)
60
- .map((result) => ({
61
- title: result.title,
62
- url: result.url,
63
- ...(result.section ? { section: result.section } : {})
64
- }))
44
+ citations: readCloudflareAiSearchCitations(result, question, maxResults)
65
45
  };
66
46
  }
67
47
  return {
@@ -77,25 +57,14 @@ export function createCloudflareAiSearchAiProvider(input) {
77
57
  ...(input.model ? { model: input.model } : {}),
78
58
  stream: true,
79
59
  ai_search_options: {
80
- retrieval: {
81
- retrieval_type: 'hybrid',
82
- max_num_results: maxResults
83
- }
60
+ retrieval: createCloudflareAiSearchRetrieval(maxResults, question.scope)
84
61
  }
85
62
  });
86
63
  if (result instanceof Response || result instanceof ReadableStream)
87
64
  return result;
88
65
  return createSvedocsAnswerStream({
89
66
  answer: readAiSearchAnswer(result),
90
- citations: normalizeCitations(result.citations).length > 0
91
- ? normalizeCitations(result.citations)
92
- : normalizeCloudflareAiSearchResults(result, question.question)
93
- .slice(0, maxResults)
94
- .map((result) => ({
95
- title: result.title,
96
- url: result.url,
97
- ...(result.section ? { section: result.section } : {})
98
- }))
67
+ citations: readCloudflareAiSearchCitations(result, question, maxResults)
99
68
  });
100
69
  }
101
70
  };
@@ -157,6 +126,35 @@ function normalizeCitations(citations) {
157
126
  ...(citation.section ? { section: citation.section } : {})
158
127
  }));
159
128
  }
129
+ function createCloudflareAiSearchRetrieval(maxResults, scope) {
130
+ const filters = createCloudflareAiSearchScopeFilters(scope);
131
+ return {
132
+ retrieval_type: 'hybrid',
133
+ max_num_results: maxResults,
134
+ ...(filters ? { filters } : {})
135
+ };
136
+ }
137
+ function readCloudflareAiSearchCitations(result, input, maxResults) {
138
+ const scopedCitations = createCloudflareAiSearchCitations(result, input, maxResults);
139
+ const citations = normalizeCitations(result.citations);
140
+ if (hasSearchScope(input.scope)) {
141
+ return scopedCitations.length > 0 ? scopedCitations : citations.slice(0, maxResults);
142
+ }
143
+ return citations.length > 0 ? citations.slice(0, maxResults) : scopedCitations;
144
+ }
145
+ function createCloudflareAiSearchCitations(result, input, maxResults) {
146
+ return normalizeCloudflareAiSearchResults(result, input.question)
147
+ .filter((searchResult) => matchesSearchScope({ metadata: searchResult.metadata }, input.scope))
148
+ .slice(0, maxResults)
149
+ .map((searchResult) => ({
150
+ title: searchResult.title,
151
+ url: searchResult.url,
152
+ ...(searchResult.section ? { section: searchResult.section } : {})
153
+ }));
154
+ }
155
+ function hasSearchScope(scope) {
156
+ return Boolean(scope?.locale || scope?.kind);
157
+ }
160
158
  function readAiSearchAnswer(result) {
161
159
  return (result.response ??
162
160
  result.answer ??
@@ -18,6 +18,8 @@ export interface CreateConfiguredAiProviderOptions {
18
18
  config: Pick<SvedocsResolvedConfig, 'ai' | 'cloudflare'>;
19
19
  env?: SvedocsAiRuntimeEnv;
20
20
  provider?: string;
21
+ systemPrompt?: string;
22
+ maxResults?: number;
21
23
  fetch?: typeof fetch;
22
24
  }
23
25
  export interface CreateConfiguredAskResponseOptions extends Omit<CreateAskResponseOptions, 'records'> {
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/ai/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,KAAK,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAG5F,OAAO,KAAK,EAAE,UAAU,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAGnG,MAAM,WAAW,mBAAmB;IAClC,iBAAiB,CAAC,EAAE,0BAA0B,GAAG,2BAA2B,GAAG,SAAS,CAAC;IACzF,EAAE,CAAC,EAAE,0BAA0B,GAAG,SAAS,CAAC;IAC5C,yBAAyB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/C,0BAA0B,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChD,uBAAuB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7C,6BAA6B,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnD,iCAAiC,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvD,kCAAkC,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxD,+BAA+B,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrD,qCAAqC,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3D,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,iCAAiC;IAChD,MAAM,EAAE,IAAI,CAAC,qBAAqB,EAAE,IAAI,GAAG,YAAY,CAAC,CAAC;IACzD,GAAG,CAAC,EAAE,mBAAmB,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAED,MAAM,WAAW,kCAAmC,SAAQ,IAAI,CAAC,wBAAwB,EAAE,SAAS,CAAC;IACnG,GAAG,CAAC,EAAE,mBAAmB,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,iCAAiC,GAAG,UAAU,CA4CjG;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,IAAI,CAAC,qBAAqB,EAAE,IAAI,GAAG,YAAY,CAAC,EACxD,OAAO,EAAE,mBAAmB,EAAE,EAC9B,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,kCAAuC,GAC/C,OAAO,CAAC,QAAQ,CAAC,CAcnB"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/ai/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,KAAK,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAG5F,OAAO,KAAK,EAAE,UAAU,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAGnG,MAAM,WAAW,mBAAmB;IAClC,iBAAiB,CAAC,EAAE,0BAA0B,GAAG,2BAA2B,GAAG,SAAS,CAAC;IACzF,EAAE,CAAC,EAAE,0BAA0B,GAAG,SAAS,CAAC;IAC5C,yBAAyB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/C,0BAA0B,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChD,uBAAuB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7C,6BAA6B,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnD,iCAAiC,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvD,kCAAkC,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxD,+BAA+B,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrD,qCAAqC,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3D,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,iCAAiC;IAChD,MAAM,EAAE,IAAI,CAAC,qBAAqB,EAAE,IAAI,GAAG,YAAY,CAAC,CAAC;IACzD,GAAG,CAAC,EAAE,mBAAmB,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAED,MAAM,WAAW,kCAAmC,SAAQ,IAAI,CAAC,wBAAwB,EAAE,SAAS,CAAC;IACnG,GAAG,CAAC,EAAE,mBAAmB,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,iCAAiC,GAAG,UAAU,CA6CjG;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,IAAI,CAAC,qBAAqB,EAAE,IAAI,GAAG,YAAY,CAAC,EACxD,OAAO,EAAE,mBAAmB,EAAE,EAC9B,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,kCAAuC,GAC/C,OAAO,CAAC,QAAQ,CAAC,CAkBnB"}
@@ -5,8 +5,8 @@ export function createConfiguredAiProvider(options) {
5
5
  const provider = normalizeProviderName(options.provider ?? options.config.ai.provider);
6
6
  if (!options.config.ai.enabled)
7
7
  return createMockAiProvider();
8
- const systemPrompt = options.config.ai.systemPrompt;
9
- const maxResults = options.config.ai.maxResults;
8
+ const systemPrompt = options.systemPrompt ?? options.config.ai.systemPrompt;
9
+ const maxResults = options.maxResults ?? options.config.ai.maxResults;
10
10
  if (provider === 'cloudflare-workers-ai') {
11
11
  const ai = readWorkersAiBinding(options.env);
12
12
  if (ai)
@@ -41,6 +41,7 @@ export function createConfiguredAiProvider(options) {
41
41
  ...(baseUrl ? { baseUrl } : {}),
42
42
  ...(typeof temperature === 'number' ? { temperature } : {}),
43
43
  ...(systemPrompt ? { systemPrompt } : {}),
44
+ ...(typeof maxResults === 'number' ? { citationLimit: maxResults } : {}),
44
45
  ...(options.fetch ? { fetch: options.fetch } : {})
45
46
  });
46
47
  }
@@ -52,6 +53,8 @@ export function createConfiguredAskResponse(config, records, request, options =
52
53
  const provider = createConfiguredAiProvider({
53
54
  config,
54
55
  ...(options.provider ? { provider: options.provider } : {}),
56
+ ...(options.systemPrompt ? { systemPrompt: options.systemPrompt } : {}),
57
+ ...(typeof options.maxResults === 'number' ? { maxResults: options.maxResults } : {}),
55
58
  ...(options.env ? { env: options.env } : {}),
56
59
  ...(options.fetch ? { fetch: options.fetch } : {})
57
60
  });
@@ -60,7 +63,9 @@ export function createConfiguredAskResponse(config, records, request, options =
60
63
  ...(typeof options.stream === 'boolean' ? { stream: options.stream } : {}),
61
64
  ...(options.scope ? { scope: options.scope } : {}),
62
65
  ...(options.rateLimiter ? { rateLimiter: options.rateLimiter } : {}),
63
- ...(options.rateLimitKey ? { rateLimitKey: options.rateLimitKey } : {})
66
+ ...(options.rateLimitKey ? { rateLimitKey: options.rateLimitKey } : {}),
67
+ ...(options.systemPrompt ? { systemPrompt: options.systemPrompt } : {}),
68
+ ...(typeof options.maxResults === 'number' ? { maxResults: options.maxResults } : {})
64
69
  });
65
70
  }
66
71
  function readCloudflareAiSearchBinding(env, config) {
@@ -1,6 +1,7 @@
1
1
  import type { SvedocsResolvedConfig } from './core.js';
2
2
  export type SvedocsBuildMode = 'edge' | 'static' | 'spa';
3
3
  export type SvedocsPagePrerenderOption = true | false | 'auto';
4
+ export type SvedocsTrailingSlashOption = 'always' | 'never' | 'ignore';
4
5
  export interface CloudflareBindingShape {
5
6
  AI?: unknown;
6
7
  SVEDOCS_AI_SEARCH?: unknown;
@@ -18,6 +19,7 @@ export declare function createCloudflarePreset(mode?: SvedocsBuildMode): Cloudfl
18
19
  export declare function readSvedocsBuildMode(value?: string | undefined): SvedocsBuildMode;
19
20
  export declare function svedocsSsr(mode?: SvedocsBuildMode): boolean;
20
21
  export declare function svedocsPagePrerender(mode?: SvedocsBuildMode): SvedocsPagePrerenderOption;
22
+ export declare function svedocsTrailingSlash(mode?: SvedocsBuildMode): SvedocsTrailingSlashOption;
21
23
  export declare function createWranglerJson(config: SvedocsResolvedConfig): Record<string, unknown>;
22
24
  export declare function createWranglerJsonc(config: SvedocsResolvedConfig): string;
23
25
  export declare function createWranglerToml(config: SvedocsResolvedConfig): string;
@@ -1 +1 @@
1
- {"version":3,"file":"cloudflare.d.ts","sourceRoot":"","sources":["../src/cloudflare.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAEvD,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AACzD,MAAM,MAAM,0BAA0B,GAAG,IAAI,GAAG,KAAK,GAAG,MAAM,CAAC;AAE/D,MAAM,WAAW,sBAAsB;IACrC,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,gBAAgB,CAAC;IACvB,OAAO,EAAE,8BAA8B,GAAG,0BAA0B,CAAC;IACrE,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,sBAAsB,CAAC,IAAI,GAAE,gBAAyB,GAAG,qBAAqB,CAwB7F;AAED,wBAAgB,oBAAoB,CAAC,KAAK,qBAA4B,GAAG,gBAAgB,CAExF;AAED,wBAAgB,UAAU,CAAC,IAAI,mBAAyB,GAAG,OAAO,CAEjE;AAED,wBAAgB,oBAAoB,CAAC,IAAI,mBAAyB,GAAG,0BAA0B,CAG9F;AAMD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkCzF;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,CAEzE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,CAgCxE;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,CAe5E;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAG7E;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAE9E"}
1
+ {"version":3,"file":"cloudflare.d.ts","sourceRoot":"","sources":["../src/cloudflare.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAEvD,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AACzD,MAAM,MAAM,0BAA0B,GAAG,IAAI,GAAG,KAAK,GAAG,MAAM,CAAC;AAC/D,MAAM,MAAM,0BAA0B,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEvE,MAAM,WAAW,sBAAsB;IACrC,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,gBAAgB,CAAC;IACvB,OAAO,EAAE,8BAA8B,GAAG,0BAA0B,CAAC;IACrE,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,sBAAsB,CAAC,IAAI,GAAE,gBAAyB,GAAG,qBAAqB,CAwB7F;AAED,wBAAgB,oBAAoB,CAAC,KAAK,qBAA4B,GAAG,gBAAgB,CAExF;AAED,wBAAgB,UAAU,CAAC,IAAI,mBAAyB,GAAG,OAAO,CAEjE;AAED,wBAAgB,oBAAoB,CAAC,IAAI,mBAAyB,GAAG,0BAA0B,CAG9F;AAED,wBAAgB,oBAAoB,CAAC,IAAI,mBAAyB,GAAG,0BAA0B,CAE9F;AAMD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkCzF;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,CAEzE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,CAgCxE;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,CAe5E;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAG7E;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAE9E"}
@@ -34,6 +34,9 @@ export function svedocsPagePrerender(mode = readSvedocsBuildMode()) {
34
34
  return true;
35
35
  return 'auto';
36
36
  }
37
+ export function svedocsTrailingSlash(mode = readSvedocsBuildMode()) {
38
+ return mode === 'static' || mode === 'spa' ? 'always' : 'never';
39
+ }
37
40
  function readSvedocsBuildModeEnv() {
38
41
  return typeof process !== 'undefined' ? process.env.SVEDOCS_BUILD_MODE : undefined;
39
42
  }
package/dist/config.d.ts CHANGED
@@ -1,13 +1,16 @@
1
1
  import { z } from 'zod';
2
2
  import type { SvedocsResolvedConfig } from './core.js';
3
+ import type { SvedocsMessages, SvedocsSeoHead } from './core/types.js';
3
4
  import type { OgTemplate } from './og/types.js';
4
5
  export interface SvedocsNavItem {
5
6
  label: string;
7
+ labelKey?: string;
6
8
  href: string;
7
9
  external?: boolean;
8
10
  }
9
11
  export interface SvedocsThemeBrand {
10
12
  label?: string;
13
+ labelKey?: string;
11
14
  href?: string;
12
15
  logo?: string;
13
16
  mark?: 'pixel' | false;
@@ -35,15 +38,18 @@ export interface SvedocsShikiOptions {
35
38
  }
36
39
  export interface SvedocsThemeHomeAction {
37
40
  label: string;
41
+ labelKey?: string;
38
42
  href: string;
39
43
  }
40
44
  export interface SvedocsThemeHomeVisual {
41
45
  type?: 'pixel' | 'image';
42
46
  src?: string;
43
47
  alt?: string;
48
+ altKey?: string;
44
49
  }
45
50
  export interface SvedocsThemeHome {
46
51
  kicker?: string;
52
+ kickerKey?: string;
47
53
  primaryAction?: SvedocsThemeHomeAction;
48
54
  secondaryAction?: SvedocsThemeHomeAction;
49
55
  visual?: SvedocsThemeHomeVisual;
@@ -108,6 +114,7 @@ export interface SvedocsConfig {
108
114
  sitemap?: boolean;
109
115
  robots?: boolean;
110
116
  defaultAuthor?: string;
117
+ head?: SvedocsSeoHead;
111
118
  ogImage?: false | {
112
119
  template?: 'default' | string | OgTemplate;
113
120
  format?: 'svg' | 'png';
@@ -138,8 +145,11 @@ export interface SvedocsConfig {
138
145
  code: string;
139
146
  label?: string;
140
147
  path?: string;
148
+ hreflang?: string;
149
+ dir?: 'ltr' | 'rtl';
141
150
  }>;
142
151
  prefixDefaultLocale?: boolean;
152
+ messages?: Record<string, Partial<SvedocsMessages>>;
143
153
  };
144
154
  }
145
155
  export type { SvedocsResolvedConfig };
@@ -191,17 +201,20 @@ export declare const svedocsConfigSchema: z.ZodObject<{
191
201
  }, z.core.$strip>>;
192
202
  brand: z.ZodOptional<z.ZodObject<{
193
203
  label: z.ZodOptional<z.ZodString>;
204
+ labelKey: z.ZodOptional<z.ZodString>;
194
205
  href: z.ZodOptional<z.ZodString>;
195
206
  logo: z.ZodOptional<z.ZodString>;
196
207
  mark: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"pixel">, z.ZodLiteral<false>]>>;
197
208
  }, z.core.$strip>>;
198
209
  nav: z.ZodOptional<z.ZodArray<z.ZodObject<{
199
210
  label: z.ZodString;
211
+ labelKey: z.ZodOptional<z.ZodString>;
200
212
  href: z.ZodString;
201
213
  external: z.ZodOptional<z.ZodBoolean>;
202
214
  }, z.core.$strip>>>;
203
215
  social: z.ZodOptional<z.ZodArray<z.ZodObject<{
204
216
  label: z.ZodString;
217
+ labelKey: z.ZodOptional<z.ZodString>;
205
218
  href: z.ZodString;
206
219
  external: z.ZodOptional<z.ZodBoolean>;
207
220
  }, z.core.$strip>>>;
@@ -209,18 +222,22 @@ export declare const svedocsConfigSchema: z.ZodObject<{
209
222
  text: z.ZodOptional<z.ZodString>;
210
223
  links: z.ZodOptional<z.ZodArray<z.ZodObject<{
211
224
  label: z.ZodString;
225
+ labelKey: z.ZodOptional<z.ZodString>;
212
226
  href: z.ZodString;
213
227
  external: z.ZodOptional<z.ZodBoolean>;
214
228
  }, z.core.$strip>>>;
215
229
  }, z.core.$strip>]>>;
216
230
  home: z.ZodOptional<z.ZodObject<{
217
231
  kicker: z.ZodOptional<z.ZodString>;
232
+ kickerKey: z.ZodOptional<z.ZodString>;
218
233
  primaryAction: z.ZodOptional<z.ZodObject<{
219
234
  label: z.ZodString;
235
+ labelKey: z.ZodOptional<z.ZodString>;
220
236
  href: z.ZodString;
221
237
  }, z.core.$strip>>;
222
238
  secondaryAction: z.ZodOptional<z.ZodObject<{
223
239
  label: z.ZodString;
240
+ labelKey: z.ZodOptional<z.ZodString>;
224
241
  href: z.ZodString;
225
242
  }, z.core.$strip>>;
226
243
  visual: z.ZodOptional<z.ZodObject<{
@@ -230,6 +247,7 @@ export declare const svedocsConfigSchema: z.ZodObject<{
230
247
  }>>;
231
248
  src: z.ZodOptional<z.ZodString>;
232
249
  alt: z.ZodOptional<z.ZodString>;
250
+ altKey: z.ZodOptional<z.ZodString>;
233
251
  }, z.core.$strip>>;
234
252
  }, z.core.$strip>>;
235
253
  }, z.core.$strip>>;
@@ -266,6 +284,29 @@ export declare const svedocsConfigSchema: z.ZodObject<{
266
284
  sitemap: z.ZodOptional<z.ZodBoolean>;
267
285
  robots: z.ZodOptional<z.ZodBoolean>;
268
286
  defaultAuthor: z.ZodOptional<z.ZodString>;
287
+ head: z.ZodOptional<z.ZodObject<{
288
+ meta: z.ZodOptional<z.ZodArray<z.ZodObject<{
289
+ name: z.ZodOptional<z.ZodString>;
290
+ property: z.ZodOptional<z.ZodString>;
291
+ httpEquiv: z.ZodOptional<z.ZodString>;
292
+ itemprop: z.ZodOptional<z.ZodString>;
293
+ content: z.ZodString;
294
+ }, z.core.$strip>>>;
295
+ links: z.ZodOptional<z.ZodArray<z.ZodObject<{
296
+ rel: z.ZodString;
297
+ href: z.ZodString;
298
+ hreflang: z.ZodOptional<z.ZodString>;
299
+ type: z.ZodOptional<z.ZodString>;
300
+ media: z.ZodOptional<z.ZodString>;
301
+ title: z.ZodOptional<z.ZodString>;
302
+ sizes: z.ZodOptional<z.ZodString>;
303
+ as: z.ZodOptional<z.ZodString>;
304
+ crossorigin: z.ZodOptional<z.ZodString>;
305
+ }, z.core.$strip>>>;
306
+ jsonLd: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
307
+ jsonld: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
308
+ 'json-ld': z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
309
+ }, z.core.$strip>>;
269
310
  ogImage: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<false>, z.ZodObject<{
270
311
  template: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodCustom<OgTemplate, OgTemplate>]>>;
271
312
  format: z.ZodOptional<z.ZodEnum<{
@@ -302,8 +343,14 @@ export declare const svedocsConfigSchema: z.ZodObject<{
302
343
  code: z.ZodString;
303
344
  label: z.ZodOptional<z.ZodString>;
304
345
  path: z.ZodOptional<z.ZodString>;
346
+ hreflang: z.ZodOptional<z.ZodString>;
347
+ dir: z.ZodOptional<z.ZodEnum<{
348
+ ltr: "ltr";
349
+ rtl: "rtl";
350
+ }>>;
305
351
  }, z.core.$strip>]>>>;
306
352
  prefixDefaultLocale: z.ZodOptional<z.ZodBoolean>;
353
+ messages: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodString>>>;
307
354
  }, z.core.$strip>]>>;
308
355
  }, z.core.$strip>;
309
356
  export declare function defineConfig(config: SvedocsConfig): SvedocsConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/config.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { access } from 'node:fs/promises';
1
2
  import { pathToFileURL } from 'node:url';
2
3
  import { z } from 'zod';
3
4
  import { resolveSvedocsConfig } from './core.js';
@@ -60,6 +61,7 @@ export const svedocsConfigSchema = z.object({
60
61
  brand: z
61
62
  .object({
62
63
  label: z.string().optional(),
64
+ labelKey: z.string().optional(),
63
65
  href: z.string().optional(),
64
66
  logo: z.string().optional(),
65
67
  mark: z.union([z.literal('pixel'), z.literal(false)]).optional()
@@ -68,6 +70,7 @@ export const svedocsConfigSchema = z.object({
68
70
  nav: z
69
71
  .array(z.object({
70
72
  label: z.string(),
73
+ labelKey: z.string().optional(),
71
74
  href: z.string(),
72
75
  external: z.boolean().optional()
73
76
  }))
@@ -75,6 +78,7 @@ export const svedocsConfigSchema = z.object({
75
78
  social: z
76
79
  .array(z.object({
77
80
  label: z.string(),
81
+ labelKey: z.string().optional(),
78
82
  href: z.string(),
79
83
  external: z.boolean().optional()
80
84
  }))
@@ -87,6 +91,7 @@ export const svedocsConfigSchema = z.object({
87
91
  links: z
88
92
  .array(z.object({
89
93
  label: z.string(),
94
+ labelKey: z.string().optional(),
90
95
  href: z.string(),
91
96
  external: z.boolean().optional()
92
97
  }))
@@ -97,15 +102,18 @@ export const svedocsConfigSchema = z.object({
97
102
  home: z
98
103
  .object({
99
104
  kicker: z.string().optional(),
105
+ kickerKey: z.string().optional(),
100
106
  primaryAction: z
101
107
  .object({
102
108
  label: z.string(),
109
+ labelKey: z.string().optional(),
103
110
  href: z.string()
104
111
  })
105
112
  .optional(),
106
113
  secondaryAction: z
107
114
  .object({
108
115
  label: z.string(),
116
+ labelKey: z.string().optional(),
109
117
  href: z.string()
110
118
  })
111
119
  .optional(),
@@ -113,7 +121,8 @@ export const svedocsConfigSchema = z.object({
113
121
  .object({
114
122
  type: z.enum(['pixel', 'image']).optional(),
115
123
  src: z.string().optional(),
116
- alt: z.string().optional()
124
+ alt: z.string().optional(),
125
+ altKey: z.string().optional()
117
126
  })
118
127
  .optional()
119
128
  })
@@ -162,6 +171,35 @@ export const svedocsConfigSchema = z.object({
162
171
  sitemap: z.boolean().optional(),
163
172
  robots: z.boolean().optional(),
164
173
  defaultAuthor: z.string().optional(),
174
+ head: z
175
+ .object({
176
+ meta: z
177
+ .array(z.object({
178
+ name: z.string().optional(),
179
+ property: z.string().optional(),
180
+ httpEquiv: z.string().optional(),
181
+ itemprop: z.string().optional(),
182
+ content: z.string()
183
+ }))
184
+ .optional(),
185
+ links: z
186
+ .array(z.object({
187
+ rel: z.string(),
188
+ href: z.string(),
189
+ hreflang: z.string().optional(),
190
+ type: z.string().optional(),
191
+ media: z.string().optional(),
192
+ title: z.string().optional(),
193
+ sizes: z.string().optional(),
194
+ as: z.string().optional(),
195
+ crossorigin: z.string().optional()
196
+ }))
197
+ .optional(),
198
+ jsonLd: z.array(z.record(z.string(), z.unknown())).optional(),
199
+ jsonld: z.array(z.record(z.string(), z.unknown())).optional(),
200
+ 'json-ld': z.array(z.record(z.string(), z.unknown())).optional()
201
+ })
202
+ .optional(),
165
203
  ogImage: z
166
204
  .union([
167
205
  z.literal(false),
@@ -211,11 +249,14 @@ export const svedocsConfigSchema = z.object({
211
249
  z.object({
212
250
  code: z.string(),
213
251
  label: z.string().optional(),
214
- path: z.string().optional()
252
+ path: z.string().optional(),
253
+ hreflang: z.string().optional(),
254
+ dir: z.enum(['ltr', 'rtl']).optional()
215
255
  })
216
256
  ]))
217
257
  .optional(),
218
- prefixDefaultLocale: z.boolean().optional()
258
+ prefixDefaultLocale: z.boolean().optional(),
259
+ messages: z.record(z.string(), z.record(z.string(), z.string())).optional()
219
260
  })
220
261
  ])
221
262
  .optional()
@@ -227,18 +268,21 @@ export function loadSvedocsConfig(config = {}) {
227
268
  return resolveSvedocsConfig(validateSvedocsConfig(config));
228
269
  }
229
270
  export function validateSvedocsConfig(config) {
230
- return svedocsConfigSchema.parse(config);
271
+ const validated = svedocsConfigSchema.parse(config);
272
+ resolveSvedocsConfig(validated);
273
+ return validated;
231
274
  }
232
275
  export async function loadSvedocsConfigFile(configFile, fallback = {}) {
233
276
  try {
234
- const module = await import(pathToFileURL(configFile).href);
235
- return loadSvedocsConfig((module.default ?? module.config ?? fallback));
277
+ await access(configFile);
236
278
  }
237
279
  catch (error) {
238
280
  const code = typeof error === 'object' && error && 'code' in error ? error.code : undefined;
239
- if (code === 'ERR_MODULE_NOT_FOUND' || code === 'MODULE_NOT_FOUND') {
281
+ if (code === 'ENOENT' || code === 'ENOTDIR') {
240
282
  return loadSvedocsConfig(fallback);
241
283
  }
242
284
  throw error;
243
285
  }
286
+ const module = await import(pathToFileURL(configFile).href);
287
+ return loadSvedocsConfig((module.default ?? module.config ?? fallback));
244
288
  }
@@ -68,9 +68,9 @@ function createMissingTranslationIssues(manifest) {
68
68
  return [];
69
69
  const groups = new Map();
70
70
  for (const page of manifest.pages) {
71
- if (page.hidden || page.kind !== 'doc')
71
+ if (page.hidden)
72
72
  continue;
73
- const key = page.scopePath;
73
+ const key = `${page.kind}:${page.scopePath}`;
74
74
  const group = groups.get(key) ?? [];
75
75
  group.push(page);
76
76
  groups.set(key, group);
@@ -1,5 +1,6 @@
1
1
  import type { SvedocsConfig } from '../config.js';
2
2
  import type { SvedocsResolvedConfig } from './types.js';
3
+ export { defaultSvedocsMessages } from './i18n.js';
3
4
  export declare function resolveSvedocsConfig(config?: SvedocsConfig): SvedocsResolvedConfig;
4
5
  export declare function isResolvedConfig(config: SvedocsConfig | SvedocsResolvedConfig | undefined): config is SvedocsResolvedConfig;
5
6
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAiB,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEvE,wBAAgB,oBAAoB,CAAC,MAAM,GAAE,aAAkB,GAAG,qBAAqB,CAoItF;AAeD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,qBAAqB,GAAG,SAAS,GAAG,MAAM,IAAI,qBAAqB,CAY3H"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAExD,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAEnD,wBAAgB,oBAAoB,CAAC,MAAM,GAAE,aAAkB,GAAG,qBAAqB,CA4ItF;AAeD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,qBAAqB,GAAG,SAAS,GAAG,MAAM,IAAI,qBAAqB,CAY3H"}