{"version":3,"file":"traverseFileTree.mjs","sources":["../../../../../../packages/vue-components/vc-upload/src/traverseFileTree.ts"],"sourcesContent":["import type { RcFile } from './interface';\n\ninterface InternalDataTransferItem extends DataTransferItem {\n  isFile: boolean;\n  file: (cd: (file: RcFile & { webkitRelativePath?: string }) => void) => void;\n  createReader: () => any;\n  fullPath: string;\n  isDirectory: boolean;\n  name: string;\n  path: string;\n}\n\nfunction loopFiles(item: InternalDataTransferItem, callback) {\n  const dirReader = item.createReader();\n  let fileList = [];\n\n  function sequence() {\n    dirReader.readEntries((entries: InternalDataTransferItem[]) => {\n      const entryList = Array.prototype.slice.apply(entries);\n      fileList = fileList.concat(entryList);\n\n      // Check if all the file has been viewed\n      const isFinished = !entryList.length;\n\n      if (isFinished)\n        callback(fileList);\n      else\n        sequence();\n    });\n  }\n\n  sequence();\n}\n\nfunction traverseFileTree(files: InternalDataTransferItem[], callback, isAccepted) {\n  const _traverseFileTree = (item: InternalDataTransferItem, path?: string) => {\n    item.path = path || '';\n    if (item.isFile) {\n      item.file((file) => {\n        if (isAccepted(file)) {\n          // https://github.com/ant-design/ant-design/issues/16426\n          if (item.fullPath && !file.webkitRelativePath) {\n            Object.defineProperties(file, {\n              webkitRelativePath: {\n                writable: true,\n              },\n            });\n\n            (file as any).webkitRelativePath = item.fullPath.replace(/^\\//, '');\n            Object.defineProperties(file, {\n              webkitRelativePath: {\n                writable: false,\n              },\n            });\n          }\n          callback([file]);\n        }\n      });\n    } else if (item.isDirectory) {\n      loopFiles(item, (entries: InternalDataTransferItem[]) => {\n        entries.forEach((entryItem) => {\n          _traverseFileTree(entryItem, `${path}${item.name}/`);\n        });\n      });\n    }\n  };\n  files.forEach((file) => {\n    _traverseFileTree(file.webkitGetAsEntry() as any);\n  });\n}\n\nexport default traverseFileTree;\n"],"names":[],"mappings":"AAYA,SAAS,SAAA,CAAU,MAAgC,QAAU,EAAA;AAC3D,EAAM,MAAA,SAAA,GAAY,KAAK,YAAa,EAAA,CAAA;AACpC,EAAA,IAAI,WAAW,EAAC,CAAA;AAEhB,EAAA,SAAS,QAAW,GAAA;AAClB,IAAU,SAAA,CAAA,WAAA,CAAY,CAAC,OAAwC,KAAA;AAC7D,MAAA,MAAM,SAAY,GAAA,KAAA,CAAM,SAAU,CAAA,KAAA,CAAM,MAAM,OAAO,CAAA,CAAA;AACrD,MAAW,QAAA,GAAA,QAAA,CAAS,OAAO,SAAS,CAAA,CAAA;AAGpC,MAAM,MAAA,UAAA,GAAa,CAAC,SAAU,CAAA,MAAA,CAAA;AAE9B,MAAI,IAAA,UAAA;AACF,QAAA,QAAA,CAAS,QAAQ,CAAA,CAAA;AAAA;AAEjB,QAAS,QAAA,EAAA,CAAA;AAAA,KACZ,CAAA,CAAA;AAAA,GACH;AAEA,EAAS,QAAA,EAAA,CAAA;AACX,CAAA;AAEA,SAAS,gBAAA,CAAiB,KAAmC,EAAA,QAAA,EAAU,UAAY,EAAA;AACjF,EAAM,MAAA,iBAAA,GAAoB,CAAC,IAAA,EAAgC,IAAkB,KAAA;AAC3E,IAAA,IAAA,CAAK,OAAO,IAAQ,IAAA,EAAA,CAAA;AACpB,IAAA,IAAI,KAAK,MAAQ,EAAA;AACf,MAAK,IAAA,CAAA,IAAA,CAAK,CAAC,IAAS,KAAA;AAClB,QAAI,IAAA,UAAA,CAAW,IAAI,CAAG,EAAA;AAEpB,UAAA,IAAI,IAAK,CAAA,QAAA,IAAY,CAAC,IAAA,CAAK,kBAAoB,EAAA;AAC7C,YAAA,MAAA,CAAO,iBAAiB,IAAM,EAAA;AAAA,cAC5B,kBAAoB,EAAA;AAAA,gBAClB,QAAU,EAAA,IAAA;AAAA,eACZ;AAAA,aACD,CAAA,CAAA;AAED,YAAC,KAAa,kBAAqB,GAAA,IAAA,CAAK,QAAS,CAAA,OAAA,CAAQ,OAAO,EAAE,CAAA,CAAA;AAClE,YAAA,MAAA,CAAO,iBAAiB,IAAM,EAAA;AAAA,cAC5B,kBAAoB,EAAA;AAAA,gBAClB,QAAU,EAAA,KAAA;AAAA,eACZ;AAAA,aACD,CAAA,CAAA;AAAA,WACH;AACA,UAAS,QAAA,CAAA,CAAC,IAAI,CAAC,CAAA,CAAA;AAAA,SACjB;AAAA,OACD,CAAA,CAAA;AAAA,KACH,MAAA,IAAW,KAAK,WAAa,EAAA;AAC3B,MAAU,SAAA,CAAA,IAAA,EAAM,CAAC,OAAwC,KAAA;AACvD,QAAQ,OAAA,CAAA,OAAA,CAAQ,CAAC,SAAc,KAAA;AAC7B,UAAA,iBAAA,CAAkB,WAAW,CAAG,EAAA,IAAI,CAAG,EAAA,IAAA,CAAK,IAAI,CAAG,CAAA,CAAA,CAAA,CAAA;AAAA,SACpD,CAAA,CAAA;AAAA,OACF,CAAA,CAAA;AAAA,KACH;AAAA,GACF,CAAA;AACA,EAAM,KAAA,CAAA,OAAA,CAAQ,CAAC,IAAS,KAAA;AACtB,IAAkB,iBAAA,CAAA,IAAA,CAAK,kBAAyB,CAAA,CAAA;AAAA,GACjD,CAAA,CAAA;AACH;;;;"}