From b3d9ef5cce6934041674700b0c136f2c59c4dc08 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 16 Jan 2026 10:46:30 +0100 Subject: [PATCH 1/8] build(deps-dev): bump @sveltejs/kit from 2.20.7 to 2.49.5 (#6143) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [@sveltejs/kit](https://github.com/sveltejs/kit/tree/HEAD/packages/kit) from 2.20.7 to 2.49.5.
Release notes

Sourced from @​sveltejs/kit's releases.

@​sveltejs/kit@​2.49.5

Patch Changes

@​sveltejs/kit@​2.49.4

Patch Changes

@​sveltejs/kit@​2.49.3

Patch Changes

@​sveltejs/kit@​2.49.2

Patch Changes

@​sveltejs/kit@​2.49.1

Patch Changes

... (truncated)

Changelog

Sourced from @​sveltejs/kit's changelog.

2.49.5

Patch Changes

2.49.4

Patch Changes

2.49.3

Patch Changes

2.49.2

Patch Changes

2.49.1

Patch Changes

... (truncated)

Commits
Maintainer changes

This version was pushed to npm by [GitHub Actions](https://www.npmjs.com/~GitHub Actions), a new releaser for @​sveltejs/kit since your current version.


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@sveltejs/kit&package-manager=npm_and_yarn&previous-version=2.20.7&new-version=2.49.5)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/transloadit/uppy/network/alerts).
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- examples/sveltekit/package.json | 2 +- packages/@uppy/svelte/package.json | 2 +- yarn.lock | 46 ++++++++++++++++++++---------- 3 files changed, 33 insertions(+), 17 deletions(-) diff --git a/examples/sveltekit/package.json b/examples/sveltekit/package.json index 58e7ebb4e..0cba9c803 100644 --- a/examples/sveltekit/package.json +++ b/examples/sveltekit/package.json @@ -23,7 +23,7 @@ }, "devDependencies": { "@sveltejs/adapter-auto": "^4.0.0", - "@sveltejs/kit": "^2.16.0", + "@sveltejs/kit": "^2.49.5", "@sveltejs/vite-plugin-svelte": "^5.0.0", "@tailwindcss/vite": "^4.0.0", "@vitest/browser": "^3.2.4", diff --git a/packages/@uppy/svelte/package.json b/packages/@uppy/svelte/package.json index 08b81a0d0..d9f1e7970 100644 --- a/packages/@uppy/svelte/package.json +++ b/packages/@uppy/svelte/package.json @@ -57,7 +57,7 @@ }, "devDependencies": { "@sveltejs/adapter-auto": "^6.0.0", - "@sveltejs/kit": "^2.20.7", + "@sveltejs/kit": "^2.49.5", "@sveltejs/package": "^2.3.11", "@sveltejs/vite-plugin-svelte": "^5.0.3", "@uppy/core": "workspace:^", diff --git a/yarn.lock b/yarn.lock index 7b68a1235..36159740d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7178,6 +7178,13 @@ __metadata: languageName: node linkType: hard +"@standard-schema/spec@npm:^1.0.0": + version: 1.1.0 + resolution: "@standard-schema/spec@npm:1.1.0" + checksum: 10/a209615c9e8b2ea535d7db0a5f6aa0f962fd4ab73ee86a46c100fb78116964af1f55a27c1794d4801e534a196794223daa25ff5135021e03c7828aa3d95e1763 + languageName: node + linkType: hard + "@sveltejs/acorn-typescript@npm:^1.0.5": version: 1.0.5 resolution: "@sveltejs/acorn-typescript@npm:1.0.5" @@ -7209,15 +7216,17 @@ __metadata: languageName: node linkType: hard -"@sveltejs/kit@npm:^2.16.0, @sveltejs/kit@npm:^2.20.7": - version: 2.20.7 - resolution: "@sveltejs/kit@npm:2.20.7" +"@sveltejs/kit@npm:^2.49.5": + version: 2.49.5 + resolution: "@sveltejs/kit@npm:2.49.5" dependencies: + "@standard-schema/spec": "npm:^1.0.0" + "@sveltejs/acorn-typescript": "npm:^1.0.5" "@types/cookie": "npm:^0.6.0" + acorn: "npm:^8.14.1" cookie: "npm:^0.6.0" - devalue: "npm:^5.1.0" + devalue: "npm:^5.6.2" esm-env: "npm:^1.2.2" - import-meta-resolve: "npm:^4.1.0" kleur: "npm:^4.1.5" magic-string: "npm:^0.30.5" mrmime: "npm:^2.0.0" @@ -7225,12 +7234,19 @@ __metadata: set-cookie-parser: "npm:^2.6.0" sirv: "npm:^3.0.0" peerDependencies: - "@sveltejs/vite-plugin-svelte": ^3.0.0 || ^4.0.0-next.1 || ^5.0.0 + "@opentelemetry/api": ^1.0.0 + "@sveltejs/vite-plugin-svelte": ^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0 svelte: ^4.0.0 || ^5.0.0-next.0 - vite: ^5.0.3 || ^6.0.0 + typescript: ^5.3.3 + vite: ^5.0.3 || ^6.0.0 || ^7.0.0-beta.0 + peerDependenciesMeta: + "@opentelemetry/api": + optional: true + typescript: + optional: true bin: svelte-kit: svelte-kit.js - checksum: 10/7c3d8e176be93b7af08fb6d4c65346301324575cf51654e18b02957c1539fd5ce3b5b907e8eaa4dcacc9d5c8e3b7dbcefa2704bb6f2e1e3ea1664375d667cbd4 + checksum: 10/592f47d7c66dc1a66bde6551813a02d653e9bcbcaa533130c9a010b053b83420857c0093a16c3f255ad80e80922d486c0fb42f96803f73f9bc83bc76f3d17a88 languageName: node linkType: hard @@ -9301,7 +9317,7 @@ __metadata: resolution: "@uppy/svelte@workspace:packages/@uppy/svelte" dependencies: "@sveltejs/adapter-auto": "npm:^6.0.0" - "@sveltejs/kit": "npm:^2.20.7" + "@sveltejs/kit": "npm:^2.49.5" "@sveltejs/package": "npm:^2.3.11" "@sveltejs/vite-plugin-svelte": "npm:^5.0.3" "@uppy/components": "workspace:^" @@ -9994,7 +10010,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.12.1, acorn@npm:^8.14.0, acorn@npm:^8.8.2, acorn@npm:^8.9.0": +"acorn@npm:^8.12.1, acorn@npm:^8.14.0, acorn@npm:^8.14.1, acorn@npm:^8.8.2, acorn@npm:^8.9.0": version: 8.15.0 resolution: "acorn@npm:8.15.0" bin: @@ -12218,10 +12234,10 @@ __metadata: languageName: node linkType: hard -"devalue@npm:^5.1.0": - version: 5.3.2 - resolution: "devalue@npm:5.3.2" - checksum: 10/2e15e9ed6844e86f1d086088c0f51e447e2300ee385ace02acca4691563ca13e5d0f5445603afc52653609078039c9dad69bd8204dadfac0919fe1ef65f08a88 +"devalue@npm:^5.6.2": + version: 5.6.2 + resolution: "devalue@npm:5.6.2" + checksum: 10/734b57d917e45b534007e3b5055c031e4e3fcf3c3a44e1b4177e998f30e077e4d280b59abe0cc0ca9055a18e90266e31f578129e83e105e63e9680998a3c2a8a languageName: node linkType: hard @@ -13308,7 +13324,7 @@ __metadata: resolution: "example-sveltekit@workspace:examples/sveltekit" dependencies: "@sveltejs/adapter-auto": "npm:^4.0.0" - "@sveltejs/kit": "npm:^2.16.0" + "@sveltejs/kit": "npm:^2.49.5" "@sveltejs/vite-plugin-svelte": "npm:^5.0.0" "@tailwindcss/vite": "npm:^4.0.0" "@uppy/core": "workspace:*" From 642c75dd0e4d2107c3401a6b744c5087c892eb23 Mon Sep 17 00:00:00 2001 From: Viktor Mec <58609524+v-mec@users.noreply.github.com> Date: Fri, 16 Jan 2026 10:53:26 +0100 Subject: [PATCH 2/8] Update the cs dropPaste translation keys to match en locale (#6135) This fixes an issue where selecting folders was not possible in the `Dashboard` component in the Czech locale. --- .changeset/bright-tables-kiss.md | 5 +++++ packages/@uppy/locales/src/cs_CZ.ts | 13 +++++++------ 2 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 .changeset/bright-tables-kiss.md diff --git a/.changeset/bright-tables-kiss.md b/.changeset/bright-tables-kiss.md new file mode 100644 index 000000000..1f708416b --- /dev/null +++ b/.changeset/bright-tables-kiss.md @@ -0,0 +1,5 @@ +--- +"@uppy/locales": patch +--- + +Update cs_CZ dropPaste keys to use the correct variables. diff --git a/packages/@uppy/locales/src/cs_CZ.ts b/packages/@uppy/locales/src/cs_CZ.ts index 1fb273afa..9720ad308 100644 --- a/packages/@uppy/locales/src/cs_CZ.ts +++ b/packages/@uppy/locales/src/cs_CZ.ts @@ -85,15 +85,16 @@ cs_CZ.strings = { discardRecordedFile: 'Zahodit nahraný soubor', done: 'Dokončeno', dropHint: 'Přetáhněte soubory sem', - dropPasteBoth: 'Přetáhněte soubory sem, vložte je, nebo %{browse}', - dropPasteFiles: 'Přetáhněte soubory sem, vložte je, nebo %{browse}', - dropPasteFolders: 'Přetáhněte soubory sem, vložte je, nebo %{browse}', + dropPasteBoth: + 'Přetáhněte soubory sem, %{browseFiles}, nebo %{browseFolders}', + dropPasteFiles: 'Přetáhněte soubory sem, nebo %{browseFiles}', + dropPasteFolders: 'Přetáhněte soubory sem, nebo %{browseFolders}', dropPasteImportBoth: - 'Přetáhněte soubory sem, vložte je, %{browse} nebo je importujte', + 'Přetáhněte soubory sem, %{browseFiles}, %{browseFolders}, nebo je importujte z:', dropPasteImportFiles: - 'Přetáhněte soubory sem, vložte je, %{browse} nebo je importujte', + 'Přetáhněte soubory sem, %{browseFiles}, nebo je importujte z:', dropPasteImportFolders: - 'Přetáhněte soubory sem, vložte je, %{browse} nebo je importujte', + 'Přetáhněte soubory sem, %{browseFolders}, nebo je importujte z:', editFile: 'Upravit soubor', editFileWithFilename: 'Upravit soubor %{file}', editImage: 'Upravit obrázek', From 39f360b93bde9cab12d66aabdd85af6470b69f5e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 16 Jan 2026 11:30:02 +0100 Subject: [PATCH 3/8] build(deps): bump actions/download-artifact from 4 to 7 (#6107) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 4 to 7.
Release notes

Sourced from actions/download-artifact's releases.

v7.0.0

v7 - What's new

[!IMPORTANT] actions/download-artifact@v7 now runs on Node.js 24 (runs.using: node24) and requires a minimum Actions Runner version of 2.327.1. If you are using self-hosted runners, ensure they are updated before upgrading.

Node.js 24

This release updates the runtime to Node.js 24. v6 had preliminary support for Node 24, however this action was by default still running on Node.js 20. Now this action by default will run on Node.js 24.

What's Changed

New Contributors

Full Changelog: https://github.com/actions/download-artifact/compare/v6.0.0...v7.0.0

v6.0.0

What's Changed

BREAKING CHANGE: this update supports Node v24.x. This is not a breaking change per-se but we're treating it as such.

New Contributors

Full Changelog: https://github.com/actions/download-artifact/compare/v5...v6.0.0

v5.0.0

What's Changed

v5.0.0

🚨 Breaking Change

This release fixes an inconsistency in path behavior for single artifact downloads by ID. If you're downloading single artifacts by ID, the output path may change.

What Changed

... (truncated)

Commits

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/download-artifact&package-manager=github_actions&previous-version=4&new-version=7)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
--------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Merlijn Vos --- .github/workflows/bundlers.yml | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/.github/workflows/bundlers.yml b/.github/workflows/bundlers.yml index 8b6b8e4bb..0f2035da8 100644 --- a/.github/workflows/bundlers.yml +++ b/.github/workflows/bundlers.yml @@ -86,9 +86,10 @@ jobs: bundler-version: [latest] steps: - name: Download uppy tarball - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v7 with: - path: /tmp/ + name: packages + path: /tmp/packages/ - name: Extract tarball run: tar -xzf /tmp/packages/uppy-${{ github.sha }}.tgz --strip-components 1 @@ -126,9 +127,10 @@ jobs: bundler-version: [latest] steps: - name: Download uppy tarball - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v7 with: - path: /tmp/ + name: packages + path: /tmp/packages/ - name: Extract tarball run: tar -xzf /tmp/packages/uppy-${{ github.sha }}.tgz --strip-components 1 @@ -168,9 +170,10 @@ jobs: bundler-version: [latest] steps: - name: Download uppy tarball - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v7 with: - path: /tmp/ + name: packages + path: /tmp/packages/ - name: Extract tarball run: tar -xzf /tmp/packages/uppy-${{ github.sha }}.tgz --strip-components 1 @@ -198,9 +201,10 @@ jobs: bundler-version: [latest] steps: - name: Download uppy tarball - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v7 with: - path: /tmp/ + name: packages + path: /tmp/packages/ - name: Extract tarball run: tar -xzf /tmp/packages/uppy-${{ github.sha }}.tgz --strip-components 1 @@ -223,9 +227,10 @@ jobs: bundler-version: [latest] steps: - name: Download uppy tarball - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v7 with: - path: /tmp/ + name: packages + path: /tmp/packages/ - name: Extract tarball run: tar -xzf /tmp/packages/uppy-${{ github.sha }}.tgz --strip-components 1 From ce390815121f1a0616d92271108498c7ffe5f181 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 17 Jan 2026 14:41:06 +0100 Subject: [PATCH 4/8] build(deps-dev): bump tar from 6.2.1 to 7.5.3 (#6146) Bumps [tar](https://github.com/isaacs/node-tar) from 6.2.1 to 7.5.3.
Changelog

Sourced from tar's changelog.

Changelog

7.5

  • Added zstd compression support.

7.4

  • Deprecate onentry in favor of onReadEntry for clarity.

7.3

  • Add onWriteEntry option

7.2

  • DRY the command definitions into a single makeCommand method, and update the type signatures to more appropriately infer the return type from the options and arguments provided.

7.1

  • Update minipass to v7.1.0
  • Update the type definitions of write() and end() methods on Unpack and Parser classes to be compatible with the NodeJS.WritableStream type in the latest versions of @types/node.

7.0

  • Drop support for node <18
  • Rewrite in TypeScript, provide ESM and CommonJS hybrid interface
  • Add tree-shake friendly exports, like import('tar/create') and import('tar/read-entry') to get individual functions or classes.
  • Add chmod option that defaults to false, and deprecate noChmod. That is, reverse the default option regarding explicitly setting file system modes to match tar entry settings.
  • Add processUmask option to avoid having to call process.umask() when chmod: true (or noChmod: false) is set.

6.2

  • Add support for brotli compression
  • Add maxDepth option to prevent extraction into excessively deep folders.

... (truncated)

Commits

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=tar&package-manager=npm_and_yarn&previous-version=6.2.1&new-version=7.5.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/transloadit/uppy/network/alerts).
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- packages/uppy/package.json | 2 +- yarn.lock | 26 ++++++++++++++++++++++++-- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/packages/uppy/package.json b/packages/uppy/package.json index bc03685a5..6357bc3a2 100644 --- a/packages/uppy/package.json +++ b/packages/uppy/package.json @@ -92,7 +92,7 @@ "postcss": "^8.5.6", "postcss-cli": "^11.0.1", "sass": "^1.89.2", - "tar": "^6.1.0", + "tar": "^7.5.3", "typescript": "^5.8.3" } } diff --git a/yarn.lock b/yarn.lock index 36159740d..5c57552f2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17357,6 +17357,15 @@ __metadata: languageName: node linkType: hard +"minizlib@npm:^3.1.0": + version: 3.1.0 + resolution: "minizlib@npm:3.1.0" + dependencies: + minipass: "npm:^7.1.2" + checksum: 10/f47365cc2cb7f078cbe7e046eb52655e2e7e97f8c0a9a674f4da60d94fb0624edfcec9b5db32e8ba5a99a5f036f595680ae6fe02a262beaa73026e505cc52f99 + languageName: node + linkType: hard + "mkdirp@npm:^0.5.5, mkdirp@npm:^0.5.6": version: 0.5.6 resolution: "mkdirp@npm:0.5.6" @@ -21783,7 +21792,7 @@ __metadata: languageName: node linkType: hard -"tar@npm:^6.1.0, tar@npm:^6.1.11, tar@npm:^6.1.2": +"tar@npm:^6.1.11, tar@npm:^6.1.2": version: 6.2.1 resolution: "tar@npm:6.2.1" dependencies: @@ -21811,6 +21820,19 @@ __metadata: languageName: node linkType: hard +"tar@npm:^7.5.3": + version: 7.5.3 + resolution: "tar@npm:7.5.3" + dependencies: + "@isaacs/fs-minipass": "npm:^4.0.0" + chownr: "npm:^3.0.0" + minipass: "npm:^7.1.2" + minizlib: "npm:^3.1.0" + yallist: "npm:^5.0.0" + checksum: 10/106b85ef799eb9c2a5d91278b14cdd9486551a5d889a7d88f719513dd7e04b7bd77417df27d3fcb43ef54dda5acc15730e627259164ce245dd968d86fd6ee517 + languageName: node + linkType: hard + "tdigest@npm:^0.1.1": version: 0.1.2 resolution: "tdigest@npm:0.1.2" @@ -22598,7 +22620,7 @@ __metadata: postcss: "npm:^8.5.6" postcss-cli: "npm:^11.0.1" sass: "npm:^1.89.2" - tar: "npm:^6.1.0" + tar: "npm:^7.5.3" typescript: "npm:^5.8.3" languageName: unknown linkType: soft From 8912bafaf41123c1542ff0a061579e316f40e0b2 Mon Sep 17 00:00:00 2001 From: Merlijn Vos Date: Mon, 19 Jan 2026 04:20:27 +0100 Subject: [PATCH 5/8] Do not trigger Companion edge deploy on yarn.lock (#6134) This triggers way too often, which is not needed. Especially pushing to DockerHub is very unnecessary whenever `yarn.lock` changes. --- .github/workflows/companion-deploy.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/companion-deploy.yml b/.github/workflows/companion-deploy.yml index fdd4a2582..40fab2d0f 100644 --- a/.github/workflows/companion-deploy.yml +++ b/.github/workflows/companion-deploy.yml @@ -7,7 +7,6 @@ on: push: branches: ['main'] paths: - - yarn.lock - 'packages/@uppy/companion/**' - '.github/workflows/companion-deploy.yml' From fa23832f6a77be85b3bbb8a2856adbc8813f19cc Mon Sep 17 00:00:00 2001 From: Merlijn Vos Date: Mon, 19 Jan 2026 09:59:42 +0100 Subject: [PATCH 6/8] @uppy/vue: support kebab-case props in generated components (#6125) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary - Fix Vue components to work with kebab-case props (`:edit-file` instead of `:editFile`) - Update `migrate.mjs` to parse prop names from TypeScript source files and generate explicit `props` arrays ## Problem The generated Vue components didn't work correctly with Vue's standard kebab-case prop convention: ```vue ``` ## Root Cause The original Vue template used `attrs` to pass props to Preact: ```ts setup(props, { attrs }) { preactRender(preactH(PreactComponent, { ...(attrs as Props), // attrs preserves kebab-case! ctx, }), container) } ``` When using `:edit-file` in a Vue template, Vue passes `attrs['edit-file']` (kebab-case preserved), but Preact expects `editFile` (camelCase). ## Solution Generate Vue components with explicit `props` declarations: ```ts defineComponent({ props: ['editFile', 'columns', 'imageThumbnail'], setup(props) { preactRender(preactH(PreactComponent, { ...props, // Vue already converted kebab → camelCase ctx, }), container) } }) ``` When Vue components declare their props, Vue automatically converts kebab-case template usage to camelCase in the `props` object. This is standard Vue behavior. ## Why Simpler Alternatives Don't Work ### "Just use `props` instead of `attrs`" Without a `props` declaration, Vue doesn't know which attributes are props. The `props` object will be empty and everything goes to `attrs`: ```ts // Without props declaration defineComponent({ setup(props, { attrs }) { // props = {} (empty!) // attrs = { 'edit-file': fn } (kebab-case preserved) } }) ``` ### "Accept all props dynamically" Vue doesn't have a "accept all props and convert casing" option. You must explicitly declare which props you expect for Vue to handle the conversion. ### "Just document to use camelCase" This works but violates Vue conventions. Every Vue developer expects `:edit-file` to work. --------- Co-authored-by: Claude Opus 4.5 Co-authored-by: Prakash --- .changeset/clean-monkeys-smoke.md | 6 ++ packages/@uppy/components/migrate.mjs | 58 +++++++++++++++---- .../vue/src/headless/generated/Dropzone.ts | 15 +++-- .../vue/src/headless/generated/FilesGrid.ts | 15 +++-- .../vue/src/headless/generated/FilesList.ts | 15 +++-- .../src/headless/generated/ProviderIcon.ts | 15 +++-- .../vue/src/headless/generated/Thumbnail.ts | 15 +++-- .../src/headless/generated/UploadButton.ts | 15 +++-- 8 files changed, 96 insertions(+), 58 deletions(-) create mode 100644 .changeset/clean-monkeys-smoke.md diff --git a/.changeset/clean-monkeys-smoke.md b/.changeset/clean-monkeys-smoke.md new file mode 100644 index 000000000..f51d946e5 --- /dev/null +++ b/.changeset/clean-monkeys-smoke.md @@ -0,0 +1,6 @@ +--- +"@uppy/components": patch +"@uppy/vue": patch +--- + +- Fix Vue components to work with kebab-case props (`:edit-file` instead of `:editFile`) diff --git a/packages/@uppy/components/migrate.mjs b/packages/@uppy/components/migrate.mjs index 0b5f443a8..7f79361d4 100644 --- a/packages/@uppy/components/migrate.mjs +++ b/packages/@uppy/components/migrate.mjs @@ -25,6 +25,37 @@ const SVELTE_DIR = path.join( 'packages/@uppy/svelte/src/lib/components/headless/generated', ) +/** + * Parse prop names from a TypeScript component file + * Extracts property names from the Props type definition, excluding 'ctx' + */ +async function parsePropsFromFile(filePath) { + const content = await fs.readFile(filePath, 'utf-8') + + // Match the Props type definition: export type ComponentNameProps = { ... } + const propsMatch = content.match( + /export\s+type\s+\w+Props\s*=\s*\{([^}]+)\}/s, + ) + if (!propsMatch) { + return [] + } + + const propsBlock = propsMatch[1] + + // Extract property names (handle optional ? and required properties) + const propNames = [] + const propRegex = /^\s*(\w+)\??:/gm + for (const match of propsBlock.matchAll(propRegex)) { + const propName = match[1] + // Exclude 'ctx' as it's provided by the context + if (propName !== 'ctx') { + propNames.push(propName) + } + } + + return propNames +} + // Templates const REACT_TEMPLATE = `\ // This file was generated by build-components.mjs @@ -60,18 +91,18 @@ export default function %%ComponentName%%(props: Omit<%%PropsTypeName%%, 'ctx'>) const VUE_TEMPLATE = `\ // This file was generated by build-components.mjs // ANY EDITS WILL BE OVERWRITTEN! -import { defineComponent, ref, watch, onMounted, h } from 'vue' +import { defineComponent, h, onMounted, ref, watch } from 'vue' import { %%ComponentName%% as %%PreactComponentName%%, type %%PropsTypeName%%, } from '@uppy/components' import { h as preactH, render as preactRender } from 'preact' -import { shallowEqualObjects } from 'shallow-equal' import { useUppyContext } from '../useUppyContext.js' -export default defineComponent>({ +export default defineComponent({ name: '%%ComponentName%%', - setup(props, { attrs }) { + props: %%PropsArray%%, + setup(props) { const containerRef = ref(null) const ctx = useUppyContext() @@ -79,7 +110,7 @@ export default defineComponent>({ if (containerRef.value) { preactRender( preactH(%%PreactComponentName%%, { - ...(attrs as %%PropsTypeName%%), + ...props, ctx, } satisfies %%PropsTypeName%%), containerRef.value, @@ -97,11 +128,10 @@ export default defineComponent>({ watch( () => props, - (current, old) => { - if (!shallowEqualObjects(current, old)) { - render%%ComponentName%%() - } + () => { + render%%ComponentName%%() }, + { deep: true }, ) return () => h('div', { ref: containerRef }) @@ -174,6 +204,11 @@ try { const componentName = path.basename(file, '.tsx') const propsTypeName = `${componentName}Props` const preactComponentName = `Preact${componentName}` + const filePath = path.join(COMPONENTS_DIR, file) + + // Parse props from the source file + const propNames = await parsePropsFromFile(filePath) + const propsArray = JSON.stringify(propNames) // Generate React wrapper const reactContent = REACT_TEMPLATE.replace( @@ -190,6 +225,7 @@ try { ) .replace(/%%PreactComponentName%%/g, preactComponentName) .replace(/%%PropsTypeName%%/g, propsTypeName) + .replace(/%%PropsArray%%/g, propsArray) // Generate Svelte wrapper const svelteContent = SVELTE_TEMPLATE.replace( @@ -213,7 +249,9 @@ try { vueComponents.push(componentName) svelteComponents.push(componentName) - console.log(`√ ${componentName}`) + console.log( + `√ ${componentName} (props: ${propNames.join(', ') || 'none'})`, + ) } catch (error) { console.error(`Error processing component ${file}:`, error) } diff --git a/packages/@uppy/vue/src/headless/generated/Dropzone.ts b/packages/@uppy/vue/src/headless/generated/Dropzone.ts index 1816accb0..41bc3dfec 100644 --- a/packages/@uppy/vue/src/headless/generated/Dropzone.ts +++ b/packages/@uppy/vue/src/headless/generated/Dropzone.ts @@ -6,13 +6,13 @@ import { Dropzone as PreactDropzone, } from '@uppy/components' import { h as preactH, render as preactRender } from 'preact' -import { shallowEqualObjects } from 'shallow-equal' import { defineComponent, h, onMounted, ref, watch } from 'vue' import { useUppyContext } from '../useUppyContext.js' -export default defineComponent>({ +export default defineComponent({ name: 'Dropzone', - setup(props, { attrs }) { + props: ['width', 'height', 'note', 'noClick'], + setup(props) { const containerRef = ref(null) const ctx = useUppyContext() @@ -20,7 +20,7 @@ export default defineComponent>({ if (containerRef.value) { preactRender( preactH(PreactDropzone, { - ...(attrs as DropzoneProps), + ...props, ctx, } satisfies DropzoneProps), containerRef.value, @@ -38,11 +38,10 @@ export default defineComponent>({ watch( () => props, - (current, old) => { - if (!shallowEqualObjects(current, old)) { - renderDropzone() - } + () => { + renderDropzone() }, + { deep: true }, ) return () => h('div', { ref: containerRef }) diff --git a/packages/@uppy/vue/src/headless/generated/FilesGrid.ts b/packages/@uppy/vue/src/headless/generated/FilesGrid.ts index 409c7c78c..389ac52a2 100644 --- a/packages/@uppy/vue/src/headless/generated/FilesGrid.ts +++ b/packages/@uppy/vue/src/headless/generated/FilesGrid.ts @@ -6,13 +6,13 @@ import { FilesGrid as PreactFilesGrid, } from '@uppy/components' import { h as preactH, render as preactRender } from 'preact' -import { shallowEqualObjects } from 'shallow-equal' import { defineComponent, h, onMounted, ref, watch } from 'vue' import { useUppyContext } from '../useUppyContext.js' -export default defineComponent>({ +export default defineComponent({ name: 'FilesGrid', - setup(props, { attrs }) { + props: ['editFile', 'columns', 'imageThumbnail'], + setup(props) { const containerRef = ref(null) const ctx = useUppyContext() @@ -20,7 +20,7 @@ export default defineComponent>({ if (containerRef.value) { preactRender( preactH(PreactFilesGrid, { - ...(attrs as FilesGridProps), + ...props, ctx, } satisfies FilesGridProps), containerRef.value, @@ -38,11 +38,10 @@ export default defineComponent>({ watch( () => props, - (current, old) => { - if (!shallowEqualObjects(current, old)) { - renderFilesGrid() - } + () => { + renderFilesGrid() }, + { deep: true }, ) return () => h('div', { ref: containerRef }) diff --git a/packages/@uppy/vue/src/headless/generated/FilesList.ts b/packages/@uppy/vue/src/headless/generated/FilesList.ts index 19c11af08..c91b24b4c 100644 --- a/packages/@uppy/vue/src/headless/generated/FilesList.ts +++ b/packages/@uppy/vue/src/headless/generated/FilesList.ts @@ -6,13 +6,13 @@ import { FilesList as PreactFilesList, } from '@uppy/components' import { h as preactH, render as preactRender } from 'preact' -import { shallowEqualObjects } from 'shallow-equal' import { defineComponent, h, onMounted, ref, watch } from 'vue' import { useUppyContext } from '../useUppyContext.js' -export default defineComponent>({ +export default defineComponent({ name: 'FilesList', - setup(props, { attrs }) { + props: ['editFile', 'imageThumbnail'], + setup(props) { const containerRef = ref(null) const ctx = useUppyContext() @@ -20,7 +20,7 @@ export default defineComponent>({ if (containerRef.value) { preactRender( preactH(PreactFilesList, { - ...(attrs as FilesListProps), + ...props, ctx, } satisfies FilesListProps), containerRef.value, @@ -38,11 +38,10 @@ export default defineComponent>({ watch( () => props, - (current, old) => { - if (!shallowEqualObjects(current, old)) { - renderFilesList() - } + () => { + renderFilesList() }, + { deep: true }, ) return () => h('div', { ref: containerRef }) diff --git a/packages/@uppy/vue/src/headless/generated/ProviderIcon.ts b/packages/@uppy/vue/src/headless/generated/ProviderIcon.ts index 5a9d991a4..b7525d154 100644 --- a/packages/@uppy/vue/src/headless/generated/ProviderIcon.ts +++ b/packages/@uppy/vue/src/headless/generated/ProviderIcon.ts @@ -6,13 +6,13 @@ import { type ProviderIconProps, } from '@uppy/components' import { h as preactH, render as preactRender } from 'preact' -import { shallowEqualObjects } from 'shallow-equal' import { defineComponent, h, onMounted, ref, watch } from 'vue' import { useUppyContext } from '../useUppyContext.js' -export default defineComponent>({ +export default defineComponent({ name: 'ProviderIcon', - setup(props, { attrs }) { + props: ['provider', 'fill'], + setup(props) { const containerRef = ref(null) const ctx = useUppyContext() @@ -20,7 +20,7 @@ export default defineComponent>({ if (containerRef.value) { preactRender( preactH(PreactProviderIcon, { - ...(attrs as ProviderIconProps), + ...props, ctx, } satisfies ProviderIconProps), containerRef.value, @@ -38,11 +38,10 @@ export default defineComponent>({ watch( () => props, - (current, old) => { - if (!shallowEqualObjects(current, old)) { - renderProviderIcon() - } + () => { + renderProviderIcon() }, + { deep: true }, ) return () => h('div', { ref: containerRef }) diff --git a/packages/@uppy/vue/src/headless/generated/Thumbnail.ts b/packages/@uppy/vue/src/headless/generated/Thumbnail.ts index ae749a1a7..8421facb7 100644 --- a/packages/@uppy/vue/src/headless/generated/Thumbnail.ts +++ b/packages/@uppy/vue/src/headless/generated/Thumbnail.ts @@ -6,13 +6,13 @@ import { type ThumbnailProps, } from '@uppy/components' import { h as preactH, render as preactRender } from 'preact' -import { shallowEqualObjects } from 'shallow-equal' import { defineComponent, h, onMounted, ref, watch } from 'vue' import { useUppyContext } from '../useUppyContext.js' -export default defineComponent>({ +export default defineComponent({ name: 'Thumbnail', - setup(props, { attrs }) { + props: ['file', 'width', 'height', 'images'], + setup(props) { const containerRef = ref(null) const ctx = useUppyContext() @@ -20,7 +20,7 @@ export default defineComponent>({ if (containerRef.value) { preactRender( preactH(PreactThumbnail, { - ...(attrs as ThumbnailProps), + ...props, ctx, } satisfies ThumbnailProps), containerRef.value, @@ -38,11 +38,10 @@ export default defineComponent>({ watch( () => props, - (current, old) => { - if (!shallowEqualObjects(current, old)) { - renderThumbnail() - } + () => { + renderThumbnail() }, + { deep: true }, ) return () => h('div', { ref: containerRef }) diff --git a/packages/@uppy/vue/src/headless/generated/UploadButton.ts b/packages/@uppy/vue/src/headless/generated/UploadButton.ts index ea72316a2..f2ea9e4d4 100644 --- a/packages/@uppy/vue/src/headless/generated/UploadButton.ts +++ b/packages/@uppy/vue/src/headless/generated/UploadButton.ts @@ -6,13 +6,13 @@ import { type UploadButtonProps, } from '@uppy/components' import { h as preactH, render as preactRender } from 'preact' -import { shallowEqualObjects } from 'shallow-equal' import { defineComponent, h, onMounted, ref, watch } from 'vue' import { useUppyContext } from '../useUppyContext.js' -export default defineComponent>({ +export default defineComponent({ name: 'UploadButton', - setup(props, { attrs }) { + props: [], + setup(props) { const containerRef = ref(null) const ctx = useUppyContext() @@ -20,7 +20,7 @@ export default defineComponent>({ if (containerRef.value) { preactRender( preactH(PreactUploadButton, { - ...(attrs as UploadButtonProps), + ...props, ctx, } satisfies UploadButtonProps), containerRef.value, @@ -38,11 +38,10 @@ export default defineComponent>({ watch( () => props, - (current, old) => { - if (!shallowEqualObjects(current, old)) { - renderUploadButton() - } + () => { + renderUploadButton() }, + { deep: true }, ) return () => h('div', { ref: containerRef }) From efda84cc23fdddab4603001f06e71b008739f3db Mon Sep 17 00:00:00 2001 From: Merlijn Vos Date: Mon, 19 Jan 2026 11:18:43 +0100 Subject: [PATCH 7/8] @uppy/transloadit: use lighter types package (#6147) We don't need to drag in the entire SDK just for types. --- .changeset/giant-berries-warn.md | 5 + packages/@uppy/transloadit/package.json | 4 +- packages/@uppy/transloadit/src/index.ts | 14 +-- yarn.lock | 119 ++++-------------------- 4 files changed, 33 insertions(+), 109 deletions(-) create mode 100644 .changeset/giant-berries-warn.md diff --git a/.changeset/giant-berries-warn.md b/.changeset/giant-berries-warn.md new file mode 100644 index 000000000..35365bc1c --- /dev/null +++ b/.changeset/giant-berries-warn.md @@ -0,0 +1,5 @@ +--- +"@uppy/transloadit": minor +--- + +Migrate from 'transloadit' to '@transloadit/types' to get the types. No need to drag in the entire SDK. diff --git a/packages/@uppy/transloadit/package.json b/packages/@uppy/transloadit/package.json index 78e842609..aed008064 100644 --- a/packages/@uppy/transloadit/package.json +++ b/packages/@uppy/transloadit/package.json @@ -42,10 +42,10 @@ "./package.json": "./package.json" }, "dependencies": { + "@transloadit/types": "^4.1.3", "@uppy/tus": "workspace:^", "@uppy/utils": "workspace:^", - "component-emitter": "^2.0.0", - "transloadit": "^4.0.2" + "component-emitter": "^2.0.0" }, "peerDependencies": { "@uppy/core": "workspace:^" diff --git a/packages/@uppy/transloadit/src/index.ts b/packages/@uppy/transloadit/src/index.ts index 9a628570a..aa83d414e 100644 --- a/packages/@uppy/transloadit/src/index.ts +++ b/packages/@uppy/transloadit/src/index.ts @@ -1,3 +1,9 @@ +import type { + AssemblyInstructionsInput, + AssemblyStatus, + AssemblyStatusResult, + AssemblyStatusUpload, +} from '@transloadit/types' import type { Body, DefinePluginOpts, @@ -14,12 +20,6 @@ import { RateLimitedQueue, type RemoteUppyFile, } from '@uppy/utils' -import type { - AssemblyStatus, - AssemblyStatusResult, - AssemblyStatusUpload, - CreateAssemblyParams, -} from 'transloadit' import packageJson from '../package.json' with { type: 'json' } import Assembly from './Assembly.js' import AssemblyWatcher from './AssemblyWatcher.js' @@ -29,7 +29,7 @@ import locale from './locale.js' export type AssemblyResponse = AssemblyStatus export type AssemblyFile = AssemblyStatusUpload export type AssemblyResult = AssemblyStatusResult & { localId: string | null } -export type AssemblyParameters = CreateAssemblyParams +export type AssemblyParameters = AssemblyInstructionsInput export interface AssemblyOptions { params?: AssemblyParameters | string | null diff --git a/yarn.lock b/yarn.lock index 5c57552f2..e6c576952 100644 --- a/yarn.lock +++ b/yarn.lock @@ -626,7 +626,7 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/client-s3@npm:^3.338.0, @aws-sdk/client-s3@npm:^3.362.0, @aws-sdk/client-s3@npm:^3.891.0": +"@aws-sdk/client-s3@npm:^3.338.0, @aws-sdk/client-s3@npm:^3.362.0": version: 3.896.0 resolution: "@aws-sdk/client-s3@npm:3.896.0" dependencies: @@ -1540,7 +1540,7 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/s3-request-presigner@npm:^3.338.0, @aws-sdk/s3-request-presigner@npm:^3.362.0, @aws-sdk/s3-request-presigner@npm:^3.891.0": +"@aws-sdk/s3-request-presigner@npm:^3.338.0, @aws-sdk/s3-request-presigner@npm:^3.362.0": version: 3.896.0 resolution: "@aws-sdk/s3-request-presigner@npm:3.896.0" dependencies: @@ -5978,13 +5978,6 @@ __metadata: languageName: node linkType: hard -"@sindresorhus/is@npm:^7.0.1": - version: 7.1.0 - resolution: "@sindresorhus/is@npm:7.1.0" - checksum: 10/f3afa7d786f83ad32a7d778c549231dde0dae51dcf510004271f7cb66c4d4feaa6470cf0e669a29260b07790f8a1d17df02cc6982da4526c7bd313649fbb3fa3 - languageName: node - linkType: hard - "@sindresorhus/merge-streams@npm:^2.1.0": version: 2.3.0 resolution: "@sindresorhus/merge-streams@npm:2.3.0" @@ -7887,6 +7880,13 @@ __metadata: languageName: node linkType: hard +"@transloadit/types@npm:^4.1.3": + version: 4.1.3 + resolution: "@transloadit/types@npm:4.1.3" + checksum: 10/449d00a1ce6ecec7c5ae310a57bc5c76b5fb6fb745373d1693ad0383048d4c53e576a6281cc38c750f7f5c999b4b50e302b0292d71427d08bc76a3e6db4312a1 + languageName: node + linkType: hard + "@trysound/sax@npm:0.2.0": version: 0.2.0 resolution: "@trysound/sax@npm:0.2.0" @@ -8231,7 +8231,7 @@ __metadata: languageName: node linkType: hard -"@types/http-cache-semantics@npm:^4.0.2, @types/http-cache-semantics@npm:^4.0.4": +"@types/http-cache-semantics@npm:^4.0.2": version: 4.0.4 resolution: "@types/http-cache-semantics@npm:4.0.4" checksum: 10/a59566cff646025a5de396d6b3f44a39ab6a74f2ed8150692e0f31cc52f3661a68b04afe3166ebe0d566bd3259cb18522f46e949576d5204781cd6452b7fe0c5 @@ -9366,13 +9366,13 @@ __metadata: version: 0.0.0-use.local resolution: "@uppy/transloadit@workspace:packages/@uppy/transloadit" dependencies: + "@transloadit/types": "npm:^4.1.3" "@uppy/core": "workspace:^" "@uppy/tus": "workspace:^" "@uppy/utils": "workspace:^" component-emitter: "npm:^2.0.0" jsdom: "npm:^26.1.0" msw: "npm:^2.10.4" - transloadit: "npm:^4.0.2" typescript: "npm:^5.8.3" vitest: "npm:^3.2.4" whatwg-fetch: "npm:^3.6.2" @@ -10897,21 +10897,6 @@ __metadata: languageName: node linkType: hard -"cacheable-request@npm:^12.0.1": - version: 12.0.1 - resolution: "cacheable-request@npm:12.0.1" - dependencies: - "@types/http-cache-semantics": "npm:^4.0.4" - get-stream: "npm:^9.0.1" - http-cache-semantics: "npm:^4.1.1" - keyv: "npm:^4.5.4" - mimic-response: "npm:^4.0.0" - normalize-url: "npm:^8.0.1" - responselike: "npm:^3.0.0" - checksum: 10/91ca6f3cdcbec3309032b96ba8e94e9d3978ab2e9ee048d75b32acf8a0f06c4cd4739317a39ce621469130f838b06713c1333d35b212e87633c4812d7f18b17f - languageName: node - linkType: hard - "call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2": version: 1.0.2 resolution: "call-bind-apply-helpers@npm:1.0.2" @@ -11992,7 +11977,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4, debug@npm:^4.3.6, debug@npm:^4.3.7, debug@npm:^4.4.0, debug@npm:^4.4.1, debug@npm:^4.4.3": +"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4, debug@npm:^4.3.6, debug@npm:^4.3.7, debug@npm:^4.4.0, debug@npm:^4.4.1": version: 4.4.3 resolution: "debug@npm:4.4.3" dependencies: @@ -13947,13 +13932,6 @@ __metadata: languageName: node linkType: hard -"form-data-encoder@npm:^4.0.2": - version: 4.1.0 - resolution: "form-data-encoder@npm:4.1.0" - checksum: 10/a3f5a2f50d8832b9d39a36acce04ac388290982a944d0a8aac9735a50d1fb3276b1e40e3a9bce9eeb8bb17f6ab6f91a5ec1d65c6ee2603d83f1b9caad6b7ded2 - languageName: node - linkType: hard - "form-data@npm:^2.5.0": version: 2.5.5 resolution: "form-data@npm:2.5.5" @@ -13968,7 +13946,7 @@ __metadata: languageName: node linkType: hard -"form-data@npm:^4.0.0, form-data@npm:^4.0.4": +"form-data@npm:^4.0.0": version: 4.0.4 resolution: "form-data@npm:4.0.4" dependencies: @@ -14258,7 +14236,7 @@ __metadata: languageName: node linkType: hard -"get-stream@npm:^9.0.0, get-stream@npm:^9.0.1": +"get-stream@npm:^9.0.0": version: 9.0.1 resolution: "get-stream@npm:9.0.1" dependencies: @@ -14442,25 +14420,6 @@ __metadata: languageName: node linkType: hard -"got@npm:14.4.9": - version: 14.4.9 - resolution: "got@npm:14.4.9" - dependencies: - "@sindresorhus/is": "npm:^7.0.1" - "@szmarczak/http-timer": "npm:^5.0.1" - cacheable-lookup: "npm:^7.0.0" - cacheable-request: "npm:^12.0.1" - decompress-response: "npm:^6.0.0" - form-data-encoder: "npm:^4.0.2" - http2-wrapper: "npm:^2.2.1" - lowercase-keys: "npm:^3.0.0" - p-cancelable: "npm:^4.0.1" - responselike: "npm:^3.0.0" - type-fest: "npm:^4.26.1" - checksum: 10/e741b851467ded07d605a2a8687d24febda221b82f311fa563197ae5edf1e4d8ce0c97fa794975ba97afbc6b4d016a58e9b5d674dde95c0462d02b98992b85d2 - languageName: node - linkType: hard - "got@npm:^13.0.0": version: 13.0.0 resolution: "got@npm:13.0.0" @@ -14860,7 +14819,7 @@ __metadata: languageName: node linkType: hard -"http2-wrapper@npm:^2.1.10, http2-wrapper@npm:^2.2.1": +"http2-wrapper@npm:^2.1.10": version: 2.2.1 resolution: "http2-wrapper@npm:2.2.1" dependencies: @@ -15100,13 +15059,6 @@ __metadata: languageName: node linkType: hard -"into-stream@npm:^9.0.0": - version: 9.0.0 - resolution: "into-stream@npm:9.0.0" - checksum: 10/9383945254267e4eb91d5ad4217d21e308490df38ed0173485a315ca5a793725abddbf2e500b8013b8143111d6472c29b68d80889ee06ebe79718dbb639f1ca6 - languageName: node - linkType: hard - "ioredis@npm:^5.3.2, ioredis@npm:^5.4.1": version: 5.7.0 resolution: "ioredis@npm:5.7.0" @@ -16083,7 +16035,7 @@ __metadata: languageName: node linkType: hard -"keyv@npm:^4.5.3, keyv@npm:^4.5.4": +"keyv@npm:^4.5.3": version: 4.5.4 resolution: "keyv@npm:4.5.4" dependencies: @@ -17997,7 +17949,7 @@ __metadata: languageName: node linkType: hard -"normalize-url@npm:^8.0.0, normalize-url@npm:^8.0.1": +"normalize-url@npm:^8.0.0": version: 8.1.0 resolution: "normalize-url@npm:8.1.0" checksum: 10/59b765bfe7d1768105d23a9f80716cdf1046a50a618af43eeba5e116475ff8b1a9b3e023e9c534903be436df4dac2fb9c93822cad3809fe689378945662bc8c8 @@ -18417,13 +18369,6 @@ __metadata: languageName: node linkType: hard -"p-cancelable@npm:^4.0.1": - version: 4.0.1 - resolution: "p-cancelable@npm:4.0.1" - checksum: 10/64de7b0be4c8bacc006488e0e90aa66fbcceb4da4f6fb84584573145f015f9650fe6ac26470897b3e82a3b528f6c60ea276b84cc315e35c45e9f12dec062a295 - languageName: node - linkType: hard - "p-filter@npm:^2.1.0": version: 2.1.0 resolution: "p-filter@npm:2.1.0" @@ -22054,25 +21999,6 @@ __metadata: languageName: node linkType: hard -"transloadit@npm:^4.0.2": - version: 4.0.2 - resolution: "transloadit@npm:4.0.2" - dependencies: - "@aws-sdk/client-s3": "npm:^3.891.0" - "@aws-sdk/s3-request-presigner": "npm:^3.891.0" - debug: "npm:^4.4.3" - form-data: "npm:^4.0.4" - got: "npm:14.4.9" - into-stream: "npm:^9.0.0" - is-stream: "npm:^4.0.1" - p-map: "npm:^7.0.3" - tus-js-client: "npm:^4.3.1" - type-fest: "npm:^4.41.0" - zod: "npm:3.25.76" - checksum: 10/96ce22cd2eb27c60d8b4db27be3bcf3ebda775fac7b00fccad8d4921c18ef649114a468a8042667aa6e9bd71a1036531091bfcd24c88e41c8caf02cd84625432 - languageName: node - linkType: hard - "tree-dump@npm:^1.0.1": version: 1.0.1 resolution: "tree-dump@npm:1.0.1" @@ -22205,7 +22131,7 @@ __metadata: languageName: node linkType: hard -"tus-js-client@npm:^4.1.0, tus-js-client@npm:^4.2.3, tus-js-client@npm:^4.3.1": +"tus-js-client@npm:^4.1.0, tus-js-client@npm:^4.2.3": version: 4.3.1 resolution: "tus-js-client@npm:4.3.1" dependencies: @@ -22250,7 +22176,7 @@ __metadata: languageName: node linkType: hard -"type-fest@npm:^4.26.1, type-fest@npm:^4.41.0": +"type-fest@npm:^4.26.1": version: 4.41.0 resolution: "type-fest@npm:4.41.0" checksum: 10/617ace794ac0893c2986912d28b3065ad1afb484cad59297835a0807dc63286c39e8675d65f7de08fafa339afcb8fe06a36e9a188b9857756ae1e92ee8bda212 @@ -23704,13 +23630,6 @@ __metadata: languageName: node linkType: hard -"zod@npm:3.25.76": - version: 3.25.76 - resolution: "zod@npm:3.25.76" - checksum: 10/f0c963ec40cd96858451d1690404d603d36507c1fc9682f2dae59ab38b578687d542708a7fdbf645f77926f78c9ed558f57c3d3aa226c285f798df0c4da16995 - languageName: node - linkType: hard - "zone.js@npm:~0.15.0": version: 0.15.0 resolution: "zone.js@npm:0.15.0" From 54a46db340a49e685e729f29df1cac744b9a0a51 Mon Sep 17 00:00:00 2001 From: Merlijn Vos Date: Mon, 19 Jan 2026 11:29:28 +0100 Subject: [PATCH 8/8] @uppy/tus: fix Node.js support (#6145) Fixes #6119 --- .changeset/dry-readers-itch.md | 5 +++++ packages/@uppy/tus/src/index.ts | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 .changeset/dry-readers-itch.md diff --git a/.changeset/dry-readers-itch.md b/.changeset/dry-readers-itch.md new file mode 100644 index 000000000..69b5600fe --- /dev/null +++ b/.changeset/dry-readers-itch.md @@ -0,0 +1,5 @@ +--- +"@uppy/tus": patch +--- + +Fix Node.js support by conditionally setting a property which does not exist in Node.js instead of crashing. diff --git a/packages/@uppy/tus/src/index.ts b/packages/@uppy/tus/src/index.ts index afd30f756..95cf1bb19 100644 --- a/packages/@uppy/tus/src/index.ts +++ b/packages/@uppy/tus/src/index.ts @@ -251,7 +251,9 @@ export default class Tus extends BasePlugin< uploadOptions.onBeforeRequest = async (req) => { const xhr = req.getUnderlyingObject() - xhr.withCredentials = !!opts.withCredentials + if (xhr) { + xhr.withCredentials = !!opts.withCredentials + } let userProvidedPromise: Promise | void if (typeof onBeforeRequest === 'function') {