{"version":3,"sources":["jsdelivr-header.js","/npm/splitdata@0.0.1/src/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNA,MAAM,QAAC,QAAO,MAAE,OAAS,QAAQ,kBAC3B,GAAK,QAAQ,MACb,KAAO,QAAQ,QACf,MAAQ,QAAQ,SAEhB,WAAa,GAEnB,MAAM,yBAAyB,QAC7B,SAAM,GACJ,MAAM,MAAC,GAAS,KAAK,MAAM,mBAGrB,KAAC,GAAQ,KAAK,MAAM,kBAC1B,GAAI,EAAK,OAAS,GAAM,EAEtB,YADA,KAAK,IAAI,6DAGX,MAAM,EAAQ,CAAC,EACf,IAAK,IAAI,EAAI,EAAG,EAAI,EAAK,OAAQ,GAAK,EACpC,EAAM,EAAK,IAAM,OAAO,EAAK,EAAI,IAGvB,IADA,OAAO,OAAO,GAAO,QAAO,CAAC,EAAK,IAAQ,EAAM,GAAK,IAE/D,KAAK,IAAI,kCAGX,MAAM,QAAc,KAAK,QAAQ,EAAM,MAAO,EAAM,WAG9C,EAAc,EAAM,OAC1B,IAAI,EAAiB,EAAM,OAC3B,MAAM,EAAW,OAAO,KAAK,GAAO,QAAO,CAAC,EAAK,KAC/C,MAAM,EAAQ,KAAK,MAAM,EAAc,EAAM,IAU7C,OATI,EAAiB,EAAQ,GAC3B,EAAI,GAAO,EAAM,MAAM,EAAG,GAC1B,EAAM,OAAO,EAAG,GAChB,EAAiB,IAEjB,EAAI,GAAO,EAAM,MAAM,EAAG,GAC1B,EAAM,OAAO,EAAG,GAChB,GAAkB,GAEb,IACN,CAAC,SAGE,OAAO,KAAK,GAAU,QAAO,CAAC,EAAG,IAAS,EAAE,MAAK,UACrD,MAAM,EAAQ,EAAS,GACjB,EAAS,GAAG,QAAQ,SAAS,IACnC,KAAK,IAAI,UAAU,KACnB,GAAG,UAAU,SACP,MAAM,UAAU,EA9CT,IA8C4B,gBACjC,IAAI,SAAQ,IAChB,GAAG,OAAO,EAAM,GAAG,KAAU,EAAK,MAAM,KAAK,QAAS,EAAO,GAC9D,GACF,KACC,QAAQ,UACd,CAEA,aAAM,CAAQ,EAAK,GAAY,GAC7B,MAAM,EAAU,EAAY,kBAAoB,eAC1C,EAAO,GAAG,UAAU,GAAK,cAAgB,EAAM,GAAG,QAAQ,SAAS,IACzE,OAAO,IAAI,SAAQ,CAAC,EAAS,KAC3B,KAAK,EAAS,CACZ,IAAK,EACL,UAAU,IACT,CAAC,EAAK,KACP,GAAI,EAGF,OAFA,KAAK,IAAI,QACT,EAAO,GAGT,EAAQ,EAAK,GACd,GAEL,EAGF,iBAAiB,QAAS,EAE1B,iBAAiB,YAAc,sGAK/B,iBAAiB,MAAQ,CAEvB,QAAS,MAAM,QAAQ,CAAC,KAAM,MAE9B,KAAM,MAAM,KAAK,CAAC,KAAM,MACxB,MAAO,MAAM,OAAO,CAAC,KAAM,IAAK,YAAa,iBAC7C,UAAW,MAAM,QAAQ,CAAC,KAAM,IAAK,YAAa,wBAClD,OAAQ,MAAM,OAAO,CAAC,KAAM,IAAK,YAAa,0CAGhD,OAAO,QAAU","file":"/npm/splitdata@0.0.1/src/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/splitdata@0.0.1/src/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 {Command, flags} = require('@oclif/command')\nconst fs = require('fs')\nconst glob = require('glob')\nconst async = require('async')\n\nconst CONCURRECY = 50\n\nclass SplitdataCommand extends Command {\n  async run() {\n    const {flags} = this.parse(SplitdataCommand)\n\n    // take folder pairs\n    const {argv} = this.parse(SplitdataCommand)\n    if (argv.length % 2 !== 0) {\n      this.log('folder need to be in pair, for exmaple train 0.8 test 0.2')\n      return\n    }\n    const paris = {}\n    for (let i = 0; i < argv.length; i += 2) {\n      paris[argv[i]] = Number(argv[i + 1])\n    }\n    const sum = Object.values(paris).reduce((acc, cur) => acc + cur, 0)\n    if (sum !== 1) {\n      this.log('sum of percentage need to be 1')\n    }\n\n    const files = await this.readDir(flags.input, flags.recursive)\n\n    // get the actual files list need to be move\n    const totalLength = files.length\n    let remainingCount = files.length\n    const fileList = Object.keys(paris).reduce((acc, key) => {\n      const count = Math.round(totalLength * paris[key])\n      if (remainingCount - count < 0) {\n        acc[key] = files.slice(0, remainingCount)\n        files.splice(0, remainingCount)\n        remainingCount = 0\n      } else {\n        acc[key] = files.slice(0, count)\n        files.splice(0, count)\n        remainingCount -= count\n      }\n      return acc\n    }, {})\n\n    // process on file list\n    await Object.keys(fileList).reduce((p, next) => p.then(async () => {\n      const files = fileList[next]\n      const folder = `${process.cwd()}/${next}`\n      this.log(`moving ${folder}`)\n      fs.mkdirSync(folder)\n      await async.eachLimit(files, CONCURRECY, async file => {\n        await new Promise(resolve => {\n          fs.rename(file, `${folder}/${file.split('/').pop()}`, resolve)\n        })\n      })\n    }), Promise.resolve())\n  }\n\n  async readDir(dir, recursive = false) {\n    const pattern = recursive ? '**/*.+(jpg|png)' : '*.+(jpg|png)'\n    const path = fs.lstatSync(dir).isDirectory() ? dir : `${process.cwd()}/${dir}`\n    return new Promise((resolve, reject) => {\n      glob(pattern, {\n        cwd: path,\n        absolute: true,\n      }, (err, files) => {\n        if (err) {\n          this.log(err)\n          reject(err)\n          return\n        }\n        resolve(files)\n      })\n    })\n  }\n}\n\nSplitdataCommand.strict = false\n\nSplitdataCommand.description = `Describe the command here\n...\nAble to split data to different folder with customized percentage\n`\n\nSplitdataCommand.flags = {\n  // add --version flag to show CLI version\n  version: flags.version({char: 'v'}),\n  // add --help flag to show CLI version\n  help: flags.help({char: 'h'}),\n  input: flags.string({char: 'i', description: 'input folder'}),\n  recursive: flags.boolean({char: 'r', description: 'process recursively'}),\n  sample: flags.string({char: 's', description: 'sample size to take out from dataset'}),\n}\n\nmodule.exports = SplitdataCommand\n"]}