text: import { createRequire } from "module";
  import { isMainThread, parentPort, workerData } from "worker_threads";
  import fetch from "node-fetch";
  
  const nodeRequire = createRequire(import.meta.url);
  
  const magick = nodeRequire(`../build/${process.env.DEBUG && process.env.DEBUG === "true" ? "Debug" : "Release"}/image.node`);
  
  function run(object) {
    return new Promise((resolve, reject) => {
      // If the image has a path, it must also have a type
      let promise = new Promise((resolveTest) => { resolveTest(); }); // no-op
      if (object.path) {
        if (object.type !== "image/gif" && object.onlyGIF) resolve({
          buffer: Buffer.alloc(0),
          fileExtension: "nogif"
        });
        promise = fetch(object.path).then(res => res.buffer());
      }
      // Convert from a MIME type (e.g. "image/png") to something ImageMagick understands (e.g. "png").
      // Don't set `type` directly on the object we are passed as it will be read afterwards.
      // If no image type is given (say, the command generates its own image), make it a PNG.
      const fileExtension = object.type ? object.type.split("/")[1] : "png";
      promise.then(buf => {
        object.data = buf;
        const objectWithFixedType = Object.assign({}, object, {type: fileExtension});
        try {
          const result = magick[object.cmd](objectWithFixedType);
          const returnObject = {
            buffer: result.data,
            fileExtension: result.type
          };
          resolve(returnObject);
        } catch (e) {
          reject(e);
        }
      });
    });
  }
  
  if (!isMainThread) {
    run(workerData)
      .then(returnObject => {
        parentPort.postMessage(returnObject);
        process.exit();
        return;
      })
      .catch(err => {
        // turn promise rejection into normal error
        throw err;
      });
  }
  