Fixed bug in Dutch where fileManagerSelectionType would not work anymore
because {browse} was used instead of {browseFiles} and {browseFolders} +
Reviewed translations
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> Refines Dutch locale with corrected translations, adds/updates strings
(including proper `browseFiles`/`browseFolders` placeholders), and
prepares a patch release.
>
> - **Locales (`packages/@uppy/locales/src/nl_NL.ts`)**:
> - Add and update numerous Dutch strings for uploads, errors,
recording, and UI actions (e.g., `addedNumFiles`,
`dataUploadedOfUnknown`, `uploadStalled`).
> - Replace generic `browse` placeholder with
`browseFiles`/`browseFolders` variants across drop/paste prompts to
align with selection behavior.
> - Improve phrasing/grammar and clarify labels (e.g., encoding, rotate
90°, plugin names, WebDAV input label).
> - **Release**:
> - Add changeset (`.changeset/every-wings-behave.md`) to publish
`@uppy/locales` patch.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
18995ec183. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
---------
Co-authored-by: kevind <KevinD@infosupport.com>
Co-authored-by: Mikael Finstad <finstaden@gmail.com>
Co-authored-by: Merlijn Vos <merlijn@soverin.net>
fixes#6024.
### Problem
- `getPlugin()` defaults to `UnknownPlugin`, so methods like `openModal`
are not visible , since core is not aware of that plugin type
### Proposed change
- Introduce a types-only registry in core:
- `export interface PluginTypeRegistry<M extends Meta, B extends Body>
{}`
- Overload `getPlugin` to return a precise type when the id is a known
key of the registry.
- add `Dashboard` to PluginTypeRegistry through module augmentation:
- `'Dashboard': Dashboard<M, B>`.
- When a project imports from `@uppy/dashboard`, its module augmentation
extends PluginTypeRegistry, adding the correct type into it
- I've added Tests , kept them in a separate file so it's easier to
review , once this approach gets approved I'll add them to
`Uppy.test.ts`
Once this PR gets a positive review I'll add this for other plugins ,
currently only added for `@uppy/dashboard`
**Build with Local tarball can be checked here**
https://stackblitz.com/~/github.com/qxprakash/uppy-type-test?file=type_test.ts
Bumps
[docker/setup-qemu-action](https://github.com/docker/setup-qemu-action)
from 3.6.0 to 3.7.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/docker/setup-qemu-action/releases">docker/setup-qemu-action's
releases</a>.</em></p>
<blockquote>
<h2>v3.7.0</h2>
<ul>
<li>Bump <code>@docker/actions-toolkit</code> from 0.56.0 to 0.67.0 in
<a
href="https://redirect.github.com/docker/setup-qemu-action/pull/217">docker/setup-qemu-action#217</a>
<a
href="https://redirect.github.com/docker/setup-qemu-action/pull/230">docker/setup-qemu-action#230</a></li>
<li>Bump brace-expansion from 1.1.11 to 1.1.12 in <a
href="https://redirect.github.com/docker/setup-qemu-action/pull/220">docker/setup-qemu-action#220</a></li>
<li>Bump form-data from 2.5.1 to 2.5.5 in <a
href="https://redirect.github.com/docker/setup-qemu-action/pull/218">docker/setup-qemu-action#218</a></li>
<li>Bump tmp from 0.2.3 to 0.2.4 in <a
href="https://redirect.github.com/docker/setup-qemu-action/pull/221">docker/setup-qemu-action#221</a></li>
<li>Bump undici from 5.28.4 to 5.29.0 in <a
href="https://redirect.github.com/docker/setup-qemu-action/pull/219">docker/setup-qemu-action#219</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/docker/setup-qemu-action/compare/v3.6.0...v3.7.0">https://github.com/docker/setup-qemu-action/compare/v3.6.0...v3.7.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="c7c5346462"><code>c7c5346</code></a>
Merge pull request <a
href="https://redirect.github.com/docker/setup-qemu-action/issues/230">#230</a>
from docker/dependabot/npm_and_yarn/docker/actions-to...</li>
<li><a
href="3a517a1a6f"><code>3a517a1</code></a>
chore: update generated content</li>
<li><a
href="a5b45edf7e"><code>a5b45ed</code></a>
build(deps): bump <code>@docker/actions-toolkit</code> from 0.62.1 to
0.67.0</li>
<li><a
href="3a64278e93"><code>3a64278</code></a>
Merge pull request <a
href="https://redirect.github.com/docker/setup-qemu-action/issues/220">#220</a>
from docker/dependabot/npm_and_yarn/brace-expansion-1...</li>
<li><a
href="94906ba253"><code>94906ba</code></a>
chore: update generated content</li>
<li><a
href="4027abfd67"><code>4027abf</code></a>
build(deps): bump brace-expansion from 1.1.11 to 1.1.12</li>
<li><a
href="bee0aaad0f"><code>bee0aaa</code></a>
Merge pull request <a
href="https://redirect.github.com/docker/setup-qemu-action/issues/221">#221</a>
from docker/dependabot/npm_and_yarn/tmp-0.2.4</li>
<li><a
href="0d7e25756e"><code>0d7e257</code></a>
chore: update generated content</li>
<li><a
href="b86960130e"><code>b869601</code></a>
build(deps): bump tmp from 0.2.3 to 0.2.4</li>
<li><a
href="3a043edff3"><code>3a043ed</code></a>
Merge pull request <a
href="https://redirect.github.com/docker/setup-qemu-action/issues/219">#219</a>
from docker/dependabot/npm_and_yarn/undici-5.29.0</li>
<li>Additional commits viewable in <a
href="29109295f8...c7c5346462">compare
view</a></li>
</ul>
</details>
<br />
[](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)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
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 <dependency name> 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)
</details>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
closes#4253
The `isNetworkError` function incorrectly classified XHR states as
network errors. Per MDN, a network error occurs when a request completes
(`readyState === 4`) but has no HTTP status (`status === 0`), indicating
network/CORS/file access failures.
## Changes
- **Logic fix**: Changed from `(xhr.readyState !== 0 && xhr.readyState
!== 4) || xhr.status === 0` to `xhr.readyState === 4 && xhr.status ===
0`
- **Test update**: Removed invalid test expecting `readyState: 2` to be
a network error; added test verifying incomplete requests return `false`
## Example
```typescript
// Before: incorrectly treated in-progress requests as network errors
isNetworkError({ readyState: 2, status: 0 }) // true ❌
// After: only completed requests with no status are network errors
isNetworkError({ readyState: 4, status: 0 }) // true ✓
isNetworkError({ readyState: 2, status: 0 }) // false ✓
```
<!-- START COPILOT CODING AGENT SUFFIX -->
<details>
<summary>Original prompt</summary>
> Update the isNetworkError function in
packages/@uppy/utils/src/isNetworkError.ts to correctly detect network
errors according to MDN documentation. The new logic should return true
only if xhr.readyState === 4 and xhr.status === 0. The updated
implementation should be:
>
> function isNetworkError(xhr?: XMLHttpRequest): boolean {
> if (!xhr) return false
> // finished but status is 0 — usually indicates a network/CORS/file
error
> return xhr.readyState === 4 && xhr.status === 0
> }
>
> export default isNetworkError
>
> No other logic changes are needed. If you find related commentary
(e.g., outdated comments), clarify as needed.
</details>
*This pull request was created as a result of the following prompt from
Copilot chat.*
> Update the isNetworkError function in
packages/@uppy/utils/src/isNetworkError.ts to correctly detect network
errors according to MDN documentation. The new logic should return true
only if xhr.readyState === 4 and xhr.status === 0. The updated
implementation should be:
>
> function isNetworkError(xhr?: XMLHttpRequest): boolean {
> if (!xhr) return false
> // finished but status is 0 — usually indicates a network/CORS/file
error
> return xhr.readyState === 4 && xhr.status === 0
> }
>
> export default isNetworkError
>
> No other logic changes are needed. If you find related commentary
(e.g., outdated comments), clarify as needed.
<!-- START COPILOT CODING AGENT TIPS -->
---
✨ Let Copilot coding agent [set things up for
you](https://github.com/transloadit/uppy/issues/new?title=✨+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot)
— coding agent works faster and does higher quality work when set up for
your repo.
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: mifi <402547+mifi@users.noreply.github.com>
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to main, this PR will
be updated.
# Releases
## @uppy/companion@6.2.0
### Minor Changes
- 0c8dd19: New Companion option `uploadHeaders` which can be used to
include a static set of headers with every request sent to all upload
destinations.
## @uppy/dashboard@5.0.4
### Patch Changes
- 5e166a1: Fix form appending for shadow dom
- Updated dependencies [ad50314]
- @uppy/utils@7.1.3
## @uppy/utils@7.1.3
### Patch Changes
- ad50314: Allow `getSafeFileId` to accept `UppyFile`
## uppy@5.1.11
### Patch Changes
- Updated dependencies [5e166a1]
- @uppy/dashboard@5.0.4
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
fixes#6033
also convert InternalMetadata to interface (interface is preferred when
possible)
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> Broaden `getSafeFileId` to accept `UppyFile` and extend types by
converting `InternalMetadata` to an interface with optional
`relativePath`.
>
> - **utils**:
> - **`getSafeFileId`**: Broadens parameter via new `SafeFileIdBasis` so
it can accept `UppyFile`; call site logic unchanged.
> - **Types**: Convert `InternalMetadata` to an interface and add
optional `relativePath`; propagate through `UppyFile`/`generateFileID`
typings.
> - **Changeset**: Adds patch entry for `@uppy/utils`.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
133240fc0f. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
---------
Co-authored-by: Merlijn Vos <merlijn@soverin.net>
Fixes#6028
I've also added `private/dev/dashboard_shadow.html` to more easily test
ShadowDOM-specific bugs.
I looked into writing a test case under
`packages/@uppy/dashboard/src/index.browser.test.ts` but couldn't get it
to work locally on Windows.
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> Ensure FileCard’s hidden form is appended/cleaned up in the correct
root (Document body or ShadowRoot) using a ref-derived root node, and
add a patch changeset.
>
> - **@uppy/dashboard – FileCard**:
> - Append hidden `form` to the correct root using `getRootNode()`
(handles Light DOM/iframes via `Document.body`, and Shadow DOM via
`ShadowRoot`).
> - Add `domRef` to root element to detect rendering context; attach
`ref` and update effect accordingly.
> - Clean up by removing the `form` from its actual `parentNode`.
> - **Release**:
> - Add changeset for patch: `Fix form appending for shadow dom`.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
edf81e871c. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
---------
Co-authored-by: Murderlon <merlijn@soverin.net>
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to main, this PR will
be updated.
# Releases
## @uppy/provider-views@5.1.2
### Patch Changes
- 46e339a: Add missing lodash dependency
## @uppy/react@5.1.1
### Patch Changes
- 16aa6fe: Add missing useUppyContext export
## uppy@5.1.10
### Patch Changes
- Updated dependencies [46e339a]
- @uppy/provider-views@5.1.2
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
**Fixes**
- `@uppy/components` incorrectly had a lot of packages in `dependencies`
while they should be `peerDependencies`. Also removed `remote-sources`
completely as this drags in a lot of plugins and we don't even need it
there.
- `@uppy/{react,vue,svelte}` now has to have the same `peerDependencies`
as `components` as the requirement has been moved up. We also mark them
as optional, they are only needed if you use a hook such as `useWebcam`
needing `@uppy/webcam`.
- Remove `companion-client` and `provider-views` from `transloadit`.
Those are never used by the package.
- Remove `@uppy/utils` from `@uppy/angular` and `@uppy/react`, we can
just use imports from `core`
- Place `@uppy/status-bar` back in peer deps. This is critical but
forgotten when status bar was put back inside frameworks.
**Implications**
- Moving peer deps to deps in `@uppy/components` now requires people to
install these dependencies. However, they kind of had to anyway before
as we require people to install the plugin on uppy (`.use(Webcam')`) if
you want to use `useWebcam` and if you try to import a dep you did not
install they would have gotten an error already.
- Note: this is not the same situation as with importing dashboard
component from @uppy/react which causes a runtime crash because
@uppy/dashboard is missing. In this case we only depend on _types_, so
we don't have this problem.
No need to export it from index.ts, since it’s already exported through
the export maps. Also, it’s an optional peer dependency, we probably
missed this in #5830 , though this might count as a breaking change now
☹️
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to main, this PR will
be updated.
# Releases
## @uppy/status-bar@5.0.2
### Patch Changes
- 8ac1654: Change internal type from `any` to `unknown`.
## @uppy/webcam@5.0.2
### Patch Changes
- 8ac1654: - Remove TagFile type - Use UppyFile instead.
- Split UppyFile into two interfaces distinguished by the `isRemote`
boolean:
- LocalUppyFile
- RemoteUppyFile
## @uppy/xhr-upload@5.0.2
### Patch Changes
- 8ac1654: - Make `file.data` nullable - Because for ghosts it will be
`undefined` and we don't have any type to distinguish ghosts from other
(local) files. This caused a crash, because we didn't check for
`undefined` everywhere (when trying to store a blob that was
`undefined`). This means we have to add null checks in some packages
- Split UppyFile into two interfaces distinguished by the `isRemote`
boolean:
- LocalUppyFile
- RemoteUppyFile
## uppy@5.1.8
### Patch Changes
- Updated dependencies [8ac1654]
- Updated dependencies [8ac1654]
- Updated dependencies [8ac1654]
- @uppy/status-bar@5.0.2
- @uppy/webcam@5.0.2
- @uppy/xhr-upload@5.0.2
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to main, this PR will
be updated.
# Releases
## @uppy/aws-s3@5.0.2
### Patch Changes
- 0c16fe4: - Make `file.data` nullable - Because for ghosts it will be
`undefined` and we don't have any type to distinguish ghosts from other
(local) files. This caused a crash, because we didn't check for
`undefined` everywhere (when trying to store a blob that was
`undefined`). This means we have to add null checks in some packages
- Split UppyFile into two intefaces distinguished by the `isRemote`
boolean:
- LocalUppyFile
- RemoteUppyFile
- Updated dependencies [0c16fe4]
- Updated dependencies [0c16fe4]
- @uppy/companion-client@5.1.1
- @uppy/core@5.1.1
- @uppy/utils@7.1.1
## @uppy/companion@6.1.1
### Patch Changes
- 6a60ee5: Reject request early instead of crashing on missing
`filename` for /s3/multipart and /s3/params endpoints
## @uppy/companion-client@5.1.1
### Patch Changes
- 0c16fe4: - Split UppyFile into two intefaces distinguished by the
`isRemote` boolean:
- LocalUppyFile
- RemoteUppyFile
- Updated dependencies [0c16fe4]
- @uppy/core@5.1.1
- @uppy/utils@7.1.1
## @uppy/components@1.0.4
### Patch Changes
- 0c16fe4: - Make `file.data` nullable - Because for ghosts it will be
`undefined` and we don't have any type to distinguish ghosts from other
(local) files. This caused a crash, because we didn't check for
`undefined` everywhere (when trying to store a blob that was
`undefined`). This means we have to add null checks in some packages
- Move `restore-confirmed` from `onUploadStart` event listener to
`startUpload`, else it would cause `restore-confirmed` to be triggered
even if there is no `recoveredState` to recover
- Updated dependencies [0c16fe4]
- Updated dependencies [0c16fe4]
- @uppy/core@5.1.1
- @uppy/image-editor@4.0.2
## @uppy/compressor@3.0.2
### Patch Changes
- 0c16fe4: - Make `file.data` nullable - Because for ghosts it will be
`undefined` and we don't have any type to distinguish ghosts from other
(local) files. This caused a crash, because we didn't check for
`undefined` everywhere (when trying to store a blob that was
`undefined`). This means we have to add null checks in some packages
- Split UppyFile into two intefaces distinguished by the `isRemote`
boolean:
- LocalUppyFile
- RemoteUppyFile
- Updated dependencies [0c16fe4]
- @uppy/core@5.1.1
- @uppy/utils@7.1.1
## @uppy/core@5.1.1
### Patch Changes
- 0c16fe4: - Make `file.data` nullable - Because for ghosts it will be
`undefined` and we don't have any type to distinguish ghosts from other
(local) files. This caused a crash, because we didn't check for
`undefined` everywhere (when trying to store a blob that was
`undefined`)
- Introduce new field `progress`.`complete`: if there is a
post-processing step, set it to `true` once post processing is complete.
If not, set it to `true` once upload has finished.
- Throw a proper `Nonexistent upload` error message if trying to upload
a non-existent upload, instead of TypeError
- Rewrite `Uppy.upload()` - this fixes two bugs:
1. No more duplicate emit call when
this.#restricter.validateMinNumberOfFiles throws (`#informAndEmit` and
`this.emit('error')`)
2. 'restriction-failed' now also gets correctly called when
`checkRequiredMetaFields` check errors.
- Don't re-upload completed files #5930
- Split UppyFile into two intefaces distinguished by the `isRemote`
boolean:
- LocalUppyFile
- RemoteUppyFile
- Remove TagFile type - Use UppyFile instead.
- Make `name` required on UppyFile (it is in reality always set)
- Fix bug: `RestrictionError` sometimes thrown with a `file` property
that was _not_ a `UppyFile`, but a `File`. This would happen if someone
passed a `File` instead of a `MinimalRequiredUppyFile` into
`core.addFile` (which is valid to do according to our API)
- Improve some log messages
- Simplify Uppy `postprocess-complete` handler
- Updated dependencies [0c16fe4]
- @uppy/utils@7.1.1
## @uppy/dashboard@5.0.3
### Patch Changes
- 0c16fe4: - Remove `restore-canceled` event as it was not being used.
- Updated dependencies [0c16fe4]
- Updated dependencies [0c16fe4]
- Updated dependencies [0c16fe4]
- @uppy/core@5.1.1
- @uppy/utils@7.1.1
- @uppy/provider-views@5.1.1
- @uppy/thumbnail-generator@5.0.2
## @uppy/golden-retriever@5.1.1
### Patch Changes
- 0c16fe4: - **Internal inter-package breaking change:** Remove hacky
internal event `restore:get-data` that would send a function as its
event data (to golden retriever for it to call the function to receive
data from it). Add instead `restore:plugin-data-changed` that publishes
data when it changes. This means that **old versions of
`@uppy/transloadit` are not compatible with newest version of
`@uppy/golden-retriever` (and vice versa)**.
- Large internal refactor of Golden Retriever
- Use `state-update` handler to trigger save to local storage and blobs,
instead of doing it in various other event handlers (`complete`,
`upload-success`, `file-removed`, `file-editor:complete`, `file-added`).
this way we don't miss any state updates. also simplifies the code a
lot. this fixes:
- Always store blob when it changes - this fixes the bug when using the
compressor plugin, it would store the uncompressed original blob (like
when using image editor plugin)
- Add back throttle: but throttling must happen on the actual local
storage save calls inside MetaDataStore, _not_ the handleStateUpdate
function, so we don't miss any state updates (and end up with
inconsistent data). Note that there is still a race condition where if
the user removes a file (causing the blob to be deleted), then quickly
reloads the page before the throttled save has happened, the file will
be restored but the blob will be missing, so it will become a ghost.
this is probably not a big problem though. need to disable throttling
when running tests (add it as an option to the plugin)
- Fix implicit `any` types in #restore filesWithBlobs
- Don't error when saving indexedDB file that already exists (make it
idempotent)
- Fix bug: Golden Retriever was not deleting from IndexedDbStore if
ServiceWorkerStore exists, causing a storage leak
- Remove unused Golden Retriever cleanup.ts
- Clean up stored files on `complete` event _only_ if _all_ files
succeeded (no failed files). this allows the user to retry failed files
if they get interrupted - fixes#5927, closes#5955
- Only set `isGhost` for non-successful files - it doesn't make sense
for successfully uploaded files to be ghosted because they're already
done. #5930
- Add `upload-success` event handler `handleFileUploaded`: this handler
will remove blobs of files that have successfully uploaded. this
prevents leaking blobs when an upload with multiple files gets
interrupted (but some files have uploaded successfully), because
`#handleUploadComplete` (which normally does the cleanup) doesn't get
called untill _all_ files are complete.
- Fix `file-editor:complete` potential race condition: it would delete
and add at the same time (without first awaiting delete operation)
- Fix: Don't double `setState` when restoring
- Improve types in golden retriever and MetaDataStore
- MetaDataStore: move old state expiry to from `constructor` to `load()`
- Updated dependencies [0c16fe4]
- @uppy/core@5.1.1
- @uppy/utils@7.1.1
## @uppy/image-editor@4.0.2
### Patch Changes
- 0c16fe4: - Make `file.data` nullable - Because for ghosts it will be
`undefined` and we don't have any type to distinguish ghosts from other
(local) files. This caused a crash, because we didn't check for
`undefined` everywhere (when trying to store a blob that was
`undefined`). This means we have to add null checks in some packages
- Split UppyFile into two intefaces distinguished by the `isRemote`
boolean:
- LocalUppyFile
- RemoteUppyFile
- Updated dependencies [0c16fe4]
- @uppy/core@5.1.1
- @uppy/utils@7.1.1
## @uppy/provider-views@5.1.1
### Patch Changes
- 0c16fe4: - Rename `getTagFile` to `companionFileToUppyFile`
- Updated dependencies [0c16fe4]
- @uppy/core@5.1.1
- @uppy/utils@7.1.1
## @uppy/thumbnail-generator@5.0.2
### Patch Changes
- 0c16fe4: - Make `file.data` nullable - Because for ghosts it will be
`undefined` and we don't have any type to distinguish ghosts from other
(local) files. This caused a crash, because we didn't check for
`undefined` everywhere (when trying to store a blob that was
`undefined`). This means we have to add null checks in some packages
- Split UppyFile into two intefaces distinguished by the `isRemote`
boolean:
- LocalUppyFile
- RemoteUppyFile
- Updated dependencies [0c16fe4]
- @uppy/core@5.1.1
- @uppy/utils@7.1.1
## @uppy/transloadit@5.1.3
### Patch Changes
- 0c16fe4: - **Internal inter-package breaking change:** Remove hacky
internal event `restore:get-data` that would send a function as its
event data (to golden retriever for it to call the function to receive
data from it). Add instead `restore:plugin-data-changed` that publishes
data when it changes. This means that **old versions of
`@uppy/transloadit` are not compatible with newest version of
`@uppy/golden-retriever` (and vice versa)**.
- Minor internal refactoring in order to make sure that we will always
emit `restore:plugin-data-changed` whenever assembly state changes
- Split UppyFile into two intefaces distinguished by the `isRemote`
boolean:
- LocalUppyFile
- RemoteUppyFile
- Updated dependencies [0c16fe4]
- Updated dependencies [0c16fe4]
- Updated dependencies [0c16fe4]
- Updated dependencies [0c16fe4]
- @uppy/companion-client@5.1.1
- @uppy/core@5.1.1
- @uppy/utils@7.1.1
- @uppy/provider-views@5.1.1
- @uppy/tus@5.0.2
## @uppy/tus@5.0.2
### Patch Changes
- 0c16fe4: - Make `file.data` nullable - Because for ghosts it will be
`undefined` and we don't have any type to distinguish ghosts from other
(local) files. This caused a crash, because we didn't check for
`undefined` everywhere (when trying to store a blob that was
`undefined`). This means we have to add null checks in some packages
- Split UppyFile into two intefaces distinguished by the `isRemote`
boolean:
- LocalUppyFile
- RemoteUppyFile
- Updated dependencies [0c16fe4]
- Updated dependencies [0c16fe4]
- @uppy/companion-client@5.1.1
- @uppy/core@5.1.1
- @uppy/utils@7.1.1
## @uppy/url@5.0.2
### Patch Changes
- 0c16fe4: - Make `file.data` nullable - Because for ghosts it will be
`undefined` and we don't have any type to distinguish ghosts from other
(local) files. This caused a crash, because we didn't check for
`undefined` everywhere (when trying to store a blob that was
`undefined`). This means we have to add null checks in some packages
- Split UppyFile into two intefaces distinguished by the `isRemote`
boolean:
- LocalUppyFile
- RemoteUppyFile
- Updated dependencies [0c16fe4]
- Updated dependencies [0c16fe4]
- @uppy/companion-client@5.1.1
- @uppy/core@5.1.1
- @uppy/utils@7.1.1
## @uppy/utils@7.1.1
### Patch Changes
- 0c16fe4: - Make `file.data` nullable - Because for ghosts it will be
`undefined` and we don't have any type to distinguish ghosts from other
(local) files. This caused a crash, because we didn't check for
`undefined` everywhere (when trying to store a blob that was
`undefined`)
- Introduce new field `progress`.`complete`: if there is a
post-processing step, set it to `true` once post processing is complete.
If not, set it to `true` once upload has finished.
- Throw a proper `Nonexistent upload` error message if trying to upload
a non-existent upload, instead of TypeError
- Rewrite `Uppy.upload()` - this fixes two bugs:
1. No more duplicate emit call when
this.#restricter.validateMinNumberOfFiles throws (`#informAndEmit` and
`this.emit('error')`)
2. 'restriction-failed' now also gets correctly called when
`checkRequiredMetaFields` check errors.
- Don't re-upload completed files #5930
- Split UppyFile into two intefaces distinguished by the `isRemote`
boolean:
- LocalUppyFile
- RemoteUppyFile
- Remove TagFile type - Use UppyFile instead.
- Make `name` required on UppyFile (it is in reality always set)
- Fix bug: `RestrictionError` sometimes thrown with a `file` property
that was _not_ a `UppyFile`, but a `File`. This would happen if someone
passed a `File` instead of a `MinimalRequiredUppyFile` into
`core.addFile` (which is valid to do according to our API)
- Improve some log messages
- Simplify Uppy `postprocess-complete` handler
## uppy@5.1.7
### Patch Changes
- Updated dependencies [0c16fe4]
- Updated dependencies [0c16fe4]
- Updated dependencies [0c16fe4]
- Updated dependencies [0c16fe4]
- Updated dependencies [0c16fe4]
- Updated dependencies [0c16fe4]
- Updated dependencies [0c16fe4]
- Updated dependencies [0c16fe4]
- Updated dependencies [0c16fe4]
- Updated dependencies [0c16fe4]
- Updated dependencies [0c16fe4]
- Updated dependencies [0c16fe4]
- @uppy/aws-s3@5.0.2
- @uppy/companion-client@5.1.1
- @uppy/compressor@3.0.2
- @uppy/core@5.1.1
- @uppy/dashboard@5.0.3
- @uppy/golden-retriever@5.1.1
- @uppy/image-editor@4.0.2
- @uppy/provider-views@5.1.1
- @uppy/thumbnail-generator@5.0.2
- @uppy/transloadit@5.1.3
- @uppy/tus@5.0.2
- @uppy/url@5.0.2
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Probably best reviewed commit by commit.
I also split UppyFile into two intefaces distinguished by the `isRemote`
boolean:
- LocalUppyFile
- RemoteUppyFile
Also:
- Removed the TagFile type
- Don't re-upload completed files - fixes#5930
- Clean up stored files on `complete` event *only* if *all* files
succeeded (no failed files). this allows the user to retry failed files
if the browser & upload get interrupted - fixes#5927, closes#5955
- Only set `isGhost` for non-successful files. it doesn't make sense for
successfully uploaded files to be ghosted because they're already done.
#5930fixes#6013
---------
Co-authored-by: Prakash <qxprakash@gmail.com>
1. don't run browser tests in `headless` mode by default when running
tests individually. because when writing/running tests, i usually want
to see/debug using the browser. if one still wants headless, it's as
easy as: `yarn workspace @uppy/xyz test --browser.headless`. instead
append the `headless` mode when running all tests together - it doesn't
make sense to run all projects' tests without headless mode.
2. don't always run browser tests with `watch`: watch doesn't make sense
when running multiple projects in turbo (one project just blocks the
rest watching for changes). if one still wants to run a single test with
watch mode, it's as easy as: `yarn workspace @uppy/xyz test --watch`
3. don't cache test runs: if I run the `test` command. most of the time
I want to actually run tests (not skip them if they already ran last
time)
4. output logs when running tests. it's nice to see that the tests have
actually run (also on CI)
5. when running all tests, use concurrency=1, because the tests also
includes e2e tests, running multiple browsers in parallel really just
makes the test fail on my computer (and uses a lot of memory)
current output is not very informative:
<img width="840" height="410" alt="Screenshot 2025-10-17 at 17 09 55"
src="https://github.com/user-attachments/assets/9ca8278c-f160-478c-87e2-2ef861ba4bb1"
/>
with this PR:
<img width="672" height="495" alt="Screenshot 2025-10-17 at 17 20 49"
src="https://github.com/user-attachments/assets/1339c96b-d0c1-42e1-8fa1-d5a4a36ea42a"
/>