UNPKG

dropzone-file-parser

Version:

A package that helps to parse the file and folders dropped in a dropzone

2 lines (1 loc) 2.42 kB
var DropzoneFileParser=function(e){"use strict";function i(e,i,t,r){return new(t||(t=Promise))((function(s,n){function o(e){try{c(r.next(e))}catch(e){n(e)}}function d(e){try{c(r.throw(e))}catch(e){n(e)}}function c(e){var i;e.done?s(e.value):(i=e.value,i instanceof t?i:new t((function(e){e(i)}))).then(o,d)}c((r=r.apply(e,i||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;class t{constructor(e,i){this.name=e.name||"root",this.isFile=e.isFile||!1,this.id=e.id||"",this.parent=i,this.size=0,this.fileCount=0,this.sizeUpdatePromise=this.initialize(e)}initialize(e){return i(this,void 0,void 0,(function*(){return e.isFile?new Promise(((i,t)=>{e.file((e=>{this.file=e,this.size=e.size,this.parent&&this.parent.updateSize(e.size),i()}),t)})):(this.children=[],this.fileCount=0,Promise.resolve())}))}static create(e,r){return i(this,void 0,void 0,(function*(){const i=new t(e,r);return yield i.sizeUpdatePromise,i}))}addChild(e){this.children||(this.children=[]),this.children.push(e),e.isFile&&this.updateFileCount()}updateSize(e){this.size=this.size+e,this.parent&&this.parent.updateSize(e)}updateFileCount(){this.fileCount++,this.parent&&this.parent.updateFileCount()}getFiles(){var e,i;return this.isFile?[this]:null!==(i=null===(e=this.children)||void 0===e?void 0:e.reduce(((e,i)=>e.concat(i.getFiles())),[]))&&void 0!==i?i:[]}}class r{constructor(e){this.root=new t({name:"root",id:e},null),this.fileCount=0}addNode(e){return i(this,void 0,void 0,(function*(){const i=yield t.create(e,this.root);return this.root.addChild(i),i}))}processNode(e){return i(this,void 0,void 0,(function*(){const i=yield this.addNode(e);return e.isDirectory?this.parseDirectory(e,i):(this.fileCount++,Promise.resolve())}))}parseDirectory(e,r){return new Promise(((s,n)=>{const o=e.createReader(),d=()=>{o.readEntries((e=>{if(0===e.length)s();else{const s=e.map((e=>i(this,void 0,void 0,(function*(){const i=yield t.create(e,r);return r.addChild(i),e.isDirectory?this.parseDirectory(e,i):(this.fileCount++,Promise.resolve())}))));Promise.all(s).then((()=>d())).catch(n)}}),n)};d()}))}getFiles(){return this.root.getFiles()}}return e.constructDirectoryNodeList=(e,t)=>i(void 0,void 0,void 0,(function*(){const i=new r(t),s=Array.from(e).map((e=>{const t=e.webkitGetAsEntry();if(t)return i.processNode(t)})).filter((e=>void 0!==e));return yield Promise.all(s),i})),Object.defineProperty(e,"__esModule",{value:!0}),e}({});