@wasmedia/wimagemagick 0.2.0 → 0.4.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/CHANGELOG.md +88 -1
- package/README.md +16 -1
- package/dist/api.d.ts +4 -0
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +4 -0
- package/dist/api.js.map +1 -1
- package/dist/cli.d.ts +23 -6
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +16 -8
- package/dist/cli.js.map +1 -1
- package/dist/files.d.ts +80 -0
- package/dist/files.d.ts.map +1 -0
- package/dist/files.js +175 -0
- package/dist/files.js.map +1 -0
- package/dist/filesystem.d.ts.map +1 -1
- package/dist/filesystem.js +19 -0
- package/dist/filesystem.js.map +1 -1
- package/dist/image.d.ts +16 -8
- package/dist/image.d.ts.map +1 -1
- package/dist/image.js +38 -12
- package/dist/image.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/licenses/README.txt +3 -3
- package/dist/licenses/aom-LICENSE.txt +1 -1
- package/dist/licenses/de265-LICENSE.txt +1 -1
- package/dist/licenses/ffi-LICENSE.txt +2 -2
- package/dist/licenses/heif-LICENSE.txt +1 -1
- package/dist/licenses/highway-LICENSE.txt +172 -2
- package/dist/licenses/jpeg-turbo-LICENSE.txt +46 -34
- package/dist/licenses/jpeg-xl-LICENSE.txt +1 -1
- package/dist/licenses/lcms-LICENSE.txt +1 -1
- package/dist/licenses/png-LICENSE.txt +1 -1
- package/dist/licenses/tiff-LICENSE.txt +1 -1
- package/dist/licenses/xml-LICENSE.txt +1 -1
- package/dist/licenses/zstd-LICENSE.txt +32 -0
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +2 -0
- package/dist/loader.js.map +1 -1
- package/dist/raw.d.ts +28 -6
- package/dist/raw.d.ts.map +1 -1
- package/dist/raw.js +37 -6
- package/dist/raw.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/wimagemagick.js +2 -15
- package/dist/wimagemagick.wasm +0 -0
- package/dist/wopfs.d.ts +43 -0
- package/dist/wopfs.d.ts.map +1 -0
- package/dist/wopfs.js +40 -0
- package/dist/wopfs.js.map +1 -0
- package/dist/worker-handler.d.ts +1 -1
- package/dist/worker-handler.d.ts.map +1 -1
- package/dist/worker-handler.js +26 -0
- package/dist/worker-handler.js.map +1 -1
- package/package.json +7 -2
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,91 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.4.0] - 2026-10-04
|
|
11
|
+
|
|
12
|
+
### Security
|
|
13
|
+
- Under Node, reading a PDF, PostScript, EPS or SVG file could start programs
|
|
14
|
+
installed on the host (`gs`, `inkscape`, …) through a shell, because
|
|
15
|
+
ImageMagick's external delegates reached Emscripten's `system()`. The build
|
|
16
|
+
now has a `system()` that never runs anything. PDF/PS reads fail as they
|
|
17
|
+
would on a machine without Ghostscript, and SVG uses the built-in renderer.
|
|
18
|
+
Browsers were not affected.
|
|
19
|
+
- The ImageMagick update below brings in the fixes for 173 GitHub security
|
|
20
|
+
advisories (GHSA) published between April and September 2026, several of
|
|
21
|
+
them in the PNG, JPEG, TIFF, JPEG 2000 and SVG readers.
|
|
22
|
+
|
|
23
|
+
### Changed
|
|
24
|
+
- Built from ImageMagick 7.1.2-32 (released 2026-09-27). It was pinned to an
|
|
25
|
+
untagged development commit from 2026-04-04, about 900 commits earlier.
|
|
26
|
+
- A DNG now always decodes through LibRaw, whatever it is called: ImageMagick's
|
|
27
|
+
TIFF coder (since 7.1.2-23) spots the DNGVersion tag and hands the file
|
|
28
|
+
over. The other side of this is that a DNG cannot be read as a plain TIFF
|
|
29
|
+
any more, even with an explicit `TIFF:` prefix: the undemosaiced mosaic and
|
|
30
|
+
the embedded preview are out of reach, and `fromBuffer(dng, 'TIFF')` returns
|
|
31
|
+
a `DNG` image. There is no fallback, so a DNG that LibRaw cannot decode here
|
|
32
|
+
(JPEG XL compression from DNG 1.7, GoPro VC-5), or an ordinary TIFF with a
|
|
33
|
+
stray `DNGVersion` tag, now fails however it is read; on 0.3.0, reading
|
|
34
|
+
either as TIFF returned the embedded image.
|
|
35
|
+
- `-draw "image … 'rose:'"` and other `-draw image` primitives that name a
|
|
36
|
+
built-in image or explicit coder (`xc:red`, `png:/path`) now fail with
|
|
37
|
+
`ExplicitCoderNotAllowed`, and so does an SVG whose `<image>` references one
|
|
38
|
+
(ImageMagick's stricter nested reads). Plain file paths still work. A single
|
|
39
|
+
`-draw` with more than 250 nested `image` reads fails with
|
|
40
|
+
`ImageNestedTooDeeply`.
|
|
41
|
+
- `execute()` and `executeFiles()` read an unprefixed input whose bytes are a
|
|
42
|
+
DNG, and whose name is not a raw extension, as `dng:`. ImageMagick's own
|
|
43
|
+
hand-off from the TIFF coder runs ReadImage twice (`-extract 50%` halved the
|
|
44
|
+
image twice, `-comment '%c+X'` gave `+X+X`, `-verbose` reported twice) and
|
|
45
|
+
first copies the whole file into the wasm heap (a 96 MB DNG grew it from 16
|
|
46
|
+
to 116 MiB). Other raws still go by filename.
|
|
47
|
+
- `toBuffer()`, `toBlob()` and `toDataURL()` with no format, on an image whose
|
|
48
|
+
own format cannot be written (any raw, HEIC, …), now say to pass a format
|
|
49
|
+
instead of only `NoEncodeDelegateForThisImageFormat`.
|
|
50
|
+
|
|
51
|
+
### Added
|
|
52
|
+
- `rotate(degrees, background)`: the colour for the corners a rotation
|
|
53
|
+
uncovers, as any ImageMagick colour string. Also reachable as
|
|
54
|
+
`["rotate", degrees, background]` in a worker `process` message.
|
|
55
|
+
|
|
56
|
+
### Fixed
|
|
57
|
+
- `rotate()` filled the uncovered corners with whatever bytes sat at heap
|
|
58
|
+
address 0 (opaque cyan in 0.3.0), because it passed a null colour. They are
|
|
59
|
+
now transparent unless a background is given.
|
|
60
|
+
- `toDataURL()` labelled JP2, J2K, PNM and other formats
|
|
61
|
+
`application/octet-stream`, which ImageMagick 7.1.2-30+ refuses to read back
|
|
62
|
+
through `inline:`. They now get MIME types that name their coder (`image/jp2`,
|
|
63
|
+
`image/x-j2k`, `image/x-pnm`, `image/x-ppm`, `image/x-pgm`, `image/x-pbm`,
|
|
64
|
+
`image/x-tga`, `image/x-icon`, `image/qoi`, `image/x-psd`), which `toBlob()`
|
|
65
|
+
uses as well.
|
|
66
|
+
- `npm run build:native` failed with "Your local changes … would be
|
|
67
|
+
overwritten by checkout" after changing the ImageMagick pin on a machine
|
|
68
|
+
that had built before; the previous build's regenerated autotools files are
|
|
69
|
+
now discarded before checking out the new commit. A rebuild at the same pin
|
|
70
|
+
leaves the ImageMagick checkout alone, local patches included, and no longer
|
|
71
|
+
needs network access when the pinned commit is already cloned.
|
|
72
|
+
|
|
73
|
+
## [0.3.0] - 2026-10-03
|
|
74
|
+
|
|
75
|
+
### Added
|
|
76
|
+
- File mode: `executeFiles()` (also `wim.executeFiles()` and an
|
|
77
|
+
`executeFiles` worker message) runs a command over files instead of
|
|
78
|
+
buffers, mounting them through `@wasmedia/wopfs` 0.2.0: OPFS file handles
|
|
79
|
+
in a dedicated worker, host paths under Node. Inputs are read in place and
|
|
80
|
+
outputs written straight into `outputDir`, only when the command succeeds.
|
|
81
|
+
On a 24-megapixel TIFF it cuts peak memory from 640 to 315 MiB; the wasm
|
|
82
|
+
heap, and its 4 GiB ceiling, are unchanged. `execute()` and the buffer APIs
|
|
83
|
+
are untouched, and wopfs is loaded only on the first file-mode call.
|
|
84
|
+
- Browser tests (Playwright, Chromium, Firefox and WebKit) for file mode,
|
|
85
|
+
run in CI as `test-browser`; releases wait for them.
|
|
86
|
+
|
|
87
|
+
### Changed
|
|
88
|
+
- Built with emsdk 6.0.6 (was 4.0.7) against ImageMagick's newest dependency
|
|
89
|
+
bundle (2026.09.26, was 2026.04.04), which is built with 6.0.6 and does not
|
|
90
|
+
link on any other major version. Delegate libraries move up with it, LibRaw
|
|
91
|
+
goes from 0.22.0 to 0.22.2, and `zstd` is now a delegate (the bundle's
|
|
92
|
+
libtiff needs it, so ZSTD-compressed TIFFs read and write). The `.wasm` grows
|
|
93
|
+
from 13.8 MB to 14.7 MB (5.1 MB gzipped).
|
|
94
|
+
|
|
10
95
|
## [0.2.0] - 2026-10-03
|
|
11
96
|
|
|
12
97
|
First release published to npm, as `@wasmedia/wimagemagick`.
|
|
@@ -226,5 +311,7 @@ First release published to npm, as `@wasmedia/wimagemagick`.
|
|
|
226
311
|
- Convenience C wrappers exported from the WASM module:
|
|
227
312
|
`wimagemagick_identify`, `wimagemagick_convert`, `wimagemagick_resize`.
|
|
228
313
|
|
|
229
|
-
[Unreleased]: https://gitlab.com/wasmedia/wimagemagick/-/compare/v0.
|
|
314
|
+
[Unreleased]: https://gitlab.com/wasmedia/wimagemagick/-/compare/v0.4.0...HEAD
|
|
315
|
+
[0.4.0]: https://gitlab.com/wasmedia/wimagemagick/-/compare/v0.3.0...v0.4.0
|
|
316
|
+
[0.3.0]: https://gitlab.com/wasmedia/wimagemagick/-/compare/v0.2.0...v0.3.0
|
|
230
317
|
[0.2.0]: https://gitlab.com/wasmedia/wimagemagick/-/tags/v0.2.0
|
package/README.md
CHANGED
|
@@ -23,7 +23,7 @@ const jpeg = img.fit(1600, 1600).quality(85).toBuffer('JPEG');
|
|
|
23
23
|
img.dispose();
|
|
24
24
|
```
|
|
25
25
|
|
|
26
|
-
The package ships the `.wasm` (about
|
|
26
|
+
The package ships the `.wasm` (about 15 MB, 5 MB gzipped) next to its JS, and
|
|
27
27
|
loads it relative to the module, so a bundler that copies assets referenced by
|
|
28
28
|
`new URL(..., import.meta.url)` needs no configuration. [docs/api.md](docs/api.md)
|
|
29
29
|
has the full API, including the Web Worker entry
|
|
@@ -32,6 +32,21 @@ several LGPL libraries; their licences are in `dist/licenses/`.
|
|
|
32
32
|
|
|
33
33
|
Try it without installing at [magick.wasmedia.org](https://magick.wasmedia.org/).
|
|
34
34
|
|
|
35
|
+
### File mode
|
|
36
|
+
|
|
37
|
+
`executeFiles()` runs a command over files instead of buffers: OPFS file
|
|
38
|
+
handles in a Web Worker, host paths under Node. The files are mounted through
|
|
39
|
+
[wopfs](https://gitlab.com/wasmedia/wopfs) rather than copied into memory, which
|
|
40
|
+
halves peak memory on a large image (640 → 315 MiB on a 24-megapixel TIFF):
|
|
41
|
+
|
|
42
|
+
```typescript
|
|
43
|
+
const r = await wim.executeFiles('shot.cr2 -resize 50% shot.jpg',
|
|
44
|
+
[{ name: 'shot.cr2', file: fileHandle }], { outputDir: dirHandle });
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
See [File mode](docs/api.md#file-mode-inputs-and-outputs-that-stay-in-files).
|
|
48
|
+
wopfs (MIT) is loaded only when file mode is first used.
|
|
49
|
+
|
|
35
50
|
## Format & Feature Scope
|
|
36
51
|
|
|
37
52
|
- **Excluded:** Ghostscript-based features (PDF rendering), FFmpeg-based features (video)
|
package/dist/api.d.ts
CHANGED
|
@@ -11,6 +11,10 @@ export interface MagickBindings {
|
|
|
11
11
|
NewMagickWand(): number;
|
|
12
12
|
DestroyMagickWand(wand: number): number;
|
|
13
13
|
CloneMagickWand(wand: number): number;
|
|
14
|
+
NewPixelWand(): number;
|
|
15
|
+
DestroyPixelWand(wand: number): number;
|
|
16
|
+
/** Set a colour from any ImageMagick colour string; false if unparseable. */
|
|
17
|
+
PixelSetColor(wand: number, color: string): number;
|
|
14
18
|
MagickReadImage(wand: number, filename: string): number;
|
|
15
19
|
MagickWriteImage(wand: number, filename: string): number;
|
|
16
20
|
MagickReadImageBlob(wand: number, blob: number, length: number): number;
|
package/dist/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
package/dist/api.js
CHANGED
|
@@ -14,6 +14,10 @@ export function createBindings(module) {
|
|
|
14
14
|
NewMagickWand: w("NewMagickWand", "number", []),
|
|
15
15
|
DestroyMagickWand: w("DestroyMagickWand", "number", ["number"]),
|
|
16
16
|
CloneMagickWand: w("CloneMagickWand", "number", ["number"]),
|
|
17
|
+
// Pixel wands
|
|
18
|
+
NewPixelWand: w("NewPixelWand", "number", []),
|
|
19
|
+
DestroyPixelWand: w("DestroyPixelWand", "number", ["number"]),
|
|
20
|
+
PixelSetColor: w("PixelSetColor", "number", ["number", "string"]),
|
|
17
21
|
// Read/Write
|
|
18
22
|
MagickReadImage: w("MagickReadImage", "number", ["number", "string"]),
|
|
19
23
|
MagickWriteImage: w("MagickWriteImage", "number", ["number", "string"]),
|
package/dist/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
CHANGED
|
@@ -7,6 +7,23 @@
|
|
|
7
7
|
import type { WasmModule, CLIResult } from "./types.js";
|
|
8
8
|
/** Build the `print`/`printErr` pair the loader passes to the WASM factory. */
|
|
9
9
|
export declare function createOutputHooks(): Pick<WasmModule, "print" | "printErr">;
|
|
10
|
+
/** Run `fn` with module output redirected into strings. */
|
|
11
|
+
export declare function captureOutput<T>(fn: () => T): {
|
|
12
|
+
value: T;
|
|
13
|
+
stdout: string;
|
|
14
|
+
stderr: string;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Resolve one argument against the working directory, keeping any explicit
|
|
18
|
+
* `FORMAT:` prefix in place.
|
|
19
|
+
*
|
|
20
|
+
* The prefix matters for more than tidiness: most raw formats are registered
|
|
21
|
+
* with `ExplicitFormatType`, so ImageMagick will not pick LibRaw from a file's
|
|
22
|
+
* magic bytes — a CR2 or NEF is a TIFF at that level and the TIFF coder claims
|
|
23
|
+
* it. `cr2:capture` is how the caller says otherwise. An unprefixed input
|
|
24
|
+
* listed in `hints` gets that prefix (see {@link inputFormatHint}).
|
|
25
|
+
*/
|
|
26
|
+
export declare function rewriteArg(arg: string, inputNames: Set<string>, workDir: string, hints?: ReadonlyMap<string, string>): string;
|
|
10
27
|
/**
|
|
11
28
|
* Parse a command string into an argv array, respecting quoted strings.
|
|
12
29
|
*
|
|
@@ -37,12 +54,12 @@ export interface IdentifyOptions {
|
|
|
37
54
|
/**
|
|
38
55
|
* Format to read the data as, e.g. `"DNG"` or `"CR2"`.
|
|
39
56
|
*
|
|
40
|
-
*
|
|
41
|
-
* `ExplicitFormatType`,
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
* is detected by ImageMagick itself.
|
|
57
|
+
* Mostly the raw camera formats need it. Their coder is registered with
|
|
58
|
+
* `ExplicitFormatType`, and apart from DNG and a few fixed-header formats
|
|
59
|
+
* (CR3, RAF, …) ImageMagick does not select it from a file's contents — most
|
|
60
|
+
* raws are TIFF containers, and without a hint the TIFF coder claims them.
|
|
61
|
+
* When omitted, the raws {@link detectRawFormat} recognises are supplied
|
|
62
|
+
* automatically; everything else is detected by ImageMagick itself.
|
|
46
63
|
*/
|
|
47
64
|
format?: string;
|
|
48
65
|
}
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AA4BxD,+EAA+E;AAC/E,wBAAgB,iBAAiB,IAAI,IAAI,CAAC,UAAU,EAAE,OAAO,GAAG,UAAU,CAAC,CAW1E;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AA4BxD,+EAA+E;AAC/E,wBAAgB,iBAAiB,IAAI,IAAI,CAAC,UAAU,EAAE,OAAO,GAAG,UAAU,CAAC,CAW1E;AAED,2DAA2D;AAC3D,wBAAgB,aAAa,CAAC,CAAC,EAC7B,EAAE,EAAE,MAAM,CAAC,GACV;IAAE,KAAK,EAAE,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAc9C;AAqED;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,EACvB,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAClC,MAAM,CAYR;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAiCtD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,OAAO,CACrB,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,GAAG,WAAW,CAAC,GACjD,SAAS,CAkDX;AAED,oCAAoC;AACpC,MAAM,WAAW,eAAe;IAC9B,gFAAgF;IAChF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;;;;OASG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,QAAQ,CACtB,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,UAAU,GAAG,WAAW,EAC9B,OAAO,GAAE,OAAO,GAAG,eAAuB,GACzC,MAAM,CAwBR"}
|
package/dist/cli.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Uses IM7 syntax: callMain(['input.png', '-resize', '50%', 'output.jpg'])
|
|
6
6
|
*/
|
|
7
7
|
import { createWorkDir, cleanWorkDir, writeToMemFS, readFromMemFS, existsInMemFS, readFilesFromMemFS, } from "./filesystem.js";
|
|
8
|
-
import { detectRawFormat } from "./raw.js";
|
|
8
|
+
import { HINT_HEADER_BYTES, detectRawFormat, inputFormatHint } from "./raw.js";
|
|
9
9
|
let activeSink = null;
|
|
10
10
|
/** Build the `print`/`printErr` pair the loader passes to the WASM factory. */
|
|
11
11
|
export function createOutputHooks() {
|
|
@@ -25,7 +25,7 @@ export function createOutputHooks() {
|
|
|
25
25
|
};
|
|
26
26
|
}
|
|
27
27
|
/** Run `fn` with module output redirected into strings. */
|
|
28
|
-
function captureOutput(fn) {
|
|
28
|
+
export function captureOutput(fn) {
|
|
29
29
|
const previous = activeSink;
|
|
30
30
|
const sink = { stdout: [], stderr: [] };
|
|
31
31
|
activeSink = sink;
|
|
@@ -113,12 +113,13 @@ function isWorkDirFile(arg, inputNames) {
|
|
|
113
113
|
* Resolve one argument against the working directory, keeping any explicit
|
|
114
114
|
* `FORMAT:` prefix in place.
|
|
115
115
|
*
|
|
116
|
-
* The prefix matters for more than tidiness:
|
|
116
|
+
* The prefix matters for more than tidiness: most raw formats are registered
|
|
117
117
|
* with `ExplicitFormatType`, so ImageMagick will not pick LibRaw from a file's
|
|
118
|
-
* magic bytes — a
|
|
119
|
-
* it. `
|
|
118
|
+
* magic bytes — a CR2 or NEF is a TIFF at that level and the TIFF coder claims
|
|
119
|
+
* it. `cr2:capture` is how the caller says otherwise. An unprefixed input
|
|
120
|
+
* listed in `hints` gets that prefix (see {@link inputFormatHint}).
|
|
120
121
|
*/
|
|
121
|
-
function rewriteArg(arg, inputNames, workDir) {
|
|
122
|
+
export function rewriteArg(arg, inputNames, workDir, hints) {
|
|
122
123
|
const split = splitFormatPrefix(arg);
|
|
123
124
|
if (split !== null) {
|
|
124
125
|
const { prefix, rest } = split;
|
|
@@ -130,7 +131,10 @@ function rewriteArg(arg, inputNames, workDir) {
|
|
|
130
131
|
return arg;
|
|
131
132
|
return `${prefix}:${workDir}/${rest}`;
|
|
132
133
|
}
|
|
133
|
-
|
|
134
|
+
if (!isWorkDirFile(arg, inputNames))
|
|
135
|
+
return arg;
|
|
136
|
+
const hint = hints?.get(arg);
|
|
137
|
+
return hint ? `${hint}:${workDir}/${arg}` : `${workDir}/${arg}`;
|
|
134
138
|
}
|
|
135
139
|
/**
|
|
136
140
|
* Parse a command string into an argv array, respecting quoted strings.
|
|
@@ -192,16 +196,20 @@ export function execute(module, command, inputFiles) {
|
|
|
192
196
|
const workDir = createWorkDir(module);
|
|
193
197
|
// Track input filenames so we can identify output files later
|
|
194
198
|
const inputNames = new Set();
|
|
199
|
+
const hints = new Map();
|
|
195
200
|
// Write input files to MEMFS
|
|
196
201
|
if (inputFiles) {
|
|
197
202
|
for (const [name, data] of inputFiles) {
|
|
198
203
|
inputNames.add(name);
|
|
199
204
|
const bytes = data instanceof ArrayBuffer ? new Uint8Array(data) : data;
|
|
200
205
|
writeToMemFS(module, `${workDir}/${name}`, bytes);
|
|
206
|
+
const hint = inputFormatHint(name, bytes.subarray(0, HINT_HEADER_BYTES));
|
|
207
|
+
if (hint)
|
|
208
|
+
hints.set(name, hint);
|
|
201
209
|
}
|
|
202
210
|
}
|
|
203
211
|
// Rewrite filename arguments to workDir paths
|
|
204
|
-
const rewrittenArgs = args.map((arg) => rewriteArg(arg, inputNames, workDir));
|
|
212
|
+
const rewrittenArgs = args.map((arg) => rewriteArg(arg, inputNames, workDir, hints));
|
|
205
213
|
// Execute with output captured
|
|
206
214
|
let exitCode;
|
|
207
215
|
let stdout = "";
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,aAAa,EACb,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/files.d.ts
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File mode: run a command whose inputs and outputs stay in files.
|
|
3
|
+
*
|
|
4
|
+
* {@link execute} copies every input into MEMFS and reads every output back
|
|
5
|
+
* into a Uint8Array, so a run holds each file in JS memory at least twice.
|
|
6
|
+
* {@link executeFiles} mounts the files into the module through
|
|
7
|
+
* [wopfs](https://gitlab.com/wasmedia/wopfs) instead: OPFS files in a
|
|
8
|
+
* dedicated worker, host files under Node. The wasm heap is unchanged — what
|
|
9
|
+
* ImageMagick decodes into its pixel cache still lives there — but the
|
|
10
|
+
* encoded inputs and outputs no longer sit in memory beside it.
|
|
11
|
+
*/
|
|
12
|
+
import type { WasmModule } from "./types.js";
|
|
13
|
+
/** An input for file mode: an OPFS file handle, or a host path under Node. */
|
|
14
|
+
export interface FileInput {
|
|
15
|
+
/** The name the command uses for it, e.g. `"photo.cr2"`. */
|
|
16
|
+
name: string;
|
|
17
|
+
file: FileSystemFileHandle | string;
|
|
18
|
+
}
|
|
19
|
+
/** Where outputs land: an OPFS directory handle, or a host directory path. */
|
|
20
|
+
export type OutputDir = FileSystemDirectoryHandle | string;
|
|
21
|
+
/** An output file mode wrote. */
|
|
22
|
+
export interface WrittenFile {
|
|
23
|
+
/** Its path relative to `outputDir`, as the command named it. */
|
|
24
|
+
name: string;
|
|
25
|
+
/** The file in `outputDir`: a handle in the browser, a host path under Node. */
|
|
26
|
+
file: FileSystemFileHandle | string;
|
|
27
|
+
size: number;
|
|
28
|
+
}
|
|
29
|
+
export interface ExecuteFilesOptions {
|
|
30
|
+
/** Required: where the files the command creates are written. */
|
|
31
|
+
outputDir: OutputDir;
|
|
32
|
+
/**
|
|
33
|
+
* How many files the command may create before wopfs holds further ones in
|
|
34
|
+
* memory. Defaults to the number of output filenames in the command plus 8,
|
|
35
|
+
* which covers `%d` frame sequences and `+adjoin` of short animations; raise
|
|
36
|
+
* it for longer ones.
|
|
37
|
+
*/
|
|
38
|
+
scratch?: number;
|
|
39
|
+
/**
|
|
40
|
+
* Where to import wopfs from. The default, `"@wasmedia/wopfs"`, works under
|
|
41
|
+
* Node and with a bundler; a page loaded without one passes the URL of
|
|
42
|
+
* wopfs's `dist/index.js`.
|
|
43
|
+
*/
|
|
44
|
+
wopfsPath?: string;
|
|
45
|
+
/** Receives wopfs's warnings (pool exhausted, OPFS fallback). Default console.warn. */
|
|
46
|
+
onWarning?: (message: string) => void;
|
|
47
|
+
}
|
|
48
|
+
export interface CLIFileResult {
|
|
49
|
+
exitCode: number;
|
|
50
|
+
stdout: string;
|
|
51
|
+
stderr: string;
|
|
52
|
+
/** Outputs by name. Empty unless the command exited 0. */
|
|
53
|
+
written: Map<string, WrittenFile>;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Run an ImageMagick command over files, without copying them into memory.
|
|
57
|
+
*
|
|
58
|
+
* Filenames in the command are resolved the way {@link execute} resolves
|
|
59
|
+
* them: input names refer to `inputs`, and any other `name.ext` argument is an
|
|
60
|
+
* output, written to `outputDir` when the command succeeds. Inputs are never
|
|
61
|
+
* modified.
|
|
62
|
+
*
|
|
63
|
+
* Where it runs:
|
|
64
|
+
* - **Dedicated worker** with OPFS: `FileSystemFileHandle` inputs are read in
|
|
65
|
+
* place, and outputs are written into a `FileSystemDirectoryHandle`.
|
|
66
|
+
* - **Node**: inputs are host paths, `outputDir` a host directory.
|
|
67
|
+
* - **Main thread**: there is no synchronous OPFS access, so wopfs falls back
|
|
68
|
+
* to copying (MEMFS) and outputs are written to `outputDir` afterwards. It
|
|
69
|
+
* works, but saves nothing.
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```typescript
|
|
73
|
+
* // In a worker: an OPFS file in, an OPFS directory out.
|
|
74
|
+
* const r = await executeFiles(module, 'shot.cr2 -auto-orient -resize 50% shot.jpg',
|
|
75
|
+
* [{ name: 'shot.cr2', file: handle }], { outputDir: dir });
|
|
76
|
+
* r.written.get('shot.jpg'); // { name, file: FileSystemFileHandle, size }
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
export declare function executeFiles(module: WasmModule, command: string | string[], inputs: FileInput[], options: ExecuteFilesOptions): Promise<CLIFileResult>;
|
|
80
|
+
//# sourceMappingURL=files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,8EAA8E;AAC9E,MAAM,WAAW,SAAS;IACxB,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,oBAAoB,GAAG,MAAM,CAAC;CACrC;AAED,8EAA8E;AAC9E,MAAM,MAAM,SAAS,GAAG,yBAAyB,GAAG,MAAM,CAAC;AAE3D,iCAAiC;AACjC,MAAM,WAAW,WAAW;IAC1B,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,gFAAgF;IAChF,IAAI,EAAE,oBAAoB,GAAG,MAAM,CAAC;IACpC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,iEAAiE;IACjE,SAAS,EAAE,SAAS,CAAC;IACrB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uFAAuF;IACvF,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACnC;AAKD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,MAAM,EAAE,SAAS,EAAE,EACnB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,aAAa,CAAC,CA2ExB"}
|
package/dist/files.js
ADDED
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File mode: run a command whose inputs and outputs stay in files.
|
|
3
|
+
*
|
|
4
|
+
* {@link execute} copies every input into MEMFS and reads every output back
|
|
5
|
+
* into a Uint8Array, so a run holds each file in JS memory at least twice.
|
|
6
|
+
* {@link executeFiles} mounts the files into the module through
|
|
7
|
+
* [wopfs](https://gitlab.com/wasmedia/wopfs) instead: OPFS files in a
|
|
8
|
+
* dedicated worker, host files under Node. The wasm heap is unchanged — what
|
|
9
|
+
* ImageMagick decodes into its pixel cache still lives there — but the
|
|
10
|
+
* encoded inputs and outputs no longer sit in memory beside it.
|
|
11
|
+
*/
|
|
12
|
+
import { captureOutput, parseCommand, rewriteArg } from "./cli.js";
|
|
13
|
+
import { HINT_HEADER_BYTES, inputFormatHint } from "./raw.js";
|
|
14
|
+
import { loadWopfs } from "./wopfs.js";
|
|
15
|
+
const HEADROOM = 8;
|
|
16
|
+
let mountCounter = 0;
|
|
17
|
+
/**
|
|
18
|
+
* Run an ImageMagick command over files, without copying them into memory.
|
|
19
|
+
*
|
|
20
|
+
* Filenames in the command are resolved the way {@link execute} resolves
|
|
21
|
+
* them: input names refer to `inputs`, and any other `name.ext` argument is an
|
|
22
|
+
* output, written to `outputDir` when the command succeeds. Inputs are never
|
|
23
|
+
* modified.
|
|
24
|
+
*
|
|
25
|
+
* Where it runs:
|
|
26
|
+
* - **Dedicated worker** with OPFS: `FileSystemFileHandle` inputs are read in
|
|
27
|
+
* place, and outputs are written into a `FileSystemDirectoryHandle`.
|
|
28
|
+
* - **Node**: inputs are host paths, `outputDir` a host directory.
|
|
29
|
+
* - **Main thread**: there is no synchronous OPFS access, so wopfs falls back
|
|
30
|
+
* to copying (MEMFS) and outputs are written to `outputDir` afterwards. It
|
|
31
|
+
* works, but saves nothing.
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```typescript
|
|
35
|
+
* // In a worker: an OPFS file in, an OPFS directory out.
|
|
36
|
+
* const r = await executeFiles(module, 'shot.cr2 -auto-orient -resize 50% shot.jpg',
|
|
37
|
+
* [{ name: 'shot.cr2', file: handle }], { outputDir: dir });
|
|
38
|
+
* r.written.get('shot.jpg'); // { name, file: FileSystemFileHandle, size }
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export async function executeFiles(module, command, inputs, options) {
|
|
42
|
+
if (!options?.outputDir) {
|
|
43
|
+
throw new Error("executeFiles needs options.outputDir");
|
|
44
|
+
}
|
|
45
|
+
const names = new Set();
|
|
46
|
+
for (const input of inputs) {
|
|
47
|
+
if (names.has(input.name)) {
|
|
48
|
+
throw new Error(`executeFiles: input "${input.name}" is listed twice`);
|
|
49
|
+
}
|
|
50
|
+
names.add(input.name);
|
|
51
|
+
}
|
|
52
|
+
const args = typeof command === "string" ? parseCommand(command) : command;
|
|
53
|
+
const mountpoint = `/files_${++mountCounter}_${Date.now()}`;
|
|
54
|
+
const hints = new Map();
|
|
55
|
+
for (const input of inputs) {
|
|
56
|
+
const header = await readHeader(input.file);
|
|
57
|
+
const hint = header && inputFormatHint(input.name, header);
|
|
58
|
+
if (hint)
|
|
59
|
+
hints.set(input.name, hint);
|
|
60
|
+
}
|
|
61
|
+
const rewritten = args.map((arg) => rewriteArg(arg, names, mountpoint, hints));
|
|
62
|
+
const outputs = args.filter((arg, i) => rewritten[i] !== arg && !names.has(stripPrefix(arg))).length;
|
|
63
|
+
const wopfs = await loadWopfs(options.wopfsPath);
|
|
64
|
+
const mount = await wopfs.mountFiles(module, mountpoint, {
|
|
65
|
+
inputs: Object.fromEntries(inputs.map((i) => [i.name, i.file])),
|
|
66
|
+
outputDir: options.outputDir,
|
|
67
|
+
scratch: options.scratch ?? outputs + HEADROOM,
|
|
68
|
+
onExhausted: "spill",
|
|
69
|
+
onWarning: options.onWarning,
|
|
70
|
+
});
|
|
71
|
+
let exitCode;
|
|
72
|
+
let stdout = "";
|
|
73
|
+
let stderr = "";
|
|
74
|
+
const written = new Map();
|
|
75
|
+
// Set when the run or the commit fails, so a release() error never hides it.
|
|
76
|
+
let failed = false;
|
|
77
|
+
try {
|
|
78
|
+
try {
|
|
79
|
+
const run = captureOutput(() => module.callMain(rewritten));
|
|
80
|
+
exitCode = run.value;
|
|
81
|
+
stdout = run.stdout;
|
|
82
|
+
stderr = run.stderr;
|
|
83
|
+
}
|
|
84
|
+
catch (e) {
|
|
85
|
+
exitCode = 1;
|
|
86
|
+
stderr += `Exception: ${e}\n`;
|
|
87
|
+
}
|
|
88
|
+
// A failed command may leave a truncated output behind; only a
|
|
89
|
+
// successful run is committed.
|
|
90
|
+
if (exitCode === 0) {
|
|
91
|
+
for (const file of await mount.commit()) {
|
|
92
|
+
const out = await toWrittenFile(file, options.outputDir);
|
|
93
|
+
written.set(out.name, out);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
catch (e) {
|
|
98
|
+
failed = true;
|
|
99
|
+
throw e;
|
|
100
|
+
}
|
|
101
|
+
finally {
|
|
102
|
+
try {
|
|
103
|
+
await mount.release();
|
|
104
|
+
}
|
|
105
|
+
catch (e) {
|
|
106
|
+
if (!failed)
|
|
107
|
+
throw e;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return {
|
|
111
|
+
exitCode,
|
|
112
|
+
stdout: stdout.trimEnd(),
|
|
113
|
+
stderr: stderr.trimEnd(),
|
|
114
|
+
written,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* The first bytes of an input, for {@link inputFormatHint}, or `undefined` if
|
|
119
|
+
* they cannot be read; ImageMagick then reports the problem when it opens it.
|
|
120
|
+
*/
|
|
121
|
+
async function readHeader(file) {
|
|
122
|
+
try {
|
|
123
|
+
if (typeof file === "string") {
|
|
124
|
+
const { open } = await import("node:fs/promises");
|
|
125
|
+
const handle = await open(file, "r");
|
|
126
|
+
try {
|
|
127
|
+
const buffer = new Uint8Array(HINT_HEADER_BYTES);
|
|
128
|
+
const { bytesRead } = await handle.read(buffer, 0, buffer.length, 0);
|
|
129
|
+
return buffer.subarray(0, bytesRead);
|
|
130
|
+
}
|
|
131
|
+
finally {
|
|
132
|
+
await handle.close();
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
const blob = await file.getFile();
|
|
136
|
+
return new Uint8Array(await blob.slice(0, HINT_HEADER_BYTES).arrayBuffer());
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
return undefined;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/** `png:out.png` → `out.png`; anything without a format prefix is unchanged. */
|
|
143
|
+
function stripPrefix(arg) {
|
|
144
|
+
const m = /^[A-Za-z][A-Za-z0-9+-]*:(.+)$/.exec(arg);
|
|
145
|
+
return m ? m[1] : arg;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Turn what wopfs committed into a {@link WrittenFile}. The opfs and node
|
|
149
|
+
* backends have already put the file in outputDir; the memfs fallback (main
|
|
150
|
+
* thread) hands back bytes, which are written there now.
|
|
151
|
+
*/
|
|
152
|
+
async function toWrittenFile(file, outputDir) {
|
|
153
|
+
if (file.handle)
|
|
154
|
+
return { name: file.path, file: file.handle, size: file.size };
|
|
155
|
+
if (file.hostPath)
|
|
156
|
+
return { name: file.path, file: file.hostPath, size: file.size };
|
|
157
|
+
if (file.bytes && typeof outputDir !== "string") {
|
|
158
|
+
const parts = file.path.split("/");
|
|
159
|
+
const leaf = parts.pop();
|
|
160
|
+
let dir = outputDir;
|
|
161
|
+
for (const part of parts)
|
|
162
|
+
dir = await dir.getDirectoryHandle(part, { create: true });
|
|
163
|
+
const handle = await dir.getFileHandle(leaf, { create: true });
|
|
164
|
+
if (typeof handle.createWritable !== "function") {
|
|
165
|
+
throw new Error("executeFiles on the main thread needs FileSystemFileHandle.createWritable " +
|
|
166
|
+
"to write outputs; run it in a dedicated worker instead");
|
|
167
|
+
}
|
|
168
|
+
const writable = await handle.createWritable();
|
|
169
|
+
await writable.write(file.bytes);
|
|
170
|
+
await writable.close();
|
|
171
|
+
return { name: file.path, file: handle, size: file.size };
|
|
172
|
+
}
|
|
173
|
+
throw new Error(`executeFiles: wopfs committed "${file.path}" with nowhere to put it`);
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"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"}
|