From 6a509df10c4e51de9cdc08abced40107ee5f216b Mon Sep 17 00:00:00 2001 From: Antoine du Hamel Date: Tue, 31 May 2022 12:30:33 +0200 Subject: [PATCH 01/22] doc: fix React examples (#3799) --- website/src/docs/react-dragdrop.md | 37 +++++++++++++++------------ website/src/docs/react-fileinput.md | 17 +++++++----- website/src/docs/react-progressbar.md | 16 ++++++++---- website/src/docs/react-statusbar.md | 18 ++++++++----- 4 files changed, 55 insertions(+), 33 deletions(-) diff --git a/website/src/docs/react-dragdrop.md b/website/src/docs/react-dragdrop.md index cc5cbaa183..69def48a5d 100644 --- a/website/src/docs/react-dragdrop.md +++ b/website/src/docs/react-dragdrop.md @@ -44,20 +44,25 @@ The `` component supports all [DragDrop](/docs/drag-drop/) options a import React from 'react' import { DragDrop } from '@uppy/react' - +export default function MyComponent (props) { + const { uppy } = props + return ( + + ) +} ``` diff --git a/website/src/docs/react-fileinput.md b/website/src/docs/react-fileinput.md index 732f270d05..33b5180425 100644 --- a/website/src/docs/react-fileinput.md +++ b/website/src/docs/react-fileinput.md @@ -44,10 +44,15 @@ The `` component supports all [FileInput](/docs/file-input/) option import React from 'react' import { FileInput } from '@uppy/react' - +export default function MyComponent (props) { + const { uppy } = props + return ( + + ) +} ``` diff --git a/website/src/docs/react-progressbar.md b/website/src/docs/react-progressbar.md index d138aabcfa..54da753196 100644 --- a/website/src/docs/react-progressbar.md +++ b/website/src/docs/react-progressbar.md @@ -44,11 +44,17 @@ The `` component supports all [`@uppy/progress-bar`][] options as import React from 'react' import { ProgressBar } from '@uppy/react' - +export default function MyComponent (props) { + const { uppy } = props + return ( + + ) +} ``` [`@uppy/progress-bar`]: /docs/progress-bar/ diff --git a/website/src/docs/react-statusbar.md b/website/src/docs/react-statusbar.md index a46c9eee9f..4260de6c50 100644 --- a/website/src/docs/react-statusbar.md +++ b/website/src/docs/react-statusbar.md @@ -44,12 +44,18 @@ The `` component supports all [`@uppy/status-bar`][] options as pro import React from 'react' import { StatusBar } from '@uppy/react' - +export default function MyComponent (props) { + const { uppy } = props + return ( + + ) +} ``` [`@uppy/status-bar`]: /docs/status-bar/ From cea6b733e36ad2b575fa3f64695c5379846b76c4 Mon Sep 17 00:00:00 2001 From: Merlijn Vos Date: Tue, 31 May 2022 14:30:21 +0200 Subject: [PATCH 02/22] @uppy/tus: make onShouldRetry type optional (#3800) --- packages/@uppy/tus/types/index.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/@uppy/tus/types/index.d.ts b/packages/@uppy/tus/types/index.d.ts index 6753d750c4..19c954b9a8 100644 --- a/packages/@uppy/tus/types/index.d.ts +++ b/packages/@uppy/tus/types/index.d.ts @@ -20,7 +20,7 @@ export interface TusOptions extends PluginOptions, TusUploadOptions { limit?: number useFastRemoteRetry?: boolean withCredentials?: boolean - onShouldRetry: (err: Error | undefined, retryAttempt: number, options: TusOptions, next: Next) => boolean + onShouldRetry?: (err: Error | undefined, retryAttempt: number, options: TusOptions, next: Next) => boolean } declare class Tus extends BasePlugin {} From 7386cc9607e6f5424cccdc3be9ec59649be42651 Mon Sep 17 00:00:00 2001 From: Brad Edelman Date: Wed, 1 Jun 2022 07:11:02 -0700 Subject: [PATCH 03/22] @uppy/url: fix `getFileNameFromUrl` (#3804) Need to strip query string and fragment from URL when turning into a filename. Co-authored-by: Antoine du Hamel --- packages/@uppy/url/src/Url.jsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/@uppy/url/src/Url.jsx b/packages/@uppy/url/src/Url.jsx index c5551123f6..06c1d35a63 100644 --- a/packages/@uppy/url/src/Url.jsx +++ b/packages/@uppy/url/src/Url.jsx @@ -48,7 +48,8 @@ function checkIfCorrectURL (url) { } function getFileNameFromUrl (url) { - return url.substring(url.lastIndexOf('/') + 1) + const { pathname } = new URL(url) + return pathname.substring(pathname.lastIndexOf('/') + 1) } /** * Url From a8726ba06bff51663910e66a80e954728e795ddd Mon Sep 17 00:00:00 2001 From: Brad Edelman Date: Thu, 2 Jun 2022 09:50:45 -0700 Subject: [PATCH 04/22] @uppy/url: enable passing optional meta data to `addFile` (#3788) This commit aligns `@uppy/url` with `@uppy/core`. Co-authored-by: Antoine du Hamel Co-authored-by: Merlijn Vos --- packages/@uppy/url/src/Url.jsx | 3 ++- packages/@uppy/url/types/index.d.ts | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/@uppy/url/src/Url.jsx b/packages/@uppy/url/src/Url.jsx index 06c1d35a63..00a4c84044 100644 --- a/packages/@uppy/url/src/Url.jsx +++ b/packages/@uppy/url/src/Url.jsx @@ -105,7 +105,7 @@ export default class Url extends UIPlugin { }) } - async addFile (protocollessUrl) { + async addFile (protocollessUrl, optionalMeta = undefined) { const url = this.addProtocolToURL(protocollessUrl) if (!this.checkIfCorrectURL(url)) { this.uppy.log(`[URL] Incorrect URL entered: ${url}`) @@ -117,6 +117,7 @@ export default class Url extends UIPlugin { const meta = await this.getMeta(url) const tagFile = { + meta: optionalMeta, source: this.id, name: this.getFileNameFromUrl(url), type: meta.type, diff --git a/packages/@uppy/url/types/index.d.ts b/packages/@uppy/url/types/index.d.ts index 5494abe291..c923bf0f8f 100644 --- a/packages/@uppy/url/types/index.d.ts +++ b/packages/@uppy/url/types/index.d.ts @@ -1,4 +1,4 @@ -import type { PluginOptions, UIPlugin, PluginTarget } from '@uppy/core' +import type { PluginOptions, UIPlugin, PluginTarget, IndexedObject } from '@uppy/core' import type { RequestClientOptions } from '@uppy/companion-client' import UrlLocale from './generatedLocale' @@ -9,7 +9,7 @@ export interface UrlOptions extends PluginOptions, RequestClientOptions { } declare class Url extends UIPlugin { - public addFile(url: string): undefined | string | never + public addFile(url: string, meta?: IndexedObject): undefined | string | never } export default Url From 6514e43e5d37fe072f07c778489d480bda8b9e74 Mon Sep 17 00:00:00 2001 From: Paulo Lemos Neto Date: Thu, 2 Jun 2022 18:44:53 +0100 Subject: [PATCH 05/22] @uppy/aws-s3-multipart: allow `companionHeaders` to be modified with `setOptions` (#3770) --- packages/@uppy/aws-s3-multipart/src/index.js | 29 +++++++++++++---- .../@uppy/aws-s3-multipart/src/index.test.js | 31 +++++++++++++++++++ packages/@uppy/aws-s3/src/index.js | 15 +++++++++ packages/@uppy/aws-s3/src/index.test.js | 31 +++++++++++++++++++ .../companion-client/src/RequestClient.js | 12 +++++-- 5 files changed, 110 insertions(+), 8 deletions(-) diff --git a/packages/@uppy/aws-s3-multipart/src/index.js b/packages/@uppy/aws-s3-multipart/src/index.js index 6161d99c82..5b61d9332a 100644 --- a/packages/@uppy/aws-s3-multipart/src/index.js +++ b/packages/@uppy/aws-s3-multipart/src/index.js @@ -20,12 +20,14 @@ function assertServerError (res) { export default class AwsS3Multipart extends BasePlugin { static VERSION = packageJson.version + #client + constructor (uppy, opts) { super(uppy, opts) this.type = 'uploader' this.id = this.opts.id || 'AwsS3Multipart' this.title = 'AWS S3 Multipart' - this.client = new RequestClient(uppy, opts) + this.#client = new RequestClient(uppy, opts) const defaultOptions = { timeout: 30 * 1000, @@ -36,6 +38,7 @@ export default class AwsS3Multipart extends BasePlugin { prepareUploadParts: this.prepareUploadParts.bind(this), abortMultipartUpload: this.abortMultipartUpload.bind(this), completeMultipartUpload: this.completeMultipartUpload.bind(this), + companionHeaders: {}, } this.opts = { ...defaultOptions, ...opts } @@ -49,6 +52,13 @@ export default class AwsS3Multipart extends BasePlugin { this.uploaderSockets = Object.create(null) } + [Symbol.for('uppy test: getClient')] () { return this.#client } + + // TODO: remove getter and setter for #client on the next major release + get client () { return this.#client } + + set client (client) { this.#client = client } + /** * Clean up all references for a file's upload: the MultipartUploader instance, * any events related to the file, and the Companion WebSocket connection. @@ -88,7 +98,7 @@ export default class AwsS3Multipart extends BasePlugin { } }) - return this.client.post('s3/multipart', { + return this.#client.post('s3/multipart', { filename: file.name, type: file.type, metadata, @@ -99,7 +109,7 @@ export default class AwsS3Multipart extends BasePlugin { this.assertHost('listParts') const filename = encodeURIComponent(key) - return this.client.get(`s3/multipart/${uploadId}?key=${filename}`) + return this.#client.get(`s3/multipart/${uploadId}?key=${filename}`) .then(assertServerError) } @@ -107,7 +117,7 @@ export default class AwsS3Multipart extends BasePlugin { this.assertHost('prepareUploadParts') const filename = encodeURIComponent(key) - return this.client.get(`s3/multipart/${uploadId}/batch?key=${filename}&partNumbers=${partNumbers.join(',')}`) + return this.#client.get(`s3/multipart/${uploadId}/batch?key=${filename}&partNumbers=${partNumbers.join(',')}`) .then(assertServerError) } @@ -116,7 +126,7 @@ export default class AwsS3Multipart extends BasePlugin { const filename = encodeURIComponent(key) const uploadIdEnc = encodeURIComponent(uploadId) - return this.client.post(`s3/multipart/${uploadIdEnc}/complete?key=${filename}`, { parts }) + return this.#client.post(`s3/multipart/${uploadIdEnc}/complete?key=${filename}`, { parts }) .then(assertServerError) } @@ -125,7 +135,7 @@ export default class AwsS3Multipart extends BasePlugin { const filename = encodeURIComponent(key) const uploadIdEnc = encodeURIComponent(uploadId) - return this.client.delete(`s3/multipart/${uploadIdEnc}?key=${filename}`) + return this.#client.delete(`s3/multipart/${uploadIdEnc}?key=${filename}`) .then(assertServerError) } @@ -436,6 +446,11 @@ export default class AwsS3Multipart extends BasePlugin { return Promise.all(promises) } + #setCompanionHeaders = () => { + this.#client.setCompanionHeaders(this.opts.companionHeaders) + return Promise.resolve() + } + onFileRemove (fileID, cb) { this.uploaderEvents[fileID].on('file-removed', (file) => { if (fileID === file.id) cb(file.id) @@ -495,6 +510,7 @@ export default class AwsS3Multipart extends BasePlugin { resumableUploads: true, }, }) + this.uppy.addPreProcessor(this.#setCompanionHeaders) this.uppy.addUploader(this.upload) } @@ -506,6 +522,7 @@ export default class AwsS3Multipart extends BasePlugin { resumableUploads: false, }, }) + this.uppy.removePreProcessor(this.#setCompanionHeaders) this.uppy.removeUploader(this.upload) } } diff --git a/packages/@uppy/aws-s3-multipart/src/index.test.js b/packages/@uppy/aws-s3-multipart/src/index.test.js index 6a57f888dd..89aa67b7b4 100644 --- a/packages/@uppy/aws-s3-multipart/src/index.test.js +++ b/packages/@uppy/aws-s3-multipart/src/index.test.js @@ -227,4 +227,35 @@ describe('AwsS3Multipart', () => { expect(awsS3Multipart.opts.prepareUploadParts.mock.calls.length).toEqual(2) }) }) + + describe('dynamic companionHeader', () => { + let core + let awsS3Multipart + const oldToken = 'old token' + const newToken = 'new token' + + beforeEach(() => { + core = new Core() + core.use(AwsS3Multipart, { + companionHeaders: { + authorization: oldToken, + }, + }) + awsS3Multipart = core.getPlugin('AwsS3Multipart') + }) + + it('companionHeader is updated before uploading file', async () => { + awsS3Multipart.setOptions({ + companionHeaders: { + authorization: newToken, + }, + }) + + await core.upload() + + const client = awsS3Multipart[Symbol.for('uppy test: getClient')]() + + expect(client[Symbol.for('uppy test: getCompanionHeaders')]().authorization).toEqual(newToken) + }) + }) }) diff --git a/packages/@uppy/aws-s3/src/index.js b/packages/@uppy/aws-s3/src/index.js index 0f2c697121..75e342d6c7 100644 --- a/packages/@uppy/aws-s3/src/index.js +++ b/packages/@uppy/aws-s3/src/index.js @@ -117,6 +117,7 @@ export default class AwsS3 extends BasePlugin { limit: 0, metaFields: [], // have to opt in getUploadParameters: this.getUploadParameters.bind(this), + companionHeaders: {}, } this.opts = { ...defaultOptions, ...opts } @@ -128,6 +129,13 @@ export default class AwsS3 extends BasePlugin { this.#requests = new RateLimitedQueue(this.opts.limit) } + [Symbol.for('uppy test: getClient')] () { return this.#client } + + // TODO: remove getter and setter for #client on the next major release + get client () { return this.#client } + + set client (client) { this.#client = client } + getUploadParameters (file) { if (!this.opts.companionUrl) { throw new Error('Expected a `companionUrl` option containing a Companion address.') @@ -216,8 +224,14 @@ export default class AwsS3 extends BasePlugin { }) } + #setCompanionHeaders = () => { + this.#client.setCompanionHeaders(this.opts.companionHeaders) + return Promise.resolve() + } + install () { const { uppy } = this + uppy.addPreProcessor(this.#setCompanionHeaders) uppy.addUploader(this.#handleUpload) // Get the response data from a successful XMLHttpRequest instance. @@ -279,6 +293,7 @@ export default class AwsS3 extends BasePlugin { } uninstall () { + this.uppy.removePreProcessor(this.#setCompanionHeaders) this.uppy.removeUploader(this.#handleUpload) } } diff --git a/packages/@uppy/aws-s3/src/index.test.js b/packages/@uppy/aws-s3/src/index.test.js index 2f85949a23..ac6d8cfdff 100644 --- a/packages/@uppy/aws-s3/src/index.test.js +++ b/packages/@uppy/aws-s3/src/index.test.js @@ -35,4 +35,35 @@ describe('AwsS3', () => { expect(() => awsS3.opts.getUploadParameters(file)).not.toThrow() }) }) + + describe('dynamic companionHeader', () => { + let core + let awsS3 + const oldToken = 'old token' + const newToken = 'new token' + + beforeEach(() => { + core = new Core() + core.use(AwsS3, { + companionHeaders: { + authorization: oldToken, + }, + }) + awsS3 = core.getPlugin('AwsS3') + }) + + it('companionHeader is updated before uploading file', async () => { + awsS3.setOptions({ + companionHeaders: { + authorization: newToken, + }, + }) + + await core.upload() + + const client = awsS3[Symbol.for('uppy test: getClient')]() + + expect(client[Symbol.for('uppy test: getCompanionHeaders')]().authorization).toEqual(newToken) + }) + }) }) diff --git a/packages/@uppy/companion-client/src/RequestClient.js b/packages/@uppy/companion-client/src/RequestClient.js index 36430b22e8..637008bdd7 100644 --- a/packages/@uppy/companion-client/src/RequestClient.js +++ b/packages/@uppy/companion-client/src/RequestClient.js @@ -35,6 +35,8 @@ async function handleJSONResponse (res) { export default class RequestClient { static VERSION = packageJson.version + #companionHeaders + #getPostResponseFunc = skip => response => (skip ? response : this.onReceiveResponse(response)) constructor (uppy, opts) { @@ -43,8 +45,15 @@ export default class RequestClient { this.onReceiveResponse = this.onReceiveResponse.bind(this) this.allowedHeaders = ['accept', 'content-type', 'uppy-auth-token'] this.preflightDone = false + this.#companionHeaders = opts?.companionHeaders + } + + setCompanionHeaders (headers) { + this.#companionHeaders = headers } + [Symbol.for('uppy test: getCompanionHeaders')] () { return this.#companionHeaders } + get hostname () { const { companion } = this.uppy.getState() const host = this.opts.companionUrl @@ -58,10 +67,9 @@ export default class RequestClient { } headers () { - const userHeaders = this.opts.companionHeaders || {} return Promise.resolve({ ...RequestClient.defaultHeaders, - ...userHeaders, + ...this.#companionHeaders, }) } From 55ae7645bdb51b7c4c606beda253cb9d81150797 Mon Sep 17 00:00:00 2001 From: Antoine du Hamel Date: Thu, 2 Jun 2022 20:17:37 +0200 Subject: [PATCH 06/22] meta: fix GHA workflow for prereleases --- .github/workflows/release-beta-candidate.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release-beta-candidate.yml b/.github/workflows/release-beta-candidate.yml index 1187a6ee9d..c398bcdd2a 100644 --- a/.github/workflows/release-beta-candidate.yml +++ b/.github/workflows/release-beta-candidate.yml @@ -14,7 +14,7 @@ jobs: - name: Checkout sources uses: actions/checkout@v3 with: - branch: release + branch: release-beta - name: Rebase run: | git fetch origin ${{ env.BETA_BRANCH }} --depth=1 From 4527b2ff28833511c9fc2566bf72ac4848e5375e Mon Sep 17 00:00:00 2001 From: Antoine du Hamel Date: Mon, 6 Jun 2022 18:21:18 +0200 Subject: [PATCH 07/22] @uppy/robodog: fix linter warnings (#3808) --- packages/@uppy/robodog/src/TransloaditResultsPlugin.js | 4 ++-- packages/@uppy/robodog/src/addProviders.js | 3 +++ packages/@uppy/robodog/src/form.js | 1 + packages/@uppy/robodog/src/index.js | 2 ++ 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/@uppy/robodog/src/TransloaditResultsPlugin.js b/packages/@uppy/robodog/src/TransloaditResultsPlugin.js index 6ad2795555..7bad3aca70 100644 --- a/packages/@uppy/robodog/src/TransloaditResultsPlugin.js +++ b/packages/@uppy/robodog/src/TransloaditResultsPlugin.js @@ -26,9 +26,9 @@ class TransloaditResultsPlugin extends BasePlugin { assemblies.forEach((assembly) => { Object.keys(assembly.results).forEach((stepName) => { const results = assembly.results[stepName] - results.forEach((result) => { + results.forEach((resultObject) => { assemblyResults.push({ - ...result, + ...resultObject, assemblyId: assembly.assembly_id, stepName, }) diff --git a/packages/@uppy/robodog/src/addProviders.js b/packages/@uppy/robodog/src/addProviders.js index 0f00dc22e3..adab8a4643 100644 --- a/packages/@uppy/robodog/src/addProviders.js +++ b/packages/@uppy/robodog/src/addProviders.js @@ -1,3 +1,4 @@ +/* eslint-disable global-require */ const Transloadit = require('@uppy/transloadit') const has = require('@uppy/utils/lib/hasProperty') @@ -39,6 +40,7 @@ function addRemoteProvider (uppy, name, opts) { companionAllowedHosts: Transloadit.COMPANION_PATTERN, } + // eslint-disable-next-line no-shadow remoteProviderOptionNames.forEach((name) => { if (has(opts, name)) providerOptions[name] = opts[name] }) @@ -68,6 +70,7 @@ function addLocalProvider (uppy, name, opts) { const Provider = localProviders[name] const providerOptions = {} + // eslint-disable-next-line no-shadow localProviderOptionNames.forEach((name) => { if (has(opts, name)) providerOptions[name] = opts[name] }) diff --git a/packages/@uppy/robodog/src/form.js b/packages/@uppy/robodog/src/form.js index 68cf15ef68..16a32c6c11 100644 --- a/packages/@uppy/robodog/src/form.js +++ b/packages/@uppy/robodog/src/form.js @@ -24,6 +24,7 @@ function mergeDefaultLocale (defaults, userProvided = {}) { function form (target, opts) { if (!opts) throw new TypeError('robodog.form: must provide an options object') + // eslint-disable-next-line no-param-reassign opts = { ...opts, locale: mergeDefaultLocale(defaultLocaleStrings, opts.locale), diff --git a/packages/@uppy/robodog/src/index.js b/packages/@uppy/robodog/src/index.js index eae67f0152..ebd27836fb 100644 --- a/packages/@uppy/robodog/src/index.js +++ b/packages/@uppy/robodog/src/index.js @@ -8,5 +8,7 @@ module.exports = { form, pick, upload, + // We need to keep the require here because we're using `babel-plugin-inline-package-json`. + // eslint-disable-next-line global-require VERSION: require('../package.json').version, } From 76751f6f4fae4e5931138a99e432c9bffe1ab679 Mon Sep 17 00:00:00 2001 From: Antoine du Hamel Date: Tue, 7 Jun 2022 07:48:35 +0200 Subject: [PATCH 08/22] @uppy/core: fix `TypeError` when file was deleted (#3811) --- packages/@uppy/core/src/Uppy.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/@uppy/core/src/Uppy.js b/packages/@uppy/core/src/Uppy.js index 7c39b796db..af48cd779b 100644 --- a/packages/@uppy/core/src/Uppy.js +++ b/packages/@uppy/core/src/Uppy.js @@ -967,7 +967,7 @@ class Uppy { if (error.details) { newError.details += ` ${error.details}` } - newError.message = this.i18n('failedToUpload', { file: file.name }) + newError.message = this.i18n('failedToUpload', { file: file?.name }) this.#informAndEmit(newError) } else { this.#informAndEmit(error) From aa1ecd4d60d58ae4c168a5e29f2a74eeab3aee3c Mon Sep 17 00:00:00 2001 From: Wes Sankey <97678695+weston-sankey-mark43@users.noreply.github.com> Date: Tue, 7 Jun 2022 09:21:05 -0400 Subject: [PATCH 09/22] @uppy/xhr-upload: replace `ev.target.status` with `xhr.status` (#3782) --- packages/@uppy/xhr-upload/src/index.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/@uppy/xhr-upload/src/index.js b/packages/@uppy/xhr-upload/src/index.js index 688b4ef98f..4e1e9d8611 100644 --- a/packages/@uppy/xhr-upload/src/index.js +++ b/packages/@uppy/xhr-upload/src/index.js @@ -251,7 +251,7 @@ export default class XHRUpload extends BasePlugin { } }) - xhr.addEventListener('load', (ev) => { + xhr.addEventListener('load', () => { this.uppy.log(`[XHRUpload] ${id} finished`) timer.done() queuedRequest.done() @@ -260,12 +260,12 @@ export default class XHRUpload extends BasePlugin { this.uploaderEvents[file.id] = null } - if (opts.validateStatus(ev.target.status, xhr.responseText, xhr)) { + if (opts.validateStatus(xhr.status, xhr.responseText, xhr)) { const body = opts.getResponseData(xhr.responseText, xhr) const uploadURL = body[opts.responseUrlFieldName] const uploadResp = { - status: ev.target.status, + status: xhr.status, body, uploadURL, } @@ -282,7 +282,7 @@ export default class XHRUpload extends BasePlugin { const error = buildResponseError(xhr, opts.getResponseError(xhr.responseText, xhr)) const response = { - status: ev.target.status, + status: xhr.status, body, } From df15292949dfe2c1d5e24c602feee0b41cef3b52 Mon Sep 17 00:00:00 2001 From: Merlijn Vos Date: Tue, 7 Jun 2022 18:08:50 +0200 Subject: [PATCH 10/22] queue socket token requests for remote files (#3797) Queue socket token request and immediately open socket connection. This commit helps reducing the probability of the remote socket timing out, and ensures the number of requests sent to Companion at once doesn't exceed the `limit` option. --- packages/@uppy/aws-s3-multipart/src/index.js | 65 +++++++++++--------- packages/@uppy/aws-s3/src/MiniXHRUpload.js | 52 ++++++++++++---- packages/@uppy/tus/src/index.js | 65 +++++++++++--------- 3 files changed, 111 insertions(+), 71 deletions(-) diff --git a/packages/@uppy/aws-s3-multipart/src/index.js b/packages/@uppy/aws-s3-multipart/src/index.js index 5b61d9332a..259dfe88b3 100644 --- a/packages/@uppy/aws-s3-multipart/src/index.js +++ b/packages/@uppy/aws-s3-multipart/src/index.js @@ -20,6 +20,8 @@ function assertServerError (res) { export default class AwsS3Multipart extends BasePlugin { static VERSION = packageJson.version + #queueRequestSocketToken + #client constructor (uppy, opts) { @@ -50,6 +52,8 @@ export default class AwsS3Multipart extends BasePlugin { this.uploaders = Object.create(null) this.uploaderEvents = Object.create(null) this.uploaderSockets = Object.create(null) + + this.#queueRequestSocketToken = this.requests.wrapPromiseFunction(this.#requestSocketToken) } [Symbol.for('uppy test: getClient')] () { return this.#client } @@ -289,7 +293,26 @@ export default class AwsS3Multipart extends BasePlugin { }) } - uploadRemote (file) { + #requestSocketToken = async (file) => { + const Client = file.remote.providerOptions.provider ? Provider : RequestClient + const client = new Client(this.uppy, file.remote.providerOptions) + const opts = { ...this.opts } + + if (file.tus) { + // Install file-specific upload overrides. + Object.assign(opts, file.tus) + } + + const res = await client.post(file.remote.url, { + ...file.remote.body, + protocol: 's3-multipart', + size: file.data.size, + metadata: file.meta, + }) + return res.token + } + + async uploadRemote (file) { this.resetUploaderReferences(file.id) // Don't double-emit upload-started for Golden Retriever-restored files that were already started @@ -297,33 +320,18 @@ export default class AwsS3Multipart extends BasePlugin { this.uppy.emit('upload-started', file) } - if (file.serverToken) { - return this.connectToServerSocket(file) - } - - return new Promise((resolve, reject) => { - const Client = file.remote.providerOptions.provider ? Provider : RequestClient - const client = new Client(this.uppy, file.remote.providerOptions) - client.post( - file.remote.url, - { - ...file.remote.body, - protocol: 's3-multipart', - size: file.data.size, - metadata: file.meta, - }, - ).then((res) => { - this.uppy.setFileState(file.id, { serverToken: res.token }) - // eslint-disable-next-line no-param-reassign - file = this.uppy.getFile(file.id) + try { + if (file.serverToken) { return this.connectToServerSocket(file) - }).then(() => { - resolve() - }).catch((err) => { - this.uppy.emit('upload-error', file, err) - reject(err) - }) - }) + } + const serverToken = await this.#queueRequestSocketToken(file) + + this.uppy.setFileState(file.id, { serverToken }) + return this.connectToServerSocket(this.uppy.getFile(file.id)) + } catch (err) { + this.uppy.emit('upload-error', file, err) + throw err + } } connectToServerSocket (file) { @@ -332,7 +340,7 @@ export default class AwsS3Multipart extends BasePlugin { const token = file.serverToken const host = getSocketHost(file.remote.companionUrl) - const socket = new Socket({ target: `${host}/api/${token}`, autoOpen: false }) + const socket = new Socket({ target: `${host}/api/${token}` }) this.uploaderSockets[file.id] = socket this.uploaderEvents[file.id] = new EventTracker(this.uppy) @@ -422,7 +430,6 @@ export default class AwsS3Multipart extends BasePlugin { }) queuedRequest = this.requests.run(() => { - socket.open() if (file.isPaused) { socket.send('pause', {}) } diff --git a/packages/@uppy/aws-s3/src/MiniXHRUpload.js b/packages/@uppy/aws-s3/src/MiniXHRUpload.js index c300a7c423..b2a5cded79 100644 --- a/packages/@uppy/aws-s3/src/MiniXHRUpload.js +++ b/packages/@uppy/aws-s3/src/MiniXHRUpload.js @@ -53,6 +53,8 @@ function createFormDataUpload (file, opts) { const createBareUpload = file => file.data export default class MiniXHRUpload { + #queueRequestSocketToken + constructor (uppy, opts) { this.uppy = uppy this.opts = { @@ -65,6 +67,8 @@ export default class MiniXHRUpload { this.requests = opts[internalRateLimitedQueue] this.uploaderEvents = Object.create(null) this.i18n = opts.i18n + + this.#queueRequestSocketToken = this.requests.wrapPromiseFunction(this.#requestSocketToken) } #getOptions (file) { @@ -243,19 +247,21 @@ export default class MiniXHRUpload { }) } - #uploadRemoteFile (file) { + #requestSocketToken = async (file) => { const opts = this.#getOptions(file) - // This is done in index.js in the S3 plugin. - // this.uppy.emit('upload-started', file) - + const Client = file.remote.providerOptions.provider ? Provider : RequestClient + const client = new Client(this.uppy, file.remote.providerOptions) const metaFields = Array.isArray(opts.metaFields) ? opts.metaFields - // Send along all fields by default. + // Send along all fields by default. : Object.keys(file.meta) - const Client = file.remote.providerOptions.provider ? Provider : RequestClient - const client = new Client(this.uppy, file.remote.providerOptions) - return client.post(file.remote.url, { + if (file.tus) { + // Install file-specific upload overrides. + Object.assign(opts, file.tus) + } + + const res = await client.post(file.remote.url, { ...file.remote.body, endpoint: opts.endpoint, size: file.data.size, @@ -264,14 +270,34 @@ export default class MiniXHRUpload { httpMethod: opts.method, useFormData: opts.formData, headers: opts.headers, - }).then(res => new Promise((resolve, reject) => { - const { token } = res + }) + return res.token + } + + async #uploadRemoteFile (file) { + try { + if (file.serverToken) { + return this.connectToServerSocket(file) + } + const serverToken = await this.#queueRequestSocketToken(file) + + this.uppy.setFileState(file.id, { serverToken }) + return this.connectToServerSocket(this.uppy.getFile(file.id)) + } catch (err) { + this.uppy.emit('upload-error', file, err) + throw err + } + } + + connectToServerSocket (file) { + return new Promise((resolve, reject) => { + const opts = this.#getOptions(file) + const token = file.serverToken const host = getSocketHost(file.remote.companionUrl) - const socket = new Socket({ target: `${host}/api/${token}`, autoOpen: false }) + const socket = new Socket({ target: `${host}/api/${token}` }) this.uploaderEvents[file.id] = new EventTracker(this.uppy) const queuedRequest = this.requests.run(() => { - socket.open() if (file.isPaused) { socket.send('pause', {}) } @@ -341,6 +367,6 @@ export default class MiniXHRUpload { }).catch((err) => { this.uppy.emit('upload-error', file, err) return Promise.reject(err) - })) + }) } } diff --git a/packages/@uppy/tus/src/index.js b/packages/@uppy/tus/src/index.js index 00abd40167..57f9c3bdfc 100644 --- a/packages/@uppy/tus/src/index.js +++ b/packages/@uppy/tus/src/index.js @@ -57,6 +57,8 @@ export default class Tus extends BasePlugin { #retryDelayIterator + #queueRequestSocketToken + /** * @param {Uppy} uppy * @param {TusOptions} opts @@ -97,6 +99,7 @@ export default class Tus extends BasePlugin { this.handleResetProgress = this.handleResetProgress.bind(this) this.handleUpload = this.handleUpload.bind(this) + this.#queueRequestSocketToken = this.requests.wrapPromiseFunction(this.#requestSocketToken) } handleResetProgress () { @@ -427,43 +430,48 @@ export default class Tus extends BasePlugin { }) } - /** - * @param {UppyFile} file for use with upload - * @returns {Promise} - */ - async uploadRemote (file) { - this.resetUploaderReferences(file.id) - + #requestSocketToken = async (file) => { + const Client = file.remote.providerOptions.provider ? Provider : RequestClient + const client = new Client(this.uppy, file.remote.providerOptions) const opts = { ...this.opts } + if (file.tus) { // Install file-specific upload overrides. Object.assign(opts, file.tus) } - this.uppy.emit('upload-started', file) - this.uppy.log(file.remote.url) + const res = await client.post(file.remote.url, { + ...file.remote.body, + endpoint: opts.endpoint, + uploadUrl: opts.uploadUrl, + protocol: 'tus', + size: file.data.size, + headers: opts.headers, + metadata: file.meta, + }) + return res.token + } - if (file.serverToken) { - await this.connectToServerSocket(file) - return - } + /** + * @param {UppyFile} file for use with upload + * @returns {Promise} + */ + async uploadRemote (file) { + this.resetUploaderReferences(file.id) - const Client = file.remote.providerOptions.provider ? Provider : RequestClient - const client = new Client(this.uppy, file.remote.providerOptions) + // Don't double-emit upload-started for Golden Retriever-restored files that were already started + if (!file.progress.uploadStarted || !file.isRestored) { + this.uppy.emit('upload-started', file) + } try { - // !! cancellation is NOT supported at this stage yet - const res = await client.post(file.remote.url, { - ...file.remote.body, - endpoint: opts.endpoint, - uploadUrl: opts.uploadUrl, - protocol: 'tus', - size: file.data.size, - headers: opts.headers, - metadata: file.meta, - }) - this.uppy.setFileState(file.id, { serverToken: res.token }) - await this.connectToServerSocket(this.uppy.getFile(file.id)) + if (file.serverToken) { + return this.connectToServerSocket(file) + } + const serverToken = await this.#queueRequestSocketToken(file) + + this.uppy.setFileState(file.id, { serverToken }) + return this.connectToServerSocket(this.uppy.getFile(file.id)) } catch (err) { this.uppy.emit('upload-error', file, err) throw err @@ -482,7 +490,7 @@ export default class Tus extends BasePlugin { return new Promise((resolve, reject) => { const token = file.serverToken const host = getSocketHost(file.remote.companionUrl) - const socket = new Socket({ target: `${host}/api/${token}`, autoOpen: false }) + const socket = new Socket({ target: `${host}/api/${token}` }) this.uploaderSockets[file.id] = socket this.uploaderEvents[file.id] = new EventTracker(this.uppy) @@ -591,7 +599,6 @@ export default class Tus extends BasePlugin { }) queuedRequest = this.requests.run(() => { - socket.open() if (file.isPaused) { socket.send('pause', {}) } From 2c05d517949fca12f07b495a03889dd38e5a1826 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20P=C4=99ksa?= Date: Tue, 7 Jun 2022 18:14:37 +0200 Subject: [PATCH 11/22] Reset uppy instance when React component is unmounted (#3814) --- packages/@uppy/react/src/useUppy.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/@uppy/react/src/useUppy.js b/packages/@uppy/react/src/useUppy.js index cf5d428630..f90e788470 100644 --- a/packages/@uppy/react/src/useUppy.js +++ b/packages/@uppy/react/src/useUppy.js @@ -18,8 +18,9 @@ module.exports = function useUppy (factory) { useEffect(() => { return () => { uppy.current.close({ reason: 'unmount' }) + uppy.current = undefined } - }, []) + }, [uppy]) return uppy.current } From 9a597114fd2eb54f2c20627f8870309b98d27c26 Mon Sep 17 00:00:00 2001 From: Artur Paikin Date: Tue, 7 Jun 2022 17:56:02 +0100 Subject: [PATCH 12/22] Add @uppy/remote-sources preset/plugin (#3676) Co-authored-by: Merlijn Vos Co-authored-by: Antoine du Hamel --- .eslintrc.js | 7 +- packages/@uppy/remote-sources/LICENSE | 21 + packages/@uppy/remote-sources/README.md | 35 ++ packages/@uppy/remote-sources/package.json | 51 ++ packages/@uppy/remote-sources/src/index.js | 83 +++ .../@uppy/remote-sources/src/index.test.js | 42 ++ .../@uppy/remote-sources/types/index.d.ts | 13 + .../remote-sources/types/index.test-d.ts | 11 + packages/uppy/index.js | 1 + packages/uppy/index.mjs | 1 + packages/uppy/package.json | 4 + private/dev/Dashboard.js | 32 +- website/src/docs/remote-sources.md | 78 +++ yarn.lock | 564 +++++++++++++++++- 14 files changed, 919 insertions(+), 24 deletions(-) create mode 100644 packages/@uppy/remote-sources/LICENSE create mode 100644 packages/@uppy/remote-sources/README.md create mode 100644 packages/@uppy/remote-sources/package.json create mode 100644 packages/@uppy/remote-sources/src/index.js create mode 100644 packages/@uppy/remote-sources/src/index.test.js create mode 100644 packages/@uppy/remote-sources/types/index.d.ts create mode 100644 packages/@uppy/remote-sources/types/index.test-d.ts create mode 100644 website/src/docs/remote-sources.md diff --git a/.eslintrc.js b/.eslintrc.js index f2a6c09586..1aff34bd25 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -197,8 +197,8 @@ module.exports = { // Packages that have switched to ESM sources: 'packages/@uppy/audio/src/**/*.js', - 'packages/@uppy/aws-s3/src/**/*.js', 'packages/@uppy/aws-s3-multipart/src/**/*.js', + 'packages/@uppy/aws-s3/src/**/*.js', 'packages/@uppy/box/src/**/*.js', 'packages/@uppy/companion-client/src/**/*.js', 'packages/@uppy/compressor/src/**/*.js', @@ -221,16 +221,17 @@ module.exports = { 'packages/@uppy/progress-bar/src/**/*.js', 'packages/@uppy/provider-views/src/**/*.js', 'packages/@uppy/redux-dev-tools/src/**/*.js', + 'packages/@uppy/remote-sources/src/**/*.js', 'packages/@uppy/screen-capture/src/**/*.js', 'packages/@uppy/status-bar/src/**/*.js', 'packages/@uppy/store-default/src/**/*.js', 'packages/@uppy/store-redux/src/**/*.js', - 'packages/@uppy/svelte/src/**/*.js', 'packages/@uppy/svelte/rollup.config.js', + 'packages/@uppy/svelte/src/**/*.js', 'packages/@uppy/thumbnail-generator/src/**/*.js', + 'packages/@uppy/transloadit/src/**/*.js', 'packages/@uppy/tus/src/**/*.js', 'packages/@uppy/unsplash/src/**/*.js', - 'packages/@uppy/transloadit/src/**/*.js', 'packages/@uppy/url/src/**/*.js', 'packages/@uppy/utils/src/**/*.js', 'packages/@uppy/vue/src/**/*.js', diff --git a/packages/@uppy/remote-sources/LICENSE b/packages/@uppy/remote-sources/LICENSE new file mode 100644 index 0000000000..d01ae72874 --- /dev/null +++ b/packages/@uppy/remote-sources/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2022 Transloadit + +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. diff --git a/packages/@uppy/remote-sources/README.md b/packages/@uppy/remote-sources/README.md new file mode 100644 index 0000000000..83c6950fc0 --- /dev/null +++ b/packages/@uppy/remote-sources/README.md @@ -0,0 +1,35 @@ +# @uppy/remote-sources + +Uppy logo: a superman puppy in a pink suit + + CI status for Uppy tests CI status for Companion tests CI status for browser tests + +## Example + +```js +import Uppy from '@uppy/core' +import RemoteSources from '@uppy/remote-sources' + +const uppy = new Uppy() +uppy.use(RemoteSources, { + companionUrl: 'https://your-companion-url', +}) +``` + +## Installation + +```bash +npm install @uppy/remote-sources +# or +yarn add @uppy/remote-sources +``` + +Alternatively, you can also use this plugin in a pre-built bundle from Transloadit’s CDN: Edgly. In that case `Uppy.RemoteSources` will attach itself to the global `window.Uppy` object. See the [main Uppy documentation](https://uppy.io/docs/#Installation) for instructions. + +## Documentation + +Documentation for this plugin can be found on the [Uppy website](https://uppy.io/docs/remote-sources). + +## License + +[The MIT License](./LICENSE). diff --git a/packages/@uppy/remote-sources/package.json b/packages/@uppy/remote-sources/package.json new file mode 100644 index 0000000000..54f4352686 --- /dev/null +++ b/packages/@uppy/remote-sources/package.json @@ -0,0 +1,51 @@ +{ + "name": "@uppy/remote-sources", + "description": "Uppy plugin that includes all remote sources that Uppy+Companion offer, like Instagram, Google Drive, Dropox, Box, Unsplash, Url etc", + "version": "0.1.0", + "license": "MIT", + "main": "lib/index.js", + "types": "types/index.d.ts", + "type": "module", + "keywords": [ + "file uploader", + "instagram", + "google-drive", + "facebook", + "dropbox", + "onedrive", + "zoom", + "unsplash", + "box", + "url" + ], + "homepage": "https://uppy.io", + "bugs": { + "url": "https://github.com/transloadit/uppy/issues" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/transloadit/uppy.git" + }, + "dependencies": { + "@uppy/box": "workspace:^", + "@uppy/dashboard": "workspace:^", + "@uppy/dropbox": "workspace:^", + "@uppy/facebook": "workspace:^", + "@uppy/google-drive": "workspace:^", + "@uppy/instagram": "workspace:^", + "@uppy/onedrive": "workspace:^", + "@uppy/unsplash": "workspace:^", + "@uppy/url": "workspace:^", + "@uppy/zoom": "workspace:^" + }, + "peerDependencies": { + "@uppy/core": "workspace:^" + }, + "publishConfig": { + "access": "public" + }, + "devDependencies": { + "@jest/globals": "^28.1.0", + "resize-observer-polyfill": "^1.5.1" + } +} diff --git a/packages/@uppy/remote-sources/src/index.js b/packages/@uppy/remote-sources/src/index.js new file mode 100644 index 0000000000..a332c89eba --- /dev/null +++ b/packages/@uppy/remote-sources/src/index.js @@ -0,0 +1,83 @@ +import { BasePlugin } from '@uppy/core' +import Dashboard from '@uppy/dashboard' +import Dropbox from '@uppy/dropbox' +import GoogleDrive from '@uppy/google-drive' +import Instagram from '@uppy/instagram' +import Facebook from '@uppy/facebook' +import OneDrive from '@uppy/onedrive' +import Box from '@uppy/box' +import Unsplash from '@uppy/unsplash' +import Url from '@uppy/url' +import Zoom from '@uppy/zoom' + +import packageJson from '../package.json' + +const availablePlugins = [ + Box, + Dropbox, + Facebook, + GoogleDrive, + Instagram, + OneDrive, + Unsplash, + Url, + Zoom, +] + +export default class RemoteSources extends BasePlugin { + static VERSION = packageJson.version + + #installedPlugins = new Set() + + constructor (uppy, opts) { + super(uppy, opts) + this.id = this.opts.id || 'RemoteSources' + this.type = 'acquirer' + + const defaultOptions = { + sources: [ + 'Box', + 'Dropbox', + 'Facebook', + 'GoogleDrive', + 'Instagram', + 'OneDrive', + 'Unsplash', + 'Url', + ], + target: Dashboard, + } + this.opts = { ...defaultOptions, ...opts } + + if (this.opts.companionUrl == null) { + throw new Error('Please specify companionUrl for RemoteSources to work, see https://uppy.io/docs/remote-sources#companionUrl') + } + } + + setOptions (newOpts) { + this.uninstall() + super.setOptions(newOpts) + this.install() + } + + install () { + this.opts.sources.forEach((pluginId) => { + const optsForRemoteSourcePlugin = { ...this.opts, sources: undefined } + const plugin = availablePlugins.find(p => p.name === pluginId) + if (plugin == null) { + const pluginNames = availablePlugins.map(p => p.name) + const formatter = new Intl.ListFormat('en', { style: 'long', type: 'disjunction' }) + throw new Error(`Invalid plugin: "${pluginId}" is not one of: ${formatter.format(pluginNames)}.`) + } + this.uppy.use(plugin, optsForRemoteSourcePlugin) + this.#installedPlugins.add(plugin) + }) + } + + uninstall () { + for (const plugin of this.#installedPlugins) { + this.uppy.removePlugin(plugin) + } + this.#installedPlugins.clear() + } +} diff --git a/packages/@uppy/remote-sources/src/index.test.js b/packages/@uppy/remote-sources/src/index.test.js new file mode 100644 index 0000000000..2e02ac4d90 --- /dev/null +++ b/packages/@uppy/remote-sources/src/index.test.js @@ -0,0 +1,42 @@ +import { describe, expect, it } from '@jest/globals' +import resizeObserverPolyfill from 'resize-observer-polyfill' +import Core from '@uppy/core' +import Dashboard from '@uppy/dashboard' +import RemoteSources from './index.js' + +describe('RemoteSources', () => { + beforeAll(() => { + globalThis.ResizeObserver = resizeObserverPolyfill.default || resizeObserverPolyfill + }) + + afterAll(() => { + delete globalThis.ResizeObserver + }) + + it('should install RemoteSources with default options', () => { + expect(() => { + const core = new Core() + core.use(Dashboard) + core.use(RemoteSources, { companionUrl: 'https://example.com' }) + }).not.toThrow() + }) + + it('should throw when a companionUrl is not specified', () => { + expect(() => { + const core = new Core() + core.use(Dashboard) + core.use(RemoteSources, { sources: ['Webcam'] }) + }).toThrow(new Error('Please specify companionUrl for RemoteSources to work, see https://uppy.io/docs/remote-sources#companionUrl')) + }) + + it('should throw when trying to use a plugin which is not included in RemoteSources', () => { + expect(() => { + const core = new Core() + core.use(Dashboard) + core.use(RemoteSources, { + companionUrl: 'https://example.com', + sources: ['Webcam'], + }) + }).toThrow('Invalid plugin: "Webcam" is not one of: Box, Dropbox, Facebook, GoogleDrive, Instagram, OneDrive, Unsplash, Url, or Zoom.') + }) +}) diff --git a/packages/@uppy/remote-sources/types/index.d.ts b/packages/@uppy/remote-sources/types/index.d.ts new file mode 100644 index 0000000000..3ac7afd332 --- /dev/null +++ b/packages/@uppy/remote-sources/types/index.d.ts @@ -0,0 +1,13 @@ +import type { PluginOptions, BasePlugin, PluginTarget } from '@uppy/core' +import type { RequestClientOptions } from '@uppy/companion-client' + +interface RemoteTargetOptions extends PluginOptions, RequestClientOptions { + target?: PluginTarget + sources?: Array + title?: string + companionUrl: string +} + +declare class RemoteTarget extends BasePlugin {} + +export default RemoteTarget diff --git a/packages/@uppy/remote-sources/types/index.test-d.ts b/packages/@uppy/remote-sources/types/index.test-d.ts new file mode 100644 index 0000000000..2a551ea846 --- /dev/null +++ b/packages/@uppy/remote-sources/types/index.test-d.ts @@ -0,0 +1,11 @@ +import Uppy from '@uppy/core' +import RemoteSources from '..' + +{ + const uppy = new Uppy() + uppy.use(RemoteSources, { + sources: ['Instagram', 'Url'], + companionUrl: '', + companionCookiesRule: 'same-origin', + }) +} diff --git a/packages/uppy/index.js b/packages/uppy/index.js index c9f2e2fb98..8ad9484653 100644 --- a/packages/uppy/index.js +++ b/packages/uppy/index.js @@ -33,6 +33,7 @@ exports.Facebook = require('@uppy/facebook') exports.GoogleDrive = require('@uppy/google-drive') exports.Instagram = require('@uppy/instagram') exports.OneDrive = require('@uppy/onedrive') +exports.RemoteSources = require('@uppy/remote-sources') exports.ScreenCapture = require('@uppy/screen-capture') exports.Unsplash = require('@uppy/unsplash') exports.Url = require('@uppy/url') diff --git a/packages/uppy/index.mjs b/packages/uppy/index.mjs index 1dd66feec3..a4415d4209 100644 --- a/packages/uppy/index.mjs +++ b/packages/uppy/index.mjs @@ -30,6 +30,7 @@ export { default as Facebook } from '@uppy/facebook' export { default as GoogleDrive } from '@uppy/google-drive' export { default as Instagram } from '@uppy/instagram' export { default as OneDrive } from '@uppy/onedrive' +export { default as RemoteSources } from '@uppy/remote-sources' export { default as ScreenCapture } from '@uppy/screen-capture' export { default as Unsplash } from '@uppy/unsplash' export { default as Url } from '@uppy/url' diff --git a/packages/uppy/package.json b/packages/uppy/package.json index 6ff609aaad..aa6d7a49df 100644 --- a/packages/uppy/package.json +++ b/packages/uppy/package.json @@ -54,6 +54,7 @@ "@uppy/progress-bar": "workspace:^", "@uppy/provider-views": "workspace:^", "@uppy/redux-dev-tools": "workspace:^", + "@uppy/remote-sources": "workspace:^", "@uppy/screen-capture": "workspace:^", "@uppy/status-bar": "workspace:^", "@uppy/store-default": "workspace:^", @@ -74,5 +75,8 @@ "regenerator-runtime": "0.13.9", "resize-observer-polyfill": "^1.5.1", "whatwg-fetch": "^3.6.2" + }, + "publishConfig": { + "access": "public" } } diff --git a/private/dev/Dashboard.js b/private/dev/Dashboard.js index 3e882be118..e8014e1ac6 100644 --- a/private/dev/Dashboard.js +++ b/private/dev/Dashboard.js @@ -2,15 +2,7 @@ /* eslint-disable import/no-extraneous-dependencies */ import Uppy from '@uppy/core' import Dashboard from '@uppy/dashboard' -import Instagram from '@uppy/instagram' -import Facebook from '@uppy/facebook' -import OneDrive from '@uppy/onedrive' -import Dropbox from '@uppy/dropbox' -import Box from '@uppy/box' -import GoogleDrive from '@uppy/google-drive' -import Unsplash from '@uppy/unsplash' -import Zoom from '@uppy/zoom' -import Url from '@uppy/url' +import RemoteSources from '@uppy/remote-sources' import Webcam from '@uppy/webcam' import ScreenCapture from '@uppy/screen-capture' import GoldenRetriever from '@uppy/golden-retriever' @@ -83,15 +75,19 @@ export default () => { proudlyDisplayPoweredByUppy: true, note: '2 files, images and video only', }) - .use(GoogleDrive, { target: Dashboard, companionUrl: COMPANION_URL }) - .use(Instagram, { target: Dashboard, companionUrl: COMPANION_URL }) - .use(Dropbox, { target: Dashboard, companionUrl: COMPANION_URL }) - .use(Box, { target: Dashboard, companionUrl: COMPANION_URL }) - .use(Facebook, { target: Dashboard, companionUrl: COMPANION_URL }) - .use(OneDrive, { target: Dashboard, companionUrl: COMPANION_URL }) - .use(Zoom, { target: Dashboard, companionUrl: COMPANION_URL }) - .use(Url, { target: Dashboard, companionUrl: COMPANION_URL }) - .use(Unsplash, { target: Dashboard, companionUrl: COMPANION_URL }) + // .use(GoogleDrive, { target: Dashboard, companionUrl: COMPANION_URL }) + // .use(Instagram, { target: Dashboard, companionUrl: COMPANION_URL }) + // .use(Dropbox, { target: Dashboard, companionUrl: COMPANION_URL }) + // .use(Box, { target: Dashboard, companionUrl: COMPANION_URL }) + // .use(Facebook, { target: Dashboard, companionUrl: COMPANION_URL }) + // .use(OneDrive, { target: Dashboard, companionUrl: COMPANION_URL }) + // .use(Zoom, { target: Dashboard, companionUrl: COMPANION_URL }) + // .use(Url, { target: Dashboard, companionUrl: COMPANION_URL }) + // .use(Unsplash, { target: Dashboard, companionUrl: COMPANION_URL }) + .use(RemoteSources, { + companionUrl: COMPANION_URL, + sources: ['Box', 'Dropbox', 'Facebook', 'GoogleDrive', 'Instagram', 'OneDrive', 'Unsplash', 'Url'], + }) .use(Webcam, { target: Dashboard, showVideoSourceDropdown: true, diff --git a/website/src/docs/remote-sources.md b/website/src/docs/remote-sources.md new file mode 100644 index 0000000000..c902e43ad0 --- /dev/null +++ b/website/src/docs/remote-sources.md @@ -0,0 +1,78 @@ +--- +type: docs +order: 10 +title: "Remote Sources" +module: "@uppy/remote-sources" +permalink: docs/remote-sources/ +category: "Miscellaneous" +tagline: "Uppy plugin that includes all remote sources that Uppy+Companion offer, like Instagram, Google Drive, Dropox, Box, Unsplash, Url etc" +--- + +`@uppy/remote-sources` is a preset plugin to add all the available remote sources, such Instagram, Google Drive, Dropbox, and others to Uppy Dashboard in one package. + +> Note: Remote Sources requires Dashboard and automatically installs all its plugins to it. + +```js +import Uppy from '@uppy/core' +import Dashbaord from '@uppy/dashboard' +import RemoteSources from '@uppy/compressor' + +const uppy = new Uppy() +uppy.use(Dashboard) +uppy.use(RemoteSources, { + companionUrl: 'https://your-companion-url', +}) +``` + +## Installation + +This plugin is published as the `@uppy/remote-sources` package. + +```shell +npm install @uppy/remote-sources +``` + +In the [CDN package](/docs/#With-a-script-tag), the plugin class is available on the `Uppy` global object: + +```js +const { RemoteSources } = Uppy +``` + +## Options + +### `id` + +A unique identifier for this plugin (`string`, default: `RemoteSources`). + +### `sources` + +List of remote sources that will be enabled (`array`, default: `['Box', 'Dropbox', 'Facebook', 'GoogleDrive','Instagram', 'OneDrive', 'Unsplash', 'Url']`). + +You don’t need to specify them manually or change them, but if you want to alter the order in which they appear in the Dashboard, or disable some sources, this option is for you. + +```js +uppy.use(RemoteSources, { + companionUrl: 'https://your-companion-url', + sources: ['Instagram', 'GoogleDrive', 'Unsplash', 'Url'], +}) +``` + +### `companionUrl` + +URL to a [Companion](/docs/companion) instance (`string`, default: `null`). + +### `companionHeaders` + +Custom headers that should be sent along to [Companion](/docs/companion) on every request (`object`, default: `{}`). + +### `companionAllowedHosts` + +The valid and authorized URL(s) from which OAuth responses should be accepted (`string | RegExp | Array`, Default: `companionUrl`) + +This value can be a `String`, a `Regex` pattern, or an `Array` of both. + +This is useful when you have your [Companion](/docs/companion) running on several hosts. Otherwise, the default value, which is `companionUrl`, should do fine. + +### `companionCookiesRule` + +This option correlates to the [RequestCredentials value](https://developer.mozilla.org/en-US/docs/Web/API/Request/credentials), which tells the plugin whether to send cookies to [Companion](/docs/companion) (`string`, default: `same-origin`). diff --git a/yarn.lock b/yarn.lock index e824f90593..fd284867a3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -547,6 +547,13 @@ __metadata: languageName: node linkType: hard +"@babel/compat-data@npm:^7.17.10": + version: 7.17.10 + resolution: "@babel/compat-data@npm:7.17.10" + checksum: e85051087cd4690de5061909a2dd2d7f8b6434a3c2e30be6c119758db2027ae1845bcd75a81127423dd568b706ac6994a1a3d7d701069a23bf5cfe900728290b + languageName: node + linkType: hard + "@babel/core@npm:7.12.9": version: 7.12.9 resolution: "@babel/core@npm:7.12.9" @@ -641,6 +648,29 @@ __metadata: languageName: node linkType: hard +"@babel/core@npm:^7.11.6": + version: 7.18.2 + resolution: "@babel/core@npm:7.18.2" + dependencies: + "@ampproject/remapping": ^2.1.0 + "@babel/code-frame": ^7.16.7 + "@babel/generator": ^7.18.2 + "@babel/helper-compilation-targets": ^7.18.2 + "@babel/helper-module-transforms": ^7.18.0 + "@babel/helpers": ^7.18.2 + "@babel/parser": ^7.18.0 + "@babel/template": ^7.16.7 + "@babel/traverse": ^7.18.2 + "@babel/types": ^7.18.2 + convert-source-map: ^1.7.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.2.1 + semver: ^6.3.0 + checksum: 14a4142c12e004cd2477b7610408d5788ee5dd821ee9e4de204cbb72d9c399d858d9deabc3d49914d5d7c2927548160c19bdc7524b1a9f6acc1ec96a8d9848dd + languageName: node + linkType: hard + "@babel/core@npm:^7.12.10, @babel/core@npm:^7.17.5": version: 7.17.5 resolution: "@babel/core@npm:7.17.5" @@ -734,6 +764,17 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:^7.18.2": + version: 7.18.2 + resolution: "@babel/generator@npm:7.18.2" + dependencies: + "@babel/types": ^7.18.2 + "@jridgewell/gen-mapping": ^0.3.0 + jsesc: ^2.5.1 + checksum: d0661e95532ddd97566d41fec26355a7b28d1cbc4df95fe80cc084c413342935911b48db20910708db39714844ddd614f61c2ec4cca3fb10181418bdcaa2e7a3 + languageName: node + linkType: hard + "@babel/helper-annotate-as-pure@npm:7.15.4": version: 7.15.4 resolution: "@babel/helper-annotate-as-pure@npm:7.15.4" @@ -809,6 +850,20 @@ __metadata: languageName: node linkType: hard +"@babel/helper-compilation-targets@npm:^7.18.2": + version: 7.18.2 + resolution: "@babel/helper-compilation-targets@npm:7.18.2" + dependencies: + "@babel/compat-data": ^7.17.10 + "@babel/helper-validator-option": ^7.16.7 + browserslist: ^4.20.2 + semver: ^6.3.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 4f02e79f20c0b3f8db5049ba8c35027c41ccb3fc7884835d04e49886538e0f55702959db1bb75213c94a5708fec2dc81a443047559a4f184abb884c72c0059b4 + languageName: node + linkType: hard + "@babel/helper-create-class-features-plugin@npm:^7.12.13, @babel/helper-create-class-features-plugin@npm:^7.16.0": version: 7.16.0 resolution: "@babel/helper-create-class-features-plugin@npm:7.16.0" @@ -947,6 +1002,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-environment-visitor@npm:^7.18.2": + version: 7.18.2 + resolution: "@babel/helper-environment-visitor@npm:7.18.2" + checksum: 1a9c8726fad454a082d077952a90f17188e92eabb3de236cb4782c49b39e3f69c327e272b965e9a20ff8abf37d30d03ffa6fd7974625a6c23946f70f7527f5e9 + languageName: node + linkType: hard + "@babel/helper-explode-assignable-expression@npm:^7.16.0": version: 7.16.0 resolution: "@babel/helper-explode-assignable-expression@npm:7.16.0" @@ -987,6 +1049,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-function-name@npm:^7.17.9": + version: 7.17.9 + resolution: "@babel/helper-function-name@npm:7.17.9" + dependencies: + "@babel/template": ^7.16.7 + "@babel/types": ^7.17.0 + checksum: a59b2e5af56d8f43b9b0019939a43774754beb7cb01a211809ca8031c71890999d07739e955343135ec566c4d8ff725435f1f60fb0af3bb546837c1f9f84f496 + languageName: node + linkType: hard + "@babel/helper-get-function-arity@npm:^7.16.0": version: 7.16.0 resolution: "@babel/helper-get-function-arity@npm:7.16.0" @@ -1107,6 +1179,22 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-transforms@npm:^7.18.0": + version: 7.18.0 + resolution: "@babel/helper-module-transforms@npm:7.18.0" + dependencies: + "@babel/helper-environment-visitor": ^7.16.7 + "@babel/helper-module-imports": ^7.16.7 + "@babel/helper-simple-access": ^7.17.7 + "@babel/helper-split-export-declaration": ^7.16.7 + "@babel/helper-validator-identifier": ^7.16.7 + "@babel/template": ^7.16.7 + "@babel/traverse": ^7.18.0 + "@babel/types": ^7.18.0 + checksum: 824c3967c08d75bb36adc18c31dcafebcd495b75b723e2e17c6185e88daf5c6db62a6a75d9f791b5f38618a349e7cb32503e715a1b9a4e8bad4d0f43e3e6b523 + languageName: node + linkType: hard + "@babel/helper-optimise-call-expression@npm:^7.16.0": version: 7.16.0 resolution: "@babel/helper-optimise-call-expression@npm:7.16.0" @@ -1211,6 +1299,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-simple-access@npm:^7.17.7": + version: 7.18.2 + resolution: "@babel/helper-simple-access@npm:7.18.2" + dependencies: + "@babel/types": ^7.18.2 + checksum: c0862b56db7e120754d89273a039b128c27517389f6a4425ff24e49779791e8fe10061579171fb986be81fa076778acb847c709f6f5e396278d9c5e01360c375 + languageName: node + linkType: hard + "@babel/helper-skip-transparent-expression-wrappers@npm:^7.16.0": version: 7.16.0 resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.16.0" @@ -1312,6 +1409,17 @@ __metadata: languageName: node linkType: hard +"@babel/helpers@npm:^7.18.2": + version: 7.18.2 + resolution: "@babel/helpers@npm:7.18.2" + dependencies: + "@babel/template": ^7.16.7 + "@babel/traverse": ^7.18.2 + "@babel/types": ^7.18.2 + checksum: 94620242f23f6d5f9b83a02b1aa1632ffb05b0815e1bb53d3b46d64aa8e771066bba1db8bd267d9091fb00134cfaeda6a8d69d1d4cc2c89658631adfa077ae70 + languageName: node + linkType: hard + "@babel/highlight@npm:^7.10.4, @babel/highlight@npm:^7.16.0": version: 7.16.0 resolution: "@babel/highlight@npm:7.16.0" @@ -1361,6 +1469,15 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.18.0": + version: 7.18.4 + resolution: "@babel/parser@npm:7.18.4" + bin: + parser: ./bin/babel-parser.js + checksum: e05b2dc720c4b200e088258f3c2a2de5041c140444edc38181d1217b10074e881a7133162c5b62356061f26279f08df5a06ec14c5842996ee8601ad03c57a44f + languageName: node + linkType: hard + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.16.2": version: 7.16.2 resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.16.2" @@ -3693,6 +3810,24 @@ __metadata: languageName: node linkType: hard +"@babel/traverse@npm:^7.18.0, @babel/traverse@npm:^7.18.2": + version: 7.18.2 + resolution: "@babel/traverse@npm:7.18.2" + dependencies: + "@babel/code-frame": ^7.16.7 + "@babel/generator": ^7.18.2 + "@babel/helper-environment-visitor": ^7.18.2 + "@babel/helper-function-name": ^7.17.9 + "@babel/helper-hoist-variables": ^7.16.7 + "@babel/helper-split-export-declaration": ^7.16.7 + "@babel/parser": ^7.18.0 + "@babel/types": ^7.18.2 + debug: ^4.1.0 + globals: ^11.1.0 + checksum: e21c2d550bf610406cf21ef6fbec525cb1d80b9d6d71af67552478a24ee371203cb4025b23b110ae7288a62a874ad5898daad19ad23daa95dfc8ab47a47a092f + languageName: node + linkType: hard + "@babel/types@npm:^7.0.0, @babel/types@npm:^7.12.17, @babel/types@npm:^7.15.4, @babel/types@npm:^7.15.6, @babel/types@npm:^7.16.0, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3, @babel/types@npm:^7.9.0": version: 7.16.0 resolution: "@babel/types@npm:7.16.0" @@ -3713,6 +3848,16 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.18.0, @babel/types@npm:^7.18.2": + version: 7.18.4 + resolution: "@babel/types@npm:7.18.4" + dependencies: + "@babel/helper-validator-identifier": ^7.16.7 + to-fast-properties: ^2.0.0 + checksum: 85df59beb99c1b95e9e41590442f2ffa1e5b1b558d025489db40c9f7c906bd03a17da26c3ec486e5800e80af27c42ca7eee9506d9212ab17766d2d68d30fbf52 + languageName: node + linkType: hard + "@base2/pretty-print-object@npm:1.0.1": version: 1.0.1 resolution: "@base2/pretty-print-object@npm:1.0.1" @@ -4354,6 +4499,37 @@ __metadata: languageName: node linkType: hard +"@jest/environment@npm:^28.1.0": + version: 28.1.0 + resolution: "@jest/environment@npm:28.1.0" + dependencies: + "@jest/fake-timers": ^28.1.0 + "@jest/types": ^28.1.0 + "@types/node": "*" + jest-mock: ^28.1.0 + checksum: 376904d6626bb439f96a56ca9d400e1b6b4a5bafb751820fec649238e35cb7d0b9619223ade86c2906e97fae8da03a7b9561c55c1f5850afe9856db89185d754 + languageName: node + linkType: hard + +"@jest/expect-utils@npm:^28.1.0": + version: 28.1.0 + resolution: "@jest/expect-utils@npm:28.1.0" + dependencies: + jest-get-type: ^28.0.2 + checksum: 5b8b463682bd35ae71868020c87dc654ebed65ded4e74ea3c24bd9e1ab4637a7790c8b78c26cdcb832dd227b9981e8dd24eb3b742891637c24c2a3e38ba153e8 + languageName: node + linkType: hard + +"@jest/expect@npm:^28.1.0": + version: 28.1.0 + resolution: "@jest/expect@npm:28.1.0" + dependencies: + expect: ^28.1.0 + jest-snapshot: ^28.1.0 + checksum: e596bc2a2d02d66cb3e23982c6a48cfe24aa31932f594db7de6966db6c0b58f7aad3836a71debb8aeda6178116c35160e11ded42a355a94457f6402cbb2186e3 + languageName: node + linkType: hard + "@jest/fake-timers@npm:^24.9.0": version: 24.9.0 resolution: "@jest/fake-timers@npm:24.9.0" @@ -4379,6 +4555,20 @@ __metadata: languageName: node linkType: hard +"@jest/fake-timers@npm:^28.1.0": + version: 28.1.0 + resolution: "@jest/fake-timers@npm:28.1.0" + dependencies: + "@jest/types": ^28.1.0 + "@sinonjs/fake-timers": ^9.1.1 + "@types/node": "*" + jest-message-util: ^28.1.0 + jest-mock: ^28.1.0 + jest-util: ^28.1.0 + checksum: d24375bcd52873f1e602ff02ffe57c6866570b95ec0be167a4734d051047b2c6b3dab69b2a301a390a0ca2de2ad89fd2b23e991c09a1a3b70b1dd4763c8681c7 + languageName: node + linkType: hard + "@jest/globals@npm:^27.4.2": version: 27.4.2 resolution: "@jest/globals@npm:27.4.2" @@ -4390,6 +4580,17 @@ __metadata: languageName: node linkType: hard +"@jest/globals@npm:^28.1.0": + version: 28.1.0 + resolution: "@jest/globals@npm:28.1.0" + dependencies: + "@jest/environment": ^28.1.0 + "@jest/expect": ^28.1.0 + "@jest/types": ^28.1.0 + checksum: dce822edd1810430ce381235f714be705a9c774c00bf109d9d5df0dc4868371da62520832df99e83635ee1fc1fa4241cf617821b4e3b1a8bcd3fcd91aa8a75a7 + languageName: node + linkType: hard + "@jest/reporters@npm:^27.4.2": version: 27.4.2 resolution: "@jest/reporters@npm:27.4.2" @@ -4428,6 +4629,15 @@ __metadata: languageName: node linkType: hard +"@jest/schemas@npm:^28.0.2": + version: 28.0.2 + resolution: "@jest/schemas@npm:28.0.2" + dependencies: + "@sinclair/typebox": ^0.23.3 + checksum: 6a177e97b112c99f377697fe803a34f4489b92cd07949876250c69edc9029c7cbda771fcbb03caebd20ffbcfa89b9c22b4dc9d1e9a7fbc9873185459b48ba780 + languageName: node + linkType: hard + "@jest/source-map@npm:^24.9.0": version: 24.9.0 resolution: "@jest/source-map@npm:24.9.0" @@ -4531,6 +4741,29 @@ __metadata: languageName: node linkType: hard +"@jest/transform@npm:^28.1.0": + version: 28.1.0 + resolution: "@jest/transform@npm:28.1.0" + dependencies: + "@babel/core": ^7.11.6 + "@jest/types": ^28.1.0 + "@jridgewell/trace-mapping": ^0.3.7 + babel-plugin-istanbul: ^6.1.1 + chalk: ^4.0.0 + convert-source-map: ^1.4.0 + fast-json-stable-stringify: ^2.0.0 + graceful-fs: ^4.2.9 + jest-haste-map: ^28.1.0 + jest-regex-util: ^28.0.2 + jest-util: ^28.1.0 + micromatch: ^4.0.4 + pirates: ^4.0.4 + slash: ^3.0.0 + write-file-atomic: ^4.0.1 + checksum: f7417409c466fa1b4d8f9f7d365c8c1ed07e709e8712279180a87e9da8520ab06518de270b290148034d93f666d7826449b5e40cac34cc5f7225980e8991f2ba + languageName: node + linkType: hard + "@jest/types@npm:^24.9.0": version: 24.9.0 resolution: "@jest/types@npm:24.9.0" @@ -4593,6 +4826,31 @@ __metadata: languageName: node linkType: hard +"@jest/types@npm:^28.1.0": + version: 28.1.0 + resolution: "@jest/types@npm:28.1.0" + dependencies: + "@jest/schemas": ^28.0.2 + "@types/istanbul-lib-coverage": ^2.0.0 + "@types/istanbul-reports": ^3.0.0 + "@types/node": "*" + "@types/yargs": ^17.0.8 + chalk: ^4.0.0 + checksum: 22705aed92a76d45465a6c51147bc71c1fbd300b912ebad2769e3ff7fd51c1938017e29fcea52e00c00dab7130697359b2a2c2be6ee601e37c8b1042a2c4040e + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.3.0": + version: 0.3.1 + resolution: "@jridgewell/gen-mapping@npm:0.3.1" + dependencies: + "@jridgewell/set-array": ^1.0.0 + "@jridgewell/sourcemap-codec": ^1.4.10 + "@jridgewell/trace-mapping": ^0.3.9 + checksum: e9e7bb3335dea9e60872089761d4e8e089597360cdb1af90370e9d53b7d67232c1e0a3ab65fbfef4fc785745193fbc56bff9f3a6cab6c6ce3f15e12b4191f86b + languageName: node + linkType: hard + "@jridgewell/resolve-uri@npm:1.0.0": version: 1.0.0 resolution: "@jridgewell/resolve-uri@npm:1.0.0" @@ -4607,6 +4865,13 @@ __metadata: languageName: node linkType: hard +"@jridgewell/set-array@npm:^1.0.0": + version: 1.1.1 + resolution: "@jridgewell/set-array@npm:1.1.1" + checksum: cc5d91e0381c347e3edee4ca90b3c292df9e6e55f29acbe0dd97de8651b4730e9ab761406fd572effa79972a0edc55647b627f8c72315e276d959508853d9bf2 + languageName: node + linkType: hard + "@jridgewell/sourcemap-codec@npm:^1.4.10": version: 1.4.11 resolution: "@jridgewell/sourcemap-codec@npm:1.4.11" @@ -4624,6 +4889,16 @@ __metadata: languageName: node linkType: hard +"@jridgewell/trace-mapping@npm:^0.3.7, @jridgewell/trace-mapping@npm:^0.3.9": + version: 0.3.13 + resolution: "@jridgewell/trace-mapping@npm:0.3.13" + dependencies: + "@jridgewell/resolve-uri": ^3.0.3 + "@jridgewell/sourcemap-codec": ^1.4.10 + checksum: e38254e830472248ca10a6ed1ae75af5e8514f0680245a5e7b53bc3c030fd8691d4d3115d80595b45d3badead68269769ed47ecbbdd67db1343a11f05700e75a + languageName: node + linkType: hard + "@koa/cors@npm:^3.1.0": version: 3.1.0 resolution: "@koa/cors@npm:3.1.0" @@ -6183,6 +6458,13 @@ __metadata: languageName: node linkType: hard +"@sinclair/typebox@npm:^0.23.3": + version: 0.23.5 + resolution: "@sinclair/typebox@npm:0.23.5" + checksum: c96056d35d9cb862aeb635ff8873e2e7633e668dd544e162aee2690a82c970d0b3f90aa2b3501fe374dfa8e792388559a3e3a86712b23ebaef10061add534f47 + languageName: node + linkType: hard + "@sindresorhus/is@npm:^0.14.0": version: 0.14.0 resolution: "@sindresorhus/is@npm:0.14.0" @@ -6208,6 +6490,15 @@ __metadata: languageName: node linkType: hard +"@sinonjs/fake-timers@npm:^9.1.1": + version: 9.1.2 + resolution: "@sinonjs/fake-timers@npm:9.1.2" + dependencies: + "@sinonjs/commons": ^1.7.0 + checksum: 7d3aef54e17c1073101cb64d953157c19d62a40e261a30923fa1ee337b049c5f29cc47b1f0c477880f42b5659848ba9ab897607ac8ea4acd5c30ddcfac57fca6 + languageName: node + linkType: hard + "@sitespeed.io/tracium@npm:^0.3.3": version: 0.3.3 resolution: "@sitespeed.io/tracium@npm:0.3.3" @@ -8187,7 +8478,7 @@ __metadata: languageName: node linkType: hard -"@types/graceful-fs@npm:^4.1.2": +"@types/graceful-fs@npm:^4.1.2, @types/graceful-fs@npm:^4.1.3": version: 4.1.5 resolution: "@types/graceful-fs@npm:4.1.5" dependencies: @@ -8957,6 +9248,15 @@ __metadata: languageName: node linkType: hard +"@types/yargs@npm:^17.0.8": + version: 17.0.10 + resolution: "@types/yargs@npm:17.0.10" + dependencies: + "@types/yargs-parser": "*" + checksum: f0673cbfc08e17239dc58952a88350d6c4db04a027a28a06fbad27d87b670e909f9cd9e66f9c64cebdd5071d1096261e33454a55868395f125297e5c50992ca8 + languageName: node + linkType: hard + "@types/yauzl@npm:^2.9.1": version: 2.9.2 resolution: "@types/yauzl@npm:2.9.2" @@ -10050,6 +10350,27 @@ __metadata: languageName: unknown linkType: soft +"@uppy/remote-sources@workspace:^, @uppy/remote-sources@workspace:packages/@uppy/remote-sources": + version: 0.0.0-use.local + resolution: "@uppy/remote-sources@workspace:packages/@uppy/remote-sources" + dependencies: + "@jest/globals": ^28.1.0 + "@uppy/box": "workspace:^" + "@uppy/dashboard": "workspace:^" + "@uppy/dropbox": "workspace:^" + "@uppy/facebook": "workspace:^" + "@uppy/google-drive": "workspace:^" + "@uppy/instagram": "workspace:^" + "@uppy/onedrive": "workspace:^" + "@uppy/unsplash": "workspace:^" + "@uppy/url": "workspace:^" + "@uppy/zoom": "workspace:^" + resize-observer-polyfill: ^1.5.1 + peerDependencies: + "@uppy/core": "workspace:^" + languageName: unknown + linkType: soft + "@uppy/robodog@workspace:*, @uppy/robodog@workspace:packages/@uppy/robodog": version: 0.0.0-use.local resolution: "@uppy/robodog@workspace:packages/@uppy/robodog" @@ -12780,7 +13101,7 @@ __metadata: languageName: node linkType: hard -"babel-plugin-istanbul@npm:6.1.1, babel-plugin-istanbul@npm:^6.0.0": +"babel-plugin-istanbul@npm:6.1.1, babel-plugin-istanbul@npm:^6.0.0, babel-plugin-istanbul@npm:^6.1.1": version: 6.1.1 resolution: "babel-plugin-istanbul@npm:6.1.1" dependencies: @@ -13827,6 +14148,21 @@ __metadata: languageName: node linkType: hard +"browserslist@npm:^4.20.2": + version: 4.20.3 + resolution: "browserslist@npm:4.20.3" + dependencies: + caniuse-lite: ^1.0.30001332 + electron-to-chromium: ^1.4.118 + escalade: ^3.1.1 + node-releases: ^2.0.3 + picocolors: ^1.0.0 + bin: + browserslist: cli.js + checksum: 1e4b719ac2ca0fe235218a606e8b8ef16b8809e0973b924158c39fbc435a0b0fe43437ea52dd6ef5ad2efcb83fcb07431244e472270177814217f7c563651f7d + languageName: node + linkType: hard + "browserstack@npm:^1.5.1": version: 1.6.1 resolution: "browserstack@npm:1.6.1" @@ -14396,6 +14732,13 @@ __metadata: languageName: node linkType: hard +"caniuse-lite@npm:^1.0.30001332": + version: 1.0.30001346 + resolution: "caniuse-lite@npm:1.0.30001346" + checksum: 951590454ffa4e2e7b772558dc593cd08604b44c83741e1188166298f54c34387f4bf34f5141a35de4a43028c012484240ad15c896e48bf4eac70dd7076a4449 + languageName: node + linkType: hard + "canonical-path@npm:1.0.0": version: 1.0.0 resolution: "canonical-path@npm:1.0.0" @@ -17227,6 +17570,13 @@ __metadata: languageName: node linkType: hard +"diff-sequences@npm:^28.0.2": + version: 28.0.2 + resolution: "diff-sequences@npm:28.0.2" + checksum: 482360a8ec93333ea61bc93a800a1bee37c943b94a48fa1597825076adcad24620b44a0d3aa8f3d190584a4156c4b3315028453ca33e1174001fae3cdaa7f8f8 + languageName: node + linkType: hard + "diff@npm:^4.0.1": version: 4.0.2 resolution: "diff@npm:4.0.2" @@ -17740,6 +18090,13 @@ __metadata: languageName: node linkType: hard +"electron-to-chromium@npm:^1.4.118": + version: 1.4.147 + resolution: "electron-to-chromium@npm:1.4.147" + checksum: a714da8ac6842887e98886026b8eeaee0d2fd6d57f5707b0fc2a2916c1b9d026ca8deeef529fd3b069e96f719495a7467b01a508b881fd90d95aa204a7a92000 + languageName: node + linkType: hard + "electron-to-chromium@npm:^1.4.71": version: 1.4.73 resolution: "electron-to-chromium@npm:1.4.73" @@ -20011,6 +20368,19 @@ __metadata: languageName: node linkType: hard +"expect@npm:^28.1.0": + version: 28.1.0 + resolution: "expect@npm:28.1.0" + dependencies: + "@jest/expect-utils": ^28.1.0 + jest-get-type: ^28.0.2 + jest-matcher-utils: ^28.1.0 + jest-message-util: ^28.1.0 + jest-util: ^28.1.0 + checksum: 53bfa2e094a7d5b270ce9a8dafc5432d51bb369287502acd373b66fe01072260bacd1f83bf741d5de49b008406781ab879a0247f5f6fc10d3f32fbe5a3ccfbdf + languageName: node + linkType: hard + "expo-application@npm:~3.2.0": version: 3.2.0 resolution: "expo-application@npm:3.2.0" @@ -25029,6 +25399,18 @@ hexo-filter-github-emojis@arturi/hexo-filter-github-emojis: languageName: node linkType: hard +"jest-diff@npm:^28.1.0": + version: 28.1.0 + resolution: "jest-diff@npm:28.1.0" + dependencies: + chalk: ^4.0.0 + diff-sequences: ^28.0.2 + jest-get-type: ^28.0.2 + pretty-format: ^28.1.0 + checksum: 4d90d9d18ba1d28f5520fa206831e9e8199facf28c6d2b4967c7e4cd1ee78e7e826187babdeb02073f79a1d2c186520d73f77fa29877c6547b0a79392d08a513 + languageName: node + linkType: hard + "jest-docblock@npm:^27.4.0": version: 27.4.0 resolution: "jest-docblock@npm:27.4.0" @@ -25094,6 +25476,13 @@ hexo-filter-github-emojis@arturi/hexo-filter-github-emojis: languageName: node linkType: hard +"jest-get-type@npm:^28.0.2": + version: 28.0.2 + resolution: "jest-get-type@npm:28.0.2" + checksum: 5281d7c89bc8156605f6d15784f45074f4548501195c26e9b188742768f72d40948252d13230ea905b5349038865a1a8eeff0e614cc530ff289dfc41fe843abd + languageName: node + linkType: hard + "jest-haste-map@npm:^24.9.0": version: 24.9.0 resolution: "jest-haste-map@npm:24.9.0" @@ -25166,6 +25555,29 @@ hexo-filter-github-emojis@arturi/hexo-filter-github-emojis: languageName: node linkType: hard +"jest-haste-map@npm:^28.1.0": + version: 28.1.0 + resolution: "jest-haste-map@npm:28.1.0" + dependencies: + "@jest/types": ^28.1.0 + "@types/graceful-fs": ^4.1.3 + "@types/node": "*" + anymatch: ^3.0.3 + fb-watchman: ^2.0.0 + fsevents: ^2.3.2 + graceful-fs: ^4.2.9 + jest-regex-util: ^28.0.2 + jest-util: ^28.1.0 + jest-worker: ^28.1.0 + micromatch: ^4.0.4 + walker: ^1.0.7 + dependenciesMeta: + fsevents: + optional: true + checksum: 128c2d1aa39610febfc9fe66bbc40bb847d89da3e1646ed1bbe63e90bd4c930d1798d20aef8d928fda8e5b0570f05f1cbb263030ebe776c01bb86dd5174434da + languageName: node + linkType: hard + "jest-jasmine2@npm:^27.4.2": version: 27.4.2 resolution: "jest-jasmine2@npm:27.4.2" @@ -25214,6 +25626,18 @@ hexo-filter-github-emojis@arturi/hexo-filter-github-emojis: languageName: node linkType: hard +"jest-matcher-utils@npm:^28.1.0": + version: 28.1.0 + resolution: "jest-matcher-utils@npm:28.1.0" + dependencies: + chalk: ^4.0.0 + jest-diff: ^28.1.0 + jest-get-type: ^28.0.2 + pretty-format: ^28.1.0 + checksum: 60e3e83fff67402972b101135d44443981d6519008e435b567f197220f330ec38356f905b6872348d082f0a2a4089612f63d2c72f55ee3c718de6b0ef03f4d6d + languageName: node + linkType: hard + "jest-message-util@npm:^24.9.0": version: 24.9.0 resolution: "jest-message-util@npm:24.9.0" @@ -25247,6 +25671,23 @@ hexo-filter-github-emojis@arturi/hexo-filter-github-emojis: languageName: node linkType: hard +"jest-message-util@npm:^28.1.0": + version: 28.1.0 + resolution: "jest-message-util@npm:28.1.0" + dependencies: + "@babel/code-frame": ^7.12.13 + "@jest/types": ^28.1.0 + "@types/stack-utils": ^2.0.0 + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + micromatch: ^4.0.4 + pretty-format: ^28.1.0 + slash: ^3.0.0 + stack-utils: ^2.0.3 + checksum: a224f9dbb53b5ad857918938f94c6e5d9c64ccdd42e0780b3b485d66bd93c82cff7dd91fbe274273efb69533d79808f9c98622b23d70ec027e8619a20e283773 + languageName: node + linkType: hard + "jest-mock@npm:^24.9.0": version: 24.9.0 resolution: "jest-mock@npm:24.9.0" @@ -25276,6 +25717,16 @@ hexo-filter-github-emojis@arturi/hexo-filter-github-emojis: languageName: node linkType: hard +"jest-mock@npm:^28.1.0": + version: 28.1.0 + resolution: "jest-mock@npm:28.1.0" + dependencies: + "@jest/types": ^28.1.0 + "@types/node": "*" + checksum: 013428db82f418059314588e5d02a2a8f6697940ffeb1b1a23f61e9b94b1dca3ea0061d91f284e217bf0ce0e5251ff8f2f182a393cecd1ec6788d766cc18ded4 + languageName: node + linkType: hard + "jest-pnp-resolver@npm:^1.2.2": version: 1.2.2 resolution: "jest-pnp-resolver@npm:1.2.2" @@ -25302,6 +25753,13 @@ hexo-filter-github-emojis@arturi/hexo-filter-github-emojis: languageName: node linkType: hard +"jest-regex-util@npm:^28.0.2": + version: 28.0.2 + resolution: "jest-regex-util@npm:28.0.2" + checksum: 0ea8c5c82ec88bc85e273c0ec82e0c0f35f7a1e2d055070e50f0cc2a2177f848eec55f73e37ae0d045c3db5014c42b2f90ac62c1ab3fdb354d2abd66a9e08add + languageName: node + linkType: hard + "jest-resolve-dependencies@npm:^27.4.2": version: 27.4.2 resolution: "jest-resolve-dependencies@npm:27.4.2" @@ -25454,6 +25912,37 @@ hexo-filter-github-emojis@arturi/hexo-filter-github-emojis: languageName: node linkType: hard +"jest-snapshot@npm:^28.1.0": + version: 28.1.0 + resolution: "jest-snapshot@npm:28.1.0" + dependencies: + "@babel/core": ^7.11.6 + "@babel/generator": ^7.7.2 + "@babel/plugin-syntax-typescript": ^7.7.2 + "@babel/traverse": ^7.7.2 + "@babel/types": ^7.3.3 + "@jest/expect-utils": ^28.1.0 + "@jest/transform": ^28.1.0 + "@jest/types": ^28.1.0 + "@types/babel__traverse": ^7.0.6 + "@types/prettier": ^2.1.5 + babel-preset-current-node-syntax: ^1.0.0 + chalk: ^4.0.0 + expect: ^28.1.0 + graceful-fs: ^4.2.9 + jest-diff: ^28.1.0 + jest-get-type: ^28.0.2 + jest-haste-map: ^28.1.0 + jest-matcher-utils: ^28.1.0 + jest-message-util: ^28.1.0 + jest-util: ^28.1.0 + natural-compare: ^1.4.0 + pretty-format: ^28.1.0 + semver: ^7.3.5 + checksum: 73695484cf4e2af9d0dbb8bc1e851f6d6217cc740aa93b521012c253fbbd9dc1ce11b147ac3e18cac8358b4b64fe36a1b8a6d1a3083c9d275dd937281faad818 + languageName: node + linkType: hard + "jest-util@npm:^24.9.0": version: 24.9.0 resolution: "jest-util@npm:24.9.0" @@ -25502,6 +25991,20 @@ hexo-filter-github-emojis@arturi/hexo-filter-github-emojis: languageName: node linkType: hard +"jest-util@npm:^28.1.0": + version: 28.1.0 + resolution: "jest-util@npm:28.1.0" + dependencies: + "@jest/types": ^28.1.0 + "@types/node": "*" + chalk: ^4.0.0 + ci-info: ^3.2.0 + graceful-fs: ^4.2.9 + picomatch: ^2.2.3 + checksum: 14c2ee1c24c6efa2d7adfe81ece8b9bbda78fa871f40bed80db72726166e96f7fb22bf1d9fb1689fb433b9bcd748027eb1ee5f0851a12f1aa1c49ee0bd4d7508 + languageName: node + linkType: hard + "jest-validate@npm:^24.9.0": version: 24.9.0 resolution: "jest-validate@npm:24.9.0" @@ -25588,6 +26091,17 @@ hexo-filter-github-emojis@arturi/hexo-filter-github-emojis: languageName: node linkType: hard +"jest-worker@npm:^28.1.0": + version: 28.1.0 + resolution: "jest-worker@npm:28.1.0" + dependencies: + "@types/node": "*" + merge-stream: ^2.0.0 + supports-color: ^8.0.0 + checksum: 44b6cfb03752543e2462f143ca5c9642206f20813068ef0461e793bb8feda85f643ee906d96a0a57728e1a2fb5b89386fd34e44289568b1cee5815c115e7ee02 + languageName: node + linkType: hard + "jest@npm:^27.0.6": version: 27.4.3 resolution: "jest@npm:27.4.3" @@ -29894,6 +30408,13 @@ hexo-filter-github-emojis@arturi/hexo-filter-github-emojis: languageName: node linkType: hard +"node-releases@npm:^2.0.3": + version: 2.0.5 + resolution: "node-releases@npm:2.0.5" + checksum: e85d949addd19f8827f32569d2be5751e7812ccf6cc47879d49f79b5234ff4982225e39a3929315f96370823b070640fb04d79fc0ddec8b515a969a03493a42f + languageName: node + linkType: hard + "node-schedule@npm:1.3.2": version: 1.3.2 resolution: "node-schedule@npm:1.3.2" @@ -31762,7 +32283,7 @@ hexo-filter-github-emojis@arturi/hexo-filter-github-emojis: languageName: node linkType: hard -"pirates@npm:^4.0.5": +"pirates@npm:^4.0.4, pirates@npm:^4.0.5": version: 4.0.5 resolution: "pirates@npm:4.0.5" checksum: c9994e61b85260bec6c4fc0307016340d9b0c4f4b6550a957afaaff0c9b1ad58fbbea5cfcf083860a25cb27a375442e2b0edf52e2e1e40e69934e08dcc52d227 @@ -33541,6 +34062,18 @@ hexo-filter-github-emojis@arturi/hexo-filter-github-emojis: languageName: node linkType: hard +"pretty-format@npm:^28.1.0": + version: 28.1.0 + resolution: "pretty-format@npm:28.1.0" + dependencies: + "@jest/schemas": ^28.0.2 + ansi-regex: ^5.0.1 + ansi-styles: ^5.0.0 + react-is: ^18.0.0 + checksum: c1018099f8f800693449df96c05c243d94e01f7429b6617e1064a1a69b4d715637fc3c579061fbc31548b87d92af74a7933c6eb3856da6f30b29c0ff67004ce0 + languageName: node + linkType: hard + "pretty-format@npm:^3.8.0": version: 3.8.0 resolution: "pretty-format@npm:3.8.0" @@ -34273,6 +34806,13 @@ hexo-filter-github-emojis@arturi/hexo-filter-github-emojis: languageName: node linkType: hard +"react-is@npm:^18.0.0": + version: 18.1.0 + resolution: "react-is@npm:18.1.0" + checksum: d206a0fe6790851bff168727bfb896de02c5591695afb0c441163e8630136a3e13ee1a7ddd59fdccddcc93968b4721ae112c10f790b194b03b35a3dc13a355ef + languageName: node + linkType: hard + "react-native-safe-area-context@npm:3.2.0": version: 3.2.0 resolution: "react-native-safe-area-context@npm:3.2.0" @@ -36958,6 +37498,13 @@ hexo-filter-github-emojis@arturi/hexo-filter-github-emojis: languageName: node linkType: hard +"signal-exit@npm:^3.0.7": + version: 3.0.7 + resolution: "signal-exit@npm:3.0.7" + checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 + languageName: node + linkType: hard + "simple-concat@npm:^1.0.0": version: 1.0.1 resolution: "simple-concat@npm:1.0.1" @@ -40995,6 +41542,7 @@ hexo-filter-github-emojis@arturi/hexo-filter-github-emojis: "@uppy/progress-bar": "workspace:^" "@uppy/provider-views": "workspace:^" "@uppy/redux-dev-tools": "workspace:^" + "@uppy/remote-sources": "workspace:^" "@uppy/screen-capture": "workspace:^" "@uppy/status-bar": "workspace:^" "@uppy/store-default": "workspace:^" @@ -42842,6 +43390,16 @@ hexo-filter-github-emojis@arturi/hexo-filter-github-emojis: languageName: node linkType: hard +"write-file-atomic@npm:^4.0.1": + version: 4.0.1 + resolution: "write-file-atomic@npm:4.0.1" + dependencies: + imurmurhash: ^0.1.4 + signal-exit: ^3.0.7 + checksum: 8f780232533ca6223c63c9b9c01c4386ca8c625ebe5017a9ed17d037aec19462ae17109e0aa155bff5966ee4ae7a27b67a99f55caf3f32ffd84155e9da3929fc + languageName: node + linkType: hard + "write@npm:1.0.3": version: 1.0.3 resolution: "write@npm:1.0.3" From a95e7237755a154c4a95076003ea4f67ed0787d0 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 7 Jun 2022 18:11:01 +0100 Subject: [PATCH 13/22] Release: uppy@2.12.0 (#3816) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit | Package | Version | Package | Version | | ---------------------- | ------- | ---------------------- | ------- | | @uppy/aws-s3 | 2.2.1 | @uppy/tus | 2.4.1 | | @uppy/aws-s3-multipart | 2.4.1 | @uppy/url | 2.2.0 | | @uppy/companion-client | 2.2.1 | @uppy/xhr-upload | 2.1.2 | | @uppy/core | 2.3.1 | @uppy/robodog | 2.8.0 | | @uppy/react | 2.2.2 | uppy | 2.12.0 | | @uppy/remote-sources | 0.1.0 | | | - @uppy/remote-sources: Add @uppy/remote-sources preset/plugin (Artur Paikin / #3676) - @uppy/react: Reset uppy instance when React component is unmounted (Tomasz Pęksa / #3814) - @uppy/aws-s3-multipart,@uppy/aws-s3,@uppy/tus: queue socket token requests for remote files (Merlijn Vos / #3797) - @uppy/xhr-upload: replace `ev.target.status` with `xhr.status` (Wes Sankey / #3782) - @uppy/core: fix `TypeError` when file was deleted (Antoine du Hamel / #3811) - @uppy/robodog: fix linter warnings (Antoine du Hamel / #3808) - meta: fix GHA workflow for prereleases (Antoine du Hamel) - @uppy/aws-s3-multipart: allow `companionHeaders` to be modified with `setOptions` (Paulo Lemos Neto / #3770) - @uppy/url: enable passing optional meta data to `addFile` (Brad Edelman / #3788) - @uppy/url: fix `getFileNameFromUrl` (Brad Edelman / #3804) - @uppy/tus: make onShouldRetry type optional (Merlijn Vos / #3800) - doc: fix React examples (Antoine du Hamel / #3799) - meta: add GHA workflow for prereleases (Antoine du Hamel) --- BUNDLE-README.md | 2 +- CHANGELOG.md | 28 +++ README.md | 184 +++++++++--------- examples/cdn-example/index.html | 4 +- examples/transloadit-textarea/index.html | 2 +- .../uppy-with-companion/client/index.html | 4 +- packages/@uppy/aws-s3-multipart/CHANGELOG.md | 8 + packages/@uppy/aws-s3-multipart/package.json | 2 +- packages/@uppy/aws-s3/CHANGELOG.md | 7 + packages/@uppy/aws-s3/package.json | 2 +- packages/@uppy/companion-client/package.json | 2 +- packages/@uppy/core/CHANGELOG.md | 7 + packages/@uppy/core/package.json | 2 +- packages/@uppy/react/CHANGELOG.md | 7 + packages/@uppy/react/package.json | 2 +- packages/@uppy/remote-sources/CHANGELOG.md | 8 + packages/@uppy/robodog/CHANGELOG.md | 7 + packages/@uppy/robodog/README.md | 4 +- packages/@uppy/robodog/package.json | 2 +- packages/@uppy/tus/CHANGELOG.md | 8 + packages/@uppy/tus/package.json | 2 +- packages/@uppy/url/CHANGELOG.md | 8 + packages/@uppy/url/package.json | 2 +- packages/@uppy/xhr-upload/CHANGELOG.md | 7 + packages/@uppy/xhr-upload/package.json | 2 +- packages/uppy/package.json | 2 +- website/src/docs/index.md | 10 +- website/src/docs/locales.md | 2 +- website/src/docs/migration-guides.md | 6 +- website/src/docs/robodog-form.md | 6 +- website/src/docs/robodog.md | 4 +- website/src/examples/i18n/app.html | 6 +- .../src/examples/markdown-snippets/app.es6 | 2 +- .../src/examples/markdown-snippets/app.html | 2 +- website/themes/uppy/layout/index.ejs | 6 +- 35 files changed, 229 insertions(+), 130 deletions(-) create mode 100644 packages/@uppy/remote-sources/CHANGELOG.md diff --git a/BUNDLE-README.md b/BUNDLE-README.md index c38e9682a5..54f3598c3e 100644 --- a/BUNDLE-README.md +++ b/BUNDLE-README.md @@ -1,7 +1,7 @@ # Uppy Hi, thanks for trying out the bundled version of the Uppy File Uploader. You can use -this from a CDN (``) or bundle it with your webapp. +this from a CDN (``) or bundle it with your webapp. Note that the recommended way to use Uppy is to install it with yarn/npm and use a bundler like Webpack so that you can create a smaller custom build with only the diff --git a/CHANGELOG.md b/CHANGELOG.md index 0251ba5977..44da643bf8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,34 @@ Please add your entries in this format: In the current stage we aim to release a new version at least every month. +## 2.12.0 + +Released: 2022-06-07 + +| Package | Version | Package | Version | +| ---------------------- | ------- | ---------------------- | ------- | +| @uppy/aws-s3 | 2.2.1 | @uppy/tus | 2.4.1 | +| @uppy/aws-s3-multipart | 2.4.1 | @uppy/url | 2.2.0 | +| @uppy/companion-client | 2.2.1 | @uppy/xhr-upload | 2.1.2 | +| @uppy/core | 2.3.1 | @uppy/robodog | 2.8.0 | +| @uppy/react | 2.2.2 | uppy | 2.12.0 | +| @uppy/remote-sources | 0.1.0 | | | + +- @uppy/remote-sources: Add @uppy/remote-sources preset/plugin (Artur Paikin / #3676) +- @uppy/react: Reset uppy instance when React component is unmounted (Tomasz Pęksa / #3814) +- @uppy/aws-s3-multipart,@uppy/aws-s3,@uppy/tus: queue socket token requests for remote files (Merlijn Vos / #3797) +- @uppy/xhr-upload: replace `ev.target.status` with `xhr.status` (Wes Sankey / #3782) +- @uppy/core: fix `TypeError` when file was deleted (Antoine du Hamel / #3811) +- @uppy/robodog: fix linter warnings (Antoine du Hamel / #3808) +- meta: fix GHA workflow for prereleases (Antoine du Hamel) +- @uppy/aws-s3-multipart: allow `companionHeaders` to be modified with `setOptions` (Paulo Lemos Neto / #3770) +- @uppy/url: enable passing optional meta data to `addFile` (Brad Edelman / #3788) +- @uppy/url: fix `getFileNameFromUrl` (Brad Edelman / #3804) +- @uppy/tus: make onShouldRetry type optional (Merlijn Vos / #3800) +- doc: fix React examples (Antoine du Hamel / #3799) +- meta: add GHA workflow for prereleases (Antoine du Hamel) + + ## 2.11.0 Released: 2022-05-30 diff --git a/README.md b/README.md index 86229771a6..56b7cad962 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ const uppy = new Uppy({ autoProceed: false }) $ npm install @uppy/core @uppy/dashboard @uppy/tus ``` -Add CSS [uppy.min.css](https://releases.transloadit.com/uppy/v2.11.0/uppy.min.css), either to your HTML page’s `` or include in JS, if your bundler of choice supports it. +Add CSS [uppy.min.css](https://releases.transloadit.com/uppy/v2.12.0/uppy.min.css), either to your HTML page’s `` or include in JS, if your bundler of choice supports it. Alternatively, you can also use a pre-built bundle from Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global `window.Uppy` object. @@ -75,10 +75,10 @@ Alternatively, you can also use a pre-built bundle from Transloadit’s CDN: Edg ```html - + - +
@@ -184,7 +184,7 @@ If you’re using Uppy from CDN, those polyfills are already included in the leg bundle, so no need to include anything additionally: ```html - + ``` ## FAQ @@ -282,177 +282,181 @@ Use Uppy in your project? [Let us know](https://github.com/transloadit/uppy/issu :---: |:---: |:---: |:---: |:---: |:---: | [bencergazda](https://github.com/bencergazda) |[stephentuso](https://github.com/stephentuso) |[jhen0409](https://github.com/jhen0409) |[mskelton](https://github.com/mskelton) |[ahmedkandel](https://github.com/ahmedkandel) |[btrice](https://github.com/btrice) | -[behnammodi](https://github.com/behnammodi) |[BePo65](https://github.com/BePo65) |[Burkes](https://github.com/Burkes) |[camiloforero](https://github.com/camiloforero) |[craigjennings11](https://github.com/craigjennings11) |[davekiss](https://github.com/davekiss) | +[behnammodi](https://github.com/behnammodi) |[BePo65](https://github.com/BePo65) |[bradedelman](https://github.com/bradedelman) |[Burkes](https://github.com/Burkes) |[camiloforero](https://github.com/camiloforero) |[craigjennings11](https://github.com/craigjennings11) | :---: |:---: |:---: |:---: |:---: |:---: | -[behnammodi](https://github.com/behnammodi) |[BePo65](https://github.com/BePo65) |[Burkes](https://github.com/Burkes) |[camiloforero](https://github.com/camiloforero) |[craigjennings11](https://github.com/craigjennings11) |[davekiss](https://github.com/davekiss) | +[behnammodi](https://github.com/behnammodi) |[BePo65](https://github.com/BePo65) |[bradedelman](https://github.com/bradedelman) |[Burkes](https://github.com/Burkes) |[camiloforero](https://github.com/camiloforero) |[craigjennings11](https://github.com/craigjennings11) | -[DenysNosov](https://github.com/DenysNosov) |[ethanwillis](https://github.com/ethanwillis) |[frobinsonj](https://github.com/frobinsonj) |[geertclerx](https://github.com/geertclerx) |[ghasrfakhri](https://github.com/ghasrfakhri) |[jasonbosco](https://github.com/jasonbosco) | +[davekiss](https://github.com/davekiss) |[DenysNosov](https://github.com/DenysNosov) |[ethanwillis](https://github.com/ethanwillis) |[frobinsonj](https://github.com/frobinsonj) |[geertclerx](https://github.com/geertclerx) |[ghasrfakhri](https://github.com/ghasrfakhri) | :---: |:---: |:---: |:---: |:---: |:---: | -[DenysNosov](https://github.com/DenysNosov) |[ethanwillis](https://github.com/ethanwillis) |[frobinsonj](https://github.com/frobinsonj) |[geertclerx](https://github.com/geertclerx) |[ghasrfakhri](https://github.com/ghasrfakhri) |[jasonbosco](https://github.com/jasonbosco) | +[davekiss](https://github.com/davekiss) |[DenysNosov](https://github.com/DenysNosov) |[ethanwillis](https://github.com/ethanwillis) |[frobinsonj](https://github.com/frobinsonj) |[geertclerx](https://github.com/geertclerx) |[ghasrfakhri](https://github.com/ghasrfakhri) | -[jedwood](https://github.com/jedwood) |[dogrocker](https://github.com/dogrocker) |[lamartire](https://github.com/lamartire) |[lafe](https://github.com/lafe) |[mactavishz](https://github.com/mactavishz) |[maferland](https://github.com/maferland) | +[jasonbosco](https://github.com/jasonbosco) |[jedwood](https://github.com/jedwood) |[dogrocker](https://github.com/dogrocker) |[lamartire](https://github.com/lamartire) |[lafe](https://github.com/lafe) |[mactavishz](https://github.com/mactavishz) | :---: |:---: |:---: |:---: |:---: |:---: | -[jedwood](https://github.com/jedwood) |[dogrocker](https://github.com/dogrocker) |[lamartire](https://github.com/lamartire) |[lafe](https://github.com/lafe) |[mactavishz](https://github.com/mactavishz) |[maferland](https://github.com/maferland) | +[jasonbosco](https://github.com/jasonbosco) |[jedwood](https://github.com/jedwood) |[dogrocker](https://github.com/dogrocker) |[lamartire](https://github.com/lamartire) |[lafe](https://github.com/lafe) |[mactavishz](https://github.com/mactavishz) | -[Martin005](https://github.com/Martin005) |[martiuslim](https://github.com/martiuslim) |[MatthiasKunnen](https://github.com/MatthiasKunnen) |[msand](https://github.com/msand) |[paescuj](https://github.com/paescuj) |[richartkeil](https://github.com/richartkeil) | +[maferland](https://github.com/maferland) |[Martin005](https://github.com/Martin005) |[martiuslim](https://github.com/martiuslim) |[MatthiasKunnen](https://github.com/MatthiasKunnen) |[msand](https://github.com/msand) |[paescuj](https://github.com/paescuj) | :---: |:---: |:---: |:---: |:---: |:---: | -[Martin005](https://github.com/Martin005) |[martiuslim](https://github.com/martiuslim) |[MatthiasKunnen](https://github.com/MatthiasKunnen) |[msand](https://github.com/msand) |[paescuj](https://github.com/paescuj) |[richartkeil](https://github.com/richartkeil) | +[maferland](https://github.com/maferland) |[Martin005](https://github.com/Martin005) |[martiuslim](https://github.com/martiuslim) |[MatthiasKunnen](https://github.com/MatthiasKunnen) |[msand](https://github.com/msand) |[paescuj](https://github.com/paescuj) | -[richmeij](https://github.com/richmeij) |[rdimartino](https://github.com/rdimartino) |[rosenfeld](https://github.com/rosenfeld) |[jrschumacher](https://github.com/jrschumacher) |[SlavikTraktor](https://github.com/SlavikTraktor) |[ThomasG77](https://github.com/ThomasG77) | +[richartkeil](https://github.com/richartkeil) |[richmeij](https://github.com/richmeij) |[rdimartino](https://github.com/rdimartino) |[rosenfeld](https://github.com/rosenfeld) |[jrschumacher](https://github.com/jrschumacher) |[SlavikTraktor](https://github.com/SlavikTraktor) | :---: |:---: |:---: |:---: |:---: |:---: | -[richmeij](https://github.com/richmeij) |[rdimartino](https://github.com/rdimartino) |[rosenfeld](https://github.com/rosenfeld) |[jrschumacher](https://github.com/jrschumacher) |[SlavikTraktor](https://github.com/SlavikTraktor) |[ThomasG77](https://github.com/ThomasG77) | +[richartkeil](https://github.com/richartkeil) |[richmeij](https://github.com/richmeij) |[rdimartino](https://github.com/rdimartino) |[rosenfeld](https://github.com/rosenfeld) |[jrschumacher](https://github.com/jrschumacher) |[SlavikTraktor](https://github.com/SlavikTraktor) | -[sparanoid](https://github.com/sparanoid) |[zhuangya](https://github.com/zhuangya) |[yaegor](https://github.com/yaegor) |[allenfantasy](https://github.com/allenfantasy) |[Zyclotrop-j](https://github.com/Zyclotrop-j) |[anark](https://github.com/anark) | +[ThomasG77](https://github.com/ThomasG77) |[sparanoid](https://github.com/sparanoid) |[zhuangya](https://github.com/zhuangya) |[yaegor](https://github.com/yaegor) |[allenfantasy](https://github.com/allenfantasy) |[Zyclotrop-j](https://github.com/Zyclotrop-j) | :---: |:---: |:---: |:---: |:---: |:---: | -[sparanoid](https://github.com/sparanoid) |[zhuangya](https://github.com/zhuangya) |[yaegor](https://github.com/yaegor) |[allenfantasy](https://github.com/allenfantasy) |[Zyclotrop-j](https://github.com/Zyclotrop-j) |[anark](https://github.com/anark) | +[ThomasG77](https://github.com/ThomasG77) |[sparanoid](https://github.com/sparanoid) |[zhuangya](https://github.com/zhuangya) |[yaegor](https://github.com/yaegor) |[allenfantasy](https://github.com/allenfantasy) |[Zyclotrop-j](https://github.com/Zyclotrop-j) | -[fortrieb](https://github.com/fortrieb) |[jarey](https://github.com/jarey) |[muhammadInam](https://github.com/muhammadInam) |[rettgerst](https://github.com/rettgerst) |[mkabatek](https://github.com/mkabatek) |[jukakoski](https://github.com/jukakoski) | +[anark](https://github.com/anark) |[fortrieb](https://github.com/fortrieb) |[jarey](https://github.com/jarey) |[muhammadInam](https://github.com/muhammadInam) |[rettgerst](https://github.com/rettgerst) |[mkabatek](https://github.com/mkabatek) | :---: |:---: |:---: |:---: |:---: |:---: | -[fortrieb](https://github.com/fortrieb) |[jarey](https://github.com/jarey) |[muhammadInam](https://github.com/muhammadInam) |[rettgerst](https://github.com/rettgerst) |[mkabatek](https://github.com/mkabatek) |[jukakoski](https://github.com/jukakoski) | +[anark](https://github.com/anark) |[fortrieb](https://github.com/fortrieb) |[jarey](https://github.com/jarey) |[muhammadInam](https://github.com/muhammadInam) |[rettgerst](https://github.com/rettgerst) |[mkabatek](https://github.com/mkabatek) | -[olemoign](https://github.com/olemoign) |[ajschmidt8](https://github.com/ajschmidt8) |[superhawk610](https://github.com/superhawk610) |[abannach](https://github.com/abannach) |[adamelmore](https://github.com/adamelmore) |[ajh-sr](https://github.com/ajh-sr) | +[jukakoski](https://github.com/jukakoski) |[olemoign](https://github.com/olemoign) |[ajschmidt8](https://github.com/ajschmidt8) |[superhawk610](https://github.com/superhawk610) |[abannach](https://github.com/abannach) |[adamelmore](https://github.com/adamelmore) | :---: |:---: |:---: |:---: |:---: |:---: | -[olemoign](https://github.com/olemoign) |[ajschmidt8](https://github.com/ajschmidt8) |[superhawk610](https://github.com/superhawk610) |[abannach](https://github.com/abannach) |[adamelmore](https://github.com/adamelmore) |[ajh-sr](https://github.com/ajh-sr) | +[jukakoski](https://github.com/jukakoski) |[olemoign](https://github.com/olemoign) |[ajschmidt8](https://github.com/ajschmidt8) |[superhawk610](https://github.com/superhawk610) |[abannach](https://github.com/abannach) |[adamelmore](https://github.com/adamelmore) | -[adamvigneault](https://github.com/adamvigneault) |[Adrrei](https://github.com/Adrrei) |[adritasharma](https://github.com/adritasharma) |[ahmadissa](https://github.com/ahmadissa) |[asmt3](https://github.com/asmt3) |[alexnj](https://github.com/alexnj) | +[ajh-sr](https://github.com/ajh-sr) |[adamvigneault](https://github.com/adamvigneault) |[Adrrei](https://github.com/Adrrei) |[adritasharma](https://github.com/adritasharma) |[ahmadissa](https://github.com/ahmadissa) |[asmt3](https://github.com/asmt3) | :---: |:---: |:---: |:---: |:---: |:---: | -[adamvigneault](https://github.com/adamvigneault) |[Adrrei](https://github.com/Adrrei) |[adritasharma](https://github.com/adritasharma) |[ahmadissa](https://github.com/ahmadissa) |[asmt3](https://github.com/asmt3) |[alexnj](https://github.com/alexnj) | +[ajh-sr](https://github.com/ajh-sr) |[adamvigneault](https://github.com/adamvigneault) |[Adrrei](https://github.com/Adrrei) |[adritasharma](https://github.com/adritasharma) |[ahmadissa](https://github.com/ahmadissa) |[asmt3](https://github.com/asmt3) | -[aalepis](https://github.com/aalepis) |[Dogfalo](https://github.com/Dogfalo) |[tekacs](https://github.com/tekacs) |[amitport](https://github.com/amitport) |[functino](https://github.com/functino) |[radarhere](https://github.com/radarhere) | +[alexnj](https://github.com/alexnj) |[aalepis](https://github.com/aalepis) |[Dogfalo](https://github.com/Dogfalo) |[tekacs](https://github.com/tekacs) |[amitport](https://github.com/amitport) |[functino](https://github.com/functino) | :---: |:---: |:---: |:---: |:---: |:---: | -[aalepis](https://github.com/aalepis) |[Dogfalo](https://github.com/Dogfalo) |[tekacs](https://github.com/tekacs) |[amitport](https://github.com/amitport) |[functino](https://github.com/functino) |[radarhere](https://github.com/radarhere) | +[alexnj](https://github.com/alexnj) |[aalepis](https://github.com/aalepis) |[Dogfalo](https://github.com/Dogfalo) |[tekacs](https://github.com/tekacs) |[amitport](https://github.com/amitport) |[functino](https://github.com/functino) | -[superandrew213](https://github.com/superandrew213) |[andychongyz](https://github.com/andychongyz) |[anthony0030](https://github.com/anthony0030) |[Abourass](https://github.com/Abourass) |[arthurdenner](https://github.com/arthurdenner) |[apuyou](https://github.com/apuyou) | +[radarhere](https://github.com/radarhere) |[superandrew213](https://github.com/superandrew213) |[andychongyz](https://github.com/andychongyz) |[anthony0030](https://github.com/anthony0030) |[Abourass](https://github.com/Abourass) |[arthurdenner](https://github.com/arthurdenner) | :---: |:---: |:---: |:---: |:---: |:---: | -[superandrew213](https://github.com/superandrew213) |[andychongyz](https://github.com/andychongyz) |[anthony0030](https://github.com/anthony0030) |[Abourass](https://github.com/Abourass) |[arthurdenner](https://github.com/arthurdenner) |[apuyou](https://github.com/apuyou) | +[radarhere](https://github.com/radarhere) |[superandrew213](https://github.com/superandrew213) |[andychongyz](https://github.com/andychongyz) |[anthony0030](https://github.com/anthony0030) |[Abourass](https://github.com/Abourass) |[arthurdenner](https://github.com/arthurdenner) | -[ash-jc-allen](https://github.com/ash-jc-allen) |[atsawin](https://github.com/atsawin) |[ayhankesicioglu](https://github.com/ayhankesicioglu) |[azeemba](https://github.com/azeemba) |[azizk](https://github.com/azizk) |[bducharme](https://github.com/bducharme) | +[apuyou](https://github.com/apuyou) |[ash-jc-allen](https://github.com/ash-jc-allen) |[atsawin](https://github.com/atsawin) |[ayhankesicioglu](https://github.com/ayhankesicioglu) |[azeemba](https://github.com/azeemba) |[azizk](https://github.com/azizk) | :---: |:---: |:---: |:---: |:---: |:---: | -[ash-jc-allen](https://github.com/ash-jc-allen) |[atsawin](https://github.com/atsawin) |[ayhankesicioglu](https://github.com/ayhankesicioglu) |[azeemba](https://github.com/azeemba) |[azizk](https://github.com/azizk) |[bducharme](https://github.com/bducharme) | +[apuyou](https://github.com/apuyou) |[ash-jc-allen](https://github.com/ash-jc-allen) |[atsawin](https://github.com/atsawin) |[ayhankesicioglu](https://github.com/ayhankesicioglu) |[azeemba](https://github.com/azeemba) |[azizk](https://github.com/azizk) | -[Quorafind](https://github.com/Quorafind) |[wbaaron](https://github.com/wbaaron) |[bedgerotto](https://github.com/bedgerotto) |[cyu](https://github.com/cyu) |[cartfisk](https://github.com/cartfisk) |[cellvinchung](https://github.com/cellvinchung) | +[bducharme](https://github.com/bducharme) |[Quorafind](https://github.com/Quorafind) |[wbaaron](https://github.com/wbaaron) |[bedgerotto](https://github.com/bedgerotto) |[cyu](https://github.com/cyu) |[cartfisk](https://github.com/cartfisk) | :---: |:---: |:---: |:---: |:---: |:---: | -[Quorafind](https://github.com/Quorafind) |[wbaaron](https://github.com/wbaaron) |[bedgerotto](https://github.com/bedgerotto) |[cyu](https://github.com/cyu) |[cartfisk](https://github.com/cartfisk) |[cellvinchung](https://github.com/cellvinchung) | +[bducharme](https://github.com/bducharme) |[Quorafind](https://github.com/Quorafind) |[wbaaron](https://github.com/wbaaron) |[bedgerotto](https://github.com/bedgerotto) |[cyu](https://github.com/cyu) |[cartfisk](https://github.com/cartfisk) | -[chao](https://github.com/chao) |[Cretezy](https://github.com/Cretezy) |[charlybillaud](https://github.com/charlybillaud) |[csprance](https://github.com/csprance) |[Aarbel](https://github.com/Aarbel) |[cbush06](https://github.com/cbush06) | +[cellvinchung](https://github.com/cellvinchung) |[chao](https://github.com/chao) |[Cretezy](https://github.com/Cretezy) |[charlybillaud](https://github.com/charlybillaud) |[csprance](https://github.com/csprance) |[Aarbel](https://github.com/Aarbel) | :---: |:---: |:---: |:---: |:---: |:---: | -[chao](https://github.com/chao) |[Cretezy](https://github.com/Cretezy) |[charlybillaud](https://github.com/charlybillaud) |[csprance](https://github.com/csprance) |[Aarbel](https://github.com/Aarbel) |[cbush06](https://github.com/cbush06) | +[cellvinchung](https://github.com/cellvinchung) |[chao](https://github.com/chao) |[Cretezy](https://github.com/Cretezy) |[charlybillaud](https://github.com/charlybillaud) |[csprance](https://github.com/csprance) |[Aarbel](https://github.com/Aarbel) | -[czj](https://github.com/czj) |[CommanderRoot](https://github.com/CommanderRoot) |[ardeois](https://github.com/ardeois) |[sercraig](https://github.com/sercraig) |[Cruaier](https://github.com/Cruaier) |[danmichaelo](https://github.com/danmichaelo) | +[cbush06](https://github.com/cbush06) |[czj](https://github.com/czj) |[CommanderRoot](https://github.com/CommanderRoot) |[ardeois](https://github.com/ardeois) |[sercraig](https://github.com/sercraig) |[Cruaier](https://github.com/Cruaier) | :---: |:---: |:---: |:---: |:---: |:---: | -[czj](https://github.com/czj) |[CommanderRoot](https://github.com/CommanderRoot) |[ardeois](https://github.com/ardeois) |[sercraig](https://github.com/sercraig) |[Cruaier](https://github.com/Cruaier) |[danmichaelo](https://github.com/danmichaelo) | +[cbush06](https://github.com/cbush06) |[czj](https://github.com/czj) |[CommanderRoot](https://github.com/CommanderRoot) |[ardeois](https://github.com/ardeois) |[sercraig](https://github.com/sercraig) |[Cruaier](https://github.com/Cruaier) | -[danschalow](https://github.com/danschalow) |[danilat](https://github.com/danilat) |[mrboomer](https://github.com/mrboomer) |[akizor](https://github.com/akizor) |[davilima6](https://github.com/davilima6) |[DennisKofflard](https://github.com/DennisKofflard) | +[danmichaelo](https://github.com/danmichaelo) |[danschalow](https://github.com/danschalow) |[danilat](https://github.com/danilat) |[mrboomer](https://github.com/mrboomer) |[akizor](https://github.com/akizor) |[davilima6](https://github.com/davilima6) | :---: |:---: |:---: |:---: |:---: |:---: | -[danschalow](https://github.com/danschalow) |[danilat](https://github.com/danilat) |[mrboomer](https://github.com/mrboomer) |[akizor](https://github.com/akizor) |[davilima6](https://github.com/davilima6) |[DennisKofflard](https://github.com/DennisKofflard) | +[danmichaelo](https://github.com/danmichaelo) |[danschalow](https://github.com/danschalow) |[danilat](https://github.com/danilat) |[mrboomer](https://github.com/mrboomer) |[akizor](https://github.com/akizor) |[davilima6](https://github.com/davilima6) | -[jeetiss](https://github.com/jeetiss) |[sweetro](https://github.com/sweetro) |[EdgarSantiago93](https://github.com/EdgarSantiago93) |[emuell](https://github.com/emuell) |[efbautista](https://github.com/efbautista) |[yoldar](https://github.com/yoldar) | +[DennisKofflard](https://github.com/DennisKofflard) |[jeetiss](https://github.com/jeetiss) |[sweetro](https://github.com/sweetro) |[EdgarSantiago93](https://github.com/EdgarSantiago93) |[emuell](https://github.com/emuell) |[efbautista](https://github.com/efbautista) | :---: |:---: |:---: |:---: |:---: |:---: | -[jeetiss](https://github.com/jeetiss) |[sweetro](https://github.com/sweetro) |[EdgarSantiago93](https://github.com/EdgarSantiago93) |[emuell](https://github.com/emuell) |[efbautista](https://github.com/efbautista) |[yoldar](https://github.com/yoldar) | +[DennisKofflard](https://github.com/DennisKofflard) |[jeetiss](https://github.com/jeetiss) |[sweetro](https://github.com/sweetro) |[EdgarSantiago93](https://github.com/EdgarSantiago93) |[emuell](https://github.com/emuell) |[efbautista](https://github.com/efbautista) | -[eliOcs](https://github.com/eliOcs) |[EnricoSottile](https://github.com/EnricoSottile) |[epexa](https://github.com/epexa) |[Gkleinereva](https://github.com/Gkleinereva) |[fgallinari](https://github.com/fgallinari) |[ferdiusa](https://github.com/ferdiusa) | +[yoldar](https://github.com/yoldar) |[eliOcs](https://github.com/eliOcs) |[EnricoSottile](https://github.com/EnricoSottile) |[epexa](https://github.com/epexa) |[Gkleinereva](https://github.com/Gkleinereva) |[fgallinari](https://github.com/fgallinari) | :---: |:---: |:---: |:---: |:---: |:---: | -[eliOcs](https://github.com/eliOcs) |[EnricoSottile](https://github.com/EnricoSottile) |[epexa](https://github.com/epexa) |[Gkleinereva](https://github.com/Gkleinereva) |[fgallinari](https://github.com/fgallinari) |[ferdiusa](https://github.com/ferdiusa) | +[yoldar](https://github.com/yoldar) |[eliOcs](https://github.com/eliOcs) |[EnricoSottile](https://github.com/EnricoSottile) |[epexa](https://github.com/epexa) |[Gkleinereva](https://github.com/Gkleinereva) |[fgallinari](https://github.com/fgallinari) | -[dtrucs](https://github.com/dtrucs) |[gabiganam](https://github.com/gabiganam) |[geoffappleford](https://github.com/geoffappleford) |[gjungb](https://github.com/gjungb) |[roenschg](https://github.com/roenschg) |[HughbertD](https://github.com/HughbertD) | +[ferdiusa](https://github.com/ferdiusa) |[dtrucs](https://github.com/dtrucs) |[gabiganam](https://github.com/gabiganam) |[geoffappleford](https://github.com/geoffappleford) |[gjungb](https://github.com/gjungb) |[roenschg](https://github.com/roenschg) | :---: |:---: |:---: |:---: |:---: |:---: | -[dtrucs](https://github.com/dtrucs) |[gabiganam](https://github.com/gabiganam) |[geoffappleford](https://github.com/geoffappleford) |[gjungb](https://github.com/gjungb) |[roenschg](https://github.com/roenschg) |[HughbertD](https://github.com/HughbertD) | +[ferdiusa](https://github.com/ferdiusa) |[dtrucs](https://github.com/dtrucs) |[gabiganam](https://github.com/gabiganam) |[geoffappleford](https://github.com/geoffappleford) |[gjungb](https://github.com/gjungb) |[roenschg](https://github.com/roenschg) | -[HussainAlkhalifah](https://github.com/HussainAlkhalifah) |[huydod](https://github.com/huydod) |[IanVS](https://github.com/IanVS) |[ishendyweb](https://github.com/ishendyweb) |[NaxYo](https://github.com/NaxYo) |[eltociear](https://github.com/eltociear) | +[HughbertD](https://github.com/HughbertD) |[HussainAlkhalifah](https://github.com/HussainAlkhalifah) |[huydod](https://github.com/huydod) |[IanVS](https://github.com/IanVS) |[ishendyweb](https://github.com/ishendyweb) |[NaxYo](https://github.com/NaxYo) | :---: |:---: |:---: |:---: |:---: |:---: | -[HussainAlkhalifah](https://github.com/HussainAlkhalifah) |[huydod](https://github.com/huydod) |[IanVS](https://github.com/IanVS) |[ishendyweb](https://github.com/ishendyweb) |[NaxYo](https://github.com/NaxYo) |[eltociear](https://github.com/eltociear) | +[HughbertD](https://github.com/HughbertD) |[HussainAlkhalifah](https://github.com/HussainAlkhalifah) |[huydod](https://github.com/huydod) |[IanVS](https://github.com/IanVS) |[ishendyweb](https://github.com/ishendyweb) |[NaxYo](https://github.com/NaxYo) | -[intenzive](https://github.com/intenzive) |[GreenJimmy](https://github.com/GreenJimmy) |[mazoruss](https://github.com/mazoruss) |[JacobMGEvans](https://github.com/JacobMGEvans) |[jdssem](https://github.com/jdssem) |[JakubHaladej](https://github.com/JakubHaladej) | +[eltociear](https://github.com/eltociear) |[intenzive](https://github.com/intenzive) |[GreenJimmy](https://github.com/GreenJimmy) |[mazoruss](https://github.com/mazoruss) |[JacobMGEvans](https://github.com/JacobMGEvans) |[jdssem](https://github.com/jdssem) | :---: |:---: |:---: |:---: |:---: |:---: | -[intenzive](https://github.com/intenzive) |[GreenJimmy](https://github.com/GreenJimmy) |[mazoruss](https://github.com/mazoruss) |[JacobMGEvans](https://github.com/JacobMGEvans) |[jdssem](https://github.com/jdssem) |[JakubHaladej](https://github.com/JakubHaladej) | +[eltociear](https://github.com/eltociear) |[intenzive](https://github.com/intenzive) |[GreenJimmy](https://github.com/GreenJimmy) |[mazoruss](https://github.com/mazoruss) |[JacobMGEvans](https://github.com/JacobMGEvans) |[jdssem](https://github.com/jdssem) | -[Jbithell](https://github.com/Jbithell) |[jcjmcclean](https://github.com/jcjmcclean) |[janklimo](https://github.com/janklimo) |[janwilts](https://github.com/janwilts) |[vith](https://github.com/vith) |[jessica-coursera](https://github.com/jessica-coursera) | +[JakubHaladej](https://github.com/JakubHaladej) |[Jbithell](https://github.com/Jbithell) |[jcjmcclean](https://github.com/jcjmcclean) |[janklimo](https://github.com/janklimo) |[janwilts](https://github.com/janwilts) |[vith](https://github.com/vith) | :---: |:---: |:---: |:---: |:---: |:---: | -[Jbithell](https://github.com/Jbithell) |[jcjmcclean](https://github.com/jcjmcclean) |[janklimo](https://github.com/janklimo) |[janwilts](https://github.com/janwilts) |[vith](https://github.com/vith) |[jessica-coursera](https://github.com/jessica-coursera) | +[JakubHaladej](https://github.com/JakubHaladej) |[Jbithell](https://github.com/Jbithell) |[jcjmcclean](https://github.com/jcjmcclean) |[janklimo](https://github.com/janklimo) |[janwilts](https://github.com/janwilts) |[vith](https://github.com/vith) | -[Jmales](https://github.com/Jmales) |[theJoeBiz](https://github.com/theJoeBiz) |[profsmallpine](https://github.com/profsmallpine) |[chromacoma](https://github.com/chromacoma) |[jonathanarbely](https://github.com/jonathanarbely) |[jderrough](https://github.com/jderrough) | +[jessica-coursera](https://github.com/jessica-coursera) |[Jmales](https://github.com/Jmales) |[theJoeBiz](https://github.com/theJoeBiz) |[profsmallpine](https://github.com/profsmallpine) |[chromacoma](https://github.com/chromacoma) |[jonathanarbely](https://github.com/jonathanarbely) | :---: |:---: |:---: |:---: |:---: |:---: | -[Jmales](https://github.com/Jmales) |[theJoeBiz](https://github.com/theJoeBiz) |[profsmallpine](https://github.com/profsmallpine) |[chromacoma](https://github.com/chromacoma) |[jonathanarbely](https://github.com/jonathanarbely) |[jderrough](https://github.com/jderrough) | +[jessica-coursera](https://github.com/jessica-coursera) |[Jmales](https://github.com/Jmales) |[theJoeBiz](https://github.com/theJoeBiz) |[profsmallpine](https://github.com/profsmallpine) |[chromacoma](https://github.com/chromacoma) |[jonathanarbely](https://github.com/jonathanarbely) | -[jorgeepc](https://github.com/jorgeepc) |[jszobody](https://github.com/jszobody) |[jcalonso](https://github.com/jcalonso) |[jmontoyaa](https://github.com/jmontoyaa) |[tykarol](https://github.com/tykarol) |[firesharkstudios](https://github.com/firesharkstudios) | +[jderrough](https://github.com/jderrough) |[jorgeepc](https://github.com/jorgeepc) |[jszobody](https://github.com/jszobody) |[jcalonso](https://github.com/jcalonso) |[jmontoyaa](https://github.com/jmontoyaa) |[tykarol](https://github.com/tykarol) | :---: |:---: |:---: |:---: |:---: |:---: | -[jorgeepc](https://github.com/jorgeepc) |[jszobody](https://github.com/jszobody) |[jcalonso](https://github.com/jcalonso) |[jmontoyaa](https://github.com/jmontoyaa) |[tykarol](https://github.com/tykarol) |[firesharkstudios](https://github.com/firesharkstudios) | +[jderrough](https://github.com/jderrough) |[jorgeepc](https://github.com/jorgeepc) |[jszobody](https://github.com/jszobody) |[jcalonso](https://github.com/jcalonso) |[jmontoyaa](https://github.com/jmontoyaa) |[tykarol](https://github.com/tykarol) | -[kevin-west-10x](https://github.com/kevin-west-10x) |[elkebab](https://github.com/elkebab) |[kyleparisi](https://github.com/kyleparisi) |[leaanthony](https://github.com/leaanthony) |[larowlan](https://github.com/larowlan) |[dviry](https://github.com/dviry) | +[firesharkstudios](https://github.com/firesharkstudios) |[kevin-west-10x](https://github.com/kevin-west-10x) |[elkebab](https://github.com/elkebab) |[kyleparisi](https://github.com/kyleparisi) |[leaanthony](https://github.com/leaanthony) |[larowlan](https://github.com/larowlan) | :---: |:---: |:---: |:---: |:---: |:---: | -[kevin-west-10x](https://github.com/kevin-west-10x) |[elkebab](https://github.com/elkebab) |[kyleparisi](https://github.com/kyleparisi) |[leaanthony](https://github.com/leaanthony) |[larowlan](https://github.com/larowlan) |[dviry](https://github.com/dviry) | +[firesharkstudios](https://github.com/firesharkstudios) |[kevin-west-10x](https://github.com/kevin-west-10x) |[elkebab](https://github.com/elkebab) |[kyleparisi](https://github.com/kyleparisi) |[leaanthony](https://github.com/leaanthony) |[larowlan](https://github.com/larowlan) | -[galli-leo](https://github.com/galli-leo) |[leods92](https://github.com/leods92) |[louim](https://github.com/louim) |[lucaperret](https://github.com/lucaperret) |[lucax88x](https://github.com/lucax88x) |[onhate](https://github.com/onhate) | +[dviry](https://github.com/dviry) |[galli-leo](https://github.com/galli-leo) |[leods92](https://github.com/leods92) |[louim](https://github.com/louim) |[lucaperret](https://github.com/lucaperret) |[lucax88x](https://github.com/lucax88x) | :---: |:---: |:---: |:---: |:---: |:---: | -[galli-leo](https://github.com/galli-leo) |[leods92](https://github.com/leods92) |[louim](https://github.com/louim) |[lucaperret](https://github.com/lucaperret) |[lucax88x](https://github.com/lucax88x) |[onhate](https://github.com/onhate) | +[dviry](https://github.com/dviry) |[galli-leo](https://github.com/galli-leo) |[leods92](https://github.com/leods92) |[louim](https://github.com/louim) |[lucaperret](https://github.com/lucaperret) |[lucax88x](https://github.com/lucax88x) | -[mperrando](https://github.com/mperrando) |[marcosthejew](https://github.com/marcosthejew) |[marcusforsberg](https://github.com/marcusforsberg) |[Acconut](https://github.com/Acconut) |[martin-brennan](https://github.com/martin-brennan) |[masaok](https://github.com/masaok) | +[onhate](https://github.com/onhate) |[mperrando](https://github.com/mperrando) |[marcosthejew](https://github.com/marcosthejew) |[marcusforsberg](https://github.com/marcusforsberg) |[Acconut](https://github.com/Acconut) |[martin-brennan](https://github.com/martin-brennan) | :---: |:---: |:---: |:---: |:---: |:---: | -[mperrando](https://github.com/mperrando) |[marcosthejew](https://github.com/marcosthejew) |[marcusforsberg](https://github.com/marcusforsberg) |[Acconut](https://github.com/Acconut) |[martin-brennan](https://github.com/martin-brennan) |[masaok](https://github.com/masaok) | +[onhate](https://github.com/onhate) |[mperrando](https://github.com/mperrando) |[marcosthejew](https://github.com/marcosthejew) |[marcusforsberg](https://github.com/marcusforsberg) |[Acconut](https://github.com/Acconut) |[martin-brennan](https://github.com/martin-brennan) | -[mattfik](https://github.com/mattfik) |[matthewhartstonge](https://github.com/matthewhartstonge) |[mauricioribeiro](https://github.com/mauricioribeiro) |[hrsh](https://github.com/hrsh) |[mhulet](https://github.com/mhulet) |[mkopinsky](https://github.com/mkopinsky) | +[masaok](https://github.com/masaok) |[mattfik](https://github.com/mattfik) |[matthewhartstonge](https://github.com/matthewhartstonge) |[mauricioribeiro](https://github.com/mauricioribeiro) |[hrsh](https://github.com/hrsh) |[mhulet](https://github.com/mhulet) | :---: |:---: |:---: |:---: |:---: |:---: | -[mattfik](https://github.com/mattfik) |[matthewhartstonge](https://github.com/matthewhartstonge) |[mauricioribeiro](https://github.com/mauricioribeiro) |[hrsh](https://github.com/hrsh) |[mhulet](https://github.com/mhulet) |[mkopinsky](https://github.com/mkopinsky) | +[masaok](https://github.com/masaok) |[mattfik](https://github.com/mattfik) |[matthewhartstonge](https://github.com/matthewhartstonge) |[mauricioribeiro](https://github.com/mauricioribeiro) |[hrsh](https://github.com/hrsh) |[mhulet](https://github.com/mhulet) | -[achmiral](https://github.com/achmiral) |[boudra](https://github.com/boudra) |[mnafees](https://github.com/mnafees) |[shahimclt](https://github.com/shahimclt) |[navruzm](https://github.com/navruzm) |[marton-laszlo-attila](https://github.com/marton-laszlo-attila) | +[mkopinsky](https://github.com/mkopinsky) |[achmiral](https://github.com/achmiral) |[boudra](https://github.com/boudra) |[mnafees](https://github.com/mnafees) |[shahimclt](https://github.com/shahimclt) |[navruzm](https://github.com/navruzm) | :---: |:---: |:---: |:---: |:---: |:---: | -[achmiral](https://github.com/achmiral) |[boudra](https://github.com/boudra) |[mnafees](https://github.com/mnafees) |[shahimclt](https://github.com/shahimclt) |[navruzm](https://github.com/navruzm) |[marton-laszlo-attila](https://github.com/marton-laszlo-attila) | +[mkopinsky](https://github.com/mkopinsky) |[achmiral](https://github.com/achmiral) |[boudra](https://github.com/boudra) |[mnafees](https://github.com/mnafees) |[shahimclt](https://github.com/shahimclt) |[navruzm](https://github.com/navruzm) | -[pleasespammelater](https://github.com/pleasespammelater) |[naveed-ahmad](https://github.com/naveed-ahmad) |[nicojones](https://github.com/nicojones) |[coreprocess](https://github.com/coreprocess) |[nil1511](https://github.com/nil1511) |[leftdevel](https://github.com/leftdevel) | +[marton-laszlo-attila](https://github.com/marton-laszlo-attila) |[pleasespammelater](https://github.com/pleasespammelater) |[naveed-ahmad](https://github.com/naveed-ahmad) |[nicojones](https://github.com/nicojones) |[coreprocess](https://github.com/coreprocess) |[nil1511](https://github.com/nil1511) | :---: |:---: |:---: |:---: |:---: |:---: | -[pleasespammelater](https://github.com/pleasespammelater) |[naveed-ahmad](https://github.com/naveed-ahmad) |[nicojones](https://github.com/nicojones) |[coreprocess](https://github.com/coreprocess) |[nil1511](https://github.com/nil1511) |[leftdevel](https://github.com/leftdevel) | +[marton-laszlo-attila](https://github.com/marton-laszlo-attila) |[pleasespammelater](https://github.com/pleasespammelater) |[naveed-ahmad](https://github.com/naveed-ahmad) |[nicojones](https://github.com/nicojones) |[coreprocess](https://github.com/coreprocess) |[nil1511](https://github.com/nil1511) | -[cryptic022](https://github.com/cryptic022) |[patricklindsay](https://github.com/patricklindsay) |[pedrofs](https://github.com/pedrofs) |[pmusaraj](https://github.com/pmusaraj) |[phillipalexander](https://github.com/phillipalexander) |[ppadmavilasom](https://github.com/ppadmavilasom) | +[leftdevel](https://github.com/leftdevel) |[cryptic022](https://github.com/cryptic022) |[patricklindsay](https://github.com/patricklindsay) |[plneto](https://github.com/plneto) |[pedrofs](https://github.com/pedrofs) |[pmusaraj](https://github.com/pmusaraj) | :---: |:---: |:---: |:---: |:---: |:---: | -[cryptic022](https://github.com/cryptic022) |[patricklindsay](https://github.com/patricklindsay) |[pedrofs](https://github.com/pedrofs) |[pmusaraj](https://github.com/pmusaraj) |[phillipalexander](https://github.com/phillipalexander) |[ppadmavilasom](https://github.com/ppadmavilasom) | +[leftdevel](https://github.com/leftdevel) |[cryptic022](https://github.com/cryptic022) |[patricklindsay](https://github.com/patricklindsay) |[plneto](https://github.com/plneto) |[pedrofs](https://github.com/pedrofs) |[pmusaraj](https://github.com/pmusaraj) | -[Pzoco](https://github.com/Pzoco) |[eman8519](https://github.com/eman8519) |[luarmr](https://github.com/luarmr) |[refo](https://github.com/refo) |[SxDx](https://github.com/SxDx) |[robwilson1](https://github.com/robwilson1) | +[phillipalexander](https://github.com/phillipalexander) |[ppadmavilasom](https://github.com/ppadmavilasom) |[Pzoco](https://github.com/Pzoco) |[eman8519](https://github.com/eman8519) |[luarmr](https://github.com/luarmr) |[refo](https://github.com/refo) | :---: |:---: |:---: |:---: |:---: |:---: | -[Pzoco](https://github.com/Pzoco) |[eman8519](https://github.com/eman8519) |[luarmr](https://github.com/luarmr) |[refo](https://github.com/refo) |[SxDx](https://github.com/SxDx) |[robwilson1](https://github.com/robwilson1) | +[phillipalexander](https://github.com/phillipalexander) |[ppadmavilasom](https://github.com/ppadmavilasom) |[Pzoco](https://github.com/Pzoco) |[eman8519](https://github.com/eman8519) |[luarmr](https://github.com/luarmr) |[refo](https://github.com/refo) | -[romain-preston](https://github.com/romain-preston) |[scherroman](https://github.com/scherroman) |[rossng](https://github.com/rossng) |[rart](https://github.com/rart) |[fortunto2](https://github.com/fortunto2) |[samuelcolburn](https://github.com/samuelcolburn) | +[SxDx](https://github.com/SxDx) |[robwilson1](https://github.com/robwilson1) |[romain-preston](https://github.com/romain-preston) |[scherroman](https://github.com/scherroman) |[rossng](https://github.com/rossng) |[rart](https://github.com/rart) | :---: |:---: |:---: |:---: |:---: |:---: | -[romain-preston](https://github.com/romain-preston) |[scherroman](https://github.com/scherroman) |[rossng](https://github.com/rossng) |[rart](https://github.com/rart) |[fortunto2](https://github.com/fortunto2) |[samuelcolburn](https://github.com/samuelcolburn) | +[SxDx](https://github.com/SxDx) |[robwilson1](https://github.com/robwilson1) |[romain-preston](https://github.com/romain-preston) |[scherroman](https://github.com/scherroman) |[rossng](https://github.com/rossng) |[rart](https://github.com/rart) | -[sebasegovia01](https://github.com/sebasegovia01) |[sergei-zelinsky](https://github.com/sergei-zelinsky) |[szh](https://github.com/szh) |[SpazzMarticus](https://github.com/SpazzMarticus) |[waptik](https://github.com/waptik) |[amaitu](https://github.com/amaitu) | +[fortunto2](https://github.com/fortunto2) |[samuelcolburn](https://github.com/samuelcolburn) |[sebasegovia01](https://github.com/sebasegovia01) |[sergei-zelinsky](https://github.com/sergei-zelinsky) |[szh](https://github.com/szh) |[SpazzMarticus](https://github.com/SpazzMarticus) | :---: |:---: |:---: |:---: |:---: |:---: | -[sebasegovia01](https://github.com/sebasegovia01) |[sergei-zelinsky](https://github.com/sergei-zelinsky) |[szh](https://github.com/szh) |[SpazzMarticus](https://github.com/SpazzMarticus) |[waptik](https://github.com/waptik) |[amaitu](https://github.com/amaitu) | +[fortunto2](https://github.com/fortunto2) |[samuelcolburn](https://github.com/samuelcolburn) |[sebasegovia01](https://github.com/sebasegovia01) |[sergei-zelinsky](https://github.com/sergei-zelinsky) |[szh](https://github.com/szh) |[SpazzMarticus](https://github.com/SpazzMarticus) | -[steverob](https://github.com/steverob) |[taj](https://github.com/taj) |[Tashows](https://github.com/Tashows) |[twarlop](https://github.com/twarlop) |[tmaier](https://github.com/tmaier) |[WIStudent](https://github.com/WIStudent) | +[waptik](https://github.com/waptik) |[amaitu](https://github.com/amaitu) |[steverob](https://github.com/steverob) |[taj](https://github.com/taj) |[Tashows](https://github.com/Tashows) |[twarlop](https://github.com/twarlop) | :---: |:---: |:---: |:---: |:---: |:---: | -[steverob](https://github.com/steverob) |[taj](https://github.com/taj) |[Tashows](https://github.com/Tashows) |[twarlop](https://github.com/twarlop) |[tmaier](https://github.com/tmaier) |[WIStudent](https://github.com/WIStudent) | +[waptik](https://github.com/waptik) |[amaitu](https://github.com/amaitu) |[steverob](https://github.com/steverob) |[taj](https://github.com/taj) |[Tashows](https://github.com/Tashows) |[twarlop](https://github.com/twarlop) | -[tomsaleeba](https://github.com/tomsaleeba) |[tvaliasek](https://github.com/tvaliasek) |[vially](https://github.com/vially) |[valentinoli](https://github.com/valentinoli) |[nagyv](https://github.com/nagyv) |[dwnste](https://github.com/dwnste) | +[tmaier](https://github.com/tmaier) |[WIStudent](https://github.com/WIStudent) |[tomsaleeba](https://github.com/tomsaleeba) |[tomekp](https://github.com/tomekp) |[tvaliasek](https://github.com/tvaliasek) |[vially](https://github.com/vially) | :---: |:---: |:---: |:---: |:---: |:---: | -[tomsaleeba](https://github.com/tomsaleeba) |[tvaliasek](https://github.com/tvaliasek) |[vially](https://github.com/vially) |[valentinoli](https://github.com/valentinoli) |[nagyv](https://github.com/nagyv) |[dwnste](https://github.com/dwnste) | +[tmaier](https://github.com/tmaier) |[WIStudent](https://github.com/WIStudent) |[tomsaleeba](https://github.com/tomsaleeba) |[tomekp](https://github.com/tomekp) |[tvaliasek](https://github.com/tvaliasek) |[vially](https://github.com/vially) | -[willycamargo](https://github.com/willycamargo) |[xhocquet](https://github.com/xhocquet) |[YehudaKremer](https://github.com/YehudaKremer) |[zachconner](https://github.com/zachconner) |[zacharylawson](https://github.com/zacharylawson) |[zackbloom](https://github.com/zackbloom) | +[valentinoli](https://github.com/valentinoli) |[nagyv](https://github.com/nagyv) |[dwnste](https://github.com/dwnste) |[weston-sankey-mark43](https://github.com/weston-sankey-mark43) |[willycamargo](https://github.com/willycamargo) |[xhocquet](https://github.com/xhocquet) | :---: |:---: |:---: |:---: |:---: |:---: | -[willycamargo](https://github.com/willycamargo) |[xhocquet](https://github.com/xhocquet) |[YehudaKremer](https://github.com/YehudaKremer) |[zachconner](https://github.com/zachconner) |[zacharylawson](https://github.com/zacharylawson) |[zackbloom](https://github.com/zackbloom) | +[valentinoli](https://github.com/valentinoli) |[nagyv](https://github.com/nagyv) |[dwnste](https://github.com/dwnste) |[weston-sankey-mark43](https://github.com/weston-sankey-mark43) |[willycamargo](https://github.com/willycamargo) |[xhocquet](https://github.com/xhocquet) | -[sartoshi-foot-dao](https://github.com/sartoshi-foot-dao) |[agreene-coursera](https://github.com/agreene-coursera) |[alfatv](https://github.com/alfatv) |[arggh](https://github.com/arggh) |[avalla](https://github.com/avalla) |[bdirito](https://github.com/bdirito) | +[YehudaKremer](https://github.com/YehudaKremer) |[zachconner](https://github.com/zachconner) |[zacharylawson](https://github.com/zacharylawson) |[zackbloom](https://github.com/zackbloom) |[sartoshi-foot-dao](https://github.com/sartoshi-foot-dao) |[agreene-coursera](https://github.com/agreene-coursera) | :---: |:---: |:---: |:---: |:---: |:---: | -[sartoshi-foot-dao](https://github.com/sartoshi-foot-dao) |[agreene-coursera](https://github.com/agreene-coursera) |[alfatv](https://github.com/alfatv) |[arggh](https://github.com/arggh) |[avalla](https://github.com/avalla) |[bdirito](https://github.com/bdirito) | +[YehudaKremer](https://github.com/YehudaKremer) |[zachconner](https://github.com/zachconner) |[zacharylawson](https://github.com/zacharylawson) |[zackbloom](https://github.com/zackbloom) |[sartoshi-foot-dao](https://github.com/sartoshi-foot-dao) |[agreene-coursera](https://github.com/agreene-coursera) | -[c0b41](https://github.com/c0b41) |[canvasbh](https://github.com/canvasbh) |[christianwengert](https://github.com/christianwengert) |[craigcbrunner](https://github.com/craigcbrunner) |[darthf1](https://github.com/darthf1) |[dkisic](https://github.com/dkisic) | +[alfatv](https://github.com/alfatv) |[arggh](https://github.com/arggh) |[avalla](https://github.com/avalla) |[bdirito](https://github.com/bdirito) |[c0b41](https://github.com/c0b41) |[canvasbh](https://github.com/canvasbh) | :---: |:---: |:---: |:---: |:---: |:---: | -[c0b41](https://github.com/c0b41) |[canvasbh](https://github.com/canvasbh) |[christianwengert](https://github.com/christianwengert) |[craigcbrunner](https://github.com/craigcbrunner) |[darthf1](https://github.com/darthf1) |[dkisic](https://github.com/dkisic) | +[alfatv](https://github.com/alfatv) |[arggh](https://github.com/arggh) |[avalla](https://github.com/avalla) |[bdirito](https://github.com/bdirito) |[c0b41](https://github.com/c0b41) |[canvasbh](https://github.com/canvasbh) | -[fingul](https://github.com/fingul) |[franckl](https://github.com/franckl) |[gaelicwinter](https://github.com/gaelicwinter) |[green-mike](https://github.com/green-mike) |[heocoi](https://github.com/heocoi) |[hxgf](https://github.com/hxgf) | +[christianwengert](https://github.com/christianwengert) |[craigcbrunner](https://github.com/craigcbrunner) |[darthf1](https://github.com/darthf1) |[dkisic](https://github.com/dkisic) |[fingul](https://github.com/fingul) |[franckl](https://github.com/franckl) | :---: |:---: |:---: |:---: |:---: |:---: | -[fingul](https://github.com/fingul) |[franckl](https://github.com/franckl) |[gaelicwinter](https://github.com/gaelicwinter) |[green-mike](https://github.com/green-mike) |[heocoi](https://github.com/heocoi) |[hxgf](https://github.com/hxgf) | +[christianwengert](https://github.com/christianwengert) |[craigcbrunner](https://github.com/craigcbrunner) |[darthf1](https://github.com/darthf1) |[dkisic](https://github.com/dkisic) |[fingul](https://github.com/fingul) |[franckl](https://github.com/franckl) | -[johnmanjiro13](https://github.com/johnmanjiro13) |[kode-ninja](https://github.com/kode-ninja) |[jx-zyf](https://github.com/jx-zyf) |[magumbo](https://github.com/magumbo) |[ninesalt](https://github.com/ninesalt) |[phil714](https://github.com/phil714) | +[gaelicwinter](https://github.com/gaelicwinter) |[green-mike](https://github.com/green-mike) |[heocoi](https://github.com/heocoi) |[hxgf](https://github.com/hxgf) |[johnmanjiro13](https://github.com/johnmanjiro13) |[kode-ninja](https://github.com/kode-ninja) | :---: |:---: |:---: |:---: |:---: |:---: | -[johnmanjiro13](https://github.com/johnmanjiro13) |[kode-ninja](https://github.com/kode-ninja) |[jx-zyf](https://github.com/jx-zyf) |[magumbo](https://github.com/magumbo) |[ninesalt](https://github.com/ninesalt) |[phil714](https://github.com/phil714) | +[gaelicwinter](https://github.com/gaelicwinter) |[green-mike](https://github.com/green-mike) |[heocoi](https://github.com/heocoi) |[hxgf](https://github.com/hxgf) |[johnmanjiro13](https://github.com/johnmanjiro13) |[kode-ninja](https://github.com/kode-ninja) | -[luntta](https://github.com/luntta) |[rhymes](https://github.com/rhymes) |[rlebosse](https://github.com/rlebosse) |[rtaieb](https://github.com/rtaieb) |[slawexxx44](https://github.com/slawexxx44) |[thanhthot](https://github.com/thanhthot) | +[jx-zyf](https://github.com/jx-zyf) |[magumbo](https://github.com/magumbo) |[ninesalt](https://github.com/ninesalt) |[phil714](https://github.com/phil714) |[luntta](https://github.com/luntta) |[rhymes](https://github.com/rhymes) | :---: |:---: |:---: |:---: |:---: |:---: | -[luntta](https://github.com/luntta) |[rhymes](https://github.com/rhymes) |[rlebosse](https://github.com/rlebosse) |[rtaieb](https://github.com/rtaieb) |[slawexxx44](https://github.com/slawexxx44) |[thanhthot](https://github.com/thanhthot) | +[jx-zyf](https://github.com/jx-zyf) |[magumbo](https://github.com/magumbo) |[ninesalt](https://github.com/ninesalt) |[phil714](https://github.com/phil714) |[luntta](https://github.com/luntta) |[rhymes](https://github.com/rhymes) | -[tinny77](https://github.com/tinny77) |[tusharjkhunt](https://github.com/tusharjkhunt) |[vedran555](https://github.com/vedran555) |[yoann-hellopret](https://github.com/yoann-hellopret) |[olitomas](https://github.com/olitomas) |[JimmyLv](https://github.com/JimmyLv) | +[rlebosse](https://github.com/rlebosse) |[rtaieb](https://github.com/rtaieb) |[slawexxx44](https://github.com/slawexxx44) |[thanhthot](https://github.com/thanhthot) |[tinny77](https://github.com/tinny77) |[tusharjkhunt](https://github.com/tusharjkhunt) | :---: |:---: |:---: |:---: |:---: |:---: | -[tinny77](https://github.com/tinny77) |[tusharjkhunt](https://github.com/tusharjkhunt) |[vedran555](https://github.com/vedran555) |[yoann-hellopret](https://github.com/yoann-hellopret) |[olitomas](https://github.com/olitomas) |[JimmyLv](https://github.com/JimmyLv) | +[rlebosse](https://github.com/rlebosse) |[rtaieb](https://github.com/rtaieb) |[slawexxx44](https://github.com/slawexxx44) |[thanhthot](https://github.com/thanhthot) |[tinny77](https://github.com/tinny77) |[tusharjkhunt](https://github.com/tusharjkhunt) | + +[vedran555](https://github.com/vedran555) |[yoann-hellopret](https://github.com/yoann-hellopret) |[olitomas](https://github.com/olitomas) |[JimmyLv](https://github.com/JimmyLv) | +:---: |:---: |:---: |:---: | +[vedran555](https://github.com/vedran555) |[yoann-hellopret](https://github.com/yoann-hellopret) |[olitomas](https://github.com/olitomas) |[JimmyLv](https://github.com/JimmyLv) | diff --git a/examples/cdn-example/index.html b/examples/cdn-example/index.html index 5bb42963f6..e01ef6a0fe 100644 --- a/examples/cdn-example/index.html +++ b/examples/cdn-example/index.html @@ -4,11 +4,11 @@ - + - + + + + ``` Then, a global `Robodog` variable will be available. For usage instructions, please see the [main Robodog documentation](https://uppy.io/docs/robodog). diff --git a/packages/@uppy/robodog/package.json b/packages/@uppy/robodog/package.json index 465d192f2b..b72d3905ad 100644 --- a/packages/@uppy/robodog/package.json +++ b/packages/@uppy/robodog/package.json @@ -1,7 +1,7 @@ { "name": "@uppy/robodog", "description": "Transloadit SDK for browsers based on Uppy", - "version": "2.7.0", + "version": "2.8.0", "license": "MIT", "main": "lib/index.js", "jsnext:main": "src/index.js", diff --git a/packages/@uppy/tus/CHANGELOG.md b/packages/@uppy/tus/CHANGELOG.md index 1663929eba..fccc63d9a9 100644 --- a/packages/@uppy/tus/CHANGELOG.md +++ b/packages/@uppy/tus/CHANGELOG.md @@ -1,5 +1,13 @@ # @uppy/tus +## 2.4.1 + +Released: 2022-06-07 +Included in: Uppy v2.12.0 + +- @uppy/aws-s3-multipart,@uppy/aws-s3,@uppy/tus: queue socket token requests for remote files (Merlijn Vos / #3797) +- @uppy/tus: make onShouldRetry type optional (Merlijn Vos / #3800) + ## 2.4.0 Released: 2022-05-30 diff --git a/packages/@uppy/tus/package.json b/packages/@uppy/tus/package.json index c2ca14f962..ef5a8eb948 100644 --- a/packages/@uppy/tus/package.json +++ b/packages/@uppy/tus/package.json @@ -1,7 +1,7 @@ { "name": "@uppy/tus", "description": "Resumable uploads for Uppy using Tus.io", - "version": "2.4.0", + "version": "2.4.1", "license": "MIT", "main": "lib/index.js", "types": "types/index.d.ts", diff --git a/packages/@uppy/url/CHANGELOG.md b/packages/@uppy/url/CHANGELOG.md index e8d2aeda2d..2532c69320 100644 --- a/packages/@uppy/url/CHANGELOG.md +++ b/packages/@uppy/url/CHANGELOG.md @@ -1,5 +1,13 @@ # @uppy/url +## 2.2.0 + +Released: 2022-06-07 +Included in: Uppy v2.12.0 + +- @uppy/url: enable passing optional meta data to `addFile` (Brad Edelman / #3788) +- @uppy/url: fix `getFileNameFromUrl` (Brad Edelman / #3804) + ## 2.1.1 Released: 2022-05-30 diff --git a/packages/@uppy/url/package.json b/packages/@uppy/url/package.json index 58aa350aa3..dcae241884 100644 --- a/packages/@uppy/url/package.json +++ b/packages/@uppy/url/package.json @@ -1,7 +1,7 @@ { "name": "@uppy/url", "description": "The Url plugin lets users import files from the Internet. Paste any URL and it’ll be added!", - "version": "2.1.1", + "version": "2.2.0", "license": "MIT", "main": "lib/index.js", "style": "dist/style.min.css", diff --git a/packages/@uppy/xhr-upload/CHANGELOG.md b/packages/@uppy/xhr-upload/CHANGELOG.md index 0fe3127c60..db69dad3eb 100644 --- a/packages/@uppy/xhr-upload/CHANGELOG.md +++ b/packages/@uppy/xhr-upload/CHANGELOG.md @@ -1,5 +1,12 @@ # @uppy/xhr-upload +## 2.1.2 + +Released: 2022-06-07 +Included in: Uppy v2.12.0 + +- @uppy/xhr-upload: replace `ev.target.status` with `xhr.status` (Wes Sankey / #3782) + ## 2.1.1 Released: 2022-05-30 diff --git a/packages/@uppy/xhr-upload/package.json b/packages/@uppy/xhr-upload/package.json index dad63a1ae0..abb959404f 100644 --- a/packages/@uppy/xhr-upload/package.json +++ b/packages/@uppy/xhr-upload/package.json @@ -1,7 +1,7 @@ { "name": "@uppy/xhr-upload", "description": "Plain and simple classic HTML multipart form uploads with Uppy, as well as uploads using the HTTP PUT method.", - "version": "2.1.1", + "version": "2.1.2", "license": "MIT", "main": "lib/index.js", "types": "types/index.d.ts", diff --git a/packages/uppy/package.json b/packages/uppy/package.json index aa6d7a49df..a4a413139e 100644 --- a/packages/uppy/package.json +++ b/packages/uppy/package.json @@ -1,7 +1,7 @@ { "name": "uppy", "description": "Extensible JavaScript file upload widget with support for drag&drop, resumable uploads, previews, restrictions, file processing/encoding, remote providers like Instagram, Dropbox, Google Drive, S3 and more :dog:", - "version": "2.11.0", + "version": "2.12.0", "license": "MIT", "main": "index.js", "module": "index.mjs", diff --git a/website/src/docs/index.md b/website/src/docs/index.md index f618cb66b6..e37e51c734 100644 --- a/website/src/docs/index.md +++ b/website/src/docs/index.md @@ -19,12 +19,12 @@ Here’s the simplest example html page with Uppy (it uses a CDN bundle, while w Uppy - +
- + + ``` 2\. Add CSS to ``: ```html - + ``` 3\. Initialize at the bottom of the closing `` tag: @@ -181,5 +181,5 @@ export * from '@uppy/core' If you’re using Uppy from CDN, those polyfills are already included in the bundle, no need to include anything additionally: ```html - + ``` diff --git a/website/src/docs/locales.md b/website/src/docs/locales.md index c8c891d96c..d28f7e6de6 100644 --- a/website/src/docs/locales.md +++ b/website/src/docs/locales.md @@ -34,7 +34,7 @@ const uppy = new Uppy({ Add a ` + + - - + + ``` Please note that while you may be able to get 2.0 to work in IE11 this way, we do not officially support it anymore. diff --git a/website/src/docs/robodog-form.md b/website/src/docs/robodog-form.md index 3220fb6ffe..eb0537800c 100644 --- a/website/src/docs/robodog-form.md +++ b/website/src/docs/robodog-form.md @@ -150,7 +150,7 @@ Make sure to also include the Uppy css file in your `` tag in case you wan ```html - + ``` @@ -162,7 +162,7 @@ Notice how the form is submitted to the inexistant `/uploads` route once all tra Testing Robodog - +
@@ -172,7 +172,7 @@ Notice how the form is submitted to the inexistant `/uploads` route once all tra
- + + + ``` diff --git a/website/src/examples/i18n/app.html b/website/src/examples/i18n/app.html index e2a880bdcd..8b0ef99bf0 100644 --- a/website/src/examples/i18n/app.html +++ b/website/src/examples/i18n/app.html @@ -1,7 +1,7 @@ - +
@@ -12,8 +12,8 @@
Uploaded files:
- - + + +// const robodog = require('@uppy/robodog') const TRANSLOADIT_EXAMPLE_KEY = '35c1aed03f5011e982b6afe82599b6a0' diff --git a/website/src/examples/markdown-snippets/app.html b/website/src/examples/markdown-snippets/app.html index 280de1aadb..7dd2a838ae 100644 --- a/website/src/examples/markdown-snippets/app.html +++ b/website/src/examples/markdown-snippets/app.html @@ -1,6 +1,6 @@ + -->

Create a new snippet

diff --git a/website/themes/uppy/layout/index.ejs b/website/themes/uppy/layout/index.ejs index d0806a99a8..dfaa3cd0cc 100644 --- a/website/themes/uppy/layout/index.ejs +++ b/website/themes/uppy/layout/index.ejs @@ -187,9 +187,9 @@

© <%- date(Date.now(), 'YYYY') %> Transloadit

- - - + + + `) or bundle it with your webapp. +this from a CDN (``) or bundle it with your webapp. Note that the recommended way to use Uppy is to install it with yarn/npm and use a bundler like Webpack so that you can create a smaller custom build with only the diff --git a/CHANGELOG.md b/CHANGELOG.md index 44da643bf8..dd3f9a203f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,19 @@ Please add your entries in this format: In the current stage we aim to release a new version at least every month. +## 2.12.1 + +Released: 2022-06-09 + +| Package | Version | Package | Version | +| ----------------- | ------- | ----------------- | ------- | +| @uppy/transloadit | 2.3.1 | uppy | 2.12.1 | +| @uppy/robodog | 2.8.1 | | | + +- @uppy/transloadit: fix `COMPANION_PATTERN` export (Antoine du Hamel / #3820) +- meta: fix URL generation in the release script (Antoine du Hamel) + + ## 2.12.0 Released: 2022-06-07 diff --git a/README.md b/README.md index 56b7cad962..a5c1f564c0 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ const uppy = new Uppy({ autoProceed: false }) $ npm install @uppy/core @uppy/dashboard @uppy/tus ``` -Add CSS [uppy.min.css](https://releases.transloadit.com/uppy/v2.12.0/uppy.min.css), either to your HTML page’s `` or include in JS, if your bundler of choice supports it. +Add CSS [uppy.min.css](https://releases.transloadit.com/uppy/v2.12.1/uppy.min.css), either to your HTML page’s `` or include in JS, if your bundler of choice supports it. Alternatively, you can also use a pre-built bundle from Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global `window.Uppy` object. @@ -75,10 +75,10 @@ Alternatively, you can also use a pre-built bundle from Transloadit’s CDN: Edg ```html - + - +
@@ -184,7 +184,7 @@ If you’re using Uppy from CDN, those polyfills are already included in the leg bundle, so no need to include anything additionally: ```html - + ``` ## FAQ @@ -250,9 +250,9 @@ Use Uppy in your project? [Let us know](https://github.com/transloadit/uppy/issu :---: |:---: |:---: |:---: |:---: |:---: | [AJvanLoon](https://github.com/AJvanLoon) |[nqst](https://github.com/nqst) |[Murderlon](https://github.com/Murderlon) |[mifi](https://github.com/mifi) |[lakesare](https://github.com/lakesare) |[kiloreux](https://github.com/kiloreux) | -[sadovnychyi](https://github.com/sadovnychyi) |[samuelayo](https://github.com/samuelayo) |[richardwillars](https://github.com/richardwillars) |[ajkachnic](https://github.com/ajkachnic) |[dependabot[bot]](https://github.com/apps/dependabot) |[github-actions[bot]](https://github.com/apps/github-actions) | +[sadovnychyi](https://github.com/sadovnychyi) |[samuelayo](https://github.com/samuelayo) |[richardwillars](https://github.com/richardwillars) |[ajkachnic](https://github.com/ajkachnic) |[github-actions[bot]](https://github.com/apps/github-actions) |[dependabot[bot]](https://github.com/apps/dependabot) | :---: |:---: |:---: |:---: |:---: |:---: | -[sadovnychyi](https://github.com/sadovnychyi) |[samuelayo](https://github.com/samuelayo) |[richardwillars](https://github.com/richardwillars) |[ajkachnic](https://github.com/ajkachnic) |[dependabot\[bot\]](https://github.com/apps/dependabot) |[github-actions\[bot\]](https://github.com/apps/github-actions) | +[sadovnychyi](https://github.com/sadovnychyi) |[samuelayo](https://github.com/samuelayo) |[richardwillars](https://github.com/richardwillars) |[ajkachnic](https://github.com/ajkachnic) |[github-actions\[bot\]](https://github.com/apps/github-actions) |[dependabot\[bot\]](https://github.com/apps/dependabot) | [zcallan](https://github.com/zcallan) |[tim-kos](https://github.com/tim-kos) |[janko](https://github.com/janko) |[wilkoklak](https://github.com/wilkoklak) |[oliverpool](https://github.com/oliverpool) |[Botz](https://github.com/Botz) | :---: |:---: |:---: |:---: |:---: |:---: | diff --git a/examples/cdn-example/index.html b/examples/cdn-example/index.html index e01ef6a0fe..688ab8e671 100644 --- a/examples/cdn-example/index.html +++ b/examples/cdn-example/index.html @@ -4,11 +4,11 @@ - + - + + + + ``` Then, a global `Robodog` variable will be available. For usage instructions, please see the [main Robodog documentation](https://uppy.io/docs/robodog). diff --git a/packages/@uppy/robodog/package.json b/packages/@uppy/robodog/package.json index b72d3905ad..9c8296523f 100644 --- a/packages/@uppy/robodog/package.json +++ b/packages/@uppy/robodog/package.json @@ -1,7 +1,7 @@ { "name": "@uppy/robodog", "description": "Transloadit SDK for browsers based on Uppy", - "version": "2.8.0", + "version": "2.8.1", "license": "MIT", "main": "lib/index.js", "jsnext:main": "src/index.js", diff --git a/packages/@uppy/transloadit/CHANGELOG.md b/packages/@uppy/transloadit/CHANGELOG.md index c984275a3b..b26ee94046 100644 --- a/packages/@uppy/transloadit/CHANGELOG.md +++ b/packages/@uppy/transloadit/CHANGELOG.md @@ -1,5 +1,12 @@ # @uppy/transloadit +## 2.3.1 + +Released: 2022-06-09 +Included in: Uppy v2.12.1 + +- @uppy/transloadit: fix `COMPANION_PATTERN` export (Antoine du Hamel / #3820) + ## 2.3.0 Released: 2022-05-30 diff --git a/packages/@uppy/transloadit/package.json b/packages/@uppy/transloadit/package.json index e710cb160a..acea38ff1d 100644 --- a/packages/@uppy/transloadit/package.json +++ b/packages/@uppy/transloadit/package.json @@ -1,7 +1,7 @@ { "name": "@uppy/transloadit", "description": "The Transloadit plugin can be used to upload files to Transloadit for all kinds of processing, such as transcoding video, resizing images, zipping/unzipping, and more", - "version": "2.3.0", + "version": "2.3.1", "license": "MIT", "main": "lib/index.js", "types": "types/index.d.ts", diff --git a/packages/uppy/package.json b/packages/uppy/package.json index a4a413139e..cab3db84bf 100644 --- a/packages/uppy/package.json +++ b/packages/uppy/package.json @@ -1,7 +1,7 @@ { "name": "uppy", "description": "Extensible JavaScript file upload widget with support for drag&drop, resumable uploads, previews, restrictions, file processing/encoding, remote providers like Instagram, Dropbox, Google Drive, S3 and more :dog:", - "version": "2.12.0", + "version": "2.12.1", "license": "MIT", "main": "index.js", "module": "index.mjs", diff --git a/website/src/docs/index.md b/website/src/docs/index.md index e37e51c734..18b56459b5 100644 --- a/website/src/docs/index.md +++ b/website/src/docs/index.md @@ -19,12 +19,12 @@ Here’s the simplest example html page with Uppy (it uses a CDN bundle, while w Uppy - +
- + + ``` 2\. Add CSS to ``: ```html - + ``` 3\. Initialize at the bottom of the closing `` tag: @@ -181,5 +181,5 @@ export * from '@uppy/core' If you’re using Uppy from CDN, those polyfills are already included in the bundle, no need to include anything additionally: ```html - + ``` diff --git a/website/src/docs/locales.md b/website/src/docs/locales.md index d28f7e6de6..93786c997e 100644 --- a/website/src/docs/locales.md +++ b/website/src/docs/locales.md @@ -34,7 +34,7 @@ const uppy = new Uppy({ Add a ` + + - - + + ``` Please note that while you may be able to get 2.0 to work in IE11 this way, we do not officially support it anymore. diff --git a/website/src/docs/robodog-form.md b/website/src/docs/robodog-form.md index eb0537800c..81e83c9c88 100644 --- a/website/src/docs/robodog-form.md +++ b/website/src/docs/robodog-form.md @@ -150,7 +150,7 @@ Make sure to also include the Uppy css file in your `` tag in case you wan ```html - + ``` @@ -162,7 +162,7 @@ Notice how the form is submitted to the inexistant `/uploads` route once all tra Testing Robodog - + @@ -172,7 +172,7 @@ Notice how the form is submitted to the inexistant `/uploads` route once all tra
- + + + ``` diff --git a/website/src/examples/i18n/app.html b/website/src/examples/i18n/app.html index 8b0ef99bf0..33299ce3f0 100644 --- a/website/src/examples/i18n/app.html +++ b/website/src/examples/i18n/app.html @@ -1,7 +1,7 @@ - +
@@ -12,8 +12,8 @@
Uploaded files:
- - + + +// const robodog = require('@uppy/robodog') const TRANSLOADIT_EXAMPLE_KEY = '35c1aed03f5011e982b6afe82599b6a0' diff --git a/website/src/examples/markdown-snippets/app.html b/website/src/examples/markdown-snippets/app.html index 7dd2a838ae..5235384a82 100644 --- a/website/src/examples/markdown-snippets/app.html +++ b/website/src/examples/markdown-snippets/app.html @@ -1,6 +1,6 @@ + -->

Create a new snippet

diff --git a/website/themes/uppy/layout/index.ejs b/website/themes/uppy/layout/index.ejs index dfaa3cd0cc..366016ee23 100644 --- a/website/themes/uppy/layout/index.ejs +++ b/website/themes/uppy/layout/index.ejs @@ -187,9 +187,9 @@

© <%- date(Date.now(), 'YYYY') %> Transloadit

- - - + + + `) or bundle it with your webapp. +this from a CDN (``) or bundle it with your webapp. Note that the recommended way to use Uppy is to install it with yarn/npm and use a bundler like Webpack so that you can create a smaller custom build with only the diff --git a/CHANGELOG.md b/CHANGELOG.md index e053ba4812..4aa30d8253 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,40 @@ Please add your entries in this format: In the current stage we aim to release a new version at least every month. +## 3.0.0-beta.1 + +Released: 2022-06-09 + +| Package | Version | Package | Version | +| ------------------------- | ------------ | ------------------------- | ------------ | +| uppy | 3.0.0-beta.1 | @uppy/google-drive | 3.0.0-beta.1 | +| @uppy/audio | 1.0.0-beta.1 | @uppy/informer | 3.0.0-beta.1 | +| @uppy/box | 2.0.0-beta.1 | @uppy/instagram | 3.0.0-beta.1 | +| @uppy/compressor | 1.0.0-beta.1 | @uppy/locales | 3.0.0-beta.1 | +| @uppy/drop-target | 2.0.0-beta.1 | @uppy/onedrive | 3.0.0-beta.1 | +| @uppy/image-editor | 2.0.0-beta.1 | @uppy/progress-bar | 3.0.0-beta.1 | +| @uppy/remote-sources | 1.0.0-beta.1 | @uppy/provider-views | 3.0.0-beta.1 | +| @uppy/svelte | 2.0.0-beta.1 | @uppy/react | 3.0.0-beta.1 | +| @uppy/vue | 1.0.0-beta.1 | @uppy/redux-dev-tools | 3.0.0-beta.1 | +| @uppy/zoom | 2.0.0-beta.1 | @uppy/robodog | 3.0.0-beta.1 | +| @uppy/aws-s3 | 3.0.0-beta.1 | @uppy/screen-capture | 3.0.0-beta.1 | +| @uppy/aws-s3-multipart | 3.0.0-beta.1 | @uppy/status-bar | 3.0.0-beta.1 | +| @uppy/companion-client | 3.0.0-beta.1 | @uppy/store-default | 3.0.0-beta.1 | +| @uppy/core | 3.0.0-beta.1 | @uppy/store-redux | 3.0.0-beta.1 | +| @uppy/dashboard | 3.0.0-beta.1 | @uppy/thumbnail-generator | 3.0.0-beta.1 | +| @uppy/drag-drop | 3.0.0-beta.1 | @uppy/transloadit | 3.0.0-beta.1 | +| @uppy/dropbox | 3.0.0-beta.1 | @uppy/tus | 3.0.0-beta.1 | +| @uppy/facebook | 3.0.0-beta.1 | @uppy/unsplash | 3.0.0-beta.1 | +| @uppy/file-input | 3.0.0-beta.1 | @uppy/url | 3.0.0-beta.1 | +| @uppy/form | 3.0.0-beta.1 | @uppy/webcam | 3.0.0-beta.1 | +| @uppy/golden-retriever | 3.0.0-beta.1 | @uppy/xhr-upload | 3.0.0-beta.1 | + +- meta: improve release process for beta branch (Antoine du Hamel / #3809) +- uppy: refactor to ESM (Antoine du Hamel / #3807) +- @uppy/core,@uppy/dashboard: fix types for some events (Antoine du Hamel / #3812) +- example: update Vue2 example (Antoine du Hamel / #3802) + + ## 3.0.0-beta Released: 2022-05-30 diff --git a/README.md b/README.md index 1ffccec54e..fda9163953 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ const uppy = new Uppy({ autoProceed: false }) $ npm install @uppy/core @uppy/dashboard @uppy/tus ``` -Add CSS [uppy.min.css](https://releases.transloadit.com/uppy/v3.0.0-beta/uppy.min.css), either to your HTML page’s `` or include in JS, if your bundler of choice supports it. +Add CSS [uppy.min.css](https://releases.transloadit.com/uppy/v3.0.0-beta.1/uppy.min.css), either to your HTML page’s `` or include in JS, if your bundler of choice supports it. Alternatively, you can also use a pre-built bundle from Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global `window.Uppy` object. @@ -75,10 +75,10 @@ Alternatively, you can also use a pre-built bundle from Transloadit’s CDN: Edg ```html - + - +
@@ -184,7 +184,7 @@ If you’re using Uppy from CDN, those polyfills are already included in the leg bundle, so no need to include anything additionally: ```html - + ``` ## FAQ diff --git a/examples/cdn-example/index.html b/examples/cdn-example/index.html index dd1d71bc22..69d497efb5 100644 --- a/examples/cdn-example/index.html +++ b/examples/cdn-example/index.html @@ -4,11 +4,11 @@ - + - + + + + ``` Then, a global `Robodog` variable will be available. For usage instructions, please see the [main Robodog documentation](https://uppy.io/docs/robodog). diff --git a/packages/@uppy/robodog/package.json b/packages/@uppy/robodog/package.json index f0f33c7e63..025adcc928 100644 --- a/packages/@uppy/robodog/package.json +++ b/packages/@uppy/robodog/package.json @@ -1,7 +1,7 @@ { "name": "@uppy/robodog", "description": "Transloadit SDK for browsers based on Uppy", - "version": "3.0.0-beta", + "version": "3.0.0-beta.1", "license": "MIT", "main": "lib/index.js", "jsnext:main": "src/index.js", diff --git a/packages/@uppy/screen-capture/package.json b/packages/@uppy/screen-capture/package.json index 742703790b..117f6e974c 100644 --- a/packages/@uppy/screen-capture/package.json +++ b/packages/@uppy/screen-capture/package.json @@ -1,7 +1,7 @@ { "name": "@uppy/screen-capture", "description": "Uppy plugin that captures video from display or application.", - "version": "3.0.0-beta", + "version": "3.0.0-beta.1", "license": "MIT", "main": "lib/index.js", "style": "dist/style.min.css", diff --git a/packages/@uppy/status-bar/package.json b/packages/@uppy/status-bar/package.json index c2c9d0b4c1..21ebc200cc 100644 --- a/packages/@uppy/status-bar/package.json +++ b/packages/@uppy/status-bar/package.json @@ -1,7 +1,7 @@ { "name": "@uppy/status-bar", "description": "A progress bar for Uppy, with many bells and whistles.", - "version": "3.0.0-beta", + "version": "3.0.0-beta.1", "license": "MIT", "main": "lib/index.js", "style": "dist/style.min.css", diff --git a/packages/@uppy/store-default/package.json b/packages/@uppy/store-default/package.json index 77b7565ecc..fd4b78a841 100644 --- a/packages/@uppy/store-default/package.json +++ b/packages/@uppy/store-default/package.json @@ -1,7 +1,7 @@ { "name": "@uppy/store-default", "description": "The default simple object-based store for Uppy.", - "version": "3.0.0-beta", + "version": "3.0.0-beta.1", "license": "MIT", "main": "lib/index.js", "types": "types/index.d.ts", diff --git a/packages/@uppy/store-redux/package.json b/packages/@uppy/store-redux/package.json index a60d394537..d31adc6086 100644 --- a/packages/@uppy/store-redux/package.json +++ b/packages/@uppy/store-redux/package.json @@ -1,7 +1,7 @@ { "name": "@uppy/store-redux", "description": "Make Uppy use your existing Redux store.", - "version": "3.0.0-beta", + "version": "3.0.0-beta.1", "license": "MIT", "main": "lib/index.js", "types": "types/index.d.ts", diff --git a/packages/@uppy/svelte/package.json b/packages/@uppy/svelte/package.json index 31dd624979..7d9d110684 100644 --- a/packages/@uppy/svelte/package.json +++ b/packages/@uppy/svelte/package.json @@ -3,7 +3,7 @@ "svelte": "src/index.js", "module": "dist/index.mjs", "main": "dist/index.js", - "version": "3.0.0-beta", + "version": "2.0.0-beta.1", "scripts": { "build": "rollup -c", "prepublishOnly": "yarn run build", diff --git a/packages/@uppy/thumbnail-generator/package.json b/packages/@uppy/thumbnail-generator/package.json index 0a46318080..bfad4041f7 100644 --- a/packages/@uppy/thumbnail-generator/package.json +++ b/packages/@uppy/thumbnail-generator/package.json @@ -1,7 +1,7 @@ { "name": "@uppy/thumbnail-generator", "description": "Uppy plugin that generates small previews of images to show on your upload UI.", - "version": "3.0.0-beta", + "version": "3.0.0-beta.1", "license": "MIT", "main": "lib/index.js", "types": "types/index.d.ts", diff --git a/packages/@uppy/transloadit/package.json b/packages/@uppy/transloadit/package.json index 1f099d3aa2..43385a5bd6 100644 --- a/packages/@uppy/transloadit/package.json +++ b/packages/@uppy/transloadit/package.json @@ -1,7 +1,7 @@ { "name": "@uppy/transloadit", "description": "The Transloadit plugin can be used to upload files to Transloadit for all kinds of processing, such as transcoding video, resizing images, zipping/unzipping, and more", - "version": "3.0.0-beta", + "version": "3.0.0-beta.1", "license": "MIT", "main": "lib/index.js", "types": "types/index.d.ts", diff --git a/packages/@uppy/tus/package.json b/packages/@uppy/tus/package.json index d490cc32c2..8e50bf4da9 100644 --- a/packages/@uppy/tus/package.json +++ b/packages/@uppy/tus/package.json @@ -1,7 +1,7 @@ { "name": "@uppy/tus", "description": "Resumable uploads for Uppy using Tus.io", - "version": "3.0.0-beta", + "version": "3.0.0-beta.1", "license": "MIT", "main": "lib/index.js", "types": "types/index.d.ts", diff --git a/packages/@uppy/unsplash/package.json b/packages/@uppy/unsplash/package.json index 7dbaafc0a8..8579843d11 100644 --- a/packages/@uppy/unsplash/package.json +++ b/packages/@uppy/unsplash/package.json @@ -1,7 +1,7 @@ { "name": "@uppy/unsplash", "description": "Import files from Unsplash, the free stock photography resource, into Uppy", - "version": "3.0.0-beta", + "version": "3.0.0-beta.1", "license": "MIT", "main": "lib/index.js", "types": "types/index.d.ts", diff --git a/packages/@uppy/url/package.json b/packages/@uppy/url/package.json index a735198688..1f9e64c2b7 100644 --- a/packages/@uppy/url/package.json +++ b/packages/@uppy/url/package.json @@ -1,7 +1,7 @@ { "name": "@uppy/url", "description": "The Url plugin lets users import files from the Internet. Paste any URL and it’ll be added!", - "version": "3.0.0-beta", + "version": "3.0.0-beta.1", "license": "MIT", "main": "lib/index.js", "style": "dist/style.min.css", diff --git a/packages/@uppy/vue/package.json b/packages/@uppy/vue/package.json index 1befc3e7e1..0273ea1661 100644 --- a/packages/@uppy/vue/package.json +++ b/packages/@uppy/vue/package.json @@ -1,6 +1,6 @@ { "name": "@uppy/vue", - "version": "3.0.0-beta", + "version": "1.0.0-beta.1", "license": "MIT", "main": "lib/index.js", "types": "types/index.d.ts", diff --git a/packages/@uppy/webcam/package.json b/packages/@uppy/webcam/package.json index 77bfeb0d8c..fe9daf2778 100644 --- a/packages/@uppy/webcam/package.json +++ b/packages/@uppy/webcam/package.json @@ -1,7 +1,7 @@ { "name": "@uppy/webcam", "description": "Uppy plugin that takes photos or records videos using the device's camera.", - "version": "3.0.0-beta", + "version": "3.0.0-beta.1", "license": "MIT", "main": "lib/index.js", "style": "dist/style.min.css", diff --git a/packages/@uppy/xhr-upload/package.json b/packages/@uppy/xhr-upload/package.json index 9b86b3a193..66157c2d45 100644 --- a/packages/@uppy/xhr-upload/package.json +++ b/packages/@uppy/xhr-upload/package.json @@ -1,7 +1,7 @@ { "name": "@uppy/xhr-upload", "description": "Plain and simple classic HTML multipart form uploads with Uppy, as well as uploads using the HTTP PUT method.", - "version": "3.0.0-beta", + "version": "3.0.0-beta.1", "license": "MIT", "main": "lib/index.js", "types": "types/index.d.ts", diff --git a/packages/@uppy/zoom/package.json b/packages/@uppy/zoom/package.json index 5dbef188b9..a3aa16fc38 100644 --- a/packages/@uppy/zoom/package.json +++ b/packages/@uppy/zoom/package.json @@ -1,7 +1,7 @@ { "name": "@uppy/zoom", "description": "Import files from zoom, into Uppy.", - "version": "3.0.0-beta", + "version": "2.0.0-beta.1", "license": "MIT", "main": "lib/index.js", "types": "types/index.d.ts", diff --git a/packages/uppy/CHANGELOG.md b/packages/uppy/CHANGELOG.md new file mode 100644 index 0000000000..84f6bc71c6 --- /dev/null +++ b/packages/uppy/CHANGELOG.md @@ -0,0 +1,8 @@ +# uppy + +## 3.0.0-beta.1 + +Released: 2022-06-09 +Included in: Uppy v3.0.0-beta.1 + +- uppy: refactor to ESM (Antoine du Hamel / #3807) diff --git a/packages/uppy/package.json b/packages/uppy/package.json index d817481585..8e24b826e2 100644 --- a/packages/uppy/package.json +++ b/packages/uppy/package.json @@ -1,7 +1,7 @@ { "name": "uppy", "description": "Extensible JavaScript file upload widget with support for drag&drop, resumable uploads, previews, restrictions, file processing/encoding, remote providers like Instagram, Dropbox, Google Drive, S3 and more :dog:", - "version": "3.0.0-beta", + "version": "3.0.0-beta.1", "license": "MIT", "main": "index.mjs", "module": "index.mjs", diff --git a/website/src/docs/index.md b/website/src/docs/index.md index d964be5e09..21021d7c62 100644 --- a/website/src/docs/index.md +++ b/website/src/docs/index.md @@ -19,12 +19,12 @@ Here’s the simplest example html page with Uppy (it uses a CDN bundle, while w Uppy - +
- + + ``` 2\. Add CSS to ``: ```html - + ``` 3\. Initialize at the bottom of the closing `` tag: @@ -181,5 +181,5 @@ export * from '@uppy/core' If you’re using Uppy from CDN, those polyfills are already included in the bundle, no need to include anything additionally: ```html - + ``` diff --git a/website/src/docs/locales.md b/website/src/docs/locales.md index 0e51331bf8..ea429c8237 100644 --- a/website/src/docs/locales.md +++ b/website/src/docs/locales.md @@ -34,8 +34,8 @@ const uppy = new Uppy({ Add a ` - + + + - - + + ``` Please note that while you may be able to get 2.0 to work in IE11 this way, we do not officially support it anymore. diff --git a/website/src/docs/robodog-form.md b/website/src/docs/robodog-form.md index 422fac8e36..8fdaa9e362 100644 --- a/website/src/docs/robodog-form.md +++ b/website/src/docs/robodog-form.md @@ -150,7 +150,7 @@ Make sure to also include the Uppy css file in your `` tag in case you wan ```html - + ``` @@ -162,7 +162,7 @@ Notice how the form is submitted to the inexistant `/uploads` route once all tra Testing Robodog - + @@ -172,7 +172,7 @@ Notice how the form is submitted to the inexistant `/uploads` route once all tra
- + + + ``` diff --git a/website/src/examples/dashboard/app.es6 b/website/src/examples/dashboard/app.es6 index 1f8d6b4aca..b2efd04f29 100644 --- a/website/src/examples/dashboard/app.es6 +++ b/website/src/examples/dashboard/app.es6 @@ -242,7 +242,7 @@ function loadLocaleFromCDN (localeName) { const head = document.getElementsByTagName('head')[0] const js = document.createElement('script') js.type = 'text/javascript' - js.src = `https://releases.transloadit.com/uppy/locales/v3.0.0-beta/${localeName}.min.js` + js.src = `https://releases.transloadit.com/uppy/locales/v3.0.0-beta.1/${localeName}.min.js` head.appendChild(js) } diff --git a/website/src/examples/i18n/app.html b/website/src/examples/i18n/app.html index d102e1200f..7c52e50b66 100644 --- a/website/src/examples/i18n/app.html +++ b/website/src/examples/i18n/app.html @@ -1,7 +1,7 @@ - +
@@ -12,9 +12,9 @@
Uploaded files:
- - - + + + +// const robodog = require('@uppy/robodog') const TRANSLOADIT_EXAMPLE_KEY = '35c1aed03f5011e982b6afe82599b6a0' diff --git a/website/src/examples/markdown-snippets/app.html b/website/src/examples/markdown-snippets/app.html index 0903529379..073e90e8d2 100644 --- a/website/src/examples/markdown-snippets/app.html +++ b/website/src/examples/markdown-snippets/app.html @@ -1,6 +1,6 @@ + -->

Create a new snippet

diff --git a/website/themes/uppy/layout/index.ejs b/website/themes/uppy/layout/index.ejs index 2562bff240..b582202f05 100644 --- a/website/themes/uppy/layout/index.ejs +++ b/website/themes/uppy/layout/index.ejs @@ -187,9 +187,9 @@

© <%- date(Date.now(), 'YYYY') %> Transloadit

- - - + + +