tldraw/packages
alex 965bc10997
[1/4] Blob storage in TLStore (#4068)
Reworks the store to include information about how blob assets
(images/videos) are stored/retrieved. This replaces the old
internal-only `assetOptions` prop, and supplements the existing
`registerExternalAssetHandler` API.

Previously, `registerExternalAssetHandler` had two responsibilities:
1. Extracting asset metadata
2. Uploading the asset and returning its URL

Existing `registerExternalAssetHandler` implementation will still work,
but now uploading is the responsibility of a new `editor.uploadAsset`
method which calls the new store-based upload method. Our default asset
handlers extract metadata, then call that new API. I think this is a
pretty big improvement over what we had before: overriding uploads was a
pretty common ask, but doing so meant having to copy paste our metadata
extraction which felt pretty fragile. Just in this codebase, we had a
bunch of very slightly different metadata extraction code-paths that had
been copy-pasted around then diverged over time. Now, you can change how
uploads work without having to mess with metadata extraction and
vice-versa.

As part of this we also:
1. merge the old separate asset indexeddb store with the main one.
because this warrants some pretty big migration stuff, i refactored our
indexed-db helpers to work around an instance instead of being free
functions
2. move our existing asset stuff over to the new approach
3. add a new hook in `sync-react` to create a demo store with the new
assets

### Change type

- [x] `api`

### Release notes

Introduce a new `assets` option for the store, describing how to save
and retrieve asset blobs like images & videos from e.g. a user-content
CDN. These are accessible through `editor.uploadAsset` and
`editor.resolveAssetUrl`. This supplements the existing
`registerExternalAssetHandler` API: `registerExternalAssetHandler` is
for customising metadata extraction, and should call
`editor.uploadAsset` to save assets. Existing
`registerExternalAssetHandler` calls will still work, but if you're only
using them to configure uploads and don't want to customise metadata
extraction, consider switching to the new `assets` store prop.
2024-07-10 13:00:18 +00:00
..
assets Add offline icon back (#4127) 2024-07-10 08:51:06 +00:00
dotcom-shared Force interface instead of type for better docs (#3815) 2024-05-22 15:55:49 +00:00
editor [1/4] Blob storage in TLStore (#4068) 2024-07-10 13:00:18 +00:00
namespaced-tldraw Update CHANGELOG.md [skip ci] 2024-06-25 13:27:57 +00:00
state Update CHANGELOG.md [skip ci] 2024-06-25 13:27:57 +00:00
store Update CHANGELOG.md [skip ci] 2024-06-25 13:27:57 +00:00
sync put sync stuff in bemo worker (#4060) 2024-07-03 14:10:54 +00:00
sync-react [1/4] Blob storage in TLStore (#4068) 2024-07-10 13:00:18 +00:00
tldraw [1/4] Blob storage in TLStore (#4068) 2024-07-10 13:00:18 +00:00
tlschema [1/4] Blob storage in TLStore (#4068) 2024-07-10 13:00:18 +00:00
utils Initial bemo worker setup (#4017) 2024-07-01 11:35:23 +00:00
validate Demo server bookmark unfurl endpoint (#4062) 2024-07-03 10:48:34 +00:00
worker-shared introduce images.tldraw.xyz image optimisation worker (#4069) 2024-07-08 16:25:53 +00:00