UNPKG

zip-iterator

Version:

Extract contents from zip archive type using an iterator API using streams or paths. Use stream interface and pipe transforms to add decompression algorithms

1 lines 4.04 kB
{"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"}