commit f04381014572b32a13a2b29d1e1d4ce4a0cb1a7e
parent 120b29cc610121cd81c5da9e927bfbb03ab80129
Author: triesap <triesap@radroots.dev>
Date: Tue, 13 Jan 2026 13:48:09 +0000
app: unify asset caching and update build graph
- Route app init asset fetch through asset_cache_fetch with force-cache
- Preserve RADROOTS_ASSET_CACHE_NAME while clearing stale caches on reset
- Share asset cache constants between service worker and utils exports
- Update turbo build dependencies and bump packages submodule
Diffstat:
4 files changed, 56 insertions(+), 20 deletions(-)
diff --git a/app/src/lib/utils/app/index.ts b/app/src/lib/utils/app/index.ts
@@ -14,7 +14,7 @@ import { WebClientRadroots } from "@radroots/client/radroots";
import { WebTangleDatabase } from "@radroots/client/tangle";
import { Geocoder } from "@radroots/geocoder";
import { WebHttp } from "@radroots/http";
-import type { CallbackPromise } from "@radroots/utils";
+import { asset_cache_fetch, type CallbackPromise } from "@radroots/utils";
import { writable } from "svelte/store";
import { reset_sql_cipher } from "./cipher";
import type { NavigationRoute } from "./routes";
@@ -130,7 +130,7 @@ const app_init_total_unknown = (): void => {
const app_init_fetch_asset = async (url: string, stage: AppInitStage): Promise<void> => {
app_init_state_update({ stage });
- const response = await fetch(url, { cache: "force-cache" });
+ const response = await asset_cache_fetch(url, { request_init: { cache: "force-cache" } });
if (!response.ok && response.type !== "opaque") throw new Error(`asset_fetch_failed:${url}`);
const content_length = response.headers.get("content-length");
if (content_length) app_init_total_add(Number(content_length));
diff --git a/app/src/routes/+layout.svelte b/app/src/routes/+layout.svelte
@@ -27,7 +27,7 @@
import type { LibContext } from "@radroots/apps-lib-pwa/types/context";
import { CFG_APP } from "@radroots/apps-lib-pwa/utils/app";
import { parse_theme_key, parse_theme_mode } from "@radroots/themes";
- import { str_cap_words } from "@radroots/utils";
+ import { RADROOTS_ASSET_CACHE_NAME, str_cap_words } from "@radroots/utils";
import "css-paint-polyfill";
import { onMount } from "svelte";
import "../app.css";
@@ -112,7 +112,8 @@
await Promise.all(registrations.map((registration) => registration.unregister()));
if (!("caches" in globalThis)) return;
const cache_names = await caches.keys();
- await Promise.all(cache_names.map((name) => caches.delete(name)));
+ const stale_cache_names = cache_names.filter((name) => name !== RADROOTS_ASSET_CACHE_NAME);
+ await Promise.all(stale_cache_names.map((name) => caches.delete(name)));
};
onMount(async () => {
diff --git a/app/src/service-worker.js b/app/src/service-worker.js
@@ -2,6 +2,7 @@ import { build, files, prerendered, version } from "$service-worker";
import { _env } from "$lib/_env";
import { DEFAULT_SQL_WASM_PATH } from "@radroots/client/sql/constants";
import { DEFAULT_GEOCODER_DATABASE_PATH } from "@radroots/geocoder/constants";
+import { RADROOTS_ASSET_CACHE_NAME, RADROOTS_ASSET_CACHE_PREFIX } from "@radroots/utils";
const APP_SHELL_URL = new URL(self.registration.scope).pathname;
const normalize_env_path = (value) =>
@@ -46,8 +47,8 @@ const PRECACHE_LIST = PRECACHE_URLS.map((url) => ({
}));
const APP_CACHE = `cache-app-shell-v${version}`;
const APP_CACHE_PREFIX = "cache-app-shell-v";
-const ASSET_CACHE = "cache-app-assets-v1";
-const ASSET_CACHE_PREFIX = "cache-app-assets-v";
+const ASSET_CACHE = RADROOTS_ASSET_CACHE_NAME;
+const ASSET_CACHE_PREFIX = RADROOTS_ASSET_CACHE_PREFIX;
const normalize_asset_url = (url) => {
const resolved = new URL(url, self.location.origin);
diff --git a/turbo.json b/turbo.json
@@ -40,6 +40,7 @@
"@radroots/geocoder#build",
"@radroots/http#build",
"@radroots/locales#build",
+ "@radroots/nfc#build",
"@radroots/nostr#build",
"@radroots/tangle-db-schema-bindings#build",
"@radroots/themes#build",
@@ -74,38 +75,48 @@
"@radroots/nostr#build",
"@radroots/tangle-db-schema-bindings#build",
"@radroots/tangle-db-wasm#build",
+ "@radroots/tangle-events-wasm#build",
"@radroots/types-bindings#build",
- "@radroots/utils#build"
+ "@radroots/utils#build",
+ "@radroots/tsconfig#build"
]
},
"@radroots/geo#build": {
"dependsOn": [
"@radroots/tangle-db-schema-bindings#build",
- "@radroots/utils#build"
+ "@radroots/utils#build",
+ "@radroots/tsconfig#build"
]
},
"@radroots/geocoder#build": {
"dependsOn": [
"@radroots/geo#build",
"@radroots/types-bindings#build",
- "@radroots/utils#build"
+ "@radroots/utils#build",
+ "@radroots/tsconfig#build"
]
},
"@radroots/http#build": {
"dependsOn": [
"@radroots/types-bindings#build",
- "@radroots/utils#build"
+ "@radroots/utils#build",
+ "@radroots/tsconfig#build"
]
},
"@radroots/locales#build": {
- "dependsOn": []
+ "dependsOn": [
+ "@radroots/tsconfig#build"
+ ]
},
"@radroots/themes#build": {
- "dependsOn": []
+ "dependsOn": [
+ "@radroots/tsconfig#build"
+ ]
},
"@radroots/utils#build": {
"dependsOn": [
- "@radroots/types-bindings#build"
+ "@radroots/types-bindings#build",
+ "@radroots/tsconfig#build"
]
},
"@radroots/nostr#build": {
@@ -117,7 +128,8 @@
"@radroots/utils#build",
"@welshman/net#build",
"@welshman/signer#build",
- "@welshman/util#build"
+ "@welshman/util#build",
+ "@radroots/tsconfig#build"
]
},
"@radroots/apps-nostr#build": {
@@ -126,7 +138,8 @@
"@welshman/app#build",
"@welshman/net#build",
"@welshman/signer#build",
- "@welshman/store#build"
+ "@welshman/store#build",
+ "@radroots/tsconfig#build"
]
},
"@radroots/apps-lib-market#build": {
@@ -140,22 +153,28 @@
]
},
"@radroots/core-bindings#build": {
- "dependsOn": []
+ "dependsOn": [
+ "@radroots/tsconfig#build"
+ ]
},
"@radroots/events-bindings#build": {
"dependsOn": [
- "@radroots/core-bindings#build"
+ "@radroots/core-bindings#build",
+ "@radroots/tsconfig#build"
]
},
"@radroots/events-codec-wasm#build": {
"dependsOn": []
},
"@radroots/events-indexed-bindings#build": {
- "dependsOn": []
+ "dependsOn": [
+ "@radroots/tsconfig#build"
+ ]
},
"@radroots/tangle-db-schema-bindings#build": {
"dependsOn": [
- "@radroots/types-bindings#build"
+ "@radroots/types-bindings#build",
+ "@radroots/tsconfig#build"
]
},
"@radroots/tangle-db-wasm#build": {
@@ -164,10 +183,25 @@
"@radroots/trade-bindings#build": {
"dependsOn": [
"@radroots/core-bindings#build",
- "@radroots/events-bindings#build"
+ "@radroots/events-bindings#build",
+ "@radroots/tsconfig#build"
]
},
"@radroots/types-bindings#build": {
+ "dependsOn": [
+ "@radroots/tsconfig#build"
+ ]
+ },
+ "@radroots/nfc#build": {
+ "dependsOn": [
+ "@radroots/utils#build",
+ "@radroots/tsconfig#build"
+ ]
+ },
+ "@radroots/tsconfig#build": {
+ "dependsOn": []
+ },
+ "@radroots/tangle-events-wasm#build": {
"dependsOn": []
}
}