svedocs 0.1.0-beta.2

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 (192) hide show
  1. package/LICENSE +5 -0
  2. package/README.md +38 -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 +19 -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 +30 -0
  16. package/dist/ai/runtime.d.ts.map +1 -0
  17. package/dist/ai/runtime.js +105 -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 +27 -0
  26. package/dist/cloudflare.d.ts.map +1 -0
  27. package/dist/cloudflare.js +146 -0
  28. package/dist/config.d.ts +311 -0
  29. package/dist/config.d.ts.map +1 -0
  30. package/dist/config.js +243 -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 +252 -0
  34. package/dist/core/config.d.ts +5 -0
  35. package/dist/core/config.d.ts.map +1 -0
  36. package/dist/core/config.js +182 -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 +211 -0
  40. package/dist/core/links.d.ts +8 -0
  41. package/dist/core/links.d.ts.map +1 -0
  42. package/dist/core/links.js +94 -0
  43. package/dist/core/navigation.d.ts +5 -0
  44. package/dist/core/navigation.d.ts.map +1 -0
  45. package/dist/core/navigation.js +144 -0
  46. package/dist/core/search.d.ts +5 -0
  47. package/dist/core/search.d.ts.map +1 -0
  48. package/dist/core/search.js +41 -0
  49. package/dist/core/types.d.ts +269 -0
  50. package/dist/core/types.d.ts.map +1 -0
  51. package/dist/core/types.js +4 -0
  52. package/dist/core/utils.d.ts +12 -0
  53. package/dist/core/utils.d.ts.map +1 -0
  54. package/dist/core/utils.js +52 -0
  55. package/dist/core.d.ts +8 -0
  56. package/dist/core.d.ts.map +1 -0
  57. package/dist/core.js +7 -0
  58. package/dist/index.d.ts +6 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +3 -0
  61. package/dist/mdx/ast.d.ts +32 -0
  62. package/dist/mdx/ast.d.ts.map +1 -0
  63. package/dist/mdx/ast.js +148 -0
  64. package/dist/mdx/code.d.ts +14 -0
  65. package/dist/mdx/code.d.ts.map +1 -0
  66. package/dist/mdx/code.js +315 -0
  67. package/dist/mdx/compile.d.ts +26 -0
  68. package/dist/mdx/compile.d.ts.map +1 -0
  69. package/dist/mdx/compile.js +63 -0
  70. package/dist/mdx/diff.d.ts +5 -0
  71. package/dist/mdx/diff.d.ts.map +1 -0
  72. package/dist/mdx/diff.js +160 -0
  73. package/dist/mdx/utils.d.ts +10 -0
  74. package/dist/mdx/utils.d.ts.map +1 -0
  75. package/dist/mdx/utils.js +64 -0
  76. package/dist/og/image.d.ts +21 -0
  77. package/dist/og/image.d.ts.map +1 -0
  78. package/dist/og/image.js +216 -0
  79. package/dist/og/metadata.d.ts +7 -0
  80. package/dist/og/metadata.d.ts.map +1 -0
  81. package/dist/og/metadata.js +160 -0
  82. package/dist/og/types.d.ts +59 -0
  83. package/dist/og/types.d.ts.map +1 -0
  84. package/dist/og/types.js +1 -0
  85. package/dist/og.d.ts +4 -0
  86. package/dist/og.d.ts.map +1 -0
  87. package/dist/og.js +3 -0
  88. package/dist/search/algolia.d.ts +10 -0
  89. package/dist/search/algolia.d.ts.map +1 -0
  90. package/dist/search/algolia.js +82 -0
  91. package/dist/search/cloudflare-sync.d.ts +5 -0
  92. package/dist/search/cloudflare-sync.d.ts.map +1 -0
  93. package/dist/search/cloudflare-sync.js +169 -0
  94. package/dist/search/cloudflare.d.ts +9 -0
  95. package/dist/search/cloudflare.d.ts.map +1 -0
  96. package/dist/search/cloudflare.js +115 -0
  97. package/dist/search/local.d.ts +9 -0
  98. package/dist/search/local.d.ts.map +1 -0
  99. package/dist/search/local.js +122 -0
  100. package/dist/search/runtime.d.ts +41 -0
  101. package/dist/search/runtime.d.ts.map +1 -0
  102. package/dist/search/runtime.js +151 -0
  103. package/dist/search/types.d.ts +172 -0
  104. package/dist/search/types.d.ts.map +1 -0
  105. package/dist/search/types.js +1 -0
  106. package/dist/search/typesense.d.ts +11 -0
  107. package/dist/search/typesense.d.ts.map +1 -0
  108. package/dist/search/typesense.js +91 -0
  109. package/dist/search/utils.d.ts +10 -0
  110. package/dist/search/utils.d.ts.map +1 -0
  111. package/dist/search/utils.js +55 -0
  112. package/dist/search.d.ts +8 -0
  113. package/dist/search.d.ts.map +1 -0
  114. package/dist/search.js +7 -0
  115. package/dist/svelte.d.ts +24 -0
  116. package/dist/svelte.d.ts.map +1 -0
  117. package/dist/svelte.js +51 -0
  118. package/dist/testing.d.ts +3 -0
  119. package/dist/testing.d.ts.map +1 -0
  120. package/dist/testing.js +23 -0
  121. package/dist/theme/AskAiPanel.svelte +433 -0
  122. package/dist/theme/AskAiPanel.svelte.d.ts +27 -0
  123. package/dist/theme/AskAiPanel.svelte.d.ts.map +1 -0
  124. package/dist/theme/Button.svelte +34 -0
  125. package/dist/theme/Button.svelte.d.ts +41 -0
  126. package/dist/theme/Button.svelte.d.ts.map +1 -0
  127. package/dist/theme/Checkbox.svelte +63 -0
  128. package/dist/theme/Checkbox.svelte.d.ts +45 -0
  129. package/dist/theme/Checkbox.svelte.d.ts.map +1 -0
  130. package/dist/theme/CodeBlock.svelte +6 -0
  131. package/dist/theme/CodeBlock.svelte.d.ts +22 -0
  132. package/dist/theme/CodeBlock.svelte.d.ts.map +1 -0
  133. package/dist/theme/DocPage.svelte +121 -0
  134. package/dist/theme/DocPage.svelte.d.ts +33 -0
  135. package/dist/theme/DocPage.svelte.d.ts.map +1 -0
  136. package/dist/theme/DocsApp.svelte +78 -0
  137. package/dist/theme/DocsApp.svelte.d.ts +63 -0
  138. package/dist/theme/DocsApp.svelte.d.ts.map +1 -0
  139. package/dist/theme/DocsLayout.svelte +167 -0
  140. package/dist/theme/DocsLayout.svelte.d.ts +40 -0
  141. package/dist/theme/DocsLayout.svelte.d.ts.map +1 -0
  142. package/dist/theme/FloatingToolbar.svelte +73 -0
  143. package/dist/theme/FloatingToolbar.svelte.d.ts +22 -0
  144. package/dist/theme/FloatingToolbar.svelte.d.ts.map +1 -0
  145. package/dist/theme/FormField.svelte +41 -0
  146. package/dist/theme/FormField.svelte.d.ts +35 -0
  147. package/dist/theme/FormField.svelte.d.ts.map +1 -0
  148. package/dist/theme/HomePage.svelte +228 -0
  149. package/dist/theme/HomePage.svelte.d.ts +58 -0
  150. package/dist/theme/HomePage.svelte.d.ts.map +1 -0
  151. package/dist/theme/Input.svelte +36 -0
  152. package/dist/theme/Input.svelte.d.ts +34 -0
  153. package/dist/theme/Input.svelte.d.ts.map +1 -0
  154. package/dist/theme/PageLayout.svelte +36 -0
  155. package/dist/theme/PageLayout.svelte.d.ts +31 -0
  156. package/dist/theme/PageLayout.svelte.d.ts.map +1 -0
  157. package/dist/theme/RootLayout.svelte +330 -0
  158. package/dist/theme/RootLayout.svelte.d.ts +40 -0
  159. package/dist/theme/RootLayout.svelte.d.ts.map +1 -0
  160. package/dist/theme/ScopeSwitcher.svelte +103 -0
  161. package/dist/theme/ScopeSwitcher.svelte.d.ts +24 -0
  162. package/dist/theme/ScopeSwitcher.svelte.d.ts.map +1 -0
  163. package/dist/theme/SearchDialog.svelte +253 -0
  164. package/dist/theme/SearchDialog.svelte.d.ts +28 -0
  165. package/dist/theme/SearchDialog.svelte.d.ts.map +1 -0
  166. package/dist/theme/Select.svelte +37 -0
  167. package/dist/theme/Select.svelte.d.ts +42 -0
  168. package/dist/theme/Select.svelte.d.ts.map +1 -0
  169. package/dist/theme/SidebarTree.svelte +136 -0
  170. package/dist/theme/SidebarTree.svelte.d.ts +24 -0
  171. package/dist/theme/SidebarTree.svelte.d.ts.map +1 -0
  172. package/dist/theme/Textarea.svelte +33 -0
  173. package/dist/theme/Textarea.svelte.d.ts +33 -0
  174. package/dist/theme/Textarea.svelte.d.ts.map +1 -0
  175. package/dist/theme/ThemeToggle.svelte +39 -0
  176. package/dist/theme/ThemeToggle.svelte.d.ts +21 -0
  177. package/dist/theme/ThemeToggle.svelte.d.ts.map +1 -0
  178. package/dist/theme/forms.d.ts +4 -0
  179. package/dist/theme/forms.d.ts.map +1 -0
  180. package/dist/theme/forms.js +3 -0
  181. package/dist/theme/index.d.ts +21 -0
  182. package/dist/theme/index.d.ts.map +1 -0
  183. package/dist/theme/index.js +19 -0
  184. package/dist/theme/portal.d.ts +5 -0
  185. package/dist/theme/portal.d.ts.map +1 -0
  186. package/dist/theme/portal.js +19 -0
  187. package/dist/theme/styles.css +3697 -0
  188. package/dist/virtual.d.ts +59 -0
  189. package/dist/vite.d.ts +10 -0
  190. package/dist/vite.d.ts.map +1 -0
  191. package/dist/vite.js +304 -0
  192. package/package.json +118 -0
@@ -0,0 +1,94 @@
1
+ import path from 'node:path';
2
+ import GithubSlugger from 'github-slugger';
3
+ import { extractMarkdownLinksFromAst } from '../mdx/ast.js';
4
+ import { normalizePath, stripContentExtension } from './utils.js';
5
+ export function extractMarkdownLinks(markdown) {
6
+ return extractMarkdownLinksFromAst(markdown);
7
+ }
8
+ export function createLinkCheckContext(manifest) {
9
+ const routeMap = new Map(manifest.pages.map((page) => [page.routePath, page]));
10
+ const sourceMap = new Map();
11
+ for (const page of manifest.pages) {
12
+ const source = stripContentExtension(normalizePath(page.sourcePath));
13
+ sourceMap.set(source, page);
14
+ if (source.endsWith('/index'))
15
+ sourceMap.set(source.slice(0, -'/index'.length), page);
16
+ }
17
+ return { routeMap, sourceMap };
18
+ }
19
+ export function checkLink(page, link, context) {
20
+ if (['asset', 'external', 'mailto', 'tel'].includes(link.kind))
21
+ return undefined;
22
+ const target = resolveLinkTarget(page, link, context);
23
+ if (!target.page) {
24
+ return {
25
+ code: 'broken-link',
26
+ severity: 'error',
27
+ message: `${page.sourcePath}:${link.line} links to missing page ${link.href}.`,
28
+ pageId: page.id,
29
+ sourcePath: page.sourcePath,
30
+ href: link.href
31
+ };
32
+ }
33
+ if (target.hash && !knownAnchors(target.page).has(target.hash)) {
34
+ return {
35
+ code: 'broken-anchor',
36
+ severity: 'error',
37
+ message: `${page.sourcePath}:${link.line} links to missing anchor #${target.hash} on ${target.page.routePath}.`,
38
+ pageId: page.id,
39
+ sourcePath: page.sourcePath,
40
+ href: link.href
41
+ };
42
+ }
43
+ return undefined;
44
+ }
45
+ function resolveLinkTarget(page, link, context) {
46
+ const parts = splitHref(link.href);
47
+ if (!parts.pathname && parts.hash)
48
+ return { page, hash: parts.hash };
49
+ if (parts.pathname.startsWith('/')) {
50
+ return {
51
+ page: context.routeMap.get(normalizeRouteTarget(parts.pathname)),
52
+ ...(parts.hash ? { hash: parts.hash } : {})
53
+ };
54
+ }
55
+ const sourceTarget = resolveSourceTarget(page, parts.pathname, context.sourceMap);
56
+ if (sourceTarget)
57
+ return { page: sourceTarget, ...(parts.hash ? { hash: parts.hash } : {}) };
58
+ const routeTarget = resolveRouteTarget(page, parts.pathname, context.routeMap);
59
+ return { page: routeTarget, ...(parts.hash ? { hash: parts.hash } : {}) };
60
+ }
61
+ function splitHref(href) {
62
+ const [withoutHash = '', hashWithQuery] = href.trim().split('#');
63
+ const [pathname = ''] = withoutHash.split('?');
64
+ const [hash] = (hashWithQuery ?? '').split('?');
65
+ return {
66
+ pathname,
67
+ ...(hash ? { hash: decodeURIComponent(hash) } : {})
68
+ };
69
+ }
70
+ function resolveSourceTarget(page, pathname, sourceMap) {
71
+ if (!pathname)
72
+ return page;
73
+ const sourceDir = path.posix.dirname(normalizePath(page.sourcePath));
74
+ const target = stripContentExtension(path.posix.normalize(path.posix.join(sourceDir, pathname)));
75
+ return sourceMap.get(target) ?? sourceMap.get(`${target}/index`);
76
+ }
77
+ function resolveRouteTarget(page, pathname, routeMap) {
78
+ if (!pathname)
79
+ return page;
80
+ const base = page.routePath === '/' ? '/' : path.posix.dirname(page.routePath);
81
+ const target = normalizeRouteTarget(path.posix.join(base, pathname));
82
+ return routeMap.get(target);
83
+ }
84
+ function normalizeRouteTarget(route) {
85
+ const normalized = path.posix
86
+ .normalize(`/${route.replace(/^\/+/, '')}`)
87
+ .replace(/\.(md|mdx|svx|html)$/i, '')
88
+ .replace(/\/index$/, '');
89
+ return normalized === '/' ? '/' : normalized.replace(/\/$/, '');
90
+ }
91
+ function knownAnchors(page) {
92
+ const slugger = new GithubSlugger();
93
+ return new Set([slugger.slug(page.title), ...page.headings.map((heading) => heading.id)]);
94
+ }
@@ -0,0 +1,5 @@
1
+ import type { SvedocsPage, SvedocsTreeItem } from './types.js';
2
+ export declare function createPageTree(pages?: readonly SvedocsPage[]): SvedocsTreeItem[];
3
+ export declare function flattenPageTree(tree?: readonly SvedocsTreeItem[]): SvedocsTreeItem[];
4
+ export declare function wirePrevNext(pages: SvedocsPage[], tree: SvedocsTreeItem[]): void;
5
+ //# sourceMappingURL=navigation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../src/core/navigation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAe/D,wBAAgB,cAAc,CAAC,KAAK,GAAE,SAAS,WAAW,EAAO,GAAG,eAAe,EAAE,CA8BpF;AAED,wBAAgB,eAAe,CAAC,IAAI,GAAE,SAAS,eAAe,EAAO,GAAG,eAAe,EAAE,CAExF;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,QAkBzE"}
@@ -0,0 +1,144 @@
1
+ import { createGroupId, titleFromSegment } from './utils.js';
2
+ export function createPageTree(pages = []) {
3
+ const docs = [...pages].filter((page) => page.kind === 'doc' && !page.hidden);
4
+ const pageByPath = new Map(docs.map((page) => [page.routePath, page]));
5
+ const nodeByPath = new Map();
6
+ const root = [];
7
+ for (const page of docs.sort(comparePagesForNavigation)) {
8
+ const segments = getDocRouteSegments(page);
9
+ let children = root;
10
+ const accumulated = [];
11
+ for (const [index, segment] of segments.entries()) {
12
+ const isDocsIndex = segments.length === 1 && segment === 'index';
13
+ const isLeaf = index === segments.length - 1;
14
+ if (!isDocsIndex)
15
+ accumulated.push(segment);
16
+ const nodePath = isDocsIndex ? '/docs' : `/docs/${accumulated.join('/')}`;
17
+ const sourcePage = pageByPath.get(nodePath);
18
+ const node = upsertTreeNode({
19
+ children,
20
+ nodeByPath,
21
+ nodePath,
22
+ segment,
23
+ page: sourcePage,
24
+ leafPage: isLeaf ? page : undefined
25
+ });
26
+ children = node.children;
27
+ }
28
+ }
29
+ return finalizeTree(root);
30
+ }
31
+ export function flattenPageTree(tree = []) {
32
+ return tree.flatMap((item) => [item, ...flattenPageTree(item.children ?? [])]);
33
+ }
34
+ export function wirePrevNext(pages, tree) {
35
+ const pageByPath = new Map(pages.map((page) => [page.routePath, page]));
36
+ const docs = flattenPageTree(tree)
37
+ .map((item) => item.path ? pageByPath.get(item.path) : undefined)
38
+ .filter((page) => Boolean(page && page.kind === 'doc' && !page.hidden));
39
+ for (const page of pages) {
40
+ delete page.prev;
41
+ delete page.next;
42
+ }
43
+ const docsByScope = groupDocsByScope(docs);
44
+ for (const scopedDocs of docsByScope.values()) {
45
+ for (const [index, page] of scopedDocs.entries()) {
46
+ const prev = scopedDocs[index - 1];
47
+ const next = scopedDocs[index + 1];
48
+ if (prev)
49
+ page.prev = { title: prev.navTitle ?? prev.title, path: prev.routePath };
50
+ if (next)
51
+ page.next = { title: next.navTitle ?? next.title, path: next.routePath };
52
+ }
53
+ }
54
+ }
55
+ function getDocRouteSegments(page) {
56
+ if (page.routePath === '/docs')
57
+ return ['index'];
58
+ return page.routePath.replace(/^\/docs\/?/, '').split('/').filter(Boolean);
59
+ }
60
+ function upsertTreeNode(input) {
61
+ const page = input.page ?? input.leafPage;
62
+ const existing = input.nodeByPath.get(input.nodePath);
63
+ if (existing) {
64
+ if (page)
65
+ applyPageToTreeItem(existing, page);
66
+ return existing;
67
+ }
68
+ const item = {
69
+ id: page?.id ?? createGroupId(input.nodePath),
70
+ title: page?.navTitle ?? page?.title ?? titleFromSegment(input.segment),
71
+ children: [],
72
+ _weight: page?.order ?? Number.POSITIVE_INFINITY,
73
+ ...(page ? { path: page.routePath } : {}),
74
+ ...(typeof page?.order === 'number' ? { order: page.order } : {}),
75
+ ...(typeof page?.collapsed === 'boolean' ? { collapsed: page.collapsed } : {}),
76
+ ...(page?.section === true ? { section: true } : {}),
77
+ ...(page?.icon ? { icon: page.icon } : {})
78
+ };
79
+ input.nodeByPath.set(input.nodePath, item);
80
+ input.children.push(item);
81
+ return item;
82
+ }
83
+ function applyPageToTreeItem(item, page) {
84
+ item.id = page.id;
85
+ item.title = page.navTitle ?? page.title;
86
+ item.path = page.routePath;
87
+ item._weight = page.order ?? item._weight;
88
+ if (typeof page.order === 'number')
89
+ item.order = page.order;
90
+ if (typeof page.collapsed === 'boolean')
91
+ item.collapsed = page.collapsed;
92
+ if (page.section === true)
93
+ item.section = true;
94
+ if (page.icon)
95
+ item.icon = page.icon;
96
+ }
97
+ function finalizeTree(items) {
98
+ for (const item of items) {
99
+ item._weight = Math.min(item._weight, ...item.children.map((child) => computeTreeWeight(child)));
100
+ }
101
+ return items
102
+ .sort(compareTreeItems)
103
+ .map((item) => {
104
+ const children = finalizeTree(item.children);
105
+ return {
106
+ id: item.id,
107
+ title: item.title,
108
+ ...(item.path ? { path: item.path } : {}),
109
+ ...(children.length > 0 ? { children } : {}),
110
+ ...(typeof item.collapsed === 'boolean' ? { collapsed: item.collapsed } : {}),
111
+ ...(typeof item.order === 'number' ? { order: item.order } : {}),
112
+ ...(item.section === true ? { section: true } : {}),
113
+ ...(item.icon ? { icon: item.icon } : {})
114
+ };
115
+ });
116
+ }
117
+ function computeTreeWeight(item) {
118
+ item._weight = Math.min(item._weight, ...item.children.map((child) => computeTreeWeight(child)));
119
+ return item._weight;
120
+ }
121
+ function compareTreeItems(a, b) {
122
+ const byWeight = a._weight - b._weight;
123
+ if (Number.isFinite(byWeight) && byWeight !== 0)
124
+ return byWeight;
125
+ if (a.path && b.path)
126
+ return a.path.localeCompare(b.path);
127
+ return a.title.localeCompare(b.title);
128
+ }
129
+ function comparePagesForNavigation(a, b) {
130
+ const orderA = a.order ?? Number.POSITIVE_INFINITY;
131
+ const orderB = b.order ?? Number.POSITIVE_INFINITY;
132
+ const byOrder = orderA - orderB;
133
+ return byOrder === 0 ? a.routePath.localeCompare(b.routePath) : byOrder;
134
+ }
135
+ function groupDocsByScope(docs) {
136
+ const groups = new Map();
137
+ for (const page of docs) {
138
+ const key = page.locale ?? '';
139
+ const group = groups.get(key) ?? [];
140
+ group.push(page);
141
+ groups.set(key, group);
142
+ }
143
+ return groups;
144
+ }
@@ -0,0 +1,5 @@
1
+ import type { SvedocsPage, SvedocsSearchRecord } from './types.js';
2
+ export declare function createSearchRecords(pages?: readonly SvedocsPage[]): SvedocsSearchRecord[];
3
+ export declare function createPageSearchRecords(page: SvedocsPage, markdown?: string): SvedocsSearchRecord[];
4
+ export declare function createPageSearchRecord(page: SvedocsPage): SvedocsSearchRecord;
5
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/core/search.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEnE,wBAAgB,mBAAmB,CAAC,KAAK,GAAE,SAAS,WAAW,EAAO,GAAG,mBAAmB,EAAE,CAE7F;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,mBAAmB,EAAE,CAInG;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,WAAW,GAAG,mBAAmB,CAa7E"}
@@ -0,0 +1,41 @@
1
+ import { extractMarkdownSections } from '../mdx/ast.js';
2
+ export function createSearchRecords(pages = []) {
3
+ return pages.flatMap((page) => page.search.length > 0 ? page.search : [createPageSearchRecord(page)]);
4
+ }
5
+ export function createPageSearchRecords(page, markdown) {
6
+ const pageRecord = createPageSearchRecord(page);
7
+ if (!markdown)
8
+ return [pageRecord];
9
+ return [pageRecord, ...createSectionSearchRecords(page, markdown)];
10
+ }
11
+ export function createPageSearchRecord(page) {
12
+ return {
13
+ id: `${page.id}:page`,
14
+ pageId: page.id,
15
+ url: page.routePath,
16
+ title: page.title,
17
+ content: page.plainText,
18
+ metadata: {
19
+ kind: page.kind,
20
+ sourcePath: page.sourcePath,
21
+ ...(page.locale ? { locale: page.locale } : {})
22
+ }
23
+ };
24
+ }
25
+ function createSectionSearchRecords(page, markdown) {
26
+ return extractMarkdownSections(markdown).map((section) => ({
27
+ id: `${page.id}:${section.id}`,
28
+ pageId: page.id,
29
+ url: `${page.routePath}#${section.id}`,
30
+ title: page.title,
31
+ section: section.title,
32
+ content: section.content,
33
+ metadata: {
34
+ kind: page.kind,
35
+ sourcePath: page.sourcePath,
36
+ ...(page.locale ? { locale: page.locale } : {}),
37
+ headingId: section.id,
38
+ headingDepth: section.depth
39
+ }
40
+ }));
41
+ }
@@ -0,0 +1,269 @@
1
+ export interface SvedocsSeo {
2
+ title: string;
3
+ description?: string;
4
+ canonical?: string;
5
+ image?: string;
6
+ keywords?: string[];
7
+ type?: string;
8
+ author?: string;
9
+ publishedTime?: string;
10
+ updatedTime?: string;
11
+ }
12
+ export interface SvedocsHeading {
13
+ id: string;
14
+ depth: 2 | 3 | 4;
15
+ text: string;
16
+ }
17
+ export interface SvedocsCodeBlock {
18
+ id: string;
19
+ language: string;
20
+ raw: string;
21
+ meta: string;
22
+ title?: string;
23
+ highlightLines: number[];
24
+ focusLines: number[];
25
+ diff: boolean;
26
+ diffMode?: 'unified' | 'split';
27
+ diffRows: SvedocsDiffRow[];
28
+ splitRows: SvedocsDiffSplitRow[];
29
+ addedLines: number;
30
+ removedLines: number;
31
+ noLineNumbers?: boolean;
32
+ wrap?: boolean;
33
+ }
34
+ export interface SvedocsDiffRow {
35
+ oldLine?: number;
36
+ newLine?: number;
37
+ kind: 'context' | 'add' | 'remove' | 'meta';
38
+ content: string;
39
+ }
40
+ export interface SvedocsDiffSplitRow {
41
+ kind: 'context' | 'change' | 'meta';
42
+ old?: SvedocsDiffRow;
43
+ new?: SvedocsDiffRow;
44
+ content?: string;
45
+ }
46
+ export interface SvedocsLocale {
47
+ code: string;
48
+ label: string;
49
+ path: string;
50
+ }
51
+ export interface SvedocsLink {
52
+ title: string;
53
+ path: string;
54
+ }
55
+ export interface SvedocsLinkReference {
56
+ href: string;
57
+ text: string;
58
+ kind: 'internal' | 'external' | 'anchor' | 'asset' | 'mailto' | 'tel';
59
+ line: number;
60
+ }
61
+ export interface SvedocsSearchRecord {
62
+ id: string;
63
+ pageId: string;
64
+ url: string;
65
+ title: string;
66
+ section?: string;
67
+ content: string;
68
+ metadata: Record<string, string | number | boolean | string[]>;
69
+ }
70
+ export interface SvedocsPage {
71
+ id: string;
72
+ sourcePath: string;
73
+ routePath: string;
74
+ scopePath: string;
75
+ slug: string[];
76
+ locale?: string;
77
+ kind: 'doc' | 'page';
78
+ title: string;
79
+ navTitle?: string;
80
+ description?: string;
81
+ order?: number;
82
+ hidden?: boolean;
83
+ collapsed?: boolean;
84
+ section?: boolean;
85
+ icon?: string;
86
+ html: string;
87
+ plainText: string;
88
+ headings: SvedocsHeading[];
89
+ links: SvedocsLinkReference[];
90
+ codeBlocks: SvedocsCodeBlock[];
91
+ frontmatter: Record<string, unknown>;
92
+ seo: SvedocsSeo;
93
+ search: SvedocsSearchRecord[];
94
+ prev?: SvedocsLink;
95
+ next?: SvedocsLink;
96
+ editUrl?: string;
97
+ lastUpdated?: string;
98
+ }
99
+ export interface SvedocsTreeItem {
100
+ id: string;
101
+ title: string;
102
+ path?: string;
103
+ children?: SvedocsTreeItem[];
104
+ collapsed?: boolean;
105
+ order?: number;
106
+ section?: boolean;
107
+ icon?: string;
108
+ }
109
+ export interface SvedocsOgTemplateNode {
110
+ type: string;
111
+ props: {
112
+ style?: Record<string, string | number>;
113
+ children?: string | SvedocsOgTemplateNode | SvedocsOgTemplateNode[];
114
+ [key: string]: unknown;
115
+ };
116
+ }
117
+ export type SvedocsOgTemplate = (input: {
118
+ title: string;
119
+ description?: string;
120
+ siteName?: string;
121
+ }) => SvedocsOgTemplateNode;
122
+ export interface SvedocsResolvedConfig {
123
+ site: {
124
+ name: string;
125
+ title: string;
126
+ description: string;
127
+ url?: string;
128
+ };
129
+ content: {
130
+ root: string;
131
+ docs: string;
132
+ pages: string;
133
+ include: string[];
134
+ exclude: string[];
135
+ };
136
+ build: {
137
+ mode: 'edge' | 'static' | 'spa';
138
+ };
139
+ theme: {
140
+ defaultMode: 'light' | 'dark' | 'system';
141
+ palette: {
142
+ accent: string;
143
+ neutral: string;
144
+ };
145
+ fonts: {
146
+ sans: string;
147
+ mono: string;
148
+ display: string;
149
+ };
150
+ radius: string;
151
+ codeTheme: {
152
+ light: string;
153
+ dark: string;
154
+ };
155
+ code: {
156
+ lineNumbers: boolean;
157
+ wrap: boolean;
158
+ };
159
+ brand: {
160
+ label: string;
161
+ href: string;
162
+ logo?: string;
163
+ mark: 'pixel' | false;
164
+ };
165
+ nav: Array<{
166
+ label: string;
167
+ href: string;
168
+ external?: boolean;
169
+ }>;
170
+ social: Array<{
171
+ label: string;
172
+ href: string;
173
+ external?: boolean;
174
+ }>;
175
+ footer: false | {
176
+ text: string;
177
+ links: Array<{
178
+ label: string;
179
+ href: string;
180
+ external?: boolean;
181
+ }>;
182
+ };
183
+ home: {
184
+ kicker: string;
185
+ primaryAction?: {
186
+ label: string;
187
+ href: string;
188
+ };
189
+ secondaryAction?: {
190
+ label: string;
191
+ href: string;
192
+ };
193
+ visual: {
194
+ type: 'pixel' | 'image';
195
+ src?: string;
196
+ alt: string;
197
+ };
198
+ };
199
+ };
200
+ search: {
201
+ enabled: boolean;
202
+ provider: string;
203
+ scope: 'current' | 'all';
204
+ };
205
+ ai: {
206
+ enabled: boolean;
207
+ provider: string;
208
+ scope: 'current' | 'all';
209
+ label: string;
210
+ placeholder: string;
211
+ suggestions: string[];
212
+ maxResults: number;
213
+ systemPrompt?: string;
214
+ welcomeMessage?: string;
215
+ };
216
+ seo: {
217
+ sitemap: boolean;
218
+ robots: boolean;
219
+ defaultAuthor?: string;
220
+ ogImage: false | {
221
+ template: string | SvedocsOgTemplate;
222
+ format: 'svg' | 'png';
223
+ outDir: string;
224
+ renderer: 'svg' | 'satori';
225
+ };
226
+ };
227
+ source: {
228
+ editBaseUrl?: string;
229
+ };
230
+ cloudflare: {
231
+ compatibilityDate: string;
232
+ aiSearch: {
233
+ binding: string;
234
+ instanceName: string;
235
+ namespace?: string;
236
+ remote: boolean;
237
+ };
238
+ };
239
+ checks: {
240
+ assets: boolean;
241
+ externalLinks: boolean;
242
+ translations: boolean;
243
+ };
244
+ i18n: {
245
+ defaultLocale?: string;
246
+ locales: SvedocsLocale[];
247
+ prefixDefaultLocale: boolean;
248
+ };
249
+ }
250
+ export interface SvedocsContentIssue {
251
+ code: 'missing-description' | 'duplicate-route' | 'duplicate-canonical' | 'broken-link' | 'broken-anchor' | 'broken-asset' | 'external-link-unchecked' | 'missing-translation' | 'spa-risk' | 'empty-search' | 'package-bin-missing' | 'package-export-missing' | 'package-file-missing' | 'package-license-missing' | 'package-publish-access-missing' | 'package-provenance-missing';
252
+ severity: 'error' | 'warning' | 'info';
253
+ message: string;
254
+ pageId?: string;
255
+ sourcePath?: string;
256
+ href?: string;
257
+ }
258
+ export interface SvedocsContentManifest {
259
+ config: SvedocsResolvedConfig;
260
+ pages: SvedocsPage[];
261
+ tree: SvedocsTreeItem[];
262
+ search: SvedocsSearchRecord[];
263
+ issues: SvedocsContentIssue[];
264
+ }
265
+ export declare const svedocsPackage: {
266
+ readonly name: "svedocs";
267
+ readonly version: "0.0.0";
268
+ };
269
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export const svedocsPackage = {
2
+ name: 'svedocs',
3
+ version: '0.0.0'
4
+ };
@@ -0,0 +1,12 @@
1
+ export declare function normalizePath(value: string): string;
2
+ export declare function stripContentExtension(value: string): string;
3
+ export declare function stripInlineMarkdown(value: string): string;
4
+ export declare function stripHtml(value: string): string;
5
+ export declare function titleFromSegment(segment: string): string;
6
+ export declare function stringFrontmatter(value: unknown): string | undefined;
7
+ export declare function numberFrontmatter(value: unknown): number | undefined;
8
+ export declare function booleanFrontmatter(value: unknown): boolean | undefined;
9
+ export declare function stringArrayFrontmatter(value: unknown): string[];
10
+ export declare function findDuplicates(values: string[]): string[];
11
+ export declare function createGroupId(value: string): string;
12
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/core/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMzD;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAMxD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAEpE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAEpE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,CAEtE;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,CAI/D;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAQzD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnD"}
@@ -0,0 +1,52 @@
1
+ export function normalizePath(value) {
2
+ return value.replace(/\\/g, '/');
3
+ }
4
+ export function stripContentExtension(value) {
5
+ return value.replace(/\.(md|mdx|svx)$/i, '');
6
+ }
7
+ export function stripInlineMarkdown(value) {
8
+ return value
9
+ .replace(/`([^`]+)`/g, '$1')
10
+ .replace(/\[([^\]]+)\]\([^)]+\)/g, '$1')
11
+ .replace(/[*_~]/g, '')
12
+ .trim();
13
+ }
14
+ export function stripHtml(value) {
15
+ return value.replace(/<[^>]+>/g, '').trim();
16
+ }
17
+ export function titleFromSegment(segment) {
18
+ return segment
19
+ .split('-')
20
+ .filter(Boolean)
21
+ .map((part) => part.charAt(0).toUpperCase() + part.slice(1))
22
+ .join(' ');
23
+ }
24
+ export function stringFrontmatter(value) {
25
+ return typeof value === 'string' && value.trim() ? value.trim() : undefined;
26
+ }
27
+ export function numberFrontmatter(value) {
28
+ return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
29
+ }
30
+ export function booleanFrontmatter(value) {
31
+ return typeof value === 'boolean' ? value : undefined;
32
+ }
33
+ export function stringArrayFrontmatter(value) {
34
+ if (Array.isArray(value))
35
+ return value.filter((item) => typeof item === 'string' && item.trim().length > 0);
36
+ if (typeof value === 'string' && value.trim())
37
+ return value.split(',').map((item) => item.trim()).filter(Boolean);
38
+ return [];
39
+ }
40
+ export function findDuplicates(values) {
41
+ const seen = new Set();
42
+ const duplicates = new Set();
43
+ for (const value of values) {
44
+ if (seen.has(value))
45
+ duplicates.add(value);
46
+ seen.add(value);
47
+ }
48
+ return [...duplicates];
49
+ }
50
+ export function createGroupId(value) {
51
+ return `group-${value.replace(/[^a-zA-Z0-9]+/g, '-').replace(/^-|-$/g, '')}`;
52
+ }
package/dist/core.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ export * from './core/types.js';
2
+ export * from './core/config.js';
3
+ export * from './core/content.js';
4
+ export * from './core/navigation.js';
5
+ export * from './core/search.js';
6
+ export * from './core/links.js';
7
+ export * from './core/checks.js';
8
+ //# sourceMappingURL=core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC"}
package/dist/core.js ADDED
@@ -0,0 +1,7 @@
1
+ export * from './core/types.js';
2
+ export * from './core/config.js';
3
+ export * from './core/content.js';
4
+ export * from './core/navigation.js';
5
+ export * from './core/search.js';
6
+ export * from './core/links.js';
7
+ export * from './core/checks.js';