UNPKG

tar-iterator

Version:

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

1 lines 4.19 kB
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/tar-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';\n\nexport default function nextEntry(next, iterator, callback) {\n const extract = iterator.extract;\n if (!extract) return callback(new Error('Extract missing'));\n\n const _callback = callback;\n callback = once(function callback(err, entry, next) {\n extract.removeListener('entry', onEntry);\n extract.removeListener('error', onError);\n extract.removeListener('finish', onEnd);\n\n // keep processing\n if (entry) iterator.stack.push(nextEntry.bind(null, next));\n\n // use null to indicate iteration is complete\n _callback(err, err || !entry ? null : entry);\n });\n\n const onError = callback;\n const onEnd = callback.bind(null, null);\n const onEntry = function onEntry(header, stream, next) {\n if (iterator.done) return callback(null, null, next);\n\n const attributes = { ...header };\n attributes.path = compact(header.name.split(path.sep)).join(path.sep);\n attributes.mtime = new Date(attributes.mtime);\n\n switch (attributes.type) {\n case 'directory':\n stream.resume(); // drain stream\n return callback(null, new DirectoryEntry(attributes), next);\n case 'symlink':\n stream.resume(); // drain stream\n attributes.linkpath = header.linkname;\n return callback(null, new SymbolicLinkEntry(attributes), next);\n case 'link':\n stream.resume(); // drain stream\n attributes.linkpath = header.linkname;\n return callback(null, new LinkEntry(attributes), next);\n case 'file':\n return callback(null, new FileEntry(attributes, stream, iterator.lock), next);\n }\n\n stream.resume(); // drain stream\n return callback(new Error(`Unrecognized entry type: ${attributes.type}`), null, next);\n };\n\n extract.on('entry', onEntry);\n extract.on('error', onError);\n extract.on('finish', onEnd);\n if (next) next();\n}\n"],"names":["path","once","compact","DirectoryEntry","LinkEntry","SymbolicLinkEntry","FileEntry","nextEntry","next","iterator","callback","extract","Error","_callback","err","entry","removeListener","onEntry","onError","onEnd","stack","push","bind","header","stream","done","attributes","name","split","sep","join","mtime","Date","type","resume","linkpath","linkname","lock","on"],"mappings":"AAAA,OAAOA,UAAU,OAAO;AACxB,OAAOC,UAAU,eAAe;AAChC,OAAOC,aAAa,iBAAiB;AAErC,SAASC,cAAc,EAAEC,SAAS,EAAEC,iBAAiB,QAAQ,wBAAwB;AACrF,OAAOC,eAAe,kBAAkB;AAExC,eAAe,SAASC,UAAUC,IAAI,EAAEC,QAAQ,EAAEC,QAAQ;IACxD,MAAMC,UAAUF,SAASE,OAAO;IAChC,IAAI,CAACA,SAAS,OAAOD,SAAS,IAAIE,MAAM;IAExC,MAAMC,YAAYH;IAClBA,WAAWT,KAAK,SAASS,SAASI,GAAG,EAAEC,KAAK,EAAEP,IAAI;QAChDG,QAAQK,cAAc,CAAC,SAASC;QAChCN,QAAQK,cAAc,CAAC,SAASE;QAChCP,QAAQK,cAAc,CAAC,UAAUG;QAEjC,kBAAkB;QAClB,IAAIJ,OAAON,SAASW,KAAK,CAACC,IAAI,CAACd,UAAUe,IAAI,CAAC,MAAMd;QAEpD,6CAA6C;QAC7CK,UAAUC,KAAKA,OAAO,CAACC,QAAQ,OAAOA;IACxC;IAEA,MAAMG,UAAUR;IAChB,MAAMS,QAAQT,SAASY,IAAI,CAAC,MAAM;IAClC,MAAML,UAAU,SAASA,QAAQM,MAAM,EAAEC,MAAM,EAAEhB,IAAI;QACnD,IAAIC,SAASgB,IAAI,EAAE,OAAOf,SAAS,MAAM,MAAMF;QAE/C,MAAMkB,aAAa;YAAE,GAAGH,MAAM;QAAC;QAC/BG,WAAW1B,IAAI,GAAGE,QAAQqB,OAAOI,IAAI,CAACC,KAAK,CAAC5B,KAAK6B,GAAG,GAAGC,IAAI,CAAC9B,KAAK6B,GAAG;QACpEH,WAAWK,KAAK,GAAG,IAAIC,KAAKN,WAAWK,KAAK;QAE5C,OAAQL,WAAWO,IAAI;YACrB,KAAK;gBACHT,OAAOU,MAAM,IAAI,eAAe;gBAChC,OAAOxB,SAAS,MAAM,IAAIP,eAAeuB,aAAalB;YACxD,KAAK;gBACHgB,OAAOU,MAAM,IAAI,eAAe;gBAChCR,WAAWS,QAAQ,GAAGZ,OAAOa,QAAQ;gBACrC,OAAO1B,SAAS,MAAM,IAAIL,kBAAkBqB,aAAalB;YAC3D,KAAK;gBACHgB,OAAOU,MAAM,IAAI,eAAe;gBAChCR,WAAWS,QAAQ,GAAGZ,OAAOa,QAAQ;gBACrC,OAAO1B,SAAS,MAAM,IAAIN,UAAUsB,aAAalB;YACnD,KAAK;gBACH,OAAOE,SAAS,MAAM,IAAIJ,UAAUoB,YAAYF,QAAQf,SAAS4B,IAAI,GAAG7B;QAC5E;QAEAgB,OAAOU,MAAM,IAAI,eAAe;QAChC,OAAOxB,SAAS,IAAIE,MAAM,CAAC,yBAAyB,EAAEc,WAAWO,IAAI,EAAE,GAAG,MAAMzB;IAClF;IAEAG,QAAQ2B,EAAE,CAAC,SAASrB;IACpBN,QAAQ2B,EAAE,CAAC,SAASpB;IACpBP,QAAQ2B,EAAE,CAAC,UAAUnB;IACrB,IAAIX,MAAMA;AACZ"}