@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.
@@ -84,7 +84,7 @@ function createResponseWarmup(run, canRun = () => true) {
84
84
  };
85
85
  const bootstrap = discoverScopeFrom === void 0 ? null : urlFor(discoverScopeFrom);
86
86
  if (discoverScopeFrom !== void 0 && (!bootstrap || !seeds.some((seed) => typeof seed === "string" && urlFor(seed)?.href === bootstrap.href))) return;
87
- const enqueue = (target, priority = 2) => {
87
+ const enqueue = (target, priority = 2, batch) => {
88
88
  if (typeof target !== "string" && (!target || typeof target !== "object" || typeof target.url !== "string" || !(target.scope === null || validScope(target.scope)))) return;
89
89
  const explicit = typeof target !== "string";
90
90
  const url = urlFor(explicit ? target.url : target);
@@ -97,16 +97,17 @@ function createResponseWarmup(run, canRun = () => true) {
97
97
  if (queued && queued.priority > priority) {
98
98
  queue.splice(existing, 1);
99
99
  queued.priority = priority;
100
- const index2 = queue.findIndex((item) => item.priority > priority);
100
+ const index2 = batch?.index ?? queue.findIndex((item) => item.priority > priority);
101
101
  if (index2 === -1) queue.push(queued);
102
102
  else queue.splice(index2, 0, queued);
103
+ if (batch) batch.index++;
103
104
  }
104
105
  return;
105
106
  }
106
107
  if (seen.size > maxTargets && priority < 2) {
107
108
  let index2 = queue.length - 1;
108
- while (index2 >= 0 && queue[index2]?.priority !== 2) index2--;
109
- if (index2 >= 0) {
109
+ while (index2 >= 0 && (queue[index2]?.priority ?? -1) < (priority === 1 ? 1 : 2)) index2--;
110
+ if (index2 >= (batch?.index ?? 0)) {
110
111
  const removed = queue.splice(index2, 1)[0];
111
112
  if (removed) seen.delete(jobKey(removed.url, removed.scope));
112
113
  }
@@ -114,9 +115,10 @@ function createResponseWarmup(run, canRun = () => true) {
114
115
  if (seen.size > maxTargets) return;
115
116
  seen.add(key);
116
117
  const job = { url: url.href, scope: targetScope, override: explicit || !request.headers.has(scopeHeader) && targetScope !== null, priority };
117
- const index = queue.findIndex((item) => item.priority > priority);
118
+ const index = batch?.index ?? queue.findIndex((item) => item.priority > priority);
118
119
  if (index === -1) queue.push(job);
119
120
  else queue.splice(index, 0, job);
121
+ if (batch) batch.index++;
120
122
  };
121
123
  const keyFor = async (value) => catalog.regionalKey(ttl, catalogScope === "credential" ? ["response-warmup-credential-v1", identity, credentialGroup] : ["response-warmup-v1", identity, value]);
122
124
  let loadedScope;
@@ -188,10 +190,12 @@ function createResponseWarmup(run, canRun = () => true) {
188
190
  if (bootstrap?.href === url.href) completedBootstrap = jobKey(url.href, scope);
189
191
  if (!deferred) await load();
190
192
  }
193
+ const batch = !deferred && discoveryPriority === "next" ? { index: queue.findIndex((job) => job.priority >= 1) } : void 0;
194
+ if (batch && batch.index === -1) batch.index = queue.length;
191
195
  for (const target of found.targets.slice(0, maxTargets)) {
192
196
  if (typeof target !== "string" && (!target || typeof target !== "object" || typeof target.url !== "string" || !(target.scope === null || validScope(target.scope)))) continue;
193
197
  if (deferred) deferred.push(target);
194
- else enqueue(target, discoveryPriority === "next" ? 1 : 2);
198
+ else enqueue(target, discoveryPriority === "next" ? 1 : 2, batch);
195
199
  }
196
200
  };
197
201
  const runOne = async (target) => {
@@ -246,12 +250,17 @@ function createResponseWarmup(run, canRun = () => true) {
246
250
  internal.set(warm, { generation: current, isCurrent });
247
251
  const task = Promise.resolve().then(() => run(warm, env, context));
248
252
  started = true;
249
- void task.then((response2) => {
253
+ const completion = task.then((response2) => {
250
254
  if (abort.signal.aborted) void response2.body?.cancel().catch(() => void 0);
251
255
  releaseSlot();
252
256
  }, () => {
253
257
  releaseSlot();
254
258
  });
259
+ try {
260
+ const wait = context && typeof context === "object" ? Reflect.get(context, "waitUntil") : void 0;
261
+ if (typeof wait === "function") Reflect.apply(wait, context, [completion]);
262
+ } catch {
263
+ }
255
264
  const result = await Promise.race([task, new Promise((_, reject) => abort.signal.addEventListener("abort", () => reject(Error("warmup deadline")), { once: true }))]);
256
265
  if (verified.has(warm) && result.status === 200 && stillCurrent() && Date.now() < end) await inspect(new URL(target.url), result);
257
266
  void result.body?.cancel().catch(() => void 0);
@@ -307,5 +316,5 @@ function createResponseWarmup(run, canRun = () => true) {
307
316
  }
308
317
 
309
318
  export { createResponseWarmup };
310
- //# sourceMappingURL=chunk-A4WV6RY4.js.map
311
- //# sourceMappingURL=chunk-A4WV6RY4.js.map
319
+ //# sourceMappingURL=chunk-27P3CVHP.js.map
320
+ //# sourceMappingURL=chunk-27P3CVHP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/response-warmup.ts"],"names":["job","index","response"],"mappings":"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","file":"chunk-27P3CVHP.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, batch?: { index: number }) => {\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 = batch?.index ?? queue.findIndex((item) => item.priority > priority);\n if (index === -1) queue.push(queued); else queue.splice(index, 0, queued);\n if (batch) batch.index++;\n }\n return;\n }\n if (seen.size > maxTargets && priority < 2) {\n let index = queue.length - 1;\n while (index >= 0 && (queue[index]?.priority ?? -1) < (priority === 1 ? 1 : 2)) index--;\n if (index >= (batch?.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 = batch?.index ?? queue.findIndex((item) => item.priority > priority);\n if (index === -1) queue.push(job); else queue.splice(index, 0, job);\n if (batch) batch.index++;\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 const batch = !deferred && discoveryPriority === 'next'\n ? { index: queue.findIndex((job) => job.priority >= 1) }\n : undefined;\n if (batch && batch.index === -1) batch.index = queue.length;\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, batch);\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 const completion = task.then((response) => { if (abort.signal.aborted) void response.body?.cancel().catch(() => undefined); releaseSlot(); }, () => { releaseSlot(); });\n try {\n const wait = context && typeof context === 'object' ? Reflect.get(context, 'waitUntil') : undefined;\n if (typeof wait === 'function') Reflect.apply(wait, context, [completion]);\n } catch { /* Source cleanup remains best effort when the host declines it. */ }\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"]}
@@ -165,6 +165,7 @@ var prismaScope = new AsyncLocalStorage();
165
165
  var trackerGroups = /* @__PURE__ */ new WeakMap();
166
166
  var ambiguousTrackers = /* @__PURE__ */ new WeakSet();
167
167
  var infos = /* @__PURE__ */ new WeakMap();
168
+ var sessionFacades = /* @__PURE__ */ new WeakMap();
168
169
  var facades = /* @__PURE__ */ new WeakMap();
169
170
  var queues = /* @__PURE__ */ new Map();
170
171
  var admitted = /* @__PURE__ */ new Map();
@@ -172,6 +173,8 @@ var prismaFacades = /* @__PURE__ */ new WeakMap();
172
173
  function registerD1SessionAlias(alias, original) {
173
174
  const info = infos.get(original);
174
175
  if (info) infos.set(alias, info);
176
+ const session = sessionFacades.get(original);
177
+ if (session) sessionFacades.set(alias, { info: session.info, alias: true });
175
178
  }
176
179
  function runPrimaryD1SessionSource(operation) {
177
180
  return storage.getStore() ? primarySource.run(/* @__PURE__ */ new Set(), operation) : operation();
@@ -205,7 +208,8 @@ async function runD1SessionOperation(database, operation) {
205
208
  const scope = gate;
206
209
  const active = scope.active;
207
210
  const tail = scope.waiting.at(-1);
208
- const group = token && tail?.token === token ? tail : token && !tail && active?.token === token ? active : { token, context, pending: 0, waiting: [], tracker: {}, trackers: /* @__PURE__ */ new Map(), ambiguous: false };
211
+ const reentrant = active && active.pending > 0 && active.token === token && admissionScope.getStore()?.group === active;
212
+ const group = active && (reentrant || token && active.token === token) ? active : token && tail?.token === token ? tail : { token, context, pending: 0, waiting: [], tracker: {}, trackers: /* @__PURE__ */ new Map(), ambiguous: false };
209
213
  const startGroup = (next) => {
210
214
  scope.active = next;
211
215
  admitted.set(info.id, next);
@@ -291,10 +295,10 @@ function prismaD1SessionDatabase(database) {
291
295
  statements.set(wrapped2, statement);
292
296
  return wrapped2;
293
297
  };
294
- const wrapSession = (session) => ({
295
- prepare: (sql) => invoke(() => wrapStatement(session.prepare(sql))),
296
- batch: (items) => invoke(() => session.batch(items.map((item) => statements.get(item) ?? item))),
297
- getBookmark: () => invoke(() => session.getBookmark())
298
+ const wrapSession = (session2) => ({
299
+ prepare: (sql) => invoke(() => wrapStatement(session2.prepare(sql))),
300
+ batch: (items) => invoke(() => session2.batch(items.map((item) => statements.get(item) ?? item))),
301
+ getBookmark: () => invoke(() => session2.getBookmark())
298
302
  });
299
303
  const wrapped = {
300
304
  prepare: (sql) => invoke(() => wrapStatement(database.prepare(sql))),
@@ -304,6 +308,8 @@ function prismaD1SessionDatabase(database) {
304
308
  dump: () => invoke(() => database.dump())
305
309
  };
306
310
  infos.set(wrapped, info);
311
+ const session = sessionFacades.get(database);
312
+ if (session) sessionFacades.set(wrapped, { info: session.info, alias: true });
307
313
  prismaFacades.set(database, wrapped);
308
314
  return wrapped;
309
315
  }
@@ -562,6 +568,7 @@ function facade(info) {
562
568
  }
563
569
  };
564
570
  infos.set(database, info);
571
+ sessionFacades.set(database, { info, alias: false });
565
572
  return database;
566
573
  }
567
574
  function sessionD1Env(env, options) {
@@ -587,15 +594,23 @@ function sessionD1Env(env, options) {
587
594
  const id = ids[name];
588
595
  if (!id || !db || typeof db !== "object" || typeof Reflect.get(db, "withSession") !== "function") throw new Error(`Missing D1 identity or binding: ${name}`);
589
596
  const primary = primaryIds.has(id);
590
- let variants = facades.get(db);
597
+ const existing = sessionFacades.get(db);
598
+ if (existing && existing.info.id !== id) throw new Error(`Conflicting D1 identity: ${name}`);
599
+ if (existing && existing.info.primary === primary) {
600
+ Reflect.set(scoped, name, db);
601
+ continue;
602
+ }
603
+ if (existing?.alias) throw new Error(`Conflicting D1 session policy: ${name}`);
604
+ const source = existing?.info.db ?? db;
605
+ let variants = facades.get(source);
591
606
  if (!variants) {
592
607
  variants = /* @__PURE__ */ new Map();
593
- facades.set(db, variants);
608
+ facades.set(source, variants);
594
609
  }
595
610
  const key = `${id}:${primary}`;
596
611
  let wrapped = variants.get(key);
597
612
  if (!wrapped) {
598
- wrapped = facade({ id, db, primary });
613
+ wrapped = facade({ id, db: source, primary });
599
614
  variants.set(key, wrapped);
600
615
  }
601
616
  Reflect.set(scoped, name, wrapped);
@@ -633,5 +648,5 @@ function wrapD1ReadSessionHandler(handler, options) {
633
648
  }
634
649
 
635
650
  export { advanceD1SessionBookmarks, d1SessionBookmarkFloor, d1SessionCacheHooks, d1SessionWarmupRequest, fenceD1Writes, hasCacheBypass, hasFreshnessCookie, hasFreshnessGeneration, prismaD1SessionDatabase, regionalD1MetadataTtl, registerD1SessionAlias, responseD1SessionBookmarks, runD1PrismaScope, runD1SessionOperation, runIsolatedD1Session, runPrimaryD1SessionSource, sessionD1Env, trackD1SessionSource, unwrapD1SessionCacheValue, validFreshnessHeader, varyD1Bookmarks, wrapD1ReadSessionHandler, wrapD1SessionCacheValue };
636
- //# sourceMappingURL=chunk-WJNCFFF3.js.map
637
- //# sourceMappingURL=chunk-WJNCFFF3.js.map
651
+ //# sourceMappingURL=chunk-2V6MG4YX.js.map
652
+ //# sourceMappingURL=chunk-2V6MG4YX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/d1/adapter.ts","../src/d1/request-freshness.ts","../src/d1/session.ts"],"names":["index","tracker","wrapped","session","result"],"mappings":"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","file":"chunk-2V6MG4YX.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 sessionFacades = new WeakMap<object, { info: DatabaseInfo; alias: boolean }>();\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 const session = sessionFacades.get(original);\n if (session) sessionFacades.set(alias, { info:session.info, alias:true });\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 reentrant = active && active.pending > 0 && active.token === token && admissionScope.getStore()?.group === active;\n const group: AdmissionGroup = active && (reentrant || (token && active.token === token)) ? active : token && tail?.token === token ? tail : { 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 const session = sessionFacades.get(database);\n if (session) sessionFacades.set(wrapped, { info:session.info, alias:true });\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 sessionFacades.set(database, { info, alias:false });\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 const existing = sessionFacades.get(db);\n if (existing && existing.info.id !== id) throw new Error(`Conflicting D1 identity: ${name}`);\n if (existing && existing.info.primary === primary) { Reflect.set(scoped, name, db); continue; }\n if (existing?.alias) throw new Error(`Conflicting D1 session policy: ${name}`);\n const source = existing?.info.db ?? db;\n let variants = facades.get(source);\n if (!variants) { variants = new Map(); facades.set(source, variants); }\n const key = `${id}:${primary}`;\n let wrapped = variants.get(key);\n if (!wrapped) { wrapped = facade({ id, db: source 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"]}
@@ -1,5 +1,5 @@
1
1
  import { createDurableObjectStore } from './chunk-NFBMWKY5.js';
2
- import { fenceD1Writes, registerD1SessionAlias, d1SessionBookmarkFloor, unwrapD1SessionCacheValue, advanceD1SessionBookmarks, trackD1SessionSource, runPrimaryD1SessionSource, wrapD1SessionCacheValue } from './chunk-WJNCFFF3.js';
2
+ import { fenceD1Writes, registerD1SessionAlias, d1SessionBookmarkFloor, unwrapD1SessionCacheValue, advanceD1SessionBookmarks, trackD1SessionSource, runPrimaryD1SessionSource, wrapD1SessionCacheValue } from './chunk-2V6MG4YX.js';
3
3
  import { limitRegionalDataUntil } from './chunk-LHOK33GI.js';
4
4
  import { createCacheExtension, readTargets } from './chunk-M4UOCIDQ.js';
5
5
  import { boundedD1Store } from './chunk-WKZ7TKGM.js';
@@ -326,5 +326,5 @@ async function cacheD1Read(database, options, load) {
326
326
  }
327
327
 
328
328
  export { cacheD1Env, cacheD1Read, createD1CacheRuntime, d1CacheEpoch, d1CacheRuntime, d1PrismaCacheExtension, sameD1CacheDatabase, withD1PrismaCache, wrapD1Handler };
329
- //# sourceMappingURL=chunk-LAXBP5DQ.js.map
330
- //# sourceMappingURL=chunk-LAXBP5DQ.js.map
329
+ //# sourceMappingURL=chunk-6VWIKYUQ.js.map
330
+ //# sourceMappingURL=chunk-6VWIKYUQ.js.map