blitz-pdf 0.1.7 → 0.1.9
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 +44 -5
- package/THIRD_PARTY_NOTICES.md +1 -1
- package/dist/api.d.ts +2 -1
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +28 -3
- package/dist/api.js.map +1 -1
- package/dist/browser.d.ts +2 -1
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +1 -1
- package/dist/browser.js.map +1 -1
- package/dist/node.d.ts +2 -1
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +6 -2
- package/dist/node.js.map +1 -1
- package/dist/types.d.ts +14 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/worker-host.d.ts +12 -5
- package/dist/worker-host.d.ts.map +1 -1
- package/dist/worker-host.js +187 -20
- package/dist/worker-host.js.map +1 -1
- package/dist/worker-protocol.d.ts +5 -0
- package/dist/worker-protocol.d.ts.map +1 -1
- package/dist/worker-runtime.d.ts +1 -1
- package/dist/worker-runtime.d.ts.map +1 -1
- package/dist/worker-runtime.js +22 -6
- package/dist/worker-runtime.js.map +1 -1
- package/licenses/RUST_DEPENDENCIES.txt +34 -40
- package/package.json +1 -1
- package/src/api.ts +29 -4
- package/src/browser.ts +2 -1
- package/src/node.ts +7 -2
- package/src/types.ts +15 -0
- package/src/worker-host.ts +176 -23
- package/src/worker-protocol.ts +5 -5
- package/src/worker-runtime.ts +20 -6
- package/vendor/README.md +19 -5
- package/vendor/blitz-dom/Cargo.toml +6 -6
- package/vendor/blitz-dom/src/accessibility.rs +175 -2
- package/vendor/blitz-dom/src/config.rs +8 -10
- package/vendor/blitz-dom/src/document.rs +66 -3
- package/vendor/blitz-dom/src/events/keyboard.rs +2 -6
- package/vendor/blitz-dom/src/layout/construct.rs +5 -300
- package/vendor/blitz-dom/src/layout/inline/build.rs +309 -0
- package/vendor/blitz-dom/src/layout/{inline.rs → inline/layout.rs} +1 -1
- package/vendor/blitz-dom/src/layout/inline/mod.rs +4 -0
- package/vendor/blitz-dom/src/layout/mod.rs +3 -1
- package/vendor/blitz-dom/src/layout/replaced.rs +13 -4
- package/vendor/blitz-dom/src/mutator.rs +47 -0
- package/vendor/blitz-dom/src/node/element.rs +17 -0
- package/vendor/blitz-dom/src/node/mod.rs +1 -0
- package/vendor/blitz-dom/src/node/node.rs +46 -5
- package/vendor/blitz-dom/src/node/text.rs +11 -11
- package/vendor/blitz-dom/src/resolve.rs +2 -2
- package/vendor/blitz-dom/src/stylo.rs +30 -22
- package/vendor/blitz-dom/src/util.rs +1 -1
- package/vendor/blitz-paint/Cargo.toml +4 -4
- package/wasm/blitz_pdf_bg.wasm +2 -2
package/README.md
CHANGED
|
@@ -77,7 +77,7 @@ cross-origin isolation are not required.
|
|
|
77
77
|
## Rendering in a worker
|
|
78
78
|
|
|
79
79
|
`renderPdfInWorker` has the same signature as `renderPdf`, but layout and PDF
|
|
80
|
-
serialization run in a
|
|
80
|
+
serialization run in a fresh worker: a Web Worker in browsers and a
|
|
81
81
|
`worker_threads` worker in Node.js and Bun. The calling thread stays responsive:
|
|
82
82
|
|
|
83
83
|
```js
|
|
@@ -89,10 +89,34 @@ const pdfs = await Promise.all(documents.map(html =>
|
|
|
89
89
|
|
|
90
90
|
The WASM is compiled once into a `WebAssembly.Module` and posted to
|
|
91
91
|
every worker. Workers only instantiate it, so they skip WASM compilation.
|
|
92
|
-
`init({ wasm })` sets the source for this shared module as well. Each
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
92
|
+
`init({ wasm })` sets the source for this shared module as well. Each render
|
|
93
|
+
creates one worker and waits for its termination on success or failure before
|
|
94
|
+
settling. No idle engine or font collection is retained. Bound concurrent calls
|
|
95
|
+
in the application when rendering many documents at once.
|
|
96
|
+
|
|
97
|
+
For applications that explicitly choose to retain engines between documents,
|
|
98
|
+
`createPdfWorkerPool` remains an opt-in API. It is not used by
|
|
99
|
+
`renderPdfInWorker`. A pool retains initialized engines and bundled fonts while
|
|
100
|
+
idle, so it uses more resident memory. Assets, custom fonts, metadata and
|
|
101
|
+
attachments remain local to each render. Configure its lifetime and close it
|
|
102
|
+
when no longer needed:
|
|
103
|
+
|
|
104
|
+
```js
|
|
105
|
+
import { createPdfWorkerPool } from "blitz-pdf";
|
|
106
|
+
|
|
107
|
+
const pool = createPdfWorkerPool({ maxWorkers: 4, idleTimeoutMs: 300_000 });
|
|
108
|
+
try {
|
|
109
|
+
const pdf = await pool.renderPdf(html, { format: "A4" });
|
|
110
|
+
} finally {
|
|
111
|
+
await pool.close(); // on application shutdown, not after every document
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
`maxWorkers` and `maxJobsPerWorker` must be positive safe integers;
|
|
116
|
+
`idleTimeoutMs` must be an integer from 0 to 2147483647 (0 disables reuse).
|
|
117
|
+
`close()` rejects new submissions, drains already accepted renders, and waits
|
|
118
|
+
for worker termination. CPU work is not interrupted. Applications must bound
|
|
119
|
+
their asset resolvers with their own deadlines so shutdown can finish.
|
|
96
120
|
|
|
97
121
|
Options are validated on the calling thread. An `assets` function also runs
|
|
98
122
|
there, so it can use closures, credentials, and caches; the worker receives
|
|
@@ -725,14 +749,29 @@ To retry a failed release, rerun its GitHub Actions run or use
|
|
|
725
749
|
tag too. Published npm versions cannot be overwritten; subsequent releases need
|
|
726
750
|
a new version.
|
|
727
751
|
|
|
752
|
+
## Font startup
|
|
753
|
+
|
|
754
|
+
Bundled WOFF2 assets are decoded to SFNT by `build.rs`. The WASM registers
|
|
755
|
+
immutable slices of those bytes directly, avoiding runtime WOFF2 decompression
|
|
756
|
+
and a second font-sized heap allocation. The original fonts, family ordering,
|
|
757
|
+
Unicode coverage and document-specific font isolation are preserved. This trades
|
|
758
|
+
a larger WASM download for faster cold renders; serve the WASM with HTTP
|
|
759
|
+
compression in browsers. User-supplied WOFF/WOFF2 fonts are still decoded at runtime.
|
|
760
|
+
|
|
728
761
|
## Performance benchmarks
|
|
729
762
|
|
|
730
763
|
```sh
|
|
731
764
|
bun run bench
|
|
732
765
|
bun run bench --iterations=50 --warmup=5
|
|
766
|
+
bun run bench --mode=worker --iterations=50 --warmup=5
|
|
767
|
+
bun run bench --mode=fresh-worker --iterations=20 --warmup=1
|
|
733
768
|
bun run bench --iterations=50 --warmup=5 --json > benchmark-results.json
|
|
734
769
|
```
|
|
735
770
|
|
|
771
|
+
`--mode=main` (default) renders on the calling thread, `worker` reuses one
|
|
772
|
+
worker, and `fresh-worker` retires the worker after each document to expose
|
|
773
|
+
font startup costs.
|
|
774
|
+
|
|
736
775
|
Benchmarks measure WASM initialization separately, then first-render, mean,
|
|
737
776
|
median, p95, throughput, and output size for small HTML, a styled invoice,
|
|
738
777
|
100 paragraphs, matching asset-map/async-loader documents with nested CSS
|
package/THIRD_PARTY_NOTICES.md
CHANGED
|
@@ -4,7 +4,7 @@ blitz-pdf is an independent project, not an official Dioxus Labs package.
|
|
|
4
4
|
|
|
5
5
|
The distributed WebAssembly module includes:
|
|
6
6
|
|
|
7
|
-
- [Blitz](https://github.com/DioxusLabs/blitz), MIT OR Apache-2.0, pinned to `
|
|
7
|
+
- [Blitz](https://github.com/DioxusLabs/blitz), MIT OR Apache-2.0, pinned to `f8723f495c7c6bfb611a923a21ed5c8e0fe95d55`.
|
|
8
8
|
- [Krilla](https://github.com/LaurenzV/krilla), MIT OR Apache-2.0, for PDF serialization and font subsetting.
|
|
9
9
|
- [Parley](https://github.com/linebender/parley), MIT OR Apache-2.0, for text layout.
|
|
10
10
|
- [Stylo](https://github.com/servo/stylo), MPL-2.0, for CSS styling.
|
package/dist/api.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type SpawnWorker } from "./worker-host.js";
|
|
2
|
-
import type { InitOptions, PdfOptions, WasmSource } from "./types.js";
|
|
2
|
+
import type { InitOptions, PdfOptions, PdfWorkerPool, PdfWorkerPoolOptions, WasmSource } from "./types.js";
|
|
3
3
|
export interface ApiConfig {
|
|
4
4
|
defaultSource: () => Promise<WasmSource> | WasmSource;
|
|
5
5
|
prepare?: (source: WasmSource) => Promise<WasmSource>;
|
|
@@ -9,6 +9,7 @@ export declare function createApi({ defaultSource, prepare, spawnWorker }: ApiCo
|
|
|
9
9
|
init: (options?: InitOptions) => Promise<void>;
|
|
10
10
|
renderPdf: (html: string, options?: PdfOptions) => Promise<Uint8Array>;
|
|
11
11
|
renderPdfInWorker: (html: string, options?: PdfOptions) => Promise<Uint8Array>;
|
|
12
|
+
createPdfWorkerPool: (options?: PdfWorkerPoolOptions) => PdfWorkerPool;
|
|
12
13
|
getWasmModule: () => Promise<WebAssembly.Module>;
|
|
13
14
|
getEngineVersion: () => Promise<string>;
|
|
14
15
|
};
|
package/dist/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAKA,OAAO,
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAKA,OAAO,EAAoC,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACtF,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE3G,MAAM,WAAW,SAAS;IACxB,aAAa,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC;IACtD,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IACtD,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,wBAAgB,SAAS,CAAC,EAAE,aAAa,EAAE,OAAgC,EAAE,WAAW,EAAE,EAAE,SAAS;qBAY5E,WAAW,KAAQ,OAAO,CAAC,IAAI,CAAC;sBAYxB,MAAM,YAAW,UAAU,KAAQ,OAAO,CAAC,UAAU,CAAC;8BAiC9C,MAAM,YAAW,UAAU,KAAQ,OAAO,CAAC,UAAU,CAAC;oCAzBvD,oBAAoB,KAAQ,aAAa;yBAXrD,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC;4BA0ClB,OAAO,CAAC,MAAM,CAAC;EAEnD"}
|
package/dist/api.js
CHANGED
|
@@ -3,7 +3,7 @@ import { createAssetLoader } from "./assets.js";
|
|
|
3
3
|
import { normalizeOptions } from "./options.js";
|
|
4
4
|
import { render, validateHtml } from "./render.js";
|
|
5
5
|
import { compileWasm } from "./wasm.js";
|
|
6
|
-
import { renderInWorker } from "./worker-host.js";
|
|
6
|
+
import { createWorkerPool, renderInWorker } from "./worker-host.js";
|
|
7
7
|
export function createApi({ defaultSource, prepare = async (source) => source, spawnWorker }) {
|
|
8
8
|
let compiled;
|
|
9
9
|
let ready;
|
|
@@ -32,13 +32,38 @@ export function createApi({ defaultSource, prepare = async (source) => source, s
|
|
|
32
32
|
await init();
|
|
33
33
|
return render(html, normalized, assetResolver && createAssetLoader(assetResolver));
|
|
34
34
|
}
|
|
35
|
-
/**
|
|
35
|
+
/** Create an owned pool, with independent concurrency and shutdown. No workers start until needed. */
|
|
36
|
+
function createPdfWorkerPool(options = {}) {
|
|
37
|
+
const pool = createWorkerPool(spawnWorker, options);
|
|
38
|
+
// Include compilation in accepted work so close also drains renders waiting for WASM.
|
|
39
|
+
const pending = new Set();
|
|
40
|
+
let closing;
|
|
41
|
+
return {
|
|
42
|
+
renderPdf(html, options = {}) {
|
|
43
|
+
if (closing)
|
|
44
|
+
return Promise.reject(new Error("PDF worker pool is closed"));
|
|
45
|
+
const work = (async () => {
|
|
46
|
+
validateHtml(html);
|
|
47
|
+
const { assetResolver, ...normalized } = normalizeOptions(options);
|
|
48
|
+
return pool.render(await compile(), html, normalized, assetResolver);
|
|
49
|
+
})();
|
|
50
|
+
pending.add(work);
|
|
51
|
+
void work.then(() => pending.delete(work), () => pending.delete(work));
|
|
52
|
+
return work;
|
|
53
|
+
},
|
|
54
|
+
close() {
|
|
55
|
+
closing ??= Promise.allSettled([...pending]).then(() => pool.close());
|
|
56
|
+
return closing;
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/** Render in a fresh worker and release its engine before settling. */
|
|
36
61
|
async function renderPdfInWorker(html, options = {}) {
|
|
37
62
|
validateHtml(html);
|
|
38
63
|
const { assetResolver, ...normalized } = normalizeOptions(options);
|
|
39
64
|
return renderInWorker(spawnWorker, await compile(), html, normalized, assetResolver);
|
|
40
65
|
}
|
|
41
66
|
async function getEngineVersion() { await init(); return engine_version(); }
|
|
42
|
-
return { init, renderPdf, renderPdfInWorker, getWasmModule, getEngineVersion };
|
|
67
|
+
return { init, renderPdf, renderPdfInWorker, createPdfWorkerPool, getWasmModule, getEngineVersion };
|
|
43
68
|
}
|
|
44
69
|
//# sourceMappingURL=api.js.map
|
package/dist/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,EAAE,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,cAAc,EAAoB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
package/dist/browser.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export type { AssetData, AssetMap, AssetResolver, AttachmentRelationship, BinaryData, InitOptions, Length, PageFormat, PageNumberOptions, PdfAttachment, PdfDate, PdfMetadata, PdfOptions, PdfXmpProperty, PdfXmpSchema, WasmSource } from "./types.js";
|
|
2
|
-
export
|
|
2
|
+
export type { PdfWorkerPool, PdfWorkerPoolOptions } from "./types.js";
|
|
3
|
+
export declare const init: (options?: import("./types.js").InitOptions) => Promise<void>, renderPdf: (html: string, options?: import("./types.js").PdfOptions) => Promise<Uint8Array>, renderPdfInWorker: (html: string, options?: import("./types.js").PdfOptions) => Promise<Uint8Array>, createPdfWorkerPool: (options?: import("./types.js").PdfWorkerPoolOptions) => import("./types.js").PdfWorkerPool, getWasmModule: () => Promise<WebAssembly.Module>, getEngineVersion: () => Promise<string>;
|
|
3
4
|
//# sourceMappingURL=browser.d.ts.map
|
package/dist/browser.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAEA,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,sBAAsB,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxP,eAAO,MAAQ,IAAI,iEAAE,SAAS,oFAAE,iBAAiB,oFAAE,aAAa,qCAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAEA,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,sBAAsB,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxP,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACtE,eAAO,MAAQ,IAAI,iEAAE,SAAS,oFAAE,iBAAiB,oFAAE,mBAAmB,+FAAE,aAAa,qCAAE,gBAAgB,uBAYrG,CAAC"}
|
package/dist/browser.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createApi } from "./api.js";
|
|
2
|
-
export const { init, renderPdf, renderPdfInWorker, getWasmModule, getEngineVersion } = createApi({
|
|
2
|
+
export const { init, renderPdf, renderPdfInWorker, createPdfWorkerPool, getWasmModule, getEngineVersion } = createApi({
|
|
3
3
|
defaultSource: () => new URL("../wasm/blitz_pdf_bg.wasm", import.meta.url),
|
|
4
4
|
spawnWorker: events => {
|
|
5
5
|
const worker = new Worker(new URL("./worker.js", import.meta.url), { type: "module" });
|
package/dist/browser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAIrC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,aAAa,EAAE,gBAAgB,EAAE,GAAG,SAAS,CAAC;IACpH,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,2BAA2B,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;IAC1E,WAAW,EAAE,MAAM,CAAC,EAAE;QACpB,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QACvF,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvD,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,EAAE;YACvB,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,yBAAyB,KAAK,CAAC,OAAO,IAAI,eAAe,EAAE,CAAC,CAAC,CAAC;QACvF,CAAC,CAAC;QACF,MAAM,CAAC,cAAc,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC,CAAC;QACrH,OAAO,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC;IACrH,CAAC;CACF,CAAC,CAAC"}
|
package/dist/node.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export type { AssetData, AssetMap, AssetResolver, AttachmentRelationship, BinaryData, InitOptions, Length, PageFormat, PageNumberOptions, PdfAttachment, PdfDate, PdfMetadata, PdfOptions, PdfXmpProperty, PdfXmpSchema, WasmSource } from "./types.js";
|
|
2
|
-
export
|
|
2
|
+
export type { PdfWorkerPool, PdfWorkerPoolOptions } from "./types.js";
|
|
3
|
+
export declare const init: (options?: import("./types.js").InitOptions) => Promise<void>, renderPdf: (html: string, options?: import("./types.js").PdfOptions) => Promise<Uint8Array>, renderPdfInWorker: (html: string, options?: import("./types.js").PdfOptions) => Promise<Uint8Array>, createPdfWorkerPool: (options?: import("./types.js").PdfWorkerPoolOptions) => import("./types.js").PdfWorkerPool, getWasmModule: () => Promise<WebAssembly.Module>, getEngineVersion: () => Promise<string>;
|
|
3
4
|
//# sourceMappingURL=node.d.ts.map
|
package/dist/node.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAIA,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,sBAAsB,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxP,eAAO,MAAQ,IAAI,iEAAE,SAAS,oFAAE,iBAAiB,oFAAE,aAAa,qCAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAIA,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,sBAAsB,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxP,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACtE,eAAO,MAAQ,IAAI,iEAAE,SAAS,oFAAE,iBAAiB,oFAAE,mBAAmB,+FAAE,aAAa,qCAAE,gBAAgB,uBAmBrG,CAAC"}
|
package/dist/node.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { readFile } from "node:fs/promises";
|
|
2
2
|
import { Worker } from "node:worker_threads";
|
|
3
3
|
import { createApi } from "./api.js";
|
|
4
|
-
export const { init, renderPdf, renderPdfInWorker, getWasmModule, getEngineVersion } = createApi({
|
|
4
|
+
export const { init, renderPdf, renderPdfInWorker, createPdfWorkerPool, getWasmModule, getEngineVersion } = createApi({
|
|
5
5
|
defaultSource: () => readFile(new URL("../wasm/blitz_pdf_bg.wasm", import.meta.url)),
|
|
6
6
|
prepare: async (source) => {
|
|
7
7
|
if (source instanceof URL && source.protocol === "file:")
|
|
@@ -16,7 +16,11 @@ export const { init, renderPdf, renderPdfInWorker, getWasmModule, getEngineVersi
|
|
|
16
16
|
worker.on("error", events.error);
|
|
17
17
|
worker.on("messageerror", events.error);
|
|
18
18
|
worker.on("exit", code => events.error(new Error(`Render worker exited with code ${code}`)));
|
|
19
|
-
return {
|
|
19
|
+
return {
|
|
20
|
+
post: (message, transfer) => worker.postMessage(message, transfer),
|
|
21
|
+
terminate: async () => { await worker.terminate(); },
|
|
22
|
+
ref: () => { worker.ref(); }, unref: () => { worker.unref(); },
|
|
23
|
+
};
|
|
20
24
|
},
|
|
21
25
|
});
|
|
22
26
|
//# sourceMappingURL=node.js.map
|
package/dist/node.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAIrC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,aAAa,EAAE,gBAAgB,EAAE,GAAG,SAAS,CAAC;IACpH,aAAa,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,2BAA2B,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpF,OAAO,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACtB,IAAI,MAAM,YAAY,GAAG,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO;YAAE,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC;QAClF,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,OAAO,QAAQ,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/F,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,WAAW,EAAE,MAAM,CAAC,EAAE;QACpB,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,kBAAkB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACxE,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,kCAAkC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7F,OAAO;YACL,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC;YAClE,SAAS,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YACpD,GAAG,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;SAC/D,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -119,4 +119,18 @@ export interface PdfOptions {
|
|
|
119
119
|
/** Reject larger documents. Default: 100; maximum: 1000. */
|
|
120
120
|
maxPages?: number;
|
|
121
121
|
}
|
|
122
|
+
/** Limits for a pool of reusable, independent PDF engines. */
|
|
123
|
+
export interface PdfWorkerPoolOptions {
|
|
124
|
+
/** Maximum simultaneous renders. Default: 4. */
|
|
125
|
+
maxWorkers?: number;
|
|
126
|
+
/** Release an unused worker after this many milliseconds. Default: 30000; 0 disables reuse. */
|
|
127
|
+
idleTimeoutMs?: number;
|
|
128
|
+
/** Recreate a worker after this many documents to bound retained engine memory. Default: 100. */
|
|
129
|
+
maxJobsPerWorker?: number;
|
|
130
|
+
}
|
|
131
|
+
export interface PdfWorkerPool {
|
|
132
|
+
renderPdf(html: string, options?: PdfOptions): Promise<Uint8Array>;
|
|
133
|
+
/** Stop accepting work, finish accepted renders, and release every worker. Idempotent. */
|
|
134
|
+
close(): Promise<void>;
|
|
135
|
+
}
|
|
122
136
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/worker-host.d.ts
CHANGED
|
@@ -1,16 +1,23 @@
|
|
|
1
1
|
import type { RenderOptions } from "./render.js";
|
|
2
|
-
import type { AssetResolver } from "./types.js";
|
|
2
|
+
import type { AssetResolver, PdfWorkerPoolOptions } from "./types.js";
|
|
3
3
|
import type { HostMessage, WorkerMessage } from "./worker-protocol.js";
|
|
4
4
|
export interface WorkerEvents {
|
|
5
5
|
message(message: WorkerMessage): void;
|
|
6
|
-
/** Crashes, unreadable messages, or an exit
|
|
6
|
+
/** Crashes, unreadable messages, or an unexpected exit, including while idle. */
|
|
7
7
|
error(error: unknown): void;
|
|
8
8
|
}
|
|
9
9
|
export interface WorkerHandle {
|
|
10
10
|
post(message: HostMessage, transfer: ArrayBuffer[]): void;
|
|
11
|
-
terminate(): void
|
|
11
|
+
terminate(): void | Promise<void>;
|
|
12
|
+
ref?(): void;
|
|
13
|
+
unref?(): void;
|
|
12
14
|
}
|
|
13
15
|
export type SpawnWorker = (events: WorkerEvents) => WorkerHandle;
|
|
14
|
-
/**
|
|
15
|
-
export declare function renderInWorker(spawn: SpawnWorker, module: WebAssembly.Module, html: string, options: RenderOptions, resolver
|
|
16
|
+
/** One engine per document; wait for termination before releasing the caller's slot. */
|
|
17
|
+
export declare function renderInWorker(spawn: SpawnWorker, module: WebAssembly.Module, html: string, options: RenderOptions, resolver?: AssetResolver): Promise<Uint8Array>;
|
|
18
|
+
/** Jobs have their own resolver and document; only the initialized engine survives. */
|
|
19
|
+
export declare function createWorkerPool(spawn: SpawnWorker, options?: PdfWorkerPoolOptions): {
|
|
20
|
+
render(module: WebAssembly.Module, html: string, options: RenderOptions, resolver?: AssetResolver): Promise<Uint8Array>;
|
|
21
|
+
close(): Promise<void>;
|
|
22
|
+
};
|
|
16
23
|
//# sourceMappingURL=worker-host.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-host.d.ts","sourceRoot":"","sources":["../src/worker-host.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"worker-host.d.ts","sourceRoot":"","sources":["../src/worker-host.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAEvE,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IACtC,iFAAiF;IACjF,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAC1D,SAAS,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,GAAG,CAAC,IAAI,IAAI,CAAC;IACb,KAAK,CAAC,IAAI,IAAI,CAAC;CAChB;AAED,MAAM,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,YAAY,KAAK,YAAY,CAAC;AAEjE,wFAAwF;AACxF,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EACzF,OAAO,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,CA8BvE;AAyBD,uFAAuF;AACvF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,GAAE,oBAAyB;mBAsGpE,WAAW,CAAC,MAAM,QAAQ,MAAM,WAAW,aAAa,aAAa,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC;aAS9G,OAAO,CAAC,IAAI,CAAC;EAQzB"}
|
package/dist/worker-host.js
CHANGED
|
@@ -1,31 +1,198 @@
|
|
|
1
1
|
import { createAssetLoader } from "./assets.js";
|
|
2
|
-
/**
|
|
2
|
+
/** One engine per document; wait for termination before releasing the caller's slot. */
|
|
3
3
|
export function renderInWorker(spawn, module, html, options, resolver) {
|
|
4
4
|
return new Promise((resolve, reject) => {
|
|
5
5
|
const load = resolver && createAssetLoader(resolver);
|
|
6
|
+
let worker;
|
|
6
7
|
let settled = false;
|
|
7
|
-
|
|
8
|
+
function finish(callback) {
|
|
8
9
|
if (settled)
|
|
9
10
|
return;
|
|
10
11
|
settled = true;
|
|
11
|
-
worker
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
12
|
+
void Promise.resolve().then(() => worker?.terminate()).then(callback, reject);
|
|
13
|
+
}
|
|
14
|
+
const fail = (error) => finish(() => reject(error));
|
|
15
|
+
try {
|
|
16
|
+
worker = spawn({
|
|
17
|
+
message(message) {
|
|
18
|
+
if (settled || message.id !== 1)
|
|
19
|
+
return;
|
|
20
|
+
if (message.type === "done")
|
|
21
|
+
finish(() => resolve(message.pdf));
|
|
22
|
+
else if (message.type === "error")
|
|
23
|
+
fail(message.error);
|
|
24
|
+
else if (!load)
|
|
25
|
+
fail(new Error("Render worker requested assets without a resolver"));
|
|
26
|
+
else
|
|
27
|
+
void load(message.urls).then(data => {
|
|
28
|
+
if (settled)
|
|
29
|
+
return;
|
|
30
|
+
try {
|
|
31
|
+
worker.post({ type: "assets", id: 1, data }, data.map(bytes => bytes.buffer));
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
fail(error);
|
|
35
|
+
}
|
|
36
|
+
}, fail);
|
|
37
|
+
},
|
|
38
|
+
error: fail,
|
|
39
|
+
});
|
|
40
|
+
if (!settled)
|
|
41
|
+
worker.post({ type: "render", id: 1, module, html, options, external: load !== undefined }, []);
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
fail(error);
|
|
45
|
+
}
|
|
29
46
|
});
|
|
30
47
|
}
|
|
48
|
+
function integer(value, min, max, name) {
|
|
49
|
+
if (!Number.isSafeInteger(value) || value < min || value > max) {
|
|
50
|
+
throw new RangeError(`${name} must be an integer from ${min} to ${max}`);
|
|
51
|
+
}
|
|
52
|
+
return value;
|
|
53
|
+
}
|
|
54
|
+
/** Jobs have their own resolver and document; only the initialized engine survives. */
|
|
55
|
+
export function createWorkerPool(spawn, options = {}) {
|
|
56
|
+
const maxWorkers = integer(options.maxWorkers ?? 4, 1, Number.MAX_SAFE_INTEGER, "maxWorkers");
|
|
57
|
+
const idleTimeoutMs = integer(options.idleTimeoutMs ?? 30_000, 0, 2_147_483_647, "idleTimeoutMs");
|
|
58
|
+
const maxJobs = integer(options.maxJobsPerWorker ?? 100, 1, Number.MAX_SAFE_INTEGER, "maxJobsPerWorker");
|
|
59
|
+
const slots = new Set();
|
|
60
|
+
const queue = [];
|
|
61
|
+
const terminating = new Set();
|
|
62
|
+
let nextId = 0;
|
|
63
|
+
let closing;
|
|
64
|
+
let resolveClosed;
|
|
65
|
+
let pumping = false;
|
|
66
|
+
function checkClosed() {
|
|
67
|
+
if (closing && queue.length === 0 && slots.size === 0 && terminating.size === 0)
|
|
68
|
+
resolveClosed?.();
|
|
69
|
+
}
|
|
70
|
+
function retire(slot) {
|
|
71
|
+
if (slot.retired)
|
|
72
|
+
return;
|
|
73
|
+
slot.retired = true;
|
|
74
|
+
clearTimeout(slot.timer);
|
|
75
|
+
slots.delete(slot);
|
|
76
|
+
// Observe asynchronous termination before close resolves; late exit events are ignored.
|
|
77
|
+
const done = Promise.resolve().then(() => slot.worker?.terminate()).then(() => { }, () => { });
|
|
78
|
+
terminating.add(done);
|
|
79
|
+
void done.then(() => { terminating.delete(done); checkClosed(); });
|
|
80
|
+
}
|
|
81
|
+
function fail(slot, error) {
|
|
82
|
+
if (slot.retired)
|
|
83
|
+
return;
|
|
84
|
+
const job = slot.job;
|
|
85
|
+
delete slot.job;
|
|
86
|
+
retire(slot);
|
|
87
|
+
job?.reject(error);
|
|
88
|
+
pump();
|
|
89
|
+
}
|
|
90
|
+
function release(slot) {
|
|
91
|
+
slot.completed++;
|
|
92
|
+
if (slot.completed >= maxJobs || idleTimeoutMs === 0 || (closing && queue.length === 0)) {
|
|
93
|
+
retire(slot);
|
|
94
|
+
}
|
|
95
|
+
else if (queue.length === 0) {
|
|
96
|
+
slot.worker?.unref?.();
|
|
97
|
+
slot.timer = setTimeout(() => { retire(slot); checkClosed(); }, idleTimeoutMs);
|
|
98
|
+
// A warm worker and its eviction timer must not keep a CLI alive.
|
|
99
|
+
slot.timer.unref?.();
|
|
100
|
+
}
|
|
101
|
+
pump();
|
|
102
|
+
}
|
|
103
|
+
function message(slot, value) {
|
|
104
|
+
const job = slot.job;
|
|
105
|
+
if (slot.retired || !job || value.id !== job.id)
|
|
106
|
+
return;
|
|
107
|
+
if (value.type === "done") {
|
|
108
|
+
delete slot.job;
|
|
109
|
+
release(slot);
|
|
110
|
+
job.resolve(value.pdf);
|
|
111
|
+
}
|
|
112
|
+
else if (value.type === "error") {
|
|
113
|
+
fail(slot, value.error);
|
|
114
|
+
}
|
|
115
|
+
else if (!job.load) {
|
|
116
|
+
fail(slot, new Error("Render worker requested assets without a resolver"));
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
void job.load(value.urls).then(data => {
|
|
120
|
+
// Resolver promises can finish after a crash or retirement. Never send them to another job.
|
|
121
|
+
if (slot.retired || slot.job !== job)
|
|
122
|
+
return;
|
|
123
|
+
try {
|
|
124
|
+
slot.worker.post({ type: "assets", id: job.id, data }, data.map(bytes => bytes.buffer));
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
fail(slot, error);
|
|
128
|
+
}
|
|
129
|
+
}, error => { if (!slot.retired && slot.job === job)
|
|
130
|
+
fail(slot, error); });
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
function pump() {
|
|
134
|
+
if (pumping)
|
|
135
|
+
return;
|
|
136
|
+
pumping = true;
|
|
137
|
+
try {
|
|
138
|
+
while (queue.length > 0) {
|
|
139
|
+
let slot = [...slots].find(candidate => !candidate.job);
|
|
140
|
+
if (!slot && slots.size >= maxWorkers)
|
|
141
|
+
break;
|
|
142
|
+
const job = queue.shift();
|
|
143
|
+
if (!slot) {
|
|
144
|
+
slot = { completed: 0, retired: false, job };
|
|
145
|
+
slots.add(slot);
|
|
146
|
+
const created = slot;
|
|
147
|
+
try {
|
|
148
|
+
created.worker = spawn({ message: value => message(created, value), error: error => fail(created, error) });
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
fail(created, error);
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
clearTimeout(slot.timer);
|
|
157
|
+
delete slot.timer;
|
|
158
|
+
slot.job = job;
|
|
159
|
+
}
|
|
160
|
+
try {
|
|
161
|
+
slot.worker.ref?.();
|
|
162
|
+
slot.worker.post(job.message, []);
|
|
163
|
+
}
|
|
164
|
+
catch (error) {
|
|
165
|
+
fail(slot, error);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
if (closing && queue.length === 0)
|
|
169
|
+
for (const slot of slots)
|
|
170
|
+
if (!slot.job)
|
|
171
|
+
retire(slot);
|
|
172
|
+
}
|
|
173
|
+
finally {
|
|
174
|
+
pumping = false;
|
|
175
|
+
}
|
|
176
|
+
checkClosed();
|
|
177
|
+
}
|
|
178
|
+
return {
|
|
179
|
+
render(module, html, options, resolver) {
|
|
180
|
+
if (closing)
|
|
181
|
+
return Promise.reject(new Error("PDF worker pool is closed"));
|
|
182
|
+
return new Promise((resolve, reject) => {
|
|
183
|
+
const id = ++nextId;
|
|
184
|
+
queue.push({ id, message: { type: "render", id, module, html, options, external: resolver !== undefined },
|
|
185
|
+
load: resolver ? createAssetLoader(resolver) : undefined, resolve, reject });
|
|
186
|
+
pump();
|
|
187
|
+
});
|
|
188
|
+
},
|
|
189
|
+
close() {
|
|
190
|
+
if (!closing) {
|
|
191
|
+
closing = new Promise(resolve => { resolveClosed = resolve; });
|
|
192
|
+
pump();
|
|
193
|
+
}
|
|
194
|
+
return closing;
|
|
195
|
+
},
|
|
196
|
+
};
|
|
197
|
+
}
|
|
31
198
|
//# sourceMappingURL=worker-host.js.map
|
package/dist/worker-host.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-host.js","sourceRoot":"","sources":["../src/worker-host.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"worker-host.js","sourceRoot":"","sources":["../src/worker-host.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +1,27 @@
|
|
|
1
1
|
import type { RenderOptions } from "./render.js";
|
|
2
2
|
export type HostMessage = {
|
|
3
3
|
type: "render";
|
|
4
|
+
id: number;
|
|
4
5
|
module: WebAssembly.Module;
|
|
5
6
|
html: string;
|
|
6
7
|
options: RenderOptions;
|
|
7
8
|
external: boolean;
|
|
8
9
|
} | {
|
|
9
10
|
type: "assets";
|
|
11
|
+
id: number;
|
|
10
12
|
data: Uint8Array[];
|
|
11
13
|
};
|
|
12
14
|
export type WorkerMessage = {
|
|
13
15
|
type: "assets";
|
|
16
|
+
id: number;
|
|
14
17
|
urls: string[];
|
|
15
18
|
} | {
|
|
16
19
|
type: "done";
|
|
20
|
+
id: number;
|
|
17
21
|
pdf: Uint8Array;
|
|
18
22
|
} | {
|
|
19
23
|
type: "error";
|
|
24
|
+
id: number;
|
|
20
25
|
error: unknown;
|
|
21
26
|
};
|
|
22
27
|
//# sourceMappingURL=worker-protocol.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-protocol.d.ts","sourceRoot":"","sources":["../src/worker-protocol.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,aAAa,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"worker-protocol.d.ts","sourceRoot":"","sources":["../src/worker-protocol.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,aAAa,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,GACnH;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,UAAU,EAAE,CAAA;CAAE,CAAC;AAEvD,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,UAAU,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC"}
|
package/dist/worker-runtime.d.ts
CHANGED
|
@@ -3,6 +3,6 @@ export interface WorkerEndpoint {
|
|
|
3
3
|
post(message: WorkerMessage, transfer: ArrayBuffer[]): void;
|
|
4
4
|
onMessage(handler: (message: HostMessage) => void): void;
|
|
5
5
|
}
|
|
6
|
-
/**
|
|
6
|
+
/** One document at a time; retain the initialized engine and its bundled-font cache. */
|
|
7
7
|
export declare function serve(endpoint: WorkerEndpoint): void;
|
|
8
8
|
//# sourceMappingURL=worker-runtime.d.ts.map
|