{"version":3,"sources":["jsdelivr-header.js","/npm/tinify-compress@1.0.10/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNA,MAAM,GAAK,QAAQ,MACb,KAAO,QAAQ,QACf,OAAS,QAAQ,UACjB,MAAQ,QAAQ,SAChB,OAAS,QAAQ,UACjB,KAAO,QAAQ,WAAR,CAAoB,QAAQ,KAAK,MAAM,IAC9C,KAAO,QAAQ,cAMrB,SAAS,UACF,KAAK,GACR,KAAK,SAAS,kDAGX,GAAG,WAAW,KAAK,IAAO,GAAG,SAAS,KAAK,GAAG,eACjD,KAAK,SAAS,GAAG,KAAK,uBAGnB,KAAK,KACR,KAAK,SAAS,0CAIhB,OAAO,IAAM,KAAK,IAClB,OAAO,UAAS,SAAS,GACnB,EACF,KAAK,SAAS,+DAMlB,WACE,IAAI,EAAa,KAAK,EAClB,EAAW,KAAK,GAAK,KAAK,EAI1B,EAAY,GAAG,YAAY,GAAY,QAAO,GAAQ,eAAe,KAAK,KAEzE,GAAG,WAAW,IACjB,KAAK,UAAU,GAGjB,IAAI,EAAW,GACX,EAAiB,EACjB,EAAe,EACf,EAAQ,EACZ,EAAU,SAAQ,IAChB,IAAI,EAAa,KAAK,KAAK,EAAY,GACnC,EAAW,KAAK,KAAK,EAAU,GAE/B,EAAY,KAAK,YAAY,GACjC,GAAkB,EAGlB,EAAS,KAAK,CACZ,MAAO,EACP,KAAM,CAAC,EAAK,IACH,IAAI,SAAQ,CAAC,EAAS,KAC3B,OAAO,SAAS,GAAY,OAAO,GAAU,SAAS,GACpD,IAEA,IAAI,EAAU,KAAK,YAAY,GAC/B,GAAgB,EAChB,IAAI,IAAa,EAAY,GAAW,EAAa,KAAK,QAAQ,GAClE,EAAK,MAAQ,GAAG,EAAK,OAAO,UAAU,EAAU,QAAQ,GAAK,MAAM,OAAO,UACxE,EAAQ,QAAQ,GAAK,MACrB,OAAO,QAAQ,QACjB,IAEI,GAAS,EAAU,QACrB,YAAW,IACT,IAAI,EAAY,EAAiB,EAC7B,GAAiB,EAAiB,GAAgB,EAAkB,IACxE,QAAQ,IACN,2BAA2B,EAAe,QAAQ,qBAAqB,EAAa,QAClF,oBACiB,EAAU,QAAQ,uBAAuB,EAAa,QAAQ,QAAQ,MAC3F,GAGN,GAAC,KAGN,IAGW,IAAI,MAAM,GAElB,MAAM,OAAM,IAChB,GAAI,EAAK,MAAM,IAEnB,CAjEI,EAEJ,GAgEF,CAzFA,QAAQ,IAAI,yBA2FZ,OAAO,QAAU","file":"/npm/tinify-compress@1.0.10/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/tinify-compress@1.0.10/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')\r\nconst path = require('path')\r\nconst tinify = require('tinify')\r\nconst Listr = require('listr')\r\nconst colors = require('colors')\r\nconst argv = require('minimist')(process.argv.slice(2))\r\nconst util = require('./lib/util')\r\n\r\nconsole.log('tinify-compress start')\r\n\r\n// 1. 检测参数， 不符合则会退出程序\r\n// 校验参数传递\r\nfunction tinypng() {\r\n  if (!argv.s) {\r\n    util.logError(`arguments --s(image source path) is necessary!`)\r\n  }\r\n\r\n  if (!fs.existsSync(argv.s) || !fs.statSync(argv.s).isDirectory()) {\r\n    util.logError(`${argv.s} is not directory!`)\r\n  }\r\n\r\n  if (!argv.key) {\r\n    util.logError(`arguments --key(api KEY) is necessary!`)\r\n  }\r\n\r\n  // 校验API key\r\n  tinify.key = argv.key\r\n  tinify.validate(function(err) {\r\n    if (err) {\r\n      util.logError('invalid API key, to get key: https://tinypng.com/developers')\r\n    } else {\r\n      compress()\r\n    }\r\n  })\r\n\r\n  function compress() {\r\n    let sourcePath = argv.s\r\n    let distPath = argv.d || argv.s\r\n\r\n    // 获取源文件夹下的所有图片\r\n    // let files = fs.readdirSync(sourcePath)\r\n    let imageList = fs.readdirSync(sourcePath).filter(item => /(png|jpe?g)$/.test(item))\r\n\r\n    if (!fs.existsSync(distPath)) {\r\n      util.mkdirSync(distPath)\r\n    }\r\n\r\n    let taskList = []\r\n    let startTotalSize = 0\r\n    let endTotalSize = 0\r\n    let count = 0\r\n    imageList.forEach(item => {\r\n      let sourceFile = path.join(sourcePath, item)\r\n      let distFile = path.join(distPath, item)\r\n\r\n      let startSize = util.getFileSize(sourceFile)\r\n      startTotalSize += startSize\r\n\r\n      // 对每张图片建立任务\r\n      taskList.push({\r\n        title: item,\r\n        task: (ctx, task) => {\r\n          return new Promise((reslove, reject) => {\r\n            tinify.fromFile(sourceFile).toFile(distFile, function(e) {\r\n              reslove()\r\n\r\n              let endSize = util.getFileSize(distFile)\r\n              endTotalSize += endSize\r\n              let percent = (((startSize - endSize) / startSize) * 100).toFixed(0)\r\n              task.title = `${item.padEnd(50)} [ ${(startSize.toFixed(1) + 'KB').padEnd(8)} => ${(\r\n                endSize.toFixed(1) + 'KB'\r\n              ).padEnd(8)}  -${percent}% ] `\r\n              count++\r\n\r\n              if (count >= imageList.length) {\r\n                setTimeout(e => {\r\n                  let savedSize = startTotalSize - endTotalSize\r\n                  let savedPercent = ((startTotalSize - endTotalSize) / startTotalSize) * 100\r\n                  console.log(\r\n                    `complete!  [ totalSize: ${startTotalSize.toFixed(1)}KB, resultSize: ${endTotalSize.toFixed(\r\n                      1\r\n                    )}KB, savedSize: ${savedSize.toFixed(1)}KB, savedPercent: ${savedPercent.toFixed(0)}% ]`.green\r\n                  )\r\n                })\r\n              }\r\n            })\r\n          })\r\n        }\r\n      })\r\n    })\r\n\r\n    const tasks = new Listr(taskList)\r\n    // 运行任务\r\n    tasks.run().catch(err => {\r\n      if (err) throw err\r\n    })\r\n  }\r\n}\r\n\r\nmodule.exports = tinypng\r\n"]}