diff --git a/package.json b/package.json index 57bd41ea..ff0ec991 100644 --- a/package.json +++ b/package.json @@ -76,16 +76,16 @@ "@types/throttle-debounce": "^5.0.2", "@vite-pwa/assets-generator": "^1.0.2", "@vite-pwa/sveltekit": "^1.1.0", - "@welshman/app": "^0.9.0-pre6", - "@welshman/content": "^0.9.0-pre6", - "@welshman/domain": "^0.9.0-pre6", - "@welshman/editor": "^0.9.0-pre6", - "@welshman/feeds": "^0.9.0-pre6", - "@welshman/lib": "^0.9.0-pre6", - "@welshman/net": "^0.9.0-pre6", - "@welshman/signer": "^0.9.0-pre6", - "@welshman/store": "^0.9.0-pre6", - "@welshman/util": "^0.9.0-pre6", + "@welshman/app": "^0.9.0", + "@welshman/content": "^0.9.0", + "@welshman/domain": "^0.9.0", + "@welshman/editor": "^0.9.0", + "@welshman/feeds": "^0.9.0", + "@welshman/lib": "^0.9.0", + "@welshman/net": "^0.9.0", + "@welshman/signer": "^0.9.0", + "@welshman/store": "^0.9.0", + "@welshman/util": "^0.9.0", "cheerio": "^1.2.0", "compressorjs-next": "^1.1.2", "dompurify": "^3.4.13", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2e35138b..d761f488 100644 Binary files a/pnpm-lock.yaml and b/pnpm-lock.yaml differ diff --git a/src/app/storage.ts b/src/app/storage.ts index be3d0e01..fec09344 100644 --- a/src/app/storage.ts +++ b/src/app/storage.ts @@ -3,7 +3,7 @@ import type {Unsubscriber} from "svelte/store" import {deleteDB} from "idb" import {SecureStorage} from "@aparajita/capacitor-secure-storage" import {Preferences} from "@capacitor/preferences" -import {noop, on, throttle, batch, call} from "@welshman/lib" +import {noop, on, throttle, batch, call, makeQueue} from "@welshman/lib" import type {Maybe} from "@welshman/lib" import { ALERT_ANDROID, @@ -45,7 +45,7 @@ import {IDB} from "@lib/indexeddb" import {appPolicies} from "@app/core" export const kv = call(() => { - let p = Promise.resolve() + const enqueue = makeQueue() const get = async (key: string): Promise => { const result = await Preferences.get({key}) @@ -58,22 +58,18 @@ export const kv = call(() => { } const set = async (key: string, value: T): Promise => { - p = p.then(() => Preferences.set({key, value: JSON.stringify(value)})) - - await p + await enqueue(() => Preferences.set({key, value: JSON.stringify(value)})) } const clear = async () => { - p = p.then(() => Preferences.clear()) - - await p + await enqueue(() => Preferences.clear()) } return {get, set, clear} }) export const ss = call(() => { - let p = Promise.resolve() + const enqueue = makeQueue() const get = async (key: string): Promise => { let value = await SecureStorage.getItem(key) @@ -97,16 +93,17 @@ export const ss = call(() => { } } + // Android's SecureStorage rejects undefined const set = async (key: string, value: T): Promise => { - p = p.then(() => SecureStorage.setItem(key, JSON.stringify(value))) - - await p + await enqueue(() => + value === undefined + ? SecureStorage.removeItem(key) + : SecureStorage.setItem(key, JSON.stringify(value)), + ) } const clear = async () => { - p = p.then(() => SecureStorage.clear()) - - await p + await enqueue(() => SecureStorage.clear()) } return {get, set, clear} diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index c4009076..32fc047e 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -1,7 +1,11 @@