@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/_copyStreamToBuffer.js +0 -1
- package/dist/_copyStreamToBuffer.js.map +1 -1
- package/dist/_createBufferFromStream.js +0 -1
- package/dist/_createBufferFromStream.js.map +1 -1
- package/dist/_encryptor.js +76 -24
- package/dist/_encryptor.js.map +1 -1
- package/dist/_guessAwsRegion.js +0 -1
- package/dist/_guessAwsRegion.js.map +1 -1
- package/dist/_mount.js +3 -23
- package/dist/_mount.js.map +1 -1
- package/dist/abstract.js +65 -157
- package/dist/abstract.js.map +1 -1
- package/dist/checksum.js +0 -12
- package/dist/checksum.js.map +1 -1
- package/dist/index.js +19 -16
- package/dist/index.js.map +1 -1
- package/dist/local.js +0 -46
- package/dist/local.js.map +1 -1
- package/dist/nfs.js +0 -7
- package/dist/nfs.js.map +1 -1
- package/dist/path.js +1 -10
- package/dist/path.js.map +1 -1
- package/dist/s3.js +30 -106
- package/dist/s3.js.map +1 -1
- package/dist/smb.js +0 -8
- package/dist/smb.js.map +1 -1
- package/encryption.json +1 -0
- package/metadata.json +1 -0
- package/package.json +6 -6
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":"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"}
|
|
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":"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"}
|
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":"
|
|
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":"
|
|
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
|
-
|
|
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({
|
|
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
|
-
|
|
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({
|
|
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: {
|
|
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({
|
|
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({
|
|
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 = {
|
|
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 = {
|
|
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 = {
|
|
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 = {
|
|
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
|
-
|
|
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 = {
|
|
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
|
-
|
|
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
|