UNPKG

100 kBSource Map (JSON)View Raw
1{"version":3,"sources":["index.js"],"names":["Translator","require","ee","cuid","throttle","prettierBytes","match","DefaultStore","getFileType","getFileNameAndExtension","generateFileID","findIndex","supportsUploadProgress","justErrorsLogger","debugLogger","Plugin","RestrictionError","args","isRestriction","Error","Uppy","opts","defaultLocale","strings","addBulkFilesFailed","youCanOnlyUploadX","youHaveToAtLeastSelectX","exceedsSize2","exceedsSize","inferiorSize","youCanOnlyUploadFileTypes","noNewAlreadyUploading","noDuplicates","companionError","companionUnauthorizeHint","failedToUpload","noInternetConnection","connectedToInternet","noFilesFound","selectX","selectAllFilesFromFolderNamed","unselectAllFilesFromFolderNamed","selectFileNamed","unselectFileNamed","openFolderNamed","cancel","logOut","filter","resetFilter","loading","authenticateWithTitle","authenticateWith","searchImages","enterTextToSearch","backToSearch","emptyFolderAdded","folderAdded","defaultOptions","id","autoProceed","allowMultipleUploads","debug","restrictions","maxFileSize","minFileSize","maxTotalFileSize","maxNumberOfFiles","minNumberOfFiles","allowedFileTypes","meta","onBeforeFileAdded","currentFile","files","onBeforeUpload","store","logger","infoTimeout","log","constructor","VERSION","Array","isArray","TypeError","i18nInit","plugins","getState","bind","getPlugin","setFileMeta","setFileState","info","hideInfo","addFile","removeFile","pauseResume","validateRestrictions","_calculateProgress","leading","trailing","updateOnlineStatus","resetProgress","pauseAll","resumeAll","retryAll","cancelAll","retryUpload","upload","emitter","on","off","once","emit","preProcessors","uploaders","postProcessors","setState","currentUploads","allowNewUpload","capabilities","uploadProgress","individualCancellation","resumableUploads","totalProgress","isHidden","type","message","_storeUnsubscribe","subscribe","prevState","nextState","patch","updateAll","window","_addListeners","event","callback","state","iteratePlugins","plugin","update","fileID","translator","locale","i18n","translate","i18nArray","translateArray","setOptions","newOpts","setMeta","defaultProgress","percentage","bytesUploaded","uploadComplete","uploadStarted","updatedFiles","Object","keys","forEach","updatedFile","progress","addPreProcessor","fn","push","removePreProcessor","i","indexOf","splice","addPostProcessor","removePostProcessor","addUploader","removeUploader","data","updatedMeta","newMeta","getFile","getFiles","map","file","_checkRestrictions","result","err","reason","length","smart_count","isCorrectFileType","some","replace","extension","toLowerCase","substr","allowedFileTypesString","join","types","size","totalFilesSize","backwardsCompat","_checkMinNumberOfFiles","_showOrLogErrorAndThrow","showInformer","throwErr","details","logMessageWithDetails","_assertNewUploadAllowed","_checkAndCreateFileStateObject","fileType","onBeforeFileAddedResult","fileName","name","split","fileExtension","isRemote","isFinite","newFile","source","bytesTotal","remote","preview","filesArray","_startIfAutoProceed","scheduledAutoProceed","setTimeout","catch","stack","addFiles","fileDescriptors","newFiles","errors","subError","removeFiles","fileIDs","updatedUploads","removedFiles","create","fileIsNotRemoved","uploadFileID","undefined","uploadsToRemove","uploadID","newFileIDs","stateUpdate","error","_calculateTotalProgress","removedFileIDs","wasPaused","isPaused","inProgressUpdatedFiles","filesToRetry","Promise","resolve","successful","failed","_createUpload","forceAllowNewUpload","_runUpload","reset","canHavePercentage","Math","round","inProgress","preprocess","postprocess","sizedFiles","unsizedFiles","progressMax","currentProgress","reduce","acc","totalSize","averageSize","uploadedSize","errorMsg","response","newError","Date","now","uploadResp","mode","uploadURL","addEventListener","online","navigator","onLine","wasOffline","getID","use","msg","pluginId","existsPluginAlready","install","foundPlugin","method","pluginType","removePlugin","instance","uninstall","list","slice","index","item","updatedState","close","duration","isComplexMessage","clearTimeout","infoTimeoutID","newInfo","warn","run","restore","_removeUpload","reject","step","_getUpload","addResultData","currentUpload","uploadData","restoreStep","steps","lastStep","then","updatedUpload","uploader","onBeforeUploadResult","currentlyUploadingFiles","prev","curr","concat","waitingFileIDs","module","exports"],"mappings":"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","sourcesContent":["const Translator = require('@uppy/utils/lib/Translator')\nconst ee = require('namespace-emitter')\nconst cuid = require('cuid')\nconst throttle = require('lodash.throttle')\nconst prettierBytes = require('@transloadit/prettier-bytes')\nconst match = require('mime-match')\nconst DefaultStore = require('@uppy/store-default')\nconst getFileType = require('@uppy/utils/lib/getFileType')\nconst getFileNameAndExtension = require('@uppy/utils/lib/getFileNameAndExtension')\nconst generateFileID = require('@uppy/utils/lib/generateFileID')\nconst findIndex = require('@uppy/utils/lib/findIndex')\nconst supportsUploadProgress = require('./supportsUploadProgress')\nconst { justErrorsLogger, debugLogger } = require('./loggers')\nconst Plugin = require('./Plugin')\n// Exported from here.\nclass RestrictionError extends Error {\n constructor (...args) {\n super(...args)\n this.isRestriction = true\n }\n}\n\n/**\n * Uppy Core module.\n * Manages plugins, state updates, acts as an event bus,\n * adds/removes files and metadata.\n */\nclass Uppy {\n static VERSION = require('../package.json').version\n\n /**\n * Instantiate Uppy\n *\n * @param {object} opts — Uppy options\n */\n constructor (opts) {\n this.defaultLocale = {\n strings: {\n addBulkFilesFailed: {\n 0: 'Failed to add %{smart_count} file due to an internal error',\n 1: 'Failed to add %{smart_count} files due to internal errors',\n },\n youCanOnlyUploadX: {\n 0: 'You can only upload %{smart_count} file',\n 1: 'You can only upload %{smart_count} files',\n },\n youHaveToAtLeastSelectX: {\n 0: 'You have to select at least %{smart_count} file',\n 1: 'You have to select at least %{smart_count} files',\n },\n // The default `exceedsSize2` string only combines the `exceedsSize` string (%{backwardsCompat}) with the size.\n // Locales can override `exceedsSize2` to specify a different word order. This is for backwards compat with\n // Uppy 1.9.x and below which did a naive concatenation of `exceedsSize2 + size` instead of using a locale-specific\n // substitution.\n // TODO: In 2.0 `exceedsSize2` should be removed in and `exceedsSize` updated to use substitution.\n exceedsSize2: '%{backwardsCompat} %{size}',\n exceedsSize: 'This file exceeds maximum allowed size of',\n inferiorSize: 'This file is smaller than the allowed size of %{size}',\n youCanOnlyUploadFileTypes: 'You can only upload: %{types}',\n noNewAlreadyUploading: 'Cannot add new files: already uploading',\n noDuplicates: 'Cannot add the duplicate file \\'%{fileName}\\', it already exists',\n companionError: 'Connection with Companion failed',\n companionUnauthorizeHint: 'To unauthorize to your %{provider} account, please go to %{url}',\n failedToUpload: 'Failed to upload %{file}',\n noInternetConnection: 'No Internet connection',\n connectedToInternet: 'Connected to the Internet',\n // Strings for remote providers\n noFilesFound: 'You have no files or folders here',\n selectX: {\n 0: 'Select %{smart_count}',\n 1: 'Select %{smart_count}',\n },\n selectAllFilesFromFolderNamed: 'Select all files from folder %{name}',\n unselectAllFilesFromFolderNamed: 'Unselect all files from folder %{name}',\n selectFileNamed: 'Select file %{name}',\n unselectFileNamed: 'Unselect file %{name}',\n openFolderNamed: 'Open folder %{name}',\n cancel: 'Cancel',\n logOut: 'Log out',\n filter: 'Filter',\n resetFilter: 'Reset filter',\n loading: 'Loading...',\n authenticateWithTitle: 'Please authenticate with %{pluginName} to select files',\n authenticateWith: 'Connect to %{pluginName}',\n searchImages: 'Search for images',\n enterTextToSearch: 'Enter text to search for images',\n backToSearch: 'Back to Search',\n emptyFolderAdded: 'No files were added from empty folder',\n folderAdded: {\n 0: 'Added %{smart_count} file from %{folder}',\n 1: 'Added %{smart_count} files from %{folder}',\n },\n },\n }\n\n const defaultOptions = {\n id: 'uppy',\n autoProceed: false,\n allowMultipleUploads: true,\n debug: false,\n restrictions: {\n maxFileSize: null,\n minFileSize: null,\n maxTotalFileSize: null,\n maxNumberOfFiles: null,\n minNumberOfFiles: null,\n allowedFileTypes: null,\n },\n meta: {},\n onBeforeFileAdded: (currentFile, files) => currentFile,\n onBeforeUpload: (files) => files,\n store: DefaultStore(),\n logger: justErrorsLogger,\n infoTimeout: 5000,\n }\n\n // Merge default options with the ones set by user,\n // making sure to merge restrictions too\n this.opts = {\n ...defaultOptions,\n ...opts,\n restrictions: {\n ...defaultOptions.restrictions,\n ...(opts && opts.restrictions),\n },\n }\n\n // Support debug: true for backwards-compatability, unless logger is set in opts\n // opts instead of this.opts to avoid comparing objects — we set logger: justErrorsLogger in defaultOptions\n if (opts && opts.logger && opts.debug) {\n this.log('You are using a custom `logger`, but also set `debug: true`, which uses built-in logger to output logs to console. Ignoring `debug: true` and using your custom `logger`.', 'warning')\n } else if (opts && opts.debug) {\n this.opts.logger = debugLogger\n }\n\n this.log(`Using Core v${this.constructor.VERSION}`)\n\n if (this.opts.restrictions.allowedFileTypes\n && this.opts.restrictions.allowedFileTypes !== null\n && !Array.isArray(this.opts.restrictions.allowedFileTypes)) {\n throw new TypeError('`restrictions.allowedFileTypes` must be an array')\n }\n\n this.i18nInit()\n\n // Container for different types of plugins\n this.plugins = {}\n\n this.getState = this.getState.bind(this)\n this.getPlugin = this.getPlugin.bind(this)\n this.setFileMeta = this.setFileMeta.bind(this)\n this.setFileState = this.setFileState.bind(this)\n this.log = this.log.bind(this)\n this.info = this.info.bind(this)\n this.hideInfo = this.hideInfo.bind(this)\n this.addFile = this.addFile.bind(this)\n this.removeFile = this.removeFile.bind(this)\n this.pauseResume = this.pauseResume.bind(this)\n this.validateRestrictions = this.validateRestrictions.bind(this)\n\n // ___Why throttle at 500ms?\n // - We must throttle at >250ms for superfocus in Dashboard to work well (because animation takes 0.25s, and we want to wait for all animations to be over before refocusing).\n // [Practical Check]: if thottle is at 100ms, then if you are uploading a file, and click 'ADD MORE FILES', - focus won't activate in Firefox.\n // - We must throttle at around >500ms to avoid performance lags.\n // [Practical Check] Firefox, try to upload a big file for a prolonged period of time. Laptop will start to heat up.\n this._calculateProgress = throttle(this._calculateProgress.bind(this), 500, { leading: true, trailing: true })\n\n this.updateOnlineStatus = this.updateOnlineStatus.bind(this)\n this.resetProgress = this.resetProgress.bind(this)\n\n this.pauseAll = this.pauseAll.bind(this)\n this.resumeAll = this.resumeAll.bind(this)\n this.retryAll = this.retryAll.bind(this)\n this.cancelAll = this.cancelAll.bind(this)\n this.retryUpload = this.retryUpload.bind(this)\n this.upload = this.upload.bind(this)\n\n this.emitter = ee()\n this.on = this.on.bind(this)\n this.off = this.off.bind(this)\n this.once = this.emitter.once.bind(this.emitter)\n this.emit = this.emitter.emit.bind(this.emitter)\n\n this.preProcessors = []\n this.uploaders = []\n this.postProcessors = []\n\n this.store = this.opts.store\n this.setState({\n plugins: {},\n files: {},\n currentUploads: {},\n allowNewUpload: true,\n capabilities: {\n uploadProgress: supportsUploadProgress(),\n individualCancellation: true,\n resumableUploads: false,\n },\n totalProgress: 0,\n meta: { ...this.opts.meta },\n info: {\n isHidden: true,\n type: 'info',\n message: '',\n },\n })\n\n this._storeUnsubscribe = this.store.subscribe((prevState, nextState, patch) => {\n this.emit('state-update', prevState, nextState, patch)\n this.updateAll(nextState)\n })\n\n // Exposing uppy object on window for debugging and testing\n if (this.opts.debug && typeof window !== 'undefined') {\n window[this.opts.id] = this\n }\n\n this._addListeners()\n\n // Re-enable if we’ll need some capabilities on boot, like isMobileDevice\n // this._setCapabilities()\n }\n\n // _setCapabilities = () => {\n // const capabilities = {\n // isMobileDevice: isMobileDevice()\n // }\n\n // this.setState({\n // ...this.getState().capabilities,\n // capabilities\n // })\n // }\n\n on (event, callback) {\n this.emitter.on(event, callback)\n return this\n }\n\n off (event, callback) {\n this.emitter.off(event, callback)\n return this\n }\n\n /**\n * Iterate on all plugins and run `update` on them.\n * Called each time state changes.\n *\n */\n updateAll (state) {\n this.iteratePlugins(plugin => {\n plugin.update(state)\n })\n }\n\n /**\n * Updates state with a patch\n *\n * @param {object} patch {foo: 'bar'}\n */\n setState (patch) {\n this.store.setState(patch)\n }\n\n /**\n * Returns current state.\n *\n * @returns {object}\n */\n getState () {\n return this.store.getState()\n }\n\n /**\n * Back compat for when uppy.state is used instead of uppy.getState().\n */\n get state () {\n return this.getState()\n }\n\n /**\n * Shorthand to set state for a specific file.\n */\n setFileState (fileID, state) {\n if (!this.getState().files[fileID]) {\n throw new Error(`Can’t set state for ${fileID} (the file could have been removed)`)\n }\n\n this.setState({\n files: { ...this.getState().files, [fileID]: { ...this.getState().files[fileID], ...state } },\n })\n }\n\n i18nInit () {\n this.translator = new Translator([this.defaultLocale, this.opts.locale])\n this.locale = this.translator.locale\n this.i18n = this.translator.translate.bind(this.translator)\n this.i18nArray = this.translator.translateArray.bind(this.translator)\n }\n\n setOptions (newOpts) {\n this.opts = {\n ...this.opts,\n ...newOpts,\n restrictions: {\n ...this.opts.restrictions,\n ...(newOpts && newOpts.restrictions),\n },\n }\n\n if (newOpts.meta) {\n this.setMeta(newOpts.meta)\n }\n\n this.i18nInit()\n\n if (newOpts.locale) {\n this.iteratePlugins((plugin) => {\n plugin.setOptions()\n })\n }\n\n this.setState() // so that UI re-renders with new options\n }\n\n resetProgress () {\n const defaultProgress = {\n percentage: 0,\n bytesUploaded: 0,\n uploadComplete: false,\n uploadStarted: null,\n }\n const files = { ...this.getState().files }\n const updatedFiles = {}\n Object.keys(files).forEach(fileID => {\n const updatedFile = { ...files[fileID] }\n updatedFile.progress = { ...updatedFile.progress, ...defaultProgress }\n updatedFiles[fileID] = updatedFile\n })\n\n this.setState({\n files: updatedFiles,\n totalProgress: 0,\n })\n\n this.emit('reset-progress')\n }\n\n addPreProcessor (fn) {\n this.preProcessors.push(fn)\n }\n\n removePreProcessor (fn) {\n const i = this.preProcessors.indexOf(fn)\n if (i !== -1) {\n this.preProcessors.splice(i, 1)\n }\n }\n\n addPostProcessor (fn) {\n this.postProcessors.push(fn)\n }\n\n removePostProcessor (fn) {\n const i = this.postProcessors.indexOf(fn)\n if (i !== -1) {\n this.postProcessors.splice(i, 1)\n }\n }\n\n addUploader (fn) {\n this.uploaders.push(fn)\n }\n\n removeUploader (fn) {\n const i = this.uploaders.indexOf(fn)\n if (i !== -1) {\n this.uploaders.splice(i, 1)\n }\n }\n\n setMeta (data) {\n const updatedMeta = { ...this.getState().meta, ...data }\n const updatedFiles = { ...this.getState().files }\n\n Object.keys(updatedFiles).forEach((fileID) => {\n updatedFiles[fileID] = { ...updatedFiles[fileID], meta: { ...updatedFiles[fileID].meta, ...data } }\n })\n\n this.log('Adding metadata:')\n this.log(data)\n\n this.setState({\n meta: updatedMeta,\n files: updatedFiles,\n })\n }\n\n setFileMeta (fileID, data) {\n const updatedFiles = { ...this.getState().files }\n if (!updatedFiles[fileID]) {\n this.log('Was trying to set metadata for a file that has been removed: ', fileID)\n return\n }\n const newMeta = { ...updatedFiles[fileID].meta, ...data }\n updatedFiles[fileID] = { ...updatedFiles[fileID], meta: newMeta }\n this.setState({ files: updatedFiles })\n }\n\n /**\n * Get a file object.\n *\n * @param {string} fileID The ID of the file object to return.\n */\n getFile (fileID) {\n return this.getState().files[fileID]\n }\n\n /**\n * Get all files in an array.\n */\n getFiles () {\n const { files } = this.getState()\n return Object.keys(files).map((fileID) => files[fileID])\n }\n\n /**\n * A public wrapper for _checkRestrictions — checks if a file passes a set of restrictions.\n * For use in UI pluigins (like Providers), to disallow selecting files that won’t pass restrictions.\n *\n * @param {object} file object to check\n * @param {Array} [files] array to check maxNumberOfFiles and maxTotalFileSize\n * @returns {object} { result: true/false, reason: why file didn’t pass restrictions }\n */\n validateRestrictions (file, files) {\n try {\n this._checkRestrictions(file, files)\n return {\n result: true,\n }\n } catch (err) {\n return {\n result: false,\n reason: err.message,\n }\n }\n }\n\n /**\n * Check if file passes a set of restrictions set in options: maxFileSize, minFileSize,\n * maxNumberOfFiles and allowedFileTypes.\n *\n * @param {object} file object to check\n * @param {Array} [files] array to check maxNumberOfFiles and maxTotalFileSize\n * @private\n */\n _checkRestrictions (file, files = this.getFiles()) {\n const { maxFileSize, minFileSize, maxTotalFileSize, maxNumberOfFiles, allowedFileTypes } = this.opts.restrictions\n\n if (maxNumberOfFiles) {\n if (files.length + 1 > maxNumberOfFiles) {\n throw new RestrictionError(`${this.i18n('youCanOnlyUploadX', { smart_count: maxNumberOfFiles })}`)\n }\n }\n\n if (allowedFileTypes) {\n const isCorrectFileType = allowedFileTypes.some((type) => {\n // check if this is a mime-type\n if (type.indexOf('/') > -1) {\n if (!file.type) return false\n return match(file.type.replace(/;.*?$/, ''), type)\n }\n\n // otherwise this is likely an extension\n if (type[0] === '.' && file.extension) {\n return file.extension.toLowerCase() === type.substr(1).toLowerCase()\n }\n return false\n })\n\n if (!isCorrectFileType) {\n const allowedFileTypesString = allowedFileTypes.join(', ')\n throw new RestrictionError(this.i18n('youCanOnlyUploadFileTypes', { types: allowedFileTypesString }))\n }\n }\n\n // We can't check maxTotalFileSize if the size is unknown.\n if (maxTotalFileSize && file.size != null) {\n let totalFilesSize = 0\n totalFilesSize += file.size\n files.forEach((file) => {\n totalFilesSize += file.size\n })\n if (totalFilesSize > maxTotalFileSize) {\n throw new RestrictionError(this.i18n('exceedsSize2', {\n backwardsCompat: this.i18n('exceedsSize'),\n size: prettierBytes(maxTotalFileSize),\n }))\n }\n }\n\n // We can't check maxFileSize if the size is unknown.\n if (maxFileSize && file.size != null) {\n if (file.size > maxFileSize) {\n throw new RestrictionError(this.i18n('exceedsSize2', {\n backwardsCompat: this.i18n('exceedsSize'),\n size: prettierBytes(maxFileSize),\n }))\n }\n }\n\n // We can't check minFileSize if the size is unknown.\n if (minFileSize && file.size != null) {\n if (file.size < minFileSize) {\n throw new RestrictionError(this.i18n('inferiorSize', {\n size: prettierBytes(minFileSize),\n }))\n }\n }\n }\n\n /**\n * Check if minNumberOfFiles restriction is reached before uploading.\n *\n * @private\n */\n _checkMinNumberOfFiles (files) {\n const { minNumberOfFiles } = this.opts.restrictions\n if (Object.keys(files).length < minNumberOfFiles) {\n throw new RestrictionError(`${this.i18n('youHaveToAtLeastSelectX', { smart_count: minNumberOfFiles })}`)\n }\n }\n\n /**\n * Logs an error, sets Informer message, then throws the error.\n * Emits a 'restriction-failed' event if it’s a restriction error\n *\n * @param {object | string} err — Error object or plain string message\n * @param {object} [options]\n * @param {boolean} [options.showInformer=true] — Sometimes developer might want to show Informer manually\n * @param {object} [options.file=null] — File object used to emit the restriction error\n * @param {boolean} [options.throwErr=true] — Errors shouldn’t be thrown, for example, in `upload-error` event\n * @private\n */\n _showOrLogErrorAndThrow (err, { showInformer = true, file = null, throwErr = true } = {}) {\n const message = typeof err === 'object' ? err.message : err\n const details = (typeof err === 'object' && err.details) ? err.details : ''\n\n // Restriction errors should be logged, but not as errors,\n // as they are expected and shown in the UI.\n let logMessageWithDetails = message\n if (details) {\n logMessageWithDetails += ` ${details}`\n }\n if (err.isRestriction) {\n this.log(logMessageWithDetails)\n this.emit('restriction-failed', file, err)\n } else {\n this.log(logMessageWithDetails, 'error')\n }\n\n // Sometimes informer has to be shown manually by the developer,\n // for example, in `onBeforeFileAdded`.\n if (showInformer) {\n this.info({ message, details }, 'error', this.opts.infoTimeout)\n }\n\n if (throwErr) {\n throw (typeof err === 'object' ? err : new Error(err))\n }\n }\n\n _assertNewUploadAllowed (file) {\n const { allowNewUpload } = this.getState()\n\n if (allowNewUpload === false) {\n this._showOrLogErrorAndThrow(new RestrictionError(this.i18n('noNewAlreadyUploading')), { file })\n }\n }\n\n /**\n * Create a file state object based on user-provided `addFile()` options.\n *\n * Note this is extremely side-effectful and should only be done when a file state object will be added to state immediately afterward!\n *\n * The `files` value is passed in because it may be updated by the caller without updating the store.\n */\n _checkAndCreateFileStateObject (files, file) {\n const fileType = getFileType(file)\n file.type = fileType\n\n const onBeforeFileAddedResult = this.opts.onBeforeFileAdded(file, files)\n\n if (onBeforeFileAddedResult === false) {\n // Don’t show UI info for this error, as it should be done by the developer\n this._showOrLogErrorAndThrow(new RestrictionError('Cannot add the file because onBeforeFileAdded returned false.'), { showInformer: false, file })\n }\n\n if (typeof onBeforeFileAddedResult === 'object' && onBeforeFileAddedResult) {\n file = onBeforeFileAddedResult\n }\n\n let fileName\n if (file.name) {\n fileName = file.name\n } else if (fileType.split('/')[0] === 'image') {\n fileName = `${fileType.split('/')[0]}.${fileType.split('/')[1]}`\n } else {\n fileName = 'noname'\n }\n const fileExtension = getFileNameAndExtension(fileName).extension\n const isRemote = file.isRemote || false\n\n const fileID = generateFileID(file)\n\n if (files[fileID]) {\n this._showOrLogErrorAndThrow(new RestrictionError(this.i18n('noDuplicates', { fileName })), { file })\n }\n\n const meta = file.meta || {}\n meta.name = fileName\n meta.type = fileType\n\n // `null` means the size is unknown.\n const size = isFinite(file.data.size) ? file.data.size : null\n const newFile = {\n source: file.source || '',\n id: fileID,\n name: fileName,\n extension: fileExtension || '',\n meta: {\n ...this.getState().meta,\n ...meta,\n },\n type: fileType,\n data: file.data,\n progress: {\n percentage: 0,\n bytesUploaded: 0,\n bytesTotal: size,\n uploadComplete: false,\n uploadStarted: null,\n },\n size,\n isRemote,\n remote: file.remote || '',\n preview: file.preview,\n }\n\n try {\n const filesArray = Object.keys(files).map(i => files[i])\n this._checkRestrictions(newFile, filesArray)\n } catch (err) {\n this._showOrLogErrorAndThrow(err, { file: newFile })\n }\n\n return newFile\n }\n\n // Schedule an upload if `autoProceed` is enabled.\n _startIfAutoProceed () {\n if (this.opts.autoProceed && !this.scheduledAutoProceed) {\n this.scheduledAutoProceed = setTimeout(() => {\n this.scheduledAutoProceed = null\n this.upload().catch((err) => {\n if (!err.isRestriction) {\n this.log(err.stack || err.message || err)\n }\n })\n }, 4)\n }\n }\n\n /**\n * Add a new file to `state.files`. This will run `onBeforeFileAdded`,\n * try to guess file type in a clever way, check file against restrictions,\n * and start an upload if `autoProceed === true`.\n *\n * @param {object} file object to add\n * @returns {string} id for the added file\n */\n addFile (file) {\n this._assertNewUploadAllowed(file)\n\n const { files } = this.getState()\n const newFile = this._checkAndCreateFileStateObject(files, file)\n\n this.setState({\n files: {\n ...files,\n [newFile.id]: newFile,\n },\n })\n\n this.emit('file-added', newFile)\n this.emit('files-added', [newFile])\n this.log(`Added file: ${newFile.name}, ${newFile.id}, mime type: ${newFile.type}`)\n\n this._startIfAutoProceed()\n\n return newFile.id\n }\n\n /**\n * Add multiple files to `state.files`. See the `addFile()` documentation.\n *\n * This cuts some corners for performance, so should typically only be used in cases where there may be a lot of files.\n *\n * If an error occurs while adding a file, it is logged and the user is notified. This is good for UI plugins, but not for programmatic use. Programmatic users should usually still use `addFile()` on individual files.\n */\n addFiles (fileDescriptors) {\n this._assertNewUploadAllowed()\n\n // create a copy of the files object only once\n const files = { ...this.getState().files }\n const newFiles = []\n const errors = []\n for (let i = 0; i < fileDescriptors.length; i++) {\n try {\n const newFile = this._checkAndCreateFileStateObject(files, fileDescriptors[i])\n newFiles.push(newFile)\n files[newFile.id] = newFile\n } catch (err) {\n if (!err.isRestriction) {\n errors.push(err)\n }\n }\n }\n\n this.setState({ files })\n\n newFiles.forEach((newFile) => {\n this.emit('file-added', newFile)\n })\n\n this.emit('files-added', newFiles)\n\n if (newFiles.length > 5) {\n this.log(`Added batch of ${newFiles.length} files`)\n } else {\n Object.keys(newFiles).forEach(fileID => {\n this.log(`Added file: ${newFiles[fileID].name}\\n id: ${newFiles[fileID].id}\\n type: ${newFiles[fileID].type}`)\n })\n }\n\n if (newFiles.length > 0) {\n this._startIfAutoProceed()\n }\n\n if (errors.length > 0) {\n let message = 'Multiple errors occurred while adding files:\\n'\n errors.forEach((subError) => {\n message += `\\n * ${subError.message}`\n })\n\n this.info({\n message: this.i18n('addBulkFilesFailed', { smart_count: errors.length }),\n details: message,\n }, 'error', this.opts.infoTimeout)\n\n const err = new Error(message)\n err.errors = errors\n throw err\n }\n }\n\n removeFiles (fileIDs, reason) {\n const { files, currentUploads } = this.getState()\n const updatedFiles = { ...files }\n const updatedUploads = { ...currentUploads }\n\n const removedFiles = Object.create(null)\n fileIDs.forEach((fileID) => {\n if (files[fileID]) {\n removedFiles[fileID] = files[fileID]\n delete updatedFiles[fileID]\n }\n })\n\n // Remove files from the `fileIDs` list in each upload.\n function fileIsNotRemoved (uploadFileID) {\n return removedFiles[uploadFileID] === undefined\n }\n const uploadsToRemove = []\n Object.keys(updatedUploads).forEach((uploadID) => {\n const newFileIDs = currentUploads[uploadID].fileIDs.filter(fileIsNotRemoved)\n\n // Remove the upload if no files are associated with it anymore.\n if (newFileIDs.length === 0) {\n uploadsToRemove.push(uploadID)\n return\n }\n\n updatedUploads[uploadID] = {\n ...currentUploads[uploadID],\n fileIDs: newFileIDs,\n }\n })\n\n uploadsToRemove.forEach((uploadID) => {\n delete updatedUploads[uploadID]\n })\n\n const stateUpdate = {\n currentUploads: updatedUploads,\n files: updatedFiles,\n }\n\n // If all files were removed - allow new uploads!\n if (Object.keys(updatedFiles).length === 0) {\n stateUpdate.allowNewUpload = true\n stateUpdate.error = null\n }\n\n this.setState(stateUpdate)\n this._calculateTotalProgress()\n\n const removedFileIDs = Object.keys(removedFiles)\n removedFileIDs.forEach((fileID) => {\n this.emit('file-removed', removedFiles[fileID], reason)\n })\n\n if (removedFileIDs.length > 5) {\n this.log(`Removed ${removedFileIDs.length} files`)\n } else {\n this.log(`Removed files: ${removedFileIDs.join(', ')}`)\n }\n }\n\n removeFile (fileID, reason = null) {\n this.removeFiles([fileID], reason)\n }\n\n pauseResume (fileID) {\n if (!this.getState().capabilities.resumableUploads\n || this.getFile(fileID).uploadComplete) {\n return\n }\n\n const wasPaused = this.getFile(fileID).isPaused || false\n const isPaused = !wasPaused\n\n this.setFileState(fileID, {\n isPaused,\n })\n\n this.emit('upload-pause', fileID, isPaused)\n\n return isPaused\n }\n\n pauseAll () {\n const updatedFiles = { ...this.getState().files }\n const inProgressUpdatedFiles = Object.keys(updatedFiles).filter((file) => {\n return !updatedFiles[file].progress.uploadComplete\n && updatedFiles[file].progress.uploadStarted\n })\n\n inProgressUpdatedFiles.forEach((file) => {\n const updatedFile = { ...updatedFiles[file], isPaused: true }\n updatedFiles[file] = updatedFile\n })\n\n this.setState({ files: updatedFiles })\n this.emit('pause-all')\n }\n\n resumeAll () {\n const updatedFiles = { ...this.getState().files }\n const inProgressUpdatedFiles = Object.keys(updatedFiles).filter((file) => {\n return !updatedFiles[file].progress.uploadComplete\n && updatedFiles[file].progress.uploadStarted\n })\n\n inProgressUpdatedFiles.forEach((file) => {\n const updatedFile = {\n ...updatedFiles[file],\n isPaused: false,\n error: null,\n }\n updatedFiles[file] = updatedFile\n })\n this.setState({ files: updatedFiles })\n\n this.emit('resume-all')\n }\n\n retryAll () {\n const updatedFiles = { ...this.getState().files }\n const filesToRetry = Object.keys(updatedFiles).filter(file => {\n return updatedFiles[file].error\n })\n\n filesToRetry.forEach((file) => {\n const updatedFile = {\n ...updatedFiles[file],\n isPaused: false,\n error: null,\n }\n updatedFiles[file] = updatedFile\n })\n this.setState({\n files: updatedFiles,\n error: null,\n })\n\n this.emit('retry-all', filesToRetry)\n\n if (filesToRetry.length === 0) {\n return Promise.resolve({\n successful: [],\n failed: [],\n })\n }\n\n const uploadID = this._createUpload(filesToRetry, {\n forceAllowNewUpload: true, // create new upload even if allowNewUpload: false\n })\n return this._runUpload(uploadID)\n }\n\n cancelAll () {\n this.emit('cancel-all')\n\n const { files } = this.getState()\n\n const fileIDs = Object.keys(files)\n if (fileIDs.length) {\n this.removeFiles(fileIDs, 'cancel-all')\n }\n\n this.setState({\n totalProgress: 0,\n error: null,\n })\n }\n\n retryUpload (fileID) {\n this.setFileState(fileID, {\n error: null,\n isPaused: false,\n })\n\n this.emit('upload-retry', fileID)\n\n const uploadID = this._createUpload([fileID], {\n forceAllowNewUpload: true, // create new upload even if allowNewUpload: false\n })\n return this._runUpload(uploadID)\n }\n\n reset () {\n this.cancelAll()\n }\n\n _calculateProgress (file, data) {\n if (!this.getFile(file.id)) {\n this.log(`Not setting progress for a file that has been removed: ${file.id}`)\n return\n }\n\n // bytesTotal may be null or zero; in that case we can't divide by it\n const canHavePercentage = isFinite(data.bytesTotal) && data.bytesTotal > 0\n this.setFileState(file.id, {\n progress: {\n ...this.getFile(file.id).progress,\n bytesUploaded: data.bytesUploaded,\n bytesTotal: data.bytesTotal,\n percentage: canHavePercentage\n // TODO(goto-bus-stop) flooring this should probably be the choice of the UI?\n // we get more accurate calculations if we don't round this at all.\n ? Math.round(data.bytesUploaded / data.bytesTotal * 100)\n : 0,\n },\n })\n\n this._calculateTotalProgress()\n }\n\n _calculateTotalProgress () {\n // calculate total progress, using the number of files currently uploading,\n // multiplied by 100 and the summ of individual progress of each file\n const files = this.getFiles()\n\n const inProgress = files.filter((file) => {\n return file.progress.uploadStarted\n || file.progress.preprocess\n || file.progress.postprocess\n })\n\n if (inProgress.length === 0) {\n this.emit('progress', 0)\n this.setState({ totalProgress: 0 })\n return\n }\n\n const sizedFiles = inProgress.filter((file) => file.progress.bytesTotal != null)\n const unsizedFiles = inProgress.filter((file) => file.progress.bytesTotal == null)\n\n if (sizedFiles.length === 0) {\n const progressMax = inProgress.length * 100\n const currentProgress = unsizedFiles.reduce((acc, file) => {\n return acc + file.progress.percentage\n }, 0)\n const totalProgress = Math.round(currentProgress / progressMax * 100)\n this.setState({ totalProgress })\n return\n }\n\n let totalSize = sizedFiles.reduce((acc, file) => {\n return acc + file.progress.bytesTotal\n }, 0)\n const averageSize = totalSize / sizedFiles.length\n totalSize += averageSize * unsizedFiles.length\n\n let uploadedSize = 0\n sizedFiles.forEach((file) => {\n uploadedSize += file.progress.bytesUploaded\n })\n unsizedFiles.forEach((file) => {\n uploadedSize += averageSize * (file.progress.percentage || 0) / 100\n })\n\n let totalProgress = totalSize === 0\n ? 0\n : Math.round(uploadedSize / totalSize * 100)\n\n // hot fix, because:\n // uploadedSize ended up larger than totalSize, resulting in 1325% total\n if (totalProgress > 100) {\n totalProgress = 100\n }\n\n this.setState({ totalProgress })\n this.emit('progress', totalProgress)\n }\n\n /**\n * Registers listeners for all global actions, like:\n * `error`, `file-removed`, `upload-progress`\n */\n _addListeners () {\n this.on('error', (error) => {\n let errorMsg = 'Unknown error'\n if (error.message) {\n errorMsg = error.message\n }\n\n if (error.details) {\n errorMsg += ` ${error.details}`\n }\n\n this.setState({ error: errorMsg })\n })\n\n this.on('upload-error', (file, error, response) => {\n let errorMsg = 'Unknown error'\n if (error.message) {\n errorMsg = error.message\n }\n\n if (error.details) {\n errorMsg += ` ${error.details}`\n }\n\n this.setFileState(file.id, {\n error: errorMsg,\n response,\n })\n\n this.setState({ error: error.message })\n\n if (typeof error === 'object' && error.message) {\n const newError = new Error(error.message)\n newError.details = error.message\n if (error.details) {\n newError.details += ` ${error.details}`\n }\n newError.message = this.i18n('failedToUpload', { file: file.name })\n this._showOrLogErrorAndThrow(newError, {\n throwErr: false,\n })\n } else {\n this._showOrLogErrorAndThrow(error, {\n throwErr: false,\n })\n }\n })\n\n this.on('upload', () => {\n this.setState({ error: null })\n })\n\n this.on('upload-started', (file, upload) => {\n if (!this.getFile(file.id)) {\n this.log(`Not setting progress for a file that has been removed: ${file.id}`)\n return\n }\n this.setFileState(file.id, {\n progress: {\n uploadStarted: Date.now(),\n uploadComplete: false,\n percentage: 0,\n bytesUploaded: 0,\n bytesTotal: file.size,\n },\n })\n })\n\n this.on('upload-progress', this._calculateProgress)\n\n this.on('upload-success', (file, uploadResp) => {\n if (!this.getFile(file.id)) {\n this.log(`Not setting progress for a file that has been removed: ${file.id}`)\n return\n }\n\n const currentProgress = this.getFile(file.id).progress\n this.setFileState(file.id, {\n progress: {\n ...currentProgress,\n postprocess: this.postProcessors.length > 0 ? {\n mode: 'indeterminate',\n } : null,\n uploadComplete: true,\n percentage: 100,\n bytesUploaded: currentProgress.bytesTotal,\n },\n response: uploadResp,\n uploadURL: uploadResp.uploadURL,\n isPaused: false,\n })\n\n this._calculateTotalProgress()\n })\n\n this.on('preprocess-progress', (file, progress) => {\n if (!this.getFile(file.id)) {\n this.log(`Not setting progress for a file that has been removed: ${file.id}`)\n return\n }\n this.setFileState(file.id, {\n progress: { ...this.getFile(file.id).progress, preprocess: progress },\n })\n })\n\n this.on('preprocess-complete', (file) => {\n if (!this.getFile(file.id)) {\n this.log(`Not setting progress for a file that has been removed: ${file.id}`)\n return\n }\n const files = { ...this.getState().files }\n files[file.id] = { ...files[file.id], progress: { ...files[file.id].progress } }\n delete files[file.id].progress.preprocess\n\n this.setState({ files })\n })\n\n this.on('postprocess-progress', (file, progress) => {\n if (!this.getFile(file.id)) {\n this.log(`Not setting progress for a file that has been removed: ${file.id}`)\n return\n }\n this.setFileState(file.id, {\n progress: { ...this.getState().files[file.id].progress, postprocess: progress },\n })\n })\n\n this.on('postprocess-complete', (file) => {\n if (!this.getFile(file.id)) {\n this.log(`Not setting progress for a file that has been removed: ${file.id}`)\n return\n }\n const files = {\n ...this.getState().files,\n }\n files[file.id] = {\n ...files[file.id],\n progress: {\n ...files[file.id].progress,\n },\n }\n delete files[file.id].progress.postprocess\n // TODO should we set some kind of `fullyComplete` property on the file object\n // so it's easier to see that the file is upload…fully complete…rather than\n // what we have to do now (`uploadComplete && !postprocess`)\n\n this.setState({ files })\n })\n\n this.on('restored', () => {\n // Files may have changed--ensure progress is still accurate.\n this._calculateTotalProgress()\n })\n\n // show informer if offline\n if (typeof window !== 'undefined' && window.addEventListener) {\n window.addEventListener('online', () => this.updateOnlineStatus())\n window.addEventListener('offline', () => this.updateOnlineStatus())\n setTimeout(() => this.updateOnlineStatus(), 3000)\n }\n }\n\n updateOnlineStatus () {\n const online\n = typeof window.navigator.onLine !== 'undefined'\n ? window.navigator.onLine\n : true\n if (!online) {\n this.emit('is-offline')\n this.info(this.i18n('noInternetConnection'), 'error', 0)\n this.wasOffline = true\n } else {\n this.emit('is-online')\n if (this.wasOffline) {\n this.emit('back-online')\n this.info(this.i18n('connectedToInternet'), 'success', 3000)\n this.wasOffline = false\n }\n }\n }\n\n getID () {\n return this.opts.id\n }\n\n /**\n * Registers a plugin with Core.\n *\n * @param {object} Plugin object\n * @param {object} [opts] object with options to be passed to Plugin\n * @returns {object} self for chaining\n */\n use (Plugin, opts) {\n if (typeof Plugin !== 'function') {\n const msg = `Expected a plugin class, but got ${Plugin === null ? 'null' : typeof Plugin}.`\n + ' Please verify that the plugin was imported and spelled correctly.'\n throw new TypeError(msg)\n }\n\n // Instantiate\n const plugin = new Plugin(this, opts)\n const pluginId = plugin.id\n this.plugins[plugin.type] = this.plugins[plugin.type] || []\n\n if (!pluginId) {\n throw new Error('Your plugin must have an id')\n }\n\n if (!plugin.type) {\n throw new Error('Your plugin must have a type')\n }\n\n const existsPluginAlready = this.getPlugin(pluginId)\n if (existsPluginAlready) {\n const msg = `Already found a plugin named '${existsPluginAlready.id}'. `\n + `Tried to use: '${pluginId}'.\\n`\n + 'Uppy plugins must have unique `id` options. See https://uppy.io/docs/plugins/#id.'\n throw new Error(msg)\n }\n\n if (Plugin.VERSION) {\n this.log(`Using ${pluginId} v${Plugin.VERSION}`)\n }\n\n this.plugins[plugin.type].push(plugin)\n plugin.install()\n\n return this\n }\n\n /**\n * Find one Plugin by name.\n *\n * @param {string} id plugin id\n * @returns {object|boolean}\n */\n getPlugin (id) {\n let foundPlugin = null\n this.iteratePlugins((plugin) => {\n if (plugin.id === id) {\n foundPlugin = plugin\n return false\n }\n })\n return foundPlugin\n }\n\n /**\n * Iterate through all `use`d plugins.\n *\n * @param {Function} method that will be run on each plugin\n */\n iteratePlugins (method) {\n Object.keys(this.plugins).forEach(pluginType => {\n this.plugins[pluginType].forEach(method)\n })\n }\n\n /**\n * Uninstall and remove a plugin.\n *\n * @param {object} instance The plugin instance to remove.\n */\n removePlugin (instance) {\n this.log(`Removing plugin ${instance.id}`)\n this.emit('plugin-remove', instance)\n\n if (instance.uninstall) {\n instance.uninstall()\n }\n\n const list = this.plugins[instance.type].slice()\n // list.indexOf failed here, because Vue3 converted the plugin instance\n // to a Proxy object, which failed the strict comparison test:\n // obj !== objProxy\n const index = findIndex(list, item => item.id === instance.id)\n if (index !== -1) {\n list.splice(index, 1)\n this.plugins[instance.type] = list\n }\n\n const state = this.getState()\n const updatedState = {\n plugins: {\n ...state.plugins,\n [instance.id]: undefined,\n },\n }\n this.setState(updatedState)\n }\n\n /**\n * Uninstall all plugins and close down this Uppy instance.\n */\n close () {\n this.log(`Closing Uppy instance ${this.opts.id}: removing all files and uninstalling plugins`)\n\n this.reset()\n\n this._storeUnsubscribe()\n\n this.iteratePlugins((plugin) => {\n this.removePlugin(plugin)\n })\n }\n\n /**\n * Set info message in `state.info`, so that UI plugins like `Informer`\n * can display the message.\n *\n * @param {string | object} message Message to be displayed by the informer\n * @param {string} [type]\n * @param {number} [duration]\n */\n\n info (message, type = 'info', duration = 3000) {\n const isComplexMessage = typeof message === 'object'\n\n this.setState({\n info: {\n isHidden: false,\n type,\n message: isComplexMessage ? message.message : message,\n details: isComplexMessage ? message.details : null,\n },\n })\n\n this.emit('info-visible')\n\n clearTimeout(this.infoTimeoutID)\n if (duration === 0) {\n this.infoTimeoutID = undefined\n return\n }\n\n // hide the informer after `duration` milliseconds\n this.infoTimeoutID = setTimeout(this.hideInfo, duration)\n }\n\n hideInfo () {\n const newInfo = { ...this.getState().info, isHidden: true }\n this.setState({\n info: newInfo,\n })\n this.emit('info-hidden')\n }\n\n /**\n * Passes messages to a function, provided in `opts.logger`.\n * If `opts.logger: Uppy.debugLogger` or `opts.debug: true`, logs to the browser console.\n *\n * @param {string|object} message to log\n * @param {string} [type] optional `error` or `warning`\n */\n log (message, type) {\n const { logger } = this.opts\n switch (type) {\n case 'error': logger.error(message); break\n case 'warning': logger.warn(message); break\n default: logger.debug(message); break\n }\n }\n\n /**\n * Obsolete, event listeners are now added in the constructor.\n */\n run () {\n this.log('Calling run() is no longer necessary.', 'warning')\n return this\n }\n\n /**\n * Restore an upload by its ID.\n */\n restore (uploadID) {\n this.log(`Core: attempting to restore upload \"${uploadID}\"`)\n\n if (!this.getState().currentUploads[uploadID]) {\n this._removeUpload(uploadID)\n return Promise.reject(new Error('Nonexistent upload'))\n }\n\n return this._runUpload(uploadID)\n }\n\n /**\n * Create an upload for a bunch of files.\n *\n * @param {Array<string>} fileIDs File IDs to include in this upload.\n * @returns {string} ID of this upload.\n */\n _createUpload (fileIDs, opts = {}) {\n const {\n forceAllowNewUpload = false, // uppy.retryAll sets this to true — when retrying we want to ignore `allowNewUpload: false`\n } = opts\n\n const { allowNewUpload, currentUploads } = this.getState()\n if (!allowNewUpload && !forceAllowNewUpload) {\n throw new Error('Cannot create a new upload: already uploading.')\n }\n\n const uploadID = cuid()\n\n this.emit('upload', {\n id: uploadID,\n fileIDs,\n })\n\n this.setState({\n allowNewUpload: this.opts.allowMultipleUploads !== false,\n\n currentUploads: {\n ...currentUploads,\n [uploadID]: {\n fileIDs,\n step: 0,\n result: {},\n },\n },\n })\n\n return uploadID\n }\n\n _getUpload (uploadID) {\n const { currentUploads } = this.getState()\n\n return currentUploads[uploadID]\n }\n\n /**\n * Add data to an upload's result object.\n *\n * @param {string} uploadID The ID of the upload.\n * @param {object} data Data properties to add to the result object.\n */\n addResultData (uploadID, data) {\n if (!this._getUpload(uploadID)) {\n this.log(`Not setting result for an upload that has been removed: ${uploadID}`)\n return\n }\n const currentUploads = this.getState().currentUploads\n const currentUpload = { ...currentUploads[uploadID], result: { ...currentUploads[uploadID].result, ...data } }\n this.setState({\n currentUploads: { ...currentUploads, [uploadID]: currentUpload },\n })\n }\n\n /**\n * Remove an upload, eg. if it has been canceled or completed.\n *\n * @param {string} uploadID The ID of the upload.\n */\n _removeUpload (uploadID) {\n const currentUploads = { ...this.getState().currentUploads }\n delete currentUploads[uploadID]\n\n this.setState({\n currentUploads,\n })\n }\n\n /**\n * Run an upload. This picks up where it left off in case the upload is being restored.\n *\n * @private\n */\n _runUpload (uploadID) {\n const uploadData = this.getState().currentUploads[uploadID]\n const restoreStep = uploadData.step\n\n const steps = [\n ...this.preProcessors,\n ...this.uploaders,\n ...this.postProcessors,\n ]\n let lastStep = Promise.resolve()\n steps.forEach((fn, step) => {\n // Skip this step if we are restoring and have already completed this step before.\n if (step < restoreStep) {\n return\n }\n\n lastStep = lastStep.then(() => {\n const { currentUploads } = this.getState()\n const currentUpload = currentUploads[uploadID]\n if (!currentUpload) {\n return\n }\n\n const updatedUpload = {\n ...currentUpload,\n step,\n }\n\n this.setState({\n currentUploads: {\n ...currentUploads,\n [uploadID]: updatedUpload,\n },\n })\n\n // TODO give this the `updatedUpload` object as its only parameter maybe?\n // Otherwise when more metadata may be added to the upload this would keep getting more parameters\n return fn(updatedUpload.fileIDs, uploadID)\n }).then((result) => {\n return null\n })\n })\n\n // Not returning the `catch`ed promise, because we still want to return a rejected\n // promise from this method if the upload failed.\n lastStep.catch((err) => {\n this.emit('error', err, uploadID)\n this._removeUpload(uploadID)\n })\n\n return lastStep.then(() => {\n // Set result data.\n const { currentUploads } = this.getState()\n const currentUpload = currentUploads[uploadID]\n if (!currentUpload) {\n return\n }\n\n // Mark postprocessing step as complete if necessary; this addresses a case where we might get\n // stuck in the postprocessing UI while the upload is fully complete.\n // If the postprocessing steps do not do any work, they may not emit postprocessing events at\n // all, and never mark the postprocessing as complete. This is fine on its own but we\n // introduced code in the @uppy/core upload-success handler to prepare postprocessing progress\n // state if any postprocessors are registered. That is to avoid a \"flash of completed state\"\n // before the postprocessing plugins can emit events.\n //\n // So, just in case an upload with postprocessing plugins *has* completed *without* emitting\n // postprocessing completion, we do it instead.\n currentUpload.fileIDs.forEach((fileID) => {\n const file = this.getFile(fileID)\n if (file && file.progress.postprocess) {\n this.emit('postprocess-complete', file)\n }\n })\n\n const files = currentUpload.fileIDs.map((fileID) => this.getFile(fileID))\n const successful = files.filter((file) => !file.error)\n const failed = files.filter((file) => file.error)\n this.addResultData(uploadID, { successful, failed, uploadID })\n }).then(() => {\n // Emit completion events.\n // This is in a separate function so that the `currentUploads` variable\n // always refers to the latest state. In the handler right above it refers\n // to an outdated object without the `.result` property.\n const { currentUploads } = this.getState()\n if (!currentUploads[uploadID]) {\n return\n }\n const currentUpload = currentUploads[uploadID]\n const result = currentUpload.result\n this.emit('complete', result)\n\n this._removeUpload(uploadID)\n\n return result\n }).then((result) => {\n if (result == null) {\n this.log(`Not setting result for an upload that has been removed: ${uploadID}`)\n }\n return result\n })\n }\n\n /**\n * Start an upload for all the files that are not currently being uploaded.\n *\n * @returns {Promise}\n */\n upload () {\n if (!this.plugins.uploader) {\n this.log('No uploader type plugins are used', 'warning')\n }\n\n let files = this.getState().files\n\n const onBeforeUploadResult = this.opts.onBeforeUpload(files)\n\n if (onBeforeUploadResult === false) {\n return Promise.reject(new Error('Not starting the upload because onBeforeUpload returned false'))\n }\n\n if (onBeforeUploadResult && typeof onBeforeUploadResult === 'object') {\n files = onBeforeUploadResult\n // Updating files in state, because uploader plugins receive file IDs,\n // and then fetch the actual file object from state\n this.setState({\n files,\n })\n }\n\n return Promise.resolve()\n .then(() => this._checkMinNumberOfFiles(files))\n .catch((err) => {\n this._showOrLogErrorAndThrow(err)\n })\n .then(() => {\n const { currentUploads } = this.getState()\n // get a list of files that are currently assigned to uploads\n const currentlyUploadingFiles = Object.keys(currentUploads).reduce((prev, curr) => prev.concat(currentUploads[curr].fileIDs), [])\n\n const waitingFileIDs = []\n Object.keys(files).forEach((fileID) => {\n const file = this.getFile(fileID)\n // if the file hasn't started uploading and hasn't already been assigned to an upload..\n if ((!file.progress.uploadStarted) && (currentlyUploadingFiles.indexOf(fileID) === -1)) {\n waitingFileIDs.push(file.id)\n }\n })\n\n const uploadID = this._createUpload(waitingFileIDs)\n return this._runUpload(uploadID)\n })\n .catch((err) => {\n this._showOrLogErrorAndThrow(err, {\n showInformer: false,\n })\n })\n }\n}\n\nmodule.exports = function (opts) {\n return new Uppy(opts)\n}\n\n// Expose class constructor.\nmodule.exports.Uppy = Uppy\nmodule.exports.Plugin = Plugin\nmodule.exports.debugLogger = debugLogger\n"]}
\No newline at end of file