postext 1.2.3 → 1.3.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 +18 -0
- package/dist/__tests__/bundle.test.d.ts +2 -0
- package/dist/__tests__/bundle.test.d.ts.map +1 -0
- package/dist/__tests__/bundle.test.js +210 -0
- package/dist/__tests__/bundle.test.js.map +1 -0
- package/dist/__tests__/exports.test.js +15 -0
- package/dist/__tests__/exports.test.js.map +1 -1
- package/dist/bundle/adapters.d.ts +38 -0
- package/dist/bundle/adapters.d.ts.map +1 -0
- package/dist/bundle/adapters.js +142 -0
- package/dist/bundle/adapters.js.map +1 -0
- package/dist/bundle/api.d.ts +94 -0
- package/dist/bundle/api.d.ts.map +1 -0
- package/dist/bundle/api.js +91 -0
- package/dist/bundle/api.js.map +1 -0
- package/dist/bundle/book.d.ts +24 -0
- package/dist/bundle/book.d.ts.map +1 -0
- package/dist/bundle/book.js +55 -0
- package/dist/bundle/book.js.map +1 -0
- package/dist/bundle/codec.d.ts +105 -0
- package/dist/bundle/codec.d.ts.map +1 -0
- package/dist/bundle/codec.js +245 -0
- package/dist/bundle/codec.js.map +1 -0
- package/dist/bundle/index.d.ts +14 -0
- package/dist/bundle/index.d.ts.map +1 -0
- package/dist/bundle/index.js +10 -0
- package/dist/bundle/index.js.map +1 -0
- package/dist/bundle/manifest.d.ts +76 -0
- package/dist/bundle/manifest.d.ts.map +1 -0
- package/dist/bundle/manifest.js +444 -0
- package/dist/bundle/manifest.js.map +1 -0
- package/dist/bundle/types.d.ts +141 -0
- package/dist/bundle/types.d.ts.map +1 -0
- package/dist/bundle/types.js +6 -0
- package/dist/bundle/types.js.map +1 -0
- package/dist/bundle/zip.d.ts +23 -0
- package/dist/bundle/zip.d.ts.map +1 -0
- package/dist/bundle/zip.js +87 -0
- package/dist/bundle/zip.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/package.json +6 -1
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
// The high-level bundle API: open a `.postext` file into everything the
|
|
2
|
+
// engine and its backends need, or write one from a document.
|
|
3
|
+
import { readBundle, planBundle, resolveBundleFiles } from './codec';
|
|
4
|
+
import { mimeForFile, slugify } from './manifest';
|
|
5
|
+
import { openBundleZip, zipBundle } from './zip';
|
|
6
|
+
async function toBytes(input) {
|
|
7
|
+
if (input instanceof Uint8Array)
|
|
8
|
+
return input;
|
|
9
|
+
if (input instanceof ArrayBuffer)
|
|
10
|
+
return new Uint8Array(input);
|
|
11
|
+
return new Uint8Array(await input.arrayBuffer());
|
|
12
|
+
}
|
|
13
|
+
/** Open a `.postext` file. Throws when it is not a zip, has no valid
|
|
14
|
+
* `preset.json` or misses a file the manifest names. */
|
|
15
|
+
export async function openBundle(input, options = {}) {
|
|
16
|
+
const zip = openBundleZip(await toBytes(input));
|
|
17
|
+
const warnings = [];
|
|
18
|
+
const read = await readBundle(zip.manifest, zip.readFile, {
|
|
19
|
+
...(options.locale ? { locale: options.locale } : {}),
|
|
20
|
+
onWarning: (w) => warnings.push(w),
|
|
21
|
+
});
|
|
22
|
+
const { manifest } = read;
|
|
23
|
+
return {
|
|
24
|
+
manifest,
|
|
25
|
+
id: manifest.id,
|
|
26
|
+
name: manifest.name,
|
|
27
|
+
...(manifest.description ? { description: manifest.description } : {}),
|
|
28
|
+
locale: read.locale,
|
|
29
|
+
...(manifest.locales ? { locales: manifest.locales } : {}),
|
|
30
|
+
chapters: read.chapters.map((c, i) => ({ ...c, title: c.title || chapterTitle(c.markdown, i + 1) })),
|
|
31
|
+
config: read.config,
|
|
32
|
+
resources: read.resources,
|
|
33
|
+
fonts: read.fonts,
|
|
34
|
+
files: zip.files,
|
|
35
|
+
...(manifest.thumbnail && zip.files.has(manifest.thumbnail) ? { thumbnail: manifest.thumbnail } : {}),
|
|
36
|
+
...(manifest.view?.canvasScope ? { canvasScope: manifest.view.canvasScope } : {}),
|
|
37
|
+
warnings,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/** The text of a chapter's first `# ` heading, else `Chapter n`. */
|
|
41
|
+
function chapterTitle(markdown, n) {
|
|
42
|
+
let inFence = false;
|
|
43
|
+
for (const line of markdown.split('\n')) {
|
|
44
|
+
if (/^\s*(```|~~~)/.test(line))
|
|
45
|
+
inFence = !inFence;
|
|
46
|
+
if (inFence)
|
|
47
|
+
continue;
|
|
48
|
+
const m = /^#\s+(.+?)\s*#*\s*$/.exec(line);
|
|
49
|
+
if (m) {
|
|
50
|
+
const text = m[1].replace(/\{[^}]*\}\s*$/, '').replace(/[*_`]/g, '').trim();
|
|
51
|
+
if (text)
|
|
52
|
+
return text;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return `Chapter ${n}`;
|
|
56
|
+
}
|
|
57
|
+
async function dataToBytes(data) {
|
|
58
|
+
if (typeof data === 'string')
|
|
59
|
+
return new TextEncoder().encode(data);
|
|
60
|
+
return toBytes(data);
|
|
61
|
+
}
|
|
62
|
+
const THUMBNAIL_ID = '\u0000thumbnail';
|
|
63
|
+
/** Write a `.postext` file from a document: its chapters, configuration,
|
|
64
|
+
* resources and the payloads they reference. */
|
|
65
|
+
export async function createBundle(input) {
|
|
66
|
+
const source = input.chapters ?? (input.markdown !== undefined ? [{ markdown: input.markdown }] : []);
|
|
67
|
+
if (source.length === 0)
|
|
68
|
+
throw new Error('createBundle: give `chapters` or `markdown`');
|
|
69
|
+
const chapters = source.map((c, i) => ({ title: c.title || chapterTitle(c.markdown, i + 1), markdown: c.markdown }));
|
|
70
|
+
const fileMap = input.files instanceof Map ? input.files : new Map(Object.entries(input.files ?? {}));
|
|
71
|
+
const lookup = async (fileId) => {
|
|
72
|
+
if (fileId === THUMBNAIL_ID)
|
|
73
|
+
return input.thumbnail ? dataToBytes(input.thumbnail.data) : null;
|
|
74
|
+
const data = fileMap.get(fileId);
|
|
75
|
+
return data === undefined ? null : dataToBytes(data);
|
|
76
|
+
};
|
|
77
|
+
const plan = planBundle({ id: input.id || slugify(input.name) || 'bundle', name: input.name, ...(input.description ? { description: input.description } : {}), ...(input.locale ? { locale: input.locale } : {}) }, {
|
|
78
|
+
chapters,
|
|
79
|
+
config: input.config ?? {},
|
|
80
|
+
resources: input.resources ?? [],
|
|
81
|
+
...(input.canvasScope ? { canvasScope: input.canvasScope } : {}),
|
|
82
|
+
...(input.thumbnail ? { thumbnail: { fileId: THUMBNAIL_ID, mime: input.thumbnail.mime } } : {}),
|
|
83
|
+
});
|
|
84
|
+
const resolved = await resolveBundleFiles(plan, { readBlob: lookup, readFont: lookup });
|
|
85
|
+
return { bytes: zipBundle(resolved.files), manifest: resolved.manifest, files: resolved.files, warnings: resolved.warnings };
|
|
86
|
+
}
|
|
87
|
+
/** Media type of a file inside a bundle (for a Blob, an object URL). */
|
|
88
|
+
export function bundleFileMime(path) {
|
|
89
|
+
return mimeForFile(path);
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/bundle/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { PostextConfig, Resource } from '../types';
|
|
2
|
+
import type { VDTDocument } from '../vdt';
|
|
3
|
+
import type { BuildDocumentOptions } from '../pipeline';
|
|
4
|
+
import type { MeasurementCache } from '../measure';
|
|
5
|
+
import type { BundleChapter } from './types';
|
|
6
|
+
export interface BuildBundleOptions extends BuildDocumentOptions {
|
|
7
|
+
/** Configuration to lay out with instead of the bundle's own. */
|
|
8
|
+
config?: PostextConfig;
|
|
9
|
+
/** Measurement cache shared by every chapter; one is created when
|
|
10
|
+
* omitted. */
|
|
11
|
+
cache?: MeasurementCache;
|
|
12
|
+
/** Called after each chapter is laid out (the last round's, when the
|
|
13
|
+
* contents take several). */
|
|
14
|
+
onChapter?: (index: number, doc: VDTDocument) => void;
|
|
15
|
+
}
|
|
16
|
+
/** Lay out every chapter of `bundle`, in order; returns one `VDTDocument`
|
|
17
|
+
* per chapter. Hand the array to `renderToPdf` for the whole book, or
|
|
18
|
+
* paint `docs[i]` for one chapter. */
|
|
19
|
+
export declare function buildBundle(bundle: {
|
|
20
|
+
chapters: readonly Pick<BundleChapter, 'markdown'>[];
|
|
21
|
+
config: PostextConfig;
|
|
22
|
+
resources: readonly Resource[];
|
|
23
|
+
}, options?: BuildBundleOptions): VDTDocument[];
|
|
24
|
+
//# sourceMappingURL=book.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"book.d.ts","sourceRoot":"","sources":["../../src/bundle/book.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAoC,aAAa,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC1F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAE1C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAExD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,MAAM,WAAW,kBAAmB,SAAQ,oBAAoB;IAC9D,iEAAiE;IACjE,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB;mBACe;IACf,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB;kCAC8B;IAC9B,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;CACvD;AAMD;;uCAEuC;AACvC,wBAAgB,WAAW,CACzB,MAAM,EAAE;IAAE,QAAQ,EAAE,SAAS,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,EAAE,CAAC;IAAC,MAAM,EAAE,aAAa,CAAC;IAAC,SAAS,EAAE,SAAS,QAAQ,EAAE,CAAA;CAAE,EACvH,OAAO,GAAE,kBAAuB,GAC/B,WAAW,EAAE,CA6Cf"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
// Lay a bundle's book out chapter by chapter, the way the Sandbox does:
|
|
2
|
+
// each chapter continues the one before it (heading and resource counters,
|
|
3
|
+
// the open part, page parity and page numbering), and a chapter printing
|
|
4
|
+
// the contents (`:::toc`) receives the whole book's outline.
|
|
5
|
+
import { buildDocument, continuationAfter, contentOutline, outlineFromDoc, outlineKey } from '../pipeline';
|
|
6
|
+
import { createMeasurementCache } from '../measure';
|
|
7
|
+
/** How many times the book is laid out at most while the contents' page
|
|
8
|
+
* numbers settle. */
|
|
9
|
+
const MAX_ROUNDS = 3;
|
|
10
|
+
/** Lay out every chapter of `bundle`, in order; returns one `VDTDocument`
|
|
11
|
+
* per chapter. Hand the array to `renderToPdf` for the whole book, or
|
|
12
|
+
* paint `docs[i]` for one chapter. */
|
|
13
|
+
export function buildBundle(bundle, options = {}) {
|
|
14
|
+
const { config: configOverride, cache: sharedCache, onChapter, ...buildOptions } = options;
|
|
15
|
+
const config = configOverride ?? bundle.config;
|
|
16
|
+
const resources = [...bundle.resources];
|
|
17
|
+
const cache = sharedCache ?? createMeasurementCache();
|
|
18
|
+
const chapters = bundle.chapters;
|
|
19
|
+
const hasToc = chapters.map((c) => contentOutline({ markdown: c.markdown }, config).hasToc);
|
|
20
|
+
const anyToc = hasToc.some(Boolean);
|
|
21
|
+
let outline;
|
|
22
|
+
let docs = [];
|
|
23
|
+
for (let round = 0; round < MAX_ROUNDS; round++) {
|
|
24
|
+
docs = [];
|
|
25
|
+
const continuations = [];
|
|
26
|
+
let counters;
|
|
27
|
+
let physical = 0;
|
|
28
|
+
let next;
|
|
29
|
+
chapters.forEach((chapter, index) => {
|
|
30
|
+
const continuation = index === 0
|
|
31
|
+
? undefined
|
|
32
|
+
: { ...counters, pageIndexOffset: physical, ...(next ? { pageNumbering: next } : {}) };
|
|
33
|
+
const doc = buildDocument({ markdown: chapter.markdown, resources, ...(continuation ? { continuation } : {}), ...(hasToc[index] && outline ? { outline } : {}) }, config, cache, buildOptions);
|
|
34
|
+
docs.push(doc);
|
|
35
|
+
continuations.push(continuation);
|
|
36
|
+
const last = doc.pages[doc.pages.length - 1];
|
|
37
|
+
physical += doc.pages.length;
|
|
38
|
+
if (last)
|
|
39
|
+
next = { startAt: last.pageNumberValue + 1, format: last.pageNumberFormat };
|
|
40
|
+
counters = continuationAfter({ markdown: chapter.markdown, resources }, config, counters);
|
|
41
|
+
});
|
|
42
|
+
if (!anyToc)
|
|
43
|
+
break;
|
|
44
|
+
const bookOutline = chapters.flatMap((chapter, index) => outlineFromDoc(docs[index], contentOutline({ markdown: chapter.markdown }, config, continuations[index]).outline));
|
|
45
|
+
if (outline && outlineKey(outline) === outlineKey(bookOutline))
|
|
46
|
+
break;
|
|
47
|
+
outline = bookOutline;
|
|
48
|
+
// The first round laid the contents out from its own chapter alone:
|
|
49
|
+
// always lay the book out once more with the whole outline.
|
|
50
|
+
}
|
|
51
|
+
if (onChapter)
|
|
52
|
+
docs.forEach((doc, index) => onChapter(index, doc));
|
|
53
|
+
return docs;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=book.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"book.js","sourceRoot":"","sources":["../../src/bundle/book.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import type { PostextConfig, Resource } from '../types';
|
|
2
|
+
import type { BundleBlob, BundleCanvasScope, BundleChapter, BundleFileReader, BundleFontFile, BundleIdScheme, BundleImageSize, BundleManifest, BundleManifestV2 } from './types';
|
|
3
|
+
/** The configuration a bundle's own `config` is laid over: the default
|
|
4
|
+
* colour palette plus the built-in resource types localised to `locale`
|
|
5
|
+
* (what the Sandbox starts every document from). */
|
|
6
|
+
export declare function bundleBaseConfig(locale?: string): PostextConfig;
|
|
7
|
+
export interface ReadBundleOptions {
|
|
8
|
+
/** Locale to read a bilingual bundle in. Defaults to the manifest's own
|
|
9
|
+
* locale, else `en`. */
|
|
10
|
+
locale?: string;
|
|
11
|
+
/** How loaded files are named (`fileId`). Defaults to their path. */
|
|
12
|
+
ids?: BundleIdScheme;
|
|
13
|
+
/** Configuration under the manifest's `config`. Defaults to
|
|
14
|
+
* `bundleBaseConfig(locale)`. */
|
|
15
|
+
baseConfig?: PostextConfig;
|
|
16
|
+
/** Intrinsic size of an SVG whose spec omits it. Defaults to `svgSize`. */
|
|
17
|
+
measureSvg?: (markup: string) => BundleImageSize | undefined;
|
|
18
|
+
/** Intrinsic size of a bitmap whose spec omits it. Defaults to reading
|
|
19
|
+
* the image header (`bitmapSize`). */
|
|
20
|
+
measureBitmap?: (bytes: ArrayBuffer, mime: string) => Promise<BundleImageSize | undefined> | BundleImageSize | undefined;
|
|
21
|
+
onWarning?: (message: string) => void;
|
|
22
|
+
}
|
|
23
|
+
export interface ReadBundleResult {
|
|
24
|
+
manifest: BundleManifest;
|
|
25
|
+
/** The locale the content was resolved for (the chapter-map key a
|
|
26
|
+
* bilingual bundle served, else the manifest's locale, else the one
|
|
27
|
+
* asked for). */
|
|
28
|
+
locale: string;
|
|
29
|
+
chapters: BundleChapter[];
|
|
30
|
+
/** Base config + manifest `config` + the locale's overrides, with the
|
|
31
|
+
* bundle's font families appended to `customFonts`. */
|
|
32
|
+
config: PostextConfig;
|
|
33
|
+
resources: Resource[];
|
|
34
|
+
/** Resource payloads (pictures and PDF print masters). */
|
|
35
|
+
blobs: BundleBlob[];
|
|
36
|
+
fonts: BundleFontFile[];
|
|
37
|
+
}
|
|
38
|
+
/** Read a manifest plus its files. Throws on an invalid manifest or a
|
|
39
|
+
* missing chapter, picture or font file. */
|
|
40
|
+
export declare function readBundle(manifest: unknown, readFile: BundleFileReader, options?: ReadBundleOptions): Promise<ReadBundleResult>;
|
|
41
|
+
export interface BundleMeta {
|
|
42
|
+
id: string;
|
|
43
|
+
name: string;
|
|
44
|
+
description?: string;
|
|
45
|
+
locale?: string;
|
|
46
|
+
}
|
|
47
|
+
export interface BundleContent {
|
|
48
|
+
chapters: readonly {
|
|
49
|
+
title: string;
|
|
50
|
+
markdown: string;
|
|
51
|
+
}[];
|
|
52
|
+
config: PostextConfig;
|
|
53
|
+
resources: readonly Resource[];
|
|
54
|
+
/** Written as the manifest's `view` when it is not the default. */
|
|
55
|
+
canvasScope?: BundleCanvasScope;
|
|
56
|
+
/** The cover picture, carried as the manifest's `thumbnail`. */
|
|
57
|
+
thumbnail?: {
|
|
58
|
+
fileId: string;
|
|
59
|
+
mime: string;
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
export interface PlannedFile {
|
|
63
|
+
/** Path inside the bundle (`resources/x.png`, `fonts/y.ttf`). */
|
|
64
|
+
path: string;
|
|
65
|
+
fileId: string;
|
|
66
|
+
kind: 'blob' | 'font';
|
|
67
|
+
/** Resource id (blob) or family name (font), for warnings. */
|
|
68
|
+
owner: string;
|
|
69
|
+
}
|
|
70
|
+
export interface BundlePlan {
|
|
71
|
+
manifest: BundleManifestV2;
|
|
72
|
+
files: PlannedFile[];
|
|
73
|
+
/** Chapter file path → text, in book order (index-aligned with the
|
|
74
|
+
* content's chapters). */
|
|
75
|
+
chapterFiles: {
|
|
76
|
+
path: string;
|
|
77
|
+
markdown: string;
|
|
78
|
+
}[];
|
|
79
|
+
warnings: string[];
|
|
80
|
+
}
|
|
81
|
+
/** Font formats a bundle may carry (`.woff` is rejected by the PDF backend
|
|
82
|
+
* and by `fontsToCustomFonts`). */
|
|
83
|
+
export declare const EXPORTABLE_FONT_FORMATS: readonly ["ttf", "otf", "woff2"];
|
|
84
|
+
/** Decide file names and the manifest for a bundle. Pure; the bytes are
|
|
85
|
+
* resolved by `resolveBundleFiles`. Fonts are declared in `fonts[]`,
|
|
86
|
+
* never inside `config.customFonts` (their ids are local to the writer). */
|
|
87
|
+
export declare function planBundle(meta: BundleMeta, content: BundleContent): BundlePlan;
|
|
88
|
+
export interface BundleByteSources {
|
|
89
|
+
readBlob: (fileId: string) => Promise<ArrayBuffer | Uint8Array | null | undefined>;
|
|
90
|
+
readFont: (fileId: string) => Promise<ArrayBuffer | Uint8Array | null | undefined>;
|
|
91
|
+
}
|
|
92
|
+
export interface ResolvedBundleFiles {
|
|
93
|
+
/** Path → bytes, ready to zip (`preset.json` and chapters included). */
|
|
94
|
+
files: Record<string, Uint8Array>;
|
|
95
|
+
manifest: BundleManifestV2;
|
|
96
|
+
warnings: string[];
|
|
97
|
+
/** Planned paths whose bytes could not be read (and were dropped). */
|
|
98
|
+
missing: string[];
|
|
99
|
+
}
|
|
100
|
+
/** Resolve a plan's bytes. A resource whose payload is gone is dropped from
|
|
101
|
+
* the manifest (a spec without a file would come back as a broken
|
|
102
|
+
* figure); a font variant whose file is gone is dropped likewise, and its
|
|
103
|
+
* family with it when nothing remains. */
|
|
104
|
+
export declare function resolveBundleFiles(plan: BundlePlan, sources: BundleByteSources): Promise<ResolvedBundleFiles>;
|
|
105
|
+
//# sourceMappingURL=codec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../src/bundle/codec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
// Bundle codec shared by every transport: a bundle is a directory-shaped set
|
|
2
|
+
// of files whether it is served over HTTP, read from a `.postext` zip or
|
|
3
|
+
// written out. `readBundle` turns manifest + files into chapters, config,
|
|
4
|
+
// resources and file payloads; `planBundle` / `resolveBundleFiles` do the
|
|
5
|
+
// reverse. Nothing here touches storage.
|
|
6
|
+
import { cloneDefaultColorPalette, defaultResourceTypes, stripConfigDefaults } from '../defaults';
|
|
7
|
+
import { bitmapSize, chapterFileName, extensionForImageMime, extensionForResource, fontsToCustomFonts, isBitmapFile, isBundleManifest, isPdfFile, isSvgFile, mimeForFile, pickChapterSpecs, pickLocaleOverrides, resolveBundleLocale, resourceFromSpec, slugify, svgSize, uniqueSlug, } from './manifest';
|
|
8
|
+
/** The configuration a bundle's own `config` is laid over: the default
|
|
9
|
+
* colour palette plus the built-in resource types localised to `locale`
|
|
10
|
+
* (what the Sandbox starts every document from). */
|
|
11
|
+
export function bundleBaseConfig(locale = 'en') {
|
|
12
|
+
return { colorPalette: cloneDefaultColorPalette(), resourceTypes: defaultResourceTypes(locale) };
|
|
13
|
+
}
|
|
14
|
+
const identityIds = { blob: (f) => f, font: (f) => f };
|
|
15
|
+
/** Read a manifest plus its files. Throws on an invalid manifest or a
|
|
16
|
+
* missing chapter, picture or font file. */
|
|
17
|
+
export async function readBundle(manifest, readFile, options = {}) {
|
|
18
|
+
if (!isBundleManifest(manifest))
|
|
19
|
+
throw new Error('Invalid bundle manifest (preset.json)');
|
|
20
|
+
const locale = options.locale ?? manifest.locale ?? 'en';
|
|
21
|
+
const ids = options.ids ?? identityIds;
|
|
22
|
+
const onWarning = options.onWarning;
|
|
23
|
+
const measureSvg = options.measureSvg ?? svgSize;
|
|
24
|
+
const measureBitmap = options.measureBitmap ?? ((bytes) => bitmapSize(bytes));
|
|
25
|
+
const decoder = new TextDecoder();
|
|
26
|
+
const chapters = [];
|
|
27
|
+
for (const spec of pickChapterSpecs(manifest, locale)) {
|
|
28
|
+
chapters.push({ title: spec.title, file: spec.file, markdown: decoder.decode(await readFile(spec.file)) });
|
|
29
|
+
}
|
|
30
|
+
// A bilingual bundle's per-locale wording: resource captions, notes and
|
|
31
|
+
// alt texts merged by id, config keys replaced wholesale.
|
|
32
|
+
const overrides = pickLocaleOverrides(manifest, locale);
|
|
33
|
+
const wordingById = new Map((overrides?.resources ?? []).map((r) => [r.id, r]));
|
|
34
|
+
const localizedSpecs = (manifest.resources ?? []).map((spec) => {
|
|
35
|
+
const wording = wordingById.get(spec.id);
|
|
36
|
+
if (!wording)
|
|
37
|
+
return spec;
|
|
38
|
+
const merged = { ...spec, ...wording, id: spec.id };
|
|
39
|
+
// Artwork swapped for this locale: the shared spec's intrinsic size
|
|
40
|
+
// describes the other file, so it is read from the bytes instead.
|
|
41
|
+
if (wording.file && wording.file !== spec.file) {
|
|
42
|
+
if (wording.width === undefined)
|
|
43
|
+
delete merged.width;
|
|
44
|
+
if (wording.height === undefined)
|
|
45
|
+
delete merged.height;
|
|
46
|
+
if (wording.pdfFile === undefined)
|
|
47
|
+
delete merged.pdfFile;
|
|
48
|
+
}
|
|
49
|
+
return merged;
|
|
50
|
+
});
|
|
51
|
+
const blobs = [];
|
|
52
|
+
const resources = await Promise.all(localizedSpecs.map(async (spec) => {
|
|
53
|
+
const file = spec.file;
|
|
54
|
+
if (!file)
|
|
55
|
+
return resourceFromSpec(spec, undefined, ids.blob);
|
|
56
|
+
const mime = mimeForFile(file);
|
|
57
|
+
const bytes = await readFile(file);
|
|
58
|
+
blobs.push({ fileId: ids.blob(file), file, bytes, mime });
|
|
59
|
+
// Optional vector print master next to an SVG: a missing or non-PDF
|
|
60
|
+
// file only costs the master, never the figure.
|
|
61
|
+
let resolved = spec;
|
|
62
|
+
const pdfFile = spec.pdfFile;
|
|
63
|
+
if (pdfFile && isSvgFile(file)) {
|
|
64
|
+
const master = isPdfFile(pdfFile) ? await readFile(pdfFile).catch(() => null) : null;
|
|
65
|
+
if (master) {
|
|
66
|
+
blobs.push({ fileId: ids.blob(pdfFile), file: pdfFile, bytes: master, mime: mimeForFile(pdfFile) });
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
onWarning?.(`${spec.id}: print master "${pdfFile}" ${isPdfFile(pdfFile) ? 'not found' : 'is not a .pdf'}, ignored`);
|
|
70
|
+
resolved = { ...spec, pdfFile: undefined };
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
let size;
|
|
74
|
+
if (spec.width === undefined || spec.height === undefined) {
|
|
75
|
+
if (isSvgFile(file))
|
|
76
|
+
size = measureSvg(decoder.decode(bytes));
|
|
77
|
+
else if (isBitmapFile(file))
|
|
78
|
+
size = await measureBitmap(bytes, mime);
|
|
79
|
+
}
|
|
80
|
+
return resourceFromSpec(resolved, size, ids.blob);
|
|
81
|
+
}));
|
|
82
|
+
const fontSet = fontsToCustomFonts(manifest.fonts ?? [], ids.font);
|
|
83
|
+
for (const w of fontSet.warnings)
|
|
84
|
+
onWarning?.(w);
|
|
85
|
+
const fonts = await Promise.all(fontSet.files.map(async (f) => ({ ...f, bytes: await readFile(f.file) })));
|
|
86
|
+
const baseConfig = { ...(options.baseConfig ?? bundleBaseConfig(locale)), ...(manifest.config ?? {}), ...(overrides?.config ?? {}) };
|
|
87
|
+
const customFonts = [...(manifest.config?.customFonts ?? []), ...fontSet.families];
|
|
88
|
+
const config = customFonts.length > 0 ? { ...baseConfig, customFonts } : baseConfig;
|
|
89
|
+
return { manifest, locale: resolveBundleLocale(manifest, locale), chapters, config, resources, blobs, fonts };
|
|
90
|
+
}
|
|
91
|
+
/** A resource minus the fields that only make sense in storage. */
|
|
92
|
+
function omitStorageFields(r) {
|
|
93
|
+
const copy = { ...r };
|
|
94
|
+
delete copy.createdAt;
|
|
95
|
+
delete copy.updatedAt;
|
|
96
|
+
delete copy.bitmap;
|
|
97
|
+
delete copy.svg;
|
|
98
|
+
return copy;
|
|
99
|
+
}
|
|
100
|
+
/** Font formats a bundle may carry (`.woff` is rejected by the PDF backend
|
|
101
|
+
* and by `fontsToCustomFonts`). */
|
|
102
|
+
export const EXPORTABLE_FONT_FORMATS = ['ttf', 'otf', 'woff2'];
|
|
103
|
+
/** Decide file names and the manifest for a bundle. Pure; the bytes are
|
|
104
|
+
* resolved by `resolveBundleFiles`. Fonts are declared in `fonts[]`,
|
|
105
|
+
* never inside `config.customFonts` (their ids are local to the writer). */
|
|
106
|
+
export function planBundle(meta, content) {
|
|
107
|
+
const warnings = [];
|
|
108
|
+
const files = [];
|
|
109
|
+
const takenResourceNames = new Set();
|
|
110
|
+
const takenFontNames = new Set();
|
|
111
|
+
const resources = [];
|
|
112
|
+
for (const r of content.resources) {
|
|
113
|
+
const { bitmap, svg } = r;
|
|
114
|
+
const rest = omitStorageFields(r);
|
|
115
|
+
const ext = extensionForResource(r);
|
|
116
|
+
const fileId = bitmap?.fileId ?? svg?.fileId;
|
|
117
|
+
if (!ext || !fileId) {
|
|
118
|
+
resources.push(rest);
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
const name = uniqueSlug(slugify(r.id), takenResourceNames, 'resource');
|
|
122
|
+
takenResourceNames.add(name);
|
|
123
|
+
const path = `resources/${name}.${ext}`;
|
|
124
|
+
files.push({ path, fileId, kind: 'blob', owner: r.id });
|
|
125
|
+
let pdfFile;
|
|
126
|
+
if (svg?.pdfFileId) {
|
|
127
|
+
pdfFile = `resources/${name}.pdf`;
|
|
128
|
+
files.push({ path: pdfFile, fileId: svg.pdfFileId, kind: 'blob', owner: r.id });
|
|
129
|
+
}
|
|
130
|
+
const width = bitmap?.width ?? svg?.width;
|
|
131
|
+
const height = bitmap?.height ?? svg?.height;
|
|
132
|
+
resources.push({
|
|
133
|
+
...rest,
|
|
134
|
+
file: path,
|
|
135
|
+
...(pdfFile ? { pdfFile } : {}),
|
|
136
|
+
...(width ? { width } : {}),
|
|
137
|
+
...(height ? { height } : {}),
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
const fonts = [];
|
|
141
|
+
for (const family of content.config.customFonts ?? []) {
|
|
142
|
+
// A family the document may set but not pass on: its files stay behind
|
|
143
|
+
// and no `fonts[]` entry names it, so the bundle opens with the
|
|
144
|
+
// reader's own fallback for that family.
|
|
145
|
+
if (family.redistributable === false) {
|
|
146
|
+
warnings.push(`${family.name}: font files left out of the export (the family is not redistributable)`);
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
const variants = [];
|
|
150
|
+
for (const v of family.variants) {
|
|
151
|
+
if (!EXPORTABLE_FONT_FORMATS.includes(v.format)) {
|
|
152
|
+
warnings.push(`${family.name}: variant ${v.weight} ${v.style} skipped (.${v.format} is not supported)`);
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
155
|
+
const base = v.fileName ? slugify(v.fileName.replace(/\.[^.]+$/, '')) : '';
|
|
156
|
+
const name = uniqueSlug(base || slugify(`${family.name}-${v.weight}-${v.style}`), takenFontNames, 'font');
|
|
157
|
+
takenFontNames.add(name);
|
|
158
|
+
const path = `fonts/${name}.${v.format}`;
|
|
159
|
+
files.push({ path, fileId: v.fileId, kind: 'font', owner: family.name });
|
|
160
|
+
variants.push({ weight: v.weight, style: v.style, file: path });
|
|
161
|
+
}
|
|
162
|
+
if (variants.length > 0)
|
|
163
|
+
fonts.push({ name: family.name, variants });
|
|
164
|
+
}
|
|
165
|
+
const thumbExt = content.thumbnail ? extensionForImageMime(content.thumbnail.mime) : null;
|
|
166
|
+
const thumbnailPath = content.thumbnail && thumbExt ? `thumbnail.${thumbExt}` : undefined;
|
|
167
|
+
if (content.thumbnail && thumbnailPath) {
|
|
168
|
+
files.push({ path: thumbnailPath, fileId: content.thumbnail.fileId, kind: 'blob', owner: 'thumbnail' });
|
|
169
|
+
}
|
|
170
|
+
const configWithoutFonts = { ...stripConfigDefaults(content.config) };
|
|
171
|
+
delete configWithoutFonts.customFonts;
|
|
172
|
+
const takenChapterNames = new Set();
|
|
173
|
+
const chapterSpecs = [];
|
|
174
|
+
const chapterFiles = [];
|
|
175
|
+
content.chapters.forEach((c, i) => {
|
|
176
|
+
const path = chapterFileName(i, c.title, takenChapterNames, content.chapters.length);
|
|
177
|
+
chapterSpecs.push({ title: c.title, file: path });
|
|
178
|
+
chapterFiles.push({ path, markdown: c.markdown });
|
|
179
|
+
});
|
|
180
|
+
const manifest = {
|
|
181
|
+
version: 2,
|
|
182
|
+
id: meta.id,
|
|
183
|
+
name: meta.name,
|
|
184
|
+
...(meta.description ? { description: meta.description } : {}),
|
|
185
|
+
...(meta.locale ? { locale: meta.locale } : {}),
|
|
186
|
+
...(thumbnailPath ? { thumbnail: thumbnailPath } : {}),
|
|
187
|
+
...(content.canvasScope === 'book' ? { view: { canvasScope: 'book' } } : {}),
|
|
188
|
+
chapters: chapterSpecs,
|
|
189
|
+
config: configWithoutFonts,
|
|
190
|
+
...(resources.length > 0 ? { resources } : {}),
|
|
191
|
+
...(fonts.length > 0 ? { fonts } : {}),
|
|
192
|
+
};
|
|
193
|
+
return { manifest, files, chapterFiles, warnings };
|
|
194
|
+
}
|
|
195
|
+
function toBytes(data) {
|
|
196
|
+
return data instanceof Uint8Array ? data : new Uint8Array(data);
|
|
197
|
+
}
|
|
198
|
+
/** Resolve a plan's bytes. A resource whose payload is gone is dropped from
|
|
199
|
+
* the manifest (a spec without a file would come back as a broken
|
|
200
|
+
* figure); a font variant whose file is gone is dropped likewise, and its
|
|
201
|
+
* family with it when nothing remains. */
|
|
202
|
+
export async function resolveBundleFiles(plan, sources) {
|
|
203
|
+
const warnings = [...plan.warnings];
|
|
204
|
+
const files = {};
|
|
205
|
+
const missingPaths = new Set();
|
|
206
|
+
await Promise.all(plan.files.map(async (f) => {
|
|
207
|
+
const bytes = f.kind === 'blob'
|
|
208
|
+
? await Promise.resolve(sources.readBlob(f.fileId)).catch(() => null)
|
|
209
|
+
: await Promise.resolve(sources.readFont(f.fileId)).catch(() => null);
|
|
210
|
+
if (!bytes) {
|
|
211
|
+
missingPaths.add(f.path);
|
|
212
|
+
warnings.push(`${f.owner}: missing file, skipped`);
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
files[f.path] = toBytes(bytes);
|
|
216
|
+
}));
|
|
217
|
+
let manifest = plan.manifest;
|
|
218
|
+
if (manifest.thumbnail && missingPaths.has(manifest.thumbnail)) {
|
|
219
|
+
manifest = { ...manifest };
|
|
220
|
+
delete manifest.thumbnail;
|
|
221
|
+
}
|
|
222
|
+
if (missingPaths.size > 0) {
|
|
223
|
+
const resources = manifest.resources
|
|
224
|
+
?.filter((r) => !r.file || !missingPaths.has(r.file))
|
|
225
|
+
.map((r) => (r.pdfFile && missingPaths.has(r.pdfFile) ? { ...r, pdfFile: undefined } : r));
|
|
226
|
+
const fonts = manifest.fonts
|
|
227
|
+
?.map((fam) => ({ ...fam, variants: fam.variants.filter((v) => !missingPaths.has(v.file)) }))
|
|
228
|
+
.filter((fam) => fam.variants.length > 0);
|
|
229
|
+
manifest = {
|
|
230
|
+
...manifest,
|
|
231
|
+
...(resources && resources.length > 0 ? { resources } : {}),
|
|
232
|
+
...(fonts && fonts.length > 0 ? { fonts } : {}),
|
|
233
|
+
};
|
|
234
|
+
if (!resources || resources.length === 0)
|
|
235
|
+
delete manifest.resources;
|
|
236
|
+
if (!fonts || fonts.length === 0)
|
|
237
|
+
delete manifest.fonts;
|
|
238
|
+
}
|
|
239
|
+
const enc = new TextEncoder();
|
|
240
|
+
files['preset.json'] = enc.encode(JSON.stringify(manifest, null, 2));
|
|
241
|
+
for (const c of plan.chapterFiles)
|
|
242
|
+
files[c.path] = enc.encode(c.markdown);
|
|
243
|
+
return { files, manifest, warnings, missing: [...missingPaths] };
|
|
244
|
+
}
|
|
245
|
+
//# sourceMappingURL=codec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec.js","sourceRoot":"","sources":["../../src/bundle/codec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export { openBundle, createBundle, bundleFileMime } from './api';
|
|
2
|
+
export type { PostextBundle, OpenBundleOptions, CreateBundleInput, CreatedBundle, BundleFileData } from './api';
|
|
3
|
+
export { buildBundle } from './book';
|
|
4
|
+
export type { BuildBundleOptions } from './book';
|
|
5
|
+
export { loadBundleFonts, registerBundleImages, bundleImageUrl, bundleResourceBytes, bundleFontProvider, diagramInkHex } from './adapters';
|
|
6
|
+
export type { BundleSource, BundleFontProviderOptions } from './adapters';
|
|
7
|
+
export { readBundle, planBundle, resolveBundleFiles, bundleBaseConfig, EXPORTABLE_FONT_FORMATS } from './codec';
|
|
8
|
+
export type { ReadBundleOptions, ReadBundleResult, BundleMeta, BundleContent, PlannedFile, BundlePlan, BundleByteSources, ResolvedBundleFiles } from './codec';
|
|
9
|
+
export { openBundleZip, zipBundle, POSTEXT_EXTENSION, POSTEXT_MIME, MANIFEST_FILE } from './zip';
|
|
10
|
+
export type { OpenedBundleZip } from './zip';
|
|
11
|
+
export { isBundleManifest, hasValidShowcaseMeta, pickMarkdownFile, pickLocaleOverrides, resolveBundleLocale, pickChapterSpecs, chapterFileName, slugify, uniqueSlug, fileExtension, fileBasename, mimeForFile, isBitmapFile, isSvgFile, isPdfFile, fontFormatFromFile, extensionForImageMime, extensionForResource, fontsToCustomFonts, resourceFromSpec, svgSize, bitmapSize, } from './manifest';
|
|
12
|
+
export type { BundleFontFiles } from './manifest';
|
|
13
|
+
export type { BundleShowcaseMeta, BundleResourceSpec, BundleFontVariantSpec, BundleFontFamilySpec, BundleChapterSpec, BundleLocaleOverrides, BundleCanvasScope, BundleViewSpec, BundleManifestV1, BundleManifestV2, BundleManifest, BundleFileReader, BundleIdScheme, BundleImageSize, BundleChapter, BundleBlob, BundleFontFile, } from './types';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bundle/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AACjE,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAChH,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,YAAY,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,cAAc,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3I,YAAY,EAAE,YAAY,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAG1E,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAChH,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAC/J,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,iBAAiB,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACjG,YAAY,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,OAAO,EACP,UAAU,EACV,aAAa,EACb,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,SAAS,EACT,SAAS,EACT,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,gBAAgB,EAChB,OAAO,EACP,UAAU,GACX,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,YAAY,EACV,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,aAAa,EACb,UAAU,EACV,cAAc,GACf,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// `postext/bundle`: create and open `.postext` files — the zipped book
|
|
2
|
+
// bundles the Sandbox exports and imports — and feed them to the backends.
|
|
3
|
+
export { openBundle, createBundle, bundleFileMime } from './api';
|
|
4
|
+
export { buildBundle } from './book';
|
|
5
|
+
export { loadBundleFonts, registerBundleImages, bundleImageUrl, bundleResourceBytes, bundleFontProvider, diagramInkHex } from './adapters';
|
|
6
|
+
// Low-level codec, for hosts that store or serve bundles their own way.
|
|
7
|
+
export { readBundle, planBundle, resolveBundleFiles, bundleBaseConfig, EXPORTABLE_FONT_FORMATS } from './codec';
|
|
8
|
+
export { openBundleZip, zipBundle, POSTEXT_EXTENSION, POSTEXT_MIME, MANIFEST_FILE } from './zip';
|
|
9
|
+
export { isBundleManifest, hasValidShowcaseMeta, pickMarkdownFile, pickLocaleOverrides, resolveBundleLocale, pickChapterSpecs, chapterFileName, slugify, uniqueSlug, fileExtension, fileBasename, mimeForFile, isBitmapFile, isSvgFile, isPdfFile, fontFormatFromFile, extensionForImageMime, extensionForResource, fontsToCustomFonts, resourceFromSpec, svgSize, bitmapSize, } from './manifest';
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bundle/index.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,2EAA2E;AAE3E,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEjE,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,cAAc,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG3I,wEAAwE;AACxE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAEhH,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,iBAAiB,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEjG,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,OAAO,EACP,UAAU,EACV,aAAa,EACb,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,SAAS,EACT,SAAS,EACT,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,gBAAgB,EAChB,OAAO,EACP,UAAU,GACX,MAAM,YAAY,CAAC"}
|