@dee-wan/cache 1.1.0 → 2.0.1
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/README.md +31 -1
- package/dist/chunk-2V6MG4YX.js +652 -0
- package/dist/chunk-2V6MG4YX.js.map +1 -0
- package/dist/{chunk-MOJBHU3S.js → chunk-6VWIKYUQ.js} +72 -173
- package/dist/chunk-6VWIKYUQ.js.map +1 -0
- package/dist/{chunk-HGAUU4EU.js → chunk-7OWX6SH5.js} +52 -15
- package/dist/chunk-7OWX6SH5.js.map +1 -0
- package/dist/{chunk-A4WV6RY4.js → chunk-GGSQ6C6X.js} +8 -3
- package/dist/chunk-GGSQ6C6X.js.map +1 -0
- package/dist/{chunk-ZREX7LLC.js → chunk-M4UOCIDQ.js} +18 -6
- package/dist/chunk-M4UOCIDQ.js.map +1 -0
- package/dist/chunk-NFBMWKY5.js +54 -0
- package/dist/chunk-NFBMWKY5.js.map +1 -0
- package/dist/{chunk-OOPPXK7Q.js → chunk-WKZ7TKGM.js} +3 -54
- package/dist/chunk-WKZ7TKGM.js.map +1 -0
- package/dist/chunk-ZBYAKDNZ.js +45 -0
- package/dist/chunk-ZBYAKDNZ.js.map +1 -0
- package/dist/client.d.ts +14 -1
- package/dist/client.js +37 -1
- package/dist/client.js.map +1 -1
- package/dist/cloudflare/index.d.ts +1 -1
- package/dist/cloudflare/index.js +4 -4
- package/dist/d1/index.d.ts +18 -2
- package/dist/d1/index.js +33 -11
- package/dist/d1/index.js.map +1 -1
- package/dist/d1/response-lease.js +11 -9
- package/dist/d1/response-lease.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/response-lease.js +8 -3
- package/dist/{types-D-Gd11to.d.ts → types-CtErcz2a.d.ts} +13 -1
- package/docs/cache-contract.md +2 -0
- package/package.json +1 -1
- package/dist/chunk-A4WV6RY4.js.map +0 -1
- package/dist/chunk-D2EESWMC.js +0 -19
- package/dist/chunk-D2EESWMC.js.map +0 -1
- package/dist/chunk-HGAUU4EU.js.map +0 -1
- package/dist/chunk-MOJBHU3S.js.map +0 -1
- package/dist/chunk-OOPPXK7Q.js.map +0 -1
- package/dist/chunk-ZREX7LLC.js.map +0 -1
|
@@ -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,148 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { MAX_VALUE_BYTES } from './chunk-OQRNVGQE.js';
|
|
4
|
-
import { isD1BindingName } from './chunk-AENVFT2S.js';
|
|
1
|
+
import { createDurableObjectStore } from './chunk-NFBMWKY5.js';
|
|
2
|
+
import { fenceD1Writes, registerD1SessionAlias, d1SessionBookmarkFloor, unwrapD1SessionCacheValue, advanceD1SessionBookmarks, trackD1SessionSource, runPrimaryD1SessionSource, wrapD1SessionCacheValue } from './chunk-2V6MG4YX.js';
|
|
5
3
|
import { limitRegionalDataUntil } from './chunk-LHOK33GI.js';
|
|
4
|
+
import { createCacheExtension, readTargets } from './chunk-M4UOCIDQ.js';
|
|
5
|
+
import { boundedD1Store } from './chunk-WKZ7TKGM.js';
|
|
6
6
|
import { boundedValue, regionalKey, regionalRead, regionalWrite } from './chunk-E6OZZ5UX.js';
|
|
7
|
+
import { MAX_VALUE_BYTES } from './chunk-OQRNVGQE.js';
|
|
7
8
|
import { sha256Hex, stableStringify, decode, encode } from './chunk-ZCMZJKGN.js';
|
|
8
|
-
|
|
9
|
-
// src/d1/adapter.ts
|
|
10
|
-
var fence = ["g"];
|
|
11
|
-
var lexemes = /\s+|--[^\n]*|\/\*[\s\S]*?(?:\*\/|$)|'(?:[^']|'')*'?|`(?:[^`]|``)*`?|"(?:[^"]|"")*"?|\[[^\]]*\]?|[A-Za-z_][A-Za-z0-9_$]*|[\s\S]/g;
|
|
12
|
-
var safePragmas = /* @__PURE__ */ new Set(["database_list", "table_list", "table_info", "table_xinfo", "index_list", "index_info", "index_xinfo", "foreign_key_list"]);
|
|
13
|
-
function operationOf(tokens, start = 0) {
|
|
14
|
-
const word = (index2) => tokens[index2]?.toLowerCase();
|
|
15
|
-
if (word(start) !== "with") return word(start);
|
|
16
|
-
let index = start + 1;
|
|
17
|
-
if (word(index) === "recursive") index++;
|
|
18
|
-
const group = () => {
|
|
19
|
-
if (tokens[index] !== "(") return false;
|
|
20
|
-
let depth = 0;
|
|
21
|
-
do {
|
|
22
|
-
if (tokens[index] === "(") depth++;
|
|
23
|
-
if (tokens[index] === ")") depth--;
|
|
24
|
-
index++;
|
|
25
|
-
} while (index < tokens.length && depth > 0);
|
|
26
|
-
return depth === 0;
|
|
27
|
-
};
|
|
28
|
-
while (index < tokens.length) {
|
|
29
|
-
if (!/^(?:[A-Za-z_][A-Za-z0-9_$]*|`[^`]+`|"[^"]+"|\[[^\]]+\])$/.test(tokens[index] ?? "")) return void 0;
|
|
30
|
-
index++;
|
|
31
|
-
if (tokens[index] === "(" && !group()) return void 0;
|
|
32
|
-
if (word(index++) !== "as") return void 0;
|
|
33
|
-
if (word(index) === "not") index++;
|
|
34
|
-
if (word(index) === "materialized") index++;
|
|
35
|
-
if (tokens[index] !== "(" || !["select", "with"].includes(word(index + 1) ?? "")) return void 0;
|
|
36
|
-
if (!group()) return void 0;
|
|
37
|
-
if (tokens[index] !== ",") return word(index);
|
|
38
|
-
index++;
|
|
39
|
-
}
|
|
40
|
-
return void 0;
|
|
41
|
-
}
|
|
42
|
-
function isReadonly(sql) {
|
|
43
|
-
const tokens = [...sql.matchAll(lexemes)].map(([token = ""]) => token).filter((token) => !/^(?:\s|--|\/\*)/.test(token));
|
|
44
|
-
if (tokens.at(-1) === ";") tokens.pop();
|
|
45
|
-
const first = tokens[0]?.toLowerCase();
|
|
46
|
-
const pragmaName = first === "pragma" ? (tokens[2] === "." ? tokens[3] : tokens[1])?.toLowerCase() : void 0;
|
|
47
|
-
const readonlyPragma = first === "pragma" && pragmaName !== void 0 && safePragmas.has(pragmaName) && !tokens.includes("=");
|
|
48
|
-
return !tokens.includes(";") && (operationOf(tokens) === "select" || readonlyPragma);
|
|
49
|
-
}
|
|
50
|
-
function needsWriteFence(sql, unrelatedWrites) {
|
|
51
|
-
const tokens = [...sql.matchAll(lexemes)].map(([token = ""]) => token).filter((token) => !/^(?:\s|--|\/\*)/.test(token));
|
|
52
|
-
if (tokens.at(-1) === ";") tokens.pop();
|
|
53
|
-
if (tokens.includes(";")) return true;
|
|
54
|
-
let index = 0;
|
|
55
|
-
const word = () => tokens[index]?.toLowerCase();
|
|
56
|
-
const operation = word();
|
|
57
|
-
if (operation !== "insert" && operation !== "update" && operation !== "delete") return true;
|
|
58
|
-
index++;
|
|
59
|
-
if ((operation === "insert" || operation === "update") && word() === "or") {
|
|
60
|
-
index++;
|
|
61
|
-
if (!["rollback", "abort", "replace", "fail", "ignore"].includes(word() ?? "")) return true;
|
|
62
|
-
index++;
|
|
63
|
-
}
|
|
64
|
-
if (operation === "insert") {
|
|
65
|
-
if (word() !== "into") return true;
|
|
66
|
-
index++;
|
|
67
|
-
}
|
|
68
|
-
if (operation === "delete") {
|
|
69
|
-
if (word() !== "from") return true;
|
|
70
|
-
index++;
|
|
71
|
-
}
|
|
72
|
-
const identifier = (token) => {
|
|
73
|
-
if (!token) return null;
|
|
74
|
-
if (/^[A-Za-z_][A-Za-z0-9_$]*$/.test(token)) return token.toLowerCase();
|
|
75
|
-
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();
|
|
76
|
-
return null;
|
|
77
|
-
};
|
|
78
|
-
let target = identifier(tokens[index++]);
|
|
79
|
-
if (tokens[index] === ".") {
|
|
80
|
-
if (target !== "main") return true;
|
|
81
|
-
index++;
|
|
82
|
-
target = identifier(tokens[index++]);
|
|
83
|
-
}
|
|
84
|
-
if (!target || !unrelatedWrites.has(target)) return true;
|
|
85
|
-
if (operation === "update" && word() !== "set") return true;
|
|
86
|
-
if (operation === "delete" && !["where", "returning"].includes(word() ?? "") && index !== tokens.length) return true;
|
|
87
|
-
return false;
|
|
88
|
-
}
|
|
89
|
-
function fenceD1Writes(db, options) {
|
|
90
|
-
const { generation, policy } = options;
|
|
91
|
-
const store = boundedD1Store(options.store);
|
|
92
|
-
const unrelatedWrites = new Set(policy.unfencedWriteTables.map((name) => name.toLowerCase()));
|
|
93
|
-
if (!generation) throw new TypeError("cache generation is required");
|
|
94
|
-
const statements = /* @__PURE__ */ new WeakMap();
|
|
95
|
-
const withWrite = async (operation) => {
|
|
96
|
-
const token = crypto.randomUUID();
|
|
97
|
-
try {
|
|
98
|
-
await store.beginWrite({ fences: fence, generation, leaseMs: 6e5, token });
|
|
99
|
-
} catch (error) {
|
|
100
|
-
await store.endWrite({ fences: fence, token }).catch(() => void 0);
|
|
101
|
-
throw new CacheUnavailableError(error);
|
|
102
|
-
}
|
|
103
|
-
try {
|
|
104
|
-
return await operation();
|
|
105
|
-
} finally {
|
|
106
|
-
await store.endWrite({ fences: fence, token }).catch(() => void 0);
|
|
107
|
-
}
|
|
108
|
-
};
|
|
109
|
-
const wrapStatement = (raw, sql) => {
|
|
110
|
-
const requiresFence = !isReadonly(sql) && needsWriteFence(sql, unrelatedWrites);
|
|
111
|
-
const execute = (operation) => requiresFence ? withWrite(operation) : operation();
|
|
112
|
-
function rawRows(rawOptions) {
|
|
113
|
-
return execute(() => rawOptions?.columnNames === true ? raw.raw({ columnNames: true }) : raw.raw(rawOptions?.columnNames === false ? { columnNames: false } : void 0));
|
|
114
|
-
}
|
|
115
|
-
const wrapped2 = {
|
|
116
|
-
bind: (...next) => wrapStatement(raw.bind(...next), sql),
|
|
117
|
-
first: (column) => execute(() => column === void 0 ? raw.first() : raw.first(column)),
|
|
118
|
-
all: () => execute(() => raw.all()),
|
|
119
|
-
run: () => execute(() => raw.run()),
|
|
120
|
-
raw: rawRows
|
|
121
|
-
};
|
|
122
|
-
statements.set(wrapped2, { raw, fence: requiresFence });
|
|
123
|
-
return wrapped2;
|
|
124
|
-
};
|
|
125
|
-
const batch = (target, items) => {
|
|
126
|
-
const resolved = items.map((item) => statements.get(item));
|
|
127
|
-
const raw = items.map((item, index) => resolved[index]?.raw ?? item);
|
|
128
|
-
const operation = () => target.batch(raw);
|
|
129
|
-
return resolved.every((item) => item !== void 0 && !item.fence) ? operation() : withWrite(operation);
|
|
130
|
-
};
|
|
131
|
-
return {
|
|
132
|
-
prepare: (sql) => wrapStatement(db.prepare(sql), sql),
|
|
133
|
-
batch: (items) => batch(db, items),
|
|
134
|
-
exec: (sql) => isReadonly(sql) || !needsWriteFence(sql, unrelatedWrites) ? db.exec(sql) : withWrite(() => db.exec(sql)),
|
|
135
|
-
dump: () => db.dump(),
|
|
136
|
-
withSession: (constraint) => {
|
|
137
|
-
const session = db.withSession(constraint);
|
|
138
|
-
return {
|
|
139
|
-
prepare: (sql) => wrapStatement(session.prepare(sql), sql),
|
|
140
|
-
batch: (items) => batch(session, items),
|
|
141
|
-
getBookmark: () => session.getBookmark()
|
|
142
|
-
};
|
|
143
|
-
}
|
|
144
|
-
};
|
|
145
|
-
}
|
|
9
|
+
import { isD1BindingName } from './chunk-AENVFT2S.js';
|
|
146
10
|
|
|
147
11
|
// src/d1/env.ts
|
|
148
12
|
var uuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
@@ -154,6 +18,7 @@ function createD1CacheRuntime(database, options) {
|
|
|
154
18
|
const { generation, databaseId, profile, readsEnabled = true } = options;
|
|
155
19
|
const store = boundedD1Store(options.store);
|
|
156
20
|
const fenced = fenceD1Writes(database, { store, generation, policy: profile });
|
|
21
|
+
registerD1SessionAlias(fenced, database);
|
|
157
22
|
runtimes.set(fenced, { store, generation, databaseId, readsEnabled, readModels: profile.readModels, coordinatorIdentity: options.coordinatorIdentity ?? options.store, coordinatorName: options.coordinatorName ?? "", regionalIdentity: options.regionalIdentity });
|
|
158
23
|
return fenced;
|
|
159
24
|
}
|
|
@@ -225,8 +90,10 @@ function d1PrismaCacheExtension(database, config, optionsOrDecimal, decimalArg)
|
|
|
225
90
|
const scopedConfig = { ...config, cacheableByModel: Object.fromEntries(Object.entries(config.cacheableByModel).map(([model, enabled]) => [model, enabled && allowed.has(model)])) };
|
|
226
91
|
const common = { config: scopedConfig, store: runtime.store, generation: runtime.generation, coordinationGeneration: runtime.generation, ...decimal ? { decimal } : {}, ...options?.keyArgs ? { keyArgs: options.keyArgs } : {} };
|
|
227
92
|
const base = createCacheExtension({ ...common, scope: runtime.databaseId });
|
|
228
|
-
if (!options) return base;
|
|
229
93
|
const operation = base.query.$allModels.$allOperations;
|
|
94
|
+
if (!options) return { ...base, query: { $allModels: { $allOperations(params) {
|
|
95
|
+
return d1SessionBookmarkFloor() ? params.query(params.args) : operation(params);
|
|
96
|
+
} } } };
|
|
230
97
|
return {
|
|
231
98
|
...base,
|
|
232
99
|
query: { $allModels: { async $allOperations(params) {
|
|
@@ -249,50 +116,72 @@ function d1PrismaCacheExtension(database, config, optionsOrDecimal, decimalArg)
|
|
|
249
116
|
normalizedArgs = options.keyArgs ? options.keyArgs(params.args) : params.args;
|
|
250
117
|
normalized = true;
|
|
251
118
|
const configDigest = await sha256Hex(stableStringify(config));
|
|
252
|
-
regional = await regionalKey(options.regionalTtlMs, ["prisma", options.regionalTtlMs, identities, configDigest, options.scope, params.model, params.operation, dataPath, normalizedArgs ?? null]);
|
|
119
|
+
regional = await regionalKey(options.regionalTtlMs, ["prisma", d1SessionBookmarkFloor() ? "session-v1" : null, options.regionalTtlMs, identities, configDigest, options.scope, params.model, params.operation, dataPath, normalizedArgs ?? null]);
|
|
253
120
|
}
|
|
254
121
|
} catch {
|
|
255
122
|
}
|
|
256
123
|
const hit = await regionalRead(regional, options.regionalTtlMs, decimal);
|
|
257
124
|
if (hit) {
|
|
258
|
-
|
|
259
|
-
|
|
125
|
+
const cached = unwrapD1SessionCacheValue(hit.value, [runtime, ...dependencies].map((item) => item.databaseId));
|
|
126
|
+
if (cached) {
|
|
127
|
+
if (cached.bookmarks) advanceD1SessionBookmarks(cached.bookmarks);
|
|
128
|
+
limitRegionalDataUntil(hit.expires);
|
|
129
|
+
return cached.value;
|
|
130
|
+
}
|
|
260
131
|
}
|
|
261
132
|
let started = Date.now();
|
|
262
133
|
const snapshot = await inspect(dependencies);
|
|
263
134
|
if (!snapshot) return params.query(params.args);
|
|
264
135
|
let scope;
|
|
265
136
|
try {
|
|
266
|
-
scope = stableStringify([runtime.databaseId, runtime.generation, options.scope, snapshot.map(({ runtime: dependency, epoch }) => [dependency.databaseId, dependency.generation, epoch])]);
|
|
137
|
+
scope = stableStringify([d1SessionBookmarkFloor() ? "session-v1" : null, runtime.databaseId, runtime.generation, options.scope, snapshot.map(({ runtime: dependency, epoch }) => [dependency.databaseId, dependency.generation, epoch])]);
|
|
267
138
|
if (new TextEncoder().encode(scope).byteLength > 32768) return params.query(params.args);
|
|
268
139
|
} catch {
|
|
269
140
|
return params.query(params.args);
|
|
270
141
|
}
|
|
271
142
|
let verifiedHit = false;
|
|
143
|
+
let hitBookmarks;
|
|
272
144
|
let verifiedWrite = false;
|
|
273
145
|
let queried = false;
|
|
274
146
|
const store = {
|
|
275
147
|
...runtime.store,
|
|
276
148
|
async write(request) {
|
|
277
|
-
const
|
|
149
|
+
const value = d1SessionBookmarkFloor() ? JSON.stringify(wrapD1SessionCacheValue(request.value)) : request.value;
|
|
150
|
+
const result = await runtime.store.write({ ...request, value });
|
|
278
151
|
verifiedWrite = result.ok;
|
|
279
152
|
return result;
|
|
280
153
|
},
|
|
281
154
|
async read(request) {
|
|
282
155
|
const result = await runtime.store.read(request);
|
|
283
156
|
if (result.kind === "hit" && !sameSnapshots(snapshot, await inspect(dependencies))) return { kind: "miss", epochs: result.epochs, lockHeldForMs: null, lockToken: null, pending: true };
|
|
157
|
+
if (result.kind === "hit" && d1SessionBookmarkFloor()) {
|
|
158
|
+
let cached;
|
|
159
|
+
try {
|
|
160
|
+
cached = unwrapD1SessionCacheValue(JSON.parse(result.value), [runtime, ...dependencies].map((item) => item.databaseId));
|
|
161
|
+
} catch {
|
|
162
|
+
cached = null;
|
|
163
|
+
}
|
|
164
|
+
if (!cached || typeof cached.value !== "string") return { kind: "miss", epochs: result.epochs, lockHeldForMs: null, lockToken: null, pending: true };
|
|
165
|
+
hitBookmarks = cached.bookmarks;
|
|
166
|
+
verifiedHit = true;
|
|
167
|
+
return { ...result, value: cached.value };
|
|
168
|
+
}
|
|
284
169
|
if (result.kind === "hit") verifiedHit = true;
|
|
285
170
|
return result;
|
|
286
171
|
}
|
|
287
172
|
};
|
|
288
173
|
const scoped = createCacheExtension({ ...common, store, scope, ...normalized ? { keyArgs: () => normalizedArgs } : {} });
|
|
289
|
-
const
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
174
|
+
const tracked = await trackD1SessionSource(async () => {
|
|
175
|
+
const value = await scoped.query.$allModels.$allOperations({ ...params, query: async (args) => {
|
|
176
|
+
queried = true;
|
|
177
|
+
started = Date.now();
|
|
178
|
+
return runPrimaryD1SessionSource(() => params.query(args));
|
|
179
|
+
} });
|
|
180
|
+
if (!queried && verifiedHit && hitBookmarks) advanceD1SessionBookmarks(hitBookmarks);
|
|
181
|
+
return value;
|
|
182
|
+
});
|
|
183
|
+
if (regional && (!queried && verifiedHit || verifiedWrite) && sameSnapshots(snapshot, await inspect(dependencies))) await regionalWrite(regional, options.regionalTtlMs, started, wrapD1SessionCacheValue(tracked.value, tracked.bookmarks));
|
|
184
|
+
return tracked.value;
|
|
296
185
|
} } }
|
|
297
186
|
};
|
|
298
187
|
}
|
|
@@ -366,21 +255,26 @@ async function cacheD1Read(database, options, load) {
|
|
|
366
255
|
const primary = d1CacheRuntime(database);
|
|
367
256
|
const ttl = options.ttlMs ?? DEFAULT_TTL_MS;
|
|
368
257
|
if (!primary || !primary.readsEnabled || !Number.isFinite(ttl) || ttl <= 0 || ttl > MAX_TTL_MS || options.scope === void 0 || options.scope === null || !boundedValue(options.scope, MAX_IDENTITY_BYTES, true) || !boundedValue(options.key, MAX_IDENTITY_BYTES, true)) return load();
|
|
258
|
+
const source = () => runPrimaryD1SessionSource(load);
|
|
369
259
|
const runtimes2 = dependencyRuntimes(database, options.dependencies ?? []);
|
|
370
|
-
if (!runtimes2) return
|
|
260
|
+
if (!runtimes2) return source();
|
|
371
261
|
const regionalIdentities = [primary, ...runtimes2].map((runtime) => [runtime.databaseId, runtime.generation, runtime.coordinatorName, runtime.regionalIdentity]);
|
|
372
|
-
const regional = regionalIdentities.every((identity) => identity[3]) ? await regionalKey(options.regionalTtlMs, ["d1-read", options.regionalTtlMs, regionalIdentities, options.scope, options.key]) : null;
|
|
262
|
+
const regional = regionalIdentities.every((identity) => identity[3]) ? await regionalKey(options.regionalTtlMs, ["d1-read", d1SessionBookmarkFloor() ? "session-v1" : null, options.regionalTtlMs, regionalIdentities, options.scope, options.key]) : null;
|
|
373
263
|
const hit = await regionalRead(regional, options.regionalTtlMs);
|
|
374
264
|
if (hit) {
|
|
375
|
-
|
|
376
|
-
|
|
265
|
+
const cached = unwrapD1SessionCacheValue(hit.value, [primary, ...runtimes2].map((runtime) => runtime.databaseId));
|
|
266
|
+
if (cached) {
|
|
267
|
+
if (cached.bookmarks) advanceD1SessionBookmarks(cached.bookmarks);
|
|
268
|
+
limitRegionalDataUntil(hit.expires);
|
|
269
|
+
return cached.value;
|
|
270
|
+
}
|
|
377
271
|
}
|
|
378
272
|
const started = Date.now();
|
|
379
273
|
const snapshot = await inspect(runtimes2);
|
|
380
|
-
if (!snapshot) return
|
|
274
|
+
if (!snapshot) return source();
|
|
381
275
|
let key;
|
|
382
276
|
try {
|
|
383
|
-
const identity = stableStringify(["d1-read-v1", primary.databaseId, primary.generation, options.scope, options.key, snapshot.map(({ runtime, epoch }) => [runtime.databaseId, runtime.generation, epoch])]);
|
|
277
|
+
const identity = stableStringify(["d1-read-v1", d1SessionBookmarkFloor() ? "session-v1" : null, primary.databaseId, primary.generation, options.scope, options.key, snapshot.map(({ runtime, epoch }) => [runtime.databaseId, runtime.generation, epoch])]);
|
|
384
278
|
if (new TextEncoder().encode(identity).byteLength > MAX_IDENTITY_BYTES) return load();
|
|
385
279
|
key = `d1:${await sha256Hex(identity)}`;
|
|
386
280
|
} catch {
|
|
@@ -390,29 +284,34 @@ async function cacheD1Read(database, options, load) {
|
|
|
390
284
|
try {
|
|
391
285
|
result = await primary.store.read({ key, fences: FENCES, generation: primary.generation, lockMs: 3e4, refresh: false });
|
|
392
286
|
} catch {
|
|
393
|
-
return
|
|
287
|
+
return source();
|
|
394
288
|
}
|
|
395
289
|
if (result.kind === "hit") {
|
|
396
290
|
try {
|
|
397
|
-
const
|
|
398
|
-
|
|
399
|
-
|
|
291
|
+
const raw = decode(JSON.parse(result.value));
|
|
292
|
+
const cached = unwrapD1SessionCacheValue(raw, [primary, ...runtimes2].map((runtime) => runtime.databaseId));
|
|
293
|
+
const value = cached?.value;
|
|
294
|
+
if (cached && boundedValue(value, MAX_VALUE_SIZE, false) && sameSnapshots(snapshot, await inspect(runtimes2))) {
|
|
295
|
+
if (cached.bookmarks) advanceD1SessionBookmarks(cached.bookmarks);
|
|
296
|
+
await regionalWrite(regional, options.regionalTtlMs, started, raw);
|
|
400
297
|
return value;
|
|
401
298
|
}
|
|
402
299
|
} catch {
|
|
403
300
|
}
|
|
404
|
-
return
|
|
301
|
+
return source();
|
|
405
302
|
}
|
|
406
|
-
if (!result.lockToken || result.pending) return
|
|
303
|
+
if (!result.lockToken || result.pending) return source();
|
|
407
304
|
const lockToken = result.lockToken;
|
|
408
305
|
try {
|
|
409
|
-
const
|
|
306
|
+
const tracked = await trackD1SessionSource(source);
|
|
307
|
+
const value = tracked.value;
|
|
410
308
|
try {
|
|
411
309
|
if (value !== null && value !== void 0 && boundedValue(value, MAX_VALUE_SIZE, false) && (options.cacheable?.(value) ?? true)) {
|
|
412
|
-
const
|
|
310
|
+
const cachedValue = wrapD1SessionCacheValue(value, tracked.bookmarks);
|
|
311
|
+
const text = JSON.stringify(encode(cachedValue));
|
|
413
312
|
if (new TextEncoder().encode(text).byteLength <= MAX_VALUE_SIZE && sameSnapshots(snapshot, await inspect(runtimes2))) {
|
|
414
313
|
const written = await primary.store.write({ key, lockToken, snapshot: result.epochs, ttlMs: ttl, softTtlMs: ttl, value: text });
|
|
415
|
-
if (regional && written.ok && sameSnapshots(snapshot, await inspect(runtimes2))) await regionalWrite(regional, options.regionalTtlMs, started,
|
|
314
|
+
if (regional && written.ok && sameSnapshots(snapshot, await inspect(runtimes2))) await regionalWrite(regional, options.regionalTtlMs, started, cachedValue);
|
|
416
315
|
}
|
|
417
316
|
}
|
|
418
317
|
} catch {
|
|
@@ -426,6 +325,6 @@ async function cacheD1Read(database, options, load) {
|
|
|
426
325
|
}
|
|
427
326
|
}
|
|
428
327
|
|
|
429
|
-
export { cacheD1Env, cacheD1Read, createD1CacheRuntime, d1CacheEpoch, d1CacheRuntime, d1PrismaCacheExtension,
|
|
430
|
-
//# sourceMappingURL=chunk-
|
|
431
|
-
//# sourceMappingURL=chunk-
|
|
328
|
+
export { cacheD1Env, cacheD1Read, createD1CacheRuntime, d1CacheEpoch, d1CacheRuntime, d1PrismaCacheExtension, sameD1CacheDatabase, withD1PrismaCache, wrapD1Handler };
|
|
329
|
+
//# sourceMappingURL=chunk-6VWIKYUQ.js.map
|
|
330
|
+
//# sourceMappingURL=chunk-6VWIKYUQ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/d1/env.ts","../src/d1/read.ts"],"names":["runtimes"],"mappings":"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","file":"chunk-6VWIKYUQ.js","sourcesContent":["import { createDurableObjectStore } from '../cloudflare/store';\nimport type { CoordinatorLocationHint } from '../cloudflare/store-options';\nimport type { CacheCoordinator } from '../cloudflare/coordinator';\nimport { fenceD1Writes } from './adapter';\nimport { isD1BindingName, type D1CacheProfile } from './profile';\nimport { createCacheExtension } from '../core/extension';\nimport type { CacheStore, DecimalConstructor, GeneratedCacheConfig } from '../core/types';\nimport { sha256Hex, stableStringify } from '../core/codec';\nimport { boundedValue, dependencyRuntimes, inspect, sameSnapshots } from './read';\nimport { boundedD1Store } from './bounded-store';\nimport { regionalKey, regionalRead, regionalWrite } from './regional';\nimport { limitRegionalDataUntil } from './regional-deadline';\nimport { readTargets } from '../core/targets';\nimport { registerD1SessionAlias, d1SessionBookmarkFloor, wrapD1SessionCacheValue, unwrapD1SessionCacheValue, advanceD1SessionBookmarks, trackD1SessionSource, runPrimaryD1SessionSource } from './session';\n\nconst uuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\nconst hints = new Set(['wnam', 'enam', 'sam', 'weur', 'eeur', 'apac', 'oc', 'afr', 'me']);\nconst wrapped = new WeakMap<object, WeakMap<D1Database, Map<string, D1Database>>>();\nexport interface D1CacheRuntime { store: CacheStore; generation: string; databaseId: string; readsEnabled: boolean; readModels: readonly string[]; coordinatorIdentity: object; coordinatorName: string; regionalIdentity?: string }\nconst runtimes = new WeakMap<object, D1CacheRuntime>();\nexport const d1CacheRuntime = (database: object): D1CacheRuntime | undefined => runtimes.get(database);\nexport function createD1CacheRuntime(database: D1Database, options: { store: CacheStore; databaseId: string; generation: string; readsEnabled?: boolean; profile: D1CacheProfile; coordinatorIdentity?: object; coordinatorName?: string; regionalIdentity?: string }): D1Database {\n const { generation, databaseId, profile, readsEnabled = true } = options;\n const store = boundedD1Store(options.store);\n const fenced = fenceD1Writes(database, { store, generation, policy: profile });\n registerD1SessionAlias(fenced, database);\n runtimes.set(fenced, { store, generation, databaseId, readsEnabled, readModels: profile.readModels, coordinatorIdentity: options.coordinatorIdentity ?? options.store, coordinatorName: options.coordinatorName ?? '', regionalIdentity: options.regionalIdentity });\n return fenced;\n}\n\nexport function cacheD1Env<T extends object>(env: T, profile: D1CacheProfile): T {\n const value = (suffix: string): unknown => Reflect.get(env, `${profile.envPrefix}_${suffix}`);\n const enabled = value('ENABLED');\n if (enabled === undefined || enabled === 'false') return env;\n if (enabled !== 'true') throw new Error(`Invalid ${profile.envPrefix}_ENABLED`);\n const reads = value('READS_ENABLED');\n if (reads !== undefined && reads !== 'true' && reads !== 'false') throw new Error(`Invalid ${profile.envPrefix}_READS_ENABLED`);\n const readsEnabled = reads !== 'false';\n const namespace = value('COORDINATOR');\n const rawIds = value('DATABASE_IDS');\n const generation = value('GENERATION');\n if (!namespace || typeof namespace !== 'object' || typeof Reflect.get(namespace, 'idFromName') !== 'function' || typeof Reflect.get(namespace, 'get') !== 'function' || typeof rawIds !== 'string' || typeof generation !== 'string' || !generation.trim())\n throw new Error(`${profile.envPrefix} requires coordinator, database identities and generation`);\n if (generation.length > 256) throw new Error(`Invalid ${profile.envPrefix}_GENERATION`);\n let ids: unknown;\n try { ids = JSON.parse(rawIds); } catch { throw new Error(`Invalid ${profile.envPrefix}_DATABASE_IDS`); }\n if (!ids || typeof ids !== 'object' || Array.isArray(ids)) throw new Error(`Invalid ${profile.envPrefix}_DATABASE_IDS`);\n const map = Object.entries(ids);\n if (map.some(([key, id]) => !isD1BindingName(key, profile) || typeof id !== 'string' || !uuid.test(id))) throw new Error('Invalid cache database identity');\n const locationHint = value('LOCATION_HINT') ?? 'weur';\n if (typeof locationHint !== 'string' || !hints.has(locationHint)) throw new Error(`Invalid ${profile.envPrefix}_LOCATION_HINT`);\n const identities = new Map(map);\n const scoped = { ...env };\n for (const name of profile.bindingNames) if (!Reflect.has(env, name)) throw new Error(`Cache missing D1 binding: ${name}`);\n for (const [key, database] of Object.entries(env)) {\n if (profile.bindingPrefixes.some((prefix) => key.startsWith(prefix)) && !isD1BindingName(key, profile)) throw new Error(`Invalid cache binding: ${key}`);\n if (!isD1BindingName(key, profile)) continue;\n const id = identities.get(key);\n if (typeof id !== 'string' || !database || typeof database.prepare !== 'function') throw new Error(`Cache missing D1 identity or binding: ${key}`);\n const databaseId = id.toLowerCase();\n const cacheKey = JSON.stringify([databaseId, generation, locationHint, readsEnabled, profile]);\n let databases = wrapped.get(namespace);\n if (!databases) { databases = new WeakMap(); wrapped.set(namespace, databases); }\n let versions = databases.get(database);\n if (!versions) { versions = new Map(); databases.set(database, versions); }\n let cached = versions.get(cacheKey);\n if (!cached) {\n const coordinatorName = `${profile.coordinatorNamePrefix}${databaseId}`;\n const store = createDurableObjectStore(namespace as DurableObjectNamespace<CacheCoordinator>, { name: coordinatorName, locationHint: locationHint as CoordinatorLocationHint });\n cached = createD1CacheRuntime(database, { store, generation, databaseId, readsEnabled, profile, coordinatorIdentity: namespace, coordinatorName, regionalIdentity: (namespace as DurableObjectNamespace<CacheCoordinator>).idFromName(coordinatorName).toString() });\n versions.set(cacheKey, cached);\n }\n Reflect.set(scoped, key, cached);\n }\n return scoped;\n}\n\nexport function wrapD1Handler<Event, Env extends object, Context, Result>(handler: (event: Event, env: Env, context: Context) => Result, profile: D1CacheProfile): (event: Event, env: Env, context: Context) => Result {\n return (event, env, context) => handler(event, cacheD1Env(env, profile), context);\n}\n\nexport interface D1PrismaCacheOptions {\n scope: unknown;\n dependencies?: readonly D1Database[];\n keyArgs?: (args: unknown) => unknown;\n regionalTtlMs?: number;\n regionalModels?: readonly string[];\n}\n\nexport function d1PrismaCacheExtension(database: object, config: GeneratedCacheConfig, optionsOrDecimal?: D1PrismaCacheOptions | DecimalConstructor, decimalArg?: DecimalConstructor): ReturnType<typeof createCacheExtension> | undefined {\n const runtime = runtimes.get(database);\n if (!runtime || !runtime.readsEnabled) return undefined;\n const options = typeof optionsOrDecimal === 'function' ? undefined : optionsOrDecimal;\n const decimal = typeof optionsOrDecimal === 'function' ? optionsOrDecimal : decimalArg;\n const allowed = new Set(runtime.readModels);\n const scopedConfig = { ...config, cacheableByModel: Object.fromEntries(Object.entries(config.cacheableByModel).map(([model, enabled]) => [model, enabled && allowed.has(model)])) };\n const common = { config: scopedConfig, store: runtime.store, generation: runtime.generation, coordinationGeneration: runtime.generation, ...(decimal ? { decimal } : {}), ...(options?.keyArgs ? { keyArgs: options.keyArgs } : {}) };\n const base = createCacheExtension({ ...common, scope: runtime.databaseId });\n const operation = base.query.$allModels.$allOperations;\n if (!options) return { ...base, query: { $allModels: { $allOperations(params: Parameters<typeof operation>[0]) {\n return d1SessionBookmarkFloor() ? params.query(params.args) : operation(params);\n } } } };\n return {\n ...base,\n query: { $allModels: { async $allOperations(params: Parameters<typeof operation>[0]) {\n if (!params.model || !allowed.has(params.model) || !['findUnique', 'findUniqueOrThrow', 'findFirst', 'findFirstOrThrow', 'findMany', 'count', 'aggregate', 'groupBy'].includes(params.operation)) return operation(params);\n if (options.scope === null || options.scope === undefined || !boundedValue(options.scope, 32_768, true) || (options.dependencies?.length ?? 0) > 32) return params.query(params.args);\n const dependencies = dependencyRuntimes(database, options.dependencies ?? []);\n if (!dependencies) return params.query(params.args);\n const internal = params.__internalParams;\n const dataPath = internal && typeof internal === 'object' && Array.isArray(Reflect.get(internal, 'dataPath')) ? Reflect.get(internal, 'dataPath') : [];\n const transaction: unknown = internal && typeof internal === 'object' ? Reflect.get(internal, 'transaction') : undefined;\n const inBatch = !!transaction && typeof transaction === 'object' && Reflect.get(transaction, 'kind') === 'batch';\n let regional: string | null = null;\n let normalizedArgs: unknown;\n let normalized = false;\n try {\n const identities = [runtime, ...dependencies].map((item) => [item.databaseId, item.generation, item.coordinatorName, item.regionalIdentity]);\n const targets = options.regionalModels ? readTargets(config.relationGraph, params.model, params.args) : undefined;\n const allowedTargets = !options.regionalModels || (!!targets && [...targets.models].every((model) => options.regionalModels?.includes(model)));\n if (options.regionalTtlMs && options.regionalTtlMs > 0 && options.regionalTtlMs <= 5000 && !inBatch && allowedTargets && identities.every((item) => item[3])) {\n normalizedArgs = options.keyArgs ? options.keyArgs(params.args) : params.args;\n normalized = true;\n const configDigest = await sha256Hex(stableStringify(config));\n regional = await regionalKey(options.regionalTtlMs, ['prisma', d1SessionBookmarkFloor() ? 'session-v1' : null, options.regionalTtlMs, identities, configDigest, options.scope, params.model, params.operation, dataPath, normalizedArgs ?? null]);\n }\n } catch { /* Key callbacks use the strict path on failure. */ }\n const hit = await regionalRead(regional, options.regionalTtlMs, decimal);\n if (hit) {\n const cached = unwrapD1SessionCacheValue(hit.value, [runtime, ...dependencies].map((item) => item.databaseId));\n if (cached) { if (cached.bookmarks) advanceD1SessionBookmarks(cached.bookmarks); limitRegionalDataUntil(hit.expires); return cached.value; }\n }\n let started = Date.now();\n const snapshot = await inspect(dependencies);\n if (!snapshot) return params.query(params.args);\n let scope: string;\n try {\n scope = stableStringify([d1SessionBookmarkFloor() ? 'session-v1' : null, runtime.databaseId, runtime.generation, options.scope, snapshot.map(({ runtime: dependency, epoch }) => [dependency.databaseId, dependency.generation, epoch])]);\n if (new TextEncoder().encode(scope).byteLength > 32_768) return params.query(params.args);\n } catch { return params.query(params.args); }\n let verifiedHit = false;\n let hitBookmarks: Record<string, string> | undefined;\n let verifiedWrite = false;\n let queried = false;\n const store: CacheStore = { ...runtime.store,\n async write(request) {\n const value = d1SessionBookmarkFloor() ? JSON.stringify(wrapD1SessionCacheValue(request.value)) : request.value;\n const result = await runtime.store.write({ ...request, value });\n verifiedWrite = result.ok;\n return result;\n },\n async read(request) {\n const result = await runtime.store.read(request);\n if (result.kind === 'hit' && !sameSnapshots(snapshot, await inspect(dependencies))) return { kind: 'miss', epochs: result.epochs, lockHeldForMs: null, lockToken: null, pending: true };\n if (result.kind === 'hit' && d1SessionBookmarkFloor()) {\n let cached;\n try { cached = unwrapD1SessionCacheValue(JSON.parse(result.value), [runtime, ...dependencies].map((item) => item.databaseId)); } catch { cached = null; }\n if (!cached || typeof cached.value !== 'string') return { kind:'miss', epochs:result.epochs, lockHeldForMs:null, lockToken:null, pending:true };\n hitBookmarks = cached.bookmarks;\n verifiedHit = true;\n return { ...result, value:cached.value };\n }\n if (result.kind === 'hit') verifiedHit = true;\n return result;\n } };\n const scoped = createCacheExtension({ ...common, store, scope, ...(normalized ? { keyArgs: () => normalizedArgs } : {}) });\n const tracked = await trackD1SessionSource(async () => {\n const value = await scoped.query.$allModels.$allOperations({ ...params, query: async (args) => {\n queried = true;\n started = Date.now();\n return runPrimaryD1SessionSource(() => params.query(args));\n } });\n if (!queried && verifiedHit && hitBookmarks) advanceD1SessionBookmarks(hitBookmarks);\n return value;\n });\n if (regional && ((!queried && verifiedHit) || verifiedWrite) && sameSnapshots(snapshot, await inspect(dependencies))) await regionalWrite(regional, options.regionalTtlMs, started, wrapD1SessionCacheValue(tracked.value, tracked.bookmarks));\n return tracked.value;\n } } },\n };\n}\n\nexport function withD1PrismaCache<Client extends object>(client: Client, database: object, config: GeneratedCacheConfig, optionsOrDecimal?: D1PrismaCacheOptions | DecimalConstructor, decimalArg?: DecimalConstructor): Client {\n const extension = d1PrismaCacheExtension(database, config, optionsOrDecimal, decimalArg);\n if (!extension) return client;\n const extend: unknown = Reflect.get(client, '$extends', client);\n if (typeof extend !== 'function') throw new TypeError('Prisma client must support $extends');\n const extended: unknown = Reflect.apply(extend, client, [extension]);\n if (!extended || typeof extended !== 'object') throw new TypeError('Prisma extension returned no client');\n return new Proxy(client, {\n get(target, property) {\n const source = property === '$on' ? target : extended;\n const member: unknown = Reflect.get(source, property, source);\n return typeof member === 'function' ? member.bind(source) : member;\n },\n });\n}\n","import { boundedValue } from '../core/bounded-value';\nimport type { D1Database } from '@cloudflare/workers-types';\nimport { decode, encode, sha256Hex, stableStringify } from '../core/codec';\nimport { MAX_VALUE_BYTES } from '../core/limits';\nimport { d1CacheRuntime, type D1CacheRuntime } from './env';\nimport { regionalKey, regionalRead, regionalWrite } from './regional';\nimport { limitRegionalDataUntil } from './regional-deadline';\nimport { wrapD1SessionCacheValue, unwrapD1SessionCacheValue, advanceD1SessionBookmarks, d1SessionBookmarkFloor, trackD1SessionSource, runPrimaryD1SessionSource } from './session';\n\nconst FENCES = ['g'];\nconst DEFAULT_TTL_MS = 30_000;\nconst MAX_TTL_MS = 300_000;\nconst MAX_IDENTITY_BYTES = 32_768;\nconst MAX_VALUE_SIZE = Math.min(1_500_000, MAX_VALUE_BYTES);\n\nexport interface D1ReadOptions<T> {\n key: unknown;\n scope: unknown;\n dependencies?: readonly D1Database[];\n ttlMs?: number;\n regionalTtlMs?: number;\n cacheable?: (value: T) => boolean;\n}\n\nexport { boundedValue } from '../core/bounded-value';\n\nexport interface Snapshot { runtime: D1CacheRuntime; epoch: number }\nexport function sameD1CacheDatabase(left: object, right: object): boolean {\n const a = d1CacheRuntime(left);\n const b = d1CacheRuntime(right);\n return !!a && !!b && a.databaseId === b.databaseId && a.generation === b.generation && a.coordinatorIdentity === b.coordinatorIdentity && a.coordinatorName === b.coordinatorName;\n}\nexport async function d1CacheEpoch(database: object): Promise<string | null> {\n const runtime = d1CacheRuntime(database);\n if (!runtime || !runtime.readsEnabled) return null;\n const snapshot = await inspect([runtime]);\n if (!snapshot?.[0]) return null;\n return stableStringify([runtime.databaseId, runtime.generation, snapshot[0].epoch]);\n}\nexport async function inspect(runtimes: readonly D1CacheRuntime[]): Promise<Snapshot[] | null> {\n if (runtimes.length === 0) return [];\n try {\n const states = await Promise.all(runtimes.map(async (runtime) => {\n if (!runtime.store.inspectFences) return null;\n const state = await runtime.store.inspectFences({ fences: FENCES, generation: runtime.generation });\n const epoch = state.epochs.g;\n if (state.pending !== false || typeof epoch !== 'number' || !Number.isSafeInteger(epoch) || epoch < 0) return null;\n return { runtime, epoch };\n }));\n return states.some((state) => state === null) ? null : states.filter((state): state is Snapshot => state !== null);\n } catch { return null; }\n}\n\nexport const sameSnapshots = (a: readonly Snapshot[], b: readonly Snapshot[] | null): boolean =>\n b !== null && a.length === b.length && a.every((item, index) => item.runtime.databaseId === b[index]?.runtime.databaseId && item.runtime.generation === b[index]?.runtime.generation && item.epoch === b[index]?.epoch);\n\nexport function dependencyRuntimes(database: object, dependencies: readonly object[]): D1CacheRuntime[] | null {\n if (dependencies.length > 32) return null;\n const primary = d1CacheRuntime(database);\n if (!primary || !primary.readsEnabled) return null;\n const byId = new Map<string, D1CacheRuntime>();\n for (const dependency of dependencies) {\n const runtime = d1CacheRuntime(dependency);\n if (!runtime || !runtime.readsEnabled) return null;\n const prior = runtime.databaseId === primary.databaseId ? primary : byId.get(runtime.databaseId);\n if (prior && (prior.generation !== runtime.generation || prior.coordinatorIdentity !== runtime.coordinatorIdentity || prior.coordinatorName !== runtime.coordinatorName)) return null;\n if (runtime.databaseId === primary.databaseId) continue;\n if (!runtime.store.inspectFences) return null;\n byId.set(runtime.databaseId, prior ?? runtime);\n }\n return [...byId.values()].sort((a, b) => a.databaseId.localeCompare(b.databaseId));\n}\n\nexport async function cacheD1Read<T>(database: D1Database, options: D1ReadOptions<T>, load: () => Promise<T>): Promise<T> {\n const primary = d1CacheRuntime(database);\n const ttl = options.ttlMs ?? DEFAULT_TTL_MS;\n if (!primary || !primary.readsEnabled || !Number.isFinite(ttl) || ttl <= 0 || ttl > MAX_TTL_MS || options.scope === undefined || options.scope === null || !boundedValue(options.scope, MAX_IDENTITY_BYTES, true) || !boundedValue(options.key, MAX_IDENTITY_BYTES, true)) return load();\n const source = () => runPrimaryD1SessionSource(load);\n const runtimes = dependencyRuntimes(database, options.dependencies ?? []);\n if (!runtimes) return source();\n const regionalIdentities = [primary, ...runtimes].map((runtime) => [runtime.databaseId, runtime.generation, runtime.coordinatorName, runtime.regionalIdentity]);\n const regional = regionalIdentities.every((identity) => identity[3])\n ? await regionalKey(options.regionalTtlMs, ['d1-read', d1SessionBookmarkFloor() ? 'session-v1' : null, options.regionalTtlMs, regionalIdentities, options.scope, options.key]) : null;\n const hit = await regionalRead(regional, options.regionalTtlMs);\n if (hit) {\n const cached = unwrapD1SessionCacheValue(hit.value, [primary, ...runtimes].map((runtime) => runtime.databaseId));\n if (cached) { if (cached.bookmarks) advanceD1SessionBookmarks(cached.bookmarks); limitRegionalDataUntil(hit.expires); return cached.value as T; }\n }\n const started = Date.now();\n const snapshot = await inspect(runtimes);\n if (!snapshot) return source();\n let key: string;\n try {\n const identity = stableStringify(['d1-read-v1', d1SessionBookmarkFloor() ? 'session-v1' : null, primary.databaseId, primary.generation, options.scope, options.key, snapshot.map(({ runtime, epoch }) => [runtime.databaseId, runtime.generation, epoch])]);\n if (new TextEncoder().encode(identity).byteLength > MAX_IDENTITY_BYTES) return load();\n key = `d1:${await sha256Hex(identity)}`;\n } catch { return load(); }\n let result;\n try { result = await primary.store.read({ key, fences: FENCES, generation: primary.generation, lockMs: 30_000, refresh: false }); }\n catch { return source(); }\n if (result.kind === 'hit') {\n try {\n const raw: unknown = decode(JSON.parse(result.value));\n const cached = unwrapD1SessionCacheValue(raw, [primary, ...runtimes].map((runtime) => runtime.databaseId));\n const value = cached?.value;\n if (cached && boundedValue(value, MAX_VALUE_SIZE, false) && sameSnapshots(snapshot, await inspect(runtimes))) {\n if (cached.bookmarks) advanceD1SessionBookmarks(cached.bookmarks);\n await regionalWrite(regional, options.regionalTtlMs, started, raw);\n return value as T;\n }\n } catch { /* Invalid cached values are read from the source. */ }\n return source();\n }\n if (!result.lockToken || result.pending) return source();\n const lockToken = result.lockToken;\n try {\n const tracked = await trackD1SessionSource(source);\n const value = tracked.value;\n try {\n if (value !== null && value !== undefined && boundedValue(value, MAX_VALUE_SIZE, false) && (options.cacheable?.(value) ?? true)) {\n const cachedValue = wrapD1SessionCacheValue(value, tracked.bookmarks);\n const text = JSON.stringify(encode(cachedValue));\n if (new TextEncoder().encode(text).byteLength <= MAX_VALUE_SIZE && sameSnapshots(snapshot, await inspect(runtimes))) {\n const written = await primary.store.write({ key, lockToken, snapshot: result.epochs, ttlMs: ttl, softTtlMs: ttl, value: text });\n if (regional && written.ok && sameSnapshots(snapshot, await inspect(runtimes))) await regionalWrite(regional, options.regionalTtlMs, started, cachedValue);\n }\n }\n } catch { /* The source result remains authoritative when caching fails. */ }\n return value;\n } finally {\n try { await primary.store.release({ key, lockToken }); } catch { /* The lock expires if the coordinator cannot be reached. */ }\n }\n}\n"]}
|