@wasmedia/wimagemagick 0.2.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 +230 -0
- package/LICENSE +199 -0
- package/README.md +75 -0
- package/dist/api.d.ts +68 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +218 -0
- package/dist/api.js.map +1 -0
- package/dist/cli.d.ts +71 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +273 -0
- package/dist/cli.js.map +1 -0
- package/dist/filesystem.d.ts +37 -0
- package/dist/filesystem.d.ts.map +1 -0
- package/dist/filesystem.js +141 -0
- package/dist/filesystem.js.map +1 -0
- package/dist/image.d.ts +125 -0
- package/dist/image.d.ts.map +1 -0
- package/dist/image.js +426 -0
- package/dist/image.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +34 -0
- package/dist/index.js.map +1 -0
- package/dist/licenses/README.txt +11 -0
- package/dist/licenses/aom-LICENSE.txt +28 -0
- package/dist/licenses/brotli-LICENSE.txt +21 -0
- package/dist/licenses/de265-LICENSE.txt +873 -0
- package/dist/licenses/ffi-LICENSE.txt +23 -0
- package/dist/licenses/freetype-LICENSE.txt +171 -0
- package/dist/licenses/glib-LICENSE.txt +504 -0
- package/dist/licenses/heif-LICENSE.txt +873 -0
- package/dist/licenses/highway-LICENSE.txt +203 -0
- package/dist/licenses/imagemagick-LICENSE.txt +106 -0
- package/dist/licenses/imagemagick-NOTICE.txt +240 -0
- package/dist/licenses/jpeg-turbo-LICENSE.txt +137 -0
- package/dist/licenses/jpeg-xl-LICENSE.txt +29 -0
- package/dist/licenses/lcms-LICENSE.txt +24 -0
- package/dist/licenses/libraw-COPYRIGHT.txt +27 -0
- package/dist/licenses/libraw-LICENSE.CDDL.txt +340 -0
- package/dist/licenses/libraw-LICENSE.LGPL.txt +458 -0
- package/dist/licenses/lqr-LICENSE.txt +167 -0
- package/dist/licenses/openjpeg-LICENSE.txt +41 -0
- package/dist/licenses/png-LICENSE.txt +136 -0
- package/dist/licenses/tiff-LICENSE.txt +51 -0
- package/dist/licenses/webp-LICENSE.txt +31 -0
- package/dist/licenses/xml-LICENSE.txt +26 -0
- package/dist/licenses/zlib-LICENSE.txt +24 -0
- package/dist/loader.d.ts +25 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +50 -0
- package/dist/loader.js.map +1 -0
- package/dist/raw.d.ts +39 -0
- package/dist/raw.d.ts.map +1 -0
- package/dist/raw.js +151 -0
- package/dist/raw.js.map +1 -0
- package/dist/types.d.ts +164 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +94 -0
- package/dist/types.js.map +1 -0
- package/dist/wimagemagick.js +15 -0
- package/dist/wimagemagick.wasm +0 -0
- package/dist/worker-handler.d.ts +46 -0
- package/dist/worker-handler.d.ts.map +1 -0
- package/dist/worker-handler.js +165 -0
- package/dist/worker-handler.js.map +1 -0
- package/dist/worker.d.ts +14 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +19 -0
- package/dist/worker.js.map +1 -0
- package/package.json +51 -0
package/dist/api.js
ADDED
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MagickWand C API bindings via Emscripten cwrap.
|
|
3
|
+
*
|
|
4
|
+
* Provides typed wrappers around all exported MagickWand functions.
|
|
5
|
+
* For direct, low-level access to ImageMagick's C API from JavaScript.
|
|
6
|
+
*/
|
|
7
|
+
/** Create typed bindings for all exported MagickWand C functions. */
|
|
8
|
+
export function createBindings(module) {
|
|
9
|
+
const w = (name, ret, args) => module.cwrap(name, ret, args);
|
|
10
|
+
return {
|
|
11
|
+
// Lifecycle
|
|
12
|
+
MagickWandGenesis: w("MagickWandGenesis", null, []),
|
|
13
|
+
MagickWandTerminus: w("MagickWandTerminus", null, []),
|
|
14
|
+
NewMagickWand: w("NewMagickWand", "number", []),
|
|
15
|
+
DestroyMagickWand: w("DestroyMagickWand", "number", ["number"]),
|
|
16
|
+
CloneMagickWand: w("CloneMagickWand", "number", ["number"]),
|
|
17
|
+
// Read/Write
|
|
18
|
+
MagickReadImage: w("MagickReadImage", "number", ["number", "string"]),
|
|
19
|
+
MagickWriteImage: w("MagickWriteImage", "number", ["number", "string"]),
|
|
20
|
+
MagickReadImageBlob: w("MagickReadImageBlob", "number", [
|
|
21
|
+
"number",
|
|
22
|
+
"number",
|
|
23
|
+
"number",
|
|
24
|
+
]),
|
|
25
|
+
MagickGetImageBlob: w("MagickGetImageBlob", "number", [
|
|
26
|
+
"number",
|
|
27
|
+
"number",
|
|
28
|
+
]),
|
|
29
|
+
// Memory
|
|
30
|
+
MagickRelinquishMemory: w("MagickRelinquishMemory", "number", ["number"]),
|
|
31
|
+
// Dimensions
|
|
32
|
+
MagickGetImageWidth: w("MagickGetImageWidth", "number", ["number"]),
|
|
33
|
+
MagickGetImageHeight: w("MagickGetImageHeight", "number", ["number"]),
|
|
34
|
+
// Format
|
|
35
|
+
MagickGetImageFormat: w("MagickGetImageFormat", "string", [
|
|
36
|
+
"number",
|
|
37
|
+
]),
|
|
38
|
+
MagickSetImageFormat: w("MagickSetImageFormat", "number", [
|
|
39
|
+
"number",
|
|
40
|
+
"string",
|
|
41
|
+
]),
|
|
42
|
+
// Resize
|
|
43
|
+
MagickResizeImage: w("MagickResizeImage", "number", [
|
|
44
|
+
"number",
|
|
45
|
+
"number",
|
|
46
|
+
"number",
|
|
47
|
+
"number",
|
|
48
|
+
]),
|
|
49
|
+
MagickAdaptiveResizeImage: w("MagickAdaptiveResizeImage", "number", [
|
|
50
|
+
"number",
|
|
51
|
+
"number",
|
|
52
|
+
"number",
|
|
53
|
+
]),
|
|
54
|
+
MagickThumbnailImage: w("MagickThumbnailImage", "number", [
|
|
55
|
+
"number",
|
|
56
|
+
"number",
|
|
57
|
+
"number",
|
|
58
|
+
]),
|
|
59
|
+
// Crop/Extent
|
|
60
|
+
MagickCropImage: w("MagickCropImage", "number", [
|
|
61
|
+
"number",
|
|
62
|
+
"number",
|
|
63
|
+
"number",
|
|
64
|
+
"number",
|
|
65
|
+
"number",
|
|
66
|
+
]),
|
|
67
|
+
MagickExtentImage: w("MagickExtentImage", "number", [
|
|
68
|
+
"number",
|
|
69
|
+
"number",
|
|
70
|
+
"number",
|
|
71
|
+
"number",
|
|
72
|
+
"number",
|
|
73
|
+
]),
|
|
74
|
+
// Transform
|
|
75
|
+
MagickRotateImage: w("MagickRotateImage", "number", [
|
|
76
|
+
"number",
|
|
77
|
+
"number",
|
|
78
|
+
"number",
|
|
79
|
+
]),
|
|
80
|
+
MagickFlipImage: w("MagickFlipImage", "number", ["number"]),
|
|
81
|
+
MagickFlopImage: w("MagickFlopImage", "number", ["number"]),
|
|
82
|
+
MagickTransposeImage: w("MagickTransposeImage", "number", ["number"]),
|
|
83
|
+
MagickTransverseImage: w("MagickTransverseImage", "number", ["number"]),
|
|
84
|
+
// Filters
|
|
85
|
+
MagickBlurImage: w("MagickBlurImage", "number", [
|
|
86
|
+
"number",
|
|
87
|
+
"number",
|
|
88
|
+
"number",
|
|
89
|
+
]),
|
|
90
|
+
MagickGaussianBlurImage: w("MagickGaussianBlurImage", "number", [
|
|
91
|
+
"number",
|
|
92
|
+
"number",
|
|
93
|
+
"number",
|
|
94
|
+
]),
|
|
95
|
+
MagickSharpenImage: w("MagickSharpenImage", "number", [
|
|
96
|
+
"number",
|
|
97
|
+
"number",
|
|
98
|
+
"number",
|
|
99
|
+
]),
|
|
100
|
+
MagickUnsharpMaskImage: w("MagickUnsharpMaskImage", "number", [
|
|
101
|
+
"number",
|
|
102
|
+
"number",
|
|
103
|
+
"number",
|
|
104
|
+
"number",
|
|
105
|
+
"number",
|
|
106
|
+
]),
|
|
107
|
+
// Composite
|
|
108
|
+
MagickCompositeImage: w("MagickCompositeImage", "number", [
|
|
109
|
+
"number",
|
|
110
|
+
"number",
|
|
111
|
+
"number",
|
|
112
|
+
"number",
|
|
113
|
+
"number",
|
|
114
|
+
"number",
|
|
115
|
+
]),
|
|
116
|
+
// Quality
|
|
117
|
+
MagickSetImageCompressionQuality: w("MagickSetImageCompressionQuality", "number", ["number", "number"]),
|
|
118
|
+
MagickGetImageCompressionQuality: w("MagickGetImageCompressionQuality", "number", ["number"]),
|
|
119
|
+
// Adjustments
|
|
120
|
+
MagickStripImage: w("MagickStripImage", "number", ["number"]),
|
|
121
|
+
MagickAutoOrientImage: w("MagickAutoOrientImage", "number", ["number"]),
|
|
122
|
+
MagickAutoLevelImage: w("MagickAutoLevelImage", "number", ["number"]),
|
|
123
|
+
MagickNormalizeImage: w("MagickNormalizeImage", "number", ["number"]),
|
|
124
|
+
MagickDeskewImage: w("MagickDeskewImage", "number", [
|
|
125
|
+
"number",
|
|
126
|
+
"number",
|
|
127
|
+
]),
|
|
128
|
+
// Alpha
|
|
129
|
+
MagickSetImageAlphaChannel: w("MagickSetImageAlphaChannel", "number", [
|
|
130
|
+
"number",
|
|
131
|
+
"number",
|
|
132
|
+
]),
|
|
133
|
+
// Errors
|
|
134
|
+
MagickGetException: w("MagickGetException", "string", [
|
|
135
|
+
"number",
|
|
136
|
+
"number",
|
|
137
|
+
]),
|
|
138
|
+
MagickClearException: w("MagickClearException", "number", ["number"]),
|
|
139
|
+
// Resources
|
|
140
|
+
MagickSetResourceLimit: w("MagickSetResourceLimit", "number", [
|
|
141
|
+
"number",
|
|
142
|
+
"number",
|
|
143
|
+
]),
|
|
144
|
+
MagickGetResourceLimit: w("MagickGetResourceLimit", "number", ["number"]),
|
|
145
|
+
// Settings
|
|
146
|
+
MagickSetSize: w("MagickSetSize", "number", [
|
|
147
|
+
"number",
|
|
148
|
+
"number",
|
|
149
|
+
"number",
|
|
150
|
+
]),
|
|
151
|
+
MagickSetDepth: w("MagickSetDepth", "number", ["number", "number"]),
|
|
152
|
+
// Multi-image
|
|
153
|
+
MagickGetNumberImages: w("MagickGetNumberImages", "number", ["number"]),
|
|
154
|
+
MagickSetIteratorIndex: w("MagickSetIteratorIndex", "number", [
|
|
155
|
+
"number",
|
|
156
|
+
"number",
|
|
157
|
+
]),
|
|
158
|
+
MagickResetIterator: w("MagickResetIterator", null, [
|
|
159
|
+
"number",
|
|
160
|
+
]),
|
|
161
|
+
// Depth/Colorspace
|
|
162
|
+
MagickGetImageDepth: w("MagickGetImageDepth", "number", ["number"]),
|
|
163
|
+
MagickSetImageDepth: w("MagickSetImageDepth", "number", [
|
|
164
|
+
"number",
|
|
165
|
+
"number",
|
|
166
|
+
]),
|
|
167
|
+
MagickGetImageColorspace: w("MagickGetImageColorspace", "number", [
|
|
168
|
+
"number",
|
|
169
|
+
]),
|
|
170
|
+
MagickSetImageColorspace: w("MagickSetImageColorspace", "number", [
|
|
171
|
+
"number",
|
|
172
|
+
"number",
|
|
173
|
+
]),
|
|
174
|
+
// Profiles
|
|
175
|
+
MagickProfileImage: w("MagickProfileImage", "number", [
|
|
176
|
+
"number",
|
|
177
|
+
"string",
|
|
178
|
+
"number",
|
|
179
|
+
"number",
|
|
180
|
+
]),
|
|
181
|
+
MagickGetImageProfile: w("MagickGetImageProfile", "number", [
|
|
182
|
+
"number",
|
|
183
|
+
"string",
|
|
184
|
+
"number",
|
|
185
|
+
]),
|
|
186
|
+
MagickRemoveImageProfile: w("MagickRemoveImageProfile", "number", [
|
|
187
|
+
"number",
|
|
188
|
+
"string",
|
|
189
|
+
"number",
|
|
190
|
+
]),
|
|
191
|
+
// wimagemagick convenience wrappers
|
|
192
|
+
wimagemagick_identify: w("wimagemagick_identify", "number", [
|
|
193
|
+
"number",
|
|
194
|
+
"number",
|
|
195
|
+
"number",
|
|
196
|
+
"number",
|
|
197
|
+
"number",
|
|
198
|
+
"number",
|
|
199
|
+
]),
|
|
200
|
+
wimagemagick_convert: w("wimagemagick_convert", "number", [
|
|
201
|
+
"number",
|
|
202
|
+
"number",
|
|
203
|
+
"string",
|
|
204
|
+
"number",
|
|
205
|
+
"number",
|
|
206
|
+
]),
|
|
207
|
+
wimagemagick_resize: w("wimagemagick_resize", "number", [
|
|
208
|
+
"number",
|
|
209
|
+
"number",
|
|
210
|
+
"number",
|
|
211
|
+
"number",
|
|
212
|
+
"string",
|
|
213
|
+
"number",
|
|
214
|
+
"number",
|
|
215
|
+
]),
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=api.js.map
|
package/dist/api.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI-style interface for ImageMagick commands.
|
|
3
|
+
*
|
|
4
|
+
* Wraps Module.callMain() with MEMFS file management and output capture.
|
|
5
|
+
* Uses IM7 syntax: callMain(['input.png', '-resize', '50%', 'output.jpg'])
|
|
6
|
+
*/
|
|
7
|
+
import type { WasmModule, CLIResult } from "./types.js";
|
|
8
|
+
/** Build the `print`/`printErr` pair the loader passes to the WASM factory. */
|
|
9
|
+
export declare function createOutputHooks(): Pick<WasmModule, "print" | "printErr">;
|
|
10
|
+
/**
|
|
11
|
+
* Parse a command string into an argv array, respecting quoted strings.
|
|
12
|
+
*
|
|
13
|
+
* Examples:
|
|
14
|
+
* "input.png -resize 50% output.jpg" → ["input.png", "-resize", "50%", "output.jpg"]
|
|
15
|
+
* 'input.png -set comment "hello world" output.jpg' → ["input.png", "-set", "comment", "hello world", "output.jpg"]
|
|
16
|
+
*/
|
|
17
|
+
export declare function parseCommand(command: string): string[];
|
|
18
|
+
/**
|
|
19
|
+
* Execute an ImageMagick command with file I/O.
|
|
20
|
+
*
|
|
21
|
+
* @param module - The initialized WASM module
|
|
22
|
+
* @param command - Command string or argv array (IM7 syntax, no 'magick' prefix needed)
|
|
23
|
+
* @param inputFiles - Optional map of filename → data for input files
|
|
24
|
+
* @returns CLIResult with exit code, stdout, stderr, and output files
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* const result = await execute(module, 'input.png -resize 50% output.jpg', inputFiles);
|
|
29
|
+
* const jpeg = result.outputFiles.get('output.jpg');
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export declare function execute(module: WasmModule, command: string | string[], inputFiles?: Map<string, Uint8Array | ArrayBuffer>): CLIResult;
|
|
33
|
+
/** Options for {@link identify}. */
|
|
34
|
+
export interface IdentifyOptions {
|
|
35
|
+
/** Return ImageMagick's verbose description instead of `"<w> <h> <format>"`. */
|
|
36
|
+
verbose?: boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Format to read the data as, e.g. `"DNG"` or `"CR2"`.
|
|
39
|
+
*
|
|
40
|
+
* Only the raw camera formats need it. Their coder is registered with
|
|
41
|
+
* `ExplicitFormatType`, so ImageMagick never selects it from a file's magic
|
|
42
|
+
* bytes — most raws are TIFF containers, and without a hint the TIFF coder
|
|
43
|
+
* claims them. When omitted, the raws {@link detectRawFormat} recognises
|
|
44
|
+
* (CR2, CR3, NEF, DNG, 3FR, IIQ) are supplied automatically; everything else
|
|
45
|
+
* is detected by ImageMagick itself.
|
|
46
|
+
*/
|
|
47
|
+
format?: string;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Describe an image buffer, the way `magick identify` would.
|
|
51
|
+
*
|
|
52
|
+
* The build exposes ImageMagick's image command rather than its multi-tool
|
|
53
|
+
* dispatcher, so there is no `identify` sub-command; the description is
|
|
54
|
+
* produced with `info:` and read back from MEMFS, which also avoids the
|
|
55
|
+
* buffering of the WASM build's stdout.
|
|
56
|
+
*
|
|
57
|
+
* @param module - The initialized WASM module
|
|
58
|
+
* @param data - Image data to identify
|
|
59
|
+
* @param options - `true` for the verbose description, or an
|
|
60
|
+
* {@link IdentifyOptions} object
|
|
61
|
+
* @returns `"<width> <height> <format>"`, the verbose description, or the
|
|
62
|
+
* error text if the image could not be read
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```typescript
|
|
66
|
+
* identify(module, png); // "24 16 PNG"
|
|
67
|
+
* identify(module, cr2, { format: 'CR2' }); // "6024 4024 CR2"
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
export declare function identify(module: WasmModule, data: Uint8Array | ArrayBuffer, options?: boolean | IdentifyOptions): string;
|
|
71
|
+
//# sourceMappingURL=cli.d.ts.map
|
|
@@ -0,0 +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;AAiHD;;;;;;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,CA+CX;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
ADDED
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI-style interface for ImageMagick commands.
|
|
3
|
+
*
|
|
4
|
+
* Wraps Module.callMain() with MEMFS file management and output capture.
|
|
5
|
+
* Uses IM7 syntax: callMain(['input.png', '-resize', '50%', 'output.jpg'])
|
|
6
|
+
*/
|
|
7
|
+
import { createWorkDir, cleanWorkDir, writeToMemFS, readFromMemFS, existsInMemFS, readFilesFromMemFS, } from "./filesystem.js";
|
|
8
|
+
import { detectRawFormat } from "./raw.js";
|
|
9
|
+
let activeSink = null;
|
|
10
|
+
/** Build the `print`/`printErr` pair the loader passes to the WASM factory. */
|
|
11
|
+
export function createOutputHooks() {
|
|
12
|
+
return {
|
|
13
|
+
print: (text) => {
|
|
14
|
+
if (activeSink)
|
|
15
|
+
activeSink.stdout.push(text);
|
|
16
|
+
else
|
|
17
|
+
console.log(text);
|
|
18
|
+
},
|
|
19
|
+
printErr: (text) => {
|
|
20
|
+
if (activeSink)
|
|
21
|
+
activeSink.stderr.push(text);
|
|
22
|
+
else
|
|
23
|
+
console.error(text);
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/** Run `fn` with module output redirected into strings. */
|
|
28
|
+
function captureOutput(fn) {
|
|
29
|
+
const previous = activeSink;
|
|
30
|
+
const sink = { stdout: [], stderr: [] };
|
|
31
|
+
activeSink = sink;
|
|
32
|
+
try {
|
|
33
|
+
const value = fn();
|
|
34
|
+
return {
|
|
35
|
+
value,
|
|
36
|
+
stdout: sink.stdout.join("\n"),
|
|
37
|
+
stderr: sink.stderr.join("\n"),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
finally {
|
|
41
|
+
activeSink = previous;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Pseudo-formats whose argument is content rather than a path — `xc:red`,
|
|
46
|
+
* `label:Hello world`, `gradient:red-blue`. Everything after the colon is
|
|
47
|
+
* passed through untouched for these.
|
|
48
|
+
*
|
|
49
|
+
* Every other `PREFIX:` is a format specifier on a real file (`dng:shot.cr2`,
|
|
50
|
+
* `png:out`, `info:report.txt`), and the part after the colon is a filename
|
|
51
|
+
* that has to be resolved in the working directory like any other.
|
|
52
|
+
*/
|
|
53
|
+
const CONTENT_PSEUDO_FORMATS = new Set([
|
|
54
|
+
"canvas",
|
|
55
|
+
"caption",
|
|
56
|
+
"checkerboard",
|
|
57
|
+
"clipboard",
|
|
58
|
+
"fractal",
|
|
59
|
+
"gradient",
|
|
60
|
+
"granite",
|
|
61
|
+
"hald",
|
|
62
|
+
"inline",
|
|
63
|
+
"label",
|
|
64
|
+
"logo",
|
|
65
|
+
"netscape",
|
|
66
|
+
"null",
|
|
67
|
+
"pango",
|
|
68
|
+
"pattern",
|
|
69
|
+
"plasma",
|
|
70
|
+
"radial-gradient",
|
|
71
|
+
"random",
|
|
72
|
+
"rose",
|
|
73
|
+
"screenshot",
|
|
74
|
+
"text",
|
|
75
|
+
"tile",
|
|
76
|
+
"vid",
|
|
77
|
+
"wizard",
|
|
78
|
+
"xc",
|
|
79
|
+
]);
|
|
80
|
+
/** Split `PREFIX:rest` into its parts, or return null if there is no prefix. */
|
|
81
|
+
function splitFormatPrefix(arg) {
|
|
82
|
+
const colon = arg.indexOf(":");
|
|
83
|
+
if (colon <= 0)
|
|
84
|
+
return null;
|
|
85
|
+
const prefix = arg.slice(0, colon);
|
|
86
|
+
if (!/^[A-Za-z][A-Za-z0-9+-]*$/.test(prefix))
|
|
87
|
+
return null;
|
|
88
|
+
return { prefix, rest: arg.slice(colon + 1) };
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* A plain `name.ext`, deliberately stricter than the unprefixed check: the
|
|
92
|
+
* argument of `-define` also carries a colon (`jpeg:extent=1.5mb`), so
|
|
93
|
+
* anything carrying an `=`, a space or a bracket is left alone.
|
|
94
|
+
*/
|
|
95
|
+
const PLAIN_FILENAME = /^[A-Za-z0-9_][A-Za-z0-9_.-]*\.[A-Za-z0-9]{1,5}$/;
|
|
96
|
+
/**
|
|
97
|
+
* Decide whether an argument names a file that lives in the working directory.
|
|
98
|
+
*
|
|
99
|
+
* ImageMagick argv mixes filenames with flags, geometry, colours and
|
|
100
|
+
* pseudo-format specifiers such as `xc:red` or `info:`; only the filenames may
|
|
101
|
+
* be rewritten to a working-directory path.
|
|
102
|
+
*/
|
|
103
|
+
function isWorkDirFile(arg, inputNames) {
|
|
104
|
+
if (arg.startsWith("-") || arg.startsWith("+"))
|
|
105
|
+
return false; // flag
|
|
106
|
+
if (arg.startsWith("/"))
|
|
107
|
+
return false; // already an absolute MEMFS path
|
|
108
|
+
if (inputNames.has(arg))
|
|
109
|
+
return true; // a file we just wrote
|
|
110
|
+
return /\.[A-Za-z0-9]{1,5}$/.test(arg); // looks like name.ext
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Resolve one argument against the working directory, keeping any explicit
|
|
114
|
+
* `FORMAT:` prefix in place.
|
|
115
|
+
*
|
|
116
|
+
* The prefix matters for more than tidiness: the raw formats are registered
|
|
117
|
+
* with `ExplicitFormatType`, so ImageMagick will not pick LibRaw from a file's
|
|
118
|
+
* magic bytes — a DNG or CR2 is a TIFF at that level and the TIFF coder claims
|
|
119
|
+
* it. `dng:capture` is how the caller says otherwise.
|
|
120
|
+
*/
|
|
121
|
+
function rewriteArg(arg, inputNames, workDir) {
|
|
122
|
+
const split = splitFormatPrefix(arg);
|
|
123
|
+
if (split !== null) {
|
|
124
|
+
const { prefix, rest } = split;
|
|
125
|
+
if (CONTENT_PSEUDO_FORMATS.has(prefix.toLowerCase()))
|
|
126
|
+
return arg;
|
|
127
|
+
if (rest.startsWith("/"))
|
|
128
|
+
return arg; // already absolute
|
|
129
|
+
if (!inputNames.has(rest) && !PLAIN_FILENAME.test(rest))
|
|
130
|
+
return arg;
|
|
131
|
+
return `${prefix}:${workDir}/${rest}`;
|
|
132
|
+
}
|
|
133
|
+
return isWorkDirFile(arg, inputNames) ? `${workDir}/${arg}` : arg;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Parse a command string into an argv array, respecting quoted strings.
|
|
137
|
+
*
|
|
138
|
+
* Examples:
|
|
139
|
+
* "input.png -resize 50% output.jpg" → ["input.png", "-resize", "50%", "output.jpg"]
|
|
140
|
+
* 'input.png -set comment "hello world" output.jpg' → ["input.png", "-set", "comment", "hello world", "output.jpg"]
|
|
141
|
+
*/
|
|
142
|
+
export function parseCommand(command) {
|
|
143
|
+
const args = [];
|
|
144
|
+
let current = "";
|
|
145
|
+
// Tracked separately from `current` so that an explicitly empty argument
|
|
146
|
+
// ("" or '') is still emitted rather than silently shifting argv.
|
|
147
|
+
let quoted = false;
|
|
148
|
+
let inSingle = false;
|
|
149
|
+
let inDouble = false;
|
|
150
|
+
for (let i = 0; i < command.length; i++) {
|
|
151
|
+
const ch = command[i];
|
|
152
|
+
if (ch === "'" && !inDouble) {
|
|
153
|
+
inSingle = !inSingle;
|
|
154
|
+
quoted = true;
|
|
155
|
+
}
|
|
156
|
+
else if (ch === '"' && !inSingle) {
|
|
157
|
+
inDouble = !inDouble;
|
|
158
|
+
quoted = true;
|
|
159
|
+
}
|
|
160
|
+
else if (ch === " " && !inSingle && !inDouble) {
|
|
161
|
+
if (current.length > 0 || quoted) {
|
|
162
|
+
args.push(current);
|
|
163
|
+
current = "";
|
|
164
|
+
quoted = false;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
current += ch;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
if (current.length > 0 || quoted) {
|
|
172
|
+
args.push(current);
|
|
173
|
+
}
|
|
174
|
+
return args;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Execute an ImageMagick command with file I/O.
|
|
178
|
+
*
|
|
179
|
+
* @param module - The initialized WASM module
|
|
180
|
+
* @param command - Command string or argv array (IM7 syntax, no 'magick' prefix needed)
|
|
181
|
+
* @param inputFiles - Optional map of filename → data for input files
|
|
182
|
+
* @returns CLIResult with exit code, stdout, stderr, and output files
|
|
183
|
+
*
|
|
184
|
+
* @example
|
|
185
|
+
* ```typescript
|
|
186
|
+
* const result = await execute(module, 'input.png -resize 50% output.jpg', inputFiles);
|
|
187
|
+
* const jpeg = result.outputFiles.get('output.jpg');
|
|
188
|
+
* ```
|
|
189
|
+
*/
|
|
190
|
+
export function execute(module, command, inputFiles) {
|
|
191
|
+
const args = typeof command === "string" ? parseCommand(command) : command;
|
|
192
|
+
const workDir = createWorkDir(module);
|
|
193
|
+
// Track input filenames so we can identify output files later
|
|
194
|
+
const inputNames = new Set();
|
|
195
|
+
// Write input files to MEMFS
|
|
196
|
+
if (inputFiles) {
|
|
197
|
+
for (const [name, data] of inputFiles) {
|
|
198
|
+
inputNames.add(name);
|
|
199
|
+
const bytes = data instanceof ArrayBuffer ? new Uint8Array(data) : data;
|
|
200
|
+
writeToMemFS(module, `${workDir}/${name}`, bytes);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
// Rewrite filename arguments to workDir paths
|
|
204
|
+
const rewrittenArgs = args.map((arg) => rewriteArg(arg, inputNames, workDir));
|
|
205
|
+
// Execute with output captured
|
|
206
|
+
let exitCode;
|
|
207
|
+
let stdout = "";
|
|
208
|
+
let stderr = "";
|
|
209
|
+
try {
|
|
210
|
+
const run = captureOutput(() => module.callMain(rewrittenArgs));
|
|
211
|
+
exitCode = run.value;
|
|
212
|
+
stdout = run.stdout;
|
|
213
|
+
stderr = run.stderr;
|
|
214
|
+
}
|
|
215
|
+
catch (e) {
|
|
216
|
+
exitCode = 1;
|
|
217
|
+
stderr += `Exception: ${e}\n`;
|
|
218
|
+
}
|
|
219
|
+
// Read output files (all files in workDir that weren't inputs)
|
|
220
|
+
const outputFiles = readFilesFromMemFS(module, workDir, inputNames);
|
|
221
|
+
// Clean up
|
|
222
|
+
cleanWorkDir(module, workDir);
|
|
223
|
+
return {
|
|
224
|
+
exitCode,
|
|
225
|
+
stdout: stdout.trimEnd(),
|
|
226
|
+
stderr: stderr.trimEnd(),
|
|
227
|
+
outputFiles,
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Describe an image buffer, the way `magick identify` would.
|
|
232
|
+
*
|
|
233
|
+
* The build exposes ImageMagick's image command rather than its multi-tool
|
|
234
|
+
* dispatcher, so there is no `identify` sub-command; the description is
|
|
235
|
+
* produced with `info:` and read back from MEMFS, which also avoids the
|
|
236
|
+
* buffering of the WASM build's stdout.
|
|
237
|
+
*
|
|
238
|
+
* @param module - The initialized WASM module
|
|
239
|
+
* @param data - Image data to identify
|
|
240
|
+
* @param options - `true` for the verbose description, or an
|
|
241
|
+
* {@link IdentifyOptions} object
|
|
242
|
+
* @returns `"<width> <height> <format>"`, the verbose description, or the
|
|
243
|
+
* error text if the image could not be read
|
|
244
|
+
*
|
|
245
|
+
* @example
|
|
246
|
+
* ```typescript
|
|
247
|
+
* identify(module, png); // "24 16 PNG"
|
|
248
|
+
* identify(module, cr2, { format: 'CR2' }); // "6024 4024 CR2"
|
|
249
|
+
* ```
|
|
250
|
+
*/
|
|
251
|
+
export function identify(module, data, options = false) {
|
|
252
|
+
const { verbose = false, format: requested } = typeof options === "boolean" ? { verbose: options, format: undefined } : options;
|
|
253
|
+
const format = requested ?? detectRawFormat(data);
|
|
254
|
+
const workDir = createWorkDir(module);
|
|
255
|
+
const input = `${workDir}/input`;
|
|
256
|
+
const source = format ? `${format}:${input}` : input;
|
|
257
|
+
const report = `${workDir}/info.txt`;
|
|
258
|
+
try {
|
|
259
|
+
writeToMemFS(module, input, data);
|
|
260
|
+
const args = verbose
|
|
261
|
+
? [source, "-verbose", `info:${report}`]
|
|
262
|
+
: [source, "-format", "%w %h %m", `info:${report}`];
|
|
263
|
+
const run = captureOutput(() => module.callMain(args));
|
|
264
|
+
if (run.value !== 0 || !existsInMemFS(module, report)) {
|
|
265
|
+
return run.stderr.trimEnd();
|
|
266
|
+
}
|
|
267
|
+
return new TextDecoder().decode(readFromMemFS(module, report)).trimEnd();
|
|
268
|
+
}
|
|
269
|
+
finally {
|
|
270
|
+
cleanWorkDir(module, workDir);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MEMFS filesystem helpers for managing files in the Emscripten virtual filesystem.
|
|
3
|
+
*/
|
|
4
|
+
import type { WasmModule } from "./types.js";
|
|
5
|
+
/** Create a unique working directory in MEMFS. */
|
|
6
|
+
export declare function createWorkDir(module: WasmModule): string;
|
|
7
|
+
/** Remove a working directory and all its contents. */
|
|
8
|
+
export declare function cleanWorkDir(module: WasmModule, dir: string): void;
|
|
9
|
+
/** Write a Uint8Array or ArrayBuffer to a MEMFS path. */
|
|
10
|
+
export declare function writeToMemFS(module: WasmModule, path: string, data: Uint8Array | ArrayBuffer): void;
|
|
11
|
+
/** Read a file from MEMFS as Uint8Array. */
|
|
12
|
+
export declare function readFromMemFS(module: WasmModule, path: string): Uint8Array;
|
|
13
|
+
/** Check if a file exists in MEMFS. */
|
|
14
|
+
export declare function existsInMemFS(module: WasmModule, path: string): boolean;
|
|
15
|
+
/** Remove a file from MEMFS. */
|
|
16
|
+
export declare function removeFromMemFS(module: WasmModule, path: string): void;
|
|
17
|
+
/** Write multiple files to a MEMFS directory. Returns the directory path. */
|
|
18
|
+
export declare function writeFilesToMemFS(module: WasmModule, dir: string, files: Map<string, Uint8Array | ArrayBuffer>): void;
|
|
19
|
+
/** Read all files from a MEMFS directory. Returns a map of filename → data. */
|
|
20
|
+
export declare function readFilesFromMemFS(module: WasmModule, dir: string, exclude?: Set<string>): Map<string, Uint8Array>;
|
|
21
|
+
/**
|
|
22
|
+
* Copy a blob from WASM heap memory to a new Uint8Array.
|
|
23
|
+
* Use this when reading MagickGetImageBlob output.
|
|
24
|
+
*/
|
|
25
|
+
export declare function copyFromHeap(module: WasmModule, ptr: number, length: number): Uint8Array;
|
|
26
|
+
/**
|
|
27
|
+
* Write data to WASM heap memory, returning the pointer.
|
|
28
|
+
* Caller must free the pointer with module._free().
|
|
29
|
+
*/
|
|
30
|
+
export declare function copyToHeap(module: WasmModule, data: Uint8Array | ArrayBuffer): number;
|
|
31
|
+
/** Convert a Uint8Array to a Blob. */
|
|
32
|
+
export declare function toBlob(data: Uint8Array, mimeType?: string): Blob;
|
|
33
|
+
/** Convert a Uint8Array to a data URL. */
|
|
34
|
+
export declare function toDataURL(data: Uint8Array, mimeType: string): string;
|
|
35
|
+
/** Get MIME type for an image format. */
|
|
36
|
+
export declare function getMimeType(format: string): string;
|
|
37
|
+
//# sourceMappingURL=filesystem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../src/filesystem.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAI7C,kDAAkD;AAClD,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAIxD;AAED,uDAAuD;AACvD,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAgBlE;AAED,yDAAyD;AACzD,wBAAgB,YAAY,CAC1B,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,UAAU,GAAG,WAAW,GAC7B,IAAI,CAGN;AAED,4CAA4C;AAC5C,wBAAgB,aAAa,CAC3B,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,MAAM,GACX,UAAU,CAEZ;AAED,uCAAuC;AACvC,wBAAgB,aAAa,CAC3B,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,MAAM,GACX,OAAO,CAOT;AAED,gCAAgC;AAChC,wBAAgB,eAAe,CAC7B,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,MAAM,GACX,IAAI,CAMN;AAED,6EAA6E;AAC7E,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,GAAG,WAAW,CAAC,GAC3C,IAAI,CAIN;AAED,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GACpB,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAqBzB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,GACb,UAAU,CAIZ;AAED;;;GAGG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,UAAU,GAAG,WAAW,GAC7B,MAAM,CAKR;AAED,sCAAsC;AACtC,wBAAgB,MAAM,CACpB,IAAI,EAAE,UAAU,EAChB,QAAQ,GAAE,MAAmC,GAC5C,IAAI,CAEN;AAED,0CAA0C;AAC1C,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKpE;AAiBD,yCAAyC;AACzC,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAElD"}
|