@xen-orchestra/fs 3.1.0 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/local.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"local.js","names":["info","warn","createLogger","addSyncStackTrace","fn","args","stackContainer","Error","apply","error","syncStack","stack","dontAddSyncStackTrace","LocalHandler","RemoteHandlerAbstract","constructor","remote","opts","_addSyncStackTrace","syncStackTraces","_retriesOnEagain","delay","retries","retriesOnEagain","when","code","type","_getRealPath","_remote","path","_getFilePath","file","_closeFile","fd","fs","close","_copy","oldPath","newPath","copy","_createReadStream","options","stream","createReadStream","fromEvent","autoClose","_createWriteStream","createWriteStream","_getInfo","df","Object","keys","forEach","key","Number","isNaN","_getSize","stats","stat","size","_list","dir","readdir","_lock","acquire","lockfile","lock","bind","undefined","onCompromised","release","_mkdir","mode","mkdir","_openFile","flags","open","_read","buffer","position","needsClose","read","length","_readFile","filePath","retry","readFile","_rename","rename","_rmdir","rmdir","_sync","ensureDir","access","R_OK","W_OK","_truncate","len","truncate","_unlink","unlink","_writeFd","write","_writeFile","data","writeFile","flag"],"sources":["../src/local.js"],"sourcesContent":["import df from '@sindresorhus/df'\nimport fs from 'fs-extra'\nimport lockfile from 'proper-lockfile'\nimport { createLogger } from '@xen-orchestra/log'\nimport { fromEvent, retry } from 'promise-toolbox'\n\nimport RemoteHandlerAbstract from './abstract'\n\nconst { info, warn } = createLogger('xo:fs:local')\n\n// save current stack trace and add it to any rejected error\n//\n// This is especially useful when the resolution is separate from the initial\n// call, which is often the case with RPC libs.\n//\n// There is a perf impact and it should be avoided in production.\nasync function addSyncStackTrace(fn, ...args) {\n const stackContainer = new Error()\n try {\n return await fn.apply(this, args)\n } catch (error) {\n error.syncStack = stackContainer.stack\n throw error\n }\n}\n\nfunction dontAddSyncStackTrace(fn, ...args) {\n return fn.apply(this, args)\n}\n\nexport default class LocalHandler extends RemoteHandlerAbstract {\n constructor(remote, opts = {}) {\n super(remote)\n\n this._addSyncStackTrace = opts.syncStackTraces ?? true ? addSyncStackTrace : dontAddSyncStackTrace\n this._retriesOnEagain = {\n delay: 1e3,\n retries: 9,\n ...opts.retriesOnEagain,\n when: {\n code: 'EAGAIN',\n },\n }\n }\n get type() {\n return 'file'\n }\n\n _getRealPath() {\n return this._remote.path\n }\n\n _getFilePath(file) {\n return this._getRealPath() + file\n }\n\n async _closeFile(fd) {\n return this._addSyncStackTrace(fs.close, fd)\n }\n\n async _copy(oldPath, newPath) {\n return this._addSyncStackTrace(fs.copy, this._getFilePath(oldPath), this._getFilePath(newPath))\n }\n\n async _createReadStream(file, options) {\n if (typeof file === 'string') {\n const stream = fs.createReadStream(this._getFilePath(file), options)\n await this._addSyncStackTrace(fromEvent, stream, 'open')\n return stream\n }\n return fs.createReadStream('', {\n autoClose: false,\n ...options,\n fd: file.fd,\n })\n }\n\n async _createWriteStream(file, options) {\n if (typeof file === 'string') {\n const stream = fs.createWriteStream(this._getFilePath(file), options)\n await this._addSyncStackTrace(fromEvent, stream, 'open')\n return stream\n }\n return fs.createWriteStream('', {\n autoClose: false,\n ...options,\n fd: file.fd,\n })\n }\n\n async _getInfo() {\n // df.file() resolves with an object with the following properties:\n // filesystem, type, size, used, available, capacity and mountpoint.\n // size, used, available and capacity may be `NaN` so we remove any `NaN`\n // value from the object.\n const info = await df.file(this._getFilePath('/'))\n Object.keys(info).forEach(key => {\n if (Number.isNaN(info[key])) {\n delete info[key]\n }\n })\n\n return info\n }\n\n async _getSize(file) {\n const stats = await this._addSyncStackTrace(fs.stat, this._getFilePath(typeof file === 'string' ? file : file.path))\n return stats.size\n }\n\n async _list(dir) {\n return this._addSyncStackTrace(fs.readdir, this._getFilePath(dir))\n }\n\n async _lock(path) {\n const acquire = lockfile.lock.bind(undefined, this._getFilePath(path), {\n async onCompromised(error) {\n warn('lock compromised', { error })\n try {\n release = await acquire()\n info('compromised lock was reacquired')\n } catch (error) {\n warn('compromised lock could not be reacquired', { error })\n }\n },\n })\n\n let release = await this._addSyncStackTrace(acquire)\n\n return async () => {\n try {\n await this._addSyncStackTrace(release)\n } catch (error) {\n warn('lock could not be released', { error })\n }\n }\n }\n\n _mkdir(dir, { mode }) {\n return this._addSyncStackTrace(fs.mkdir, this._getFilePath(dir), { mode })\n }\n\n async _openFile(path, flags) {\n return this._addSyncStackTrace(fs.open, this._getFilePath(path), flags)\n }\n\n async _read(file, buffer, position) {\n const needsClose = typeof file === 'string'\n file = needsClose ? await this._addSyncStackTrace(fs.open, this._getFilePath(file), 'r') : file.fd\n try {\n return await this._addSyncStackTrace(\n fs.read,\n file,\n buffer,\n 0,\n buffer.length,\n position === undefined ? null : position\n )\n } finally {\n if (needsClose) {\n await this._addSyncStackTrace(fs.close, file)\n }\n }\n }\n\n async _readFile(file, options) {\n const filePath = this._getFilePath(file)\n return await this._addSyncStackTrace(retry, () => fs.readFile(filePath, options), this._retriesOnEagain)\n }\n\n async _rename(oldPath, newPath) {\n return this._addSyncStackTrace(fs.rename, this._getFilePath(oldPath), this._getFilePath(newPath))\n }\n\n async _rmdir(dir) {\n return this._addSyncStackTrace(fs.rmdir, this._getFilePath(dir))\n }\n\n async _sync() {\n const path = this._getRealPath('/')\n await this._addSyncStackTrace(fs.ensureDir, path)\n await this._addSyncStackTrace(fs.access, path, fs.R_OK | fs.W_OK)\n }\n\n _truncate(file, len) {\n return this._addSyncStackTrace(fs.truncate, this._getFilePath(file), len)\n }\n\n async _unlink(file) {\n const filePath = this._getFilePath(file)\n return await this._addSyncStackTrace(retry, () => fs.unlink(filePath), this._retriesOnEagain)\n }\n\n _writeFd(file, buffer, position) {\n return this._addSyncStackTrace(fs.write, file.fd, buffer, 0, buffer.length, position)\n }\n\n _writeFile(file, data, { flags }) {\n return this._addSyncStackTrace(fs.writeFile, this._getFilePath(file), data, { flag: flags })\n }\n}\n"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AAEA;;;;AAEA,MAAM;EAAEA,IAAF;EAAQC;AAAR,IAAiB,IAAAC,iBAAA,EAAa,aAAb,CAAvB;;AAQA,eAAeC,iBAAf,CAAiCC,EAAjC,EAAqC,GAAGC,IAAxC,EAA8C;EAC5C,MAAMC,cAAc,GAAG,IAAIC,KAAJ,EAAvB;;EACA,IAAI;IACF,OAAO,MAAMH,EAAE,CAACI,KAAH,CAAS,IAAT,EAAeH,IAAf,CAAb;EACD,CAFD,CAEE,OAAOI,KAAP,EAAc;IACdA,KAAK,CAACC,SAAN,GAAkBJ,cAAc,CAACK,KAAjC;IACA,MAAMF,KAAN;EACD;AACF;;AAED,SAASG,qBAAT,CAA+BR,EAA/B,EAAmC,GAAGC,IAAtC,EAA4C;EAC1C,OAAOD,EAAE,CAACI,KAAH,CAAS,IAAT,EAAeH,IAAf,CAAP;AACD;;AAEc,MAAMQ,YAAN,SAA2BC,iBAA3B,CAAiD;EAC9DC,WAAW,CAACC,MAAD,EAASC,IAAI,GAAG,EAAhB,EAAoB;IAC7B,MAAMD,MAAN;IAEA,KAAKE,kBAAL,GAA0BD,IAAI,CAACE,eAAL,IAAwB,IAAxB,GAA+BhB,iBAA/B,GAAmDS,qBAA7E;IACA,KAAKQ,gBAAL,GAAwB;MACtBC,KAAK,EAAE,GADe;MAEtBC,OAAO,EAAE,CAFa;MAGtB,GAAGL,IAAI,CAACM,eAHc;MAItBC,IAAI,EAAE;QACJC,IAAI,EAAE;MADF;IAJgB,CAAxB;EAQD;;EACO,IAAJC,IAAI,GAAG;IACT,OAAO,MAAP;EACD;;EAEDC,YAAY,GAAG;IACb,OAAO,KAAKC,OAAL,CAAaC,IAApB;EACD;;EAEDC,YAAY,CAACC,IAAD,EAAO;IACjB,OAAO,KAAKJ,YAAL,KAAsBI,IAA7B;EACD;;EAEe,MAAVC,UAAU,CAACC,EAAD,EAAK;IACnB,OAAO,KAAKf,kBAAL,CAAwBgB,gBAAA,CAAGC,KAA3B,EAAkCF,EAAlC,CAAP;EACD;;EAEU,MAALG,KAAK,CAACC,OAAD,EAAUC,OAAV,EAAmB;IAC5B,OAAO,KAAKpB,kBAAL,CAAwBgB,gBAAA,CAAGK,IAA3B,EAAiC,KAAKT,YAAL,CAAkBO,OAAlB,CAAjC,EAA6D,KAAKP,YAAL,CAAkBQ,OAAlB,CAA7D,CAAP;EACD;;EAEsB,MAAjBE,iBAAiB,CAACT,IAAD,EAAOU,OAAP,EAAgB;IACrC,IAAI,OAAOV,IAAP,KAAgB,QAApB,EAA8B;MAC5B,MAAMW,MAAM,GAAGR,gBAAA,CAAGS,gBAAH,CAAoB,KAAKb,YAAL,CAAkBC,IAAlB,CAApB,EAA6CU,OAA7C,CAAf;;MACA,MAAM,KAAKvB,kBAAL,CAAwB0B,yBAAxB,EAAmCF,MAAnC,EAA2C,MAA3C,CAAN;MACA,OAAOA,MAAP;IACD;;IACD,OAAOR,gBAAA,CAAGS,gBAAH,CAAoB,EAApB,EAAwB;MAC7BE,SAAS,EAAE,KADkB;MAE7B,GAAGJ,OAF0B;MAG7BR,EAAE,EAAEF,IAAI,CAACE;IAHoB,CAAxB,CAAP;EAKD;;EAEuB,MAAlBa,kBAAkB,CAACf,IAAD,EAAOU,OAAP,EAAgB;IACtC,IAAI,OAAOV,IAAP,KAAgB,QAApB,EAA8B;MAC5B,MAAMW,MAAM,GAAGR,gBAAA,CAAGa,iBAAH,CAAqB,KAAKjB,YAAL,CAAkBC,IAAlB,CAArB,EAA8CU,OAA9C,CAAf;;MACA,MAAM,KAAKvB,kBAAL,CAAwB0B,yBAAxB,EAAmCF,MAAnC,EAA2C,MAA3C,CAAN;MACA,OAAOA,MAAP;IACD;;IACD,OAAOR,gBAAA,CAAGa,iBAAH,CAAqB,EAArB,EAAyB;MAC9BF,SAAS,EAAE,KADmB;MAE9B,GAAGJ,OAF2B;MAG9BR,EAAE,EAAEF,IAAI,CAACE;IAHqB,CAAzB,CAAP;EAKD;;EAEa,MAARe,QAAQ,GAAG;IAKf,MAAMhD,IAAI,GAAG,MAAMiD,WAAA,CAAGlB,IAAH,CAAQ,KAAKD,YAAL,CAAkB,GAAlB,CAAR,CAAnB;IACAoB,MAAM,CAACC,IAAP,CAAYnD,IAAZ,EAAkBoD,OAAlB,CAA0BC,GAAG,IAAI;MAC/B,IAAIC,MAAM,CAACC,KAAP,CAAavD,IAAI,CAACqD,GAAD,CAAjB,CAAJ,EAA6B;QAC3B,OAAOrD,IAAI,CAACqD,GAAD,CAAX;MACD;IACF,CAJD;IAMA,OAAOrD,IAAP;EACD;;EAEa,MAARwD,QAAQ,CAACzB,IAAD,EAAO;IACnB,MAAM0B,KAAK,GAAG,MAAM,KAAKvC,kBAAL,CAAwBgB,gBAAA,CAAGwB,IAA3B,EAAiC,KAAK5B,YAAL,CAAkB,OAAOC,IAAP,KAAgB,QAAhB,GAA2BA,IAA3B,GAAkCA,IAAI,CAACF,IAAzD,CAAjC,CAApB;IACA,OAAO4B,KAAK,CAACE,IAAb;EACD;;EAEU,MAALC,KAAK,CAACC,GAAD,EAAM;IACf,OAAO,KAAK3C,kBAAL,CAAwBgB,gBAAA,CAAG4B,OAA3B,EAAoC,KAAKhC,YAAL,CAAkB+B,GAAlB,CAApC,CAAP;EACD;;EAEU,MAALE,KAAK,CAAClC,IAAD,EAAO;IAChB,MAAMmC,OAAO,GAAGC,uBAAA,CAASC,IAAT,CAAcC,IAAd,CAAmBC,SAAnB,EAA8B,KAAKtC,YAAL,CAAkBD,IAAlB,CAA9B,EAAuD;MACrE,MAAMwC,aAAN,CAAoB5D,KAApB,EAA2B;QACzBR,IAAI,CAAC,kBAAD,EAAqB;UAAEQ;QAAF,CAArB,CAAJ;;QACA,IAAI;UACF6D,OAAO,GAAG,MAAMN,OAAO,EAAvB;UACAhE,IAAI,CAAC,iCAAD,CAAJ;QACD,CAHD,CAGE,OAAOS,KAAP,EAAc;UACdR,IAAI,CAAC,0CAAD,EAA6C;YAAEQ;UAAF,CAA7C,CAAJ;QACD;MACF;;IAToE,CAAvD,CAAhB;;IAYA,IAAI6D,OAAO,GAAG,MAAM,KAAKpD,kBAAL,CAAwB8C,OAAxB,CAApB;IAEA,OAAO,YAAY;MACjB,IAAI;QACF,MAAM,KAAK9C,kBAAL,CAAwBoD,OAAxB,CAAN;MACD,CAFD,CAEE,OAAO7D,KAAP,EAAc;QACdR,IAAI,CAAC,4BAAD,EAA+B;UAAEQ;QAAF,CAA/B,CAAJ;MACD;IACF,CAND;EAOD;;EAED8D,MAAM,CAACV,GAAD,EAAM;IAAEW;EAAF,CAAN,EAAgB;IACpB,OAAO,KAAKtD,kBAAL,CAAwBgB,gBAAA,CAAGuC,KAA3B,EAAkC,KAAK3C,YAAL,CAAkB+B,GAAlB,CAAlC,EAA0D;MAAEW;IAAF,CAA1D,CAAP;EACD;;EAEc,MAATE,SAAS,CAAC7C,IAAD,EAAO8C,KAAP,EAAc;IAC3B,OAAO,KAAKzD,kBAAL,CAAwBgB,gBAAA,CAAG0C,IAA3B,EAAiC,KAAK9C,YAAL,CAAkBD,IAAlB,CAAjC,EAA0D8C,KAA1D,CAAP;EACD;;EAEU,MAALE,KAAK,CAAC9C,IAAD,EAAO+C,MAAP,EAAeC,QAAf,EAAyB;IAClC,MAAMC,UAAU,GAAG,OAAOjD,IAAP,KAAgB,QAAnC;IACAA,IAAI,GAAGiD,UAAU,GAAG,MAAM,KAAK9D,kBAAL,CAAwBgB,gBAAA,CAAG0C,IAA3B,EAAiC,KAAK9C,YAAL,CAAkBC,IAAlB,CAAjC,EAA0D,GAA1D,CAAT,GAA0EA,IAAI,CAACE,EAAhG;;IACA,IAAI;MACF,OAAO,MAAM,KAAKf,kBAAL,CACXgB,gBAAA,CAAG+C,IADQ,EAEXlD,IAFW,EAGX+C,MAHW,EAIX,CAJW,EAKXA,MAAM,CAACI,MALI,EAMXH,QAAQ,KAAKX,SAAb,GAAyB,IAAzB,GAAgCW,QANrB,CAAb;IAQD,CATD,SASU;MACR,IAAIC,UAAJ,EAAgB;QACd,MAAM,KAAK9D,kBAAL,CAAwBgB,gBAAA,CAAGC,KAA3B,EAAkCJ,IAAlC,CAAN;MACD;IACF;EACF;;EAEc,MAAToD,SAAS,CAACpD,IAAD,EAAOU,OAAP,EAAgB;IAC7B,MAAM2C,QAAQ,GAAG,KAAKtD,YAAL,CAAkBC,IAAlB,CAAjB;;IACA,OAAO,MAAM,KAAKb,kBAAL,CAAwBmE,qBAAxB,EAA+B,MAAMnD,gBAAA,CAAGoD,QAAH,CAAYF,QAAZ,EAAsB3C,OAAtB,CAArC,EAAqE,KAAKrB,gBAA1E,CAAb;EACD;;EAEY,MAAPmE,OAAO,CAAClD,OAAD,EAAUC,OAAV,EAAmB;IAC9B,OAAO,KAAKpB,kBAAL,CAAwBgB,gBAAA,CAAGsD,MAA3B,EAAmC,KAAK1D,YAAL,CAAkBO,OAAlB,CAAnC,EAA+D,KAAKP,YAAL,CAAkBQ,OAAlB,CAA/D,CAAP;EACD;;EAEW,MAANmD,MAAM,CAAC5B,GAAD,EAAM;IAChB,OAAO,KAAK3C,kBAAL,CAAwBgB,gBAAA,CAAGwD,KAA3B,EAAkC,KAAK5D,YAAL,CAAkB+B,GAAlB,CAAlC,CAAP;EACD;;EAEU,MAAL8B,KAAK,GAAG;IACZ,MAAM9D,IAAI,GAAG,KAAKF,YAAL,CAAkB,GAAlB,CAAb;;IACA,MAAM,KAAKT,kBAAL,CAAwBgB,gBAAA,CAAG0D,SAA3B,EAAsC/D,IAAtC,CAAN;IACA,MAAM,KAAKX,kBAAL,CAAwBgB,gBAAA,CAAG2D,MAA3B,EAAmChE,IAAnC,EAAyCK,gBAAA,CAAG4D,IAAH,GAAU5D,gBAAA,CAAG6D,IAAtD,CAAN;EACD;;EAEDC,SAAS,CAACjE,IAAD,EAAOkE,GAAP,EAAY;IACnB,OAAO,KAAK/E,kBAAL,CAAwBgB,gBAAA,CAAGgE,QAA3B,EAAqC,KAAKpE,YAAL,CAAkBC,IAAlB,CAArC,EAA8DkE,GAA9D,CAAP;EACD;;EAEY,MAAPE,OAAO,CAACpE,IAAD,EAAO;IAClB,MAAMqD,QAAQ,GAAG,KAAKtD,YAAL,CAAkBC,IAAlB,CAAjB;;IACA,OAAO,MAAM,KAAKb,kBAAL,CAAwBmE,qBAAxB,EAA+B,MAAMnD,gBAAA,CAAGkE,MAAH,CAAUhB,QAAV,CAArC,EAA0D,KAAKhE,gBAA/D,CAAb;EACD;;EAEDiF,QAAQ,CAACtE,IAAD,EAAO+C,MAAP,EAAeC,QAAf,EAAyB;IAC/B,OAAO,KAAK7D,kBAAL,CAAwBgB,gBAAA,CAAGoE,KAA3B,EAAkCvE,IAAI,CAACE,EAAvC,EAA2C6C,MAA3C,EAAmD,CAAnD,EAAsDA,MAAM,CAACI,MAA7D,EAAqEH,QAArE,CAAP;EACD;;EAEDwB,UAAU,CAACxE,IAAD,EAAOyE,IAAP,EAAa;IAAE7B;EAAF,CAAb,EAAwB;IAChC,OAAO,KAAKzD,kBAAL,CAAwBgB,gBAAA,CAAGuE,SAA3B,EAAsC,KAAK3E,YAAL,CAAkBC,IAAlB,CAAtC,EAA+DyE,IAA/D,EAAqE;MAAEE,IAAI,EAAE/B;IAAR,CAArE,CAAP;EACD;;AAzK6D"}
1
+ {"version":3,"file":"local.js","names":["info","warn","createLogger","addSyncStackTrace","fn","args","stackContainer","Error","apply","error","syncStack","stack","dontAddSyncStackTrace","LocalHandler","RemoteHandlerAbstract","constructor","remote","opts","_addSyncStackTrace","syncStackTraces","_retriesOnEagain","delay","retries","retriesOnEagain","when","code","type","_getRealPath","_remote","path","_getFilePath","file","_closeFile","fd","fs","close","_copy","oldPath","newPath","copy","_createReadStream","options","stream","createReadStream","fromEvent","autoClose","_createWriteStream","createWriteStream","_getInfo","df","Object","keys","forEach","key","Number","isNaN","_getSize","stats","stat","size","_list","dir","readdir","_lock","acquire","lockfile","lock","bind","undefined","onCompromised","release","_mkdir","mode","mkdir","_openFile","flags","open","_read","buffer","position","needsClose","read","length","_readFile","filePath","retry","readFile","_rename","rename","_rmdir","rmdir","_sync","ensureDir","access","R_OK","W_OK","_truncate","len","truncate","_unlink","unlink","_writeFd","write","_writeFile","data","writeFile","flag"],"sources":["../src/local.js"],"sourcesContent":["import df from '@sindresorhus/df'\nimport fs from 'fs-extra'\nimport lockfile from 'proper-lockfile'\nimport { createLogger } from '@xen-orchestra/log'\nimport { fromEvent, retry } from 'promise-toolbox'\n\nimport RemoteHandlerAbstract from './abstract'\n\nconst { info, warn } = createLogger('xo:fs:local')\n\n// save current stack trace and add it to any rejected error\n//\n// This is especially useful when the resolution is separate from the initial\n// call, which is often the case with RPC libs.\n//\n// There is a perf impact and it should be avoided in production.\nasync function addSyncStackTrace(fn, ...args) {\n const stackContainer = new Error()\n try {\n return await fn.apply(this, args)\n } catch (error) {\n error.syncStack = stackContainer.stack\n throw error\n }\n}\n\nfunction dontAddSyncStackTrace(fn, ...args) {\n return fn.apply(this, args)\n}\n\nexport default class LocalHandler extends RemoteHandlerAbstract {\n constructor(remote, opts = {}) {\n super(remote)\n\n this._addSyncStackTrace = opts.syncStackTraces ?? true ? addSyncStackTrace : dontAddSyncStackTrace\n this._retriesOnEagain = {\n delay: 1e3,\n retries: 9,\n ...opts.retriesOnEagain,\n when: {\n code: 'EAGAIN',\n },\n }\n }\n get type() {\n return 'file'\n }\n\n _getRealPath() {\n return this._remote.path\n }\n\n _getFilePath(file) {\n return this._getRealPath() + file\n }\n\n async _closeFile(fd) {\n return this._addSyncStackTrace(fs.close, fd)\n }\n\n async _copy(oldPath, newPath) {\n return this._addSyncStackTrace(fs.copy, this._getFilePath(oldPath), this._getFilePath(newPath))\n }\n\n async _createReadStream(file, options) {\n if (typeof file === 'string') {\n const stream = fs.createReadStream(this._getFilePath(file), options)\n await this._addSyncStackTrace(fromEvent, stream, 'open')\n return stream\n }\n return fs.createReadStream('', {\n autoClose: false,\n ...options,\n fd: file.fd,\n })\n }\n\n async _createWriteStream(file, options) {\n if (typeof file === 'string') {\n const stream = fs.createWriteStream(this._getFilePath(file), options)\n await this._addSyncStackTrace(fromEvent, stream, 'open')\n return stream\n }\n return fs.createWriteStream('', {\n autoClose: false,\n ...options,\n fd: file.fd,\n })\n }\n\n async _getInfo() {\n // df.file() resolves with an object with the following properties:\n // filesystem, type, size, used, available, capacity and mountpoint.\n // size, used, available and capacity may be `NaN` so we remove any `NaN`\n // value from the object.\n const info = await df.file(this._getFilePath('/'))\n Object.keys(info).forEach(key => {\n if (Number.isNaN(info[key])) {\n delete info[key]\n }\n })\n\n return info\n }\n\n async _getSize(file) {\n const stats = await this._addSyncStackTrace(fs.stat, this._getFilePath(typeof file === 'string' ? file : file.path))\n return stats.size\n }\n\n async _list(dir) {\n return this._addSyncStackTrace(fs.readdir, this._getFilePath(dir))\n }\n\n async _lock(path) {\n const acquire = lockfile.lock.bind(undefined, this._getFilePath(path), {\n async onCompromised(error) {\n warn('lock compromised', { error })\n try {\n release = await acquire()\n info('compromised lock was reacquired')\n } catch (error) {\n warn('compromised lock could not be reacquired', { error })\n }\n },\n })\n\n let release = await this._addSyncStackTrace(acquire)\n\n return async () => {\n try {\n await this._addSyncStackTrace(release)\n } catch (error) {\n warn('lock could not be released', { error })\n }\n }\n }\n\n _mkdir(dir, { mode }) {\n return this._addSyncStackTrace(fs.mkdir, this._getFilePath(dir), { mode })\n }\n\n async _openFile(path, flags) {\n return this._addSyncStackTrace(fs.open, this._getFilePath(path), flags)\n }\n\n async _read(file, buffer, position) {\n const needsClose = typeof file === 'string'\n file = needsClose ? await this._addSyncStackTrace(fs.open, this._getFilePath(file), 'r') : file.fd\n try {\n return await this._addSyncStackTrace(\n fs.read,\n file,\n buffer,\n 0,\n buffer.length,\n position === undefined ? null : position\n )\n } finally {\n if (needsClose) {\n await this._addSyncStackTrace(fs.close, file)\n }\n }\n }\n\n async _readFile(file, options) {\n const filePath = this._getFilePath(file)\n return await this._addSyncStackTrace(retry, () => fs.readFile(filePath, options), this._retriesOnEagain)\n }\n\n async _rename(oldPath, newPath) {\n return this._addSyncStackTrace(fs.rename, this._getFilePath(oldPath), this._getFilePath(newPath))\n }\n\n async _rmdir(dir) {\n return this._addSyncStackTrace(fs.rmdir, this._getFilePath(dir))\n }\n\n async _sync() {\n const path = this._getRealPath('/')\n await this._addSyncStackTrace(fs.ensureDir, path)\n await this._addSyncStackTrace(fs.access, path, fs.R_OK | fs.W_OK)\n }\n\n _truncate(file, len) {\n return this._addSyncStackTrace(fs.truncate, this._getFilePath(file), len)\n }\n\n async _unlink(file) {\n const filePath = this._getFilePath(file)\n return await this._addSyncStackTrace(retry, () => fs.unlink(filePath), this._retriesOnEagain)\n }\n\n _writeFd(file, buffer, position) {\n return this._addSyncStackTrace(fs.write, file.fd, buffer, 0, buffer.length, position)\n }\n\n _writeFile(file, data, { flags }) {\n return this._addSyncStackTrace(fs.writeFile, this._getFilePath(file), data, { flag: flags })\n }\n}\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AAEA;AAA8C;AAE9C,MAAM;EAAEA,IAAI;EAAEC;AAAK,CAAC,GAAG,IAAAC,iBAAY,EAAC,aAAa,CAAC;;AAQlD,eAAeC,iBAAiB,CAACC,EAAE,EAAE,GAAGC,IAAI,EAAE;EAC5C,MAAMC,cAAc,GAAG,IAAIC,KAAK,EAAE;EAClC,IAAI;IACF,OAAO,MAAMH,EAAE,CAACI,KAAK,CAAC,IAAI,EAAEH,IAAI,CAAC;EACnC,CAAC,CAAC,OAAOI,KAAK,EAAE;IACdA,KAAK,CAACC,SAAS,GAAGJ,cAAc,CAACK,KAAK;IACtC,MAAMF,KAAK;EACb;AACF;AAEA,SAASG,qBAAqB,CAACR,EAAE,EAAE,GAAGC,IAAI,EAAE;EAC1C,OAAOD,EAAE,CAACI,KAAK,CAAC,IAAI,EAAEH,IAAI,CAAC;AAC7B;AAEe,MAAMQ,YAAY,SAASC,iBAAqB,CAAC;EAC9DC,WAAW,CAACC,MAAM,EAAEC,IAAI,GAAG,CAAC,CAAC,EAAE;IAC7B,KAAK,CAACD,MAAM,CAAC;IAEb,IAAI,CAACE,kBAAkB,GAAGD,IAAI,CAACE,eAAe,IAAI,IAAI,GAAGhB,iBAAiB,GAAGS,qBAAqB;IAClG,IAAI,CAACQ,gBAAgB,GAAG;MACtBC,KAAK,EAAE,GAAG;MACVC,OAAO,EAAE,CAAC;MACV,GAAGL,IAAI,CAACM,eAAe;MACvBC,IAAI,EAAE;QACJC,IAAI,EAAE;MACR;IACF,CAAC;EACH;EACA,IAAIC,IAAI,GAAG;IACT,OAAO,MAAM;EACf;EAEAC,YAAY,GAAG;IACb,OAAO,IAAI,CAACC,OAAO,CAACC,IAAI;EAC1B;EAEAC,YAAY,CAACC,IAAI,EAAE;IACjB,OAAO,IAAI,CAACJ,YAAY,EAAE,GAAGI,IAAI;EACnC;EAEA,MAAMC,UAAU,CAACC,EAAE,EAAE;IACnB,OAAO,IAAI,CAACf,kBAAkB,CAACgB,gBAAE,CAACC,KAAK,EAAEF,EAAE,CAAC;EAC9C;EAEA,MAAMG,KAAK,CAACC,OAAO,EAAEC,OAAO,EAAE;IAC5B,OAAO,IAAI,CAACpB,kBAAkB,CAACgB,gBAAE,CAACK,IAAI,EAAE,IAAI,CAACT,YAAY,CAACO,OAAO,CAAC,EAAE,IAAI,CAACP,YAAY,CAACQ,OAAO,CAAC,CAAC;EACjG;EAEA,MAAME,iBAAiB,CAACT,IAAI,EAAEU,OAAO,EAAE;IACrC,IAAI,OAAOV,IAAI,KAAK,QAAQ,EAAE;MAC5B,MAAMW,MAAM,GAAGR,gBAAE,CAACS,gBAAgB,CAAC,IAAI,CAACb,YAAY,CAACC,IAAI,CAAC,EAAEU,OAAO,CAAC;MACpE,MAAM,IAAI,CAACvB,kBAAkB,CAAC0B,yBAAS,EAAEF,MAAM,EAAE,MAAM,CAAC;MACxD,OAAOA,MAAM;IACf;IACA,OAAOR,gBAAE,CAACS,gBAAgB,CAAC,EAAE,EAAE;MAC7BE,SAAS,EAAE,KAAK;MAChB,GAAGJ,OAAO;MACVR,EAAE,EAAEF,IAAI,CAACE;IACX,CAAC,CAAC;EACJ;EAEA,MAAMa,kBAAkB,CAACf,IAAI,EAAEU,OAAO,EAAE;IACtC,IAAI,OAAOV,IAAI,KAAK,QAAQ,EAAE;MAC5B,MAAMW,MAAM,GAAGR,gBAAE,CAACa,iBAAiB,CAAC,IAAI,CAACjB,YAAY,CAACC,IAAI,CAAC,EAAEU,OAAO,CAAC;MACrE,MAAM,IAAI,CAACvB,kBAAkB,CAAC0B,yBAAS,EAAEF,MAAM,EAAE,MAAM,CAAC;MACxD,OAAOA,MAAM;IACf;IACA,OAAOR,gBAAE,CAACa,iBAAiB,CAAC,EAAE,EAAE;MAC9BF,SAAS,EAAE,KAAK;MAChB,GAAGJ,OAAO;MACVR,EAAE,EAAEF,IAAI,CAACE;IACX,CAAC,CAAC;EACJ;EAEA,MAAMe,QAAQ,GAAG;IAKf,MAAMhD,IAAI,GAAG,MAAMiD,WAAE,CAAClB,IAAI,CAAC,IAAI,CAACD,YAAY,CAAC,GAAG,CAAC,CAAC;IAClDoB,MAAM,CAACC,IAAI,CAACnD,IAAI,CAAC,CAACoD,OAAO,CAACC,GAAG,IAAI;MAC/B,IAAIC,MAAM,CAACC,KAAK,CAACvD,IAAI,CAACqD,GAAG,CAAC,CAAC,EAAE;QAC3B,OAAOrD,IAAI,CAACqD,GAAG,CAAC;MAClB;IACF,CAAC,CAAC;IAEF,OAAOrD,IAAI;EACb;EAEA,MAAMwD,QAAQ,CAACzB,IAAI,EAAE;IACnB,MAAM0B,KAAK,GAAG,MAAM,IAAI,CAACvC,kBAAkB,CAACgB,gBAAE,CAACwB,IAAI,EAAE,IAAI,CAAC5B,YAAY,CAAC,OAAOC,IAAI,KAAK,QAAQ,GAAGA,IAAI,GAAGA,IAAI,CAACF,IAAI,CAAC,CAAC;IACpH,OAAO4B,KAAK,CAACE,IAAI;EACnB;EAEA,MAAMC,KAAK,CAACC,GAAG,EAAE;IACf,OAAO,IAAI,CAAC3C,kBAAkB,CAACgB,gBAAE,CAAC4B,OAAO,EAAE,IAAI,CAAChC,YAAY,CAAC+B,GAAG,CAAC,CAAC;EACpE;EAEA,MAAME,KAAK,CAAClC,IAAI,EAAE;IAChB,MAAMmC,OAAO,GAAGC,uBAAQ,CAACC,IAAI,CAACC,IAAI,CAACC,SAAS,EAAE,IAAI,CAACtC,YAAY,CAACD,IAAI,CAAC,EAAE;MACrE,MAAMwC,aAAa,CAAC5D,KAAK,EAAE;QACzBR,IAAI,CAAC,kBAAkB,EAAE;UAAEQ;QAAM,CAAC,CAAC;QACnC,IAAI;UACF6D,OAAO,GAAG,MAAMN,OAAO,EAAE;UACzBhE,IAAI,CAAC,iCAAiC,CAAC;QACzC,CAAC,CAAC,OAAOS,KAAK,EAAE;UACdR,IAAI,CAAC,0CAA0C,EAAE;YAAEQ;UAAM,CAAC,CAAC;QAC7D;MACF;IACF,CAAC,CAAC;IAEF,IAAI6D,OAAO,GAAG,MAAM,IAAI,CAACpD,kBAAkB,CAAC8C,OAAO,CAAC;IAEpD,OAAO,YAAY;MACjB,IAAI;QACF,MAAM,IAAI,CAAC9C,kBAAkB,CAACoD,OAAO,CAAC;MACxC,CAAC,CAAC,OAAO7D,KAAK,EAAE;QACdR,IAAI,CAAC,4BAA4B,EAAE;UAAEQ;QAAM,CAAC,CAAC;MAC/C;IACF,CAAC;EACH;EAEA8D,MAAM,CAACV,GAAG,EAAE;IAAEW;EAAK,CAAC,EAAE;IACpB,OAAO,IAAI,CAACtD,kBAAkB,CAACgB,gBAAE,CAACuC,KAAK,EAAE,IAAI,CAAC3C,YAAY,CAAC+B,GAAG,CAAC,EAAE;MAAEW;IAAK,CAAC,CAAC;EAC5E;EAEA,MAAME,SAAS,CAAC7C,IAAI,EAAE8C,KAAK,EAAE;IAC3B,OAAO,IAAI,CAACzD,kBAAkB,CAACgB,gBAAE,CAAC0C,IAAI,EAAE,IAAI,CAAC9C,YAAY,CAACD,IAAI,CAAC,EAAE8C,KAAK,CAAC;EACzE;EAEA,MAAME,KAAK,CAAC9C,IAAI,EAAE+C,MAAM,EAAEC,QAAQ,EAAE;IAClC,MAAMC,UAAU,GAAG,OAAOjD,IAAI,KAAK,QAAQ;IAC3CA,IAAI,GAAGiD,UAAU,GAAG,MAAM,IAAI,CAAC9D,kBAAkB,CAACgB,gBAAE,CAAC0C,IAAI,EAAE,IAAI,CAAC9C,YAAY,CAACC,IAAI,CAAC,EAAE,GAAG,CAAC,GAAGA,IAAI,CAACE,EAAE;IAClG,IAAI;MACF,OAAO,MAAM,IAAI,CAACf,kBAAkB,CAClCgB,gBAAE,CAAC+C,IAAI,EACPlD,IAAI,EACJ+C,MAAM,EACN,CAAC,EACDA,MAAM,CAACI,MAAM,EACbH,QAAQ,KAAKX,SAAS,GAAG,IAAI,GAAGW,QAAQ,CACzC;IACH,CAAC,SAAS;MACR,IAAIC,UAAU,EAAE;QACd,MAAM,IAAI,CAAC9D,kBAAkB,CAACgB,gBAAE,CAACC,KAAK,EAAEJ,IAAI,CAAC;MAC/C;IACF;EACF;EAEA,MAAMoD,SAAS,CAACpD,IAAI,EAAEU,OAAO,EAAE;IAC7B,MAAM2C,QAAQ,GAAG,IAAI,CAACtD,YAAY,CAACC,IAAI,CAAC;IACxC,OAAO,MAAM,IAAI,CAACb,kBAAkB,CAACmE,qBAAK,EAAE,MAAMnD,gBAAE,CAACoD,QAAQ,CAACF,QAAQ,EAAE3C,OAAO,CAAC,EAAE,IAAI,CAACrB,gBAAgB,CAAC;EAC1G;EAEA,MAAMmE,OAAO,CAAClD,OAAO,EAAEC,OAAO,EAAE;IAC9B,OAAO,IAAI,CAACpB,kBAAkB,CAACgB,gBAAE,CAACsD,MAAM,EAAE,IAAI,CAAC1D,YAAY,CAACO,OAAO,CAAC,EAAE,IAAI,CAACP,YAAY,CAACQ,OAAO,CAAC,CAAC;EACnG;EAEA,MAAMmD,MAAM,CAAC5B,GAAG,EAAE;IAChB,OAAO,IAAI,CAAC3C,kBAAkB,CAACgB,gBAAE,CAACwD,KAAK,EAAE,IAAI,CAAC5D,YAAY,CAAC+B,GAAG,CAAC,CAAC;EAClE;EAEA,MAAM8B,KAAK,GAAG;IACZ,MAAM9D,IAAI,GAAG,IAAI,CAACF,YAAY,CAAC,GAAG,CAAC;IACnC,MAAM,IAAI,CAACT,kBAAkB,CAACgB,gBAAE,CAAC0D,SAAS,EAAE/D,IAAI,CAAC;IACjD,MAAM,IAAI,CAACX,kBAAkB,CAACgB,gBAAE,CAAC2D,MAAM,EAAEhE,IAAI,EAAEK,gBAAE,CAAC4D,IAAI,GAAG5D,gBAAE,CAAC6D,IAAI,CAAC;EACnE;EAEAC,SAAS,CAACjE,IAAI,EAAEkE,GAAG,EAAE;IACnB,OAAO,IAAI,CAAC/E,kBAAkB,CAACgB,gBAAE,CAACgE,QAAQ,EAAE,IAAI,CAACpE,YAAY,CAACC,IAAI,CAAC,EAAEkE,GAAG,CAAC;EAC3E;EAEA,MAAME,OAAO,CAACpE,IAAI,EAAE;IAClB,MAAMqD,QAAQ,GAAG,IAAI,CAACtD,YAAY,CAACC,IAAI,CAAC;IACxC,OAAO,MAAM,IAAI,CAACb,kBAAkB,CAACmE,qBAAK,EAAE,MAAMnD,gBAAE,CAACkE,MAAM,CAAChB,QAAQ,CAAC,EAAE,IAAI,CAAChE,gBAAgB,CAAC;EAC/F;EAEAiF,QAAQ,CAACtE,IAAI,EAAE+C,MAAM,EAAEC,QAAQ,EAAE;IAC/B,OAAO,IAAI,CAAC7D,kBAAkB,CAACgB,gBAAE,CAACoE,KAAK,EAAEvE,IAAI,CAACE,EAAE,EAAE6C,MAAM,EAAE,CAAC,EAAEA,MAAM,CAACI,MAAM,EAAEH,QAAQ,CAAC;EACvF;EAEAwB,UAAU,CAACxE,IAAI,EAAEyE,IAAI,EAAE;IAAE7B;EAAM,CAAC,EAAE;IAChC,OAAO,IAAI,CAACzD,kBAAkB,CAACgB,gBAAE,CAACuE,SAAS,EAAE,IAAI,CAAC3E,YAAY,CAACC,IAAI,CAAC,EAAEyE,IAAI,EAAE;MAAEE,IAAI,EAAE/B;IAAM,CAAC,CAAC;EAC9F;AACF;AAAC"}
package/dist/nfs.js CHANGED
@@ -4,13 +4,9 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _xoRemoteParser = require("xo-remote-parser");
9
-
10
8
  var _mount = _interopRequireDefault(require("./_mount"));
11
-
12
9
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
-
14
10
  class NfsHandler extends _mount.default {
15
11
  constructor(remote, opts) {
16
12
  const {
@@ -23,12 +19,9 @@ class NfsHandler extends _mount.default {
23
19
  device: `${host}${port !== undefined ? ':' + port : ''}:${path}`
24
20
  });
25
21
  }
26
-
27
22
  get type() {
28
23
  return 'nfs';
29
24
  }
30
-
31
25
  }
32
-
33
26
  exports.default = NfsHandler;
34
27
  //# sourceMappingURL=nfs.js.map
package/dist/nfs.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"nfs.js","names":["NfsHandler","MountHandler","constructor","remote","opts","host","port","path","parse","url","type","device","undefined"],"sources":["../src/nfs.js"],"sourcesContent":["import { parse } from 'xo-remote-parser'\n\nimport MountHandler from './_mount'\n\nexport default class NfsHandler extends MountHandler {\n constructor(remote, opts) {\n const { host, port, path } = parse(remote.url)\n super(remote, opts, {\n type: 'nfs',\n device: `${host}${port !== undefined ? ':' + port : ''}:${path}`,\n })\n }\n\n get type() {\n return 'nfs'\n }\n}\n"],"mappings":";;;;;;;AAAA;;AAEA;;;;AAEe,MAAMA,UAAN,SAAyBC,cAAzB,CAAsC;EACnDC,WAAW,CAACC,MAAD,EAASC,IAAT,EAAe;IACxB,MAAM;MAAEC,IAAF;MAAQC,IAAR;MAAcC;IAAd,IAAuB,IAAAC,qBAAA,EAAML,MAAM,CAACM,GAAb,CAA7B;IACA,MAAMN,MAAN,EAAcC,IAAd,EAAoB;MAClBM,IAAI,EAAE,KADY;MAElBC,MAAM,EAAG,GAAEN,IAAK,GAAEC,IAAI,KAAKM,SAAT,GAAqB,MAAMN,IAA3B,GAAkC,EAAG,IAAGC,IAAK;IAF7C,CAApB;EAID;;EAEO,IAAJG,IAAI,GAAG;IACT,OAAO,KAAP;EACD;;AAXkD"}
1
+ {"version":3,"file":"nfs.js","names":["NfsHandler","MountHandler","constructor","remote","opts","host","port","path","parse","url","type","device","undefined"],"sources":["../src/nfs.js"],"sourcesContent":["import { parse } from 'xo-remote-parser'\n\nimport MountHandler from './_mount'\n\nexport default class NfsHandler extends MountHandler {\n constructor(remote, opts) {\n const { host, port, path } = parse(remote.url)\n super(remote, opts, {\n type: 'nfs',\n device: `${host}${port !== undefined ? ':' + port : ''}:${path}`,\n })\n }\n\n get type() {\n return 'nfs'\n }\n}\n"],"mappings":";;;;;;AAAA;AAEA;AAAmC;AAEpB,MAAMA,UAAU,SAASC,cAAY,CAAC;EACnDC,WAAW,CAACC,MAAM,EAAEC,IAAI,EAAE;IACxB,MAAM;MAAEC,IAAI;MAAEC,IAAI;MAAEC;IAAK,CAAC,GAAG,IAAAC,qBAAK,EAACL,MAAM,CAACM,GAAG,CAAC;IAC9C,KAAK,CAACN,MAAM,EAAEC,IAAI,EAAE;MAClBM,IAAI,EAAE,KAAK;MACXC,MAAM,EAAG,GAAEN,IAAK,GAAEC,IAAI,KAAKM,SAAS,GAAG,GAAG,GAAGN,IAAI,GAAG,EAAG,IAAGC,IAAK;IACjE,CAAC,CAAC;EACJ;EAEA,IAAIG,IAAI,GAAG;IACT,OAAO,KAAK;EACd;AACF;AAAC"}
package/dist/path.js CHANGED
@@ -5,11 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.resolveFromFile = exports.relativeFromFile = exports.normalize = exports.join = exports.dirname = exports.basename = void 0;
7
7
  exports.split = split;
8
-
9
8
  var _path = _interopRequireDefault(require("path"));
10
-
11
9
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
-
13
10
  const {
14
11
  basename,
15
12
  dirname,
@@ -21,22 +18,16 @@ const {
21
18
  exports.join = join;
22
19
  exports.dirname = dirname;
23
20
  exports.basename = basename;
24
-
25
21
  const normalize = path => resolve('/', path);
26
-
27
22
  exports.normalize = normalize;
28
-
29
23
  function split(path) {
30
24
  const parts = normalize(path).split(sep);
25
+
31
26
  parts.shift();
32
27
  return parts;
33
28
  }
34
-
35
29
  const relativeFromFile = (file, path) => relative(dirname(file), path);
36
-
37
30
  exports.relativeFromFile = relativeFromFile;
38
-
39
31
  const resolveFromFile = (file, path) => resolve('/', dirname(file), path).slice(1);
40
-
41
32
  exports.resolveFromFile = resolveFromFile;
42
33
  //# sourceMappingURL=path.js.map
package/dist/path.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"path.js","names":["basename","dirname","join","resolve","relative","sep","path","posix","normalize","split","parts","shift","relativeFromFile","file","resolveFromFile","slice"],"sources":["../src/path.js"],"sourcesContent":["import path from 'path'\n\nconst { basename, dirname, join, resolve, relative, sep } = path.posix\n\nexport { basename, dirname, join }\n\n// normalize the path:\n// - does not contains `.` or `..` (cannot escape root dir)\n// - always starts with `/`\n// - no trailing slash (expect for root)\n// - no duplicate slashes\nexport const normalize = path => resolve('/', path)\n\nexport function split(path) {\n const parts = normalize(path).split(sep)\n\n // remove first (empty) entry\n parts.shift()\n\n return parts\n}\n\nexport const relativeFromFile = (file, path) => relative(dirname(file), path)\nexport const resolveFromFile = (file, path) => resolve('/', dirname(file), path).slice(1)\n"],"mappings":";;;;;;;;AAAA;;;;AAEA,MAAM;EAAEA,QAAF;EAAYC,OAAZ;EAAqBC,IAArB;EAA2BC,OAA3B;EAAoCC,QAApC;EAA8CC;AAA9C,IAAsDC,aAAA,CAAKC,KAAjE;;;;;AASO,MAAMC,SAAS,GAAGF,IAAI,IAAIH,OAAO,CAAC,GAAD,EAAMG,IAAN,CAAjC;;;;AAEA,SAASG,KAAT,CAAeH,IAAf,EAAqB;EAC1B,MAAMI,KAAK,GAAGF,SAAS,CAACF,IAAD,CAAT,CAAgBG,KAAhB,CAAsBJ,GAAtB,CAAd;EAGAK,KAAK,CAACC,KAAN;EAEA,OAAOD,KAAP;AACD;;AAEM,MAAME,gBAAgB,GAAG,CAACC,IAAD,EAAOP,IAAP,KAAgBF,QAAQ,CAACH,OAAO,CAACY,IAAD,CAAR,EAAgBP,IAAhB,CAAjD;;;;AACA,MAAMQ,eAAe,GAAG,CAACD,IAAD,EAAOP,IAAP,KAAgBH,OAAO,CAAC,GAAD,EAAMF,OAAO,CAACY,IAAD,CAAb,EAAqBP,IAArB,CAAP,CAAkCS,KAAlC,CAAwC,CAAxC,CAAxC"}
1
+ {"version":3,"file":"path.js","names":["basename","dirname","join","resolve","relative","sep","path","posix","normalize","split","parts","shift","relativeFromFile","file","resolveFromFile","slice"],"sources":["../src/path.js"],"sourcesContent":["import path from 'path'\n\nconst { basename, dirname, join, resolve, relative, sep } = path.posix\n\nexport { basename, dirname, join }\n\n// normalize the path:\n// - does not contains `.` or `..` (cannot escape root dir)\n// - always starts with `/`\n// - no trailing slash (expect for root)\n// - no duplicate slashes\nexport const normalize = path => resolve('/', path)\n\nexport function split(path) {\n const parts = normalize(path).split(sep)\n\n // remove first (empty) entry\n parts.shift()\n\n return parts\n}\n\nexport const relativeFromFile = (file, path) => relative(dirname(file), path)\nexport const resolveFromFile = (file, path) => resolve('/', dirname(file), path).slice(1)\n"],"mappings":";;;;;;;AAAA;AAAuB;AAEvB,MAAM;EAAEA,QAAQ;EAAEC,OAAO;EAAEC,IAAI;EAAEC,OAAO;EAAEC,QAAQ;EAAEC;AAAI,CAAC,GAAGC,aAAI,CAACC,KAAK;AAAA;AAAA;AAAA;AAS/D,MAAMC,SAAS,GAAGF,IAAI,IAAIH,OAAO,CAAC,GAAG,EAAEG,IAAI,CAAC;AAAA;AAE5C,SAASG,KAAK,CAACH,IAAI,EAAE;EAC1B,MAAMI,KAAK,GAAGF,SAAS,CAACF,IAAI,CAAC,CAACG,KAAK,CAACJ,GAAG,CAAC;;EAGxCK,KAAK,CAACC,KAAK,EAAE;EAEb,OAAOD,KAAK;AACd;AAEO,MAAME,gBAAgB,GAAG,CAACC,IAAI,EAAEP,IAAI,KAAKF,QAAQ,CAACH,OAAO,CAACY,IAAI,CAAC,EAAEP,IAAI,CAAC;AAAA;AACtE,MAAMQ,eAAe,GAAG,CAACD,IAAI,EAAEP,IAAI,KAAKH,OAAO,CAAC,GAAG,EAAEF,OAAO,CAACY,IAAI,CAAC,EAAEP,IAAI,CAAC,CAACS,KAAK,CAAC,CAAC,CAAC;AAAA"}
package/dist/s3.js CHANGED
@@ -4,47 +4,26 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _clientS = require("@aws-sdk/client-s3");
9
-
10
8
  var _libStorage = require("@aws-sdk/lib-storage");
11
-
12
9
  var _nodeHttpHandler = require("@aws-sdk/node-http-handler");
13
-
14
10
  var _middlewareApplyBodyChecksum = require("@aws-sdk/middleware-apply-body-checksum");
15
-
16
11
  var _assert = _interopRequireDefault(require("assert"));
17
-
18
12
  var _http = require("http");
19
-
20
13
  var _https = require("https");
21
-
22
14
  var _retry = _interopRequireDefault(require("promise-toolbox/retry"));
23
-
24
15
  var _log = require("@xen-orchestra/log");
25
-
26
16
  var _decorateWith = require("@vates/decorate-with");
27
-
28
17
  var _stream = require("stream");
29
-
30
18
  var _xoRemoteParser = require("xo-remote-parser");
31
-
32
19
  var _copyStreamToBuffer = _interopRequireDefault(require("./_copyStreamToBuffer.js"));
33
-
34
20
  var _createBufferFromStream = _interopRequireDefault(require("./_createBufferFromStream.js"));
35
-
36
21
  var _guessAwsRegion = _interopRequireDefault(require("./_guessAwsRegion.js"));
37
-
38
22
  var _abstract = _interopRequireDefault(require("./abstract"));
39
-
40
23
  var _path = require("./path");
41
-
42
24
  var _asyncEach = require("@vates/async-each");
43
-
44
25
  var _dec, _class;
45
-
46
26
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
47
-
48
27
  function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object.keys(descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object.defineProperty(target, property, desc); desc = null; } return desc; }
49
28
 
50
29
  const MIN_PART_SIZE = 1024 * 1024 * 5;
@@ -52,6 +31,7 @@ const MAX_PART_SIZE = 1024 * 1024 * 1024 * 5;
52
31
  const MAX_PARTS_COUNT = 10000;
53
32
  const MAX_OBJECT_SIZE = 1024 * 1024 * 1024 * 1024 * 5;
54
33
  const IDEAL_FRAGMENT_SIZE = Math.ceil(MAX_OBJECT_SIZE / MAX_PARTS_COUNT);
34
+
55
35
  const {
56
36
  warn
57
37
  } = (0, _log.createLogger)('xo:fs:s3');
@@ -59,10 +39,8 @@ let S3Handler = (_dec = (0, _decorateWith.decorateWith)(_retry.default.wrap, {
59
39
  delays: [100, 200, 500, 1000, 2000],
60
40
  when: e => {
61
41
  var _e$$metadata;
62
-
63
42
  return ((_e$$metadata = e.$metadata) === null || _e$$metadata === void 0 ? void 0 : _e$$metadata.httpStatusCode) === 500;
64
43
  },
65
-
66
44
  onRetry(error) {
67
45
  warn('retrying writing file', {
68
46
  attemptNumber: this.attemptNumber,
@@ -71,7 +49,6 @@ let S3Handler = (_dec = (0, _decorateWith.decorateWith)(_retry.default.wrap, {
71
49
  file: this.arguments[0]
72
50
  });
73
51
  }
74
-
75
52
  }), (_class = class S3Handler extends _abstract.default {
76
53
  constructor(remote, _opts) {
77
54
  super(remote);
@@ -107,24 +84,19 @@ let S3Handler = (_dec = (0, _decorateWith.decorateWith)(_retry.default.wrap, {
107
84
  });
108
85
 
109
86
  this._s3.middlewareStack.use((0, _middlewareApplyBodyChecksum.getApplyMd5BodyChecksumPlugin)(this._s3.config));
110
-
111
87
  const parts = (0, _path.split)(path);
112
88
  this._bucket = parts.shift();
113
89
  this._dir = (0, _path.join)(...parts);
114
90
  }
115
-
116
91
  get type() {
117
92
  return 's3';
118
93
  }
119
-
120
94
  _makeCopySource(path) {
121
95
  return (0, _path.join)(this._bucket, this._dir, path);
122
96
  }
123
-
124
97
  _makeKey(file) {
125
98
  return (0, _path.join)(this._dir, file);
126
99
  }
127
-
128
100
  _makePrefix(dir) {
129
101
  const prefix = (0, _path.join)(this._dir, dir, '/');
130
102
 
@@ -132,29 +104,25 @@ let S3Handler = (_dec = (0, _decorateWith.decorateWith)(_retry.default.wrap, {
132
104
  return prefix;
133
105
  }
134
106
  }
135
-
136
107
  _createParams(file) {
137
108
  return {
138
109
  Bucket: this._bucket,
139
110
  Key: this._makeKey(file)
140
111
  };
141
112
  }
142
-
143
113
  async _multipartCopy(oldPath, newPath) {
144
114
  const size = await this._getSize(oldPath);
145
-
146
115
  const CopySource = this._makeCopySource(oldPath);
147
-
148
- const multipartParams = await this._s3.send(new _clientS.CreateMultipartUploadCommand({ ...this._createParams(newPath)
116
+ const multipartParams = await this._s3.send(new _clientS.CreateMultipartUploadCommand({
117
+ ...this._createParams(newPath)
149
118
  }));
150
-
151
119
  try {
152
120
  const parts = [];
153
121
  let start = 0;
154
-
155
122
  while (start < size) {
156
123
  const partNumber = parts.length + 1;
157
- const upload = await this._s3.send(new _clientS.UploadPartCopyCommand({ ...multipartParams,
124
+ const upload = await this._s3.send(new _clientS.UploadPartCopyCommand({
125
+ ...multipartParams,
158
126
  CopySource,
159
127
  CopySourceRange: `bytes=${start}-${Math.min(start + MAX_PART_SIZE, size) - 1}`,
160
128
  PartNumber: partNumber
@@ -165,8 +133,8 @@ let S3Handler = (_dec = (0, _decorateWith.decorateWith)(_retry.default.wrap, {
165
133
  });
166
134
  start += MAX_PART_SIZE;
167
135
  }
168
-
169
- await this._s3.send(new _clientS.CompleteMultipartUploadCommand({ ...multipartParams,
136
+ await this._s3.send(new _clientS.CompleteMultipartUploadCommand({
137
+ ...multipartParams,
170
138
  MultipartUpload: {
171
139
  Parts: parts
172
140
  }
@@ -176,19 +144,17 @@ let S3Handler = (_dec = (0, _decorateWith.decorateWith)(_retry.default.wrap, {
176
144
  throw e;
177
145
  }
178
146
  }
179
-
180
147
  async _copy(oldPath, newPath) {
181
148
  const CopySource = this._makeCopySource(oldPath);
182
-
183
149
  try {
184
- await this._s3.send(new _clientS.CopyObjectCommand({ ...this._createParams(newPath),
150
+ await this._s3.send(new _clientS.CopyObjectCommand({
151
+ ...this._createParams(newPath),
185
152
  CopySource
186
153
  }));
187
154
  } catch (e) {
188
155
  if (e.name === 'EntityTooLarge') {
189
156
  return this._multipartCopy(oldPath, newPath);
190
157
  }
191
-
192
158
  if (e.name === 'NoSuchKey') {
193
159
  const error = new Error(`ENOENT: no such file or directory '${oldPath}'`);
194
160
  error.cause = e;
@@ -196,14 +162,11 @@ let S3Handler = (_dec = (0, _decorateWith.decorateWith)(_retry.default.wrap, {
196
162
  error.path = oldPath;
197
163
  throw error;
198
164
  }
199
-
200
165
  throw e;
201
166
  }
202
167
  }
203
-
204
168
  async _isNotEmptyDir(path) {
205
169
  var _result$Contents;
206
-
207
170
  const result = await this._s3.send(new _clientS.ListObjectsV2Command({
208
171
  Bucket: this._bucket,
209
172
  MaxKeys: 1,
@@ -211,7 +174,6 @@ let S3Handler = (_dec = (0, _decorateWith.decorateWith)(_retry.default.wrap, {
211
174
  }));
212
175
  return ((_result$Contents = result.Contents) === null || _result$Contents === void 0 ? void 0 : _result$Contents.length) > 0;
213
176
  }
214
-
215
177
  async _isFile(path) {
216
178
  try {
217
179
  await this._s3.send(new _clientS.HeadObjectCommand(this._createParams(path)));
@@ -220,11 +182,9 @@ let S3Handler = (_dec = (0, _decorateWith.decorateWith)(_retry.default.wrap, {
220
182
  if (error.name === 'NotFound') {
221
183
  return false;
222
184
  }
223
-
224
185
  throw error;
225
186
  }
226
187
  }
227
-
228
188
  async _outputStream(path, input, {
229
189
  validator
230
190
  }) {
@@ -234,12 +194,12 @@ let S3Handler = (_dec = (0, _decorateWith.decorateWith)(_retry.default.wrap, {
234
194
  client: this._s3,
235
195
  queueSize: 1,
236
196
  partSize: IDEAL_FRAGMENT_SIZE,
237
- params: { ...this._createParams(path),
197
+ params: {
198
+ ...this._createParams(path),
238
199
  Body
239
200
  }
240
201
  });
241
202
  await upload.done();
242
-
243
203
  if (validator !== undefined) {
244
204
  try {
245
205
  await validator.call(this, path);
@@ -251,11 +211,11 @@ let S3Handler = (_dec = (0, _decorateWith.decorateWith)(_retry.default.wrap, {
251
211
  }
252
212
 
253
213
  async _writeFile(file, data, options) {
254
- return this._s3.send(new _clientS.PutObjectCommand({ ...this._createParams(file),
214
+ return this._s3.send(new _clientS.PutObjectCommand({
215
+ ...this._createParams(file),
255
216
  Body: data
256
217
  }));
257
218
  }
258
-
259
219
  async _createReadStream(path, options) {
260
220
  try {
261
221
  return (await this._s3.send(new _clientS.GetObjectCommand(this._createParams(path)))).Body;
@@ -266,14 +226,11 @@ let S3Handler = (_dec = (0, _decorateWith.decorateWith)(_retry.default.wrap, {
266
226
  error.path = path;
267
227
  throw error;
268
228
  }
269
-
270
229
  throw e;
271
230
  }
272
231
  }
273
-
274
232
  async _unlink(path) {
275
233
  await this._s3.send(new _clientS.DeleteObjectCommand(this._createParams(path)));
276
-
277
234
  if (await this._isNotEmptyDir(path)) {
278
235
  const error = new Error(`EISDIR: illegal operation on a directory, unlink '${path}'`);
279
236
  error.code = 'EISDIR';
@@ -281,13 +238,10 @@ let S3Handler = (_dec = (0, _decorateWith.decorateWith)(_retry.default.wrap, {
281
238
  throw error;
282
239
  }
283
240
  }
284
-
285
241
  async _list(dir) {
286
242
  let NextContinuationToken;
287
243
  const uniq = new Set();
288
-
289
244
  const Prefix = this._makePrefix(dir);
290
-
291
245
  do {
292
246
  const result = await this._s3.send(new _clientS.ListObjectsV2Command({
293
247
  Bucket: this._bucket,
@@ -295,7 +249,6 @@ let S3Handler = (_dec = (0, _decorateWith.decorateWith)(_retry.default.wrap, {
295
249
  Delimiter: '/',
296
250
  ContinuationToken: NextContinuationToken
297
251
  }));
298
-
299
252
  if (result.IsTruncated) {
300
253
  warn(`need pagination to browse the directory ${dir} completely`);
301
254
  NextContinuationToken = result.NextContinuationToken;
@@ -311,10 +264,8 @@ let S3Handler = (_dec = (0, _decorateWith.decorateWith)(_retry.default.wrap, {
311
264
  uniq.add((0, _path.basename)(entry.Key));
312
265
  }
313
266
  } while (NextContinuationToken !== undefined);
314
-
315
267
  return [...uniq];
316
268
  }
317
-
318
269
  async _mkdir(path) {
319
270
  if (await this._isFile(path)) {
320
271
  const error = new Error(`ENOTDIR: file already exists, mkdir '${path}'`);
@@ -328,25 +279,19 @@ let S3Handler = (_dec = (0, _decorateWith.decorateWith)(_retry.default.wrap, {
328
279
  await this.copy(oldPath, newPath);
329
280
  await this._s3.send(new _clientS.DeleteObjectCommand(this._createParams(oldPath)));
330
281
  }
331
-
332
282
  async _getSize(file) {
333
283
  if (typeof file !== 'string') {
334
284
  file = file.fd;
335
285
  }
336
-
337
286
  const result = await this._s3.send(new _clientS.HeadObjectCommand(this._createParams(file)));
338
287
  return +result.ContentLength;
339
288
  }
340
-
341
289
  async _read(file, buffer, position = 0) {
342
290
  if (typeof file !== 'string') {
343
291
  file = file.fd;
344
292
  }
345
-
346
293
  const params = this._createParams(file);
347
-
348
294
  params.Range = `bytes=${position}-${position + buffer.length - 1}`;
349
-
350
295
  try {
351
296
  const result = await this._s3.send(new _clientS.GetObjectCommand(params));
352
297
  const bytesRead = await (0, _copyStreamToBuffer.default)(result.Body, buffer);
@@ -363,11 +308,9 @@ let S3Handler = (_dec = (0, _decorateWith.decorateWith)(_retry.default.wrap, {
363
308
  throw error;
364
309
  }
365
310
  }
366
-
367
311
  throw e;
368
312
  }
369
313
  }
370
-
371
314
  async _rmdir(path) {
372
315
  if (await this._isNotEmptyDir(path)) {
373
316
  const error = new Error(`ENOTEMPTY: directory not empty, rmdir '${path}`);
@@ -375,13 +318,12 @@ let S3Handler = (_dec = (0, _decorateWith.decorateWith)(_retry.default.wrap, {
375
318
  error.path = path;
376
319
  throw error;
377
320
  }
321
+
378
322
  }
379
323
 
380
324
  async _rmtree(path) {
381
325
  let NextContinuationToken;
382
-
383
326
  const Prefix = this._makePrefix(path);
384
-
385
327
  do {
386
328
  const result = await this._s3.send(new _clientS.ListObjectsV2Command({
387
329
  Bucket: this._bucket,
@@ -401,16 +343,12 @@ let S3Handler = (_dec = (0, _decorateWith.decorateWith)(_retry.default.wrap, {
401
343
  });
402
344
  } while (NextContinuationToken !== undefined);
403
345
  }
404
-
405
346
  async _write(file, buffer, position) {
406
347
  if (typeof file !== 'string') {
407
348
  file = file.fd;
408
349
  }
409
-
410
350
  const uploadParams = this._createParams(file);
411
-
412
351
  let fileSize;
413
-
414
352
  try {
415
353
  fileSize = +(await this._s3.send(new _clientS.HeadObjectCommand(uploadParams))).ContentLength;
416
354
  } catch (e) {
@@ -420,19 +358,17 @@ let S3Handler = (_dec = (0, _decorateWith.decorateWith)(_retry.default.wrap, {
420
358
  throw e;
421
359
  }
422
360
  }
423
-
424
361
  if (fileSize < MIN_PART_SIZE) {
425
362
  const resultBuffer = Buffer.alloc(Math.max(fileSize, position + buffer.length));
426
-
427
363
  if (fileSize !== 0) {
428
364
  const result = await this._s3.send(new _clientS.GetObjectCommand(uploadParams));
429
365
  await (0, _copyStreamToBuffer.default)(result.Body, resultBuffer);
430
366
  } else {
431
367
  Buffer.alloc(0).copy(resultBuffer);
432
368
  }
433
-
434
369
  buffer.copy(resultBuffer, position);
435
- await this._s3.send(new _clientS.PutObjectCommand({ ...uploadParams,
370
+ await this._s3.send(new _clientS.PutObjectCommand({
371
+ ...uploadParams,
436
372
  Body: resultBuffer
437
373
  }));
438
374
  return {
@@ -441,10 +377,10 @@ let S3Handler = (_dec = (0, _decorateWith.decorateWith)(_retry.default.wrap, {
441
377
  };
442
378
  } else {
443
379
  const multipartParams = await this._s3.send(new _clientS.CreateMultipartUploadCommand(uploadParams));
444
- const copyMultipartParams = { ...multipartParams,
380
+ const copyMultipartParams = {
381
+ ...multipartParams,
445
382
  CopySource: this._makeCopySource(file)
446
383
  };
447
-
448
384
  try {
449
385
  const parts = [];
450
386
  const prefixSize = position;
@@ -458,19 +394,16 @@ let S3Handler = (_dec = (0, _decorateWith.decorateWith)(_retry.default.wrap, {
458
394
  let fragmentsCount = Math.floor(prefixSize / MAX_PART_SIZE);
459
395
  const prefixFragmentSize = MAX_PART_SIZE;
460
396
  let prefixLastFragmentSize = prefixSize - prefixFragmentSize * fragmentsCount;
461
-
462
397
  if (prefixLastFragmentSize >= MIN_PART_SIZE) {
463
398
  fragmentsCount++;
464
399
  prefixLastFragmentSize = 0;
465
400
  }
466
-
467
401
  for (let i = 0; i < fragmentsCount; i++) {
468
402
  const fragmentEnd = Math.min(prefixPosition + prefixFragmentSize, prefixSize);
469
-
470
403
  _assert.default.strictEqual(fragmentEnd - prefixPosition <= MAX_PART_SIZE, true);
471
-
472
404
  const range = `bytes=${prefixPosition}-${fragmentEnd - 1}`;
473
- const copyPrefixParams = { ...copyMultipartParams,
405
+ const copyPrefixParams = {
406
+ ...copyMultipartParams,
474
407
  PartNumber: partNumber++,
475
408
  CopySourceRange: range
476
409
  };
@@ -481,24 +414,21 @@ let S3Handler = (_dec = (0, _decorateWith.decorateWith)(_retry.default.wrap, {
481
414
  });
482
415
  prefixPosition += prefixFragmentSize;
483
416
  }
484
-
485
417
  if (prefixLastFragmentSize) {
486
- const downloadParams = { ...uploadParams,
418
+ const downloadParams = {
419
+ ...uploadParams,
487
420
  Range: `bytes=${prefixPosition}-${prefixSize - 1}`
488
421
  };
489
422
  let prefixBuffer;
490
-
491
423
  if (prefixSize > 0) {
492
424
  const result = await this._s3.send(new _clientS.GetObjectCommand(downloadParams));
493
425
  prefixBuffer = await (0, _createBufferFromStream.default)(result.Body);
494
426
  } else {
495
427
  prefixBuffer = Buffer.alloc(0);
496
428
  }
497
-
498
429
  editBuffer = Buffer.concat([prefixBuffer, buffer]);
499
430
  editBufferOffset -= prefixLastFragmentSize;
500
431
  }
501
-
502
432
  if (hasSuffix && editBuffer.length < MIN_PART_SIZE) {
503
433
  const complementSize = Math.min(MIN_PART_SIZE - editBuffer.length, suffixSize);
504
434
  const complementOffset = editBufferOffset + editBuffer.length;
@@ -506,15 +436,16 @@ let S3Handler = (_dec = (0, _decorateWith.decorateWith)(_retry.default.wrap, {
506
436
  suffixSize -= complementSize;
507
437
  hasSuffix = suffixSize > 0;
508
438
  const prefixRange = `bytes=${complementOffset}-${complementOffset + complementSize - 1}`;
509
- const downloadParams = { ...uploadParams,
439
+ const downloadParams = {
440
+ ...uploadParams,
510
441
  Range: prefixRange
511
442
  };
512
443
  const result = await this._s3.send(new _clientS.GetObjectCommand(downloadParams));
513
444
  const complementBuffer = await (0, _createBufferFromStream.default)(result.Body);
514
445
  editBuffer = Buffer.concat([editBuffer, complementBuffer]);
515
446
  }
516
-
517
- const editParams = { ...multipartParams,
447
+ const editParams = {
448
+ ...multipartParams,
518
449
  Body: editBuffer,
519
450
  PartNumber: partNumber++
520
451
  };
@@ -523,18 +454,15 @@ let S3Handler = (_dec = (0, _decorateWith.decorateWith)(_retry.default.wrap, {
523
454
  ETag: editPart.ETag,
524
455
  PartNumber: editParams.PartNumber
525
456
  });
526
-
527
457
  if (hasSuffix) {
528
458
  const suffixFragments = Math.ceil(suffixSize / MAX_PART_SIZE);
529
459
  let suffixFragmentOffset = suffixOffset;
530
-
531
460
  for (let i = 0; i < suffixFragments; i++) {
532
461
  const fragmentEnd = suffixFragmentOffset + MAX_PART_SIZE;
533
-
534
462
  _assert.default.strictEqual(Math.min(fileSize, fragmentEnd) - suffixFragmentOffset <= MAX_PART_SIZE, true);
535
-
536
463
  const suffixRange = `bytes=${suffixFragmentOffset}-${Math.min(fileSize, fragmentEnd) - 1}`;
537
- const copySuffixParams = { ...copyMultipartParams,
464
+ const copySuffixParams = {
465
+ ...copyMultipartParams,
538
466
  PartNumber: partNumber++,
539
467
  CopySourceRange: suffixRange
540
468
  };
@@ -546,8 +474,8 @@ let S3Handler = (_dec = (0, _decorateWith.decorateWith)(_retry.default.wrap, {
546
474
  suffixFragmentOffset = fragmentEnd;
547
475
  }
548
476
  }
549
-
550
- await this._s3.send(new _clientS.CompleteMultipartUploadCommand({ ...multipartParams,
477
+ await this._s3.send(new _clientS.CompleteMultipartUploadCommand({
478
+ ...multipartParams,
551
479
  MultipartUpload: {
552
480
  Parts: parts
553
481
  }
@@ -558,17 +486,13 @@ let S3Handler = (_dec = (0, _decorateWith.decorateWith)(_retry.default.wrap, {
558
486
  }
559
487
  }
560
488
  }
561
-
562
489
  async _openFile(path, flags) {
563
490
  return path;
564
491
  }
565
-
566
492
  async _closeFile(fd) {}
567
-
568
493
  useVhdDirectory() {
569
494
  return true;
570
495
  }
571
-
572
496
  }, (_applyDecoratedDescriptor(_class.prototype, "_writeFile", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, "_writeFile"), _class.prototype)), _class));
573
497
  exports.default = S3Handler;
574
498
  //# sourceMappingURL=s3.js.map