diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000000..ef71f62e07 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,4 @@ +**/node_modules +.git +website +assets diff --git a/.eslintrc.js b/.eslintrc.js index 6ec6360d8f..e022b35ccd 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -118,7 +118,7 @@ module.exports = { // jsdoc 'jsdoc/check-alignment': 'error', - 'jsdoc/check-examples': 'error', + 'jsdoc/check-examples': 'off', // cannot yet be supported for ESLint 8, see https://github.com/eslint/eslint/issues/14745 'jsdoc/check-param-names': ['warn'], 'jsdoc/check-syntax': ['warn'], 'jsdoc/check-tag-names': 'error', @@ -145,6 +145,17 @@ module.exports = { }, overrides: [ + { + files: [ + '*.mjs', + 'private/dev/*.js', + 'private/release/*.js', + 'private/remark-lint-uppy/*.js', + ], + parserOptions: { + sourceType: 'module', + }, + }, { files: ['./packages/@uppy/companion/**/*.js'], rules: { @@ -152,6 +163,15 @@ module.exports = { 'no-underscore-dangle': 'off', }, }, + { + files: [ + 'website/src/examples/*/*.es6', + ], + rules: { + 'import/no-extraneous-dependencies': 'off', + 'no-console': 'off', + }, + }, { files: [ '*.test.js', @@ -166,6 +186,7 @@ module.exports = { { files: [ 'bin/**.js', + 'bin/**.mjs', 'examples/**/*.js', 'packages/@uppy/companion/test/**/*.js', 'test/**/*.js', @@ -176,6 +197,7 @@ module.exports = { '.eslintrc.js', 'website/*.js', 'website/**/*.js', + 'private/**/*.js', ], rules: { 'no-console': 'off', @@ -192,7 +214,7 @@ module.exports = { ], rules: { camelcase: ['off'], - 'quote-props': ['off'], + 'quote-props': ['error', 'as-needed', { 'numbers': true }], }, }, @@ -206,11 +228,14 @@ module.exports = { }, { - files: ['test/endtoend/*/*.js'], + files: ['test/endtoend/*/*.mjs', 'test/endtoend/*/*.ts'], rules: { // we mostly import @uppy stuff in these files. 'import/no-extraneous-dependencies': ['off'], }, + }, + { + files: ['test/endtoend/*/*.js'], env: { mocha: true, }, diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 9a0dd0032d..f8ebd893b8 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -143,26 +143,17 @@ yarn install yarn start ``` -Releases are managed by [Lerna](https://github.com/lerna/lerna). We do some cleanup and compile work around releases too. Use the npm release script: - -```bash -yarn run release -``` - -If you have two-factor authentication enabled on your account, Lerna will ask for a one-time password. You may stumble upon a known issue with the CLI where the OTP prompt may be obscured by a publishing progress bar. If Lerna appears to freeze as it starts publishing, chances are it’s waiting for the password. Try typing in your OTP and hitting enter. - -Other things to keep in mind during release: - -* When adding a new package, add the following key to its package.json: - ```json - "publishConfig": { "access": "public" } - ``` - Else, the release script will try and fail to publish a _private_ package, because the `@uppy` scope on npm does not support that. - -After a release, the demos on transloadit.com should also be updated. After updating, check that some things work locally: - -* the demos in the demo section work (try one that uses an import robot, and one that you need to upload to) -* the demos on the homepage work and can import from Google Drive, Instagram, Dropbox, etc. +Releases are managed by GitHub Actions, here’s an overview of the process to release a new Uppy version: + +* Run `yarn release` on your local machine. +* Follow the instructions and select what packages to release. +* Before committing, check if the generated files look good. +* Push to the Transloadit repository using the command given by the tool. Do not open a PR yourself, the GitHub Actions will create one and assign you to it. +* Wait for all the GitHub Actions checks to pass. If one fails, try to figure out why. Do not go ahead without consulting the rest of the team. +* Review the PR thoroughly, and if everything looks good to you, approve the PR. Do not merge it manually! +* After the PR is automatically merged, the demos on transloadit.com should also be updated. Check that some things work locally: + * the demos in the demo section work (try one that uses an import robot, and one that you need to upload to) + * the demos on the homepage work and can import from Google Drive, Instagram, Dropbox, etc. If you don’t have access to the transloadit.com source code ping @arturi or @goto-bus-stop and we’ll pick it up. :sparkles: diff --git a/.github/workflows/cdn.yml b/.github/workflows/cdn.yml deleted file mode 100644 index eaf579e50c..0000000000 --- a/.github/workflows/cdn.yml +++ /dev/null @@ -1,42 +0,0 @@ -name: CDN -on: - push: - branches: main - -jobs: - release: - if: ${{startsWith(github.event.head_commit.message, 'Release')}} - name: Publish releases - runs-on: ubuntu-latest - steps: - - name: Checkout sources - uses: actions/checkout@v2 - - name: Cache npm dependencies - id: cache-npm-libraries - uses: actions/cache@v2 - with: - path: .yarn/cache/* - key: ${{ runner.os }} - - name: Install Node.js - uses: actions/setup-node@v2 - with: - node-version: 16.x - - name: Install dependencies - run: corepack yarn install - - name: Build bundles - run: corepack yarn run build - - name: Upload `uppy` to CDN - run: corepack yarn run uploadcdn uppy - env: - EDGLY_KEY: ${{secrets.EDGLY_KEY}} - EDGLY_SECRET: ${{secrets.EDGLY_SECRET}} - - name: Upload `@uppy/robodog` to CDN - run: corepack yarn run uploadcdn @uppy/robodog - env: - EDGLY_KEY: ${{secrets.EDGLY_KEY}} - EDGLY_SECRET: ${{secrets.EDGLY_SECRET}} - - name: Upload `@uppy/locales` to CDN - run: corepack yarn run uploadcdn @uppy/locales - env: - EDGLY_KEY: ${{secrets.EDGLY_KEY}} - EDGLY_SECRET: ${{secrets.EDGLY_SECRET}} diff --git a/.github/workflows/companion-deploy.yml b/.github/workflows/companion-deploy.yml index 5dfdc0e0da..9d08465c34 100644 --- a/.github/workflows/companion-deploy.yml +++ b/.github/workflows/companion-deploy.yml @@ -32,8 +32,8 @@ jobs: uses: docker/build-push-action@v2 with: push: true - context: packages/@uppy/companion - file: packages/@uppy/companion/Dockerfile + context: . + file: Dockerfile tags: ${{ steps.docker_meta.outputs.tags }} labels: ${{ steps.docker_meta.outputs.labels }} diff --git a/.github/workflows/manual-cdn.yml b/.github/workflows/manual-cdn.yml new file mode 100644 index 0000000000..eb3c03cae9 --- /dev/null +++ b/.github/workflows/manual-cdn.yml @@ -0,0 +1,34 @@ +name: Manually triggered CDN upload +on: + workflow_dispatch: + inputs: + name: + description: "Package to upload" + required: true + default: "uppy" + +jobs: + upload: + runs-on: ubuntu-latest + steps: + - name: Checkout sources + uses: actions/checkout@v2 + - name: Cache npm dependencies + id: cache-npm-libraries + uses: actions/cache@v2 + with: + path: .yarn/cache/* + key: ${{ runner.os }} + - name: Install Node.js + uses: actions/setup-node@v2 + with: + node-version: 16.x + - name: Install dependencies + run: corepack yarn install + - name: Build before publishing + run: corepack yarn run build + - name: Upload `${{ github.event.inputs.name }}` to CDN + run: corepack yarn run uploadcdn ${{ github.event.inputs.name }} + env: + EDGLY_KEY: ${{secrets.EDGLY_KEY}} + EDGLY_SECRET: ${{secrets.EDGLY_SECRET}} diff --git a/.github/workflows/release-candidate.yml b/.github/workflows/release-candidate.yml new file mode 100644 index 0000000000..2b4a0c03c3 --- /dev/null +++ b/.github/workflows/release-candidate.yml @@ -0,0 +1,73 @@ +name: Release candidate +on: + push: + branches: release + +jobs: + prepare-release: + name: Prepare release candidate Pull Request + runs-on: ubuntu-latest + steps: + - name: Checkout sources + uses: actions/checkout@v2 + with: + branch: release + - name: Rebase + run: | + git fetch origin HEAD --depth=1 + git config --global user.email "actions@github.com" + git config --global user.name "GitHub Actions" + git rebase FETCH_HEAD + - name: Cache npm dependencies + id: cache-npm-libraries + uses: actions/cache@v2 + with: + path: .yarn/cache/* + key: ${{ runner.os }} + - name: Install Node.js + uses: actions/setup-node@v2 + with: + node-version: 16.x + - name: Install dependencies + run: corepack yarn install + - name: Bump candidate packages version + run: corepack yarn version apply --all --json | jq -s > releases.json + - name: Prepare changelog + run: corepack yarn workspace @uppy-dev/release update-changelogs releases.json | xargs git add + - name: Update contributors table + run: corepack yarn contributors:save && git add README.md + - name: Update CDN URLs + run: corepack yarn workspace @uppy-dev/release update-version-URLs | xargs git add + - name: Stage changes and remove temp files + run: | + git rm -rf .yarn/versions + git rm CHANGELOG.next.md + jq -r 'map(.cwd) | join("\n")' < releases.json | awk '{ print "git add " $0 "/package.json" }' | sh + - name: Commit + run: | + echo "Release: uppy@$(jq -r 'map(select(.ident == "uppy"))[0].newVersion' < releases.json)" > commitMessage + echo >> commitMessage + echo "This is a release candidate for the following packages:" >> commitMessage + echo >> commitMessage + jq -r 'map("- `"+.ident+"`: "+.oldVersion+" -> "+.newVersion) | join("\n") ' < releases.json >> commitMessage + git commit -n --amend --file commitMessage + - name: Open Pull Request + id: pr_opening + run: | + git push origin HEAD:release-candidate + gh api repos/${{ github.repository }}/pulls \ + -F base="$(gh api /repos/${{ github.repository }} | jq -r .default_branch)" \ + -F head="release-candidate" \ + -F title="$(head -1 commitMessage)" \ + -F body="$(git --no-pager diff HEAD^ -- CHANGELOG.md | awk '{ if( substr($0,0,1) == "+" && $1 != "+##" && $1 != "+Released:" && $1 != "+++" ) { print substr($0,2) } }')" \ + --jq '.number | tostring | "##[set-output name=pr_number;]"+.' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Assign to the releaser + run: echo '{"assignees":[${{ toJSON(github.actor) }}]}' | gh api repos/${{ github.repository }}/issues/${{ steps.pr_opening.outputs.pr_number }}/assignees --input - + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Enable Release workflow + run: gh workflow enable Release --repo ${{ github.repository }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000000..a830f40aae --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,92 @@ +name: Release +on: + pull_request_review: + types: [submitted] + +jobs: + release: + name: Publish releases + if: ${{ github.event.review.state == 'approved' && github.event.sender.login == github.event.pull_request.assignee.login && github.event.pull_request.head.ref == 'release-candidate' }} + runs-on: ubuntu-latest + steps: + - name: Checkout sources + uses: actions/checkout@v2 + with: + fetch-depth: 2 + - name: Cache npm dependencies + id: cache-npm-libraries + uses: actions/cache@v2 + with: + path: .yarn/cache/* + key: ${{ runner.os }} + - name: Install Node.js + uses: actions/setup-node@v2 + with: + node-version: 16.x + - name: Install dependencies + run: corepack yarn install + - name: Get CHANGELOG diff + run: git --no-pager diff HEAD^ -- CHANGELOG.md | awk '{ if( substr($0,0,1) == "+" && $1 != "+##" && $1 != "+Released:" && $1 != "+++" ) { print substr($0,2) } }' > CHANGELOG.diff.md + - name: Copy README for `uppy` package + run: cp README.md packages/uppy/. + - name: Build before publishing + run: corepack yarn run build + - name: Login to NPM + run: corepack yarn config set npmAuthToken ${{ toJSON(secrets.NPM_TOKEN) }} + - name: Publish to NPM + run: corepack yarn workspaces foreach --no-private npm publish --access public --tolerate-republish + - name: Merge PR + id: merge + run: | + gh api -X PUT repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/merge \ + -F merge_method="squash" \ + -F commit_message="$(cat CHANGELOG.diff.md)" \ + --jq 'if .merged then "##[set-output name=sha;]"+.sha else error("not merged") end' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Create tags + run: | + git --no-pager diff --name-only HEAD^ | awk '$0 ~ /^packages\/.+\/package\.json$/ { print "jq -r '"'"'\"gh api /repos/{owner}/{repo}/git/refs -f ref=\\\"refs/tags/\"+.name+\"@\"+.version+\"\\\" -f sha=${{ steps.merge.outputs.sha }}\"'"'"' < " $0 }' > createTags.sh + cat createTags.sh + sh createTags.sh | sh + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Get Uppy version number + id: uppyVersion + run: jq -r '"##[set-output name=version;]"+.version' < packages/uppy/package.json + - name: Create GitHub release + run: gh release create uppy@${{ steps.uppyVersion.outputs.version }} -t "Uppy ${{ steps.uppyVersion.outputs.version }}" -F CHANGELOG.diff.md + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Upload `uppy` to CDN + run: corepack yarn run uploadcdn uppy + env: + EDGLY_KEY: ${{secrets.EDGLY_KEY}} + EDGLY_SECRET: ${{secrets.EDGLY_SECRET}} + - name: Upload `@uppy/robodog` to CDN if it was released + run: git diff --exit-code --quiet HEAD^ -- packages/@uppy/robodog/package.json || corepack yarn run uploadcdn @uppy/robodog + env: + EDGLY_KEY: ${{secrets.EDGLY_KEY}} + EDGLY_SECRET: ${{secrets.EDGLY_SECRET}} + - name: Upload `@uppy/locales` to CDN if it was released + run: git diff --exit-code --quiet HEAD^ -- packages/@uppy/locales/package.json ||corepack yarn run uploadcdn @uppy/locales + env: + EDGLY_KEY: ${{secrets.EDGLY_KEY}} + EDGLY_SECRET: ${{secrets.EDGLY_SECRET}} + - name: Remove release-candidate branch + run: gh api -X DELETE repos/${{ github.repository }}/git/refs/heads/release-candidate || echo "Already deleted" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Remove release branch + run: gh api -X DELETE repos/${{ github.repository }}/git/refs/heads/release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Disable Release workflow + run: gh workflow disable Release --repo ${{ github.repository }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: In case of failure + if: ${{ failure() }} + run: gh pr comment ${{ github.event.pull_request.number }} --body "Release job failed, please take action." + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore index 854d8fd18f..d206f42111 100644 --- a/.gitignore +++ b/.gitignore @@ -4,9 +4,11 @@ npm-debug.log npm-debug.log* nohup.out node_modules +.angular .cache .parcel-cache .eslintcache +.vscode/settings.json .yarn/cache .yarn/install-state.gz yarn-error.log diff --git a/.remarkignore b/.remarkignore index d6ba4f2afb..c57119b3c3 100644 --- a/.remarkignore +++ b/.remarkignore @@ -3,4 +3,5 @@ website/src/_posts/2020-* website/src/_posts/2021-0* examples/ CHANGELOG.md +CHANGELOG.next.md BACKLOG.md diff --git a/.yarn/patches/babel-plugin-transform-commonjs-npm-1.1.6-0007fa2809 b/.yarn/patches/babel-plugin-transform-commonjs-npm-1.1.6-0007fa2809 new file mode 100644 index 0000000000..741d93274b --- /dev/null +++ b/.yarn/patches/babel-plugin-transform-commonjs-npm-1.1.6-0007fa2809 @@ -0,0 +1,47 @@ +diff --git a/dist/index.js b/dist/index.js +index 0f9a4b342c75d75309b78a36473fb5c68f7b89b5..57effed56c190a946756d191cb3d390dbc84aee3 100644 +--- a/dist/index.js ++++ b/dist/index.js +@@ -92,18 +92,32 @@ exports.default = helper_plugin_utils_1.declare((api, options) => { + const specifiers = []; + // Convert to named import. + if (core_1.types.isObjectPattern(path.parentPath.node.id)) { +- path.parentPath.node.id.properties.forEach(prop => { +- specifiers.push(core_1.types.importSpecifier(prop.value, prop.key)); +- state.globals.add(prop.value.name); +- }); +- const decl = core_1.types.importDeclaration(specifiers, core_1.types.stringLiteral(str.value)); +- // @ts-ignore +- decl.__replaced = true; +- path.scope.getProgramParent().path.unshiftContainer('body', decl); +- path.parentPath.remove(); ++ if(node.arguments[0].value.startsWith('.') || node.arguments[0].value.startsWith('@uppy/')) { ++ const id = path.scope.generateUidIdentifier(node.arguments[0].value) ++ const destructuring = core_1.types.variableDeclarator(path.parentPath.node.id, id) ++ const decl = core_1.types.importDeclaration([core_1.types.importDefaultSpecifier(id)], core_1.types.stringLiteral(str.value)); ++ // @ts-ignore ++ decl.__replaced = true; ++ path.scope.getProgramParent().path.unshiftContainer('body', decl); ++ path.parentPath.replaceWith(destructuring) ++ } else { ++ path.parentPath.node.id.properties.forEach(prop => { ++ specifiers.push(core_1.types.importSpecifier(prop.value, prop.key)); ++ state.globals.add(prop.value.name); ++ }); ++ const decl = core_1.types.importDeclaration(specifiers, core_1.types.stringLiteral(str.value)); ++ // @ts-ignore ++ decl.__replaced = true; ++ path.scope.getProgramParent().path.unshiftContainer('body', decl); ++ path.parentPath.remove() ++ } + } ++ else if (node.arguments[0].value === 'tus-js-client' && str) { ++ const decl = core_1.types.importDeclaration([core_1.types.importNamespaceSpecifier(path.parentPath.node.id)], core_1.types.stringLiteral(str.value)) ++ path.scope.getProgramParent().path.unshiftContainer('body', decl); ++ path.parentPath.remove() + // Convert to default import. +- else if (str) { ++ } else if (str) { + const { parentPath } = path; + const { left } = parentPath.node; + // @ts-ignore diff --git a/BACKLOG.md b/BACKLOG.md index 66c8b3aad0..47ba7868cc 100644 --- a/BACKLOG.md +++ b/BACKLOG.md @@ -5,6 +5,16 @@ These are ideas that are planned for specific versions or act as a backlog without a clear date. PRs are welcome! Please do open an issue to discuss first if it's a big feature, priorities may have changed after something was added here. +## `2.3.0` + +To be released: 2021-11-29 + +- [ ] plugin: audio/memo recording similar to Webcam #143 #198 (@arturi) +- [ ] compressor: move to Uppy repo, add resizing (@arturi) +- [ ] providers: Box on hosted Companion +- [ ] robodog: research simplifing Robodog — yes to easy “few lines of code Dashboard+Providers+(?Transloadit) experience”, but currently it’s hard to choose between modes, decide what you need (@Murderlon) +- [ ] build: add release automations (@aduh95) + ## `3.0.0` - [ ] Switch to ES Modules (ESM) @@ -21,7 +31,6 @@ PRs are welcome! Please do open an issue to discuss first if it's a big feature, ### Core -- [ ] Add an option to force metafield data when uploading a file. Mark files with restriction errors in the UI. Having an icon showing close to the file to inform if it passed any rule would provide an awesome user experience. The user would be able to edit the file name or any meta tags necessary to pass validation via uppy dashboard, and anytime the user updates the file info, the validation runs again and the icon is updated. #1703 - [ ] Make sure Uppy works well in VR - [ ] normalize file names when uploading from iOS? Can we do it with meta data? date? `image-${index}`? #678 @@ -40,8 +49,6 @@ PRs are welcome! Please do open an issue to discuss first if it's a big feature, - [ ] WordPress Back-end plugin. Should be another Transloadit Integration based on Robodog Dashboard(?) we should add a provider, and possibly offer already-uploaded content - [ ] WordPress Front-end Gravity Forms Uppy plugin so one form field could be an Uppy-powered file input - [ ] A WakeLock based plugin that keeps your phone from going to sleep while an upload is ongoing https://github.com/transloadit/uppy/issues/1725 -- [ ] plugin: audio/memo recording similar to Webcam #143 #198 (@arturi) -- [ ] compressor: add to Uppy repo, add resizing (@arturi) ### New providers diff --git a/BUNDLE-README.md b/BUNDLE-README.md index e69626979c..dce5c3f7cc 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 76ba4d280c..d2ea2f9d4b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,104 @@ Please add your entries in this format: In the current stage we aim to release a new version at least every month. +## 2.3.2 + +Released: 2021-12-21 + +| Package | Version | Package | Version | +| --------------- | ------- | --------------- | ------- | +| @uppy/angular | 0.2.8 | @uppy/vue | 0.4.5 | +| @uppy/companion | 3.1.4 | uppy | 2.3.2 | +| @uppy/svelte | 1.0.7 | | | + +- meta: fix release script (Antoine du Hamel) +- @uppy/core: document file.name (Merlijn Vos / #3381) +- @uppy/angular,@uppy/companion,@uppy/svelte,@uppy/vue: add `.npmignore` files to ignore `.gitignore` when packing (Antoine du Hamel / #3380) +- meta: add VSCode workspace settings to `.gitignore` (Antoine du Hamel) +- @uppy/companion: Upgrade ws in companion (Merlijn Vos / #3377) +- meta: use ESBuild to bundle in E2E test suite (Antoine du Hamel / #3375) +- meta: update linter config to parse ESM files (Antoine du Hamel / #3371) +- meta: move dev workspace to `private/` (Antoine du Hamel / #3368) +- meta: use Vite for examples/dev (Antoine du Hamel / #3361) +- website: remove dependency on `crypto` in @uppy/transloadit example (Antoine du Hamel / #3367) +- meta: enable linter on website examples (Antoine du Hamel / #3366) +- meta: enable linter on mjs scripts (Antoine du Hamel / #3364) +- @uppy/angular: Fix module field in `package.json` (Merlijn Vos / #3365) +- meta: improve release script wording and formatting (Artur Paikin) + + +## 2.3.1 + +Released: 2021-12-09 + +| Package | Version | Package | Version | +| ----------------- | ------- | ----------------- | ------- | +| @uppy/angular | 0.2.7 | @uppy/store-redux | 2.0.3 | +| @uppy/audio | 0.2.1 | @uppy/svelte | 1.0.6 | +| @uppy/aws-s3 | 2.0.7 | @uppy/vue | 0.4.4 | +| @uppy/companion | 3.1.3 | @uppy/xhr-upload | 2.0.7 | +| @uppy/core | 2.1.4 | @uppy/robodog | 2.1.5 | +| @uppy/dashboard | 2.1.3 | uppy | 2.3.1 | +| @uppy/locales | 2.0.5 | | | + +- meta: update npm deps (Antoine du Hamel / #3352) +- @uppy/companion: fix Dockerfile and deploy automation (Mikael Finstad / #3355) +- @uppy/companion: don’t pin Yarn version in `package.json` (Antoine du Hamel / #3347) +- @uppy/aws-s3,@uppy/core,@uppy/dashboard,@uppy/store-redux,@uppy/xhr-upload: deps: use `nanoid/non-secure` to workaround react-native limitation (Antoine du Hamel / #3350) +- @uppy/audio: showRecordingLength option was removed, always clearInterval (Artur Paikin / #3351) +- meta: drop `stringify-object` dependency to generate locales (Antoine du Hamel / #3344) +- meta: add release automations (Antoine du Hamel / #3304) + + +## 2.3.0 + +Released: 2021-12-07 + +| Package | Version | Package | Version | +| ------------------------- | ------- | ------------------------- | ------- | +| @uppy/angular | 0.2.6 | @uppy/locales | 2.0.4 | +| @uppy/audio | 0.2.0 | @uppy/onedrive | 2.0.5 | +| @uppy/aws-s3 | 2.0.6 | @uppy/provider-views | 2.0.6 | +| @uppy/aws-s3-multipart | 2.2.0 | @uppy/react | 2.1.2 | +| @uppy/box | 1.0.5 | @uppy/screen-capture | 2.0.5 | +| @uppy/companion | 3.1.2 | @uppy/status-bar | 2.1.2 | +| @uppy/companion-client | 2.0.4 | @uppy/store-default | 2.0.3 | +| @uppy/core | 2.1.3 | @uppy/thumbnail-generator | 2.0.6 | +| @uppy/dashboard | 2.1.2 | @uppy/transloadit | 2.0.5 | +| @uppy/drag-drop | 2.0.5 | @uppy/tus | 2.1.2 | +| @uppy/dropbox | 2.0.5 | @uppy/url | 2.0.5 | +| @uppy/facebook | 2.0.5 | @uppy/utils | 4.0.4 | +| @uppy/file-input | 2.0.5 | @uppy/webcam | 2.0.5 | +| @uppy/golden-retriever | 2.0.6 | @uppy/xhr-upload | 2.0.6 | +| @uppy/google-drive | 2.0.5 | @uppy/zoom | 1.0.5 | +| @uppy/image-editor | 1.1.0 | @uppy/robodog | 2.1.4 | +| @uppy/informer | 2.0.5 | uppy | 2.3.0 | +| @uppy/instagram | 2.0.5 | | | + +- meta: add release automations (Antoine du Hamel / #3304) +- @uppy/dashboard: Save meta fields when opening the image editor (Merlijn Vos / #3339) +- @uppy/aws-s3-multipart: Drop `lockedCandidatesForBatch` and mark chunks as busy when preparing (Yegor Yarko / #3342) +- @uppy/webcam: fix broken links in `webcam.md` (Antoine du Hamel / #3346) +- @uppy/audio: new @uppy/audio plugin for recording with microphone (Artur Paikin / #2976) +- build: force use of `@babel/plugin-proposal-optional-chaining` (Antoine du Hamel / #3335) +- @uppy/companion: fix deploy Yarn version (Antoine du Hamel / #3327) +- @uppy/companion: upgrade aws-sdk (Mikael Finstad / #3334) +- @uppy/core: disable loose transpilation for legacy bundle (Antoine du Hamel / #3329) +- @uppy/angular: examples: update `angular-example` to Angular v13 (Antoine du Hamel / #3325) +- meta: Update BACKLOG.md (Artur Paikin, Merlijn Vos) +- meta: Add disableLocalFiles to options summary (Steve Barker / #3323) +- meta: Create SECURITY.md (Ziding Zhang / #3052) +- @uppy/image-editor: Pass croppedCanvasOptions to getCroppedCanvas (Mohamed Boudra / #3320) +- meta: finish `master`->`main` job (Mikael Finstad / #3315) +- website: update documents that were out of date (Antoine du Hamel / #3317) +- @uppy/status-bar: Status bar error state improvements (Merlijn Vos / #3299) +- doc: Fix typo in `docs/drag-drop.md` (Ash Allen / #3319) +- website: Update /support and docs about Transloadit-hosted Companion (Artur Paikin / #3243) +- @uppy/aws-s3,@uppy/box,@uppy/core,@uppy/dashboard,@uppy/drag-drop,@uppy/dropbox,@uppy/facebook,@uppy/file-input,@uppy/google-drive,@uppy/image-editor,@uppy/instagram,@uppy/locales,@uppy/onedrive,@uppy/screen-capture,@uppy/status-bar,@uppy/thumbnail-generator,@uppy/transloadit,@uppy/url,@uppy/webcam,@uppy/xhr-upload,@uppy/zoom: Refactor locale scripts & generate types and docs (Merlijn Vos / #3276) +- @uppy/companion: Remove references of incorrect `options` argument for `companion.socket` (Mikael Finstad / #3307) +- @uppy/companion: Upgrade linting to 2.0.0-0 (Kevin van Zonneveld / #3280) + + ## 2.2.1 Released: 2021-10-14 diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000..567fe7fb31 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,33 @@ +FROM node:16.13.0-alpine as build + +WORKDIR /app + +COPY package.json .yarnrc.yml /app/ +COPY .yarn /app/.yarn +COPY packages/@uppy/companion /app/packages/@uppy/companion + +RUN apk --update add --virtual native-dep \ + make gcc g++ python3 libgcc libstdc++ git && \ + (cd /app && corepack yarn workspaces focus @uppy/companion) && \ + apk del native-dep + +RUN cd /app && corepack yarn workspace @uppy/companion build + +# Now remove all non-prod dependencies for a leaner image +RUN cd /app && corepack yarn workspaces focus @uppy/companion --production + +FROM node:16.13.0-alpine + +WORKDIR /app + +# copy required files from build stage. +COPY --from=build /app/packages/@uppy/companion/bin /app/bin +COPY --from=build /app/packages/@uppy/companion/lib /app/lib +COPY --from=build /app/packages/@uppy/companion/package.json /app/package.json +COPY --from=build /app/packages/@uppy/companion/node_modules /app/node_modules + +ENV PATH "${PATH}:/app/node_modules/.bin" + +CMD ["node","/app/bin/companion"] +# This can be overruled later +EXPOSE 3020 diff --git a/packages/@uppy/companion/Dockerfile.test b/Dockerfile.test similarity index 100% rename from packages/@uppy/companion/Dockerfile.test rename to Dockerfile.test diff --git a/README.md b/README.md index 558a5f2d01..8db41dde61 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ $ npm install @uppy/core @uppy/dashboard @uppy/tus We recommend installing from npm and then using a module bundler such as [Webpack](https://webpack.js.org/), [Browserify](http://browserify.org/) or [Rollup.js](http://rollupjs.org/). -Add CSS [uppy.min.css](https://releases.transloadit.com/uppy/v2.2.3/uppy.min.css), either to your HTML page’s `
` or include in JS, if your bundler of choice supports it — transforms and plugins are available for Browserify and Webpack. +Add CSS [uppy.min.css](https://releases.transloadit.com/uppy/v2.3.2/uppy.min.css), either to your HTML page’s `` or include in JS, if your bundler of choice supports it — transforms and plugins are available for Browserify and Webpack. 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. @@ -77,10 +77,10 @@ Alternatively, you can also use a pre-built bundle from Transloadit’s CDN: Edg ```html - + - + @@ -190,7 +190,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 @@ -247,18 +247,17 @@ Use Uppy in your project? [Let us know](https://github.com/transloadit/uppy/issu ## Contributors - [](https://github.com/arturi) |[](https://github.com/goto-bus-stop) |[](https://github.com/kvz) |[](https://github.com/ifedapoolarewaju) |[](https://github.com/hedgerh) |[](https://github.com/AJvanLoon) | :---: |:---: |:---: |:---: |:---: |:---: | [arturi](https://github.com/arturi) |[goto-bus-stop](https://github.com/goto-bus-stop) |[kvz](https://github.com/kvz) |[ifedapoolarewaju](https://github.com/ifedapoolarewaju) |[hedgerh](https://github.com/hedgerh) |[AJvanLoon](https://github.com/AJvanLoon) | -[](https://github.com/nqst) |[](https://github.com/aduh95) |[](https://github.com/Murderlon) |[](https://github.com/lakesare) |[](https://github.com/kiloreux) |[](https://github.com/sadovnychyi) | +[](https://github.com/nqst) |[](https://github.com/aduh95) |[](https://github.com/Murderlon) |[](https://github.com/lakesare) |[](https://github.com/kiloreux) |[](https://github.com/mifi) | :---: |:---: |:---: |:---: |:---: |:---: | -[nqst](https://github.com/nqst) |[aduh95](https://github.com/aduh95) |[Murderlon](https://github.com/Murderlon) |[lakesare](https://github.com/lakesare) |[kiloreux](https://github.com/kiloreux) |[sadovnychyi](https://github.com/sadovnychyi) | +[nqst](https://github.com/nqst) |[aduh95](https://github.com/aduh95) |[Murderlon](https://github.com/Murderlon) |[lakesare](https://github.com/lakesare) |[kiloreux](https://github.com/kiloreux) |[mifi](https://github.com/mifi) | -[](https://github.com/samuelayo) |[](https://github.com/richardwillars) |[](https://github.com/mifi) |[](https://github.com/ajkachnic) |[](https://github.com/apps/dependabot) |[](https://github.com/zcallan) | +[](https://github.com/sadovnychyi) |[](https://github.com/samuelayo) |[](https://github.com/richardwillars) |[](https://github.com/ajkachnic) |[](https://github.com/apps/dependabot) |[](https://github.com/zcallan) | :---: |:---: |:---: |:---: |:---: |:---: | -[samuelayo](https://github.com/samuelayo) |[richardwillars](https://github.com/richardwillars) |[mifi](https://github.com/mifi) |[ajkachnic](https://github.com/ajkachnic) |[dependabot\[bot\]](https://github.com/apps/dependabot) |[zcallan](https://github.com/zcallan) | +[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) |[zcallan](https://github.com/zcallan) | [](https://github.com/tim-kos) |[](https://github.com/janko) |[](https://github.com/wilkoklak) |[](https://github.com/oliverpool) |[](https://github.com/Botz) |[](https://github.com/mcallistertyler) | :---: |:---: |:---: |:---: |:---: |:---: | @@ -284,113 +283,117 @@ Use Uppy in your project? [Let us know](https://github.com/transloadit/uppy/issu :---: |:---: |:---: |:---: |:---: |:---: | [sksavant](https://github.com/sksavant) |[suchoproduction](https://github.com/suchoproduction) |[sunil-shrestha](https://github.com/sunil-shrestha) |[timodwhit](https://github.com/timodwhit) |[yonahforst](https://github.com/yonahforst) |[a-kriya](https://github.com/a-kriya) | -[](https://github.com/stephentuso) |[](https://github.com/jhen0409) |[](https://github.com/mskelton) |[](https://github.com/ahmedkandel) |[](https://github.com/btrice) |[](https://github.com/behnammodi) | +[](https://github.com/bencergazda) |[](https://github.com/stephentuso) |[](https://github.com/jhen0409) |[](https://github.com/mskelton) |[](https://github.com/ahmedkandel) |[](https://github.com/btrice) | +:---: |:---: |:---: |:---: |:---: |:---: | +[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) | + +[](https://github.com/behnammodi) |[](https://github.com/BePo65) |[](https://github.com/Burkes) |[](https://github.com/craigjennings11) |[](https://github.com/davekiss) |[](https://github.com/DenysNosov) | :---: |:---: |:---: |:---: |:---: |:---: | -[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) | +[behnammodi](https://github.com/behnammodi) |[BePo65](https://github.com/BePo65) |[Burkes](https://github.com/Burkes) |[craigjennings11](https://github.com/craigjennings11) |[davekiss](https://github.com/davekiss) |[DenysNosov](https://github.com/DenysNosov) | -[](https://github.com/BePo65) |[](https://github.com/Burkes) |[](https://github.com/craigjennings11) |[](https://github.com/davekiss) |[](https://github.com/DenysNosov) |[](https://github.com/ethanwillis) | +[](https://github.com/ethanwillis) |[](https://github.com/frobinsonj) |[](https://github.com/geertclerx) |[](https://github.com/ghasrfakhri) |[](https://github.com/jasonbosco) |[](https://github.com/jedwood) | :---: |:---: |:---: |:---: |:---: |:---: | -[BePo65](https://github.com/BePo65) |[Burkes](https://github.com/Burkes) |[craigjennings11](https://github.com/craigjennings11) |[davekiss](https://github.com/davekiss) |[DenysNosov](https://github.com/DenysNosov) |[ethanwillis](https://github.com/ethanwillis) | +[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) |[jedwood](https://github.com/jedwood) | -[](https://github.com/frobinsonj) |[](https://github.com/geertclerx) |[](https://github.com/ghasrfakhri) |[](https://github.com/jasonbosco) |[](https://github.com/jedwood) |[](https://github.com/dogrocker) | +[](https://github.com/dogrocker) |[](https://github.com/lamartire) |[](https://github.com/lafe) |[](https://github.com/Mactaivsh) |[](https://github.com/maferland) |[](https://github.com/Martin005) | :---: |:---: |:---: |:---: |:---: |:---: | -[frobinsonj](https://github.com/frobinsonj) |[geertclerx](https://github.com/geertclerx) |[ghasrfakhri](https://github.com/ghasrfakhri) |[jasonbosco](https://github.com/jasonbosco) |[jedwood](https://github.com/jedwood) |[dogrocker](https://github.com/dogrocker) | +[dogrocker](https://github.com/dogrocker) |[lamartire](https://github.com/lamartire) |[lafe](https://github.com/lafe) |[Mactaivsh](https://github.com/Mactaivsh) |[maferland](https://github.com/maferland) |[Martin005](https://github.com/Martin005) | -[](https://github.com/lamartire) |[](https://github.com/Mactaivsh) |[](https://github.com/maferland) |[](https://github.com/Martin005) |[](https://github.com/martiuslim) |[](https://github.com/MatthiasKunnen) | +[](https://github.com/martiuslim) |[](https://github.com/MatthiasKunnen) |[](https://github.com/msand) |[](https://github.com/paescuj) |[](https://github.com/richartkeil) |[](https://github.com/richmeij) | :---: |:---: |:---: |:---: |:---: |:---: | -[lamartire](https://github.com/lamartire) |[Mactaivsh](https://github.com/Mactaivsh) |[maferland](https://github.com/maferland) |[Martin005](https://github.com/Martin005) |[martiuslim](https://github.com/martiuslim) |[MatthiasKunnen](https://github.com/MatthiasKunnen) | +[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) |[richmeij](https://github.com/richmeij) | -[](https://github.com/msand) |[](https://github.com/paescuj) |[](https://github.com/richartkeil) |[](https://github.com/richmeij) |[](https://github.com/rosenfeld) |[](https://github.com/jrschumacher) | +[](https://github.com/rosenfeld) |[](https://github.com/jrschumacher) |[](https://github.com/ThomasG77) |[](https://github.com/sparanoid) |[](https://github.com/zhuangya) |[](https://github.com/yaegor) | :---: |:---: |:---: |:---: |:---: |:---: | -[msand](https://github.com/msand) |[paescuj](https://github.com/paescuj) |[richartkeil](https://github.com/richartkeil) |[richmeij](https://github.com/richmeij) |[rosenfeld](https://github.com/rosenfeld) |[jrschumacher](https://github.com/jrschumacher) | +[rosenfeld](https://github.com/rosenfeld) |[jrschumacher](https://github.com/jrschumacher) |[ThomasG77](https://github.com/ThomasG77) |[sparanoid](https://github.com/sparanoid) |[zhuangya](https://github.com/zhuangya) |[yaegor](https://github.com/yaegor) | -[](https://github.com/ThomasG77) |[](https://github.com/sparanoid) |[](https://github.com/zhuangya) |[](https://github.com/allenfantasy) |[](https://github.com/Zyclotrop-j) |[](https://github.com/anark) | +[](https://github.com/allenfantasy) |[](https://github.com/Zyclotrop-j) |[](https://github.com/anark) |[](https://github.com/fortrieb) |[](https://github.com/apps/github-actions) |[](https://github.com/jarey) | :---: |:---: |:---: |:---: |:---: |:---: | -[ThomasG77](https://github.com/ThomasG77) |[sparanoid](https://github.com/sparanoid) |[zhuangya](https://github.com/zhuangya) |[allenfantasy](https://github.com/allenfantasy) |[Zyclotrop-j](https://github.com/Zyclotrop-j) |[anark](https://github.com/anark) | +[allenfantasy](https://github.com/allenfantasy) |[Zyclotrop-j](https://github.com/Zyclotrop-j) |[anark](https://github.com/anark) |[fortrieb](https://github.com/fortrieb) |[github-actions[bot]](https://github.com/apps/github-actions) |[jarey](https://github.com/jarey) | -[](https://github.com/fortrieb) |[](https://github.com/jarey) |[](https://github.com/muhammadInam) |[](https://github.com/rettgerst) |[](https://github.com/mkabatek) |[](https://github.com/jukakoski) | +[](https://github.com/muhammadInam) |[](https://github.com/rettgerst) |[](https://github.com/mkabatek) |[](https://github.com/jukakoski) |[](https://github.com/olemoign) |[](https://github.com/ajschmidt8) | :---: |:---: |:---: |:---: |:---: |:---: | -[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) | +[muhammadInam](https://github.com/muhammadInam) |[rettgerst](https://github.com/rettgerst) |[mkabatek](https://github.com/mkabatek) |[jukakoski](https://github.com/jukakoski) |[olemoign](https://github.com/olemoign) |[ajschmidt8](https://github.com/ajschmidt8) | -[](https://github.com/olemoign) |[](https://github.com/ajschmidt8) |[](https://github.com/superhawk610) |[](https://github.com/abannach) |[](https://github.com/adamelmore) |[](https://github.com/ajh-sr) | +[](https://github.com/superhawk610) |[](https://github.com/abannach) |[](https://github.com/adamelmore) |[](https://github.com/ajh-sr) |[](https://github.com/adamvigneault) |[](https://github.com/Adrrei) | :---: |:---: |:---: |:---: |:---: |:---: | -[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) | +[superhawk610](https://github.com/superhawk610) |[abannach](https://github.com/abannach) |[adamelmore](https://github.com/adamelmore) |[ajh-sr](https://github.com/ajh-sr) |[adamvigneault](https://github.com/adamvigneault) |[Adrrei](https://github.com/Adrrei) | -[](https://github.com/adamvigneault) |[](https://github.com/Adrrei) |[](https://github.com/adritasharma) |[](https://github.com/ahmadissa) |[](https://github.com/asmt3) |[](https://github.com/alexnj) | +[](https://github.com/adritasharma) |[](https://github.com/ahmadissa) |[](https://github.com/asmt3) |[](https://github.com/alexnj) |[](https://github.com/aalepis) |[](https://github.com/Dogfalo) | :---: |:---: |:---: |:---: |:---: |:---: | -[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) | +[adritasharma](https://github.com/adritasharma) |[ahmadissa](https://github.com/ahmadissa) |[asmt3](https://github.com/asmt3) |[alexnj](https://github.com/alexnj) |[aalepis](https://github.com/aalepis) |[Dogfalo](https://github.com/Dogfalo) | -[](https://github.com/aalepis) |[](https://github.com/Dogfalo) |[](https://github.com/tekacs) |[](https://github.com/amitport) |[](https://github.com/functino) |[](https://github.com/radarhere) | +[](https://github.com/tekacs) |[](https://github.com/amitport) |[](https://github.com/functino) |[](https://github.com/radarhere) |[](https://github.com/superandrew213) |[](https://github.com/andychongyz) | :---: |:---: |:---: |:---: |:---: |:---: | -[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) | +[tekacs](https://github.com/tekacs) |[amitport](https://github.com/amitport) |[functino](https://github.com/functino) |[radarhere](https://github.com/radarhere) |[superandrew213](https://github.com/superandrew213) |[andychongyz](https://github.com/andychongyz) | -[](https://github.com/superandrew213) |[](https://github.com/andychongyz) |[](https://github.com/anthony0030) |[](https://github.com/Abourass) |[](https://github.com/arthurdenner) |[](https://github.com/apuyou) | +[](https://github.com/anthony0030) |[](https://github.com/Abourass) |[](https://github.com/arthurdenner) |[](https://github.com/apuyou) |[](https://github.com/ash-jc-allen) |[](https://github.com/atsawin) | :---: |:---: |:---: |:---: |:---: |:---: | -[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) | +[anthony0030](https://github.com/anthony0030) |[Abourass](https://github.com/Abourass) |[arthurdenner](https://github.com/arthurdenner) |[apuyou](https://github.com/apuyou) |[ash-jc-allen](https://github.com/ash-jc-allen) |[atsawin](https://github.com/atsawin) | -[](https://github.com/atsawin) |[](https://github.com/ayhankesicioglu) |[](https://github.com/azeemba) |[](https://github.com/azizk) |[](https://github.com/bducharme) |[](https://github.com/Quorafind) | +[](https://github.com/ayhankesicioglu) |[](https://github.com/azeemba) |[](https://github.com/azizk) |[](https://github.com/bducharme) |[](https://github.com/Quorafind) |[](https://github.com/wbaaron) | :---: |:---: |:---: |:---: |:---: |:---: | -[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) |[Quorafind](https://github.com/Quorafind) | +[ayhankesicioglu](https://github.com/ayhankesicioglu) |[azeemba](https://github.com/azeemba) |[azizk](https://github.com/azizk) |[bducharme](https://github.com/bducharme) |[Quorafind](https://github.com/Quorafind) |[wbaaron](https://github.com/wbaaron) | -[](https://github.com/wbaaron) |[](https://github.com/bedgerotto) |[](https://github.com/cyu) |[](https://github.com/cartfisk) |[](https://github.com/cellvinchung) |[](https://github.com/chao) | +[](https://github.com/bedgerotto) |[](https://github.com/cyu) |[](https://github.com/cartfisk) |[](https://github.com/cellvinchung) |[](https://github.com/chao) |[](https://github.com/Cretezy) | :---: |:---: |:---: |:---: |:---: |:---: | -[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) |[chao](https://github.com/chao) | +[bedgerotto](https://github.com/bedgerotto) |[cyu](https://github.com/cyu) |[cartfisk](https://github.com/cartfisk) |[cellvinchung](https://github.com/cellvinchung) |[chao](https://github.com/chao) |[Cretezy](https://github.com/Cretezy) | -[](https://github.com/Cretezy) |[](https://github.com/csprance) |[](https://github.com/Aarbel) |[](https://github.com/cbush06) |[](https://github.com/czj) |[](https://github.com/ardeois) | +[](https://github.com/csprance) |[](https://github.com/Aarbel) |[](https://github.com/cbush06) |[](https://github.com/czj) |[](https://github.com/ardeois) |[](https://github.com/sercraig) | :---: |:---: |:---: |:---: |:---: |:---: | -[Cretezy](https://github.com/Cretezy) |[csprance](https://github.com/csprance) |[Aarbel](https://github.com/Aarbel) |[cbush06](https://github.com/cbush06) |[czj](https://github.com/czj) |[ardeois](https://github.com/ardeois) | +[csprance](https://github.com/csprance) |[Aarbel](https://github.com/Aarbel) |[cbush06](https://github.com/cbush06) |[czj](https://github.com/czj) |[ardeois](https://github.com/ardeois) |[sercraig](https://github.com/sercraig) | -[](https://github.com/sercraig) |[](https://github.com/Cruaier) |[](https://github.com/danmichaelo) |[](https://github.com/danilat) |[](https://github.com/mrboomer) |[](https://github.com/akizor) | +[](https://github.com/Cruaier) |[](https://github.com/danmichaelo) |[](https://github.com/danilat) |[](https://github.com/mrboomer) |[](https://github.com/akizor) |[](https://github.com/davilima6) | :---: |:---: |:---: |:---: |:---: |:---: | -[sercraig](https://github.com/sercraig) |[Cruaier](https://github.com/Cruaier) |[danmichaelo](https://github.com/danmichaelo) |[danilat](https://github.com/danilat) |[mrboomer](https://github.com/mrboomer) |[akizor](https://github.com/akizor) | +[Cruaier](https://github.com/Cruaier) |[danmichaelo](https://github.com/danmichaelo) |[danilat](https://github.com/danilat) |[mrboomer](https://github.com/mrboomer) |[akizor](https://github.com/akizor) |[davilima6](https://github.com/davilima6) | -[](https://github.com/davilima6) |[](https://github.com/DennisKofflard) |[](https://github.com/jeetiss) |[](https://github.com/sweetro) |[](https://github.com/efbautista) |[](https://github.com/yoldar) | +[](https://github.com/DennisKofflard) |[](https://github.com/jeetiss) |[](https://github.com/sweetro) |[](https://github.com/efbautista) |[](https://github.com/yoldar) |[](https://github.com/eliOcs) | :---: |:---: |:---: |:---: |:---: |:---: | -[davilima6](https://github.com/davilima6) |[DennisKofflard](https://github.com/DennisKofflard) |[jeetiss](https://github.com/jeetiss) |[sweetro](https://github.com/sweetro) |[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) |[efbautista](https://github.com/efbautista) |[yoldar](https://github.com/yoldar) |[eliOcs](https://github.com/eliOcs) | -[](https://github.com/eliOcs) |[](https://github.com/EnricoSottile) |[](https://github.com/epexa) |[](https://github.com/Gkleinereva) |[](https://github.com/fgallinari) |[](https://github.com/ferdiusa) | +[](https://github.com/EnricoSottile) |[](https://github.com/epexa) |[](https://github.com/Gkleinereva) |[](https://github.com/fgallinari) |[](https://github.com/ferdiusa) |[](https://github.com/dtrucs) | :---: |:---: |:---: |:---: |:---: |:---: | -[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) | +[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) |[dtrucs](https://github.com/dtrucs) | -[](https://github.com/dtrucs) |[](https://github.com/geoffappleford) |[](https://github.com/gjungb) |[](https://github.com/roenschg) |[](https://github.com/HughbertD) |[](https://github.com/HussainAlkhalifah) | +[](https://github.com/geoffappleford) |[](https://github.com/gjungb) |[](https://github.com/roenschg) |[](https://github.com/HughbertD) |[](https://github.com/HussainAlkhalifah) |[](https://github.com/huydod) | :---: |:---: |:---: |:---: |:---: |:---: | -[dtrucs](https://github.com/dtrucs) |[geoffappleford](https://github.com/geoffappleford) |[gjungb](https://github.com/gjungb) |[roenschg](https://github.com/roenschg) |[HughbertD](https://github.com/HughbertD) |[HussainAlkhalifah](https://github.com/HussainAlkhalifah) | +[geoffappleford](https://github.com/geoffappleford) |[gjungb](https://github.com/gjungb) |[roenschg](https://github.com/roenschg) |[HughbertD](https://github.com/HughbertD) |[HussainAlkhalifah](https://github.com/HussainAlkhalifah) |[huydod](https://github.com/huydod) | -[](https://github.com/huydod) |[](https://github.com/IanVS) |[](https://github.com/ishendyweb) |[](https://github.com/NaxYo) |[](https://github.com/eltociear) |[](https://github.com/intenzive) | +[](https://github.com/IanVS) |[](https://github.com/ishendyweb) |[](https://github.com/NaxYo) |[](https://github.com/eltociear) |[](https://github.com/intenzive) |[](https://github.com/GreenJimmy) | :---: |:---: |:---: |:---: |:---: |:---: | -[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) |[intenzive](https://github.com/intenzive) | +[IanVS](https://github.com/IanVS) |[ishendyweb](https://github.com/ishendyweb) |[NaxYo](https://github.com/NaxYo) |[eltociear](https://github.com/eltociear) |[intenzive](https://github.com/intenzive) |[GreenJimmy](https://github.com/GreenJimmy) | -[](https://github.com/GreenJimmy) |[](https://github.com/mazoruss) |[](https://github.com/JacobMGEvans) |[](https://github.com/jdssem) |[](https://github.com/Jbithell) |[](https://github.com/jcjmcclean) | +[](https://github.com/mazoruss) |[](https://github.com/JacobMGEvans) |[](https://github.com/jdssem) |[](https://github.com/Jbithell) |[](https://github.com/jcjmcclean) |[](https://github.com/janklimo) | :---: |:---: |:---: |:---: |:---: |:---: | -[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) | +[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) | -[](https://github.com/janklimo) |[](https://github.com/janwilts) |[](https://github.com/vith) |[](https://github.com/jessica-coursera) |[](https://github.com/Jmales) |[](https://github.com/theJoeBiz) | +[](https://github.com/janwilts) |[](https://github.com/vith) |[](https://github.com/jessica-coursera) |[](https://github.com/Jmales) |[](https://github.com/theJoeBiz) |[](https://github.com/profsmallpine) | :---: |:---: |:---: |:---: |:---: |:---: | -[janklimo](https://github.com/janklimo) |[janwilts](https://github.com/janwilts) |[vith](https://github.com/vith) |[jessica-coursera](https://github.com/jessica-coursera) |[Jmales](https://github.com/Jmales) |[theJoeBiz](https://github.com/theJoeBiz) | +[janwilts](https://github.com/janwilts) |[vith](https://github.com/vith) |[jessica-coursera](https://github.com/jessica-coursera) |[Jmales](https://github.com/Jmales) |[theJoeBiz](https://github.com/theJoeBiz) |[profsmallpine](https://github.com/profsmallpine) | -[](https://github.com/profsmallpine) |[](https://github.com/jonathanarbely) |[](https://github.com/jderrough) |[](https://github.com/jonathanly) |[](https://github.com/jorgeepc) |[](https://github.com/jszobody) | +[](https://github.com/chromacoma) |[](https://github.com/jonathanarbely) |[](https://github.com/jderrough) |[](https://github.com/jonathanly) |[](https://github.com/jorgeepc) |[](https://github.com/jszobody) | :---: |:---: |:---: |:---: |:---: |:---: | -[profsmallpine](https://github.com/profsmallpine) |[jonathanarbely](https://github.com/jonathanarbely) |[jderrough](https://github.com/jderrough) |[jonathanly](https://github.com/jonathanly) |[jorgeepc](https://github.com/jorgeepc) |[jszobody](https://github.com/jszobody) | +[chromacoma](https://github.com/chromacoma) |[jonathanarbely](https://github.com/jonathanarbely) |[jderrough](https://github.com/jderrough) |[jonathanly](https://github.com/jonathanly) |[jorgeepc](https://github.com/jorgeepc) |[jszobody](https://github.com/jszobody) | [](https://github.com/julianocomg) |[](https://github.com/jmontoyaa) |[](https://github.com/tykarol) |[](https://github.com/firesharkstudios) |[](https://github.com/elkebab) |[](https://github.com/kyleparisi) | :---: |:---: |:---: |:---: |:---: |:---: | [julianocomg](https://github.com/julianocomg) |[jmontoyaa](https://github.com/jmontoyaa) |[tykarol](https://github.com/tykarol) |[firesharkstudios](https://github.com/firesharkstudios) |[elkebab](https://github.com/elkebab) |[kyleparisi](https://github.com/kyleparisi) | -[](https://github.com/lafe) |[](https://github.com/leaanthony) |[](https://github.com/larowlan) |[](https://github.com/dviry) |[](https://github.com/galli-leo) |[](https://github.com/leods92) | +[](https://github.com/leaanthony) |[](https://github.com/larowlan) |[](https://github.com/dviry) |[](https://github.com/galli-leo) |[](https://github.com/leods92) |[](https://github.com/louim) | :---: |:---: |:---: |:---: |:---: |:---: | -[lafe](https://github.com/lafe) |[leaanthony](https://github.com/leaanthony) |[larowlan](https://github.com/larowlan) |[dviry](https://github.com/dviry) |[galli-leo](https://github.com/galli-leo) |[leods92](https://github.com/leods92) | +[leaanthony](https://github.com/leaanthony) |[larowlan](https://github.com/larowlan) |[dviry](https://github.com/dviry) |[galli-leo](https://github.com/galli-leo) |[leods92](https://github.com/leods92) |[louim](https://github.com/louim) | -[](https://github.com/louim) |[](https://github.com/lucaperret) |[](https://github.com/lucax88x) |[](https://github.com/onhate) |[](https://github.com/mperrando) |[](https://github.com/marcosthejew) | +[](https://github.com/lucaperret) |[](https://github.com/lucax88x) |[](https://github.com/onhate) |[](https://github.com/mperrando) |[](https://github.com/marcosthejew) |[](https://github.com/marcusforsberg) | :---: |:---: |:---: |:---: |:---: |:---: | -[louim](https://github.com/louim) |[lucaperret](https://github.com/lucaperret) |[lucax88x](https://github.com/lucax88x) |[onhate](https://github.com/onhate) |[mperrando](https://github.com/mperrando) |[marcosthejew](https://github.com/marcosthejew) | +[lucaperret](https://github.com/lucaperret) |[lucax88x](https://github.com/lucax88x) |[onhate](https://github.com/onhate) |[mperrando](https://github.com/mperrando) |[marcosthejew](https://github.com/marcosthejew) |[marcusforsberg](https://github.com/marcusforsberg) | -[](https://github.com/marcusforsberg) |[](https://github.com/Acconut) |[](https://github.com/martin-brennan) |[](https://github.com/masaok) |[](https://github.com/mattfik) |[](https://github.com/matthewhartstonge) | +[](https://github.com/Acconut) |[](https://github.com/martin-brennan) |[](https://github.com/masaok) |[](https://github.com/mattfik) |[](https://github.com/matthewhartstonge) |[](https://github.com/hrsh) | :---: |:---: |:---: |:---: |:---: |:---: | -[marcusforsberg](https://github.com/marcusforsberg) |[Acconut](https://github.com/Acconut) |[martin-brennan](https://github.com/martin-brennan) |[masaok](https://github.com/masaok) |[mattfik](https://github.com/mattfik) |[matthewhartstonge](https://github.com/matthewhartstonge) | +[Acconut](https://github.com/Acconut) |[martin-brennan](https://github.com/martin-brennan) |[masaok](https://github.com/masaok) |[mattfik](https://github.com/mattfik) |[matthewhartstonge](https://github.com/matthewhartstonge) |[hrsh](https://github.com/hrsh) | -[](https://github.com/hrsh) |[](https://github.com/mhulet) |[](https://github.com/mkopinsky) |[](https://github.com/achmiral) |[](https://github.com/mnafees) |[](https://github.com/shahimclt) | +[](https://github.com/mhulet) |[](https://github.com/mkopinsky) |[](https://github.com/achmiral) |[](https://github.com/boudra) |[](https://github.com/mnafees) |[](https://github.com/shahimclt) | :---: |:---: |:---: |:---: |:---: |:---: | -[hrsh](https://github.com/hrsh) |[mhulet](https://github.com/mhulet) |[mkopinsky](https://github.com/mkopinsky) |[achmiral](https://github.com/achmiral) |[mnafees](https://github.com/mnafees) |[shahimclt](https://github.com/shahimclt) | +[mhulet](https://github.com/mhulet) |[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) | [](https://github.com/pleasespammelater) |[](https://github.com/naveed-ahmad) |[](https://github.com/nicojones) |[](https://github.com/coreprocess) |[](https://github.com/nil1511) |[](https://github.com/leftdevel) | :---: |:---: |:---: |:---: |:---: |:---: | @@ -400,49 +403,54 @@ Use Uppy in your project? [Let us know](https://github.com/transloadit/uppy/issu :---: |:---: |:---: |:---: |:---: |:---: | [cryptic022](https://github.com/cryptic022) |[patricklindsay](https://github.com/patricklindsay) |[pedrofs](https://github.com/pedrofs) |[phillipalexander](https://github.com/phillipalexander) |[ppadmavilasom](https://github.com/ppadmavilasom) |[Pzoco](https://github.com/Pzoco) | -[](https://github.com/eman8519) |[](https://github.com/luarmr) |[](https://github.com/SxDx) |[](https://github.com/robwilson1) |[](https://github.com/romain-preston) |[](https://github.com/scherroman) | +[](https://github.com/eman8519) |[](https://github.com/luarmr) |[](https://github.com/refo) |[](https://github.com/SxDx) |[](https://github.com/robwilson1) |[](https://github.com/romain-preston) | :---: |:---: |:---: |:---: |:---: |:---: | -[eman8519](https://github.com/eman8519) |[luarmr](https://github.com/luarmr) |[SxDx](https://github.com/SxDx) |[robwilson1](https://github.com/robwilson1) |[romain-preston](https://github.com/romain-preston) |[scherroman](https://github.com/scherroman) | +[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) |[romain-preston](https://github.com/romain-preston) | -[](https://github.com/rossng) |[](https://github.com/rart) |[](https://github.com/fortunto2) |[](https://github.com/samuelcolburn) |[](https://github.com/sebasegovia01) |[](https://github.com/sergei-zelinsky) | +[](https://github.com/scherroman) |[](https://github.com/rossng) |[](https://github.com/rart) |[](https://github.com/fortunto2) |[](https://github.com/samuelcolburn) |[](https://github.com/sebasegovia01) | :---: |:---: |:---: |:---: |:---: |:---: | -[rossng](https://github.com/rossng) |[rart](https://github.com/rart) |[fortunto2](https://github.com/fortunto2) |[samuelcolburn](https://github.com/samuelcolburn) |[sebasegovia01](https://github.com/sebasegovia01) |[sergei-zelinsky](https://github.com/sergei-zelinsky) | +[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) |[sebasegovia01](https://github.com/sebasegovia01) | -[](https://github.com/szh) |[](https://github.com/SpazzMarticus) |[](https://github.com/waptik) |[](https://github.com/steverob) |[](https://github.com/taj) |[](https://github.com/Tashows) | +[](https://github.com/sergei-zelinsky) |[](https://github.com/szh) |[](https://github.com/SpazzMarticus) |[](https://github.com/waptik) |[](https://github.com/amaitu) |[](https://github.com/steverob) | :---: |:---: |:---: |:---: |:---: |:---: | -[szh](https://github.com/szh) |[SpazzMarticus](https://github.com/SpazzMarticus) |[waptik](https://github.com/waptik) |[steverob](https://github.com/steverob) |[taj](https://github.com/taj) |[Tashows](https://github.com/Tashows) | +[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) |[steverob](https://github.com/steverob) | -[](https://github.com/twarlop) |[](https://github.com/tmaier) |[](https://github.com/tomsaleeba) |[](https://github.com/tvaliasek) |[](https://github.com/vially) |[](https://github.com/valentinoli) | +[](https://github.com/taj) |[](https://github.com/Tashows) |[](https://github.com/twarlop) |[](https://github.com/tmaier) |[](https://github.com/tomsaleeba) |[](https://github.com/tvaliasek) | :---: |:---: |:---: |:---: |:---: |:---: | -[twarlop](https://github.com/twarlop) |[tmaier](https://github.com/tmaier) |[tomsaleeba](https://github.com/tomsaleeba) |[tvaliasek](https://github.com/tvaliasek) |[vially](https://github.com/vially) |[valentinoli](https://github.com/valentinoli) | +[taj](https://github.com/taj) |[Tashows](https://github.com/Tashows) |[twarlop](https://github.com/twarlop) |[tmaier](https://github.com/tmaier) |[tomsaleeba](https://github.com/tomsaleeba) |[tvaliasek](https://github.com/tvaliasek) | -[](https://github.com/nagyv) |[](https://github.com/dwnste) |[](https://github.com/willycamargo) |[](https://github.com/xhocquet) |[](https://github.com/yaegor) |[](https://github.com/YehudaKremer) | +[](https://github.com/vially) |[](https://github.com/valentinoli) |[](https://github.com/nagyv) |[](https://github.com/dwnste) |[](https://github.com/willycamargo) |[](https://github.com/xhocquet) | :---: |:---: |:---: |:---: |:---: |:---: | -[nagyv](https://github.com/nagyv) |[dwnste](https://github.com/dwnste) |[willycamargo](https://github.com/willycamargo) |[xhocquet](https://github.com/xhocquet) |[yaegor](https://github.com/yaegor) |[YehudaKremer](https://github.com/YehudaKremer) | +[vially](https://github.com/vially) |[valentinoli](https://github.com/valentinoli) |[nagyv](https://github.com/nagyv) |[dwnste](https://github.com/dwnste) |[willycamargo](https://github.com/willycamargo) |[xhocquet](https://github.com/xhocquet) | -[](https://github.com/zachconner) |[](https://github.com/zacharylawson) |[](https://github.com/agreene-coursera) |[](https://github.com/alfatv) |[](https://github.com/arggh) |[](https://github.com/avalla) | +[](https://github.com/YehudaKremer) |[](https://github.com/zachconner) |[](https://github.com/zacharylawson) |[](https://github.com/zidingz) |[](https://github.com/agreene-coursera) |[](https://github.com/alfatv) | :---: |:---: |:---: |:---: |:---: |:---: | -[zachconner](https://github.com/zachconner) |[zacharylawson](https://github.com/zacharylawson) |[agreene-coursera](https://github.com/agreene-coursera) |[alfatv](https://github.com/alfatv) |[arggh](https://github.com/arggh) |[avalla](https://github.com/avalla) | +[YehudaKremer](https://github.com/YehudaKremer) |[zachconner](https://github.com/zachconner) |[zacharylawson](https://github.com/zacharylawson) |[zidingz](https://github.com/zidingz) |[agreene-coursera](https://github.com/agreene-coursera) |[alfatv](https://github.com/alfatv) | -[](https://github.com/bdirito) |[](https://github.com/bencergazda) |[](https://github.com/c0b41) |[](https://github.com/canvasbh) |[](https://github.com/christianwengert) |[](https://github.com/craigcbrunner) | +[](https://github.com/arggh) |[](https://github.com/avalla) |[](https://github.com/bdirito) |[](https://github.com/c0b41) |[](https://github.com/canvasbh) |[](https://github.com/christianwengert) | :---: |:---: |:---: |:---: |:---: |:---: | -[bdirito](https://github.com/bdirito) |[bencergazda](https://github.com/bencergazda) |[c0b41](https://github.com/c0b41) |[canvasbh](https://github.com/canvasbh) |[christianwengert](https://github.com/christianwengert) |[craigcbrunner](https://github.com/craigcbrunner) | +[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) |[christianwengert](https://github.com/christianwengert) | -[](https://github.com/darthf1) |[](https://github.com/dkisic) |[](https://github.com/fingul) |[](https://github.com/franckl) |[](https://github.com/gaelicwinter) |[](https://github.com/green-mike) | +[](https://github.com/craigcbrunner) |[](https://github.com/darthf1) |[](https://github.com/dkisic) |[](https://github.com/fingul) |[](https://github.com/franckl) |[](https://github.com/gaelicwinter) | :---: |:---: |:---: |:---: |:---: |:---: | -[darthf1](https://github.com/darthf1) |[dkisic](https://github.com/dkisic) |[fingul](https://github.com/fingul) |[franckl](https://github.com/franckl) |[gaelicwinter](https://github.com/gaelicwinter) |[green-mike](https://github.com/green-mike) | +[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) |[gaelicwinter](https://github.com/gaelicwinter) | -[](https://github.com/hxgf) |[](https://github.com/johnmanjiro13) |[](https://github.com/kode-ninja) |[](https://github.com/magumbo) |[](https://github.com/ninesalt) |[](https://github.com/phil714) | +[](https://github.com/green-mike) |[](https://github.com/hxgf) |[](https://github.com/johnmanjiro13) |[](https://github.com/kode-ninja) |[](https://github.com/magumbo) |[](https://github.com/ninesalt) | :---: |:---: |:---: |:---: |:---: |:---: | -[hxgf](https://github.com/hxgf) |[johnmanjiro13](https://github.com/johnmanjiro13) |[kode-ninja](https://github.com/kode-ninja) |[magumbo](https://github.com/magumbo) |[ninesalt](https://github.com/ninesalt) |[phil714](https://github.com/phil714) | +[green-mike](https://github.com/green-mike) |[hxgf](https://github.com/hxgf) |[johnmanjiro13](https://github.com/johnmanjiro13) |[kode-ninja](https://github.com/kode-ninja) |[magumbo](https://github.com/magumbo) |[ninesalt](https://github.com/ninesalt) | -[](https://github.com/luntta) |[](https://github.com/rhymes) |[](https://github.com/rlebosse) |[](https://github.com/rtaieb) |[](https://github.com/slawexxx44) |[](https://github.com/thanhthot) | +[](https://github.com/phil714) |[](https://github.com/luntta) |[](https://github.com/rhymes) |[](https://github.com/rlebosse) |[](https://github.com/rtaieb) |[](https://github.com/slawexxx44) | :---: |:---: |:---: |:---: |:---: |:---: | -[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) | +[phil714](https://github.com/phil714) |[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) | + +[](https://github.com/thanhthot) |[](https://github.com/tinny77) |[](https://github.com/tusharjkhunt) |[](https://github.com/vedran555) |[](https://github.com/yoann-hellopret) |[](https://github.com/olitomas) | +:---: |:---: |:---: |:---: |:---: |:---: | +[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) | + +[](https://github.com/JimmyLv) | +:---: | +[JimmyLv](https://github.com/JimmyLv) | -[](https://github.com/tinny77) |[](https://github.com/vedran555) |[](https://github.com/yoann-hellopret) |[](https://github.com/olitomas) |[](https://github.com/JimmyLv) | -:---: |:---: |:---: |:---: |:---: | -[tinny77](https://github.com/tinny77) |[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/babel.config.js b/babel.config.js index 3c563b0f8b..24be08d968 100644 --- a/babel.config.js +++ b/babel.config.js @@ -7,7 +7,10 @@ module.exports = (api) => { return { presets: [ ['@babel/preset-env', { - include: ['@babel/plugin-proposal-nullish-coalescing-operator'], + include: [ + '@babel/plugin-proposal-nullish-coalescing-operator', + '@babel/plugin-proposal-optional-chaining', + ], loose: true, targets, useBuiltIns: false, // Don't add polyfills automatically. @@ -17,7 +20,7 @@ module.exports = (api) => { ], plugins: [ ['@babel/plugin-transform-react-jsx', { pragma: 'h' }], - 'babel-plugin-inline-package-json', + process.env.NODE_ENV !== 'dev' && 'babel-plugin-inline-package-json', ].filter(Boolean), } } diff --git a/bin/after-version-bump.js b/bin/after-version-bump.js deleted file mode 100755 index 22f3bdbff1..0000000000 --- a/bin/after-version-bump.js +++ /dev/null @@ -1,106 +0,0 @@ -#!/usr/bin/env node -/* eslint-disable import/no-dynamic-require */ -/* eslint-disable global-require */ - -// Called by the `version` npm script. -// This is run _after_ lerna updates the version numbers, -// but _before_ it commits, so we have time to update the -// version numbers throughout the repo and add it to the -// release commit. -// After updating version numbers, this runs a full -// IS_RELEASE_BUILD=1 build, so that the version numbers -// are properly embedded in the JS bundles. -// NOTE this _amends_ the previous commit, which should -// already be a "Release" commit generated by bin/release. - -const { spawn } = require('child_process') -const { readFile, writeFile } = require('fs/promises') -const once = require('events.once') -const globby = require('globby') - -async function replaceInFile (filename, replacements) { - let content = await readFile(filename, 'utf8') - for (const [rx, replacement] of replacements) { - content = content.replace(rx, replacement) - } - - await writeFile(filename, content, 'utf8') -} - -async function updateVersions (files, packageName) { - const { version } = require(`../packages/${packageName}/package.json`) - - // uppy → uppy - // @uppy/robodog → uppy/robodog - const urlPart = packageName === 'uppy' ? packageName : packageName.slice(1) - - const replacements = new Map([ - [RegExp(`${urlPart}/v\\d+\\.\\d+\\.\\d+\\/`, 'g'), `${urlPart}/v${version}/`], - // maybe more later - ]) - - console.log('replacing', replacements, 'in', files.length, 'files') - - for (const f of files) { - await replaceInFile(f, replacements) - } -} - -async function gitAdd (files) { - const git = spawn('git', ['add', ...files], { stdio: 'inherit' }) - const [exitCode] = await once(git, 'exit') - if (exitCode !== 0) { - throw new Error(`git add failed with ${exitCode}`) - } -} - -// Run the build as a release build (that inlines version numbers etc.) -async function npmRunBuild () { - const npmRun = spawn('yarn', ['run', 'build'], { - stdio: 'inherit', - env: { - ...process.env, - FRESH: true, // force rebuild everything - IS_RELEASE_BUILD: true, - }, - }) - const [exitCode] = await once(npmRun, 'exit') - if (exitCode !== 0) { - throw new Error(`yarn run build failed with ${exitCode}`) - } -} - -async function main () { - if (process.env.ENDTOEND === '1') { - console.log('Publishing for e2e tests, skipping version number sync.') - process.exit(0) - } - - const files = await globby([ - 'README.md', - 'BUNDLE-README.md', - 'examples/**/*.html', - 'packages/*/README.md', - 'packages/@uppy/*/README.md', - 'website/src/docs/**', - 'website/src/examples/**', - 'website/themes/uppy/layout/**', - '!**/node_modules/**', - ]) - - await updateVersions(files, 'uppy') - await updateVersions(files, '@uppy/robodog') - await updateVersions(files, '@uppy/locales') - - // gitignored files were updated for the npm package, but can't be updated - // on git. - const isIgnored = await globby.gitignore() - await gitAdd(files.filter((filename) => !isIgnored(filename))) - - await npmRunBuild() -} - -main().catch((err) => { - console.error(err.stack) - process.exit(1) -}) diff --git a/bin/build-bundle.js b/bin/build-bundle.js index bb1183b7cf..3ff76cdd3a 100644 --- a/bin/build-bundle.js +++ b/bin/build-bundle.js @@ -64,10 +64,10 @@ async function transpileDownForIE ([bundleFile, standalone]) { browserslistEnv: 'legacy', presets: [['@babel/preset-env', { - loose: true, + loose: false, targets: { ie:11 }, useBuiltIns: 'entry', - corejs: { version: '3.15', proposals: true }, + corejs: { version: '3.19', proposals: true }, }]], }) const { code, map } = await minify(js, { diff --git a/bin/endtoend-build-tests b/bin/endtoend-build-tests index daf0dfd080..62888c26d5 100755 --- a/bin/endtoend-build-tests +++ b/bin/endtoend-build-tests @@ -8,30 +8,30 @@ set -o xtrace # Set magic variables for current file & dir __dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" __file="${__dir}/$(basename "${BASH_SOURCE[0]}")" -__base="$(basename ${__file} .sh)" +__base="$(basename "${__file}" .sh)" __root="$(cd "$(dirname "${__dir}")" && pwd)" +__e2eSuites="${__root}/test/endtoend" -# Tests using a simple build setup. -tests="chaos-monkey i18n-drag-drop providers thumbnails transloadit transloadit-assembly-options tus-drag-drop url-plugin xhr-limit" - -for t in $tests; do - mkdir -p "${__root}/test/endtoend/$t/dist" - cp "${__root}/packages/uppy/dist/uppy.min.css" "${__root}/test/endtoend/$t/dist" - cp "${__root}/test/endtoend/$t/index.html" "${__root}/test/endtoend/$t/dist" - browserify "${__root}/test/endtoend/$t/main.js" \ - -o "${__root}/test/endtoend/$t/dist/bundle.js" \ - -t @goto-bus-stop/envify \ - -t babelify +ESBUILD="$(corepack yarn workspace @uppy-tests/end2end bin esbuild)" + +for t in $(cd "$__e2eSuites" && ls -d */ | cut -f1 -d'/'); do + if [ "$t" = "tmp" ]; then continue; fi + if [ "$t" = "create-react-app" ]; then continue; fi + + mkdir -p "${__e2eSuites}/$t/dist" + cp "${__root}/packages/uppy/dist/uppy.min.css" "${__e2eSuites}/$t/dist" + cp "${__e2eSuites}/$t/index.html" "${__e2eSuites}/$t/dist" + + entryPointName="main.mjs" + if [ "$t" = "typescript" ]; then entryPointName="main.ts"; fi + + "$ESBUILD" "${__e2eSuites}/$t/$entryPointName" \ + --bundle --target=es2017 \ + --outfile="${__e2eSuites}/$t/dist/bundle.js" done # Speeecial tests that need custom builds. -pushd "${__root}/test/endtoend/create-react-app" +pushd "${__e2eSuites}/create-react-app" npm install REACT_APP_ON_TRAVIS="${TRAVIS:-}" npm run build popd -pushd "${__root}/test/endtoend/typescript" - mkdir -p dist - cp "${__root}/packages/uppy/dist/uppy.min.css" dist/ - cp index.html dist/ - browserify main.ts -t @goto-bus-stop/envify -p [ tsify --target ES3 ] -o dist/bundle.js -popd diff --git a/bin/make-changelog b/bin/make-changelog deleted file mode 100755 index b40f60aae6..0000000000 --- a/bin/make-changelog +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash -# Make a draft changelog. Expects two tags to compate: previous release and current. -# https://stackoverflow.com/questions/1441010/the-shortest-possible-output-from-git-log-containing-author-and-date -# `./bin/make-changelog uppy@1.31.1 uppy@2.0.1` - -git_log=$(git log $1..$2 --pretty=format:"- %s %aE (%h)") -echo "$git_log" -exit; \ No newline at end of file diff --git a/bin/make-new-versions-table b/bin/make-new-versions-table deleted file mode 100755 index d88d8bca69..0000000000 --- a/bin/make-new-versions-table +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env node - -/** - * Generate a version table from the most recent "Release" commit, - * for use in changelogs. - * - * Usage: - * $ ./bin/make-new-versions-table - */ - -const { execSync } = require('child_process') - -const logStdout = execSync('git log --grep \'Release$\' -1 --pretty=oneline --no-decorate') -let match = /^([0-9a-f]+) .*?$/m.exec(logStdout.toString()) -if (!match) { - console.error('Could not read Release commit') - process.exit(1) -} - -const commit = match[1] - -const tagStdout = execSync(`git tag --list --contains ${commit}`) -const tags = tagStdout.toString() -const rx = /([@\/\w-]+)@(\d+\.\d+\.\d+)(-alpha\.\d+|-beta\.\d+)?/g - -const versions = [] -let m -while ((m = rx.exec(tags))) { - const [, pkg, versionPrefix, versionSuffix] = m - const version = `${versionPrefix}${versionSuffix || ''}` - versions.push({ pkg, version }) -} - -const mid = Math.ceil(versions.length / 2) -let table = [ - '| Package | Version | Package | Version |', - '|-|-|-|-|' -] -for (let i = 0; i < mid; i++) { - const left = versions[i] || { pkg: '-', version: '-' } - const right = versions[i + mid] || { pkg: '-', version: '-' } - table.push(`| ${left.pkg} | ${left.version} | ${right.pkg} | ${right.version} |`) -} - -console.log(table.join('\n')) diff --git a/bin/release b/bin/release deleted file mode 100755 index 907e3c8127..0000000000 --- a/bin/release +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env bash - -set -o pipefail -set -o errexit -set -o nounset - -# Set magic variables for current file & dir -__dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -__file="${__dir}/$(basename "${BASH_SOURCE[0]}")" -__base="$(basename ${__file} .sh)" -__root="$(cd "$(dirname "${__dir}")" && pwd)" - -is_local="${LOCAL:-0}" -echo "Local release: $is_local" - -CHANGED=$(git diff-index --name-only HEAD --) -if [ -n "$CHANGED" ]; then - echo "Found local, uncomitted git changes" - echo "" - echo "Please ensure that your working tree is clean" - exit 1 -fi - -if [[ ! "$@" =~ -y ]]; then - echo "Make sure to read https://uppy.io/docs/contributing#Releases!" - echo "Press Enter when ready, or Ctrl+C if you still need to do something." - echo "Use 'yarn run release -- -y' to bypass this message." - read -fi - -if [ $is_local == "0" ] && [[ ! "$(yarn config get registry)" =~ https://registry\.npmjs\.(com|org)/? ]]; then - echo "Found unexpected npm registry: $(yarn config get registry)" - echo "Run this to fix:" - echo "" - echo "yarn config set registry https://registry.npmjs.org" - exit 1 -fi - -if ! yarn whoami > /dev/null; then - echo "Not authenticated with yarn. First do:" - echo "" - echo "yarn login" - exit 1 -fi - -set -o xtrace - -# Update README before publishing `uppy` -# So up-to-date contributors are shown on the npm page. -yarn run contributors:save -git add README.md - -# Add readme file to the main `uppy` package. -cp README.md packages/uppy/README.md - -yarn run build:clean -FRESH=1 yarn run build - -echo "!! The next step is the actual release!" -echo "!! If something goes wrong after here, it becomes hard to reverse. Please make sure that everything is in order." -echo "Press Enter when ready, or Ctrl+C if you still need to do something." -read - -git commit --allow-empty -m "Release" -lerna version --amend --no-push --exact - -lerna publish from-git - -if [ $is_local == "0" ]; then - git push - git push --tags -fi diff --git a/bin/remove-accidental-git-tags.sh b/bin/remove-accidental-git-tags.sh deleted file mode 100644 index fc9bc85728..0000000000 --- a/bin/remove-accidental-git-tags.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash - -# removes tags that Lerna generated, but then failed to release, -# and is now unfortunately stuck -# usage: ./remove-tags.sh VERSION_NUMBER -# where VERSION_NUMBER is something like 0.30.0 - -Packages=(aws-s3 file-input react transloadit aws-s3-multipart form redux-dev-tools tus companion golden-retriever robodog url companion-client google-drive server-utils utils core informer status-bar webcam dashboard instagram store-default xhr-upload drag-drop progress-bar store-redux dropbox box provider-views thumbnail-generator zoom) -Version = $* - -for i in "${Packages[@]}" -do - TAG="@uppy/$i@$1" - echo "removing $TAG" - git tag -d $TAG -done diff --git a/bin/update-contributors.mjs b/bin/update-contributors.mjs old mode 100644 new mode 100755 index 804902551c..284be8e2e8 --- a/bin/update-contributors.mjs +++ b/bin/update-contributors.mjs @@ -1,36 +1,38 @@ -import { spawn } from "node:child_process" -import fs from "node:fs/promises" +#!/usr/bin/env node -const README_FILE_NAME = new URL("../README.md", import.meta.url) +import { spawn } from 'node:child_process' +import fs from 'node:fs/promises' -const readme = await fs.open(README_FILE_NAME, "r+") +const README_FILE_NAME = new URL('../README.md', import.meta.url) + +const readme = await fs.open(README_FILE_NAME, 'r+') const readmeContent = await readme.readFile() -const githubcontrib = spawn("npx", [ - 'githubcontrib', - '--owner', 'transloadit', - '--repo', 'uppy', - '--cols', '6', - '--format', 'md', - '--showlogin', 'true', - '--sortOrder', 'desc', - ], { - stdio: ['ignore', 'pipe', 'inherit'], - }); +const githubcontrib = spawn('npx', [ + 'githubcontrib', + '--owner', 'transloadit', + '--repo', 'uppy', + '--cols', '6', + '--format', 'md', + '--showlogin', 'true', + '--sortOrder', 'desc', +], { + stdio: ['ignore', 'pipe', 'inherit'], +}) githubcontrib.on('error', console.error) // Detect start of contributors section. -const START_TAG = Buffer.from("\n") -let START_TAG_POSITION = readmeContent.indexOf(START_TAG) + START_TAG.byteLength +const START_TAG = Buffer.from('\n') +const START_TAG_POSITION = readmeContent.indexOf(START_TAG) + START_TAG.byteLength let cursor = START_TAG_POSITION for await (const data of githubcontrib.stdout) { - const { bytesWritten } = await readme.write(data.toString('utf-8'), cursor, "utf-8") + const { bytesWritten } = await readme.write(data.toString('utf-8'), cursor, 'utf-8') cursor += bytesWritten } -if(cursor === START_TAG_POSITION) { +if (cursor === START_TAG_POSITION) { console.log('Empty response from githubcontrib. GitHub’s rate limit?') await readme.close() process.exit(1) @@ -39,8 +41,8 @@ if(cursor === START_TAG_POSITION) { // Write the end of the file. await readme.write( readmeContent, - readmeContent.indexOf(""), + readmeContent.indexOf(''), undefined, - cursor + cursor, ) await readme.close() diff --git a/bin/update-yarn.sh b/bin/update-yarn.sh index 0f951e74e6..7edb8a3081 100755 --- a/bin/update-yarn.sh +++ b/bin/update-yarn.sh @@ -1,4 +1,10 @@ #!/usr/bin/env bash + +# This script is meant to be run on a dev's machine to update the version on +# Yarn used by the monorepo. Its goal is to make sure that every mention of Yarn +# version is updated, and it re-installs the plugins to make sure those are +# up-to-date as well. + set -o pipefail set -o errexit set -o nounset @@ -21,7 +27,7 @@ PLUGINS=$(awk '{ if ($1 == "spec:") print $2 }' .yarnrc.yml) echo "$PLUGINS" | xargs -n1 -t corepack yarn plugin remove cp package.json .yarn/cache/tmp.package.json -sed "s#yarn\": \"$CURRENT_VERSION\"#yarn\": \"$LAST_VERSION\"#;s#\"yarn@$CURRENT_VERSION\"#\"yarn@$LAST_VERSION\"#" .yarn/cache/tmp.package.json > package.json +sed "s#\"yarn\": \"$CURRENT_VERSION\"#\"yarn\": \"$LAST_VERSION\"#;s#\"yarn@$CURRENT_VERSION\"#\"yarn@$LAST_VERSION\"#" .yarn/cache/tmp.package.json > package.json rm .yarn/cache/tmp.package.json echo "$PLUGINS" | xargs -n1 -t corepack yarn plugin import diff --git a/packages/@uppy/companion/docker-compose-dev.yml b/docker-compose-dev.yml similarity index 100% rename from packages/@uppy/companion/docker-compose-dev.yml rename to docker-compose-dev.yml diff --git a/packages/@uppy/companion/docker-compose-test.yml b/docker-compose-test.yml similarity index 100% rename from packages/@uppy/companion/docker-compose-test.yml rename to docker-compose-test.yml diff --git a/packages/@uppy/companion/docker-compose.yml b/docker-compose.yml similarity index 100% rename from packages/@uppy/companion/docker-compose.yml rename to docker-compose.yml diff --git a/examples/angular-example/e2e/src/app.e2e-spec.ts b/examples/angular-example/e2e/src/app.e2e-spec.ts index fc2b2b4469..85c6286d26 100644 --- a/examples/angular-example/e2e/src/app.e2e-spec.ts +++ b/examples/angular-example/e2e/src/app.e2e-spec.ts @@ -11,7 +11,7 @@ describe('workspace-project App', () => { it('should display welcome message', async () => { await page.navigateTo() - expect(await page.getTitleText()).toEqual('angular-example app is running!') + expect(await page.getTitleText()).toEqual('Uppy Angular Example') }) afterEach(async () => { diff --git a/examples/angular-example/package.json b/examples/angular-example/package.json index e67b1615ba..35f4b3bcd6 100644 --- a/examples/angular-example/package.json +++ b/examples/angular-example/package.json @@ -11,14 +11,14 @@ }, "private": true, "dependencies": { - "@angular/animations": "~12.1.0", - "@angular/common": "~12.1.0", - "@angular/compiler": "~12.1.0", - "@angular/core": "~12.1.0", - "@angular/forms": "~12.1.0", - "@angular/platform-browser": "~12.1.0", - "@angular/platform-browser-dynamic": "~12.1.0", - "@angular/router": "~12.1.0", + "@angular/animations": "~13.0.2", + "@angular/common": "~13.0.2", + "@angular/compiler": "~13.0.2", + "@angular/core": "~13.0.2", + "@angular/forms": "~13.0.2", + "@angular/platform-browser": "~13.0.2", + "@angular/platform-browser-dynamic": "~13.0.2", + "@angular/router": "~13.0.2", "@uppy/angular": "workspace:*", "@uppy/core": "workspace:*", "@uppy/drag-drop": "workspace:*", @@ -31,31 +31,31 @@ "zone.js": "~0.11.3" }, "devDependencies": { - "@angular-devkit/build-angular": "~12.1.0", - "@angular-eslint/builder": "12.2.0", - "@angular-eslint/eslint-plugin": "12.2.0", - "@angular-eslint/eslint-plugin-template": "12.2.0", - "@angular-eslint/schematics": "12.2.0", - "@angular-eslint/template-parser": "12.2.0", - "@angular/cli": "~12.1.0", - "@angular/compiler-cli": "~12.1.0", + "@angular-devkit/build-angular": "~13.0.3", + "@angular-eslint/builder": "13.0.0", + "@angular-eslint/eslint-plugin": "13.0.0", + "@angular-eslint/eslint-plugin-template": "13.0.0", + "@angular-eslint/schematics": "13.0.0", + "@angular-eslint/template-parser": "13.0.0", + "@angular/cli": "~13.0.3", + "@angular/compiler-cli": "~13.0.2", "@types/jasmine": "~3.6.0", "@types/node": "^12.11.1", "@typescript-eslint/eslint-plugin": "^5.0.0", "@typescript-eslint/parser": "^5.0.0", "eslint": "^8.0.0", "eslint-plugin-import": "^2.22.1", - "eslint-plugin-jsdoc": "^36.0.0", - "eslint-plugin-prefer-arrow": "latest", + "eslint-plugin-jsdoc": "^37.0.0", + "eslint-plugin-prefer-arrow": "^1.2.3", "jasmine-core": "~3.6.0", "jasmine-spec-reporter": "~5.0.0", - "karma": "~6.1.0", + "karma": "~6.3.9", "karma-chrome-launcher": "~3.1.0", "karma-coverage": "~2.0.3", "karma-jasmine": "~4.0.0", "karma-jasmine-html-reporter": "^1.5.0", "protractor": "~7.0.0", "ts-node": "~8.3.0", - "typescript": "~4.3" + "typescript": "~4.4" } } diff --git a/examples/angular-example/src/app/app.component.spec.ts b/examples/angular-example/src/app/app.component.spec.ts index b5722ff01e..066da48706 100644 --- a/examples/angular-example/src/app/app.component.spec.ts +++ b/examples/angular-example/src/app/app.component.spec.ts @@ -26,6 +26,6 @@ describe('AppComponent', () => { const fixture = TestBed.createComponent(AppComponent) fixture.detectChanges() const compiled = fixture.nativeElement - expect(compiled.querySelector('.content span').textContent).toContain('angular-example app is running!') + expect(compiled.textContent).toContain('Uppy Angular Example') }) }) diff --git a/examples/aws-companion/package.json b/examples/aws-companion/package.json index 73fba7ad32..a4dd24c44d 100644 --- a/examples/aws-companion/package.json +++ b/examples/aws-companion/package.json @@ -11,7 +11,7 @@ "babelify": "^10.0.0", "body-parser": "^1.18.3", "budo": "^11.6.1", - "cookie-parser": "^1.4.4", + "cookie-parser": "^1.4.6", "cors": "^2.8.5", "express": "^4.16.4", "express-session": "^1.15.6", diff --git a/examples/cdn-example/index.html b/examples/cdn-example/index.html index a0ec37a0bf..2c022018f6 100644 --- a/examples/cdn-example/index.html +++ b/examples/cdn-example/index.html @@ -4,11 +4,11 @@