{"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":["path","once","compact","DirectoryEntry","LinkEntry","SymbolicLinkEntry","FileEntry","parseExternalFileAttributes","streamToString","nextEntry","iterator","callback","Error","entry","next","err","_callback","stack","push","done","localHeader","centralHeader","attributes","external_file_attributes","version","file_name","split","sep","join","mtime","lastModified","type","getStream","string","linkpath","Link","lock"],"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;AACxC,OAAOC,iCAAiC,wCAAwC;AAChF,OAAOC,oBAAoB,2BAA2B;AAEtD,eAAe,SAASC,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,MAAMC,YAAYL;IAClBA,WAAWV,KAAK,SAASU,SAASI,GAAG,EAAEF,KAAK;QAC1C,kBAAkB;QAClB,IAAIA,OAAOH,SAASO,KAAK,CAACC,IAAI,CAACT;QAC/BM,MAAMC,UAAUD,OAAOC,UAAU,MAAMH;IACzC;IAEA,mDAAmD;IACnD,IAAIH,SAASS,IAAI,IAAI,CAACN,OAAO,OAAOF,SAAS,MAAM;IAEnD,MAAMS,cAAcP,MAAMO,WAAW;IACrC,MAAMC,gBAAgBR,MAAMQ,aAAa;IAEzC,MAAMC,aAAaf,4BAA4Bc,cAAcE,wBAAwB,EAAEF,cAAcG,OAAO,IAAI;IAChHF,WAAWtB,IAAI,GAAGE,QAAQkB,YAAYK,SAAS,CAACC,KAAK,CAAC1B,KAAK2B,GAAG,GAAGC,IAAI,CAAC5B,KAAK2B,GAAG;IAC9EL,WAAWO,KAAK,GAAGhB,MAAMiB,YAAY;IAErC,OAAQR,WAAWS,IAAI;QACrB,KAAK;YACH,OAAOpB,SAAS,MAAM,IAAIR,eAAemB;QAC3C,KAAK;QACL,KAAK;YACH,OAAOd,eAAeK,MAAMmB,SAAS,IAAI,CAACjB,KAAKkB;gBAC7C,IAAIlB,KAAK,OAAOJ,SAASI;gBAEzBO,WAAWY,QAAQ,GAAGD;gBACtB,MAAME,OAAOb,WAAWS,IAAI,KAAK,YAAY1B,oBAAoBD;gBACjE,OAAOO,SAAS,MAAM,IAAIwB,KAAKb;YACjC;QAEF,KAAK;YACH,OAAOX,SAAS,MAAM,IAAIL,UAAUgB,YAAYT,OAAOH,SAAS0B,IAAI;IACxE;IAEA,OAAOzB,SAAS,IAAIC,MAAM,CAAC,yBAAyB,EAAEU,WAAWS,IAAI,EAAE;AACzE"}