@dee-wan/cache 1.0.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/README.md +208 -3
  2. package/dist/chunk-A4WV6RY4.js +311 -0
  3. package/dist/chunk-A4WV6RY4.js.map +1 -0
  4. package/dist/chunk-AENVFT2S.js +6 -0
  5. package/dist/chunk-AENVFT2S.js.map +1 -0
  6. package/dist/chunk-E6OZZ5UX.js +133 -0
  7. package/dist/chunk-E6OZZ5UX.js.map +1 -0
  8. package/dist/chunk-JPK2AF7X.js +18 -0
  9. package/dist/chunk-JPK2AF7X.js.map +1 -0
  10. package/dist/chunk-LAXBP5DQ.js +330 -0
  11. package/dist/chunk-LAXBP5DQ.js.map +1 -0
  12. package/dist/chunk-LHOK33GI.js +12 -0
  13. package/dist/chunk-LHOK33GI.js.map +1 -0
  14. package/dist/chunk-M4UOCIDQ.js +557 -0
  15. package/dist/chunk-M4UOCIDQ.js.map +1 -0
  16. package/dist/chunk-NFBMWKY5.js +54 -0
  17. package/dist/chunk-NFBMWKY5.js.map +1 -0
  18. package/dist/chunk-O3KHMFHX.js +425 -0
  19. package/dist/chunk-O3KHMFHX.js.map +1 -0
  20. package/dist/chunk-WJNCFFF3.js +637 -0
  21. package/dist/chunk-WJNCFFF3.js.map +1 -0
  22. package/dist/chunk-WKZ7TKGM.js +82 -0
  23. package/dist/chunk-WKZ7TKGM.js.map +1 -0
  24. package/dist/chunk-ZBYAKDNZ.js +45 -0
  25. package/dist/chunk-ZBYAKDNZ.js.map +1 -0
  26. package/dist/chunk-ZCMZJKGN.js +78 -0
  27. package/dist/chunk-ZCMZJKGN.js.map +1 -0
  28. package/dist/client.d.ts +63 -0
  29. package/dist/client.js +260 -0
  30. package/dist/client.js.map +1 -0
  31. package/dist/cloudflare/index.d.ts +15 -2
  32. package/dist/cloudflare/index.js +413 -45
  33. package/dist/cloudflare/index.js.map +1 -1
  34. package/dist/d1/config.d.ts +41 -0
  35. package/dist/d1/config.js +102 -0
  36. package/dist/d1/config.js.map +1 -0
  37. package/dist/d1/index.d.ts +80 -0
  38. package/dist/d1/index.js +218 -0
  39. package/dist/d1/index.js.map +1 -0
  40. package/dist/d1/response-lease.d.ts +9 -0
  41. package/dist/d1/response-lease.js +44 -0
  42. package/dist/d1/response-lease.js.map +1 -0
  43. package/dist/index.d.ts +2 -2
  44. package/dist/index.js +3 -616
  45. package/dist/index.js.map +1 -1
  46. package/dist/profile--LBtbQI_.d.ts +30 -0
  47. package/dist/response-lease-DeeM-ofO.d.ts +19 -0
  48. package/dist/response-lease.d.ts +7 -0
  49. package/dist/response-lease.js +14 -0
  50. package/dist/response-lease.js.map +1 -0
  51. package/dist/response-warmup-BWQvnT1G.d.ts +38 -0
  52. package/dist/scoped-read.d.ts +12 -0
  53. package/dist/scoped-read.js +30 -0
  54. package/dist/scoped-read.js.map +1 -0
  55. package/dist/{types-DwtU0KpX.d.ts → types-CtErcz2a.d.ts} +25 -1
  56. package/docs/cache-contract.md +49 -1
  57. package/package.json +31 -2
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/response-warmup.ts"],"names":["job","index","response"],"mappings":"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","file":"chunk-A4WV6RY4.js","sourcesContent":["import { createRegionalCache } from './d1/regional';\n\nexport type ReadResponseWarmupTarget = string | { url: string; scope: string | null };\n\nexport interface ReadResponseWarmupContext { scope: string | null; popularScopes: readonly string[] }\n\nexport interface ReadResponseWarmupOptions {\n scopeHeader: string;\n seeds: readonly ReadResponseWarmupTarget[];\n catalogScope?: 'credential';\n discoveryPriority?: 'next';\n discoverScopeFrom?: string;\n isCurrent?: () => boolean;\n discover?: (url: URL, body: unknown, context: ReadResponseWarmupContext) => { scope?: string; targets: readonly ReadResponseWarmupTarget[] };\n portable?: (url: URL) => boolean;\n maxTargets?: number;\n maxEntries?: number;\n concurrency?: number;\n cooldownMs?: number;\n maxMilliseconds?: number;\n catalogTtlMs?: number;\n}\n\ntype Entry = { url: string; count: number; time: number; scope?: string | null };\ntype WarmJob = { url: string; scope: string | null; override: boolean; priority: number };\nconst catalog = createRegionalCache(86_400_000, 128_000);\nconst validScope = (value: string | null | undefined): value is string => !!value && value.length <= 256 && ![...value].some((character) => character.charCodeAt(0) < 32 || character.charCodeAt(0) === 127);\n\nexport function createResponseWarmup<Env, Context>(run: (request: Request, env: Env, context: Context) => Promise<Response>, canRun: () => boolean = () => true) {\n let generation = 0;\n const internal = new WeakMap<Request, { generation: number; isCurrent?: () => boolean }>();\n const active = new Map<string, { until: number }>();\n const verified = new WeakSet<Request>();\n let running = 0, waiting = 0;\n const currentValue = (check?: () => boolean) => { try { return check === undefined || check() === true; } catch { return false; } };\n const acquire = async (limit: number, current: number, end: number, check?: () => boolean): Promise<(() => void) | null> => {\n if (waiting >= 256) return null;\n waiting++;\n try {\n while (current === generation && currentValue(check) && Date.now() < end) {\n if (running < limit && canRun()) { running++; return () => { running--; }; }\n await new Promise<void>((resolve) => setTimeout(resolve, Math.min(25, Math.max(0, end - Date.now()))));\n }\n return null;\n } finally { waiting--; }\n };\n const invalidate = () => { generation++; active.clear(); };\n const allowed = (request: Request) => {\n const meta = internal.get(request);\n return !meta || (meta.generation === generation && currentValue(meta.isCurrent) && !request.signal.aborted);\n };\n const isInternal = (request: Request) => internal.has(request);\n const verify = (request: Request) => { if (allowed(request)) verified.add(request); };\n async function start(options: ReadResponseWarmupOptions | undefined, request: Request, response: Response, identity: unknown[], group: string, eligible: (url: URL) => boolean, env: Env, context: Context, freshnessHeader?: string, credentialGroup?: string) {\n try {\n if (!options || isInternal(request)) return;\n const { scopeHeader, seeds, discover, portable, discoverScopeFrom, isCurrent, catalogScope, discoveryPriority } = options;\n if (isCurrent !== undefined && typeof isCurrent !== 'function') return;\n if (!currentValue(isCurrent)) return;\n const maxTargets = options.maxTargets ?? 48, maxEntries = options.maxEntries ?? 32, concurrency = options.concurrency ?? 4;\n const cooldown = options.cooldownMs ?? 30_000, duration = options.maxMilliseconds ?? 25_000, ttl = options.catalogTtlMs ?? 86_400_000;\n if (typeof scopeHeader !== 'string' || !/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/.test(scopeHeader) || !Array.isArray(seeds) || seeds.length > 256 || !seeds.every((v) => typeof v === 'string' || (!!v && typeof v === 'object' && typeof v.url === 'string' && (v.scope === null || validScope(v.scope)))) || (catalogScope !== undefined && catalogScope !== 'credential') || (discoveryPriority !== undefined && discoveryPriority !== 'next') || (catalogScope === 'credential' && !credentialGroup) || (discoverScopeFrom !== undefined && (typeof discoverScopeFrom !== 'string' || typeof discover !== 'function')) || (discover !== undefined && typeof discover !== 'function') || (portable !== undefined && typeof portable !== 'function') || ![maxTargets, maxEntries, concurrency, cooldown, duration, ttl].every(Number.isSafeInteger) || maxTargets < 1 || maxTargets > 256 || maxEntries < 1 || maxEntries > 128 || concurrency < 1 || concurrency > 16 || cooldown < 0 || cooldown > 86_400_000 || duration < 1 || duration > 30_000 || ttl < 1 || ttl > 86_400_000) return;\n const current = generation, end = Date.now() + duration;\n const stillCurrent = () => current === generation && currentValue(isCurrent);\n const prior = active.get(group);\n const cooling = prior !== undefined && prior.until > Date.now();\n const marker = { until: end + cooldown };\n if (!cooling) active.set(group, marker);\n if (active.size > 1024) for (const [key, value] of active) { if (value.until <= Date.now()) active.delete(key); }\n if (active.size > 1024) active.delete(active.keys().next().value ?? '');\n const base = new URL(request.url);\n let scope = request.headers.get(scopeHeader);\n if (!validScope(scope)) scope = null;\n const rootScope = scope;\n const jobKey = (url: string, value: string | null) => JSON.stringify([url, value]);\n const queue: WarmJob[] = [], seen = new Set<string>([jobKey(base.href, scope)]);\n let abandoned = false;\n let completedBootstrap: string | undefined;\n const urlFor = (target: string): URL | null => {\n try {\n const url = new URL(target, base);\n if (url.origin !== base.origin || url.username || url.password || url.hash || url.href.length > 2048 || !eligible(url)) return null;\n return url;\n } catch { return null; }\n };\n const bootstrap = discoverScopeFrom === undefined ? null : urlFor(discoverScopeFrom);\n if (discoverScopeFrom !== undefined && (!bootstrap || !seeds.some((seed) => typeof seed === 'string' && urlFor(seed)?.href === bootstrap.href))) return;\n const enqueue = (target: ReadResponseWarmupTarget, priority = 2) => {\n if (typeof target !== 'string' && (!target || typeof target !== 'object' || typeof target.url !== 'string' || !(target.scope === null || validScope(target.scope)))) return;\n const explicit = typeof target !== 'string';\n const url = urlFor(explicit ? target.url : target);\n const targetScope = explicit ? target.scope : scope;\n const key = url && jobKey(url.href, targetScope);\n if (!url || !key || key === completedBootstrap) return;\n if (seen.has(key)) {\n const existing = queue.findIndex((job) => job.url === url.href && job.scope === targetScope);\n const queued = existing >= 0 ? queue[existing] : undefined;\n if (queued && queued.priority > priority) {\n queue.splice(existing, 1); queued.priority = priority;\n const index = queue.findIndex((item) => item.priority > priority);\n if (index === -1) queue.push(queued); else queue.splice(index, 0, queued);\n }\n return;\n }\n if (seen.size > maxTargets && priority < 2) {\n let index = queue.length - 1;\n while (index >= 0 && queue[index]?.priority !== 2) index--;\n if (index >= 0) { const removed = queue.splice(index, 1)[0]; if (removed) seen.delete(jobKey(removed.url, removed.scope)); }\n }\n if (seen.size > maxTargets) return;\n seen.add(key);\n const job = { url:url.href, scope:targetScope, override:explicit || (!request.headers.has(scopeHeader) && targetScope !== null), priority };\n const index = queue.findIndex((item) => item.priority > priority);\n if (index === -1) queue.push(job); else queue.splice(index, 0, job);\n };\n const keyFor = async (value: string | null) => catalog.regionalKey(ttl, catalogScope === 'credential' ? ['response-warmup-credential-v1', identity, credentialGroup] : ['response-warmup-v1', identity, value]);\n let loadedScope: string | null | undefined;\n const popularScopes: string[] = [];\n const load = async () => {\n if (catalogScope !== 'credential' && !scope) return;\n const lookup = catalogScope === 'credential' ? null : scope;\n if (loadedScope === lookup) return;\n loadedScope = lookup;\n const key = await keyFor(lookup);\n const result = await catalog.regionalRead(key, ttl);\n if (!Array.isArray(result?.value)) return;\n for (const entry of result.value) {\n if (!entry || typeof entry !== 'object' || typeof entry.url !== 'string' || typeof entry.time !== 'number' || Date.now() - entry.time >= ttl) continue;\n if (catalogScope === 'credential') {\n if (entry.scope === null || validScope(entry.scope)) {\n if (validScope(entry.scope) && !popularScopes.includes(entry.scope) && urlFor(entry.url)) popularScopes.push(entry.scope);\n enqueue({ url:entry.url, scope:entry.scope }, 0);\n }\n } else enqueue(entry.url, 0);\n }\n };\n const record = async (url: URL) => {\n const effectiveScope = rootScope ?? scope;\n if ((catalogScope !== 'credential' && !effectiveScope) || !portable?.(url)) return;\n const key = await keyFor(effectiveScope), result = await catalog.regionalRead(key, ttl);\n const entries: Entry[] = Array.isArray(result?.value) ? result.value.filter((v): v is Entry => !!v && typeof v.url === 'string' && typeof v.count === 'number' && Number.isFinite(v.count) && typeof v.time === 'number' && Date.now() - v.time < ttl && !!urlFor(v.url) && (catalogScope !== 'credential' || v.scope === null || validScope(v.scope))).slice(0, maxEntries) : [];\n const existing = entries.find((item) => item.url === url.href && (catalogScope !== 'credential' || item.scope === effectiveScope));\n if (existing) { existing.count = Math.min(existing.count + 1, 1_000_000); existing.time = Date.now(); }\n else entries.push({ url:url.href, count:1, time:Date.now(), ...(catalogScope === 'credential' ? { scope:effectiveScope } : {}) });\n if (catalogScope === 'credential') {\n const totals = new Map<string | null, number>();\n for (const item of entries) totals.set(item.scope ?? null, (totals.get(item.scope ?? null) ?? 0) + item.count);\n entries.sort((a, b) => (totals.get(b.scope ?? null) ?? 0) - (totals.get(a.scope ?? null) ?? 0) || b.count - a.count || b.time - a.time);\n } else entries.sort((a, b) => b.count - a.count || b.time - a.time);\n if (stillCurrent()) await catalog.regionalWrite(key, ttl, Date.now(), entries.slice(0, maxEntries));\n };\n const inspect = async (url: URL, value: Response, deferred?: ReadResponseWarmupTarget[], preload = false) => {\n let body: unknown;\n try {\n if (!discover) return;\n let timer: ReturnType<typeof setTimeout> | undefined;\n try {\n body = await Promise.race([value.json(), new Promise<never>((_, reject) => { timer = setTimeout(() => reject(Error('warmup deadline')), Math.max(0, end - Date.now())); })]);\n } finally {\n if (timer !== undefined) clearTimeout(timer);\n }\n if (Date.now() >= end || !stillCurrent()) return;\n } catch { return; }\n finally { void value.body?.cancel().catch(() => undefined); }\n if (preload) await load();\n if (!discover || Date.now() >= end || !stillCurrent()) return;\n let found: { scope?: string; targets: readonly ReadResponseWarmupTarget[] };\n try { found = discover(url, body, { scope:rootScope ?? scope, popularScopes:[...popularScopes] }); }\n catch { return; }\n if (!found || !Array.isArray(found.targets)) return;\n if (!request.headers.has(scopeHeader) && !scope && validScope(found.scope)) {\n scope = found.scope;\n if (bootstrap?.href === url.href) completedBootstrap = jobKey(url.href, scope);\n if (!deferred) await load();\n }\n for (const target of found.targets.slice(0, maxTargets)) {\n if (typeof target !== 'string' && (!target || typeof target !== 'object' || typeof target.url !== 'string' || !(target.scope === null || validScope(target.scope)))) continue;\n if (deferred) deferred.push(target);\n else enqueue(target, discoveryPriority === 'next' ? 1 : 2);\n }\n };\n const runOne = async (target: WarmJob) => {\n await new Promise<void>((resolve) => setTimeout(resolve, 0));\n if (!stillCurrent() || Date.now() >= end) { abandoned = true; return; }\n let release: (() => void) | null = null;\n while (stillCurrent() && Date.now() < end) {\n release = await acquire(concurrency, current, end, isCurrent);\n if (!release) { abandoned = true; return; }\n if (canRun()) break;\n release(); release = null;\n }\n if (!release) { abandoned = true; return; }\n if (!stillCurrent() || Date.now() >= end) { abandoned = true; release(); return; }\n const releaseSlot = release;\n let controller: AbortController | undefined;\n let timer: ReturnType<typeof setTimeout> | undefined;\n let started = false;\n try {\n const headers = new Headers(request.headers);\n for (const name of ['cache-control', 'pragma', 'range', 'if-match', 'if-unmodified-since', 'if-range', 'if-none-match', 'if-modified-since']) headers.delete(name);\n if (freshnessHeader) headers.delete(freshnessHeader);\n if (target.override) { if (target.scope === null) headers.delete(scopeHeader); else headers.set(scopeHeader, target.scope); }\n controller = new AbortController();\n const abort = controller;\n const watch = () => {\n if (!stillCurrent() || Date.now() >= end) { abort.abort(); return; }\n timer = setTimeout(watch, Math.min(25, Math.max(0, end - Date.now())));\n };\n timer = setTimeout(watch, Math.min(25, Math.max(0, end - Date.now())));\n const warm = new Request(target.url, { method:'GET', headers, redirect:'manual', signal:abort.signal });\n internal.set(warm, { generation:current, isCurrent });\n const task = Promise.resolve().then(() => run(warm, env, context));\n started = true;\n void task.then((response) => { if (abort.signal.aborted) void response.body?.cancel().catch(() => undefined); releaseSlot(); }, () => { releaseSlot(); });\n const result = await Promise.race([task, new Promise<never>((_, reject) => abort.signal.addEventListener('abort', () => reject(Error('warmup deadline')), { once:true }))]);\n if (verified.has(warm) && result.status === 200 && stillCurrent() && Date.now() < end) await inspect(new URL(target.url), result);\n void result.body?.cancel().catch(() => undefined);\n } catch { /* Background warming is best effort. */ }\n finally {\n if (controller?.signal.aborted) abandoned = true;\n if (timer !== undefined) clearTimeout(timer);\n if (!started) releaseSlot();\n }\n };\n try {\n if (cooling) { void response.body?.cancel().catch(() => undefined); await record(base); return; }\n const unscopedSeeds = () => {\n for (const seed of seeds) if (typeof seed !== 'string' && seed.scope === null) enqueue(seed, -1);\n };\n if (!bootstrap || scope) unscopedSeeds();\n const discovered: ReadResponseWarmupTarget[] = [];\n await inspect(base, response, discovered, catalogScope === 'credential' && !bootstrap);\n if (bootstrap && !scope) {\n enqueue(bootstrap.href);\n const index = queue.findIndex((job) => job.url === bootstrap.href && job.scope === scope);\n const job = index === -1 ? undefined : queue.splice(index, 1)[0];\n if (job && stillCurrent() && Date.now() < end) await runOne(job);\n if (!scope || !stillCurrent() || Date.now() >= end) return;\n }\n unscopedSeeds();\n await load();\n if (discoveryPriority === 'next') for (const target of discovered) enqueue(target, 1);\n for (const seed of seeds) if (typeof seed === 'string' || seed.scope !== null) enqueue(seed);\n if (discoveryPriority !== 'next') for (const target of discovered) enqueue(target);\n await record(base);\n const worker = async () => {\n while (queue.length && stillCurrent() && Date.now() < end) {\n const target = queue.shift(); if (!target) return;\n await runOne(target);\n }\n };\n await Promise.all(Array.from({ length:concurrency }, worker));\n } catch { /* Background warming is best effort. */ }\n finally {\n if (!cooling && (abandoned || queue.length > 0) && active.get(group) === marker) active.delete(group);\n }\n } finally { void response.body?.cancel().catch(() => undefined); }\n }\n return { start, invalidate, allowed, isInternal, verify, snapshot:() => generation, current:(value: number) => value === generation };\n}\n"]}
@@ -0,0 +1,6 @@
1
+ // src/d1/profile.ts
2
+ var isD1BindingName = (key, profile) => profile.bindingNames.includes(key) || profile.bindingPrefixes.some((prefix) => key.startsWith(prefix) && /^[A-Za-z0-9_]{1,48}$/.test(key.slice(prefix.length)));
3
+
4
+ export { isD1BindingName };
5
+ //# sourceMappingURL=chunk-AENVFT2S.js.map
6
+ //# sourceMappingURL=chunk-AENVFT2S.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/d1/profile.ts"],"names":[],"mappings":";AA6BO,IAAM,eAAA,GAAkB,CAAC,GAAA,EAAa,OAAA,KAC3C,OAAA,CAAQ,aAAa,QAAA,CAAS,GAAG,CAAA,IAAK,OAAA,CAAQ,eAAA,CAAgB,IAAA,CAAK,CAAC,MAAA,KAAW,GAAA,CAAI,UAAA,CAAW,MAAM,CAAA,IAAK,sBAAA,CAAuB,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,MAAA,CAAO,MAAM,CAAC,CAAC","file":"chunk-AENVFT2S.js","sourcesContent":["export interface D1WritePolicy {\n unfencedWriteTables: readonly string[];\n}\n\nexport interface D1CacheProfile extends D1WritePolicy {\n readModels: readonly string[];\n envPrefix: string;\n bindingNames: readonly string[];\n bindingPrefixes: readonly string[];\n coordinatorNamePrefix: string;\n coordinatorClass: string;\n readResponseLease?: {\n databaseBinding: string;\n deploymentEnv: string;\n paths: readonly string[];\n credentialHeaders: readonly string[];\n cookieNames?: readonly string[];\n varyHeaders: readonly string[];\n bypassQueryParams?: readonly string[];\n ignoreRequestCacheControl?: boolean;\n freshnessHeader?: string;\n maxSeconds?: number;\n refreshAheadSeconds?: number;\n freshnessCookie: string;\n freshnessCookieMode?: string;\n freshnessCookieExcludedPaths?: readonly string[];\n };\n}\n\nexport const isD1BindingName = (key: string, profile: D1CacheProfile): boolean =>\n profile.bindingNames.includes(key) || profile.bindingPrefixes.some((prefix) => key.startsWith(prefix) && /^[A-Za-z0-9_]{1,48}$/.test(key.slice(prefix.length)));\n"]}
@@ -0,0 +1,133 @@
1
+ import { encode, decode, stableStringify, sha256Hex } from './chunk-ZCMZJKGN.js';
2
+
3
+ // src/core/bounded-value.ts
4
+ function boundedValue(value, maxBytes, identity) {
5
+ let remaining = 1e4;
6
+ let bytes = maxBytes;
7
+ const seen = /* @__PURE__ */ new Set();
8
+ const count = (text) => {
9
+ if (text.length > bytes) return false;
10
+ bytes -= new TextEncoder().encode(text).byteLength;
11
+ return bytes >= 0;
12
+ };
13
+ const check = (part, depth, objectValue) => {
14
+ if (--remaining < 0 || depth > 24) return false;
15
+ if (part === void 0) return identity || !objectValue;
16
+ if (part === null || typeof part === "boolean") return true;
17
+ if (typeof part === "string") return count(part);
18
+ if (typeof part === "number") return !Object.is(part, -0);
19
+ if (typeof part === "bigint") return count(part.toString());
20
+ if (typeof part !== "object" || seen.has(part)) return false;
21
+ if (part instanceof Date) return Number.isFinite(part.getTime());
22
+ if (part instanceof Uint8Array) {
23
+ bytes -= part.byteLength * 2;
24
+ return bytes >= 0;
25
+ }
26
+ const prototype = Object.getPrototypeOf(part);
27
+ if (!Array.isArray(part) && prototype !== Object.prototype) return false;
28
+ if (Object.getOwnPropertySymbols(part).length > 0) return false;
29
+ if (Array.isArray(part) && part.length > remaining) return false;
30
+ const properties = Object.getOwnPropertyDescriptors(part);
31
+ if (Object.entries(properties).some(([key, descriptor]) => !(Array.isArray(part) && key === "length") && (!descriptor.enumerable || !("value" in descriptor)))) return false;
32
+ if (Array.isArray(part) && Object.keys(properties).some((key) => key !== "length" && !/^(0|[1-9]\d*)$/.test(key))) return false;
33
+ seen.add(part);
34
+ const valid = Array.isArray(part) ? Array.from({ length: part.length }, (_, index) => Object.hasOwn(part, index) && check(part[index], depth + 1, false)).every(Boolean) : Object.entries(properties).every(([key, descriptor]) => count(key) && check(descriptor.value, depth + 1, true));
35
+ seen.delete(part);
36
+ return valid;
37
+ };
38
+ try {
39
+ return check(value, 0, false);
40
+ } catch {
41
+ return false;
42
+ }
43
+ }
44
+
45
+ // src/d1/regional.ts
46
+ var MAX_IDENTITY_BYTES = 32768;
47
+ var MAX_VALUE_BYTES = 15e5;
48
+ var MAX_RESPONSE_LEASE_BYTES = 8e6;
49
+ function sameEncodedValue(left, right) {
50
+ let remaining = 1e5;
51
+ const same = (a, b, depth) => {
52
+ if (--remaining < 0 || depth > 64) return false;
53
+ if (a === b) return true;
54
+ if (!a || !b || typeof a !== "object" || typeof b !== "object") return false;
55
+ if (Array.isArray(a) || Array.isArray(b)) return Array.isArray(a) && Array.isArray(b) && a.length === b.length && a.every((value, index) => same(value, b[index], depth + 1));
56
+ const keys = Object.keys(a);
57
+ return keys.length === Object.keys(b).length && keys.every((key) => Object.hasOwn(b, key) && same(Reflect.get(a, key), Reflect.get(b, key), depth + 1));
58
+ };
59
+ return same(left, right, 0);
60
+ }
61
+ function createRegionalCache(maxMs, maxValueBytes = MAX_VALUE_BYTES, options = {}) {
62
+ const cache = options.cache ?? (() => caches.default);
63
+ const now = options.now ?? (() => Date.now());
64
+ async function regionalKey2(ttl, identity) {
65
+ if (!Number.isFinite(ttl) || !ttl || ttl <= 0 || ttl > maxMs || !boundedValue(identity, MAX_IDENTITY_BYTES, true)) return null;
66
+ try {
67
+ const text = stableStringify(identity);
68
+ if (new TextEncoder().encode(text).byteLength > MAX_IDENTITY_BYTES) return null;
69
+ return `https://dee-wan-cache.invalid/regional-v1/${await sha256Hex(text)}`;
70
+ } catch {
71
+ return null;
72
+ }
73
+ }
74
+ async function regionalRead2(key, ttl = maxMs, decimal) {
75
+ if (!key) return null;
76
+ try {
77
+ const response = await cache().match(key);
78
+ if (!response || response.status !== 200 || response.headers.has("set-cookie")) return null;
79
+ const reader = response.body?.getReader();
80
+ if (!reader) return null;
81
+ const chunks = [];
82
+ let size = 0;
83
+ let timer;
84
+ try {
85
+ const timeout = new Promise((_, reject) => {
86
+ timer = setTimeout(() => reject(new Error("cache body timeout")), 1e3);
87
+ });
88
+ for (; ; ) {
89
+ const part = await Promise.race([reader.read(), timeout]);
90
+ if (part.done) break;
91
+ size += part.value.byteLength;
92
+ if (size > maxValueBytes) return null;
93
+ chunks.push(part.value);
94
+ }
95
+ } finally {
96
+ if (timer !== void 0) clearTimeout(timer);
97
+ void reader.cancel().catch(() => void 0);
98
+ }
99
+ const bytes = new Uint8Array(size);
100
+ let offset = 0;
101
+ for (const chunk of chunks) {
102
+ bytes.set(chunk, offset);
103
+ offset += chunk.byteLength;
104
+ }
105
+ const text = new TextDecoder("utf-8", { fatal: true, ignoreBOM: false }).decode(bytes);
106
+ const envelope = JSON.parse(text);
107
+ const currentTime = now();
108
+ if (!Number.isFinite(ttl) || ttl <= 0 || ttl > maxMs || !envelope || typeof envelope !== "object" || !("started" in envelope) || typeof envelope.started !== "number" || !Number.isSafeInteger(envelope.started) || envelope.started > currentTime || !("expires" in envelope) || typeof envelope.expires !== "number" || !Number.isSafeInteger(envelope.expires) || envelope.expires <= currentTime || envelope.expires > envelope.started + ttl || envelope.expires > currentTime + ttl || !("value" in envelope)) return null;
109
+ const value = decode(envelope.value, decimal);
110
+ return value !== null && value !== void 0 && boundedValue(value, maxValueBytes, false) && sameEncodedValue(encode(value), envelope.value) ? { value, expires: envelope.expires } : null;
111
+ } catch {
112
+ return null;
113
+ }
114
+ }
115
+ async function regionalWrite2(key, ttl, started, value) {
116
+ if (!key || !ttl || !Number.isFinite(ttl) || ttl <= 0 || ttl > maxMs || !Number.isSafeInteger(started) || !Number.isSafeInteger(Math.floor(started + ttl)) || value === null || value === void 0 || !boundedValue(value, maxValueBytes, false)) return;
117
+ try {
118
+ const expires = Math.floor(started + ttl);
119
+ if (expires <= now()) return;
120
+ const text = JSON.stringify({ started: Math.floor(started), expires, value: encode(value) });
121
+ if (new TextEncoder().encode(text).byteLength > maxValueBytes) return;
122
+ await cache().put(key, new Response(text, { headers: { "Cache-Control": `public, max-age=${maxMs / 1e3}` } }));
123
+ } catch {
124
+ }
125
+ }
126
+ return { regionalKey: regionalKey2, regionalRead: regionalRead2, regionalWrite: regionalWrite2 };
127
+ }
128
+ var { regionalKey, regionalRead, regionalWrite } = createRegionalCache(5e3);
129
+ var { regionalKey: responseLeaseKey } = createRegionalCache(3e5);
130
+
131
+ export { MAX_RESPONSE_LEASE_BYTES, MAX_VALUE_BYTES, boundedValue, createRegionalCache, regionalKey, regionalRead, regionalWrite, responseLeaseKey };
132
+ //# sourceMappingURL=chunk-E6OZZ5UX.js.map
133
+ //# sourceMappingURL=chunk-E6OZZ5UX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/bounded-value.ts","../src/d1/regional.ts"],"names":["regionalKey","regionalRead","regionalWrite"],"mappings":"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","file":"chunk-E6OZZ5UX.js","sourcesContent":["export function boundedValue(value: unknown, maxBytes: number, identity: boolean): boolean {\n let remaining = 10_000;\n let bytes = maxBytes;\n const seen = new Set<object>();\n const count = (text: string): boolean => {\n if (text.length > bytes) return false;\n bytes -= new TextEncoder().encode(text).byteLength;\n return bytes >= 0;\n };\n const check = (part: unknown, depth: number, objectValue: boolean): boolean => {\n if (--remaining < 0 || depth > 24) return false;\n if (part === undefined) return identity || !objectValue;\n if (part === null || typeof part === 'boolean') return true;\n if (typeof part === 'string') return count(part);\n if (typeof part === 'number') return !Object.is(part, -0);\n if (typeof part === 'bigint') return count(part.toString());\n if (typeof part !== 'object' || seen.has(part)) return false;\n if (part instanceof Date) return Number.isFinite(part.getTime());\n if (part instanceof Uint8Array) { bytes -= part.byteLength * 2; return bytes >= 0; }\n const prototype: unknown = Object.getPrototypeOf(part);\n if (!Array.isArray(part) && prototype !== Object.prototype) return false;\n if (Object.getOwnPropertySymbols(part).length > 0) return false;\n if (Array.isArray(part) && part.length > remaining) return false;\n const properties = Object.getOwnPropertyDescriptors(part);\n if (Object.entries(properties).some(([key, descriptor]) => !(Array.isArray(part) && key === 'length') && (!descriptor.enumerable || !('value' in descriptor)))) return false;\n if (Array.isArray(part) && Object.keys(properties).some((key) => key !== 'length' && !/^(0|[1-9]\\d*)$/.test(key))) return false;\n seen.add(part);\n const valid = Array.isArray(part)\n ? Array.from({ length: part.length }, (_, index) => Object.hasOwn(part, index) && check(part[index], depth + 1, false)).every(Boolean)\n : Object.entries(properties).every(([key, descriptor]) => count(key) && check(descriptor.value, depth + 1, true));\n seen.delete(part);\n return valid;\n };\n try { return check(value, 0, false); } catch { return false; }\n}\n\n","import { decode, encode, sha256Hex, stableStringify } from '../core/codec';\nimport { boundedValue } from '../core/bounded-value';\nimport type { DecimalConstructor } from '../core/types';\n\nconst MAX_IDENTITY_BYTES = 32_768;\nexport const MAX_VALUE_BYTES = 1_500_000;\nexport const MAX_RESPONSE_LEASE_BYTES = 8_000_000;\n\nfunction sameEncodedValue(left: unknown, right: unknown): boolean {\n let remaining = 100_000;\n const same = (a: unknown, b: unknown, depth: number): boolean => {\n if (--remaining < 0 || depth > 64) return false;\n if (a === b) return true;\n if (!a || !b || typeof a !== 'object' || typeof b !== 'object') return false;\n if (Array.isArray(a) || Array.isArray(b)) return Array.isArray(a) && Array.isArray(b) && a.length === b.length && a.every((value, index) => same(value, b[index], depth + 1));\n const keys = Object.keys(a);\n return keys.length === Object.keys(b).length && keys.every((key) => Object.hasOwn(b, key) && same(Reflect.get(a, key), Reflect.get(b, key), depth + 1));\n };\n return same(left, right, 0);\n}\n\nexport function createRegionalCache(maxMs: number, maxValueBytes = MAX_VALUE_BYTES, options: { cache?: () => Pick<Cache, 'match' | 'put'>; now?: () => number } = {}) {\n const cache = options.cache ?? (() => caches.default);\n const now = options.now ?? (() => Date.now());\n async function regionalKey(ttl: number | undefined, identity: unknown): Promise<string | null> {\n if (!Number.isFinite(ttl) || !ttl || ttl <= 0 || ttl > maxMs || !boundedValue(identity, MAX_IDENTITY_BYTES, true)) return null;\n try {\n const text = stableStringify(identity);\n if (new TextEncoder().encode(text).byteLength > MAX_IDENTITY_BYTES) return null;\n return `https://dee-wan-cache.invalid/regional-v1/${await sha256Hex(text)}`;\n } catch { return null; }\n }\n\n async function regionalRead(key: string | null, ttl = maxMs, decimal?: DecimalConstructor): Promise<{ value: unknown; expires: number } | null> {\n if (!key) return null;\n try {\n const response = await cache().match(key);\n if (!response || response.status !== 200 || response.headers.has('set-cookie')) return null;\n const reader = response.body?.getReader();\n if (!reader) return null;\n const chunks: Uint8Array[] = [];\n let size = 0;\n let timer: ReturnType<typeof setTimeout> | undefined;\n try {\n const timeout = new Promise<never>((_, reject) => { timer = setTimeout(() => reject(new Error('cache body timeout')), 1000); });\n for (;;) {\n const part = await Promise.race([reader.read(), timeout]);\n if (part.done) break;\n size += part.value.byteLength;\n if (size > maxValueBytes) return null;\n chunks.push(part.value);\n }\n } finally {\n if (timer !== undefined) clearTimeout(timer);\n void reader.cancel().catch(() => undefined);\n }\n const bytes = new Uint8Array(size);\n let offset = 0;\n for (const chunk of chunks) { bytes.set(chunk, offset); offset += chunk.byteLength; }\n const text = new TextDecoder('utf-8', { fatal:true, ignoreBOM:false }).decode(bytes);\n const envelope: unknown = JSON.parse(text);\n const currentTime = now();\n if (!Number.isFinite(ttl) || ttl <= 0 || ttl > maxMs || !envelope || typeof envelope !== 'object' || !('started' in envelope) || typeof envelope.started !== 'number' || !Number.isSafeInteger(envelope.started) || envelope.started > currentTime || !('expires' in envelope) || typeof envelope.expires !== 'number' || !Number.isSafeInteger(envelope.expires) || envelope.expires <= currentTime || envelope.expires > envelope.started + ttl || envelope.expires > currentTime + ttl || !('value' in envelope)) return null;\n const value = decode(envelope.value, decimal);\n return value !== null && value !== undefined && boundedValue(value, maxValueBytes, false) && sameEncodedValue(encode(value), envelope.value) ? { value, expires: envelope.expires } : null;\n } catch { return null; }\n }\n\n async function regionalWrite(key: string | null, ttl: number | undefined, started: number, value: unknown): Promise<void> {\n if (!key || !ttl || !Number.isFinite(ttl) || ttl <= 0 || ttl > maxMs || !Number.isSafeInteger(started) || !Number.isSafeInteger(Math.floor(started + ttl)) || value === null || value === undefined || !boundedValue(value, maxValueBytes, false)) return;\n try {\n const expires = Math.floor(started + ttl);\n if (expires <= now()) return;\n const text = JSON.stringify({ started: Math.floor(started), expires, value: encode(value) });\n if (new TextEncoder().encode(text).byteLength > maxValueBytes) return;\n await cache().put(key, new Response(text, { headers: { 'Cache-Control': `public, max-age=${maxMs / 1000}` } }));\n } catch { /* Cache API is optional. */ }\n }\n\n return { regionalKey, regionalRead, regionalWrite };\n}\n\nexport const { regionalKey, regionalRead, regionalWrite } = createRegionalCache(5000);\nexport const { regionalKey: responseLeaseKey } = createRegionalCache(300_000);\n"]}
@@ -0,0 +1,18 @@
1
+ // src/d1/read-freshness-policy.ts
2
+ var isMutation = (method) => !["GET", "HEAD", "OPTIONS"].includes(method.toUpperCase());
3
+ function matchesPath(pathname, patterns) {
4
+ const actual = pathname.split("/");
5
+ return patterns.some((pattern) => {
6
+ const parts = pattern.split("/");
7
+ const recursive = parts.at(-1) === "**";
8
+ if (recursive) parts.pop();
9
+ return (recursive ? actual.length > parts.length : parts.length === actual.length) && parts.every((part, index) => part === "*" ? !!actual[index] : !part.includes("*") && part === actual[index]);
10
+ });
11
+ }
12
+ function needsFreshness(method, pathname, excludedPaths = []) {
13
+ return isMutation(method) && !matchesPath(pathname, excludedPaths);
14
+ }
15
+
16
+ export { isMutation, matchesPath, needsFreshness };
17
+ //# sourceMappingURL=chunk-JPK2AF7X.js.map
18
+ //# sourceMappingURL=chunk-JPK2AF7X.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/d1/read-freshness-policy.ts"],"names":[],"mappings":";AAAO,IAAM,UAAA,GAAa,CAAC,MAAA,KAA4B,CAAC,CAAC,KAAA,EAAO,MAAA,EAAQ,SAAS,CAAA,CAAE,QAAA,CAAS,MAAA,CAAO,WAAA,EAAa;AAEzG,SAAS,WAAA,CAAY,UAAkB,QAAA,EAAsC;AAClF,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA;AACjC,EAAA,OAAO,QAAA,CAAS,IAAA,CAAK,CAAC,OAAA,KAAY;AAChC,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAA;AAC/B,IAAA,MAAM,SAAA,GAAY,KAAA,CAAM,EAAA,CAAG,EAAE,CAAA,KAAM,IAAA;AACnC,IAAA,IAAI,SAAA,QAAiB,GAAA,EAAI;AACzB,IAAA,OAAA,CAAQ,SAAA,GAAY,MAAA,CAAO,MAAA,GAAS,KAAA,CAAM,MAAA,GAAS,KAAA,CAAM,MAAA,KAAW,MAAA,CAAO,MAAA,KAAW,KAAA,CAAM,KAAA,CAAM,CAAC,IAAA,EAAM,KAAA,KAAU,IAAA,KAAS,GAAA,GAAM,CAAC,CAAC,MAAA,CAAO,KAAK,CAAA,GAAI,CAAC,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,IAAK,IAAA,KAAS,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,EACnM,CAAC,CAAA;AACH;AAEO,SAAS,cAAA,CAAe,MAAA,EAAgB,QAAA,EAAkB,aAAA,GAAmC,EAAC,EAAY;AAC/G,EAAA,OAAO,WAAW,MAAM,CAAA,IAAK,CAAC,WAAA,CAAY,UAAU,aAAa,CAAA;AACnE","file":"chunk-JPK2AF7X.js","sourcesContent":["export const isMutation = (method: string): boolean => !['GET', 'HEAD', 'OPTIONS'].includes(method.toUpperCase());\n\nexport function matchesPath(pathname: string, patterns: readonly string[]): boolean {\n const actual = pathname.split('/');\n return patterns.some((pattern) => {\n const parts = pattern.split('/');\n const recursive = parts.at(-1) === '**';\n if (recursive) parts.pop();\n return (recursive ? actual.length > parts.length : parts.length === actual.length) && parts.every((part, index) => part === '*' ? !!actual[index] : !part.includes('*') && part === actual[index]);\n });\n}\n\nexport function needsFreshness(method: string, pathname: string, excludedPaths: readonly string[] = []): boolean {\n return isMutation(method) && !matchesPath(pathname, excludedPaths);\n}\n"]}
@@ -0,0 +1,330 @@
1
+ import { createDurableObjectStore } from './chunk-NFBMWKY5.js';
2
+ import { fenceD1Writes, registerD1SessionAlias, d1SessionBookmarkFloor, unwrapD1SessionCacheValue, advanceD1SessionBookmarks, trackD1SessionSource, runPrimaryD1SessionSource, wrapD1SessionCacheValue } from './chunk-WJNCFFF3.js';
3
+ import { limitRegionalDataUntil } from './chunk-LHOK33GI.js';
4
+ import { createCacheExtension, readTargets } from './chunk-M4UOCIDQ.js';
5
+ import { boundedD1Store } from './chunk-WKZ7TKGM.js';
6
+ import { boundedValue, regionalKey, regionalRead, regionalWrite } from './chunk-E6OZZ5UX.js';
7
+ import { MAX_VALUE_BYTES } from './chunk-OQRNVGQE.js';
8
+ import { sha256Hex, stableStringify, decode, encode } from './chunk-ZCMZJKGN.js';
9
+ import { isD1BindingName } from './chunk-AENVFT2S.js';
10
+
11
+ // src/d1/env.ts
12
+ var uuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
13
+ var hints = /* @__PURE__ */ new Set(["wnam", "enam", "sam", "weur", "eeur", "apac", "oc", "afr", "me"]);
14
+ var wrapped = /* @__PURE__ */ new WeakMap();
15
+ var runtimes = /* @__PURE__ */ new WeakMap();
16
+ var d1CacheRuntime = (database) => runtimes.get(database);
17
+ function createD1CacheRuntime(database, options) {
18
+ const { generation, databaseId, profile, readsEnabled = true } = options;
19
+ const store = boundedD1Store(options.store);
20
+ const fenced = fenceD1Writes(database, { store, generation, policy: profile });
21
+ registerD1SessionAlias(fenced, database);
22
+ runtimes.set(fenced, { store, generation, databaseId, readsEnabled, readModels: profile.readModels, coordinatorIdentity: options.coordinatorIdentity ?? options.store, coordinatorName: options.coordinatorName ?? "", regionalIdentity: options.regionalIdentity });
23
+ return fenced;
24
+ }
25
+ function cacheD1Env(env, profile) {
26
+ const value = (suffix) => Reflect.get(env, `${profile.envPrefix}_${suffix}`);
27
+ const enabled = value("ENABLED");
28
+ if (enabled === void 0 || enabled === "false") return env;
29
+ if (enabled !== "true") throw new Error(`Invalid ${profile.envPrefix}_ENABLED`);
30
+ const reads = value("READS_ENABLED");
31
+ if (reads !== void 0 && reads !== "true" && reads !== "false") throw new Error(`Invalid ${profile.envPrefix}_READS_ENABLED`);
32
+ const readsEnabled = reads !== "false";
33
+ const namespace = value("COORDINATOR");
34
+ const rawIds = value("DATABASE_IDS");
35
+ const generation = value("GENERATION");
36
+ if (!namespace || typeof namespace !== "object" || typeof Reflect.get(namespace, "idFromName") !== "function" || typeof Reflect.get(namespace, "get") !== "function" || typeof rawIds !== "string" || typeof generation !== "string" || !generation.trim())
37
+ throw new Error(`${profile.envPrefix} requires coordinator, database identities and generation`);
38
+ if (generation.length > 256) throw new Error(`Invalid ${profile.envPrefix}_GENERATION`);
39
+ let ids;
40
+ try {
41
+ ids = JSON.parse(rawIds);
42
+ } catch {
43
+ throw new Error(`Invalid ${profile.envPrefix}_DATABASE_IDS`);
44
+ }
45
+ if (!ids || typeof ids !== "object" || Array.isArray(ids)) throw new Error(`Invalid ${profile.envPrefix}_DATABASE_IDS`);
46
+ const map = Object.entries(ids);
47
+ if (map.some(([key, id]) => !isD1BindingName(key, profile) || typeof id !== "string" || !uuid.test(id))) throw new Error("Invalid cache database identity");
48
+ const locationHint = value("LOCATION_HINT") ?? "weur";
49
+ if (typeof locationHint !== "string" || !hints.has(locationHint)) throw new Error(`Invalid ${profile.envPrefix}_LOCATION_HINT`);
50
+ const identities = new Map(map);
51
+ const scoped = { ...env };
52
+ for (const name of profile.bindingNames) if (!Reflect.has(env, name)) throw new Error(`Cache missing D1 binding: ${name}`);
53
+ for (const [key, database] of Object.entries(env)) {
54
+ if (profile.bindingPrefixes.some((prefix) => key.startsWith(prefix)) && !isD1BindingName(key, profile)) throw new Error(`Invalid cache binding: ${key}`);
55
+ if (!isD1BindingName(key, profile)) continue;
56
+ const id = identities.get(key);
57
+ if (typeof id !== "string" || !database || typeof database.prepare !== "function") throw new Error(`Cache missing D1 identity or binding: ${key}`);
58
+ const databaseId = id.toLowerCase();
59
+ const cacheKey = JSON.stringify([databaseId, generation, locationHint, readsEnabled, profile]);
60
+ let databases = wrapped.get(namespace);
61
+ if (!databases) {
62
+ databases = /* @__PURE__ */ new WeakMap();
63
+ wrapped.set(namespace, databases);
64
+ }
65
+ let versions = databases.get(database);
66
+ if (!versions) {
67
+ versions = /* @__PURE__ */ new Map();
68
+ databases.set(database, versions);
69
+ }
70
+ let cached = versions.get(cacheKey);
71
+ if (!cached) {
72
+ const coordinatorName = `${profile.coordinatorNamePrefix}${databaseId}`;
73
+ const store = createDurableObjectStore(namespace, { name: coordinatorName, locationHint });
74
+ cached = createD1CacheRuntime(database, { store, generation, databaseId, readsEnabled, profile, coordinatorIdentity: namespace, coordinatorName, regionalIdentity: namespace.idFromName(coordinatorName).toString() });
75
+ versions.set(cacheKey, cached);
76
+ }
77
+ Reflect.set(scoped, key, cached);
78
+ }
79
+ return scoped;
80
+ }
81
+ function wrapD1Handler(handler, profile) {
82
+ return (event, env, context) => handler(event, cacheD1Env(env, profile), context);
83
+ }
84
+ function d1PrismaCacheExtension(database, config, optionsOrDecimal, decimalArg) {
85
+ const runtime = runtimes.get(database);
86
+ if (!runtime || !runtime.readsEnabled) return void 0;
87
+ const options = typeof optionsOrDecimal === "function" ? void 0 : optionsOrDecimal;
88
+ const decimal = typeof optionsOrDecimal === "function" ? optionsOrDecimal : decimalArg;
89
+ const allowed = new Set(runtime.readModels);
90
+ const scopedConfig = { ...config, cacheableByModel: Object.fromEntries(Object.entries(config.cacheableByModel).map(([model, enabled]) => [model, enabled && allowed.has(model)])) };
91
+ const common = { config: scopedConfig, store: runtime.store, generation: runtime.generation, coordinationGeneration: runtime.generation, ...decimal ? { decimal } : {}, ...options?.keyArgs ? { keyArgs: options.keyArgs } : {} };
92
+ const base = createCacheExtension({ ...common, scope: runtime.databaseId });
93
+ const operation = base.query.$allModels.$allOperations;
94
+ if (!options) return { ...base, query: { $allModels: { $allOperations(params) {
95
+ return d1SessionBookmarkFloor() ? params.query(params.args) : operation(params);
96
+ } } } };
97
+ return {
98
+ ...base,
99
+ query: { $allModels: { async $allOperations(params) {
100
+ if (!params.model || !allowed.has(params.model) || !["findUnique", "findUniqueOrThrow", "findFirst", "findFirstOrThrow", "findMany", "count", "aggregate", "groupBy"].includes(params.operation)) return operation(params);
101
+ if (options.scope === null || options.scope === void 0 || !boundedValue(options.scope, 32768, true) || (options.dependencies?.length ?? 0) > 32) return params.query(params.args);
102
+ const dependencies = dependencyRuntimes(database, options.dependencies ?? []);
103
+ if (!dependencies) return params.query(params.args);
104
+ const internal = params.__internalParams;
105
+ const dataPath = internal && typeof internal === "object" && Array.isArray(Reflect.get(internal, "dataPath")) ? Reflect.get(internal, "dataPath") : [];
106
+ const transaction = internal && typeof internal === "object" ? Reflect.get(internal, "transaction") : void 0;
107
+ const inBatch = !!transaction && typeof transaction === "object" && Reflect.get(transaction, "kind") === "batch";
108
+ let regional = null;
109
+ let normalizedArgs;
110
+ let normalized = false;
111
+ try {
112
+ const identities = [runtime, ...dependencies].map((item) => [item.databaseId, item.generation, item.coordinatorName, item.regionalIdentity]);
113
+ const targets = options.regionalModels ? readTargets(config.relationGraph, params.model, params.args) : void 0;
114
+ const allowedTargets = !options.regionalModels || !!targets && [...targets.models].every((model) => options.regionalModels?.includes(model));
115
+ if (options.regionalTtlMs && options.regionalTtlMs > 0 && options.regionalTtlMs <= 5e3 && !inBatch && allowedTargets && identities.every((item) => item[3])) {
116
+ normalizedArgs = options.keyArgs ? options.keyArgs(params.args) : params.args;
117
+ normalized = true;
118
+ const configDigest = await sha256Hex(stableStringify(config));
119
+ regional = await regionalKey(options.regionalTtlMs, ["prisma", d1SessionBookmarkFloor() ? "session-v1" : null, options.regionalTtlMs, identities, configDigest, options.scope, params.model, params.operation, dataPath, normalizedArgs ?? null]);
120
+ }
121
+ } catch {
122
+ }
123
+ const hit = await regionalRead(regional, options.regionalTtlMs, decimal);
124
+ if (hit) {
125
+ const cached = unwrapD1SessionCacheValue(hit.value, [runtime, ...dependencies].map((item) => item.databaseId));
126
+ if (cached) {
127
+ if (cached.bookmarks) advanceD1SessionBookmarks(cached.bookmarks);
128
+ limitRegionalDataUntil(hit.expires);
129
+ return cached.value;
130
+ }
131
+ }
132
+ let started = Date.now();
133
+ const snapshot = await inspect(dependencies);
134
+ if (!snapshot) return params.query(params.args);
135
+ let scope;
136
+ try {
137
+ scope = stableStringify([d1SessionBookmarkFloor() ? "session-v1" : null, runtime.databaseId, runtime.generation, options.scope, snapshot.map(({ runtime: dependency, epoch }) => [dependency.databaseId, dependency.generation, epoch])]);
138
+ if (new TextEncoder().encode(scope).byteLength > 32768) return params.query(params.args);
139
+ } catch {
140
+ return params.query(params.args);
141
+ }
142
+ let verifiedHit = false;
143
+ let hitBookmarks;
144
+ let verifiedWrite = false;
145
+ let queried = false;
146
+ const store = {
147
+ ...runtime.store,
148
+ async write(request) {
149
+ const value = d1SessionBookmarkFloor() ? JSON.stringify(wrapD1SessionCacheValue(request.value)) : request.value;
150
+ const result = await runtime.store.write({ ...request, value });
151
+ verifiedWrite = result.ok;
152
+ return result;
153
+ },
154
+ async read(request) {
155
+ const result = await runtime.store.read(request);
156
+ if (result.kind === "hit" && !sameSnapshots(snapshot, await inspect(dependencies))) return { kind: "miss", epochs: result.epochs, lockHeldForMs: null, lockToken: null, pending: true };
157
+ if (result.kind === "hit" && d1SessionBookmarkFloor()) {
158
+ let cached;
159
+ try {
160
+ cached = unwrapD1SessionCacheValue(JSON.parse(result.value), [runtime, ...dependencies].map((item) => item.databaseId));
161
+ } catch {
162
+ cached = null;
163
+ }
164
+ if (!cached || typeof cached.value !== "string") return { kind: "miss", epochs: result.epochs, lockHeldForMs: null, lockToken: null, pending: true };
165
+ hitBookmarks = cached.bookmarks;
166
+ verifiedHit = true;
167
+ return { ...result, value: cached.value };
168
+ }
169
+ if (result.kind === "hit") verifiedHit = true;
170
+ return result;
171
+ }
172
+ };
173
+ const scoped = createCacheExtension({ ...common, store, scope, ...normalized ? { keyArgs: () => normalizedArgs } : {} });
174
+ const tracked = await trackD1SessionSource(async () => {
175
+ const value = await scoped.query.$allModels.$allOperations({ ...params, query: async (args) => {
176
+ queried = true;
177
+ started = Date.now();
178
+ return runPrimaryD1SessionSource(() => params.query(args));
179
+ } });
180
+ if (!queried && verifiedHit && hitBookmarks) advanceD1SessionBookmarks(hitBookmarks);
181
+ return value;
182
+ });
183
+ if (regional && (!queried && verifiedHit || verifiedWrite) && sameSnapshots(snapshot, await inspect(dependencies))) await regionalWrite(regional, options.regionalTtlMs, started, wrapD1SessionCacheValue(tracked.value, tracked.bookmarks));
184
+ return tracked.value;
185
+ } } }
186
+ };
187
+ }
188
+ function withD1PrismaCache(client, database, config, optionsOrDecimal, decimalArg) {
189
+ const extension = d1PrismaCacheExtension(database, config, optionsOrDecimal, decimalArg);
190
+ if (!extension) return client;
191
+ const extend = Reflect.get(client, "$extends", client);
192
+ if (typeof extend !== "function") throw new TypeError("Prisma client must support $extends");
193
+ const extended = Reflect.apply(extend, client, [extension]);
194
+ if (!extended || typeof extended !== "object") throw new TypeError("Prisma extension returned no client");
195
+ return new Proxy(client, {
196
+ get(target, property) {
197
+ const source = property === "$on" ? target : extended;
198
+ const member = Reflect.get(source, property, source);
199
+ return typeof member === "function" ? member.bind(source) : member;
200
+ }
201
+ });
202
+ }
203
+
204
+ // src/d1/read.ts
205
+ var FENCES = ["g"];
206
+ var DEFAULT_TTL_MS = 3e4;
207
+ var MAX_TTL_MS = 3e5;
208
+ var MAX_IDENTITY_BYTES = 32768;
209
+ var MAX_VALUE_SIZE = Math.min(15e5, MAX_VALUE_BYTES);
210
+ function sameD1CacheDatabase(left, right) {
211
+ const a = d1CacheRuntime(left);
212
+ const b = d1CacheRuntime(right);
213
+ return !!a && !!b && a.databaseId === b.databaseId && a.generation === b.generation && a.coordinatorIdentity === b.coordinatorIdentity && a.coordinatorName === b.coordinatorName;
214
+ }
215
+ async function d1CacheEpoch(database) {
216
+ const runtime = d1CacheRuntime(database);
217
+ if (!runtime || !runtime.readsEnabled) return null;
218
+ const snapshot = await inspect([runtime]);
219
+ if (!snapshot?.[0]) return null;
220
+ return stableStringify([runtime.databaseId, runtime.generation, snapshot[0].epoch]);
221
+ }
222
+ async function inspect(runtimes2) {
223
+ if (runtimes2.length === 0) return [];
224
+ try {
225
+ const states = await Promise.all(runtimes2.map(async (runtime) => {
226
+ if (!runtime.store.inspectFences) return null;
227
+ const state = await runtime.store.inspectFences({ fences: FENCES, generation: runtime.generation });
228
+ const epoch = state.epochs.g;
229
+ if (state.pending !== false || typeof epoch !== "number" || !Number.isSafeInteger(epoch) || epoch < 0) return null;
230
+ return { runtime, epoch };
231
+ }));
232
+ return states.some((state) => state === null) ? null : states.filter((state) => state !== null);
233
+ } catch {
234
+ return null;
235
+ }
236
+ }
237
+ var sameSnapshots = (a, b) => b !== null && a.length === b.length && a.every((item, index) => item.runtime.databaseId === b[index]?.runtime.databaseId && item.runtime.generation === b[index]?.runtime.generation && item.epoch === b[index]?.epoch);
238
+ function dependencyRuntimes(database, dependencies) {
239
+ if (dependencies.length > 32) return null;
240
+ const primary = d1CacheRuntime(database);
241
+ if (!primary || !primary.readsEnabled) return null;
242
+ const byId = /* @__PURE__ */ new Map();
243
+ for (const dependency of dependencies) {
244
+ const runtime = d1CacheRuntime(dependency);
245
+ if (!runtime || !runtime.readsEnabled) return null;
246
+ const prior = runtime.databaseId === primary.databaseId ? primary : byId.get(runtime.databaseId);
247
+ if (prior && (prior.generation !== runtime.generation || prior.coordinatorIdentity !== runtime.coordinatorIdentity || prior.coordinatorName !== runtime.coordinatorName)) return null;
248
+ if (runtime.databaseId === primary.databaseId) continue;
249
+ if (!runtime.store.inspectFences) return null;
250
+ byId.set(runtime.databaseId, prior ?? runtime);
251
+ }
252
+ return [...byId.values()].sort((a, b) => a.databaseId.localeCompare(b.databaseId));
253
+ }
254
+ async function cacheD1Read(database, options, load) {
255
+ const primary = d1CacheRuntime(database);
256
+ const ttl = options.ttlMs ?? DEFAULT_TTL_MS;
257
+ if (!primary || !primary.readsEnabled || !Number.isFinite(ttl) || ttl <= 0 || ttl > MAX_TTL_MS || options.scope === void 0 || options.scope === null || !boundedValue(options.scope, MAX_IDENTITY_BYTES, true) || !boundedValue(options.key, MAX_IDENTITY_BYTES, true)) return load();
258
+ const source = () => runPrimaryD1SessionSource(load);
259
+ const runtimes2 = dependencyRuntimes(database, options.dependencies ?? []);
260
+ if (!runtimes2) return source();
261
+ const regionalIdentities = [primary, ...runtimes2].map((runtime) => [runtime.databaseId, runtime.generation, runtime.coordinatorName, runtime.regionalIdentity]);
262
+ const regional = regionalIdentities.every((identity) => identity[3]) ? await regionalKey(options.regionalTtlMs, ["d1-read", d1SessionBookmarkFloor() ? "session-v1" : null, options.regionalTtlMs, regionalIdentities, options.scope, options.key]) : null;
263
+ const hit = await regionalRead(regional, options.regionalTtlMs);
264
+ if (hit) {
265
+ const cached = unwrapD1SessionCacheValue(hit.value, [primary, ...runtimes2].map((runtime) => runtime.databaseId));
266
+ if (cached) {
267
+ if (cached.bookmarks) advanceD1SessionBookmarks(cached.bookmarks);
268
+ limitRegionalDataUntil(hit.expires);
269
+ return cached.value;
270
+ }
271
+ }
272
+ const started = Date.now();
273
+ const snapshot = await inspect(runtimes2);
274
+ if (!snapshot) return source();
275
+ let key;
276
+ try {
277
+ const identity = stableStringify(["d1-read-v1", d1SessionBookmarkFloor() ? "session-v1" : null, primary.databaseId, primary.generation, options.scope, options.key, snapshot.map(({ runtime, epoch }) => [runtime.databaseId, runtime.generation, epoch])]);
278
+ if (new TextEncoder().encode(identity).byteLength > MAX_IDENTITY_BYTES) return load();
279
+ key = `d1:${await sha256Hex(identity)}`;
280
+ } catch {
281
+ return load();
282
+ }
283
+ let result;
284
+ try {
285
+ result = await primary.store.read({ key, fences: FENCES, generation: primary.generation, lockMs: 3e4, refresh: false });
286
+ } catch {
287
+ return source();
288
+ }
289
+ if (result.kind === "hit") {
290
+ try {
291
+ const raw = decode(JSON.parse(result.value));
292
+ const cached = unwrapD1SessionCacheValue(raw, [primary, ...runtimes2].map((runtime) => runtime.databaseId));
293
+ const value = cached?.value;
294
+ if (cached && boundedValue(value, MAX_VALUE_SIZE, false) && sameSnapshots(snapshot, await inspect(runtimes2))) {
295
+ if (cached.bookmarks) advanceD1SessionBookmarks(cached.bookmarks);
296
+ await regionalWrite(regional, options.regionalTtlMs, started, raw);
297
+ return value;
298
+ }
299
+ } catch {
300
+ }
301
+ return source();
302
+ }
303
+ if (!result.lockToken || result.pending) return source();
304
+ const lockToken = result.lockToken;
305
+ try {
306
+ const tracked = await trackD1SessionSource(source);
307
+ const value = tracked.value;
308
+ try {
309
+ if (value !== null && value !== void 0 && boundedValue(value, MAX_VALUE_SIZE, false) && (options.cacheable?.(value) ?? true)) {
310
+ const cachedValue = wrapD1SessionCacheValue(value, tracked.bookmarks);
311
+ const text = JSON.stringify(encode(cachedValue));
312
+ if (new TextEncoder().encode(text).byteLength <= MAX_VALUE_SIZE && sameSnapshots(snapshot, await inspect(runtimes2))) {
313
+ const written = await primary.store.write({ key, lockToken, snapshot: result.epochs, ttlMs: ttl, softTtlMs: ttl, value: text });
314
+ if (regional && written.ok && sameSnapshots(snapshot, await inspect(runtimes2))) await regionalWrite(regional, options.regionalTtlMs, started, cachedValue);
315
+ }
316
+ }
317
+ } catch {
318
+ }
319
+ return value;
320
+ } finally {
321
+ try {
322
+ await primary.store.release({ key, lockToken });
323
+ } catch {
324
+ }
325
+ }
326
+ }
327
+
328
+ export { cacheD1Env, cacheD1Read, createD1CacheRuntime, d1CacheEpoch, d1CacheRuntime, d1PrismaCacheExtension, sameD1CacheDatabase, withD1PrismaCache, wrapD1Handler };
329
+ //# sourceMappingURL=chunk-LAXBP5DQ.js.map
330
+ //# sourceMappingURL=chunk-LAXBP5DQ.js.map