@u1f992/pdfdiff 0.2.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.clang-format +3 -0
- package/LICENSE +68 -81
- package/dist/browser.js +239 -3109
- package/dist/browser.js.map +1 -1
- package/dist/cli-png-worker.d.ts.map +1 -1
- package/dist/cli-png-worker.js +0 -16
- package/dist/cli-png-worker.js.map +1 -1
- package/dist/cli.js +240 -3150
- package/dist/cli.js.map +1 -1
- package/dist/core.wasm +0 -0
- package/dist/decode.d.ts +9 -0
- package/dist/decode.d.ts.map +1 -0
- package/dist/diff.d.ts.map +1 -1
- package/dist/gs-wasm/gs.js +5821 -0
- package/dist/gs-wasm/gs.wasm +0 -0
- package/dist/gs-wasm/index.js +120 -0
- package/dist/gs-wasm/index.js.map +1 -0
- package/dist/gs-wasm/worker.js +764 -0
- package/dist/gs-wasm/worker.js.map +1 -0
- package/dist/image.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.html +1 -1
- package/dist/index.js +238 -3109
- package/dist/index.js.map +1 -1
- package/dist/iterable.d.ts.map +1 -1
- package/dist/jimp.d.ts +23 -1
- package/dist/jimp.d.ts.map +1 -1
- package/dist/pdf.d.ts +15 -4
- package/dist/pdf.d.ts.map +1 -1
- package/dist/perf.d.ts.map +1 -1
- package/dist/rgba-color.d.ts.map +1 -1
- package/dist/transferable.d.ts +6 -2
- package/dist/transferable.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/worker.d.ts +6 -8
- package/dist/worker.d.ts.map +1 -1
- package/dist/worker.js +70 -3311
- package/dist/worker.js.map +1 -1
- package/package.json +9 -4
- package/rollup.config.js +63 -5
- package/scripts/build-wasm.sh +32 -0
- package/src/browser.ts +9 -6
- package/src/cli-png-worker.ts +0 -17
- package/src/cli.ts +9 -23
- package/src/decode.ts +15 -0
- package/src/diff.ts +0 -17
- package/src/image.ts +1 -18
- package/src/index.html +1 -1
- package/src/index.test.ts +10 -18
- package/src/index.ts +163 -74
- package/src/iterable.test.ts +0 -17
- package/src/iterable.ts +0 -17
- package/src/jimp.ts +25 -7
- package/src/pdf.ts +98 -69
- package/src/perf.ts +0 -17
- package/src/rgba-color.test.ts +0 -17
- package/src/rgba-color.ts +0 -17
- package/src/transferable.ts +6 -21
- package/src/worker.ts +91 -87
- package/wasm/Makefile +34 -0
- package/wasm/bindings.cpp +76 -0
- package/wasm/core.c +176 -0
- package/wasm/core.h +69 -0
- package/dist/mupdf-wasm.wasm +0 -0
|
Binary file
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
function getDefaultExportFromCjs (x) {
|
|
2
|
+
return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
var browser;
|
|
6
|
+
var hasRequiredBrowser;
|
|
7
|
+
|
|
8
|
+
function requireBrowser () {
|
|
9
|
+
if (hasRequiredBrowser) return browser;
|
|
10
|
+
hasRequiredBrowser = 1;
|
|
11
|
+
|
|
12
|
+
// src/browser/index.js
|
|
13
|
+
var browser_default = typeof Worker < "u" ? Worker : void 0;
|
|
14
|
+
|
|
15
|
+
browser = browser_default;
|
|
16
|
+
return browser;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
var browserExports = requireBrowser();
|
|
20
|
+
var Worker$1 = /*@__PURE__*/getDefaultExportFromCjs(browserExports);
|
|
21
|
+
|
|
22
|
+
const STATUS_DATA_READY = 2;
|
|
23
|
+
const STATUS_FLUSH = 3;
|
|
24
|
+
|
|
25
|
+
class AbortError extends Error {
|
|
26
|
+
constructor(message = "The operation was aborted") {
|
|
27
|
+
super(message);
|
|
28
|
+
this.name = "AbortError";
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
class WorkerError extends Error {
|
|
32
|
+
constructor(e) {
|
|
33
|
+
super(e.message);
|
|
34
|
+
this.name = "WorkerError";
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
async function gs({ args, inputFiles, outputFilePaths, onStdin, onStdout, onStderr, transfer, signal, }) {
|
|
38
|
+
args ??= [];
|
|
39
|
+
inputFiles ??= {};
|
|
40
|
+
outputFilePaths ??= [];
|
|
41
|
+
onStdin ??= () => null;
|
|
42
|
+
onStdout ??= () => { };
|
|
43
|
+
onStderr ??= () => { };
|
|
44
|
+
transfer ??= [];
|
|
45
|
+
if (signal?.aborted) {
|
|
46
|
+
return Promise.reject(new AbortError());
|
|
47
|
+
}
|
|
48
|
+
const worker = new Worker$1(new URL("./worker.js", import.meta.url), {
|
|
49
|
+
type: "module",
|
|
50
|
+
});
|
|
51
|
+
// Layout: [status:int32, data:int32] = 8 bytes total
|
|
52
|
+
// We must use Int32Array (not Uint8Array) because Atomics.wait() and Atomics.notify()
|
|
53
|
+
// only work with Int32Array or BigInt64Array
|
|
54
|
+
// @see https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Atomics/notify
|
|
55
|
+
// @see https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Atomics/wait
|
|
56
|
+
const sharedBuffer = new SharedArrayBuffer(8);
|
|
57
|
+
const statusArray = new Int32Array(sharedBuffer, 0, 1); // 0 (initial), STATUS_*
|
|
58
|
+
const dataArray = new Int32Array(sharedBuffer, 4, 1); // 0-255
|
|
59
|
+
let lastOutputPromise = Promise.resolve();
|
|
60
|
+
let lastErrorPromise = Promise.resolve();
|
|
61
|
+
let onAbort = null;
|
|
62
|
+
const cleanup = async () => {
|
|
63
|
+
worker.terminate();
|
|
64
|
+
await Promise.all([lastOutputPromise, lastErrorPromise]);
|
|
65
|
+
if (onAbort) {
|
|
66
|
+
signal?.removeEventListener("abort", onAbort);
|
|
67
|
+
onAbort = null;
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
return new Promise((resolve, reject) => {
|
|
71
|
+
signal?.addEventListener("abort", (onAbort = async () => {
|
|
72
|
+
await cleanup();
|
|
73
|
+
reject(new AbortError());
|
|
74
|
+
}));
|
|
75
|
+
worker.addEventListener("message", async (e) => {
|
|
76
|
+
const { type, data } = e.data;
|
|
77
|
+
switch (type) {
|
|
78
|
+
case "ready":
|
|
79
|
+
worker.postMessage({
|
|
80
|
+
type: "start",
|
|
81
|
+
data: { args, inputFiles, outputFilePaths },
|
|
82
|
+
}, transfer);
|
|
83
|
+
break;
|
|
84
|
+
case "stdin": {
|
|
85
|
+
const byte = await onStdin();
|
|
86
|
+
if (byte === null) {
|
|
87
|
+
Atomics.store(statusArray, 0, STATUS_FLUSH);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
Atomics.store(dataArray, 0, byte & 0xff);
|
|
91
|
+
Atomics.store(statusArray, 0, STATUS_DATA_READY);
|
|
92
|
+
}
|
|
93
|
+
Atomics.notify(statusArray, 0);
|
|
94
|
+
break;
|
|
95
|
+
}
|
|
96
|
+
case "stdout":
|
|
97
|
+
lastOutputPromise = lastOutputPromise.then(() => onStdout(data === null ? null : data & 0xff));
|
|
98
|
+
break;
|
|
99
|
+
case "stderr":
|
|
100
|
+
lastErrorPromise = lastErrorPromise.then(() => onStderr(data === null ? null : data & 0xff));
|
|
101
|
+
break;
|
|
102
|
+
case "complete":
|
|
103
|
+
await cleanup();
|
|
104
|
+
resolve(data);
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
worker.addEventListener("error", async (e) => {
|
|
109
|
+
await cleanup();
|
|
110
|
+
reject(new WorkerError(e));
|
|
111
|
+
});
|
|
112
|
+
worker.postMessage({
|
|
113
|
+
type: "init",
|
|
114
|
+
data: sharedBuffer,
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
export { gs };
|
|
120
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../node_modules/web-worker/dist/browser/index.cjs","../../node_modules/@u1f992/gs-wasm/dist/status.js","../../node_modules/@u1f992/gs-wasm/dist/index.js"],"sourcesContent":["'use strict';\n\n// src/browser/index.js\nvar browser_default = typeof Worker < \"u\" ? Worker : void 0;\n\nmodule.exports = browser_default;\n","export const STATUS_INPUT_REQUESTED = 1;\nexport const STATUS_DATA_READY = 2;\nexport const STATUS_FLUSH = 3;\n//# sourceMappingURL=status.js.map","import Worker from \"web-worker\";\nimport { STATUS_DATA_READY, STATUS_FLUSH } from \"./status.js\";\nclass AbortError extends Error {\n constructor(message = \"The operation was aborted\") {\n super(message);\n this.name = \"AbortError\";\n }\n}\nclass WorkerError extends Error {\n constructor(e) {\n super(e.message);\n this.name = \"WorkerError\";\n }\n}\nexport async function gs({ args, inputFiles, outputFilePaths, onStdin, onStdout, onStderr, transfer, signal, }) {\n args ??= [];\n inputFiles ??= {};\n outputFilePaths ??= [];\n onStdin ??= () => null;\n onStdout ??= () => { };\n onStderr ??= () => { };\n transfer ??= [];\n if (signal?.aborted) {\n return Promise.reject(new AbortError());\n }\n const worker = new Worker(new URL(\"./worker.js\", import.meta.url), {\n type: \"module\",\n });\n // Layout: [status:int32, data:int32] = 8 bytes total\n // We must use Int32Array (not Uint8Array) because Atomics.wait() and Atomics.notify()\n // only work with Int32Array or BigInt64Array\n // @see https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Atomics/notify\n // @see https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Atomics/wait\n const sharedBuffer = new SharedArrayBuffer(8);\n const statusArray = new Int32Array(sharedBuffer, 0, 1); // 0 (initial), STATUS_*\n const dataArray = new Int32Array(sharedBuffer, 4, 1); // 0-255\n let lastOutputPromise = Promise.resolve();\n let lastErrorPromise = Promise.resolve();\n let onAbort = null;\n const cleanup = async () => {\n worker.terminate();\n await Promise.all([lastOutputPromise, lastErrorPromise]);\n if (onAbort) {\n signal?.removeEventListener(\"abort\", onAbort);\n onAbort = null;\n }\n };\n return new Promise((resolve, reject) => {\n signal?.addEventListener(\"abort\", (onAbort = async () => {\n await cleanup();\n reject(new AbortError());\n }));\n worker.addEventListener(\"message\", async (e) => {\n const { type, data } = e.data;\n switch (type) {\n case \"ready\":\n worker.postMessage({\n type: \"start\",\n data: { args, inputFiles, outputFilePaths },\n }, transfer);\n break;\n case \"stdin\": {\n const byte = await onStdin();\n if (byte === null) {\n Atomics.store(statusArray, 0, STATUS_FLUSH);\n }\n else {\n Atomics.store(dataArray, 0, byte & 0xff);\n Atomics.store(statusArray, 0, STATUS_DATA_READY);\n }\n Atomics.notify(statusArray, 0);\n break;\n }\n case \"stdout\":\n lastOutputPromise = lastOutputPromise.then(() => onStdout(data === null ? null : data & 0xff));\n break;\n case \"stderr\":\n lastErrorPromise = lastErrorPromise.then(() => onStderr(data === null ? null : data & 0xff));\n break;\n case \"complete\":\n await cleanup();\n resolve(data);\n break;\n }\n });\n worker.addEventListener(\"error\", async (e) => {\n await cleanup();\n reject(new WorkerError(e));\n });\n worker.postMessage({\n type: \"init\",\n data: sharedBuffer,\n });\n });\n}\n//# sourceMappingURL=index.js.map"],"names":["Worker"],"mappings":"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","x_google_ignoreList":[0,1,2]}
|