{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/zip-iterator/src/ZipIterator.mjs"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport './polyfills.cjs';\n\nimport BaseIterator from 'extract-base-iterator';\nimport Queue from 'queue-cb';\nimport shortHash from 'short-hash';\nimport tempSuffix from 'temp-suffix';\n\nimport Lock from './lib/Lock.mjs';\nimport Zip from './lib/Zip.js';\nimport fifoRemove from './lib/fifoRemove.mjs';\nimport streamToFile from './lib/streamToFile.mjs';\nimport nextEntry from './nextEntry.mjs';\n\nimport os from 'os';\nimport osShim from 'os-shim';\n\nconst tmpdir = os.tmpdir || osShim.tmpdir;\n\nexport default class ZipIterator extends BaseIterator {\n  constructor(source, options) {\n    super(options);\n    this.lock = new Lock();\n    this.lock.iterator = this;\n\n    const queue = new Queue(1);\n    let cancelled = false;\n    const setup = () => {\n      cancelled = true;\n    };\n    this.processing.push(setup);\n\n    if (typeof source !== 'string') {\n      this.lock.tempPath = path.join(tmpdir(), 'zip-iterator', shortHash(process.cwd()), tempSuffix('tmp.zip'));\n      queue.defer(streamToFile.bind(null, source, this.lock.tempPath));\n    }\n\n    // open zip\n    queue.defer((cb) => {\n      fs.open(this.lock.tempPath || source, 'r', '0666', (err, fd) => {\n        if (this.done || cancelled) return; // done\n        if (err) return cb(err);\n        const reader = new Zip(fd);\n        this.lock.fd = fd;\n        this.iterator = reader.iterator();\n        cb();\n      });\n    });\n\n    // start processing\n    queue.await((err) => {\n      fifoRemove(this.processing, setup);\n      if (this.done || cancelled) return; // done\n      err ? this.end(err) : this.push(nextEntry);\n    });\n  }\n\n  end(err) {\n    if (this.lock) {\n      this.lock.err = err;\n      this.lock.release();\n      this.lock = null;\n    } else {\n      BaseIterator.prototype.end.call(this, err); // call in lock release so end is properly handled\n    }\n    this.iterator = null;\n  }\n}\n"],"names":["ZipIterator","tmpdir","os","osShim","source","options","lock","Lock","iterator","queue","Queue","cancelled","setup","processing","push","tempPath","path","join","shortHash","process","cwd","tempSuffix","defer","streamToFile","bind","cb","fs","open","err","fd","done","reader","Zip","await","fifoRemove","end","nextEntry","release","BaseIterator","prototype","call"],"mappings":";;;;;;;eAoBqBA;;;yDApBN;2DACE;QACV;0EAEkB;8DACP;gEACI;iEACC;2DAEN;0DACD;iEACO;mEACE;gEACH;yDAEP;6DACI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEnB,IAAMC,SAASC,WAAE,CAACD,MAAM,IAAIE,eAAM,CAACF,MAAM;AAE1B,IAAA,AAAMD,4BAAN;;cAAMA;aAAAA,YACPI,MAAM,EAAEC,OAAO;gCADRL;;gBAEjB,kBAFiBA;YAEXK;;QACN,MAAKC,IAAI,GAAG,IAAIC,aAAI;QACpB,MAAKD,IAAI,CAACE,QAAQ;QAElB,IAAMC,QAAQ,IAAIC,gBAAK,CAAC;QACxB,IAAIC,YAAY;QAChB,IAAMC,QAAQ;YACZD,YAAY;QACd;QACA,MAAKE,UAAU,CAACC,IAAI,CAACF;QAErB,IAAI,OAAOR,WAAW,UAAU;YAC9B,MAAKE,IAAI,CAACS,QAAQ,GAAGC,aAAI,CAACC,IAAI,CAAChB,UAAU,gBAAgBiB,IAAAA,kBAAS,EAACC,QAAQC,GAAG,KAAKC,IAAAA,mBAAU,EAAC;YAC9FZ,MAAMa,KAAK,CAACC,qBAAY,CAACC,IAAI,CAAC,MAAMpB,QAAQ,MAAKE,IAAI,CAACS,QAAQ;QAChE;QAEA,WAAW;QACXN,MAAMa,KAAK,CAAC,SAACG;YACXC,WAAE,CAACC,IAAI,CAAC,MAAKrB,IAAI,CAACS,QAAQ,IAAIX,QAAQ,KAAK,QAAQ,SAACwB,KAAKC;gBACvD,IAAI,MAAKC,IAAI,IAAInB,WAAW,QAAQ,OAAO;gBAC3C,IAAIiB,KAAK,OAAOH,GAAGG;gBACnB,IAAMG,SAAS,IAAIC,YAAG,CAACH;gBACvB,MAAKvB,IAAI,CAACuB,EAAE,GAAGA;gBACf,MAAKrB,QAAQ,GAAGuB,OAAOvB,QAAQ;gBAC/BiB;YACF;QACF;QAEA,mBAAmB;QACnBhB,MAAMwB,KAAK,CAAC,SAACL;YACXM,IAAAA,mBAAU,EAAC,MAAKrB,UAAU,EAAED;YAC5B,IAAI,MAAKkB,IAAI,IAAInB,WAAW,QAAQ,OAAO;YAC3CiB,MAAM,MAAKO,GAAG,CAACP,OAAO,MAAKd,IAAI,CAACsB,kBAAS;QAC3C;;;iBAnCiBpC;IAsCnBmC,OAAAA,GASC,GATDA,SAAAA,IAAIP,GAAG;QACL,IAAI,IAAI,CAACtB,IAAI,EAAE;YACb,IAAI,CAACA,IAAI,CAACsB,GAAG,GAAGA;YAChB,IAAI,CAACtB,IAAI,CAAC+B,OAAO;YACjB,IAAI,CAAC/B,IAAI,GAAG;QACd,OAAO;YACLgC,4BAAY,CAACC,SAAS,CAACJ,GAAG,CAACK,IAAI,CAAC,IAAI,EAAEZ,MAAM,kDAAkD;QAChG;QACA,IAAI,CAACpB,QAAQ,GAAG;IAClB;WA/CmBR;EAAoBsC,4BAAY"}