@wasmedia/wenblend 0.1.0 → 0.1.1

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 CHANGED
@@ -35,7 +35,10 @@ places images by their TIFF position tags and aligns nothing. The wasm in the pa
35
35
  `npm run build && npm run playground` serves a browser playground at `http://localhost:8000/` (set
36
36
  `PORT=` to change it). On `main` it deploys to GitLab Pages at
37
37
  [enblend.wasmedia.org](https://enblend.wasmedia.org/). It runs enblend and enfuse on built-in sample
38
- sets or on your own positioned RGBA TIFFs, in a worker, and nothing leaves the browser.
38
+ sets or on your own positioned RGBA TIFFs, in a worker, and nothing leaves the browser. Each input's
39
+ position tags are shown before you run, 16-bit and predictor-compressed TIFFs (Hugin `nona` output)
40
+ included; previews are downsampled, and only 8-bit images get one. Where the browser has OPFS, runs
41
+ store their files there, and runs in several tabs of the page take turns rather than overlap.
39
42
 
40
43
  ## Artifacts
41
44
 
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,aAAa,EAA0B,MAAM,YAAY,CAAC;AAE1I,OAAO,EAAkB,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAExD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,OAAO,EAAE,cAAc,EAAE,CAAC;AAsE1B;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;AACxH,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;AA+F3H,sDAAsD;AACtD,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;AAC5G,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;AAK/G,qDAAqD;AACrD,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;AAC3G,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,aAAa,EAA0B,MAAM,YAAY,CAAC;AAE1I,OAAO,EAAkB,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAExD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,OAAO,EAAE,cAAc,EAAE,CAAC;AAoF1B;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;AACxH,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;AAuG3H,sDAAsD;AACtD,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;AAC5G,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;AAK/G,qDAAqD;AACrD,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;AAC3G,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC"}
package/dist/cli.js CHANGED
@@ -62,6 +62,21 @@ function exitStatusOf(e) {
62
62
  }
63
63
  return undefined;
64
64
  }
65
+ /**
66
+ * Record a release failure that could not be thrown, on the error that was.
67
+ * An existing cause is the more specific one and is left alone; a value
68
+ * that is not an object cannot carry a cause at all.
69
+ */
70
+ function attachCause(error, cause) {
71
+ if (typeof error !== "object" || error === null || "cause" in error)
72
+ return;
73
+ try {
74
+ Object.defineProperty(error, "cause", { value: cause, writable: true, configurable: true, enumerable: false });
75
+ }
76
+ catch {
77
+ // A frozen error: nothing more can be recorded.
78
+ }
79
+ }
65
80
  export async function runTool(tool, argv, inputs = [], options) {
66
81
  // File mode when every input is a FileInput; buffers otherwise (including
67
82
  // no inputs). Decided before an instance exists, so a bad call costs nothing.
@@ -90,6 +105,7 @@ export async function runTool(tool, argv, inputs = [], options) {
90
105
  let outOfMemory = false;
91
106
  let outputs = new Map();
92
107
  let inFlight;
108
+ let suppressed;
93
109
  const host = hostProcess();
94
110
  const hostExitCode = host?.exitCode;
95
111
  try {
@@ -149,10 +165,18 @@ export async function runTool(tool, argv, inputs = [], options) {
149
165
  catch (releaseError) {
150
166
  if (!inFlight && !outOfMemory)
151
167
  throw releaseError;
168
+ // Kept as the cause, so a run that failed twice still shows both.
169
+ suppressed = { error: releaseError };
170
+ if (inFlight)
171
+ attachCause(inFlight.error, releaseError);
152
172
  }
153
173
  }
154
- if (outOfMemory)
155
- throw new OutOfMemoryError(await staging.pixelCount(), stderr.trimEnd());
174
+ if (outOfMemory) {
175
+ const error = new OutOfMemoryError(await staging.pixelCount(), stderr.trimEnd());
176
+ if (suppressed)
177
+ attachCause(error, suppressed.error);
178
+ throw error;
179
+ }
156
180
  const base = { exitCode, stdout: stdout.trimEnd(), stderr: stderr.trimEnd() };
157
181
  return files
158
182
  ? { ...base, written: outputs }
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC/F,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGhE,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,OAAO,GAAG,MAAM,CAAC;IACrB,MAAM,EAAE,UAAU,EAAE,GAAG,SAAS,EAAE,CAAC;IACnC,OAAO,CAAC,EAAE,CAAC,YAAY,GAAG,WAAW,CAAC,GAAG;QAAE,SAAS,CAAC,EAAE,SAAS,CAAA;KAAE,CAAC;IACnE,+EAA+E;IAC/E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,UAAU,GAAG,WAAW,CAAC;IAClC,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/E;AAID;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CA4CnF;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAMvC"}
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC/F,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEhE,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,OAAO,GAAG,MAAM,CAAC;IACrB,MAAM,EAAE,UAAU,EAAE,GAAG,SAAS,EAAE,CAAC;IACnC,OAAO,CAAC,EAAE,CAAC,YAAY,GAAG,WAAW,CAAC,GAAG;QAAE,SAAS,CAAC,EAAE,SAAS,CAAA;KAAE,CAAC;IACnE,+EAA+E;IAC/E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,UAAU,GAAG,WAAW,CAAC;IAClC,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/E;AAID;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAwCnF;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAMvC"}
package/dist/handler.js CHANGED
@@ -11,7 +11,6 @@
11
11
  * `src/worker.ts`, the package's dedicated `./worker` entry.
12
12
  */
13
13
  import { runOperation } from "./operations.js";
14
- import { isFileInput } from "./staging.js";
15
14
  const OPS = { blend: "enblend", fuse: "enfuse" };
16
15
  /**
17
16
  * Handle one request. Never throws and never rejects: worker.ts posts
@@ -40,12 +39,8 @@ export async function handleMessage(request) {
40
39
  if (request.wopfsPath !== undefined && typeof request.wopfsPath !== "string") {
41
40
  return { id, ok: false, error: { name: "Error", message: "wopfsPath must be a string" } };
42
41
  }
43
- // Check if file mode is requested: all images are FileInputs
44
- const imagesArray = Array.isArray(request.images) ? request.images : [];
45
- const isFileMode = imagesArray.length > 0 && imagesArray.every(isFileInput);
46
- if (isFileMode && !request.options?.outputDir) {
47
- return { id, ok: false, error: { name: "Error", message: "file mode requires options.outputDir" } };
48
- }
42
+ // File mode without outputDir is refused by runTool, whose error comes
43
+ // back through the catch below like any other.
49
44
  const result = await runOperation(op, request.images, request.options, { wopfsPath: request.wopfsPath });
50
45
  return { id, ok: true, result };
51
46
  }
@@ -1 +1 @@
1
- {"version":3,"file":"handler.js","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"staging.d.ts","sourceRoot":"","sources":["../src/staging.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAK3G,MAAM,WAAW,OAAO;IACtB,gDAAgD;IAChD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACzC,kFAAkF;IAClF,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC;IAC1D,0EAA0E;IAC1E,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC1C,+DAA+D;IAC/D,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CA6B9E;AAED,4DAA4D;AAC5D,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,SAAS,CAEtD;AASD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAK9E;AA6CD;;;;GAIG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,SAAS,EAAE,EACnB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,OAAO,CAAC,CAoClB"}
1
+ {"version":3,"file":"staging.d.ts","sourceRoot":"","sources":["../src/staging.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAK3G,MAAM,WAAW,OAAO;IACtB,gDAAgD;IAChD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACzC,kFAAkF;IAClF,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC;IAC1D,0EAA0E;IAC1E,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC1C,+DAA+D;IAC/D,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAqC9E;AAED,4DAA4D;AAC5D,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,SAAS,CAEtD;AASD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAK9E;AA2DD;;;;GAIG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,SAAS,EAAE,EACnB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,OAAO,CAAC,CAoClB"}
package/dist/staging.js CHANGED
@@ -11,7 +11,16 @@ import { tiffPixelCount, tiffPixelCountAt } from "./tiff-header.js";
11
11
  import { loadWopfs } from "./wopfs.js";
12
12
  export function stageBuffers(module, inputs) {
13
13
  const workDir = createWorkDir(module);
14
- const inputNames = stageInputs(module, workDir, inputs);
14
+ let inputNames;
15
+ try {
16
+ inputNames = stageInputs(module, workDir, inputs);
17
+ }
18
+ catch (e) {
19
+ // A write that fails partway (a bad name, a full heap) must not leave
20
+ // the directory and the inputs already written behind.
21
+ cleanWorkDir(module, workDir);
22
+ throw e;
23
+ }
15
24
  let released = false;
16
25
  return {
17
26
  workDir,
@@ -65,25 +74,35 @@ export function scratchFor(argv, inputCount) {
65
74
  n += 2 * inputCount;
66
75
  return n;
67
76
  }
68
- /** A reader for the pixel count: a byte range of a file, without reading the rest. */
69
- function readerFor(file) {
70
- if (typeof file === "string") {
71
- return async (offset, length) => {
72
- // A variable specifier: the browser build never resolves node:fs.
73
- const specifier = "node:fs/promises";
74
- const { open } = await import(/* @vite-ignore */ specifier);
75
- const handle = await open(file, "r");
76
- try {
77
- const buffer = new Uint8Array(length);
78
- const { bytesRead } = await handle.read(buffer, 0, length, offset);
79
- return buffer.subarray(0, bytesRead);
80
- }
81
- finally {
82
- await handle.close();
83
- }
84
- };
77
+ /**
78
+ * The pixel count of one file, reading only the byte ranges the header walk
79
+ * needs. The file is opened once, on the first read, and closed after the
80
+ * walk, however many ranges it asks for.
81
+ */
82
+ async function filePixelCount(file) {
83
+ if (typeof file !== "string") {
84
+ let blob;
85
+ return tiffPixelCountAt(async (offset, length) => {
86
+ blob ??= await file.getFile();
87
+ return new Uint8Array(await blob.slice(offset, offset + length).arrayBuffer());
88
+ });
89
+ }
90
+ let opened;
91
+ const readAt = async (offset, length) => {
92
+ // A variable specifier: the browser build never resolves node:fs.
93
+ const specifier = "node:fs/promises";
94
+ opened ??= import(/* @vite-ignore */ specifier).then(({ open }) => open(file, "r"));
95
+ const buffer = new Uint8Array(length);
96
+ const { bytesRead } = await (await opened).read(buffer, 0, length, offset);
97
+ return buffer.subarray(0, bytesRead);
98
+ };
99
+ try {
100
+ return await tiffPixelCountAt(readAt);
101
+ }
102
+ finally {
103
+ // An open that failed has nothing to close; the walk already saw the error.
104
+ await opened?.then((h) => h.close(), () => { });
85
105
  }
86
- return async (offset, length) => new Uint8Array(await (await file.getFile()).slice(offset, offset + length).arrayBuffer());
87
106
  }
88
107
  /**
89
108
  * Turn what wopfs committed into a WrittenFile. On the main thread wopfs
@@ -137,7 +156,7 @@ export async function stageFiles(module, inputs, outputDir, argv, options) {
137
156
  return undefined;
138
157
  let total = 0;
139
158
  for (const input of inputs) {
140
- const n = await tiffPixelCountAt(readerFor(input.file));
159
+ const n = await filePixelCount(input.file);
141
160
  if (n === undefined)
142
161
  return undefined;
143
162
  total += n;
@@ -1 +1 @@
1
- {"version":3,"file":"staging.js","sourceRoot":"","sources":["../src/staging.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"staging.js","sourceRoot":"","sources":["../src/staging.ts"],"names":[],"mappings":"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"}
Binary file
package/dist/wenfuse.wasm CHANGED
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wasmedia/wenblend",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Enblend and Enfuse compiled to WebAssembly for browsers",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
package/src/cli.ts CHANGED
@@ -84,6 +84,20 @@ function exitStatusOf(e: unknown): number | undefined {
84
84
  return undefined;
85
85
  }
86
86
 
87
+ /**
88
+ * Record a release failure that could not be thrown, on the error that was.
89
+ * An existing cause is the more specific one and is left alone; a value
90
+ * that is not an object cannot carry a cause at all.
91
+ */
92
+ function attachCause(error: unknown, cause: unknown): void {
93
+ if (typeof error !== "object" || error === null || "cause" in error) return;
94
+ try {
95
+ Object.defineProperty(error, "cause", { value: cause, writable: true, configurable: true, enumerable: false });
96
+ } catch {
97
+ // A frozen error: nothing more can be recorded.
98
+ }
99
+ }
100
+
87
101
  /**
88
102
  * Run one tool once.
89
103
  *
@@ -127,6 +141,7 @@ export async function runTool(
127
141
  let outOfMemory = false;
128
142
  let outputs = new Map<string, Uint8Array | WrittenFile>();
129
143
  let inFlight: { error: unknown } | undefined;
144
+ let suppressed: { error: unknown } | undefined;
130
145
  const host = hostProcess();
131
146
  const hostExitCode = host?.exitCode;
132
147
  try {
@@ -176,10 +191,17 @@ export async function runTool(
176
191
  await staging.release();
177
192
  } catch (releaseError) {
178
193
  if (!inFlight && !outOfMemory) throw releaseError;
194
+ // Kept as the cause, so a run that failed twice still shows both.
195
+ suppressed = { error: releaseError };
196
+ if (inFlight) attachCause(inFlight.error, releaseError);
179
197
  }
180
198
  }
181
199
 
182
- if (outOfMemory) throw new OutOfMemoryError(await staging.pixelCount(), stderr.trimEnd());
200
+ if (outOfMemory) {
201
+ const error = new OutOfMemoryError(await staging.pixelCount(), stderr.trimEnd());
202
+ if (suppressed) attachCause(error, suppressed.error);
203
+ throw error;
204
+ }
183
205
  const base = { exitCode, stdout: stdout.trimEnd(), stderr: stderr.trimEnd() };
184
206
  return files
185
207
  ? { ...base, written: outputs as Map<string, WrittenFile> }
package/src/handler.ts CHANGED
@@ -13,7 +13,6 @@
13
13
 
14
14
  import type { BlendOptions, FuseOptions, FileInput, OutputDir, WrittenFile } from "./types.js";
15
15
  import { runOperation, type ImageInput } from "./operations.js";
16
- import { isFileInput } from "./staging.js";
17
16
 
18
17
  export interface WorkerRequest {
19
18
  id: string;
@@ -60,12 +59,8 @@ export async function handleMessage(request: WorkerRequest): Promise<WorkerRespo
60
59
  if (request.wopfsPath !== undefined && typeof request.wopfsPath !== "string") {
61
60
  return { id, ok: false, error: { name: "Error", message: "wopfsPath must be a string" } };
62
61
  }
63
- // Check if file mode is requested: all images are FileInputs
64
- const imagesArray = Array.isArray(request.images) ? request.images : [];
65
- const isFileMode = imagesArray.length > 0 && imagesArray.every(isFileInput);
66
- if (isFileMode && !request.options?.outputDir) {
67
- return { id, ok: false, error: { name: "Error", message: "file mode requires options.outputDir" } };
68
- }
62
+ // File mode without outputDir is refused by runTool, whose error comes
63
+ // back through the catch below like any other.
69
64
  const result = await runOperation(op, request.images, request.options, { wopfsPath: request.wopfsPath });
70
65
  return { id, ok: true, result };
71
66
  } catch (e: unknown) {
package/src/staging.ts CHANGED
@@ -26,7 +26,15 @@ export interface Staging {
26
26
 
27
27
  export function stageBuffers(module: WasmModule, inputs: InputImage[]): Staging {
28
28
  const workDir = createWorkDir(module);
29
- const inputNames = stageInputs(module, workDir, inputs);
29
+ let inputNames: Set<string>;
30
+ try {
31
+ inputNames = stageInputs(module, workDir, inputs);
32
+ } catch (e) {
33
+ // A write that fails partway (a bad name, a full heap) must not leave
34
+ // the directory and the inputs already written behind.
35
+ cleanWorkDir(module, workDir);
36
+ throw e;
37
+ }
30
38
  let released = false;
31
39
  return {
32
40
  workDir,
@@ -80,25 +88,39 @@ export function scratchFor(argv: readonly string[], inputCount: number): number
80
88
  return n;
81
89
  }
82
90
 
83
- /** A reader for the pixel count: a byte range of a file, without reading the rest. */
84
- function readerFor(file: FileSystemFileHandle | string): ReadAt {
85
- if (typeof file === "string") {
86
- return async (offset, length) => {
87
- // A variable specifier: the browser build never resolves node:fs.
88
- const specifier = "node:fs/promises";
89
- const { open } = await import(/* @vite-ignore */ specifier);
90
- const handle = await open(file, "r");
91
- try {
92
- const buffer = new Uint8Array(length);
93
- const { bytesRead } = await handle.read(buffer, 0, length, offset);
94
- return buffer.subarray(0, bytesRead);
95
- } finally {
96
- await handle.close();
97
- }
98
- };
91
+ type NodeFileHandle = {
92
+ read(buffer: Uint8Array, offset: number, length: number, position: number): Promise<{ bytesRead: number }>;
93
+ close(): Promise<void>;
94
+ };
95
+
96
+ /**
97
+ * The pixel count of one file, reading only the byte ranges the header walk
98
+ * needs. The file is opened once, on the first read, and closed after the
99
+ * walk, however many ranges it asks for.
100
+ */
101
+ async function filePixelCount(file: FileSystemFileHandle | string): Promise<number | undefined> {
102
+ if (typeof file !== "string") {
103
+ let blob: File | undefined;
104
+ return tiffPixelCountAt(async (offset, length) => {
105
+ blob ??= await file.getFile();
106
+ return new Uint8Array(await blob.slice(offset, offset + length).arrayBuffer());
107
+ });
108
+ }
109
+ let opened: Promise<NodeFileHandle> | undefined;
110
+ const readAt: ReadAt = async (offset, length) => {
111
+ // A variable specifier: the browser build never resolves node:fs.
112
+ const specifier = "node:fs/promises";
113
+ opened ??= import(/* @vite-ignore */ specifier).then(({ open }) => open(file, "r"));
114
+ const buffer = new Uint8Array(length);
115
+ const { bytesRead } = await (await opened).read(buffer, 0, length, offset);
116
+ return buffer.subarray(0, bytesRead);
117
+ };
118
+ try {
119
+ return await tiffPixelCountAt(readAt);
120
+ } finally {
121
+ // An open that failed has nothing to close; the walk already saw the error.
122
+ await opened?.then((h) => h.close(), () => {});
99
123
  }
100
- return async (offset, length) =>
101
- new Uint8Array(await (await file.getFile()).slice(offset, offset + length).arrayBuffer());
102
124
  }
103
125
 
104
126
  /**
@@ -156,7 +178,7 @@ export async function stageFiles(
156
178
  if (inputs.length === 0) return undefined;
157
179
  let total = 0;
158
180
  for (const input of inputs) {
159
- const n = await tiffPixelCountAt(readerFor(input.file));
181
+ const n = await filePixelCount(input.file);
160
182
  if (n === undefined) return undefined;
161
183
  total += n;
162
184
  }