{"version":3,"file":"index.cjs","sources":["../../src/index.ts"],"sourcesContent":["import { ImageBase } from \"@vibrant/image\";\nimport configure from \"@jimp/custom\";\nimport types from \"@jimp/types\";\nimport resize from \"@jimp/plugin-resize\";\nimport type { ImageData, ImageSource } from \"@vibrant/image\";\n\nconst Jimp = configure({\n\ttypes: [types],\n\tplugins: [resize],\n});\n\nconst URL_REGEX = /^(\\w+):\\/\\/.*/i;\n\ntype NodeImageSource = string | Buffer;\n\nexport class NodeImage extends ImageBase {\n\tprivate _image: InstanceType<typeof Jimp> | undefined;\n\n\tprivate _getImage() {\n\t\tif (!this._image) {\n\t\t\tthrow new Error(\"Image not loaded\");\n\t\t}\n\t\treturn this._image;\n\t}\n\n\tprivate async _loadByProtocolHandler(src: string): Promise<Buffer> {\n\t\tconst res = await fetch(src, {\n\t\t\tmethod: \"GET\",\n\t\t});\n\n\t\tif (!res.ok || !res.body) {\n\t\t\tthrow new Error(`Failed to fetch ${src}`);\n\t\t}\n\n\t\tconst stream = res.body.getReader();\n\t\tconst chunks: Uint8Array[] = [];\n\t\tlet done = false;\n\t\twhile (!done) {\n\t\t\tconst { value, done: doneValue } = await stream.read();\n\t\t\tif (value) {\n\t\t\t\tchunks.push(value);\n\t\t\t}\n\t\t\tdone = doneValue;\n\t\t}\n\n\t\treturn Buffer.concat(chunks);\n\t}\n\n\tprivate _loadFromPath(src: string): Promise<ImageBase> {\n\t\tconst m = URL_REGEX.exec(src);\n\t\tif (m) {\n\t\t\treturn this._loadByProtocolHandler(src).then((buf) =>\n\t\t\t\tthis._loadByJimp(buf),\n\t\t\t);\n\t\t} else {\n\t\t\treturn this._loadByJimp(src);\n\t\t}\n\t}\n\n\tprivate _loadByJimp(src: NodeImageSource): Promise<ImageBase> {\n\t\t// NOTE: TypeScript doesn't support union type to overloads yet\n\t\t//       Use type assertion to bypass compiler error\n\t\treturn Jimp.read(src as Buffer).then((result) => {\n\t\t\tthis._image = result;\n\t\t\treturn this;\n\t\t});\n\t}\n\n\tload(image: ImageSource): Promise<ImageBase> {\n\t\tif (typeof image === \"string\") {\n\t\t\treturn this._loadFromPath(image);\n\t\t} else if (image instanceof Buffer) {\n\t\t\treturn this._loadByJimp(image);\n\t\t} else {\n\t\t\treturn Promise.reject(\n\t\t\t\tnew Error(\n\t\t\t\t\t\"Cannot load image from HTMLImageElement in node environment\",\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t}\n\n\tclear(): void {}\n\n\tupdate(_imageData: ImageData): void {}\n\n\tgetWidth(): number {\n\t\treturn this._getImage().bitmap.width;\n\t}\n\n\tgetHeight(): number {\n\t\treturn this._getImage().bitmap.height;\n\t}\n\n\tresize(targetWidth: number, targetHeight: number, _ratio: number): void {\n\t\tthis._getImage().resize(targetWidth, targetHeight);\n\t}\n\n\tgetPixelCount(): number {\n\t\tconst bitmap = this._getImage().bitmap;\n\t\treturn bitmap.width * bitmap.height;\n\t}\n\n\tgetImageData(): ImageData {\n\t\treturn this._getImage().bitmap;\n\t}\n\n\tremove(): void {}\n}\n"],"names":["ImageBase","image"],"mappings":";;;;;;AAMA,MAAM,OAAO,UAAU;AAAA,EACtB,OAAO,CAAC,KAAK;AAAA,EACb,SAAS,CAAC,MAAM;AACjB,CAAC;AAED,MAAM,YAAY;AAIX,MAAM,kBAAkBA,MAAAA,UAAU;AAAA,EAGhC,YAAY;AACf,QAAA,CAAC,KAAK,QAAQ;AACX,YAAA,IAAI,MAAM,kBAAkB;AAAA,IAAA;AAEnC,WAAO,KAAK;AAAA,EAAA;AAAA,EAGb,MAAc,uBAAuB,KAA8B;AAC5D,UAAA,MAAM,MAAM,MAAM,KAAK;AAAA,MAC5B,QAAQ;AAAA,IAAA,CACR;AAED,QAAI,CAAC,IAAI,MAAM,CAAC,IAAI,MAAM;AACzB,YAAM,IAAI,MAAM,mBAAmB,GAAG,EAAE;AAAA,IAAA;AAGnC,UAAA,SAAS,IAAI,KAAK,UAAU;AAClC,UAAM,SAAuB,CAAC;AAC9B,QAAI,OAAO;AACX,WAAO,CAAC,MAAM;AACb,YAAM,EAAE,OAAO,MAAM,cAAc,MAAM,OAAO,KAAK;AACrD,UAAI,OAAO;AACV,eAAO,KAAK,KAAK;AAAA,MAAA;AAEX,aAAA;AAAA,IAAA;AAGD,WAAA,OAAO,OAAO,MAAM;AAAA,EAAA;AAAA,EAGpB,cAAc,KAAiC;AAChD,UAAA,IAAI,UAAU,KAAK,GAAG;AAC5B,QAAI,GAAG;AACC,aAAA,KAAK,uBAAuB,GAAG,EAAE;AAAA,QAAK,CAAC,QAC7C,KAAK,YAAY,GAAG;AAAA,MACrB;AAAA,IAAA,OACM;AACC,aAAA,KAAK,YAAY,GAAG;AAAA,IAAA;AAAA,EAC5B;AAAA,EAGO,YAAY,KAA0C;AAG7D,WAAO,KAAK,KAAK,GAAa,EAAE,KAAK,CAAC,WAAW;AAChD,WAAK,SAAS;AACP,aAAA;AAAA,IAAA,CACP;AAAA,EAAA;AAAA,EAGF,KAAKC,QAAwC;AACxC,QAAA,OAAOA,WAAU,UAAU;AACvB,aAAA,KAAK,cAAcA,MAAK;AAAA,IAAA,WACrBA,kBAAiB,QAAQ;AAC5B,aAAA,KAAK,YAAYA,MAAK;AAAA,IAAA,OACvB;AACN,aAAO,QAAQ;AAAA,QACd,IAAI;AAAA,UACH;AAAA,QAAA;AAAA,MAEF;AAAA,IAAA;AAAA,EACD;AAAA,EAGD,QAAc;AAAA,EAAA;AAAA,EAEd,OAAO,YAA6B;AAAA,EAAA;AAAA,EAEpC,WAAmB;AACX,WAAA,KAAK,YAAY,OAAO;AAAA,EAAA;AAAA,EAGhC,YAAoB;AACZ,WAAA,KAAK,YAAY,OAAO;AAAA,EAAA;AAAA,EAGhC,OAAO,aAAqB,cAAsB,QAAsB;AACvE,SAAK,UAAU,EAAE,OAAO,aAAa,YAAY;AAAA,EAAA;AAAA,EAGlD,gBAAwB;AACjB,UAAA,SAAS,KAAK,UAAA,EAAY;AACzB,WAAA,OAAO,QAAQ,OAAO;AAAA,EAAA;AAAA,EAG9B,eAA0B;AAClB,WAAA,KAAK,YAAY;AAAA,EAAA;AAAA,EAGzB,SAAe;AAAA,EAAA;AAChB;;"}