postext 1.2.3 → 1.3.1

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 (44) hide show
  1. package/README.md +18 -0
  2. package/dist/__tests__/bundle.test.d.ts +2 -0
  3. package/dist/__tests__/bundle.test.d.ts.map +1 -0
  4. package/dist/__tests__/bundle.test.js +210 -0
  5. package/dist/__tests__/bundle.test.js.map +1 -0
  6. package/dist/__tests__/exports.test.js +15 -0
  7. package/dist/__tests__/exports.test.js.map +1 -1
  8. package/dist/bundle/adapters.d.ts +38 -0
  9. package/dist/bundle/adapters.d.ts.map +1 -0
  10. package/dist/bundle/adapters.js +142 -0
  11. package/dist/bundle/adapters.js.map +1 -0
  12. package/dist/bundle/api.d.ts +94 -0
  13. package/dist/bundle/api.d.ts.map +1 -0
  14. package/dist/bundle/api.js +91 -0
  15. package/dist/bundle/api.js.map +1 -0
  16. package/dist/bundle/book.d.ts +24 -0
  17. package/dist/bundle/book.d.ts.map +1 -0
  18. package/dist/bundle/book.js +55 -0
  19. package/dist/bundle/book.js.map +1 -0
  20. package/dist/bundle/codec.d.ts +105 -0
  21. package/dist/bundle/codec.d.ts.map +1 -0
  22. package/dist/bundle/codec.js +245 -0
  23. package/dist/bundle/codec.js.map +1 -0
  24. package/dist/bundle/index.d.ts +14 -0
  25. package/dist/bundle/index.d.ts.map +1 -0
  26. package/dist/bundle/index.js +10 -0
  27. package/dist/bundle/index.js.map +1 -0
  28. package/dist/bundle/manifest.d.ts +76 -0
  29. package/dist/bundle/manifest.d.ts.map +1 -0
  30. package/dist/bundle/manifest.js +444 -0
  31. package/dist/bundle/manifest.js.map +1 -0
  32. package/dist/bundle/types.d.ts +141 -0
  33. package/dist/bundle/types.d.ts.map +1 -0
  34. package/dist/bundle/types.js +6 -0
  35. package/dist/bundle/types.js.map +1 -0
  36. package/dist/bundle/zip.d.ts +23 -0
  37. package/dist/bundle/zip.d.ts.map +1 -0
  38. package/dist/bundle/zip.js +87 -0
  39. package/dist/bundle/zip.js.map +1 -0
  40. package/dist/index.d.ts +2 -0
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +3 -0
  43. package/dist/index.js.map +1 -1
  44. package/package.json +6 -1
package/README.md CHANGED
@@ -243,6 +243,24 @@ await preloadConfigFonts(config);
243
243
 
244
244
  The `<PostextSandbox>` component handles this automatically, blocking rendering until all config fonts are ready.
245
245
 
246
+ ## Bundles (`.postext` files)
247
+
248
+ A `.postext` file is a whole book (manifest, chapters, resources and fonts) in one zip: the format the [Sandbox](https://postext.dev/en/sandbox) exports and imports. Open one and render it, or write one from your own document:
249
+
250
+ ```ts
251
+ import { openBundle, loadBundleFonts, registerBundleImages, buildBundle, renderPage, createBundle } from 'postext';
252
+
253
+ const bundle = await openBundle(await file.arrayBuffer());
254
+ await loadBundleFonts(bundle);
255
+ await registerBundleImages(bundle);
256
+ const docs = buildBundle(bundle); // one VDTDocument per chapter
257
+ const canvas = renderPage(docs[0].pages[0], docs[0]);
258
+
259
+ const { bytes } = await createBundle({ name: 'My Book', chapters: [{ markdown: '# One\n\n…' }], config });
260
+ ```
261
+
262
+ See [Bundles](https://postext.dev/en/docs/configuration#bundles-postext-files) for the full API, the PDF adapters and live examples.
263
+
246
264
  ## Full Documentation
247
265
 
248
266
  Visit [postext.dev](https://postext.dev/) for the full documentation, project vision, architecture, and roadmap. For contributing guidelines, see the [GitHub repository](https://github.com/drnachio/postext).
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=bundle.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/bundle.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,210 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { zipSync } from 'fflate';
3
+ import { bitmapSize, buildBundle, bundleFontProvider, bundleResourceBytes, createBundle, isBundleManifest, openBundle, openBundleZip, svgSize, } from '../bundle';
4
+ // Deterministic text measurement stub (no DOM in the node test env).
5
+ class StubCtx {
6
+ font = '';
7
+ measureText(s) {
8
+ return { width: s.length * 7 };
9
+ }
10
+ }
11
+ globalThis.OffscreenCanvas = class {
12
+ getContext() {
13
+ return new StubCtx();
14
+ }
15
+ };
16
+ const enc = new TextEncoder();
17
+ const pt = (value) => ({ value, unit: 'pt' });
18
+ const SVG = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 100"><rect width="200" height="100" fill="#2a6f97"/></svg>';
19
+ // 1×1 PNG header with a 3×2 size (only the header is read).
20
+ const PNG = new Uint8Array([
21
+ 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0, 0, 0, 13, 0x49, 0x48, 0x44, 0x52,
22
+ 0, 0, 0, 3, 0, 0, 0, 2, 8, 6, 0, 0, 0, 0, 0, 0,
23
+ ]);
24
+ const FONT = new Uint8Array([0, 1, 0, 0, 1, 2, 3, 4]);
25
+ const svgResource = {
26
+ id: 'fig-map',
27
+ typeId: 'figure',
28
+ kind: 'svg',
29
+ caption: 'A map.',
30
+ createdAt: 1,
31
+ updatedAt: 1,
32
+ svg: { fileId: 'map-upload', width: 200, height: 100 },
33
+ };
34
+ const config = {
35
+ page: { width: pt(360), height: pt(480), margins: { top: pt(18), bottom: pt(18), left: pt(18), right: pt(18) } },
36
+ bodyText: { fontFamily: 'House Serif' },
37
+ headings: { levels: [{ level: 1, numberingTemplate: 'Chapter {1}' }] },
38
+ customFonts: [{ name: 'House Serif', variants: [{ weight: 400, style: 'normal', fileId: 'font-1', format: 'ttf', fileName: 'HouseSerif-Regular.ttf' }] }],
39
+ };
40
+ async function sample() {
41
+ return createBundle({
42
+ name: 'The Lantern',
43
+ locale: 'en',
44
+ chapters: [
45
+ { markdown: '# Dusk\n\nThe lantern hung by the door. ::resource{id=fig-map}\n' },
46
+ { title: 'Night', markdown: '# Night\n\nNobody moved it.\n' },
47
+ ],
48
+ config,
49
+ resources: [svgResource],
50
+ files: { 'map-upload': SVG, 'font-1': FONT },
51
+ });
52
+ }
53
+ describe('createBundle', () => {
54
+ it('writes a version 2 manifest, chapter files, resources and fonts', async () => {
55
+ const { bytes, manifest, files, warnings } = await sample();
56
+ expect(warnings).toEqual([]);
57
+ expect(manifest.version).toBe(2);
58
+ expect(manifest.id).toBe('the-lantern');
59
+ expect(manifest.chapters).toEqual([
60
+ { title: 'Dusk', file: 'chapters/01-dusk.md' },
61
+ { title: 'Night', file: 'chapters/02-night.md' },
62
+ ]);
63
+ expect(manifest.resources?.[0]).toMatchObject({ id: 'fig-map', file: 'resources/fig-map.svg', width: 200, height: 100 });
64
+ expect(manifest.fonts).toEqual([{ name: 'House Serif', variants: [{ weight: 400, style: 'normal', file: 'fonts/houseserif-regular.ttf' }] }]);
65
+ // Fonts travel as files, never inside the config.
66
+ expect(manifest.config?.customFonts).toBeUndefined();
67
+ expect(Object.keys(files).sort()).toEqual([
68
+ 'chapters/01-dusk.md', 'chapters/02-night.md', 'fonts/houseserif-regular.ttf', 'preset.json', 'resources/fig-map.svg',
69
+ ]);
70
+ expect(isBundleManifest(JSON.parse(new TextDecoder().decode(files['preset.json'])))).toBe(true);
71
+ expect(bytes[0]).toBe(0x50); // PK
72
+ });
73
+ it('drops a resource whose payload is missing, with a warning', async () => {
74
+ const { manifest, warnings } = await createBundle({ name: 'x', markdown: '# X', resources: [svgResource] });
75
+ expect(manifest.resources).toBeUndefined();
76
+ expect(warnings).toEqual(['fig-map: missing file, skipped']);
77
+ });
78
+ it('requires some content', async () => {
79
+ await expect(createBundle({ name: 'empty' })).rejects.toThrow(/chapters/);
80
+ });
81
+ });
82
+ describe('openBundle', () => {
83
+ it('round-trips a bundle written by createBundle', async () => {
84
+ const { bytes } = await sample();
85
+ const bundle = await openBundle(bytes);
86
+ expect(bundle.name).toBe('The Lantern');
87
+ expect(bundle.locale).toBe('en');
88
+ expect(bundle.chapters.map((c) => c.title)).toEqual(['Dusk', 'Night']);
89
+ expect(bundle.chapters[1].markdown).toBe('# Night\n\nNobody moved it.\n');
90
+ // fileIds are paths inside the bundle.
91
+ const figure = bundle.resources[0];
92
+ expect(figure.svg).toEqual({ fileId: 'resources/fig-map.svg', width: 200, height: 100 });
93
+ expect(new TextDecoder().decode(bundle.files.get(figure.svg.fileId))).toBe(SVG);
94
+ expect(bundle.config.customFonts).toEqual([
95
+ { name: 'House Serif', variants: [{ weight: 400, style: 'normal', fileId: 'fonts/houseserif-regular.ttf', format: 'ttf', fileName: 'houseserif-regular.ttf' }] },
96
+ ]);
97
+ expect(bundle.config.bodyText?.fontFamily).toBe('House Serif');
98
+ // The base configuration: localised resource types and the default palette.
99
+ expect(bundle.config.resourceTypes?.length).toBeGreaterThan(0);
100
+ expect(bundle.config.colorPalette?.length).toBeGreaterThan(0);
101
+ expect(bundle.fonts).toHaveLength(1);
102
+ expect(new Uint8Array(bundle.fonts[0].bytes)).toEqual(FONT);
103
+ });
104
+ it('accepts a Blob and a bundle zipped with its top-level folder', async () => {
105
+ const { files } = await sample();
106
+ const nested = { '__MACOSX/._preset.json': new Uint8Array([1]) };
107
+ for (const [p, data] of Object.entries(files))
108
+ nested[`lantern/${p}`] = data;
109
+ const bundle = await openBundle(new Blob([zipSync(nested)]));
110
+ expect(bundle.chapters).toHaveLength(2);
111
+ expect(bundle.files.has('resources/fig-map.svg')).toBe(true);
112
+ });
113
+ it('reads sizes from the files when the manifest omits them', async () => {
114
+ const manifest = {
115
+ version: 2, id: 'b', name: 'B',
116
+ chapters: [{ title: '', file: 'a.md' }],
117
+ resources: [
118
+ { id: 'p', typeId: 'figure', kind: 'bitmap', file: 'p.png' },
119
+ { id: 's', typeId: 'figure', kind: 'svg', file: 's.svg' },
120
+ ],
121
+ };
122
+ const zip = zipSync({ 'preset.json': enc.encode(JSON.stringify(manifest)), 'a.md': enc.encode('Text.'), 'p.png': PNG, 's.svg': enc.encode(SVG) });
123
+ const bundle = await openBundle(zip);
124
+ expect(bundle.resources.find((r) => r.id === 'p').bitmap).toMatchObject({ fileId: 'p.png', format: 'png', width: 3, height: 2 });
125
+ expect(bundle.resources.find((r) => r.id === 's').svg).toMatchObject({ width: 200, height: 100 });
126
+ expect(bundle.chapters[0].title).toBe('Chapter 1');
127
+ });
128
+ it('picks the locale of a bilingual bundle and its overrides', async () => {
129
+ const manifest = {
130
+ version: 2, id: 'bi', name: 'Bi', locale: 'en',
131
+ chapters: { en: [{ title: 'One', file: 'en.md' }], es: [{ title: 'Uno', file: 'es.md' }] },
132
+ resources: [{ id: 't', typeId: 'table', kind: 'table', caption: 'Table', table: { model: { rows: [[{ content: 'x' }]] } } }],
133
+ localized: { es: { resources: [{ id: 't', caption: 'Tabla' }] } },
134
+ };
135
+ const zip = zipSync({ 'preset.json': enc.encode(JSON.stringify(manifest)), 'en.md': enc.encode('# One'), 'es.md': enc.encode('# Uno') });
136
+ const es = await openBundle(zip, { locale: 'es-ES' });
137
+ expect(es.locale).toBe('es');
138
+ expect(es.chapters[0].markdown).toBe('# Uno');
139
+ expect(es.resources[0].caption).toBe('Tabla');
140
+ const en = await openBundle(zip);
141
+ expect(en.locale).toBe('en');
142
+ expect(en.resources[0].caption).toBe('Table');
143
+ });
144
+ it('rejects what is not a bundle', async () => {
145
+ await expect(openBundle(new Uint8Array([1, 2, 3]))).rejects.toThrow('Not a zip archive');
146
+ await expect(openBundle(zipSync({ 'a.md': enc.encode('x') }))).rejects.toThrow('no preset.json');
147
+ await expect(openBundle(zipSync({ 'preset.json': enc.encode('{"version":9}') }))).rejects.toThrow('Invalid bundle manifest');
148
+ });
149
+ it('refuses paths that escape the bundle', async () => {
150
+ const manifest = { version: 2, id: 'e', name: 'E', chapters: [{ title: 'x', file: '../outside.md' }] };
151
+ const opened = openBundleZip(zipSync({ 'b/preset.json': enc.encode(JSON.stringify(manifest)), 'outside.md': enc.encode('x') }));
152
+ await expect(opened.readFile('../outside.md')).rejects.toThrow('Invalid bundle path');
153
+ });
154
+ });
155
+ describe('adapters', () => {
156
+ it('resolves resource bytes and fonts for the PDF backend', async () => {
157
+ const bundle = await openBundle((await sample()).bytes);
158
+ const bytes = bundleResourceBytes(bundle);
159
+ expect(new TextDecoder().decode(bytes('resources/fig-map.svg'))).toBe(SVG);
160
+ const provider = bundleFontProvider(bundle, { fallback: async () => new Uint8Array([9]) });
161
+ expect(await provider('House Serif', 700, 'italic')).toEqual(FONT);
162
+ expect(await provider('Open Sans', 700, 'normal')).toEqual(new Uint8Array([9]));
163
+ await expect(bundleFontProvider(bundle)('Open Sans', 400, 'normal')).rejects.toThrow(/not in the bundle/);
164
+ });
165
+ it('asks for a WOFF2 decoder when a face is WOFF2', async () => {
166
+ const provider = bundleFontProvider({ fonts: [{ fileId: 'f.woff2', file: 'f.woff2', fileName: 'f.woff2', family: 'F', weight: 400, style: 'normal', format: 'woff2', bytes: new ArrayBuffer(4) }] });
167
+ await expect(provider('F', 400, 'normal')).rejects.toThrow(/decodeWoff2/);
168
+ });
169
+ });
170
+ describe('buildBundle', () => {
171
+ it('lays the chapters out as one book: counters, page offsets and numbering carry over', async () => {
172
+ const bundle = await openBundle((await sample()).bytes);
173
+ const docs = buildBundle(bundle);
174
+ expect(docs).toHaveLength(2);
175
+ const prefixes = docs.map((d) => d.blocks.find((b) => b.type === 'heading')?.numberPrefix?.trim());
176
+ expect(prefixes).toEqual(['Chapter 1', 'Chapter 2']);
177
+ expect(docs[1].pageIndexOffset).toBe(docs[0].pages.length);
178
+ expect(docs[1].pages[0].pageNumberValue).toBe(docs[0].pages.at(-1).pageNumberValue + 1);
179
+ });
180
+ it('gives a chapter with a table of contents the whole book outline', async () => {
181
+ const docs = buildBundle({
182
+ config,
183
+ resources: [],
184
+ chapters: [
185
+ { markdown: ':::toc\n:::\n' },
186
+ { markdown: '# Dusk\n\nText.' },
187
+ { markdown: '# Night\n\nText.' },
188
+ ],
189
+ });
190
+ const text = JSON.stringify(docs[0].blocks);
191
+ expect(text).toContain('Dusk');
192
+ expect(text).toContain('Night');
193
+ });
194
+ });
195
+ describe('intrinsic sizes', () => {
196
+ it('reads SVG sizes from attributes or the viewBox', () => {
197
+ expect(svgSize('<svg width="10pt" height="20pt"></svg>')).toEqual({ width: 10 * (96 / 72), height: 20 * (96 / 72) });
198
+ expect(svgSize("<?xml version='1.0'?><!-- <svg width='1'> --><svg viewBox='0,0,30,40'/>")).toEqual({ width: 30, height: 40 });
199
+ expect(svgSize('<svg width="100%"></svg>')).toBeUndefined();
200
+ });
201
+ it('reads bitmap headers', () => {
202
+ expect(bitmapSize(PNG)).toEqual({ width: 3, height: 2 });
203
+ const gif = new Uint8Array([0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 5, 0, 7, 0]);
204
+ expect(bitmapSize(gif)).toEqual({ width: 5, height: 7 });
205
+ const jpeg = new Uint8Array([0xff, 0xd8, 0xff, 0xe0, 0, 4, 0, 0, 0xff, 0xc0, 0, 11, 8, 0, 9, 0, 12, 3, 0, 0]);
206
+ expect(bitmapSize(jpeg)).toEqual({ width: 12, height: 9 });
207
+ expect(bitmapSize(new Uint8Array([1, 2, 3]))).toBeUndefined();
208
+ });
209
+ });
210
+ //# sourceMappingURL=bundle.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.test.js","sourceRoot":"","sources":["../../src/__tests__/bundle.test.ts"],"names":[],"mappings":"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"}
@@ -219,6 +219,21 @@ describe("package exports", () => {
219
219
  "placeholderRender",
220
220
  "clearMathCache",
221
221
  "applySingleInkToSvg",
222
+ "openBundle",
223
+ "createBundle",
224
+ "buildBundle",
225
+ "loadBundleFonts",
226
+ "registerBundleImages",
227
+ "bundleImageUrl",
228
+ "bundleResourceBytes",
229
+ "bundleFontProvider",
230
+ "readBundle",
231
+ "planBundle",
232
+ "resolveBundleFiles",
233
+ "openBundleZip",
234
+ "zipBundle",
235
+ "isBundleManifest",
236
+ "POSTEXT_EXTENSION",
222
237
  ]);
223
238
  });
224
239
  });
@@ -1 +1 @@
1
- {"version":3,"file":"exports.test.js","sourceRoot":"","sources":["../../src/__tests__/exports.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"exports.test.js","sourceRoot":"","sources":["../../src/__tests__/exports.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { PostextConfig } from '../types';
2
+ import type { PostextBundle } from './api';
3
+ /** The fields of a bundle the adapters read: an opened `PostextBundle`, or
4
+ * any object with the same shape. */
5
+ export type BundleSource = Pick<PostextBundle, 'config' | 'resources' | 'files'> & Partial<Pick<PostextBundle, 'fonts'>>;
6
+ /** The single-ink colour SVG figures are recoloured to, or null when
7
+ * `diagramStyle.singleInk` is off. */
8
+ export declare function diagramInkHex(config: PostextConfig): string | null;
9
+ /** Register the bundle's fonts with the browser (`document.fonts` by
10
+ * default) so layout measures text with them. Call it — and await it —
11
+ * before `buildDocument`. Resolves to the faces added. */
12
+ export declare function loadBundleFonts(bundle: Pick<PostextBundle, 'fonts'>, fontSet?: FontFaceSet | undefined): Promise<FontFace[]>;
13
+ /** Decode the bundle's pictures and register them with the canvas backend
14
+ * (`registerResourceImage`), recolouring SVG figures when the config asks
15
+ * for single-ink diagrams. Await it before painting. */
16
+ export declare function registerBundleImages(bundle: BundleSource): Promise<void>;
17
+ /** A `resourceImageUrl` resolver for `renderToHtml`: object URLs over the
18
+ * bundle's pictures, built once. `revoke()` frees them. */
19
+ export declare function bundleImageUrl(bundle: BundleSource): ((fileId: string) => string | undefined) & {
20
+ revoke: () => void;
21
+ };
22
+ /** A `resourceBytes` resolver for `postext-pdf`'s `renderToPdf`: an SVG
23
+ * figure resolves to its vector print master (`svg.pdfFileId`) when it has
24
+ * one — unless single-ink is on, which recolours SVG markup only. */
25
+ export declare function bundleResourceBytes(bundle: BundleSource): (fileId: string) => Uint8Array | undefined;
26
+ export interface BundleFontProviderOptions {
27
+ /** Turns WOFF2 into the TrueType/OpenType bytes a PDF embeds — pass
28
+ * `decompressWoff2` from `postext-pdf`. Required when the bundle carries
29
+ * `.woff2` faces. */
30
+ decodeWoff2?: (bytes: Uint8Array) => Promise<Uint8Array> | Uint8Array;
31
+ /** Where a family the bundle does not carry comes from (Google Fonts
32
+ * families such as the default heading face). */
33
+ fallback?: (family: string, weight: number, style: 'normal' | 'italic') => Promise<Uint8Array>;
34
+ }
35
+ /** A `fontProvider` for `postext-pdf`'s `renderToPdf`: the bundle's own
36
+ * faces (nearest weight, same style first), else `fallback`. */
37
+ export declare function bundleFontProvider(bundle: Pick<PostextBundle, 'fonts'>, options?: BundleFontProviderOptions): (family: string, weight: number, style: 'normal' | 'italic') => Promise<Uint8Array>;
38
+ //# sourceMappingURL=adapters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../../src/bundle/adapters.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAY,MAAM,UAAU,CAAC;AAIxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAG3C;sCACsC;AACtC,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE,QAAQ,GAAG,WAAW,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;AAQzH;uCACuC;AACvC,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAIlE;AAeD;;2DAE2D;AAC3D,wBAAsB,eAAe,CACnC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,EACpC,OAAO,GAAE,WAAW,GAAG,SAAwE,GAC9F,OAAO,CAAC,QAAQ,EAAE,CAAC,CAQrB;AAED;;yDAEyD;AACzD,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAuB9E;AAED;4DAC4D;AAC5D,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC,GAAG;IAAE,MAAM,EAAE,MAAM,IAAI,CAAA;CAAE,CAetH;AAED;;sEAEsE;AACtE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,YAAY,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,UAAU,GAAG,SAAS,CAcpG;AAED,MAAM,WAAW,yBAAyB;IACxC;;0BAEsB;IACtB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC;IACtE;sDACkD;IAClD,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,QAAQ,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;CAChG;AAED;iEACiE;AACjE,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,EACpC,OAAO,GAAE,yBAA8B,GACtC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,QAAQ,KAAK,OAAO,CAAC,UAAU,CAAC,CAerF"}
@@ -0,0 +1,142 @@
1
+ // Feed an opened bundle to the backends: its fonts to the browser (layout
2
+ // measures text with them), its pictures to the canvas and HTML backends,
3
+ // and its bytes to `postext-pdf`'s `resourceBytes` / `fontProvider`.
4
+ import { registerResourceImage } from '../canvas-backend';
5
+ import { resolveColorValue, resolveDiagramStyleConfig } from '../defaults';
6
+ import { applySingleInkToSvg } from '../svg/singleInk';
7
+ import { mimeForFile } from './manifest';
8
+ function imageFileId(r) {
9
+ if (r.kind === 'bitmap')
10
+ return r.bitmap?.fileId;
11
+ if (r.kind === 'svg')
12
+ return r.svg?.fileId;
13
+ return undefined;
14
+ }
15
+ /** The single-ink colour SVG figures are recoloured to, or null when
16
+ * `diagramStyle.singleInk` is off. */
17
+ export function diagramInkHex(config) {
18
+ const ds = resolveDiagramStyleConfig(config.diagramStyle);
19
+ if (!ds.singleInk)
20
+ return null;
21
+ return resolveColorValue(ds.inkColor, config.colorPalette, ds.inkColor).hex;
22
+ }
23
+ /** A picture's bytes as a Blob, SVGs recoloured when single-ink is on. */
24
+ function pictureBlob(bundle, r, inkHex) {
25
+ const fileId = imageFileId(r);
26
+ const bytes = fileId ? bundle.files.get(fileId) : undefined;
27
+ if (!fileId || !bytes)
28
+ return null;
29
+ if (r.kind === 'svg') {
30
+ let text = new TextDecoder().decode(bytes);
31
+ if (inkHex)
32
+ text = applySingleInkToSvg(text, inkHex);
33
+ return new Blob([text], { type: 'image/svg+xml' });
34
+ }
35
+ return new Blob([bytes.slice()], { type: mimeForFile(fileId) });
36
+ }
37
+ /** Register the bundle's fonts with the browser (`document.fonts` by
38
+ * default) so layout measures text with them. Call it — and await it —
39
+ * before `buildDocument`. Resolves to the faces added. */
40
+ export async function loadBundleFonts(bundle, fontSet = typeof document !== 'undefined' ? document.fonts : undefined) {
41
+ if (!fontSet || typeof FontFace === 'undefined')
42
+ return [];
43
+ return Promise.all(bundle.fonts.map(async (f) => {
44
+ const face = new FontFace(f.family, f.bytes, { weight: String(f.weight), style: f.style });
45
+ await face.load();
46
+ fontSet.add(face);
47
+ return face;
48
+ }));
49
+ }
50
+ /** Decode the bundle's pictures and register them with the canvas backend
51
+ * (`registerResourceImage`), recolouring SVG figures when the config asks
52
+ * for single-ink diagrams. Await it before painting. */
53
+ export async function registerBundleImages(bundle) {
54
+ const inkHex = diagramInkHex(bundle.config);
55
+ await Promise.all(bundle.resources.map(async (r) => {
56
+ const fileId = imageFileId(r);
57
+ const blob = pictureBlob(bundle, r, inkHex);
58
+ if (!fileId || !blob)
59
+ return;
60
+ if (r.kind === 'svg') {
61
+ const url = URL.createObjectURL(blob);
62
+ try {
63
+ const img = new Image();
64
+ await new Promise((resolve, reject) => {
65
+ img.onload = () => resolve();
66
+ img.onerror = () => reject(new Error(`Could not decode ${fileId}`));
67
+ img.src = url;
68
+ });
69
+ registerResourceImage(fileId, img, { vector: true });
70
+ }
71
+ finally {
72
+ URL.revokeObjectURL(url);
73
+ }
74
+ }
75
+ else {
76
+ registerResourceImage(fileId, await createImageBitmap(blob));
77
+ }
78
+ }));
79
+ }
80
+ /** A `resourceImageUrl` resolver for `renderToHtml`: object URLs over the
81
+ * bundle's pictures, built once. `revoke()` frees them. */
82
+ export function bundleImageUrl(bundle) {
83
+ const inkHex = diagramInkHex(bundle.config);
84
+ const urls = new Map();
85
+ for (const r of bundle.resources) {
86
+ const fileId = imageFileId(r);
87
+ const blob = pictureBlob(bundle, r, inkHex);
88
+ if (fileId && blob && !urls.has(fileId))
89
+ urls.set(fileId, URL.createObjectURL(blob));
90
+ }
91
+ const resolve = (fileId) => urls.get(fileId);
92
+ return Object.assign(resolve, {
93
+ revoke: () => {
94
+ for (const url of urls.values())
95
+ URL.revokeObjectURL(url);
96
+ urls.clear();
97
+ },
98
+ });
99
+ }
100
+ /** A `resourceBytes` resolver for `postext-pdf`'s `renderToPdf`: an SVG
101
+ * figure resolves to its vector print master (`svg.pdfFileId`) when it has
102
+ * one — unless single-ink is on, which recolours SVG markup only. */
103
+ export function bundleResourceBytes(bundle) {
104
+ const singleInk = diagramInkHex(bundle.config) !== null;
105
+ const bytes = new Map();
106
+ for (const r of bundle.resources) {
107
+ if (r.kind === 'bitmap' && r.bitmap?.fileId) {
108
+ const data = bundle.files.get(r.bitmap.fileId);
109
+ if (data)
110
+ bytes.set(r.bitmap.fileId, data);
111
+ }
112
+ else if (r.kind === 'svg' && r.svg?.fileId) {
113
+ const master = r.svg.pdfFileId && !singleInk ? bundle.files.get(r.svg.pdfFileId) : undefined;
114
+ const data = master ?? bundle.files.get(r.svg.fileId);
115
+ if (data)
116
+ bytes.set(r.svg.fileId, data);
117
+ }
118
+ }
119
+ return (fileId) => bytes.get(fileId);
120
+ }
121
+ /** A `fontProvider` for `postext-pdf`'s `renderToPdf`: the bundle's own
122
+ * faces (nearest weight, same style first), else `fallback`. */
123
+ export function bundleFontProvider(bundle, options = {}) {
124
+ return async (family, weight, style) => {
125
+ const faces = bundle.fonts.filter((f) => f.family.toLowerCase() === family.toLowerCase());
126
+ if (faces.length === 0) {
127
+ if (options.fallback)
128
+ return options.fallback(family, weight, style);
129
+ throw new Error(`Font family "${family}" is not in the bundle and no fallback was given`);
130
+ }
131
+ const sameStyle = faces.filter((f) => f.style === style);
132
+ const pool = sameStyle.length > 0 ? sameStyle : faces;
133
+ const face = pool.reduce((best, f) => (Math.abs(f.weight - weight) < Math.abs(best.weight - weight) ? f : best), pool[0]);
134
+ const bytes = new Uint8Array(face.bytes);
135
+ if (face.format !== 'woff2')
136
+ return bytes;
137
+ if (!options.decodeWoff2)
138
+ throw new Error(`"${face.file}" is WOFF2: pass decodeWoff2 (postext-pdf's decompressWoff2)`);
139
+ return options.decodeWoff2(bytes);
140
+ };
141
+ }
142
+ //# sourceMappingURL=adapters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapters.js","sourceRoot":"","sources":["../../src/bundle/adapters.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ import type { PostextConfig, Resource } from '../types';
2
+ import type { BundleCanvasScope, BundleChapter, BundleFontFile, BundleManifest, BundleManifestV2 } from './types';
3
+ /** A `.postext` file, opened. Every `fileId` it hands out (in `resources`
4
+ * and `config.customFonts`) is the file's path inside the bundle, so
5
+ * `files.get(fileId)` returns its bytes. */
6
+ export interface PostextBundle {
7
+ /** The validated `preset.json`. */
8
+ manifest: BundleManifest;
9
+ id: string;
10
+ name: string;
11
+ description?: string;
12
+ /** The locale the content was read in. */
13
+ locale: string;
14
+ /** Every locale a bilingual bundle carries (the manifest's `locales`). */
15
+ locales?: string[];
16
+ /** Chapters in book order. */
17
+ chapters: BundleChapter[];
18
+ /** Ready for `buildDocument`: the base configuration, the bundle's
19
+ * `config` and the locale's overrides, with `customFonts` naming the
20
+ * bundle's own font files. */
21
+ config: PostextConfig;
22
+ resources: Resource[];
23
+ /** The bundle's font files, one per family variant. */
24
+ fonts: BundleFontFile[];
25
+ /** Every file of the bundle by path (= `fileId`). */
26
+ files: Map<string, Uint8Array>;
27
+ /** Path of the cover picture, when the bundle has one. */
28
+ thumbnail?: string;
29
+ /** How the bundle asks to be viewed (`book`: the whole book as one
30
+ * canvas). */
31
+ canvasScope?: BundleCanvasScope;
32
+ /** Non-fatal problems met while reading (unsupported font files, a
33
+ * missing print master). */
34
+ warnings: string[];
35
+ }
36
+ export interface OpenBundleOptions {
37
+ /** Locale to read a bilingual bundle in (`es`, `en-GB`). Defaults to the
38
+ * bundle's own locale. */
39
+ locale?: string;
40
+ }
41
+ /** Open a `.postext` file. Throws when it is not a zip, has no valid
42
+ * `preset.json` or misses a file the manifest names. */
43
+ export declare function openBundle(input: Uint8Array | ArrayBuffer | Blob, options?: OpenBundleOptions): Promise<PostextBundle>;
44
+ /** Bytes a bundle may be given: raw bytes, a buffer, a Blob / File, or a
45
+ * string (an SVG's markup, a text file). */
46
+ export type BundleFileData = Uint8Array | ArrayBuffer | Blob | string;
47
+ export interface CreateBundleInput {
48
+ /** Display name (`preset.json`'s `name`). */
49
+ name: string;
50
+ /** Stable identifier; defaults to a slug of `name`. */
51
+ id?: string;
52
+ description?: string;
53
+ /** The content's language (`en`, `es`, …). */
54
+ locale?: string;
55
+ /** The book, one entry per chapter. A chapter without a title takes the
56
+ * text of its first `# ` heading. */
57
+ chapters?: {
58
+ title?: string;
59
+ markdown: string;
60
+ }[];
61
+ /** A single-document book (one chapter). Ignored when `chapters` is set. */
62
+ markdown?: string;
63
+ config?: PostextConfig;
64
+ /** Resources; a picture names its payload by `bitmap.fileId` /
65
+ * `svg.fileId` (and `svg.pdfFileId`), looked up in `files`. */
66
+ resources?: Resource[];
67
+ /** Payloads by `fileId`: the pictures `resources` reference and the font
68
+ * files `config.customFonts` variants reference. */
69
+ files?: Record<string, BundleFileData> | Map<string, BundleFileData>;
70
+ /** Cover picture (PNG, JPEG, WebP, GIF or SVG). */
71
+ thumbnail?: {
72
+ data: BundleFileData;
73
+ mime: string;
74
+ };
75
+ /** Ask viewers to lay the whole book out as one canvas. */
76
+ canvasScope?: BundleCanvasScope;
77
+ }
78
+ export interface CreatedBundle {
79
+ /** The `.postext` file. */
80
+ bytes: Uint8Array;
81
+ /** The manifest written as `preset.json`. */
82
+ manifest: BundleManifestV2;
83
+ /** Path → bytes of every file inside the archive. */
84
+ files: Record<string, Uint8Array>;
85
+ /** What was left out (a missing payload, a `.woff` face, a font family
86
+ * marked not redistributable). */
87
+ warnings: string[];
88
+ }
89
+ /** Write a `.postext` file from a document: its chapters, configuration,
90
+ * resources and the payloads they reference. */
91
+ export declare function createBundle(input: CreateBundleInput): Promise<CreatedBundle>;
92
+ /** Media type of a file inside a bundle (for a Blob, an object URL). */
93
+ export declare function bundleFileMime(path: string): string;
94
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/bundle/api.ts"],"names":[],"mappings":"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"}