@dee-wan/cache 1.1.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +31 -1
- package/dist/{chunk-MOJBHU3S.js → chunk-LAXBP5DQ.js} +72 -173
- package/dist/chunk-LAXBP5DQ.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-HGAUU4EU.js → chunk-O3KHMFHX.js} +51 -14
- package/dist/chunk-O3KHMFHX.js.map +1 -0
- package/dist/chunk-WJNCFFF3.js +637 -0
- package/dist/chunk-WJNCFFF3.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 +3 -3
- 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 +10 -8
- 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 +7 -2
- package/dist/{types-D-Gd11to.d.ts → types-CtErcz2a.d.ts} +13 -1
- package/package.json +1 -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","result"],"mappings":"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","file":"chunk-WJNCFFF3.js","sourcesContent":["import { CacheUnavailableError } from '../core/extension';\nimport type { CacheStore } from '../core/types';\nimport type { D1WritePolicy } from './profile';\nimport type { D1Database, D1DatabaseSession, D1PreparedStatement, D1Result } from '@cloudflare/workers-types';\nimport { boundedD1Store } from './bounded-store';\n\nconst fence = ['g'];\n\nconst lexemes = /\\s+|--[^\\n]*|\\/\\*[\\s\\S]*?(?:\\*\\/|$)|'(?:[^']|'')*'?|`(?:[^`]|``)*`?|\"(?:[^\"]|\"\")*\"?|\\[[^\\]]*\\]?|[A-Za-z_][A-Za-z0-9_$]*|[\\s\\S]/g;\nconst safePragmas = new Set(['database_list', 'table_list', 'table_info', 'table_xinfo', 'index_list', 'index_info', 'index_xinfo', 'foreign_key_list']);\n\nfunction operationOf(tokens: string[], start = 0): string | undefined {\n const word = (index: number) => tokens[index]?.toLowerCase();\n if (word(start) !== 'with') return word(start);\n let index = start + 1;\n if (word(index) === 'recursive') index++;\n const group = (): boolean => {\n if (tokens[index] !== '(') return false;\n let depth = 0;\n do {\n if (tokens[index] === '(') depth++;\n if (tokens[index] === ')') depth--;\n index++;\n } while (index < tokens.length && depth > 0);\n return depth === 0;\n };\n while (index < tokens.length) {\n if (!/^(?:[A-Za-z_][A-Za-z0-9_$]*|`[^`]+`|\"[^\"]+\"|\\[[^\\]]+\\])$/.test(tokens[index] ?? '')) return undefined;\n index++;\n if (tokens[index] === '(' && !group()) return undefined;\n if (word(index++) !== 'as') return undefined;\n if (word(index) === 'not') index++;\n if (word(index) === 'materialized') index++;\n if (tokens[index] !== '(' || !['select', 'with'].includes(word(index + 1) ?? '')) return undefined;\n if (!group()) return undefined;\n if (tokens[index] !== ',') return word(index);\n index++;\n }\n return undefined;\n}\n\nexport function isReadonly(sql: string): boolean {\n const tokens = [...sql.matchAll(lexemes)].map(([token = '']) => token).filter((token) => !/^(?:\\s|--|\\/\\*)/.test(token));\n if (tokens.at(-1) === ';') tokens.pop();\n const first = tokens[0]?.toLowerCase();\n const pragmaName = first === 'pragma' ? (tokens[2] === '.' ? tokens[3] : tokens[1])?.toLowerCase() : undefined;\n const readonlyPragma = first === 'pragma' && pragmaName !== undefined && safePragmas.has(pragmaName) && !tokens.includes('=');\n return !tokens.includes(';') && (operationOf(tokens) === 'select' || readonlyPragma);\n}\n\nfunction needsWriteFence(sql: string, unrelatedWrites: ReadonlySet<string>): boolean {\n const tokens = [...sql.matchAll(lexemes)].map(([token = '']) => token).filter((token) => !/^(?:\\s|--|\\/\\*)/.test(token));\n if (tokens.at(-1) === ';') tokens.pop();\n if (tokens.includes(';')) return true;\n let index = 0;\n const word = () => tokens[index]?.toLowerCase();\n const operation = word();\n if (operation !== 'insert' && operation !== 'update' && operation !== 'delete') return true;\n index++;\n if ((operation === 'insert' || operation === 'update') && word() === 'or') {\n index++;\n if (!['rollback', 'abort', 'replace', 'fail', 'ignore'].includes(word() ?? '')) return true;\n index++;\n }\n if (operation === 'insert') { if (word() !== 'into') return true; index++; }\n if (operation === 'delete') { if (word() !== 'from') return true; index++; }\n const identifier = (token: string | undefined): string | null => {\n if (!token) return null;\n if (/^[A-Za-z_][A-Za-z0-9_$]*$/.test(token)) return token.toLowerCase();\n if (/^\"[A-Za-z_][A-Za-z0-9_$]*\"$/.test(token) || /^`[A-Za-z_][A-Za-z0-9_$]*`$/.test(token) || /^\\[[A-Za-z_][A-Za-z0-9_$]*\\]$/.test(token)) return token.slice(1, -1).toLowerCase();\n return null;\n };\n let target = identifier(tokens[index++]);\n if (tokens[index] === '.') {\n if (target !== 'main') return true;\n index++;\n target = identifier(tokens[index++]);\n }\n if (!target || !unrelatedWrites.has(target)) return true;\n if (operation === 'update' && word() !== 'set') return true;\n if (operation === 'delete' && !['where', 'returning'].includes(word() ?? '') && index !== tokens.length) return true;\n return false;\n}\n\nexport function fenceD1Writes(db: D1Database, options: { store: CacheStore; generation: string; policy: D1WritePolicy }): D1Database {\n const { generation, policy } = options;\n const store = boundedD1Store(options.store);\n const unrelatedWrites = new Set(policy.unfencedWriteTables.map((name) => name.toLowerCase()));\n if (!generation) throw new TypeError('cache generation is required');\n const statements = new WeakMap<D1PreparedStatement, { raw: D1PreparedStatement; fence: boolean }>();\n const withWrite = async <T>(operation: () => Promise<T>): Promise<T> => {\n const token = crypto.randomUUID();\n try {\n await store.beginWrite({ fences: fence, generation, leaseMs: 600000, token });\n } catch (error) {\n await store.endWrite({ fences: fence, token }).catch(() => undefined);\n throw new CacheUnavailableError(error);\n }\n try { return await operation(); }\n finally { await store.endWrite({ fences: fence, token }).catch(() => undefined); }\n };\n const wrapStatement = (raw: D1PreparedStatement, sql: string): D1PreparedStatement => {\n const requiresFence = !isReadonly(sql) && needsWriteFence(sql, unrelatedWrites);\n const execute = <T>(operation: () => Promise<T>): Promise<T> => requiresFence ? withWrite(operation) : operation();\n function rawRows<T = unknown[]>(rawOptions: { columnNames: true }): Promise<[string[], ...T[]]>;\n function rawRows<T = unknown[]>(rawOptions?: { columnNames?: false }): Promise<T[]>;\n function rawRows<T = unknown[]>(rawOptions?: { columnNames?: boolean }): Promise<T[] | [string[], ...T[]]> {\n return execute<T[] | [string[], ...T[]]>(() => rawOptions?.columnNames === true ? raw.raw<T>({ columnNames: true }) : raw.raw<T>(rawOptions?.columnNames === false ? { columnNames: false } : undefined));\n }\n const wrapped: D1PreparedStatement = {\n bind: (...next) => wrapStatement(raw.bind(...next), sql),\n first: <T = Record<string, unknown>>(column?: string): Promise<T | null> => execute(() => column === undefined ? raw.first<T>() : raw.first<T>(column)),\n all: <T = Record<string, unknown>>(): Promise<D1Result<T>> => execute(() => raw.all<T>()),\n run: <T = Record<string, unknown>>(): Promise<D1Result<T>> => execute(() => raw.run<T>()),\n raw: rawRows,\n };\n statements.set(wrapped, { raw, fence: requiresFence });\n return wrapped;\n };\n const batch = <T>(target: D1Database | D1DatabaseSession, items: D1PreparedStatement[]): Promise<D1Result<T>[]> => {\n const resolved = items.map((item) => statements.get(item));\n const raw = items.map((item, index) => resolved[index]?.raw ?? item);\n const operation = () => target.batch<T>(raw);\n return resolved.every((item) => item !== undefined && !item.fence) ? operation() : withWrite(operation);\n };\n return {\n prepare: (sql) => wrapStatement(db.prepare(sql), sql),\n batch: <T = unknown>(items: D1PreparedStatement[]) => batch<T>(db, items),\n exec: (sql) => isReadonly(sql) || !needsWriteFence(sql, unrelatedWrites) ? db.exec(sql) : withWrite(() => db.exec(sql)),\n dump: () => db.dump(),\n withSession: (constraint) => {\n const session = db.withSession(constraint);\n return {\n prepare: (sql) => wrapStatement(session.prepare(sql), sql),\n batch: <T = unknown>(items: D1PreparedStatement[]) => batch<T>(session, items),\n getBookmark: () => session.getBookmark(),\n };\n },\n };\n}\n","import type { D1CacheProfile } from './profile';\n\ntype FreshnessPolicy = Pick<NonNullable<D1CacheProfile['readResponseLease']>, 'freshnessCookie' | 'freshnessHeader' | 'ignoreRequestCacheControl'>;\nexport const validFreshnessHeader = (name: string): boolean => /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/.test(name);\nexport const hasFreshnessCookie = (request: Request, name: string): boolean => (request.headers.get('cookie') ?? '').split(';').some((part) => part.split('=', 1)[0]?.trim() === name);\nexport const hasFreshnessGeneration = (request: Request, name: string): boolean => {\n const matches = (request.headers.get('cookie') ?? '').split(';').map((part) => part.trim()).filter((part) => part.split('=', 1)[0]?.trim() === name);\n const value = matches[0]?.slice(matches[0].indexOf('=') + 1).trim() ?? '';\n return matches.length === 1 && /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value);\n};\nexport const hasCacheBypass = (request: Request): boolean => (request.headers.get('cache-control') ?? '').split(',').some((part) => /^\\s*(?:no-cache|no-store)(?:\\s*=|\\s*$)/i.test(part));\n\nexport function regionalD1MetadataTtl(request: Request, policy: FreshnessPolicy): 0 | 5000 {\n if (request.method !== 'GET' || hasFreshnessCookie(request, policy.freshnessCookie)) return 0;\n if (policy.freshnessHeader !== undefined && (!validFreshnessHeader(policy.freshnessHeader) || request.headers.has(policy.freshnessHeader))) return 0;\n if (!policy.ignoreRequestCacheControl && hasCacheBypass(request)) return 0;\n return 5000;\n}\n","import { AsyncLocalStorage } from 'node:async_hooks';\nimport type { D1Database, D1DatabaseSession, D1PreparedStatement, D1Result } from '@cloudflare/workers-types';\nimport { isD1BindingName, type D1CacheProfile } from './profile';\nimport type { CacheSessionHooks } from '../core/types';\nimport { isReadonly } from './adapter';\nimport { hasCacheBypass } from './request-freshness';\nimport { D1_BOOKMARK_HEADER, mergeD1Bookmarks, parseD1Bookmarks, decodeD1Bookmarks, serializeD1Bookmarks, type D1Bookmarks } from './bookmarks';\n\ntype SessionContext = { input: D1Bookmarks; sessions: Map<string, D1DatabaseSession>; bookmarks: D1Bookmarks; primary: boolean; primaryIds: Set<string>; allowedIds: Set<string>; operations: Map<string, Promise<void>>; closed: boolean };\ntype DatabaseInfo = { id: string; db: D1Database; primary: boolean };\nconst storage = new AsyncLocalStorage<SessionContext | undefined>();\nconst tracking = new AsyncLocalStorage<D1Bookmarks>();\nconst primarySource = new AsyncLocalStorage<Set<string>>();\ntype AdmissionGroup = { token: object | undefined; context: SessionContext | undefined; pending: number; waiting: Array<() => void>; tracker: D1Bookmarks; trackers: Map<D1Bookmarks, number>; primary?: Set<string>; ambiguous: boolean };\ntype AdmissionGate = { active?: AdmissionGroup; waiting: AdmissionGroup[] };\nconst admissionScope = new AsyncLocalStorage<{ group: AdmissionGroup; tracker?: D1Bookmarks }>();\nconst prismaScope = new AsyncLocalStorage<object>();\nconst trackerGroups = new WeakMap<D1Bookmarks, AdmissionGroup>();\nconst ambiguousTrackers = new WeakSet<D1Bookmarks>();\nconst infos = new WeakMap<object, DatabaseInfo>();\nconst facades = new WeakMap<object, Map<string, D1Database>>();\nconst queues = new Map<string, AdmissionGate>();\nconst admitted = new Map<string, AdmissionGroup>();\nconst prismaFacades = new WeakMap<object, D1Database>();\n\nexport interface D1ReadSessionOptions extends Pick<D1CacheProfile, 'bindingNames' | 'bindingPrefixes'> {\n databaseIdsEnv: string;\n primaryBindings?: readonly string[];\n freshnessHeader?: string;\n ignoreRequestCacheControl?: boolean;\n}\n\nexport function registerD1SessionAlias(alias: object, original: object): void {\n const info = infos.get(original);\n if (info) infos.set(alias, info);\n}\n\nexport function runPrimaryD1SessionSource<T>(operation: () => Promise<T>): Promise<T> {\n return storage.getStore() ? primarySource.run(new Set(), operation) : operation();\n}\n\nexport function runD1PrismaScope<T>(operation: () => Promise<T>): Promise<T> {\n return prismaScope.run({}, operation);\n}\n\nfunction addTracker(group: AdmissionGroup, tracker: D1Bookmarks | undefined): void {\n if (tracker) {\n group.trackers.set(tracker, (group.trackers.get(tracker) ?? 0) + 1);\n if (group.ambiguous) ambiguousTrackers.add(tracker);\n }\n}\nfunction removeTracker(group: AdmissionGroup, tracker: D1Bookmarks | undefined): void {\n if (!tracker) return;\n const count = group.trackers.get(tracker) ?? 0;\n if (count <= 1) group.trackers.delete(tracker);\n else group.trackers.set(tracker, count - 1);\n}\n\nexport async function runD1SessionOperation<T>(database: object, operation: () => Promise<T>): Promise<T> {\n const info = infos.get(database);\n const current = storage.getStore();\n const context = current && !current.closed ? current : undefined;\n if (!info) return operation();\n const token = context ?? prismaScope.getStore();\n let gate = queues.get(info.id);\n if (!gate) { gate = { waiting:[] }; queues.set(info.id, gate); }\n const scope = gate;\n const active = scope.active;\n const tail = scope.waiting.at(-1);\n const group: AdmissionGroup = token && tail?.token === token ? tail : token && !tail && active?.token === token ? active : { token, context, pending:0, waiting:[], tracker:{}, trackers:new Map(), ambiguous:false };\n const startGroup = (next: AdmissionGroup) => {\n scope.active = next;\n admitted.set(info.id, next);\n trackerGroups.set(next.tracker, next);\n for (const start of next.waiting.splice(0)) start();\n };\n let timer: ReturnType<typeof setTimeout> | undefined;\n try {\n await new Promise<void>((resolve, reject) => {\n let cancelled = false;\n const start = () => {\n if (cancelled) return;\n if (group.pending > 0) {\n group.ambiguous = true;\n for (const tracker of group.trackers.keys()) ambiguousTrackers.add(tracker);\n }\n group.pending++;\n resolve();\n };\n if (group === active) start();\n else {\n group.waiting.push(start);\n if (group !== tail) {\n if (!active) startGroup(group);\n else scope.waiting.push(group);\n }\n }\n if (!group.pending) timer = setTimeout(() => {\n cancelled = true;\n const index = group.waiting.indexOf(start);\n if (index >= 0) group.waiting.splice(index, 1);\n if (!group.pending && !group.waiting.length) {\n const position = scope.waiting.indexOf(group);\n if (position >= 0) scope.waiting.splice(position, 1);\n }\n reject(new Error('D1 Prisma admission timed out'));\n }, 30_000);\n });\n } finally { if (timer !== undefined) clearTimeout(timer); }\n const tracker = tracking.getStore();\n const primary = primarySource.getStore();\n if (primary && !group.primary) group.primary = primary;\n addTracker(group, tracker);\n try { return await admissionScope.run({ group, tracker }, operation); }\n finally {\n removeTracker(group, tracker);\n group.pending--;\n if (!group.pending) {\n const next = scope.waiting.shift();\n if (next) startGroup(next);\n else { scope.active = undefined; admitted.delete(info.id); queues.delete(info.id); }\n }\n }\n}\n\nexport function prismaD1SessionDatabase(database: D1Database): D1Database {\n const existing = prismaFacades.get(database);\n if (existing) return existing;\n const info = infos.get(database);\n if (!info) return database;\n const invoke = <T>(operation: () => T): T => {\n const admission = admitted.get(info.id);\n return storage.run(admission?.context, () => admission ? tracking.run(admission.tracker, () => admission.primary ? primarySource.run(admission.primary, operation) : operation()) : operation());\n };\n const statements = new WeakMap<D1PreparedStatement, D1PreparedStatement>();\n const wrapStatement = (statement: D1PreparedStatement): D1PreparedStatement => {\n function raw<T = unknown[]>(options: { columnNames: true }): Promise<[string[], ...T[]]>;\n function raw<T = unknown[]>(options?: { columnNames?: false }): Promise<T[]>;\n function raw<T = unknown[]>(options?: { columnNames?: boolean }): Promise<T[] | [string[], ...T[]]> {\n return invoke(() => options?.columnNames ? statement.raw<T>({ columnNames:true }) : statement.raw<T>());\n }\n const wrapped: D1PreparedStatement = {\n bind: (...values) => invoke(() => wrapStatement(statement.bind(...values))),\n first: <T = Record<string, unknown>>(column?: string) => invoke(() => column === undefined ? statement.first<T>() : statement.first<T>(column)),\n all: <T = Record<string, unknown>>() => invoke(() => statement.all<T>()),\n run: <T = Record<string, unknown>>() => invoke(() => statement.run<T>()),\n raw,\n };\n statements.set(wrapped, statement);\n return wrapped;\n };\n const wrapSession = (session: D1DatabaseSession): D1DatabaseSession => ({\n prepare: (sql) => invoke(() => wrapStatement(session.prepare(sql))),\n batch: <T = unknown>(items: D1PreparedStatement[]) => invoke(() => session.batch<T>(items.map((item) => statements.get(item) ?? item))),\n getBookmark: () => invoke(() => session.getBookmark()),\n });\n const wrapped: D1Database = {\n prepare: (sql) => invoke(() => wrapStatement(database.prepare(sql))),\n batch: <T = unknown>(items: D1PreparedStatement[]) => invoke(() => database.batch<T>(items.map((item) => statements.get(item) ?? item))),\n withSession: (constraint) => invoke(() => wrapSession(database.withSession(constraint))),\n exec: (sql) => invoke(() => database.exec(sql)),\n dump: () => invoke(() => database.dump()),\n };\n infos.set(wrapped, info);\n prismaFacades.set(database, wrapped);\n return wrapped;\n}\n\nfunction contextFor(): SessionContext | undefined {\n const context = storage.getStore();\n return context && !context.closed ? context : undefined;\n}\n\nfunction sessionFor(info: DatabaseInfo, context: SessionContext, write: boolean): D1DatabaseSession {\n let session = context.sessions.get(info.id);\n const primary = primarySource.getStore();\n const reanchor = !!primary && !primary.has(info.id);\n if (reanchor) { primary.add(info.id); session = undefined; }\n if (!session) {\n session = info.db.withSession(reanchor || write || info.primary || context.primary || context.primaryIds.has(info.id) ? 'first-primary' : context.input[info.id] ?? 'first-unconstrained');\n context.sessions.set(info.id, session);\n }\n return session;\n}\n\nfunction capture(info: DatabaseInfo, context: SessionContext, session: D1DatabaseSession): void {\n const bookmark = session.getBookmark();\n if (bookmark && !context.closed) {\n const combined = { ...context.input };\n if (!mergeD1Bookmarks(combined, context.bookmarks) || !mergeD1Bookmarks(combined, { [info.id]:bookmark })) throw new RangeError('D1 bookmark capacity exceeded');\n mergeD1Bookmarks(context.bookmarks, { [info.id]: bookmark });\n const tracker = tracking.getStore();\n if (tracker) {\n mergeD1Bookmarks(tracker, { [info.id]: bookmark });\n const group = trackerGroups.get(tracker);\n if (group) for (const target of group.trackers.keys()) mergeD1Bookmarks(target, { [info.id]:bookmark });\n }\n }\n}\n\nexport function runIsolatedD1Session<T>(request: Request, operation: () => Promise<T>): Promise<T> {\n const parent = storage.getStore();\n if (!parent) return operation();\n const input = Object.fromEntries(Object.entries(parseD1Bookmarks(request.headers.get(D1_BOOKMARK_HEADER))).filter(([id]) => parent.allowedIds.has(id)));\n const context: SessionContext = { input, sessions:new Map(), bookmarks:{}, primaryIds:new Set(), allowedIds:parent.allowedIds, operations:new Map(), primary:false, closed:false };\n return storage.run(context, () => tracking.run({}, async () => {\n try { return await operation(); }\n finally { context.closed = true; }\n }));\n}\n\nexport function d1SessionWarmupRequest(request: Request, response: Response): Request {\n const bookmarks = responseD1SessionBookmarks(response.headers, tracking.getStore() ?? d1SessionBookmarks());\n if (!bookmarks) return request;\n const headers = new Headers(request.headers);\n const encoded = serializeD1Bookmarks(bookmarks);\n if (encoded) headers.set(D1_BOOKMARK_HEADER, encoded);\n return new Request(request, { headers });\n}\n\nexport function d1SessionBookmarkFloor(): D1Bookmarks | undefined {\n const context = storage.getStore();\n return context && !context.closed ? { ...context.input } : undefined;\n}\nexport function d1SessionBookmarks(): D1Bookmarks | undefined {\n const context = storage.getStore();\n return context && !context.closed ? { ...context.bookmarks } : undefined;\n}\nexport function varyD1Bookmarks(headers: Headers): void {\n const vary = headers.get('vary');\n const names = vary ? vary.split(',').map((name) => name.trim()).filter(Boolean) : [];\n if (!names.some((name) => name === '*' || name.toLowerCase() === D1_BOOKMARK_HEADER.toLowerCase())) headers.set('vary', [...names, D1_BOOKMARK_HEADER].join(', '));\n}\nexport function responseD1SessionBookmarks(headers: Headers, source?: D1Bookmarks): D1Bookmarks | undefined {\n const context = storage.getStore();\n if (!context || context.closed) return undefined;\n const result = { ...context.input };\n const upstream = decodeD1Bookmarks(headers.get(D1_BOOKMARK_HEADER));\n if (upstream && !mergeD1Bookmarks(result, Object.fromEntries(Object.entries(upstream).filter(([id]) => context.allowedIds.has(id))))) throw new RangeError('D1 bookmark capacity exceeded');\n if (source && !mergeD1Bookmarks(result, source)) throw new RangeError('D1 bookmark capacity exceeded');\n return result;\n}\nexport function d1SessionResponseBookmarks(): D1Bookmarks | undefined {\n const context = storage.getStore();\n if (!context || context.closed) return undefined;\n const result = { ...context.input };\n mergeD1Bookmarks(result, tracking.getStore() ?? context.bookmarks);\n return result;\n}\nexport function advanceD1SessionBookmarks(bookmarks: D1Bookmarks): void {\n const context = storage.getStore();\n if (context && !context.closed) {\n const filtered = Object.fromEntries(Object.entries(bookmarks).filter(([id]) => context.allowedIds.has(id)));\n const combined = { ...context.input };\n if (!mergeD1Bookmarks(combined, context.bookmarks) || !mergeD1Bookmarks(combined, filtered)) throw new RangeError('D1 bookmark capacity exceeded');\n mergeD1Bookmarks(context.bookmarks, filtered);\n const tracker = tracking.getStore();\n if (tracker) mergeD1Bookmarks(tracker, filtered);\n }\n}\n\nexport async function trackD1SessionSource<T>(operation: () => Promise<T>): Promise<{ value: T; bookmarks?: D1Bookmarks }> {\n const context = storage.getStore();\n if (!context || context.closed) return { value:await operation() };\n const parent = tracking.getStore();\n const tracker: D1Bookmarks = {};\n const admission = admissionScope.getStore();\n const previous = admission?.tracker;\n if (admission) { removeTracker(admission.group, previous); admission.tracker = tracker; addTracker(admission.group, tracker); }\n try {\n const value = await tracking.run(tracker, operation);\n if (parent) mergeD1Bookmarks(parent, tracker);\n return { value, bookmarks:tracker };\n }\n finally { if (admission) { removeTracker(admission.group, tracker); admission.tracker = previous; addTracker(admission.group, previous); } }\n}\n\nasync function serialSession<T>(context: SessionContext, id: string, operation: () => Promise<T>): Promise<T> {\n const previous = context.operations.get(id) ?? Promise.resolve();\n let release!: () => void;\n const next = new Promise<void>((resolve) => { release = resolve; });\n const tail = previous.then(() => next);\n context.operations.set(id, tail);\n await previous;\n try { return await operation(); }\n finally { release(); if (context.operations.get(id) === tail) context.operations.delete(id); }\n}\n\nexport function wrapD1SessionCacheValue(value: unknown, source?: D1Bookmarks): unknown {\n const bookmarks = source ?? tracking.getStore() ?? d1SessionBookmarks();\n if (bookmarks && (ambiguousTrackers.has(bookmarks) || admissionScope.getStore()?.group.ambiguous)) return { d1SessionCache:0 };\n return bookmarks ? { d1SessionCache: 1, bookmarks, value } : value;\n}\n\nexport function unwrapD1SessionCacheValue(value: unknown, databaseIds: readonly string[]): { value: unknown; bookmarks?: D1Bookmarks } | null {\n const floor = d1SessionBookmarkFloor();\n if (!floor) return { value };\n if (!value || typeof value !== 'object' || Reflect.get(value, 'd1SessionCache') !== 1 || !Reflect.has(value, 'value')) return null;\n const raw: unknown = Reflect.get(value, 'bookmarks');\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return null;\n const serialized = JSON.stringify(raw);\n const bookmarks = parseD1Bookmarks(serialized);\n if (Object.keys(bookmarks).length !== Object.keys(raw).length) return null;\n if (databaseIds.some((id) => floor[id] !== undefined && (!bookmarks[id] || bookmarks[id] < floor[id]))) return null;\n return { value: Reflect.get(value, 'value'), bookmarks };\n}\n\nexport function d1SessionCacheHooks(database: object): CacheSessionHooks {\n return {\n key: () => d1SessionBookmarkFloor() ? 'd1-session-v1' : null,\n read(value) {\n const info = infos.get(database);\n if (d1SessionBookmarkFloor() && !info) return null;\n const cached = unwrapD1SessionCacheValue(value, info ? [info.id] : []);\n if (d1SessionBookmarkFloor() && info && !cached?.bookmarks?.[info.id]) return null;\n if (cached?.bookmarks) advanceD1SessionBookmarks(cached.bookmarks);\n return cached;\n },\n background(operation) {\n const bookmarks = d1SessionResponseBookmarks();\n if (!bookmarks) return operation();\n const encoded = serializeD1Bookmarks(bookmarks);\n const request = new Request('https://d1-session.invalid/', { headers:encoded ? { [D1_BOOKMARK_HEADER]:encoded } : {} });\n return runIsolatedD1Session(request, operation);\n },\n async fill(load) {\n const tracked = await trackD1SessionSource(() => runPrimaryD1SessionSource(load));\n const active = d1SessionBookmarkFloor();\n const info = infos.get(database);\n const cached = active && (!info || !tracked.bookmarks?.[info.id]) ? { d1SessionCache:0 } : wrapD1SessionCacheValue(tracked.value, tracked.bookmarks);\n return { value:tracked.value, cached };\n },\n };\n}\n\nfunction facade(info: DatabaseInfo): D1Database {\n type Statement = { sql: string; values: unknown[] };\n const statements = new WeakMap<D1PreparedStatement, Statement>();\n const prepare = (sql: string, values: unknown[] = []): D1PreparedStatement => {\n const execute = async <T>(action: (statement: D1PreparedStatement) => Promise<T>): Promise<T> => {\n const context = contextFor();\n if (!context) return action(info.db.prepare(sql).bind(...values));\n return serialSession(context, info.id, async () => {\n const session = sessionFor(info, context, !isReadonly(sql));\n const result = await action(session.prepare(sql).bind(...values));\n capture(info, context, session);\n return result;\n });\n };\n function raw<T = unknown[]>(options: { columnNames: true }): Promise<[string[], ...T[]]>;\n function raw<T = unknown[]>(options?: { columnNames?: false }): Promise<T[]>;\n function raw<T = unknown[]>(options?: { columnNames?: boolean }): Promise<T[] | [string[], ...T[]]> {\n return execute<T[] | [string[], ...T[]]>((statement) => options?.columnNames ? statement.raw<T>({ columnNames:true }) : statement.raw<T>());\n }\n const result: D1PreparedStatement = {\n bind: (...next) => prepare(sql, next),\n first: <T = Record<string, unknown>>(column?: string) => execute((statement) => column === undefined ? statement.first<T>() : statement.first<T>(column)),\n run: <T = Record<string, unknown>>() => execute((statement) => statement.run<T>()),\n all: <T = Record<string, unknown>>() => execute((statement) => statement.all<T>()),\n raw,\n };\n statements.set(result, { sql, values });\n return result;\n };\n const batch = async <T = unknown>(items: D1PreparedStatement[]): Promise<D1Result<T>[]> => {\n const definitions = items.map((item) => statements.get(item));\n const context = contextFor();\n if (!context) return info.db.batch<T>(items.map((item, index) => {\n const definition = definitions[index];\n return definition ? info.db.prepare(definition.sql).bind(...definition.values) : item;\n }));\n if (definitions.some((item) => !item)) throw new TypeError('D1 batch statements must use the same database facade');\n const execute = async (target: D1Database | D1DatabaseSession, session?: D1DatabaseSession) => {\n const raw = definitions.map((item) => {\n if (!item) throw new TypeError('Invalid D1 statement');\n return target.prepare(item.sql).bind(...item.values);\n });\n const result = await target.batch<T>(raw);\n if (session && context) capture(info, context, session);\n return result;\n };\n return serialSession(context, info.id, () => {\n const session = sessionFor(info, context, definitions.some((item) => item && !isReadonly(item.sql)));\n return execute(session, session);\n });\n };\n const database: D1Database = {\n prepare,\n batch,\n exec: async (sql) => {\n const context = contextFor();\n if (!context) return info.db.exec(sql);\n return serialSession(context, info.id, async () => {\n const result = await info.db.exec(sql);\n const session = info.db.withSession('first-primary');\n await session.prepare('SELECT 1').first();\n context.sessions.set(info.id, session);\n capture(info, context, session);\n return result;\n });\n },\n dump: () => info.db.dump(),\n withSession: (constraint) => {\n const context = contextFor();\n if (!context) return info.db.withSession(constraint);\n if (constraint && constraint !== 'first-unconstrained' && constraint !== context.input[info.id]) {\n if (constraint === 'first-primary' && (!context.sessions.has(info.id) || context.primary || info.primary || context.primaryIds.has(info.id))) { context.primaryIds.add(info.id); return { prepare, batch, getBookmark: () => context.sessions.get(info.id)?.getBookmark() ?? null }; }\n throw new Error('Explicit D1 session constraint conflicts with request session');\n }\n return { prepare, batch, getBookmark: () => context.sessions.get(info.id)?.getBookmark() ?? null };\n },\n };\n infos.set(database, info);\n return database;\n}\n\nexport function sessionD1Env<Env extends object>(env: Env, options: D1ReadSessionOptions): Env {\n const raw: unknown = Reflect.get(env, options.databaseIdsEnv);\n if (raw === undefined) return env;\n let parsed: unknown;\n try { parsed = typeof raw === 'string' ? JSON.parse(raw) : null; } catch { parsed = null; }\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) throw new Error(`Invalid ${options.databaseIdsEnv}`);\n const ids = Object.fromEntries(Object.entries(parsed).map(([name, id]) => {\n if (!isD1BindingName(name, { ...options, envPrefix:'', coordinatorNamePrefix:'', coordinatorClass:'', readModels:[], unfencedWriteTables:[] }) || typeof id !== 'string' || !/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(id)) throw new Error('Invalid D1 database identity');\n return [name, id.toLowerCase()];\n }));\n const primaryIds = new Set((options.primaryBindings ?? []).map((name) => ids[name]).filter((id): id is string => typeof id === 'string'));\n const scoped = { ...env };\n for (const name of options.bindingNames) if (!Reflect.has(env, name)) throw new Error(`Missing D1 binding: ${name}`);\n for (const [name, db] of Object.entries(env)) {\n if (options.bindingPrefixes.some((prefix) => name.startsWith(prefix)) && !isD1BindingName(name, { ...options, envPrefix:'', coordinatorNamePrefix:'', coordinatorClass:'', readModels:[], unfencedWriteTables:[] })) throw new Error(`Invalid D1 binding: ${name}`);\n if (!isD1BindingName(name, { ...options, envPrefix:'', coordinatorNamePrefix:'', coordinatorClass:'', readModels:[], unfencedWriteTables:[] })) continue;\n const id: string | undefined = ids[name];\n if (!id || !db || typeof db !== 'object' || typeof Reflect.get(db, 'withSession') !== 'function') throw new Error(`Missing D1 identity or binding: ${name}`);\n const primary = primaryIds.has(id);\n let variants = facades.get(db);\n if (!variants) { variants = new Map(); facades.set(db, variants); }\n const key = `${id}:${primary}`;\n let wrapped = variants.get(key);\n if (!wrapped) { wrapped = facade({ id, db: db as D1Database, primary }); variants.set(key, wrapped); }\n Reflect.set(scoped, name, wrapped);\n }\n return scoped;\n}\n\nexport function wrapD1ReadSessionHandler<Env extends object, Context>(handler: (request: Request, env: Env, context: Context) => Promise<Response>, options: D1ReadSessionOptions): (request: Request, env: Env, context: Context) => Promise<Response> {\n return async (request, env, context) => {\n if (request.headers.get('upgrade')?.toLowerCase() === 'websocket') return handler(request, env, context);\n if (Reflect.get(env, options.databaseIdsEnv) === undefined) return handler(request, env, context);\n const scoped = sessionD1Env(env, options);\n const decoded = decodeD1Bookmarks(request.headers.get(D1_BOOKMARK_HEADER));\n if (!decoded) return new Response('Invalid D1 bookmarks', { status:400 });\n const configured = new Set(Object.entries(scoped).flatMap(([name, value]) => isD1BindingName(name, { ...options, envPrefix:'', coordinatorNamePrefix:'', coordinatorClass:'', readModels:[], unfencedWriteTables:[] }) && value && typeof value === 'object' ? [infos.get(value)?.id].filter((id): id is string => !!id) : []));\n const input = Object.fromEntries(Object.entries(decoded).filter(([id]) => configured.has(id)));\n const sessionContext: SessionContext = { input, sessions:new Map(), bookmarks:{}, primaryIds:new Set(), allowedIds:configured, operations:new Map(), primary: !['GET', 'HEAD', 'OPTIONS'].includes(request.method.toUpperCase()) || (options.ignoreRequestCacheControl !== true && hasCacheBypass(request)) || (options.freshnessHeader !== undefined && request.headers.has(options.freshnessHeader)), closed:false };\n return storage.run(sessionContext, async () => {\n try {\n const tracked = await trackD1SessionSource(() => handler(request, scoped, context));\n const response = tracked.value;\n if (response.status === 101) return response;\n const headers = new Headers(response.headers);\n varyD1Bookmarks(headers);\n const responseBookmarks = responseD1SessionBookmarks(headers, tracked.bookmarks) ?? {};\n sessionContext.closed = true;\n const encoded = serializeD1Bookmarks(responseBookmarks);\n if (encoded && encoded !== '{}') headers.set(D1_BOOKMARK_HEADER, encoded);\n else headers.delete(D1_BOOKMARK_HEADER);\n return new Response(response.body, { status:response.status, statusText:response.statusText, headers });\n } finally { sessionContext.closed = true; }\n });\n };\n}\n"]}
|
|
@@ -1,54 +1,3 @@
|
|
|
1
|
-
// src/cloudflare/retry.ts
|
|
2
|
-
var BASE_BACKOFF_MS = 50;
|
|
3
|
-
var isRetryable = (error) => !!error && typeof error === "object" && Reflect.get(error, "retryable") === true && Reflect.get(error, "overloaded") !== true;
|
|
4
|
-
async function retryTransient(call, attempts, sleep) {
|
|
5
|
-
for (let attempt = 0; ; attempt++) {
|
|
6
|
-
try {
|
|
7
|
-
return await call();
|
|
8
|
-
} catch (error) {
|
|
9
|
-
if (attempt + 1 >= attempts || !isRetryable(error)) throw error;
|
|
10
|
-
await sleep(BASE_BACKOFF_MS * Math.random() * 2 ** attempt);
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
// src/cloudflare/store-options.ts
|
|
16
|
-
var WRITE_PATH_ATTEMPTS = 3;
|
|
17
|
-
var MAX_COORDINATOR_NAME_LENGTH = 256;
|
|
18
|
-
var LOCATION_HINTS = ["wnam", "enam", "sam", "weur", "eeur", "apac", "oc", "afr", "me"];
|
|
19
|
-
var isLocationHint = (value) => LOCATION_HINTS.some((hint) => hint === value);
|
|
20
|
-
function resolveStoreOptions(options) {
|
|
21
|
-
const { attempts = WRITE_PATH_ATTEMPTS, locationHint, name } = options;
|
|
22
|
-
const problems = [
|
|
23
|
-
!(typeof name === "string" && name.length > 0 && name.length <= MAX_COORDINATOR_NAME_LENGTH) && `name must be 1..${MAX_COORDINATOR_NAME_LENGTH} characters and identify one D1 database`,
|
|
24
|
-
!(Number.isInteger(attempts) && attempts >= 1 && attempts <= 10) && "attempts must be an integer in 1..10",
|
|
25
|
-
locationHint !== void 0 && !isLocationHint(locationHint) && `locationHint must be one of ${LOCATION_HINTS.join(", ")}`
|
|
26
|
-
].filter((problem) => typeof problem === "string");
|
|
27
|
-
if (problems.length > 0) throw new TypeError(`cache store: ${problems.join("; ")}`);
|
|
28
|
-
return {
|
|
29
|
-
attempts,
|
|
30
|
-
name,
|
|
31
|
-
sleep: options.sleep ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms))),
|
|
32
|
-
...locationHint ? { locationHint } : {}
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
// src/cloudflare/store.ts
|
|
37
|
-
function createDurableObjectStore(namespace, options) {
|
|
38
|
-
const { attempts, locationHint, name, sleep } = resolveStoreOptions(options);
|
|
39
|
-
const stub = () => namespace.get(namespace.idFromName(name), locationHint ? { locationHint } : void 0);
|
|
40
|
-
const withRetry = (call) => retryTransient(() => call(stub()), attempts, sleep);
|
|
41
|
-
return {
|
|
42
|
-
inspectFences: async (request) => stub().inspectFences(request),
|
|
43
|
-
beginWrite: (request) => withRetry(async (coordinator) => void await coordinator.beginWrite(request)),
|
|
44
|
-
endWrite: (request) => withRetry(async (coordinator) => void await coordinator.endWrite(request)),
|
|
45
|
-
invalidate: (fences) => withRetry(async (coordinator) => void await coordinator.invalidate(fences)),
|
|
46
|
-
read: async (request) => stub().read(request),
|
|
47
|
-
release: async (request) => void await stub().release(request),
|
|
48
|
-
write: async (request) => stub().write(request)
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
|
|
52
1
|
// src/d1/deadline.ts
|
|
53
2
|
var COORDINATOR_TIMEOUT_MS = 2e3;
|
|
54
3
|
async function withinCoordinatorDeadline(work) {
|
|
@@ -128,6 +77,6 @@ function boundedD1Store(store) {
|
|
|
128
77
|
return bounded;
|
|
129
78
|
}
|
|
130
79
|
|
|
131
|
-
export { boundedD1Store,
|
|
132
|
-
//# sourceMappingURL=chunk-
|
|
133
|
-
//# sourceMappingURL=chunk-
|
|
80
|
+
export { boundedD1Store, withinCoordinatorDeadline };
|
|
81
|
+
//# sourceMappingURL=chunk-WKZ7TKGM.js.map
|
|
82
|
+
//# sourceMappingURL=chunk-WKZ7TKGM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/d1/deadline.ts","../src/d1/bounded-store.ts"],"names":[],"mappings":"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","file":"chunk-WKZ7TKGM.js","sourcesContent":["const COORDINATOR_TIMEOUT_MS = 2_000;\n\nexport async function withinCoordinatorDeadline<T>(work: Promise<T>): Promise<T> {\n let timer: ReturnType<typeof setTimeout> | undefined;\n try {\n return await Promise.race([work, new Promise<never>((_, reject) => { timer = setTimeout(() => reject(new Error('cache coordinator timeout')), COORDINATOR_TIMEOUT_MS); })]);\n } finally { if (timer !== undefined) clearTimeout(timer); }\n}\n","import type { CacheStore, EndWriteRequest } from '../core/types';\nimport { withinCoordinatorDeadline } from './deadline';\n\nconst boundedStores = new WeakMap<CacheStore, CacheStore>();\n\nexport function boundedD1Store(store: CacheStore): CacheStore {\n const existing = boundedStores.get(store);\n if (existing) return existing;\n const failedBegins = new Set<string>();\n const inspectFences = store.inspectFences;\n const endWrite = async (request: EndWriteRequest): Promise<void> => {\n let active = true;\n try {\n await withinCoordinatorDeadline((async () => {\n for (let attempt = 0; ; attempt++) {\n try { await store.endWrite(request); return; }\n catch (error) { if (!active || attempt === 1) throw error; }\n }\n })());\n } finally { active = false; }\n };\n const bounded: CacheStore = {\n ...store,\n ...(inspectFences ? { inspectFences: (request: Parameters<typeof inspectFences>[0]) => withinCoordinatorDeadline(Promise.resolve().then(() => inspectFences.call(store, request))) } : {}),\n async read(request) {\n const pending = Promise.resolve().then(() => store.read(request));\n try { return await withinCoordinatorDeadline(pending); }\n catch (error) {\n void pending.then((result) => {\n const token = result.kind === 'miss' ? result.lockToken : result.refreshToken;\n if (token) return bounded.release({ key: request.key, lockToken: token });\n return undefined;\n }).catch(() => undefined);\n throw error;\n }\n },\n write: (request) => withinCoordinatorDeadline(Promise.resolve().then(() => store.write(request))),\n release: (request) => withinCoordinatorDeadline(Promise.resolve().then(() => store.release(request))),\n async beginWrite(request) {\n const begin = Promise.resolve().then(() => store.beginWrite(request));\n try { await withinCoordinatorDeadline(begin); }\n catch (error) {\n failedBegins.add(request.token);\n void begin.then(\n () => endWrite({ fences: request.fences, token: request.token }),\n () => endWrite({ fences: request.fences, token: request.token }),\n ).catch(() => undefined);\n throw error;\n }\n },\n async endWrite(request) {\n if (failedBegins.delete(request.token)) return;\n await endWrite(request);\n },\n invalidate: (fences) => withinCoordinatorDeadline(Promise.resolve().then(() => store.invalidate(fences))),\n };\n boundedStores.set(store, bounded);\n boundedStores.set(bounded, bounded);\n return bounded;\n}\n"]}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// src/d1/bookmarks.ts
|
|
2
|
+
var D1_BOOKMARK_HEADER = "X-Dee-Wan-D1-Bookmarks";
|
|
3
|
+
var MAX_HEADER_LENGTH = 8192;
|
|
4
|
+
var MAX_DATABASES = 64;
|
|
5
|
+
var UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;
|
|
6
|
+
var BOOKMARK = /^(?!first-primary$|first-unconstrained$)[\x21-\x7e]{1,512}$/;
|
|
7
|
+
function decodeD1Bookmarks(value) {
|
|
8
|
+
if (value === null) return {};
|
|
9
|
+
if (!value || value.length > MAX_HEADER_LENGTH) return null;
|
|
10
|
+
try {
|
|
11
|
+
const parsed = JSON.parse(value);
|
|
12
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) return null;
|
|
13
|
+
const entries = Object.entries(parsed);
|
|
14
|
+
if (entries.length > MAX_DATABASES || entries.some(([id, bookmark]) => !UUID.test(id) || typeof bookmark !== "string" || !BOOKMARK.test(bookmark))) return null;
|
|
15
|
+
return Object.fromEntries(entries);
|
|
16
|
+
} catch {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function parseD1Bookmarks(value) {
|
|
21
|
+
return decodeD1Bookmarks(value) ?? {};
|
|
22
|
+
}
|
|
23
|
+
function mergeD1Bookmarks(target, incoming) {
|
|
24
|
+
for (const [id, bookmark] of Object.entries(incoming)) {
|
|
25
|
+
if (!UUID.test(id) || !BOOKMARK.test(bookmark) || target[id] && bookmark <= target[id]) continue;
|
|
26
|
+
const previous = target[id];
|
|
27
|
+
target[id] = bookmark;
|
|
28
|
+
if (serializeD1Bookmarks(target) === null) {
|
|
29
|
+
if (previous === void 0) delete target[id];
|
|
30
|
+
else target[id] = previous;
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
function serializeD1Bookmarks(bookmarks) {
|
|
37
|
+
const entries = Object.entries(bookmarks).sort(([a], [b]) => a.localeCompare(b));
|
|
38
|
+
if (entries.length > MAX_DATABASES || entries.some(([id, bookmark]) => !UUID.test(id) || !BOOKMARK.test(bookmark))) return null;
|
|
39
|
+
const result = JSON.stringify(Object.fromEntries(entries));
|
|
40
|
+
return result.length <= MAX_HEADER_LENGTH ? result : null;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export { D1_BOOKMARK_HEADER, decodeD1Bookmarks, mergeD1Bookmarks, parseD1Bookmarks, serializeD1Bookmarks };
|
|
44
|
+
//# sourceMappingURL=chunk-ZBYAKDNZ.js.map
|
|
45
|
+
//# sourceMappingURL=chunk-ZBYAKDNZ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/d1/bookmarks.ts"],"names":[],"mappings":";AAAO,IAAM,kBAAA,GAAqB;AAClC,IAAM,iBAAA,GAAoB,IAAA;AAC1B,IAAM,aAAA,GAAgB,EAAA;AACtB,IAAM,IAAA,GAAO,gEAAA;AACb,IAAM,QAAA,GAAW,6DAAA;AAIV,SAAS,kBAAkB,KAAA,EAA0C;AAC1E,EAAA,IAAI,KAAA,KAAU,IAAA,EAAM,OAAO,EAAC;AAC5B,EAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,MAAA,GAAS,mBAAmB,OAAO,IAAA;AACvD,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAkB,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AACxC,IAAA,IAAI,CAAC,UAAU,OAAO,MAAA,KAAW,YAAY,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG,OAAO,IAAA;AAC3E,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA;AACrC,IAAA,IAAI,OAAA,CAAQ,MAAA,GAAS,aAAA,IAAiB,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAC,EAAA,EAAI,QAAQ,CAAA,KAAM,CAAC,IAAA,CAAK,KAAK,EAAE,CAAA,IAAK,OAAO,QAAA,KAAa,QAAA,IAAY,CAAC,SAAS,IAAA,CAAK,QAAQ,CAAC,CAAA,EAAG,OAAO,IAAA;AAC3J,IAAA,OAAO,MAAA,CAAO,YAAY,OAAO,CAAA;AAAA,EACnC,CAAA,CAAA,MAAQ;AAAE,IAAA,OAAO,IAAA;AAAA,EAAM;AACzB;AAEO,SAAS,iBAAiB,KAAA,EAAmC;AAClE,EAAA,OAAO,iBAAA,CAAkB,KAAK,CAAA,IAAK,EAAC;AACtC;AAEO,SAAS,gBAAA,CAAiB,QAAqB,QAAA,EAAgC;AACpF,EAAA,KAAA,MAAW,CAAC,EAAA,EAAI,QAAQ,KAAK,MAAA,CAAO,OAAA,CAAQ,QAAQ,CAAA,EAAG;AACrD,IAAA,IAAI,CAAC,IAAA,CAAK,IAAA,CAAK,EAAE,CAAA,IAAK,CAAC,QAAA,CAAS,IAAA,CAAK,QAAQ,CAAA,IAAM,OAAO,EAAE,CAAA,IAAK,QAAA,IAAY,MAAA,CAAO,EAAE,CAAA,EAAI;AAC1F,IAAA,MAAM,QAAA,GAAW,OAAO,EAAE,CAAA;AAC1B,IAAA,MAAA,CAAO,EAAE,CAAA,GAAI,QAAA;AACb,IAAA,IAAI,oBAAA,CAAqB,MAAM,CAAA,KAAM,IAAA,EAAM;AACzC,MAAA,IAAI,QAAA,KAAa,MAAA,EAAW,OAAO,MAAA,CAAO,EAAE,CAAA;AAAA,WACvC,MAAA,CAAO,EAAE,CAAA,GAAI,QAAA;AAClB,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,qBAAqB,SAAA,EAAuC;AAC1E,EAAA,MAAM,UAAU,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,CAAE,KAAK,CAAC,CAAC,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA,KAAM,CAAA,CAAE,aAAA,CAAc,CAAC,CAAC,CAAA;AAC/E,EAAA,IAAI,OAAA,CAAQ,SAAS,aAAA,IAAiB,OAAA,CAAQ,KAAK,CAAC,CAAC,IAAI,QAAQ,CAAA,KAAM,CAAC,IAAA,CAAK,IAAA,CAAK,EAAE,CAAA,IAAK,CAAC,SAAS,IAAA,CAAK,QAAQ,CAAC,CAAA,EAAG,OAAO,IAAA;AAC3H,EAAA,MAAM,SAAS,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,WAAA,CAAY,OAAO,CAAC,CAAA;AACzD,EAAA,OAAO,MAAA,CAAO,MAAA,IAAU,iBAAA,GAAoB,MAAA,GAAS,IAAA;AACvD","file":"chunk-ZBYAKDNZ.js","sourcesContent":["export const D1_BOOKMARK_HEADER = 'X-Dee-Wan-D1-Bookmarks';\nconst MAX_HEADER_LENGTH = 8192;\nconst MAX_DATABASES = 64;\nconst UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;\nconst BOOKMARK = /^(?!first-primary$|first-unconstrained$)[\\x21-\\x7e]{1,512}$/;\n\nexport type D1Bookmarks = Record<string, string>;\n\nexport function decodeD1Bookmarks(value: string | null): D1Bookmarks | null {\n if (value === null) return {};\n if (!value || value.length > MAX_HEADER_LENGTH) return null;\n try {\n const parsed: unknown = JSON.parse(value);\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) return null;\n const entries = Object.entries(parsed);\n if (entries.length > MAX_DATABASES || entries.some(([id, bookmark]) => !UUID.test(id) || typeof bookmark !== 'string' || !BOOKMARK.test(bookmark))) return null;\n return Object.fromEntries(entries);\n } catch { return null; }\n}\n\nexport function parseD1Bookmarks(value: string | null): D1Bookmarks {\n return decodeD1Bookmarks(value) ?? {};\n}\n\nexport function mergeD1Bookmarks(target: D1Bookmarks, incoming: D1Bookmarks): boolean {\n for (const [id, bookmark] of Object.entries(incoming)) {\n if (!UUID.test(id) || !BOOKMARK.test(bookmark) || (target[id] && bookmark <= target[id])) continue;\n const previous = target[id];\n target[id] = bookmark;\n if (serializeD1Bookmarks(target) === null) {\n if (previous === undefined) delete target[id];\n else target[id] = previous;\n return false;\n }\n }\n return true;\n}\n\nexport function serializeD1Bookmarks(bookmarks: D1Bookmarks): string | null {\n const entries = Object.entries(bookmarks).sort(([a], [b]) => a.localeCompare(b));\n if (entries.length > MAX_DATABASES || entries.some(([id, bookmark]) => !UUID.test(id) || !BOOKMARK.test(bookmark))) return null;\n const result = JSON.stringify(Object.fromEntries(entries));\n return result.length <= MAX_HEADER_LENGTH ? result : null;\n}\n"]}
|
package/dist/client.d.ts
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import { D as D1CacheProfile } from './profile--LBtbQI_.js';
|
|
2
2
|
|
|
3
|
+
declare const D1_BOOKMARK_HEADER = "X-Dee-Wan-D1-Bookmarks";
|
|
4
|
+
type D1Bookmarks = Record<string, string>;
|
|
5
|
+
declare function parseD1Bookmarks(value: string | null): D1Bookmarks;
|
|
6
|
+
declare function serializeD1Bookmarks(bookmarks: D1Bookmarks): string | null;
|
|
7
|
+
|
|
3
8
|
declare function createSingleFlight<Key, Value>(): {
|
|
4
9
|
run(key: Key, load: () => Promise<Value>): Promise<Value>;
|
|
5
10
|
forget(key: Key): void;
|
|
@@ -47,4 +52,12 @@ declare function createMutationInvalidation(policy: Pick<NonNullable<D1CacheProf
|
|
|
47
52
|
dispose(): void;
|
|
48
53
|
};
|
|
49
54
|
|
|
50
|
-
|
|
55
|
+
interface D1BookmarkStorage {
|
|
56
|
+
getItem(key: string): string | null;
|
|
57
|
+
setItem(key: string, value: string): void;
|
|
58
|
+
}
|
|
59
|
+
declare function createD1BookmarkFetch(fetcher?: typeof fetch, options?: {
|
|
60
|
+
storage?: D1BookmarkStorage;
|
|
61
|
+
}): typeof fetch;
|
|
62
|
+
|
|
63
|
+
export { type D1BookmarkStorage, D1_BOOKMARK_HEADER, type FreshnessTransport, type MutationInvalidationChannel, type MutationInvalidationEvent, createD1BookmarkFetch, createIntentWarmup, createMutationInvalidation, createReadFreshness, createRevalidationWindow, createSingleFlight, parseD1Bookmarks, serializeD1Bookmarks };
|
package/dist/client.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { needsFreshness } from './chunk-JPK2AF7X.js';
|
|
2
|
+
import { mergeD1Bookmarks, parseD1Bookmarks, D1_BOOKMARK_HEADER, serializeD1Bookmarks } from './chunk-ZBYAKDNZ.js';
|
|
3
|
+
export { D1_BOOKMARK_HEADER, parseD1Bookmarks, serializeD1Bookmarks } from './chunk-ZBYAKDNZ.js';
|
|
2
4
|
|
|
3
5
|
// src/client.ts
|
|
4
6
|
function createSingleFlight() {
|
|
@@ -218,7 +220,41 @@ function createMutationInvalidation(policy, options = {}) {
|
|
|
218
220
|
}
|
|
219
221
|
};
|
|
220
222
|
}
|
|
223
|
+
function createD1BookmarkFetch(fetcher = fetch, options = {}) {
|
|
224
|
+
const origins = /* @__PURE__ */ new Map();
|
|
225
|
+
return async (input, init) => {
|
|
226
|
+
const request = new Request(input, init);
|
|
227
|
+
const origin = new URL(request.url).origin;
|
|
228
|
+
const bookmarks = origins.get(origin) ?? {};
|
|
229
|
+
if (!origins.has(origin)) origins.set(origin, bookmarks);
|
|
230
|
+
const key = `dee-wan:d1-bookmarks:${origin}`;
|
|
231
|
+
const mergeStored = () => {
|
|
232
|
+
try {
|
|
233
|
+
const saved = parseD1Bookmarks(options.storage?.getItem(key) ?? null);
|
|
234
|
+
const combined = { ...bookmarks };
|
|
235
|
+
if (mergeD1Bookmarks(combined, saved)) Object.assign(bookmarks, combined);
|
|
236
|
+
} catch {
|
|
237
|
+
}
|
|
238
|
+
};
|
|
239
|
+
mergeStored();
|
|
240
|
+
const headers = new Headers(request.headers);
|
|
241
|
+
const outgoing = { ...bookmarks };
|
|
242
|
+
if (!mergeD1Bookmarks(outgoing, parseD1Bookmarks(headers.get(D1_BOOKMARK_HEADER)))) throw new RangeError("D1 bookmark capacity exceeded");
|
|
243
|
+
const encoded = serializeD1Bookmarks(outgoing);
|
|
244
|
+
if (encoded && encoded !== "{}") headers.set(D1_BOOKMARK_HEADER, encoded);
|
|
245
|
+
else headers.delete(D1_BOOKMARK_HEADER);
|
|
246
|
+
const response = await fetcher(new Request(request, { headers }));
|
|
247
|
+
mergeStored();
|
|
248
|
+
if (!mergeD1Bookmarks(bookmarks, parseD1Bookmarks(response.headers.get(D1_BOOKMARK_HEADER)))) throw new RangeError("D1 bookmark capacity exceeded");
|
|
249
|
+
try {
|
|
250
|
+
const value = serializeD1Bookmarks(bookmarks);
|
|
251
|
+
if (value && value !== "{}") options.storage?.setItem(key, value);
|
|
252
|
+
} catch {
|
|
253
|
+
}
|
|
254
|
+
return response;
|
|
255
|
+
};
|
|
256
|
+
}
|
|
221
257
|
|
|
222
|
-
export { createIntentWarmup, createMutationInvalidation, createReadFreshness, createRevalidationWindow, createSingleFlight };
|
|
258
|
+
export { createD1BookmarkFetch, createIntentWarmup, createMutationInvalidation, createReadFreshness, createRevalidationWindow, createSingleFlight };
|
|
223
259
|
//# sourceMappingURL=client.js.map
|
|
224
260
|
//# sourceMappingURL=client.js.map
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/client.ts"],"names":[],"mappings":"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","file":"client.js","sourcesContent":["import type { D1CacheProfile } from './d1/profile';\nimport { needsFreshness } from './d1/read-freshness-policy';\n\nexport function createSingleFlight<Key, Value>() {\n const pending = new Map<Key, Promise<Value>>();\n return {\n run(key: Key, load: () => Promise<Value>): Promise<Value> {\n const existing = pending.get(key);\n if (existing) return existing;\n const promise = Promise.resolve().then(load);\n pending.set(key, promise);\n void promise.then(() => { if (pending.get(key) === promise) pending.delete(key); }, () => { if (pending.get(key) === promise) pending.delete(key); });\n return promise;\n },\n forget(key: Key): void { pending.delete(key); },\n };\n}\n\nexport function createIntentWarmup(cooldownMs = 60_000, now: () => number = monotonicNow) {\n const duration = Number.isFinite(cooldownMs) && cooldownMs > 0 ? cooldownMs : 60_000;\n const warmed = new Map<string, number>();\n let scope = '';\n let generation = 0;\n let running = false;\n let queued: { key: string; load: (isCurrent: () => boolean) => Promise<boolean>; generation: number } | undefined;\n const drain = () => {\n if (running || !queued) return;\n const task = queued;\n queued = undefined;\n if ((warmed.get(task.key) ?? 0) > now()) return;\n running = true;\n const isCurrent = () => task.generation === generation && scope !== '';\n void Promise.resolve().then(() => isCurrent() ? task.load(isCurrent) : false).then((ok) => {\n if (ok && task.generation === generation) warmed.set(task.key, now() + duration);\n }, () => {}).finally(() => { running = false; drain(); });\n };\n return {\n setScope(next: string): void {\n if (scope === next) return;\n scope = next;\n generation++;\n queued = undefined;\n warmed.clear();\n },\n invalidate(): void { generation++; queued = undefined; warmed.clear(); },\n warm(key: string, load: (isCurrent: () => boolean) => Promise<boolean>): void {\n if (!scope || !key || (warmed.get(key) ?? 0) > now()) return;\n queued = { key, load, generation };\n drain();\n },\n };\n}\n\ntype ReadLeasePolicy = Pick<NonNullable<D1CacheProfile['readResponseLease']>, 'freshnessHeader' | 'freshnessCookieExcludedPaths' | 'maxSeconds' | 'freshnessCookieMode'> & Partial<Pick<NonNullable<D1CacheProfile['readResponseLease']>, 'credentialHeaders'>>;\n\nexport interface FreshnessTransport { origin?: string; baseUrl?: string; withCredentials?: boolean }\n\nfunction usesGenerationCookie(policy: ReadLeasePolicy, url: string, transport?: FreshnessTransport): boolean {\n if (policy.freshnessCookieMode !== 'generation' || !policy.credentialHeaders?.some((name) => name.toLowerCase() === 'cookie') || transport?.withCredentials !== true || !transport.origin || transport.baseUrl === undefined) return false;\n try {\n const origin = new URL(transport.origin).origin;\n const base = new URL(transport.baseUrl, origin);\n return origin !== 'null' && new URL(url, base).origin === origin;\n } catch { return false; }\n}\n\nexport function createReadFreshness(policy: ReadLeasePolicy, now: () => number = Date.now) {\n const until = new Map<string, number>();\n const prune = (time: number) => { for (const [scope, deadline] of until) if (deadline <= time) until.delete(scope); };\n return {\n headers(scope: string, method: string): Record<string, string> {\n const time = now();\n prune(time);\n if (method.toUpperCase() !== 'GET' || !until.has(scope)) return {};\n return { 'Cache-Control':'no-cache', ...(policy.freshnessHeader ? { [policy.freshnessHeader]:'1' } : {}) };\n },\n observe(scope: string, method: string, url: string, transport?: FreshnessTransport): void {\n const time = now();\n prune(time);\n let pathname: string;\n try { pathname = new URL(url, 'https://cache.invalid').pathname; } catch { pathname = ''; }\n if (needsFreshness(method, pathname, policy.freshnessCookieExcludedPaths) && !usesGenerationCookie(policy, url, transport)) until.set(scope, time + (Number.isInteger(policy.maxSeconds) && policy.maxSeconds !== undefined && policy.maxSeconds >= 1 && policy.maxSeconds <= 300 ? policy.maxSeconds : 5) * 1000);\n },\n };\n}\n\nfunction monotonicNow(): number {\n const clock: unknown = Reflect.get(globalThis, 'performance');\n if (clock && typeof clock === 'object') {\n const read: unknown = Reflect.get(clock, 'now');\n if (typeof read === 'function') {\n const value: unknown = Reflect.apply(read, clock, []);\n if (typeof value === 'number' && Number.isFinite(value)) return value;\n }\n }\n return Date.now();\n}\n\nexport function createRevalidationWindow(windowMs: number, now: () => number = monotonicNow) {\n const duration = Number.isFinite(windowMs) && windowMs > 0 ? windowMs : 300_000;\n const scopes = new Map<string, number>();\n return {\n remaining(scope: string): number {\n const time = now();\n let deadline = scopes.get(scope);\n if (deadline === undefined) { deadline = time + duration; scopes.set(scope, deadline); }\n return Math.max(0, deadline - time);\n },\n take(scope: string): boolean {\n const time = now();\n const deadline = scopes.get(scope);\n if (deadline !== undefined && time < deadline) return false;\n scopes.set(scope, time + duration);\n return true;\n },\n };\n}\n\nexport interface MutationInvalidationEvent {\n scope: string;\n method: string;\n pathname: string;\n}\n\nexport interface MutationInvalidationChannel {\n readonly name: string;\n postMessage(value: MutationInvalidationEvent): void;\n addEventListener(type: 'message', listener: (event: { data: unknown }) => void): void;\n removeEventListener(type: 'message', listener: (event: { data: unknown }) => void): void;\n close(): void;\n}\n\nconst mutationChannelName = 'dee-wan-cache-invalidation-v1';\nconst validScope = (scope: string): boolean => /^[A-Za-z0-9:_-]{1,256}$/.test(scope);\nconst validMethod = (method: string): boolean => /^[!#$%&'*+.^_`|~0-9A-Z-]{1,32}$/.test(method);\nconst validPathname = (pathname: string): boolean => pathname.startsWith('/') && pathname.length <= 2048 && ![...pathname].some((character) => character === '?' || character === '#' || character.charCodeAt(0) < 32 || character.charCodeAt(0) === 127);\n\nfunction invalidationChannel(value: unknown): value is MutationInvalidationChannel {\n return !!value && typeof value === 'object' && Reflect.get(value, 'name') === mutationChannelName && ['postMessage', 'addEventListener', 'removeEventListener', 'close'].every((name) => typeof Reflect.get(value, name) === 'function');\n}\n\nfunction browserInvalidationChannel(): MutationInvalidationChannel | undefined {\n const document: unknown = Reflect.get(globalThis, 'document');\n if (!document || typeof document !== 'object') return undefined;\n const constructor: unknown = Reflect.get(globalThis, 'BroadcastChannel');\n if (typeof constructor !== 'function') return undefined;\n try { const channel: unknown = Reflect.construct(constructor, [mutationChannelName]); return invalidationChannel(channel) ? channel : undefined; } catch { return undefined; }\n}\n\nexport function createMutationInvalidation(policy: Pick<NonNullable<D1CacheProfile['readResponseLease']>, 'freshnessCookieExcludedPaths'>, options: { channel?: MutationInvalidationChannel | null } = {}) {\n const supplied = options.channel === undefined ? browserInvalidationChannel() : options.channel;\n const channel = invalidationChannel(supplied) ? supplied : undefined;\n const listeners = new Map<string, Set<(event: MutationInvalidationEvent) => void>>();\n let disposed = false;\n const notify = (event: MutationInvalidationEvent) => {\n for (const listener of listeners.get(event.scope) ?? []) {\n try { listener({ ...event }); } catch { /* Subscribers are independent. */ }\n }\n };\n const receive = ({ data }: { data: unknown }) => {\n try {\n if (disposed || !data || typeof data !== 'object' || Object.keys(data).sort().join(',') !== 'method,pathname,scope') return;\n const scope: unknown = Reflect.get(data, 'scope');\n const method: unknown = Reflect.get(data, 'method');\n const pathname: unknown = Reflect.get(data, 'pathname');\n if (typeof scope !== 'string' || !validScope(scope) || typeof method !== 'string' || !validMethod(method) || typeof pathname !== 'string' || !validPathname(pathname) || !needsFreshness(method, pathname, policy.freshnessCookieExcludedPaths)) return;\n notify({ scope, method, pathname });\n } catch { /* Ignore malformed messages. */ }\n };\n channel?.addEventListener('message', receive);\n return {\n publish(scope: string, method: string, url: string): void {\n if (disposed || !validScope(scope)) return;\n const normalized = method.toUpperCase();\n if (!validMethod(normalized)) return;\n let pathname: string;\n try { pathname = new URL(url, 'https://cache.invalid').pathname; } catch { return; }\n if (!validPathname(pathname) || !needsFreshness(normalized, pathname, policy.freshnessCookieExcludedPaths)) return;\n const event = { scope, method:normalized, pathname };\n notify(event);\n try { channel?.postMessage({ scope, method:normalized, pathname }); } catch { /* Local notification remains available. */ }\n },\n subscribe(scope: string, listener: (event: MutationInvalidationEvent) => void): () => void {\n if (disposed || !validScope(scope)) return () => {};\n let group = listeners.get(scope);\n if (!group) { group = new Set(); listeners.set(scope, group); }\n group.add(listener);\n const subscribed = group;\n return () => { subscribed.delete(listener); if (subscribed.size === 0 && listeners.get(scope) === subscribed) listeners.delete(scope); };\n },\n dispose(): void {\n if (disposed) return;\n disposed = true;\n listeners.clear();\n channel?.removeEventListener('message', receive);\n channel?.close();\n },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/client.ts"],"names":[],"mappings":"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","file":"client.js","sourcesContent":["import type { D1CacheProfile } from './d1/profile';\nimport { needsFreshness } from './d1/read-freshness-policy';\n\nexport function createSingleFlight<Key, Value>() {\n const pending = new Map<Key, Promise<Value>>();\n return {\n run(key: Key, load: () => Promise<Value>): Promise<Value> {\n const existing = pending.get(key);\n if (existing) return existing;\n const promise = Promise.resolve().then(load);\n pending.set(key, promise);\n void promise.then(() => { if (pending.get(key) === promise) pending.delete(key); }, () => { if (pending.get(key) === promise) pending.delete(key); });\n return promise;\n },\n forget(key: Key): void { pending.delete(key); },\n };\n}\n\nexport function createIntentWarmup(cooldownMs = 60_000, now: () => number = monotonicNow) {\n const duration = Number.isFinite(cooldownMs) && cooldownMs > 0 ? cooldownMs : 60_000;\n const warmed = new Map<string, number>();\n let scope = '';\n let generation = 0;\n let running = false;\n let queued: { key: string; load: (isCurrent: () => boolean) => Promise<boolean>; generation: number } | undefined;\n const drain = () => {\n if (running || !queued) return;\n const task = queued;\n queued = undefined;\n if ((warmed.get(task.key) ?? 0) > now()) return;\n running = true;\n const isCurrent = () => task.generation === generation && scope !== '';\n void Promise.resolve().then(() => isCurrent() ? task.load(isCurrent) : false).then((ok) => {\n if (ok && task.generation === generation) warmed.set(task.key, now() + duration);\n }, () => {}).finally(() => { running = false; drain(); });\n };\n return {\n setScope(next: string): void {\n if (scope === next) return;\n scope = next;\n generation++;\n queued = undefined;\n warmed.clear();\n },\n invalidate(): void { generation++; queued = undefined; warmed.clear(); },\n warm(key: string, load: (isCurrent: () => boolean) => Promise<boolean>): void {\n if (!scope || !key || (warmed.get(key) ?? 0) > now()) return;\n queued = { key, load, generation };\n drain();\n },\n };\n}\n\ntype ReadLeasePolicy = Pick<NonNullable<D1CacheProfile['readResponseLease']>, 'freshnessHeader' | 'freshnessCookieExcludedPaths' | 'maxSeconds' | 'freshnessCookieMode'> & Partial<Pick<NonNullable<D1CacheProfile['readResponseLease']>, 'credentialHeaders'>>;\n\nexport interface FreshnessTransport { origin?: string; baseUrl?: string; withCredentials?: boolean }\n\nfunction usesGenerationCookie(policy: ReadLeasePolicy, url: string, transport?: FreshnessTransport): boolean {\n if (policy.freshnessCookieMode !== 'generation' || !policy.credentialHeaders?.some((name) => name.toLowerCase() === 'cookie') || transport?.withCredentials !== true || !transport.origin || transport.baseUrl === undefined) return false;\n try {\n const origin = new URL(transport.origin).origin;\n const base = new URL(transport.baseUrl, origin);\n return origin !== 'null' && new URL(url, base).origin === origin;\n } catch { return false; }\n}\n\nexport function createReadFreshness(policy: ReadLeasePolicy, now: () => number = Date.now) {\n const until = new Map<string, number>();\n const prune = (time: number) => { for (const [scope, deadline] of until) if (deadline <= time) until.delete(scope); };\n return {\n headers(scope: string, method: string): Record<string, string> {\n const time = now();\n prune(time);\n if (method.toUpperCase() !== 'GET' || !until.has(scope)) return {};\n return { 'Cache-Control':'no-cache', ...(policy.freshnessHeader ? { [policy.freshnessHeader]:'1' } : {}) };\n },\n observe(scope: string, method: string, url: string, transport?: FreshnessTransport): void {\n const time = now();\n prune(time);\n let pathname: string;\n try { pathname = new URL(url, 'https://cache.invalid').pathname; } catch { pathname = ''; }\n if (needsFreshness(method, pathname, policy.freshnessCookieExcludedPaths) && !usesGenerationCookie(policy, url, transport)) until.set(scope, time + (Number.isInteger(policy.maxSeconds) && policy.maxSeconds !== undefined && policy.maxSeconds >= 1 && policy.maxSeconds <= 300 ? policy.maxSeconds : 5) * 1000);\n },\n };\n}\n\nfunction monotonicNow(): number {\n const clock: unknown = Reflect.get(globalThis, 'performance');\n if (clock && typeof clock === 'object') {\n const read: unknown = Reflect.get(clock, 'now');\n if (typeof read === 'function') {\n const value: unknown = Reflect.apply(read, clock, []);\n if (typeof value === 'number' && Number.isFinite(value)) return value;\n }\n }\n return Date.now();\n}\n\nexport function createRevalidationWindow(windowMs: number, now: () => number = monotonicNow) {\n const duration = Number.isFinite(windowMs) && windowMs > 0 ? windowMs : 300_000;\n const scopes = new Map<string, number>();\n return {\n remaining(scope: string): number {\n const time = now();\n let deadline = scopes.get(scope);\n if (deadline === undefined) { deadline = time + duration; scopes.set(scope, deadline); }\n return Math.max(0, deadline - time);\n },\n take(scope: string): boolean {\n const time = now();\n const deadline = scopes.get(scope);\n if (deadline !== undefined && time < deadline) return false;\n scopes.set(scope, time + duration);\n return true;\n },\n };\n}\n\nexport interface MutationInvalidationEvent {\n scope: string;\n method: string;\n pathname: string;\n}\n\nexport interface MutationInvalidationChannel {\n readonly name: string;\n postMessage(value: MutationInvalidationEvent): void;\n addEventListener(type: 'message', listener: (event: { data: unknown }) => void): void;\n removeEventListener(type: 'message', listener: (event: { data: unknown }) => void): void;\n close(): void;\n}\n\nconst mutationChannelName = 'dee-wan-cache-invalidation-v1';\nconst validScope = (scope: string): boolean => /^[A-Za-z0-9:_-]{1,256}$/.test(scope);\nconst validMethod = (method: string): boolean => /^[!#$%&'*+.^_`|~0-9A-Z-]{1,32}$/.test(method);\nconst validPathname = (pathname: string): boolean => pathname.startsWith('/') && pathname.length <= 2048 && ![...pathname].some((character) => character === '?' || character === '#' || character.charCodeAt(0) < 32 || character.charCodeAt(0) === 127);\n\nfunction invalidationChannel(value: unknown): value is MutationInvalidationChannel {\n return !!value && typeof value === 'object' && Reflect.get(value, 'name') === mutationChannelName && ['postMessage', 'addEventListener', 'removeEventListener', 'close'].every((name) => typeof Reflect.get(value, name) === 'function');\n}\n\nfunction browserInvalidationChannel(): MutationInvalidationChannel | undefined {\n const document: unknown = Reflect.get(globalThis, 'document');\n if (!document || typeof document !== 'object') return undefined;\n const constructor: unknown = Reflect.get(globalThis, 'BroadcastChannel');\n if (typeof constructor !== 'function') return undefined;\n try { const channel: unknown = Reflect.construct(constructor, [mutationChannelName]); return invalidationChannel(channel) ? channel : undefined; } catch { return undefined; }\n}\n\nexport function createMutationInvalidation(policy: Pick<NonNullable<D1CacheProfile['readResponseLease']>, 'freshnessCookieExcludedPaths'>, options: { channel?: MutationInvalidationChannel | null } = {}) {\n const supplied = options.channel === undefined ? browserInvalidationChannel() : options.channel;\n const channel = invalidationChannel(supplied) ? supplied : undefined;\n const listeners = new Map<string, Set<(event: MutationInvalidationEvent) => void>>();\n let disposed = false;\n const notify = (event: MutationInvalidationEvent) => {\n for (const listener of listeners.get(event.scope) ?? []) {\n try { listener({ ...event }); } catch { /* Subscribers are independent. */ }\n }\n };\n const receive = ({ data }: { data: unknown }) => {\n try {\n if (disposed || !data || typeof data !== 'object' || Object.keys(data).sort().join(',') !== 'method,pathname,scope') return;\n const scope: unknown = Reflect.get(data, 'scope');\n const method: unknown = Reflect.get(data, 'method');\n const pathname: unknown = Reflect.get(data, 'pathname');\n if (typeof scope !== 'string' || !validScope(scope) || typeof method !== 'string' || !validMethod(method) || typeof pathname !== 'string' || !validPathname(pathname) || !needsFreshness(method, pathname, policy.freshnessCookieExcludedPaths)) return;\n notify({ scope, method, pathname });\n } catch { /* Ignore malformed messages. */ }\n };\n channel?.addEventListener('message', receive);\n return {\n publish(scope: string, method: string, url: string): void {\n if (disposed || !validScope(scope)) return;\n const normalized = method.toUpperCase();\n if (!validMethod(normalized)) return;\n let pathname: string;\n try { pathname = new URL(url, 'https://cache.invalid').pathname; } catch { return; }\n if (!validPathname(pathname) || !needsFreshness(normalized, pathname, policy.freshnessCookieExcludedPaths)) return;\n const event = { scope, method:normalized, pathname };\n notify(event);\n try { channel?.postMessage({ scope, method:normalized, pathname }); } catch { /* Local notification remains available. */ }\n },\n subscribe(scope: string, listener: (event: MutationInvalidationEvent) => void): () => void {\n if (disposed || !validScope(scope)) return () => {};\n let group = listeners.get(scope);\n if (!group) { group = new Set(); listeners.set(scope, group); }\n group.add(listener);\n const subscribed = group;\n return () => { subscribed.delete(listener); if (subscribed.size === 0 && listeners.get(scope) === subscribed) listeners.delete(scope); };\n },\n dispose(): void {\n if (disposed) return;\n disposed = true;\n listeners.clear();\n channel?.removeEventListener('message', receive);\n channel?.close();\n },\n };\n}\n\nexport { D1_BOOKMARK_HEADER, parseD1Bookmarks, serializeD1Bookmarks } from './d1/bookmarks';\n\nimport { D1_BOOKMARK_HEADER, mergeD1Bookmarks, parseD1Bookmarks, serializeD1Bookmarks } from './d1/bookmarks';\n\nexport interface D1BookmarkStorage {\n getItem(key: string): string | null;\n setItem(key: string, value: string): void;\n}\n\nexport function createD1BookmarkFetch(fetcher: typeof fetch = fetch, options: { storage?: D1BookmarkStorage } = {}): typeof fetch {\n const origins = new Map<string, Record<string, string>>();\n return async (input, init) => {\n const request = new Request(input, init);\n const origin = new URL(request.url).origin;\n const bookmarks = origins.get(origin) ?? {};\n if (!origins.has(origin)) origins.set(origin, bookmarks);\n const key = `dee-wan:d1-bookmarks:${origin}`;\n const mergeStored = () => {\n try {\n const saved = parseD1Bookmarks(options.storage?.getItem(key) ?? null);\n const combined = { ...bookmarks };\n if (mergeD1Bookmarks(combined, saved)) Object.assign(bookmarks, combined);\n } catch { /* Storage is optional. */ }\n };\n mergeStored();\n const headers = new Headers(request.headers);\n const outgoing = { ...bookmarks };\n if (!mergeD1Bookmarks(outgoing, parseD1Bookmarks(headers.get(D1_BOOKMARK_HEADER)))) throw new RangeError('D1 bookmark capacity exceeded');\n const encoded = serializeD1Bookmarks(outgoing);\n if (encoded && encoded !== '{}') headers.set(D1_BOOKMARK_HEADER, encoded);\n else headers.delete(D1_BOOKMARK_HEADER);\n const response = await fetcher(new Request(request, { headers }));\n mergeStored();\n if (!mergeD1Bookmarks(bookmarks, parseD1Bookmarks(response.headers.get(D1_BOOKMARK_HEADER)))) throw new RangeError('D1 bookmark capacity exceeded');\n try {\n const value = serializeD1Bookmarks(bookmarks);\n if (value && value !== '{}') options.storage?.setItem(key, value);\n } catch { /* Storage is optional. */ }\n return response;\n };\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { DurableObject } from 'cloudflare:workers';
|
|
2
|
-
import { I as InspectFencesRequest, a as InspectFencesResponse, R as ReadRequest, b as ReadResponse, W as WriteRequest, c as WriteResult, d as ReleaseRequest, B as BeginWriteRequest, E as EndWriteRequest, C as CacheStore } from '../types-
|
|
2
|
+
import { I as InspectFencesRequest, a as InspectFencesResponse, R as ReadRequest, b as ReadResponse, W as WriteRequest, c as WriteResult, d as ReleaseRequest, B as BeginWriteRequest, E as EndWriteRequest, C as CacheStore } from '../types-CtErcz2a.js';
|
|
3
3
|
export { a as ReadResponseWarmupContext, R as ReadResponseWarmupOptions, b as ReadResponseWarmupTarget, c as createResponseWarmup } from '../response-warmup-BWQvnT1G.js';
|
|
4
4
|
|
|
5
5
|
declare class CacheCoordinator<Env = unknown> extends DurableObject<Env> {
|
package/dist/cloudflare/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
export { createDurableObjectStore } from '../chunk-OOPPXK7Q.js';
|
|
3
|
-
import { GLOBAL_FENCE, MAX_TTL_MS, MAX_VALUE_BYTES, MAX_COORDINATOR_GENERATION_LENGTH, MAX_LEASE_MS, MAX_LOCK_MS } from '../chunk-OQRNVGQE.js';
|
|
1
|
+
export { createDurableObjectStore } from '../chunk-NFBMWKY5.js';
|
|
4
2
|
export { createResponseWarmup } from '../chunk-A4WV6RY4.js';
|
|
3
|
+
import { boundedD1Store, withinCoordinatorDeadline } from '../chunk-WKZ7TKGM.js';
|
|
5
4
|
import { createRegionalCache } from '../chunk-E6OZZ5UX.js';
|
|
5
|
+
import { GLOBAL_FENCE, MAX_TTL_MS, MAX_VALUE_BYTES, MAX_COORDINATOR_GENERATION_LENGTH, MAX_LEASE_MS, MAX_LOCK_MS } from '../chunk-OQRNVGQE.js';
|
|
6
6
|
import '../chunk-ZCMZJKGN.js';
|
|
7
7
|
import { DurableObject } from 'cloudflare:workers';
|
|
8
8
|
|
package/dist/d1/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as CacheStore, G as GeneratedCacheConfig, D as DecimalConstructor } from '../types-
|
|
1
|
+
import { C as CacheStore, G as GeneratedCacheConfig, D as DecimalConstructor, e as CacheSessionHooks } from '../types-CtErcz2a.js';
|
|
2
2
|
import { a as D1WritePolicy, D as D1CacheProfile } from '../profile--LBtbQI_.js';
|
|
3
3
|
export { i as isD1BindingName } from '../profile--LBtbQI_.js';
|
|
4
4
|
import { D1Database as D1Database$1 } from '@cloudflare/workers-types';
|
|
@@ -61,4 +61,20 @@ declare function cacheRegionalResponse(request: Request, options: RegionalRespon
|
|
|
61
61
|
type FreshnessPolicy = Pick<NonNullable<D1CacheProfile['readResponseLease']>, 'freshnessCookie' | 'freshnessHeader' | 'ignoreRequestCacheControl'>;
|
|
62
62
|
declare function regionalD1MetadataTtl(request: Request, policy: FreshnessPolicy): 0 | 5000;
|
|
63
63
|
|
|
64
|
-
|
|
64
|
+
interface D1ReadSessionOptions extends Pick<D1CacheProfile, 'bindingNames' | 'bindingPrefixes'> {
|
|
65
|
+
databaseIdsEnv: string;
|
|
66
|
+
primaryBindings?: readonly string[];
|
|
67
|
+
freshnessHeader?: string;
|
|
68
|
+
ignoreRequestCacheControl?: boolean;
|
|
69
|
+
}
|
|
70
|
+
declare function runPrimaryD1SessionSource<T>(operation: () => Promise<T>): Promise<T>;
|
|
71
|
+
declare function runD1PrismaScope<T>(operation: () => Promise<T>): Promise<T>;
|
|
72
|
+
declare function runD1SessionOperation<T>(database: object, operation: () => Promise<T>): Promise<T>;
|
|
73
|
+
declare function prismaD1SessionDatabase(database: D1Database$1): D1Database$1;
|
|
74
|
+
declare function runIsolatedD1Session<T>(request: Request, operation: () => Promise<T>): Promise<T>;
|
|
75
|
+
declare function d1SessionWarmupRequest(request: Request, response: Response): Request;
|
|
76
|
+
declare function d1SessionCacheHooks(database: object): CacheSessionHooks;
|
|
77
|
+
declare function sessionD1Env<Env extends object>(env: Env, options: D1ReadSessionOptions): Env;
|
|
78
|
+
declare 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>;
|
|
79
|
+
|
|
80
|
+
export { D1CacheProfile, type D1JsonReadOptions, type D1PrismaCacheOptions, type D1ReadOptions, type D1ReadSessionOptions, D1WritePolicy, type RegionalResponseOptions, cacheD1Env, cacheD1JsonRead, cacheD1Read, cacheRegionalResponse, createD1CacheRuntime, d1CacheEpoch, d1PrismaCacheExtension, d1SessionCacheHooks, d1SessionWarmupRequest, fenceD1Writes, prismaD1SessionDatabase, regionalD1MetadataTtl, runD1PrismaScope, runD1SessionOperation, runIsolatedD1Session, runPrimaryD1SessionSource, sameD1CacheDatabase, sessionD1Env, withD1PrismaCache, wrapD1Handler, wrapD1ReadSessionHandler };
|
package/dist/d1/index.js
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
|
-
import { cacheD1Read } from '../chunk-
|
|
2
|
-
export { cacheD1Env, cacheD1Read, createD1CacheRuntime, d1CacheEpoch, d1PrismaCacheExtension,
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
5
|
-
|
|
6
|
-
export { isD1BindingName } from '../chunk-AENVFT2S.js';
|
|
7
|
-
export { regionalD1MetadataTtl } from '../chunk-D2EESWMC.js';
|
|
1
|
+
import { cacheD1Read } from '../chunk-LAXBP5DQ.js';
|
|
2
|
+
export { cacheD1Env, cacheD1Read, createD1CacheRuntime, d1CacheEpoch, d1PrismaCacheExtension, sameD1CacheDatabase, withD1PrismaCache, wrapD1Handler } from '../chunk-LAXBP5DQ.js';
|
|
3
|
+
import '../chunk-NFBMWKY5.js';
|
|
4
|
+
import { d1SessionBookmarkFloor, advanceD1SessionBookmarks, trackD1SessionSource, runPrimaryD1SessionSource, responseD1SessionBookmarks, varyD1Bookmarks } from '../chunk-WJNCFFF3.js';
|
|
5
|
+
export { d1SessionCacheHooks, d1SessionWarmupRequest, fenceD1Writes, prismaD1SessionDatabase, regionalD1MetadataTtl, runD1PrismaScope, runD1SessionOperation, runIsolatedD1Session, runPrimaryD1SessionSource, sessionD1Env, wrapD1ReadSessionHandler } from '../chunk-WJNCFFF3.js';
|
|
8
6
|
import '../chunk-LHOK33GI.js';
|
|
7
|
+
import '../chunk-M4UOCIDQ.js';
|
|
8
|
+
import { D1_BOOKMARK_HEADER, decodeD1Bookmarks, serializeD1Bookmarks } from '../chunk-ZBYAKDNZ.js';
|
|
9
|
+
import '../chunk-WKZ7TKGM.js';
|
|
9
10
|
import { regionalKey, regionalRead, regionalWrite } from '../chunk-E6OZZ5UX.js';
|
|
11
|
+
import '../chunk-OQRNVGQE.js';
|
|
10
12
|
import '../chunk-ZCMZJKGN.js';
|
|
13
|
+
export { isD1BindingName } from '../chunk-AENVFT2S.js';
|
|
11
14
|
|
|
12
15
|
// src/d1/json-read.ts
|
|
13
16
|
var MAX_BODY_BYTES = 1e6;
|
|
@@ -118,7 +121,7 @@ function identity(request) {
|
|
|
118
121
|
const headers = [];
|
|
119
122
|
for (const [name, value] of request.headers) {
|
|
120
123
|
if (sensitive.test(name) || conditional.test(name) || /(?:^|[-_])(?:capability|preview)(?:[-_]|$)/i.test(name)) return null;
|
|
121
|
-
if (!ephemeral.test(name)) headers.push([name, value]);
|
|
124
|
+
if (!ephemeral.test(name) && name.toLowerCase() !== D1_BOOKMARK_HEADER.toLowerCase()) headers.push([name, value]);
|
|
122
125
|
}
|
|
123
126
|
headers.sort(([a], [b]) => a.localeCompare(b));
|
|
124
127
|
return [url.toString(), headers];
|
|
@@ -160,15 +163,34 @@ async function cacheRegionalResponse(request, options, load) {
|
|
|
160
163
|
return load();
|
|
161
164
|
}
|
|
162
165
|
if (requestIdentity2 === null || typeof options.namespace !== "string" || !options.namespace.trim()) return load();
|
|
163
|
-
const
|
|
166
|
+
const floor = d1SessionBookmarkFloor();
|
|
167
|
+
const key = await regionalKey(options.ttlMs, ["http-response", floor ? "session-v1" : null, options.namespace, options.ttlMs, requestIdentity2]);
|
|
164
168
|
if (!key) return load();
|
|
165
169
|
const cached = await regionalRead(key, options.ttlMs);
|
|
166
170
|
if (cached) {
|
|
167
171
|
const response2 = reconstruct(cached.value);
|
|
168
|
-
if (response2)
|
|
172
|
+
if (response2) {
|
|
173
|
+
if (!floor) return response2;
|
|
174
|
+
const raw = response2.headers.get(D1_BOOKMARK_HEADER);
|
|
175
|
+
const source = decodeD1Bookmarks(raw);
|
|
176
|
+
if (raw && source && Object.entries(floor).every(([id, bookmark]) => source[id] && source[id] >= bookmark)) {
|
|
177
|
+
advanceD1SessionBookmarks(source);
|
|
178
|
+
return response2;
|
|
179
|
+
}
|
|
180
|
+
void response2.body?.cancel().catch(() => void 0);
|
|
181
|
+
}
|
|
169
182
|
}
|
|
170
183
|
const started = Date.now();
|
|
171
|
-
const
|
|
184
|
+
const tracked = await trackD1SessionSource(() => runPrimaryD1SessionSource(load));
|
|
185
|
+
let response = tracked.value;
|
|
186
|
+
const bookmarks = responseD1SessionBookmarks(response.headers, tracked.bookmarks);
|
|
187
|
+
if (bookmarks) {
|
|
188
|
+
const headers = new Headers(response.headers);
|
|
189
|
+
const encoded = serializeD1Bookmarks(bookmarks);
|
|
190
|
+
if (encoded) headers.set(D1_BOOKMARK_HEADER, encoded);
|
|
191
|
+
varyD1Bookmarks(headers);
|
|
192
|
+
response = new Response(response.body, { status: response.status, statusText: response.statusText, headers });
|
|
193
|
+
}
|
|
172
194
|
if (!eligible(response.headers)) return response;
|
|
173
195
|
let entry;
|
|
174
196
|
try {
|