Inital build
Some checks failed
Automated Container Build / build-and-push (push) Failing after 12s

This commit is contained in:
Elijah 2026-05-22 12:29:43 -07:00
parent fa2be029a2
commit 724d70e58b
3339 changed files with 1075535 additions and 0 deletions

22
frontend/node_modules/tus-js-client/LICENSE generated vendored Normal file
View file

@ -0,0 +1,22 @@
The MIT License (MIT)
Copyright (c) 2015 tus - Resumable File Uploads
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

72
frontend/node_modules/tus-js-client/README.md generated vendored Normal file
View file

@ -0,0 +1,72 @@
# tus-js-client
<img alt="Tus logo" src="https://raw.githubusercontent.com/tus/tus.io/main/public/images/tus1.png?raw=true" width="30%" align="right" />
> **tus** is a protocol based on HTTP for _resumable file uploads_. Resumable
> means that an upload can be interrupted at any moment and can be resumed without
> re-uploading the previous data again. An interruption may happen willingly, if
> the user wants to pause, or by accident in case of an network issue or server
> outage.
tus-js-client is a pure **JavaScript** client for the [tus resumable upload protocol](http://tus.io) and can be used inside **browsers**, **Node.js**,
**React Native** and **Apache Cordova** applications.
**Protocol version:** 1.0.0
This branch contains tus-js-client v4. If you are looking for the previous major release, after which [breaking changes](https://github.com/tus/tus-js-client/releases/tag/v4.0.0) have been introduced, please look at the [v3.1.3 tag](https://github.com/tus/tus-js-client/tree/v3.1.3).
## Example
```js
input.addEventListener('change', function (e) {
// Get the selected file from the input element
var file = e.target.files[0]
// Create a new tus upload
var upload = new tus.Upload(file, {
endpoint: 'http://localhost:1080/files/',
retryDelays: [0, 3000, 5000, 10000, 20000],
metadata: {
filename: file.name,
filetype: file.type,
},
onError: function (error) {
console.log('Failed because: ' + error)
},
onProgress: function (bytesUploaded, bytesTotal) {
var percentage = ((bytesUploaded / bytesTotal) * 100).toFixed(2)
console.log(bytesUploaded, bytesTotal, percentage + '%')
},
onSuccess: function () {
console.log('Download %s from %s', upload.file.name, upload.url)
},
})
// Check if there are any previous uploads to continue.
upload.findPreviousUploads().then(function (previousUploads) {
// Found previous uploads so we select the first one.
if (previousUploads.length) {
upload.resumeFromPreviousUpload(previousUploads[0])
}
// Start the upload
upload.start()
})
})
```
## Documentation
- [Installation & Requirements](/docs/installation.md)
- [Usage & Examples](/docs/usage.md)
- [API Reference](/docs/api.md)
- [Contribution Guidelines](/docs/contributing.md)
- [FAQ & Common issues](/docs/faq.md)
## Build status
[![Actions Status](https://github.com/tus/tus-js-client/workflows/CI/badge.svg)](https://github.com/tus/tus-js-client/actions)
## License
This project is licensed under the MIT license, see `LICENSE`.

View file

@ -0,0 +1,450 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _isReactNative = _interopRequireDefault(require("./isReactNative.js"));
var _uriToBlob = _interopRequireDefault(require("./uriToBlob.js"));
var _FileSource = _interopRequireDefault(require("./sources/FileSource.js"));
var _StreamSource = _interopRequireDefault(require("./sources/StreamSource.js"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _typeof(o) {
"@babel/helpers - typeof";
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
return typeof o;
} : function (o) {
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
}, _typeof(o);
}
function _regeneratorRuntime() {
"use strict";
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */
_regeneratorRuntime = function _regeneratorRuntime() {
return e;
};
var t,
e = {},
r = Object.prototype,
n = r.hasOwnProperty,
o = Object.defineProperty || function (t, e, r) {
t[e] = r.value;
},
i = "function" == typeof Symbol ? Symbol : {},
a = i.iterator || "@@iterator",
c = i.asyncIterator || "@@asyncIterator",
u = i.toStringTag || "@@toStringTag";
function define(t, e, r) {
return Object.defineProperty(t, e, {
value: r,
enumerable: !0,
configurable: !0,
writable: !0
}), t[e];
}
try {
define({}, "");
} catch (t) {
define = function define(t, e, r) {
return t[e] = r;
};
}
function wrap(t, e, r, n) {
var i = e && e.prototype instanceof Generator ? e : Generator,
a = Object.create(i.prototype),
c = new Context(n || []);
return o(a, "_invoke", {
value: makeInvokeMethod(t, r, c)
}), a;
}
function tryCatch(t, e, r) {
try {
return {
type: "normal",
arg: t.call(e, r)
};
} catch (t) {
return {
type: "throw",
arg: t
};
}
}
e.wrap = wrap;
var h = "suspendedStart",
l = "suspendedYield",
f = "executing",
s = "completed",
y = {};
function Generator() {}
function GeneratorFunction() {}
function GeneratorFunctionPrototype() {}
var p = {};
define(p, a, function () {
return this;
});
var d = Object.getPrototypeOf,
v = d && d(d(values([])));
v && v !== r && n.call(v, a) && (p = v);
var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p);
function defineIteratorMethods(t) {
["next", "throw", "return"].forEach(function (e) {
define(t, e, function (t) {
return this._invoke(e, t);
});
});
}
function AsyncIterator(t, e) {
function invoke(r, o, i, a) {
var c = tryCatch(t[r], t, o);
if ("throw" !== c.type) {
var u = c.arg,
h = u.value;
return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) {
invoke("next", t, i, a);
}, function (t) {
invoke("throw", t, i, a);
}) : e.resolve(h).then(function (t) {
u.value = t, i(u);
}, function (t) {
return invoke("throw", t, i, a);
});
}
a(c.arg);
}
var r;
o(this, "_invoke", {
value: function value(t, n) {
function callInvokeWithMethodAndArg() {
return new e(function (e, r) {
invoke(t, n, e, r);
});
}
return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();
}
});
}
function makeInvokeMethod(e, r, n) {
var o = h;
return function (i, a) {
if (o === f) throw Error("Generator is already running");
if (o === s) {
if ("throw" === i) throw a;
return {
value: t,
done: !0
};
}
for (n.method = i, n.arg = a;;) {
var c = n.delegate;
if (c) {
var u = maybeInvokeDelegate(c, n);
if (u) {
if (u === y) continue;
return u;
}
}
if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) {
if (o === h) throw o = s, n.arg;
n.dispatchException(n.arg);
} else "return" === n.method && n.abrupt("return", n.arg);
o = f;
var p = tryCatch(e, r, n);
if ("normal" === p.type) {
if (o = n.done ? s : l, p.arg === y) continue;
return {
value: p.arg,
done: n.done
};
}
"throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg);
}
};
}
function maybeInvokeDelegate(e, r) {
var n = r.method,
o = e.iterator[n];
if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y;
var i = tryCatch(o, e.iterator, r.arg);
if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y;
var a = i.arg;
return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y);
}
function pushTryEntry(t) {
var e = {
tryLoc: t[0]
};
1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e);
}
function resetTryEntry(t) {
var e = t.completion || {};
e.type = "normal", delete e.arg, t.completion = e;
}
function Context(t) {
this.tryEntries = [{
tryLoc: "root"
}], t.forEach(pushTryEntry, this), this.reset(!0);
}
function values(e) {
if (e || "" === e) {
var r = e[a];
if (r) return r.call(e);
if ("function" == typeof e.next) return e;
if (!isNaN(e.length)) {
var o = -1,
i = function next() {
for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next;
return next.value = t, next.done = !0, next;
};
return i.next = i;
}
}
throw new TypeError(_typeof(e) + " is not iterable");
}
return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", {
value: GeneratorFunctionPrototype,
configurable: !0
}), o(GeneratorFunctionPrototype, "constructor", {
value: GeneratorFunction,
configurable: !0
}), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) {
var e = "function" == typeof t && t.constructor;
return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name));
}, e.mark = function (t) {
return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t;
}, e.awrap = function (t) {
return {
__await: t
};
}, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () {
return this;
}), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) {
void 0 === i && (i = Promise);
var a = new AsyncIterator(wrap(t, r, n, o), i);
return e.isGeneratorFunction(r) ? a : a.next().then(function (t) {
return t.done ? t.value : a.next();
});
}, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () {
return this;
}), define(g, "toString", function () {
return "[object Generator]";
}), e.keys = function (t) {
var e = Object(t),
r = [];
for (var n in e) r.push(n);
return r.reverse(), function next() {
for (; r.length;) {
var t = r.pop();
if (t in e) return next.value = t, next.done = !1, next;
}
return next.done = !0, next;
};
}, e.values = values, Context.prototype = {
constructor: Context,
reset: function reset(e) {
if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t);
},
stop: function stop() {
this.done = !0;
var t = this.tryEntries[0].completion;
if ("throw" === t.type) throw t.arg;
return this.rval;
},
dispatchException: function dispatchException(e) {
if (this.done) throw e;
var r = this;
function handle(n, o) {
return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o;
}
for (var o = this.tryEntries.length - 1; o >= 0; --o) {
var i = this.tryEntries[o],
a = i.completion;
if ("root" === i.tryLoc) return handle("end");
if (i.tryLoc <= this.prev) {
var c = n.call(i, "catchLoc"),
u = n.call(i, "finallyLoc");
if (c && u) {
if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);
if (this.prev < i.finallyLoc) return handle(i.finallyLoc);
} else if (c) {
if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);
} else {
if (!u) throw Error("try statement without catch or finally");
if (this.prev < i.finallyLoc) return handle(i.finallyLoc);
}
}
}
},
abrupt: function abrupt(t, e) {
for (var r = this.tryEntries.length - 1; r >= 0; --r) {
var o = this.tryEntries[r];
if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) {
var i = o;
break;
}
}
i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null);
var a = i ? i.completion : {};
return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a);
},
complete: function complete(t, e) {
if ("throw" === t.type) throw t.arg;
return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y;
},
finish: function finish(t) {
for (var e = this.tryEntries.length - 1; e >= 0; --e) {
var r = this.tryEntries[e];
if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y;
}
},
"catch": function _catch(t) {
for (var e = this.tryEntries.length - 1; e >= 0; --e) {
var r = this.tryEntries[e];
if (r.tryLoc === t) {
var n = r.completion;
if ("throw" === n.type) {
var o = n.arg;
resetTryEntry(r);
}
return o;
}
}
throw Error("illegal catch attempt");
},
delegateYield: function delegateYield(e, r, n) {
return this.delegate = {
iterator: values(e),
resultName: r,
nextLoc: n
}, "next" === this.method && (this.arg = t), y;
}
}, e;
}
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
try {
var info = gen[key](arg);
var value = info.value;
} catch (error) {
reject(error);
return;
}
if (info.done) {
resolve(value);
} else {
Promise.resolve(value).then(_next, _throw);
}
}
function _asyncToGenerator(fn) {
return function () {
var self = this,
args = arguments;
return new Promise(function (resolve, reject) {
var gen = fn.apply(self, args);
function _next(value) {
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
}
function _throw(err) {
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
}
_next(undefined);
});
};
}
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
Object.defineProperty(Constructor, "prototype", {
writable: false
});
return Constructor;
}
function _toPropertyKey(t) {
var i = _toPrimitive(t, "string");
return "symbol" == _typeof(i) ? i : i + "";
}
function _toPrimitive(t, r) {
if ("object" != _typeof(t) || !t) return t;
var e = t[Symbol.toPrimitive];
if (void 0 !== e) {
var i = e.call(t, r || "default");
if ("object" != _typeof(i)) return i;
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return ("string" === r ? String : Number)(t);
}
var FileReader = exports.default = /*#__PURE__*/function () {
function FileReader() {
_classCallCheck(this, FileReader);
}
return _createClass(FileReader, [{
key: "openFile",
value: function () {
var _openFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(input, chunkSize) {
var blob;
return _regeneratorRuntime().wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
if (!((0, _isReactNative.default)() && input && typeof input.uri !== 'undefined')) {
_context.next = 11;
break;
}
_context.prev = 1;
_context.next = 4;
return (0, _uriToBlob.default)(input.uri);
case 4:
blob = _context.sent;
return _context.abrupt("return", new _FileSource.default(blob));
case 8:
_context.prev = 8;
_context.t0 = _context["catch"](1);
throw new Error("tus: cannot fetch `file.uri` as Blob, make sure the uri is correct and accessible. ".concat(_context.t0));
case 11:
if (!(typeof input.slice === 'function' && typeof input.size !== 'undefined')) {
_context.next = 13;
break;
}
return _context.abrupt("return", Promise.resolve(new _FileSource.default(input)));
case 13:
if (!(typeof input.read === 'function')) {
_context.next = 18;
break;
}
chunkSize = Number(chunkSize);
if (Number.isFinite(chunkSize)) {
_context.next = 17;
break;
}
return _context.abrupt("return", Promise.reject(new Error('cannot create source for stream without a finite value for the `chunkSize` option')));
case 17:
return _context.abrupt("return", Promise.resolve(new _StreamSource.default(input, chunkSize)));
case 18:
return _context.abrupt("return", Promise.reject(new Error('source object may only be an instance of File, Blob, or Reader in this environment')));
case 19:
case "end":
return _context.stop();
}
}, _callee, null, [[1, 8]]);
}));
function openFile(_x, _x2) {
return _openFile.apply(this, arguments);
}
return openFile;
}()
}]);
}();

View file

@ -0,0 +1,40 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = fingerprint;
var _isReactNative = _interopRequireDefault(require("./isReactNative.js"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// TODO: Differenciate between input types
/**
* Generate a fingerprint for a file which will be used the store the endpoint
*
* @param {File} file
* @param {Object} options
* @param {Function} callback
*/
function fingerprint(file, options) {
if ((0, _isReactNative.default)()) {
return Promise.resolve(reactNativeFingerprint(file, options));
}
return Promise.resolve(['tus-br', file.name, file.type, file.size, file.lastModified, options.endpoint].join('-'));
}
function reactNativeFingerprint(file, options) {
var exifHash = file.exif ? hashCode(JSON.stringify(file.exif)) : 'noexif';
return ['tus-rn', file.name || 'noname', file.size || 'nosize', exifHash, options.endpoint].join('/');
}
function hashCode(str) {
// from https://stackoverflow.com/a/8831937/151666
var hash = 0;
if (str.length === 0) {
return hash;
}
for (var i = 0; i < str.length; i++) {
var _char = str.charCodeAt(i);
hash = (hash << 5) - hash + _char;
hash &= hash; // Convert to 32bit integer
}
return hash;
}

View file

@ -0,0 +1,166 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
function _typeof(o) {
"@babel/helpers - typeof";
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
return typeof o;
} : function (o) {
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
}, _typeof(o);
}
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
Object.defineProperty(Constructor, "prototype", {
writable: false
});
return Constructor;
}
function _toPropertyKey(t) {
var i = _toPrimitive(t, "string");
return "symbol" == _typeof(i) ? i : i + "";
}
function _toPrimitive(t, r) {
if ("object" != _typeof(t) || !t) return t;
var e = t[Symbol.toPrimitive];
if (void 0 !== e) {
var i = e.call(t, r || "default");
if ("object" != _typeof(i)) return i;
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return ("string" === r ? String : Number)(t);
}
var XHRHttpStack = exports.default = /*#__PURE__*/function () {
function XHRHttpStack() {
_classCallCheck(this, XHRHttpStack);
}
return _createClass(XHRHttpStack, [{
key: "createRequest",
value: function createRequest(method, url) {
return new Request(method, url);
}
}, {
key: "getName",
value: function getName() {
return 'XHRHttpStack';
}
}]);
}();
var Request = /*#__PURE__*/function () {
function Request(method, url) {
_classCallCheck(this, Request);
this._xhr = new XMLHttpRequest();
this._xhr.open(method, url, true);
this._method = method;
this._url = url;
this._headers = {};
}
return _createClass(Request, [{
key: "getMethod",
value: function getMethod() {
return this._method;
}
}, {
key: "getURL",
value: function getURL() {
return this._url;
}
}, {
key: "setHeader",
value: function setHeader(header, value) {
this._xhr.setRequestHeader(header, value);
this._headers[header] = value;
}
}, {
key: "getHeader",
value: function getHeader(header) {
return this._headers[header];
}
}, {
key: "setProgressHandler",
value: function setProgressHandler(progressHandler) {
// Test support for progress events before attaching an event listener
if (!('upload' in this._xhr)) {
return;
}
this._xhr.upload.onprogress = function (e) {
if (!e.lengthComputable) {
return;
}
progressHandler(e.loaded);
};
}
}, {
key: "send",
value: function send() {
var _this = this;
var body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
return new Promise(function (resolve, reject) {
_this._xhr.onload = function () {
resolve(new Response(_this._xhr));
};
_this._xhr.onerror = function (err) {
reject(err);
};
_this._xhr.send(body);
});
}
}, {
key: "abort",
value: function abort() {
this._xhr.abort();
return Promise.resolve();
}
}, {
key: "getUnderlyingObject",
value: function getUnderlyingObject() {
return this._xhr;
}
}]);
}();
var Response = /*#__PURE__*/function () {
function Response(xhr) {
_classCallCheck(this, Response);
this._xhr = xhr;
}
return _createClass(Response, [{
key: "getStatus",
value: function getStatus() {
return this._xhr.status;
}
}, {
key: "getHeader",
value: function getHeader(header) {
return this._xhr.getResponseHeader(header);
}
}, {
key: "getBody",
value: function getBody() {
return this._xhr.responseText;
}
}, {
key: "getUnderlyingObject",
value: function getUnderlyingObject() {
return this._xhr;
}
}]);
}();

View file

@ -0,0 +1,200 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "DefaultHttpStack", {
enumerable: true,
get: function () {
return _httpStack.default;
}
});
Object.defineProperty(exports, "DetailedError", {
enumerable: true,
get: function () {
return _error.default;
}
});
exports.Upload = void 0;
Object.defineProperty(exports, "canStoreURLs", {
enumerable: true,
get: function () {
return _urlStorage.canStoreURLs;
}
});
exports.defaultOptions = void 0;
Object.defineProperty(exports, "enableDebugLog", {
enumerable: true,
get: function () {
return _logger.enableDebugLog;
}
});
exports.isSupported = void 0;
var _error = _interopRequireDefault(require("../error.js"));
var _logger = require("../logger.js");
var _noopUrlStorage = _interopRequireDefault(require("../noopUrlStorage.js"));
var _upload = _interopRequireDefault(require("../upload.js"));
var _fileReader = _interopRequireDefault(require("./fileReader.js"));
var _fileSignature = _interopRequireDefault(require("./fileSignature.js"));
var _httpStack = _interopRequireDefault(require("./httpStack.js"));
var _urlStorage = require("./urlStorage.js");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _typeof(o) {
"@babel/helpers - typeof";
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
return typeof o;
} : function (o) {
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
}, _typeof(o);
}
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
Object.defineProperty(Constructor, "prototype", {
writable: false
});
return Constructor;
}
function _callSuper(t, o, e) {
return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e));
}
function _possibleConstructorReturn(self, call) {
if (call && (_typeof(call) === "object" || typeof call === "function")) {
return call;
} else if (call !== void 0) {
throw new TypeError("Derived constructors may only return object or undefined");
}
return _assertThisInitialized(self);
}
function _assertThisInitialized(self) {
if (self === void 0) {
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
}
return self;
}
function _isNativeReflectConstruct() {
try {
var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
} catch (t) {}
return (_isNativeReflectConstruct = function _isNativeReflectConstruct() {
return !!t;
})();
}
function _getPrototypeOf(o) {
_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {
return o.__proto__ || Object.getPrototypeOf(o);
};
return _getPrototypeOf(o);
}
function _inherits(subClass, superClass) {
if (typeof superClass !== "function" && superClass !== null) {
throw new TypeError("Super expression must either be null or a function");
}
subClass.prototype = Object.create(superClass && superClass.prototype, {
constructor: {
value: subClass,
writable: true,
configurable: true
}
});
Object.defineProperty(subClass, "prototype", {
writable: false
});
if (superClass) _setPrototypeOf(subClass, superClass);
}
function _setPrototypeOf(o, p) {
_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {
o.__proto__ = p;
return o;
};
return _setPrototypeOf(o, p);
}
function ownKeys(e, r) {
var t = Object.keys(e);
if (Object.getOwnPropertySymbols) {
var o = Object.getOwnPropertySymbols(e);
r && (o = o.filter(function (r) {
return Object.getOwnPropertyDescriptor(e, r).enumerable;
})), t.push.apply(t, o);
}
return t;
}
function _objectSpread(e) {
for (var r = 1; r < arguments.length; r++) {
var t = null != arguments[r] ? arguments[r] : {};
r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {
_defineProperty(e, r, t[r]);
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {
Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));
});
}
return e;
}
function _defineProperty(obj, key, value) {
key = _toPropertyKey(key);
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
function _toPropertyKey(t) {
var i = _toPrimitive(t, "string");
return "symbol" == _typeof(i) ? i : i + "";
}
function _toPrimitive(t, r) {
if ("object" != _typeof(t) || !t) return t;
var e = t[Symbol.toPrimitive];
if (void 0 !== e) {
var i = e.call(t, r || "default");
if ("object" != _typeof(i)) return i;
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return ("string" === r ? String : Number)(t);
}
var defaultOptions = exports.defaultOptions = _objectSpread(_objectSpread({}, _upload.default.defaultOptions), {}, {
httpStack: new _httpStack.default(),
fileReader: new _fileReader.default(),
urlStorage: _urlStorage.canStoreURLs ? new _urlStorage.WebStorageUrlStorage() : new _noopUrlStorage.default(),
fingerprint: _fileSignature.default
});
var Upload = exports.Upload = /*#__PURE__*/function (_BaseUpload) {
function Upload() {
var file = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
_classCallCheck(this, Upload);
options = _objectSpread(_objectSpread({}, defaultOptions), options);
return _callSuper(this, Upload, [file, options]);
}
_inherits(Upload, _BaseUpload);
return _createClass(Upload, null, [{
key: "terminate",
value: function terminate(url) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
options = _objectSpread(_objectSpread({}, defaultOptions), options);
return _upload.default.terminate(url, options);
}
}]);
}(_upload.default); // Note: We don't reference `window` here because these classes also exist in a Web Worker's context.
var isSupported = exports.isSupported = typeof XMLHttpRequest === 'function' && typeof Blob === 'function' && typeof Blob.prototype.slice === 'function';

View file

@ -0,0 +1,10 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var isReactNative = function isReactNative() {
return typeof navigator !== 'undefined' && typeof navigator.product === 'string' && navigator.product.toLowerCase() === 'reactnative';
};
var _default = exports.default = isReactNative;

View file

@ -0,0 +1,84 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _isCordova = _interopRequireDefault(require("./isCordova.js"));
var _readAsByteArray = _interopRequireDefault(require("./readAsByteArray.js"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _typeof(o) {
"@babel/helpers - typeof";
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
return typeof o;
} : function (o) {
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
}, _typeof(o);
}
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
Object.defineProperty(Constructor, "prototype", {
writable: false
});
return Constructor;
}
function _toPropertyKey(t) {
var i = _toPrimitive(t, "string");
return "symbol" == _typeof(i) ? i : i + "";
}
function _toPrimitive(t, r) {
if ("object" != _typeof(t) || !t) return t;
var e = t[Symbol.toPrimitive];
if (void 0 !== e) {
var i = e.call(t, r || "default");
if ("object" != _typeof(i)) return i;
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return ("string" === r ? String : Number)(t);
}
var FileSource = exports.default = /*#__PURE__*/function () {
// Make this.size a method
function FileSource(file) {
_classCallCheck(this, FileSource);
this._file = file;
this.size = file.size;
}
return _createClass(FileSource, [{
key: "slice",
value: function slice(start, end) {
// In Apache Cordova applications, a File must be resolved using
// FileReader instances, see
// https://cordova.apache.org/docs/en/8.x/reference/cordova-plugin-file/index.html#read-a-file
if ((0, _isCordova.default)()) {
return (0, _readAsByteArray.default)(this._file.slice(start, end));
}
var value = this._file.slice(start, end);
var done = end >= this.size;
return Promise.resolve({
value: value,
done: done
});
}
}, {
key: "close",
value: function close() {
// Nothing to do here since we don't need to release any resources.
}
}]);
}();

View file

@ -0,0 +1,150 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
function _typeof(o) {
"@babel/helpers - typeof";
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
return typeof o;
} : function (o) {
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
}, _typeof(o);
}
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
Object.defineProperty(Constructor, "prototype", {
writable: false
});
return Constructor;
}
function _toPropertyKey(t) {
var i = _toPrimitive(t, "string");
return "symbol" == _typeof(i) ? i : i + "";
}
function _toPrimitive(t, r) {
if ("object" != _typeof(t) || !t) return t;
var e = t[Symbol.toPrimitive];
if (void 0 !== e) {
var i = e.call(t, r || "default");
if ("object" != _typeof(i)) return i;
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return ("string" === r ? String : Number)(t);
}
function len(blobOrArray) {
if (blobOrArray === undefined) return 0;
if (blobOrArray.size !== undefined) return blobOrArray.size;
return blobOrArray.length;
}
/*
Typed arrays and blobs don't have a concat method.
This function helps StreamSource accumulate data to reach chunkSize.
*/
function concat(a, b) {
if (a.concat) {
// Is `a` an Array?
return a.concat(b);
}
if (a instanceof Blob) {
return new Blob([a, b], {
type: a.type
});
}
if (a.set) {
// Is `a` a typed array?
var c = new a.constructor(a.length + b.length);
c.set(a);
c.set(b, a.length);
return c;
}
throw new Error('Unknown data type');
}
var StreamSource = exports.default = /*#__PURE__*/function () {
function StreamSource(reader) {
_classCallCheck(this, StreamSource);
this._buffer = undefined;
this._bufferOffset = 0;
this._reader = reader;
this._done = false;
}
return _createClass(StreamSource, [{
key: "slice",
value: function slice(start, end) {
if (start < this._bufferOffset) {
return Promise.reject(new Error("Requested data is before the reader's current offset"));
}
return this._readUntilEnoughDataOrDone(start, end);
}
}, {
key: "_readUntilEnoughDataOrDone",
value: function _readUntilEnoughDataOrDone(start, end) {
var _this = this;
var hasEnoughData = end <= this._bufferOffset + len(this._buffer);
if (this._done || hasEnoughData) {
var value = this._getDataFromBuffer(start, end);
var done = value == null ? this._done : false;
return Promise.resolve({
value: value,
done: done
});
}
return this._reader.read().then(function (_ref) {
var value = _ref.value,
done = _ref.done;
if (done) {
_this._done = true;
} else if (_this._buffer === undefined) {
_this._buffer = value;
} else {
_this._buffer = concat(_this._buffer, value);
}
return _this._readUntilEnoughDataOrDone(start, end);
});
}
}, {
key: "_getDataFromBuffer",
value: function _getDataFromBuffer(start, end) {
// Remove data from buffer before `start`.
// Data might be reread from the buffer if an upload fails, so we can only
// safely delete data when it comes *before* what is currently being read.
if (start > this._bufferOffset) {
this._buffer = this._buffer.slice(start - this._bufferOffset);
this._bufferOffset = start;
}
// If the buffer is empty after removing old data, all data has been read.
var hasAllDataBeenRead = len(this._buffer) === 0;
if (this._done && hasAllDataBeenRead) {
return null;
}
// We already removed data before `start`, so we just return the first
// chunk from the buffer.
return this._buffer.slice(0, end - start);
}
}, {
key: "close",
value: function close() {
if (this._reader.cancel) {
this._reader.cancel();
}
}
}]);
}();

View file

@ -0,0 +1,10 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var isCordova = function isCordova() {
return typeof window !== 'undefined' && (typeof window.PhoneGap !== 'undefined' || typeof window.Cordova !== 'undefined' || typeof window.cordova !== 'undefined');
};
var _default = exports.default = isCordova;

View file

@ -0,0 +1,26 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = readAsByteArray;
/**
* readAsByteArray converts a File object to a Uint8Array.
* This function is only used on the Apache Cordova platform.
* See https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-file/index.html#read-a-file
*/
function readAsByteArray(chunk) {
return new Promise(function (resolve, reject) {
var reader = new FileReader();
reader.onload = function () {
var value = new Uint8Array(reader.result);
resolve({
value: value
});
};
reader.onerror = function (err) {
reject(err);
};
reader.readAsArrayBuffer(chunk);
});
}

View file

@ -0,0 +1,26 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = uriToBlob;
/**
* uriToBlob resolves a URI to a Blob object. This is used for
* React Native to retrieve a file (identified by a file://
* URI) as a blob.
*/
function uriToBlob(uri) {
return new Promise(function (resolve, reject) {
var xhr = new XMLHttpRequest();
xhr.responseType = 'blob';
xhr.onload = function () {
var blob = xhr.response;
resolve(blob);
};
xhr.onerror = function (err) {
reject(err);
};
xhr.open('GET', uri);
xhr.send();
});
}

View file

@ -0,0 +1,125 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.canStoreURLs = exports.WebStorageUrlStorage = void 0;
function _typeof(o) {
"@babel/helpers - typeof";
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
return typeof o;
} : function (o) {
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
}, _typeof(o);
}
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
Object.defineProperty(Constructor, "prototype", {
writable: false
});
return Constructor;
}
function _toPropertyKey(t) {
var i = _toPrimitive(t, "string");
return "symbol" == _typeof(i) ? i : i + "";
}
function _toPrimitive(t, r) {
if ("object" != _typeof(t) || !t) return t;
var e = t[Symbol.toPrimitive];
if (void 0 !== e) {
var i = e.call(t, r || "default");
if ("object" != _typeof(i)) return i;
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return ("string" === r ? String : Number)(t);
}
var hasStorage = false;
try {
// Note: localStorage does not exist in the Web Worker's context, so we must use window here.
hasStorage = 'localStorage' in window;
// Attempt to store and read entries from the local storage to detect Private
// Mode on Safari on iOS (see #49)
// If the key was not used before, we remove it from local storage again to
// not cause confusion where the entry came from.
var key = 'tusSupport';
var originalValue = localStorage.getItem(key);
localStorage.setItem(key, originalValue);
if (originalValue === null) localStorage.removeItem(key);
} catch (e) {
// If we try to access localStorage inside a sandboxed iframe, a SecurityError
// is thrown. When in private mode on iOS Safari, a QuotaExceededError is
// thrown (see #49)
if (e.code === e.SECURITY_ERR || e.code === e.QUOTA_EXCEEDED_ERR) {
hasStorage = false;
} else {
throw e;
}
}
var canStoreURLs = exports.canStoreURLs = hasStorage;
var WebStorageUrlStorage = exports.WebStorageUrlStorage = /*#__PURE__*/function () {
function WebStorageUrlStorage() {
_classCallCheck(this, WebStorageUrlStorage);
}
return _createClass(WebStorageUrlStorage, [{
key: "findAllUploads",
value: function findAllUploads() {
var results = this._findEntries('tus::');
return Promise.resolve(results);
}
}, {
key: "findUploadsByFingerprint",
value: function findUploadsByFingerprint(fingerprint) {
var results = this._findEntries("tus::".concat(fingerprint, "::"));
return Promise.resolve(results);
}
}, {
key: "removeUpload",
value: function removeUpload(urlStorageKey) {
localStorage.removeItem(urlStorageKey);
return Promise.resolve();
}
}, {
key: "addUpload",
value: function addUpload(fingerprint, upload) {
var id = Math.round(Math.random() * 1e12);
var key = "tus::".concat(fingerprint, "::").concat(id);
localStorage.setItem(key, JSON.stringify(upload));
return Promise.resolve(key);
}
}, {
key: "_findEntries",
value: function _findEntries(prefix) {
var results = [];
for (var i = 0; i < localStorage.length; i++) {
var _key = localStorage.key(i);
if (_key.indexOf(prefix) !== 0) continue;
try {
var upload = JSON.parse(localStorage.getItem(_key));
upload.urlStorageKey = _key;
results.push(upload);
} catch (_e) {
// The JSON parse error is intentionally ignored here, so a malformed
// entry in the storage cannot prevent an upload.
}
}
return results;
}
}]);
}();

174
frontend/node_modules/tus-js-client/lib.es5/error.js generated vendored Normal file
View file

@ -0,0 +1,174 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
function _typeof(o) {
"@babel/helpers - typeof";
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
return typeof o;
} : function (o) {
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
}, _typeof(o);
}
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
Object.defineProperty(Constructor, "prototype", {
writable: false
});
return Constructor;
}
function _toPropertyKey(t) {
var i = _toPrimitive(t, "string");
return "symbol" == _typeof(i) ? i : i + "";
}
function _toPrimitive(t, r) {
if ("object" != _typeof(t) || !t) return t;
var e = t[Symbol.toPrimitive];
if (void 0 !== e) {
var i = e.call(t, r || "default");
if ("object" != _typeof(i)) return i;
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return ("string" === r ? String : Number)(t);
}
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
function _callSuper(t, o, e) {
return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e));
}
function _possibleConstructorReturn(self, call) {
if (call && (_typeof(call) === "object" || typeof call === "function")) {
return call;
} else if (call !== void 0) {
throw new TypeError("Derived constructors may only return object or undefined");
}
return _assertThisInitialized(self);
}
function _assertThisInitialized(self) {
if (self === void 0) {
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
}
return self;
}
function _inherits(subClass, superClass) {
if (typeof superClass !== "function" && superClass !== null) {
throw new TypeError("Super expression must either be null or a function");
}
subClass.prototype = Object.create(superClass && superClass.prototype, {
constructor: {
value: subClass,
writable: true,
configurable: true
}
});
Object.defineProperty(subClass, "prototype", {
writable: false
});
if (superClass) _setPrototypeOf(subClass, superClass);
}
function _wrapNativeSuper(Class) {
var _cache = typeof Map === "function" ? new Map() : undefined;
_wrapNativeSuper = function _wrapNativeSuper(Class) {
if (Class === null || !_isNativeFunction(Class)) return Class;
if (typeof Class !== "function") {
throw new TypeError("Super expression must either be null or a function");
}
if (typeof _cache !== "undefined") {
if (_cache.has(Class)) return _cache.get(Class);
_cache.set(Class, Wrapper);
}
function Wrapper() {
return _construct(Class, arguments, _getPrototypeOf(this).constructor);
}
Wrapper.prototype = Object.create(Class.prototype, {
constructor: {
value: Wrapper,
enumerable: false,
writable: true,
configurable: true
}
});
return _setPrototypeOf(Wrapper, Class);
};
return _wrapNativeSuper(Class);
}
function _construct(t, e, r) {
if (_isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments);
var o = [null];
o.push.apply(o, e);
var p = new (t.bind.apply(t, o))();
return r && _setPrototypeOf(p, r.prototype), p;
}
function _isNativeReflectConstruct() {
try {
var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
} catch (t) {}
return (_isNativeReflectConstruct = function _isNativeReflectConstruct() {
return !!t;
})();
}
function _isNativeFunction(fn) {
try {
return Function.toString.call(fn).indexOf("[native code]") !== -1;
} catch (e) {
return typeof fn === "function";
}
}
function _setPrototypeOf(o, p) {
_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {
o.__proto__ = p;
return o;
};
return _setPrototypeOf(o, p);
}
function _getPrototypeOf(o) {
_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {
return o.__proto__ || Object.getPrototypeOf(o);
};
return _getPrototypeOf(o);
}
var DetailedError = /*#__PURE__*/function (_Error) {
function DetailedError(message) {
var _this;
var causingErr = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
var req = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
var res = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
_classCallCheck(this, DetailedError);
_this = _callSuper(this, DetailedError, [message]);
_this.originalRequest = req;
_this.originalResponse = res;
_this.causingError = causingErr;
if (causingErr != null) {
message += ", caused by ".concat(causingErr.toString());
}
if (req != null) {
var requestId = req.getHeader('X-Request-ID') || 'n/a';
var method = req.getMethod();
var url = req.getURL();
var status = res ? res.getStatus() : 'n/a';
var body = res ? res.getBody() || '' : 'n/a';
message += ", originated from request (method: ".concat(method, ", url: ").concat(url, ", response code: ").concat(status, ", response text: ").concat(body, ", request id: ").concat(requestId, ")");
}
_this.message = message;
return _this;
}
_inherits(DetailedError, _Error);
return _createClass(DetailedError);
}( /*#__PURE__*/_wrapNativeSuper(Error));
var _default = exports.default = DetailedError;

15
frontend/node_modules/tus-js-client/lib.es5/logger.js generated vendored Normal file
View file

@ -0,0 +1,15 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.enableDebugLog = enableDebugLog;
exports.log = log;
var isEnabled = false;
function enableDebugLog() {
isEnabled = true;
}
function log(msg) {
if (!isEnabled) return;
console.log(msg);
}

View file

@ -0,0 +1,81 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _fs = require("fs");
var _isStream = _interopRequireDefault(require("is-stream"));
var _BufferSource = _interopRequireDefault(require("./sources/BufferSource.js"));
var _FileSource = _interopRequireDefault(require("./sources/FileSource.js"));
var _StreamSource = _interopRequireDefault(require("./sources/StreamSource.js"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _typeof(o) {
"@babel/helpers - typeof";
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
return typeof o;
} : function (o) {
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
}, _typeof(o);
}
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
Object.defineProperty(Constructor, "prototype", {
writable: false
});
return Constructor;
}
function _toPropertyKey(t) {
var i = _toPrimitive(t, "string");
return "symbol" == _typeof(i) ? i : i + "";
}
function _toPrimitive(t, r) {
if ("object" != _typeof(t) || !t) return t;
var e = t[Symbol.toPrimitive];
if (void 0 !== e) {
var i = e.call(t, r || "default");
if ("object" != _typeof(i)) return i;
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return ("string" === r ? String : Number)(t);
}
var FileReader = exports.default = /*#__PURE__*/function () {
function FileReader() {
_classCallCheck(this, FileReader);
}
return _createClass(FileReader, [{
key: "openFile",
value: function openFile(input, chunkSize) {
if (Buffer.isBuffer(input)) {
return Promise.resolve(new _BufferSource.default(input));
}
if (input instanceof _fs.ReadStream && input.path != null) {
return (0, _FileSource.default)(input);
}
if (_isStream.default.readable(input)) {
chunkSize = Number(chunkSize);
if (!Number.isFinite(chunkSize)) {
return Promise.reject(new Error('cannot create source for stream without a finite value for the `chunkSize` option; specify a chunkSize to control the memory consumption'));
}
return Promise.resolve(new _StreamSource.default(input));
}
return Promise.reject(new Error('source object may only be an instance of Buffer or Readable in this environment'));
}
}]);
}();

View file

@ -0,0 +1,43 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = fingerprint;
var _crypto = require("crypto");
var fs = _interopRequireWildcard(require("fs"));
var path = _interopRequireWildcard(require("path"));
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
/**
* Generate a fingerprint for a file which will be used the store the endpoint
*
* @param {File} file
* @param {Object} options
*/
function fingerprint(file, options) {
if (Buffer.isBuffer(file)) {
// create MD5 hash for buffer type
var blockSize = 64 * 1024; // 64kb
var content = file.slice(0, Math.min(blockSize, file.length));
var hash = (0, _crypto.createHash)('md5').update(content).digest('hex');
var ret = ['node-buffer', hash, file.length, options.endpoint].join('-');
return Promise.resolve(ret);
}
if (file instanceof fs.ReadStream && file.path != null) {
return new Promise(function (resolve, reject) {
var name = path.resolve(file.path);
fs.stat(file.path, function (err, info) {
if (err) {
reject(err);
return;
}
var ret = ['node-file', name, info.size, info.mtime.getTime(), options.endpoint].join('-');
resolve(ret);
});
});
}
// fingerprint cannot be computed for file input type
return Promise.resolve(null);
}

View file

@ -0,0 +1,364 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var http = _interopRequireWildcard(require("http"));
var https = _interopRequireWildcard(require("https"));
var _stream = require("stream");
var _url = require("url");
var _lodash = _interopRequireDefault(require("lodash.throttle"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
function _callSuper(t, o, e) {
return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e));
}
function _possibleConstructorReturn(self, call) {
if (call && (_typeof(call) === "object" || typeof call === "function")) {
return call;
} else if (call !== void 0) {
throw new TypeError("Derived constructors may only return object or undefined");
}
return _assertThisInitialized(self);
}
function _assertThisInitialized(self) {
if (self === void 0) {
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
}
return self;
}
function _isNativeReflectConstruct() {
try {
var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
} catch (t) {}
return (_isNativeReflectConstruct = function _isNativeReflectConstruct() {
return !!t;
})();
}
function _getPrototypeOf(o) {
_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {
return o.__proto__ || Object.getPrototypeOf(o);
};
return _getPrototypeOf(o);
}
function _inherits(subClass, superClass) {
if (typeof superClass !== "function" && superClass !== null) {
throw new TypeError("Super expression must either be null or a function");
}
subClass.prototype = Object.create(superClass && superClass.prototype, {
constructor: {
value: subClass,
writable: true,
configurable: true
}
});
Object.defineProperty(subClass, "prototype", {
writable: false
});
if (superClass) _setPrototypeOf(subClass, superClass);
}
function _setPrototypeOf(o, p) {
_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {
o.__proto__ = p;
return o;
};
return _setPrototypeOf(o, p);
}
function ownKeys(e, r) {
var t = Object.keys(e);
if (Object.getOwnPropertySymbols) {
var o = Object.getOwnPropertySymbols(e);
r && (o = o.filter(function (r) {
return Object.getOwnPropertyDescriptor(e, r).enumerable;
})), t.push.apply(t, o);
}
return t;
}
function _objectSpread(e) {
for (var r = 1; r < arguments.length; r++) {
var t = null != arguments[r] ? arguments[r] : {};
r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {
_defineProperty(e, r, t[r]);
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {
Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));
});
}
return e;
}
function _defineProperty(obj, key, value) {
key = _toPropertyKey(key);
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
function _typeof(o) {
"@babel/helpers - typeof";
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
return typeof o;
} : function (o) {
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
}, _typeof(o);
}
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
Object.defineProperty(Constructor, "prototype", {
writable: false
});
return Constructor;
}
function _toPropertyKey(t) {
var i = _toPrimitive(t, "string");
return "symbol" == _typeof(i) ? i : i + "";
}
function _toPrimitive(t, r) {
if ("object" != _typeof(t) || !t) return t;
var e = t[Symbol.toPrimitive];
if (void 0 !== e) {
var i = e.call(t, r || "default");
if ("object" != _typeof(i)) return i;
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return ("string" === r ? String : Number)(t);
}
// The url.parse method is superseeded by the url.URL constructor,
// but it is still included in Node.js
var NodeHttpStack = exports.default = /*#__PURE__*/function () {
function NodeHttpStack() {
var requestOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
_classCallCheck(this, NodeHttpStack);
this._requestOptions = requestOptions;
}
return _createClass(NodeHttpStack, [{
key: "createRequest",
value: function createRequest(method, url) {
return new Request(method, url, this._requestOptions);
}
}, {
key: "getName",
value: function getName() {
return 'NodeHttpStack';
}
}]);
}();
var Request = /*#__PURE__*/function () {
function Request(method, url, options) {
_classCallCheck(this, Request);
this._method = method;
this._url = url;
this._headers = {};
this._request = null;
this._progressHandler = function () {};
this._requestOptions = options || {};
}
return _createClass(Request, [{
key: "getMethod",
value: function getMethod() {
return this._method;
}
}, {
key: "getURL",
value: function getURL() {
return this._url;
}
}, {
key: "setHeader",
value: function setHeader(header, value) {
this._headers[header] = value;
}
}, {
key: "getHeader",
value: function getHeader(header) {
return this._headers[header];
}
}, {
key: "setProgressHandler",
value: function setProgressHandler(progressHandler) {
this._progressHandler = progressHandler;
}
}, {
key: "send",
value: function send() {
var _this = this;
var body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
return new Promise(function (resolve, reject) {
var options = _objectSpread(_objectSpread(_objectSpread({}, (0, _url.parse)(_this._url)), _this._requestOptions), {}, {
method: _this._method,
headers: _objectSpread(_objectSpread({}, _this._requestOptions.headers || {}), _this._headers)
});
if (body !== null && body !== void 0 && body.size) {
options.headers['Content-Length'] = body.size;
}
var httpModule = options.protocol === 'https:' ? https : http;
_this._request = httpModule.request(options);
var req = _this._request;
req.on('response', function (res) {
var resChunks = [];
res.on('data', function (data) {
resChunks.push(data);
});
res.on('end', function () {
var responseText = Buffer.concat(resChunks).toString('utf8');
resolve(new Response(res, responseText));
});
});
req.on('error', function (err) {
reject(err);
});
if (body instanceof _stream.Readable) {
// Readable stream are piped through a PassThrough instance, which
// counts the number of bytes passed through. This is used, for example,
// when an fs.ReadStream is provided to tus-js-client.
body.pipe(new ProgressEmitter(_this._progressHandler)).pipe(req);
} else if (body instanceof Uint8Array) {
// For Buffers and Uint8Arrays (in Node.js all buffers are instances of Uint8Array),
// we write chunks of the buffer to the stream and use that to track the progress.
// This is used when either a Buffer or a normal readable stream is provided
// to tus-js-client.
writeBufferToStreamWithProgress(req, body, _this._progressHandler);
} else {
req.end(body);
}
});
}
}, {
key: "abort",
value: function abort() {
if (this._request !== null) this._request.abort();
return Promise.resolve();
}
}, {
key: "getUnderlyingObject",
value: function getUnderlyingObject() {
return this._request;
}
}]);
}();
var Response = /*#__PURE__*/function () {
function Response(res, body) {
_classCallCheck(this, Response);
this._response = res;
this._body = body;
}
return _createClass(Response, [{
key: "getStatus",
value: function getStatus() {
return this._response.statusCode;
}
}, {
key: "getHeader",
value: function getHeader(header) {
return this._response.headers[header.toLowerCase()];
}
}, {
key: "getBody",
value: function getBody() {
return this._body;
}
}, {
key: "getUnderlyingObject",
value: function getUnderlyingObject() {
return this._response;
}
}]);
}(); // ProgressEmitter is a simple PassThrough-style transform stream which keeps
// track of the number of bytes which have been piped through it and will
// invoke the `onprogress` function whenever new number are available.
var ProgressEmitter = /*#__PURE__*/function (_Transform) {
function ProgressEmitter(onprogress) {
var _this2;
_classCallCheck(this, ProgressEmitter);
_this2 = _callSuper(this, ProgressEmitter);
// The _onprogress property will be invoked, whenever a chunk is piped
// through this transformer. Since chunks are usually quite small (64kb),
// these calls can occur frequently, especially when you have a good
// connection to the remote server. Therefore, we are throtteling them to
// prevent accessive function calls.
_this2._onprogress = (0, _lodash.default)(onprogress, 100, {
leading: true,
trailing: false
});
_this2._position = 0;
return _this2;
}
_inherits(ProgressEmitter, _Transform);
return _createClass(ProgressEmitter, [{
key: "_transform",
value: function _transform(chunk, _encoding, callback) {
this._position += chunk.length;
this._onprogress(this._position);
callback(null, chunk);
}
}]);
}(_stream.Transform); // writeBufferToStreamWithProgress writes chunks from `source` (either a
// Buffer or Uint8Array) to the readable stream `stream`.
// The size of the chunk depends on the stream's highWaterMark to fill the
// stream's internal buffer as best as possible.
// If the internal buffer is full, the callback `onprogress` will be invoked
// to notify about the write progress. Writing will be resumed once the internal
// buffer is empty, as indicated by the emitted `drain` event.
// See https://nodejs.org/docs/latest/api/stream.html#buffering for more details
// on the buffering behavior of streams.
var writeBufferToStreamWithProgress = function writeBufferToStreamWithProgress(stream, source, onprogress) {
onprogress = (0, _lodash.default)(onprogress, 100, {
leading: true,
trailing: false
});
var offset = 0;
function writeNextChunk() {
// Take at most the amount of bytes from highWaterMark. This should fill the streams
// internal buffer already.
var chunkSize = Math.min(stream.writableHighWaterMark, source.length - offset);
// Note: We use subarray instead of slice because it works without copying data for
// Buffers and Uint8Arrays.
var chunk = source.subarray(offset, offset + chunkSize);
offset += chunk.length;
// `write` returns true if the internal buffer is not full and we should write more.
// If the stream is destroyed because the request is aborted, it will return false
// and no 'drain' event is emitted, so won't continue writing data.
var canContinue = stream.write(chunk);
if (!canContinue) {
// If the buffer is full, wait for the 'drain' event to write more data.
stream.once('drain', writeNextChunk);
onprogress(offset);
} else if (offset < source.length) {
// If there's still data to write and the buffer is not full, write next chunk.
writeNextChunk();
} else {
// If all data has been written, close the stream if needed, and emit a 'finish' event.
stream.end();
}
}
// Start writing the first chunk.
writeNextChunk();
};

View file

@ -0,0 +1,214 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "DefaultHttpStack", {
enumerable: true,
get: function () {
return _httpStack.default;
}
});
Object.defineProperty(exports, "DetailedError", {
enumerable: true,
get: function () {
return _error.default;
}
});
Object.defineProperty(exports, "FileUrlStorage", {
enumerable: true,
get: function () {
return _urlStorage.FileUrlStorage;
}
});
Object.defineProperty(exports, "StreamSource", {
enumerable: true,
get: function () {
return _StreamSource.default;
}
});
exports.Upload = void 0;
Object.defineProperty(exports, "canStoreURLs", {
enumerable: true,
get: function () {
return _urlStorage.canStoreURLs;
}
});
exports.defaultOptions = void 0;
Object.defineProperty(exports, "enableDebugLog", {
enumerable: true,
get: function () {
return _logger.enableDebugLog;
}
});
exports.isSupported = void 0;
var _error = _interopRequireDefault(require("../error.js"));
var _logger = require("../logger.js");
var _noopUrlStorage = _interopRequireDefault(require("../noopUrlStorage.js"));
var _upload = _interopRequireDefault(require("../upload.js"));
var _fileReader = _interopRequireDefault(require("./fileReader.js"));
var _fileSignature = _interopRequireDefault(require("./fileSignature.js"));
var _httpStack = _interopRequireDefault(require("./httpStack.js"));
var _StreamSource = _interopRequireDefault(require("./sources/StreamSource.js"));
var _urlStorage = require("./urlStorage.js");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _typeof(o) {
"@babel/helpers - typeof";
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
return typeof o;
} : function (o) {
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
}, _typeof(o);
}
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
Object.defineProperty(Constructor, "prototype", {
writable: false
});
return Constructor;
}
function _callSuper(t, o, e) {
return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e));
}
function _possibleConstructorReturn(self, call) {
if (call && (_typeof(call) === "object" || typeof call === "function")) {
return call;
} else if (call !== void 0) {
throw new TypeError("Derived constructors may only return object or undefined");
}
return _assertThisInitialized(self);
}
function _assertThisInitialized(self) {
if (self === void 0) {
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
}
return self;
}
function _isNativeReflectConstruct() {
try {
var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
} catch (t) {}
return (_isNativeReflectConstruct = function _isNativeReflectConstruct() {
return !!t;
})();
}
function _getPrototypeOf(o) {
_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {
return o.__proto__ || Object.getPrototypeOf(o);
};
return _getPrototypeOf(o);
}
function _inherits(subClass, superClass) {
if (typeof superClass !== "function" && superClass !== null) {
throw new TypeError("Super expression must either be null or a function");
}
subClass.prototype = Object.create(superClass && superClass.prototype, {
constructor: {
value: subClass,
writable: true,
configurable: true
}
});
Object.defineProperty(subClass, "prototype", {
writable: false
});
if (superClass) _setPrototypeOf(subClass, superClass);
}
function _setPrototypeOf(o, p) {
_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {
o.__proto__ = p;
return o;
};
return _setPrototypeOf(o, p);
}
function ownKeys(e, r) {
var t = Object.keys(e);
if (Object.getOwnPropertySymbols) {
var o = Object.getOwnPropertySymbols(e);
r && (o = o.filter(function (r) {
return Object.getOwnPropertyDescriptor(e, r).enumerable;
})), t.push.apply(t, o);
}
return t;
}
function _objectSpread(e) {
for (var r = 1; r < arguments.length; r++) {
var t = null != arguments[r] ? arguments[r] : {};
r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {
_defineProperty(e, r, t[r]);
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {
Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));
});
}
return e;
}
function _defineProperty(obj, key, value) {
key = _toPropertyKey(key);
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
function _toPropertyKey(t) {
var i = _toPrimitive(t, "string");
return "symbol" == _typeof(i) ? i : i + "";
}
function _toPrimitive(t, r) {
if ("object" != _typeof(t) || !t) return t;
var e = t[Symbol.toPrimitive];
if (void 0 !== e) {
var i = e.call(t, r || "default");
if ("object" != _typeof(i)) return i;
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return ("string" === r ? String : Number)(t);
}
var defaultOptions = exports.defaultOptions = _objectSpread(_objectSpread({}, _upload.default.defaultOptions), {}, {
httpStack: new _httpStack.default(),
fileReader: new _fileReader.default(),
urlStorage: new _noopUrlStorage.default(),
fingerprint: _fileSignature.default
});
var Upload = exports.Upload = /*#__PURE__*/function (_BaseUpload) {
function Upload() {
var file = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
_classCallCheck(this, Upload);
options = _objectSpread(_objectSpread({}, defaultOptions), options);
return _callSuper(this, Upload, [file, options]);
}
_inherits(Upload, _BaseUpload);
return _createClass(Upload, null, [{
key: "terminate",
value: function terminate(url) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
options = _objectSpread(_objectSpread({}, defaultOptions), options);
return _upload.default.terminate(url, options);
}
}]);
}(_upload.default); // The Node.js environment does not have restrictions which may cause
// tus-js-client not to function.
var isSupported = exports.isSupported = true;

View file

@ -0,0 +1,73 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
function _typeof(o) {
"@babel/helpers - typeof";
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
return typeof o;
} : function (o) {
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
}, _typeof(o);
}
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
Object.defineProperty(Constructor, "prototype", {
writable: false
});
return Constructor;
}
function _toPropertyKey(t) {
var i = _toPrimitive(t, "string");
return "symbol" == _typeof(i) ? i : i + "";
}
function _toPrimitive(t, r) {
if ("object" != _typeof(t) || !t) return t;
var e = t[Symbol.toPrimitive];
if (void 0 !== e) {
var i = e.call(t, r || "default");
if ("object" != _typeof(i)) return i;
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return ("string" === r ? String : Number)(t);
}
var BufferSource = exports.default = /*#__PURE__*/function () {
function BufferSource(buffer) {
_classCallCheck(this, BufferSource);
this._buffer = buffer;
this.size = buffer.length;
}
return _createClass(BufferSource, [{
key: "slice",
value: function slice(start, end) {
var value = this._buffer.slice(start, end);
value.size = value.length;
var done = end >= this.size;
return Promise.resolve({
value: value,
done: done
});
}
}, {
key: "close",
value: function close() {}
}]);
}();

View file

@ -0,0 +1,465 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = getFileSource;
var _fs = require("fs");
function _typeof(o) {
"@babel/helpers - typeof";
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
return typeof o;
} : function (o) {
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
}, _typeof(o);
}
function _regeneratorRuntime() {
"use strict";
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */
_regeneratorRuntime = function _regeneratorRuntime() {
return e;
};
var t,
e = {},
r = Object.prototype,
n = r.hasOwnProperty,
o = Object.defineProperty || function (t, e, r) {
t[e] = r.value;
},
i = "function" == typeof Symbol ? Symbol : {},
a = i.iterator || "@@iterator",
c = i.asyncIterator || "@@asyncIterator",
u = i.toStringTag || "@@toStringTag";
function define(t, e, r) {
return Object.defineProperty(t, e, {
value: r,
enumerable: !0,
configurable: !0,
writable: !0
}), t[e];
}
try {
define({}, "");
} catch (t) {
define = function define(t, e, r) {
return t[e] = r;
};
}
function wrap(t, e, r, n) {
var i = e && e.prototype instanceof Generator ? e : Generator,
a = Object.create(i.prototype),
c = new Context(n || []);
return o(a, "_invoke", {
value: makeInvokeMethod(t, r, c)
}), a;
}
function tryCatch(t, e, r) {
try {
return {
type: "normal",
arg: t.call(e, r)
};
} catch (t) {
return {
type: "throw",
arg: t
};
}
}
e.wrap = wrap;
var h = "suspendedStart",
l = "suspendedYield",
f = "executing",
s = "completed",
y = {};
function Generator() {}
function GeneratorFunction() {}
function GeneratorFunctionPrototype() {}
var p = {};
define(p, a, function () {
return this;
});
var d = Object.getPrototypeOf,
v = d && d(d(values([])));
v && v !== r && n.call(v, a) && (p = v);
var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p);
function defineIteratorMethods(t) {
["next", "throw", "return"].forEach(function (e) {
define(t, e, function (t) {
return this._invoke(e, t);
});
});
}
function AsyncIterator(t, e) {
function invoke(r, o, i, a) {
var c = tryCatch(t[r], t, o);
if ("throw" !== c.type) {
var u = c.arg,
h = u.value;
return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) {
invoke("next", t, i, a);
}, function (t) {
invoke("throw", t, i, a);
}) : e.resolve(h).then(function (t) {
u.value = t, i(u);
}, function (t) {
return invoke("throw", t, i, a);
});
}
a(c.arg);
}
var r;
o(this, "_invoke", {
value: function value(t, n) {
function callInvokeWithMethodAndArg() {
return new e(function (e, r) {
invoke(t, n, e, r);
});
}
return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();
}
});
}
function makeInvokeMethod(e, r, n) {
var o = h;
return function (i, a) {
if (o === f) throw Error("Generator is already running");
if (o === s) {
if ("throw" === i) throw a;
return {
value: t,
done: !0
};
}
for (n.method = i, n.arg = a;;) {
var c = n.delegate;
if (c) {
var u = maybeInvokeDelegate(c, n);
if (u) {
if (u === y) continue;
return u;
}
}
if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) {
if (o === h) throw o = s, n.arg;
n.dispatchException(n.arg);
} else "return" === n.method && n.abrupt("return", n.arg);
o = f;
var p = tryCatch(e, r, n);
if ("normal" === p.type) {
if (o = n.done ? s : l, p.arg === y) continue;
return {
value: p.arg,
done: n.done
};
}
"throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg);
}
};
}
function maybeInvokeDelegate(e, r) {
var n = r.method,
o = e.iterator[n];
if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y;
var i = tryCatch(o, e.iterator, r.arg);
if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y;
var a = i.arg;
return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y);
}
function pushTryEntry(t) {
var e = {
tryLoc: t[0]
};
1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e);
}
function resetTryEntry(t) {
var e = t.completion || {};
e.type = "normal", delete e.arg, t.completion = e;
}
function Context(t) {
this.tryEntries = [{
tryLoc: "root"
}], t.forEach(pushTryEntry, this), this.reset(!0);
}
function values(e) {
if (e || "" === e) {
var r = e[a];
if (r) return r.call(e);
if ("function" == typeof e.next) return e;
if (!isNaN(e.length)) {
var o = -1,
i = function next() {
for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next;
return next.value = t, next.done = !0, next;
};
return i.next = i;
}
}
throw new TypeError(_typeof(e) + " is not iterable");
}
return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", {
value: GeneratorFunctionPrototype,
configurable: !0
}), o(GeneratorFunctionPrototype, "constructor", {
value: GeneratorFunction,
configurable: !0
}), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) {
var e = "function" == typeof t && t.constructor;
return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name));
}, e.mark = function (t) {
return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t;
}, e.awrap = function (t) {
return {
__await: t
};
}, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () {
return this;
}), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) {
void 0 === i && (i = Promise);
var a = new AsyncIterator(wrap(t, r, n, o), i);
return e.isGeneratorFunction(r) ? a : a.next().then(function (t) {
return t.done ? t.value : a.next();
});
}, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () {
return this;
}), define(g, "toString", function () {
return "[object Generator]";
}), e.keys = function (t) {
var e = Object(t),
r = [];
for (var n in e) r.push(n);
return r.reverse(), function next() {
for (; r.length;) {
var t = r.pop();
if (t in e) return next.value = t, next.done = !1, next;
}
return next.done = !0, next;
};
}, e.values = values, Context.prototype = {
constructor: Context,
reset: function reset(e) {
if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t);
},
stop: function stop() {
this.done = !0;
var t = this.tryEntries[0].completion;
if ("throw" === t.type) throw t.arg;
return this.rval;
},
dispatchException: function dispatchException(e) {
if (this.done) throw e;
var r = this;
function handle(n, o) {
return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o;
}
for (var o = this.tryEntries.length - 1; o >= 0; --o) {
var i = this.tryEntries[o],
a = i.completion;
if ("root" === i.tryLoc) return handle("end");
if (i.tryLoc <= this.prev) {
var c = n.call(i, "catchLoc"),
u = n.call(i, "finallyLoc");
if (c && u) {
if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);
if (this.prev < i.finallyLoc) return handle(i.finallyLoc);
} else if (c) {
if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);
} else {
if (!u) throw Error("try statement without catch or finally");
if (this.prev < i.finallyLoc) return handle(i.finallyLoc);
}
}
}
},
abrupt: function abrupt(t, e) {
for (var r = this.tryEntries.length - 1; r >= 0; --r) {
var o = this.tryEntries[r];
if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) {
var i = o;
break;
}
}
i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null);
var a = i ? i.completion : {};
return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a);
},
complete: function complete(t, e) {
if ("throw" === t.type) throw t.arg;
return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y;
},
finish: function finish(t) {
for (var e = this.tryEntries.length - 1; e >= 0; --e) {
var r = this.tryEntries[e];
if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y;
}
},
"catch": function _catch(t) {
for (var e = this.tryEntries.length - 1; e >= 0; --e) {
var r = this.tryEntries[e];
if (r.tryLoc === t) {
var n = r.completion;
if ("throw" === n.type) {
var o = n.arg;
resetTryEntry(r);
}
return o;
}
}
throw Error("illegal catch attempt");
},
delegateYield: function delegateYield(e, r, n) {
return this.delegate = {
iterator: values(e),
resultName: r,
nextLoc: n
}, "next" === this.method && (this.arg = t), y;
}
}, e;
}
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
Object.defineProperty(Constructor, "prototype", {
writable: false
});
return Constructor;
}
function _toPropertyKey(t) {
var i = _toPrimitive(t, "string");
return "symbol" == _typeof(i) ? i : i + "";
}
function _toPrimitive(t, r) {
if ("object" != _typeof(t) || !t) return t;
var e = t[Symbol.toPrimitive];
if (void 0 !== e) {
var i = e.call(t, r || "default");
if ("object" != _typeof(i)) return i;
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return ("string" === r ? String : Number)(t);
}
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
try {
var info = gen[key](arg);
var value = info.value;
} catch (error) {
reject(error);
return;
}
if (info.done) {
resolve(value);
} else {
Promise.resolve(value).then(_next, _throw);
}
}
function _asyncToGenerator(fn) {
return function () {
var self = this,
args = arguments;
return new Promise(function (resolve, reject) {
var gen = fn.apply(self, args);
function _next(value) {
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
}
function _throw(err) {
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
}
_next(undefined);
});
};
}
function getFileSource(_x) {
return _getFileSource.apply(this, arguments);
}
function _getFileSource() {
_getFileSource = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(stream) {
var _stream$start;
var path, _yield$fsPromises$sta, size, start, end, actualSize;
return _regeneratorRuntime().wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
path = stream.path.toString();
_context.next = 3;
return _fs.promises.stat(path);
case 3:
_yield$fsPromises$sta = _context.sent;
size = _yield$fsPromises$sta.size;
// The fs.ReadStream might be configured to not read from the beginning
// to the end, but instead from a slice in between. In this case, we consider
// that range to indicate the actual uploadable size.
// This happens, for example, if a fs.ReadStream is used with the `parallelUploads`
// option. There, the ReadStream is sliced into multiple ReadStreams to fit the number
// of number of `parallelUploads`. Each ReadStream has `start` and `end` set.
// Note: `stream.end` is Infinity by default, so we need the check `isFinite`.
// Note: `stream.end` is treated inclusively, so we need to add 1 here.
// See the comment in slice() for more context.
start = (_stream$start = stream.start) !== null && _stream$start !== void 0 ? _stream$start : 0;
end = Number.isFinite(stream.end) ? stream.end + 1 : size;
actualSize = end - start;
return _context.abrupt("return", new FileSource(stream, path, actualSize));
case 9:
case "end":
return _context.stop();
}
}, _callee);
}));
return _getFileSource.apply(this, arguments);
}
var FileSource = /*#__PURE__*/function () {
function FileSource(stream, path, size) {
_classCallCheck(this, FileSource);
this._stream = stream;
this._path = path;
this.size = size;
}
return _createClass(FileSource, [{
key: "slice",
value: function slice(start, end) {
var _this$_stream$start;
// The fs.ReadStream might be configured to not read from the beginning,
// but instead start at a different offset. The start value from the caller
// does not include the offset, so we need to add this offset to our range later.
// This happens, for example, if a fs.ReadStream is used with the `parallelUploads`
// option. First, the ReadStream is sliced into multiple ReadStreams to fit the number
// of number of `parallelUploads`. Each ReadStream has `start` set.
var offset = (_this$_stream$start = this._stream.start) !== null && _this$_stream$start !== void 0 ? _this$_stream$start : 0;
var stream = (0, _fs.createReadStream)(this._path, {
start: offset + start,
// The `end` option for createReadStream is treated inclusively
// (see https://nodejs.org/api/fs.html#fs_fs_createreadstream_path_options).
// However, the Buffer#slice(start, end) and also our Source#slice(start, end)
// method treat the end range exclusively, so we have to subtract 1.
// This prevents an off-by-one error when reporting upload progress.
end: offset + end - 1,
autoClose: true
});
stream.size = Math.min(end - start, this.size);
var done = stream.size >= this.size;
return Promise.resolve({
value: stream,
done: done
});
}
}, {
key: "close",
value: function close() {
this._stream.destroy();
}
}]);
}();

View file

@ -0,0 +1,546 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
function _typeof(o) {
"@babel/helpers - typeof";
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
return typeof o;
} : function (o) {
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
}, _typeof(o);
}
function _regeneratorRuntime() {
"use strict";
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */
_regeneratorRuntime = function _regeneratorRuntime() {
return e;
};
var t,
e = {},
r = Object.prototype,
n = r.hasOwnProperty,
o = Object.defineProperty || function (t, e, r) {
t[e] = r.value;
},
i = "function" == typeof Symbol ? Symbol : {},
a = i.iterator || "@@iterator",
c = i.asyncIterator || "@@asyncIterator",
u = i.toStringTag || "@@toStringTag";
function define(t, e, r) {
return Object.defineProperty(t, e, {
value: r,
enumerable: !0,
configurable: !0,
writable: !0
}), t[e];
}
try {
define({}, "");
} catch (t) {
define = function define(t, e, r) {
return t[e] = r;
};
}
function wrap(t, e, r, n) {
var i = e && e.prototype instanceof Generator ? e : Generator,
a = Object.create(i.prototype),
c = new Context(n || []);
return o(a, "_invoke", {
value: makeInvokeMethod(t, r, c)
}), a;
}
function tryCatch(t, e, r) {
try {
return {
type: "normal",
arg: t.call(e, r)
};
} catch (t) {
return {
type: "throw",
arg: t
};
}
}
e.wrap = wrap;
var h = "suspendedStart",
l = "suspendedYield",
f = "executing",
s = "completed",
y = {};
function Generator() {}
function GeneratorFunction() {}
function GeneratorFunctionPrototype() {}
var p = {};
define(p, a, function () {
return this;
});
var d = Object.getPrototypeOf,
v = d && d(d(values([])));
v && v !== r && n.call(v, a) && (p = v);
var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p);
function defineIteratorMethods(t) {
["next", "throw", "return"].forEach(function (e) {
define(t, e, function (t) {
return this._invoke(e, t);
});
});
}
function AsyncIterator(t, e) {
function invoke(r, o, i, a) {
var c = tryCatch(t[r], t, o);
if ("throw" !== c.type) {
var u = c.arg,
h = u.value;
return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) {
invoke("next", t, i, a);
}, function (t) {
invoke("throw", t, i, a);
}) : e.resolve(h).then(function (t) {
u.value = t, i(u);
}, function (t) {
return invoke("throw", t, i, a);
});
}
a(c.arg);
}
var r;
o(this, "_invoke", {
value: function value(t, n) {
function callInvokeWithMethodAndArg() {
return new e(function (e, r) {
invoke(t, n, e, r);
});
}
return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();
}
});
}
function makeInvokeMethod(e, r, n) {
var o = h;
return function (i, a) {
if (o === f) throw Error("Generator is already running");
if (o === s) {
if ("throw" === i) throw a;
return {
value: t,
done: !0
};
}
for (n.method = i, n.arg = a;;) {
var c = n.delegate;
if (c) {
var u = maybeInvokeDelegate(c, n);
if (u) {
if (u === y) continue;
return u;
}
}
if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) {
if (o === h) throw o = s, n.arg;
n.dispatchException(n.arg);
} else "return" === n.method && n.abrupt("return", n.arg);
o = f;
var p = tryCatch(e, r, n);
if ("normal" === p.type) {
if (o = n.done ? s : l, p.arg === y) continue;
return {
value: p.arg,
done: n.done
};
}
"throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg);
}
};
}
function maybeInvokeDelegate(e, r) {
var n = r.method,
o = e.iterator[n];
if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y;
var i = tryCatch(o, e.iterator, r.arg);
if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y;
var a = i.arg;
return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y);
}
function pushTryEntry(t) {
var e = {
tryLoc: t[0]
};
1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e);
}
function resetTryEntry(t) {
var e = t.completion || {};
e.type = "normal", delete e.arg, t.completion = e;
}
function Context(t) {
this.tryEntries = [{
tryLoc: "root"
}], t.forEach(pushTryEntry, this), this.reset(!0);
}
function values(e) {
if (e || "" === e) {
var r = e[a];
if (r) return r.call(e);
if ("function" == typeof e.next) return e;
if (!isNaN(e.length)) {
var o = -1,
i = function next() {
for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next;
return next.value = t, next.done = !0, next;
};
return i.next = i;
}
}
throw new TypeError(_typeof(e) + " is not iterable");
}
return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", {
value: GeneratorFunctionPrototype,
configurable: !0
}), o(GeneratorFunctionPrototype, "constructor", {
value: GeneratorFunction,
configurable: !0
}), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) {
var e = "function" == typeof t && t.constructor;
return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name));
}, e.mark = function (t) {
return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t;
}, e.awrap = function (t) {
return {
__await: t
};
}, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () {
return this;
}), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) {
void 0 === i && (i = Promise);
var a = new AsyncIterator(wrap(t, r, n, o), i);
return e.isGeneratorFunction(r) ? a : a.next().then(function (t) {
return t.done ? t.value : a.next();
});
}, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () {
return this;
}), define(g, "toString", function () {
return "[object Generator]";
}), e.keys = function (t) {
var e = Object(t),
r = [];
for (var n in e) r.push(n);
return r.reverse(), function next() {
for (; r.length;) {
var t = r.pop();
if (t in e) return next.value = t, next.done = !1, next;
}
return next.done = !0, next;
};
}, e.values = values, Context.prototype = {
constructor: Context,
reset: function reset(e) {
if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t);
},
stop: function stop() {
this.done = !0;
var t = this.tryEntries[0].completion;
if ("throw" === t.type) throw t.arg;
return this.rval;
},
dispatchException: function dispatchException(e) {
if (this.done) throw e;
var r = this;
function handle(n, o) {
return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o;
}
for (var o = this.tryEntries.length - 1; o >= 0; --o) {
var i = this.tryEntries[o],
a = i.completion;
if ("root" === i.tryLoc) return handle("end");
if (i.tryLoc <= this.prev) {
var c = n.call(i, "catchLoc"),
u = n.call(i, "finallyLoc");
if (c && u) {
if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);
if (this.prev < i.finallyLoc) return handle(i.finallyLoc);
} else if (c) {
if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);
} else {
if (!u) throw Error("try statement without catch or finally");
if (this.prev < i.finallyLoc) return handle(i.finallyLoc);
}
}
}
},
abrupt: function abrupt(t, e) {
for (var r = this.tryEntries.length - 1; r >= 0; --r) {
var o = this.tryEntries[r];
if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) {
var i = o;
break;
}
}
i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null);
var a = i ? i.completion : {};
return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a);
},
complete: function complete(t, e) {
if ("throw" === t.type) throw t.arg;
return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y;
},
finish: function finish(t) {
for (var e = this.tryEntries.length - 1; e >= 0; --e) {
var r = this.tryEntries[e];
if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y;
}
},
"catch": function _catch(t) {
for (var e = this.tryEntries.length - 1; e >= 0; --e) {
var r = this.tryEntries[e];
if (r.tryLoc === t) {
var n = r.completion;
if ("throw" === n.type) {
var o = n.arg;
resetTryEntry(r);
}
return o;
}
}
throw Error("illegal catch attempt");
},
delegateYield: function delegateYield(e, r, n) {
return this.delegate = {
iterator: values(e),
resultName: r,
nextLoc: n
}, "next" === this.method && (this.arg = t), y;
}
}, e;
}
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
Object.defineProperty(Constructor, "prototype", {
writable: false
});
return Constructor;
}
function _toPropertyKey(t) {
var i = _toPrimitive(t, "string");
return "symbol" == _typeof(i) ? i : i + "";
}
function _toPrimitive(t, r) {
if ("object" != _typeof(t) || !t) return t;
var e = t[Symbol.toPrimitive];
if (void 0 !== e) {
var i = e.call(t, r || "default");
if ("object" != _typeof(i)) return i;
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return ("string" === r ? String : Number)(t);
}
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
try {
var info = gen[key](arg);
var value = info.value;
} catch (error) {
reject(error);
return;
}
if (info.done) {
resolve(value);
} else {
Promise.resolve(value).then(_next, _throw);
}
}
function _asyncToGenerator(fn) {
return function () {
var self = this,
args = arguments;
return new Promise(function (resolve, reject) {
var gen = fn.apply(self, args);
function _next(value) {
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
}
function _throw(err) {
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
}
_next(undefined);
});
};
}
/**
* readChunk reads a chunk with the given size from the given
* stream. It will wait until enough data is available to satisfy
* the size requirement before resolving.
* Only if the stream ends, the function may resolve with a buffer
* smaller than the size argument.
* Note that we rely on the stream behaving as Node.js documents:
* https://nodejs.org/api/stream.html#readablereadsize
*/
function readChunk(_x, _x2) {
return _readChunk.apply(this, arguments);
}
/**
* StreamSource provides an interface to obtain slices of a Readable stream for
* various ranges.
* It will buffer read data, to allow for following pattern:
* - Call slice(startA, endA) will buffer the data of the requested range
* - Call slice(startB, endB) will return data from the buffer if startA <= startB <= endA.
* If endB > endA, it will also consume new data from the stream.
* Note that it is forbidden to call with startB < startA or startB > endA. In other words,
* the slice calls cannot seek back and must not skip data from the stream.
*/
function _readChunk() {
_readChunk = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(stream, size) {
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
while (1) switch (_context2.prev = _context2.next) {
case 0:
return _context2.abrupt("return", new Promise(function (resolve, reject) {
var onError = function onError(err) {
stream.off('readable', onReadable);
reject(err);
};
var onReadable = function onReadable() {
// TODO: Node requires size to be less than 1GB. Add a validation for that
var chunk = stream.read(size);
if (chunk !== null) {
stream.off('error', onError);
stream.off('readable', onReadable);
resolve(chunk);
}
};
stream.once('error', onError);
stream.on('readable', onReadable);
}));
case 1:
case "end":
return _context2.stop();
}
}, _callee2);
}));
return _readChunk.apply(this, arguments);
}
var StreamSource = exports.default = /*#__PURE__*/function () {
function StreamSource(stream) {
var _this = this;
_classCallCheck(this, StreamSource);
this._stream = stream;
// Setting the size to null indicates that we have no calculation available
// for how much data this stream will emit requiring the user to specify
// it manually (see the `uploadSize` option).
this.size = null;
this._buf = Buffer.alloc(0);
this._bufPos = 0;
this._ended = false;
this._error = null;
stream.pause();
stream.on('end', function () {
_this._ended = true;
});
stream.on('error', function (err) {
_this._error = err;
});
}
return _createClass(StreamSource, [{
key: "slice",
value: function () {
var _slice = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(start, end) {
var returnBuffer, bufStart, bufEnd, requestedSize, newChunk;
return _regeneratorRuntime().wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
if (!(start < this._bufPos)) {
_context.next = 2;
break;
}
throw new Error('cannot slice from position which we already seeked away');
case 2:
if (!(start > this._bufPos + this._buf.length)) {
_context.next = 4;
break;
}
throw new Error('slice start is outside of buffer (currently not implemented)');
case 4:
if (!this._error) {
_context.next = 6;
break;
}
throw this._error;
case 6:
// Always attempt to drain the buffer first, even if this means that we
// return less data than the caller requested.
if (start < this._bufPos + this._buf.length) {
bufStart = start - this._bufPos;
bufEnd = Math.min(this._buf.length, end - this._bufPos);
returnBuffer = this._buf.slice(bufStart, bufEnd);
} else {
returnBuffer = Buffer.alloc(0);
}
// If the stream has ended already, read calls would not finish, so return early here.
if (!this._ended) {
_context.next = 10;
break;
}
returnBuffer.size = returnBuffer.length;
return _context.abrupt("return", {
value: returnBuffer,
done: true
});
case 10:
// If we could not satisfy the slice request from the buffer only, read more data from
// the stream and add it to the buffer.
requestedSize = end - start;
if (!(requestedSize > returnBuffer.length)) {
_context.next = 16;
break;
}
_context.next = 14;
return readChunk(this._stream, requestedSize - returnBuffer.length);
case 14:
newChunk = _context.sent;
// Append the new chunk to the buffer
returnBuffer = Buffer.concat([returnBuffer, newChunk]);
case 16:
// Important: Store the read data, so consecutive slice calls can access the same data.
this._buf = returnBuffer;
this._bufPos = start;
returnBuffer.size = returnBuffer.length;
return _context.abrupt("return", {
value: returnBuffer,
done: this._ended
});
case 20:
case "end":
return _context.stop();
}
}, _callee, this);
}));
function slice(_x3, _x4) {
return _slice.apply(this, arguments);
}
return slice;
}()
}, {
key: "close",
value: function close() {
this._stream.destroy();
}
}]);
}();

View file

@ -0,0 +1,217 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.canStoreURLs = exports.FileUrlStorage = void 0;
var _fs = require("fs");
var _combineErrors = _interopRequireDefault(require("combine-errors"));
var lockfile = _interopRequireWildcard(require("proper-lockfile"));
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _typeof(o) {
"@babel/helpers - typeof";
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
return typeof o;
} : function (o) {
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
}, _typeof(o);
}
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
Object.defineProperty(Constructor, "prototype", {
writable: false
});
return Constructor;
}
function _toPropertyKey(t) {
var i = _toPrimitive(t, "string");
return "symbol" == _typeof(i) ? i : i + "";
}
function _toPrimitive(t, r) {
if ("object" != _typeof(t) || !t) return t;
var e = t[Symbol.toPrimitive];
if (void 0 !== e) {
var i = e.call(t, r || "default");
if ("object" != _typeof(i)) return i;
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return ("string" === r ? String : Number)(t);
}
var canStoreURLs = exports.canStoreURLs = true;
var FileUrlStorage = exports.FileUrlStorage = /*#__PURE__*/function () {
function FileUrlStorage(filePath) {
_classCallCheck(this, FileUrlStorage);
this.path = filePath;
}
return _createClass(FileUrlStorage, [{
key: "findAllUploads",
value: function findAllUploads() {
var _this = this;
return new Promise(function (resolve, reject) {
_this._getItems('tus::', function (err, results) {
if (err) reject(err);else resolve(results);
});
});
}
}, {
key: "findUploadsByFingerprint",
value: function findUploadsByFingerprint(fingerprint) {
var _this2 = this;
return new Promise(function (resolve, reject) {
_this2._getItems("tus::".concat(fingerprint), function (err, results) {
if (err) reject(err);else resolve(results);
});
});
}
}, {
key: "removeUpload",
value: function removeUpload(urlStorageKey) {
var _this3 = this;
return new Promise(function (resolve, reject) {
_this3._removeItem(urlStorageKey, function (err) {
if (err) reject(err);else resolve();
});
});
}
}, {
key: "addUpload",
value: function addUpload(fingerprint, upload) {
var _this4 = this;
var id = Math.round(Math.random() * 1e12);
var key = "tus::".concat(fingerprint, "::").concat(id);
return new Promise(function (resolve, reject) {
_this4._setItem(key, upload, function (err) {
if (err) reject(err);else resolve(key);
});
});
}
}, {
key: "_setItem",
value: function _setItem(key, value, cb) {
var _this5 = this;
lockfile.lock(this.path, this._lockfileOptions()).then(function (release) {
cb = _this5._releaseAndCb(release, cb);
_this5._getData(function (err, data) {
if (err) {
cb(err);
return;
}
data[key] = value;
_this5._writeData(data, function (err2) {
return cb(err2);
});
});
})["catch"](cb);
}
}, {
key: "_getItems",
value: function _getItems(prefix, cb) {
this._getData(function (err, data) {
if (err) {
cb(err);
return;
}
var results = Object.keys(data).filter(function (key) {
return key.startsWith(prefix);
}).map(function (key) {
var obj = data[key];
obj.urlStorageKey = key;
return obj;
});
cb(null, results);
});
}
}, {
key: "_removeItem",
value: function _removeItem(key, cb) {
var _this6 = this;
lockfile.lock(this.path, this._lockfileOptions()).then(function (release) {
cb = _this6._releaseAndCb(release, cb);
_this6._getData(function (err, data) {
if (err) {
cb(err);
return;
}
delete data[key];
_this6._writeData(data, function (err2) {
return cb(err2);
});
});
})["catch"](cb);
}
}, {
key: "_lockfileOptions",
value: function _lockfileOptions() {
return {
realpath: false,
retries: {
retries: 5,
minTimeout: 20
}
};
}
}, {
key: "_releaseAndCb",
value: function _releaseAndCb(release, cb) {
return function (err) {
if (err) {
release().then(function () {
return cb(err);
})["catch"](function (releaseErr) {
return cb((0, _combineErrors.default)([err, releaseErr]));
});
return;
}
release().then(cb)["catch"](cb);
};
}
}, {
key: "_writeData",
value: function _writeData(data, cb) {
var opts = {
encoding: 'utf8',
mode: 432,
flag: 'w'
};
(0, _fs.writeFile)(this.path, JSON.stringify(data), opts, function (err) {
return cb(err);
});
}
}, {
key: "_getData",
value: function _getData(cb) {
(0, _fs.readFile)(this.path, 'utf8', function (err, data) {
if (err) {
// return empty data if file does not exist
if (err.code === 'ENOENT') cb(null, {});else cb(err);
return;
}
try {
data = !data.trim().length ? {} : JSON.parse(data);
} catch (error) {
cb(error);
return;
}
cb(null, data);
});
}
}]);
}();

View file

@ -0,0 +1,77 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
function _typeof(o) {
"@babel/helpers - typeof";
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
return typeof o;
} : function (o) {
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
}, _typeof(o);
}
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
Object.defineProperty(Constructor, "prototype", {
writable: false
});
return Constructor;
}
function _toPropertyKey(t) {
var i = _toPrimitive(t, "string");
return "symbol" == _typeof(i) ? i : i + "";
}
function _toPrimitive(t, r) {
if ("object" != _typeof(t) || !t) return t;
var e = t[Symbol.toPrimitive];
if (void 0 !== e) {
var i = e.call(t, r || "default");
if ("object" != _typeof(i)) return i;
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return ("string" === r ? String : Number)(t);
}
var NoopUrlStorage = exports.default = /*#__PURE__*/function () {
function NoopUrlStorage() {
_classCallCheck(this, NoopUrlStorage);
}
return _createClass(NoopUrlStorage, [{
key: "listAllUploads",
value: function listAllUploads() {
return Promise.resolve([]);
}
}, {
key: "findUploadsByFingerprint",
value: function findUploadsByFingerprint(_fingerprint) {
return Promise.resolve([]);
}
}, {
key: "removeUpload",
value: function removeUpload(_urlStorageKey) {
return Promise.resolve();
}
}, {
key: "addUpload",
value: function addUpload(_fingerprint, _upload) {
return Promise.resolve(null);
}
}]);
}();

1583
frontend/node_modules/tus-js-client/lib.es5/upload.js generated vendored Normal file

File diff suppressed because it is too large Load diff

25
frontend/node_modules/tus-js-client/lib.es5/uuid.js generated vendored Normal file
View file

@ -0,0 +1,25 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = uuid;
/**
* Generate a UUID v4 based on random numbers. We intentioanlly use the less
* secure Math.random function here since the more secure crypto.getRandomNumbers
* is not available on all platforms.
* This is not a problem for us since we use the UUID only for generating a
* request ID, so we can correlate server logs to client errors.
*
* This function is taken from following site:
* https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript
*
* @return {string} The generate UUID
*/
function uuid() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
var r = Math.random() * 16 | 0;
var v = c === 'x' ? r : r & 0x3 | 0x8;
return v.toString(16);
});
}

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,34 @@
import isReactNative from './isReactNative.js';
// TODO: Differenciate between input types
/**
* Generate a fingerprint for a file which will be used the store the endpoint
*
* @param {File} file
* @param {Object} options
* @param {Function} callback
*/
export default function fingerprint(file, options) {
if (isReactNative()) {
return Promise.resolve(reactNativeFingerprint(file, options));
}
return Promise.resolve(['tus-br', file.name, file.type, file.size, file.lastModified, options.endpoint].join('-'));
}
function reactNativeFingerprint(file, options) {
var exifHash = file.exif ? hashCode(JSON.stringify(file.exif)) : 'noexif';
return ['tus-rn', file.name || 'noname', file.size || 'nosize', exifHash, options.endpoint].join('/');
}
function hashCode(str) {
// from https://stackoverflow.com/a/8831937/151666
var hash = 0;
if (str.length === 0) {
return hash;
}
for (var i = 0; i < str.length; i++) {
var _char = str.charCodeAt(i);
hash = (hash << 5) - hash + _char;
hash &= hash; // Convert to 32bit integer
}
return hash;
}

View file

@ -0,0 +1,122 @@
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
var XHRHttpStack = /*#__PURE__*/function () {
function XHRHttpStack() {
_classCallCheck(this, XHRHttpStack);
}
return _createClass(XHRHttpStack, [{
key: "createRequest",
value: function createRequest(method, url) {
return new Request(method, url);
}
}, {
key: "getName",
value: function getName() {
return 'XHRHttpStack';
}
}]);
}();
export { XHRHttpStack as default };
var Request = /*#__PURE__*/function () {
function Request(method, url) {
_classCallCheck(this, Request);
this._xhr = new XMLHttpRequest();
this._xhr.open(method, url, true);
this._method = method;
this._url = url;
this._headers = {};
}
return _createClass(Request, [{
key: "getMethod",
value: function getMethod() {
return this._method;
}
}, {
key: "getURL",
value: function getURL() {
return this._url;
}
}, {
key: "setHeader",
value: function setHeader(header, value) {
this._xhr.setRequestHeader(header, value);
this._headers[header] = value;
}
}, {
key: "getHeader",
value: function getHeader(header) {
return this._headers[header];
}
}, {
key: "setProgressHandler",
value: function setProgressHandler(progressHandler) {
// Test support for progress events before attaching an event listener
if (!('upload' in this._xhr)) {
return;
}
this._xhr.upload.onprogress = function (e) {
if (!e.lengthComputable) {
return;
}
progressHandler(e.loaded);
};
}
}, {
key: "send",
value: function send() {
var _this = this;
var body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
return new Promise(function (resolve, reject) {
_this._xhr.onload = function () {
resolve(new Response(_this._xhr));
};
_this._xhr.onerror = function (err) {
reject(err);
};
_this._xhr.send(body);
});
}
}, {
key: "abort",
value: function abort() {
this._xhr.abort();
return Promise.resolve();
}
}, {
key: "getUnderlyingObject",
value: function getUnderlyingObject() {
return this._xhr;
}
}]);
}();
var Response = /*#__PURE__*/function () {
function Response(xhr) {
_classCallCheck(this, Response);
this._xhr = xhr;
}
return _createClass(Response, [{
key: "getStatus",
value: function getStatus() {
return this._xhr.status;
}
}, {
key: "getHeader",
value: function getHeader(header) {
return this._xhr.getResponseHeader(header);
}
}, {
key: "getBody",
value: function getBody() {
return this._xhr.responseText;
}
}, {
key: "getUnderlyingObject",
value: function getUnderlyingObject() {
return this._xhr;
}
}]);
}();

View file

@ -0,0 +1,50 @@
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
import DetailedError from '../error.js';
import { enableDebugLog } from '../logger.js';
import NoopUrlStorage from '../noopUrlStorage.js';
import BaseUpload from '../upload.js';
import FileReader from './fileReader.js';
import fingerprint from './fileSignature.js';
import DefaultHttpStack from './httpStack.js';
import { WebStorageUrlStorage, canStoreURLs } from './urlStorage.js';
var defaultOptions = _objectSpread(_objectSpread({}, BaseUpload.defaultOptions), {}, {
httpStack: new DefaultHttpStack(),
fileReader: new FileReader(),
urlStorage: canStoreURLs ? new WebStorageUrlStorage() : new NoopUrlStorage(),
fingerprint: fingerprint
});
var Upload = /*#__PURE__*/function (_BaseUpload) {
function Upload() {
var file = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
_classCallCheck(this, Upload);
options = _objectSpread(_objectSpread({}, defaultOptions), options);
return _callSuper(this, Upload, [file, options]);
}
_inherits(Upload, _BaseUpload);
return _createClass(Upload, null, [{
key: "terminate",
value: function terminate(url) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
options = _objectSpread(_objectSpread({}, defaultOptions), options);
return BaseUpload.terminate(url, options);
}
}]);
}(BaseUpload); // Note: We don't reference `window` here because these classes also exist in a Web Worker's context.
var isSupported = typeof XMLHttpRequest === 'function' && typeof Blob === 'function' && typeof Blob.prototype.slice === 'function';
export { Upload, canStoreURLs, defaultOptions, isSupported, enableDebugLog, DefaultHttpStack, DetailedError };

View file

@ -0,0 +1,4 @@
var isReactNative = function isReactNative() {
return typeof navigator !== 'undefined' && typeof navigator.product === 'string' && navigator.product.toLowerCase() === 'reactnative';
};
export default isReactNative;

View file

@ -0,0 +1,39 @@
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
import isCordova from './isCordova.js';
import readAsByteArray from './readAsByteArray.js';
var FileSource = /*#__PURE__*/function () {
// Make this.size a method
function FileSource(file) {
_classCallCheck(this, FileSource);
this._file = file;
this.size = file.size;
}
return _createClass(FileSource, [{
key: "slice",
value: function slice(start, end) {
// In Apache Cordova applications, a File must be resolved using
// FileReader instances, see
// https://cordova.apache.org/docs/en/8.x/reference/cordova-plugin-file/index.html#read-a-file
if (isCordova()) {
return readAsByteArray(this._file.slice(start, end));
}
var value = this._file.slice(start, end);
var done = end >= this.size;
return Promise.resolve({
value: value,
done: done
});
}
}, {
key: "close",
value: function close() {
// Nothing to do here since we don't need to release any resources.
}
}]);
}();
export { FileSource as default };

View file

@ -0,0 +1,106 @@
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function len(blobOrArray) {
if (blobOrArray === undefined) return 0;
if (blobOrArray.size !== undefined) return blobOrArray.size;
return blobOrArray.length;
}
/*
Typed arrays and blobs don't have a concat method.
This function helps StreamSource accumulate data to reach chunkSize.
*/
function concat(a, b) {
if (a.concat) {
// Is `a` an Array?
return a.concat(b);
}
if (a instanceof Blob) {
return new Blob([a, b], {
type: a.type
});
}
if (a.set) {
// Is `a` a typed array?
var c = new a.constructor(a.length + b.length);
c.set(a);
c.set(b, a.length);
return c;
}
throw new Error('Unknown data type');
}
var StreamSource = /*#__PURE__*/function () {
function StreamSource(reader) {
_classCallCheck(this, StreamSource);
this._buffer = undefined;
this._bufferOffset = 0;
this._reader = reader;
this._done = false;
}
return _createClass(StreamSource, [{
key: "slice",
value: function slice(start, end) {
if (start < this._bufferOffset) {
return Promise.reject(new Error("Requested data is before the reader's current offset"));
}
return this._readUntilEnoughDataOrDone(start, end);
}
}, {
key: "_readUntilEnoughDataOrDone",
value: function _readUntilEnoughDataOrDone(start, end) {
var _this = this;
var hasEnoughData = end <= this._bufferOffset + len(this._buffer);
if (this._done || hasEnoughData) {
var value = this._getDataFromBuffer(start, end);
var done = value == null ? this._done : false;
return Promise.resolve({
value: value,
done: done
});
}
return this._reader.read().then(function (_ref) {
var value = _ref.value,
done = _ref.done;
if (done) {
_this._done = true;
} else if (_this._buffer === undefined) {
_this._buffer = value;
} else {
_this._buffer = concat(_this._buffer, value);
}
return _this._readUntilEnoughDataOrDone(start, end);
});
}
}, {
key: "_getDataFromBuffer",
value: function _getDataFromBuffer(start, end) {
// Remove data from buffer before `start`.
// Data might be reread from the buffer if an upload fails, so we can only
// safely delete data when it comes *before* what is currently being read.
if (start > this._bufferOffset) {
this._buffer = this._buffer.slice(start - this._bufferOffset);
this._bufferOffset = start;
}
// If the buffer is empty after removing old data, all data has been read.
var hasAllDataBeenRead = len(this._buffer) === 0;
if (this._done && hasAllDataBeenRead) {
return null;
}
// We already removed data before `start`, so we just return the first
// chunk from the buffer.
return this._buffer.slice(0, end - start);
}
}, {
key: "close",
value: function close() {
if (this._reader.cancel) {
this._reader.cancel();
}
}
}]);
}();
export { StreamSource as default };

View file

@ -0,0 +1,4 @@
var isCordova = function isCordova() {
return typeof window !== 'undefined' && (typeof window.PhoneGap !== 'undefined' || typeof window.Cordova !== 'undefined' || typeof window.cordova !== 'undefined');
};
export default isCordova;

View file

@ -0,0 +1,20 @@
/**
* readAsByteArray converts a File object to a Uint8Array.
* This function is only used on the Apache Cordova platform.
* See https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-file/index.html#read-a-file
*/
export default function readAsByteArray(chunk) {
return new Promise(function (resolve, reject) {
var reader = new FileReader();
reader.onload = function () {
var value = new Uint8Array(reader.result);
resolve({
value: value
});
};
reader.onerror = function (err) {
reject(err);
};
reader.readAsArrayBuffer(chunk);
});
}

View file

@ -0,0 +1,20 @@
/**
* uriToBlob resolves a URI to a Blob object. This is used for
* React Native to retrieve a file (identified by a file://
* URI) as a blob.
*/
export default function uriToBlob(uri) {
return new Promise(function (resolve, reject) {
var xhr = new XMLHttpRequest();
xhr.responseType = 'blob';
xhr.onload = function () {
var blob = xhr.response;
resolve(blob);
};
xhr.onerror = function (err) {
reject(err);
};
xhr.open('GET', uri);
xhr.send();
});
}

View file

@ -0,0 +1,80 @@
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
var hasStorage = false;
try {
// Note: localStorage does not exist in the Web Worker's context, so we must use window here.
hasStorage = 'localStorage' in window;
// Attempt to store and read entries from the local storage to detect Private
// Mode on Safari on iOS (see #49)
// If the key was not used before, we remove it from local storage again to
// not cause confusion where the entry came from.
var key = 'tusSupport';
var originalValue = localStorage.getItem(key);
localStorage.setItem(key, originalValue);
if (originalValue === null) localStorage.removeItem(key);
} catch (e) {
// If we try to access localStorage inside a sandboxed iframe, a SecurityError
// is thrown. When in private mode on iOS Safari, a QuotaExceededError is
// thrown (see #49)
if (e.code === e.SECURITY_ERR || e.code === e.QUOTA_EXCEEDED_ERR) {
hasStorage = false;
} else {
throw e;
}
}
export var canStoreURLs = hasStorage;
export var WebStorageUrlStorage = /*#__PURE__*/function () {
function WebStorageUrlStorage() {
_classCallCheck(this, WebStorageUrlStorage);
}
return _createClass(WebStorageUrlStorage, [{
key: "findAllUploads",
value: function findAllUploads() {
var results = this._findEntries('tus::');
return Promise.resolve(results);
}
}, {
key: "findUploadsByFingerprint",
value: function findUploadsByFingerprint(fingerprint) {
var results = this._findEntries("tus::".concat(fingerprint, "::"));
return Promise.resolve(results);
}
}, {
key: "removeUpload",
value: function removeUpload(urlStorageKey) {
localStorage.removeItem(urlStorageKey);
return Promise.resolve();
}
}, {
key: "addUpload",
value: function addUpload(fingerprint, upload) {
var id = Math.round(Math.random() * 1e12);
var key = "tus::".concat(fingerprint, "::").concat(id);
localStorage.setItem(key, JSON.stringify(upload));
return Promise.resolve(key);
}
}, {
key: "_findEntries",
value: function _findEntries(prefix) {
var results = [];
for (var i = 0; i < localStorage.length; i++) {
var _key = localStorage.key(i);
if (_key.indexOf(prefix) !== 0) continue;
try {
var upload = JSON.parse(localStorage.getItem(_key));
upload.urlStorageKey = _key;
results.push(upload);
} catch (_e) {
// The JSON parse error is intentionally ignored here, so a malformed
// entry in the storage cannot prevent an upload.
}
}
return results;
}
}]);
}();

45
frontend/node_modules/tus-js-client/lib.esm/error.js generated vendored Normal file
View file

@ -0,0 +1,45 @@
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }
function _construct(t, e, r) { if (_isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments); var o = [null]; o.push.apply(o, e); var p = new (t.bind.apply(t, o))(); return r && _setPrototypeOf(p, r.prototype), p; }
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
function _isNativeFunction(fn) { try { return Function.toString.call(fn).indexOf("[native code]") !== -1; } catch (e) { return typeof fn === "function"; } }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
var DetailedError = /*#__PURE__*/function (_Error) {
function DetailedError(message) {
var _this;
var causingErr = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
var req = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
var res = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
_classCallCheck(this, DetailedError);
_this = _callSuper(this, DetailedError, [message]);
_this.originalRequest = req;
_this.originalResponse = res;
_this.causingError = causingErr;
if (causingErr != null) {
message += ", caused by ".concat(causingErr.toString());
}
if (req != null) {
var requestId = req.getHeader('X-Request-ID') || 'n/a';
var method = req.getMethod();
var url = req.getURL();
var status = res ? res.getStatus() : 'n/a';
var body = res ? res.getBody() || '' : 'n/a';
message += ", originated from request (method: ".concat(method, ", url: ").concat(url, ", response code: ").concat(status, ", response text: ").concat(body, ", request id: ").concat(requestId, ")");
}
_this.message = message;
return _this;
}
_inherits(DetailedError, _Error);
return _createClass(DetailedError);
}( /*#__PURE__*/_wrapNativeSuper(Error));
export default DetailedError;

View file

@ -0,0 +1,8 @@
var isEnabled = false;
export function enableDebugLog() {
isEnabled = true;
}
export function log(msg) {
if (!isEnabled) return;
console.log(msg);
}

View file

@ -0,0 +1,36 @@
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
import { ReadStream } from 'fs';
import isStream from 'is-stream';
import BufferSource from './sources/BufferSource.js';
import getFileSource from './sources/FileSource.js';
import StreamSource from './sources/StreamSource.js';
var FileReader = /*#__PURE__*/function () {
function FileReader() {
_classCallCheck(this, FileReader);
}
return _createClass(FileReader, [{
key: "openFile",
value: function openFile(input, chunkSize) {
if (Buffer.isBuffer(input)) {
return Promise.resolve(new BufferSource(input));
}
if (input instanceof ReadStream && input.path != null) {
return getFileSource(input);
}
if (isStream.readable(input)) {
chunkSize = Number(chunkSize);
if (!Number.isFinite(chunkSize)) {
return Promise.reject(new Error('cannot create source for stream without a finite value for the `chunkSize` option; specify a chunkSize to control the memory consumption'));
}
return Promise.resolve(new StreamSource(input));
}
return Promise.reject(new Error('source object may only be an instance of Buffer or Readable in this environment'));
}
}]);
}();
export { FileReader as default };

View file

@ -0,0 +1,36 @@
import { createHash } from 'crypto';
import * as fs from 'fs';
import * as path from 'path';
/**
* Generate a fingerprint for a file which will be used the store the endpoint
*
* @param {File} file
* @param {Object} options
*/
export default function fingerprint(file, options) {
if (Buffer.isBuffer(file)) {
// create MD5 hash for buffer type
var blockSize = 64 * 1024; // 64kb
var content = file.slice(0, Math.min(blockSize, file.length));
var hash = createHash('md5').update(content).digest('hex');
var ret = ['node-buffer', hash, file.length, options.endpoint].join('-');
return Promise.resolve(ret);
}
if (file instanceof fs.ReadStream && file.path != null) {
return new Promise(function (resolve, reject) {
var name = path.resolve(file.path);
fs.stat(file.path, function (err, info) {
if (err) {
reject(err);
return;
}
var ret = ['node-file', name, info.size, info.mtime.getTime(), options.endpoint].join('-');
resolve(ret);
});
});
}
// fingerprint cannot be computed for file input type
return Promise.resolve(null);
}

View file

@ -0,0 +1,237 @@
function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
// The url.parse method is superseeded by the url.URL constructor,
// but it is still included in Node.js
import * as http from 'http';
import * as https from 'https';
import { Readable, Transform } from 'stream';
import { parse } from 'url';
import throttle from 'lodash.throttle';
var NodeHttpStack = /*#__PURE__*/function () {
function NodeHttpStack() {
var requestOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
_classCallCheck(this, NodeHttpStack);
this._requestOptions = requestOptions;
}
return _createClass(NodeHttpStack, [{
key: "createRequest",
value: function createRequest(method, url) {
return new Request(method, url, this._requestOptions);
}
}, {
key: "getName",
value: function getName() {
return 'NodeHttpStack';
}
}]);
}();
export { NodeHttpStack as default };
var Request = /*#__PURE__*/function () {
function Request(method, url, options) {
_classCallCheck(this, Request);
this._method = method;
this._url = url;
this._headers = {};
this._request = null;
this._progressHandler = function () {};
this._requestOptions = options || {};
}
return _createClass(Request, [{
key: "getMethod",
value: function getMethod() {
return this._method;
}
}, {
key: "getURL",
value: function getURL() {
return this._url;
}
}, {
key: "setHeader",
value: function setHeader(header, value) {
this._headers[header] = value;
}
}, {
key: "getHeader",
value: function getHeader(header) {
return this._headers[header];
}
}, {
key: "setProgressHandler",
value: function setProgressHandler(progressHandler) {
this._progressHandler = progressHandler;
}
}, {
key: "send",
value: function send() {
var _this = this;
var body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
return new Promise(function (resolve, reject) {
var options = _objectSpread(_objectSpread(_objectSpread({}, parse(_this._url)), _this._requestOptions), {}, {
method: _this._method,
headers: _objectSpread(_objectSpread({}, _this._requestOptions.headers || {}), _this._headers)
});
if (body !== null && body !== void 0 && body.size) {
options.headers['Content-Length'] = body.size;
}
var httpModule = options.protocol === 'https:' ? https : http;
_this._request = httpModule.request(options);
var req = _this._request;
req.on('response', function (res) {
var resChunks = [];
res.on('data', function (data) {
resChunks.push(data);
});
res.on('end', function () {
var responseText = Buffer.concat(resChunks).toString('utf8');
resolve(new Response(res, responseText));
});
});
req.on('error', function (err) {
reject(err);
});
if (body instanceof Readable) {
// Readable stream are piped through a PassThrough instance, which
// counts the number of bytes passed through. This is used, for example,
// when an fs.ReadStream is provided to tus-js-client.
body.pipe(new ProgressEmitter(_this._progressHandler)).pipe(req);
} else if (body instanceof Uint8Array) {
// For Buffers and Uint8Arrays (in Node.js all buffers are instances of Uint8Array),
// we write chunks of the buffer to the stream and use that to track the progress.
// This is used when either a Buffer or a normal readable stream is provided
// to tus-js-client.
writeBufferToStreamWithProgress(req, body, _this._progressHandler);
} else {
req.end(body);
}
});
}
}, {
key: "abort",
value: function abort() {
if (this._request !== null) this._request.abort();
return Promise.resolve();
}
}, {
key: "getUnderlyingObject",
value: function getUnderlyingObject() {
return this._request;
}
}]);
}();
var Response = /*#__PURE__*/function () {
function Response(res, body) {
_classCallCheck(this, Response);
this._response = res;
this._body = body;
}
return _createClass(Response, [{
key: "getStatus",
value: function getStatus() {
return this._response.statusCode;
}
}, {
key: "getHeader",
value: function getHeader(header) {
return this._response.headers[header.toLowerCase()];
}
}, {
key: "getBody",
value: function getBody() {
return this._body;
}
}, {
key: "getUnderlyingObject",
value: function getUnderlyingObject() {
return this._response;
}
}]);
}(); // ProgressEmitter is a simple PassThrough-style transform stream which keeps
// track of the number of bytes which have been piped through it and will
// invoke the `onprogress` function whenever new number are available.
var ProgressEmitter = /*#__PURE__*/function (_Transform) {
function ProgressEmitter(onprogress) {
var _this2;
_classCallCheck(this, ProgressEmitter);
_this2 = _callSuper(this, ProgressEmitter);
// The _onprogress property will be invoked, whenever a chunk is piped
// through this transformer. Since chunks are usually quite small (64kb),
// these calls can occur frequently, especially when you have a good
// connection to the remote server. Therefore, we are throtteling them to
// prevent accessive function calls.
_this2._onprogress = throttle(onprogress, 100, {
leading: true,
trailing: false
});
_this2._position = 0;
return _this2;
}
_inherits(ProgressEmitter, _Transform);
return _createClass(ProgressEmitter, [{
key: "_transform",
value: function _transform(chunk, _encoding, callback) {
this._position += chunk.length;
this._onprogress(this._position);
callback(null, chunk);
}
}]);
}(Transform); // writeBufferToStreamWithProgress writes chunks from `source` (either a
// Buffer or Uint8Array) to the readable stream `stream`.
// The size of the chunk depends on the stream's highWaterMark to fill the
// stream's internal buffer as best as possible.
// If the internal buffer is full, the callback `onprogress` will be invoked
// to notify about the write progress. Writing will be resumed once the internal
// buffer is empty, as indicated by the emitted `drain` event.
// See https://nodejs.org/docs/latest/api/stream.html#buffering for more details
// on the buffering behavior of streams.
var writeBufferToStreamWithProgress = function writeBufferToStreamWithProgress(stream, source, onprogress) {
onprogress = throttle(onprogress, 100, {
leading: true,
trailing: false
});
var offset = 0;
function writeNextChunk() {
// Take at most the amount of bytes from highWaterMark. This should fill the streams
// internal buffer already.
var chunkSize = Math.min(stream.writableHighWaterMark, source.length - offset);
// Note: We use subarray instead of slice because it works without copying data for
// Buffers and Uint8Arrays.
var chunk = source.subarray(offset, offset + chunkSize);
offset += chunk.length;
// `write` returns true if the internal buffer is not full and we should write more.
// If the stream is destroyed because the request is aborted, it will return false
// and no 'drain' event is emitted, so won't continue writing data.
var canContinue = stream.write(chunk);
if (!canContinue) {
// If the buffer is full, wait for the 'drain' event to write more data.
stream.once('drain', writeNextChunk);
onprogress(offset);
} else if (offset < source.length) {
// If there's still data to write and the buffer is not full, write next chunk.
writeNextChunk();
} else {
// If all data has been written, close the stream if needed, and emit a 'finish' event.
stream.end();
}
}
// Start writing the first chunk.
writeNextChunk();
};

View file

@ -0,0 +1,54 @@
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
import DetailedError from '../error.js';
import { enableDebugLog } from '../logger.js';
import NoopUrlStorage from '../noopUrlStorage.js';
import BaseUpload from '../upload.js';
import FileReader from './fileReader.js';
import fingerprint from './fileSignature.js';
import DefaultHttpStack from './httpStack.js';
import StreamSource from './sources/StreamSource.js';
import { FileUrlStorage, canStoreURLs } from './urlStorage.js';
var defaultOptions = _objectSpread(_objectSpread({}, BaseUpload.defaultOptions), {}, {
httpStack: new DefaultHttpStack(),
fileReader: new FileReader(),
urlStorage: new NoopUrlStorage(),
fingerprint: fingerprint
});
var Upload = /*#__PURE__*/function (_BaseUpload) {
function Upload() {
var file = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
_classCallCheck(this, Upload);
options = _objectSpread(_objectSpread({}, defaultOptions), options);
return _callSuper(this, Upload, [file, options]);
}
_inherits(Upload, _BaseUpload);
return _createClass(Upload, null, [{
key: "terminate",
value: function terminate(url) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
options = _objectSpread(_objectSpread({}, defaultOptions), options);
return BaseUpload.terminate(url, options);
}
}]);
}(BaseUpload); // The Node.js environment does not have restrictions which may cause
// tus-js-client not to function.
var isSupported = true;
export { Upload, defaultOptions, isSupported,
// Make FileUrlStorage module available as it will not be set by default.
FileUrlStorage, canStoreURLs, enableDebugLog, DefaultHttpStack, DetailedError, StreamSource };

View file

@ -0,0 +1,29 @@
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
var BufferSource = /*#__PURE__*/function () {
function BufferSource(buffer) {
_classCallCheck(this, BufferSource);
this._buffer = buffer;
this.size = buffer.length;
}
return _createClass(BufferSource, [{
key: "slice",
value: function slice(start, end) {
var value = this._buffer.slice(start, end);
value.size = value.length;
var done = end >= this.size;
return Promise.resolve({
value: value,
done: done
});
}
}, {
key: "close",
value: function close() {}
}]);
}();
export { BufferSource as default };

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,169 @@
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
import { readFile, writeFile } from 'fs';
import combineErrors from 'combine-errors';
import * as lockfile from 'proper-lockfile';
export var canStoreURLs = true;
export var FileUrlStorage = /*#__PURE__*/function () {
function FileUrlStorage(filePath) {
_classCallCheck(this, FileUrlStorage);
this.path = filePath;
}
return _createClass(FileUrlStorage, [{
key: "findAllUploads",
value: function findAllUploads() {
var _this = this;
return new Promise(function (resolve, reject) {
_this._getItems('tus::', function (err, results) {
if (err) reject(err);else resolve(results);
});
});
}
}, {
key: "findUploadsByFingerprint",
value: function findUploadsByFingerprint(fingerprint) {
var _this2 = this;
return new Promise(function (resolve, reject) {
_this2._getItems("tus::".concat(fingerprint), function (err, results) {
if (err) reject(err);else resolve(results);
});
});
}
}, {
key: "removeUpload",
value: function removeUpload(urlStorageKey) {
var _this3 = this;
return new Promise(function (resolve, reject) {
_this3._removeItem(urlStorageKey, function (err) {
if (err) reject(err);else resolve();
});
});
}
}, {
key: "addUpload",
value: function addUpload(fingerprint, upload) {
var _this4 = this;
var id = Math.round(Math.random() * 1e12);
var key = "tus::".concat(fingerprint, "::").concat(id);
return new Promise(function (resolve, reject) {
_this4._setItem(key, upload, function (err) {
if (err) reject(err);else resolve(key);
});
});
}
}, {
key: "_setItem",
value: function _setItem(key, value, cb) {
var _this5 = this;
lockfile.lock(this.path, this._lockfileOptions()).then(function (release) {
cb = _this5._releaseAndCb(release, cb);
_this5._getData(function (err, data) {
if (err) {
cb(err);
return;
}
data[key] = value;
_this5._writeData(data, function (err2) {
return cb(err2);
});
});
})["catch"](cb);
}
}, {
key: "_getItems",
value: function _getItems(prefix, cb) {
this._getData(function (err, data) {
if (err) {
cb(err);
return;
}
var results = Object.keys(data).filter(function (key) {
return key.startsWith(prefix);
}).map(function (key) {
var obj = data[key];
obj.urlStorageKey = key;
return obj;
});
cb(null, results);
});
}
}, {
key: "_removeItem",
value: function _removeItem(key, cb) {
var _this6 = this;
lockfile.lock(this.path, this._lockfileOptions()).then(function (release) {
cb = _this6._releaseAndCb(release, cb);
_this6._getData(function (err, data) {
if (err) {
cb(err);
return;
}
delete data[key];
_this6._writeData(data, function (err2) {
return cb(err2);
});
});
})["catch"](cb);
}
}, {
key: "_lockfileOptions",
value: function _lockfileOptions() {
return {
realpath: false,
retries: {
retries: 5,
minTimeout: 20
}
};
}
}, {
key: "_releaseAndCb",
value: function _releaseAndCb(release, cb) {
return function (err) {
if (err) {
release().then(function () {
return cb(err);
})["catch"](function (releaseErr) {
return cb(combineErrors([err, releaseErr]));
});
return;
}
release().then(cb)["catch"](cb);
};
}
}, {
key: "_writeData",
value: function _writeData(data, cb) {
var opts = {
encoding: 'utf8',
mode: 432,
flag: 'w'
};
writeFile(this.path, JSON.stringify(data), opts, function (err) {
return cb(err);
});
}
}, {
key: "_getData",
value: function _getData(cb) {
readFile(this.path, 'utf8', function (err, data) {
if (err) {
// return empty data if file does not exist
if (err.code === 'ENOENT') cb(null, {});else cb(err);
return;
}
try {
data = !data.trim().length ? {} : JSON.parse(data);
} catch (error) {
cb(error);
return;
}
cb(null, data);
});
}
}]);
}();

View file

@ -0,0 +1,33 @@
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
var NoopUrlStorage = /*#__PURE__*/function () {
function NoopUrlStorage() {
_classCallCheck(this, NoopUrlStorage);
}
return _createClass(NoopUrlStorage, [{
key: "listAllUploads",
value: function listAllUploads() {
return Promise.resolve([]);
}
}, {
key: "findUploadsByFingerprint",
value: function findUploadsByFingerprint(_fingerprint) {
return Promise.resolve([]);
}
}, {
key: "removeUpload",
value: function removeUpload(_urlStorageKey) {
return Promise.resolve();
}
}, {
key: "addUpload",
value: function addUpload(_fingerprint, _upload) {
return Promise.resolve(null);
}
}]);
}();
export { NoopUrlStorage as default };

1081
frontend/node_modules/tus-js-client/lib.esm/upload.js generated vendored Normal file

File diff suppressed because one or more lines are too long

19
frontend/node_modules/tus-js-client/lib.esm/uuid.js generated vendored Normal file
View file

@ -0,0 +1,19 @@
/**
* Generate a UUID v4 based on random numbers. We intentioanlly use the less
* secure Math.random function here since the more secure crypto.getRandomNumbers
* is not available on all platforms.
* This is not a problem for us since we use the UUID only for generating a
* request ID, so we can correlate server logs to client errors.
*
* This function is taken from following site:
* https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript
*
* @return {string} The generate UUID
*/
export default function uuid() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
var r = Math.random() * 16 | 0;
var v = c === 'x' ? r : r & 0x3 | 0x8;
return v.toString(16);
});
}

View file

@ -0,0 +1,51 @@
import isReactNative from './isReactNative.js'
import uriToBlob from './uriToBlob.js'
import FileSource from './sources/FileSource.js'
import StreamSource from './sources/StreamSource.js'
export default class FileReader {
async openFile(input, chunkSize) {
// In React Native, when user selects a file, instead of a File or Blob,
// you usually get a file object {} with a uri property that contains
// a local path to the file. We use XMLHttpRequest to fetch
// the file blob, before uploading with tus.
if (isReactNative() && input && typeof input.uri !== 'undefined') {
try {
const blob = await uriToBlob(input.uri)
return new FileSource(blob)
} catch (err) {
throw new Error(
`tus: cannot fetch \`file.uri\` as Blob, make sure the uri is correct and accessible. ${err}`,
)
}
}
// Since we emulate the Blob type in our tests (not all target browsers
// support it), we cannot use `instanceof` for testing whether the input value
// can be handled. Instead, we simply check is the slice() function and the
// size property are available.
if (typeof input.slice === 'function' && typeof input.size !== 'undefined') {
return Promise.resolve(new FileSource(input))
}
if (typeof input.read === 'function') {
chunkSize = Number(chunkSize)
if (!Number.isFinite(chunkSize)) {
return Promise.reject(
new Error(
'cannot create source for stream without a finite value for the `chunkSize` option',
),
)
}
return Promise.resolve(new StreamSource(input, chunkSize))
}
return Promise.reject(
new Error(
'source object may only be an instance of File, Blob, or Reader in this environment',
),
)
}
}

View file

@ -0,0 +1,41 @@
import isReactNative from './isReactNative.js'
// TODO: Differenciate between input types
/**
* Generate a fingerprint for a file which will be used the store the endpoint
*
* @param {File} file
* @param {Object} options
* @param {Function} callback
*/
export default function fingerprint(file, options) {
if (isReactNative()) {
return Promise.resolve(reactNativeFingerprint(file, options))
}
return Promise.resolve(
['tus-br', file.name, file.type, file.size, file.lastModified, options.endpoint].join('-'),
)
}
function reactNativeFingerprint(file, options) {
const exifHash = file.exif ? hashCode(JSON.stringify(file.exif)) : 'noexif'
return ['tus-rn', file.name || 'noname', file.size || 'nosize', exifHash, options.endpoint].join(
'/',
)
}
function hashCode(str) {
// from https://stackoverflow.com/a/8831937/151666
let hash = 0
if (str.length === 0) {
return hash
}
for (let i = 0; i < str.length; i++) {
const char = str.charCodeAt(i)
hash = (hash << 5) - hash + char
hash &= hash // Convert to 32bit integer
}
return hash
}

View file

@ -0,0 +1,97 @@
export default class XHRHttpStack {
createRequest(method, url) {
return new Request(method, url)
}
getName() {
return 'XHRHttpStack'
}
}
class Request {
constructor(method, url) {
this._xhr = new XMLHttpRequest()
this._xhr.open(method, url, true)
this._method = method
this._url = url
this._headers = {}
}
getMethod() {
return this._method
}
getURL() {
return this._url
}
setHeader(header, value) {
this._xhr.setRequestHeader(header, value)
this._headers[header] = value
}
getHeader(header) {
return this._headers[header]
}
setProgressHandler(progressHandler) {
// Test support for progress events before attaching an event listener
if (!('upload' in this._xhr)) {
return
}
this._xhr.upload.onprogress = (e) => {
if (!e.lengthComputable) {
return
}
progressHandler(e.loaded)
}
}
send(body = null) {
return new Promise((resolve, reject) => {
this._xhr.onload = () => {
resolve(new Response(this._xhr))
}
this._xhr.onerror = (err) => {
reject(err)
}
this._xhr.send(body)
})
}
abort() {
this._xhr.abort()
return Promise.resolve()
}
getUnderlyingObject() {
return this._xhr
}
}
class Response {
constructor(xhr) {
this._xhr = xhr
}
getStatus() {
return this._xhr.status
}
getHeader(header) {
return this._xhr.getResponseHeader(header)
}
getBody() {
return this._xhr.responseText
}
getUnderlyingObject() {
return this._xhr
}
}

View file

@ -0,0 +1,45 @@
import DetailedError from '../error.js'
import { enableDebugLog } from '../logger.js'
import NoopUrlStorage from '../noopUrlStorage.js'
import BaseUpload from '../upload.js'
import FileReader from './fileReader.js'
import fingerprint from './fileSignature.js'
import DefaultHttpStack from './httpStack.js'
import { WebStorageUrlStorage, canStoreURLs } from './urlStorage.js'
const defaultOptions = {
...BaseUpload.defaultOptions,
httpStack: new DefaultHttpStack(),
fileReader: new FileReader(),
urlStorage: canStoreURLs ? new WebStorageUrlStorage() : new NoopUrlStorage(),
fingerprint,
}
class Upload extends BaseUpload {
constructor(file = null, options = {}) {
options = { ...defaultOptions, ...options }
super(file, options)
}
static terminate(url, options = {}) {
options = { ...defaultOptions, ...options }
return BaseUpload.terminate(url, options)
}
}
// Note: We don't reference `window` here because these classes also exist in a Web Worker's context.
const isSupported =
typeof XMLHttpRequest === 'function' &&
typeof Blob === 'function' &&
typeof Blob.prototype.slice === 'function'
export {
Upload,
canStoreURLs,
defaultOptions,
isSupported,
enableDebugLog,
DefaultHttpStack,
DetailedError,
}

View file

@ -0,0 +1,6 @@
const isReactNative = () =>
typeof navigator !== 'undefined' &&
typeof navigator.product === 'string' &&
navigator.product.toLowerCase() === 'reactnative'
export default isReactNative

View file

@ -0,0 +1,27 @@
import isCordova from './isCordova.js'
import readAsByteArray from './readAsByteArray.js'
export default class FileSource {
// Make this.size a method
constructor(file) {
this._file = file
this.size = file.size
}
slice(start, end) {
// In Apache Cordova applications, a File must be resolved using
// FileReader instances, see
// https://cordova.apache.org/docs/en/8.x/reference/cordova-plugin-file/index.html#read-a-file
if (isCordova()) {
return readAsByteArray(this._file.slice(start, end))
}
const value = this._file.slice(start, end)
const done = end >= this.size
return Promise.resolve({ value, done })
}
close() {
// Nothing to do here since we don't need to release any resources.
}
}

View file

@ -0,0 +1,89 @@
function len(blobOrArray) {
if (blobOrArray === undefined) return 0
if (blobOrArray.size !== undefined) return blobOrArray.size
return blobOrArray.length
}
/*
Typed arrays and blobs don't have a concat method.
This function helps StreamSource accumulate data to reach chunkSize.
*/
function concat(a, b) {
if (a.concat) {
// Is `a` an Array?
return a.concat(b)
}
if (a instanceof Blob) {
return new Blob([a, b], { type: a.type })
}
if (a.set) {
// Is `a` a typed array?
const c = new a.constructor(a.length + b.length)
c.set(a)
c.set(b, a.length)
return c
}
throw new Error('Unknown data type')
}
export default class StreamSource {
constructor(reader) {
this._buffer = undefined
this._bufferOffset = 0
this._reader = reader
this._done = false
}
slice(start, end) {
if (start < this._bufferOffset) {
return Promise.reject(new Error("Requested data is before the reader's current offset"))
}
return this._readUntilEnoughDataOrDone(start, end)
}
_readUntilEnoughDataOrDone(start, end) {
const hasEnoughData = end <= this._bufferOffset + len(this._buffer)
if (this._done || hasEnoughData) {
const value = this._getDataFromBuffer(start, end)
const done = value == null ? this._done : false
return Promise.resolve({ value, done })
}
return this._reader.read().then(({ value, done }) => {
if (done) {
this._done = true
} else if (this._buffer === undefined) {
this._buffer = value
} else {
this._buffer = concat(this._buffer, value)
}
return this._readUntilEnoughDataOrDone(start, end)
})
}
_getDataFromBuffer(start, end) {
// Remove data from buffer before `start`.
// Data might be reread from the buffer if an upload fails, so we can only
// safely delete data when it comes *before* what is currently being read.
if (start > this._bufferOffset) {
this._buffer = this._buffer.slice(start - this._bufferOffset)
this._bufferOffset = start
}
// If the buffer is empty after removing old data, all data has been read.
const hasAllDataBeenRead = len(this._buffer) === 0
if (this._done && hasAllDataBeenRead) {
return null
}
// We already removed data before `start`, so we just return the first
// chunk from the buffer.
return this._buffer.slice(0, end - start)
}
close() {
if (this._reader.cancel) {
this._reader.cancel()
}
}
}

View file

@ -0,0 +1,7 @@
const isCordova = () =>
typeof window !== 'undefined' &&
(typeof window.PhoneGap !== 'undefined' ||
typeof window.Cordova !== 'undefined' ||
typeof window.cordova !== 'undefined')
export default isCordova

View file

@ -0,0 +1,18 @@
/**
* readAsByteArray converts a File object to a Uint8Array.
* This function is only used on the Apache Cordova platform.
* See https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-file/index.html#read-a-file
*/
export default function readAsByteArray(chunk) {
return new Promise((resolve, reject) => {
const reader = new FileReader()
reader.onload = () => {
const value = new Uint8Array(reader.result)
resolve({ value })
}
reader.onerror = (err) => {
reject(err)
}
reader.readAsArrayBuffer(chunk)
})
}

View file

@ -0,0 +1,20 @@
/**
* uriToBlob resolves a URI to a Blob object. This is used for
* React Native to retrieve a file (identified by a file://
* URI) as a blob.
*/
export default function uriToBlob(uri) {
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest()
xhr.responseType = 'blob'
xhr.onload = () => {
const blob = xhr.response
resolve(blob)
}
xhr.onerror = (err) => {
reject(err)
}
xhr.open('GET', uri)
xhr.send()
})
}

View file

@ -0,0 +1,71 @@
let hasStorage = false
try {
// Note: localStorage does not exist in the Web Worker's context, so we must use window here.
hasStorage = 'localStorage' in window
// Attempt to store and read entries from the local storage to detect Private
// Mode on Safari on iOS (see #49)
// If the key was not used before, we remove it from local storage again to
// not cause confusion where the entry came from.
const key = 'tusSupport'
const originalValue = localStorage.getItem(key)
localStorage.setItem(key, originalValue)
if (originalValue === null) localStorage.removeItem(key)
} catch (e) {
// If we try to access localStorage inside a sandboxed iframe, a SecurityError
// is thrown. When in private mode on iOS Safari, a QuotaExceededError is
// thrown (see #49)
if (e.code === e.SECURITY_ERR || e.code === e.QUOTA_EXCEEDED_ERR) {
hasStorage = false
} else {
throw e
}
}
export const canStoreURLs = hasStorage
export class WebStorageUrlStorage {
findAllUploads() {
const results = this._findEntries('tus::')
return Promise.resolve(results)
}
findUploadsByFingerprint(fingerprint) {
const results = this._findEntries(`tus::${fingerprint}::`)
return Promise.resolve(results)
}
removeUpload(urlStorageKey) {
localStorage.removeItem(urlStorageKey)
return Promise.resolve()
}
addUpload(fingerprint, upload) {
const id = Math.round(Math.random() * 1e12)
const key = `tus::${fingerprint}::${id}`
localStorage.setItem(key, JSON.stringify(upload))
return Promise.resolve(key)
}
_findEntries(prefix) {
const results = []
for (let i = 0; i < localStorage.length; i++) {
const key = localStorage.key(i)
if (key.indexOf(prefix) !== 0) continue
try {
const upload = JSON.parse(localStorage.getItem(key))
upload.urlStorageKey = key
results.push(upload)
} catch (_e) {
// The JSON parse error is intentionally ignored here, so a malformed
// entry in the storage cannot prevent an upload.
}
}
return results
}
}

25
frontend/node_modules/tus-js-client/lib/error.js generated vendored Normal file
View file

@ -0,0 +1,25 @@
class DetailedError extends Error {
constructor(message, causingErr = null, req = null, res = null) {
super(message)
this.originalRequest = req
this.originalResponse = res
this.causingError = causingErr
if (causingErr != null) {
message += `, caused by ${causingErr.toString()}`
}
if (req != null) {
const requestId = req.getHeader('X-Request-ID') || 'n/a'
const method = req.getMethod()
const url = req.getURL()
const status = res ? res.getStatus() : 'n/a'
const body = res ? res.getBody() || '' : 'n/a'
message += `, originated from request (method: ${method}, url: ${url}, response code: ${status}, response text: ${body}, request id: ${requestId})`
}
this.message = message
}
}
export default DetailedError

143
frontend/node_modules/tus-js-client/lib/index.d.ts generated vendored Normal file
View file

@ -0,0 +1,143 @@
// Type definitions for tus-js-client
export const isSupported: boolean
export const canStoreURLs: boolean
export const defaultOptions: UploadOptions &
Required<Pick<UploadOptions, 'httpStack' | 'fileReader' | 'urlStorage' | 'fingerprint'>>
// TODO: Consider using { read: () => Promise<{ done: boolean; value?: any; }>; } as type
export class Upload {
constructor(
file: File | Blob | Buffer | Pick<ReadableStreamDefaultReader, 'read'>,
options: UploadOptions,
)
file: File | Blob | Buffer | Pick<ReadableStreamDefaultReader, 'read'>
options: UploadOptions
url: string | null
static terminate(url: string, options?: UploadOptions): Promise<void>
start(): void
abort(shouldTerminate?: boolean): Promise<void>
findPreviousUploads(): Promise<PreviousUpload[]>
resumeFromPreviousUpload(previousUpload: PreviousUpload): void
}
interface UploadOptions {
endpoint?: string | null
uploadUrl?: string | null
metadata?: { [key: string]: string }
metadataForPartialUploads?: { [key: string]: string }
fingerprint?: (file: File, options: UploadOptions) => Promise<string>
uploadSize?: number | null
onProgress?: ((bytesSent: number, bytesTotal: number) => void) | null
onChunkComplete?: ((chunkSize: number, bytesAccepted: number, bytesTotal: number) => void) | null
onSuccess?: ((payload: OnSuccessPayload) => void) | null
onError?: ((error: Error | DetailedError) => void) | null
onShouldRetry?:
| ((error: DetailedError, retryAttempt: number, options: UploadOptions) => boolean)
| null
onUploadUrlAvailable?: (() => void) | null
overridePatchMethod?: boolean
headers?: { [key: string]: string }
addRequestId?: boolean
onBeforeRequest?: (req: HttpRequest) => void | Promise<void>
onAfterResponse?: (req: HttpRequest, res: HttpResponse) => void | Promise<void>
chunkSize?: number
retryDelays?: number[] | null
parallelUploads?: number
parallelUploadBoundaries?: { start: number; end: number }[] | null
storeFingerprintForResuming?: boolean
removeFingerprintOnSuccess?: boolean
uploadLengthDeferred?: boolean
uploadDataDuringCreation?: boolean
urlStorage?: UrlStorage
fileReader?: FileReader
httpStack?: HttpStack
}
interface OnSuccessPayload {
lastResponse: HttpResponse
}
interface UrlStorage {
findAllUploads(): Promise<PreviousUpload[]>
findUploadsByFingerprint(fingerprint: string): Promise<PreviousUpload[]>
removeUpload(urlStorageKey: string): Promise<void>
// Returns the URL storage key, which can be used for removing the upload.
addUpload(fingerprint: string, upload: PreviousUpload): Promise<string>
}
interface PreviousUpload {
size: number | null
metadata: { [key: string]: string }
creationTime: string
urlStorageKey: string
uploadUrl: string | null
parallelUploadUrls: string[] | null
}
interface FileReader {
openFile(input: any, chunkSize: number): Promise<FileSource>
}
interface FileSource {
size: number
slice(start: number, end: number): Promise<SliceResult>
close(): void
}
interface SliceResult {
// Platform-specific data type which must be usable by the HTTP stack as a body.
value: any
done: boolean
}
export class DefaultHttpStack implements HttpStack {
constructor(options: any)
createRequest(method: string, url: string): HttpRequest
getName(): string
}
export interface HttpStack {
createRequest(method: string, url: string): HttpRequest
getName(): string
}
export interface HttpRequest {
getMethod(): string
getURL(): string
setHeader(header: string, value: string): void
getHeader(header: string): string | undefined
setProgressHandler(handler: (bytesSent: number) => void): void
send(body: any): Promise<HttpResponse>
abort(): Promise<void>
// Return an environment specific object, e.g. the XMLHttpRequest object in browsers.
getUnderlyingObject(): any
}
export interface HttpResponse {
getStatus(): number
getHeader(header: string): string | undefined
getBody(): string
// Return an environment specific object, e.g. the XMLHttpRequest object in browsers.
getUnderlyingObject(): any
}
export class DetailedError extends Error {
originalRequest: HttpRequest
originalResponse: HttpResponse | null
causingError: Error | null
}

View file

@ -0,0 +1,93 @@
// This is a test file for ensuring that the type definitions in index.d.ts are
// working correctly. For more details see:
// https://github.com/SamVerschueren/tsd
import { expectType } from 'tsd'
import * as tus from '../'
import type { DetailedError } from '../'
expectType<boolean>(tus.isSupported)
expectType<boolean>(tus.canStoreURLs)
const file = new File(['foo'], 'foo.txt', {
type: 'text/plain',
})
const upload = new tus.Upload(file, {
endpoint: '',
fingerprint: (file: File) => Promise.resolve(file.name),
metadata: {
filename: 'foo.txt',
},
metadataForPartialUploads: {
userId: 'foo123bar',
},
onProgress: (bytesSent: number, bytesTotal: number) => {
const percentage = ((bytesSent / bytesTotal) * 100).toFixed(2)
console.log(bytesSent, bytesTotal, `${percentage}%`)
},
onChunkComplete: (_chunkSize: number, _bytesAccepted: number) => {},
onSuccess: (payload: tus.OnSuccessPayload) => {
console.log('Download from %s complete', upload.url)
console.log('Response header', payload.lastResponse.getHeader('X-Info'))
},
onError: (error: Error | DetailedError) => {
console.error(`Failed because: ${error}`)
},
headers: { TestHeader: 'TestValue' },
chunkSize: 100,
uploadUrl: '',
uploadSize: 50,
overridePatchMethod: true,
retryDelays: [10, 20, 50],
removeFingerprintOnSuccess: true,
parallelUploads: 42,
parallelUploadBoundaries: [
{ start: 0, end: 1 },
{ start: 1, end: 11 },
],
onAfterResponse: (req: tus.HttpRequest, res: tus.HttpResponse) => {
const url = req.getURL()
const value = res.getHeader('X-My-Header')
console.log(`Request for ${url} responded with ${value}`)
},
})
upload.start()
upload.findPreviousUploads().then((uploads: tus.PreviousUpload[]) => {
upload.resumeFromPreviousUpload(uploads[0])
})
upload.abort()
upload.abort(true).then(() => {})
const _upload2 = new tus.Upload(file, {
endpoint: '',
})
// const reader = {
// read: () => Promise.resolve({ done: true, value: '' }),
// };
// const upload3 = new tus.Upload(reader, {
// endpoint: '',
// uploadLengthDeferred: true,
// });
fetch('https://www.example.org')
.then((response) => response.body)
.then((rb) => {
if (rb == null) {
return
}
const reader = rb.getReader()
return new tus.Upload(reader, {
endpoint: '',
uploadLengthDeferred: true,
})
})
tus.Upload.terminate('https://myurl.com', {
endpoint: '',
})

10
frontend/node_modules/tus-js-client/lib/logger.js generated vendored Normal file
View file

@ -0,0 +1,10 @@
let isEnabled = false
export function enableDebugLog() {
isEnabled = true
}
export function log(msg) {
if (!isEnabled) return
console.log(msg)
}

View file

@ -0,0 +1,34 @@
import { ReadStream } from 'fs'
import isStream from 'is-stream'
import BufferSource from './sources/BufferSource.js'
import getFileSource from './sources/FileSource.js'
import StreamSource from './sources/StreamSource.js'
export default class FileReader {
openFile(input, chunkSize) {
if (Buffer.isBuffer(input)) {
return Promise.resolve(new BufferSource(input))
}
if (input instanceof ReadStream && input.path != null) {
return getFileSource(input)
}
if (isStream.readable(input)) {
chunkSize = Number(chunkSize)
if (!Number.isFinite(chunkSize)) {
return Promise.reject(
new Error(
'cannot create source for stream without a finite value for the `chunkSize` option; specify a chunkSize to control the memory consumption',
),
)
}
return Promise.resolve(new StreamSource(input))
}
return Promise.reject(
new Error('source object may only be an instance of Buffer or Readable in this environment'),
)
}
}

View file

@ -0,0 +1,39 @@
import { createHash } from 'crypto'
import * as fs from 'fs'
import * as path from 'path'
/**
* Generate a fingerprint for a file which will be used the store the endpoint
*
* @param {File} file
* @param {Object} options
*/
export default function fingerprint(file, options) {
if (Buffer.isBuffer(file)) {
// create MD5 hash for buffer type
const blockSize = 64 * 1024 // 64kb
const content = file.slice(0, Math.min(blockSize, file.length))
const hash = createHash('md5').update(content).digest('hex')
const ret = ['node-buffer', hash, file.length, options.endpoint].join('-')
return Promise.resolve(ret)
}
if (file instanceof fs.ReadStream && file.path != null) {
return new Promise((resolve, reject) => {
const name = path.resolve(file.path)
fs.stat(file.path, (err, info) => {
if (err) {
reject(err)
return
}
const ret = ['node-file', name, info.size, info.mtime.getTime(), options.endpoint].join('-')
resolve(ret)
})
})
}
// fingerprint cannot be computed for file input type
return Promise.resolve(null)
}

View file

@ -0,0 +1,212 @@
// The url.parse method is superseeded by the url.URL constructor,
// but it is still included in Node.js
import * as http from 'http'
import * as https from 'https'
import { Readable, Transform } from 'stream'
import { parse } from 'url'
import throttle from 'lodash.throttle'
export default class NodeHttpStack {
constructor(requestOptions = {}) {
this._requestOptions = requestOptions
}
createRequest(method, url) {
return new Request(method, url, this._requestOptions)
}
getName() {
return 'NodeHttpStack'
}
}
class Request {
constructor(method, url, options) {
this._method = method
this._url = url
this._headers = {}
this._request = null
this._progressHandler = () => {}
this._requestOptions = options || {}
}
getMethod() {
return this._method
}
getURL() {
return this._url
}
setHeader(header, value) {
this._headers[header] = value
}
getHeader(header) {
return this._headers[header]
}
setProgressHandler(progressHandler) {
this._progressHandler = progressHandler
}
send(body = null) {
return new Promise((resolve, reject) => {
const options = {
...parse(this._url),
...this._requestOptions,
method: this._method,
headers: {
...(this._requestOptions.headers || {}),
...this._headers,
},
}
if (body?.size) {
options.headers['Content-Length'] = body.size
}
const httpModule = options.protocol === 'https:' ? https : http
this._request = httpModule.request(options)
const req = this._request
req.on('response', (res) => {
const resChunks = []
res.on('data', (data) => {
resChunks.push(data)
})
res.on('end', () => {
const responseText = Buffer.concat(resChunks).toString('utf8')
resolve(new Response(res, responseText))
})
})
req.on('error', (err) => {
reject(err)
})
if (body instanceof Readable) {
// Readable stream are piped through a PassThrough instance, which
// counts the number of bytes passed through. This is used, for example,
// when an fs.ReadStream is provided to tus-js-client.
body.pipe(new ProgressEmitter(this._progressHandler)).pipe(req)
} else if (body instanceof Uint8Array) {
// For Buffers and Uint8Arrays (in Node.js all buffers are instances of Uint8Array),
// we write chunks of the buffer to the stream and use that to track the progress.
// This is used when either a Buffer or a normal readable stream is provided
// to tus-js-client.
writeBufferToStreamWithProgress(req, body, this._progressHandler)
} else {
req.end(body)
}
})
}
abort() {
if (this._request !== null) this._request.abort()
return Promise.resolve()
}
getUnderlyingObject() {
return this._request
}
}
class Response {
constructor(res, body) {
this._response = res
this._body = body
}
getStatus() {
return this._response.statusCode
}
getHeader(header) {
return this._response.headers[header.toLowerCase()]
}
getBody() {
return this._body
}
getUnderlyingObject() {
return this._response
}
}
// ProgressEmitter is a simple PassThrough-style transform stream which keeps
// track of the number of bytes which have been piped through it and will
// invoke the `onprogress` function whenever new number are available.
class ProgressEmitter extends Transform {
constructor(onprogress) {
super()
// The _onprogress property will be invoked, whenever a chunk is piped
// through this transformer. Since chunks are usually quite small (64kb),
// these calls can occur frequently, especially when you have a good
// connection to the remote server. Therefore, we are throtteling them to
// prevent accessive function calls.
this._onprogress = throttle(onprogress, 100, {
leading: true,
trailing: false,
})
this._position = 0
}
_transform(chunk, _encoding, callback) {
this._position += chunk.length
this._onprogress(this._position)
callback(null, chunk)
}
}
// writeBufferToStreamWithProgress writes chunks from `source` (either a
// Buffer or Uint8Array) to the readable stream `stream`.
// The size of the chunk depends on the stream's highWaterMark to fill the
// stream's internal buffer as best as possible.
// If the internal buffer is full, the callback `onprogress` will be invoked
// to notify about the write progress. Writing will be resumed once the internal
// buffer is empty, as indicated by the emitted `drain` event.
// See https://nodejs.org/docs/latest/api/stream.html#buffering for more details
// on the buffering behavior of streams.
const writeBufferToStreamWithProgress = (stream, source, onprogress) => {
onprogress = throttle(onprogress, 100, {
leading: true,
trailing: false,
})
let offset = 0
function writeNextChunk() {
// Take at most the amount of bytes from highWaterMark. This should fill the streams
// internal buffer already.
const chunkSize = Math.min(stream.writableHighWaterMark, source.length - offset)
// Note: We use subarray instead of slice because it works without copying data for
// Buffers and Uint8Arrays.
const chunk = source.subarray(offset, offset + chunkSize)
offset += chunk.length
// `write` returns true if the internal buffer is not full and we should write more.
// If the stream is destroyed because the request is aborted, it will return false
// and no 'drain' event is emitted, so won't continue writing data.
const canContinue = stream.write(chunk)
if (!canContinue) {
// If the buffer is full, wait for the 'drain' event to write more data.
stream.once('drain', writeNextChunk)
onprogress(offset)
} else if (offset < source.length) {
// If there's still data to write and the buffer is not full, write next chunk.
writeNextChunk()
} else {
// If all data has been written, close the stream if needed, and emit a 'finish' event.
stream.end()
}
}
// Start writing the first chunk.
writeNextChunk()
}

47
frontend/node_modules/tus-js-client/lib/node/index.js generated vendored Normal file
View file

@ -0,0 +1,47 @@
import DetailedError from '../error.js'
import { enableDebugLog } from '../logger.js'
import NoopUrlStorage from '../noopUrlStorage.js'
import BaseUpload from '../upload.js'
import FileReader from './fileReader.js'
import fingerprint from './fileSignature.js'
import DefaultHttpStack from './httpStack.js'
import StreamSource from './sources/StreamSource.js'
import { FileUrlStorage, canStoreURLs } from './urlStorage.js'
const defaultOptions = {
...BaseUpload.defaultOptions,
httpStack: new DefaultHttpStack(),
fileReader: new FileReader(),
urlStorage: new NoopUrlStorage(),
fingerprint,
}
class Upload extends BaseUpload {
constructor(file = null, options = {}) {
options = { ...defaultOptions, ...options }
super(file, options)
}
static terminate(url, options = {}) {
options = { ...defaultOptions, ...options }
return BaseUpload.terminate(url, options)
}
}
// The Node.js environment does not have restrictions which may cause
// tus-js-client not to function.
const isSupported = true
export {
Upload,
defaultOptions,
isSupported,
// Make FileUrlStorage module available as it will not be set by default.
FileUrlStorage,
canStoreURLs,
enableDebugLog,
DefaultHttpStack,
DetailedError,
StreamSource,
}

View file

@ -0,0 +1,15 @@
export default class BufferSource {
constructor(buffer) {
this._buffer = buffer
this.size = buffer.length
}
slice(start, end) {
const value = this._buffer.slice(start, end)
value.size = value.length
const done = end >= this.size
return Promise.resolve({ value, done })
}
close() {}
}

View file

@ -0,0 +1,57 @@
import { createReadStream, promises as fsPromises } from 'fs'
export default async function getFileSource(stream) {
const path = stream.path.toString()
const { size } = await fsPromises.stat(path)
// The fs.ReadStream might be configured to not read from the beginning
// to the end, but instead from a slice in between. In this case, we consider
// that range to indicate the actual uploadable size.
// This happens, for example, if a fs.ReadStream is used with the `parallelUploads`
// option. There, the ReadStream is sliced into multiple ReadStreams to fit the number
// of number of `parallelUploads`. Each ReadStream has `start` and `end` set.
// Note: `stream.end` is Infinity by default, so we need the check `isFinite`.
// Note: `stream.end` is treated inclusively, so we need to add 1 here.
// See the comment in slice() for more context.
const start = stream.start ?? 0
const end = Number.isFinite(stream.end) ? stream.end + 1 : size
const actualSize = end - start
return new FileSource(stream, path, actualSize)
}
class FileSource {
constructor(stream, path, size) {
this._stream = stream
this._path = path
this.size = size
}
slice(start, end) {
// The fs.ReadStream might be configured to not read from the beginning,
// but instead start at a different offset. The start value from the caller
// does not include the offset, so we need to add this offset to our range later.
// This happens, for example, if a fs.ReadStream is used with the `parallelUploads`
// option. First, the ReadStream is sliced into multiple ReadStreams to fit the number
// of number of `parallelUploads`. Each ReadStream has `start` set.
const offset = this._stream.start ?? 0
const stream = createReadStream(this._path, {
start: offset + start,
// The `end` option for createReadStream is treated inclusively
// (see https://nodejs.org/api/fs.html#fs_fs_createreadstream_path_options).
// However, the Buffer#slice(start, end) and also our Source#slice(start, end)
// method treat the end range exclusively, so we have to subtract 1.
// This prevents an off-by-one error when reporting upload progress.
end: offset + end - 1,
autoClose: true,
})
stream.size = Math.min(end - start, this.size)
const done = stream.size >= this.size
return Promise.resolve({ value: stream, done })
}
close() {
this._stream.destroy()
}
}

View file

@ -0,0 +1,123 @@
/**
* readChunk reads a chunk with the given size from the given
* stream. It will wait until enough data is available to satisfy
* the size requirement before resolving.
* Only if the stream ends, the function may resolve with a buffer
* smaller than the size argument.
* Note that we rely on the stream behaving as Node.js documents:
* https://nodejs.org/api/stream.html#readablereadsize
*/
async function readChunk(stream, size) {
return new Promise((resolve, reject) => {
const onError = (err) => {
stream.off('readable', onReadable)
reject(err)
}
const onReadable = () => {
// TODO: Node requires size to be less than 1GB. Add a validation for that
const chunk = stream.read(size)
if (chunk !== null) {
stream.off('error', onError)
stream.off('readable', onReadable)
resolve(chunk)
}
}
stream.once('error', onError)
stream.on('readable', onReadable)
})
}
/**
* StreamSource provides an interface to obtain slices of a Readable stream for
* various ranges.
* It will buffer read data, to allow for following pattern:
* - Call slice(startA, endA) will buffer the data of the requested range
* - Call slice(startB, endB) will return data from the buffer if startA <= startB <= endA.
* If endB > endA, it will also consume new data from the stream.
* Note that it is forbidden to call with startB < startA or startB > endA. In other words,
* the slice calls cannot seek back and must not skip data from the stream.
*/
export default class StreamSource {
constructor(stream) {
this._stream = stream
// Setting the size to null indicates that we have no calculation available
// for how much data this stream will emit requiring the user to specify
// it manually (see the `uploadSize` option).
this.size = null
this._buf = Buffer.alloc(0)
this._bufPos = 0
this._ended = false
this._error = null
stream.pause()
stream.on('end', () => {
this._ended = true
})
stream.on('error', (err) => {
this._error = err
})
}
async slice(start, end) {
// Fail fast if the caller requests a proportion of the data which is not
// available any more.
if (start < this._bufPos) {
throw new Error('cannot slice from position which we already seeked away')
}
if (start > this._bufPos + this._buf.length) {
throw new Error('slice start is outside of buffer (currently not implemented)')
}
if (this._error) {
throw this._error
}
let returnBuffer
// Always attempt to drain the buffer first, even if this means that we
// return less data than the caller requested.
if (start < this._bufPos + this._buf.length) {
const bufStart = start - this._bufPos
const bufEnd = Math.min(this._buf.length, end - this._bufPos)
returnBuffer = this._buf.slice(bufStart, bufEnd)
} else {
returnBuffer = Buffer.alloc(0)
}
// If the stream has ended already, read calls would not finish, so return early here.
if (this._ended) {
returnBuffer.size = returnBuffer.length
return { value: returnBuffer, done: true }
}
// If we could not satisfy the slice request from the buffer only, read more data from
// the stream and add it to the buffer.
const requestedSize = end - start
if (requestedSize > returnBuffer.length) {
// Note: We assume that the stream returns not more than the requested size.
const newChunk = await readChunk(this._stream, requestedSize - returnBuffer.length)
// Append the new chunk to the buffer
returnBuffer = Buffer.concat([returnBuffer, newChunk])
}
// Important: Store the read data, so consecutive slice calls can access the same data.
this._buf = returnBuffer
this._bufPos = start
returnBuffer.size = returnBuffer.length
return { value: returnBuffer, done: this._ended }
}
close() {
this._stream.destroy()
}
}

View file

@ -0,0 +1,156 @@
import { readFile, writeFile } from 'fs'
import combineErrors from 'combine-errors'
import * as lockfile from 'proper-lockfile'
export const canStoreURLs = true
export class FileUrlStorage {
constructor(filePath) {
this.path = filePath
}
findAllUploads() {
return new Promise((resolve, reject) => {
this._getItems('tus::', (err, results) => {
if (err) reject(err)
else resolve(results)
})
})
}
findUploadsByFingerprint(fingerprint) {
return new Promise((resolve, reject) => {
this._getItems(`tus::${fingerprint}`, (err, results) => {
if (err) reject(err)
else resolve(results)
})
})
}
removeUpload(urlStorageKey) {
return new Promise((resolve, reject) => {
this._removeItem(urlStorageKey, (err) => {
if (err) reject(err)
else resolve()
})
})
}
addUpload(fingerprint, upload) {
const id = Math.round(Math.random() * 1e12)
const key = `tus::${fingerprint}::${id}`
return new Promise((resolve, reject) => {
this._setItem(key, upload, (err) => {
if (err) reject(err)
else resolve(key)
})
})
}
_setItem(key, value, cb) {
lockfile
.lock(this.path, this._lockfileOptions())
.then((release) => {
cb = this._releaseAndCb(release, cb)
this._getData((err, data) => {
if (err) {
cb(err)
return
}
data[key] = value
this._writeData(data, (err2) => cb(err2))
})
})
.catch(cb)
}
_getItems(prefix, cb) {
this._getData((err, data) => {
if (err) {
cb(err)
return
}
const results = Object.keys(data)
.filter((key) => key.startsWith(prefix))
.map((key) => {
const obj = data[key]
obj.urlStorageKey = key
return obj
})
cb(null, results)
})
}
_removeItem(key, cb) {
lockfile
.lock(this.path, this._lockfileOptions())
.then((release) => {
cb = this._releaseAndCb(release, cb)
this._getData((err, data) => {
if (err) {
cb(err)
return
}
delete data[key]
this._writeData(data, (err2) => cb(err2))
})
})
.catch(cb)
}
_lockfileOptions() {
return {
realpath: false,
retries: {
retries: 5,
minTimeout: 20,
},
}
}
_releaseAndCb(release, cb) {
return (err) => {
if (err) {
release()
.then(() => cb(err))
.catch((releaseErr) => cb(combineErrors([err, releaseErr])))
return
}
release().then(cb).catch(cb)
}
}
_writeData(data, cb) {
const opts = {
encoding: 'utf8',
mode: 0o660,
flag: 'w',
}
writeFile(this.path, JSON.stringify(data), opts, (err) => cb(err))
}
_getData(cb) {
readFile(this.path, 'utf8', (err, data) => {
if (err) {
// return empty data if file does not exist
if (err.code === 'ENOENT') cb(null, {})
else cb(err)
return
}
try {
data = !data.trim().length ? {} : JSON.parse(data)
} catch (error) {
cb(error)
return
}
cb(null, data)
})
}
}

View file

@ -0,0 +1,17 @@
export default class NoopUrlStorage {
listAllUploads() {
return Promise.resolve([])
}
findUploadsByFingerprint(_fingerprint) {
return Promise.resolve([])
}
removeUpload(_urlStorageKey) {
return Promise.resolve()
}
addUpload(_fingerprint, _upload) {
return Promise.resolve(null)
}
}

1120
frontend/node_modules/tus-js-client/lib/upload.js generated vendored Normal file

File diff suppressed because it is too large Load diff

19
frontend/node_modules/tus-js-client/lib/uuid.js generated vendored Normal file
View file

@ -0,0 +1,19 @@
/**
* Generate a UUID v4 based on random numbers. We intentioanlly use the less
* secure Math.random function here since the more secure crypto.getRandomNumbers
* is not available on all platforms.
* This is not a problem for us since we use the UUID only for generating a
* request ID, so we can correlate server logs to client errors.
*
* This function is taken from following site:
* https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript
*
* @return {string} The generate UUID
*/
export default function uuid() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
const r = (Math.random() * 16) | 0
const v = c === 'x' ? r : (r & 0x3) | 0x8
return v.toString(16)
})
}

85
frontend/node_modules/tus-js-client/package.json generated vendored Normal file
View file

@ -0,0 +1,85 @@
{
"name": "tus-js-client",
"version": "4.3.1",
"description": "A pure JavaScript client for the tus resumable upload protocol",
"main": "lib.es5/node/index.js",
"module": "lib.esm/node/index.js",
"files": ["lib/**/*", "lib.es5/**/*", "lib.esm/**/*", "dist/**/*", "lib/index.d.ts"],
"browser": {
"./lib.es5/node/index.js": "./lib.es5/browser/index.js",
"./lib.esm/node/index.js": "./lib.esm/browser/index.js",
"./lib/node/index.js": "./lib/browser/index.js"
},
"types": "./lib/index.d.ts",
"engines": {
"node": ">=18"
},
"repository": {
"type": "git",
"url": "https://github.com/tus/tus-js-client.git"
},
"keywords": ["tus", "resumable", "upload", "protocol", "progress", "file", "browser"],
"license": "MIT",
"bugs": {
"url": "https://github.com/tus/tus-js-client/issues"
},
"homepage": "https://github.com/tus/tus-js-client",
"devDependencies": {
"@babel/cli": "^7.0.0",
"@babel/core": "^7.13.10",
"@babel/helper-get-function-arity": "^7.16.7",
"@babel/plugin-syntax-jsx": "^7.12.13",
"@babel/plugin-transform-modules-commonjs": "^7.9.6",
"@babel/preset-env": "^7.0.0",
"@biomejs/biome": "^1.7.3",
"axios": "^0.28.0",
"babelify": "^10.0.0",
"browserify": "^17.0.0",
"chokidar-cli": "^3.0.0",
"exorcist": "^2.0.0",
"into-stream": "^6.0.0",
"jasmine": "^5.1.0",
"jasmine-ajax": "^4.0.0",
"jasmine-core": "^5.1.1",
"karma": "^6.4.0",
"karma-browserstack-launcher": "^1.6.0",
"karma-chrome-launcher": "^3.1.1",
"karma-jasmine": "^5.1.0",
"npm-run-all": "^4.1.5",
"puppeteer": "^22.3.0",
"regenerator-runtime": "^0.14.0",
"temp": "^0.9.4",
"throttle": "^1.0.3",
"tsd": "0.31.0",
"uglify-js": "^3.9.2"
},
"dependencies": {
"buffer-from": "^1.1.2",
"combine-errors": "^3.0.3",
"is-stream": "^2.0.0",
"js-base64": "^3.7.2",
"lodash.throttle": "^4.1.1",
"proper-lockfile": "^4.1.2",
"url-parse": "^1.5.7"
},
"scripts": {
"clean": "rm -rf dist lib.es5 lib.esm",
"build-test-bundle": "mkdir -p dist && browserify test/spec/browser-index.js -t [ babelify --plugins [ @babel/transform-modules-commonjs ] ] -d -o dist/browser-test-bundle.js",
"build-bundle": "mkdir -p dist && browserify lib/browser/index.js -t [ babelify --plugins [ @babel/transform-modules-commonjs ] ] -s tus -d | exorcist ./dist/tus.js.map > dist/tus.js",
"build-minify": "uglifyjs ./dist/tus.js -o ./dist/tus.min.js --compress --mangle --source-map \"content='./dist/tus.js.map',url='tus.min.js.map'\"",
"build-transpile-esm": "babel -d lib.esm/ lib/",
"build-transpile-cjs": "babel --no-babelrc --plugins @babel/transform-modules-commonjs -d lib.es5/ lib.esm/",
"build-transpile": "npm-run-all build-transpile-esm build-transpile-cjs",
"build": "npm-run-all clean build-bundle build-minify build-transpile build-test-bundle",
"watch-bundle": "chokidar --initial \"lib/**/*\" -c \"npm run build-bundle\"",
"watch-test-bundle": "chokidar --initial \"test/spec/**/*\" -c \"npm run build-test-bundle\"",
"watch-transpile": "chokidar --initial \"lib/**/*\" -c \"npm run build-transpile\"",
"watch": "npm-run-all --parallel watch-*",
"test-puppeteer": "karma start test/karma/puppeteer.conf.js",
"test-browserstack": "karma start test/karma/browserstack.conf.js",
"test-node": "jasmine test/spec/node-index.js",
"test-types": "tsd",
"lint": "biome check .",
"fix": "biome check --apply ."
}
}