@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.
- package/dist/api-markdown.d.ts +8 -0
- package/dist/api-markdown.d.ts.map +1 -0
- package/dist/api-markdown.js +41 -0
- package/dist/api-markdown.js.map +1 -0
- package/dist/blog.d.ts.map +1 -1
- package/dist/blog.js +5 -1
- package/dist/blog.js.map +1 -1
- package/dist/browser.d.ts +14 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +14 -0
- package/dist/browser.js.map +1 -0
- package/dist/canonical.d.ts +34 -0
- package/dist/canonical.d.ts.map +1 -0
- package/dist/canonical.js +107 -0
- package/dist/canonical.js.map +1 -0
- package/dist/head-metadata.d.ts +26 -0
- package/dist/head-metadata.d.ts.map +1 -0
- package/dist/head-metadata.js +56 -0
- package/dist/head-metadata.js.map +1 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -3
- package/dist/index.js.map +1 -1
- package/dist/lead.d.ts +1 -57
- package/dist/lead.d.ts.map +1 -1
- package/dist/lead.js +3 -132
- package/dist/lead.js.map +1 -1
- package/dist/llms-txt.d.ts +6 -10
- package/dist/llms-txt.d.ts.map +1 -1
- package/dist/llms-txt.js +48 -302
- package/dist/llms-txt.js.map +1 -1
- package/dist/plugins.d.ts.map +1 -1
- package/dist/plugins.js +3 -1
- package/dist/plugins.js.map +1 -1
- package/dist/project.d.ts +36 -1
- package/dist/project.d.ts.map +1 -1
- package/dist/project.js +276 -841
- package/dist/project.js.map +1 -1
- package/dist/redirects.d.ts +22 -0
- package/dist/redirects.d.ts.map +1 -1
- package/dist/redirects.js +70 -123
- package/dist/redirects.js.map +1 -1
- package/dist/serialize.d.ts +4 -13
- package/dist/serialize.d.ts.map +1 -1
- package/dist/serialize.js +304 -102
- package/dist/serialize.js.map +1 -1
- package/dist/sitemap.d.ts +44 -17
- package/dist/sitemap.d.ts.map +1 -1
- package/dist/sitemap.js +31 -104
- package/dist/sitemap.js.map +1 -1
- package/dist/taxonomy.d.ts.map +1 -1
- package/dist/taxonomy.js +7 -1
- package/dist/taxonomy.js.map +1 -1
- package/dist/theme-css.d.ts +26 -0
- package/dist/theme-css.d.ts.map +1 -0
- package/dist/theme-css.js +642 -0
- package/dist/theme-css.js.map +1 -0
- package/dist/tone-classes.d.ts +14 -0
- package/dist/tone-classes.d.ts.map +1 -0
- package/dist/tone-classes.js +30 -0
- package/dist/tone-classes.js.map +1 -0
- package/dist/write-if-changed.d.ts +21 -0
- package/dist/write-if-changed.d.ts.map +1 -0
- package/dist/write-if-changed.js +58 -0
- package/dist/write-if-changed.js.map +1 -0
- package/package.json +13 -5
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** Block Markdown → HTML (an operation's description). */
|
|
2
|
+
export declare function apiBlockHtml(text: string): string;
|
|
3
|
+
/** One line of Markdown → inline HTML (a parameter or property). */
|
|
4
|
+
export declare function apiInlineHtml(text: string): string;
|
|
5
|
+
/** A schema property list with every `description` rendered inline,
|
|
6
|
+
* through nested `properties` / `items`. A copy; the node is untouched. */
|
|
7
|
+
export declare function apiPropertiesHtml(list: unknown): unknown;
|
|
8
|
+
//# sourceMappingURL=api-markdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-markdown.d.ts","sourceRoot":"","sources":["../src/api-markdown.ts"],"names":[],"mappings":"AAgBA,0DAA0D;AAC1D,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,oEAAoE;AACpE,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD;AAID;4EAC4E;AAC5E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAUxD"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API description text → HTML, for the API components that render it with
|
|
3
|
+
* `set:html` (EndpointCard, PropertyItem, ParameterTable).
|
|
4
|
+
*
|
|
5
|
+
* OpenAPI defines `description` as CommonMark, and every producer of an
|
|
6
|
+
* `endpoint` node (format-openapi, the MDX adapters) supplies text or
|
|
7
|
+
* Markdown, never HTML. It was passed through as HTML: a spec's markdown
|
|
8
|
+
* showed as `## Authentication` and `**Creating a token**`, and a spec from
|
|
9
|
+
* someone else's repository could put a `<script>` into the built site.
|
|
10
|
+
* Rendered here with raw HTML OFF (`<` is escaped) and markdown-it's link
|
|
11
|
+
* validation (no `javascript:` / `vbscript:` / `file:` / `data:` links).
|
|
12
|
+
*/
|
|
13
|
+
import MarkdownIt from "markdown-it";
|
|
14
|
+
const md = new MarkdownIt({ html: false, linkify: false, typographer: false });
|
|
15
|
+
/** Block Markdown → HTML (an operation's description). */
|
|
16
|
+
export function apiBlockHtml(text) {
|
|
17
|
+
return md.render(text).trim();
|
|
18
|
+
}
|
|
19
|
+
/** One line of Markdown → inline HTML (a parameter or property). */
|
|
20
|
+
export function apiInlineHtml(text) {
|
|
21
|
+
return md.renderInline(text.replace(/\s*\n\s*/g, " ")).trim();
|
|
22
|
+
}
|
|
23
|
+
/** A schema property list with every `description` rendered inline,
|
|
24
|
+
* through nested `properties` / `items`. A copy; the node is untouched. */
|
|
25
|
+
export function apiPropertiesHtml(list) {
|
|
26
|
+
if (!Array.isArray(list))
|
|
27
|
+
return list;
|
|
28
|
+
return list.map((p) => {
|
|
29
|
+
if (!p || typeof p !== "object")
|
|
30
|
+
return p;
|
|
31
|
+
const o = { ...p };
|
|
32
|
+
if (typeof o.description === "string")
|
|
33
|
+
o.description = apiInlineHtml(o.description);
|
|
34
|
+
if (o.properties)
|
|
35
|
+
o.properties = apiPropertiesHtml(o.properties);
|
|
36
|
+
if (o.items)
|
|
37
|
+
o.items = apiPropertiesHtml(o.items);
|
|
38
|
+
return o;
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=api-markdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-markdown.js","sourceRoot":"","sources":["../src/api-markdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,UAAU,MAAM,aAAa,CAAC;AAErC,MAAM,EAAE,GAAG,IAAI,UAAU,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;AAE/E,0DAA0D;AAC1D,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AAChC,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAChE,CAAC;AAID;4EAC4E;AAC5E,MAAM,UAAU,iBAAiB,CAAC,IAAa;IAC7C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACpB,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,OAAO,CAAC,CAAC;QAC1C,MAAM,CAAC,GAAG,EAAE,GAAI,CAAU,EAAE,CAAC;QAC7B,IAAI,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ;YAAE,CAAC,CAAC,WAAW,GAAG,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QACpF,IAAI,CAAC,CAAC,UAAU;YAAE,CAAC,CAAC,UAAU,GAAG,iBAAiB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QACjE,IAAI,CAAC,CAAC,KAAK;YAAE,CAAC,CAAC,KAAK,GAAG,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAClD,OAAO,CAAC,CAAC;IACX,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/blog.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blog.d.ts","sourceRoot":"","sources":["../src/blog.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"blog.d.ts","sourceRoot":"","sources":["../src/blog.ts"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAmBjD,iDAAiD;AACjD,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,4BAA4B;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,GAAG,EAAE,OAAO,CAAC;IACb,6CAA6C;IAC7C,SAAS,EAAE,SAAS,GAAG,SAAS,CAAC;CAClC;AAED,sDAAsD;AACtD,eAAO,MAAM,aAAa,EAAE,cAK3B,CAAC;AAEF,yCAAyC;AACzC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0EAA0E;IAC1E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,4BAA4B;AAC5B,MAAM,WAAW,QAAQ;IACvB,sEAAsE;IACtE,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB;IACpB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,6CAA6C;AAC7C,MAAM,WAAW,aAAa;IAC5B,2EAA2E;IAC3E,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACvC,4DAA4D;IAC5D,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACxC;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAQnD;AAED,oEAAoE;AACpE,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAIvD;AAMD;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,UAAU,EAAE,EACnB,IAAI,EAAE;IACJ,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACxC,MAAM,EAAE,cAAc,CAAC;CACxB,GACA,QAAQ,CA8DV;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAYxE;AAmBD,yDAAyD;AACzD,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAErD;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,cAAc,GACrB;IAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CA0D3D"}
|
package/dist/blog.js
CHANGED
|
@@ -25,7 +25,9 @@
|
|
|
25
25
|
* never changes after the build, so doing it in the browser would
|
|
26
26
|
* re-walk the DOM on every page load for a constant.
|
|
27
27
|
*/
|
|
28
|
-
import { existsSync, mkdirSync, readFileSync, rmSync
|
|
28
|
+
import { existsSync, mkdirSync, readFileSync, rmSync } from "node:fs";
|
|
29
|
+
// Unchanged files are not rewritten, so `site dev` reloads only what changed
|
|
30
|
+
import { writeFileSync } from "./write-if-changed.js";
|
|
29
31
|
import { dirname, join } from "node:path";
|
|
30
32
|
import { basePathSegments, joinBaseUrl, withBasePath } from "./base-path.js";
|
|
31
33
|
import { derivePageDescription, textOfNode } from "./taxonomy.js";
|
|
@@ -287,6 +289,7 @@ const title = pageNo === 1 ? siteConfig.siteName : \`\${siteConfig.siteName} —
|
|
|
287
289
|
---
|
|
288
290
|
<DocsLayout
|
|
289
291
|
siteName={siteConfig.siteName}
|
|
292
|
+
siteTagline={siteConfig.tagline}
|
|
290
293
|
title={title}
|
|
291
294
|
nav={navData as any[]}
|
|
292
295
|
headings={[]}
|
|
@@ -301,6 +304,7 @@ const title = pageNo === 1 ? siteConfig.siteName : \`\${siteConfig.siteName} —
|
|
|
301
304
|
plausibleScriptUrl={siteConfig.plausible?.scriptUrl}
|
|
302
305
|
tagPrefixes={siteConfig.tagPrefixes}
|
|
303
306
|
tagLabels={siteConfig.tagLabels}
|
|
307
|
+
tagAutoColor={siteConfig.tagAutoColor}
|
|
304
308
|
taxonomyIndexPaths={siteConfig.taxonomyIndexPaths}
|
|
305
309
|
chrome="blog"
|
|
306
310
|
favicon={favicon}
|
package/dist/blog.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blog.js","sourceRoot":"","sources":["../src/blog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"blog.js","sourceRoot":"","sources":["../src/blog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Worker- and browser-safe part of @dogsbay/format-astro: the builders
|
|
3
|
+
* and helpers that import no Node built-ins. The main entry also writes files
|
|
4
|
+
* (project generation, plugins, taxonomy pages) and needs Node.
|
|
5
|
+
*
|
|
6
|
+
* Used by packages that run in a Worker or a browser as well as in Node,
|
|
7
|
+
* such as @dogsbay/site-check and dogsbay-ssg.
|
|
8
|
+
*/
|
|
9
|
+
export * from "./lead.js";
|
|
10
|
+
export * from "./llms-txt.js";
|
|
11
|
+
export * from "./sitemap.js";
|
|
12
|
+
export * from "./redirects.js";
|
|
13
|
+
export * from "./base-path.js";
|
|
14
|
+
//# sourceMappingURL=browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC"}
|
package/dist/browser.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Worker- and browser-safe part of @dogsbay/format-astro: the builders
|
|
3
|
+
* and helpers that import no Node built-ins. The main entry also writes files
|
|
4
|
+
* (project generation, plugins, taxonomy pages) and needs Node.
|
|
5
|
+
*
|
|
6
|
+
* Used by packages that run in a Worker or a browser as well as in Node,
|
|
7
|
+
* such as @dogsbay/site-check and dogsbay-ssg.
|
|
8
|
+
*/
|
|
9
|
+
export * from "./lead.js";
|
|
10
|
+
export * from "./llms-txt.js";
|
|
11
|
+
export * from "./sitemap.js";
|
|
12
|
+
export * from "./redirects.js";
|
|
13
|
+
export * from "./base-path.js";
|
|
14
|
+
//# sourceMappingURL=browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical URLs on a versioned site: a page of an older version names the
|
|
3
|
+
* same page in the default version, and leaves the sitemap. The decision is
|
|
4
|
+
* `decideCanonical` in @dogsbay/site-files, shared with dogsbay-ssg (its
|
|
5
|
+
* src/core/canonical.ts); this file gives it the default version's pages
|
|
6
|
+
* and redirects from the imported pages. See dogsbay-ssg
|
|
7
|
+
* plans/canonical-versions.md, step 2.
|
|
8
|
+
*/
|
|
9
|
+
import type { ExportPage } from "@dogsbay/types";
|
|
10
|
+
import { type VersionSeo } from "@dogsbay/site-files";
|
|
11
|
+
export interface CanonicalPlanOptions {
|
|
12
|
+
/** Pages the build does not emit (fragments, `excludeFromRoutes`): never a canonical target. */
|
|
13
|
+
isEmitted?: (page: ExportPage) => boolean;
|
|
14
|
+
siteUrl?: string;
|
|
15
|
+
/** urlBase + basePath, as the sitemap takes it. */
|
|
16
|
+
basePath?: string;
|
|
17
|
+
versions?: Array<{
|
|
18
|
+
id: string;
|
|
19
|
+
} & VersionSeo>;
|
|
20
|
+
defaultVersion?: string;
|
|
21
|
+
redirects?: Record<string, string | {
|
|
22
|
+
to: string;
|
|
23
|
+
status?: number;
|
|
24
|
+
}>;
|
|
25
|
+
}
|
|
26
|
+
export interface PageCanonical {
|
|
27
|
+
/** The canonical URL when it is not the page itself (DocsLayout computes that one). */
|
|
28
|
+
url?: string;
|
|
29
|
+
noindex: boolean;
|
|
30
|
+
sitemap: boolean;
|
|
31
|
+
}
|
|
32
|
+
/** Per page slug: its canonical, noindex and sitemap decision. */
|
|
33
|
+
export declare function canonicalPlan(pages: ExportPage[], o: CanonicalPlanOptions): Map<string, PageCanonical>;
|
|
34
|
+
//# sourceMappingURL=canonical.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonical.d.ts","sourceRoot":"","sources":["../src/canonical.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAIvE,MAAM,WAAW,oBAAoB;IACnC,gGAAgG;IAChG,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,UAAU,CAAC,CAAC;IAC9C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtE;AAED,MAAM,WAAW,aAAa;IAC5B,uFAAuF;IACvF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AAID,kEAAkE;AAClE,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,EAAE,oBAAoB,GAAG,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CA4FtG"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { decideCanonical } from "@dogsbay/site-files";
|
|
2
|
+
import { normalizePrefix, originOf, pageHref } from "./sitemap.js";
|
|
3
|
+
import { inPageUnit, pageUnitPrefix } from "./redirects.js";
|
|
4
|
+
const URL_RE = /^[a-z][a-z0-9+.-]*:/i;
|
|
5
|
+
/** Per page slug: its canonical, noindex and sitemap decision. */
|
|
6
|
+
export function canonicalPlan(pages, o) {
|
|
7
|
+
const plan = new Map();
|
|
8
|
+
const prefix = normalizePrefix(o.basePath);
|
|
9
|
+
const origin = o.siteUrl && /^https?:\/\//.test(o.siteUrl) ? originOf(o.siteUrl).replace(/\/+$/, "") : undefined;
|
|
10
|
+
const basePath = prefix.replace(/^\//, "");
|
|
11
|
+
// Site paths as page slugs are written: no slashes at the ends, no base path, no suffix.
|
|
12
|
+
const norm = (s) => {
|
|
13
|
+
let p = s.trim().replace(/[?#].*$/, "").replace(/^\/+|\/+$/g, "");
|
|
14
|
+
if (basePath && (p === basePath || p.startsWith(basePath + "/")))
|
|
15
|
+
p = p.slice(basePath.length).replace(/^\//, "");
|
|
16
|
+
return p.replace(/(^|\/)index$/, "");
|
|
17
|
+
};
|
|
18
|
+
const live = (p) => !p.redirect && p.frontmatter?.draft !== true && p.frontmatter?.status !== "draft" && (o.isEmitted?.(p) ?? true);
|
|
19
|
+
const slugOf = (p) => norm(p.slug);
|
|
20
|
+
const pageSlugs = new Set(pages.filter(live).map(slugOf));
|
|
21
|
+
// Redirects by site path, chains collapsed; front matter paths are inside the page's unit (#096).
|
|
22
|
+
const raw = new Map();
|
|
23
|
+
for (const p of pages) {
|
|
24
|
+
// Front matter paths are relative to the page's language and version (#096), as collectRedirects reads them.
|
|
25
|
+
const unit = pageUnitPrefix(p);
|
|
26
|
+
if (typeof p.redirect === "string")
|
|
27
|
+
raw.set(slugOf(p), URL_RE.test(p.redirect) ? p.redirect : norm(inPageUnit(p.redirect, unit, prefix)));
|
|
28
|
+
const aliases = p.frontmatter?.aliases;
|
|
29
|
+
if (Array.isArray(aliases))
|
|
30
|
+
for (const a of aliases)
|
|
31
|
+
if (typeof a === "string" && !URL_RE.test(a))
|
|
32
|
+
raw.set(norm(inPageUnit(a, unit, prefix)), slugOf(p));
|
|
33
|
+
}
|
|
34
|
+
for (const [from, v] of Object.entries(o.redirects ?? {})) {
|
|
35
|
+
const to = typeof v === "string" ? v : v.to;
|
|
36
|
+
raw.set(norm(from), URL_RE.test(to) ? to : norm(to));
|
|
37
|
+
}
|
|
38
|
+
const resolve = (from) => {
|
|
39
|
+
let to = raw.get(from);
|
|
40
|
+
const seen = new Set([from]);
|
|
41
|
+
while (to !== undefined && !URL_RE.test(to) && !pageSlugs.has(to) && raw.has(to) && !seen.has(to)) {
|
|
42
|
+
seen.add(to);
|
|
43
|
+
to = raw.get(to);
|
|
44
|
+
}
|
|
45
|
+
if (to === undefined || seen.has(to))
|
|
46
|
+
return undefined;
|
|
47
|
+
return URL_RE.test(to) || pageSlugs.has(to) ? to : undefined;
|
|
48
|
+
};
|
|
49
|
+
// The default version's pages per language and namespace, by path inside the version.
|
|
50
|
+
const group = (p) => `${p.multiSource?.namespace ?? ""}\0${p.multiSource?.locale ?? ""}`;
|
|
51
|
+
const inVersion = (p) => {
|
|
52
|
+
const orig = (p.multiSource?.originalSlug ?? p.slug).replace(/^\/+|\/+$/g, "");
|
|
53
|
+
return orig === "" ? "index" : orig.replace(/\/index$/, "");
|
|
54
|
+
};
|
|
55
|
+
/** The page's site-path prefix: its slug without the path inside its version. */
|
|
56
|
+
const prefixOf = (p) => {
|
|
57
|
+
const s = slugOf(p);
|
|
58
|
+
const inV = inVersion(p);
|
|
59
|
+
if (inV === "index")
|
|
60
|
+
return s;
|
|
61
|
+
return s.endsWith("/" + inV) ? s.slice(0, -inV.length - 1) : s === inV ? "" : s;
|
|
62
|
+
};
|
|
63
|
+
const defaults = new Map();
|
|
64
|
+
if (o.defaultVersion) {
|
|
65
|
+
for (const p of pages) {
|
|
66
|
+
if (p.multiSource?.version !== o.defaultVersion || !live(p))
|
|
67
|
+
continue;
|
|
68
|
+
const g = defaults.get(group(p)) ?? { prefix: prefixOf(p), pages: new Map() };
|
|
69
|
+
g.pages.set(inVersion(p), slugOf(p));
|
|
70
|
+
defaults.set(group(p), g);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
const hasOlder = pages.some((p) => p.multiSource?.version && p.multiSource.version !== o.defaultVersion);
|
|
74
|
+
const url = (slug) => (origin ? `${origin}${pageHref(slug, prefix)}` : undefined);
|
|
75
|
+
for (const p of pages) {
|
|
76
|
+
if (!live(p))
|
|
77
|
+
continue;
|
|
78
|
+
const version = o.versions?.find((v) => v.id === p.multiSource?.version);
|
|
79
|
+
const table = defaults.get(group(p));
|
|
80
|
+
const fm = typeof p.frontmatter?.canonicalUrl === "string" ? p.frontmatter.canonicalUrl : undefined;
|
|
81
|
+
const d = decideCanonical({
|
|
82
|
+
selfUrl: url(slugOf(p)),
|
|
83
|
+
isDefault: !hasOlder || !p.multiSource?.version || p.multiSource.version === o.defaultVersion || !table,
|
|
84
|
+
path: inVersion(p),
|
|
85
|
+
version,
|
|
86
|
+
frontmatter: fm,
|
|
87
|
+
defaultHas: (path) => !!table?.pages.has(path),
|
|
88
|
+
defaultRedirect: (path) => {
|
|
89
|
+
if (!table)
|
|
90
|
+
return undefined;
|
|
91
|
+
const r = resolve([table.prefix, path === "index" ? "" : path].filter(Boolean).join("/"));
|
|
92
|
+
if (r === undefined || URL_RE.test(r))
|
|
93
|
+
return r;
|
|
94
|
+
const inside = table.prefix ? (r === table.prefix ? "index" : r.startsWith(table.prefix + "/") ? r.slice(table.prefix.length + 1) : undefined) : r || "index";
|
|
95
|
+
return inside !== undefined && table.pages.has(inside) ? inside : `/${r}`;
|
|
96
|
+
},
|
|
97
|
+
});
|
|
98
|
+
const t = d.target;
|
|
99
|
+
plan.set(p.slug, {
|
|
100
|
+
url: t.kind === "self" ? undefined : t.kind === "url" ? t.url : url(table.pages.get(t.path)),
|
|
101
|
+
noindex: d.noindex,
|
|
102
|
+
sitemap: d.sitemap,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
return plan;
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=canonical.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonical.js","sourceRoot":"","sources":["../src/canonical.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Head metadata per page (dogsbay-ssg plans/head-metadata.md, Blume item 2):
|
|
3
|
+
* whether it is a home page (JSON-LD `WebSite`, og:type website), its
|
|
4
|
+
* `hreflang` alternates across languages, and its nav trail for JSON-LD
|
|
5
|
+
* `BreadcrumbList`. The builders are @dogsbay/site-files', shared with
|
|
6
|
+
* dogsbay-ssg; this file finds the inputs in the imported pages and the nav.
|
|
7
|
+
*/
|
|
8
|
+
import type { ExportPage, NavItem } from "@dogsbay/types";
|
|
9
|
+
import { type HreflangLink } from "@dogsbay/site-files";
|
|
10
|
+
export interface HeadMetadata {
|
|
11
|
+
home: boolean;
|
|
12
|
+
alternates: HreflangLink[];
|
|
13
|
+
breadcrumbJsonLd?: Record<string, unknown>;
|
|
14
|
+
}
|
|
15
|
+
export interface HeadMetadataOptions {
|
|
16
|
+
siteUrl?: string;
|
|
17
|
+
/** urlBase + basePath, as the sitemap takes it. */
|
|
18
|
+
basePath?: string;
|
|
19
|
+
defaultLocale?: string;
|
|
20
|
+
/** Pages the build writes (not fragments or excluded routes); others are never an alternate. Drafts and redirects are left out as well. */
|
|
21
|
+
isEmitted?: (p: ExportPage) => boolean;
|
|
22
|
+
/** Pages that list alternates: their own canonical and indexable (hreflang between non-canonical URLs is ignored by search engines). */
|
|
23
|
+
indexable?: (p: ExportPage) => boolean;
|
|
24
|
+
}
|
|
25
|
+
export declare function headMetadata(pages: ExportPage[], nav: NavItem[], o: HeadMetadataOptions): Map<string, HeadMetadata>;
|
|
26
|
+
//# sourceMappingURL=head-metadata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"head-metadata.d.ts","sourceRoot":"","sources":["../src/head-metadata.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAA6C,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnG,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2IAA2I;IAC3I,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,OAAO,CAAC;IACvC,wIAAwI;IACxI,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,OAAO,CAAC;CACxC;AAQD,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,mBAAmB,GAAG,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CA+CnH"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { buildBreadcrumbJsonLd, buildHreflangLinks } from "@dogsbay/site-files";
|
|
2
|
+
import { normalizePrefix, originOf, pageHref } from "./sitemap.js";
|
|
3
|
+
/** Path inside the page's source (`guide/install`), `index` for a home page. */
|
|
4
|
+
function inside(p) {
|
|
5
|
+
const orig = (p.multiSource?.originalSlug ?? p.slug).replace(/^\/+|\/+$/g, "");
|
|
6
|
+
return orig === "" || orig === "index" ? "index" : orig.replace(/\/index$/, "");
|
|
7
|
+
}
|
|
8
|
+
export function headMetadata(pages, nav, o) {
|
|
9
|
+
const plan = new Map();
|
|
10
|
+
const live = (p) => !p.redirect && p.frontmatter?.draft !== true && p.frontmatter?.status !== "draft" && (o.isEmitted?.(p) ?? true);
|
|
11
|
+
const prefix = normalizePrefix(o.basePath);
|
|
12
|
+
const origin = o.siteUrl && /^https?:\/\//.test(o.siteUrl) ? originOf(o.siteUrl).replace(/\/+$/, "") : undefined;
|
|
13
|
+
const url = (slug) => (origin ? `${origin}${pageHref(slug, prefix)}` : undefined);
|
|
14
|
+
// Copies of one page across languages: same namespace, version and path inside the source.
|
|
15
|
+
const copies = new Map();
|
|
16
|
+
const locales = new Set(pages.map((p) => p.multiSource?.locale).filter(Boolean));
|
|
17
|
+
if (origin && locales.size >= 2) {
|
|
18
|
+
for (const p of pages) {
|
|
19
|
+
const m = p.multiSource;
|
|
20
|
+
if (!m?.locale || !live(p))
|
|
21
|
+
continue;
|
|
22
|
+
const key = `${m.namespace ?? ""}\0${m.version ?? ""}\0${inside(p)}`;
|
|
23
|
+
const list = copies.get(key) ?? [];
|
|
24
|
+
list.push({ lang: m.locale, url: url(p.slug) });
|
|
25
|
+
copies.set(key, list);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
// The nav trail to each page: labels and hrefs from the top level down.
|
|
29
|
+
const trails = new Map();
|
|
30
|
+
const clean = (href) => href.replace(/[?#].*$/, "").replace(/^\/+|\/+$/g, "").replace(/(^|\/)index$/, "");
|
|
31
|
+
const mount = prefix.replace(/^\/+/, "");
|
|
32
|
+
const key = (href) => {
|
|
33
|
+
const h = clean(href);
|
|
34
|
+
return mount && (h === mount || h.startsWith(`${mount}/`)) ? h.slice(mount.length).replace(/^\/+/, "") : h;
|
|
35
|
+
};
|
|
36
|
+
const walk = (items, chain) => {
|
|
37
|
+
for (const it of items) {
|
|
38
|
+
const here = [...chain, { name: it.label, href: it.href }];
|
|
39
|
+
if (it.href && !/^[a-z][a-z0-9+.-]*:/i.test(it.href) && !it.href.includes("#") && !trails.has(key(it.href)))
|
|
40
|
+
trails.set(key(it.href), here);
|
|
41
|
+
if (it.children?.length)
|
|
42
|
+
walk(it.children, here);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
walk(nav, []);
|
|
46
|
+
for (const p of pages) {
|
|
47
|
+
const home = inside(p) === "index";
|
|
48
|
+
const m = p.multiSource;
|
|
49
|
+
const alternates = m?.locale && live(p) && (o.indexable?.(p) ?? true) ? buildHreflangLinks(copies.get(`${m.namespace ?? ""}\0${m.version ?? ""}\0${inside(p)}`) ?? [], o.defaultLocale) : [];
|
|
50
|
+
const trail = origin && !home ? trails.get(clean(p.slug)) : undefined;
|
|
51
|
+
const breadcrumbJsonLd = trail ? buildBreadcrumbJsonLd(trail.map((t) => ({ name: t.name, url: t.href ? url(key(t.href)) : undefined }))) : undefined;
|
|
52
|
+
plan.set(p.slug, { home, alternates, ...(breadcrumbJsonLd ? { breadcrumbJsonLd } : {}) });
|
|
53
|
+
}
|
|
54
|
+
return plan;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=head-metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"head-metadata.js","sourceRoot":"","sources":["../src/head-metadata.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
export { treeToAstro, escapeExpr, escapeAttr, escapeTemplate } from "./serialize.js";
|
|
2
|
+
export { writeFileSync, copyFileSync } from "./write-if-changed.js";
|
|
2
3
|
export { detectLeadingNodes, deriveDescription } from "./lead.js";
|
|
3
4
|
export type { LeadingNodeInfo } from "./lead.js";
|
|
4
5
|
export type { AstroGenResult, AstroGenOptions, AstroRenderMode } from "./serialize.js";
|
|
5
6
|
export { DEFAULT_BASE_PATH, normalizeBasePath, basePathSegments, joinBaseUrl, buildCurrentPath, parseSiteUrl, combinePrefix, resolvePrefixes, } from "./base-path.js";
|
|
6
7
|
export { buildLlmsTxt, buildSectionLlmsTxt, buildLlmsFullTxt, extractFirstParagraph, } from "./llms-txt.js";
|
|
7
8
|
export type { BuildLlmsTxtOptions, BuildLlmsFullTxtOptions, } from "./llms-txt.js";
|
|
8
|
-
export { buildSitemap, buildSitemapIndex } from "./sitemap.js";
|
|
9
|
+
export { assertLeafSitemap, buildSitemap, buildSitemapFiles, buildSitemapIndex } from "./sitemap.js";
|
|
9
10
|
export { buildBlogData, blogAdjacency, emitBlogFiles, indexPageCount, readingMinutes, countWords, BLOG_DEFAULTS, } from "./blog.js";
|
|
10
11
|
export type { BlogEmitConfig, BlogData, BlogPostRef, BlogAdjacency, } from "./blog.js";
|
|
11
12
|
export type { BuildSitemapOptions } from "./sitemap.js";
|
|
12
|
-
export { exportAstroProject, emitSiteScaffold, emitSiteConfig, emitAstroPages, emitConfigDerivedFiles, syncSiteDependencies, emitAgentReadinessFiles, emitSwitcherMap, emitMissingTranslationStubs, emitPassthroughAstroPages, emitDeployArtifacts, workersSubpathOutDir, makeSlugExcluder, } from "./project.js";
|
|
13
|
+
export { exportAstroProject, emitSiteScaffold, emitSiteConfig, emitAstroPages, emitConfigDerivedFiles, syncSiteDependencies, copyComponents, emitAgentReadinessFiles, emitSwitcherMap, emitMissingTranslationStubs, emitPassthroughAstroPages, emitDeployArtifacts, workersSubpathOutDir, makeSlugExcluder, dropUnsafeNavHrefs, } from "./project.js";
|
|
13
14
|
export type { AstroProjectOptions, SwitcherMap, PassthroughCopy, } from "./project.js";
|
|
14
15
|
export { emitPluginRuntime } from "./plugins.js";
|
|
15
16
|
export type { EmitPluginRuntimeOptions, PluginClientModulesGroup, PluginStylesGroup, PluginClientConfig, } from "./plugins.js";
|
|
@@ -29,4 +30,5 @@ export type { DiffMarks } from "./diff-decoration.js";
|
|
|
29
30
|
*/
|
|
30
31
|
export { BOOK_SEGMENT, assembleBook, bookHeading, bookSlugFrom, estimateTreeBytes, openAsPageNode, rewriteIntraBookLinks, shiftHeadings, slugFromHref, } from "./granularity.js";
|
|
31
32
|
export type { AssembleBookOptions, BookView } from "./granularity.js";
|
|
33
|
+
export { pageUnitPrefix, inPageUnit, normalizeTarget } from "./redirects.js";
|
|
32
34
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAMpE,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAClE,YAAY,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAKvF,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,eAAe,GAChB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAKrG,OAAO,EACL,aAAa,EACb,aAAa,EACb,aAAa,EACb,cAAc,EACd,cAAc,EACd,UAAU,EACV,aAAa,GACd,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,cAAc,EACd,QAAQ,EACR,WAAW,EACX,aAAa,GACd,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAaxD,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,sBAAsB,EACtB,oBAAoB,EACpB,cAAc,EACd,uBAAuB,EACvB,eAAe,EACf,2BAA2B,EAC3B,yBAAyB,EACzB,mBAAmB,EAKnB,oBAAoB,EACpB,gBAAgB,EAEhB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,mBAAmB,EACnB,WAAW,EACX,eAAe,GAChB,MAAM,cAAc,CAAC;AAKtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,YAAY,EACV,wBAAwB,EACxB,wBAAwB,EACxB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AAKtB,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,kBAAkB,EAClB,YAAY,EACZ,eAAe,EACf,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,WAAW,EACX,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;;;;;;;;GASG;AACH,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,YAAY,GACb,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// Astro serializer (TreeNode[] → Astro component markup)
|
|
2
2
|
export { treeToAstro, escapeExpr, escapeAttr, escapeTemplate } from "./serialize.js";
|
|
3
|
+
export { writeFileSync, copyFileSync } from "./write-if-changed.js";
|
|
3
4
|
// Auto-lede detection — figures out whether a page tree already
|
|
4
5
|
// has a leading H1 / paragraph so format-astro can decide whether
|
|
5
6
|
// to inject frontmatter title + description at the top of <main>.
|
|
@@ -12,7 +13,7 @@ export { DEFAULT_BASE_PATH, normalizeBasePath, basePathSegments, joinBaseUrl, bu
|
|
|
12
13
|
// llms.txt + llms-full.txt builders (LLM discovery files)
|
|
13
14
|
export { buildLlmsTxt, buildSectionLlmsTxt, buildLlmsFullTxt, extractFirstParagraph, } from "./llms-txt.js";
|
|
14
15
|
// Sitemap builders (per-mount, sitemaps.org 0.9)
|
|
15
|
-
export { buildSitemap, buildSitemapIndex } from "./sitemap.js";
|
|
16
|
+
export { assertLeafSitemap, buildSitemap, buildSitemapFiles, buildSitemapIndex } from "./sitemap.js";
|
|
16
17
|
// Blog emission — reverse-chron index + post adjacency. The sibling of
|
|
17
18
|
// taxonomy.ts: same data-file + generated-route + writer-override shape,
|
|
18
19
|
// sorted by date instead of grouped by term. See plans/blog-capability.md.
|
|
@@ -28,12 +29,14 @@ export { buildBlogData, blogAdjacency, emitBlogFiles, indexPageCount, readingMin
|
|
|
28
29
|
// alone; `dogsbay site build` calls `emitAstroPages` +
|
|
29
30
|
// `emitConfigDerivedFiles` + `emitAgentReadinessFiles`. Pure
|
|
30
31
|
// `dogsbay convert --to astro` (Step 7) calls only `emitAstroPages`.
|
|
31
|
-
export { exportAstroProject, emitSiteScaffold, emitSiteConfig, emitAstroPages, emitConfigDerivedFiles, syncSiteDependencies, emitAgentReadinessFiles, emitSwitcherMap, emitMissingTranslationStubs, emitPassthroughAstroPages, emitDeployArtifacts,
|
|
32
|
+
export { exportAstroProject, emitSiteScaffold, emitSiteConfig, emitAstroPages, emitConfigDerivedFiles, syncSiteDependencies, copyComponents, emitAgentReadinessFiles, emitSwitcherMap, emitMissingTranslationStubs, emitPassthroughAstroPages, emitDeployArtifacts,
|
|
32
33
|
// Where a Workers subpath-mounted build actually lands. Consumers that
|
|
33
34
|
// read the BUILT site (e.g. `dogsbay site check --dist`) must resolve
|
|
34
35
|
// the same directory the emitter told Astro to write to, or they audit
|
|
35
36
|
// an empty dist/ root.
|
|
36
|
-
workersSubpathOutDir, makeSlugExcluder,
|
|
37
|
+
workersSubpathOutDir, makeSlugExcluder,
|
|
38
|
+
// Drops nav hrefs with a scheme other than http(s)/mailto/tel.
|
|
39
|
+
dropUnsafeNavHrefs, } from "./project.js";
|
|
37
40
|
// Plugin runtime codegen — emits the entry, virtual config modules,
|
|
38
41
|
// stylesheets, and Vite alias file each plugin needs to participate
|
|
39
42
|
// in the Astro / Vite build. See plans/plugin-api.md.
|
|
@@ -54,4 +57,5 @@ export { DIFF_CSS, decorateDiff, diffMarksOf, hasDiffMarks, injectAttrs, inlineS
|
|
|
54
57
|
* See plans/granularity-views.md and docs/single-page-view.md.
|
|
55
58
|
*/
|
|
56
59
|
export { BOOK_SEGMENT, assembleBook, bookHeading, bookSlugFrom, estimateTreeBytes, openAsPageNode, rewriteIntraBookLinks, shiftHeadings, slugFromHref, } from "./granularity.js";
|
|
60
|
+
export { pageUnitPrefix, inPageUnit, normalizeTarget } from "./redirects.js";
|
|
57
61
|
//# 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,yDAAyD;AACzD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAEpE,gEAAgE;AAChE,kEAAkE;AAClE,kEAAkE;AAClE,0BAA0B;AAC1B,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAIlE,oEAAoE;AACpE,qEAAqE;AACrE,uCAAuC;AACvC,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,eAAe,GAChB,MAAM,gBAAgB,CAAC;AAExB,0DAA0D;AAC1D,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AAMvB,iDAAiD;AACjD,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAErG,uEAAuE;AACvE,yEAAyE;AACzE,2EAA2E;AAC3E,OAAO,EACL,aAAa,EACb,aAAa,EACb,aAAa,EACb,cAAc,EACd,cAAc,EACd,UAAU,EACV,aAAa,GACd,MAAM,WAAW,CAAC;AASnB,oDAAoD;AACpD,EAAE;AACF,qEAAqE;AACrE,kEAAkE;AAClE,mBAAmB;AACnB,EAAE;AACF,gEAAgE;AAChE,sEAAsE;AACtE,uDAAuD;AACvD,6DAA6D;AAC7D,qEAAqE;AACrE,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,sBAAsB,EACtB,oBAAoB,EACpB,cAAc,EACd,uBAAuB,EACvB,eAAe,EACf,2BAA2B,EAC3B,yBAAyB,EACzB,mBAAmB;AACnB,uEAAuE;AACvE,sEAAsE;AACtE,uEAAuE;AACvE,uBAAuB;AACvB,oBAAoB,EACpB,gBAAgB;AAChB,+DAA+D;AAC/D,kBAAkB,GACnB,MAAM,cAAc,CAAC;AAOtB,oEAAoE;AACpE,oEAAoE;AACpE,sDAAsD;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAQjD,kEAAkE;AAClE,uEAAuE;AACvE,0DAA0D;AAC1D,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,GACb,MAAM,eAAe,CAAC;AAOvB,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,WAAW,EACX,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAG9B;;;;;;;;;GASG;AACH,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,YAAY,GACb,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/lead.d.ts
CHANGED
|
@@ -1,58 +1,2 @@
|
|
|
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;
|
|
1
|
+
export { detectLeadingNodes, deriveDescription, type LeadingNodeInfo } from "@dogsbay/serialize-core";
|
|
58
2
|
//# sourceMappingURL=lead.d.ts.map
|
package/dist/lead.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lead.d.ts","sourceRoot":"","sources":["../src/lead.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"lead.d.ts","sourceRoot":"","sources":["../src/lead.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC"}
|