svedocs 0.1.0-beta.2 → 0.1.0-beta.4

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 (166) hide show
  1. package/README.md +48 -1
  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 +49 -0
  11. package/dist/config.d.ts.map +1 -1
  12. package/dist/config.js +53 -8
  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 +15 -33
  17. package/dist/core/content.d.ts.map +1 -1
  18. package/dist/core/content.js +107 -7
  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/messages.d.ts +148 -0
  23. package/dist/core/messages.d.ts.map +1 -0
  24. package/dist/core/messages.js +162 -0
  25. package/dist/core/types.d.ts +192 -0
  26. package/dist/core/types.d.ts.map +1 -1
  27. package/dist/core/utils.d.ts +1 -0
  28. package/dist/core/utils.d.ts.map +1 -1
  29. package/dist/core/utils.js +8 -0
  30. package/dist/index.d.ts +1 -1
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/mdx/code.d.ts +4 -1
  33. package/dist/mdx/code.d.ts.map +1 -1
  34. package/dist/mdx/code.js +17 -7
  35. package/dist/mdx/compile.d.ts +3 -1
  36. package/dist/mdx/compile.d.ts.map +1 -1
  37. package/dist/mdx/compile.js +6 -2
  38. package/dist/mdx/diff.d.ts +5 -1
  39. package/dist/mdx/diff.d.ts.map +1 -1
  40. package/dist/mdx/diff.js +22 -11
  41. package/dist/mdx/links.d.ts +2 -0
  42. package/dist/mdx/links.d.ts.map +1 -0
  43. package/dist/mdx/links.js +141 -0
  44. package/dist/og/image.d.ts +4 -0
  45. package/dist/og/image.d.ts.map +1 -1
  46. package/dist/og/image.js +8 -0
  47. package/dist/og/metadata.d.ts +5 -1
  48. package/dist/og/metadata.d.ts.map +1 -1
  49. package/dist/og/metadata.js +77 -7
  50. package/dist/og/types.d.ts +6 -0
  51. package/dist/og/types.d.ts.map +1 -1
  52. package/dist/search/cloudflare.d.ts +2 -1
  53. package/dist/search/cloudflare.d.ts.map +1 -1
  54. package/dist/search/cloudflare.js +10 -1
  55. package/dist/search/local.d.ts.map +1 -1
  56. package/dist/search/local.js +64 -21
  57. package/dist/search/runtime.js +1 -1
  58. package/dist/search/utils.d.ts +1 -0
  59. package/dist/search/utils.d.ts.map +1 -1
  60. package/dist/search/utils.js +38 -0
  61. package/dist/svelte.d.ts +1 -0
  62. package/dist/svelte.d.ts.map +1 -1
  63. package/dist/svelte.js +8 -1
  64. package/dist/theme/Article.svelte +145 -0
  65. package/dist/theme/Article.svelte.d.ts +36 -0
  66. package/dist/theme/Article.svelte.d.ts.map +1 -0
  67. package/dist/theme/AskAiPanel.svelte +64 -258
  68. package/dist/theme/AskAiPanel.svelte.d.ts +4 -0
  69. package/dist/theme/AskAiPanel.svelte.d.ts.map +1 -1
  70. package/dist/theme/Brand.svelte +19 -0
  71. package/dist/theme/Brand.svelte.d.ts +22 -0
  72. package/dist/theme/Brand.svelte.d.ts.map +1 -0
  73. package/dist/theme/DocPage.svelte +6 -112
  74. package/dist/theme/DocPage.svelte.d.ts.map +1 -1
  75. package/dist/theme/DocsApp.svelte +135 -46
  76. package/dist/theme/DocsApp.svelte.d.ts +20 -23
  77. package/dist/theme/DocsApp.svelte.d.ts.map +1 -1
  78. package/dist/theme/DocsLayout.svelte +58 -135
  79. package/dist/theme/DocsLayout.svelte.d.ts +4 -5
  80. package/dist/theme/DocsLayout.svelte.d.ts.map +1 -1
  81. package/dist/theme/DocsShell.svelte +91 -0
  82. package/dist/theme/DocsShell.svelte.d.ts +34 -0
  83. package/dist/theme/DocsShell.svelte.d.ts.map +1 -0
  84. package/dist/theme/ErrorPage.svelte +104 -0
  85. package/dist/theme/ErrorPage.svelte.d.ts +34 -0
  86. package/dist/theme/ErrorPage.svelte.d.ts.map +1 -0
  87. package/dist/theme/FloatingToolbar.svelte +2 -67
  88. package/dist/theme/FloatingToolbar.svelte.d.ts.map +1 -1
  89. package/dist/theme/Footer.svelte +18 -0
  90. package/dist/theme/Footer.svelte.d.ts +24 -0
  91. package/dist/theme/Footer.svelte.d.ts.map +1 -0
  92. package/dist/theme/FooterLinks.svelte +37 -0
  93. package/dist/theme/FooterLinks.svelte.d.ts +22 -0
  94. package/dist/theme/FooterLinks.svelte.d.ts.map +1 -0
  95. package/dist/theme/HomePage.svelte +91 -44
  96. package/dist/theme/HomePage.svelte.d.ts +8 -1
  97. package/dist/theme/HomePage.svelte.d.ts.map +1 -1
  98. package/dist/theme/LayoutShell.svelte +119 -0
  99. package/dist/theme/LayoutShell.svelte.d.ts +43 -0
  100. package/dist/theme/LayoutShell.svelte.d.ts.map +1 -0
  101. package/dist/theme/MobileNav.svelte +20 -0
  102. package/dist/theme/MobileNav.svelte.d.ts +26 -0
  103. package/dist/theme/MobileNav.svelte.d.ts.map +1 -0
  104. package/dist/theme/Navbar.svelte +67 -0
  105. package/dist/theme/Navbar.svelte.d.ts +29 -0
  106. package/dist/theme/Navbar.svelte.d.ts.map +1 -0
  107. package/dist/theme/PageLayout.svelte +32 -28
  108. package/dist/theme/PageLayout.svelte.d.ts +4 -1
  109. package/dist/theme/PageLayout.svelte.d.ts.map +1 -1
  110. package/dist/theme/PageShell.svelte +98 -0
  111. package/dist/theme/PageShell.svelte.d.ts +35 -0
  112. package/dist/theme/PageShell.svelte.d.ts.map +1 -0
  113. package/dist/theme/PageTools.svelte +87 -0
  114. package/dist/theme/PageTools.svelte.d.ts +25 -0
  115. package/dist/theme/PageTools.svelte.d.ts.map +1 -0
  116. package/dist/theme/RenderError.svelte +62 -0
  117. package/dist/theme/RenderError.svelte.d.ts +31 -0
  118. package/dist/theme/RenderError.svelte.d.ts.map +1 -0
  119. package/dist/theme/RootLayout.svelte +185 -246
  120. package/dist/theme/RootLayout.svelte.d.ts +7 -0
  121. package/dist/theme/RootLayout.svelte.d.ts.map +1 -1
  122. package/dist/theme/RouteRenderError.svelte +53 -0
  123. package/dist/theme/RouteRenderError.svelte.d.ts +34 -0
  124. package/dist/theme/RouteRenderError.svelte.d.ts.map +1 -0
  125. package/dist/theme/SafeRenderError.svelte +49 -0
  126. package/dist/theme/SafeRenderError.svelte.d.ts +33 -0
  127. package/dist/theme/SafeRenderError.svelte.d.ts.map +1 -0
  128. package/dist/theme/ScopeSwitcher.svelte +9 -5
  129. package/dist/theme/ScopeSwitcher.svelte.d.ts +2 -0
  130. package/dist/theme/ScopeSwitcher.svelte.d.ts.map +1 -1
  131. package/dist/theme/SearchDialog.svelte +64 -126
  132. package/dist/theme/SearchDialog.svelte.d.ts +3 -0
  133. package/dist/theme/SearchDialog.svelte.d.ts.map +1 -1
  134. package/dist/theme/SidebarTree.svelte +19 -7
  135. package/dist/theme/SidebarTree.svelte.d.ts.map +1 -1
  136. package/dist/theme/SocialNav.svelte +17 -0
  137. package/dist/theme/SocialNav.svelte.d.ts +22 -0
  138. package/dist/theme/SocialNav.svelte.d.ts.map +1 -0
  139. package/dist/theme/TableOfContents.svelte +73 -0
  140. package/dist/theme/TableOfContents.svelte.d.ts +25 -0
  141. package/dist/theme/TableOfContents.svelte.d.ts.map +1 -0
  142. package/dist/theme/ThemeToggle.svelte +18 -19
  143. package/dist/theme/ThemeToggle.svelte.d.ts +2 -0
  144. package/dist/theme/ThemeToggle.svelte.d.ts.map +1 -1
  145. package/dist/theme/TopNav.svelte +23 -0
  146. package/dist/theme/TopNav.svelte.d.ts +22 -0
  147. package/dist/theme/TopNav.svelte.d.ts.map +1 -0
  148. package/dist/theme/base.css +215 -0
  149. package/dist/theme/defaults.d.ts +4 -0
  150. package/dist/theme/defaults.d.ts.map +1 -0
  151. package/dist/theme/defaults.js +55 -0
  152. package/dist/theme/headless.d.ts +62 -0
  153. package/dist/theme/headless.d.ts.map +1 -0
  154. package/dist/theme/headless.js +996 -0
  155. package/dist/theme/index.d.ts +18 -0
  156. package/dist/theme/index.d.ts.map +1 -1
  157. package/dist/theme/index.js +17 -0
  158. package/dist/theme/styles.css +499 -1
  159. package/dist/theme/types.d.ts +363 -0
  160. package/dist/theme/types.d.ts.map +1 -0
  161. package/dist/theme/types.js +1 -0
  162. package/dist/virtual.d.ts +6 -0
  163. package/dist/vite.d.ts +6 -0
  164. package/dist/vite.d.ts.map +1 -1
  165. package/dist/vite.js +75 -5
  166. package/package.json +12 -1
package/README.md CHANGED
@@ -7,7 +7,9 @@ Integrated SvelteKit documentation framework package.
7
7
  - `svedocs/config`: config schema and `defineConfig`.
8
8
  - `svedocs/core`: content manifest, scoped navigation, checks, search records, and shared types.
9
9
  - `svedocs/vite`: virtual modules and content refresh Vite plugin.
10
- - `svedocs/theme`: default Svelte theme components and Tailwind CSS v4 styles.
10
+ - `svedocs/theme`: default Svelte theme components, replaceable theme component map, and Tailwind CSS v4 styles.
11
+ - `svedocs/theme/headless`: unstyled theme behavior controllers for custom themes.
12
+ - `svedocs/theme/types`: public theme component prop and component-map types.
11
13
  - `svedocs/svelte`: `mdsvex`-based Svelte-compatible authoring helpers.
12
14
  - `svedocs/search`: weighted local search, scope filters, Cloudflare AI Search provider, and indexing sync.
13
15
  - `svedocs/ai`: Ask AI providers, SSE responses, and rate limiting helpers.
@@ -16,6 +18,44 @@ Integrated SvelteKit documentation framework package.
16
18
 
17
19
  All rendering, theme, search, AI, SEO, OG, and Cloudflare capabilities are intentionally kept inside this package.
18
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
+
19
59
  ## MDX/SVX Components
20
60
 
21
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:
@@ -31,8 +71,15 @@ svedocs({
31
71
  },
32
72
  layouts: {
33
73
  feature: '$lib/FeatureLayout.svelte'
74
+ },
75
+ theme: {
76
+ components: {
77
+ Navbar: '$lib/theme/Navbar.svelte',
78
+ Article: '$lib/theme/Article.svelte'
79
+ }
34
80
  }
35
81
  })
36
82
  ```
37
83
 
38
84
  `.svx` and `.mdx` files can then use `<Callout />` without local imports.
85
+ Registered theme components are exposed through `virtual:svedocs/theme-components` and can replace default navigation, article, search, Ask AI, ToC, and footer rendering.
@@ -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;
@@ -28,21 +31,25 @@ export interface SvedocsThemeCodeTheme {
28
31
  export interface SvedocsThemeCode {
29
32
  lineNumbers?: boolean;
30
33
  wrap?: boolean;
34
+ copyButton?: boolean;
31
35
  }
32
36
  export interface SvedocsShikiOptions {
33
37
  transformers?: unknown[];
34
38
  }
35
39
  export interface SvedocsThemeHomeAction {
36
40
  label: string;
41
+ labelKey?: string;
37
42
  href: string;
38
43
  }
39
44
  export interface SvedocsThemeHomeVisual {
40
45
  type?: 'pixel' | 'image';
41
46
  src?: string;
42
47
  alt?: string;
48
+ altKey?: string;
43
49
  }
44
50
  export interface SvedocsThemeHome {
45
51
  kicker?: string;
52
+ kickerKey?: string;
46
53
  primaryAction?: SvedocsThemeHomeAction;
47
54
  secondaryAction?: SvedocsThemeHomeAction;
48
55
  visual?: SvedocsThemeHomeVisual;
@@ -107,6 +114,7 @@ export interface SvedocsConfig {
107
114
  sitemap?: boolean;
108
115
  robots?: boolean;
109
116
  defaultAuthor?: string;
117
+ head?: SvedocsSeoHead;
110
118
  ogImage?: false | {
111
119
  template?: 'default' | string | OgTemplate;
112
120
  format?: 'svg' | 'png';
@@ -137,8 +145,11 @@ export interface SvedocsConfig {
137
145
  code: string;
138
146
  label?: string;
139
147
  path?: string;
148
+ hreflang?: string;
149
+ dir?: 'ltr' | 'rtl';
140
150
  }>;
141
151
  prefixDefaultLocale?: boolean;
152
+ messages?: Record<string, Partial<SvedocsMessages>>;
142
153
  };
143
154
  }
144
155
  export type { SvedocsResolvedConfig };
@@ -186,20 +197,24 @@ export declare const svedocsConfigSchema: z.ZodObject<{
186
197
  code: z.ZodOptional<z.ZodObject<{
187
198
  lineNumbers: z.ZodOptional<z.ZodBoolean>;
188
199
  wrap: z.ZodOptional<z.ZodBoolean>;
200
+ copyButton: z.ZodOptional<z.ZodBoolean>;
189
201
  }, z.core.$strip>>;
190
202
  brand: z.ZodOptional<z.ZodObject<{
191
203
  label: z.ZodOptional<z.ZodString>;
204
+ labelKey: z.ZodOptional<z.ZodString>;
192
205
  href: z.ZodOptional<z.ZodString>;
193
206
  logo: z.ZodOptional<z.ZodString>;
194
207
  mark: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"pixel">, z.ZodLiteral<false>]>>;
195
208
  }, z.core.$strip>>;
196
209
  nav: z.ZodOptional<z.ZodArray<z.ZodObject<{
197
210
  label: z.ZodString;
211
+ labelKey: z.ZodOptional<z.ZodString>;
198
212
  href: z.ZodString;
199
213
  external: z.ZodOptional<z.ZodBoolean>;
200
214
  }, z.core.$strip>>>;
201
215
  social: z.ZodOptional<z.ZodArray<z.ZodObject<{
202
216
  label: z.ZodString;
217
+ labelKey: z.ZodOptional<z.ZodString>;
203
218
  href: z.ZodString;
204
219
  external: z.ZodOptional<z.ZodBoolean>;
205
220
  }, z.core.$strip>>>;
@@ -207,18 +222,22 @@ export declare const svedocsConfigSchema: z.ZodObject<{
207
222
  text: z.ZodOptional<z.ZodString>;
208
223
  links: z.ZodOptional<z.ZodArray<z.ZodObject<{
209
224
  label: z.ZodString;
225
+ labelKey: z.ZodOptional<z.ZodString>;
210
226
  href: z.ZodString;
211
227
  external: z.ZodOptional<z.ZodBoolean>;
212
228
  }, z.core.$strip>>>;
213
229
  }, z.core.$strip>]>>;
214
230
  home: z.ZodOptional<z.ZodObject<{
215
231
  kicker: z.ZodOptional<z.ZodString>;
232
+ kickerKey: z.ZodOptional<z.ZodString>;
216
233
  primaryAction: z.ZodOptional<z.ZodObject<{
217
234
  label: z.ZodString;
235
+ labelKey: z.ZodOptional<z.ZodString>;
218
236
  href: z.ZodString;
219
237
  }, z.core.$strip>>;
220
238
  secondaryAction: z.ZodOptional<z.ZodObject<{
221
239
  label: z.ZodString;
240
+ labelKey: z.ZodOptional<z.ZodString>;
222
241
  href: z.ZodString;
223
242
  }, z.core.$strip>>;
224
243
  visual: z.ZodOptional<z.ZodObject<{
@@ -228,6 +247,7 @@ export declare const svedocsConfigSchema: z.ZodObject<{
228
247
  }>>;
229
248
  src: z.ZodOptional<z.ZodString>;
230
249
  alt: z.ZodOptional<z.ZodString>;
250
+ altKey: z.ZodOptional<z.ZodString>;
231
251
  }, z.core.$strip>>;
232
252
  }, z.core.$strip>>;
233
253
  }, z.core.$strip>>;
@@ -264,6 +284,29 @@ export declare const svedocsConfigSchema: z.ZodObject<{
264
284
  sitemap: z.ZodOptional<z.ZodBoolean>;
265
285
  robots: z.ZodOptional<z.ZodBoolean>;
266
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>>;
267
310
  ogImage: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<false>, z.ZodObject<{
268
311
  template: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodCustom<OgTemplate, OgTemplate>]>>;
269
312
  format: z.ZodOptional<z.ZodEnum<{
@@ -300,8 +343,14 @@ export declare const svedocsConfigSchema: z.ZodObject<{
300
343
  code: z.ZodString;
301
344
  label: z.ZodOptional<z.ZodString>;
302
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
+ }>>;
303
351
  }, z.core.$strip>]>>>;
304
352
  prefixDefaultLocale: z.ZodOptional<z.ZodBoolean>;
353
+ messages: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodString>>>;
305
354
  }, z.core.$strip>]>>;
306
355
  }, z.core.$strip>;
307
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';
@@ -53,12 +54,14 @@ export const svedocsConfigSchema = z.object({
53
54
  code: z
54
55
  .object({
55
56
  lineNumbers: z.boolean().optional(),
56
- wrap: z.boolean().optional()
57
+ wrap: z.boolean().optional(),
58
+ copyButton: z.boolean().optional()
57
59
  })
58
60
  .optional(),
59
61
  brand: z
60
62
  .object({
61
63
  label: z.string().optional(),
64
+ labelKey: z.string().optional(),
62
65
  href: z.string().optional(),
63
66
  logo: z.string().optional(),
64
67
  mark: z.union([z.literal('pixel'), z.literal(false)]).optional()
@@ -67,6 +70,7 @@ export const svedocsConfigSchema = z.object({
67
70
  nav: z
68
71
  .array(z.object({
69
72
  label: z.string(),
73
+ labelKey: z.string().optional(),
70
74
  href: z.string(),
71
75
  external: z.boolean().optional()
72
76
  }))
@@ -74,6 +78,7 @@ export const svedocsConfigSchema = z.object({
74
78
  social: z
75
79
  .array(z.object({
76
80
  label: z.string(),
81
+ labelKey: z.string().optional(),
77
82
  href: z.string(),
78
83
  external: z.boolean().optional()
79
84
  }))
@@ -86,6 +91,7 @@ export const svedocsConfigSchema = z.object({
86
91
  links: z
87
92
  .array(z.object({
88
93
  label: z.string(),
94
+ labelKey: z.string().optional(),
89
95
  href: z.string(),
90
96
  external: z.boolean().optional()
91
97
  }))
@@ -96,15 +102,18 @@ export const svedocsConfigSchema = z.object({
96
102
  home: z
97
103
  .object({
98
104
  kicker: z.string().optional(),
105
+ kickerKey: z.string().optional(),
99
106
  primaryAction: z
100
107
  .object({
101
108
  label: z.string(),
109
+ labelKey: z.string().optional(),
102
110
  href: z.string()
103
111
  })
104
112
  .optional(),
105
113
  secondaryAction: z
106
114
  .object({
107
115
  label: z.string(),
116
+ labelKey: z.string().optional(),
108
117
  href: z.string()
109
118
  })
110
119
  .optional(),
@@ -112,7 +121,8 @@ export const svedocsConfigSchema = z.object({
112
121
  .object({
113
122
  type: z.enum(['pixel', 'image']).optional(),
114
123
  src: z.string().optional(),
115
- alt: z.string().optional()
124
+ alt: z.string().optional(),
125
+ altKey: z.string().optional()
116
126
  })
117
127
  .optional()
118
128
  })
@@ -161,6 +171,35 @@ export const svedocsConfigSchema = z.object({
161
171
  sitemap: z.boolean().optional(),
162
172
  robots: z.boolean().optional(),
163
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(),
164
203
  ogImage: z
165
204
  .union([
166
205
  z.literal(false),
@@ -210,11 +249,14 @@ export const svedocsConfigSchema = z.object({
210
249
  z.object({
211
250
  code: z.string(),
212
251
  label: z.string().optional(),
213
- path: z.string().optional()
252
+ path: z.string().optional(),
253
+ hreflang: z.string().optional(),
254
+ dir: z.enum(['ltr', 'rtl']).optional()
214
255
  })
215
256
  ]))
216
257
  .optional(),
217
- prefixDefaultLocale: z.boolean().optional()
258
+ prefixDefaultLocale: z.boolean().optional(),
259
+ messages: z.record(z.string(), z.record(z.string(), z.string())).optional()
218
260
  })
219
261
  ])
220
262
  .optional()
@@ -226,18 +268,21 @@ export function loadSvedocsConfig(config = {}) {
226
268
  return resolveSvedocsConfig(validateSvedocsConfig(config));
227
269
  }
228
270
  export function validateSvedocsConfig(config) {
229
- return svedocsConfigSchema.parse(config);
271
+ const validated = svedocsConfigSchema.parse(config);
272
+ resolveSvedocsConfig(validated);
273
+ return validated;
230
274
  }
231
275
  export async function loadSvedocsConfigFile(configFile, fallback = {}) {
232
276
  try {
233
- const module = await import(pathToFileURL(configFile).href);
234
- return loadSvedocsConfig((module.default ?? module.config ?? fallback));
277
+ await access(configFile);
235
278
  }
236
279
  catch (error) {
237
280
  const code = typeof error === 'object' && error && 'code' in error ? error.code : undefined;
238
- if (code === 'ERR_MODULE_NOT_FOUND' || code === 'MODULE_NOT_FOUND') {
281
+ if (code === 'ENOENT' || code === 'ENOTDIR') {
239
282
  return loadSvedocsConfig(fallback);
240
283
  }
241
284
  throw error;
242
285
  }
286
+ const module = await import(pathToFileURL(configFile).href);
287
+ return loadSvedocsConfig((module.default ?? module.config ?? fallback));
243
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,CAmItF;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"}