@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.
Files changed (70) hide show
  1. package/CHANGELOG.md +230 -0
  2. package/LICENSE +199 -0
  3. package/README.md +75 -0
  4. package/dist/api.d.ts +68 -0
  5. package/dist/api.d.ts.map +1 -0
  6. package/dist/api.js +218 -0
  7. package/dist/api.js.map +1 -0
  8. package/dist/cli.d.ts +71 -0
  9. package/dist/cli.d.ts.map +1 -0
  10. package/dist/cli.js +273 -0
  11. package/dist/cli.js.map +1 -0
  12. package/dist/filesystem.d.ts +37 -0
  13. package/dist/filesystem.d.ts.map +1 -0
  14. package/dist/filesystem.js +141 -0
  15. package/dist/filesystem.js.map +1 -0
  16. package/dist/image.d.ts +125 -0
  17. package/dist/image.d.ts.map +1 -0
  18. package/dist/image.js +426 -0
  19. package/dist/image.js.map +1 -0
  20. package/dist/index.d.ts +30 -0
  21. package/dist/index.d.ts.map +1 -0
  22. package/dist/index.js +34 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/licenses/README.txt +11 -0
  25. package/dist/licenses/aom-LICENSE.txt +28 -0
  26. package/dist/licenses/brotli-LICENSE.txt +21 -0
  27. package/dist/licenses/de265-LICENSE.txt +873 -0
  28. package/dist/licenses/ffi-LICENSE.txt +23 -0
  29. package/dist/licenses/freetype-LICENSE.txt +171 -0
  30. package/dist/licenses/glib-LICENSE.txt +504 -0
  31. package/dist/licenses/heif-LICENSE.txt +873 -0
  32. package/dist/licenses/highway-LICENSE.txt +203 -0
  33. package/dist/licenses/imagemagick-LICENSE.txt +106 -0
  34. package/dist/licenses/imagemagick-NOTICE.txt +240 -0
  35. package/dist/licenses/jpeg-turbo-LICENSE.txt +137 -0
  36. package/dist/licenses/jpeg-xl-LICENSE.txt +29 -0
  37. package/dist/licenses/lcms-LICENSE.txt +24 -0
  38. package/dist/licenses/libraw-COPYRIGHT.txt +27 -0
  39. package/dist/licenses/libraw-LICENSE.CDDL.txt +340 -0
  40. package/dist/licenses/libraw-LICENSE.LGPL.txt +458 -0
  41. package/dist/licenses/lqr-LICENSE.txt +167 -0
  42. package/dist/licenses/openjpeg-LICENSE.txt +41 -0
  43. package/dist/licenses/png-LICENSE.txt +136 -0
  44. package/dist/licenses/tiff-LICENSE.txt +51 -0
  45. package/dist/licenses/webp-LICENSE.txt +31 -0
  46. package/dist/licenses/xml-LICENSE.txt +26 -0
  47. package/dist/licenses/zlib-LICENSE.txt +24 -0
  48. package/dist/loader.d.ts +25 -0
  49. package/dist/loader.d.ts.map +1 -0
  50. package/dist/loader.js +50 -0
  51. package/dist/loader.js.map +1 -0
  52. package/dist/raw.d.ts +39 -0
  53. package/dist/raw.d.ts.map +1 -0
  54. package/dist/raw.js +151 -0
  55. package/dist/raw.js.map +1 -0
  56. package/dist/types.d.ts +164 -0
  57. package/dist/types.d.ts.map +1 -0
  58. package/dist/types.js +94 -0
  59. package/dist/types.js.map +1 -0
  60. package/dist/wimagemagick.js +15 -0
  61. package/dist/wimagemagick.wasm +0 -0
  62. package/dist/worker-handler.d.ts +46 -0
  63. package/dist/worker-handler.d.ts.map +1 -0
  64. package/dist/worker-handler.js +165 -0
  65. package/dist/worker-handler.js.map +1 -0
  66. package/dist/worker.d.ts +14 -0
  67. package/dist/worker.d.ts.map +1 -0
  68. package/dist/worker.js +19 -0
  69. package/dist/worker.js.map +1 -0
  70. 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
@@ -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
@@ -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"}