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.
- package/README.md +48 -1
- package/dist/ai/providers.d.ts.map +1 -1
- package/dist/ai/providers.js +37 -39
- package/dist/ai/runtime.d.ts +2 -0
- package/dist/ai/runtime.d.ts.map +1 -1
- package/dist/ai/runtime.js +8 -3
- package/dist/cloudflare.d.ts +2 -0
- package/dist/cloudflare.d.ts.map +1 -1
- package/dist/cloudflare.js +3 -0
- package/dist/config.d.ts +49 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +53 -8
- package/dist/core/checks.js +2 -2
- package/dist/core/config.d.ts +1 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +15 -33
- package/dist/core/content.d.ts.map +1 -1
- package/dist/core/content.js +107 -7
- package/dist/core/i18n.d.ts +5 -0
- package/dist/core/i18n.d.ts.map +1 -0
- package/dist/core/i18n.js +117 -0
- package/dist/core/messages.d.ts +148 -0
- package/dist/core/messages.d.ts.map +1 -0
- package/dist/core/messages.js +162 -0
- package/dist/core/types.d.ts +192 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/utils.d.ts +1 -0
- package/dist/core/utils.d.ts.map +1 -1
- package/dist/core/utils.js +8 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/mdx/code.d.ts +4 -1
- package/dist/mdx/code.d.ts.map +1 -1
- package/dist/mdx/code.js +17 -7
- package/dist/mdx/compile.d.ts +3 -1
- package/dist/mdx/compile.d.ts.map +1 -1
- package/dist/mdx/compile.js +6 -2
- package/dist/mdx/diff.d.ts +5 -1
- package/dist/mdx/diff.d.ts.map +1 -1
- package/dist/mdx/diff.js +22 -11
- package/dist/mdx/links.d.ts +2 -0
- package/dist/mdx/links.d.ts.map +1 -0
- package/dist/mdx/links.js +141 -0
- package/dist/og/image.d.ts +4 -0
- package/dist/og/image.d.ts.map +1 -1
- package/dist/og/image.js +8 -0
- package/dist/og/metadata.d.ts +5 -1
- package/dist/og/metadata.d.ts.map +1 -1
- package/dist/og/metadata.js +77 -7
- package/dist/og/types.d.ts +6 -0
- package/dist/og/types.d.ts.map +1 -1
- package/dist/search/cloudflare.d.ts +2 -1
- package/dist/search/cloudflare.d.ts.map +1 -1
- package/dist/search/cloudflare.js +10 -1
- package/dist/search/local.d.ts.map +1 -1
- package/dist/search/local.js +64 -21
- package/dist/search/runtime.js +1 -1
- package/dist/search/utils.d.ts +1 -0
- package/dist/search/utils.d.ts.map +1 -1
- package/dist/search/utils.js +38 -0
- package/dist/svelte.d.ts +1 -0
- package/dist/svelte.d.ts.map +1 -1
- package/dist/svelte.js +8 -1
- package/dist/theme/Article.svelte +145 -0
- package/dist/theme/Article.svelte.d.ts +36 -0
- package/dist/theme/Article.svelte.d.ts.map +1 -0
- package/dist/theme/AskAiPanel.svelte +64 -258
- package/dist/theme/AskAiPanel.svelte.d.ts +4 -0
- package/dist/theme/AskAiPanel.svelte.d.ts.map +1 -1
- package/dist/theme/Brand.svelte +19 -0
- package/dist/theme/Brand.svelte.d.ts +22 -0
- package/dist/theme/Brand.svelte.d.ts.map +1 -0
- package/dist/theme/DocPage.svelte +6 -112
- package/dist/theme/DocPage.svelte.d.ts.map +1 -1
- package/dist/theme/DocsApp.svelte +135 -46
- package/dist/theme/DocsApp.svelte.d.ts +20 -23
- package/dist/theme/DocsApp.svelte.d.ts.map +1 -1
- package/dist/theme/DocsLayout.svelte +58 -135
- package/dist/theme/DocsLayout.svelte.d.ts +4 -5
- package/dist/theme/DocsLayout.svelte.d.ts.map +1 -1
- package/dist/theme/DocsShell.svelte +91 -0
- package/dist/theme/DocsShell.svelte.d.ts +34 -0
- package/dist/theme/DocsShell.svelte.d.ts.map +1 -0
- package/dist/theme/ErrorPage.svelte +104 -0
- package/dist/theme/ErrorPage.svelte.d.ts +34 -0
- package/dist/theme/ErrorPage.svelte.d.ts.map +1 -0
- package/dist/theme/FloatingToolbar.svelte +2 -67
- package/dist/theme/FloatingToolbar.svelte.d.ts.map +1 -1
- package/dist/theme/Footer.svelte +18 -0
- package/dist/theme/Footer.svelte.d.ts +24 -0
- package/dist/theme/Footer.svelte.d.ts.map +1 -0
- package/dist/theme/FooterLinks.svelte +37 -0
- package/dist/theme/FooterLinks.svelte.d.ts +22 -0
- package/dist/theme/FooterLinks.svelte.d.ts.map +1 -0
- package/dist/theme/HomePage.svelte +91 -44
- package/dist/theme/HomePage.svelte.d.ts +8 -1
- package/dist/theme/HomePage.svelte.d.ts.map +1 -1
- package/dist/theme/LayoutShell.svelte +119 -0
- package/dist/theme/LayoutShell.svelte.d.ts +43 -0
- package/dist/theme/LayoutShell.svelte.d.ts.map +1 -0
- package/dist/theme/MobileNav.svelte +20 -0
- package/dist/theme/MobileNav.svelte.d.ts +26 -0
- package/dist/theme/MobileNav.svelte.d.ts.map +1 -0
- package/dist/theme/Navbar.svelte +67 -0
- package/dist/theme/Navbar.svelte.d.ts +29 -0
- package/dist/theme/Navbar.svelte.d.ts.map +1 -0
- package/dist/theme/PageLayout.svelte +32 -28
- package/dist/theme/PageLayout.svelte.d.ts +4 -1
- package/dist/theme/PageLayout.svelte.d.ts.map +1 -1
- package/dist/theme/PageShell.svelte +98 -0
- package/dist/theme/PageShell.svelte.d.ts +35 -0
- package/dist/theme/PageShell.svelte.d.ts.map +1 -0
- package/dist/theme/PageTools.svelte +87 -0
- package/dist/theme/PageTools.svelte.d.ts +25 -0
- package/dist/theme/PageTools.svelte.d.ts.map +1 -0
- package/dist/theme/RenderError.svelte +62 -0
- package/dist/theme/RenderError.svelte.d.ts +31 -0
- package/dist/theme/RenderError.svelte.d.ts.map +1 -0
- package/dist/theme/RootLayout.svelte +185 -246
- package/dist/theme/RootLayout.svelte.d.ts +7 -0
- package/dist/theme/RootLayout.svelte.d.ts.map +1 -1
- package/dist/theme/RouteRenderError.svelte +53 -0
- package/dist/theme/RouteRenderError.svelte.d.ts +34 -0
- package/dist/theme/RouteRenderError.svelte.d.ts.map +1 -0
- package/dist/theme/SafeRenderError.svelte +49 -0
- package/dist/theme/SafeRenderError.svelte.d.ts +33 -0
- package/dist/theme/SafeRenderError.svelte.d.ts.map +1 -0
- package/dist/theme/ScopeSwitcher.svelte +9 -5
- package/dist/theme/ScopeSwitcher.svelte.d.ts +2 -0
- package/dist/theme/ScopeSwitcher.svelte.d.ts.map +1 -1
- package/dist/theme/SearchDialog.svelte +64 -126
- package/dist/theme/SearchDialog.svelte.d.ts +3 -0
- package/dist/theme/SearchDialog.svelte.d.ts.map +1 -1
- package/dist/theme/SidebarTree.svelte +19 -7
- package/dist/theme/SidebarTree.svelte.d.ts.map +1 -1
- package/dist/theme/SocialNav.svelte +17 -0
- package/dist/theme/SocialNav.svelte.d.ts +22 -0
- package/dist/theme/SocialNav.svelte.d.ts.map +1 -0
- package/dist/theme/TableOfContents.svelte +73 -0
- package/dist/theme/TableOfContents.svelte.d.ts +25 -0
- package/dist/theme/TableOfContents.svelte.d.ts.map +1 -0
- package/dist/theme/ThemeToggle.svelte +18 -19
- package/dist/theme/ThemeToggle.svelte.d.ts +2 -0
- package/dist/theme/ThemeToggle.svelte.d.ts.map +1 -1
- package/dist/theme/TopNav.svelte +23 -0
- package/dist/theme/TopNav.svelte.d.ts +22 -0
- package/dist/theme/TopNav.svelte.d.ts.map +1 -0
- package/dist/theme/base.css +215 -0
- package/dist/theme/defaults.d.ts +4 -0
- package/dist/theme/defaults.d.ts.map +1 -0
- package/dist/theme/defaults.js +55 -0
- package/dist/theme/headless.d.ts +62 -0
- package/dist/theme/headless.d.ts.map +1 -0
- package/dist/theme/headless.js +996 -0
- package/dist/theme/index.d.ts +18 -0
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/index.js +17 -0
- package/dist/theme/styles.css +499 -1
- package/dist/theme/types.d.ts +363 -0
- package/dist/theme/types.d.ts.map +1 -0
- package/dist/theme/types.js +1 -0
- package/dist/virtual.d.ts +6 -0
- package/dist/vite.d.ts +6 -0
- package/dist/vite.d.ts.map +1 -1
- package/dist/vite.js +75 -5
- 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,
|
|
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"}
|
package/dist/ai/providers.js
CHANGED
|
@@ -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:
|
|
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:
|
|
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:
|
|
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 ??
|
package/dist/ai/runtime.d.ts
CHANGED
|
@@ -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'> {
|
package/dist/ai/runtime.d.ts.map
CHANGED
|
@@ -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,
|
|
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"}
|
package/dist/ai/runtime.js
CHANGED
|
@@ -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) {
|
package/dist/cloudflare.d.ts
CHANGED
|
@@ -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;
|
package/dist/cloudflare.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/cloudflare.js
CHANGED
|
@@ -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;
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
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
|
-
|
|
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
|
-
|
|
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 === '
|
|
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
|
}
|
package/dist/core/checks.js
CHANGED
|
@@ -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
|
|
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);
|
package/dist/core/config.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|