瀏覽代碼

@uppy/tus: refactor to ESM (#3724)

Antoine du Hamel 2 年之前
父節點
當前提交
c6e4fb5deb

+ 1 - 0
.eslintrc.js

@@ -216,6 +216,7 @@ module.exports = {
         'packages/@uppy/status-bar/src/**/*.js',
         'packages/@uppy/svelte/src/**/*.js',
         'packages/@uppy/svelte/rollup.config.js',
+        'packages/@uppy/tus/src/**/*.js',
         'packages/@uppy/url/src/**/*.js',
         'packages/@uppy/vue/src/**/*.js',
         'packages/@uppy/webcam/src/**/*.js',

+ 2 - 0
packages/@uppy/tus/package.json

@@ -5,6 +5,7 @@
   "license": "MIT",
   "main": "lib/index.js",
   "types": "types/index.d.ts",
+  "type": "module",
   "keywords": [
     "file uploader",
     "uppy",
@@ -27,6 +28,7 @@
     "tus-js-client": "^2.1.1"
   },
   "peerDependencies": {
+    "@jest/globals": "^27.4.2",
     "@uppy/core": "workspace:^"
   }
 }

+ 2 - 2
packages/@uppy/tus/src/getFingerprint.js

@@ -1,4 +1,4 @@
-const tus = require('tus-js-client')
+import tus from 'tus-js-client'
 
 function isCordova () {
   return typeof window !== 'undefined' && (
@@ -22,7 +22,7 @@ function isReactNative () {
 //
 // For React Native and Cordova, we let tus-js-client’s default
 // fingerprint handling take charge.
-module.exports = function getFingerprint (uppyFileObj) {
+export default function getFingerprint (uppyFileObj) {
   return (file, options) => {
     if (isCordova() || isReactNative()) {
       return tus.defaultOptions.fingerprint(file, options)

+ 33 - 36
packages/@uppy/tus/src/index.js

@@ -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
+    }
   }
 
   /**

+ 3 - 2
packages/@uppy/tus/src/index.test.js

@@ -1,5 +1,6 @@
-const Core = require('@uppy/core')
-const Tus = require('.')
+import { describe, expect, it } from '@jest/globals'
+import Core from '@uppy/core'
+import Tus from './index.js'
 
 describe('Tus', () => {
   it('Throws errors if autoRetry option is true', () => {

+ 1 - 0
yarn.lock

@@ -10181,6 +10181,7 @@ __metadata:
     "@uppy/utils": "workspace:^"
     tus-js-client: ^2.1.1
   peerDependencies:
+    "@jest/globals": ^27.4.2
     "@uppy/core": "workspace:^"
   languageName: unknown
   linkType: soft