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.
Files changed (66) hide show
  1. package/dist/__bench__/chapter.bench.test.d.ts +2 -0
  2. package/dist/__bench__/chapter.bench.test.d.ts.map +1 -0
  3. package/dist/__bench__/chapter.bench.test.js +80 -0
  4. package/dist/__bench__/chapter.bench.test.js.map +1 -0
  5. package/dist/__tests__/buildAsync.test.d.ts +2 -0
  6. package/dist/__tests__/buildAsync.test.d.ts.map +1 -0
  7. package/dist/__tests__/buildAsync.test.js +50 -0
  8. package/dist/__tests__/buildAsync.test.js.map +1 -0
  9. package/dist/__tests__/hyphenateMemo.test.d.ts +2 -0
  10. package/dist/__tests__/hyphenateMemo.test.d.ts.map +1 -0
  11. package/dist/__tests__/hyphenateMemo.test.js +21 -0
  12. package/dist/__tests__/hyphenateMemo.test.js.map +1 -0
  13. package/dist/__tests__/knuthPlassMerge.test.d.ts +2 -0
  14. package/dist/__tests__/knuthPlassMerge.test.d.ts.map +1 -0
  15. package/dist/__tests__/knuthPlassMerge.test.js +55 -0
  16. package/dist/__tests__/knuthPlassMerge.test.js.map +1 -0
  17. package/dist/__tests__/memos.test.d.ts +2 -0
  18. package/dist/__tests__/memos.test.d.ts.map +1 -0
  19. package/dist/__tests__/memos.test.js +37 -0
  20. package/dist/__tests__/memos.test.js.map +1 -0
  21. package/dist/canvas-backend/index.d.ts +5 -0
  22. package/dist/canvas-backend/index.d.ts.map +1 -1
  23. package/dist/canvas-backend/index.js +7 -4
  24. package/dist/canvas-backend/index.js.map +1 -1
  25. package/dist/hyphenate.d.ts.map +1 -1
  26. package/dist/hyphenate.js +50 -1
  27. package/dist/hyphenate.js.map +1 -1
  28. package/dist/knuthPlass/breakpoints.d.ts.map +1 -1
  29. package/dist/knuthPlass/breakpoints.js +7 -1
  30. package/dist/knuthPlass/breakpoints.js.map +1 -1
  31. package/dist/knuthPlass/types.d.ts +8 -0
  32. package/dist/knuthPlass/types.d.ts.map +1 -1
  33. package/dist/measure/plain.d.ts.map +1 -1
  34. package/dist/measure/plain.js +1 -0
  35. package/dist/measure/plain.js.map +1 -1
  36. package/dist/measure/rich.d.ts.map +1 -1
  37. package/dist/measure/rich.js +1 -0
  38. package/dist/measure/rich.js.map +1 -1
  39. package/dist/parse/blockParser.d.ts +5 -3
  40. package/dist/parse/blockParser.d.ts.map +1 -1
  41. package/dist/parse/blockParser.js +32 -21
  42. package/dist/parse/blockParser.js.map +1 -1
  43. package/dist/pipeline/bandCaps.d.ts +16 -0
  44. package/dist/pipeline/bandCaps.d.ts.map +1 -1
  45. package/dist/pipeline/bandCaps.js +22 -0
  46. package/dist/pipeline/bandCaps.js.map +1 -1
  47. package/dist/pipeline/build.d.ts +33 -0
  48. package/dist/pipeline/build.d.ts.map +1 -1
  49. package/dist/pipeline/build.js +63 -12
  50. package/dist/pipeline/build.js.map +1 -1
  51. package/dist/pipeline/config.d.ts.map +1 -1
  52. package/dist/pipeline/config.js +18 -0
  53. package/dist/pipeline/config.js.map +1 -1
  54. package/dist/pipeline/index.d.ts +2 -2
  55. package/dist/pipeline/index.d.ts.map +1 -1
  56. package/dist/pipeline/index.js +1 -1
  57. package/dist/pipeline/index.js.map +1 -1
  58. package/dist/worker/client.d.ts +18 -2
  59. package/dist/worker/client.d.ts.map +1 -1
  60. package/dist/worker/client.js +28 -3
  61. package/dist/worker/client.js.map +1 -1
  62. package/dist/worker/layout.worker.js +135 -56
  63. package/dist/worker/layout.worker.js.map +1 -1
  64. package/dist/worker/protocol.d.ts +27 -2
  65. package/dist/worker/protocol.d.ts.map +1 -1
  66. 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;AAElF,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,aAAa,GAAG,cAAc,CAgC1E;AAED;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"}
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"}
@@ -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":"AACA,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,uBAAuB,EACvB,yBAAyB,EACzB,yBAAyB,EACzB,4BAA4B,EAC5B,0BAA0B,EAC1B,2BAA2B,EAC3B,yBAAyB,EACzB,iBAAiB,EACjB,yBAAyB,EACzB,kBAAkB,EAClB,0BAA0B,EAC1B,gBAAgB,EAChB,oBAAoB,EACpB,4BAA4B,GAC7B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAyC,MAAM,QAAQ,CAAC;AAElF,wEAAwE;AACxE,0EAA0E;AAC1E,8DAA8D;AAC9D,MAAM,gBAAgB,GAAG,IAAI,OAAO,EAAiC,CAAC;AACtE,IAAI,eAAe,GAA0B,IAAI,CAAC;AAElD,MAAM,UAAU,gBAAgB,CAAC,SAAyB;IACxD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,IAAI,CAAC,eAAe;YAAE,eAAe,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAC;QAC5E,OAAO,eAAe,CAAC;IACzB,CAAC;IACD,MAAM,GAAG,GAAG,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC5C,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC;IACpB,MAAM,QAAQ,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAC;IACrD,gBAAgB,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC1C,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,wBAAwB,CAAC,SAAyB;IACzD,MAAM,MAAM,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,qBAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,qBAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACzD,MAAM,cAAc,GAAG,2BAA2B,CAAC,MAAM,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;IACrF,MAAM,YAAY,GAAG,yBAAyB,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;IAC/E,MAAM,IAAI,GAAG,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAmB;QAC/B,IAAI;QACJ,MAAM,EAAE,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC;QAC3C,QAAQ;QACR,QAAQ;QACR,UAAU,EAAE,uBAAuB,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;QACjF,YAAY,EAAE,yBAAyB,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,CAAC;QACvE,YAAY,EAAE,yBAAyB,CAAC,MAAM,EAAE,YAAY,CAAC;QAC7D,eAAe,EAAE,4BAA4B,CAAC,MAAM,EAAE,eAAe,EAAE,QAAQ,CAAC;QAChF,aAAa,EAAE,0BAA0B,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC;QACpG,cAAc;QACd,YAAY;QACZ,IAAI,EAAE,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC;QACrC,MAAM,EAAE,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC;QAC3D,MAAM,EAAE,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC;QAC3D,KAAK,EAAE,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,YAAY,CAAC;QACtF,aAAa,EAAE,0BAA0B,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,YAAY,CAAC;QAC9G,GAAG,EAAE,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC;QAC5C,oEAAoE;QACpE,4DAA4D;QAC5D,GAAG,CAAC,SAAS,EAAE,YAAY,IAAI,SAAS,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;YAC9D,CAAC,CAAC,EAAE,YAAY,EAAE,SAAS,CAAC,YAAY,EAAE;YAC1C,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;IACF,OAAO,4BAA4B,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;AACzE,CAAC;AAED;6DAC6D;AAC7D,MAAM,UAAU,oBAAoB,CAClC,QAAwB;IAExB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAsC,CAAC;IAC1D,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM;QAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACpE,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,QAAwB;IAC1D,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;IAC9B,MAAM,cAAc,GAAG,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACtE,MAAM,aAAa,GAAG,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC;IAEnD,0DAA0D;IAC1D,IAAI,aAAa,CAAC,IAAI,KAAK,IAAI,IAAI,aAAa,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAChE,OAAO,cAAc,GAAG,aAAa,CAAC,KAAK,CAAC;IAC9C,CAAC;IACD,OAAO,aAAa,CAAC,aAAa,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,WAAwB,EACxB,QAAwB;IAExB,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC;IACvE,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;IAE9B,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IAClG,CAAC;IAED,MAAM,QAAQ,GAAG,aAAa,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IAEjD,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,CAAC,WAAW,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QACpD,OAAO;YACL,iBAAiB,CAAC,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC;YAC7E,iBAAiB,CAAC,WAAW,CAAC,CAAC,GAAG,QAAQ,GAAG,QAAQ,EAAE,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC;SACpG,CAAC;IACJ,CAAC;IAED,aAAa;IACb,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,GAAG,CAAC,iBAAiB,GAAG,GAAG,CAAC,CAAC;IAChE,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC3D,OAAO;QACL,iBAAiB,CAAC,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC;QAC9E,iBAAiB,CAAC,WAAW,CAAC,CAAC,GAAG,SAAS,GAAG,QAAQ,EAAE,WAAW,CAAC,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC;KACtG,CAAC;AACJ,CAAC"}
@@ -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;AAC7D,YAAY,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnE,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"}
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"}
@@ -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;AAE7D,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"}
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"}
@@ -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;AAE/E,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,IAAI,CAAC;CAChD;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,OAAO,IAAI,IAAI,CAAC;CACjB;AASD,MAAM,WAAW,yBAAyB;IACxC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,kBAAkB,CAChC,OAAO,CAAC,EAAE,yBAAyB,GAClC,kBAAkB,CAiHpB"}
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"}
@@ -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.resolve(msg.doc);
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
- send({ kind: 'cancel', id });
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
- send({ kind: 'build', id, content, config });
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":"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"}
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 { buildDocument, BuildCancelledError } from '../pipeline';
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
- currentBuildId = msg.id;
104
- // Yield once so a cancel posted right after the build can be observed
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":"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"}
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
- doc: VDTDocument;
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;AAEvD,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;CACxB,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,GAAG,EAAE,WAAW,CAAC;CAClB,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"}
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.39",
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
  }