|
@@ -1,15 +1,17 @@
|
|
|
-const BasePlugin = require('@uppy/core/lib/BasePlugin')
|
|
|
-const tus = require('tus-js-client')
|
|
|
-const { Provider, RequestClient, Socket } = require('@uppy/companion-client')
|
|
|
-const emitSocketProgress = require('@uppy/utils/lib/emitSocketProgress')
|
|
|
-const getSocketHost = require('@uppy/utils/lib/getSocketHost')
|
|
|
-const settle = require('@uppy/utils/lib/settle')
|
|
|
-const EventTracker = require('@uppy/utils/lib/EventTracker')
|
|
|
-const NetworkError = require('@uppy/utils/lib/NetworkError')
|
|
|
-const isNetworkError = require('@uppy/utils/lib/isNetworkError')
|
|
|
-const { RateLimitedQueue } = require('@uppy/utils/lib/RateLimitedQueue')
|
|
|
-const hasProperty = require('@uppy/utils/lib/hasProperty')
|
|
|
-const getFingerprint = require('./getFingerprint')
|
|
|
+import BasePlugin from '@uppy/core/lib/BasePlugin'
|
|
|
+import tus from 'tus-js-client'
|
|
|
+import { Provider, RequestClient, Socket } from '@uppy/companion-client'
|
|
|
+import emitSocketProgress from '@uppy/utils/lib/emitSocketProgress'
|
|
|
+import getSocketHost from '@uppy/utils/lib/getSocketHost'
|
|
|
+import settle from '@uppy/utils/lib/settle'
|
|
|
+import EventTracker from '@uppy/utils/lib/EventTracker'
|
|
|
+import NetworkError from '@uppy/utils/lib/NetworkError'
|
|
|
+import isNetworkError from '@uppy/utils/lib/isNetworkError'
|
|
|
+import { RateLimitedQueue } from '@uppy/utils/lib/RateLimitedQueue'
|
|
|
+import hasProperty from '@uppy/utils/lib/hasProperty'
|
|
|
+import getFingerprint from './getFingerprint.js'
|
|
|
+
|
|
|
+import packageJson from '../package.json'
|
|
|
|
|
|
/** @typedef {import('..').TusOptions} TusOptions */
|
|
|
/** @typedef {import('tus-js-client').UploadOptions} RawTusOptions */
|
|
@@ -50,9 +52,8 @@ const tusDefaultOptions = {
|
|
|
/**
|
|
|
* Tus resumable file uploader
|
|
|
*/
|
|
|
-module.exports = class Tus extends BasePlugin {
|
|
|
- // eslint-disable-next-line global-require
|
|
|
- static VERSION = require('../package.json').version
|
|
|
+export default class Tus extends BasePlugin {
|
|
|
+ static VERSION = packageJson.version
|
|
|
|
|
|
#retryDelayIterator
|
|
|
|
|
@@ -173,8 +174,6 @@ module.exports = class Tus extends BasePlugin {
|
|
|
* up a spot in the queue.
|
|
|
*
|
|
|
* @param {UppyFile} file for use with upload
|
|
|
- * @param {number} current file in a queue
|
|
|
- * @param {number} total number of files in a queue
|
|
|
* @returns {Promise<void>}
|
|
|
*/
|
|
|
upload (file) {
|
|
@@ -184,6 +183,7 @@ module.exports = class Tus extends BasePlugin {
|
|
|
return new Promise((resolve, reject) => {
|
|
|
let queuedRequest
|
|
|
let qRequest
|
|
|
+ let upload
|
|
|
|
|
|
this.uppy.emit('upload-started', file)
|
|
|
|
|
@@ -239,6 +239,7 @@ module.exports = class Tus extends BasePlugin {
|
|
|
|
|
|
const xhr = err.originalRequest ? err.originalRequest.getUnderlyingObject() : null
|
|
|
if (isNetworkError(xhr)) {
|
|
|
+ // eslint-disable-next-line no-param-reassign
|
|
|
err = new NetworkError(err, xhr)
|
|
|
}
|
|
|
|
|
@@ -317,6 +318,7 @@ module.exports = class Tus extends BasePlugin {
|
|
|
|
|
|
const copyProp = (obj, srcProp, destProp) => {
|
|
|
if (hasProperty(obj, srcProp) && !hasProperty(obj, destProp)) {
|
|
|
+ // eslint-disable-next-line no-param-reassign
|
|
|
obj[destProp] = obj[srcProp]
|
|
|
}
|
|
|
}
|
|
@@ -337,7 +339,7 @@ module.exports = class Tus extends BasePlugin {
|
|
|
|
|
|
uploadOptions.metadata = meta
|
|
|
|
|
|
- const upload = new tus.Upload(file.data, uploadOptions)
|
|
|
+ upload = new tus.Upload(file.data, uploadOptions)
|
|
|
this.uploaders[file.id] = upload
|
|
|
this.uploaderEvents[file.id] = new EventTracker(this.uppy)
|
|
|
|
|
@@ -411,11 +413,9 @@ module.exports = class Tus extends BasePlugin {
|
|
|
|
|
|
/**
|
|
|
* @param {UppyFile} file for use with upload
|
|
|
- * @param {number} current file in a queue
|
|
|
- * @param {number} total number of files in a queue
|
|
|
* @returns {Promise<void>}
|
|
|
*/
|
|
|
- uploadRemote (file) {
|
|
|
+ async uploadRemote (file) {
|
|
|
this.resetUploaderReferences(file.id)
|
|
|
|
|
|
const opts = { ...this.opts }
|
|
@@ -428,15 +428,16 @@ module.exports = class Tus extends BasePlugin {
|
|
|
this.uppy.log(file.remote.url)
|
|
|
|
|
|
if (file.serverToken) {
|
|
|
- return this.connectToServerSocket(file)
|
|
|
+ await this.connectToServerSocket(file)
|
|
|
+ return
|
|
|
}
|
|
|
|
|
|
- return new Promise((resolve, reject) => {
|
|
|
- const Client = file.remote.providerOptions.provider ? Provider : RequestClient
|
|
|
- const client = new Client(this.uppy, file.remote.providerOptions)
|
|
|
+ const Client = file.remote.providerOptions.provider ? Provider : RequestClient
|
|
|
+ const client = new Client(this.uppy, file.remote.providerOptions)
|
|
|
|
|
|
+ try {
|
|
|
// !! cancellation is NOT supported at this stage yet
|
|
|
- client.post(file.remote.url, {
|
|
|
+ const res = await client.post(file.remote.url, {
|
|
|
...file.remote.body,
|
|
|
endpoint: opts.endpoint,
|
|
|
uploadUrl: opts.uploadUrl,
|
|
@@ -444,17 +445,13 @@ module.exports = class Tus extends BasePlugin {
|
|
|
size: file.data.size,
|
|
|
headers: opts.headers,
|
|
|
metadata: file.meta,
|
|
|
- }).then((res) => {
|
|
|
- this.uppy.setFileState(file.id, { serverToken: res.token })
|
|
|
- file = this.uppy.getFile(file.id)
|
|
|
- return this.connectToServerSocket(file)
|
|
|
- }).then(() => {
|
|
|
- resolve()
|
|
|
- }).catch((err) => {
|
|
|
- this.uppy.emit('upload-error', file, err)
|
|
|
- reject(err)
|
|
|
})
|
|
|
- })
|
|
|
+ this.uppy.setFileState(file.id, { serverToken: res.token })
|
|
|
+ await this.connectToServerSocket(this.uppy.getFile(file.id))
|
|
|
+ } catch (err) {
|
|
|
+ this.uppy.emit('upload-error', file, err)
|
|
|
+ throw err
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|