@dee-wan/cache 1.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/codec.ts","../src/core/pk.ts","../src/core/plan.ts","../src/core/shape.ts","../src/core/targets.ts","../src/core/extension.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type { DecimalConstructor } from \"./types\";\n\nconst TAG = \"$t\";\n\ninterface DecimalLike {\n d: unknown;\n e: unknown;\n s: unknown;\n toFixed(): string;\n}\n\n\nfunction isDecimal(value: object): value is DecimalLike {\n return (\n \"toFixed\" in value &&\n typeof value.toFixed === \"function\" &&\n \"d\" in value &&\n Array.isArray(value.d) &&\n \"e\" in value &&\n typeof value.e === \"number\" &&\n \"s\" in value &&\n typeof value.s === \"number\"\n );\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n value !== null && typeof value === \"object\" && !Array.isArray(value);\n\nfunction bytesToBase64(bytes: Uint8Array): string {\n let binary = \"\";\n for (const byte of bytes) binary += String.fromCharCode(byte);\n return btoa(binary);\n}\n\nfunction base64ToBytes(text: string): Uint8Array {\n const binary = atob(text);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);\n return bytes;\n}\n\nfunction setOwn(target: Record<string, unknown>, key: string, value: unknown): void {\n Object.defineProperty(target, key, { configurable: true, enumerable: true, value, writable: true });\n}\n\nexport function encode(value: unknown): unknown {\n if (value === undefined) return { [TAG]: \"u\" };\n if (typeof value === \"bigint\") return { [TAG]: \"n\", v: value.toString() };\n if (typeof value === \"number\" && !Number.isFinite(value)) return { [TAG]: \"f\", v: String(value) };\n if (value === null || typeof value !== \"object\") return value;\n if (value instanceof Date) return { [TAG]: \"d\", v: value.toISOString() };\n if (value instanceof Uint8Array) return { [TAG]: \"b\", v: bytesToBase64(value) };\n if (Array.isArray(value)) return value.map(encode);\n if (isDecimal(value)) return { [TAG]: \"m\", v: value.toFixed() };\n const out: Record<string, unknown> = {};\n for (const [key, inner] of Object.entries(value)) setOwn(out, key, encode(inner));\n const prototype: unknown = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) return { [TAG]: \"c\", n: String(value), v: out };\n return Object.hasOwn(out, TAG) ? { [TAG]: \"o\", v: out } : out;\n}\n\nexport function decode(value: unknown, decimal?: DecimalConstructor): unknown {\n if (Array.isArray(value)) return value.map((item) => decode(item, decimal));\n if (!isRecord(value)) return value;\n const record = value;\n const tag = record[TAG];\n if ((tag === \"o\" || tag === \"c\") && isRecord(record.v)) return decodeRecord(record.v, decimal);\n if (tag === \"u\") return undefined;\n if (typeof tag === \"string\" && typeof record.v === \"string\") {\n if (tag === \"n\") return BigInt(record.v);\n if (tag === \"f\") return Number(record.v);\n if (tag === \"d\") return new Date(record.v);\n if (tag === \"b\") return base64ToBytes(record.v);\n if (tag === \"m\") return decimal ? new decimal(record.v) : record.v;\n }\n return decodeRecord(record, decimal);\n}\n\nfunction decodeRecord(record: Record<string, unknown>, decimal?: DecimalConstructor): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n for (const [key, inner] of Object.entries(record)) {\n const decoded = decode(inner, decimal);\n if (decoded !== undefined) setOwn(out, key, decoded);\n }\n return out;\n}\n\nexport function stableStringify(value: unknown): string {\n return JSON.stringify(sortKeys(encode(value)));\n}\n\nfunction sortKeys(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(sortKeys);\n if (!isRecord(value)) return value;\n const record = value;\n const out: Record<string, unknown> = {};\n for (const key of Object.keys(record).sort()) setOwn(out, key, sortKeys(record[key]));\n return out;\n}\n\nexport async function sha256Hex(text: string): Promise<string> {\n const digest = await crypto.subtle.digest(\"SHA-256\", new TextEncoder().encode(text));\n return Array.from(new Uint8Array(digest), (byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n","export type PkValue = number | string;\n\nexport function isPlainRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function encodePk(parts: ReadonlyArray<PkValue>): string {\n return parts.map((part) => encodeURIComponent(String(part))).join(\":\");\n}\n\nfunction unwrapEquals(value: unknown): unknown {\n return isPlainRecord(value) && \"equals\" in value ? value.equals : value;\n}\n\nfunction isScalarPk(value: unknown): value is PkValue {\n return typeof value === \"string\" || (typeof value === \"number\" && Number.isFinite(value));\n}\n\nexport function pkFromWhere(where: unknown, pkFields: string[], compoundName?: string): null | string {\n if (!isPlainRecord(where)) return null;\n const compound = where[compoundName ?? pkFields.join(\"_\")];\n const source = pkFields.length > 1 && isPlainRecord(compound) ? compound : where;\n const parts: PkValue[] = [];\n for (const field of pkFields) {\n const value = source === where ? unwrapEquals(where[field]) : source[field];\n if (!isScalarPk(value)) return null;\n parts.push(value);\n }\n return encodePk(parts);\n}\n\nexport function pkFromRow(row: unknown, pkFields: string[]): null | string {\n if (!isPlainRecord(row)) return null;\n const parts: PkValue[] = [];\n for (const field of pkFields) {\n const value = row[field];\n if (!isScalarPk(value)) return null;\n parts.push(value);\n }\n return encodePk(parts);\n}\n","import type { GeneratedCacheConfig, InvalidationTarget, RelationInfo } from \"./types\";\n\nimport { entityFence, GLOBAL_FENCE, modelFence, writeFence } from \"./fences\";\nimport { isPlainRecord, pkFromRow, pkFromWhere } from \"./pk\";\n\nexport const MAX_NESTED_WRITE_DEPTH = 5;\nexport const MAX_ENTITY_FENCES_PER_MODEL = 100;\n\nexport const READ_OPERATIONS = new Set([\"count\", \"findFirst\", \"findFirstOrThrow\", \"findMany\", \"findUnique\", \"findUniqueOrThrow\"]);\n\nexport const WRITE_OPERATIONS = new Set([\n \"create\",\n \"createMany\",\n \"createManyAndReturn\",\n \"delete\",\n \"deleteMany\",\n \"update\",\n \"updateMany\",\n \"updateManyAndReturn\",\n \"upsert\",\n]);\n\ninterface ModelTouch {\n pks: Set<string>;\n wide: boolean;\n}\n\nexport interface WritePlan {\n all: boolean;\n touched: Map<string, ModelTouch>;\n}\n\ninterface PlanContext {\n config: GeneratedCacheConfig;\n plan: WritePlan;\n}\n\nconst pkFieldsOf = (config: GeneratedCacheConfig, model: string): string[] => config.primaryKeyFieldsByModel[model] ?? [\"id\"];\n\nfunction touch(plan: WritePlan, model: string): ModelTouch {\n const existing = plan.touched.get(model);\n if (existing) return existing;\n const created: ModelTouch = { pks: new Set(), wide: false };\n plan.touched.set(model, created);\n return created;\n}\n\nconst touchWrite = (ctx: PlanContext, model: string): void => void touch(ctx.plan, model);\n\nconst touchWide = (ctx: PlanContext, model: string): void => void (touch(ctx.plan, model).wide = true);\n\nfunction touchEntity(ctx: PlanContext, model: string, where: unknown): void {\n const pk = pkFromWhere(where, pkFieldsOf(ctx.config, model), ctx.config.primaryKeyNameByModel[model]);\n if (pk === null) touchWide(ctx, model);\n else touch(ctx.plan, model).pks.add(pk);\n}\n\nfunction referencedFields(config: GeneratedCacheConfig, model: string): Set<string> {\n const fields = new Set<string>();\n for (const relations of Object.values(config.relationGraph)) {\n for (const relation of relations) {\n if (relation.targetModel === model && relation.localFields.length > 0) {\n for (const field of relation.foreignFields) fields.add(field);\n }\n }\n }\n return fields;\n}\n\nfunction touchReferencing(ctx: PlanContext, model: string, seen = new Set<string>()): void {\n if (seen.has(model)) return;\n seen.add(model);\n for (const [owner, relations] of Object.entries(ctx.config.relationGraph)) {\n const references = relations.some((relation) => relation.targetModel === model && relation.localFields.length > 0);\n if (!references) continue;\n touchWide(ctx, owner);\n touchReferencing(ctx, owner, seen);\n }\n}\n\nfunction touchReferencingIfKeyChanges(ctx: PlanContext, model: string, data: unknown): void {\n if (!isPlainRecord(data)) return;\n const referenced = referencedFields(ctx.config, model);\n if (Object.keys(data).some((field) => referenced.has(field))) touchReferencing(ctx, model);\n}\n\nconst asItems = (value: unknown): unknown[] => (Array.isArray(value) ? value : [value]);\n\nconst ONE_TO_ONE_REPARENTING_OPS = new Set([\"connect\", \"connectOrCreate\", \"create\", \"upsert\"]);\n\nconst FOREIGN_KEY_CHANGING_OPS = new Set([\"connect\", \"connectOrCreate\", \"create\", \"delete\", \"disconnect\", \"set\", \"upsert\"]);\n\nconst overlaps = (fields: string[], referenced: Set<string>): boolean => fields.some((field) => referenced.has(field));\n\nfunction widenIfForeignKeyReferenced(ctx: PlanContext, model: string, relation: RelationInfo): void {\n if (overlaps(relation.localFields, referencedFields(ctx.config, model))) touchReferencing(ctx, model);\n const opposite = (ctx.config.relationGraph[relation.targetModel] ?? []).find(\n (candidate) => candidate !== relation && candidate.relationName !== undefined && candidate.relationName === relation.relationName,\n );\n if (opposite && overlaps(opposite.localFields, referencedFields(ctx.config, relation.targetModel))) {\n touchReferencing(ctx, relation.targetModel);\n }\n}\n\nfunction nestedWrites(ctx: PlanContext, model: string, data: unknown, depth: number): void {\n if (!isPlainRecord(data)) return;\n for (const relation of ctx.config.relationGraph[model] ?? []) {\n const ops = data[relation.fieldName];\n if (!isPlainRecord(ops)) continue;\n const target = relation.targetModel;\n if (depth >= MAX_NESTED_WRITE_DEPTH) {\n ctx.plan.all = true;\n return;\n }\n touchWrite(ctx, target);\n const recurse = (value: unknown) => nestedWrites(ctx, target, value, depth + 1);\n for (const [op, value] of Object.entries(ops)) {\n const items = asItems(value);\n if (relation.oneToOne === true && ONE_TO_ONE_REPARENTING_OPS.has(op)) {\n touchWide(ctx, target);\n touchWide(ctx, model);\n }\n if (FOREIGN_KEY_CHANGING_OPS.has(op)) widenIfForeignKeyReferenced(ctx, model, relation);\n switch (op) {\n case \"create\":\n items.forEach(recurse);\n break;\n case \"createMany\":\n break;\n case \"connect\":\n items.forEach((item) => touchEntity(ctx, target, item));\n break;\n case \"connectOrCreate\":\n for (const item of items) {\n touchEntity(ctx, target, isPlainRecord(item) ? item.where : undefined);\n if (isPlainRecord(item)) recurse(item.create);\n }\n break;\n case \"disconnect\":\n items.forEach((item) => (isPlainRecord(item) ? touchEntity(ctx, target, item) : touchWide(ctx, target)));\n break;\n case \"delete\":\n items.forEach((item) => (isPlainRecord(item) ? touchEntity(ctx, target, item) : touchWide(ctx, target)));\n touchReferencing(ctx, target);\n break;\n case \"deleteMany\":\n touchWide(ctx, target);\n touchReferencing(ctx, target);\n break;\n case \"update\":\n case \"upsert\":\n for (const item of items) {\n const hasWhere = isPlainRecord(item) && \"where\" in item;\n if (hasWhere) touchEntity(ctx, target, item.where);\n else touchWide(ctx, target);\n const payloads = isPlainRecord(item) ? [item.data, item.create, item.update, hasWhere ? undefined : item] : [];\n for (const payload of payloads) {\n touchReferencingIfKeyChanges(ctx, target, payload);\n recurse(payload);\n }\n }\n break;\n default:\n touchWide(ctx, target);\n for (const item of items) if (isPlainRecord(item)) touchReferencingIfKeyChanges(ctx, target, item.data);\n }\n }\n }\n}\n\nexport function planWrite(config: GeneratedCacheConfig, model: string, operation: string, args: unknown): WritePlan {\n const ctx: PlanContext = { config, plan: { all: false, touched: new Map() } };\n const input = isPlainRecord(args) ? args : {};\n touchWrite(ctx, model);\n switch (operation) {\n case \"create\":\n nestedWrites(ctx, model, input.data, 0);\n break;\n case \"createMany\":\n case \"createManyAndReturn\":\n break;\n case \"update\":\n touchEntity(ctx, model, input.where);\n touchReferencingIfKeyChanges(ctx, model, input.data);\n nestedWrites(ctx, model, input.data, 0);\n break;\n case \"upsert\":\n touchEntity(ctx, model, input.where);\n touchReferencingIfKeyChanges(ctx, model, input.update);\n nestedWrites(ctx, model, input.create, 0);\n nestedWrites(ctx, model, input.update, 0);\n break;\n case \"delete\":\n touchEntity(ctx, model, input.where);\n touchReferencing(ctx, model);\n break;\n case \"deleteMany\":\n touchWide(ctx, model);\n touchReferencing(ctx, model);\n break;\n default:\n touchWide(ctx, model);\n touchReferencingIfKeyChanges(ctx, model, input.data);\n }\n return ctx.plan;\n}\n\nexport function planFences(plan: WritePlan): string[] {\n if (plan.all) return [GLOBAL_FENCE];\n const fences: string[] = [];\n for (const [model, { pks, wide }] of plan.touched) {\n fences.push(writeFence(model));\n if (wide || pks.size > MAX_ENTITY_FENCES_PER_MODEL) fences.push(modelFence(model));\n else for (const pk of pks) fences.push(entityFence(model, pk));\n }\n return fences;\n}\n\nexport function rawWritePlanFences(config: GeneratedCacheConfig, target: InvalidationTarget): string[] {\n if (\"all\" in target) return [GLOBAL_FENCE];\n const ctx: PlanContext = { config, plan: { all: false, touched: new Map() } };\n const known = new Set(config.modelNames);\n const models = \"models\" in target ? target.models : target.entities.map(({ model }) => model);\n const unknown = models.filter((model) => !known.has(model));\n if (unknown.length > 0) throw new TypeError(`cache invalidation: unknown models ${unknown.join(\", \")}`);\n if (\"models\" in target) target.models.forEach((model) => touchWide(ctx, model));\n else {\n for (const { model, pk } of target.entities) {\n const fields = pkFieldsOf(config, model);\n const encoded = pk.length === fields.length ? pkFromRow(Object.fromEntries(fields.map((field, i) => [field, pk[i]])), fields) : null;\n if (encoded === null) touchWide(ctx, model);\n else touch(ctx.plan, model).pks.add(encoded);\n }\n }\n models.forEach((model) => touchReferencing(ctx, model));\n return planFences(ctx.plan);\n}\n","import type { CacheExtensionOptions, CacheShape, ResolvedShape } from \"./types\";\n\nimport { MAX_SHAPE_TTL_SECONDS } from \"./limits\";\n\nexport const DEFAULT_SHAPE: ResolvedShape = { freshTtlSeconds: 3600, negativeTtlSeconds: 600, softTtlRatio: 0.8 };\n\nfunction validate(label: string, shape: CacheShape | undefined): void {\n if (!shape) return;\n for (const field of [\"freshTtlSeconds\", \"negativeTtlSeconds\"] as const) {\n const value = shape[field];\n if (value !== undefined && !(Number.isFinite(value) && value > 0 && value <= MAX_SHAPE_TTL_SECONDS)) {\n throw new TypeError(`cache shape ${label}: ${field} must be in (0, ${MAX_SHAPE_TTL_SECONDS}]`);\n }\n }\n const ratio = shape.softTtlRatio;\n if (ratio !== undefined && !(Number.isFinite(ratio) && ratio > 0 && ratio <= 1)) {\n throw new TypeError(`cache shape ${label}: softTtlRatio must be in (0, 1]`);\n }\n}\n\nexport function validateShapes(shape: CacheExtensionOptions[\"shape\"]): void {\n validate(\"default\", shape?.default);\n for (const [model, value] of Object.entries(shape?.byModel ?? {})) validate(`byModel.${model}`, value);\n}\n\nexport function resolveShape(shape: CacheExtensionOptions[\"shape\"], model: string): ResolvedShape {\n const pick = <K extends keyof ResolvedShape>(field: K): ResolvedShape[K] =>\n shape?.byModel?.[model]?.[field] ?? shape?.default?.[field] ?? DEFAULT_SHAPE[field];\n return { freshTtlSeconds: pick(\"freshTtlSeconds\"), negativeTtlSeconds: pick(\"negativeTtlSeconds\"), softTtlRatio: pick(\"softTtlRatio\") };\n}\n","import type { RelationInfo } from \"./types\";\n\nimport { isPlainRecord } from \"./pk\";\n\nexport const MAX_RELATION_DEPTH = 10;\n\nconst RELATION_FILTER_KEYS = [\"some\", \"every\", \"none\", \"is\", \"isNot\"];\nconst LOGICAL_KEYS = new Set([\"AND\", \"OR\", \"NOT\"]);\n\ntype Graph = Record<string, RelationInfo[]>;\n\nexport interface ReadTargets {\n models: Set<string>;\n relational: boolean;\n}\n\ninterface Walk {\n graph: Graph;\n out: ReadTargets;\n}\n\nfunction relationsOf(graph: Graph, model: string): Map<string, RelationInfo> {\n return new Map((graph[model] ?? []).map((relation) => [relation.fieldName, relation]));\n}\n\nfunction reach(walk: Walk, relation: RelationInfo): void {\n walk.out.models.add(relation.targetModel);\n walk.out.relational = true;\n}\n\nfunction walkFilter(walk: Walk, model: string, value: unknown, depth: number): boolean {\n if (depth > MAX_RELATION_DEPTH) return false;\n if (Array.isArray(value)) return value.every((item) => walkFilter(walk, model, item, depth + 1));\n if (!isPlainRecord(value)) return true;\n const relations = relationsOf(walk.graph, model);\n for (const [key, nested] of Object.entries(value)) {\n if (LOGICAL_KEYS.has(key)) {\n if (!walkFilter(walk, model, nested, depth + 1)) return false;\n continue;\n }\n const relation = relations.get(key);\n if (!relation) continue;\n reach(walk, relation);\n if (!isPlainRecord(nested)) continue;\n const wrapped = RELATION_FILTER_KEYS.filter((wrapper) => wrapper in nested);\n const inner = wrapped.length > 0 ? wrapped.map((wrapper) => nested[wrapper]) : [nested];\n if (!inner.every((item) => walkFilter(walk, relation.targetModel, item, depth + 1))) return false;\n }\n return true;\n}\n\nfunction walkCount(walk: Walk, model: string, count: unknown, depth: number): boolean {\n if (count === undefined) return true;\n const select = isPlainRecord(count) && isPlainRecord(count.select) ? count.select : null;\n for (const relation of walk.graph[model] ?? []) {\n const selected = select ? select[relation.fieldName] : count;\n if (!selected) continue;\n reach(walk, relation);\n if (isPlainRecord(selected) && !walkFilter(walk, relation.targetModel, selected.where, depth + 1)) return false;\n }\n return true;\n}\n\nfunction walkArgs(walk: Walk, model: string, args: unknown, depth: number): boolean {\n walk.out.models.add(model);\n if (!isPlainRecord(args)) return true;\n for (const filter of [args.where, args.orderBy, args.cursor]) {\n if (!walkFilter(walk, model, filter, depth)) return false;\n }\n for (const projection of [args.include, args.select]) {\n if (!isPlainRecord(projection)) continue;\n if (!walkCount(walk, model, projection._count, depth)) return false;\n for (const relation of walk.graph[model] ?? []) {\n const nested = projection[relation.fieldName];\n if (!nested) continue;\n reach(walk, relation);\n if (!walkArgs(walk, relation.targetModel, nested, depth + 1)) return false;\n }\n }\n return true;\n}\n\nexport function readTargets(graph: Graph, model: string, args: unknown): null | ReadTargets {\n const walk: Walk = { graph, out: { models: new Set(), relational: false } };\n return walkArgs(walk, model, args, 0) ? walk.out : null;\n}\n","import type { CacheExtensionOptions, InvalidationTarget, ReadResponse } from \"./types\";\n\nimport { decode, encode, sha256Hex, stableStringify } from \"./codec\";\nimport { entityFence, GLOBAL_FENCE, modelFence, writeFence } from \"./fences\";\nimport {\n CONFIG_FORMAT,\n MAX_GENERATION_LENGTH,\n MAX_LEASE_MS,\n MAX_LOCK_MS,\n MAX_VALUE_BYTES,\n PLANNER_VERSION,\n TTL_JITTER_RATIO,\n} from \"./limits\";\nimport { planFences, planWrite, rawWritePlanFences, READ_OPERATIONS, WRITE_OPERATIONS } from \"./plan\";\nimport { isPlainRecord, pkFromWhere } from \"./pk\";\nimport { resolveShape, validateShapes } from \"./shape\";\nimport { readTargets } from \"./targets\";\n\nexport class CacheUnavailableError extends Error {\n constructor(cause: unknown) {\n super(\"cache coordinator unavailable; the write was not executed\", { cause });\n this.name = \"CacheUnavailableError\";\n }\n}\n\nexport const DEFAULT_FILL_POLL_DELAYS_MS = [20, 40, 80, 160, 320, 640];\nexport const DEFAULT_LOCK_MS = 30_000;\nexport const DEFAULT_LEASE_MS = 60_000;\nexport const DEFAULT_MAX_VALUE_BYTES = 1_500_000;\n\ntype Query = (args: unknown) => Promise<unknown>;\n\ninterface OperationParams {\n __internalParams?: unknown;\n args: unknown;\n model?: string;\n operation: string;\n query: Query;\n}\n\ninterface ReadContext {\n args: unknown;\n entityFences: string[] | null;\n fences: string[];\n key: string;\n model: string;\n operation: string;\n query: Query;\n}\n\nconst sleep = (ms: number): Promise<void> => new Promise((resolve) => setTimeout(resolve, ms));\n\nconst pickEpochs = (epochs: Record<string, number>, fences: string[]): Record<string, number> =>\n Object.fromEntries(fences.map((fence) => [fence, epochs[fence] ?? 0]));\n\nconst isNegative = (value: unknown): boolean => value === null || (Array.isArray(value) && value.length === 0);\n\nconst sum = (values: number[]): number => values.reduce((total, value) => total + value, 0);\n\nfunction internalParams(params: OperationParams): { dataPath: unknown[]; inBatch: boolean } {\n const internal = isPlainRecord(params.__internalParams) ? params.__internalParams : {};\n const transaction = internal.transaction;\n return {\n dataPath: Array.isArray(internal.dataPath) ? internal.dataPath : [],\n inBatch: isPlainRecord(transaction) && transaction.kind === \"batch\",\n };\n}\n\nfunction validateOptions(options: CacheExtensionOptions): void {\n if (options.config.configFormat !== CONFIG_FORMAT) {\n throw new TypeError(\n `cache extension: generated config format ${String(options.config.configFormat)} does not match ${CONFIG_FORMAT}; run prisma generate`,\n );\n }\n const inRange = (value: number | undefined, max: number) => value === undefined || (Number.isFinite(value) && value > 0 && value <= max);\n const problems = [\n !inRange(options.lockMs, MAX_LOCK_MS) && `lockMs must be in (0, ${MAX_LOCK_MS}]`,\n !inRange(options.leaseMs, MAX_LEASE_MS) && `leaseMs must be in (0, ${MAX_LEASE_MS}]`,\n !inRange(options.maxValueBytes, MAX_VALUE_BYTES) && `maxValueBytes must be in (0, ${MAX_VALUE_BYTES}]`,\n options.fillPollDelaysMs?.some((delay) => !(Number.isFinite(delay) && delay >= 0)) && \"fillPollDelaysMs must be non-negative\",\n options.excludeModels?.some((model) => !options.config.modelNames.includes(model)) && \"excludeModels names an unknown model\",\n options.config.hasDecimalFields &&\n !options.decimal &&\n \"decimal is required because the schema has Decimal fields (pass Prisma.Decimal)\",\n options.generation !== undefined &&\n !(options.generation.length > 0 && options.generation.length <= MAX_GENERATION_LENGTH) &&\n `generation must be 1..${MAX_GENERATION_LENGTH} characters`,\n ].filter((problem): problem is string => typeof problem === \"string\");\n if (problems.length > 0) throw new TypeError(`cache extension: ${problems.join(\"; \")}`);\n validateShapes(options.shape);\n}\n\nexport function createCacheExtension(options: CacheExtensionOptions) {\n validateOptions(options);\n const { config, store, unsafeTestHooks: hooks } = options;\n const enabled = options.enabled ?? true;\n const excluded = new Set(options.excludeModels ?? []);\n const scope = options.scope ?? \"\";\n const generation = `${PLANNER_VERSION}/${config.cacheVersion}/${options.generation ?? \"\"}`;\n const pollDelays = options.fillPollDelaysMs ?? DEFAULT_FILL_POLL_DELAYS_MS;\n const lockMs = options.lockMs ?? DEFAULT_LOCK_MS;\n const leaseMs = options.leaseMs ?? DEFAULT_LEASE_MS;\n const maxValueBytes = options.maxValueBytes ?? DEFAULT_MAX_VALUE_BYTES;\n const report = (error: unknown, context: string): void => options.onError?.(error, context);\n\n const isCacheable = (model: string): boolean =>\n enabled && config.cacheableByModel[model] === true && !excluded.has(model);\n\n function readContext(model: string, operation: string, args: unknown, query: Query, key: string): ReadContext | null {\n const targets = readTargets(config.relationGraph, model, args);\n if (!targets || [...targets.models].some((target) => !isCacheable(target))) return null;\n const rootPk = operation.startsWith(\"findUnique\")\n ? pkFromWhere(\n isPlainRecord(args) ? args.where : undefined,\n config.primaryKeyFieldsByModel[model] ?? [\"id\"],\n config.primaryKeyNameByModel[model],\n )\n : null;\n const base = [GLOBAL_FENCE, modelFence(model)];\n const entity = rootPk === null ? null : entityFence(model, rootPk);\n const fences = [...base, ...[...targets.models].map(writeFence), ...(entity ? [entity] : [])];\n const entityFences = entity && !targets.relational ? [...base, entity] : null;\n return { args, entityFences, fences, key, model, operation, query };\n }\n\n const release = (key: string, lockToken: string): Promise<void> =>\n store.release({ key, lockToken }).catch((error) => report(error, \"release\"));\n\n function serialize(value: unknown): null | string {\n try {\n const serialized = JSON.stringify(encode(value));\n if (new TextEncoder().encode(serialized).byteLength <= maxValueBytes) return serialized;\n report(new Error(`cache value exceeds ${maxValueBytes} bytes`), \"serialize\");\n } catch (error) {\n report(error, \"serialize\");\n }\n return null;\n }\n\n async function fill(ctx: ReadContext, lockToken: string, epochs: Record<string, number>): Promise<unknown> {\n let value: unknown;\n try {\n value = await ctx.query(ctx.args);\n await hooks?.afterFillQuery?.();\n } catch (error) {\n await release(ctx.key, lockToken);\n throw error;\n }\n const serialized = serialize(value);\n if (serialized === null) {\n await release(ctx.key, lockToken);\n return value;\n }\n const shape = resolveShape(options.shape, ctx.model);\n const baseTtl = ctx.operation !== \"count\" && isNegative(value) ? shape.negativeTtlSeconds : shape.freshTtlSeconds;\n const ttlMs = Math.round(baseTtl * 1000 * (1 + Math.random() * TTL_JITTER_RATIO));\n const snapshotFences = ctx.entityFences && isPlainRecord(value) ? ctx.entityFences : ctx.fences;\n try {\n const result = await store.write({\n key: ctx.key,\n lockToken,\n snapshot: pickEpochs(epochs, snapshotFences),\n softTtlMs: Math.round(ttlMs * shape.softTtlRatio),\n ttlMs,\n value: serialized,\n });\n if (!result.ok) report(new Error(`cache write rejected: ${result.reason}`), \"write\");\n } catch (error) {\n report(error, \"write\");\n await release(ctx.key, lockToken);\n }\n return value;\n }\n\n async function scheduleRefresh(ctx: ReadContext, response: Extract<ReadResponse, { kind: \"hit\" }>): Promise<void> {\n const token = response.refreshToken;\n if (!token) return;\n if (!options.waitUntil) return release(ctx.key, token);\n try {\n options.waitUntil(fill(ctx, token, response.epochs).catch((error) => report(error, \"refresh\")));\n } catch (error) {\n report(error, \"waitUntil\");\n await release(ctx.key, token);\n }\n }\n\n async function handleRead(model: string, operation: string, args: unknown, query: Query, dataPath: unknown[]): Promise<unknown> {\n let key: string;\n try {\n const identity = [PLANNER_VERSION, config.cacheVersion, scope, model, operation, dataPath, args ?? null];\n key = `${model}:${await sha256Hex(stableStringify(identity))}`;\n } catch (error) {\n report(error, \"key\");\n return query(args);\n }\n const ctx = readContext(model, operation, args, query, key);\n if (!ctx) return query(args);\n for (let attempt = 0; ; attempt++) {\n let response: ReadResponse;\n try {\n response = await store.read({ fences: ctx.fences, generation, key, lockMs, refresh: !!options.waitUntil });\n } catch (error) {\n report(error, \"read\");\n return query(args);\n }\n if (response.kind === \"hit\") {\n let value: unknown;\n try {\n value = decode(JSON.parse(response.value), options.decimal);\n } catch (error) {\n report(error, \"decode\");\n if (response.refreshToken) await release(key, response.refreshToken);\n return query(args);\n }\n await scheduleRefresh(ctx, response);\n return value;\n }\n if (response.lockToken) return fill(ctx, response.lockToken, response.epochs);\n const delay = pollDelays[attempt];\n const holderTooSlow = response.lockHeldForMs !== null && response.lockHeldForMs > sum(pollDelays);\n if (response.pending || delay === undefined || holderTooSlow) return query(args);\n await sleep(delay);\n }\n }\n\n async function withLease<T>(fences: string[], run: () => Promise<T>): Promise<T> {\n const token = crypto.randomUUID();\n try {\n await store.beginWrite({ fences, generation, leaseMs, token });\n } catch (error) {\n report(error, \"beginWrite\");\n await endWrite(token, fences);\n throw new CacheUnavailableError(error);\n }\n try {\n await hooks?.afterBeginWrite?.();\n return await run();\n } finally {\n if (!hooks?.skipEndWrite?.()) await endWrite(token, fences);\n }\n }\n\n async function endWrite(token: string, fences: string[]): Promise<void> {\n await store.endWrite({ fences, token }).catch((error) => report(error, \"endWrite\"));\n }\n\n const targetFences = (target: InvalidationTarget): string[] => rawWritePlanFences(config, target);\n\n return {\n client: {\n async $cacheInvalidate(target: InvalidationTarget): Promise<void> {\n await store.invalidate(targetFences(target));\n },\n async $cacheRawWrite<T>(target: InvalidationTarget, run: () => Promise<T>): Promise<T> {\n const fences = targetFences(target);\n return enabled ? withLease(fences, run) : run();\n },\n },\n name: \"dee-wan-cache\",\n query: {\n $allModels: {\n $allOperations(params: OperationParams): Promise<unknown> {\n const { args, model, operation, query } = params;\n if (!model) return query(args);\n const { dataPath, inBatch } = internalParams(params);\n if (READ_OPERATIONS.has(operation) && isCacheable(model) && !inBatch) {\n return handleRead(model, operation, args, query, dataPath);\n }\n if (WRITE_OPERATIONS.has(operation) && enabled) {\n return withLease(planFences(planWrite(config, model, operation, args)), () => query(args));\n }\n return query(args);\n },\n },\n },\n };\n}\n"]}
@@ -0,0 +1,120 @@
1
+ interface RelationInfo {
2
+ fieldName: string;
3
+ foreignFields: string[];
4
+ isList: boolean;
5
+ localFields: string[];
6
+ oneToOne: boolean;
7
+ relationName?: string;
8
+ targetModel: string;
9
+ }
10
+ interface GeneratedCacheConfig {
11
+ cacheVersion: string;
12
+ cacheableByModel: Record<string, boolean>;
13
+ configFormat: number;
14
+ hasDecimalFields: boolean;
15
+ modelNames: string[];
16
+ primaryKeyFieldsByModel: Record<string, string[]>;
17
+ primaryKeyNameByModel: Record<string, string>;
18
+ relationGraph: Record<string, RelationInfo[]>;
19
+ }
20
+ type ReadResponse = {
21
+ epochs: Record<string, number>;
22
+ kind: "hit";
23
+ refreshToken: null | string;
24
+ value: string;
25
+ } | {
26
+ epochs: Record<string, number>;
27
+ kind: "miss";
28
+ lockHeldForMs: null | number;
29
+ lockToken: null | string;
30
+ pending: boolean;
31
+ };
32
+ interface ReadRequest {
33
+ fences: string[];
34
+ generation?: string;
35
+ key: string;
36
+ lockMs: number;
37
+ refresh: boolean;
38
+ }
39
+ interface WriteRequest {
40
+ key: string;
41
+ lockToken: string;
42
+ snapshot: Record<string, number>;
43
+ softTtlMs: number;
44
+ ttlMs: number;
45
+ value: string;
46
+ }
47
+ interface ReleaseRequest {
48
+ key: string;
49
+ lockToken: string;
50
+ }
51
+ type WriteResult = {
52
+ ok: true;
53
+ } | {
54
+ ok: false;
55
+ reason: "fence" | "full" | "invalid" | "lock";
56
+ };
57
+ interface BeginWriteRequest {
58
+ fences: string[];
59
+ generation?: string;
60
+ leaseMs: number;
61
+ token: string;
62
+ }
63
+ interface EndWriteRequest {
64
+ fences: string[];
65
+ token: string;
66
+ }
67
+ interface CacheStore {
68
+ beginWrite(request: BeginWriteRequest): Promise<void>;
69
+ endWrite(request: EndWriteRequest): Promise<void>;
70
+ invalidate(fences: string[]): Promise<void>;
71
+ read(request: ReadRequest): Promise<ReadResponse>;
72
+ release(request: ReleaseRequest): Promise<void>;
73
+ write(request: WriteRequest): Promise<WriteResult>;
74
+ }
75
+ interface CacheShape {
76
+ freshTtlSeconds?: number;
77
+ negativeTtlSeconds?: number;
78
+ softTtlRatio?: number;
79
+ }
80
+ interface CacheTestHooks {
81
+ afterBeginWrite?: () => Promise<void>;
82
+ afterFillQuery?: () => Promise<void>;
83
+ skipEndWrite?: () => boolean;
84
+ }
85
+ interface DecimalConstructor {
86
+ new (value: string): unknown;
87
+ }
88
+ interface CacheExtensionOptions {
89
+ config: GeneratedCacheConfig;
90
+ decimal?: DecimalConstructor;
91
+ enabled?: boolean;
92
+ excludeModels?: string[];
93
+ fillPollDelaysMs?: number[];
94
+ generation?: string;
95
+ leaseMs?: number;
96
+ lockMs?: number;
97
+ maxValueBytes?: number;
98
+ onError?: (error: unknown, context: string) => void;
99
+ scope?: string;
100
+ shape?: {
101
+ byModel?: Record<string, CacheShape>;
102
+ default?: CacheShape;
103
+ };
104
+ store: CacheStore;
105
+ /** Test-only fault injection. Never set in production: `skipEndWrite` disables invalidation. */
106
+ unsafeTestHooks?: CacheTestHooks;
107
+ waitUntil?: (promise: Promise<unknown>) => void;
108
+ }
109
+ type InvalidationTarget = {
110
+ all: true;
111
+ } | {
112
+ entities: Array<{
113
+ model: string;
114
+ pk: Array<number | string>;
115
+ }>;
116
+ } | {
117
+ models: string[];
118
+ };
119
+
120
+ export type { BeginWriteRequest as B, CacheStore as C, DecimalConstructor as D, EndWriteRequest as E, GeneratedCacheConfig as G, InvalidationTarget as I, ReadRequest as R, WriteRequest as W, ReadResponse as a, WriteResult as b, ReleaseRequest as c, CacheExtensionOptions as d, CacheShape as e, CacheTestHooks as f, RelationInfo as g };
@@ -0,0 +1,242 @@
1
+ # Cache Contract — Cloudflare
2
+
3
+ Status: active. Store: one SQLite-backed Durable Object (DO) per coordinator name.
4
+
5
+ ## Goal
6
+
7
+ Cache Prisma reads on Workers + D1. Never serve pre-write data after a committed write in the same
8
+ request flow. Fail to the database, never to stale cache.
9
+
10
+ ## Store choice
11
+
12
+ - Epochs, leases, fill locks and values live in ONE Durable Object.
13
+ - Reason: check-and-write must be atomic. DO storage is transactional and strongly consistent.
14
+ - Cache API rejected: one data center only, `cache.delete` is local, no compare-and-set.
15
+ - KV rejected: eventually consistent (60 s+), 1 write/s per key.
16
+ - One DO has a soft limit of 1,000 requests/s. Every cached read and every write calls it.
17
+ - One DO has one location. Hit latency = round trip to it. Coordinator far from users: hits slower than
18
+ a nearby D1 read (measured 171–210 ms vs 48–103 ms). Place it near most traffic (`locationHint`).
19
+ - Coordinator name is required. Keys do not include the database. Two databases with the same schema
20
+ behind one coordinator name share entries: data leak.
21
+ - Exactly one coordinator name per D1 database. Two coordinators over the same data never see each
22
+ other's writes: stale reads.
23
+
24
+ ## Fences
25
+
26
+ ```text
27
+ g global
28
+ m:<Model> model-wide
29
+ w:<Model> any write to model
30
+ e:<Model>:<pk> one entity
31
+ ```
32
+
33
+ - Fence = named row in the DO. Missing = 0. Bump = next value of one DO-wide sequence. A value is
34
+ never reused, so a deleted row can never make an old snapshot match again.
35
+ - Entity fence rows (`e:`) are collected when: last bump older than 10 min (2 × max lock), no cached
36
+ entry references it, no lease names it.
37
+ - Collection pages through `e:` rows in `(updated_at, fence)` order with a stored cursor, at most 100
38
+ rows per call, one indexed query that also checks references. The cursor returns to the start when a
39
+ batch comes back short.
40
+ - Deleting rows raises a watermark to the highest epoch deleted. A fill whose snapshot has a missing
41
+ fence (0) and whose lock sequence is below the watermark is rejected. Only a row bumped after the lock
42
+ can raise it that high, so this holds even if the clock moves backwards.
43
+
44
+ ## Read
45
+
46
+ ```text
47
+ batch $transaction([...]) -> no cache (Prisma waits for every batch member to reach the engine)
48
+ targets = root + every model reached by include, select, _count, relation filter, orderBy, cursor
49
+ relation depth > 10 -> no cache
50
+ any target model opted out (@cache.skip, exclude, excludeModels) -> no cache
51
+ key = sha256(planner version, cacheVersion, scope, model, operation, fluent data path, args)
52
+ DO.read(key, fences = g, m:root, w:each target, e:root:pk when findUnique by pk)
53
+ hit -> entry snapshot equals current epochs -> return value
54
+ miss -> fill lock granted when no open lease on requested fences and no live fill lock
55
+ lock -> query D1 -> DO.write(key, lock, snapshot) -> return value
56
+ lock held by a fill -> poll 20,40,80,160,320,640 ms; stop at once and query D1 when the holder has
57
+ held it longer than the whole poll budget
58
+ lease open -> query D1, no write
59
+ DO error -> query D1
60
+ ```
61
+
62
+ Snapshot:
63
+
64
+ ```text
65
+ findUnique by pk, no relation walked, non-null result -> g, m:root, e:root:pk
66
+ self-relations count as walked
67
+ everything else (lists, counts, nulls, relations) -> all requested fences
68
+ ```
69
+
70
+ - Reads never sweep. A hit writes nothing unless it takes a refresh lock or sees a new generation.
71
+ - A refresh lock (SWR) yields to a fill once the entry is gone; the refill then loses its lock.
72
+ - Write check: lock token must match and be live; snapshot must equal current epochs.
73
+ - Invalid or expired entries found on read are deleted.
74
+
75
+ ## Write
76
+
77
+ ```text
78
+ plan fences from args (no result needed)
79
+ DO.beginWrite(client token): bump plan fences, open lease (default 60 s)
80
+ beginWrite fails -> send endWrite with the same token, throw CacheUnavailableError, D1 write NOT run
81
+ run D1 write
82
+ DO.endWrite (always, success or error): bump again, close lease, delete up to 500 entries under the
83
+ fences, sweep
84
+ ```
85
+
86
+ - Begin bump + lease: no reader serves or caches pre-write state while the write runs.
87
+ - End bump: a reader that filled after lease expiry but before commit loses.
88
+ - End lost and lease open: readers skip caching until the lease expires.
89
+ - End lost and lease expired before commit: a reader can cache pre-commit data until that entry's TTL
90
+ (default fresh TTL 1 h). Only `onError` reports the lost end.
91
+ - Retryable DO errors (`retryable` and not `overloaded`) on begin, end and invalidate are retried by the
92
+ store, 3 attempts total, fresh stub, backoff. Reads and fill writes are not retried.
93
+
94
+ Plan rules:
95
+
96
+ ```text
97
+ create / createMany* w:root
98
+ update / upsert / delete, where has pk e:root:pk + w:root
99
+ same, no pk in where m:root + w:root
100
+ updateMany / deleteMany m:root + w:root
101
+ delete* on X m + w of every model with FK to X, transitive
102
+ update data touches a referenced field same widening
103
+ nested connect/disconnect/delete/update/upsert/connectOrCreate by pk -> entity, else model-wide
104
+ nested create/createMany w
105
+ nested set / unknown op model-wide
106
+ nested updateMany changing a referenced key widen referencing models
107
+ nested op changing an FK column that another FK references widen referencing models
108
+ one-to-one connect/create/connectOrCreate/upsert m + w of both sides
109
+ more than 100 entities of one model model-wide
110
+ named compound key (@@id(name: ...)) matched by name
111
+ nesting depth >= 5 g
112
+ ```
113
+
114
+ ## Keys and scope
115
+
116
+ - Key includes `scope`. A client extended per caller passes a scope naming everything the caller
117
+ changes about results without changing arguments.
118
+ - Fences are shared across scopes: data is shared.
119
+ - Fluent calls (`findUnique().posts()`) and direct calls with the same arguments get different keys.
120
+ - Class-instance arguments (Prisma `DbNull`, `JsonNull`, `AnyNull`) hash with their class string.
121
+ - Own `__proto__` keys in arguments and values are kept.
122
+ - Client construction options that change results (for example global `omit`) are not in the key.
123
+ Clients built with different options pass different scopes.
124
+ - Prisma 6.19.3: first applied `$extends` is outermost (proven in `test/workerd`).
125
+ - Required order: guard first, cache second (`base.$extends(guard).$extends(cache)`). Guard runs on
126
+ every read including hits; its rewritten arguments are in the key.
127
+
128
+ ## Generation
129
+
130
+ - The extension always sends `planner version / cacheVersion / generation option`.
131
+ - DO stores the last value. A different value bumps `g` once. No entries are deleted: they fail the
132
+ snapshot check and expire or get evicted.
133
+ - A schema change (new `cacheVersion`) or a package release with new planning rules therefore
134
+ invalidates every entry on first contact.
135
+ - Every Worker bound to one coordinator must send the same value. Different values alternating (two
136
+ scripts on different versions, a gradual deployment) bump `g` on every switch: correct, cache cold.
137
+ - Option `generation` (1..256 chars): change it when turning `enabled` back on and after any data
138
+ change made outside the cache.
139
+ - A disabled version running beside an enabled one is unsafe: its writes are not fenced.
140
+
141
+ ## Storage
142
+
143
+ - Schema versioned in `schema_version`. Migrations run in the DO constructor, all pending ones in one
144
+ transaction. Storage newer than the code throws on every call, so every Prisma write fails with
145
+ `CacheUnavailableError`. Roll forward, never back, across a schema change.
146
+ - Every coordinator call runs in one storage transaction (`transactionSync`).
147
+ - Stored entry bytes are counted. Default budget 1 GiB. A fill write that would exceed it evicts the
148
+ entries closest to expiry (up to 1,000 per write); if still over, the write returns `full`.
149
+ - Sweeps run on fill writes, end of write and invalidate: up to 50 expired entries, leases and locks,
150
+ then fence collection.
151
+ - Limits enforced on every call: key 1..1024 chars, at most 5,000 fences of up to 512 chars, generation
152
+ up to 512 chars, lock up to 5 min, lease up to 10 min. Fill writes also refuse values over 1,900,000
153
+ bytes and TTLs over 366 days (`invalid`). Malformed requests throw.
154
+ - Requests may gain fields in minor releases, never lose or retype them.
155
+ - Generated config carries `configFormat`. The extension refuses another format and asks to run
156
+ `prisma generate`.
157
+ - Not handled: a `beginWrite` delivered after the client gave up and sent end. Its lease blocks caching
158
+ for those fences until it expires (default 60 s). It cannot serve stale data. Whether Cloudflare can
159
+ deliver such a call late is not known.
160
+
161
+ ## Raw writes
162
+
163
+ Raw SQL bypasses the extension. Use one:
164
+
165
+ - `$cacheRawWrite(target, run)`: lease + bumps around `run`. Preferred.
166
+ - `$cacheInvalidate(target)`: bump + delete after the fact. The window between commit and call can
167
+ serve old data. Calls the coordinator even when `enabled` is false.
168
+
169
+ Target: `{ models }`, `{ entities: [{ model, pk: [...] }] }`, `{ all: true }`. Models referencing a
170
+ target through a foreign key are widened. Unknown model names throw. Wrong key arity widens to the model.
171
+
172
+ ## Cost per Prisma call
173
+
174
+ ```text
175
+ cached read, hit 1 DO call
176
+ cached read, miss 1 DO call + D1 queries + 1 DO call (fill write or release)
177
+ cached read, fill lock contended up to 7 DO calls (polls) + D1 queries when the holder is slow
178
+ read in a batch transaction D1 queries only
179
+ non-cacheable read D1 queries only
180
+ write 2 DO calls + D1 queries; each retried up to 3 attempts
181
+ ```
182
+
183
+ - Workers Free plan: 50 subrequests per request; the limits page also lists 1,000 for internal
184
+ services. Whether DO and D1 calls count toward the 50 or the 1,000 is not stated there.
185
+ - Every write moves `w:<Model>`: lists, counts and relation reads of that model are invalidated.
186
+ - Read load and write load share one DO. An overloaded DO refuses writes (`CacheUnavailableError`).
187
+
188
+ ## Options
189
+
190
+ Rejected at construction:
191
+
192
+ - `lockMs` outside (0, 300000]; `leaseMs` outside (0, 600000]; `maxValueBytes` outside (0, 1900000]
193
+ - negative poll delays
194
+ - unknown `excludeModels`
195
+ - shape TTLs outside (0, 28747636] s (366 days minus jitter headroom); `softTtlRatio` outside (0, 1]
196
+ - missing `decimal` when the schema has Decimal fields
197
+ - `generation` longer than 256 chars
198
+ - config of another `configFormat`
199
+
200
+ ## Switches
201
+
202
+ - Generator: every model cacheable. `/// @cache.skip` on a model or `exclude = [...]` opts out.
203
+ - Opted-out models still move fences on write, and reads that include them are not cached.
204
+ - Runtime `enabled: false`: reads and writes bypass the DO (`$cacheInvalidate` still calls it).
205
+
206
+ ## SWR
207
+
208
+ - Entry soft TTL = ttl × softTtlRatio.
209
+ - Hit past soft TTL, `waitUntil` given, no open lease, no live lock -> refresh lock -> refill in
210
+ `waitUntil` with the hit's epochs. Without `waitUntil` the refresh lock is released at once.
211
+ - Refill obeys the normal write check. SWR only refreshes valid entries.
212
+
213
+ ## D1 constraints
214
+
215
+ - Prisma 6.19.3 on D1 rejects interactive `$transaction(async tx => ...)`; the test shows no data change.
216
+ - Batch `$transaction([...])` runs; each query commits alone. Reads in a batch skip the cache; writes are
217
+ fenced one by one.
218
+ - Read replicas through `withSession` "first-unconstrained" can cache lagging data. Not supported.
219
+
220
+ ## From the Redis module
221
+
222
+ Kept: fence/epoch invalidation, entity vs model vs write fences, predicate rules, fill lock
223
+ single-flight, CAS-style write check, explicit raw-write invalidation, raw result shape.
224
+
225
+ Changed: pub/sub and local marks replaced by DO state per request; sorted-set indexes replaced by
226
+ `entry_fences`; PK injection removed; pre-write lease added; cascade widening added;
227
+ `neverInvalidateOn` dropped.
228
+
229
+ Not ported (owner decisions, 2026-09-17): stale shadow (serves pre-write data), Redis adapter,
230
+ warming and repair (depended on the removed hot-query tracker).
231
+
232
+ ## Verify
233
+
234
+ - `npm run test:unit` (Node, `node:sqlite` stand-in for DO SQL): coordinator core, protocol model
235
+ (random interleavings), planning, targets, codec, extension failure paths, store options, generator.
236
+ - `npm run test:workerd` (Miniflare; two Worker scripts sharing D1 and the DO; real Prisma 6.19.3 +
237
+ adapter-d1): invalidation, relations, self-relations, one-to-one, cascade, nested writes, stampede,
238
+ races, leases, scope, raw writes, opt-out, switch, generation, DO unavailable, cross-script
239
+ invalidation, SWR, stored types, batch and interactive transactions, fluent reads, extension order.
240
+ - `npm run test:consumer`: packed tarball in a fresh Worker project: generator bin, types, wrangler
241
+ bundle, fill/hit/invalidation on workerd.
242
+ - Deployed smoke (`test/deployed`, see README): a temporary Worker, D1 and DO on a real account.
package/package.json ADDED
@@ -0,0 +1,95 @@
1
+ {
2
+ "name": "@dee-wan/cache",
3
+ "version": "1.0.1",
4
+ "description": "Prisma read cache for Cloudflare Workers and D1, coordinated by a Durable Object",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "sideEffects": false,
8
+ "engines": {
9
+ "node": ">=20"
10
+ },
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/index.d.ts",
14
+ "import": "./dist/index.js",
15
+ "default": "./dist/index.js"
16
+ },
17
+ "./cloudflare": {
18
+ "types": "./dist/cloudflare/index.d.ts",
19
+ "import": "./dist/cloudflare/index.js",
20
+ "default": "./dist/cloudflare/index.js"
21
+ },
22
+ "./generator": {
23
+ "types": "./dist/generator/config.d.ts",
24
+ "import": "./dist/generator/config.js",
25
+ "default": "./dist/generator/config.js"
26
+ }
27
+ },
28
+ "bin": {
29
+ "dee-wan-cache-generator": "dist/generator/index.js"
30
+ },
31
+ "files": [
32
+ "dist",
33
+ "README.md",
34
+ "docs/*.md",
35
+ "LICENSE"
36
+ ],
37
+ "publishConfig": {
38
+ "access": "public",
39
+ "provenance": true
40
+ },
41
+ "repository": {
42
+ "type": "git",
43
+ "url": "git+https://github.com/dee-wan-cms/cache.git"
44
+ },
45
+ "bugs": {
46
+ "url": "https://github.com/dee-wan-cms/cache/issues"
47
+ },
48
+ "homepage": "https://github.com/dee-wan-cms/cache#readme",
49
+ "scripts": {
50
+ "build": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\" && tsup",
51
+ "typecheck": "npm run test:prepare && tsc --noEmit -p tsconfig.json && tsc -p test/tsconfig.worker.json && tsc -p test/tsconfig.node.json",
52
+ "test": "npm run test:unit && npm run test:workerd",
53
+ "test:unit": "vitest run --config vitest.unit.config.ts",
54
+ "test:workerd": "vitest run --config vitest.workerd.config.ts",
55
+ "prepublishOnly": "npm run build",
56
+ "release": "semantic-release",
57
+ "test:deployed": "vitest run --config vitest.deployed.config.ts",
58
+ "test:prepare": "npm run build && cd test/workerd && prisma generate --schema prisma/schema.prisma",
59
+ "lint": "eslint .",
60
+ "test:consumer": "vitest run --config vitest.consumer.config.ts"
61
+ },
62
+ "dependencies": {
63
+ "@prisma/generator-helper": "~6.19.3"
64
+ },
65
+ "peerDependencies": {
66
+ "@prisma/client": ">=6.19.3 <7"
67
+ },
68
+ "devDependencies": {
69
+ "@cloudflare/workers-types": "^5.20260730.1",
70
+ "@eslint/js": "^9.39.5",
71
+ "@prisma/adapter-d1": "6.19.3",
72
+ "@prisma/client": "6.19.3",
73
+ "@semantic-release/changelog": "^6.0.3",
74
+ "@semantic-release/git": "^10.0.1",
75
+ "@types/node": "^24.3.0",
76
+ "eslint": "^9.39.5",
77
+ "miniflare": "4.20260730.0",
78
+ "prisma": "6.19.3",
79
+ "semantic-release": "^25.0.2",
80
+ "tsup": "^8.5.1",
81
+ "typescript": "^5.9.3",
82
+ "typescript-eslint": "^8.67.0",
83
+ "vitest": "^3.2.4",
84
+ "wrangler": "4.116.0"
85
+ },
86
+ "allowScripts": {
87
+ "@prisma/client": false,
88
+ "@prisma/engines@6.19.3": true,
89
+ "esbuild@0.27.7": true,
90
+ "esbuild@0.28.1": true,
91
+ "fsevents": false,
92
+ "prisma@6.19.3": true,
93
+ "workerd@1.20260730.1": true
94
+ }
95
+ }