fix(build): extract STORED_LOGO_SENTINEL to non-server module
Vite/React Router refused to bundle the client because app/routes/app.settings.tsx imported the constant from a .server file and used it inside the route component (not just loader/action), so it could not be tree-shaken out. Move the sentinel to logoCache.constants.ts, re-export from logoCache.server.ts for backwards compatibility, and import the constant from constants in the route while keeping the server-only functions (deleteStoredLogo, storeUploadedLogo) imported from .server (they are only referenced inside the action and get tree-shaken correctly).
This commit is contained in:
@@ -8,8 +8,8 @@ import {
|
|||||||
isValidIban,
|
isValidIban,
|
||||||
normaliseIban,
|
normaliseIban,
|
||||||
} from "../services/invoice/validation";
|
} from "../services/invoice/validation";
|
||||||
|
import { STORED_LOGO_SENTINEL } from "../services/invoice/logoCache.constants";
|
||||||
import {
|
import {
|
||||||
STORED_LOGO_SENTINEL,
|
|
||||||
deleteStoredLogo,
|
deleteStoredLogo,
|
||||||
storeUploadedLogo,
|
storeUploadedLogo,
|
||||||
} from "../services/invoice/logoCache.server";
|
} from "../services/invoice/logoCache.server";
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
/**
|
||||||
|
* Shared (client + server safe) constants for the logo cache.
|
||||||
|
* Kept in a non-`.server` module so route components can import them
|
||||||
|
* without React Router pulling server-only code into the client bundle.
|
||||||
|
*/
|
||||||
|
export const STORED_LOGO_SENTINEL = "stored://shop-logo";
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
import db from "../../db.server";
|
import db from "../../db.server";
|
||||||
|
import { STORED_LOGO_SENTINEL } from "./logoCache.constants";
|
||||||
|
|
||||||
const MAX_BYTES = 5 * 1024 * 1024; // 5 MB cap
|
const MAX_BYTES = 5 * 1024 * 1024; // 5 MB cap
|
||||||
const STALE_AFTER_MS = 24 * 60 * 60 * 1000; // re-fetch once a day at most
|
const STALE_AFTER_MS = 24 * 60 * 60 * 1000; // re-fetch once a day at most
|
||||||
@@ -7,8 +8,11 @@ const STALE_AFTER_MS = 24 * 60 * 60 * 1000; // re-fetch once a day at most
|
|||||||
* Sentinel value stored in `ShopSettings.logoUrl` when the logo was uploaded
|
* Sentinel value stored in `ShopSettings.logoUrl` when the logo was uploaded
|
||||||
* directly through the settings UI (rather than fetched from a remote URL).
|
* directly through the settings UI (rather than fetched from a remote URL).
|
||||||
* The actual bytes live in `LogoCache` for that shop.
|
* The actual bytes live in `LogoCache` for that shop.
|
||||||
|
*
|
||||||
|
* Re-exported from `logoCache.constants` so existing server-side imports keep
|
||||||
|
* working; new client/route imports should use `logoCache.constants` directly.
|
||||||
*/
|
*/
|
||||||
export const STORED_LOGO_SENTINEL = "stored://shop-logo";
|
export { STORED_LOGO_SENTINEL };
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a `data:` URL for the shop's logo bytes, fetching from the
|
* Returns a `data:` URL for the shop's logo bytes, fetching from the
|
||||||
|
|||||||
Reference in New Issue
Block a user