Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: missing blob mime types in IndexedDB #3280

Merged
merged 1 commit into from
Jul 1, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion packages/store/src/persistence/blob/indexeddb-storage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,33 +4,40 @@ import type { BlobStorage } from './types.js';

export const createIndexeddbStorage = (database: string): BlobStorage => {
let dbPromise: ReturnType<typeof createStore>;
let mimeTypeDbPromise: ReturnType<typeof createStore>;
// async import `idb-keyval` to avoid side effect
const idbPromise = import('idb-keyval').then(({ createStore, ...idb }) => {
// don't change the db name, it's for backward compatibility
dbPromise = createStore(`${database}_blob`, 'blob');
mimeTypeDbPromise = createStore(`${database}_blob_mime`, 'blob_mime');
return idb;
});
return {
crud: {
get: async (key: string) => {
const get = (await idbPromise).get;
const db = await dbPromise;
const mimeTypeDb = await mimeTypeDbPromise;
const res = await get<ArrayBuffer>(key, db);
if (res) {
return new Blob([res]);
return new Blob([res], { type: await get(key, mimeTypeDb) });
}
return null;
},
set: async (key: string, value: Blob) => {
const set = (await idbPromise).set;
const db = await dbPromise;
const mimeTypeDb = await mimeTypeDbPromise;
await set(key, await value.arrayBuffer(), db);
await set(key, value.type, mimeTypeDb);
return key;
},
delete: async (key: string) => {
const del = (await idbPromise).del;
const db = await dbPromise;
const mimeTypeDb = await mimeTypeDbPromise;
await del(key, db);
await del(key, mimeTypeDb);
},
list: async () => {
const keys = (await idbPromise).keys;
Expand Down
Loading