@dogsbay/serialize-core 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.
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Child-links realization — `::child-links` → the page's children, from the
3
+ * NAV (plans/child-links.md).
4
+ *
5
+ * A `child-links` node is a QUERY: "list the pages under this one". Only
6
+ * `format-dogsbay-md` can carry the query itself; every other target needs
7
+ * the answer, and the answer belongs to the build (a page added next week
8
+ * must appear), which is why importers emit the node instead of a list.
9
+ *
10
+ * I/O-free like `includes.ts`: the caller supplies the nav, the holding
11
+ * page's href, and a page lookup. A listing that finds nothing is REPORTED
12
+ * and becomes nothing — Cloudflare's own component throws there.
13
+ */
14
+ import type { NavItem, TreeNode } from "@dogsbay/types";
15
+ export interface ChildLinksContext {
16
+ nav: NavItem[];
17
+ /** The holding page's href, as the nav writes hrefs. */
18
+ pageHref: string;
19
+ /**
20
+ * Map a `folder=` attribute (a site path such as `/workers/runtime-apis/`)
21
+ * to nav href form. Default: used as written.
22
+ */
23
+ folderHref?: (folder: string) => string;
24
+ /**
25
+ * Asked when `nav` has nothing under the folder: typically the page
26
+ * DIRECTORY, for pages hidden from the sidebar (Cloudflare's
27
+ * `sidebar: hidden` sections are still listed by its component) or a
28
+ * folder whose nav group has no page of its own. Keyed by `navKey`.
29
+ */
30
+ fallbackChildren?: (key: string) => NavItem[] | undefined;
31
+ /** Title, description and tags of the page at a nav href, when known. */
32
+ lookup?: (href: string) => {
33
+ title?: string;
34
+ description?: string;
35
+ tags?: string[];
36
+ data?: Record<string, unknown>;
37
+ } | undefined;
38
+ /**
39
+ * The href to WRITE for a nav href. `site build` builds its nav with the
40
+ * base path on, but trees must carry site-relative links: Astro adds the
41
+ * base itself, and an export target (a vault, MkDocs) has none.
42
+ */
43
+ outputHref?: (navHref: string) => string;
44
+ }
45
+ export interface ChildLinksResult {
46
+ /** Listings realized. */
47
+ realized: number;
48
+ /** Listings that found no nav node, or a node without children: `folder` (or the page href). */
49
+ empty: string[];
50
+ /** Listings answered by `fallbackChildren` because the nav had nothing there. */
51
+ fromFallback: string[];
52
+ }
53
+ /** Normalize an href for comparison: no hash or query, no trailing slash, no `.md`/`index`. */
54
+ export declare function navKey(href: string): string;
55
+ /**
56
+ * Replace every `child-links` node in `tree` with its listing. Mutates in
57
+ * place (callers hold the array) and returns what happened.
58
+ */
59
+ export declare function realizeChildLinks(tree: TreeNode[], ctx: ChildLinksContext): ChildLinksResult;
60
+ /** Does this tree hold a `child-links` node? (Cheap pre-check for callers.) */
61
+ export declare function hasChildLinks(tree: TreeNode[]): boolean;
62
+ /**
63
+ * The page DIRECTORY as `fallbackChildren`: a folder's pages, by title, for
64
+ * folders the nav does not show (hidden from the sidebar, or a nav group with
65
+ * no page of its own). A sub-folder with no page of its own is addressable by
66
+ * its path and becomes an href-less group, which `realizeChildLinks`
67
+ * flattens — leaving it out lost everything below it. Callers pass only
68
+ * pages to list (not fragments, partials or redirect stubs). Shared by the
69
+ * Dogsbay CLI and dogsbay-ssg.
70
+ */
71
+ export declare function directoryChildren(pages: Array<{
72
+ slug: string;
73
+ title?: string;
74
+ }>, hrefOf: (slug: string) => string): (key: string) => NavItem[] | undefined;
75
+ //# sourceMappingURL=child-links.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"child-links.d.ts","sourceRoot":"","sources":["../src/child-links.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAc,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAEpE,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,OAAO,EAAE,CAAC;IACf,wDAAwD;IACxD,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;IACxC;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,EAAE,GAAG,SAAS,CAAC;IAC1D,yEAAyE;IACzE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,SAAS,CAAC;IACjI;;;;OAIG;IACH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;CAC1C;AAED,MAAM,WAAW,gBAAgB;IAC/B,yBAAyB;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,gGAAgG;IAChG,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,iFAAiF;IACjF,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,+FAA+F;AAC/F,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI3C;AA4CD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,iBAAiB,GAAG,gBAAgB,CAsH5F;AA0CD,+EAA+E;AAC/E,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,CAEvD;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EAC9C,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAC/B,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,EAAE,GAAG,SAAS,CAkCxC"}
@@ -0,0 +1,264 @@
1
+ /** Normalize an href for comparison: no hash or query, no trailing slash, no `.md`/`index`. */
2
+ export function navKey(href) {
3
+ let h = href.replace(/[?#].*$/, "").replace(/\/index(\.mdx?)?$/, "").replace(/\.mdx?$/, "");
4
+ h = h.replace(/\/+$/, "");
5
+ return h === "" ? "/" : h;
6
+ }
7
+ function findNode(items, key, rootKey = "/") {
8
+ // The home page's children are the nav's top level (its own "Home" entry
9
+ // is a leaf, and is skipped as a self-link). Under a base path the root
10
+ // is the base (`/docs`), not `/`.
11
+ if (key === "/" || key === rootKey)
12
+ return { label: "", href: key, children: items };
13
+ // Prefer the node that HAS children: a section's "Overview" self-entry
14
+ // shares its href and comes first.
15
+ let hit;
16
+ const walk = (list) => {
17
+ for (const item of list) {
18
+ if (item.href !== undefined && navKey(item.href) === key) {
19
+ if (item.children?.length) {
20
+ if (!hit?.children?.length)
21
+ hit = item;
22
+ }
23
+ else if (!hit)
24
+ hit = item;
25
+ }
26
+ if (item.children)
27
+ walk(item.children);
28
+ }
29
+ };
30
+ walk(items);
31
+ return hit;
32
+ }
33
+ /**
34
+ * The children to list: those linking somewhere other than the parent (a
35
+ * section's "Overview" self-entry does not), with a group that has no page of
36
+ * its own FLATTENED into its parent — dropping it lost every page inside.
37
+ * A child that links OUT (a URL) is listed too, by its nav label: a folder
38
+ * whose pages are all external links (Cloudflare `external_link:` — partner
39
+ * integrations, templates on GitHub) listed nothing, where the source's
40
+ * listing links each one to its URL.
41
+ */
42
+ function listable(children, parentKey) {
43
+ const out = [];
44
+ for (const c of children ?? []) {
45
+ if (c.href === undefined)
46
+ out.push(...listable(c.children, parentKey));
47
+ else if (/^[a-z][a-z0-9+.-]*:|^\/\//i.test(c.href) || navKey(c.href) !== parentKey)
48
+ out.push(c);
49
+ }
50
+ return out;
51
+ }
52
+ const bool = (v) => v === true || v === "true" || v === "";
53
+ /**
54
+ * Replace every `child-links` node in `tree` with its listing. Mutates in
55
+ * place (callers hold the array) and returns what happened.
56
+ */
57
+ export function realizeChildLinks(tree, ctx) {
58
+ const result = { realized: 0, empty: [], fromFallback: [] };
59
+ const write = ctx.outputHref ?? ((h) => h);
60
+ const toFolder = ctx.folderHref ?? ((f) => f);
61
+ const rootKey = navKey(toFolder("/"));
62
+ const expand = (node) => {
63
+ const props = node.props ?? {};
64
+ // `scope=section`: the top-level section the page is in (Cloudflare's
65
+ // <ListTutorials> lists its section's tutorials). The page's path relative
66
+ // to the site root is its href minus what `folderHref` adds for "/".
67
+ let folder = typeof props.folder === "string" && props.folder ? props.folder : undefined;
68
+ if (!folder && props.scope === "section") {
69
+ // `scopeBase`: the page's own source namespace on a versioned or
70
+ // localized site (`/v2`), set at import; the section is the first
71
+ // segment BELOW it, not the version.
72
+ const scopeBase = typeof props.scopeBase === "string" ? props.scopeBase.replace(/\/+$/, "") : "";
73
+ const base = navKey(toFolder(`${scopeBase}/`)).replace(/\/$/, "");
74
+ const rel = base === "" ? ctx.pageHref : ctx.pageHref.startsWith(`${base}/`) ? ctx.pageHref.slice(base.length) : ctx.pageHref;
75
+ const seg = rel.split("/").filter(Boolean)[0];
76
+ folder = `${scopeBase}/${seg ? `${seg}/` : ""}`;
77
+ }
78
+ const key = navKey(folder ? toFolder(folder) : ctx.pageHref);
79
+ const matchSrc = typeof props.match === "string" ? props.match : undefined;
80
+ const conditions = parseMatch(matchSrc);
81
+ // A condition without `field:` cannot mean anything; an empty listing
82
+ // would hide the typo, so it is reported as empty instead.
83
+ if (matchSrc && matchSrc.split(";").some((c) => c.trim() && !c.includes(":"))) {
84
+ result.empty.push(`${folder ?? ctx.pageHref} (match "${matchSrc}": a condition has no "field:")`);
85
+ return [];
86
+ }
87
+ const depth = Math.max(1, Math.min(6, Number(props.depth ?? 1) || 1));
88
+ const descriptions = bool(props.descriptions);
89
+ const cards = props.style === "cards";
90
+ const tag = typeof props.tag === "string" && props.tag ? props.tag : undefined;
91
+ const tagged = (items) => (tag ? items.filter((i) => ctx.lookup?.(i.href)?.tags?.includes(tag)) : items);
92
+ let top;
93
+ if (conditions.length) {
94
+ // A QUERY, not a tree: every page under the folder whose front matter
95
+ // matches, flat, by title — read from the page directory when there is
96
+ // one (a collection query sees pages the sidebar hides), else the nav.
97
+ const source = ctx.fallbackChildren?.(key) ?? findNode(ctx.nav, key, rootKey)?.children ?? [];
98
+ const self = navKey(ctx.pageHref);
99
+ const seen = new Set();
100
+ const titled = flatten(source)
101
+ .filter((i) => {
102
+ const k = navKey(i.href);
103
+ if (k === self || k === key || seen.has(k))
104
+ return false;
105
+ seen.add(k);
106
+ return matches(ctx.lookup?.(i.href)?.data, conditions);
107
+ })
108
+ .map((i) => ({ i, t: ctx.lookup?.(i.href)?.title ?? i.label }));
109
+ top = tagged(titled.sort((a, b) => a.t.localeCompare(b.t)).map((x) => x.i));
110
+ }
111
+ else {
112
+ top = tagged(listable(findNode(ctx.nav, key, rootKey)?.children, key));
113
+ if (!top.length && ctx.fallbackChildren) {
114
+ top = tagged(listable(ctx.fallbackChildren(key), key));
115
+ if (top.length)
116
+ result.fromFallback.push(folder ?? ctx.pageHref);
117
+ }
118
+ }
119
+ if (!top.length) {
120
+ result.empty.push(folder ?? ctx.pageHref);
121
+ return [];
122
+ }
123
+ result.realized++;
124
+ const info = (item) => {
125
+ const hit = ctx.lookup?.(item.href);
126
+ return { title: hit?.title || item.label, description: descriptions ? hit?.description : undefined };
127
+ };
128
+ if (cards) {
129
+ return [
130
+ {
131
+ type: "cards",
132
+ children: top.map((item) => {
133
+ const { title, description } = info(item);
134
+ return {
135
+ type: "card",
136
+ props: { title, href: write(item.href) },
137
+ children: description ? [{ type: "paragraph", inline: [{ type: "text", text: description }] }] : [],
138
+ };
139
+ }),
140
+ },
141
+ ];
142
+ }
143
+ const list = (items, level, parentKey) => ({
144
+ type: "unordered-list",
145
+ children: items.map((item) => {
146
+ const { title, description } = info(item);
147
+ const inline = [{ type: "link", href: write(item.href), children: [{ type: "text", text: title }] }];
148
+ if (description)
149
+ inline.push({ type: "text", text: `: ${description}` });
150
+ const children = [{ type: "paragraph", inline }];
151
+ const itemKey = navKey(item.href);
152
+ const below = listable(item.children, itemKey);
153
+ if (!conditions.length && level < depth && below.length)
154
+ children.push(list(below, level + 1, itemKey));
155
+ return { type: "list-item", children };
156
+ }),
157
+ });
158
+ return [list(top, 1, key)];
159
+ };
160
+ const walk = (nodes) => {
161
+ for (let i = 0; i < nodes.length; i++) {
162
+ const node = nodes[i];
163
+ if (node.type === "child-links") {
164
+ const out = expand(node);
165
+ nodes.splice(i, 1, ...out);
166
+ i += out.length - 1;
167
+ continue;
168
+ }
169
+ if (node.children)
170
+ walk(node.children);
171
+ }
172
+ };
173
+ walk(tree);
174
+ return result;
175
+ }
176
+ /** Every linked page in a nav subtree, depth-first (groups without a page contribute their pages). */
177
+ function flatten(items) {
178
+ const out = [];
179
+ const walk = (list) => {
180
+ for (const i of list) {
181
+ if (i.href !== undefined && !/^[a-z][a-z0-9+.-]*:|^\/\//i.test(i.href))
182
+ out.push(i);
183
+ if (i.children)
184
+ walk(i.children);
185
+ }
186
+ };
187
+ walk(items);
188
+ return out;
189
+ }
190
+ /**
191
+ * `match="pcx_content_type:tutorial,example;products:waf"` — every condition
192
+ * must hold; a condition holds when the front-matter field (a string, or a
193
+ * list of strings or `{ id }` objects) contains any of its values.
194
+ */
195
+ function parseMatch(src) {
196
+ if (!src)
197
+ return [];
198
+ return src
199
+ .split(";")
200
+ .map((c) => c.trim())
201
+ .filter(Boolean)
202
+ .map((c) => {
203
+ const at = c.indexOf(":");
204
+ return { field: c.slice(0, at).trim(), values: c.slice(at + 1).split(",").map((v) => v.trim()).filter(Boolean) };
205
+ })
206
+ .filter((c) => c.field && c.values.length);
207
+ }
208
+ function matches(data, conditions) {
209
+ if (!data)
210
+ return false;
211
+ return conditions.every(({ field, values }) => {
212
+ const v = data[field];
213
+ const have = (Array.isArray(v) ? v : [v]).map((x) => (x && typeof x === "object" && "id" in x ? String(x.id) : x == null ? "" : String(x)));
214
+ return values.some((want) => have.includes(want));
215
+ });
216
+ }
217
+ /** Does this tree hold a `child-links` node? (Cheap pre-check for callers.) */
218
+ export function hasChildLinks(tree) {
219
+ return tree.some((n) => n.type === "child-links" || (n.children ? hasChildLinks(n.children) : false));
220
+ }
221
+ /**
222
+ * The page DIRECTORY as `fallbackChildren`: a folder's pages, by title, for
223
+ * folders the nav does not show (hidden from the sidebar, or a nav group with
224
+ * no page of its own). A sub-folder with no page of its own is addressable by
225
+ * its path and becomes an href-less group, which `realizeChildLinks`
226
+ * flattens — leaving it out lost everything below it. Callers pass only
227
+ * pages to list (not fragments, partials or redirect stubs). Shared by the
228
+ * Dogsbay CLI and dogsbay-ssg.
229
+ */
230
+ export function directoryChildren(pages, hrefOf) {
231
+ const root = { kids: new Map() };
232
+ // The root answers to "/" and to the base (`hrefOf("")` → `/docs/`).
233
+ const byKey = new Map([["/", root], [navKey(hrefOf("")), root]]);
234
+ for (const page of pages) {
235
+ const segs = page.slug.replace(/(^|\/)index$/, "").split("/").filter(Boolean);
236
+ let dir = root;
237
+ for (let i = 0; i < segs.length; i++) {
238
+ if (!dir.kids.has(segs[i])) {
239
+ const d = { kids: new Map() };
240
+ dir.kids.set(segs[i], d);
241
+ byKey.set(navKey(hrefOf(segs.slice(0, i + 1).join("/"))), d);
242
+ }
243
+ dir = dir.kids.get(segs[i]);
244
+ }
245
+ dir.item = { label: page.title || segs[segs.length - 1] || "Home", href: hrefOf(page.slug) };
246
+ }
247
+ // Cached: a query at "/" asks for the whole site, once per page holding one.
248
+ const cache = new Map();
249
+ const items = (dir) => {
250
+ let hit = cache.get(dir);
251
+ if (!hit) {
252
+ hit = [...dir.kids.entries()]
253
+ .map(([seg, d]) => ({ ...(d.item ?? { label: seg }), children: items(d) }))
254
+ .sort((x, y) => x.label.localeCompare(y.label));
255
+ cache.set(dir, hit);
256
+ }
257
+ return hit;
258
+ };
259
+ return (key) => {
260
+ const dir = byKey.get(key);
261
+ return dir ? items(dir) : undefined;
262
+ };
263
+ }
264
+ //# sourceMappingURL=child-links.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"child-links.js","sourceRoot":"","sources":["../src/child-links.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -19,8 +19,10 @@
19
19
  export { leafInline, leafHtml, hasInline, hasContent, codeText, codeLang, tabTitle, tabValue, cardFields, cardBodySources, headingLevel, headingText, headingFragment, slugifyHeadingText, calloutVariant, calloutTitle, listStart, mediaSrc, renderLeaf, type CardFields, } from "./reads.js";
20
20
  export { walkInline, applyTextFlags, inlinePlainText, markdownInlineEmitters, htmlInlineEmitters, escapeHtml, escapeAttr, codeSpan, type InlineContext, type InlineEmitters, type InlineWalkOptions, } from "./inline.js";
21
21
  export { ExportLedger, formatLedgerReport, formatCapabilityTable, unsupportedFeatures, validateCapabilities, validateLedgerAgainstCapabilities, type SupportLevel, type CapabilityDeclaration, type LossAction, type ExportLedgerEntry, type LedgerSummaryRow, } from "./capability.js";
22
- export { pickCodeFence, pickDirectiveFence, indent, prefixLines, normalizeTrailingWhitespace, stripHtml, inlineHtmlToMarkdown, yamlScalar, frontmatterBlock, } from "./text.js";
22
+ export { pickCodeFence, pickDirectiveFence, indent, prefixLines, normalizeTrailingWhitespace, stripHtml, inlineHtmlToMarkdown, escapeMarkdownText, isSafeHref, neutralizeMarkdown, markdownDestination, markdownTitle, markdownLatex, remarkMath, footnoteLabel, mapOutsideCodeSpans, safeAnchorId, yamlScalar, frontmatterBlock, } from "./text.js";
23
23
  export { resolvePlugins, composeCapabilities, formatPluginConflicts, type ExportPluginMeta, type ResolvedPlugins, type ProviderConflict, type InvalidOverride, type ResolveOptions, } from "./plugins.js";
24
24
  export { realizeIncludes, hasIncludes, type RealizeResult, type RealizeOptions, } from "./includes.js";
25
+ export { realizeChildLinks, hasChildLinks, directoryChildren, navKey, type ChildLinksContext, type ChildLinksResult, } from "./child-links.js";
25
26
  export { renderUnknownNode, type UnknownNodePolicy, type UnknownNodeOptions, } from "./unknown.js";
27
+ export { detectLeadingNodes, deriveDescription, extractFirstParagraph, type LeadingNodeInfo, } from "./lead.js";
26
28
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EACL,UAAU,EACV,QAAQ,EACR,SAAS,EACT,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,eAAe,EACf,YAAY,EACZ,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,UAAU,EACV,KAAK,UAAU,GAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,UAAU,EACV,cAAc,EACd,eAAe,EACf,sBAAsB,EACtB,kBAAkB,EAClB,UAAU,EACV,UAAU,EACV,QAAQ,EACR,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,iBAAiB,GACvB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,iCAAiC,EACjC,KAAK,YAAY,EACjB,KAAK,qBAAqB,EAC1B,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,GACtB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,MAAM,EACN,WAAW,EACX,2BAA2B,EAC3B,SAAS,EACT,oBAAoB,EACpB,UAAU,EACV,gBAAgB,GACjB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACrB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,cAAc,GACpB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,eAAe,EACf,WAAW,EACX,KAAK,aAAa,EAClB,KAAK,cAAc,GACpB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,iBAAiB,EACjB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,GACxB,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EACL,UAAU,EACV,QAAQ,EACR,SAAS,EACT,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,eAAe,EACf,YAAY,EACZ,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,UAAU,EACV,KAAK,UAAU,GAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,UAAU,EACV,cAAc,EACd,eAAe,EACf,sBAAsB,EACtB,kBAAkB,EAClB,UAAU,EACV,UAAU,EACV,QAAQ,EACR,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,iBAAiB,GACvB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,iCAAiC,EACjC,KAAK,YAAY,EACjB,KAAK,qBAAqB,EAC1B,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,GACtB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,MAAM,EACN,WAAW,EACX,2BAA2B,EAC3B,SAAS,EACT,oBAAoB,EACpB,kBAAkB,EAClB,UAAU,EACV,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,UAAU,EACV,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,UAAU,EACV,gBAAgB,GACjB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACrB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,cAAc,GACpB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,eAAe,EACf,WAAW,EACX,KAAK,aAAa,EAClB,KAAK,cAAc,GACpB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,MAAM,EACN,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,GACtB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,iBAAiB,EACjB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,GACxB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,KAAK,eAAe,GACrB,MAAM,WAAW,CAAC"}
package/dist/index.js CHANGED
@@ -19,8 +19,11 @@
19
19
  export { leafInline, leafHtml, hasInline, hasContent, codeText, codeLang, tabTitle, tabValue, cardFields, cardBodySources, headingLevel, headingText, headingFragment, slugifyHeadingText, calloutVariant, calloutTitle, listStart, mediaSrc, renderLeaf, } from "./reads.js";
20
20
  export { walkInline, applyTextFlags, inlinePlainText, markdownInlineEmitters, htmlInlineEmitters, escapeHtml, escapeAttr, codeSpan, } from "./inline.js";
21
21
  export { ExportLedger, formatLedgerReport, formatCapabilityTable, unsupportedFeatures, validateCapabilities, validateLedgerAgainstCapabilities, } from "./capability.js";
22
- export { pickCodeFence, pickDirectiveFence, indent, prefixLines, normalizeTrailingWhitespace, stripHtml, inlineHtmlToMarkdown, yamlScalar, frontmatterBlock, } from "./text.js";
22
+ export { pickCodeFence, pickDirectiveFence, indent, prefixLines, normalizeTrailingWhitespace, stripHtml, inlineHtmlToMarkdown, escapeMarkdownText, isSafeHref, neutralizeMarkdown, markdownDestination, markdownTitle, markdownLatex, remarkMath, footnoteLabel, mapOutsideCodeSpans, safeAnchorId, yamlScalar, frontmatterBlock, } from "./text.js";
23
23
  export { resolvePlugins, composeCapabilities, formatPluginConflicts, } from "./plugins.js";
24
24
  export { realizeIncludes, hasIncludes, } from "./includes.js";
25
+ export { realizeChildLinks, hasChildLinks, directoryChildren, navKey, } from "./child-links.js";
25
26
  export { renderUnknownNode, } from "./unknown.js";
27
+ // Page-lead reads shared by format-astro and @dogsbay/site-check
28
+ export { detectLeadingNodes, deriveDescription, extractFirstParagraph, } from "./lead.js";
26
29
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EACL,UAAU,EACV,QAAQ,EACR,SAAS,EACT,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,eAAe,EACf,YAAY,EACZ,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,UAAU,GAEX,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,UAAU,EACV,cAAc,EACd,eAAe,EACf,sBAAsB,EACtB,kBAAkB,EAClB,UAAU,EACV,UAAU,EACV,QAAQ,GAIT,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,iCAAiC,GAMlC,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,MAAM,EACN,WAAW,EACX,2BAA2B,EAC3B,SAAS,EACT,oBAAoB,EACpB,UAAU,EACV,gBAAgB,GACjB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,qBAAqB,GAMtB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,eAAe,EACf,WAAW,GAGZ,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,iBAAiB,GAGlB,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EACL,UAAU,EACV,QAAQ,EACR,SAAS,EACT,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,eAAe,EACf,YAAY,EACZ,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,UAAU,GAEX,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,UAAU,EACV,cAAc,EACd,eAAe,EACf,sBAAsB,EACtB,kBAAkB,EAClB,UAAU,EACV,UAAU,EACV,QAAQ,GAIT,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,iCAAiC,GAMlC,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,MAAM,EACN,WAAW,EACX,2BAA2B,EAC3B,SAAS,EACT,oBAAoB,EACpB,kBAAkB,EAClB,UAAU,EACV,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,UAAU,EACV,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,UAAU,EACV,gBAAgB,GACjB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,qBAAqB,GAMtB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,eAAe,EACf,WAAW,GAGZ,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,MAAM,GAGP,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,iBAAiB,GAGlB,MAAM,cAAc,CAAC;AAEtB,iEAAiE;AACjE,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,GAEtB,MAAM,WAAW,CAAC"}
package/dist/inline.d.ts CHANGED
@@ -61,6 +61,9 @@ export interface InlineEmitters {
61
61
  icon?: (node: Extract<InlineNode, {
62
62
  type: "icon";
63
63
  }>, ctx: InlineContext) => string;
64
+ badge?: (node: Extract<InlineNode, {
65
+ type: "badge";
66
+ }>, ctx: InlineContext) => string;
64
67
  math?: (node: Extract<InlineNode, {
65
68
  type: "math";
66
69
  }>, ctx: InlineContext) => string;
@@ -1 +1 @@
1
- {"version":3,"file":"inline.d.ts","sourceRoot":"","sources":["../src/inline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,4CAA4C;AAC5C,MAAM,WAAW,aAAa;IAC5B,oEAAoE;IACpE,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,MAAM,CAAC;IACzC,iDAAiD;IACjD,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACjC,mEAAmE;IACnE,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACpD;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,GAAG,EAAE,aAAa,KAAK,MAAM,CAAC;IACnF,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,GAAG,EAAE,aAAa,KAAK,MAAM,CAAC;IACnF,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,EAAE;QAAE,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC,EAAE,GAAG,EAAE,aAAa,KAAK,MAAM,CAAC;IACrF,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,GAAG,EAAE,aAAa,KAAK,MAAM,CAAC;IACnF,SAAS,CAAC,EAAE,CACV,IAAI,EAAE,OAAO,CAAC,UAAU,EAAE;QAAE,IAAI,EAAE,WAAW,CAAA;KAAE,CAAC,EAChD,GAAG,EAAE,aAAa,KACf,MAAM,CAAC;IACZ,cAAc,CAAC,EAAE,CACf,IAAI,EAAE,OAAO,CAAC,UAAU,EAAE;QAAE,IAAI,EAAE,cAAc,CAAA;KAAE,CAAC,EACnD,GAAG,EAAE,aAAa,KACf,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,EAAE;QAAE,IAAI,EAAE,KAAK,CAAA;KAAE,CAAC,EAAE,GAAG,EAAE,aAAa,KAAK,MAAM,CAAC;IACjF,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,GAAG,EAAE,aAAa,KAAK,MAAM,CAAC;IACnF,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,GAAG,EAAE,aAAa,KAAK,MAAM,CAAC;IACnF,aAAa,CAAC,EAAE,CACd,IAAI,EAAE,OAAO,CAAC,UAAU,EAAE;QAAE,IAAI,EAAE,aAAa,CAAA;KAAE,CAAC,EAClD,GAAG,EAAE,aAAa,KACf,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,EAAE;QAAE,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC,EAAE,GAAG,EAAE,aAAa,KAAK,MAAM,CAAC;CACtF;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,cAAc,CAAC;IACzB,iEAAiE;IACjE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAClC;;;OAGG;IACH,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,KAAK,MAAM,CAAC;IACjE,sDAAsD;IACtD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACrD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,CA2BvF;AAED,gEAAgE;AAChE,wBAAgB,UAAU,CACxB,KAAK,EAAE,UAAU,EAAE,EACnB,OAAO,EAAE,iBAAiB,GACzB,MAAM,CAwBR;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,CAAC,UAAU,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EAC3C,IAAI,EAAE;IAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAAC,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAAC,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;CAAE,GAClG,MAAM,CAMR;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,IAAI,cAAc,CAuCvD;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAc7C;AAED,sDAAsD;AACtD,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,cAAc,CA2BnD"}
1
+ {"version":3,"file":"inline.d.ts","sourceRoot":"","sources":["../src/inline.ts"],"names":[],"mappings":"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"}
package/dist/inline.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { footnoteLabel, remarkMath, isSafeHref, markdownDestination, markdownTitle } from "./text.js";
1
2
  /**
2
3
  * Best-effort plain-text degradation for a variant a format cannot express.
3
4
  * Always prefer losing formatting over losing CONTENT.
@@ -14,6 +15,8 @@ export function inlinePlainText(node, escape) {
14
15
  return escape(node.keys.join("+"));
15
16
  case "icon":
16
17
  return escape(node.library ? `${node.library}:${node.name}` : node.name);
18
+ case "badge":
19
+ return escape(node.text);
17
20
  case "break":
18
21
  return "\n";
19
22
  case "html-inline":
@@ -85,19 +88,28 @@ export function markdownInlineEmitters() {
85
88
  italic: (s) => `*${s}*`,
86
89
  strike: (s) => `~~${s}~~`,
87
90
  }),
91
+ // An unsafe scheme keeps the link text and is reported; a title cannot
92
+ // end its own quotes.
88
93
  link: (node, ctx) => {
89
- const title = node.title ? ` "${node.title}"` : "";
90
- return `[${ctx.recurse(node.children)}](${node.href}${title})`;
94
+ if (!isSafeHref(node.href)) {
95
+ ctx.report("link", `unsafe link target dropped (${node.href.slice(0, 40)})`);
96
+ return ctx.recurse(node.children);
97
+ }
98
+ return `[${ctx.recurse(node.children)}](${markdownDestination(node.href)}${markdownTitle(node.title)})`;
91
99
  },
92
- image: (node) => {
93
- const title = node.title ? ` "${node.title}"` : "";
94
- return `![${node.alt ?? ""}](${node.src}${title})`;
100
+ image: (node, ctx) => {
101
+ if (!isSafeHref(node.src, "image")) {
102
+ ctx.report("image", `unsafe image source dropped (${node.src.slice(0, 40)})`);
103
+ return ctx.escape(node.alt ?? "");
104
+ }
105
+ return `![${(node.alt ?? "").replace(/[[\]\\]/g, "\\$&")}](${markdownDestination(node.src)}${markdownTitle(node.title)})`;
95
106
  },
96
107
  code: (node) => codeSpan(node.text),
97
108
  highlight: (node, ctx) => `==${ctx.recurse(node.children)}==`,
98
- "footnote-ref": (node) => `[^${node.label}]`,
99
- kbd: (node) => node.keys.map((k) => `<kbd>${k}</kbd>`).join("+"),
100
- math: (node) => `$${node.latex}$`,
109
+ "footnote-ref": (node) => `[^${footnoteLabel(node.label)}]`,
110
+ kbd: (node) => node.keys.map((k) => `<kbd>${escapeHtml(k)}</kbd>`).join("+"),
111
+ // remark-math reads `$` like code backticks (`\$` does not escape).
112
+ math: (node) => remarkMath(node.latex, false),
101
113
  // The presets MUST cover all 11 variants — omitting one is the bug this
102
114
  // module was written to stop (format-astro silently dropped `highlight`
103
115
  // for exactly this reason, until the retrofit put it on this walk).
@@ -111,7 +123,7 @@ export function markdownInlineEmitters() {
111
123
  icon: (node, ctx) => {
112
124
  const full = node.library ? `${node.library}:${node.name}` : node.name;
113
125
  ctx.report("icon", `no icon syntax in this format — emitted as the name "${full}"`);
114
- return node.name;
126
+ return ctx.escape(node.name);
115
127
  },
116
128
  "html-inline": (node) => node.html,
117
129
  break: () => " \n",
@@ -163,10 +175,20 @@ export function htmlInlineEmitters() {
163
175
  strike: (s) => `<s>${s}</s>`,
164
176
  }),
165
177
  link: (node, ctx) => {
178
+ if (!isSafeHref(node.href)) {
179
+ ctx.report("link", `unsafe link target dropped (${node.href.slice(0, 40)})`);
180
+ return ctx.recurse(node.children);
181
+ }
166
182
  const title = node.title ? ` title="${escapeAttr(node.title)}"` : "";
167
183
  return `<a href="${escapeAttr(node.href)}"${title}>${ctx.recurse(node.children)}</a>`;
168
184
  },
169
- image: (node) => `<img src="${escapeAttr(node.src)}" alt="${escapeAttr(node.alt ?? "")}" />`,
185
+ image: (node, ctx) => {
186
+ if (!isSafeHref(node.src, "image")) {
187
+ ctx.report("image", `unsafe image source dropped (${node.src.slice(0, 40)})`);
188
+ return ctx.escape(node.alt ?? "");
189
+ }
190
+ return `<img src="${escapeAttr(node.src)}" alt="${escapeAttr(node.alt ?? "")}" />`;
191
+ },
170
192
  code: (node, ctx) => `<code>${ctx.escape(node.text)}</code>`,
171
193
  highlight: (node, ctx) => `<mark>${ctx.recurse(node.children)}</mark>`,
172
194
  "footnote-ref": (node) => `<sup><a href="#fn-${node.label}" id="fnref-${node.label}">[${node.label}]</a></sup>`,
@@ -1 +1 @@
1
- {"version":3,"file":"inline.js","sourceRoot":"","sources":["../src/inline.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"inline.js","sourceRoot":"","sources":["../src/inline.ts"],"names":[],"mappings":"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"}
package/dist/lead.d.ts ADDED
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Detect whether a page's body tree already provides a level-1
3
+ * heading and / or a leading paragraph.
4
+ *
5
+ * `format-astro` uses this to decide whether to auto-inject the
6
+ * frontmatter `title` and `description` at the top of `<main>` —
7
+ * we never overwrite writer-authored content, only fill in what
8
+ * the body doesn't already cover.
9
+ *
10
+ * See plans/auto-lede.md.
11
+ */
12
+ import type { TreeNode } from "@dogsbay/types";
13
+ export interface LeadingNodeInfo {
14
+ /**
15
+ * `true` when `tree[0]` is a level-1 heading. Heading depth
16
+ * lives at either `node.depth` (some importers) or
17
+ * `node.props.level` (others); both shapes are recognized.
18
+ */
19
+ hasH1: boolean;
20
+ /**
21
+ * `true` when the body's first non-heading node is a paragraph.
22
+ * Used to decide whether the description should be auto-rendered
23
+ * as a lede `<p>` — if the writer already wrote a lede
24
+ * paragraph, we leave it alone.
25
+ *
26
+ * "First non-heading node" means: `tree[1]` when `tree[0]` is a
27
+ * heading; otherwise `tree[0]`. So `# Title\nLede paragraph`
28
+ * yields `{ hasH1: true, hasLede: true }`.
29
+ */
30
+ hasLede: boolean;
31
+ }
32
+ /**
33
+ * Inspect the leading nodes of a page tree.
34
+ *
35
+ * Defensive against empty trees and missing properties — returns
36
+ * `false` for both flags when the tree is empty.
37
+ */
38
+ export declare function detectLeadingNodes(tree: TreeNode[] | undefined): LeadingNodeInfo;
39
+ /**
40
+ * Derive a `<meta name="description">` from a page body when the
41
+ * frontmatter doesn't supply one: the first prose paragraph,
42
+ * whitespace-collapsed and truncated at a word boundary.
43
+ *
44
+ * Deliberately Minja-unaware. This only runs at build time, on the
45
+ * preprocessed (resolved) tree — `{{ var }}` and `{% include %}` are
46
+ * already gone, so the first paragraph is real prose. (A still-undefined
47
+ * `{{ var }}` survives `preserve` mode, but that's a content bug equally
48
+ * visible in the body and already flagged by the `unresolved-directives`
49
+ * audit — not the description's job to scrub.) The `--no-preprocess` /
50
+ * `dogsbay convert` paths emit unresolved output by design, where a
51
+ * slightly-off description is the least of it.
52
+ *
53
+ * Scans past a leading H1 / heading / code to the first prose paragraph;
54
+ * returns `undefined` when the page has no prose. See
55
+ * plans/auto-meta-description.md.
56
+ */
57
+ export declare function deriveDescription(tree: TreeNode[] | undefined, maxLen?: number): string | undefined;
58
+ /**
59
+ * Extract plain text of the first paragraph in a page tree. Cross-shape
60
+ * tolerant: handles `node.inline` (dogsbay-md parser) and
61
+ * `node.children[{type: "prose", inline}]` (Starlight importer).
62
+ */
63
+ export declare function extractFirstParagraph(tree: TreeNode[]): string;
64
+ //# sourceMappingURL=lead.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lead.d.ts","sourceRoot":"","sources":["../src/lead.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAc,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE3D,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,KAAK,EAAE,OAAO,CAAC;IACf;;;;;;;;;OASG;IACH,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,QAAQ,EAAE,GAAG,SAAS,GAC3B,eAAe,CAmCjB;AAmBD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,QAAQ,EAAE,GAAG,SAAS,EAC5B,MAAM,SAAM,GACX,MAAM,GAAG,SAAS,CAYpB;AAiCD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,CAO9D"}