refactor(cache): keep the closed-block key helpers in a leaf module

Readers that tag a cell as a closed block no longer import the
invalidation module, which several tests replace wholesale. The cache
route test counts the slice's pre-fold cell apart from the route's two
cells, and the provenance test reads the shared pick's ORDER BY over its
grouped rows.
This commit is contained in:
Marc-André Bombeck committed 2026-10-22 09:09:44 +02:00
1 parent 4c86b68363
commit 83661319d2
7 files changed
+48 -36

No files matched your search

+2 -5
View File
@@ -1,10 +1,7 @@
import { beforeEach, describe, expect, it } from "vitest";
import {
closedBlockKeyPart,
closedBlockUntouched,
invalidateUserMeasurements,
} from "../invalidate";
import { closedBlockKeyPart, closedBlockUntouched } from "../closed-block";
import { invalidateUserMeasurements } from "../invalidate";
import { caches, type ServerCache } from "../server-cache";
const analytics = caches.analytics as ServerCache<{ v: number }>;
+23
View File
@@ -0,0 +1,23 @@
/**
* The key part that marks an analytics entry as a closed block: a value that
* depends only on readings measured before `before`. Such a block is the
* same however many syncs land after it, as long as none of them touches a
* reading that old, so a measurement write that says how far back it
* reached (`touchedFrom`) leaves it in place. Every other invalidation, and
* every write that does not say, drops it as before.
*/
export function closedBlockKeyPart(before: Date | number): string {
const ms = typeof before === "number" ? before : before.getTime();
return `before:${ms}`;
}
const CLOSED_BLOCK_RE = /\|before:(\d+)(?:\||$)/;
/**
* Whether `key` is a closed block that a write reaching back to
* `touchedFrom` cannot have changed. Exported for its test.
*/
export function closedBlockUntouched(key: string, touchedFrom: Date): boolean {
const match = CLOSED_BLOCK_RE.exec(key);
return match !== null && Number(match[1]) <= touchedFrom.getTime();
}
+1 -24
View File
@@ -20,6 +20,7 @@
import { forgetCoverageProbe } from "@/lib/rollups/coverage-inflight";
import { closedBlockUntouched } from "./closed-block";
import { caches } from "./server-cache";
/**
@@ -48,30 +49,6 @@ export function invalidateUserDashboardSnapshot(userId: string): void {
caches.analytics.deleteByPrefix(dashboardSnapshotCacheKey(userId));
}
/**
* The key part that marks an analytics entry as a closed block: a value that
* depends only on readings measured before `before`. Such a block is the
* same however many syncs land after it, as long as none of them touches a
* reading that old, so a measurement write that says how far back it
* reached (`touchedFrom`) leaves it in place. Every other invalidation, and
* every write that does not say, drops it as before.
*/
export function closedBlockKeyPart(before: Date | number): string {
const ms = typeof before === "number" ? before : before.getTime();
return `before:${ms}`;
}
const CLOSED_BLOCK_RE = /\|before:(\d+)(?:\||$)/;
/**
* Whether `key` is a closed block that a write reaching back to
* `touchedFrom` cannot have changed. Exported for its test.
*/
export function closedBlockUntouched(key: string, touchedFrom: Date): boolean {
const match = CLOSED_BLOCK_RE.exec(key);
return match !== null && Number(match[1]) <= touchedFrom.getTime();
}
/**
* Invalidate every cache that may reflect a user's measurement set.
*