@farming-labs/nuxt 0.0.38 → 0.0.43
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/dist/api-reference.d.ts +3 -0
- package/dist/api-reference.d.ts.map +1 -0
- package/dist/api-reference.js +21 -0
- package/dist/api-reference.js.map +1 -0
- package/dist/docs/src/api-reference.d.ts +27 -0
- package/dist/docs/src/api-reference.d.ts.map +1 -0
- package/dist/docs/src/api-reference.js +594 -0
- package/dist/docs/src/api-reference.js.map +1 -0
- package/dist/docs/src/create-theme.d.ts +74 -0
- package/dist/docs/src/create-theme.d.ts.map +1 -0
- package/dist/docs/src/create-theme.js +86 -0
- package/dist/docs/src/create-theme.js.map +1 -0
- package/dist/docs/src/define-docs.d.ts +6 -0
- package/dist/docs/src/define-docs.d.ts.map +1 -0
- package/dist/docs/src/define-docs.js +27 -0
- package/dist/docs/src/define-docs.js.map +1 -0
- package/dist/docs/src/i18n.d.ts +15 -0
- package/dist/docs/src/i18n.d.ts.map +1 -0
- package/dist/docs/src/i18n.js +48 -0
- package/dist/docs/src/i18n.js.map +1 -0
- package/dist/docs/src/index.d.ts +16 -0
- package/dist/docs/src/index.d.ts.map +1 -0
- package/dist/docs/src/index.js +14 -0
- package/dist/docs/src/index.js.map +1 -0
- package/dist/docs/src/metadata.d.ts +24 -0
- package/dist/docs/src/metadata.d.ts.map +1 -0
- package/dist/docs/src/metadata.js +90 -0
- package/dist/docs/src/metadata.js.map +1 -0
- package/dist/docs/src/server.d.ts +3 -0
- package/dist/docs/src/server.d.ts.map +1 -0
- package/dist/docs/src/server.js +2 -0
- package/dist/docs/src/server.js.map +1 -0
- package/dist/docs/src/types.d.ts +1344 -0
- package/dist/docs/src/types.d.ts.map +1 -0
- package/dist/docs/src/types.js +6 -0
- package/dist/docs/src/types.js.map +1 -0
- package/dist/docs/src/utils.d.ts +6 -0
- package/dist/docs/src/utils.d.ts.map +1 -0
- package/dist/docs/src/utils.js +32 -0
- package/dist/docs/src/utils.js.map +1 -0
- package/dist/nuxt/src/api-reference.d.ts +3 -0
- package/dist/nuxt/src/api-reference.d.ts.map +1 -0
- package/dist/nuxt/src/api-reference.js +20 -0
- package/dist/nuxt/src/api-reference.js.map +1 -0
- package/dist/nuxt/src/content.d.ts +54 -0
- package/dist/nuxt/src/content.d.ts.map +1 -0
- package/dist/nuxt/src/content.js +202 -0
- package/dist/nuxt/src/content.js.map +1 -0
- package/dist/nuxt/src/index.d.ts +11 -0
- package/dist/nuxt/src/index.d.ts.map +1 -0
- package/dist/nuxt/src/index.js +11 -0
- package/dist/nuxt/src/index.js.map +1 -0
- package/dist/nuxt/src/markdown.d.ts +18 -0
- package/dist/nuxt/src/markdown.d.ts.map +1 -0
- package/dist/nuxt/src/markdown.js +277 -0
- package/dist/nuxt/src/markdown.js.map +1 -0
- package/dist/nuxt/src/server.d.ts +87 -0
- package/dist/nuxt/src/server.d.ts.map +1 -0
- package/dist/nuxt/src/server.js +726 -0
- package/dist/nuxt/src/server.js.map +1 -0
- package/dist/server.d.ts +3 -2
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +4 -2
- package/dist/server.js.map +1 -1
- package/package.json +9 -2
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Server-side markdown rendering with Shiki syntax highlighting.
|
|
3
|
+
*
|
|
4
|
+
* Converts raw markdown content to HTML, supporting:
|
|
5
|
+
* - Fenced code blocks with dual-theme syntax highlighting
|
|
6
|
+
* - Copy-to-clipboard buttons on code blocks
|
|
7
|
+
* - Tabbed code blocks (`<Tabs>` / `<Tab>` syntax)
|
|
8
|
+
* - Callouts / admonitions (GitHub `[!NOTE]` and `**Note:**` styles)
|
|
9
|
+
* - Tables, lists, inline formatting, headings with anchor IDs
|
|
10
|
+
*/
|
|
11
|
+
import { createHighlighter } from "shiki";
|
|
12
|
+
let highlighterPromise = null;
|
|
13
|
+
function getHighlighter() {
|
|
14
|
+
if (!highlighterPromise) {
|
|
15
|
+
highlighterPromise = createHighlighter({
|
|
16
|
+
themes: ["github-light", "github-dark"],
|
|
17
|
+
langs: [
|
|
18
|
+
"javascript",
|
|
19
|
+
"typescript",
|
|
20
|
+
"jsx",
|
|
21
|
+
"tsx",
|
|
22
|
+
"json",
|
|
23
|
+
"bash",
|
|
24
|
+
"shellscript",
|
|
25
|
+
"html",
|
|
26
|
+
"css",
|
|
27
|
+
"markdown",
|
|
28
|
+
"yaml",
|
|
29
|
+
"sql",
|
|
30
|
+
"python",
|
|
31
|
+
"dotenv",
|
|
32
|
+
],
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
return highlighterPromise;
|
|
36
|
+
}
|
|
37
|
+
function slugify(text) {
|
|
38
|
+
return text
|
|
39
|
+
.toLowerCase()
|
|
40
|
+
.replace(/<[^>]+>/g, "")
|
|
41
|
+
.replace(/[^\w\s-]/g, "")
|
|
42
|
+
.replace(/\s+/g, "-")
|
|
43
|
+
.replace(/-+/g, "-")
|
|
44
|
+
.trim();
|
|
45
|
+
}
|
|
46
|
+
const calloutIcons = {
|
|
47
|
+
note: '<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="12" y1="16" x2="12" y2="12"/><line x1="12" y1="8" x2="12.01" y2="8"/></svg>',
|
|
48
|
+
warning: '<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg>',
|
|
49
|
+
tip: '<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 18h6"/><path d="M10 22h4"/><path d="M15.09 14c.18-.98.65-1.74 1.41-2.5A4.65 4.65 0 0018 8 6 6 0 006 8c0 1 .23 2.23 1.5 3.5A4.61 4.61 0 019 14"/></svg>',
|
|
50
|
+
important: '<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z"/></svg>',
|
|
51
|
+
caution: '<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="15" y1="9" x2="9" y2="15"/><line x1="9" y1="9" x2="15" y2="15"/></svg>',
|
|
52
|
+
};
|
|
53
|
+
function renderCallout(type, content) {
|
|
54
|
+
const icon = calloutIcons[type] || calloutIcons.note;
|
|
55
|
+
const label = type.charAt(0).toUpperCase() + type.slice(1);
|
|
56
|
+
return `<div class="fd-callout fd-callout-${type}" role="note"><div class="fd-callout-indicator" role="none"></div><div class="fd-callout-icon">${icon}</div><div class="fd-callout-content"><p class="fd-callout-title">${label}</p><p>${content}</p></div></div>`;
|
|
57
|
+
}
|
|
58
|
+
function highlightCode(hl, code, lang) {
|
|
59
|
+
if (lang === "sh" || lang === "shell")
|
|
60
|
+
lang = "bash";
|
|
61
|
+
if (lang === "env")
|
|
62
|
+
lang = "dotenv";
|
|
63
|
+
const supported = hl.getLoadedLanguages();
|
|
64
|
+
if (!supported.includes(lang))
|
|
65
|
+
lang = "text";
|
|
66
|
+
const trimmedCode = code.replace(/\n$/, "");
|
|
67
|
+
try {
|
|
68
|
+
return {
|
|
69
|
+
html: hl.codeToHtml(trimmedCode, {
|
|
70
|
+
lang,
|
|
71
|
+
themes: { light: "github-light", dark: "github-dark" },
|
|
72
|
+
}),
|
|
73
|
+
raw: trimmedCode,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
const escaped = trimmedCode.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
|
|
78
|
+
return {
|
|
79
|
+
html: `<pre class="shiki"><code>${escaped}</code></pre>`,
|
|
80
|
+
raw: trimmedCode,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
function parseMeta(meta) {
|
|
85
|
+
const lang = (meta.split(/\s/)[0] || "text").toLowerCase();
|
|
86
|
+
const titleMatch = meta.match(/title=["']([^"']+)["']/);
|
|
87
|
+
return { lang, title: titleMatch ? titleMatch[1] : null };
|
|
88
|
+
}
|
|
89
|
+
function wrapCodeWithCopy(html, rawCode, title, language) {
|
|
90
|
+
const escapedRaw = rawCode
|
|
91
|
+
.replace(/&/g, "&")
|
|
92
|
+
.replace(/"/g, """)
|
|
93
|
+
.replace(/</g, "<")
|
|
94
|
+
.replace(/>/g, ">");
|
|
95
|
+
const dataLang = language ? ` data-language="${String(language).replace(/"/g, """)}"` : "";
|
|
96
|
+
const copyBtn = `<button class="fd-copy-btn" data-code="${escapedRaw}" title="Copy code"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"/><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"/></svg></button>`;
|
|
97
|
+
if (title) {
|
|
98
|
+
return `<div class="fd-codeblock fd-codeblock--titled"${dataLang}><div class="fd-codeblock-title"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"/><path d="M14 2v4a2 2 0 0 0 2 2h4"/></svg><span class="fd-codeblock-title-text">${title}</span>${copyBtn}</div><div class="fd-codeblock-content">${html}</div></div>`;
|
|
99
|
+
}
|
|
100
|
+
return `<div class="fd-codeblock"${dataLang}>${copyBtn}<div class="fd-codeblock-content">${html}</div></div>`;
|
|
101
|
+
}
|
|
102
|
+
function dedentCode(raw) {
|
|
103
|
+
const lines = raw.replace(/\n$/, "").split("\n");
|
|
104
|
+
const indent = lines.reduce((min, l) => {
|
|
105
|
+
if (!l.trim())
|
|
106
|
+
return min;
|
|
107
|
+
const spaces = l.match(/^(\s*)/)?.[1].length ?? 0;
|
|
108
|
+
return Math.min(min, spaces);
|
|
109
|
+
}, Infinity);
|
|
110
|
+
if (indent > 0 && indent < Infinity) {
|
|
111
|
+
return lines.map((l) => l.slice(indent)).join("\n");
|
|
112
|
+
}
|
|
113
|
+
return raw;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Render a markdown string to HTML with full syntax highlighting,
|
|
117
|
+
* callouts, tables, tabs, and copy-to-clipboard support.
|
|
118
|
+
*
|
|
119
|
+
* Designed for server-side use in Astro page loaders.
|
|
120
|
+
*/
|
|
121
|
+
export async function renderMarkdown(content) {
|
|
122
|
+
if (!content)
|
|
123
|
+
return "";
|
|
124
|
+
const hl = await getHighlighter();
|
|
125
|
+
let result = content;
|
|
126
|
+
// ── Tabs blocks: <Tabs items={[...]}> ... </Tabs> ──
|
|
127
|
+
const tabsBlocks = [];
|
|
128
|
+
result = result.replace(/<Tabs\s+items=\{?\[([^\]]+)\]\}?>([\s\S]*?)<\/Tabs>/g, (_, itemsStr, body) => {
|
|
129
|
+
const items = itemsStr.split(",").map((s) => s.trim().replace(/^["']|["']$/g, ""));
|
|
130
|
+
const panels = [];
|
|
131
|
+
const tabRegex = /<Tab\s+value=["']([^"']+)["']>([\s\S]*?)<\/Tab>/g;
|
|
132
|
+
let tabMatch;
|
|
133
|
+
while ((tabMatch = tabRegex.exec(body)) !== null) {
|
|
134
|
+
const tabValue = tabMatch[1];
|
|
135
|
+
const tabContent = tabMatch[2].trim();
|
|
136
|
+
const codeMatch = tabContent.match(/```([^\n]*)\n([\s\S]*?)```/);
|
|
137
|
+
if (codeMatch) {
|
|
138
|
+
const { lang, title } = parseMeta(codeMatch[1]);
|
|
139
|
+
const dedented = dedentCode(codeMatch[2]);
|
|
140
|
+
const { html, raw } = highlightCode(hl, dedented, lang);
|
|
141
|
+
panels.push({ value: tabValue, html: wrapCodeWithCopy(html, raw, title, lang) });
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
panels.push({ value: tabValue, html: `<p>${tabContent}</p>` });
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
let tabsHtml = `<div class="fd-tabs" data-tabs>`;
|
|
148
|
+
tabsHtml += `<div class="fd-tabs-list" role="tablist">`;
|
|
149
|
+
for (let i = 0; i < items.length; i++) {
|
|
150
|
+
tabsHtml += `<button role="tab" class="fd-tab-trigger${i === 0 ? " fd-tab-active" : ""}" data-tab-value="${items[i]}" aria-selected="${i === 0}">${items[i]}</button>`;
|
|
151
|
+
}
|
|
152
|
+
tabsHtml += `</div>`;
|
|
153
|
+
for (let i = 0; i < panels.length; i++) {
|
|
154
|
+
tabsHtml += `<div class="fd-tab-panel${i === 0 ? " fd-tab-panel-active" : ""}" data-tab-panel="${panels[i].value}" role="tabpanel">${panels[i].html}</div>`;
|
|
155
|
+
}
|
|
156
|
+
tabsHtml += `</div>`;
|
|
157
|
+
const placeholder = `%%TABS_${tabsBlocks.length}%%`;
|
|
158
|
+
tabsBlocks.push(tabsHtml);
|
|
159
|
+
return placeholder;
|
|
160
|
+
});
|
|
161
|
+
// ── Fenced code blocks ──
|
|
162
|
+
const codeBlocks = [];
|
|
163
|
+
result = result.replace(/```([^\n]*)\n([\s\S]*?)```/g, (_, meta, code) => {
|
|
164
|
+
const { lang, title } = parseMeta(meta);
|
|
165
|
+
const { html, raw } = highlightCode(hl, code, lang);
|
|
166
|
+
const placeholder = `%%CODEBLOCK_${codeBlocks.length}%%`;
|
|
167
|
+
codeBlocks.push(wrapCodeWithCopy(html, raw, title, lang));
|
|
168
|
+
return placeholder;
|
|
169
|
+
});
|
|
170
|
+
// Inline code
|
|
171
|
+
result = result.replace(/`([^`]+)`/g, "<code>$1</code>");
|
|
172
|
+
// Headings (h4 → h1 order to avoid prefix collisions)
|
|
173
|
+
result = result.replace(/^#### (.+)$/gm, (_, text) => {
|
|
174
|
+
return `<h4 id="${slugify(text)}">${text}</h4>`;
|
|
175
|
+
});
|
|
176
|
+
result = result.replace(/^### (.+)$/gm, (_, text) => {
|
|
177
|
+
return `<h3 id="${slugify(text)}">${text}</h3>`;
|
|
178
|
+
});
|
|
179
|
+
result = result.replace(/^## (.+)$/gm, (_, text) => {
|
|
180
|
+
return `<h2 id="${slugify(text)}">${text}</h2>`;
|
|
181
|
+
});
|
|
182
|
+
result = result.replace(/^# (.+)$/gm, "<h1>$1</h1>");
|
|
183
|
+
// ── Callouts / blockquotes (before inline formatting) ──
|
|
184
|
+
const calloutBlocks = [];
|
|
185
|
+
result = result.replace(/(?:^>\s*.+\n?)+/gm, (block) => {
|
|
186
|
+
const lines = block.split("\n").filter(Boolean);
|
|
187
|
+
const inner = lines.map((l) => l.replace(/^>\s?/, "")).join("\n");
|
|
188
|
+
const ghMatch = inner.match(/^\[!(NOTE|WARNING|TIP|IMPORTANT|CAUTION)\]\s*\n?([\s\S]*)/i);
|
|
189
|
+
if (ghMatch) {
|
|
190
|
+
const type = ghMatch[1].toLowerCase();
|
|
191
|
+
const calloutContent = ghMatch[2].trim();
|
|
192
|
+
const placeholder = `%%CALLOUT_${calloutBlocks.length}%%`;
|
|
193
|
+
calloutBlocks.push(renderCallout(type, calloutContent));
|
|
194
|
+
return placeholder;
|
|
195
|
+
}
|
|
196
|
+
const boldMatch = inner.match(/^\*\*(Note|Warning|Tip|Important|Caution):\*\*\s*([\s\S]*)/i);
|
|
197
|
+
if (boldMatch) {
|
|
198
|
+
const type = boldMatch[1].toLowerCase();
|
|
199
|
+
const calloutContent = boldMatch[2].trim();
|
|
200
|
+
const placeholder = `%%CALLOUT_${calloutBlocks.length}%%`;
|
|
201
|
+
calloutBlocks.push(renderCallout(type, calloutContent));
|
|
202
|
+
return placeholder;
|
|
203
|
+
}
|
|
204
|
+
return `<blockquote><p>${inner}</p></blockquote>`;
|
|
205
|
+
});
|
|
206
|
+
// Inline formatting
|
|
207
|
+
result = result.replace(/\*\*\*(.+?)\*\*\*/g, "<strong><em>$1</em></strong>");
|
|
208
|
+
result = result.replace(/\*\*(.+?)\*\*/g, "<strong>$1</strong>");
|
|
209
|
+
result = result.replace(/\*(.+?)\*/g, "<em>$1</em>");
|
|
210
|
+
// Links
|
|
211
|
+
result = result.replace(/\[([^\]]+)\]\(([^)]+)\)/g, '<a href="$2">$1</a>');
|
|
212
|
+
// Horizontal rules
|
|
213
|
+
result = result.replace(/^---$/gm, "<hr />");
|
|
214
|
+
// Tables
|
|
215
|
+
result = result.replace(/^\|(.+)\|\n\|[-| ]+\|\n((?:\|.+\|\n?)+)/gm, (_, headerRow, bodyRows) => {
|
|
216
|
+
const headers = headerRow
|
|
217
|
+
.split("|")
|
|
218
|
+
.map((h) => h.trim())
|
|
219
|
+
.filter(Boolean);
|
|
220
|
+
const rows = bodyRows
|
|
221
|
+
.trim()
|
|
222
|
+
.split("\n")
|
|
223
|
+
.map((row) => row
|
|
224
|
+
.split("|")
|
|
225
|
+
.map((c) => c.trim())
|
|
226
|
+
.filter(Boolean));
|
|
227
|
+
const headerHtml = headers.map((h) => `<th>${h}</th>`).join("");
|
|
228
|
+
const rowsHtml = rows
|
|
229
|
+
.map((row) => `<tr>${row.map((c) => `<td>${c}</td>`).join("")}</tr>`)
|
|
230
|
+
.join("");
|
|
231
|
+
return `<div class="fd-table-wrapper"><table><thead><tr>${headerHtml}</tr></thead><tbody>${rowsHtml}</tbody></table></div>`;
|
|
232
|
+
});
|
|
233
|
+
// Unordered lists
|
|
234
|
+
result = result.replace(/(?:^- .+\n?)+/gm, (block) => {
|
|
235
|
+
const items = block
|
|
236
|
+
.split("\n")
|
|
237
|
+
.filter((l) => l.startsWith("- "))
|
|
238
|
+
.map((l) => `<li>${l.slice(2)}</li>`)
|
|
239
|
+
.join("");
|
|
240
|
+
return `<ul>${items}</ul>`;
|
|
241
|
+
});
|
|
242
|
+
// Ordered lists
|
|
243
|
+
result = result.replace(/(?:^\d+\. .+\n?)+/gm, (block) => {
|
|
244
|
+
const items = block
|
|
245
|
+
.split("\n")
|
|
246
|
+
.filter((l) => /^\d+\. /.test(l))
|
|
247
|
+
.map((l) => `<li>${l.replace(/^\d+\. /, "")}</li>`)
|
|
248
|
+
.join("");
|
|
249
|
+
return `<ol>${items}</ol>`;
|
|
250
|
+
});
|
|
251
|
+
// Wrap remaining bare text in <p> tags
|
|
252
|
+
result = result
|
|
253
|
+
.split("\n\n")
|
|
254
|
+
.map((block) => {
|
|
255
|
+
block = block.trim();
|
|
256
|
+
if (!block)
|
|
257
|
+
return "";
|
|
258
|
+
if (/^<(h[1-6]|pre|ul|ol|blockquote|hr|table|div)/.test(block))
|
|
259
|
+
return block;
|
|
260
|
+
if (/^%%(CODEBLOCK|CALLOUT|TABS)_\d+%%$/.test(block))
|
|
261
|
+
return block;
|
|
262
|
+
return `<p>${block}</p>`;
|
|
263
|
+
})
|
|
264
|
+
.join("\n");
|
|
265
|
+
// Restore placeholders
|
|
266
|
+
for (let i = 0; i < codeBlocks.length; i++) {
|
|
267
|
+
result = result.replace(`%%CODEBLOCK_${i}%%`, codeBlocks[i]);
|
|
268
|
+
}
|
|
269
|
+
for (let i = 0; i < calloutBlocks.length; i++) {
|
|
270
|
+
result = result.replace(`%%CALLOUT_${i}%%`, calloutBlocks[i]);
|
|
271
|
+
}
|
|
272
|
+
for (let i = 0; i < tabsBlocks.length; i++) {
|
|
273
|
+
result = result.replace(`%%TABS_${i}%%`, tabsBlocks[i]);
|
|
274
|
+
}
|
|
275
|
+
return result;
|
|
276
|
+
}
|
|
277
|
+
//# sourceMappingURL=markdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../../src/markdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Server-side helpers for Nuxt docs routes.
|
|
3
|
+
*
|
|
4
|
+
* The simplest setup is a single file:
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```ts
|
|
8
|
+
* // server/api/docs.ts
|
|
9
|
+
* import { defineDocsHandler } from "@farming-labs/nuxt/server";
|
|
10
|
+
* import config from "../../docs.config";
|
|
11
|
+
* export default defineDocsHandler(config);
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* That one handler serves page loads, search, and AI chat.
|
|
15
|
+
*/
|
|
16
|
+
import { loadDocsNavTree } from "./content.js";
|
|
17
|
+
import type { PageNode } from "./content.js";
|
|
18
|
+
export { defineApiReferenceHandler } from "./api-reference.js";
|
|
19
|
+
export interface DocsServer {
|
|
20
|
+
load: (pathname: string) => Promise<{
|
|
21
|
+
tree: ReturnType<typeof loadDocsNavTree>;
|
|
22
|
+
flatPages: PageNode[];
|
|
23
|
+
title: string;
|
|
24
|
+
description?: string;
|
|
25
|
+
html: string;
|
|
26
|
+
entry?: string;
|
|
27
|
+
locale?: string;
|
|
28
|
+
slug?: string;
|
|
29
|
+
previousPage: PageNode | null;
|
|
30
|
+
nextPage: PageNode | null;
|
|
31
|
+
editOnGithub?: string;
|
|
32
|
+
lastModified: string;
|
|
33
|
+
}>;
|
|
34
|
+
GET: (context: {
|
|
35
|
+
request: Request;
|
|
36
|
+
}) => Response;
|
|
37
|
+
POST: (context: {
|
|
38
|
+
request: Request;
|
|
39
|
+
}) => Promise<Response>;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Create all server-side functions needed for a Nuxt docs site.
|
|
43
|
+
*
|
|
44
|
+
* @param config - The `DocsConfig` object (from `defineDocs()` in `docs.config.ts`).
|
|
45
|
+
*
|
|
46
|
+
* Pass `_preloadedContent` (from `import.meta.glob`) to bundle markdown files
|
|
47
|
+
* at build time — required for serverless deployments (Vercel, Netlify, etc.)
|
|
48
|
+
* where the filesystem is not available at runtime.
|
|
49
|
+
*/
|
|
50
|
+
export declare function createDocsServer(config?: Record<string, any>): DocsServer;
|
|
51
|
+
/**
|
|
52
|
+
* Create a single Nuxt event handler that serves docs pages, search, and AI chat.
|
|
53
|
+
*
|
|
54
|
+
* Pass `useStorage` from the Nitro auto-import so the handler can read
|
|
55
|
+
* docs bundled via `serverAssets`.
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* ```ts
|
|
59
|
+
* // server/api/docs.ts
|
|
60
|
+
* import { defineDocsHandler } from "@farming-labs/nuxt/server";
|
|
61
|
+
* import config from "../../docs.config";
|
|
62
|
+
* export default defineDocsHandler(config, useStorage);
|
|
63
|
+
* ```
|
|
64
|
+
*
|
|
65
|
+
* The handler responds to:
|
|
66
|
+
* - `GET /api/docs?pathname=/docs/page` → page load
|
|
67
|
+
* - `GET /api/docs?query=search+term` → search
|
|
68
|
+
* - `POST /api/docs` → AI chat
|
|
69
|
+
*/
|
|
70
|
+
export declare function defineDocsHandler(config: Record<string, any>, storage: (base: string) => {
|
|
71
|
+
getKeys(): Promise<string[]>;
|
|
72
|
+
getItem(key: string): Promise<unknown>;
|
|
73
|
+
}): (event: any) => Promise<Response | {
|
|
74
|
+
tree: ReturnType<typeof loadDocsNavTree>;
|
|
75
|
+
flatPages: PageNode[];
|
|
76
|
+
title: string;
|
|
77
|
+
description?: string;
|
|
78
|
+
html: string;
|
|
79
|
+
entry?: string;
|
|
80
|
+
locale?: string;
|
|
81
|
+
slug?: string;
|
|
82
|
+
previousPage: PageNode | null;
|
|
83
|
+
nextPage: PageNode | null;
|
|
84
|
+
editOnGithub?: string;
|
|
85
|
+
lastModified: string;
|
|
86
|
+
}>;
|
|
87
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH,OAAO,EAAE,eAAe,EAAmC,MAAM,cAAc,CAAC;AAEhF,OAAO,KAAK,EAAE,QAAQ,EAAiC,MAAM,cAAc,CAAC;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAiE/D,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;QAClC,IAAI,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;QACzC,SAAS,EAAE,QAAQ,EAAE,CAAC;QACtB,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,YAAY,EAAE,QAAQ,GAAG,IAAI,CAAC;QAC9B,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;QAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC,CAAC;IACH,GAAG,EAAE,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,KAAK,QAAQ,CAAC;IACjD,IAAI,EAAE,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC5D;AA8QD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,UAAU,CAuc7E;AAID;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK;IACzB,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACxC,IAoCa,OAAO,GAAG;UA7yBhB,UAAU,CAAC,OAAO,eAAe,CAAC;eAC7B,QAAQ,EAAE;WACd,MAAM;kBACC,MAAM;UACd,MAAM;YACJ,MAAM;aACL,MAAM;WACR,MAAM;kBACC,QAAQ,GAAG,IAAI;cACnB,QAAQ,GAAG,IAAI;mBACV,MAAM;kBACP,MAAM;GAo0BvB"}
|