tldraw/packages/sync-react
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
..
src [1/4] Blob storage in TLStore (#4068) 2024-07-10 13:00:18 +00:00
api-extractor.json put sync stuff in bemo worker (#4060) 2024-07-03 14:10:54 +00:00
LICENSE.md put sync stuff in bemo worker (#4060) 2024-07-03 14:10:54 +00:00
package.json put sync stuff in bemo worker (#4060) 2024-07-03 14:10:54 +00:00
README.md put sync stuff in bemo worker (#4060) 2024-07-03 14:10:54 +00:00
setupJest.js put sync stuff in bemo worker (#4060) 2024-07-03 14:10:54 +00:00
tsconfig.json put sync stuff in bemo worker (#4060) 2024-07-03 14:10:54 +00:00

@tldraw/sync-react

react bindings for tldraw sync