@x12i/ebooks-export 1.0.0

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/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # @x12i/ebooks-export
2
+
3
+ Build a content bundle from markdown books + catalog/use-cases: HTML reader pages, MD/PDF downloads, use-case packs, and `agent-manifest.json`.
@@ -0,0 +1,23 @@
1
+ import { type AgentManifest, type Catalog, type SiteConfig, type UseCase, type UseCasesFile } from "@x12i/ebooks-core";
2
+ export type BuildBundleOptions = {
3
+ contentRoot: string;
4
+ outDir: string;
5
+ catalog: Catalog;
6
+ useCases: UseCasesFile;
7
+ site: SiteConfig;
8
+ themeBookCss?: string;
9
+ themeSiteCss?: string;
10
+ themeExtrasCss?: string;
11
+ /** Attempt PDF when wkhtmltopdf is on PATH. Default true. */
12
+ tryPdf?: boolean;
13
+ };
14
+ export declare function assembleUseCaseMarkdown(uc: UseCase, catalog: Catalog, contentRoot: string): {
15
+ markdown: string;
16
+ missing: string[];
17
+ };
18
+ export declare function buildContentBundle(opts: BuildBundleOptions): Promise<{
19
+ manifest: AgentManifest;
20
+ missing: string[];
21
+ }>;
22
+ export declare function copyBundleInto(srcBundle: string, dest: string): void;
23
+ //# sourceMappingURL=build-bundle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-bundle.d.ts","sourceRoot":"","sources":["../src/build-bundle.ts"],"names":[],"mappings":"AAUA,OAAO,EAEL,KAAK,aAAa,EAElB,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,OAAO,EACZ,KAAK,YAAY,EAClB,MAAM,mBAAmB,CAAC;AAO3B,MAAM,MAAM,kBAAkB,GAAG;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,YAAY,CAAC;IACvB,IAAI,EAAE,UAAU,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAWF,wBAAgB,uBAAuB,CACrC,EAAE,EAAE,OAAO,EACX,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,MAAM,GAClB;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAyDzC;AASD,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC;IAAE,QAAQ,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAqHzD;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAG7D"}
@@ -0,0 +1,169 @@
1
+ import { mkdirSync, writeFileSync, readFileSync, copyFileSync, existsSync, cpSync, } from "node:fs";
2
+ import { dirname, join } from "node:path";
3
+ import { spawnSync } from "node:child_process";
4
+ import { bookPath, } from "@x12i/ebooks-core";
5
+ import { chapterIndex, renderBookHtml, spliceChapters, } from "@x12i/ebooks-render";
6
+ function ensureDir(p) {
7
+ mkdirSync(p, { recursive: true });
8
+ }
9
+ function write(path, body) {
10
+ ensureDir(dirname(path));
11
+ writeFileSync(path, body);
12
+ }
13
+ export function assembleUseCaseMarkdown(uc, catalog, contentRoot) {
14
+ const missing = [];
15
+ const lines = [];
16
+ lines.push(`# ${uc.title}`);
17
+ lines.push("");
18
+ lines.push(`> **Use case id:** \`${uc.id}\``);
19
+ lines.push(`> **Goal:** ${uc.goal}`);
20
+ lines.push(`> **Audiences:** ${uc.audiences.join(", ")}`);
21
+ if (uc.tags.length)
22
+ lines.push(`> **Tags:** ${uc.tags.join(", ")}`);
23
+ lines.push("");
24
+ lines.push("## Reading path");
25
+ lines.push("");
26
+ for (const step of uc.path) {
27
+ const book = catalog.books.find((b) => b.id === step.bookId);
28
+ const title = book?.title ?? step.bookId;
29
+ lines.push(`1. **${title}** (${step.audience}) → chapters: ${step.chapters.map((c) => `\`${c}\``).join(", ")}`);
30
+ }
31
+ lines.push("");
32
+ for (const step of uc.path) {
33
+ const book = catalog.books.find((b) => b.id === step.bookId);
34
+ const mdPath = bookPath(contentRoot, book?.dir ?? step.bookId, step.audience);
35
+ if (!existsSync(mdPath)) {
36
+ missing.push(`${step.bookId}/${step.audience}/BOOK.md`);
37
+ continue;
38
+ }
39
+ const md = readFileSync(mdPath, "utf8");
40
+ const { found, missing: miss } = spliceChapters(md, step.chapters);
41
+ for (const m of miss)
42
+ missing.push(`${step.bookId}/${step.audience}#${m}`);
43
+ for (const ch of found) {
44
+ lines.push(`## From: ${book?.title ?? step.bookId} — ${ch.title}`);
45
+ lines.push("");
46
+ lines.push(ch.markdown.trim());
47
+ lines.push("");
48
+ }
49
+ }
50
+ if (uc.alsoSee.length) {
51
+ lines.push("## Also see");
52
+ lines.push("");
53
+ for (const id of uc.alsoSee) {
54
+ const book = catalog.books.find((b) => b.id === id);
55
+ lines.push(`- **${book?.title ?? id}** (\`${id}\`) — ${book?.blurb ?? ""}`);
56
+ }
57
+ lines.push("");
58
+ }
59
+ lines.push("---");
60
+ lines.push("");
61
+ lines.push("_Generated use-case pack for agents and humans. See `agent-manifest.json` for discovery._");
62
+ lines.push("");
63
+ return { markdown: lines.join("\n"), missing };
64
+ }
65
+ function tryBuildPdf(htmlPath, pdfPath) {
66
+ const bin = spawnSync("wkhtmltopdf", ["--quiet", htmlPath, pdfPath], {
67
+ encoding: "utf8",
68
+ });
69
+ return bin.status === 0 && existsSync(pdfPath);
70
+ }
71
+ export async function buildContentBundle(opts) {
72
+ const out = opts.outDir;
73
+ const missing = [];
74
+ ensureDir(out);
75
+ ensureDir(join(out, "downloads", "books"));
76
+ ensureDir(join(out, "downloads", "use-cases"));
77
+ ensureDir(join(out, "books"));
78
+ ensureDir(join(out, "assets"));
79
+ if (opts.themeBookCss && existsSync(opts.themeBookCss)) {
80
+ copyFileSync(opts.themeBookCss, join(out, "assets", "book.css"));
81
+ }
82
+ if (opts.themeSiteCss && existsSync(opts.themeSiteCss)) {
83
+ copyFileSync(opts.themeSiteCss, join(out, "assets", "site.css"));
84
+ }
85
+ if (opts.themeExtrasCss && existsSync(opts.themeExtrasCss)) {
86
+ copyFileSync(opts.themeExtrasCss, join(out, "assets", "extras.css"));
87
+ }
88
+ writeFileSync(join(out, "catalog.json"), JSON.stringify(opts.catalog, null, 2));
89
+ writeFileSync(join(out, "use-cases.json"), JSON.stringify(opts.useCases, null, 2));
90
+ writeFileSync(join(out, "site.json"), JSON.stringify(opts.site, null, 2));
91
+ const manifestBooks = [];
92
+ for (const book of opts.catalog.books) {
93
+ const mdMap = {};
94
+ const pdfMap = {};
95
+ const chMap = {};
96
+ for (const audience of book.audiences) {
97
+ const src = bookPath(opts.contentRoot, book.dir, audience);
98
+ if (!existsSync(src)) {
99
+ missing.push(src);
100
+ continue;
101
+ }
102
+ const markdown = readFileSync(src, "utf8");
103
+ const relMd = `downloads/books/${book.id}/${audience}.md`;
104
+ const relCh = `downloads/books/${book.id}/${audience}.chapters.json`;
105
+ const relHtml = `books/${book.id}/${audience}.html`;
106
+ write(join(out, relMd), markdown);
107
+ const chapters = chapterIndex(markdown);
108
+ write(join(out, relCh), JSON.stringify(chapters, null, 2));
109
+ const { html } = await renderBookHtml(markdown, {
110
+ title: `${book.title} — ${audience}`,
111
+ kicker: book.kicker,
112
+ color: book.color,
113
+ cssHref: "../../assets/book.css",
114
+ });
115
+ write(join(out, relHtml), html);
116
+ let pdfRel = null;
117
+ if (opts.tryPdf !== false) {
118
+ const pdfAbs = join(out, "downloads", "books", book.id, `${audience}.pdf`);
119
+ const ok = tryBuildPdf(join(out, relHtml), pdfAbs);
120
+ if (ok)
121
+ pdfRel = `downloads/books/${book.id}/${audience}.pdf`;
122
+ }
123
+ pdfMap[audience] = pdfRel;
124
+ mdMap[audience] = relMd;
125
+ chMap[audience] = relCh;
126
+ }
127
+ manifestBooks.push({
128
+ id: book.id,
129
+ audiences: book.audiences,
130
+ md: mdMap,
131
+ pdf: pdfMap,
132
+ chapters: chMap,
133
+ });
134
+ }
135
+ const manifestUseCases = [];
136
+ for (const uc of opts.useCases.useCases) {
137
+ const { markdown, missing: miss } = assembleUseCaseMarkdown(uc, opts.catalog, opts.contentRoot);
138
+ missing.push(...miss);
139
+ const rel = `downloads/use-cases/${uc.id}.md`;
140
+ write(join(out, rel), markdown);
141
+ manifestUseCases.push({
142
+ id: uc.id,
143
+ title: uc.title,
144
+ md: rel,
145
+ path: uc.path,
146
+ });
147
+ }
148
+ if (missing.length) {
149
+ const err = new Error(`Ebook bundle has missing chapter/book refs:\n${missing.map((m) => ` - ${m}`).join("\n")}`);
150
+ err.missing = missing;
151
+ throw err;
152
+ }
153
+ const manifest = {
154
+ version: 1,
155
+ product: opts.site.product,
156
+ site: opts.site.siteUrl,
157
+ knowledgePackage: opts.site.knowledgePackage,
158
+ roles: opts.catalog.roles.map((r) => r.id),
159
+ books: manifestBooks,
160
+ useCases: manifestUseCases,
161
+ };
162
+ write(join(out, "agent-manifest.json"), JSON.stringify(manifest, null, 2));
163
+ return { manifest, missing };
164
+ }
165
+ export function copyBundleInto(srcBundle, dest) {
166
+ ensureDir(dest);
167
+ cpSync(srcBundle, dest, { recursive: true });
168
+ }
169
+ //# sourceMappingURL=build-bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-bundle.js","sourceRoot":"","sources":["../src/build-bundle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { assembleUseCaseMarkdown, buildContentBundle, copyBundleInto, type BuildBundleOptions, } from "./build-bundle.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,cAAc,EACd,KAAK,kBAAkB,GACxB,MAAM,mBAAmB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export { assembleUseCaseMarkdown, buildContentBundle, copyBundleInto, } from "./build-bundle.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,cAAc,GAEf,MAAM,mBAAmB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "@x12i/ebooks-export",
3
+ "version": "1.0.0",
4
+ "description": "Build ebook content bundles: book MD/HTML/PDF, use-case MD packs, agent-manifest.",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist",
16
+ "README.md"
17
+ ],
18
+ "scripts": {
19
+ "prebuild": "rm -rf dist",
20
+ "build": "tsc -p tsconfig.build.json",
21
+ "test": "vitest run --passWithNoTests",
22
+ "typecheck": "tsc --noEmit"
23
+ },
24
+ "engines": {
25
+ "node": ">=18.0.0"
26
+ },
27
+ "dependencies": {
28
+ "@x12i/ebooks-core": "^1.0.0",
29
+ "@x12i/ebooks-render": "^1.0.0"
30
+ },
31
+ "devDependencies": {
32
+ "@types/node": "^20.14.0",
33
+ "typescript": "^5.6.0",
34
+ "vitest": "^2.1.0"
35
+ },
36
+ "publishConfig": {
37
+ "access": "public",
38
+ "registry": "https://registry.npmjs.org/"
39
+ },
40
+ "license": "exellix-license"
41
+ }