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.18 kB
Source Map (JSON)
{"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":["fs","path","BaseIterator","Queue","shortHash","tempSuffix","Lock","Zip","fifoRemove","streamToFile","nextEntry","os","osShim","tmpdir","ZipIterator","end","err","lock","release","prototype","call","iterator","constructor","source","options","queue","cancelled","setup","processing","push","tempPath","join","process","cwd","defer","bind","cb","open","fd","done","reader","await"],"mappings":"AAAA,OAAOA,QAAQ,KAAK;AACpB,OAAOC,UAAU,OAAO;AACxB,OAAO,kBAAkB;AAEzB,OAAOC,kBAAkB,wBAAwB;AACjD,OAAOC,WAAW,WAAW;AAC7B,OAAOC,eAAe,aAAa;AACnC,OAAOC,gBAAgB,cAAc;AAErC,OAAOC,UAAU,iBAAiB;AAClC,OAAOC,SAAS,eAAe;AAC/B,OAAOC,gBAAgB,uBAAuB;AAC9C,OAAOC,kBAAkB,yBAAyB;AAClD,OAAOC,eAAe,kBAAkB;AAExC,OAAOC,QAAQ,KAAK;AACpB,OAAOC,YAAY,UAAU;AAE7B,MAAMC,SAASF,GAAGE,MAAM,IAAID,OAAOC,MAAM;AAE1B,IAAA,AAAMC,cAAN,MAAMA,oBAAoBZ;IAsCvCa,IAAIC,GAAG,EAAE;QACP,IAAI,IAAI,CAACC,IAAI,EAAE;YACb,IAAI,CAACA,IAAI,CAACD,GAAG,GAAGA;YAChB,IAAI,CAACC,IAAI,CAACC,OAAO;YACjB,IAAI,CAACD,IAAI,GAAG;QACd,OAAO;YACLf,aAAaiB,SAAS,CAACJ,GAAG,CAACK,IAAI,CAAC,IAAI,EAAEJ,MAAM,kDAAkD;QAChG;QACA,IAAI,CAACK,QAAQ,GAAG;IAClB;IA9CAC,YAAYC,MAAM,EAAEC,OAAO,CAAE;QAC3B,KAAK,CAACA;QACN,IAAI,CAACP,IAAI,GAAG,IAAIX;QAChB,IAAI,CAACW,IAAI,CAACI,QAAQ,GAAG,IAAI;QAEzB,MAAMI,QAAQ,IAAItB,MAAM;QACxB,IAAIuB,YAAY;QAChB,MAAMC,QAAQ;YACZD,YAAY;QACd;QACA,IAAI,CAACE,UAAU,CAACC,IAAI,CAACF;QAErB,IAAI,OAAOJ,WAAW,UAAU;YAC9B,IAAI,CAACN,IAAI,CAACa,QAAQ,GAAG7B,KAAK8B,IAAI,CAAClB,UAAU,gBAAgBT,UAAU4B,QAAQC,GAAG,KAAK5B,WAAW;YAC9FoB,MAAMS,KAAK,CAACzB,aAAa0B,IAAI,CAAC,MAAMZ,QAAQ,IAAI,CAACN,IAAI,CAACa,QAAQ;QAChE;QAEA,WAAW;QACXL,MAAMS,KAAK,CAAC,CAACE;YACXpC,GAAGqC,IAAI,CAAC,IAAI,CAACpB,IAAI,CAACa,QAAQ,IAAIP,QAAQ,KAAK,QAAQ,CAACP,KAAKsB;gBACvD,IAAI,IAAI,CAACC,IAAI,IAAIb,WAAW,QAAQ,OAAO;gBAC3C,IAAIV,KAAK,OAAOoB,GAAGpB;gBACnB,MAAMwB,SAAS,IAAIjC,IAAI+B;gBACvB,IAAI,CAACrB,IAAI,CAACqB,EAAE,GAAGA;gBACf,IAAI,CAACjB,QAAQ,GAAGmB,OAAOnB,QAAQ;gBAC/Be;YACF;QACF;QAEA,mBAAmB;QACnBX,MAAMgB,KAAK,CAAC,CAACzB;YACXR,WAAW,IAAI,CAACoB,UAAU,EAAED;YAC5B,IAAI,IAAI,CAACY,IAAI,IAAIb,WAAW,QAAQ,OAAO;YAC3CV,MAAM,IAAI,CAACD,GAAG,CAACC,OAAO,IAAI,CAACa,IAAI,CAACnB;QAClC;IACF;AAYF;AAhDA,SAAqBI,yBAgDpB"}