svedocs 0.1.0-beta.10

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 (286) hide show
  1. package/LICENSE +5 -0
  2. package/README.md +85 -0
  3. package/dist/ai/openai-compatible.d.ts +13 -0
  4. package/dist/ai/openai-compatible.d.ts.map +1 -0
  5. package/dist/ai/openai-compatible.js +92 -0
  6. package/dist/ai/providers.d.ts +20 -0
  7. package/dist/ai/providers.d.ts.map +1 -0
  8. package/dist/ai/providers.js +185 -0
  9. package/dist/ai/rate-limit.d.ts +18 -0
  10. package/dist/ai/rate-limit.d.ts.map +1 -0
  11. package/dist/ai/rate-limit.js +52 -0
  12. package/dist/ai/response.d.ts +4 -0
  13. package/dist/ai/response.d.ts.map +1 -0
  14. package/dist/ai/response.js +151 -0
  15. package/dist/ai/runtime.d.ts +32 -0
  16. package/dist/ai/runtime.d.ts.map +1 -0
  17. package/dist/ai/runtime.js +111 -0
  18. package/dist/ai/types.d.ts +93 -0
  19. package/dist/ai/types.d.ts.map +1 -0
  20. package/dist/ai/types.js +1 -0
  21. package/dist/ai.d.ts +7 -0
  22. package/dist/ai.d.ts.map +1 -0
  23. package/dist/ai.js +6 -0
  24. package/dist/ambient.d.ts +5 -0
  25. package/dist/cloudflare.d.ts +29 -0
  26. package/dist/cloudflare.d.ts.map +1 -0
  27. package/dist/cloudflare.js +149 -0
  28. package/dist/config.d.ts +373 -0
  29. package/dist/config.d.ts.map +1 -0
  30. package/dist/config.js +299 -0
  31. package/dist/core/checks.d.ts +4 -0
  32. package/dist/core/checks.d.ts.map +1 -0
  33. package/dist/core/checks.js +267 -0
  34. package/dist/core/config.d.ts +6 -0
  35. package/dist/core/config.d.ts.map +1 -0
  36. package/dist/core/config.js +178 -0
  37. package/dist/core/content.d.ts +7 -0
  38. package/dist/core/content.d.ts.map +1 -0
  39. package/dist/core/content.js +340 -0
  40. package/dist/core/i18n.d.ts +5 -0
  41. package/dist/core/i18n.d.ts.map +1 -0
  42. package/dist/core/i18n.js +117 -0
  43. package/dist/core/links.d.ts +5 -0
  44. package/dist/core/links.d.ts.map +1 -0
  45. package/dist/core/links.js +60 -0
  46. package/dist/core/messages.d.ts +149 -0
  47. package/dist/core/messages.d.ts.map +1 -0
  48. package/dist/core/messages.js +163 -0
  49. package/dist/core/navigation.d.ts +5 -0
  50. package/dist/core/navigation.d.ts.map +1 -0
  51. package/dist/core/navigation.js +144 -0
  52. package/dist/core/routes.d.ts +36 -0
  53. package/dist/core/routes.d.ts.map +1 -0
  54. package/dist/core/routes.js +152 -0
  55. package/dist/core/search.d.ts +5 -0
  56. package/dist/core/search.d.ts.map +1 -0
  57. package/dist/core/search.js +41 -0
  58. package/dist/core/types.d.ts +468 -0
  59. package/dist/core/types.d.ts.map +1 -0
  60. package/dist/core/types.js +4 -0
  61. package/dist/core/utils.d.ts +13 -0
  62. package/dist/core/utils.d.ts.map +1 -0
  63. package/dist/core/utils.js +60 -0
  64. package/dist/core.d.ts +9 -0
  65. package/dist/core.d.ts.map +1 -0
  66. package/dist/core.js +8 -0
  67. package/dist/index.d.ts +6 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +3 -0
  70. package/dist/mdx/ast.d.ts +32 -0
  71. package/dist/mdx/ast.d.ts.map +1 -0
  72. package/dist/mdx/ast.js +148 -0
  73. package/dist/mdx/code.d.ts +17 -0
  74. package/dist/mdx/code.d.ts.map +1 -0
  75. package/dist/mdx/code.js +327 -0
  76. package/dist/mdx/compile.d.ts +29 -0
  77. package/dist/mdx/compile.d.ts.map +1 -0
  78. package/dist/mdx/compile.js +59 -0
  79. package/dist/mdx/diff.d.ts +9 -0
  80. package/dist/mdx/diff.d.ts.map +1 -0
  81. package/dist/mdx/diff.js +171 -0
  82. package/dist/mdx/headings.d.ts +4 -0
  83. package/dist/mdx/headings.d.ts.map +1 -0
  84. package/dist/mdx/headings.js +42 -0
  85. package/dist/mdx/links.d.ts +4 -0
  86. package/dist/mdx/links.d.ts.map +1 -0
  87. package/dist/mdx/links.js +144 -0
  88. package/dist/mdx/utils.d.ts +10 -0
  89. package/dist/mdx/utils.d.ts.map +1 -0
  90. package/dist/mdx/utils.js +64 -0
  91. package/dist/og/image.d.ts +25 -0
  92. package/dist/og/image.d.ts.map +1 -0
  93. package/dist/og/image.js +224 -0
  94. package/dist/og/metadata.d.ts +7 -0
  95. package/dist/og/metadata.d.ts.map +1 -0
  96. package/dist/og/metadata.js +198 -0
  97. package/dist/og/response.d.ts +4 -0
  98. package/dist/og/response.d.ts.map +1 -0
  99. package/dist/og/response.js +49 -0
  100. package/dist/og/rss.d.ts +4 -0
  101. package/dist/og/rss.d.ts.map +1 -0
  102. package/dist/og/rss.js +96 -0
  103. package/dist/og/sitemap.d.ts +7 -0
  104. package/dist/og/sitemap.d.ts.map +1 -0
  105. package/dist/og/sitemap.js +90 -0
  106. package/dist/og/types.d.ts +65 -0
  107. package/dist/og/types.d.ts.map +1 -0
  108. package/dist/og/types.js +1 -0
  109. package/dist/og.d.ts +6 -0
  110. package/dist/og.d.ts.map +1 -0
  111. package/dist/og.js +5 -0
  112. package/dist/routes.d.ts +2 -0
  113. package/dist/routes.d.ts.map +1 -0
  114. package/dist/routes.js +1 -0
  115. package/dist/search/algolia.d.ts +10 -0
  116. package/dist/search/algolia.d.ts.map +1 -0
  117. package/dist/search/algolia.js +82 -0
  118. package/dist/search/cloudflare-sync.d.ts +5 -0
  119. package/dist/search/cloudflare-sync.d.ts.map +1 -0
  120. package/dist/search/cloudflare-sync.js +169 -0
  121. package/dist/search/cloudflare.d.ts +11 -0
  122. package/dist/search/cloudflare.d.ts.map +1 -0
  123. package/dist/search/cloudflare.js +126 -0
  124. package/dist/search/local.d.ts +9 -0
  125. package/dist/search/local.d.ts.map +1 -0
  126. package/dist/search/local.js +165 -0
  127. package/dist/search/runtime.d.ts +41 -0
  128. package/dist/search/runtime.d.ts.map +1 -0
  129. package/dist/search/runtime.js +152 -0
  130. package/dist/search/types.d.ts +172 -0
  131. package/dist/search/types.d.ts.map +1 -0
  132. package/dist/search/types.js +1 -0
  133. package/dist/search/typesense.d.ts +11 -0
  134. package/dist/search/typesense.d.ts.map +1 -0
  135. package/dist/search/typesense.js +91 -0
  136. package/dist/search/utils.d.ts +11 -0
  137. package/dist/search/utils.d.ts.map +1 -0
  138. package/dist/search/utils.js +93 -0
  139. package/dist/search.d.ts +8 -0
  140. package/dist/search.d.ts.map +1 -0
  141. package/dist/search.js +7 -0
  142. package/dist/svelte.d.ts +27 -0
  143. package/dist/svelte.d.ts.map +1 -0
  144. package/dist/svelte.js +45 -0
  145. package/dist/testing.d.ts +3 -0
  146. package/dist/testing.d.ts.map +1 -0
  147. package/dist/testing.js +23 -0
  148. package/dist/theme/Article.svelte +145 -0
  149. package/dist/theme/Article.svelte.d.ts +36 -0
  150. package/dist/theme/Article.svelte.d.ts.map +1 -0
  151. package/dist/theme/AskAiPanel.svelte +241 -0
  152. package/dist/theme/AskAiPanel.svelte.d.ts +31 -0
  153. package/dist/theme/AskAiPanel.svelte.d.ts.map +1 -0
  154. package/dist/theme/Brand.svelte +19 -0
  155. package/dist/theme/Brand.svelte.d.ts +22 -0
  156. package/dist/theme/Brand.svelte.d.ts.map +1 -0
  157. package/dist/theme/Button.svelte +34 -0
  158. package/dist/theme/Button.svelte.d.ts +41 -0
  159. package/dist/theme/Button.svelte.d.ts.map +1 -0
  160. package/dist/theme/Checkbox.svelte +63 -0
  161. package/dist/theme/Checkbox.svelte.d.ts +45 -0
  162. package/dist/theme/Checkbox.svelte.d.ts.map +1 -0
  163. package/dist/theme/CodeBlock.svelte +6 -0
  164. package/dist/theme/CodeBlock.svelte.d.ts +22 -0
  165. package/dist/theme/CodeBlock.svelte.d.ts.map +1 -0
  166. package/dist/theme/DocPage.svelte +15 -0
  167. package/dist/theme/DocPage.svelte.d.ts +33 -0
  168. package/dist/theme/DocPage.svelte.d.ts.map +1 -0
  169. package/dist/theme/DocsApp.svelte +194 -0
  170. package/dist/theme/DocsApp.svelte.d.ts +60 -0
  171. package/dist/theme/DocsApp.svelte.d.ts.map +1 -0
  172. package/dist/theme/DocsLayout.svelte +99 -0
  173. package/dist/theme/DocsLayout.svelte.d.ts +39 -0
  174. package/dist/theme/DocsLayout.svelte.d.ts.map +1 -0
  175. package/dist/theme/DocsShell.svelte +91 -0
  176. package/dist/theme/DocsShell.svelte.d.ts +34 -0
  177. package/dist/theme/DocsShell.svelte.d.ts.map +1 -0
  178. package/dist/theme/ErrorPage.svelte +113 -0
  179. package/dist/theme/ErrorPage.svelte.d.ts +34 -0
  180. package/dist/theme/ErrorPage.svelte.d.ts.map +1 -0
  181. package/dist/theme/FloatingToolbar.svelte +8 -0
  182. package/dist/theme/FloatingToolbar.svelte.d.ts +22 -0
  183. package/dist/theme/FloatingToolbar.svelte.d.ts.map +1 -0
  184. package/dist/theme/Footer.svelte +18 -0
  185. package/dist/theme/Footer.svelte.d.ts +24 -0
  186. package/dist/theme/Footer.svelte.d.ts.map +1 -0
  187. package/dist/theme/FooterLinks.svelte +37 -0
  188. package/dist/theme/FooterLinks.svelte.d.ts +22 -0
  189. package/dist/theme/FooterLinks.svelte.d.ts.map +1 -0
  190. package/dist/theme/FormField.svelte +41 -0
  191. package/dist/theme/FormField.svelte.d.ts +35 -0
  192. package/dist/theme/FormField.svelte.d.ts.map +1 -0
  193. package/dist/theme/HomePage.svelte +284 -0
  194. package/dist/theme/HomePage.svelte.d.ts +65 -0
  195. package/dist/theme/HomePage.svelte.d.ts.map +1 -0
  196. package/dist/theme/Input.svelte +36 -0
  197. package/dist/theme/Input.svelte.d.ts +34 -0
  198. package/dist/theme/Input.svelte.d.ts.map +1 -0
  199. package/dist/theme/LayoutShell.svelte +120 -0
  200. package/dist/theme/LayoutShell.svelte.d.ts +43 -0
  201. package/dist/theme/LayoutShell.svelte.d.ts.map +1 -0
  202. package/dist/theme/LocalizedLink.svelte +21 -0
  203. package/dist/theme/LocalizedLink.svelte.d.ts +38 -0
  204. package/dist/theme/LocalizedLink.svelte.d.ts.map +1 -0
  205. package/dist/theme/MobileNav.svelte +20 -0
  206. package/dist/theme/MobileNav.svelte.d.ts +26 -0
  207. package/dist/theme/MobileNav.svelte.d.ts.map +1 -0
  208. package/dist/theme/Navbar.svelte +69 -0
  209. package/dist/theme/Navbar.svelte.d.ts +29 -0
  210. package/dist/theme/Navbar.svelte.d.ts.map +1 -0
  211. package/dist/theme/PageLayout.svelte +49 -0
  212. package/dist/theme/PageLayout.svelte.d.ts +34 -0
  213. package/dist/theme/PageLayout.svelte.d.ts.map +1 -0
  214. package/dist/theme/PageShell.svelte +98 -0
  215. package/dist/theme/PageShell.svelte.d.ts +35 -0
  216. package/dist/theme/PageShell.svelte.d.ts.map +1 -0
  217. package/dist/theme/PageTools.svelte +87 -0
  218. package/dist/theme/PageTools.svelte.d.ts +25 -0
  219. package/dist/theme/PageTools.svelte.d.ts.map +1 -0
  220. package/dist/theme/RenderError.svelte +62 -0
  221. package/dist/theme/RenderError.svelte.d.ts +31 -0
  222. package/dist/theme/RenderError.svelte.d.ts.map +1 -0
  223. package/dist/theme/RootLayout.svelte +274 -0
  224. package/dist/theme/RootLayout.svelte.d.ts +47 -0
  225. package/dist/theme/RootLayout.svelte.d.ts.map +1 -0
  226. package/dist/theme/RouteRenderError.svelte +53 -0
  227. package/dist/theme/RouteRenderError.svelte.d.ts +34 -0
  228. package/dist/theme/RouteRenderError.svelte.d.ts.map +1 -0
  229. package/dist/theme/SafeRenderError.svelte +49 -0
  230. package/dist/theme/SafeRenderError.svelte.d.ts +33 -0
  231. package/dist/theme/SafeRenderError.svelte.d.ts.map +1 -0
  232. package/dist/theme/ScopeSwitcher.svelte +107 -0
  233. package/dist/theme/ScopeSwitcher.svelte.d.ts +26 -0
  234. package/dist/theme/ScopeSwitcher.svelte.d.ts.map +1 -0
  235. package/dist/theme/SearchDialog.svelte +200 -0
  236. package/dist/theme/SearchDialog.svelte.d.ts +31 -0
  237. package/dist/theme/SearchDialog.svelte.d.ts.map +1 -0
  238. package/dist/theme/Select.svelte +37 -0
  239. package/dist/theme/Select.svelte.d.ts +42 -0
  240. package/dist/theme/Select.svelte.d.ts.map +1 -0
  241. package/dist/theme/SidebarTree.svelte +148 -0
  242. package/dist/theme/SidebarTree.svelte.d.ts +24 -0
  243. package/dist/theme/SidebarTree.svelte.d.ts.map +1 -0
  244. package/dist/theme/SocialNav.svelte +17 -0
  245. package/dist/theme/SocialNav.svelte.d.ts +22 -0
  246. package/dist/theme/SocialNav.svelte.d.ts.map +1 -0
  247. package/dist/theme/TableOfContents.svelte +73 -0
  248. package/dist/theme/TableOfContents.svelte.d.ts +25 -0
  249. package/dist/theme/TableOfContents.svelte.d.ts.map +1 -0
  250. package/dist/theme/Textarea.svelte +33 -0
  251. package/dist/theme/Textarea.svelte.d.ts +33 -0
  252. package/dist/theme/Textarea.svelte.d.ts.map +1 -0
  253. package/dist/theme/ThemeInit.svelte +16 -0
  254. package/dist/theme/ThemeInit.svelte.d.ts +23 -0
  255. package/dist/theme/ThemeInit.svelte.d.ts.map +1 -0
  256. package/dist/theme/ThemeToggle.svelte +37 -0
  257. package/dist/theme/ThemeToggle.svelte.d.ts +23 -0
  258. package/dist/theme/ThemeToggle.svelte.d.ts.map +1 -0
  259. package/dist/theme/TopNav.svelte +23 -0
  260. package/dist/theme/TopNav.svelte.d.ts +22 -0
  261. package/dist/theme/TopNav.svelte.d.ts.map +1 -0
  262. package/dist/theme/base.css +240 -0
  263. package/dist/theme/defaults.d.ts +4 -0
  264. package/dist/theme/defaults.d.ts.map +1 -0
  265. package/dist/theme/defaults.js +55 -0
  266. package/dist/theme/forms.d.ts +4 -0
  267. package/dist/theme/forms.d.ts.map +1 -0
  268. package/dist/theme/forms.js +3 -0
  269. package/dist/theme/headless.d.ts +62 -0
  270. package/dist/theme/headless.d.ts.map +1 -0
  271. package/dist/theme/headless.js +1064 -0
  272. package/dist/theme/index.d.ts +41 -0
  273. package/dist/theme/index.d.ts.map +1 -0
  274. package/dist/theme/index.js +38 -0
  275. package/dist/theme/portal.d.ts +6 -0
  276. package/dist/theme/portal.d.ts.map +1 -0
  277. package/dist/theme/portal.js +59 -0
  278. package/dist/theme/styles.css +4232 -0
  279. package/dist/theme/types.d.ts +363 -0
  280. package/dist/theme/types.d.ts.map +1 -0
  281. package/dist/theme/types.js +1 -0
  282. package/dist/virtual.d.ts +65 -0
  283. package/dist/vite.d.ts +16 -0
  284. package/dist/vite.d.ts.map +1 -0
  285. package/dist/vite.js +386 -0
  286. package/package.json +132 -0
@@ -0,0 +1,340 @@
1
+ import { readFile, stat } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import fg from 'fast-glob';
4
+ import matter from 'gray-matter';
5
+ import { compileMarkdown } from '../mdx/compile.js';
6
+ import { checkSvedocsContent } from './checks.js';
7
+ import { defaultSvedocsMessages, isResolvedConfig, resolveSvedocsConfig } from './config.js';
8
+ import { extractMarkdownLinks } from './links.js';
9
+ import { createPageTree, wirePrevNext } from './navigation.js';
10
+ import { resolveSvedocsHref } from './routes.js';
11
+ import { createPageSearchRecords, createSearchRecords } from './search.js';
12
+ import { booleanFrontmatter, formatRoutePathForBuildMode, normalizePath, numberFrontmatter, stringArrayFrontmatter, stringFrontmatter, stripInlineMarkdown, titleFromSegment } from './utils.js';
13
+ export async function loadSvedocsContent(options = {}) {
14
+ const projectRoot = options.projectRoot ?? process.cwd();
15
+ const rawConfig = isResolvedConfig(options.config) ? undefined : options.config;
16
+ const config = isResolvedConfig(options.config)
17
+ ? options.config
18
+ : resolveSvedocsConfig(options.config ?? {});
19
+ const markdownOptions = createMarkdownCompileOptions(rawConfig, config);
20
+ const files = await fg(config.content.include, {
21
+ cwd: projectRoot,
22
+ absolute: false,
23
+ ignore: config.content.exclude,
24
+ onlyFiles: true
25
+ });
26
+ const entries = files
27
+ .filter((file) => isContentFile(file))
28
+ .sort()
29
+ .map((file) => {
30
+ const kind = inferKind(file, config);
31
+ return { file, kind, route: createRouteInfo(file, kind, config) };
32
+ });
33
+ const routeTargets = entries.map(({ file, kind, route }) => ({
34
+ kind,
35
+ sourcePath: file,
36
+ routePath: route.routePath,
37
+ scopePath: route.scopePath,
38
+ ...(route.locale ? { locale: route.locale } : {})
39
+ }));
40
+ const pages = await Promise.all(entries.map((entry) => (loadContentFile(projectRoot, entry, routeTargets, config, markdownOptions))));
41
+ const sorted = pages.sort((a, b) => a.routePath.localeCompare(b.routePath));
42
+ const tree = createPageTree(sorted);
43
+ wirePrevNext(sorted, tree);
44
+ const manifest = {
45
+ config,
46
+ pages: sorted,
47
+ tree,
48
+ search: createSearchRecords(sorted),
49
+ issues: []
50
+ };
51
+ manifest.issues = await checkSvedocsContent(manifest, projectRoot);
52
+ return manifest;
53
+ }
54
+ function isContentFile(file) {
55
+ return /\.(md|mdx|svx)$/.test(file);
56
+ }
57
+ async function loadContentFile(projectRoot, entry, routeTargets, config, markdownOptions) {
58
+ const { file, kind, route } = entry;
59
+ const sourcePath = path.join(projectRoot, file);
60
+ const raw = await readFile(sourcePath, 'utf8');
61
+ const fileStats = await stat(sourcePath);
62
+ const parsed = matter(raw);
63
+ const markdown = parsed.content.trim();
64
+ const frontmatter = parsed.data;
65
+ const discoveredTitle = extractFirstMarkdownTitle(markdown);
66
+ const titleFromFrontmatter = stringFrontmatter(frontmatter.title);
67
+ const renderMarkdown = stripLeadingTitleHeading(markdown, titleFromFrontmatter ?? discoveredTitle);
68
+ const routePath = route.routePath;
69
+ const currentRoute = {
70
+ kind,
71
+ sourcePath: file,
72
+ routePath,
73
+ scopePath: route.scopePath,
74
+ ...(route.locale ? { locale: route.locale } : {})
75
+ };
76
+ const compiled = await compileMarkdown(renderMarkdown, {
77
+ ...markdownOptions,
78
+ messages: createMarkdownMessages(config, route.locale),
79
+ resolveHref: (href) => resolveSvedocsHref({
80
+ href,
81
+ pages: routeTargets,
82
+ config,
83
+ page: currentRoute
84
+ }).href
85
+ });
86
+ const title = titleFromFrontmatter ?? discoveredTitle ?? compiled.title ?? titleFromRoute(routePath);
87
+ const navTitle = stringFrontmatter(frontmatter.navTitle) ?? stringFrontmatter(frontmatter.nav_title);
88
+ const description = stringFrontmatter(frontmatter.description);
89
+ const order = numberFrontmatter(frontmatter.order);
90
+ const hidden = booleanFrontmatter(frontmatter.hidden);
91
+ const collapsed = booleanFrontmatter(frontmatter.collapsed);
92
+ const section = booleanFrontmatter(frontmatter.section);
93
+ const icon = stringFrontmatter(frontmatter.icon);
94
+ const keywords = stringArrayFrontmatter(frontmatter.keywords);
95
+ const type = stringFrontmatter(frontmatter.type) ?? stringFrontmatter(frontmatter.ogType) ?? stringFrontmatter(frontmatter.og_type);
96
+ const author = stringFrontmatter(frontmatter.author) ?? config.seo.defaultAuthor;
97
+ const robots = stringFrontmatter(frontmatter.robots);
98
+ const head = normalizeSeoHead(frontmatter.head);
99
+ const publishedTime = dateFrontmatter(frontmatter.publishedTime)
100
+ ?? dateFrontmatter(frontmatter.published_time)
101
+ ?? dateFrontmatter(frontmatter.published)
102
+ ?? dateFrontmatter(frontmatter.date);
103
+ const updatedTime = dateFrontmatter(frontmatter.updatedTime)
104
+ ?? dateFrontmatter(frontmatter.updated_time)
105
+ ?? dateFrontmatter(frontmatter.updated);
106
+ const canonical = stringFrontmatter(frontmatter.canonical) ?? createPageCanonicalUrl(config, routePath);
107
+ const image = stringFrontmatter(frontmatter.image);
108
+ const page = {
109
+ id: createPageId(file),
110
+ sourcePath: file,
111
+ routePath,
112
+ scopePath: route.scopePath,
113
+ slug: route.slug,
114
+ ...(route.locale ? { locale: route.locale } : {}),
115
+ kind,
116
+ title,
117
+ ...(navTitle ? { navTitle } : {}),
118
+ ...(description ? { description } : {}),
119
+ ...(typeof order === 'number' ? { order } : {}),
120
+ ...(hidden === true ? { hidden } : {}),
121
+ ...(typeof collapsed === 'boolean' ? { collapsed } : {}),
122
+ ...(section === true ? { section } : {}),
123
+ ...(icon ? { icon } : {}),
124
+ html: compiled.html,
125
+ plainText: compiled.plainText,
126
+ headings: compiled.headings,
127
+ links: extractMarkdownLinks(markdown),
128
+ codeBlocks: compiled.codeBlocks,
129
+ frontmatter,
130
+ seo: {
131
+ title,
132
+ ...(description ? { description } : {}),
133
+ ...(canonical ? { canonical } : {}),
134
+ ...(image ? { image } : {}),
135
+ ...(keywords.length > 0 ? { keywords } : {}),
136
+ ...(type ? { type } : {}),
137
+ ...(author ? { author } : {}),
138
+ ...(publishedTime ? { publishedTime } : {}),
139
+ ...(updatedTime ? { updatedTime } : {}),
140
+ ...(robots ? { robots } : {}),
141
+ ...(head ? { head } : {})
142
+ },
143
+ search: [],
144
+ lastUpdated: fileStats.mtime.toISOString(),
145
+ ...(config.source.editBaseUrl ? { editUrl: createEditUrl(config.source.editBaseUrl, file) } : {})
146
+ };
147
+ page.search = createPageSearchRecords(page, renderMarkdown);
148
+ return page;
149
+ }
150
+ function normalizeSeoHead(value) {
151
+ if (!value || typeof value !== 'object' || Array.isArray(value))
152
+ return undefined;
153
+ const input = value;
154
+ const meta = Array.isArray(input.meta) ? input.meta.map(normalizeSeoMetaTag).filter((tag) => Boolean(tag)) : [];
155
+ const links = Array.isArray(input.links) ? input.links.map(normalizeSeoLinkTag).filter((tag) => Boolean(tag)) : [];
156
+ const jsonLdInput = input.jsonLd ?? input.jsonld ?? input['json-ld'];
157
+ const jsonLd = Array.isArray(jsonLdInput) ? jsonLdInput.map(normalizeSeoJsonLd).filter((tag) => Boolean(tag)) : [];
158
+ if (meta.length === 0 && links.length === 0 && jsonLd.length === 0)
159
+ return undefined;
160
+ return {
161
+ ...(meta.length > 0 ? { meta } : {}),
162
+ ...(links.length > 0 ? { links } : {}),
163
+ ...(jsonLd.length > 0 ? { jsonLd } : {})
164
+ };
165
+ }
166
+ function normalizeSeoMetaTag(value) {
167
+ if (!value || typeof value !== 'object' || Array.isArray(value))
168
+ return undefined;
169
+ const input = value;
170
+ const content = stringFrontmatter(input.content);
171
+ if (!content)
172
+ return undefined;
173
+ const tag = { content };
174
+ const name = stringFrontmatter(input.name);
175
+ const property = stringFrontmatter(input.property);
176
+ const httpEquiv = stringFrontmatter(input.httpEquiv) ?? stringFrontmatter(input['http-equiv']);
177
+ const itemprop = stringFrontmatter(input.itemprop);
178
+ if (name)
179
+ tag.name = name;
180
+ if (property)
181
+ tag.property = property;
182
+ if (httpEquiv)
183
+ tag.httpEquiv = httpEquiv;
184
+ if (itemprop)
185
+ tag.itemprop = itemprop;
186
+ return tag.name || tag.property || tag.httpEquiv || tag.itemprop ? tag : undefined;
187
+ }
188
+ function normalizeSeoLinkTag(value) {
189
+ if (!value || typeof value !== 'object' || Array.isArray(value))
190
+ return undefined;
191
+ const input = value;
192
+ const rel = stringFrontmatter(input.rel);
193
+ const href = stringFrontmatter(input.href);
194
+ if (!rel || !href)
195
+ return undefined;
196
+ const tag = { rel, href };
197
+ const hreflang = stringFrontmatter(input.hreflang);
198
+ const type = stringFrontmatter(input.type);
199
+ const media = stringFrontmatter(input.media);
200
+ const title = stringFrontmatter(input.title);
201
+ const sizes = stringFrontmatter(input.sizes);
202
+ const as = stringFrontmatter(input.as);
203
+ const crossorigin = stringFrontmatter(input.crossorigin);
204
+ if (hreflang)
205
+ tag.hreflang = hreflang;
206
+ if (type)
207
+ tag.type = type;
208
+ if (media)
209
+ tag.media = media;
210
+ if (title)
211
+ tag.title = title;
212
+ if (sizes)
213
+ tag.sizes = sizes;
214
+ if (as)
215
+ tag.as = as;
216
+ if (crossorigin)
217
+ tag.crossorigin = crossorigin;
218
+ return tag;
219
+ }
220
+ function normalizeSeoJsonLd(value) {
221
+ return value && typeof value === 'object' && !Array.isArray(value) ? value : undefined;
222
+ }
223
+ function createMarkdownCompileOptions(rawConfig, resolvedConfig) {
224
+ return {
225
+ ...(rawConfig?.markdown?.remarkPlugins ? { remarkPlugins: rawConfig.markdown.remarkPlugins } : {}),
226
+ ...(rawConfig?.markdown?.rehypePlugins ? { rehypePlugins: rawConfig.markdown.rehypePlugins } : {}),
227
+ ...(rawConfig?.markdown?.shiki?.transformers ? { shikiTransformers: rawConfig.markdown.shiki.transformers } : {}),
228
+ ...(resolvedConfig.theme.defaultMode === 'system'
229
+ ? {
230
+ codeThemes: {
231
+ light: resolvedConfig.theme.codeTheme.light,
232
+ dark: resolvedConfig.theme.codeTheme.dark
233
+ }
234
+ }
235
+ : { codeTheme: resolvedConfig.theme.codeTheme[resolvedConfig.theme.defaultMode] }),
236
+ codeLineNumbers: resolvedConfig.theme.code.lineNumbers,
237
+ codeWrap: resolvedConfig.theme.code.wrap,
238
+ codeCopyButton: resolvedConfig.theme.code.copyButton
239
+ };
240
+ }
241
+ function createMarkdownMessages(config, locale) {
242
+ const messages = config.i18n.messages[locale ?? config.i18n.defaultLocale ?? 'en']
243
+ ?? config.i18n.messages[config.i18n.defaultLocale ?? 'en']
244
+ ?? config.i18n.messages.en
245
+ ?? defaultSvedocsMessages;
246
+ return {
247
+ 'code.copy': messages['code.copy'],
248
+ 'code.copyDiff': messages['code.copyDiff'],
249
+ 'diff.label': messages['diff.label'],
250
+ 'diff.aria': messages['diff.aria'],
251
+ 'diff.before': messages['diff.before'],
252
+ 'diff.after': messages['diff.after'],
253
+ 'heading.anchor': messages['heading.anchor']
254
+ };
255
+ }
256
+ function createEditUrl(baseUrl, sourcePath) {
257
+ return `${baseUrl.replace(/\/$/, '')}/${normalizePath(sourcePath)}`;
258
+ }
259
+ function createPageCanonicalUrl(config, routePath) {
260
+ if (!config.site.url)
261
+ return undefined;
262
+ return new URL(formatRoutePathForBuildMode(routePath, config.build.mode), config.site.url).href;
263
+ }
264
+ function dateFrontmatter(value) {
265
+ const text = stringFrontmatter(value);
266
+ if (text)
267
+ return text;
268
+ if (value instanceof Date && !Number.isNaN(value.valueOf()))
269
+ return value.toISOString();
270
+ return undefined;
271
+ }
272
+ function inferKind(file, config) {
273
+ return normalizePath(file).startsWith(`${normalizePath(config.content.docs)}/`) ? 'doc' : 'page';
274
+ }
275
+ function createRouteInfo(file, kind, config) {
276
+ const normalized = normalizePath(file);
277
+ const base = normalizePath(kind === 'doc' ? config.content.docs : config.content.pages);
278
+ const relative = normalized.startsWith(`${base}/`) ? normalized.slice(base.length + 1) : normalized;
279
+ const withoutExt = relative.replace(/\.(md|mdx|svx)$/, '');
280
+ const rawParts = withoutExt.split('/').filter(Boolean);
281
+ const parts = rawParts.at(-1) === 'index' ? rawParts.slice(0, -1) : [...rawParts];
282
+ const routeParts = kind === 'doc' ? ['docs'] : [];
283
+ const locale = consumeLocale(parts, config);
284
+ const scopeParts = [...parts];
285
+ if (locale && shouldPrefixLocale(locale, config)) {
286
+ routeParts.push(findLocalePath(locale, config) ?? locale);
287
+ }
288
+ routeParts.push(...parts);
289
+ const routePath = `/${routeParts.join('/')}`.replace(/\/$/, '') || '/';
290
+ const scopePath = `/${[...(kind === 'doc' ? ['docs'] : []), ...scopeParts].join('/')}`.replace(/\/$/, '') || '/';
291
+ return {
292
+ routePath,
293
+ scopePath,
294
+ slug: routePath.split('/').filter(Boolean),
295
+ ...(locale ? { locale } : {})
296
+ };
297
+ }
298
+ function consumeLocale(parts, config) {
299
+ if (config.i18n.locales.length === 0)
300
+ return undefined;
301
+ const match = config.i18n.locales.find((locale) => locale.path === parts[0]);
302
+ if (match) {
303
+ parts.shift();
304
+ return match.code;
305
+ }
306
+ return config.i18n.defaultLocale;
307
+ }
308
+ function shouldPrefixLocale(locale, config) {
309
+ return config.i18n.prefixDefaultLocale || locale !== config.i18n.defaultLocale;
310
+ }
311
+ function findLocalePath(locale, config) {
312
+ return config.i18n.locales.find((item) => item.code === locale)?.path;
313
+ }
314
+ function createPageId(file) {
315
+ return normalizePath(file).replace(/\.(md|mdx|svx)$/, '').replace(/[^a-zA-Z0-9]+/g, '-');
316
+ }
317
+ function titleFromRoute(routePath) {
318
+ const last = routePath.split('/').filter(Boolean).at(-1) ?? 'home';
319
+ return titleFromSegment(last);
320
+ }
321
+ function extractFirstMarkdownTitle(markdown) {
322
+ const match = /^#\s+(.+?)\s*#*$/m.exec(markdown);
323
+ return match?.[1] ? stripInlineMarkdown(match[1]) : undefined;
324
+ }
325
+ function stripLeadingTitleHeading(markdown, title) {
326
+ if (!title)
327
+ return markdown;
328
+ const lines = markdown.split(/\r?\n/);
329
+ const firstContentIndex = lines.findIndex((line) => line.trim().length > 0);
330
+ if (firstContentIndex < 0)
331
+ return markdown;
332
+ const match = /^#\s+(.+?)\s*#*$/.exec(lines[firstContentIndex] ?? '');
333
+ if (!match?.[1])
334
+ return markdown;
335
+ const heading = stripInlineMarkdown(match[1]);
336
+ if (heading !== title)
337
+ return markdown;
338
+ lines.splice(firstContentIndex, 1);
339
+ return lines.join('\n').trim();
340
+ }
@@ -0,0 +1,5 @@
1
+ import type { SvedocsConfig } from '../config.js';
2
+ import type { SvedocsResolvedConfig } from './types.js';
3
+ export { defaultSvedocsMessages } from './messages.js';
4
+ export declare function resolveSvedocsI18nConfig(config: SvedocsConfig): SvedocsResolvedConfig['i18n'];
5
+ //# sourceMappingURL=i18n.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/core/i18n.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAkC,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAGxF,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAEvD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,aAAa,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAqB7F"}
@@ -0,0 +1,117 @@
1
+ import { createBaseMessages, mergeMessages } from './messages.js';
2
+ export { defaultSvedocsMessages } from './messages.js';
3
+ export function resolveSvedocsI18nConfig(config) {
4
+ const baseMessages = createBaseMessages(config);
5
+ if (config.i18n === false) {
6
+ return {
7
+ locales: [],
8
+ prefixDefaultLocale: false,
9
+ messages: {
10
+ en: baseMessages
11
+ }
12
+ };
13
+ }
14
+ const locales = (config.i18n?.locales ?? []).map(normalizeLocale);
15
+ const defaultLocale = config.i18n?.defaultLocale ?? locales[0]?.code;
16
+ const prefixDefaultLocale = config.i18n?.prefixDefaultLocale ?? false;
17
+ validateI18nConfig(locales, defaultLocale, prefixDefaultLocale, config.i18n?.messages);
18
+ return {
19
+ ...(defaultLocale ? { defaultLocale } : {}),
20
+ locales,
21
+ prefixDefaultLocale,
22
+ messages: resolveI18nMessages(locales, defaultLocale, baseMessages, config.i18n?.messages)
23
+ };
24
+ }
25
+ function normalizeLocale(locale) {
26
+ if (typeof locale === 'string') {
27
+ return {
28
+ code: locale,
29
+ label: locale,
30
+ path: locale
31
+ };
32
+ }
33
+ return {
34
+ code: locale.code,
35
+ label: locale.label ?? locale.code,
36
+ path: locale.path ?? locale.code,
37
+ ...(locale.hreflang ? { hreflang: locale.hreflang } : {}),
38
+ ...(locale.dir ? { dir: locale.dir } : {})
39
+ };
40
+ }
41
+ function validateI18nConfig(locales, defaultLocale, prefixDefaultLocale, messages) {
42
+ const codes = new Map();
43
+ const paths = new Map();
44
+ const languageTags = new Map();
45
+ for (const locale of locales) {
46
+ assertLocaleCode(locale.code);
47
+ assertLocalePath(locale.path, locale.code);
48
+ if (!locale.label.trim()) {
49
+ throw new Error(`i18n locale label for "${locale.code}" must not be empty.`);
50
+ }
51
+ assertLanguageTag(locale.hreflang ?? locale.code, locale.code);
52
+ assertUniqueLocaleValue(codes, locale.code, locale.code, 'code');
53
+ assertUniqueLocaleValue(paths, locale.path, locale.code, 'path');
54
+ assertUniqueLocaleValue(languageTags, locale.hreflang ?? locale.code, locale.code, 'language tag');
55
+ }
56
+ if (defaultLocale && locales.length === 0) {
57
+ throw new Error('i18n.defaultLocale requires at least one configured locale.');
58
+ }
59
+ if (defaultLocale && !locales.some((locale) => locale.code === defaultLocale)) {
60
+ throw new Error(`i18n.defaultLocale "${defaultLocale}" must match a configured locale code.`);
61
+ }
62
+ if (prefixDefaultLocale && locales.length === 0) {
63
+ throw new Error('i18n.prefixDefaultLocale requires at least one configured locale.');
64
+ }
65
+ const messageLocales = new Set(['en', ...(defaultLocale ? [defaultLocale] : []), ...locales.map((locale) => locale.code)]);
66
+ for (const code of Object.keys(messages ?? {})) {
67
+ if (!messageLocales.has(code)) {
68
+ throw new Error(`i18n.messages contains unknown locale "${code}". Add it to i18n.locales first.`);
69
+ }
70
+ }
71
+ }
72
+ function assertLocaleCode(code) {
73
+ if (!/^[A-Za-z0-9]+(?:-[A-Za-z0-9]+)*$/.test(code)) {
74
+ throw new Error(`i18n locale code "${code}" must be a non-empty language-style identifier such as "en" or "pt-BR".`);
75
+ }
76
+ }
77
+ function assertLocalePath(localePath, code) {
78
+ if (!/^[A-Za-z0-9][A-Za-z0-9._~-]*$/.test(localePath) || localePath === '.' || localePath === '..') {
79
+ throw new Error(`i18n locale path "${localePath}" for "${code}" must be one non-empty URL-safe segment.`);
80
+ }
81
+ if (localePath.toLowerCase() === 'docs') {
82
+ throw new Error(`i18n locale path "${localePath}" for "${code}" conflicts with the reserved /docs route.`);
83
+ }
84
+ }
85
+ function assertLanguageTag(languageTag, code) {
86
+ try {
87
+ new Intl.Locale(languageTag);
88
+ }
89
+ catch {
90
+ throw new Error(`i18n hreflang "${languageTag}" for "${code}" must be a valid BCP 47 language tag.`);
91
+ }
92
+ }
93
+ function assertUniqueLocaleValue(values, value, code, field) {
94
+ const normalized = value.toLowerCase();
95
+ const existing = values.get(normalized);
96
+ if (existing) {
97
+ throw new Error(`i18n locale ${field} "${value}" is shared by "${existing}" and "${code}".`);
98
+ }
99
+ values.set(normalized, code);
100
+ }
101
+ function resolveI18nMessages(locales, defaultLocale, baseMessages, messages) {
102
+ const base = mergeMessages(baseMessages, messages?.en);
103
+ const codes = new Set(['en']);
104
+ if (defaultLocale)
105
+ codes.add(defaultLocale);
106
+ for (const locale of locales)
107
+ codes.add(locale.code);
108
+ for (const code of Object.keys(messages ?? {}))
109
+ codes.add(code);
110
+ const resolved = {};
111
+ for (const code of codes) {
112
+ resolved[code] = code === 'en'
113
+ ? base
114
+ : mergeMessages(base, messages?.[code]);
115
+ }
116
+ return resolved;
117
+ }
@@ -0,0 +1,5 @@
1
+ import type { SvedocsContentIssue, SvedocsContentManifest, SvedocsLinkReference, SvedocsPage } from './types.js';
2
+ export declare function extractMarkdownLinks(markdown: string): SvedocsLinkReference[];
3
+ export declare function createLinkCheckContext(manifest: SvedocsContentManifest): SvedocsContentManifest;
4
+ export declare function checkLink(page: SvedocsPage, link: SvedocsLinkReference, context: ReturnType<typeof createLinkCheckContext>): SvedocsContentIssue | undefined;
5
+ //# sourceMappingURL=links.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"links.d.ts","sourceRoot":"","sources":["../../src/core/links.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAIjH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,oBAAoB,EAAE,CAE7E;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,sBAAsB,0BAEtE;AAED,wBAAgB,SAAS,CACvB,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,oBAAoB,EAC1B,OAAO,EAAE,UAAU,CAAC,OAAO,sBAAsB,CAAC,GACjD,mBAAmB,GAAG,SAAS,CAwBjC"}
@@ -0,0 +1,60 @@
1
+ import GithubSlugger from 'github-slugger';
2
+ import { extractMarkdownLinksFromAst } from '../mdx/ast.js';
3
+ import { resolveSvedocsHref } from './routes.js';
4
+ export function extractMarkdownLinks(markdown) {
5
+ return extractMarkdownLinksFromAst(markdown);
6
+ }
7
+ export function createLinkCheckContext(manifest) {
8
+ return manifest;
9
+ }
10
+ export function checkLink(page, link, context) {
11
+ if (['asset', 'external', 'mailto', 'tel'].includes(link.kind))
12
+ return undefined;
13
+ const target = resolveLinkTarget(page, link, context);
14
+ if (!target.page) {
15
+ return {
16
+ code: 'broken-link',
17
+ severity: 'error',
18
+ message: `${page.sourcePath}:${link.line} links to missing page ${link.href}.`,
19
+ pageId: page.id,
20
+ sourcePath: page.sourcePath,
21
+ href: link.href
22
+ };
23
+ }
24
+ if (target.hash && !knownAnchors(target.page).has(target.hash)) {
25
+ return {
26
+ code: 'broken-anchor',
27
+ severity: 'error',
28
+ message: `${page.sourcePath}:${link.line} links to missing anchor #${target.hash} on ${target.page.routePath}.`,
29
+ pageId: page.id,
30
+ sourcePath: page.sourcePath,
31
+ href: link.href
32
+ };
33
+ }
34
+ return undefined;
35
+ }
36
+ function resolveLinkTarget(page, link, context) {
37
+ const parts = splitHref(link.href);
38
+ if (!parts.pathname && parts.hash)
39
+ return { page, hash: parts.hash };
40
+ const resolved = resolveSvedocsHref({
41
+ href: link.href,
42
+ page,
43
+ pages: context.pages,
44
+ config: context.config
45
+ });
46
+ return { page: resolved.page, ...(parts.hash ? { hash: parts.hash } : {}) };
47
+ }
48
+ function splitHref(href) {
49
+ const [withoutHash = '', hashWithQuery] = href.trim().split('#');
50
+ const [pathname = ''] = withoutHash.split('?');
51
+ const [hash] = (hashWithQuery ?? '').split('?');
52
+ return {
53
+ pathname,
54
+ ...(hash ? { hash: decodeURIComponent(hash) } : {})
55
+ };
56
+ }
57
+ function knownAnchors(page) {
58
+ const slugger = new GithubSlugger();
59
+ return new Set([slugger.slug(page.title), ...page.headings.map((heading) => heading.id)]);
60
+ }
@@ -0,0 +1,149 @@
1
+ import type { SvedocsConfig } from '../config.js';
2
+ import type { SvedocsMessages } from './types.js';
3
+ export declare const defaultSvedocsMessages: {
4
+ 'nav.primary': string;
5
+ 'nav.docs': string;
6
+ 'nav.configuration': string;
7
+ 'nav.api': string;
8
+ 'nav.documentation': string;
9
+ 'nav.footer': string;
10
+ 'nav.social': string;
11
+ 'nav.mobile.open': string;
12
+ 'nav.mobile.close': string;
13
+ 'nav.skipToContent': string;
14
+ 'scope.group': string;
15
+ 'scope.locale': string;
16
+ 'scope.localeOptions': string;
17
+ 'scope.langShort': string;
18
+ 'search.trigger': string;
19
+ 'search.dialog': string;
20
+ 'search.query': string;
21
+ 'search.placeholder': string;
22
+ 'search.results': string;
23
+ 'search.loading': string;
24
+ 'search.loadingIndex': string;
25
+ 'search.indexError': string;
26
+ 'search.remoteFallback': string;
27
+ 'search.empty': string;
28
+ 'search.fetchUnavailable': string;
29
+ 'search.requestError': string;
30
+ 'search.failed': string;
31
+ 'ask.label': string;
32
+ 'ask.placeholder': string;
33
+ 'ask.welcome': string;
34
+ 'ask.empty': string;
35
+ 'ask.newChat': string;
36
+ 'ask.close': string;
37
+ 'ask.thinking': string;
38
+ 'ask.send': string;
39
+ 'ask.suggestion.1': string;
40
+ 'ask.suggestion.2': string;
41
+ 'ask.suggestion.3': string;
42
+ 'ask.fetchUnavailable': string;
43
+ 'ask.requestError': string;
44
+ 'ask.failed': string;
45
+ 'ask.streamUnreadable': string;
46
+ 'ask.localSource': string;
47
+ 'ask.localSources': string;
48
+ 'ask.localEmpty': string;
49
+ 'ask.fallbackSource': string;
50
+ 'ask.fallbackSources': string;
51
+ 'ask.fallbackReady': string;
52
+ 'ask.sourceTitle': string;
53
+ 'toc.label': string;
54
+ 'heading.anchor': string;
55
+ 'article.kind.doc': string;
56
+ 'article.kind.page': string;
57
+ 'article.breadcrumb': string;
58
+ 'article.updated': string;
59
+ 'article.edit': string;
60
+ 'article.previous': string;
61
+ 'article.next': string;
62
+ 'code.copy': string;
63
+ 'code.copied': string;
64
+ 'code.copyDiff': string;
65
+ 'diff.label': string;
66
+ 'diff.aria': string;
67
+ 'diff.before': string;
68
+ 'diff.after': string;
69
+ 'tools.label': string;
70
+ 'tools.backToTop': string;
71
+ 'theme.switch': string;
72
+ 'theme.light': string;
73
+ 'theme.dark': string;
74
+ 'home.kicker': string;
75
+ 'home.primaryAction': string;
76
+ 'home.features': string;
77
+ 'home.card.start.label': string;
78
+ 'home.card.start.title': string;
79
+ 'home.card.start.description': string;
80
+ 'home.card.install.label': string;
81
+ 'home.card.install.title': string;
82
+ 'home.card.install.description': string;
83
+ 'home.card.write.label': string;
84
+ 'home.card.write.title': string;
85
+ 'home.card.write.description': string;
86
+ 'home.card.integrate.label': string;
87
+ 'home.card.integrate.title': string;
88
+ 'home.card.integrate.description': string;
89
+ 'footer.text': string;
90
+ 'error.notFound.title': string;
91
+ 'error.notFound.description': string;
92
+ 'error.generic.title': string;
93
+ 'error.generic.description': string;
94
+ 'error.status': string;
95
+ 'error.home': string;
96
+ 'error.docs': string;
97
+ 'render.label': string;
98
+ 'render.title': string;
99
+ 'render.message': string;
100
+ 'render.details': string;
101
+ 'render.tryAgain': string;
102
+ 'render.reload': string;
103
+ 'render.docsHome': string;
104
+ 'render.layout.label': string;
105
+ 'render.layout.title': string;
106
+ 'render.layout.message': string;
107
+ 'render.header.label': string;
108
+ 'render.header.title': string;
109
+ 'render.header.message': string;
110
+ 'render.ask.label': string;
111
+ 'render.ask.title': string;
112
+ 'render.ask.message': string;
113
+ 'render.tools.label': string;
114
+ 'render.tools.title': string;
115
+ 'render.tools.message': string;
116
+ 'render.footer.label': string;
117
+ 'render.footer.title': string;
118
+ 'render.footer.message': string;
119
+ 'render.page.label': string;
120
+ 'render.page.title': string;
121
+ 'render.page.message': string;
122
+ 'render.article.label': string;
123
+ 'render.article.title': string;
124
+ 'render.article.message': string;
125
+ 'render.docs.label': string;
126
+ 'render.docs.title': string;
127
+ 'render.docs.message': string;
128
+ 'render.home.label': string;
129
+ 'render.home.title': string;
130
+ 'render.home.message': string;
131
+ 'render.error.label': string;
132
+ 'render.error.title': string;
133
+ 'render.error.message': string;
134
+ 'render.custom.label': string;
135
+ 'render.custom.title': string;
136
+ 'render.custom.message': string;
137
+ 'render.navigation.label': string;
138
+ 'render.navigation.title': string;
139
+ 'render.navigation.message': string;
140
+ 'render.outline.label': string;
141
+ 'render.outline.title': string;
142
+ 'render.outline.message': string;
143
+ 'render.errorUi.label': string;
144
+ 'render.errorUi.title': string;
145
+ 'render.errorUi.message': string;
146
+ };
147
+ export declare function createBaseMessages(config: SvedocsConfig): SvedocsMessages;
148
+ export declare function mergeMessages(base: SvedocsMessages, override: Partial<SvedocsMessages> | undefined): SvedocsMessages;
149
+ //# sourceMappingURL=messages.d.ts.map