postext 0.3.39 → 0.3.41
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/__bench__/chapter.bench.test.d.ts +2 -0
- package/dist/__bench__/chapter.bench.test.d.ts.map +1 -0
- package/dist/__bench__/chapter.bench.test.js +80 -0
- package/dist/__bench__/chapter.bench.test.js.map +1 -0
- package/dist/__tests__/buildAsync.test.d.ts +2 -0
- package/dist/__tests__/buildAsync.test.d.ts.map +1 -0
- package/dist/__tests__/buildAsync.test.js +50 -0
- package/dist/__tests__/buildAsync.test.js.map +1 -0
- package/dist/__tests__/hyphenateMemo.test.d.ts +2 -0
- package/dist/__tests__/hyphenateMemo.test.d.ts.map +1 -0
- package/dist/__tests__/hyphenateMemo.test.js +21 -0
- package/dist/__tests__/hyphenateMemo.test.js.map +1 -0
- package/dist/__tests__/knuthPlassMerge.test.d.ts +2 -0
- package/dist/__tests__/knuthPlassMerge.test.d.ts.map +1 -0
- package/dist/__tests__/knuthPlassMerge.test.js +55 -0
- package/dist/__tests__/knuthPlassMerge.test.js.map +1 -0
- package/dist/__tests__/memos.test.d.ts +2 -0
- package/dist/__tests__/memos.test.d.ts.map +1 -0
- package/dist/__tests__/memos.test.js +37 -0
- package/dist/__tests__/memos.test.js.map +1 -0
- package/dist/canvas-backend/index.d.ts +5 -0
- package/dist/canvas-backend/index.d.ts.map +1 -1
- package/dist/canvas-backend/index.js +7 -4
- package/dist/canvas-backend/index.js.map +1 -1
- package/dist/hyphenate.d.ts.map +1 -1
- package/dist/hyphenate.js +50 -1
- package/dist/hyphenate.js.map +1 -1
- package/dist/knuthPlass/breakpoints.d.ts.map +1 -1
- package/dist/knuthPlass/breakpoints.js +7 -1
- package/dist/knuthPlass/breakpoints.js.map +1 -1
- package/dist/knuthPlass/types.d.ts +8 -0
- package/dist/knuthPlass/types.d.ts.map +1 -1
- package/dist/measure/plain.d.ts.map +1 -1
- package/dist/measure/plain.js +1 -0
- package/dist/measure/plain.js.map +1 -1
- package/dist/measure/rich.d.ts.map +1 -1
- package/dist/measure/rich.js +1 -0
- package/dist/measure/rich.js.map +1 -1
- package/dist/parse/blockParser.d.ts +5 -3
- package/dist/parse/blockParser.d.ts.map +1 -1
- package/dist/parse/blockParser.js +32 -21
- package/dist/parse/blockParser.js.map +1 -1
- package/dist/pipeline/bandCaps.d.ts +16 -0
- package/dist/pipeline/bandCaps.d.ts.map +1 -1
- package/dist/pipeline/bandCaps.js +22 -0
- package/dist/pipeline/bandCaps.js.map +1 -1
- package/dist/pipeline/build.d.ts +33 -0
- package/dist/pipeline/build.d.ts.map +1 -1
- package/dist/pipeline/build.js +63 -12
- package/dist/pipeline/build.js.map +1 -1
- package/dist/pipeline/config.d.ts.map +1 -1
- package/dist/pipeline/config.js +18 -0
- package/dist/pipeline/config.js.map +1 -1
- package/dist/pipeline/index.d.ts +2 -2
- package/dist/pipeline/index.d.ts.map +1 -1
- package/dist/pipeline/index.js +1 -1
- package/dist/pipeline/index.js.map +1 -1
- package/dist/worker/client.d.ts +18 -2
- package/dist/worker/client.d.ts.map +1 -1
- package/dist/worker/client.js +28 -3
- package/dist/worker/client.js.map +1 -1
- package/dist/worker/layout.worker.js +135 -56
- package/dist/worker/layout.worker.js.map +1 -1
- package/dist/worker/protocol.d.ts +27 -2
- package/dist/worker/protocol.d.ts.map +1 -1
- package/package.json +3 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/pipeline/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;AAsB1E,OAAO,EAAqB,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/pipeline/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;AAsB1E,OAAO,EAAqB,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,QAAQ,CAAC;AAQlF,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,aAAa,GAAG,cAAc,CAU1E;AAoCD;6DAC6D;AAC7D,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,cAAc,GACvB,GAAG,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAIzC;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAUpE;AAED,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,cAAc,GACvB,WAAW,EAAE,CAyBf"}
|
package/dist/pipeline/config.js
CHANGED
|
@@ -1,7 +1,25 @@
|
|
|
1
1
|
import { resolvePageConfig, resolveLayoutConfig, resolveBodyTextConfig, resolveHeadingsConfig, resolveTableStyleConfig, resolveCaptionStyleConfig, resolveDiagramStyleConfig, resolveParagraphStylesConfig, resolveCalloutStylesConfig, resolveUnorderedListsConfig, resolveOrderedListsConfig, resolveMathConfig, resolveHeaderFooterConfig, resolvePartsConfig, resolveHeadingStylesConfig, resolveTocConfig, applyPaletteToConfig, applyPaletteToResolvedConfig, } from '../defaults';
|
|
2
2
|
import { dimensionToPx } from '../units';
|
|
3
3
|
import { createBoundingBox } from '../vdt';
|
|
4
|
+
// Resolved configs are never mutated (derived variants spread them), so
|
|
5
|
+
// one resolution per config object serves every pass of a build and every
|
|
6
|
+
// chapter counted against the same config on the main thread.
|
|
7
|
+
const resolvedByConfig = new WeakMap();
|
|
8
|
+
let resolvedDefault = null;
|
|
4
9
|
export function resolveAllConfig(rawConfig) {
|
|
10
|
+
if (!rawConfig) {
|
|
11
|
+
if (!resolvedDefault)
|
|
12
|
+
resolvedDefault = resolveAllConfigUncached(undefined);
|
|
13
|
+
return resolvedDefault;
|
|
14
|
+
}
|
|
15
|
+
const hit = resolvedByConfig.get(rawConfig);
|
|
16
|
+
if (hit)
|
|
17
|
+
return hit;
|
|
18
|
+
const resolved = resolveAllConfigUncached(rawConfig);
|
|
19
|
+
resolvedByConfig.set(rawConfig, resolved);
|
|
20
|
+
return resolved;
|
|
21
|
+
}
|
|
22
|
+
function resolveAllConfigUncached(rawConfig) {
|
|
5
23
|
const config = applyPaletteToConfig(rawConfig);
|
|
6
24
|
const bodyText = resolveBodyTextConfig(config?.bodyText);
|
|
7
25
|
const headings = resolveHeadingsConfig(config?.headings);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/pipeline/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/pipeline/config.ts"],"names":[],"mappings":"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"}
|
package/dist/pipeline/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { buildDocument, BuildCancelledError } from './build';
|
|
2
|
-
export type { BuildDocumentOptions, BuildProgress } from './build';
|
|
1
|
+
export { buildDocument, buildDocumentAsync, buildDocumentGen, yieldToEventLoop, BuildCancelledError } from './build';
|
|
2
|
+
export type { BuildDocumentOptions, BuildPassInfo, BuildProgress } from './build';
|
|
3
3
|
export { continuationAfter, contentOutline } from './continuation';
|
|
4
4
|
export { computeOutline, computeOutlineFor, outlineFromDoc, outlineKey, sameOutline, hasTocDirective } from './outline';
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pipeline/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pipeline/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AACrH,YAAY,EAAE,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/pipeline/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { buildDocument, BuildCancelledError } from './build';
|
|
1
|
+
export { buildDocument, buildDocumentAsync, buildDocumentGen, yieldToEventLoop, BuildCancelledError } from './build';
|
|
2
2
|
export { continuationAfter, contentOutline } from './continuation';
|
|
3
3
|
export { computeOutline, computeOutlineFor, outlineFromDoc, outlineKey, sameOutline, hasTocDirective } from './outline';
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pipeline/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pipeline/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAErH,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/worker/client.d.ts
CHANGED
|
@@ -2,12 +2,23 @@ import type { PostextContent, PostextConfig } from '../types';
|
|
|
2
2
|
import type { VDTDocument } from '../vdt';
|
|
3
3
|
import type { BuildProgress } from '../pipeline/build';
|
|
4
4
|
export type { BuildProgress } from '../pipeline/build';
|
|
5
|
-
import type { FontPayload } from './protocol';
|
|
6
|
-
export type { FontPayload } from './protocol';
|
|
5
|
+
import type { BuildStats, FontPayload } from './protocol';
|
|
6
|
+
export type { BuildStats, FontPayload } from './protocol';
|
|
7
|
+
export type { BuildPassInfo } from '../pipeline/build';
|
|
7
8
|
export interface BuildOptions {
|
|
8
9
|
signal?: AbortSignal;
|
|
9
10
|
/** Called as the worker's placement advances (throttled by the worker). */
|
|
10
11
|
onProgress?: (progress: BuildProgress) => void;
|
|
12
|
+
/** Called with the finished build's pass timings, right before it resolves. */
|
|
13
|
+
onStats?: (stats: BuildStats) => void;
|
|
14
|
+
/** Fingerprint of `content.resources`. Consecutive builds with the same
|
|
15
|
+
* key ship the list once; the worker keeps it (see the protocol). */
|
|
16
|
+
resourcesKey?: string;
|
|
17
|
+
/** Fingerprint of the whole build; the worker answers a repeat from its
|
|
18
|
+
* document cache (see the protocol). */
|
|
19
|
+
cacheKey?: string;
|
|
20
|
+
/** @internal False: keep the document in the worker only (see `warm`). */
|
|
21
|
+
wantDoc?: boolean;
|
|
11
22
|
}
|
|
12
23
|
export interface LayoutWorkerHandle {
|
|
13
24
|
registerFonts(faces: FontPayload[]): Promise<void>;
|
|
@@ -16,6 +27,11 @@ export interface LayoutWorkerHandle {
|
|
|
16
27
|
* instead of being deduped against a stale face. */
|
|
17
28
|
unregisterFonts(families: string[]): Promise<void>;
|
|
18
29
|
build(content: PostextContent, config?: PostextConfig, opts?: BuildOptions): Promise<VDTDocument>;
|
|
30
|
+
/** Build into the worker's document cache without sending the document
|
|
31
|
+
* back (`cacheKey` required): the next `build` with that key is a hit. */
|
|
32
|
+
warm(content: PostextContent, config: PostextConfig | undefined, opts: BuildOptions & {
|
|
33
|
+
cacheKey: string;
|
|
34
|
+
}): Promise<void>;
|
|
19
35
|
dispose(): void;
|
|
20
36
|
}
|
|
21
37
|
export interface CreateLayoutWorkerOptions {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/worker/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAmC,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/worker/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAmC,MAAM,YAAY,CAAC;AAE3F,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC1D,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,IAAI,CAAC;IAC/C,+EAA+E;IAC/E,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACtC;0EACsE;IACtE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;6CACyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD;;yDAEqD;IACrD,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,KAAK,CACH,OAAO,EAAE,cAAc,EACvB,MAAM,CAAC,EAAE,aAAa,EACtB,IAAI,CAAC,EAAE,YAAY,GAClB,OAAO,CAAC,WAAW,CAAC,CAAC;IACxB;+EAC2E;IAC3E,IAAI,CACF,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,aAAa,GAAG,SAAS,EACjC,IAAI,EAAE,YAAY,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,GACxC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,OAAO,IAAI,IAAI,CAAC;CACjB;AAUD,MAAM,WAAW,yBAAyB;IACxC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,kBAAkB,CAChC,OAAO,CAAC,EAAE,yBAAyB,GAClC,kBAAkB,CAqIpB"}
|
package/dist/worker/client.js
CHANGED
|
@@ -4,6 +4,9 @@ export function createLayoutWorker(options) {
|
|
|
4
4
|
let nextId = 1;
|
|
5
5
|
let disposed = false;
|
|
6
6
|
const pending = new Map();
|
|
7
|
+
/** Fingerprint of the resource list the worker holds (messages are
|
|
8
|
+
* handled in order, so once sent it is there for every later build). */
|
|
9
|
+
let sentResourcesKey = null;
|
|
7
10
|
worker.addEventListener('message', (event) => {
|
|
8
11
|
const msg = event.data;
|
|
9
12
|
const entry = pending.get(msg.id);
|
|
@@ -15,7 +18,8 @@ export function createLayoutWorker(options) {
|
|
|
15
18
|
return;
|
|
16
19
|
case 'built':
|
|
17
20
|
pending.delete(msg.id);
|
|
18
|
-
entry.
|
|
21
|
+
entry.onStats?.(msg.stats);
|
|
22
|
+
entry.resolve(msg.doc ?? undefined);
|
|
19
23
|
return;
|
|
20
24
|
case 'fontsRegistered':
|
|
21
25
|
pending.delete(msg.id);
|
|
@@ -70,6 +74,9 @@ export function createLayoutWorker(options) {
|
|
|
70
74
|
send({ kind: 'unregisterFonts', id, families });
|
|
71
75
|
});
|
|
72
76
|
},
|
|
77
|
+
warm(content, config, opts) {
|
|
78
|
+
return this.build(content, config, { ...opts, wantDoc: false }).then(() => undefined);
|
|
79
|
+
},
|
|
73
80
|
build(content, config, opts) {
|
|
74
81
|
const id = nextId++;
|
|
75
82
|
return new Promise((resolve, reject) => {
|
|
@@ -77,10 +84,19 @@ export function createLayoutWorker(options) {
|
|
|
77
84
|
reject(new DOMException('Aborted', 'AbortError'));
|
|
78
85
|
return;
|
|
79
86
|
}
|
|
87
|
+
// Abort settles the promise right away and forgets the id: the
|
|
88
|
+
// worker is asked to stop, but whatever it still posts for this
|
|
89
|
+
// build (a `built` it could not interrupt) is dropped on arrival
|
|
90
|
+
// instead of resolving a caller that moved on.
|
|
80
91
|
const onAbort = () => {
|
|
81
92
|
if (!pending.has(id))
|
|
82
93
|
return;
|
|
83
|
-
|
|
94
|
+
pending.delete(id);
|
|
95
|
+
try {
|
|
96
|
+
send({ kind: 'cancel', id });
|
|
97
|
+
}
|
|
98
|
+
catch { /* disposed */ }
|
|
99
|
+
reject(new DOMException('Aborted', 'AbortError'));
|
|
84
100
|
};
|
|
85
101
|
if (opts?.signal) {
|
|
86
102
|
opts.signal.addEventListener('abort', onAbort, { once: true });
|
|
@@ -93,8 +109,17 @@ export function createLayoutWorker(options) {
|
|
|
93
109
|
},
|
|
94
110
|
onAbort,
|
|
95
111
|
onProgress: opts?.onProgress,
|
|
112
|
+
onStats: opts?.onStats,
|
|
96
113
|
});
|
|
97
|
-
|
|
114
|
+
let payload = content;
|
|
115
|
+
const resourcesKey = opts?.resourcesKey;
|
|
116
|
+
if (resourcesKey && content.resources) {
|
|
117
|
+
if (sentResourcesKey === resourcesKey)
|
|
118
|
+
payload = { ...content, resources: undefined };
|
|
119
|
+
else
|
|
120
|
+
sentResourcesKey = resourcesKey;
|
|
121
|
+
}
|
|
122
|
+
send({ kind: 'build', id, content: payload, config, resourcesKey, cacheKey: opts?.cacheKey, wantDoc: opts?.wantDoc });
|
|
98
123
|
});
|
|
99
124
|
},
|
|
100
125
|
dispose() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/worker/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/worker/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference lib="webworker" />
|
|
2
|
-
import {
|
|
2
|
+
import { buildDocumentAsync, BuildCancelledError } from '../pipeline';
|
|
3
3
|
import { initMathEngine, isMathReady } from '../math';
|
|
4
4
|
import { createMeasurementCache, clearMeasurementCache } from '../measure';
|
|
5
5
|
const ctx = self;
|
|
@@ -7,6 +7,44 @@ const registeredFaces = new Set();
|
|
|
7
7
|
let measurementCache = createMeasurementCache();
|
|
8
8
|
let currentBuildId = null;
|
|
9
9
|
let cancelRequestedFor = null;
|
|
10
|
+
/** The last few documents built, by the fingerprint the host sent with
|
|
11
|
+
* the build (`cacheKey`): a chapter paginated in the background and then
|
|
12
|
+
* opened, or opened again, costs no pass. Dropped whenever the fonts
|
|
13
|
+
* change, as the measurements are. */
|
|
14
|
+
const DOC_CACHE_SLOTS = 8;
|
|
15
|
+
const docCache = new Map();
|
|
16
|
+
function docCacheGet(key) {
|
|
17
|
+
const hit = docCache.get(key);
|
|
18
|
+
if (hit) {
|
|
19
|
+
docCache.delete(key);
|
|
20
|
+
docCache.set(key, hit);
|
|
21
|
+
}
|
|
22
|
+
return hit;
|
|
23
|
+
}
|
|
24
|
+
function docCachePut(key, doc) {
|
|
25
|
+
docCache.delete(key);
|
|
26
|
+
docCache.set(key, doc);
|
|
27
|
+
if (docCache.size > DOC_CACHE_SLOTS) {
|
|
28
|
+
const oldest = docCache.keys().next().value;
|
|
29
|
+
if (oldest !== undefined)
|
|
30
|
+
docCache.delete(oldest);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/** The resource list of the last build that carried one, by fingerprint. */
|
|
34
|
+
let heldResources = null;
|
|
35
|
+
/** The build's content with its resources filled in from the held list
|
|
36
|
+
* when the message left them out (see `resourcesKey` in the protocol). */
|
|
37
|
+
function withHeldResources(content, resourcesKey) {
|
|
38
|
+
if (!resourcesKey)
|
|
39
|
+
return content;
|
|
40
|
+
if (content.resources) {
|
|
41
|
+
heldResources = { key: resourcesKey, resources: content.resources };
|
|
42
|
+
return content;
|
|
43
|
+
}
|
|
44
|
+
if (heldResources?.key === resourcesKey)
|
|
45
|
+
return { ...content, resources: heldResources.resources };
|
|
46
|
+
return content;
|
|
47
|
+
}
|
|
10
48
|
function faceKey(p) {
|
|
11
49
|
return `${p.family}|${p.weight}|${p.style}|${p.unicodeRange ?? ''}`;
|
|
12
50
|
}
|
|
@@ -40,6 +78,7 @@ async function registerFonts(faces) {
|
|
|
40
78
|
if (addedAny) {
|
|
41
79
|
measurementCache = createMeasurementCache();
|
|
42
80
|
clearMeasurementCache();
|
|
81
|
+
docCache.clear();
|
|
43
82
|
}
|
|
44
83
|
}
|
|
45
84
|
function unregisterFonts(families) {
|
|
@@ -66,6 +105,7 @@ function unregisterFonts(families) {
|
|
|
66
105
|
// A dropped face may have been cached against old glyph metrics.
|
|
67
106
|
measurementCache = createMeasurementCache();
|
|
68
107
|
clearMeasurementCache();
|
|
108
|
+
docCache.clear();
|
|
69
109
|
}
|
|
70
110
|
const PROGRESS_INTERVAL_MS = 80;
|
|
71
111
|
function post(msg) {
|
|
@@ -76,6 +116,89 @@ function serializeError(err) {
|
|
|
76
116
|
return { message: err.message, stack: err.stack };
|
|
77
117
|
return { message: String(err) };
|
|
78
118
|
}
|
|
119
|
+
// Builds run one at a time, in the order they arrived: the build itself
|
|
120
|
+
// yields between passes (so a cancel can land), and two builds interleaved
|
|
121
|
+
// on the same measurement cache and hyphenator would step on each other.
|
|
122
|
+
const queue = [];
|
|
123
|
+
let pumping = false;
|
|
124
|
+
async function pump() {
|
|
125
|
+
if (pumping)
|
|
126
|
+
return;
|
|
127
|
+
pumping = true;
|
|
128
|
+
try {
|
|
129
|
+
for (;;) {
|
|
130
|
+
const msg = queue.shift();
|
|
131
|
+
if (!msg)
|
|
132
|
+
break;
|
|
133
|
+
await runBuild(msg);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
finally {
|
|
137
|
+
pumping = false;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
async function runBuild(msg) {
|
|
141
|
+
currentBuildId = msg.id;
|
|
142
|
+
const content = withHeldResources(msg.content, msg.resourcesKey);
|
|
143
|
+
try {
|
|
144
|
+
const cached = msg.cacheKey ? docCacheGet(msg.cacheKey) : undefined;
|
|
145
|
+
if (cached) {
|
|
146
|
+
post({ kind: 'built', id: msg.id, doc: msg.wantDoc === false ? null : cached, stats: { passes: [], totalMs: 0, cached: true } });
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
// Bring MathJax up before the build path calls renderMath — otherwise
|
|
150
|
+
// the VDT receives placeholder MathRenders and inline formulas paint as
|
|
151
|
+
// grey boxes instead of glyphs. Skipped for docs that contain no `$…$`.
|
|
152
|
+
if (!isMathReady() && /\$/.test(content.markdown)) {
|
|
153
|
+
await initMathEngine();
|
|
154
|
+
if (cancelRequestedFor === msg.id) {
|
|
155
|
+
post({ kind: 'cancelled', id: msg.id });
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
// Progress goes out at most every PROGRESS_INTERVAL_MS, plus on every
|
|
160
|
+
// new page, so a long build paints a moving bar without flooding the
|
|
161
|
+
// main thread.
|
|
162
|
+
let lastProgressAt = 0;
|
|
163
|
+
let lastPages = -1;
|
|
164
|
+
const passes = [];
|
|
165
|
+
const startedAt = performance.now();
|
|
166
|
+
const doc = await buildDocumentAsync(content, msg.config, measurementCache, {
|
|
167
|
+
shouldCancel: () => cancelRequestedFor === msg.id,
|
|
168
|
+
onPass: (info) => { passes.push(info); },
|
|
169
|
+
onProgress: (progress) => {
|
|
170
|
+
const now = Date.now();
|
|
171
|
+
if (progress.pages === lastPages && now - lastProgressAt < PROGRESS_INTERVAL_MS)
|
|
172
|
+
return;
|
|
173
|
+
lastProgressAt = now;
|
|
174
|
+
lastPages = progress.pages;
|
|
175
|
+
post({ kind: 'progress', id: msg.id, progress });
|
|
176
|
+
},
|
|
177
|
+
});
|
|
178
|
+
if (cancelRequestedFor === msg.id) {
|
|
179
|
+
post({ kind: 'cancelled', id: msg.id });
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
if (msg.cacheKey)
|
|
183
|
+
docCachePut(msg.cacheKey, doc);
|
|
184
|
+
post({ kind: 'built', id: msg.id, doc: msg.wantDoc === false ? null : doc, stats: { passes, totalMs: performance.now() - startedAt } });
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
catch (err) {
|
|
188
|
+
if (err instanceof BuildCancelledError) {
|
|
189
|
+
post({ kind: 'cancelled', id: msg.id });
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
post({ kind: 'error', id: msg.id, ...serializeError(err) });
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
finally {
|
|
196
|
+
if (currentBuildId === msg.id)
|
|
197
|
+
currentBuildId = null;
|
|
198
|
+
if (cancelRequestedFor === msg.id)
|
|
199
|
+
cancelRequestedFor = null;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
79
202
|
ctx.addEventListener('message', async (event) => {
|
|
80
203
|
const msg = event.data;
|
|
81
204
|
switch (msg.kind) {
|
|
@@ -100,65 +223,21 @@ ctx.addEventListener('message', async (event) => {
|
|
|
100
223
|
return;
|
|
101
224
|
}
|
|
102
225
|
case 'build': {
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
// before we start the CPU-bound work.
|
|
106
|
-
await Promise.resolve();
|
|
107
|
-
try {
|
|
108
|
-
// Bring MathJax up before the (sync) build path calls renderMath —
|
|
109
|
-
// otherwise the VDT receives placeholder MathRenders and inline
|
|
110
|
-
// formulas paint as grey boxes instead of glyphs. Skipped for docs
|
|
111
|
-
// that contain no `$…$`.
|
|
112
|
-
if (!isMathReady() && /\$/.test(msg.content.markdown)) {
|
|
113
|
-
await initMathEngine();
|
|
114
|
-
if (cancelRequestedFor === msg.id) {
|
|
115
|
-
post({ kind: 'cancelled', id: msg.id });
|
|
116
|
-
return;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
// Progress goes out at most every PROGRESS_INTERVAL_MS, plus on
|
|
120
|
-
// every new page, so a long build paints a moving bar without
|
|
121
|
-
// flooding the main thread.
|
|
122
|
-
let lastProgressAt = 0;
|
|
123
|
-
let lastPages = -1;
|
|
124
|
-
const doc = buildDocument(msg.content, msg.config, measurementCache, {
|
|
125
|
-
shouldCancel: () => cancelRequestedFor === msg.id,
|
|
126
|
-
onProgress: (progress) => {
|
|
127
|
-
const now = Date.now();
|
|
128
|
-
if (progress.pages === lastPages && now - lastProgressAt < PROGRESS_INTERVAL_MS)
|
|
129
|
-
return;
|
|
130
|
-
lastProgressAt = now;
|
|
131
|
-
lastPages = progress.pages;
|
|
132
|
-
post({ kind: 'progress', id: msg.id, progress });
|
|
133
|
-
},
|
|
134
|
-
});
|
|
135
|
-
if (cancelRequestedFor === msg.id) {
|
|
136
|
-
cancelRequestedFor = null;
|
|
137
|
-
post({ kind: 'cancelled', id: msg.id });
|
|
138
|
-
}
|
|
139
|
-
else {
|
|
140
|
-
post({ kind: 'built', id: msg.id, doc });
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
catch (err) {
|
|
144
|
-
if (err instanceof BuildCancelledError) {
|
|
145
|
-
post({ kind: 'cancelled', id: msg.id });
|
|
146
|
-
}
|
|
147
|
-
else {
|
|
148
|
-
post({ kind: 'error', id: msg.id, ...serializeError(err) });
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
finally {
|
|
152
|
-
if (currentBuildId === msg.id)
|
|
153
|
-
currentBuildId = null;
|
|
154
|
-
if (cancelRequestedFor === msg.id)
|
|
155
|
-
cancelRequestedFor = null;
|
|
156
|
-
}
|
|
226
|
+
queue.push(msg);
|
|
227
|
+
void pump();
|
|
157
228
|
return;
|
|
158
229
|
}
|
|
159
230
|
case 'cancel': {
|
|
160
|
-
if (currentBuildId === msg.id)
|
|
231
|
+
if (currentBuildId === msg.id) {
|
|
161
232
|
cancelRequestedFor = msg.id;
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
// Still waiting its turn: never started, so nothing to interrupt.
|
|
236
|
+
const at = queue.findIndex((q) => q.id === msg.id);
|
|
237
|
+
if (at >= 0) {
|
|
238
|
+
queue.splice(at, 1);
|
|
239
|
+
post({ kind: 'cancelled', id: msg.id });
|
|
240
|
+
}
|
|
162
241
|
return;
|
|
163
242
|
}
|
|
164
243
|
case 'dispose': {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.worker.js","sourceRoot":"","sources":["../../src/worker/layout.worker.ts"],"names":[],"mappings":"AAAA,iCAAiC;AAEjC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"layout.worker.js","sourceRoot":"","sources":["../../src/worker/layout.worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import type { PostextContent, PostextConfig } from '../types';
|
|
2
2
|
import type { VDTDocument } from '../vdt';
|
|
3
|
-
import type { BuildProgress } from '../pipeline/build';
|
|
3
|
+
import type { BuildPassInfo, BuildProgress } from '../pipeline/build';
|
|
4
|
+
/** Where a build's time went (dev tooling; always attached, cheap). */
|
|
5
|
+
export interface BuildStats {
|
|
6
|
+
/** Every placement pass, in build order. */
|
|
7
|
+
passes: BuildPassInfo[];
|
|
8
|
+
/** Wall time of the whole build inside the worker, in ms. */
|
|
9
|
+
totalMs: number;
|
|
10
|
+
/** The document came from the worker's cache (no pass was run). */
|
|
11
|
+
cached?: boolean;
|
|
12
|
+
}
|
|
4
13
|
export interface FontPayload {
|
|
5
14
|
family: string;
|
|
6
15
|
weight: string;
|
|
@@ -26,6 +35,20 @@ export type RequestMessage = {
|
|
|
26
35
|
id: number;
|
|
27
36
|
content: PostextContent;
|
|
28
37
|
config?: PostextConfig;
|
|
38
|
+
/** Fingerprint of `content.resources`. When it matches the list the
|
|
39
|
+
* worker last received, `content.resources` may be left out and the
|
|
40
|
+
* worker lays out with the list it already holds — the resources of
|
|
41
|
+
* a book (hundreds of tables and figures) are the bulk of a build
|
|
42
|
+
* message and change far less often than the text. */
|
|
43
|
+
resourcesKey?: string;
|
|
44
|
+
/** Fingerprint of everything the document depends on. The worker
|
|
45
|
+
* keeps the last few documents by it: a build whose key it holds
|
|
46
|
+
* is answered from the cache, and a finished build is stored under
|
|
47
|
+
* it. Omit for a document not worth keeping (screen geometry). */
|
|
48
|
+
cacheKey?: string;
|
|
49
|
+
/** False: build (and cache) the document but do not send it back —
|
|
50
|
+
* warming the cache for a chapter the reader may open next. */
|
|
51
|
+
wantDoc?: boolean;
|
|
29
52
|
} | {
|
|
30
53
|
kind: 'cancel';
|
|
31
54
|
/** Id of the in-flight build to cancel. */
|
|
@@ -36,7 +59,9 @@ export type RequestMessage = {
|
|
|
36
59
|
export type ResponseMessage = {
|
|
37
60
|
kind: 'built';
|
|
38
61
|
id: number;
|
|
39
|
-
|
|
62
|
+
/** Null when the build asked for no document (`wantDoc: false`). */
|
|
63
|
+
doc: VDTDocument | null;
|
|
64
|
+
stats: BuildStats;
|
|
40
65
|
} | {
|
|
41
66
|
kind: 'progress';
|
|
42
67
|
id: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/worker/protocol.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/worker/protocol.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEtE,uEAAuE;AACvE,MAAM,WAAW,UAAU;IACzB,4CAA4C;IAC5C,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sEAAsE;IACtE,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,MAAM,cAAc,GACtB;IACE,IAAI,EAAE,eAAe,CAAC;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,WAAW,EAAE,CAAC;CACtB,GACD;IACE,IAAI,EAAE,iBAAiB,CAAC;IACxB,EAAE,EAAE,MAAM,CAAC;IACX;;;wDAGoD;IACpD,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,GACD;IACE,IAAI,EAAE,OAAO,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB;;;;2DAIuD;IACvD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;uEAGmE;IACnE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;oEACgE;IAChE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GACD;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,2CAA2C;IAC3C,EAAE,EAAE,MAAM,CAAC;CACZ,GACD;IACE,IAAI,EAAE,SAAS,CAAC;CACjB,CAAC;AAEN,MAAM,MAAM,eAAe,GACvB;IACE,IAAI,EAAE,OAAO,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,oEAAoE;IACpE,GAAG,EAAE,WAAW,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,UAAU,CAAC;CACnB,GACD;IACE,IAAI,EAAE,UAAU,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,aAAa,CAAC;CACzB,GACD;IACE,IAAI,EAAE,iBAAiB,CAAC;IACxB,EAAE,EAAE,MAAM,CAAC;CACZ,GACD;IACE,IAAI,EAAE,mBAAmB,CAAC;IAC1B,EAAE,EAAE,MAAM,CAAC;CACZ,GACD;IACE,IAAI,EAAE,WAAW,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;CACZ,GACD;IACE,IAAI,EAAE,OAAO,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "postext",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.41",
|
|
4
4
|
"description": "A programmable typesetter for the web. Layout engine that applies professional editorial rules — columns, orphan/widow prevention, resource placement, footnotes — to semantic content. Built on @chenglou/pretext for DOM-free text measurement.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -60,6 +60,7 @@
|
|
|
60
60
|
"dev": "tsc --watch",
|
|
61
61
|
"check-types": "tsc --noEmit",
|
|
62
62
|
"lint": "eslint .",
|
|
63
|
-
"test": "vitest run"
|
|
63
|
+
"test": "vitest run",
|
|
64
|
+
"bench": "BENCH=1 vitest run __bench__"
|
|
64
65
|
}
|
|
65
66
|
}
|