{"version":3,"sources":["jsdelivr-header.js","/npm/multer-sharp-resizer@1.0.5/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNA,MAAM,GAAK,QAAQ,YACb,MAAQ,QAAQ,SAEtB,OAAO,QAAU,MAUf,WAAA,CAAY,EAAK,EAAU,EAAO,EAAY,EAAS,GACrD,KAAK,IAAM,EACX,KAAK,SAAW,EAChB,KAAK,MAAQ,EACb,KAAK,WAAa,EAClB,KAAK,aAAe,GAAgB,CAAC,EACrC,KAAK,QAAU,EACf,KAAK,cAAgB,GACrB,KAAK,SAAW,KAChB,KAAK,cAAgB,KACrB,KAAK,gBAAkB,KACvB,KAAK,KAAO,GACZ,KAAK,gBAAkB,IACzB,CAKA,YAAM,GACJ,IAAI,KAAK,IAAI,OACN,KAAK,IAAI,MAAM,IADtB,CAqBA,GAAI,KAAK,IAAI,KACX,aAAa,KAAK,iBAAiB,KAAK,IAAI,YAIxC,QAAQ,IACZ,KAAK,IAAI,MAAM,KAAI,MAAO,EAAM,WACxB,KAAK,iBAAiB,EAAM,EAAE,IAVxC,MAhBI,IAAK,MAAM,KAAQ,KAAK,IAAI,YACpB,QAAQ,IACZ,KAAK,IAAI,MAAM,GAAM,KAAI,MAAO,EAAM,WAC9B,KAAK,iBACT,EACA,EACA,EACyB,iBAAlB,KAAK,SACR,KAAK,SAAS,GACd,KAAK,SACV,IAmBb,CAMA,OAAA,GAGE,GAAI,KAAK,IAAI,MAAO,CAClB,IAAK,KAAK,IAAI,MAAM,IAClB,OAAO,KAAK,WAAW,KAAK,oBAAqB,SAEjD,IAAK,IAAI,EAAI,EAAG,EAAI,KAAK,IAAI,MAAM,OAAS,EAAG,IAC7C,KAAK,KAAK,KAAK,IACV,KAAK,cAAc,OAAO,EAAG,KAAK,MAAM,SAInD,CAIA,OAFA,KAAK,KAAK,KAAK,KAAK,eAEb,KAAK,KAAK,KAAK,GACpB,KAAK,WAAW,IAAK,KAAK,MAAM,KAAI,CAAC,EAAM,IAAM,EAAK,QAAS,IAEnE,CAOA,UAAA,CAAW,EAAS,GAClB,OAAO,OAAO,KAAK,GAAK,QAAO,CAAC,EAAK,KACnC,KAAK,gBAAkB,EAAI,GAAK,aAChC,KAAK,SAAW,EAAI,GAAK,aAClB,EAAI,GAAK,oBACT,EAAI,GAAK,MACT,IACF,EACH,aAAc,KAAK,gBACnB,MAAO,KAAK,SACP,CAAC,EAAQ,IAAQ,GAAM,EAAI,MAEjC,CAAC,EACN,CAOA,gBAAA,CAAiB,EAAM,EAAG,EAAO,GAAI,EAAgB,KAAK,UACxD,QAAQ,IACN,KAAK,MAAM,KAAK,IACd,KAAK,SAAW,EAAK,SAAS,MAAM,KAAK,GACzC,KAAK,cAAgB,GAAG,EAAc,MAAM,cAAc,KACnD,MAAL,EAAiB,IAAI,IAAM,MACzB,EAAK,QAAQ,KAAK,WACtB,KAAK,gBAAkB,KAAK,WAAW,OAAO,IAAI,EAAK,QACvD,GAAG,WAAW,KAAK,iBACnB,KAAK,cAAc,KAAK,CACtB,aAAc,EAAK,gBACf,GAAQ,CAAE,MAAO,GACrB,SAAU,KAAK,cACf,KAAM,GAAG,KAAK,WAAW,EAAK,QAAQ,KAAK,kBAEtC,MAAM,EAAK,QACf,OAAO,EAAK,MAAO,EAAK,OAAQ,KAAK,cACrC,OAAO,GAAG,KAAK,mBAAmB,KAAK,oBAGhD,CAMA,iBAAA,GACE,IAAK,MAAM,KAAQ,KAAK,IAAI,MAC1B,IAAK,IAAI,EAAI,EAAG,EAAI,KAAK,IAAI,MAAM,GAAM,OAAQ,IAC/C,KAAK,KAAK,KAAK,IACV,KAAK,cAAc,OAAO,EAAG,KAAK,MAAM,UAKjD,OAAO,KAAK,cACV,KAAK,KAAK,KAAK,GACb,KAAK,WAAW,IAAK,KAAK,MAAM,KAAI,CAAC,EAAM,IAAM,EAAK,QAAS,KAEjE,QAEJ,CAOA,aAAA,CAAc,EAAO,GACnB,OAAO,EAAM,QAAO,SAAU,EAAG,GAG/B,OAFA,EAAE,EAAE,IAAS,EAAE,EAAE,KAAU,GAC3B,EAAE,EAAE,IAAO,KAAK,GACT,CACT,GAAG,OAAO,OAAO,MACnB,CAOA,UAAA,CAAW,EAAK,GACd,IAAK,IAAI,KAAY,EACnB,GAA4B,iBAAjB,EAAI,GAAuB,QAC7B,EAAI,SACX,IAAI,EAAc,KAAK,WAAW,EAAI,GAAW,GACjD,EAAI,GAAY,CAClB,MACM,IAAa,UACR,EAAI,GAIjB,OAAO,CACT","file":"/npm/multer-sharp-resizer@1.0.5/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/multer-sharp-resizer@1.0.5/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","const fs = require(\"fs-extra\");\r\nconst sharp = require(\"sharp\");\r\n\r\nmodule.exports = class MulterSharpResizer {\r\n  /**\r\n   * Constructor method\r\n   * @param  {object} req\r\n   * @param  {string || object} filename\r\n   * @param  {array} sizes\r\n   * @param  {string} uploadPath\r\n   * @param  {string} fileUrl\r\n   * @param  {Object} sharpOptions\r\n   */\r\n  constructor(req, filename, sizes, uploadPath, fileUrl, sharpOptions) {\r\n    this.req = req;\r\n    this.filename = filename;\r\n    this.sizes = sizes;\r\n    this.uploadPath = uploadPath;\r\n    this.sharpOptions = sharpOptions || {};\r\n    this.fileUrl = fileUrl;\r\n    this.filesUploaded = [];\r\n    this.imageExt = null;\r\n    this.imageFilename = null;\r\n    this.imageUploadPath = null;\r\n    this.data = [];\r\n    this.tmpOriginalname = null;\r\n  }\r\n\r\n  /**\r\n   * Resize files method\r\n   */\r\n  async resize() {\r\n    if (this.req.files) {\r\n      if (!this.req.files.map) {\r\n        for (const prop in this.req.files) {\r\n          await Promise.all(\r\n            this.req.files[prop].map(async (file, i) => {\r\n              await this.promiseAllResize(\r\n                file,\r\n                i,\r\n                prop,\r\n                typeof this.filename === \"object\"\r\n                  ? this.filename[prop]\r\n                  : this.filename\r\n              );\r\n            })\r\n          );\r\n        }\r\n        return;\r\n      }\r\n    }\r\n\r\n    // Check multiple files\r\n    if (this.req.file) {\r\n      return await this.promiseAllResize(this.req.file);\r\n    }\r\n\r\n    // Promise.all() multiple files for resizing\r\n    await Promise.all(\r\n      this.req.files.map(async (file, i) => {\r\n        await this.promiseAllResize(file, i);\r\n      })\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Get Data method\r\n   * Data transform, preparation and return\r\n   */\r\n  getData() {\r\n    // Check multiple files\r\n    // Categorize files by size\r\n    if (this.req.files) {\r\n      if (!this.req.files.map) {\r\n        return this.removeProp(this.getDataWithFields(), \"field\");\r\n      } else {\r\n        for (let i = 0; i < this.req.files.length - 1; i++) {\r\n          this.data.push({\r\n            ...this.filesUploaded.splice(0, this.sizes.length),\r\n          });\r\n        }\r\n      }\r\n    }\r\n\r\n    this.data.push(this.filesUploaded);\r\n\r\n    return this.data.map((file) =>\r\n      this.renameKeys({ ...this.sizes.map((size, i) => size.path) }, file)\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Change keys name method\r\n   * @param  {object} keysMap\r\n   * @param  {object} obj\r\n   */\r\n  renameKeys(keysMap, obj) {\r\n    return Object.keys(obj).reduce((acc, key) => {\r\n      this.tmpOriginalname = obj[key].originalname;\r\n      this.tmpField = obj[key].field;\r\n      delete obj[key].originalname;\r\n      delete obj[key].field;\r\n      return {\r\n        ...acc,\r\n        originalname: this.tmpOriginalname,\r\n        field: this.tmpField,\r\n        ...{ [keysMap[key] || key]: obj[key] },\r\n      };\r\n    }, {});\r\n  }\r\n\r\n  /**\r\n   * Promise.all() for resize files method\r\n   * @param  {object} file\r\n   * @param  {number} i\r\n   */\r\n  promiseAllResize(file, i, prop = \"\", filenameParam = this.filename) {\r\n    Promise.all(\r\n      this.sizes.map((size) => {\r\n        this.imageExt = file.mimetype.split(\"/\")[1];\r\n        this.imageFilename = `${filenameParam.split(/\\.([^.]+)$/)[0]}${\r\n          i != undefined ? `-${i}` : \"\"\r\n        }-${size.path}.${this.imageExt}`;\r\n        this.imageUploadPath = this.uploadPath.concat(`/${size.path}`);\r\n        fs.mkdirsSync(this.imageUploadPath);\r\n        this.filesUploaded.push({\r\n          originalname: file.originalname,\r\n          ...(prop && { field: prop }),\r\n          filename: this.imageFilename,\r\n          path: `${this.fileUrl}/${size.path}/${this.imageFilename}`,\r\n        });\r\n        return sharp(file.buffer)\r\n          .resize(size.width, size.height, this.sharpOptions)\r\n          .toFile(`${this.imageUploadPath}/${this.imageFilename}`);\r\n      })\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Grouping data by field\r\n   * Return Data that send with multer fields method\r\n   */\r\n  getDataWithFields() {\r\n    for (const prop in this.req.files) {\r\n      for (let i = 0; i < this.req.files[prop].length; i++) {\r\n        this.data.push({\r\n          ...this.filesUploaded.splice(0, this.sizes.length),\r\n        });\r\n      }\r\n    }\r\n\r\n    return this.groupByFields(\r\n      this.data.map((file) =>\r\n        this.renameKeys({ ...this.sizes.map((size, i) => size.path) }, file)\r\n      ),\r\n      \"field\"\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Grouping data by specific property method\r\n   * @param  {array} array\r\n   * @param  {property} prop\r\n   */\r\n  groupByFields(array, prop) {\r\n    return array.reduce(function (r, a) {\r\n      r[a[prop]] = r[a[prop]] || [];\r\n      r[a[prop]].push(a);\r\n      return r;\r\n    }, Object.create(null));\r\n  }\r\n\r\n  /**\r\n   * Remove specific property method\r\n   * @param  {object} obj\r\n   * @param  {string} propToDelete\r\n   */\r\n  removeProp(obj, propToDelete) {\r\n    for (var property in obj) {\r\n      if (typeof obj[property] == \"object\") {\r\n        delete obj.property;\r\n        let newJsonData = this.removeProp(obj[property], propToDelete);\r\n        obj[property] = newJsonData;\r\n      } else {\r\n        if (property === propToDelete) {\r\n          delete obj[property];\r\n        }\r\n      }\r\n    }\r\n    return obj;\r\n  }\r\n};\r\n"]}