From 44555215cf01616e9f75340ea62b4e816992cf91 Mon Sep 17 00:00:00 2001 From: Jon Staab Date: Mon, 13 Oct 2025 13:35:02 -0700 Subject: [PATCH] Track shards separately, upgrade deps --- package.json | 97 ++++++++++-------- pnpm-lock.yaml | Bin 346495 -> 325256 bytes .../components/ContentLinkBlockImage.svelte | 2 +- src/app/core/commands.ts | 2 +- src/app/util/routes.ts | 2 +- src/lib/components/PageBar.svelte | 2 +- src/lib/storage.ts | 48 ++++----- src/routes/[bech32]/+page.svelte | 3 +- src/routes/chat/[chat]/+page.svelte | 5 +- src/routes/spaces/[relay]/+layout.svelte | 2 +- src/routes/spaces/[relay]/+page.svelte | 2 +- src/routes/spaces/[relay]/[room]/+page.svelte | 5 +- .../spaces/[relay]/calendar/+page.svelte | 2 +- .../spaces/[relay]/calendar/[id]/+page.svelte | 3 +- src/routes/spaces/[relay]/chat/+page.svelte | 2 +- src/routes/spaces/[relay]/goals/+page.svelte | 2 +- .../spaces/[relay]/goals/[id]/+page.svelte | 3 +- .../spaces/[relay]/threads/+page.svelte | 2 +- .../spaces/[relay]/threads/[id]/+page.svelte | 3 +- 19 files changed, 105 insertions(+), 82 deletions(-) diff --git a/package.json b/package.json index ca26487..638b405 100644 --- a/package.json +++ b/package.json @@ -15,50 +15,50 @@ }, "devDependencies": { "@capacitor/assets": "^3.0.5", - "@eslint/js": "^9.26.0", - "@sentry/cli": "^2.40.0", - "@sveltejs/kit": "^2.5.27", - "@sveltejs/vite-plugin-svelte": "^4.0.0", - "@types/eslint": "^9.6.0", - "autoprefixer": "^10.4.19", + "@eslint/js": "^9.37.0", + "@sentry/cli": "^2.56.1", + "@sveltejs/kit": "^2.46.5", + "@sveltejs/vite-plugin-svelte": "^4.0.4", + "@types/eslint": "^9.6.1", + "autoprefixer": "^10.4.21", "classnames": "^2.5.1", - "eslint": "^9.0.0", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-svelte": "^2.45.1", - "globals": "^15.0.0", - "postcss": "^8.4.40", - "prettier": "^3.1.1", - "prettier-plugin-svelte": "^3.2.6", - "svelte": "^5.0.0", - "svelte-check": "^4.0.0", - "tailwindcss": "^3.4.7", - "typescript": "^5.5.0", - "typescript-eslint": "^8.0.0", - "vite": "^5.4.4" + "eslint": "^9.37.0", + "eslint-config-prettier": "^9.1.2", + "eslint-plugin-svelte": "^2.46.1", + "globals": "^15.15.0", + "postcss": "^8.5.6", + "prettier": "^3.6.2", + "prettier-plugin-svelte": "^3.4.0", + "svelte": "^5.39.12", + "svelte-check": "^4.3.3", + "tailwindcss": "^3.4.18", + "typescript": "^5.9.3", + "typescript-eslint": "^8.46.1", + "vite": "^5.4.20" }, "type": "module", "dependencies": { "@capacitor-community/safe-area": "7.0.0-alpha.1", - "@capacitor/android": "^7.0.0", - "@capacitor/app": "^7.0.0", - "@capacitor/cli": "^7.0.0", - "@capacitor/core": "^7.0.1", - "@capacitor/filesystem": "^7.0.0", - "@capacitor/ios": "^7.0.0", - "@capacitor/keyboard": "^7.0.0", + "@capacitor/android": "^7.4.3", + "@capacitor/app": "^7.1.0", + "@capacitor/cli": "^7.4.3", + "@capacitor/core": "^7.4.3", + "@capacitor/filesystem": "^7.1.4", + "@capacitor/ios": "^7.4.3", + "@capacitor/keyboard": "^7.0.3", "@capacitor/preferences": "^7.0.2", - "@capacitor/push-notifications": "^7.0.1", + "@capacitor/push-notifications": "^7.0.3", "@capawesome/capacitor-android-dark-mode-support": "^7.0.0", "@capawesome/capacitor-badge": "^7.0.1", - "@getalby/sdk": "^5.1.0", + "@getalby/sdk": "^5.1.2", "@poppanator/sveltekit-svg": "^4.2.1", - "@sentry/browser": "^8.35.0", - "@sveltejs/adapter-static": "^3.0.4", - "@tiptap/core": "^2.12.0", + "@sentry/browser": "^8.55.0", + "@sveltejs/adapter-static": "^3.0.10", + "@tiptap/core": "^2.26.3", "@types/qrcode": "^1.5.5", "@types/throttle-debounce": "^5.0.2", "@vite-pwa/assets-generator": "^0.2.6", - "@vite-pwa/sveltekit": "^0.6.6", + "@vite-pwa/sveltekit": "^0.6.8", "@welshman/app": "^0.5.2", "@welshman/content": "^0.5.2", "@welshman/editor": "^0.5.2", @@ -71,16 +71,16 @@ "@welshman/store": "^0.5.2", "@welshman/util": "^0.5.2", "compressorjs": "^1.2.1", - "daisyui": "^4.12.10", - "date-picker-svelte": "^2.13.0", - "dotenv": "^16.4.5", - "emoji-picker-element": "^1.22.8", - "fuse.js": "^7.0.0", - "husky": "^9.1.6", - "idb": "^8.0.0", + "daisyui": "^4.12.24", + "date-picker-svelte": "^2.16.0", + "dotenv": "^16.6.1", + "emoji-picker-element": "^1.27.0", + "fuse.js": "^7.1.0", + "husky": "^9.1.7", + "idb": "^8.0.3", "nostr-signer-capacitor-plugin": "^0.0.4", - "nostr-tools": "^2.14.2", - "prettier-plugin-tailwindcss": "^0.6.5", + "nostr-tools": "^2.17.0", + "prettier-plugin-tailwindcss": "^0.6.14", "qr-scanner": "^1.4.2", "qrcode": "^1.5.4", "throttle-debounce": "^5.0.2", @@ -93,6 +93,19 @@ ], "onlyBuiltDependencies": [ "sharp" - ] + ], + "overrides": { + "@welshman/app": "link:../welshman/packages/app", + "@welshman/content": "link:../welshman/packages/content", + "@welshman/editor": "link:../welshman/packages/editor", + "@welshman/feeds": "link:../welshman/packages/feeds", + "@welshman/lib": "link:../welshman/packages/lib", + "@welshman/net": "link:../welshman/packages/net", + "@welshman/relay": "link:../welshman/packages/relay", + "@welshman/router": "link:../welshman/packages/router", + "@welshman/signer": "link:../welshman/packages/signer", + "@welshman/store": "link:../welshman/packages/store", + "@welshman/util": "link:../welshman/packages/util" + } } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7e54173fb4c39f4ff6ac1717b16c5db9066d7fdf..b4771ab80ba6c755a6dad2444f7f2034b49f945e 100644 GIT binary patch delta 28786 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 diff --git a/src/app/components/ContentLinkBlockImage.svelte b/src/app/components/ContentLinkBlockImage.svelte index 26addce..635d436 100644 --- a/src/app/components/ContentLinkBlockImage.svelte +++ b/src/app/components/ContentLinkBlockImage.svelte @@ -56,7 +56,7 @@ const ciphertext = new Uint8Array(await response.arrayBuffer()) const decryptedData = await decryptFile({ciphertext, key, nonce, algorithm}) - src = URL.createObjectURL(new Blob([decryptedData])) + src = URL.createObjectURL(new Blob([new Uint8Array(decryptedData)])) } } else { src = url diff --git a/src/app/core/commands.ts b/src/app/core/commands.ts index 27928f5..fa57d16 100644 --- a/src/app/core/commands.ts +++ b/src/app/core/commands.ts @@ -744,7 +744,7 @@ export const uploadFile = async (file: File, options: UploadFileOptions = {}) => ["encryption-algorithm", algorithm], ) - file = new File([new Blob([ciphertext])], name, { + file = new File([new Uint8Array(ciphertext)], name, { type: "application/octet-stream", }) } diff --git a/src/app/util/routes.ts b/src/app/util/routes.ts index 117af85..acc7818 100644 --- a/src/app/util/routes.ts +++ b/src/app/util/routes.ts @@ -64,7 +64,7 @@ export const getPrimaryNavItemIndex = ($page: Page) => { case "discover": return urls.length + 2 case "spaces": { - const routeUrl = decodeRelay($page.params.relay) + const routeUrl = decodeRelay($page.params.relay || "") return urls.findIndex(url => url === routeUrl) + 1 } diff --git a/src/lib/components/PageBar.svelte b/src/lib/components/PageBar.svelte index c9bf333..7abe20a 100644 --- a/src/lib/components/PageBar.svelte +++ b/src/lib/components/PageBar.svelte @@ -13,7 +13,7 @@
+ class="flex min-h-12 items-center justify-between gap-4 rounded-xl bg-base-100 px-4 shadow-xl">
{@render props.icon?.()} {@render props.title?.()} diff --git a/src/lib/storage.ts b/src/lib/storage.ts index 3b57e22..b38a714 100644 --- a/src/lib/storage.ts +++ b/src/lib/storage.ts @@ -1,4 +1,4 @@ -import {flatten, identity, groupBy} from "@welshman/lib" +import {flatten, noop, identity, groupBy} from "@welshman/lib" import {type StorageProvider} from "@welshman/store" import {Preferences} from "@capacitor/preferences" import {Encoding, Filesystem, Directory} from "@capacitor/filesystem" @@ -38,7 +38,7 @@ export type CollectionOptions = { } export class Collection { - p = Promise.resolve() + #promises = new Map>() constructor(readonly options: CollectionOptions) {} @@ -58,36 +58,38 @@ export class Collection { ) } - #then = async (f: () => Promise) => { - this.p = this.p.then(f).catch(e => { - console.error(e) - }) + #then = (shard: string, f: () => Promise) => { + const oldPromise = this.#promises.get(shard) || Promise.resolve() + const newPromise = oldPromise.then(f) - await this.p + this.#promises.set(shard, newPromise) + + return newPromise } #path = (shard: string) => `collection_${this.options.table}_${shard}.json` - getShard = async (shard: string): Promise => { - try { - const file = await Filesystem.readFile({ - path: this.#path(shard), - directory: Directory.Data, - encoding: Encoding.UTF8, - }) + getShard = (shard: string): Promise => + this.#then(shard, async () => { + try { + const file = await Filesystem.readFile({ + path: this.#path(shard), + directory: Directory.Data, + encoding: Encoding.UTF8, + }) - // Speed things up by parsing only once - return JSON.parse("[" + file.data.toString().split("\n").filter(identity).join(",") + "]") - } catch (err) { - // file doesn't exist, or isn't valid json - return [] - } - } + // Speed things up by parsing only once + return JSON.parse("[" + file.data.toString().split("\n").filter(identity).join(",") + "]") + } catch (err) { + // file doesn't exist, or isn't valid json + return [] + } + }) get = async (): Promise => flatten(await Promise.all(this.options.shards.map(this.getShard))) setShard = (shard: string, items: T[]) => - this.#then(async () => { + this.#then(shard, async () => { await Filesystem.writeFile({ path: this.#path(shard), directory: Directory.Data, @@ -104,7 +106,7 @@ export class Collection { ) addToShard = (shard: string, items: T[]) => - this.#then(async () => { + this.#then(shard, async () => { await Filesystem.appendFile({ path: this.#path(shard), directory: Directory.Data, diff --git a/src/routes/[bech32]/+page.svelte b/src/routes/[bech32]/+page.svelte index 3cc3f37..d7597dc 100644 --- a/src/routes/[bech32]/+page.svelte +++ b/src/routes/[bech32]/+page.svelte @@ -1,6 +1,7 @@ - + diff --git a/src/routes/spaces/[relay]/+layout.svelte b/src/routes/spaces/[relay]/+layout.svelte index 4c5d541..e4705a3 100644 --- a/src/routes/spaces/[relay]/+layout.svelte +++ b/src/routes/spaces/[relay]/+layout.svelte @@ -31,7 +31,7 @@ const {children}: Props = $props() - const url = decodeRelay($page.params.relay) + const url = decodeRelay($page.params.relay!) const rooms = Array.from($userRoomsByUrl.get(url) || []) diff --git a/src/routes/spaces/[relay]/+page.svelte b/src/routes/spaces/[relay]/+page.svelte index 46282b0..9861553 100644 --- a/src/routes/spaces/[relay]/+page.svelte +++ b/src/routes/spaces/[relay]/+page.svelte @@ -26,7 +26,7 @@ import {makeChatPath} from "@app/util/routes" import {pushModal} from "@app/util/modal" - const url = decodeRelay($page.params.relay) + const url = decodeRelay($page.params.relay!) const relay = deriveRelay(url) const joinSpace = () => pushModal(SpaceJoin, {url}) diff --git a/src/routes/spaces/[relay]/[room]/+page.svelte b/src/routes/spaces/[relay]/[room]/+page.svelte index 6f46b97..7990fdf 100644 --- a/src/routes/spaces/[relay]/[room]/+page.svelte +++ b/src/routes/spaces/[relay]/[room]/+page.svelte @@ -5,6 +5,7 @@ import {page} from "$app/stores" import type {Readable} from "svelte/store" import {now, formatTimestampAsDate} from "@welshman/lib" + import type {MakeNonOptional} from "@welshman/lib" import {request} from "@welshman/net" import type {TrustedEvent, EventContent} from "@welshman/util" import { @@ -57,10 +58,10 @@ import {popKey} from "@lib/implicit" import {pushToast} from "@app/util/toast" - const {room} = $page.params + const {room, relay} = $page.params as MakeNonOptional const mounted = now() const lastChecked = $checked[$page.url.pathname] - const url = decodeRelay($page.params.relay) + const url = decodeRelay(relay) const channel = deriveChannel(url, room) const filter = {kinds: [MESSAGE], "#h": [room]} const isFavorite = $derived($userRoomsByUrl.get(url)?.has(room)) diff --git a/src/routes/spaces/[relay]/calendar/+page.svelte b/src/routes/spaces/[relay]/calendar/+page.svelte index 3ed881e..8cdf3fb 100644 --- a/src/routes/spaces/[relay]/calendar/+page.svelte +++ b/src/routes/spaces/[relay]/calendar/+page.svelte @@ -23,7 +23,7 @@ import {makeCalendarFeed} from "@app/core/requests" import {setChecked} from "@app/util/notifications" - const url = decodeRelay($page.params.relay) + const url = decodeRelay($page.params.relay!) const makeEvent = () => pushModal(CalendarEventCreate, {url}) diff --git a/src/routes/spaces/[relay]/calendar/[id]/+page.svelte b/src/routes/spaces/[relay]/calendar/[id]/+page.svelte index 91d78da..f104e5f 100644 --- a/src/routes/spaces/[relay]/calendar/[id]/+page.svelte +++ b/src/routes/spaces/[relay]/calendar/[id]/+page.svelte @@ -2,6 +2,7 @@ import {onMount} from "svelte" import {page} from "$app/stores" import {sortBy, sleep} from "@welshman/lib" + import type {MakeNonOptional} from "@welshman/lib" import {COMMENT, getTagValue} from "@welshman/util" import {request} from "@welshman/net" import {repository} from "@welshman/app" @@ -25,7 +26,7 @@ import {deriveEvent, decodeRelay} from "@app/core/state" import {setChecked} from "@app/util/notifications" - const {relay, id} = $page.params + const {relay, id} = $page.params as MakeNonOptional const url = decodeRelay(relay) const event = deriveEvent(id) const filters = [{kinds: [COMMENT], "#E": [id]}] diff --git a/src/routes/spaces/[relay]/chat/+page.svelte b/src/routes/spaces/[relay]/chat/+page.svelte index 0a8096a..c070b6a 100644 --- a/src/routes/spaces/[relay]/chat/+page.svelte +++ b/src/routes/spaces/[relay]/chat/+page.svelte @@ -36,7 +36,7 @@ const mounted = now() const lastChecked = $checked[$page.url.pathname] - const url = decodeRelay($page.params.relay) + const url = decodeRelay($page.params.relay!) const filter = {kinds: [MESSAGE]} const shouldProtect = canEnforceNip70(url) diff --git a/src/routes/spaces/[relay]/goals/+page.svelte b/src/routes/spaces/[relay]/goals/+page.svelte index c7b097d..0e9a69c 100644 --- a/src/routes/spaces/[relay]/goals/+page.svelte +++ b/src/routes/spaces/[relay]/goals/+page.svelte @@ -20,7 +20,7 @@ import {makeFeed} from "@app/core/requests" import {pushModal} from "@app/util/modal" - const url = decodeRelay($page.params.relay) + const url = decodeRelay($page.params.relay!) const mutedPubkeys = getPubkeyTagValues(getListTags($userMutes)) const goals: TrustedEvent[] = $state([]) const comments: TrustedEvent[] = $state([]) diff --git a/src/routes/spaces/[relay]/goals/[id]/+page.svelte b/src/routes/spaces/[relay]/goals/[id]/+page.svelte index 6d349f9..b7a5bd4 100644 --- a/src/routes/spaces/[relay]/goals/[id]/+page.svelte +++ b/src/routes/spaces/[relay]/goals/[id]/+page.svelte @@ -2,6 +2,7 @@ import {onMount} from "svelte" import {page} from "$app/stores" import {sortBy, sleep} from "@welshman/lib" + import type {MakeNonOptional} from "@welshman/lib" import {COMMENT, getTagValue} from "@welshman/util" import {repository} from "@welshman/app" import {request} from "@welshman/net" @@ -24,7 +25,7 @@ import {deriveEvent, decodeRelay} from "@app/core/state" import {setChecked} from "@app/util/notifications" - const {relay, id} = $page.params + const {relay, id} = $page.params as MakeNonOptional const url = decodeRelay(relay) const event = deriveEvent(id) const filters = [{kinds: [COMMENT], "#E": [id]}] diff --git a/src/routes/spaces/[relay]/threads/+page.svelte b/src/routes/spaces/[relay]/threads/+page.svelte index e93dcaa..053f58d 100644 --- a/src/routes/spaces/[relay]/threads/+page.svelte +++ b/src/routes/spaces/[relay]/threads/+page.svelte @@ -21,7 +21,7 @@ import {makeFeed} from "@app/core/requests" import {pushModal} from "@app/util/modal" - const url = decodeRelay($page.params.relay) + const url = decodeRelay($page.params.relay!) const mutedPubkeys = getPubkeyTagValues(getListTags($userMutes)) const threads: TrustedEvent[] = $state([]) const comments: TrustedEvent[] = $state([]) diff --git a/src/routes/spaces/[relay]/threads/[id]/+page.svelte b/src/routes/spaces/[relay]/threads/[id]/+page.svelte index 28f5c39..bbd19d8 100644 --- a/src/routes/spaces/[relay]/threads/[id]/+page.svelte +++ b/src/routes/spaces/[relay]/threads/[id]/+page.svelte @@ -2,6 +2,7 @@ import {onMount} from "svelte" import {page} from "$app/stores" import {sortBy, sleep} from "@welshman/lib" + import type {MakeNonOptional} from "@welshman/lib" import {COMMENT, getTagValue} from "@welshman/util" import {repository} from "@welshman/app" import {request} from "@welshman/net" @@ -23,7 +24,7 @@ import {deriveEvent, decodeRelay} from "@app/core/state" import {setChecked} from "@app/util/notifications" - const {relay, id} = $page.params + const {relay, id} = $page.params as MakeNonOptional const url = decodeRelay(relay) const event = deriveEvent(id) const filters = [{kinds: [COMMENT], "#E": [id]}]