nuxt-ai-ready 0.0.1 → 0.0.3
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/module.json
CHANGED
package/dist/module.mjs
CHANGED
|
@@ -11,48 +11,11 @@ import { readPackageJSON } from 'pkg-types';
|
|
|
11
11
|
import { estimateTokenCount } from 'tokenx';
|
|
12
12
|
import { writeFile } from 'node:fs/promises';
|
|
13
13
|
import { join } from 'node:path';
|
|
14
|
-
import { consola } from 'consola';
|
|
15
14
|
import { generateLlmsTxtArtifacts } from 'mdream/llms-txt';
|
|
15
|
+
import { normalizeLlmsTxtConfig } from '../dist/runtime/llms-txt.js';
|
|
16
16
|
|
|
17
|
-
const logger
|
|
17
|
+
const logger = useLogger("nuxt-ai-ready");
|
|
18
18
|
|
|
19
|
-
function normalizeLink(link) {
|
|
20
|
-
const parts = [];
|
|
21
|
-
parts.push(`- [${link.title}](${link.href})`);
|
|
22
|
-
if (link.description) {
|
|
23
|
-
parts.push(` ${link.description}`);
|
|
24
|
-
}
|
|
25
|
-
return parts.join("\n");
|
|
26
|
-
}
|
|
27
|
-
function normalizeSection(section) {
|
|
28
|
-
const parts = [];
|
|
29
|
-
parts.push(`## ${section.title}`);
|
|
30
|
-
parts.push("");
|
|
31
|
-
if (section.description) {
|
|
32
|
-
const descriptions = Array.isArray(section.description) ? section.description : [section.description];
|
|
33
|
-
parts.push(...descriptions);
|
|
34
|
-
parts.push("");
|
|
35
|
-
}
|
|
36
|
-
if (section.links?.length) {
|
|
37
|
-
parts.push(...section.links.map(normalizeLink));
|
|
38
|
-
}
|
|
39
|
-
return parts.join("\n");
|
|
40
|
-
}
|
|
41
|
-
function normalizeLlmsTxtConfig(config) {
|
|
42
|
-
const parts = [];
|
|
43
|
-
if (config.sections?.length) {
|
|
44
|
-
parts.push(...config.sections.map(normalizeSection));
|
|
45
|
-
}
|
|
46
|
-
if (config.notes) {
|
|
47
|
-
parts.push("## Notes");
|
|
48
|
-
parts.push("");
|
|
49
|
-
const notes = Array.isArray(config.notes) ? config.notes : [config.notes];
|
|
50
|
-
parts.push(...notes);
|
|
51
|
-
}
|
|
52
|
-
return parts.join("\n\n");
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
const logger = consola.withTag("nuxt-mdream");
|
|
56
19
|
function setupPrerenderHandler() {
|
|
57
20
|
const nuxt = useNuxt();
|
|
58
21
|
const pages = [];
|
|
@@ -188,9 +151,9 @@ const module = defineNuxtModule({
|
|
|
188
151
|
async setup(config, nuxt) {
|
|
189
152
|
const { resolve: resolve$1 } = createResolver(import.meta.url);
|
|
190
153
|
const { version } = await readPackageJSON(resolve$1("../package.json"));
|
|
191
|
-
logger
|
|
154
|
+
logger.level = config.debug || nuxt.options.debug ? 4 : 3;
|
|
192
155
|
if (config.enabled === false) {
|
|
193
|
-
logger
|
|
156
|
+
logger.debug("Module is disabled, skipping setup.");
|
|
194
157
|
return;
|
|
195
158
|
}
|
|
196
159
|
await installNuxtSiteConfig();
|
|
@@ -314,11 +277,11 @@ Returns JSONL (newline-delimited JSON) with all indexed content.`
|
|
|
314
277
|
nuxt.hooks.hook("modules:done", () => {
|
|
315
278
|
nuxt.hook("nitro:init", async (nitro) => {
|
|
316
279
|
if (!isBuildMode) {
|
|
317
|
-
logger
|
|
280
|
+
logger.debug("Dev mode: skipping llms.txt generation");
|
|
318
281
|
return;
|
|
319
282
|
}
|
|
320
283
|
if (config.bulkRoute === false) {
|
|
321
|
-
logger
|
|
284
|
+
logger.debug("Bulk route disabled, skipping bulk generation");
|
|
322
285
|
return;
|
|
323
286
|
}
|
|
324
287
|
const bulkPath = resolve(nitro.options.output.dir, `public${config.bulkRoute}`);
|
|
@@ -326,7 +289,10 @@ Returns JSONL (newline-delimited JSON) with all indexed content.`
|
|
|
326
289
|
let bulkStreamEntries = 0;
|
|
327
290
|
nitro.hooks.hook("prerender:route", async (route) => {
|
|
328
291
|
const isHtml = route.fileName?.endsWith(".html") && route.contents.startsWith("<!DOCTYPE html");
|
|
329
|
-
if (!isHtml || !route.
|
|
292
|
+
if (!isHtml || !route.contents) {
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
if (typeof route._sitemap !== "undefined" && !route._sitemap) {
|
|
330
296
|
return;
|
|
331
297
|
}
|
|
332
298
|
let title = "";
|
|
@@ -364,10 +330,12 @@ Returns JSONL (newline-delimited JSON) with all indexed content.`
|
|
|
364
330
|
if (!bulkStream) {
|
|
365
331
|
mkdirSync(dirname(bulkPath), { recursive: true });
|
|
366
332
|
bulkStream = createWriteStream(bulkPath);
|
|
367
|
-
logger
|
|
333
|
+
logger.info(`Bulk JSONL stream created at ${relative(nuxt.options.rootDir, bulkPath)}`);
|
|
368
334
|
}
|
|
335
|
+
logger.debug(`Processing chunks for route: ${route.route}`);
|
|
369
336
|
let idx = 0;
|
|
370
|
-
for (const chunk of chunksStream) {
|
|
337
|
+
for await (const chunk of chunksStream) {
|
|
338
|
+
logger.debug(` Chunk ${idx}: ${chunk.content.length} chars, headers: ${JSON.stringify(chunk.metadata?.headers)}`);
|
|
371
339
|
const bulkChunk = {
|
|
372
340
|
id: generateVectorId(route.route, idx),
|
|
373
341
|
route: route.route,
|
|
@@ -390,11 +358,12 @@ Returns JSONL (newline-delimited JSON) with all indexed content.`
|
|
|
390
358
|
bulkStreamEntries++;
|
|
391
359
|
idx++;
|
|
392
360
|
}
|
|
361
|
+
logger.debug(`Completed ${idx} chunks for ${route.route}`);
|
|
393
362
|
});
|
|
394
363
|
nitro.hooks.hook("prerender:done", () => {
|
|
395
364
|
if (bulkStream) {
|
|
396
365
|
bulkStream.end();
|
|
397
|
-
logger
|
|
366
|
+
logger.success(`Bulk JSONL exported ${bulkStreamEntries} entries.`);
|
|
398
367
|
}
|
|
399
368
|
});
|
|
400
369
|
});
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
function normalizeLink(link) {
|
|
2
|
+
const parts = [];
|
|
3
|
+
parts.push(`- [${link.title}](${link.href})`);
|
|
4
|
+
if (link.description) {
|
|
5
|
+
parts.push(` ${link.description}`);
|
|
6
|
+
}
|
|
7
|
+
return parts.join("\n");
|
|
8
|
+
}
|
|
9
|
+
function normalizeSection(section) {
|
|
10
|
+
const parts = [];
|
|
11
|
+
parts.push(`## ${section.title}`);
|
|
12
|
+
parts.push("");
|
|
13
|
+
if (section.description) {
|
|
14
|
+
const descriptions = Array.isArray(section.description) ? section.description : [section.description];
|
|
15
|
+
parts.push(...descriptions);
|
|
16
|
+
parts.push("");
|
|
17
|
+
}
|
|
18
|
+
if (section.links?.length) {
|
|
19
|
+
parts.push(...section.links.map(normalizeLink));
|
|
20
|
+
}
|
|
21
|
+
return parts.join("\n");
|
|
22
|
+
}
|
|
23
|
+
export function normalizeLlmsTxtConfig(config) {
|
|
24
|
+
const parts = [];
|
|
25
|
+
if (config.sections?.length) {
|
|
26
|
+
parts.push(...config.sections.map(normalizeSection));
|
|
27
|
+
}
|
|
28
|
+
if (config.notes) {
|
|
29
|
+
parts.push("## Notes");
|
|
30
|
+
parts.push("");
|
|
31
|
+
const notes = Array.isArray(config.notes) ? config.notes : [config.notes];
|
|
32
|
+
parts.push(...notes);
|
|
33
|
+
}
|
|
34
|
+
return parts.join("\n\n");
|
|
35
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getSiteConfig } from "#site-config/server/composables/getSiteConfig";
|
|
2
2
|
import { eventHandler, setHeader } from "h3";
|
|
3
3
|
import { useRuntimeConfig } from "nitropack/runtime";
|
|
4
|
-
import { normalizeLlmsTxtConfig } from "
|
|
4
|
+
import { normalizeLlmsTxtConfig } from "../../llms-txt.js";
|
|
5
5
|
export default eventHandler(async (event) => {
|
|
6
6
|
const runtimeConfig = useRuntimeConfig(event)["nuxt-ai-ready"];
|
|
7
7
|
const siteConfig = getSiteConfig(event);
|