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 • 3.94 kB
Source Map (JSON)
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/zip-iterator/src/nextEntry.mjs"],"sourcesContent":["import path from 'path';\nimport once from 'call-once-fn';\nimport compact from 'lodash.compact';\n\nimport { DirectoryEntry, LinkEntry, SymbolicLinkEntry } from 'extract-base-iterator';\nimport FileEntry from './FileEntry.mjs';\nimport parseExternalFileAttributes from './lib/parseExternalFileAttributes.mjs';\nimport streamToString from './lib/streamToString.mjs';\n\nexport default function nextEntry(iterator, callback) {\n if (!iterator.iterator) return callback(new Error('iterator missing'));\n\n let entry = null;\n while (!entry) {\n try {\n entry = iterator.iterator.next();\n } catch (err) {\n if (err === 'stop-iteration') break;\n if (err === 'skip-iteration') continue;\n throw err;\n }\n }\n\n const _callback = callback;\n callback = once(function callback(err, entry) {\n // keep processing\n if (entry) iterator.stack.push(nextEntry);\n err ? _callback(err) : _callback(null, entry);\n });\n\n // done: use null to indicate iteration is complete\n if (iterator.done || !entry) return callback(null, null);\n\n const localHeader = entry.localHeader;\n const centralHeader = entry.centralHeader;\n\n const attributes = parseExternalFileAttributes(centralHeader.external_file_attributes, centralHeader.version >> 8);\n attributes.path = compact(localHeader.file_name.split(path.sep)).join(path.sep);\n attributes.mtime = entry.lastModified();\n\n switch (attributes.type) {\n case 'directory':\n return callback(null, new DirectoryEntry(attributes));\n case 'symlink':\n case 'link':\n return streamToString(entry.getStream(), (err, string) => {\n if (err) return callback(err);\n\n attributes.linkpath = string;\n const Link = attributes.type === 'symlink' ? SymbolicLinkEntry : LinkEntry;\n return callback(null, new Link(attributes));\n });\n\n case 'file':\n return callback(null, new FileEntry(attributes, entry, iterator.lock));\n }\n\n return callback(new Error(`Unrecognized entry type: ${attributes.type}`));\n}\n"],"names":["nextEntry","iterator","callback","Error","entry","next","err","_callback","once","stack","push","done","localHeader","centralHeader","attributes","parseExternalFileAttributes","external_file_attributes","version","path","compact","file_name","split","sep","join","mtime","lastModified","type","DirectoryEntry","streamToString","getStream","string","linkpath","Link","SymbolicLinkEntry","LinkEntry","FileEntry","lock"],"mappings":";;;;+BASA;;;eAAwBA;;;2DATP;iEACA;oEACG;mCAEyC;gEACvC;kFACkB;qEACb;;;;;;AAEZ,SAASA,UAAUC,QAAQ,EAAEC,QAAQ;IAClD,IAAI,CAACD,SAASA,QAAQ,EAAE,OAAOC,SAAS,IAAIC,MAAM;IAElD,IAAIC,QAAQ;IACZ,MAAO,CAACA,MAAO;QACb,IAAI;YACFA,QAAQH,SAASA,QAAQ,CAACI,IAAI;QAChC,EAAE,OAAOC,KAAK;YACZ,IAAIA,QAAQ,kBAAkB;YAC9B,IAAIA,QAAQ,kBAAkB;YAC9B,MAAMA;QACR;IACF;IAEA,IAAMC,YAAYL;IAClBA,WAAWM,IAAAA,mBAAI,EAAC,SAASN,SAASI,GAAG,EAAEF,KAAK;QAC1C,kBAAkB;QAClB,IAAIA,OAAOH,SAASQ,KAAK,CAACC,IAAI,CAACV;QAC/BM,MAAMC,UAAUD,OAAOC,UAAU,MAAMH;IACzC;IAEA,mDAAmD;IACnD,IAAIH,SAASU,IAAI,IAAI,CAACP,OAAO,OAAOF,SAAS,MAAM;IAEnD,IAAMU,cAAcR,MAAMQ,WAAW;IACrC,IAAMC,gBAAgBT,MAAMS,aAAa;IAEzC,IAAMC,aAAaC,IAAAA,oCAA2B,EAACF,cAAcG,wBAAwB,EAAEH,cAAcI,OAAO,IAAI;IAChHH,WAAWI,IAAI,GAAGC,IAAAA,sBAAO,EAACP,YAAYQ,SAAS,CAACC,KAAK,CAACH,aAAI,CAACI,GAAG,GAAGC,IAAI,CAACL,aAAI,CAACI,GAAG;IAC9ER,WAAWU,KAAK,GAAGpB,MAAMqB,YAAY;IAErC,OAAQX,WAAWY,IAAI;QACrB,KAAK;YACH,OAAOxB,SAAS,MAAM,IAAIyB,mCAAc,CAACb;QAC3C,KAAK;QACL,KAAK;YACH,OAAOc,IAAAA,uBAAc,EAACxB,MAAMyB,SAAS,IAAI,SAACvB,KAAKwB;gBAC7C,IAAIxB,KAAK,OAAOJ,SAASI;gBAEzBQ,WAAWiB,QAAQ,GAAGD;gBACtB,IAAME,OAAOlB,WAAWY,IAAI,KAAK,YAAYO,sCAAiB,GAAGC,8BAAS;gBAC1E,OAAOhC,SAAS,MAAM,IAAI8B,KAAKlB;YACjC;QAEF,KAAK;YACH,OAAOZ,SAAS,MAAM,IAAIiC,kBAAS,CAACrB,YAAYV,OAAOH,SAASmC,IAAI;IACxE;IAEA,OAAOlC,SAAS,IAAIC,MAAM,AAAC,4BAA2C,OAAhBW,WAAWY,IAAI;AACvE"}