@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/image.js ADDED
@@ -0,0 +1,426 @@
1
+ /**
2
+ * High-level image class with chainable operations.
3
+ *
4
+ * Wraps MagickWand with a friendly API. Each WMagickImage holds a pointer
5
+ * to a MagickWand and must be disposed when done.
6
+ */
7
+ import { FilterType, CompositeOperator } from "./types.js";
8
+ import { createBindings } from "./api.js";
9
+ import { copyFromHeap, copyToHeap, getMimeType } from "./filesystem.js";
10
+ import { detectRawFormat } from "./raw.js";
11
+ let _sharedModule = null;
12
+ let _sharedBindings = null;
13
+ /** Makes the temporary MEMFS path used by a format-hinted buffer read unique. */
14
+ let bufferReadCounter = 0;
15
+ /**
16
+ * Set the shared WASM module for WMagickImage.
17
+ * Called by the loader during initialization.
18
+ */
19
+ export function setSharedModule(module) {
20
+ _sharedModule = module;
21
+ _sharedBindings = createBindings(module);
22
+ _sharedBindings.MagickWandGenesis();
23
+ }
24
+ function getModule() {
25
+ if (!_sharedModule)
26
+ throw new Error("wimagemagick not initialized. Call initWImageMagick() first.");
27
+ return _sharedModule;
28
+ }
29
+ function getBindings() {
30
+ if (!_sharedBindings)
31
+ throw new Error("wimagemagick not initialized. Call initWImageMagick() first.");
32
+ return _sharedBindings;
33
+ }
34
+ /** Get the MagickWand error message. Throws if there is one. */
35
+ function checkError(api, wand, operation) {
36
+ const sevPtr = getModule()._malloc(4);
37
+ const desc = api.MagickGetException(wand, sevPtr);
38
+ const severity = getModule().getValue(sevPtr, "i32");
39
+ getModule()._free(sevPtr);
40
+ if (severity >= 400) {
41
+ api.MagickClearException(wand);
42
+ throw new Error(`${operation} failed: ${desc}`);
43
+ }
44
+ }
45
+ export class WMagickImage {
46
+ _wand;
47
+ _disposed = false;
48
+ constructor(wand) {
49
+ this._wand = wand;
50
+ }
51
+ /** Get the underlying MagickWand pointer (for advanced use). */
52
+ get wand() {
53
+ this.ensureAlive();
54
+ return this._wand;
55
+ }
56
+ ensureAlive() {
57
+ if (this._disposed)
58
+ throw new Error("Image has been disposed");
59
+ }
60
+ // --- Static constructors ---
61
+ /**
62
+ * Create a WMagickImage from a Uint8Array or ArrayBuffer.
63
+ *
64
+ * @param data - The encoded image
65
+ * @param format - Format to read the data as, e.g. `'DNG'` or `'ARW'`.
66
+ * Only the raw camera formats need it: their coder is registered with
67
+ * `ExplicitFormatType` and does not accept blobs, so ImageMagick will not
68
+ * reach LibRaw from a buffer alone. When omitted, the raw formats
69
+ * {@link detectRawFormat} recognises (CR2, CR3, NEF, DNG, 3FR, IIQ) are
70
+ * supplied automatically; pass it for any other raw.
71
+ */
72
+ static fromBuffer(data, format) {
73
+ const api = getBindings();
74
+ const module = getModule();
75
+ const bytes = data instanceof ArrayBuffer ? new Uint8Array(data) : data;
76
+ const resolved = format ?? detectRawFormat(bytes);
77
+ if (resolved)
78
+ return WMagickImage.fromBufferAs(bytes, resolved);
79
+ const wand = api.NewMagickWand();
80
+ const ptr = copyToHeap(module, bytes);
81
+ const ok = api.MagickReadImageBlob(wand, ptr, bytes.length);
82
+ module._free(ptr);
83
+ if (!ok) {
84
+ const sevPtr = module._malloc(4);
85
+ const desc = api.MagickGetException(wand, sevPtr);
86
+ module._free(sevPtr);
87
+ api.DestroyMagickWand(wand);
88
+ throw new Error(`Failed to read image: ${desc}`);
89
+ }
90
+ return new WMagickImage(wand);
91
+ }
92
+ /**
93
+ * Read a buffer through MEMFS with an explicit `FORMAT:path` specifier,
94
+ * which is the only route to the coders that do not support blobs.
95
+ */
96
+ static fromBufferAs(bytes, format) {
97
+ const module = getModule();
98
+ const path = `/wimagemagick_${++bufferReadCounter}_${Date.now()}`;
99
+ module.FS.writeFile(path, bytes);
100
+ try {
101
+ return WMagickImage.fromFile(`${format}:${path}`);
102
+ }
103
+ finally {
104
+ try {
105
+ module.FS.unlink(path);
106
+ }
107
+ catch {
108
+ // Already gone; nothing to clean up.
109
+ }
110
+ }
111
+ }
112
+ /**
113
+ * Create a WMagickImage from a Blob.
114
+ *
115
+ * @param format - See {@link WMagickImage.fromBuffer}.
116
+ */
117
+ static async fromBlob(blob, format) {
118
+ const buffer = await blob.arrayBuffer();
119
+ return WMagickImage.fromBuffer(buffer, format);
120
+ }
121
+ /** Create a WMagickImage from a file in MEMFS. */
122
+ static fromFile(path) {
123
+ const api = getBindings();
124
+ const wand = api.NewMagickWand();
125
+ const ok = api.MagickReadImage(wand, path);
126
+ if (!ok) {
127
+ const sevPtr = getModule()._malloc(4);
128
+ const desc = api.MagickGetException(wand, sevPtr);
129
+ getModule()._free(sevPtr);
130
+ api.DestroyMagickWand(wand);
131
+ throw new Error(`Failed to read file '${path}': ${desc}`);
132
+ }
133
+ return new WMagickImage(wand);
134
+ }
135
+ /** Clone this image. */
136
+ clone() {
137
+ this.ensureAlive();
138
+ const api = getBindings();
139
+ const newWand = api.CloneMagickWand(this._wand);
140
+ return new WMagickImage(newWand);
141
+ }
142
+ // --- Properties ---
143
+ get width() {
144
+ this.ensureAlive();
145
+ return getBindings().MagickGetImageWidth(this._wand);
146
+ }
147
+ get height() {
148
+ this.ensureAlive();
149
+ return getBindings().MagickGetImageHeight(this._wand);
150
+ }
151
+ get format() {
152
+ this.ensureAlive();
153
+ return getBindings().MagickGetImageFormat(this._wand);
154
+ }
155
+ get depth() {
156
+ this.ensureAlive();
157
+ return getBindings().MagickGetImageDepth(this._wand);
158
+ }
159
+ get colorspace() {
160
+ this.ensureAlive();
161
+ return getBindings().MagickGetImageColorspace(this._wand);
162
+ }
163
+ get compressionQuality() {
164
+ this.ensureAlive();
165
+ return getBindings().MagickGetImageCompressionQuality(this._wand);
166
+ }
167
+ /** Get basic image info without needing to query individual properties. */
168
+ get info() {
169
+ this.ensureAlive();
170
+ return {
171
+ width: this.width,
172
+ height: this.height,
173
+ format: this.format,
174
+ };
175
+ }
176
+ // --- Operations (return this for chaining) ---
177
+ /** Resize the image using the specified filter. */
178
+ resize(width, height, filter = FilterType.Lanczos) {
179
+ this.ensureAlive();
180
+ const api = getBindings();
181
+ api.MagickResizeImage(this._wand, width, height, filter);
182
+ checkError(api, this._wand, "resize");
183
+ return this;
184
+ }
185
+ /**
186
+ * Shrink the image to fit within `maxWidth` x `maxHeight`, keeping its
187
+ * aspect ratio — ImageMagick's `-resize WxH>`. An image that already fits
188
+ * is left alone; nothing is ever enlarged.
189
+ */
190
+ fit(maxWidth, maxHeight, filter = FilterType.Lanczos) {
191
+ this.ensureAlive();
192
+ const { width, height } = this;
193
+ const scale = Math.min(maxWidth / width, maxHeight / height);
194
+ if (scale >= 1)
195
+ return this;
196
+ return this.resize(Math.max(1, Math.round(width * scale)), Math.max(1, Math.round(height * scale)), filter);
197
+ }
198
+ /** Resize using adaptive interpolation (good for shrinking). */
199
+ adaptiveResize(width, height) {
200
+ this.ensureAlive();
201
+ const api = getBindings();
202
+ api.MagickAdaptiveResizeImage(this._wand, width, height);
203
+ checkError(api, this._wand, "adaptiveResize");
204
+ return this;
205
+ }
206
+ /** Create a thumbnail (fast resize). */
207
+ thumbnail(width, height) {
208
+ this.ensureAlive();
209
+ const api = getBindings();
210
+ api.MagickThumbnailImage(this._wand, width, height);
211
+ checkError(api, this._wand, "thumbnail");
212
+ return this;
213
+ }
214
+ /** Crop a region from the image. */
215
+ crop(width, height, x = 0, y = 0) {
216
+ this.ensureAlive();
217
+ const api = getBindings();
218
+ api.MagickCropImage(this._wand, width, height, x, y);
219
+ checkError(api, this._wand, "crop");
220
+ return this;
221
+ }
222
+ /** Extend the image canvas. */
223
+ extent(width, height, x = 0, y = 0) {
224
+ this.ensureAlive();
225
+ const api = getBindings();
226
+ api.MagickExtentImage(this._wand, width, height, x, y);
227
+ checkError(api, this._wand, "extent");
228
+ return this;
229
+ }
230
+ /** Rotate the image by the specified degrees. */
231
+ rotate(degrees) {
232
+ this.ensureAlive();
233
+ const api = getBindings();
234
+ // Pass 0 as background pixel (transparent/black)
235
+ api.MagickRotateImage(this._wand, 0, degrees);
236
+ checkError(api, this._wand, "rotate");
237
+ return this;
238
+ }
239
+ /** Flip the image vertically. */
240
+ flip() {
241
+ this.ensureAlive();
242
+ getBindings().MagickFlipImage(this._wand);
243
+ return this;
244
+ }
245
+ /** Flop the image horizontally. */
246
+ flop() {
247
+ this.ensureAlive();
248
+ getBindings().MagickFlopImage(this._wand);
249
+ return this;
250
+ }
251
+ /** Transpose the image (flip + rotate 270°). */
252
+ transpose() {
253
+ this.ensureAlive();
254
+ getBindings().MagickTransposeImage(this._wand);
255
+ return this;
256
+ }
257
+ /** Transverse the image (flop + rotate 270°). */
258
+ transverse() {
259
+ this.ensureAlive();
260
+ getBindings().MagickTransverseImage(this._wand);
261
+ return this;
262
+ }
263
+ /** Apply a blur filter. */
264
+ blur(radius, sigma) {
265
+ this.ensureAlive();
266
+ const api = getBindings();
267
+ api.MagickBlurImage(this._wand, radius, sigma);
268
+ checkError(api, this._wand, "blur");
269
+ return this;
270
+ }
271
+ /** Apply a Gaussian blur. */
272
+ gaussianBlur(radius, sigma) {
273
+ this.ensureAlive();
274
+ const api = getBindings();
275
+ api.MagickGaussianBlurImage(this._wand, radius, sigma);
276
+ checkError(api, this._wand, "gaussianBlur");
277
+ return this;
278
+ }
279
+ /** Sharpen the image. */
280
+ sharpen(radius, sigma) {
281
+ this.ensureAlive();
282
+ const api = getBindings();
283
+ api.MagickSharpenImage(this._wand, radius, sigma);
284
+ checkError(api, this._wand, "sharpen");
285
+ return this;
286
+ }
287
+ /** Apply unsharp mask. */
288
+ unsharpMask(radius, sigma, gain, threshold) {
289
+ this.ensureAlive();
290
+ const api = getBindings();
291
+ api.MagickUnsharpMaskImage(this._wand, radius, sigma, gain, threshold);
292
+ checkError(api, this._wand, "unsharpMask");
293
+ return this;
294
+ }
295
+ /** Composite another image onto this one. */
296
+ composite(other, operator = CompositeOperator.Over, x = 0, y = 0) {
297
+ this.ensureAlive();
298
+ other.ensureAlive();
299
+ const api = getBindings();
300
+ api.MagickCompositeImage(this._wand, other._wand, operator, 1, x, y);
301
+ checkError(api, this._wand, "composite");
302
+ return this;
303
+ }
304
+ /** Set the output compression quality (0-100). */
305
+ quality(value) {
306
+ this.ensureAlive();
307
+ getBindings().MagickSetImageCompressionQuality(this._wand, value);
308
+ return this;
309
+ }
310
+ /** Set the output format. */
311
+ setFormat(format) {
312
+ this.ensureAlive();
313
+ getBindings().MagickSetImageFormat(this._wand, format);
314
+ return this;
315
+ }
316
+ /** Strip metadata (EXIF, profiles, comments). */
317
+ strip() {
318
+ this.ensureAlive();
319
+ getBindings().MagickStripImage(this._wand);
320
+ return this;
321
+ }
322
+ /** Auto-orient based on EXIF orientation tag. */
323
+ autoOrient() {
324
+ this.ensureAlive();
325
+ getBindings().MagickAutoOrientImage(this._wand);
326
+ return this;
327
+ }
328
+ /** Auto-level the image (stretch contrast). */
329
+ autoLevel() {
330
+ this.ensureAlive();
331
+ getBindings().MagickAutoLevelImage(this._wand);
332
+ return this;
333
+ }
334
+ /** Normalize the image (enhance contrast). */
335
+ normalize() {
336
+ this.ensureAlive();
337
+ getBindings().MagickNormalizeImage(this._wand);
338
+ return this;
339
+ }
340
+ /** Deskew the image. */
341
+ deskew(threshold = 40) {
342
+ this.ensureAlive();
343
+ const api = getBindings();
344
+ api.MagickDeskewImage(this._wand, threshold);
345
+ checkError(api, this._wand, "deskew");
346
+ return this;
347
+ }
348
+ /** Set alpha channel operation. */
349
+ alpha(option) {
350
+ this.ensureAlive();
351
+ getBindings().MagickSetImageAlphaChannel(this._wand, option);
352
+ return this;
353
+ }
354
+ /** Set image depth (bits per channel). */
355
+ setDepth(depth) {
356
+ this.ensureAlive();
357
+ getBindings().MagickSetImageDepth(this._wand, depth);
358
+ return this;
359
+ }
360
+ /** Set colorspace. */
361
+ setColorspace(colorspace) {
362
+ this.ensureAlive();
363
+ getBindings().MagickSetImageColorspace(this._wand, colorspace);
364
+ return this;
365
+ }
366
+ // --- Output ---
367
+ /** Export the image as a Uint8Array in the specified format. */
368
+ toBuffer(format) {
369
+ this.ensureAlive();
370
+ const api = getBindings();
371
+ const module = getModule();
372
+ if (format) {
373
+ api.MagickSetImageFormat(this._wand, format);
374
+ }
375
+ const sizePtr = module._malloc(4);
376
+ const blobPtr = api.MagickGetImageBlob(this._wand, sizePtr);
377
+ const blobSize = module.getValue(sizePtr, "i32");
378
+ module._free(sizePtr);
379
+ if (!blobPtr || blobSize <= 0) {
380
+ checkError(api, this._wand, "toBuffer");
381
+ throw new Error("Failed to export image");
382
+ }
383
+ const result = copyFromHeap(module, blobPtr, blobSize);
384
+ api.MagickRelinquishMemory(blobPtr);
385
+ return result;
386
+ }
387
+ /** Export the image as a Blob. */
388
+ toBlob(format) {
389
+ const data = this.toBuffer(format);
390
+ const fmt = format ?? this.format;
391
+ const mimeType = getMimeType(fmt);
392
+ return new Blob([data], { type: mimeType });
393
+ }
394
+ /** Export the image as a data URL. */
395
+ toDataURL(format) {
396
+ const data = this.toBuffer(format);
397
+ const fmt = format ?? this.format;
398
+ const mimeType = getMimeType(fmt);
399
+ const binary = Array.from(data)
400
+ .map((b) => String.fromCharCode(b))
401
+ .join("");
402
+ return `data:${mimeType};base64,${btoa(binary)}`;
403
+ }
404
+ /** Write the image to a MEMFS file path. */
405
+ writeToFile(path) {
406
+ this.ensureAlive();
407
+ const api = getBindings();
408
+ const ok = api.MagickWriteImage(this._wand, path);
409
+ if (!ok) {
410
+ checkError(api, this._wand, `writeToFile('${path}')`);
411
+ }
412
+ }
413
+ // --- Cleanup ---
414
+ /** Free the underlying MagickWand. Must be called when done. */
415
+ dispose() {
416
+ if (!this._disposed && this._wand) {
417
+ getBindings().DestroyMagickWand(this._wand);
418
+ this._disposed = true;
419
+ }
420
+ }
421
+ /** Whether this image has been disposed. */
422
+ get isDisposed() {
423
+ return this._disposed;
424
+ }
425
+ }
426
+ //# sourceMappingURL=image.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image.js","sourceRoot":"","sources":["../src/image.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * wimagemagick — ImageMagick v7 compiled to WebAssembly.
3
+ *
4
+ * @example
5
+ * ```typescript
6
+ * import { initWImageMagick } from '@wasmedia/wimagemagick';
7
+ *
8
+ * const wim = await initWImageMagick();
9
+ *
10
+ * // High-level API
11
+ * const img = wim.Image.fromBuffer(pngData);
12
+ * const jpeg = img.resize(800, 600).quality(85).toBuffer('JPEG');
13
+ * img.dispose();
14
+ *
15
+ * // CLI-style
16
+ * const result = wim.execute('input.png -resize 50% output.jpg', inputFiles);
17
+ * ```
18
+ */
19
+ export { initWImageMagick } from "./loader.js";
20
+ export { WMagickImage } from "./image.js";
21
+ export { execute, identify, parseCommand } from "./cli.js";
22
+ export { detectRawFormat } from "./raw.js";
23
+ export { createWorkerHandler, PROCESS_OPERATIONS } from "./worker-handler.js";
24
+ export type { WorkerMessage, WorkerResponse, ProcessOperation, ProcessOperationName, ProcessPayload, ProcessResult, } from "./worker-handler.js";
25
+ export { createBindings } from "./api.js";
26
+ export type { MagickBindings } from "./api.js";
27
+ export { createWorkDir, cleanWorkDir, writeToMemFS, readFromMemFS, existsInMemFS, removeFromMemFS, writeFilesToMemFS, readFilesFromMemFS, copyFromHeap, copyToHeap, toBlob, toDataURL, getMimeType, } from "./filesystem.js";
28
+ export type { WasmModule, EmscriptenFS, WImageMagickOptions, WImageMagickInstance, CLIResult, ImageFormat, ImageInfo, } from "./types.js";
29
+ export { FilterType, AlphaChannelOption, CompositeOperator, ResourceType, } from "./types.js";
30
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG/C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG1C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG3D,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAG3C,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9E,YAAY,EACV,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACd,aAAa,GACd,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,YAAY,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG/C,OAAO,EACL,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,UAAU,EACV,MAAM,EACN,SAAS,EACT,WAAW,GACZ,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EACV,UAAU,EACV,YAAY,EACZ,mBAAmB,EACnB,oBAAoB,EACpB,SAAS,EACT,WAAW,EACX,SAAS,GACV,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,GACb,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,34 @@
1
+ /**
2
+ * wimagemagick — ImageMagick v7 compiled to WebAssembly.
3
+ *
4
+ * @example
5
+ * ```typescript
6
+ * import { initWImageMagick } from '@wasmedia/wimagemagick';
7
+ *
8
+ * const wim = await initWImageMagick();
9
+ *
10
+ * // High-level API
11
+ * const img = wim.Image.fromBuffer(pngData);
12
+ * const jpeg = img.resize(800, 600).quality(85).toBuffer('JPEG');
13
+ * img.dispose();
14
+ *
15
+ * // CLI-style
16
+ * const result = wim.execute('input.png -resize 50% output.jpg', inputFiles);
17
+ * ```
18
+ */
19
+ // Main entry point
20
+ export { initWImageMagick } from "./loader.js";
21
+ // High-level image class
22
+ export { WMagickImage } from "./image.js";
23
+ // CLI interface
24
+ export { execute, identify, parseCommand } from "./cli.js";
25
+ // Camera raw detection
26
+ export { detectRawFormat } from "./raw.js";
27
+ // Web Worker protocol (the worker itself is the "@wasmedia/wimagemagick/worker" entry)
28
+ export { createWorkerHandler, PROCESS_OPERATIONS } from "./worker-handler.js";
29
+ // Low-level API bindings
30
+ export { createBindings } from "./api.js";
31
+ // Filesystem helpers
32
+ export { createWorkDir, cleanWorkDir, writeToMemFS, readFromMemFS, existsInMemFS, removeFromMemFS, writeFilesToMemFS, readFilesFromMemFS, copyFromHeap, copyToHeap, toBlob, toDataURL, getMimeType, } from "./filesystem.js";
33
+ export { FilterType, AlphaChannelOption, CompositeOperator, ResourceType, } from "./types.js";
34
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,mBAAmB;AACnB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,yBAAyB;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,gBAAgB;AAChB,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE3D,uBAAuB;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,uFAAuF;AACvF,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAU9E,yBAAyB;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG1C,qBAAqB;AACrB,OAAO,EACL,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,UAAU,EACV,MAAM,EACN,SAAS,EACT,WAAW,GACZ,MAAM,iBAAiB,CAAC;AAazB,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,GACb,MAAM,YAAY,CAAC"}
@@ -0,0 +1,11 @@
1
+ wimagemagick.wasm statically links ImageMagick and the libraries below. This
2
+ directory holds each one's licence. The wimagemagick wrapper itself is
3
+ Apache-2.0 (see LICENSE in the package root).
4
+
5
+ ImageMagick (df347d975045aab2f5e3104cfc35c94cc29a4ac6): imagemagick-LICENSE.txt, imagemagick-NOTICE.txt
6
+ LibRaw 0.22.0 (LGPL-2.1 or CDDL-1.0): libraw-*.txt
7
+ From ImageMagick/Dependencies 2026.04.04.0030: aom brotli de265 ffi freetype glib heif highway jpeg-turbo jpeg-xl lcms lqr openjpeg png tiff webp xml zlib
8
+
9
+ Several of these are LGPL and linked statically. Everything needed to rebuild
10
+ wimagemagick.wasm against modified versions of them is in the source
11
+ repository: https://gitlab.com/wasmedia/wimagemagick (see docs/building.md).
@@ -0,0 +1,28 @@
1
+ [ aom 3.13.3 (2026-04-02) ]
2
+
3
+ Copyright (c) 2016, Alliance for Open Media. All rights reserved.
4
+
5
+ Redistribution and use in source and binary forms, with or without
6
+ modification, are permitted provided that the following conditions
7
+ are met:
8
+
9
+ 1. Redistributions of source code must retain the above copyright
10
+ notice, this list of conditions and the following disclaimer.
11
+
12
+ 2. Redistributions in binary form must reproduce the above copyright
13
+ notice, this list of conditions and the following disclaimer in
14
+ the documentation and/or other materials provided with the
15
+ distribution.
16
+
17
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
20
+ FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
21
+ COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
22
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
23
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
25
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
27
+ ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28
+ POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,21 @@
1
+ [ brotli 1.2.0 (2025-10-27) ]
2
+
3
+ Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.