@dee-wan/cache 2.0.0 → 2.0.2
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.
- package/dist/{chunk-A4WV6RY4.js → chunk-27P3CVHP.js} +18 -9
- package/dist/chunk-27P3CVHP.js.map +1 -0
- package/dist/{chunk-WJNCFFF3.js → chunk-2V6MG4YX.js} +25 -10
- package/dist/chunk-2V6MG4YX.js.map +1 -0
- package/dist/{chunk-LAXBP5DQ.js → chunk-6VWIKYUQ.js} +3 -3
- package/dist/{chunk-LAXBP5DQ.js.map → chunk-6VWIKYUQ.js.map} +1 -1
- package/dist/{chunk-O3KHMFHX.js → chunk-STPV6MO7.js} +4 -4
- package/dist/{chunk-O3KHMFHX.js.map → chunk-STPV6MO7.js.map} +1 -1
- package/dist/cloudflare/index.js +1 -1
- package/dist/d1/index.js +4 -4
- package/dist/d1/response-lease.js +5 -5
- package/dist/response-lease.js +3 -3
- package/docs/cache-contract.md +9 -0
- package/package.json +1 -1
- package/dist/chunk-A4WV6RY4.js.map +0 -1
- package/dist/chunk-WJNCFFF3.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
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"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/d1/adapter.ts","../src/d1/request-freshness.ts","../src/d1/session.ts"],"names":["index","tracker","wrapped","result"],"mappings":"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","file":"chunk-WJNCFFF3.js","sourcesContent":["import { CacheUnavailableError } from '../core/extension';\nimport type { CacheStore } from '../core/types';\nimport type { D1WritePolicy } from './profile';\nimport type { D1Database, D1DatabaseSession, D1PreparedStatement, D1Result } from '@cloudflare/workers-types';\nimport { boundedD1Store } from './bounded-store';\n\nconst fence = ['g'];\n\nconst lexemes = /\\s+|--[^\\n]*|\\/\\*[\\s\\S]*?(?:\\*\\/|$)|'(?:[^']|'')*'?|`(?:[^`]|``)*`?|\"(?:[^\"]|\"\")*\"?|\\[[^\\]]*\\]?|[A-Za-z_][A-Za-z0-9_$]*|[\\s\\S]/g;\nconst safePragmas = new Set(['database_list', 'table_list', 'table_info', 'table_xinfo', 'index_list', 'index_info', 'index_xinfo', 'foreign_key_list']);\n\nfunction operationOf(tokens: string[], start = 0): string | undefined {\n const word = (index: number) => tokens[index]?.toLowerCase();\n if (word(start) !== 'with') return word(start);\n let index = start + 1;\n if (word(index) === 'recursive') index++;\n const group = (): boolean => {\n if (tokens[index] !== '(') return false;\n let depth = 0;\n do {\n if (tokens[index] === '(') depth++;\n if (tokens[index] === ')') depth--;\n index++;\n } while (index < tokens.length && depth > 0);\n return depth === 0;\n };\n while (index < tokens.length) {\n if (!/^(?:[A-Za-z_][A-Za-z0-9_$]*|`[^`]+`|\"[^\"]+\"|\\[[^\\]]+\\])$/.test(tokens[index] ?? '')) return undefined;\n index++;\n if (tokens[index] === '(' && !group()) return undefined;\n if (word(index++) !== 'as') return undefined;\n if (word(index) === 'not') index++;\n if (word(index) === 'materialized') index++;\n if (tokens[index] !== '(' || !['select', 'with'].includes(word(index + 1) ?? '')) return undefined;\n if (!group()) return undefined;\n if (tokens[index] !== ',') return word(index);\n index++;\n }\n return undefined;\n}\n\nexport function isReadonly(sql: string): boolean {\n const tokens = [...sql.matchAll(lexemes)].map(([token = '']) => token).filter((token) => !/^(?:\\s|--|\\/\\*)/.test(token));\n if (tokens.at(-1) === ';') tokens.pop();\n const first = tokens[0]?.toLowerCase();\n const pragmaName = first === 'pragma' ? (tokens[2] === '.' ? tokens[3] : tokens[1])?.toLowerCase() : undefined;\n const readonlyPragma = first === 'pragma' && pragmaName !== undefined && safePragmas.has(pragmaName) && !tokens.includes('=');\n return !tokens.includes(';') && (operationOf(tokens) === 'select' || readonlyPragma);\n}\n\nfunction needsWriteFence(sql: string, unrelatedWrites: ReadonlySet<string>): boolean {\n const tokens = [...sql.matchAll(lexemes)].map(([token = '']) => token).filter((token) => !/^(?:\\s|--|\\/\\*)/.test(token));\n if (tokens.at(-1) === ';') tokens.pop();\n if (tokens.includes(';')) return true;\n let index = 0;\n const word = () => tokens[index]?.toLowerCase();\n const operation = word();\n if (operation !== 'insert' && operation !== 'update' && operation !== 'delete') return true;\n index++;\n if ((operation === 'insert' || operation === 'update') && word() === 'or') {\n index++;\n if (!['rollback', 'abort', 'replace', 'fail', 'ignore'].includes(word() ?? '')) return true;\n index++;\n }\n if (operation === 'insert') { if (word() !== 'into') return true; index++; }\n if (operation === 'delete') { if (word() !== 'from') return true; index++; }\n const identifier = (token: string | undefined): string | null => {\n if (!token) return null;\n if (/^[A-Za-z_][A-Za-z0-9_$]*$/.test(token)) return token.toLowerCase();\n if (/^\"[A-Za-z_][A-Za-z0-9_$]*\"$/.test(token) || /^`[A-Za-z_][A-Za-z0-9_$]*`$/.test(token) || /^\\[[A-Za-z_][A-Za-z0-9_$]*\\]$/.test(token)) return token.slice(1, -1).toLowerCase();\n return null;\n };\n let target = identifier(tokens[index++]);\n if (tokens[index] === '.') {\n if (target !== 'main') return true;\n index++;\n target = identifier(tokens[index++]);\n }\n if (!target || !unrelatedWrites.has(target)) return true;\n if (operation === 'update' && word() !== 'set') return true;\n if (operation === 'delete' && !['where', 'returning'].includes(word() ?? '') && index !== tokens.length) return true;\n return false;\n}\n\nexport function fenceD1Writes(db: D1Database, options: { store: CacheStore; generation: string; policy: D1WritePolicy }): D1Database {\n const { generation, policy } = options;\n const store = boundedD1Store(options.store);\n const unrelatedWrites = new Set(policy.unfencedWriteTables.map((name) => name.toLowerCase()));\n if (!generation) throw new TypeError('cache generation is required');\n const statements = new WeakMap<D1PreparedStatement, { raw: D1PreparedStatement; fence: boolean }>();\n const withWrite = async <T>(operation: () => Promise<T>): Promise<T> => {\n const token = crypto.randomUUID();\n try {\n await store.beginWrite({ fences: fence, generation, leaseMs: 600000, token });\n } catch (error) {\n await store.endWrite({ fences: fence, token }).catch(() => undefined);\n throw new CacheUnavailableError(error);\n }\n try { return await operation(); }\n finally { await store.endWrite({ fences: fence, token }).catch(() => undefined); }\n };\n const wrapStatement = (raw: D1PreparedStatement, sql: string): D1PreparedStatement => {\n const requiresFence = !isReadonly(sql) && needsWriteFence(sql, unrelatedWrites);\n const execute = <T>(operation: () => Promise<T>): Promise<T> => requiresFence ? withWrite(operation) : operation();\n function rawRows<T = unknown[]>(rawOptions: { columnNames: true }): Promise<[string[], ...T[]]>;\n function rawRows<T = unknown[]>(rawOptions?: { columnNames?: false }): Promise<T[]>;\n function rawRows<T = unknown[]>(rawOptions?: { columnNames?: boolean }): Promise<T[] | [string[], ...T[]]> {\n return execute<T[] | [string[], ...T[]]>(() => rawOptions?.columnNames === true ? raw.raw<T>({ columnNames: true }) : raw.raw<T>(rawOptions?.columnNames === false ? { columnNames: false } : undefined));\n }\n const wrapped: D1PreparedStatement = {\n bind: (...next) => wrapStatement(raw.bind(...next), sql),\n first: <T = Record<string, unknown>>(column?: string): Promise<T | null> => execute(() => column === undefined ? raw.first<T>() : raw.first<T>(column)),\n all: <T = Record<string, unknown>>(): Promise<D1Result<T>> => execute(() => raw.all<T>()),\n run: <T = Record<string, unknown>>(): Promise<D1Result<T>> => execute(() => raw.run<T>()),\n raw: rawRows,\n };\n statements.set(wrapped, { raw, fence: requiresFence });\n return wrapped;\n };\n const batch = <T>(target: D1Database | D1DatabaseSession, items: D1PreparedStatement[]): Promise<D1Result<T>[]> => {\n const resolved = items.map((item) => statements.get(item));\n const raw = items.map((item, index) => resolved[index]?.raw ?? item);\n const operation = () => target.batch<T>(raw);\n return resolved.every((item) => item !== undefined && !item.fence) ? operation() : withWrite(operation);\n };\n return {\n prepare: (sql) => wrapStatement(db.prepare(sql), sql),\n batch: <T = unknown>(items: D1PreparedStatement[]) => batch<T>(db, items),\n exec: (sql) => isReadonly(sql) || !needsWriteFence(sql, unrelatedWrites) ? db.exec(sql) : withWrite(() => db.exec(sql)),\n dump: () => db.dump(),\n withSession: (constraint) => {\n const session = db.withSession(constraint);\n return {\n prepare: (sql) => wrapStatement(session.prepare(sql), sql),\n batch: <T = unknown>(items: D1PreparedStatement[]) => batch<T>(session, items),\n getBookmark: () => session.getBookmark(),\n };\n },\n };\n}\n","import type { D1CacheProfile } from './profile';\n\ntype FreshnessPolicy = Pick<NonNullable<D1CacheProfile['readResponseLease']>, 'freshnessCookie' | 'freshnessHeader' | 'ignoreRequestCacheControl'>;\nexport const validFreshnessHeader = (name: string): boolean => /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/.test(name);\nexport const hasFreshnessCookie = (request: Request, name: string): boolean => (request.headers.get('cookie') ?? '').split(';').some((part) => part.split('=', 1)[0]?.trim() === name);\nexport const hasFreshnessGeneration = (request: Request, name: string): boolean => {\n const matches = (request.headers.get('cookie') ?? '').split(';').map((part) => part.trim()).filter((part) => part.split('=', 1)[0]?.trim() === name);\n const value = matches[0]?.slice(matches[0].indexOf('=') + 1).trim() ?? '';\n return matches.length === 1 && /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value);\n};\nexport const hasCacheBypass = (request: Request): boolean => (request.headers.get('cache-control') ?? '').split(',').some((part) => /^\\s*(?:no-cache|no-store)(?:\\s*=|\\s*$)/i.test(part));\n\nexport function regionalD1MetadataTtl(request: Request, policy: FreshnessPolicy): 0 | 5000 {\n if (request.method !== 'GET' || hasFreshnessCookie(request, policy.freshnessCookie)) return 0;\n if (policy.freshnessHeader !== undefined && (!validFreshnessHeader(policy.freshnessHeader) || request.headers.has(policy.freshnessHeader))) return 0;\n if (!policy.ignoreRequestCacheControl && hasCacheBypass(request)) return 0;\n return 5000;\n}\n","import { AsyncLocalStorage } from 'node:async_hooks';\nimport type { D1Database, D1DatabaseSession, D1PreparedStatement, D1Result } from '@cloudflare/workers-types';\nimport { isD1BindingName, type D1CacheProfile } from './profile';\nimport type { CacheSessionHooks } from '../core/types';\nimport { isReadonly } from './adapter';\nimport { hasCacheBypass } from './request-freshness';\nimport { D1_BOOKMARK_HEADER, mergeD1Bookmarks, parseD1Bookmarks, decodeD1Bookmarks, serializeD1Bookmarks, type D1Bookmarks } from './bookmarks';\n\ntype SessionContext = { input: D1Bookmarks; sessions: Map<string, D1DatabaseSession>; bookmarks: D1Bookmarks; primary: boolean; primaryIds: Set<string>; allowedIds: Set<string>; operations: Map<string, Promise<void>>; closed: boolean };\ntype DatabaseInfo = { id: string; db: D1Database; primary: boolean };\nconst storage = new AsyncLocalStorage<SessionContext | undefined>();\nconst tracking = new AsyncLocalStorage<D1Bookmarks>();\nconst primarySource = new AsyncLocalStorage<Set<string>>();\ntype AdmissionGroup = { token: object | undefined; context: SessionContext | undefined; pending: number; waiting: Array<() => void>; tracker: D1Bookmarks; trackers: Map<D1Bookmarks, number>; primary?: Set<string>; ambiguous: boolean };\ntype AdmissionGate = { active?: AdmissionGroup; waiting: AdmissionGroup[] };\nconst admissionScope = new AsyncLocalStorage<{ group: AdmissionGroup; tracker?: D1Bookmarks }>();\nconst prismaScope = new AsyncLocalStorage<object>();\nconst trackerGroups = new WeakMap<D1Bookmarks, AdmissionGroup>();\nconst ambiguousTrackers = new WeakSet<D1Bookmarks>();\nconst infos = new WeakMap<object, DatabaseInfo>();\nconst facades = new WeakMap<object, Map<string, D1Database>>();\nconst queues = new Map<string, AdmissionGate>();\nconst admitted = new Map<string, AdmissionGroup>();\nconst prismaFacades = new WeakMap<object, D1Database>();\n\nexport interface D1ReadSessionOptions extends Pick<D1CacheProfile, 'bindingNames' | 'bindingPrefixes'> {\n databaseIdsEnv: string;\n primaryBindings?: readonly string[];\n freshnessHeader?: string;\n ignoreRequestCacheControl?: boolean;\n}\n\nexport function registerD1SessionAlias(alias: object, original: object): void {\n const info = infos.get(original);\n if (info) infos.set(alias, info);\n}\n\nexport function runPrimaryD1SessionSource<T>(operation: () => Promise<T>): Promise<T> {\n return storage.getStore() ? primarySource.run(new Set(), operation) : operation();\n}\n\nexport function runD1PrismaScope<T>(operation: () => Promise<T>): Promise<T> {\n return prismaScope.run({}, operation);\n}\n\nfunction addTracker(group: AdmissionGroup, tracker: D1Bookmarks | undefined): void {\n if (tracker) {\n group.trackers.set(tracker, (group.trackers.get(tracker) ?? 0) + 1);\n if (group.ambiguous) ambiguousTrackers.add(tracker);\n }\n}\nfunction removeTracker(group: AdmissionGroup, tracker: D1Bookmarks | undefined): void {\n if (!tracker) return;\n const count = group.trackers.get(tracker) ?? 0;\n if (count <= 1) group.trackers.delete(tracker);\n else group.trackers.set(tracker, count - 1);\n}\n\nexport async function runD1SessionOperation<T>(database: object, operation: () => Promise<T>): Promise<T> {\n const info = infos.get(database);\n const current = storage.getStore();\n const context = current && !current.closed ? current : undefined;\n if (!info) return operation();\n const token = context ?? prismaScope.getStore();\n let gate = queues.get(info.id);\n if (!gate) { gate = { waiting:[] }; queues.set(info.id, gate); }\n const scope = gate;\n const active = scope.active;\n const tail = scope.waiting.at(-1);\n const group: AdmissionGroup = token && tail?.token === token ? tail : token && !tail && active?.token === token ? active : { token, context, pending:0, waiting:[], tracker:{}, trackers:new Map(), ambiguous:false };\n const startGroup = (next: AdmissionGroup) => {\n scope.active = next;\n admitted.set(info.id, next);\n trackerGroups.set(next.tracker, next);\n for (const start of next.waiting.splice(0)) start();\n };\n let timer: ReturnType<typeof setTimeout> | undefined;\n try {\n await new Promise<void>((resolve, reject) => {\n let cancelled = false;\n const start = () => {\n if (cancelled) return;\n if (group.pending > 0) {\n group.ambiguous = true;\n for (const tracker of group.trackers.keys()) ambiguousTrackers.add(tracker);\n }\n group.pending++;\n resolve();\n };\n if (group === active) start();\n else {\n group.waiting.push(start);\n if (group !== tail) {\n if (!active) startGroup(group);\n else scope.waiting.push(group);\n }\n }\n if (!group.pending) timer = setTimeout(() => {\n cancelled = true;\n const index = group.waiting.indexOf(start);\n if (index >= 0) group.waiting.splice(index, 1);\n if (!group.pending && !group.waiting.length) {\n const position = scope.waiting.indexOf(group);\n if (position >= 0) scope.waiting.splice(position, 1);\n }\n reject(new Error('D1 Prisma admission timed out'));\n }, 30_000);\n });\n } finally { if (timer !== undefined) clearTimeout(timer); }\n const tracker = tracking.getStore();\n const primary = primarySource.getStore();\n if (primary && !group.primary) group.primary = primary;\n addTracker(group, tracker);\n try { return await admissionScope.run({ group, tracker }, operation); }\n finally {\n removeTracker(group, tracker);\n group.pending--;\n if (!group.pending) {\n const next = scope.waiting.shift();\n if (next) startGroup(next);\n else { scope.active = undefined; admitted.delete(info.id); queues.delete(info.id); }\n }\n }\n}\n\nexport function prismaD1SessionDatabase(database: D1Database): D1Database {\n const existing = prismaFacades.get(database);\n if (existing) return existing;\n const info = infos.get(database);\n if (!info) return database;\n const invoke = <T>(operation: () => T): T => {\n const admission = admitted.get(info.id);\n return storage.run(admission?.context, () => admission ? tracking.run(admission.tracker, () => admission.primary ? primarySource.run(admission.primary, operation) : operation()) : operation());\n };\n const statements = new WeakMap<D1PreparedStatement, D1PreparedStatement>();\n const wrapStatement = (statement: D1PreparedStatement): D1PreparedStatement => {\n function raw<T = unknown[]>(options: { columnNames: true }): Promise<[string[], ...T[]]>;\n function raw<T = unknown[]>(options?: { columnNames?: false }): Promise<T[]>;\n function raw<T = unknown[]>(options?: { columnNames?: boolean }): Promise<T[] | [string[], ...T[]]> {\n return invoke(() => options?.columnNames ? statement.raw<T>({ columnNames:true }) : statement.raw<T>());\n }\n const wrapped: D1PreparedStatement = {\n bind: (...values) => invoke(() => wrapStatement(statement.bind(...values))),\n first: <T = Record<string, unknown>>(column?: string) => invoke(() => column === undefined ? statement.first<T>() : statement.first<T>(column)),\n all: <T = Record<string, unknown>>() => invoke(() => statement.all<T>()),\n run: <T = Record<string, unknown>>() => invoke(() => statement.run<T>()),\n raw,\n };\n statements.set(wrapped, statement);\n return wrapped;\n };\n const wrapSession = (session: D1DatabaseSession): D1DatabaseSession => ({\n prepare: (sql) => invoke(() => wrapStatement(session.prepare(sql))),\n batch: <T = unknown>(items: D1PreparedStatement[]) => invoke(() => session.batch<T>(items.map((item) => statements.get(item) ?? item))),\n getBookmark: () => invoke(() => session.getBookmark()),\n });\n const wrapped: D1Database = {\n prepare: (sql) => invoke(() => wrapStatement(database.prepare(sql))),\n batch: <T = unknown>(items: D1PreparedStatement[]) => invoke(() => database.batch<T>(items.map((item) => statements.get(item) ?? item))),\n withSession: (constraint) => invoke(() => wrapSession(database.withSession(constraint))),\n exec: (sql) => invoke(() => database.exec(sql)),\n dump: () => invoke(() => database.dump()),\n };\n infos.set(wrapped, info);\n prismaFacades.set(database, wrapped);\n return wrapped;\n}\n\nfunction contextFor(): SessionContext | undefined {\n const context = storage.getStore();\n return context && !context.closed ? context : undefined;\n}\n\nfunction sessionFor(info: DatabaseInfo, context: SessionContext, write: boolean): D1DatabaseSession {\n let session = context.sessions.get(info.id);\n const primary = primarySource.getStore();\n const reanchor = !!primary && !primary.has(info.id);\n if (reanchor) { primary.add(info.id); session = undefined; }\n if (!session) {\n session = info.db.withSession(reanchor || write || info.primary || context.primary || context.primaryIds.has(info.id) ? 'first-primary' : context.input[info.id] ?? 'first-unconstrained');\n context.sessions.set(info.id, session);\n }\n return session;\n}\n\nfunction capture(info: DatabaseInfo, context: SessionContext, session: D1DatabaseSession): void {\n const bookmark = session.getBookmark();\n if (bookmark && !context.closed) {\n const combined = { ...context.input };\n if (!mergeD1Bookmarks(combined, context.bookmarks) || !mergeD1Bookmarks(combined, { [info.id]:bookmark })) throw new RangeError('D1 bookmark capacity exceeded');\n mergeD1Bookmarks(context.bookmarks, { [info.id]: bookmark });\n const tracker = tracking.getStore();\n if (tracker) {\n mergeD1Bookmarks(tracker, { [info.id]: bookmark });\n const group = trackerGroups.get(tracker);\n if (group) for (const target of group.trackers.keys()) mergeD1Bookmarks(target, { [info.id]:bookmark });\n }\n }\n}\n\nexport function runIsolatedD1Session<T>(request: Request, operation: () => Promise<T>): Promise<T> {\n const parent = storage.getStore();\n if (!parent) return operation();\n const input = Object.fromEntries(Object.entries(parseD1Bookmarks(request.headers.get(D1_BOOKMARK_HEADER))).filter(([id]) => parent.allowedIds.has(id)));\n const context: SessionContext = { input, sessions:new Map(), bookmarks:{}, primaryIds:new Set(), allowedIds:parent.allowedIds, operations:new Map(), primary:false, closed:false };\n return storage.run(context, () => tracking.run({}, async () => {\n try { return await operation(); }\n finally { context.closed = true; }\n }));\n}\n\nexport function d1SessionWarmupRequest(request: Request, response: Response): Request {\n const bookmarks = responseD1SessionBookmarks(response.headers, tracking.getStore() ?? d1SessionBookmarks());\n if (!bookmarks) return request;\n const headers = new Headers(request.headers);\n const encoded = serializeD1Bookmarks(bookmarks);\n if (encoded) headers.set(D1_BOOKMARK_HEADER, encoded);\n return new Request(request, { headers });\n}\n\nexport function d1SessionBookmarkFloor(): D1Bookmarks | undefined {\n const context = storage.getStore();\n return context && !context.closed ? { ...context.input } : undefined;\n}\nexport function d1SessionBookmarks(): D1Bookmarks | undefined {\n const context = storage.getStore();\n return context && !context.closed ? { ...context.bookmarks } : undefined;\n}\nexport function varyD1Bookmarks(headers: Headers): void {\n const vary = headers.get('vary');\n const names = vary ? vary.split(',').map((name) => name.trim()).filter(Boolean) : [];\n if (!names.some((name) => name === '*' || name.toLowerCase() === D1_BOOKMARK_HEADER.toLowerCase())) headers.set('vary', [...names, D1_BOOKMARK_HEADER].join(', '));\n}\nexport function responseD1SessionBookmarks(headers: Headers, source?: D1Bookmarks): D1Bookmarks | undefined {\n const context = storage.getStore();\n if (!context || context.closed) return undefined;\n const result = { ...context.input };\n const upstream = decodeD1Bookmarks(headers.get(D1_BOOKMARK_HEADER));\n if (upstream && !mergeD1Bookmarks(result, Object.fromEntries(Object.entries(upstream).filter(([id]) => context.allowedIds.has(id))))) throw new RangeError('D1 bookmark capacity exceeded');\n if (source && !mergeD1Bookmarks(result, source)) throw new RangeError('D1 bookmark capacity exceeded');\n return result;\n}\nexport function d1SessionResponseBookmarks(): D1Bookmarks | undefined {\n const context = storage.getStore();\n if (!context || context.closed) return undefined;\n const result = { ...context.input };\n mergeD1Bookmarks(result, tracking.getStore() ?? context.bookmarks);\n return result;\n}\nexport function advanceD1SessionBookmarks(bookmarks: D1Bookmarks): void {\n const context = storage.getStore();\n if (context && !context.closed) {\n const filtered = Object.fromEntries(Object.entries(bookmarks).filter(([id]) => context.allowedIds.has(id)));\n const combined = { ...context.input };\n if (!mergeD1Bookmarks(combined, context.bookmarks) || !mergeD1Bookmarks(combined, filtered)) throw new RangeError('D1 bookmark capacity exceeded');\n mergeD1Bookmarks(context.bookmarks, filtered);\n const tracker = tracking.getStore();\n if (tracker) mergeD1Bookmarks(tracker, filtered);\n }\n}\n\nexport async function trackD1SessionSource<T>(operation: () => Promise<T>): Promise<{ value: T; bookmarks?: D1Bookmarks }> {\n const context = storage.getStore();\n if (!context || context.closed) return { value:await operation() };\n const parent = tracking.getStore();\n const tracker: D1Bookmarks = {};\n const admission = admissionScope.getStore();\n const previous = admission?.tracker;\n if (admission) { removeTracker(admission.group, previous); admission.tracker = tracker; addTracker(admission.group, tracker); }\n try {\n const value = await tracking.run(tracker, operation);\n if (parent) mergeD1Bookmarks(parent, tracker);\n return { value, bookmarks:tracker };\n }\n finally { if (admission) { removeTracker(admission.group, tracker); admission.tracker = previous; addTracker(admission.group, previous); } }\n}\n\nasync function serialSession<T>(context: SessionContext, id: string, operation: () => Promise<T>): Promise<T> {\n const previous = context.operations.get(id) ?? Promise.resolve();\n let release!: () => void;\n const next = new Promise<void>((resolve) => { release = resolve; });\n const tail = previous.then(() => next);\n context.operations.set(id, tail);\n await previous;\n try { return await operation(); }\n finally { release(); if (context.operations.get(id) === tail) context.operations.delete(id); }\n}\n\nexport function wrapD1SessionCacheValue(value: unknown, source?: D1Bookmarks): unknown {\n const bookmarks = source ?? tracking.getStore() ?? d1SessionBookmarks();\n if (bookmarks && (ambiguousTrackers.has(bookmarks) || admissionScope.getStore()?.group.ambiguous)) return { d1SessionCache:0 };\n return bookmarks ? { d1SessionCache: 1, bookmarks, value } : value;\n}\n\nexport function unwrapD1SessionCacheValue(value: unknown, databaseIds: readonly string[]): { value: unknown; bookmarks?: D1Bookmarks } | null {\n const floor = d1SessionBookmarkFloor();\n if (!floor) return { value };\n if (!value || typeof value !== 'object' || Reflect.get(value, 'd1SessionCache') !== 1 || !Reflect.has(value, 'value')) return null;\n const raw: unknown = Reflect.get(value, 'bookmarks');\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return null;\n const serialized = JSON.stringify(raw);\n const bookmarks = parseD1Bookmarks(serialized);\n if (Object.keys(bookmarks).length !== Object.keys(raw).length) return null;\n if (databaseIds.some((id) => floor[id] !== undefined && (!bookmarks[id] || bookmarks[id] < floor[id]))) return null;\n return { value: Reflect.get(value, 'value'), bookmarks };\n}\n\nexport function d1SessionCacheHooks(database: object): CacheSessionHooks {\n return {\n key: () => d1SessionBookmarkFloor() ? 'd1-session-v1' : null,\n read(value) {\n const info = infos.get(database);\n if (d1SessionBookmarkFloor() && !info) return null;\n const cached = unwrapD1SessionCacheValue(value, info ? [info.id] : []);\n if (d1SessionBookmarkFloor() && info && !cached?.bookmarks?.[info.id]) return null;\n if (cached?.bookmarks) advanceD1SessionBookmarks(cached.bookmarks);\n return cached;\n },\n background(operation) {\n const bookmarks = d1SessionResponseBookmarks();\n if (!bookmarks) return operation();\n const encoded = serializeD1Bookmarks(bookmarks);\n const request = new Request('https://d1-session.invalid/', { headers:encoded ? { [D1_BOOKMARK_HEADER]:encoded } : {} });\n return runIsolatedD1Session(request, operation);\n },\n async fill(load) {\n const tracked = await trackD1SessionSource(() => runPrimaryD1SessionSource(load));\n const active = d1SessionBookmarkFloor();\n const info = infos.get(database);\n const cached = active && (!info || !tracked.bookmarks?.[info.id]) ? { d1SessionCache:0 } : wrapD1SessionCacheValue(tracked.value, tracked.bookmarks);\n return { value:tracked.value, cached };\n },\n };\n}\n\nfunction facade(info: DatabaseInfo): D1Database {\n type Statement = { sql: string; values: unknown[] };\n const statements = new WeakMap<D1PreparedStatement, Statement>();\n const prepare = (sql: string, values: unknown[] = []): D1PreparedStatement => {\n const execute = async <T>(action: (statement: D1PreparedStatement) => Promise<T>): Promise<T> => {\n const context = contextFor();\n if (!context) return action(info.db.prepare(sql).bind(...values));\n return serialSession(context, info.id, async () => {\n const session = sessionFor(info, context, !isReadonly(sql));\n const result = await action(session.prepare(sql).bind(...values));\n capture(info, context, session);\n return result;\n });\n };\n function raw<T = unknown[]>(options: { columnNames: true }): Promise<[string[], ...T[]]>;\n function raw<T = unknown[]>(options?: { columnNames?: false }): Promise<T[]>;\n function raw<T = unknown[]>(options?: { columnNames?: boolean }): Promise<T[] | [string[], ...T[]]> {\n return execute<T[] | [string[], ...T[]]>((statement) => options?.columnNames ? statement.raw<T>({ columnNames:true }) : statement.raw<T>());\n }\n const result: D1PreparedStatement = {\n bind: (...next) => prepare(sql, next),\n first: <T = Record<string, unknown>>(column?: string) => execute((statement) => column === undefined ? statement.first<T>() : statement.first<T>(column)),\n run: <T = Record<string, unknown>>() => execute((statement) => statement.run<T>()),\n all: <T = Record<string, unknown>>() => execute((statement) => statement.all<T>()),\n raw,\n };\n statements.set(result, { sql, values });\n return result;\n };\n const batch = async <T = unknown>(items: D1PreparedStatement[]): Promise<D1Result<T>[]> => {\n const definitions = items.map((item) => statements.get(item));\n const context = contextFor();\n if (!context) return info.db.batch<T>(items.map((item, index) => {\n const definition = definitions[index];\n return definition ? info.db.prepare(definition.sql).bind(...definition.values) : item;\n }));\n if (definitions.some((item) => !item)) throw new TypeError('D1 batch statements must use the same database facade');\n const execute = async (target: D1Database | D1DatabaseSession, session?: D1DatabaseSession) => {\n const raw = definitions.map((item) => {\n if (!item) throw new TypeError('Invalid D1 statement');\n return target.prepare(item.sql).bind(...item.values);\n });\n const result = await target.batch<T>(raw);\n if (session && context) capture(info, context, session);\n return result;\n };\n return serialSession(context, info.id, () => {\n const session = sessionFor(info, context, definitions.some((item) => item && !isReadonly(item.sql)));\n return execute(session, session);\n });\n };\n const database: D1Database = {\n prepare,\n batch,\n exec: async (sql) => {\n const context = contextFor();\n if (!context) return info.db.exec(sql);\n return serialSession(context, info.id, async () => {\n const result = await info.db.exec(sql);\n const session = info.db.withSession('first-primary');\n await session.prepare('SELECT 1').first();\n context.sessions.set(info.id, session);\n capture(info, context, session);\n return result;\n });\n },\n dump: () => info.db.dump(),\n withSession: (constraint) => {\n const context = contextFor();\n if (!context) return info.db.withSession(constraint);\n if (constraint && constraint !== 'first-unconstrained' && constraint !== context.input[info.id]) {\n if (constraint === 'first-primary' && (!context.sessions.has(info.id) || context.primary || info.primary || context.primaryIds.has(info.id))) { context.primaryIds.add(info.id); return { prepare, batch, getBookmark: () => context.sessions.get(info.id)?.getBookmark() ?? null }; }\n throw new Error('Explicit D1 session constraint conflicts with request session');\n }\n return { prepare, batch, getBookmark: () => context.sessions.get(info.id)?.getBookmark() ?? null };\n },\n };\n infos.set(database, info);\n return database;\n}\n\nexport function sessionD1Env<Env extends object>(env: Env, options: D1ReadSessionOptions): Env {\n const raw: unknown = Reflect.get(env, options.databaseIdsEnv);\n if (raw === undefined) return env;\n let parsed: unknown;\n try { parsed = typeof raw === 'string' ? JSON.parse(raw) : null; } catch { parsed = null; }\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) throw new Error(`Invalid ${options.databaseIdsEnv}`);\n const ids = Object.fromEntries(Object.entries(parsed).map(([name, id]) => {\n if (!isD1BindingName(name, { ...options, envPrefix:'', coordinatorNamePrefix:'', coordinatorClass:'', readModels:[], unfencedWriteTables:[] }) || typeof id !== 'string' || !/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(id)) throw new Error('Invalid D1 database identity');\n return [name, id.toLowerCase()];\n }));\n const primaryIds = new Set((options.primaryBindings ?? []).map((name) => ids[name]).filter((id): id is string => typeof id === 'string'));\n const scoped = { ...env };\n for (const name of options.bindingNames) if (!Reflect.has(env, name)) throw new Error(`Missing D1 binding: ${name}`);\n for (const [name, db] of Object.entries(env)) {\n if (options.bindingPrefixes.some((prefix) => name.startsWith(prefix)) && !isD1BindingName(name, { ...options, envPrefix:'', coordinatorNamePrefix:'', coordinatorClass:'', readModels:[], unfencedWriteTables:[] })) throw new Error(`Invalid D1 binding: ${name}`);\n if (!isD1BindingName(name, { ...options, envPrefix:'', coordinatorNamePrefix:'', coordinatorClass:'', readModels:[], unfencedWriteTables:[] })) continue;\n const id: string | undefined = ids[name];\n if (!id || !db || typeof db !== 'object' || typeof Reflect.get(db, 'withSession') !== 'function') throw new Error(`Missing D1 identity or binding: ${name}`);\n const primary = primaryIds.has(id);\n let variants = facades.get(db);\n if (!variants) { variants = new Map(); facades.set(db, variants); }\n const key = `${id}:${primary}`;\n let wrapped = variants.get(key);\n if (!wrapped) { wrapped = facade({ id, db: db as D1Database, primary }); variants.set(key, wrapped); }\n Reflect.set(scoped, name, wrapped);\n }\n return scoped;\n}\n\nexport function wrapD1ReadSessionHandler<Env extends object, Context>(handler: (request: Request, env: Env, context: Context) => Promise<Response>, options: D1ReadSessionOptions): (request: Request, env: Env, context: Context) => Promise<Response> {\n return async (request, env, context) => {\n if (request.headers.get('upgrade')?.toLowerCase() === 'websocket') return handler(request, env, context);\n if (Reflect.get(env, options.databaseIdsEnv) === undefined) return handler(request, env, context);\n const scoped = sessionD1Env(env, options);\n const decoded = decodeD1Bookmarks(request.headers.get(D1_BOOKMARK_HEADER));\n if (!decoded) return new Response('Invalid D1 bookmarks', { status:400 });\n const configured = new Set(Object.entries(scoped).flatMap(([name, value]) => isD1BindingName(name, { ...options, envPrefix:'', coordinatorNamePrefix:'', coordinatorClass:'', readModels:[], unfencedWriteTables:[] }) && value && typeof value === 'object' ? [infos.get(value)?.id].filter((id): id is string => !!id) : []));\n const input = Object.fromEntries(Object.entries(decoded).filter(([id]) => configured.has(id)));\n const sessionContext: SessionContext = { input, sessions:new Map(), bookmarks:{}, primaryIds:new Set(), allowedIds:configured, operations:new Map(), primary: !['GET', 'HEAD', 'OPTIONS'].includes(request.method.toUpperCase()) || (options.ignoreRequestCacheControl !== true && hasCacheBypass(request)) || (options.freshnessHeader !== undefined && request.headers.has(options.freshnessHeader)), closed:false };\n return storage.run(sessionContext, async () => {\n try {\n const tracked = await trackD1SessionSource(() => handler(request, scoped, context));\n const response = tracked.value;\n if (response.status === 101) return response;\n const headers = new Headers(response.headers);\n varyD1Bookmarks(headers);\n const responseBookmarks = responseD1SessionBookmarks(headers, tracked.bookmarks) ?? {};\n sessionContext.closed = true;\n const encoded = serializeD1Bookmarks(responseBookmarks);\n if (encoded && encoded !== '{}') headers.set(D1_BOOKMARK_HEADER, encoded);\n else headers.delete(D1_BOOKMARK_HEADER);\n return new Response(response.body, { status:response.status, statusText:response.statusText, headers });\n } finally { sessionContext.closed = true; }\n });\n };\n}\n"]}
|