{"version":3,"sources":["jsdelivr-header.js","/npm/express-cache-gm-image@1.0.1/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNA,MAAM,GAAK,QAAQ,MACb,EAAI,QAAQ,QAEZ,QAAU,QAAQ,WAClB,OAAS,QAAQ,UACjB,GAAK,QAAQ,MACb,KAAO,QAAQ,QAErB,SAAS,YAAa,EAAY,EAAa,EAAO,IACpD,EAAQ,CACN,EAAG,SAAS,EAAM,IAAM,KACxB,EAAG,SAAS,EAAM,IAAM,KACxB,EAAG,SAAS,EAAM,IAAM,EACxB,EAAG,SAAS,EAAM,IAAM,EACxB,EAAG,SAAS,EAAM,IAAM,EACxB,EAAG,SAAS,EAAM,IAAM,EACxB,EAAG,SAAS,EAAM,IAAM,IAEhB,IAAG,EAAM,EAAI,KAClB,EAAM,IAAM,EAAM,IAAQ,EAAM,IAAM,EAAM,EAC/C,GAAG,GACA,OAAO,EAAM,EAAG,EAAM,EAAG,EAAM,GAC/B,YACA,MAAM,EAAa,GACb,EAAM,GAAK,EAAM,EAC1B,GAAG,GACA,OAAO,EAAM,EAAG,EAAM,EAAG,EAAM,GAC/B,KAAK,EAAM,EAAG,EAAM,EAAG,EAAM,EAAG,EAAM,GACtC,YACA,MAAM,EAAa,IACZ,EAAM,GAAK,EAAM,EAC3B,GAAG,GACA,KAAK,EAAM,EAAG,EAAM,EAAG,EAAM,EAAG,EAAM,GACtC,YACA,MAAM,EAAa,GAEtB,EAAG,IAAI,MAAM,gCAEjB,CAEA,SAAS,kBAAkB,KAAC,EAAI,SAAE,EAAQ,cAAE,EAAa,aAAE,IACzD,MAAM,EAAgB,QAAQ,OAAO,EAAU,GAE/C,OAAO,SAAU,EAAK,EAAK,GACzB,MAAM,EAAkB,EAAe,EAAa,KAAK,KAAM,EAAK,GAAO,EAC3E,IAAK,OAAO,KAAK,EAAI,OAAO,OAAQ,OAAO,IAC3C,IAAM,EAAI,MAAM,IAAK,EAAI,MAAM,EAAI,OAAO,IAC1C,MAAM,EAAc,EAAI,OAAO,GAC/B,GAAgD,UAA5C,KAAK,QAAQ,GAAa,MAAM,KAAK,GAAgB,OAAO,IAChE,MAAM,EAAW,EAAE,SAAS,GACtB,EAAa,EAAE,KAAK,EAAM,GAC1B,EAA2B,EAAE,QAAQ,GACrC,EAAa,EAAI,YAAY,QAAQ,KACrC,EAAY,EAAI,YAAY,MAAM,EAAa,GAC/C,EAAiB,EAAE,KAAK,EAAU,EAAW,GACnD,OAAO,GAAgB,SAAU,GAC/B,GAAI,EAAK,OAAO,EAAK,GACrB,MAAM,EAAe,EAAE,KAAK,EAAW,EAA0B,GAC3D,EAAc,EAAE,KAAK,EAAU,GAErC,GAAG,KAAK,GAAY,SAAU,EAAK,GACjC,GAAI,EAAK,OAAO,IAChB,GAAG,KAAK,GAAa,SAAU,EAAK,GAC9B,GAAO,EAAU,MAAM,UAAY,EAAW,MAAM,UACtD,YAAY,EAAY,EAAa,OAAO,OAAO,CAAC,EAAG,EAAI,QAAQ,SAAU,GAC3E,GAAI,EAAK,OAAO,EAAK,GACrB,EAAI,IAAM,EACV,EAAc,EAAK,EAAK,EAC1B,KAEA,EAAI,IAAM,EACV,EAAc,EAAK,EAAK,GAE5B,GACF,GACF,GACF,CACF,CAEA,OAAO,QAAU","file":"/npm/express-cache-gm-image@1.0.1/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/express-cache-gm-image@1.0.1/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')\nconst p = require('path')\n\nconst express = require('express')\nconst mkdirp = require('mkdirp')\nconst gm = require('gm')\nconst mime = require('mime')\n\nfunction updateImage (origFsPath, cacheFsPath, query, cb) {\n  query = {\n    w: parseInt(query.w) || null,\n    h: parseInt(query.h) || null,\n    c: parseInt(query.c) || 0,\n    f: parseInt(query.f) || 0,\n    x: parseInt(query.x) || 0,\n    y: parseInt(query.y) || 0,\n    r: parseInt(query.r) || 0,\n  }\n  if (query.f) query.f = '!'\n  if ((query.r && !query.c) || (!query.c && !query.r)) { // resize default\n    gm(origFsPath)\n      .resize(query.w, query.h, query.f)\n      .noProfile()\n      .write(cacheFsPath, cb)\n  } else if (query.r && query.c) { // resize and crop\n    gm(origFsPath)\n      .resize(query.w, query.h, query.f)\n      .crop(query.w, query.h, query.x, query.y)\n      .noProfile()\n      .write(cacheFsPath, cb)\n  } else if (!query.r && query.c) { // crop only\n    gm(origFsPath)\n      .crop(query.w, query.h, query.x, query.y)\n      .noProfile()\n      .write(cacheFsPath, cb)\n  } else {\n    cb(new Error('Wrong params for updateImage'))\n  }\n}\n\nfunction ImagerMiddleware ({root, cacheDir, staticOptions, nextFunction}) {\n  const expressStatic = express.static(cacheDir, staticOptions)\n\n  return function (req, res, next) {\n    const newNextFunction = nextFunction ? nextFunction.bind(null, req, res) : next\n    if (!Object.keys(req.query).length) return next()\n    if (!(req.query.w || req.query.h)) return next()\n    const origUrlPath = req.params[0]\n    if (mime.getType(origUrlPath).split('/')[0] !== 'image') return next() // должно быть изображение\n    const basename = p.basename(origUrlPath)\n    const origFsPath = p.join(root, origUrlPath)\n    const cachePathFromOrigUrlPath = p.dirname(origUrlPath)\n    const queryindex = req.originalUrl.indexOf('?')\n    const queryname = req.originalUrl.slice(queryindex + 1)\n    const cacheDirToFile = p.join(cacheDir, queryname, cachePathFromOrigUrlPath)\n    mkdirp(cacheDirToFile, function (err) {\n      if (err) return next(err)\n      const cacheUrlPath = p.join(queryname, cachePathFromOrigUrlPath, basename)\n      const cacheFsPath = p.join(cacheDir, cacheUrlPath)\n\n      fs.stat(origFsPath, function (err, origStats) {\n        if (err) return newNextFunction() // файл не найден 404\n        fs.stat(cacheFsPath, function (err, cacheStats) {\n          if (err || origStats.mtime.getTime() > cacheStats.mtime.getTime()) {\n            updateImage(origFsPath, cacheFsPath, Object.assign({}, req.query), function (err) {\n              if (err) return next(err)\n              req.url = cacheUrlPath\n              expressStatic(req, res, newNextFunction)\n            })\n          } else {\n            req.url = cacheUrlPath\n            expressStatic(req, res, newNextFunction)\n          }\n        })\n      })\n    })\n  }\n}\n\nmodule.exports = ImagerMiddleware\n"]}