@dogsbay/format-astro 0.2.0-beta.115 → 0.2.0-beta.117

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 (66) hide show
  1. package/dist/api-markdown.d.ts +8 -0
  2. package/dist/api-markdown.d.ts.map +1 -0
  3. package/dist/api-markdown.js +41 -0
  4. package/dist/api-markdown.js.map +1 -0
  5. package/dist/blog.d.ts.map +1 -1
  6. package/dist/blog.js +5 -1
  7. package/dist/blog.js.map +1 -1
  8. package/dist/browser.d.ts +14 -0
  9. package/dist/browser.d.ts.map +1 -0
  10. package/dist/browser.js +14 -0
  11. package/dist/browser.js.map +1 -0
  12. package/dist/canonical.d.ts +34 -0
  13. package/dist/canonical.d.ts.map +1 -0
  14. package/dist/canonical.js +107 -0
  15. package/dist/canonical.js.map +1 -0
  16. package/dist/head-metadata.d.ts +26 -0
  17. package/dist/head-metadata.d.ts.map +1 -0
  18. package/dist/head-metadata.js +56 -0
  19. package/dist/head-metadata.js.map +1 -0
  20. package/dist/index.d.ts +4 -2
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +7 -3
  23. package/dist/index.js.map +1 -1
  24. package/dist/lead.d.ts +1 -57
  25. package/dist/lead.d.ts.map +1 -1
  26. package/dist/lead.js +3 -132
  27. package/dist/lead.js.map +1 -1
  28. package/dist/llms-txt.d.ts +6 -10
  29. package/dist/llms-txt.d.ts.map +1 -1
  30. package/dist/llms-txt.js +48 -302
  31. package/dist/llms-txt.js.map +1 -1
  32. package/dist/plugins.d.ts.map +1 -1
  33. package/dist/plugins.js +3 -1
  34. package/dist/plugins.js.map +1 -1
  35. package/dist/project.d.ts +36 -1
  36. package/dist/project.d.ts.map +1 -1
  37. package/dist/project.js +276 -841
  38. package/dist/project.js.map +1 -1
  39. package/dist/redirects.d.ts +22 -0
  40. package/dist/redirects.d.ts.map +1 -1
  41. package/dist/redirects.js +70 -123
  42. package/dist/redirects.js.map +1 -1
  43. package/dist/serialize.d.ts +4 -13
  44. package/dist/serialize.d.ts.map +1 -1
  45. package/dist/serialize.js +304 -102
  46. package/dist/serialize.js.map +1 -1
  47. package/dist/sitemap.d.ts +44 -17
  48. package/dist/sitemap.d.ts.map +1 -1
  49. package/dist/sitemap.js +31 -104
  50. package/dist/sitemap.js.map +1 -1
  51. package/dist/taxonomy.d.ts.map +1 -1
  52. package/dist/taxonomy.js +7 -1
  53. package/dist/taxonomy.js.map +1 -1
  54. package/dist/theme-css.d.ts +26 -0
  55. package/dist/theme-css.d.ts.map +1 -0
  56. package/dist/theme-css.js +642 -0
  57. package/dist/theme-css.js.map +1 -0
  58. package/dist/tone-classes.d.ts +14 -0
  59. package/dist/tone-classes.d.ts.map +1 -0
  60. package/dist/tone-classes.js +30 -0
  61. package/dist/tone-classes.js.map +1 -0
  62. package/dist/write-if-changed.d.ts +21 -0
  63. package/dist/write-if-changed.d.ts.map +1 -0
  64. package/dist/write-if-changed.js +58 -0
  65. package/dist/write-if-changed.js.map +1 -0
  66. package/package.json +13 -5
package/dist/lead.js CHANGED
@@ -1,133 +1,4 @@
1
- /**
2
- * Inspect the leading nodes of a page tree.
3
- *
4
- * Defensive against empty trees and missing properties — returns
5
- * `false` for both flags when the tree is empty.
6
- */
7
- export function detectLeadingNodes(tree) {
8
- if (!tree || tree.length === 0) {
9
- return { hasH1: false, hasLede: false };
10
- }
11
- // H1 detection looks past two things that are not content:
12
- //
13
- // - leading raw-HTML CHROME (banners, toolbars — the comparison view
14
- // injects both). Only tree[0] was inspected before, so a page that
15
- // opened with a banner "had no H1" and the layout added a second
16
- // one (external review);
17
- // - a transparent `group` wrapper, which by definition adds no
18
- // semantics — it exists only to carry an attribute for a run of
19
- // blocks (the comparison marks a whole added/removed page with one).
20
- // A wrapper that hid the page's H1 would resurrect the same bug.
21
- //
22
- // LEDE detection deliberately still keys off tree[0]: a paragraph that
23
- // merely follows an HTML block is not the page's lede, and treating it
24
- // as one silently suppresses the frontmatter description on any
25
- // imported page opening with a <figure>/hero block (code review,
26
- // 2026-07-13). Only an H1 introduces a lede.
27
- let list = tree;
28
- for (;;) {
29
- let i = 0;
30
- while (i < list.length && list[i]?.type === "html")
31
- i++;
32
- const first = list[i];
33
- if (first?.type === "group" && first.children?.length) {
34
- list = first.children;
35
- continue;
36
- }
37
- if (isH1(first)) {
38
- return { hasH1: true, hasLede: isParagraph(list[i + 1]) };
39
- }
40
- return { hasH1: false, hasLede: isParagraph(tree[0]) };
41
- }
42
- }
43
- function isH1(node) {
44
- if (!node || node.type !== "heading")
45
- return false;
46
- // Some importers (dogsbay-md, mkdocs) attach depth as a top-level
47
- // field; others (Starlight via mdx-jsx) use props.level. Both
48
- // conventions are valid — check both.
49
- const depth = node.depth;
50
- if (typeof depth === "number")
51
- return depth === 1;
52
- const level = node.props?.level;
53
- if (typeof level === "number")
54
- return level === 1;
55
- return false;
56
- }
57
- function isParagraph(node) {
58
- if (!node)
59
- return false;
60
- return node.type === "paragraph";
61
- }
62
- /**
63
- * Derive a `<meta name="description">` from a page body when the
64
- * frontmatter doesn't supply one: the first prose paragraph,
65
- * whitespace-collapsed and truncated at a word boundary.
66
- *
67
- * Deliberately Minja-unaware. This only runs at build time, on the
68
- * preprocessed (resolved) tree — `{{ var }}` and `{% include %}` are
69
- * already gone, so the first paragraph is real prose. (A still-undefined
70
- * `{{ var }}` survives `preserve` mode, but that's a content bug equally
71
- * visible in the body and already flagged by the `unresolved-directives`
72
- * audit — not the description's job to scrub.) The `--no-preprocess` /
73
- * `dogsbay convert` paths emit unresolved output by design, where a
74
- * slightly-off description is the least of it.
75
- *
76
- * Scans past a leading H1 / heading / code to the first prose paragraph;
77
- * returns `undefined` when the page has no prose. See
78
- * plans/auto-meta-description.md.
79
- */
80
- export function deriveDescription(tree, maxLen = 155) {
81
- if (!tree || tree.length === 0)
82
- return undefined;
83
- // Skip a leading H1 (the page title) so the lede is the node after it.
84
- let i = isH1(tree[0]) ? 1 : 0;
85
- for (; i < tree.length; i++) {
86
- const node = tree[i];
87
- if (node.type !== "paragraph")
88
- continue; // skip headings/code/etc.
89
- const text = paragraphText(node).replace(/\s+/g, " ").trim();
90
- if (!text)
91
- continue;
92
- return truncateAtWord(text, maxLen);
93
- }
94
- return undefined;
95
- }
96
- /**
97
- * Flatten a paragraph node's text. Tolerant of the three shapes
98
- * format-astro already handles: flat `node.inline`, wrapped
99
- * `node.children[{ inline }]`, and pre-rendered `node.html`.
100
- */
101
- function paragraphText(node) {
102
- const parts = [];
103
- const visit = (n) => {
104
- if (!n || typeof n !== "object")
105
- return;
106
- const o = n;
107
- if (typeof o.text === "string")
108
- parts.push(o.text);
109
- if (typeof o.code === "string")
110
- parts.push(o.code);
111
- if (Array.isArray(o.inline))
112
- o.inline.forEach(visit);
113
- if (Array.isArray(o.children))
114
- o.children.forEach(visit);
115
- };
116
- if (Array.isArray(node.inline))
117
- node.inline.forEach(visit);
118
- else if (Array.isArray(node.children))
119
- node.children.forEach(visit);
120
- else if (typeof node.html === "string") {
121
- parts.push(node.html.replace(/<[^>]+>/g, ""));
122
- }
123
- return parts.join("");
124
- }
125
- function truncateAtWord(s, max) {
126
- if (s.length <= max)
127
- return s;
128
- const cut = s.slice(0, max);
129
- const lastSpace = cut.lastIndexOf(" ");
130
- const base = lastSpace > max * 0.6 ? cut.slice(0, lastSpace) : cut;
131
- return base.replace(/[\s.,;:!?-]+$/, "") + "…";
132
- }
1
+ // Moved to @dogsbay/serialize-core (src/lead.ts), so @dogsbay/site-check can use
2
+ // these without depending on format-astro, which brings @dogsbay/ui and astro.
3
+ export { detectLeadingNodes, deriveDescription } from "@dogsbay/serialize-core";
133
4
  //# sourceMappingURL=lead.js.map
package/dist/lead.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"lead.js","sourceRoot":"","sources":["../src/lead.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lead.js","sourceRoot":"","sources":["../src/lead.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,+EAA+E;AAC/E,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAwB,MAAM,yBAAyB,CAAC"}
@@ -14,7 +14,9 @@
14
14
  * dependency-free (only @dogsbay/types). Callers wire the actual
15
15
  * `treeToDogsbayMd` serializer when they want full-body bundles.
16
16
  */
17
- import type { ExportPage, NavItem, SiteConfig, TreeNode } from "@dogsbay/types";
17
+ import type { ExportPage, NavItem, SiteConfig } from "@dogsbay/types";
18
+ import { extractFirstParagraph } from "@dogsbay/serialize-core";
19
+ export { extractFirstParagraph };
18
20
  export interface BuildLlmsTxtOptions {
19
21
  /**
20
22
  * Used to derive page slugs from nav hrefs. Defaults to
@@ -103,7 +105,7 @@ export interface BuildLlmsFullTxtOptions extends BuildLlmsTxtOptions {
103
105
  * - Pages reachable in `pages` but absent from `nav` appended under
104
106
  * a final `## {otherPagesLabel}` section. Set `otherPagesLabel`
105
107
  * to `false` to suppress (e.g. when nav is the publish list).
106
- * - External hrefs are skipped.
108
+ * - External hrefs, and hrefs outside `hrefPrefix`, are skipped.
107
109
  */
108
110
  export declare function buildLlmsTxt(siteConfig: Pick<SiteConfig, "siteName" | "description" | "siteUrl">, nav: NavItem[], pages: ExportPage[], options?: BuildLlmsTxtOptions): string;
109
111
  /**
@@ -113,15 +115,9 @@ export declare function buildLlmsTxt(siteConfig: Pick<SiteConfig, "siteName" | "
113
115
  */
114
116
  export declare function buildSectionLlmsTxt(siteConfig: Pick<SiteConfig, "siteName" | "siteUrl">, group: NavItem, pages: ExportPage[], options?: BuildLlmsTxtOptions): string;
115
117
  /**
116
- * Bundle every page reachable from `nav` into a single document, in
117
- * nav order. Each page is delimited by a `# Title` header and `URL:`
118
+ * Bundle every page into a single document: nav order, then pages outside
119
+ * the nav by slug. Each page is delimited by a `# Title` header and `URL:`
118
120
  * line, then either the full body (default) or just a description.
119
121
  */
120
122
  export declare function buildLlmsFullTxt(siteConfig: Pick<SiteConfig, "siteName" | "description" | "siteUrl">, nav: NavItem[], pages: ExportPage[], options?: BuildLlmsFullTxtOptions): string;
121
- /**
122
- * Extract plain text of the first paragraph in a page tree. Cross-shape
123
- * tolerant: handles `node.inline` (dogsbay-md parser) and
124
- * `node.children[{type: "prose", inline}]` (Starlight importer).
125
- */
126
- export declare function extractFirstParagraph(tree: TreeNode[]): string;
127
123
  //# sourceMappingURL=llms-txt.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"llms-txt.d.ts","sourceRoot":"","sources":["../src/llms-txt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EACV,UAAU,EAEV,OAAO,EACP,UAAU,EACV,QAAQ,EACT,MAAM,gBAAgB,CAAC;AAYxB,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oDAAoD;IACpD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACjC;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAC9B,iEAAiE;IACjE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;;;;;;;;;;OAcG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,kEAAkE;AAClE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,uBAAwB,SAAQ,mBAAmB;IAClE;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC;IACjC;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,MAAM,CAAC;CAC9C;AAID;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAC1B,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,UAAU,GAAG,aAAa,GAAG,SAAS,CAAC,EACpE,GAAG,EAAE,OAAO,EAAE,EACd,KAAK,EAAE,UAAU,EAAE,EACnB,OAAO,GAAE,mBAAwB,GAChC,MAAM,CAsGR;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS,CAAC,EACpD,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,UAAU,EAAE,EACnB,OAAO,GAAE,mBAAwB,GAChC,MAAM,CAqBR;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,UAAU,GAAG,aAAa,GAAG,SAAS,CAAC,EACpE,GAAG,EAAE,OAAO,EAAE,EACd,KAAK,EAAE,UAAU,EAAE,EACnB,OAAO,GAAE,uBAA4B,GACpC,MAAM,CA+DR;AA4KD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,CAO9D"}
1
+ {"version":3,"file":"llms-txt.d.ts","sourceRoot":"","sources":["../src/llms-txt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EACV,UAAU,EACV,OAAO,EACP,UAAU,EAEX,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAchE,OAAO,EAAE,qBAAqB,EAAE,CAAC;AAOjC,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oDAAoD;IACpD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACjC;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAC9B,iEAAiE;IACjE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;;;;;;;;;;OAcG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,kEAAkE;AAClE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,uBAAwB,SAAQ,mBAAmB;IAClE;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC;IACjC;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,MAAM,CAAC;CAC9C;AASD;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAC1B,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,UAAU,GAAG,aAAa,GAAG,SAAS,CAAC,EACpE,GAAG,EAAE,OAAO,EAAE,EACd,KAAK,EAAE,UAAU,EAAE,EACnB,OAAO,GAAE,mBAAwB,GAChC,MAAM,CAeR;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS,CAAC,EACpD,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,UAAU,EAAE,EACnB,OAAO,GAAE,mBAAwB,GAChC,MAAM,CAGR;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,UAAU,GAAG,aAAa,GAAG,SAAS,CAAC,EACpE,GAAG,EAAE,OAAO,EAAE,EACd,KAAK,EAAE,UAAU,EAAE,EACnB,OAAO,GAAE,uBAA4B,GACpC,MAAM,CAqBR"}
package/dist/llms-txt.js CHANGED
@@ -1,10 +1,16 @@
1
+ import { extractFirstParagraph } from "@dogsbay/serialize-core";
1
2
  import { DEFAULT_BASE_PATH } from "./base-path.js";
3
+ import { DESCRIPTION_LIMIT, buildLlmsFullTxt as buildLlmsFullTxtFile, buildLlmsTxt as buildLlmsTxtFile, buildSectionLlmsTxt as buildSectionLlmsTxtFile, llmsFullOrder, truncate, } from "@dogsbay/site-files";
4
+ // Moved to serialize-core so @dogsbay/site-check need not depend on format-astro
5
+ export { extractFirstParagraph };
2
6
  const EXTERNAL_HREF_RE = /^(?:https?:\/\/|mailto:|tel:|#)/i;
3
- const DEFAULT_DESCRIPTION_LIMIT = 160;
4
- const DEFAULT_TOP_LEVEL_LABEL = "Documentation";
5
- const DEFAULT_OTHER_PAGES_LABEL = "Other pages";
6
- const DEFAULT_AGGREGATES_LABEL = "Other sites";
7
+ const DEFAULT_DESCRIPTION_LIMIT = DESCRIPTION_LIMIT;
7
8
  // ── Public builders ─────────────────────────────────────────────
9
+ //
10
+ // The files themselves are written by @dogsbay/site-files, shared with
11
+ // dogsbay-ssg. This module maps ExportPage and NavItem onto its records:
12
+ // keys are slugs ("index" for the home page), URLs are `<prefix>/<slug>.md`,
13
+ // descriptions come from front matter or the first paragraph.
8
14
  /**
9
15
  * Build the top-level llms.txt index for a site.
10
16
  *
@@ -15,95 +21,18 @@ const DEFAULT_AGGREGATES_LABEL = "Other sites";
15
21
  * - Pages reachable in `pages` but absent from `nav` appended under
16
22
  * a final `## {otherPagesLabel}` section. Set `otherPagesLabel`
17
23
  * to `false` to suppress (e.g. when nav is the publish list).
18
- * - External hrefs are skipped.
24
+ * - External hrefs, and hrefs outside `hrefPrefix`, are skipped.
19
25
  */
20
26
  export function buildLlmsTxt(siteConfig, nav, pages, options = {}) {
21
- const hrefPrefix = options.hrefPrefix ?? DEFAULT_BASE_PATH;
22
- const siteUrl = options.siteUrl ?? siteConfig.siteUrl;
23
- const descLimit = options.descriptionLimit ?? DEFAULT_DESCRIPTION_LIMIT;
24
- const topLevelLabel = options.topLevelLabel ?? DEFAULT_TOP_LEVEL_LABEL;
25
- const otherPagesLabel = options.otherPagesLabel === undefined
26
- ? DEFAULT_OTHER_PAGES_LABEL
27
- : options.otherPagesLabel;
28
- const slugIndex = indexPagesBySlug(pages);
29
- const emittedSlugs = new Set();
30
- const out = [];
31
- out.push(`# ${siteConfig.siteName}`);
32
- out.push("");
33
- if (siteConfig.description) {
34
- out.push(`> ${siteConfig.description}`);
35
- out.push("");
36
- }
37
- if (options.whenToUse?.trim()) {
38
- out.push("## When to use this");
39
- out.push("");
40
- out.push(options.whenToUse.trim());
41
- out.push("");
42
- }
43
- const topLevelLeaves = [];
44
- const groupSections = [];
45
- for (const item of nav) {
46
- if (item.children && item.children.length > 0) {
47
- const lines = [];
48
- lines.push(`## ${item.label}`);
49
- lines.push("");
50
- // Group's own landing page first, if it has one
51
- if (item.href && !EXTERNAL_HREF_RE.test(item.href)) {
52
- const entry = renderEntry(item, slugIndex, hrefPrefix, siteUrl, descLimit, emittedSlugs);
53
- if (entry)
54
- lines.push(entry);
55
- }
56
- collectEntries(item.children, slugIndex, hrefPrefix, siteUrl, descLimit, lines, emittedSlugs);
57
- lines.push("");
58
- groupSections.push(lines);
59
- }
60
- else if (item.href && !EXTERNAL_HREF_RE.test(item.href)) {
61
- topLevelLeaves.push(item);
62
- }
63
- }
64
- if (topLevelLeaves.length > 0) {
65
- out.push(`## ${topLevelLabel}`);
66
- out.push("");
67
- for (const leaf of topLevelLeaves) {
68
- const entry = renderEntry(leaf, slugIndex, hrefPrefix, siteUrl, descLimit, emittedSlugs);
69
- if (entry)
70
- out.push(entry);
71
- }
72
- out.push("");
73
- }
74
- for (const section of groupSections) {
75
- out.push(...section);
76
- }
77
- // Orphan pass — pages that exist in `pages` but were never hit by
78
- // the nav walk. Emit so agents see the full surface even when nav
79
- // curates a subset (the common case: a sidebar trims internal /
80
- // sub-utility pages, but agents still want to find them).
81
- if (otherPagesLabel !== false) {
82
- const orphans = collectOrphanEntries(pages, emittedSlugs, hrefPrefix, siteUrl, descLimit);
83
- if (orphans.length > 0) {
84
- out.push(`## ${otherPagesLabel}`);
85
- out.push("");
86
- out.push(...orphans);
87
- out.push("");
88
- }
89
- }
90
- // Aggregated sites last: this site's own content comes first for an
91
- // agent reading top-down with a budget.
92
- const aggregates = (options.aggregates ?? []).filter((a) => a.llmsTxt || a.url);
93
- if (aggregates.length > 0) {
94
- out.push(`## ${options.aggregatesLabel ?? DEFAULT_AGGREGATES_LABEL}`);
95
- out.push("");
96
- for (const a of aggregates) {
97
- // Prefer the llms.txt: it is the agent-shaped entry point. Fall
98
- // back to the site root so a partially-configured entry still
99
- // yields a working link rather than being silently dropped.
100
- const href = a.llmsTxt ?? a.url;
101
- const desc = a.description ? `: ${a.description}` : "";
102
- out.push(`- [${a.name}](${href})${desc}`);
103
- }
104
- out.push("");
105
- }
106
- return out.join("\n").replace(/\n{3,}/g, "\n\n").trimEnd() + "\n";
27
+ const m = mapInputs(siteConfig, nav, pages, options);
28
+ return buildLlmsTxtFile({ name: siteConfig.siteName, description: siteConfig.description, whenToUse: options.whenToUse, aggregates: options.aggregates }, m.nav, m.pages, {
29
+ url: m.url,
30
+ // A nav entry whose page is missing is still linked, by its label.
31
+ missing: "link",
32
+ topLevelLabel: options.topLevelLabel,
33
+ otherPagesLabel: options.otherPagesLabel,
34
+ aggregatesLabel: options.aggregatesLabel,
35
+ });
107
36
  }
108
37
  /**
109
38
  * Per-section llms.txt — same shape as the root index, scoped to one
@@ -111,158 +40,44 @@ export function buildLlmsTxt(siteConfig, nav, pages, options = {}) {
111
40
  * can pull only the section they care about.
112
41
  */
113
42
  export function buildSectionLlmsTxt(siteConfig, group, pages, options = {}) {
114
- const hrefPrefix = options.hrefPrefix ?? DEFAULT_BASE_PATH;
115
- const siteUrl = options.siteUrl ?? siteConfig.siteUrl;
116
- const descLimit = options.descriptionLimit ?? DEFAULT_DESCRIPTION_LIMIT;
117
- const slugIndex = indexPagesBySlug(pages);
118
- const out = [];
119
- out.push(`# ${siteConfig.siteName} — ${group.label}`);
120
- out.push("");
121
- out.push(`## ${group.label}`);
122
- out.push("");
123
- if (group.href && !EXTERNAL_HREF_RE.test(group.href)) {
124
- const entry = renderEntry(group, slugIndex, hrefPrefix, siteUrl, descLimit);
125
- if (entry)
126
- out.push(entry);
127
- }
128
- if (group.children) {
129
- collectEntries(group.children, slugIndex, hrefPrefix, siteUrl, descLimit, out);
130
- }
131
- return out.join("\n").replace(/\n{3,}/g, "\n\n").trimEnd() + "\n";
43
+ const m = mapInputs(siteConfig, [group], pages, options);
44
+ return buildSectionLlmsTxtFile({ name: siteConfig.siteName }, m.nav[0], m.pages, { url: m.url, missing: "link" });
132
45
  }
133
46
  /**
134
- * Bundle every page reachable from `nav` into a single document, in
135
- * nav order. Each page is delimited by a `# Title` header and `URL:`
47
+ * Bundle every page into a single document: nav order, then pages outside
48
+ * the nav by slug. Each page is delimited by a `# Title` header and `URL:`
136
49
  * line, then either the full body (default) or just a description.
137
50
  */
138
51
  export function buildLlmsFullTxt(siteConfig, nav, pages, options = {}) {
139
- const hrefPrefix = options.hrefPrefix ?? DEFAULT_BASE_PATH;
140
- const siteUrl = options.siteUrl ?? siteConfig.siteUrl;
141
52
  const summary = options.summary ?? (options.serializePage ? "body" : "description");
142
53
  if (summary === "body" && !options.serializePage) {
143
54
  throw new Error(`buildLlmsFullTxt: summary "body" requires options.serializePage`);
144
55
  }
145
- const slugIndex = indexPagesBySlug(pages);
146
- const navOrder = flattenNavToSlugs(nav, hrefPrefix);
147
- // Append page slugs not reachable from nav (sorted for stable
148
- // output). Same rationale as buildLlmsTxt's orphan pass: the bundle
149
- // is for agents, and curated nav usually trims internal pages that
150
- // agents still want to read.
151
- const seen = new Set(navOrder);
152
- const orphanSlugs = pages
153
- .map((p) => p.slug || "index")
154
- .filter((s) => !seen.has(s))
155
- .sort((a, b) => a.localeCompare(b));
156
- const allSlugs = [...navOrder, ...orphanSlugs];
157
- const out = [];
158
- out.push(`# ${siteConfig.siteName}`);
159
- out.push("");
160
- if (siteConfig.description) {
161
- out.push(`> ${siteConfig.description}`);
162
- out.push("");
163
- }
164
- if (options.whenToUse?.trim()) {
165
- out.push("## When to use this");
166
- out.push("");
167
- out.push(options.whenToUse.trim());
168
- out.push("");
169
- }
170
- let firstPage = true;
171
- for (const slug of allSlugs) {
172
- const page = slugIndex.get(slug);
173
- if (!page)
174
- continue;
175
- if (!firstPage) {
176
- out.push("---");
177
- out.push("");
178
- }
179
- firstPage = false;
180
- out.push(`# ${page.title}`);
181
- out.push("");
182
- out.push(`URL: ${absoluteUrl(slugToHref(slug, hrefPrefix), siteUrl)}`);
183
- out.push("");
184
- if (summary === "body") {
185
- out.push(options.serializePage(page).trimEnd());
186
- }
187
- else {
188
- const desc = getPageDescription(page, options.descriptionLimit ?? DEFAULT_DESCRIPTION_LIMIT);
189
- out.push(desc || page.title);
190
- }
191
- out.push("");
192
- }
193
- return out.join("\n").replace(/\n{3,}/g, "\n\n").trimEnd() + "\n";
194
- }
195
- // ── Internals: nav walking + entry rendering ────────────────────
196
- function collectEntries(items, slugIndex, hrefPrefix, siteUrl, descLimit, out, emitted) {
197
- for (const item of items) {
198
- if (item.href && !EXTERNAL_HREF_RE.test(item.href)) {
199
- const entry = renderEntry(item, slugIndex, hrefPrefix, siteUrl, descLimit, emitted);
200
- if (entry)
201
- out.push(entry);
202
- }
203
- if (item.children) {
204
- collectEntries(item.children, slugIndex, hrefPrefix, siteUrl, descLimit, out, emitted);
205
- }
206
- }
207
- }
208
- function renderEntry(item, slugIndex, hrefPrefix, siteUrl, descLimit, emitted) {
209
- if (!item.href)
210
- return null;
211
- const slug = hrefToSlug(item.href, hrefPrefix);
212
- if (slug === null)
213
- return null;
214
- const page = slugIndex.get(slug);
215
- const label = item.label || page?.title || slug;
216
- const description = page ? getPageDescription(page, descLimit) : "";
217
- // Same host-root degeneration as slugToHref: href "/" strips to ""
218
- // and would yield ".md".
219
- const stripped = item.href.replace(/\/$/, "");
220
- const url = absoluteUrl(stripped ? `${stripped}.md` : indexMirrorHref(""), siteUrl);
221
- if (emitted && page)
222
- emitted.add(slug);
223
- return description
224
- ? `- [${label}](${url}): ${description}`
225
- : `- [${label}](${url})`;
226
- }
227
- /**
228
- * Render entries for pages that exist but weren't reached during the
229
- * nav walk. Sorted alphabetically by slug for stable output (nav
230
- * order isn't meaningful for these — they're not in nav).
231
- */
232
- function collectOrphanEntries(pages, emitted, hrefPrefix, siteUrl, descLimit) {
233
- const orphans = [];
234
- const sorted = pages
235
- .filter((p) => !emitted.has(p.slug || "index"))
236
- .sort((a, b) => (a.slug || "index").localeCompare(b.slug || "index"));
237
- for (const page of sorted) {
238
- const slug = page.slug || "index";
239
- const label = page.title || slug;
240
- const description = getPageDescription(page, descLimit);
241
- const url = absoluteUrl(slugToHref(slug, hrefPrefix), siteUrl);
242
- orphans.push(description
243
- ? `- [${label}](${url}): ${description}`
244
- : `- [${label}](${url})`);
245
- }
246
- return orphans;
247
- }
248
- function flattenNavToSlugs(nav, hrefPrefix) {
249
- const slugs = [];
250
- const seen = new Set();
251
- const walk = (items) => {
252
- for (const item of items) {
253
- if (item.href && !EXTERNAL_HREF_RE.test(item.href)) {
254
- const slug = hrefToSlug(item.href, hrefPrefix);
255
- if (slug !== null && !seen.has(slug)) {
256
- seen.add(slug);
257
- slugs.push(slug);
258
- }
259
- }
260
- if (item.children)
261
- walk(item.children);
262
- }
56
+ const m = mapInputs(siteConfig, nav, pages, options);
57
+ const load = (key) => {
58
+ const page = m.byKey.get(key);
59
+ if (summary === "body")
60
+ return options.serializePage(page);
61
+ return m.pages.get(key).description || page.title;
263
62
  };
264
- walk(nav);
265
- return slugs;
63
+ return buildLlmsFullTxtFile({ name: siteConfig.siteName, description: siteConfig.description, whenToUse: options.whenToUse }, llmsFullOrder(m.nav, m.pages), m.pages, m.url, load);
64
+ }
65
+ /** ExportPage and NavItem as @dogsbay/site-files records. */
66
+ function mapInputs(siteConfig, nav, pages, options) {
67
+ const hrefPrefix = options.hrefPrefix ?? DEFAULT_BASE_PATH;
68
+ const siteUrl = options.siteUrl ?? siteConfig.siteUrl;
69
+ const limit = options.descriptionLimit ?? DEFAULT_DESCRIPTION_LIMIT;
70
+ const byKey = indexPagesBySlug(pages);
71
+ const records = new Map();
72
+ for (const [key, page] of byKey) {
73
+ const description = getPageDescription(page, limit);
74
+ records.set(key, { title: page.title, ...(description ? { description } : {}) });
75
+ }
76
+ const toNav = (items) => items.map((item) => {
77
+ const key = item.href ? hrefToSlug(item.href, hrefPrefix) : null;
78
+ return { label: item.label, ...(key !== null ? { key } : {}), children: toNav(item.children ?? []) };
79
+ });
80
+ return { pages: records, byKey, nav: toNav(nav), url: (key) => absoluteUrl(slugToHref(key, hrefPrefix), siteUrl) };
266
81
  }
267
82
  // ── Internals: page lookup + URL math ───────────────────────────
268
83
  function indexPagesBySlug(pages) {
@@ -333,73 +148,4 @@ function getPageDescription(page, limit) {
333
148
  const firstPara = extractFirstParagraph(page.tree);
334
149
  return firstPara ? truncate(firstPara, limit) : "";
335
150
  }
336
- /**
337
- * Extract plain text of the first paragraph in a page tree. Cross-shape
338
- * tolerant: handles `node.inline` (dogsbay-md parser) and
339
- * `node.children[{type: "prose", inline}]` (Starlight importer).
340
- */
341
- export function extractFirstParagraph(tree) {
342
- for (const node of tree) {
343
- if (node.type !== "paragraph")
344
- continue;
345
- const inline = node.inline ?? findProseInline(node.children);
346
- if (inline)
347
- return inlineToPlainText(inline).trim();
348
- }
349
- return "";
350
- }
351
- function findProseInline(children) {
352
- if (!children)
353
- return undefined;
354
- for (const child of children) {
355
- if (child.type === "prose" && child.inline)
356
- return child.inline;
357
- }
358
- return undefined;
359
- }
360
- function inlineToPlainText(inline) {
361
- let out = "";
362
- for (const node of inline) {
363
- switch (node.type) {
364
- case "text":
365
- out += node.text;
366
- break;
367
- case "code":
368
- out += node.text;
369
- break;
370
- case "link":
371
- case "highlight":
372
- out += inlineToPlainText(node.children);
373
- break;
374
- case "kbd":
375
- out += node.keys.join("+");
376
- break;
377
- case "math":
378
- out += node.latex;
379
- break;
380
- case "image":
381
- if (node.alt)
382
- out += node.alt;
383
- break;
384
- case "break":
385
- out += " ";
386
- break;
387
- case "html-inline":
388
- case "footnote-ref":
389
- case "icon":
390
- // No useful plain text; skip.
391
- break;
392
- }
393
- }
394
- return out;
395
- }
396
- function truncate(text, limit) {
397
- const collapsed = text.replace(/\s+/g, " ").trim();
398
- if (collapsed.length <= limit)
399
- return collapsed;
400
- const slice = collapsed.slice(0, limit);
401
- const lastSpace = slice.lastIndexOf(" ");
402
- const cut = lastSpace > limit * 0.5 ? slice.slice(0, lastSpace) : slice;
403
- return `${cut.trimEnd()}…`;
404
- }
405
151
  //# sourceMappingURL=llms-txt.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"llms-txt.js","sourceRoot":"","sources":["../src/llms-txt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"llms-txt.js","sourceRoot":"","sources":["../src/llms-txt.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../src/plugins.ts"],"names":[],"mappings":"AA0CA,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,wBAAwB;IACvC,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,aAAa,EAAE,wBAAwB,EAAE,CAAC;IAC1C,6CAA6C;IAC7C,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,wCAAwC;IACxC,aAAa,EAAE,kBAAkB,EAAE,CAAC;IACpC,wDAAwD;IACxD,iBAAiB,CAAC,EAAE,kBAAkB,EAAE,CAAC;CAC1C;AAsBD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI,CAMzE;AA4RD,qDAAqD;AACrD,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAM3D"}
1
+ {"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../src/plugins.ts"],"names":[],"mappings":"AA4CA,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,wBAAwB;IACvC,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,aAAa,EAAE,wBAAwB,EAAE,CAAC;IAC1C,6CAA6C;IAC7C,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,wCAAwC;IACxC,aAAa,EAAE,kBAAkB,EAAE,CAAC;IACpC,wDAAwD;IACxD,iBAAiB,CAAC,EAAE,kBAAkB,EAAE,CAAC;CAC1C;AAsBD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI,CAMzE;AA4RD,qDAAqD;AACrD,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAM3D"}
package/dist/plugins.js CHANGED
@@ -37,7 +37,9 @@
37
37
  *
38
38
  * See plans/plugin-api.md.
39
39
  */
40
- import { writeFileSync, readFileSync, existsSync, mkdirSync, copyFileSync, rmSync } from "node:fs";
40
+ import { readFileSync, existsSync, mkdirSync, rmSync } from "node:fs";
41
+ // Unchanged files are not rewritten, so `site dev` reloads only what changed
42
+ import { writeFileSync, copyFileSync } from "./write-if-changed.js";
41
43
  import { dirname, join, basename, extname } from "node:path";
42
44
  /**
43
45
  * Slots the runtime emits stack files for. Each entry is always