@tanstack/db-sqlite-persistence-core 0.4.4 → 0.4.5

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.
@@ -1 +1 @@
1
- {"version":3,"file":"remote-subset-wire.cjs","sources":["../../src/remote-subset-wire.ts"],"sourcesContent":["import { IR } from '@tanstack/db'\nimport type { LoadSubsetOptions } from '@tanstack/db'\n\nexport type RemoteSubsetWirePrimitive =\n undefined | null | boolean | string | number | bigint\n\nexport type RemoteSubsetWireTypedArray =\n | Int8Array\n | Uint8Array\n | Uint8ClampedArray\n | Int16Array\n | Uint16Array\n | Int32Array\n | Uint32Array\n | Float32Array\n | Float64Array\n | BigInt64Array\n | BigUint64Array\n\nexport type RemoteSubsetWireRecord = {\n [key: string]: RemoteSubsetWireValue\n}\n\n/** Values whose complete semantics survive a coordinator transport boundary. */\nexport type RemoteSubsetWireValue =\n | RemoteSubsetWirePrimitive\n | Date\n | RegExp\n | ArrayBuffer\n | DataView\n | RemoteSubsetWireTypedArray\n | Array<RemoteSubsetWireValue>\n | Map<RemoteSubsetWireValue, RemoteSubsetWireValue>\n | Set<RemoteSubsetWireValue>\n | RemoteSubsetWireRecord\n\nexport type RemoteSubsetWireExpression =\n | { type: `ref`; path: Array<string>; sourceAlias?: string }\n | { type: `val`; value: RemoteSubsetWireValue }\n | {\n type: `func`\n name: string\n args: Array<RemoteSubsetWireExpression>\n }\n\nexport type RemoteSubsetWireCompareOptions = {\n direction: `asc` | `desc`\n nulls: `first` | `last`\n} & (\n | { stringSort?: `lexical` }\n | {\n stringSort?: `locale`\n locale?: string\n localeOptions?: RemoteSubsetWireRecord\n }\n)\n\nexport type RemoteSubsetWireOrderByClause = {\n expression: RemoteSubsetWireExpression\n compareOptions: RemoteSubsetWireCompareOptions\n}\n\nexport type RemoteSubsetWireCursor = {\n whereFrom: RemoteSubsetWireExpression\n whereCurrent: RemoteSubsetWireExpression\n lastKey?: string | number\n}\n\n/** The complete data portion transported by a remote-subset request. */\nexport type TransportedLoadSubsetOptions = {\n where?: RemoteSubsetWireExpression\n orderBy?: Array<RemoteSubsetWireOrderByClause>\n limit?: number\n cursor?: RemoteSubsetWireCursor\n offset?: number\n}\n\nexport class RemoteSubsetWireValueError extends TypeError {\n override readonly name = `RemoteSubsetWireValueError`\n\n constructor(\n readonly path: string,\n reason: string,\n ) {\n super(`Unsupported remote subset wire value at ${path}: ${reason}`)\n }\n}\n\ntype ProjectionState = {\n expressions: WeakMap<object, RemoteSubsetWireExpression>\n expressionArrays: WeakMap<object, Array<RemoteSubsetWireExpression>>\n stringArrays: WeakMap<object, Array<string>>\n orderByArrays: WeakMap<object, Array<RemoteSubsetWireOrderByClause>>\n orderByClauses: WeakMap<object, RemoteSubsetWireOrderByClause>\n compareOptions: WeakMap<object, RemoteSubsetWireCompareOptions>\n cursors: WeakMap<object, RemoteSubsetWireCursor>\n wireValues: WeakMap<object, RemoteSubsetWireValue>\n}\n\ntype DataProperty = {\n present: boolean\n value?: unknown\n}\n\ntype TypedArrayConstructor = {\n readonly prototype: RemoteSubsetWireTypedArray\n new (\n buffer: ArrayBuffer,\n byteOffset?: number,\n length?: number,\n ): RemoteSubsetWireTypedArray\n}\n\nconst typedArrayConstructors: ReadonlyArray<TypedArrayConstructor> = [\n Int8Array,\n Uint8Array,\n Uint8ClampedArray,\n Int16Array,\n Uint16Array,\n Int32Array,\n Uint32Array,\n Float32Array,\n Float64Array,\n BigInt64Array,\n BigUint64Array,\n]\n\nconst NativeDate = Date\nconst identifierPattern = /^[A-Za-z_$][A-Za-z0-9_$]*$/\n\n/**\n * Projects one live subset request into the exact coordinator wire domain.\n * Validation happens before callers choose a local-leader or transported path.\n */\nexport function toTransportedLoadSubsetOptions(\n options: LoadSubsetOptions,\n): TransportedLoadSubsetOptions {\n assertPlainContainer(options, `options`)\n assertAllowedProperties(options, `options`, [\n `where`,\n `orderBy`,\n `limit`,\n `cursor`,\n `offset`,\n `signal`,\n `subscription`,\n ])\n\n const state: ProjectionState = {\n expressions: new WeakMap(),\n expressionArrays: new WeakMap(),\n stringArrays: new WeakMap(),\n orderByArrays: new WeakMap(),\n orderByClauses: new WeakMap(),\n compareOptions: new WeakMap(),\n cursors: new WeakMap(),\n wireValues: new WeakMap(),\n }\n const projected: TransportedLoadSubsetOptions = {}\n const where = readDataProperty(options, `where`, `options.where`)\n const orderBy = readDataProperty(options, `orderBy`, `options.orderBy`)\n const limit = readDataProperty(options, `limit`, `options.limit`)\n const cursor = readDataProperty(options, `cursor`, `options.cursor`)\n const offset = readDataProperty(options, `offset`, `options.offset`)\n\n if (where.present && where.value !== undefined) {\n projected.where = projectExpression(where.value, `options.where`, state)\n }\n if (orderBy.present && orderBy.value !== undefined) {\n projected.orderBy = projectOrderBy(orderBy.value, `options.orderBy`, state)\n }\n if (limit.present && limit.value !== undefined) {\n projected.limit = projectNumber(limit.value, `options.limit`)\n }\n if (cursor.present && cursor.value !== undefined) {\n projected.cursor = projectCursor(cursor.value, `options.cursor`, state)\n }\n if (offset.present && offset.value !== undefined) {\n projected.offset = projectNumber(offset.value, `options.offset`)\n }\n\n return projected\n}\n\n/** Adds live lifecycle references only to an already validated local request. */\nexport function toProcessLocalLoadSubsetOptions(\n options: LoadSubsetOptions,\n transported = toTransportedLoadSubsetOptions(options),\n): TransportedLoadSubsetOptions &\n Pick<LoadSubsetOptions, `signal` | `subscription`> {\n const projected = {\n ...transported,\n } as TransportedLoadSubsetOptions &\n Pick<LoadSubsetOptions, `signal` | `subscription`>\n const signal = readDataProperty(options, `signal`, `options.signal`)\n const subscription = readDataProperty(\n options,\n `subscription`,\n `options.subscription`,\n )\n\n if (signal.present) {\n projected.signal = signal.value as LoadSubsetOptions[`signal`]\n }\n if (subscription.present) {\n projected.subscription =\n subscription.value as LoadSubsetOptions[`subscription`]\n }\n\n return projected\n}\n\nfunction projectExpression(\n value: unknown,\n path: string,\n state: ProjectionState,\n): RemoteSubsetWireExpression {\n const object = requireObject(value, path)\n const existing = state.expressions.get(object)\n if (existing) return existing\n\n const type = readDataProperty(object, `type`, `${path}.type`)\n if (!type.present || typeof type.value !== `string`) {\n throw new RemoteSubsetWireValueError(`${path}.type`, describe(type.value))\n }\n\n switch (type.value) {\n case `ref`: {\n assertExpressionPrototype(object, path, IR.PropRef.prototype)\n assertAllowedProperties(object, path, [`type`, `path`, `sourceAlias`])\n const projected: Extract<RemoteSubsetWireExpression, { type: `ref` }> = {\n type: `ref`,\n path: [],\n }\n state.expressions.set(object, projected)\n const sourcePath = readRequiredDataProperty(\n object,\n `path`,\n `${path}.path`,\n )\n projected.path = projectStringArray(sourcePath, `${path}.path`, state)\n const sourceAlias = readDataProperty(\n object,\n `sourceAlias`,\n `${path}.sourceAlias`,\n )\n if (sourceAlias.present) {\n if (\n typeof sourceAlias.value !== `string` ||\n projected.path[0] !== sourceAlias.value\n ) {\n throw new RemoteSubsetWireValueError(\n `${path}.sourceAlias`,\n `source alias must match the first path segment`,\n )\n }\n projected.sourceAlias = sourceAlias.value\n }\n return projected\n }\n case `val`: {\n assertExpressionPrototype(object, path, IR.Value.prototype)\n assertAllowedProperties(object, path, [`type`, `value`])\n const projected: Extract<RemoteSubsetWireExpression, { type: `val` }> = {\n type: `val`,\n value: undefined,\n }\n state.expressions.set(object, projected)\n const sourceValue = readRequiredDataProperty(\n object,\n `value`,\n `${path}.value`,\n )\n projected.value = projectWireValue(sourceValue, `${path}.value`, state)\n return projected\n }\n case `func`: {\n assertExpressionPrototype(object, path, IR.Func.prototype)\n assertAllowedProperties(object, path, [`type`, `name`, `args`])\n const projected = {\n type: `func`,\n name: ``,\n args: [] as Array<RemoteSubsetWireExpression>,\n } satisfies RemoteSubsetWireExpression\n state.expressions.set(object, projected)\n const name = readRequiredDataProperty(object, `name`, `${path}.name`)\n if (typeof name !== `string`) {\n throw new RemoteSubsetWireValueError(`${path}.name`, describe(name))\n }\n projected.name = name\n const args = readRequiredDataProperty(object, `args`, `${path}.args`)\n projected.args = projectExpressionArray(args, `${path}.args`, state)\n return projected\n }\n default:\n throw new RemoteSubsetWireValueError(`${path}.type`, String(type.value))\n }\n}\n\nfunction projectExpressionArray(\n value: unknown,\n path: string,\n state: ProjectionState,\n): Array<RemoteSubsetWireExpression> {\n const array = requireArray(value, path)\n const existing = state.expressionArrays.get(array)\n if (existing) return existing\n assertArrayShape(array, path)\n const projected = new Array<RemoteSubsetWireExpression>(array.length)\n state.expressionArrays.set(array, projected)\n for (let index = 0; index < array.length; index++) {\n if (!(index in array)) {\n throw new RemoteSubsetWireValueError(\n `${path}[${index}]`,\n `missing expression`,\n )\n }\n projected[index] = projectExpression(\n array[index],\n `${path}[${index}]`,\n state,\n )\n }\n return projected\n}\n\nfunction projectStringArray(\n value: unknown,\n path: string,\n state: ProjectionState,\n): Array<string> {\n const array = requireArray(value, path)\n const existing = state.stringArrays.get(array)\n if (existing) return existing\n assertArrayShape(array, path)\n const projected = new Array<string>(array.length)\n state.stringArrays.set(array, projected)\n for (let index = 0; index < array.length; index++) {\n const entry = array[index]\n if (!(index in array) || typeof entry !== `string`) {\n throw new RemoteSubsetWireValueError(`${path}[${index}]`, describe(entry))\n }\n projected[index] = entry\n }\n return projected\n}\n\nfunction projectOrderBy(\n value: unknown,\n path: string,\n state: ProjectionState,\n): Array<RemoteSubsetWireOrderByClause> {\n const array = requireArray(value, path)\n const existing = state.orderByArrays.get(array)\n if (existing) return existing\n assertArrayShape(array, path)\n const projected = new Array<RemoteSubsetWireOrderByClause>(array.length)\n state.orderByArrays.set(array, projected)\n\n for (let index = 0; index < array.length; index++) {\n const clausePath = `${path}[${index}]`\n const clause = requirePlainRecord(array[index], clausePath)\n const existingClause = state.orderByClauses.get(clause)\n if (existingClause) {\n projected[index] = existingClause\n continue\n }\n assertAllowedProperties(clause, clausePath, [\n `expression`,\n `compareOptions`,\n ])\n const projectedClause = {\n expression: undefined as unknown as RemoteSubsetWireExpression,\n compareOptions: undefined as unknown as RemoteSubsetWireCompareOptions,\n }\n projected[index] = projectedClause\n state.orderByClauses.set(clause, projectedClause)\n projectedClause.expression = projectExpression(\n readRequiredDataProperty(\n clause,\n `expression`,\n `${clausePath}.expression`,\n ),\n `${clausePath}.expression`,\n state,\n )\n projectedClause.compareOptions = projectCompareOptions(\n readRequiredDataProperty(\n clause,\n `compareOptions`,\n `${clausePath}.compareOptions`,\n ),\n `${clausePath}.compareOptions`,\n state,\n )\n }\n return projected\n}\n\nfunction projectCompareOptions(\n value: unknown,\n path: string,\n state: ProjectionState,\n): RemoteSubsetWireCompareOptions {\n const source = requirePlainRecord(value, path)\n const existing = state.compareOptions.get(source)\n if (existing) return existing\n assertAllowedProperties(source, path, [\n `direction`,\n `nulls`,\n `stringSort`,\n `locale`,\n `localeOptions`,\n ])\n const projected: {\n direction?: `asc` | `desc`\n nulls?: `first` | `last`\n stringSort?: `lexical` | `locale`\n locale?: string\n localeOptions?: RemoteSubsetWireRecord\n } = {}\n\n const direction = readRequiredDataProperty(\n source,\n `direction`,\n `${path}.direction`,\n )\n if (direction !== `asc` && direction !== `desc`) {\n throw new RemoteSubsetWireValueError(\n `${path}.direction`,\n describe(direction),\n )\n }\n projected.direction = direction\n\n const nulls = readRequiredDataProperty(source, `nulls`, `${path}.nulls`)\n if (nulls !== `first` && nulls !== `last`) {\n throw new RemoteSubsetWireValueError(`${path}.nulls`, describe(nulls))\n }\n projected.nulls = nulls\n\n const stringSort = readDataProperty(\n source,\n `stringSort`,\n `${path}.stringSort`,\n )\n if (stringSort.present && stringSort.value !== undefined) {\n if (stringSort.value !== `lexical` && stringSort.value !== `locale`) {\n throw new RemoteSubsetWireValueError(\n `${path}.stringSort`,\n describe(stringSort.value),\n )\n }\n projected.stringSort = stringSort.value\n }\n if (projected.stringSort !== `lexical`) {\n const locale = readDataProperty(source, `locale`, `${path}.locale`)\n if (locale.present && locale.value !== undefined) {\n if (typeof locale.value !== `string`) {\n throw new RemoteSubsetWireValueError(\n `${path}.locale`,\n describe(locale.value),\n )\n }\n projected.locale = locale.value\n }\n const localeOptions = readDataProperty(\n source,\n `localeOptions`,\n `${path}.localeOptions`,\n )\n if (localeOptions.present && localeOptions.value !== undefined) {\n projected.localeOptions = projectWireRecord(\n localeOptions.value,\n `${path}.localeOptions`,\n state,\n )\n }\n }\n const result = projected as RemoteSubsetWireCompareOptions\n state.compareOptions.set(source, result)\n return result\n}\n\nfunction projectCursor(\n value: unknown,\n path: string,\n state: ProjectionState,\n): RemoteSubsetWireCursor {\n const source = requirePlainRecord(value, path)\n const existing = state.cursors.get(source)\n if (existing) return existing\n assertAllowedProperties(source, path, [\n `whereFrom`,\n `whereCurrent`,\n `lastKey`,\n ])\n const projected: RemoteSubsetWireCursor = {\n whereFrom: undefined as unknown as RemoteSubsetWireExpression,\n whereCurrent: undefined as unknown as RemoteSubsetWireExpression,\n }\n state.cursors.set(source, projected)\n projected.whereFrom = projectExpression(\n readRequiredDataProperty(source, `whereFrom`, `${path}.whereFrom`),\n `${path}.whereFrom`,\n state,\n )\n projected.whereCurrent = projectExpression(\n readRequiredDataProperty(source, `whereCurrent`, `${path}.whereCurrent`),\n `${path}.whereCurrent`,\n state,\n )\n const lastKey = readDataProperty(source, `lastKey`, `${path}.lastKey`)\n if (lastKey.present && lastKey.value !== undefined) {\n if (\n typeof lastKey.value !== `string` &&\n typeof lastKey.value !== `number`\n ) {\n throw new RemoteSubsetWireValueError(\n `${path}.lastKey`,\n describe(lastKey.value),\n )\n }\n projected.lastKey = lastKey.value\n }\n return projected\n}\n\nfunction projectWireValue(\n value: unknown,\n path: string,\n state: ProjectionState,\n): RemoteSubsetWireValue {\n if (\n value === undefined ||\n value === null ||\n typeof value === `boolean` ||\n typeof value === `string` ||\n typeof value === `number` ||\n typeof value === `bigint`\n ) {\n return value\n }\n if (typeof value !== `object`) {\n throw new RemoteSubsetWireValueError(path, describe(value))\n }\n\n const existing = state.wireValues.get(value)\n if (existing) return existing\n\n if (\n typeof SharedArrayBuffer !== `undefined` &&\n value instanceof SharedArrayBuffer\n ) {\n throw new RemoteSubsetWireValueError(path, `SharedArrayBuffer`)\n }\n if (value instanceof NativeDate) {\n assertExactPrototype(value, NativeDate.prototype, path)\n assertNoOwnProperties(value, path)\n const projected = new NativeDate(value.getTime())\n state.wireValues.set(value, projected)\n return projected\n }\n if (value instanceof RegExp) {\n assertExactPrototype(value, RegExp.prototype, path)\n assertRegExpShape(value, path)\n const projected = new RegExp(value.source, value.flags)\n state.wireValues.set(value, projected)\n return projected\n }\n if (value instanceof ArrayBuffer) {\n assertExactPrototype(value, ArrayBuffer.prototype, path)\n assertNoOwnProperties(value, path)\n assertFixedArrayBuffer(value, path)\n let projected: ArrayBuffer\n try {\n projected = value.slice(0)\n } catch {\n throw new RemoteSubsetWireValueError(path, `detached ArrayBuffer`)\n }\n state.wireValues.set(value, projected)\n return projected\n }\n if (value instanceof DataView) {\n assertExactPrototype(value, DataView.prototype, path)\n assertNoOwnProperties(value, path)\n let byteOffset: number\n let byteLength: number\n let buffer: ArrayBufferLike\n try {\n byteOffset = value.byteOffset\n byteLength = value.byteLength\n buffer = value.buffer\n } catch {\n throw new RemoteSubsetWireValueError(path, `detached DataView`)\n }\n const projectedBuffer = projectWireValue(buffer, path, state)\n if (!(projectedBuffer instanceof ArrayBuffer)) {\n throw new RemoteSubsetWireValueError(path, `shared DataView buffer`)\n }\n const projected = new DataView(projectedBuffer, byteOffset, byteLength)\n state.wireValues.set(value, projected)\n return projected\n }\n\n const typedArrayConstructor = getTypedArrayConstructor(value)\n if (typedArrayConstructor) {\n const typedArray = value as RemoteSubsetWireTypedArray\n assertTypedArrayShape(typedArray, path)\n let byteOffset: number\n let length: number\n let buffer: ArrayBufferLike\n try {\n byteOffset = typedArray.byteOffset\n length = typedArray.length\n buffer = typedArray.buffer\n } catch {\n throw new RemoteSubsetWireValueError(path, `detached typed array`)\n }\n if (!(buffer instanceof ArrayBuffer)) {\n throw new RemoteSubsetWireValueError(path, `shared typed-array buffer`)\n }\n const projectedBuffer = projectWireValue(buffer, path, state)\n if (!(projectedBuffer instanceof ArrayBuffer)) {\n throw new RemoteSubsetWireValueError(path, `shared typed-array buffer`)\n }\n let projected: RemoteSubsetWireTypedArray\n try {\n projected = new typedArrayConstructor(projectedBuffer, byteOffset, length)\n } catch {\n throw new RemoteSubsetWireValueError(path, `detached typed array`)\n }\n state.wireValues.set(value, projected)\n return projected\n }\n if (ArrayBuffer.isView(value)) {\n throw new RemoteSubsetWireValueError(path, describe(value))\n }\n if (Array.isArray(value)) return projectWireArray(value, path, state)\n if (value instanceof Map) return projectWireMap(value, path, state)\n if (value instanceof Set) return projectWireSet(value, path, state)\n return projectWireRecord(value, path, state)\n}\n\nfunction projectWireArray(\n value: Array<unknown>,\n path: string,\n state: ProjectionState,\n): Array<RemoteSubsetWireValue> {\n assertArrayShape(value, path)\n const projected = new Array<RemoteSubsetWireValue>(value.length)\n state.wireValues.set(value, projected)\n for (let index = 0; index < value.length; index++) {\n if (index in value) {\n projected[index] = projectWireValue(\n value[index],\n `${path}[${index}]`,\n state,\n )\n }\n }\n return projected\n}\n\nfunction projectWireMap(\n value: Map<unknown, unknown>,\n path: string,\n state: ProjectionState,\n): Map<RemoteSubsetWireValue, RemoteSubsetWireValue> {\n assertExactPrototype(value, Map.prototype, path)\n assertNoOwnProperties(value, path)\n const projected = new Map<RemoteSubsetWireValue, RemoteSubsetWireValue>()\n state.wireValues.set(value, projected)\n let index = 0\n for (const [key, entry] of value) {\n projected.set(\n projectWireValue(key, `${path}.entries[${index}].key`, state),\n projectWireValue(entry, `${path}.entries[${index}].value`, state),\n )\n index++\n }\n return projected\n}\n\nfunction projectWireSet(\n value: Set<unknown>,\n path: string,\n state: ProjectionState,\n): Set<RemoteSubsetWireValue> {\n assertExactPrototype(value, Set.prototype, path)\n assertNoOwnProperties(value, path)\n const projected = new Set<RemoteSubsetWireValue>()\n state.wireValues.set(value, projected)\n let index = 0\n for (const entry of value) {\n projected.add(projectWireValue(entry, `${path}.values[${index}]`, state))\n index++\n }\n return projected\n}\n\nfunction projectWireRecord(\n value: unknown,\n path: string,\n state: ProjectionState,\n): RemoteSubsetWireRecord {\n const source = requirePlainRecord(value, path)\n const existing = state.wireValues.get(source)\n if (existing) return existing as RemoteSubsetWireRecord\n const projected: RemoteSubsetWireRecord = {}\n state.wireValues.set(source, projected)\n\n for (const key of ownKeys(source, path)) {\n const childPath = propertyPath(path, key)\n if (typeof key === `symbol`) {\n throw new RemoteSubsetWireValueError(childPath, `symbol property key`)\n }\n const descriptor = Object.getOwnPropertyDescriptor(source, key)\n if (!descriptor || !descriptor.enumerable || !(`value` in descriptor)) {\n throw new RemoteSubsetWireValueError(childPath, `non-data property`)\n }\n Object.defineProperty(projected, key, {\n value: projectWireValue(descriptor.value, childPath, state),\n enumerable: true,\n writable: true,\n configurable: true,\n })\n }\n return projected\n}\n\nfunction projectNumber(value: unknown, path: string): number {\n if (typeof value !== `number` || !Number.isSafeInteger(value) || value < 0) {\n throw new RemoteSubsetWireValueError(path, `non-negative safe integer`)\n }\n return value\n}\n\nfunction readRequiredDataProperty(\n value: object,\n key: string,\n path: string,\n): unknown {\n const property = readDataProperty(value, key, path)\n if (!property.present) {\n throw new RemoteSubsetWireValueError(path, `missing property`)\n }\n return property.value\n}\n\nfunction readDataProperty(\n value: object,\n key: string,\n path: string,\n): DataProperty {\n let descriptor: PropertyDescriptor | undefined\n try {\n descriptor = Object.getOwnPropertyDescriptor(value, key)\n } catch {\n throw new RemoteSubsetWireValueError(path, `unreadable property`)\n }\n if (!descriptor) return { present: false }\n if (!descriptor.enumerable || !(`value` in descriptor)) {\n throw new RemoteSubsetWireValueError(path, `non-data property`)\n }\n return { present: true, value: descriptor.value }\n}\n\nfunction assertAllowedProperties(\n value: object,\n path: string,\n allowed: ReadonlyArray<string>,\n): void {\n const allowedSet = new Set(allowed)\n for (const key of ownKeys(value, path)) {\n if (typeof key === `symbol` || !allowedSet.has(key)) {\n throw new RemoteSubsetWireValueError(propertyPath(path, key), `property`)\n }\n readDataProperty(value, key, propertyPath(path, key))\n }\n}\n\nfunction assertPlainContainer(value: object, path: string): void {\n assertExactPrototype(value, Object.prototype, path)\n}\n\nfunction assertExpressionPrototype(\n value: object,\n path: string,\n expressionPrototype: object,\n): void {\n let prototype: object | null\n try {\n prototype = Object.getPrototypeOf(value)\n } catch {\n throw new RemoteSubsetWireValueError(path, `unreadable prototype`)\n }\n if (prototype !== Object.prototype && prototype !== expressionPrototype) {\n throw new RemoteSubsetWireValueError(path, describe(value))\n }\n}\n\nfunction assertExactPrototype(\n value: object,\n expected: object,\n path: string,\n): void {\n let prototype: object | null\n try {\n prototype = Object.getPrototypeOf(value)\n } catch {\n throw new RemoteSubsetWireValueError(path, `unreadable prototype`)\n }\n if (prototype !== expected) {\n throw new RemoteSubsetWireValueError(path, describe(value))\n }\n}\n\nfunction assertNoOwnProperties(value: object, path: string): void {\n const keys = ownKeys(value, path)\n if (keys.length > 0) {\n throw new RemoteSubsetWireValueError(\n propertyPath(path, keys[0]!),\n `property`,\n )\n }\n}\n\nfunction assertFixedArrayBuffer(value: ArrayBuffer, path: string): void {\n if ((value as ArrayBuffer & { readonly resizable?: boolean }).resizable) {\n throw new RemoteSubsetWireValueError(path, `resizable ArrayBuffer`)\n }\n}\n\nfunction assertRegExpShape(value: RegExp, path: string): void {\n const keys = ownKeys(value, path)\n for (const key of keys) {\n if (key !== `lastIndex`) {\n throw new RemoteSubsetWireValueError(propertyPath(path, key), `property`)\n }\n }\n const descriptor = Object.getOwnPropertyDescriptor(value, `lastIndex`)\n if (!descriptor || !(`value` in descriptor) || descriptor.value !== 0) {\n throw new RemoteSubsetWireValueError(\n `${path}.lastIndex`,\n `RegExp lastIndex must be 0`,\n )\n }\n}\n\nfunction assertTypedArrayShape(\n value: RemoteSubsetWireTypedArray,\n path: string,\n): void {\n const keys = ownKeys(value, path)\n for (const key of keys) {\n if (typeof key !== `string` || !isCanonicalArrayIndex(key, value.length)) {\n throw new RemoteSubsetWireValueError(propertyPath(path, key), `property`)\n }\n }\n}\n\nfunction assertArrayShape(value: Array<unknown>, path: string): void {\n assertExactPrototype(value, Array.prototype, path)\n const keys = ownKeys(value, path)\n for (const key of keys) {\n if (\n key !== `length` &&\n (typeof key !== `string` || !isCanonicalArrayIndex(key, value.length))\n ) {\n throw new RemoteSubsetWireValueError(propertyPath(path, key), `property`)\n }\n if (key !== `length`) {\n readDataProperty(value, key, propertyPath(path, key))\n }\n }\n}\n\nfunction isCanonicalArrayIndex(key: string, length: number): boolean {\n if (!/^(0|[1-9][0-9]*)$/.test(key)) return false\n const index = Number(key)\n return Number.isSafeInteger(index) && index >= 0 && index < length\n}\n\nfunction getTypedArrayConstructor(\n value: object,\n): TypedArrayConstructor | undefined {\n let prototype: object | null\n try {\n prototype = Object.getPrototypeOf(value)\n } catch {\n return undefined\n }\n return typedArrayConstructors.find(\n (constructor) => prototype === constructor.prototype,\n )\n}\n\nfunction requireArray(value: unknown, path: string): Array<unknown> {\n if (!Array.isArray(value)) {\n throw new RemoteSubsetWireValueError(path, describe(value))\n }\n return value\n}\n\nfunction requireObject(value: unknown, path: string): object {\n if (value === null || typeof value !== `object`) {\n throw new RemoteSubsetWireValueError(path, describe(value))\n }\n return value\n}\n\nfunction requirePlainRecord(\n value: unknown,\n path: string,\n): Record<string, unknown> {\n const object = requireObject(value, path)\n assertExactPrototype(object, Object.prototype, path)\n return object as Record<string, unknown>\n}\n\nfunction ownKeys(value: object, path: string): Array<string | symbol> {\n try {\n return Reflect.ownKeys(value)\n } catch {\n throw new RemoteSubsetWireValueError(path, `unreadable properties`)\n }\n}\n\nfunction propertyPath(path: string, key: string | symbol): string {\n if (typeof key === `symbol`) return `${path}[${String(key)}]`\n return identifierPattern.test(key)\n ? `${path}.${key}`\n : `${path}[${JSON.stringify(key)}]`\n}\n\nfunction describe(value: unknown): string {\n if (value === null) return `null`\n if (typeof value !== `object`) return typeof value\n return `object`\n}\n"],"names":["IR"],"mappings":"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"}
1
+ {"version":3,"file":"remote-subset-wire.cjs","sources":["../../src/remote-subset-wire.ts"],"sourcesContent":["import { IR } from '@tanstack/db'\nimport type { LoadSubsetOptions } from '@tanstack/db'\n\nexport type RemoteSubsetWirePrimitive =\n undefined | null | boolean | string | number | bigint\n\nexport type RemoteSubsetWireTypedArray =\n | Int8Array\n | Uint8Array\n | Uint8ClampedArray\n | Int16Array\n | Uint16Array\n | Int32Array\n | Uint32Array\n | Float32Array\n | Float64Array\n | BigInt64Array\n | BigUint64Array\n\nexport type RemoteSubsetWireRecord = {\n [key: string]: RemoteSubsetWireValue\n}\n\n/** Values whose complete semantics survive a coordinator transport boundary. */\nexport type RemoteSubsetWireValue =\n | RemoteSubsetWirePrimitive\n | Date\n | RegExp\n | ArrayBuffer\n | DataView\n | RemoteSubsetWireTypedArray\n | Array<RemoteSubsetWireValue>\n | Map<RemoteSubsetWireValue, RemoteSubsetWireValue>\n | Set<RemoteSubsetWireValue>\n | RemoteSubsetWireRecord\n\nexport type RemoteSubsetWireExpression =\n | { type: `ref`; path: Array<string>; sourceAlias?: string }\n | { type: `val`; value: RemoteSubsetWireValue }\n | {\n type: `func`\n name: string\n args: Array<RemoteSubsetWireExpression>\n }\n\nexport type RemoteSubsetWireCompareOptions = {\n direction: `asc` | `desc`\n nulls: `first` | `last`\n} & (\n | { stringSort?: `lexical` }\n | {\n stringSort?: `locale`\n locale?: string\n localeOptions?: RemoteSubsetWireRecord\n }\n)\n\nexport type RemoteSubsetWireOrderByClause = {\n expression: RemoteSubsetWireExpression\n compareOptions: RemoteSubsetWireCompareOptions\n}\n\nexport type RemoteSubsetWireCursor = {\n whereFrom: RemoteSubsetWireExpression\n whereCurrent: RemoteSubsetWireExpression\n lastKey?: string | number\n}\n\n/** The complete data portion transported by a remote-subset request. */\nexport type TransportedLoadSubsetOptions = {\n where?: RemoteSubsetWireExpression\n orderBy?: Array<RemoteSubsetWireOrderByClause>\n limit?: number\n cursor?: RemoteSubsetWireCursor\n offset?: number\n}\n\nexport class RemoteSubsetWireValueError extends TypeError {\n override readonly name = `RemoteSubsetWireValueError`\n\n constructor(\n readonly path: string,\n reason: string,\n ) {\n super(`Unsupported remote subset wire value at ${path}: ${reason}`)\n }\n}\n\ntype ProjectionState = {\n validateOnly: boolean\n expressions: WeakMap<object, RemoteSubsetWireExpression>\n expressionArrays: WeakMap<object, Array<RemoteSubsetWireExpression>>\n stringArrays: WeakMap<object, Array<string>>\n orderByArrays: WeakMap<object, Array<RemoteSubsetWireOrderByClause>>\n orderByClauses: WeakMap<object, RemoteSubsetWireOrderByClause>\n compareOptions: WeakMap<object, RemoteSubsetWireCompareOptions>\n cursors: WeakMap<object, RemoteSubsetWireCursor>\n wireValues: WeakMap<object, RemoteSubsetWireValue>\n}\n\ntype DataProperty = {\n present: boolean\n value?: unknown\n}\n\ntype TypedArrayConstructor = {\n readonly prototype: RemoteSubsetWireTypedArray\n new (\n buffer: ArrayBuffer,\n byteOffset?: number,\n length?: number,\n ): RemoteSubsetWireTypedArray\n}\n\nconst typedArrayConstructors: ReadonlyArray<TypedArrayConstructor> = [\n Int8Array,\n Uint8Array,\n Uint8ClampedArray,\n Int16Array,\n Uint16Array,\n Int32Array,\n Uint32Array,\n Float32Array,\n Float64Array,\n BigInt64Array,\n BigUint64Array,\n]\n\nconst NativeDate = Date\nconst identifierPattern = /^[A-Za-z_$][A-Za-z0-9_$]*$/\n\n/**\n * Projects one live subset request into the exact coordinator wire domain.\n * Validation happens before callers choose a local-leader or transported path.\n */\nexport function toTransportedLoadSubsetOptions(\n options: LoadSubsetOptions,\n): TransportedLoadSubsetOptions {\n return visitLoadSubsetOptions(options, false)\n}\n\n/** Checks wire admission without constructing a detached request snapshot. */\nexport function validateRemoteSubsetOptions(options: LoadSubsetOptions): void {\n visitLoadSubsetOptions(options, true)\n}\n\n// Both modes run the same admission checks. Validation retains input nodes only\n// as cycle markers; it never writes to them or returns them to a caller.\nfunction visitLoadSubsetOptions(\n options: LoadSubsetOptions,\n validateOnly: boolean,\n): TransportedLoadSubsetOptions {\n assertPlainContainer(options, `options`)\n assertAllowedProperties(options, `options`, [\n `where`,\n `orderBy`,\n `limit`,\n `cursor`,\n `offset`,\n `signal`,\n `subscription`,\n ])\n\n const state: ProjectionState = {\n validateOnly,\n expressions: new WeakMap(),\n expressionArrays: new WeakMap(),\n stringArrays: new WeakMap(),\n orderByArrays: new WeakMap(),\n orderByClauses: new WeakMap(),\n compareOptions: new WeakMap(),\n cursors: new WeakMap(),\n wireValues: new WeakMap(),\n }\n const projected: TransportedLoadSubsetOptions = validateOnly\n ? (options as TransportedLoadSubsetOptions)\n : {}\n const where = readDataProperty(options, `where`, `options.where`)\n const orderBy = readDataProperty(options, `orderBy`, `options.orderBy`)\n const limit = readDataProperty(options, `limit`, `options.limit`)\n const cursor = readDataProperty(options, `cursor`, `options.cursor`)\n const offset = readDataProperty(options, `offset`, `options.offset`)\n\n if (where.present && where.value !== undefined) {\n const result = projectExpression(where.value, `options.where`, state)\n if (!state.validateOnly) projected.where = result\n }\n if (orderBy.present && orderBy.value !== undefined) {\n const result = projectOrderBy(orderBy.value, `options.orderBy`, state)\n if (!state.validateOnly) projected.orderBy = result\n }\n if (limit.present && limit.value !== undefined) {\n const result = projectNumber(limit.value, `options.limit`)\n if (!state.validateOnly) projected.limit = result\n }\n if (cursor.present && cursor.value !== undefined) {\n const result = projectCursor(cursor.value, `options.cursor`, state)\n if (!state.validateOnly) projected.cursor = result\n }\n if (offset.present && offset.value !== undefined) {\n const result = projectNumber(offset.value, `options.offset`)\n if (!state.validateOnly) projected.offset = result\n }\n\n return projected\n}\n\n/** Adds live lifecycle references only to an already validated local request. */\nexport function toProcessLocalLoadSubsetOptions(\n options: LoadSubsetOptions,\n transported = toTransportedLoadSubsetOptions(options),\n): TransportedLoadSubsetOptions &\n Pick<LoadSubsetOptions, `signal` | `subscription`> {\n const projected = {\n ...transported,\n } as TransportedLoadSubsetOptions &\n Pick<LoadSubsetOptions, `signal` | `subscription`>\n const signal = readDataProperty(options, `signal`, `options.signal`)\n const subscription = readDataProperty(\n options,\n `subscription`,\n `options.subscription`,\n )\n\n if (signal.present) {\n projected.signal = signal.value as LoadSubsetOptions[`signal`]\n }\n if (subscription.present) {\n projected.subscription =\n subscription.value as LoadSubsetOptions[`subscription`]\n }\n\n return projected\n}\n\nfunction projectExpression(\n value: unknown,\n path: string,\n state: ProjectionState,\n): RemoteSubsetWireExpression {\n const object = requireObject(value, path)\n const existing = state.expressions.get(object)\n if (existing) return existing\n\n const type = readDataProperty(object, `type`, `${path}.type`)\n if (!type.present || typeof type.value !== `string`) {\n throw new RemoteSubsetWireValueError(`${path}.type`, describe(type.value))\n }\n\n switch (type.value) {\n case `ref`: {\n assertExpressionPrototype(object, path, IR.PropRef.prototype)\n assertAllowedProperties(object, path, [`type`, `path`, `sourceAlias`])\n const projected: Extract<RemoteSubsetWireExpression, { type: `ref` }> =\n state.validateOnly\n ? (object as Extract<RemoteSubsetWireExpression, { type: `ref` }>)\n : { type: `ref`, path: [] }\n state.expressions.set(object, projected)\n const sourcePath = readRequiredDataProperty(\n object,\n `path`,\n `${path}.path`,\n )\n const result = projectStringArray(sourcePath, `${path}.path`, state)\n if (!state.validateOnly) projected.path = result\n const sourceAlias = readDataProperty(\n object,\n `sourceAlias`,\n `${path}.sourceAlias`,\n )\n if (sourceAlias.present) {\n if (\n typeof sourceAlias.value !== `string` ||\n result[0] !== sourceAlias.value\n ) {\n throw new RemoteSubsetWireValueError(\n `${path}.sourceAlias`,\n `source alias must match the first path segment`,\n )\n }\n if (!state.validateOnly) projected.sourceAlias = sourceAlias.value\n }\n return projected\n }\n case `val`: {\n assertExpressionPrototype(object, path, IR.Value.prototype)\n assertAllowedProperties(object, path, [`type`, `value`])\n const projected: Extract<RemoteSubsetWireExpression, { type: `val` }> =\n state.validateOnly\n ? (object as Extract<RemoteSubsetWireExpression, { type: `val` }>)\n : { type: `val`, value: undefined }\n state.expressions.set(object, projected)\n const sourceValue = readRequiredDataProperty(\n object,\n `value`,\n `${path}.value`,\n )\n const result = projectWireValue(sourceValue, `${path}.value`, state)\n if (!state.validateOnly) projected.value = result\n return projected\n }\n case `func`: {\n assertExpressionPrototype(object, path, IR.Func.prototype)\n assertAllowedProperties(object, path, [`type`, `name`, `args`])\n const projected: Extract<RemoteSubsetWireExpression, { type: `func` }> =\n state.validateOnly\n ? (object as Extract<RemoteSubsetWireExpression, { type: `func` }>)\n : { type: `func`, name: ``, args: [] }\n state.expressions.set(object, projected)\n const name = readRequiredDataProperty(object, `name`, `${path}.name`)\n if (typeof name !== `string`) {\n throw new RemoteSubsetWireValueError(`${path}.name`, describe(name))\n }\n if (!state.validateOnly) projected.name = name\n const args = readRequiredDataProperty(object, `args`, `${path}.args`)\n const result = projectExpressionArray(args, `${path}.args`, state)\n if (!state.validateOnly) projected.args = result\n return projected\n }\n default:\n throw new RemoteSubsetWireValueError(`${path}.type`, String(type.value))\n }\n}\n\nfunction projectExpressionArray(\n value: unknown,\n path: string,\n state: ProjectionState,\n): Array<RemoteSubsetWireExpression> {\n const array = requireArray(value, path)\n const existing = state.expressionArrays.get(array)\n if (existing) return existing\n assertArrayShape(array, path)\n const projected = state.validateOnly\n ? (array as Array<RemoteSubsetWireExpression>)\n : new Array<RemoteSubsetWireExpression>(array.length)\n state.expressionArrays.set(array, projected)\n for (let index = 0; index < array.length; index++) {\n if (!(index in array)) {\n throw new RemoteSubsetWireValueError(\n `${path}[${index}]`,\n `missing expression`,\n )\n }\n const result = projectExpression(array[index], `${path}[${index}]`, state)\n if (!state.validateOnly) projected[index] = result\n }\n return projected\n}\n\nfunction projectStringArray(\n value: unknown,\n path: string,\n state: ProjectionState,\n): Array<string> {\n const array = requireArray(value, path)\n const existing = state.stringArrays.get(array)\n if (existing) return existing\n assertArrayShape(array, path)\n const projected = state.validateOnly\n ? (array as Array<string>)\n : new Array<string>(array.length)\n state.stringArrays.set(array, projected)\n for (let index = 0; index < array.length; index++) {\n const entry = array[index]\n if (!(index in array) || typeof entry !== `string`) {\n throw new RemoteSubsetWireValueError(`${path}[${index}]`, describe(entry))\n }\n if (!state.validateOnly) projected[index] = entry\n }\n return projected\n}\n\nfunction projectOrderBy(\n value: unknown,\n path: string,\n state: ProjectionState,\n): Array<RemoteSubsetWireOrderByClause> {\n const array = requireArray(value, path)\n const existing = state.orderByArrays.get(array)\n if (existing) return existing\n assertArrayShape(array, path)\n const projected = state.validateOnly\n ? (array as Array<RemoteSubsetWireOrderByClause>)\n : new Array<RemoteSubsetWireOrderByClause>(array.length)\n state.orderByArrays.set(array, projected)\n\n for (let index = 0; index < array.length; index++) {\n const clausePath = `${path}[${index}]`\n const clause = requirePlainRecord(array[index], clausePath)\n const existingClause = state.orderByClauses.get(clause)\n if (existingClause) {\n if (!state.validateOnly) projected[index] = existingClause\n continue\n }\n assertAllowedProperties(clause, clausePath, [\n `expression`,\n `compareOptions`,\n ])\n const projectedClause = state.validateOnly\n ? (clause as RemoteSubsetWireOrderByClause)\n : {\n expression: undefined as unknown as RemoteSubsetWireExpression,\n compareOptions:\n undefined as unknown as RemoteSubsetWireCompareOptions,\n }\n if (!state.validateOnly) projected[index] = projectedClause\n state.orderByClauses.set(clause, projectedClause)\n const expression = projectExpression(\n readRequiredDataProperty(\n clause,\n `expression`,\n `${clausePath}.expression`,\n ),\n `${clausePath}.expression`,\n state,\n )\n const compareOptions = projectCompareOptions(\n readRequiredDataProperty(\n clause,\n `compareOptions`,\n `${clausePath}.compareOptions`,\n ),\n `${clausePath}.compareOptions`,\n state,\n )\n if (!state.validateOnly) {\n projectedClause.expression = expression\n projectedClause.compareOptions = compareOptions\n }\n }\n return projected\n}\n\nfunction projectCompareOptions(\n value: unknown,\n path: string,\n state: ProjectionState,\n): RemoteSubsetWireCompareOptions {\n const source = requirePlainRecord(value, path)\n const existing = state.compareOptions.get(source)\n if (existing) return existing\n assertAllowedProperties(source, path, [\n `direction`,\n `nulls`,\n `stringSort`,\n `locale`,\n `localeOptions`,\n ])\n const projected: {\n direction?: `asc` | `desc`\n nulls?: `first` | `last`\n stringSort?: `lexical` | `locale`\n locale?: string\n localeOptions?: RemoteSubsetWireRecord\n } = state.validateOnly ? source : {}\n\n const direction = readRequiredDataProperty(\n source,\n `direction`,\n `${path}.direction`,\n )\n if (direction !== `asc` && direction !== `desc`) {\n throw new RemoteSubsetWireValueError(\n `${path}.direction`,\n describe(direction),\n )\n }\n if (!state.validateOnly) projected.direction = direction\n\n const nulls = readRequiredDataProperty(source, `nulls`, `${path}.nulls`)\n if (nulls !== `first` && nulls !== `last`) {\n throw new RemoteSubsetWireValueError(`${path}.nulls`, describe(nulls))\n }\n if (!state.validateOnly) projected.nulls = nulls\n\n const stringSort = readDataProperty(\n source,\n `stringSort`,\n `${path}.stringSort`,\n )\n if (stringSort.present && stringSort.value !== undefined) {\n if (stringSort.value !== `lexical` && stringSort.value !== `locale`) {\n throw new RemoteSubsetWireValueError(\n `${path}.stringSort`,\n describe(stringSort.value),\n )\n }\n if (!state.validateOnly) projected.stringSort = stringSort.value\n }\n if (projected.stringSort !== `lexical`) {\n const locale = readDataProperty(source, `locale`, `${path}.locale`)\n if (locale.present && locale.value !== undefined) {\n if (typeof locale.value !== `string`) {\n throw new RemoteSubsetWireValueError(\n `${path}.locale`,\n describe(locale.value),\n )\n }\n if (!state.validateOnly) projected.locale = locale.value\n }\n const localeOptions = readDataProperty(\n source,\n `localeOptions`,\n `${path}.localeOptions`,\n )\n if (localeOptions.present && localeOptions.value !== undefined) {\n const result = projectWireRecord(\n localeOptions.value,\n `${path}.localeOptions`,\n state,\n )\n if (!state.validateOnly) projected.localeOptions = result\n }\n }\n const result = projected as RemoteSubsetWireCompareOptions\n state.compareOptions.set(source, result)\n return result\n}\n\nfunction projectCursor(\n value: unknown,\n path: string,\n state: ProjectionState,\n): RemoteSubsetWireCursor {\n const source = requirePlainRecord(value, path)\n const existing = state.cursors.get(source)\n if (existing) return existing\n assertAllowedProperties(source, path, [\n `whereFrom`,\n `whereCurrent`,\n `lastKey`,\n ])\n const projected: RemoteSubsetWireCursor = state.validateOnly\n ? (source as RemoteSubsetWireCursor)\n : {\n whereFrom: undefined as unknown as RemoteSubsetWireExpression,\n whereCurrent: undefined as unknown as RemoteSubsetWireExpression,\n }\n state.cursors.set(source, projected)\n const whereFrom = projectExpression(\n readRequiredDataProperty(source, `whereFrom`, `${path}.whereFrom`),\n `${path}.whereFrom`,\n state,\n )\n const whereCurrent = projectExpression(\n readRequiredDataProperty(source, `whereCurrent`, `${path}.whereCurrent`),\n `${path}.whereCurrent`,\n state,\n )\n if (!state.validateOnly) {\n projected.whereFrom = whereFrom\n projected.whereCurrent = whereCurrent\n }\n const lastKey = readDataProperty(source, `lastKey`, `${path}.lastKey`)\n if (lastKey.present && lastKey.value !== undefined) {\n if (\n typeof lastKey.value !== `string` &&\n typeof lastKey.value !== `number`\n ) {\n throw new RemoteSubsetWireValueError(\n `${path}.lastKey`,\n describe(lastKey.value),\n )\n }\n if (!state.validateOnly) projected.lastKey = lastKey.value\n }\n return projected\n}\n\nfunction projectWireValue(\n value: unknown,\n path: string,\n state: ProjectionState,\n): RemoteSubsetWireValue {\n if (\n value === undefined ||\n value === null ||\n typeof value === `boolean` ||\n typeof value === `string` ||\n typeof value === `number` ||\n typeof value === `bigint`\n ) {\n return value\n }\n if (typeof value !== `object`) {\n throw new RemoteSubsetWireValueError(path, describe(value))\n }\n\n const existing = state.wireValues.get(value)\n if (existing) return existing\n\n if (\n typeof SharedArrayBuffer !== `undefined` &&\n value instanceof SharedArrayBuffer\n ) {\n throw new RemoteSubsetWireValueError(path, `SharedArrayBuffer`)\n }\n if (value instanceof NativeDate) {\n assertExactPrototype(value, NativeDate.prototype, path)\n assertNoOwnProperties(value, path)\n const time = value.getTime()\n const projected = state.validateOnly ? value : new NativeDate(time)\n state.wireValues.set(value, projected)\n return projected\n }\n if (value instanceof RegExp) {\n assertExactPrototype(value, RegExp.prototype, path)\n assertRegExpShape(value, path)\n const { source, flags } = value\n const projected = state.validateOnly ? value : new RegExp(source, flags)\n state.wireValues.set(value, projected)\n return projected\n }\n if (value instanceof ArrayBuffer) {\n assertExactPrototype(value, ArrayBuffer.prototype, path)\n assertNoOwnProperties(value, path)\n assertFixedArrayBuffer(value, path)\n let projected: ArrayBuffer\n try {\n if (state.validateOnly) {\n // A zero-length view checks detachment without copying the backing bytes.\n new Uint8Array(value, 0, 0)\n projected = value\n } else {\n projected = value.slice(0)\n }\n } catch {\n throw new RemoteSubsetWireValueError(path, `detached ArrayBuffer`)\n }\n state.wireValues.set(value, projected)\n return projected\n }\n if (value instanceof DataView) {\n assertExactPrototype(value, DataView.prototype, path)\n assertNoOwnProperties(value, path)\n let byteOffset: number\n let byteLength: number\n let buffer: ArrayBufferLike\n try {\n byteOffset = value.byteOffset\n byteLength = value.byteLength\n buffer = value.buffer\n } catch {\n throw new RemoteSubsetWireValueError(path, `detached DataView`)\n }\n const projectedBuffer = projectWireValue(buffer, path, state)\n if (!(projectedBuffer instanceof ArrayBuffer)) {\n throw new RemoteSubsetWireValueError(path, `shared DataView buffer`)\n }\n const projected = state.validateOnly\n ? value\n : new DataView(projectedBuffer, byteOffset, byteLength)\n state.wireValues.set(value, projected)\n return projected\n }\n\n const typedArrayConstructor = getTypedArrayConstructor(value)\n if (typedArrayConstructor) {\n const typedArray = value as RemoteSubsetWireTypedArray\n assertTypedArrayShape(typedArray, path)\n let byteOffset: number\n let length: number\n let buffer: ArrayBufferLike\n try {\n byteOffset = typedArray.byteOffset\n length = typedArray.length\n buffer = typedArray.buffer\n } catch {\n throw new RemoteSubsetWireValueError(path, `detached typed array`)\n }\n if (!(buffer instanceof ArrayBuffer)) {\n throw new RemoteSubsetWireValueError(path, `shared typed-array buffer`)\n }\n const projectedBuffer = projectWireValue(buffer, path, state)\n if (!(projectedBuffer instanceof ArrayBuffer)) {\n throw new RemoteSubsetWireValueError(path, `shared typed-array buffer`)\n }\n let projected: RemoteSubsetWireTypedArray\n try {\n projected = state.validateOnly\n ? typedArray\n : new typedArrayConstructor(projectedBuffer, byteOffset, length)\n } catch {\n throw new RemoteSubsetWireValueError(path, `detached typed array`)\n }\n state.wireValues.set(value, projected)\n return projected\n }\n if (ArrayBuffer.isView(value)) {\n throw new RemoteSubsetWireValueError(path, describe(value))\n }\n if (Array.isArray(value)) return projectWireArray(value, path, state)\n if (value instanceof Map) return projectWireMap(value, path, state)\n if (value instanceof Set) return projectWireSet(value, path, state)\n return projectWireRecord(value, path, state)\n}\n\nfunction projectWireArray(\n value: Array<unknown>,\n path: string,\n state: ProjectionState,\n): Array<RemoteSubsetWireValue> {\n assertArrayShape(value, path)\n const projected = state.validateOnly\n ? (value as Array<RemoteSubsetWireValue>)\n : new Array<RemoteSubsetWireValue>(value.length)\n state.wireValues.set(value, projected)\n for (let index = 0; index < value.length; index++) {\n if (index in value) {\n const result = projectWireValue(value[index], `${path}[${index}]`, state)\n if (!state.validateOnly) projected[index] = result\n }\n }\n return projected\n}\n\nfunction projectWireMap(\n value: Map<unknown, unknown>,\n path: string,\n state: ProjectionState,\n): Map<RemoteSubsetWireValue, RemoteSubsetWireValue> {\n assertExactPrototype(value, Map.prototype, path)\n assertNoOwnProperties(value, path)\n const projected = state.validateOnly\n ? (value as Map<RemoteSubsetWireValue, RemoteSubsetWireValue>)\n : new Map<RemoteSubsetWireValue, RemoteSubsetWireValue>()\n state.wireValues.set(value, projected)\n let index = 0\n for (const [key, entry] of value) {\n const projectedKey = projectWireValue(\n key,\n `${path}.entries[${index}].key`,\n state,\n )\n const projectedValue = projectWireValue(\n entry,\n `${path}.entries[${index}].value`,\n state,\n )\n if (!state.validateOnly) projected.set(projectedKey, projectedValue)\n index++\n }\n return projected\n}\n\nfunction projectWireSet(\n value: Set<unknown>,\n path: string,\n state: ProjectionState,\n): Set<RemoteSubsetWireValue> {\n assertExactPrototype(value, Set.prototype, path)\n assertNoOwnProperties(value, path)\n const projected = state.validateOnly\n ? (value as Set<RemoteSubsetWireValue>)\n : new Set<RemoteSubsetWireValue>()\n state.wireValues.set(value, projected)\n let index = 0\n for (const entry of value) {\n const result = projectWireValue(entry, `${path}.values[${index}]`, state)\n if (!state.validateOnly) projected.add(result)\n index++\n }\n return projected\n}\n\nfunction projectWireRecord(\n value: unknown,\n path: string,\n state: ProjectionState,\n): RemoteSubsetWireRecord {\n const source = requirePlainRecord(value, path)\n const existing = state.wireValues.get(source)\n if (existing) return existing as RemoteSubsetWireRecord\n const projected: RemoteSubsetWireRecord = state.validateOnly\n ? (source as RemoteSubsetWireRecord)\n : {}\n state.wireValues.set(source, projected)\n\n for (const key of ownKeys(source, path)) {\n const childPath = propertyPath(path, key)\n if (typeof key === `symbol`) {\n throw new RemoteSubsetWireValueError(childPath, `symbol property key`)\n }\n const descriptor = Object.getOwnPropertyDescriptor(source, key)\n if (!descriptor || !descriptor.enumerable || !(`value` in descriptor)) {\n throw new RemoteSubsetWireValueError(childPath, `non-data property`)\n }\n const result = projectWireValue(descriptor.value, childPath, state)\n if (!state.validateOnly) {\n Object.defineProperty(projected, key, {\n value: result,\n enumerable: true,\n writable: true,\n configurable: true,\n })\n }\n }\n return projected\n}\n\nfunction projectNumber(value: unknown, path: string): number {\n if (typeof value !== `number` || !Number.isSafeInteger(value) || value < 0) {\n throw new RemoteSubsetWireValueError(path, `non-negative safe integer`)\n }\n return value\n}\n\nfunction readRequiredDataProperty(\n value: object,\n key: string,\n path: string,\n): unknown {\n const property = readDataProperty(value, key, path)\n if (!property.present) {\n throw new RemoteSubsetWireValueError(path, `missing property`)\n }\n return property.value\n}\n\nfunction readDataProperty(\n value: object,\n key: string,\n path: string,\n): DataProperty {\n let descriptor: PropertyDescriptor | undefined\n try {\n descriptor = Object.getOwnPropertyDescriptor(value, key)\n } catch {\n throw new RemoteSubsetWireValueError(path, `unreadable property`)\n }\n if (!descriptor) return { present: false }\n if (!descriptor.enumerable || !(`value` in descriptor)) {\n throw new RemoteSubsetWireValueError(path, `non-data property`)\n }\n return { present: true, value: descriptor.value }\n}\n\nfunction assertAllowedProperties(\n value: object,\n path: string,\n allowed: ReadonlyArray<string>,\n): void {\n const allowedSet = new Set(allowed)\n for (const key of ownKeys(value, path)) {\n if (typeof key === `symbol` || !allowedSet.has(key)) {\n throw new RemoteSubsetWireValueError(propertyPath(path, key), `property`)\n }\n readDataProperty(value, key, propertyPath(path, key))\n }\n}\n\nfunction assertPlainContainer(value: object, path: string): void {\n assertExactPrototype(value, Object.prototype, path)\n}\n\nfunction assertExpressionPrototype(\n value: object,\n path: string,\n expressionPrototype: object,\n): void {\n let prototype: object | null\n try {\n prototype = Object.getPrototypeOf(value)\n } catch {\n throw new RemoteSubsetWireValueError(path, `unreadable prototype`)\n }\n if (prototype !== Object.prototype && prototype !== expressionPrototype) {\n throw new RemoteSubsetWireValueError(path, describe(value))\n }\n}\n\nfunction assertExactPrototype(\n value: object,\n expected: object,\n path: string,\n): void {\n let prototype: object | null\n try {\n prototype = Object.getPrototypeOf(value)\n } catch {\n throw new RemoteSubsetWireValueError(path, `unreadable prototype`)\n }\n if (prototype !== expected) {\n throw new RemoteSubsetWireValueError(path, describe(value))\n }\n}\n\nfunction assertNoOwnProperties(value: object, path: string): void {\n const keys = ownKeys(value, path)\n if (keys.length > 0) {\n throw new RemoteSubsetWireValueError(\n propertyPath(path, keys[0]!),\n `property`,\n )\n }\n}\n\nfunction assertFixedArrayBuffer(value: ArrayBuffer, path: string): void {\n if ((value as ArrayBuffer & { readonly resizable?: boolean }).resizable) {\n throw new RemoteSubsetWireValueError(path, `resizable ArrayBuffer`)\n }\n}\n\nfunction assertRegExpShape(value: RegExp, path: string): void {\n const keys = ownKeys(value, path)\n for (const key of keys) {\n if (key !== `lastIndex`) {\n throw new RemoteSubsetWireValueError(propertyPath(path, key), `property`)\n }\n }\n const descriptor = Object.getOwnPropertyDescriptor(value, `lastIndex`)\n if (!descriptor || !(`value` in descriptor) || descriptor.value !== 0) {\n throw new RemoteSubsetWireValueError(\n `${path}.lastIndex`,\n `RegExp lastIndex must be 0`,\n )\n }\n}\n\nfunction assertTypedArrayShape(\n value: RemoteSubsetWireTypedArray,\n path: string,\n): void {\n const keys = ownKeys(value, path)\n for (const key of keys) {\n if (typeof key !== `string` || !isCanonicalArrayIndex(key, value.length)) {\n throw new RemoteSubsetWireValueError(propertyPath(path, key), `property`)\n }\n }\n}\n\nfunction assertArrayShape(value: Array<unknown>, path: string): void {\n assertExactPrototype(value, Array.prototype, path)\n const keys = ownKeys(value, path)\n for (const key of keys) {\n if (\n key !== `length` &&\n (typeof key !== `string` || !isCanonicalArrayIndex(key, value.length))\n ) {\n throw new RemoteSubsetWireValueError(propertyPath(path, key), `property`)\n }\n if (key !== `length`) {\n readDataProperty(value, key, propertyPath(path, key))\n }\n }\n}\n\nfunction isCanonicalArrayIndex(key: string, length: number): boolean {\n if (!/^(0|[1-9][0-9]*)$/.test(key)) return false\n const index = Number(key)\n return Number.isSafeInteger(index) && index >= 0 && index < length\n}\n\nfunction getTypedArrayConstructor(\n value: object,\n): TypedArrayConstructor | undefined {\n let prototype: object | null\n try {\n prototype = Object.getPrototypeOf(value)\n } catch {\n return undefined\n }\n return typedArrayConstructors.find(\n (constructor) => prototype === constructor.prototype,\n )\n}\n\nfunction requireArray(value: unknown, path: string): Array<unknown> {\n if (!Array.isArray(value)) {\n throw new RemoteSubsetWireValueError(path, describe(value))\n }\n return value\n}\n\nfunction requireObject(value: unknown, path: string): object {\n if (value === null || typeof value !== `object`) {\n throw new RemoteSubsetWireValueError(path, describe(value))\n }\n return value\n}\n\nfunction requirePlainRecord(\n value: unknown,\n path: string,\n): Record<string, unknown> {\n const object = requireObject(value, path)\n assertExactPrototype(object, Object.prototype, path)\n return object as Record<string, unknown>\n}\n\nfunction ownKeys(value: object, path: string): Array<string | symbol> {\n try {\n return Reflect.ownKeys(value)\n } catch {\n throw new RemoteSubsetWireValueError(path, `unreadable properties`)\n }\n}\n\nfunction propertyPath(path: string, key: string | symbol): string {\n if (typeof key === `symbol`) return `${path}[${String(key)}]`\n return identifierPattern.test(key)\n ? `${path}.${key}`\n : `${path}[${JSON.stringify(key)}]`\n}\n\nfunction describe(value: unknown): string {\n if (value === null) return `null`\n if (typeof value !== `object`) return typeof value\n return `object`\n}\n"],"names":["IR","result"],"mappings":"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"}
@@ -55,5 +55,7 @@ export declare class RemoteSubsetWireValueError extends TypeError {
55
55
  * Validation happens before callers choose a local-leader or transported path.
56
56
  */
57
57
  export declare function toTransportedLoadSubsetOptions(options: LoadSubsetOptions): TransportedLoadSubsetOptions;
58
+ /** Checks wire admission without constructing a detached request snapshot. */
59
+ export declare function validateRemoteSubsetOptions(options: LoadSubsetOptions): void;
58
60
  /** Adds live lifecycle references only to an already validated local request. */
59
61
  export declare function toProcessLocalLoadSubsetOptions(options: LoadSubsetOptions, transported?: TransportedLoadSubsetOptions): TransportedLoadSubsetOptions & Pick<LoadSubsetOptions, `signal` | `subscription`>;
@@ -117,7 +117,10 @@ const persistedTaggedValueTypes = /* @__PURE__ */ new Set([
117
117
  `date`,
118
118
  `nan`,
119
119
  `infinity`,
120
- `-infinity`
120
+ `-infinity`,
121
+ `string`,
122
+ `Temporal.Instant`,
123
+ `Temporal.PlainDate`
121
124
  ]);
122
125
  const orderByObjectIds = /* @__PURE__ */ new WeakMap();
123
126
  let nextOrderByObjectId = 1;
@@ -155,6 +158,8 @@ function encodePersistedJsonValue(value) {
155
158
  if (typeof value === `bigint`) {
156
159
  return sqliteValue.serializeSQLiteBigInt(value);
157
160
  }
161
+ const temporal = sqliteValue.serializeSQLiteTemporal(value);
162
+ if (temporal) return temporal;
158
163
  if (value instanceof Date) {
159
164
  return {
160
165
  [sqliteValue.PERSISTED_TYPE_TAG]: `date`,
@@ -194,6 +199,12 @@ function encodePersistedJsonValue(value) {
194
199
  encodedRecord[key] = encodedValue;
195
200
  }
196
201
  }
202
+ if (typeof recordValue[sqliteValue.PERSISTED_TYPE_TAG] === `string`) {
203
+ encodedRecord[sqliteValue.PERSISTED_TYPE_TAG] = {
204
+ [sqliteValue.PERSISTED_TYPE_TAG]: `string`,
205
+ [sqliteValue.PERSISTED_VALUE_TAG]: recordValue[sqliteValue.PERSISTED_TYPE_TAG]
206
+ };
207
+ }
197
208
  return encodedRecord;
198
209
  }
199
210
  return value;
@@ -204,6 +215,14 @@ function decodePersistedJsonValue(value) {
204
215
  }
205
216
  if (isPersistedTaggedValue(value)) {
206
217
  switch (value[sqliteValue.PERSISTED_TYPE_TAG]) {
218
+ case `string`:
219
+ return value[sqliteValue.PERSISTED_VALUE_TAG];
220
+ case `Temporal.Instant`:
221
+ case `Temporal.PlainDate`:
222
+ return sqliteValue.reviveSQLiteTemporal(
223
+ value[sqliteValue.PERSISTED_TYPE_TAG],
224
+ value[sqliteValue.PERSISTED_VALUE_TAG]
225
+ );
207
226
  case `bigint`:
208
227
  return BigInt(value[sqliteValue.PERSISTED_VALUE_TAG]);
209
228
  case `date`: {
@@ -263,7 +282,8 @@ function toSqliteParameterValue(value) {
263
282
  if (value instanceof Date) {
264
283
  return value.toISOString();
265
284
  }
266
- return serializePersistedRowValue(value);
285
+ const temporal = sqliteValue.serializeSQLiteTemporal(value);
286
+ return temporal?.order ?? serializePersistedRowValue(value);
267
287
  }
268
288
  function toSqliteLiteral(value) {
269
289
  if (value === null) {
@@ -272,6 +292,9 @@ function toSqliteLiteral(value) {
272
292
  if (typeof value === `number`) {
273
293
  return Number.isFinite(value) ? String(value) : `NULL`;
274
294
  }
295
+ if (value.includes(`\0`)) {
296
+ return `json_extract(${toSqliteLiteral(JSON.stringify(value))}, '$')`;
297
+ }
275
298
  return `'${value.replace(/'/g, `''`)}'`;
276
299
  }
277
300
  function toSqliteExpressionLiteral(value) {
@@ -347,6 +370,9 @@ function compareOrderByValues(left, right, compareOptions) {
347
370
  if (left instanceof Date && right instanceof Date) {
348
371
  return left.getTime() - right.getTime();
349
372
  }
373
+ if (sqliteValue.sqliteTemporalKind(left) && sqliteValue.sqliteTemporalKind(right)) {
374
+ return db.compareTemporalValues(left, right);
375
+ }
350
376
  const leftIsObject = typeof left === `object`;
351
377
  const rightIsObject = typeof right === `object`;
352
378
  if (leftIsObject || rightIsObject) {
@@ -453,16 +479,23 @@ function compileRefExpressionSql(jsonPath) {
453
479
  const typePathSql = toSqliteLiteral(typePath);
454
480
  const taggedValuePathSql = toSqliteLiteral(taggedValuePath);
455
481
  const jsonPathSql = toSqliteLiteral(jsonPath);
456
- return {
457
- supported: true,
458
- sql: `(CASE json_extract(value, ${typePathSql})
482
+ const typeSql = `json_extract(value, ${typePathSql})`;
483
+ const orderPathSql = toSqliteLiteral(`${jsonPath}.order`);
484
+ const sql = `(CASE ${typeSql}
459
485
  WHEN 'bigint' THEN CAST(json_extract(value, ${taggedValuePathSql}) AS NUMERIC)
460
486
  WHEN 'date' THEN json_extract(value, ${taggedValuePathSql})
487
+ WHEN 'string' THEN json_extract(value, ${taggedValuePathSql})
488
+ WHEN 'Temporal.Instant' THEN json_extract(value, ${orderPathSql})
489
+ WHEN 'Temporal.PlainDate' THEN json_extract(value, ${orderPathSql})
461
490
  WHEN 'nan' THEN NULL
462
491
  WHEN 'infinity' THEN NULL
463
492
  WHEN '-infinity' THEN NULL
464
493
  ELSE json_extract(value, ${jsonPathSql})
465
- END)`,
494
+ END)`;
495
+ return {
496
+ supported: true,
497
+ sql,
498
+ identitySql: `(CASE WHEN ${typeSql} IN ('Temporal.Instant', 'Temporal.PlainDate') THEN ${typeSql} || ':' || json_extract(value, ${taggedValuePathSql}) ELSE ${sql} END)`,
466
499
  params: [],
467
500
  valueKind: `unknown`
468
501
  };
@@ -490,6 +523,11 @@ function decodeStoredSqliteRows(storedRows) {
490
523
  function stableStringify(value) {
491
524
  return serializePersistedRowValue(value);
492
525
  }
526
+ function joinSqlDisjunction(parts) {
527
+ if (parts.length === 1) return parts[0];
528
+ const middle = Math.floor(parts.length / 2);
529
+ return `(${joinSqlDisjunction(parts.slice(0, middle))} OR ${joinSqlDisjunction(parts.slice(middle))})`;
530
+ }
493
531
  function argumentCompilationContext(parentName, argumentIndex, argument, parentContext) {
494
532
  if (parentContext === `index-expression`) return `index-expression`;
495
533
  switch (parentName) {
@@ -519,7 +557,7 @@ function hasUnpairedSurrogate(value) {
519
557
  return /[\uD800-\uDFFF]/u.test(value);
520
558
  }
521
559
  function isSafeEqualityLiteral(value) {
522
- return typeof value === `string` || typeof value === `boolean` || typeof value === `bigint`;
560
+ return typeof value === `string` || typeof value === `boolean` || typeof value === `bigint` || sqliteValue.sqliteTemporalKind(value) !== void 0;
523
561
  }
524
562
  function isSafeCoalesceOperand(expression) {
525
563
  return expression?.type === `func` && expression.name === `coalesce` && expression.args.length === 2 && expression.args[0]?.type === `ref` && expression.args[1]?.type === `val` && isSafeEqualityLiteral(expression.args[1].value) && !(typeof expression.args[1].value === `string` && hasUnpairedSurrogate(expression.args[1].value));
@@ -533,12 +571,16 @@ function compileSqlExpression(expression, context = `predicate`) {
533
571
  params: [JSON.stringify(expression.value)]
534
572
  };
535
573
  }
536
- const valueKind = getLiteralValueKind(expression.value);
574
+ const temporal = sqliteValue.serializeSQLiteTemporal(expression.value);
575
+ const value = temporal?.order ?? toSqliteParameterValue(expression.value);
537
576
  return {
577
+ identitySql: temporal ? toSqliteLiteral(sqliteValue.sqliteTemporalIdentity(temporal)) : void 0,
538
578
  supported: true,
539
- sql: context === `index-expression` ? toSqliteExpressionLiteral(expression.value) : `?`,
540
- params: context === `predicate` ? [toSqliteParameterValue(expression.value)] : [],
541
- valueKind
579
+ sql: context === `index-expression` ? toSqliteExpressionLiteral(
580
+ typeof expression.value === `bigint` ? expression.value : value
581
+ ) : `?`,
582
+ params: context === `predicate` ? [value] : [],
583
+ valueKind: getLiteralValueKind(expression.value)
542
584
  };
543
585
  }
544
586
  if (expression.type === `ref`) {
@@ -553,14 +595,17 @@ function compileSqlExpression(expression, context = `predicate`) {
553
595
  };
554
596
  }
555
597
  if (jsonPaths.length === 1) return compileRefExpressionSql(jsonPaths[0]);
598
+ const variants = jsonPaths.map(compileRefExpressionSql);
556
599
  return {
557
600
  supported: true,
558
- sql: `COALESCE(${jsonPaths.map((path) => compileRefExpressionSql(path).sql).join(`, `)})`,
601
+ identitySql: `COALESCE(${variants.map((variant) => variant.identitySql).join(`, `)})`,
602
+ sql: `COALESCE(${variants.map((variant) => variant.sql).join(`, `)})`,
559
603
  params: [],
560
604
  valueKind: `unknown`
561
605
  };
562
606
  }
563
- const compiledArgs = expression.args.map(
607
+ const args = expression.name === `in` ? expression.args.slice(0, 1) : expression.args;
608
+ const compiledArgs = args.map(
564
609
  (arg, index) => compileSqlExpression(
565
610
  arg,
566
611
  argumentCompilationContext(expression.name, index, arg, context)
@@ -597,18 +642,22 @@ function compileSqlExpression(expression, context = `predicate`) {
597
642
  lt: `<`,
598
643
  lte: `<=`
599
644
  };
645
+ const comparison = compileComparisonSql(
646
+ operatorByName[expression.name],
647
+ expression.args[0],
648
+ expression.args[1],
649
+ argSql[0],
650
+ argSql[1],
651
+ valueKind,
652
+ getCompiledValueKind(compiledArgs[0]),
653
+ getCompiledValueKind(compiledArgs[1])
654
+ );
655
+ const needsIdentity = expression.name === `eq` && expression.args.every(
656
+ (arg) => arg.type !== `val` || sqliteValue.sqliteTemporalKind(arg.value) || context === `index-expression` && typeof arg.value === `string`
657
+ );
600
658
  return {
601
659
  supported: true,
602
- sql: compileComparisonSql(
603
- operatorByName[expression.name],
604
- expression.args[0],
605
- expression.args[1],
606
- argSql[0],
607
- argSql[1],
608
- valueKind,
609
- getCompiledValueKind(compiledArgs[0]),
610
- getCompiledValueKind(compiledArgs[1])
611
- ),
660
+ sql: needsIdentity ? `(${comparison} AND (${compiledArgs[0].identitySql ?? argSql[0]} = ${compiledArgs[1].identitySql ?? argSql[1]}))` : comparison,
612
661
  params
613
662
  };
614
663
  }
@@ -653,19 +702,33 @@ function compileSqlExpression(expression, context = `predicate`) {
653
702
  if (!leftSql) {
654
703
  return { supported: false, sql: ``, params: [] };
655
704
  }
705
+ const values = listValue.map((value) => {
706
+ const temporal = sqliteValue.serializeSQLiteTemporal(value);
707
+ return {
708
+ value: typeof value === `bigint` ? sqliteValue.assertSQLiteBigIntInRange(value) : temporal?.order ?? toSqliteParameterValue(value),
709
+ identity: temporal ? sqliteValue.sqliteTemporalIdentity(temporal) : void 0
710
+ };
711
+ });
712
+ let identity = ``;
713
+ if (listValue.some(
714
+ (value) => sqliteValue.sqliteTemporalKind(value) || context === `index-expression` && typeof value === `string`
715
+ )) {
716
+ const leftIdentity = compiledArgs[0]?.identitySql ?? leftSql;
717
+ identity = context === `index-expression` ? ` AND (${joinSqlDisjunction(values.map(({ value, identity: nativeIdentity }) => `(${leftSql} = ${toSqliteExpressionLiteral(value)} AND ${leftIdentity} = ${toSqliteExpressionLiteral(nativeIdentity ?? value)})`))})` : ` AND ((${leftSql}, ${leftIdentity}) IN (VALUES ${[...new Set(values.map(({ value, identity: nativeIdentity }) => `(${toSqliteExpressionLiteral(value)}, ${toSqliteExpressionLiteral(nativeIdentity ?? value)})`))].join(`, `)}))`;
718
+ }
656
719
  if (context === `index-expression`) {
657
720
  return {
658
721
  supported: true,
659
- sql: `(${leftSql} IN (${listValue.map((value) => toSqliteExpressionLiteral(value)).join(`, `)}))`,
722
+ sql: `(${leftSql} IN (${values.map(({ value }) => toSqliteExpressionLiteral(value)).join(`, `)})${identity})`,
660
723
  params: leftParams
661
724
  };
662
725
  }
663
- const jsonList = `[${listValue.map(
664
- (value) => typeof value === `bigint` ? sqliteValue.assertSQLiteBigIntInRange(value).toString() : JSON.stringify(toSqliteParameterValue(value))
726
+ const jsonList = `[${values.map(
727
+ ({ value }) => typeof value === `bigint` ? sqliteValue.assertSQLiteBigIntInRange(value).toString() : JSON.stringify(value)
665
728
  ).join(`,`)}]`;
666
729
  return {
667
730
  supported: true,
668
- sql: `(${leftSql} IN (SELECT value FROM json_each(?)))`,
731
+ sql: `(${leftSql} IN (SELECT value FROM json_each(?))${identity})`,
669
732
  params: [...leftParams, jsonList]
670
733
  };
671
734
  }
@@ -693,7 +756,12 @@ function compileSqlExpression(expression, context = `predicate`) {
693
756
  case `concat`:
694
757
  return { supported: true, sql: `(${argSql.join(` || `)})`, params };
695
758
  case `coalesce`:
696
- return { supported: true, sql: `COALESCE(${argSql.join(`, `)})`, params };
759
+ return {
760
+ supported: true,
761
+ sql: `COALESCE(${argSql.join(`, `)})`,
762
+ identitySql: `COALESCE(${compiledArgs.map((arg) => arg.identitySql ?? arg.sql).join(`, `)})`,
763
+ params
764
+ };
697
765
  case `add`:
698
766
  return { supported: true, sql: `(${argSql[0]} + ${argSql[1]})`, params };
699
767
  case `subtract`:
@@ -730,6 +798,31 @@ function compileSqlExpression(expression, context = `predicate`) {
730
798
  };
731
799
  }
732
800
  }
801
+ function nativeComparisonRef(expression) {
802
+ if (expression.type !== `func` || expression.args.length !== 2)
803
+ return void 0;
804
+ const [left, right] = expression.args;
805
+ if (expression.name === `in`) {
806
+ return left?.type === `ref` && right?.type === `val` && Array.isArray(right.value) && right.value.length > 0 && right.value.every((value) => sqliteValue.sqliteTemporalKind(value)) ? left : void 0;
807
+ }
808
+ if (![`eq`, `gt`, `gte`, `lt`, `lte`].includes(expression.name))
809
+ return void 0;
810
+ if (left?.type === `ref` && right?.type === `val` && sqliteValue.sqliteTemporalKind(right.value))
811
+ return left;
812
+ if (right?.type === `ref` && left?.type === `val` && sqliteValue.sqliteTemporalKind(left.value))
813
+ return right;
814
+ return void 0;
815
+ }
816
+ function compileNativeRefGuard(ref) {
817
+ const paths = createJsonPathVariants(
818
+ db.IR.getPropRefPropertyPath(ref).map(String)
819
+ );
820
+ const kinds = paths.map(
821
+ (path) => `json_extract(value, ${toSqliteLiteral(`${path}.${sqliteValue.PERSISTED_TYPE_TAG}`)})`
822
+ );
823
+ const kind = kinds.length === 1 ? kinds[0] : `COALESCE(${kinds.join(`, `)})`;
824
+ return `${kind} IN ('Temporal.Instant', 'Temporal.PlainDate')`;
825
+ }
733
826
  function compileSafeSqlPrefilter(expression, compiled) {
734
827
  const direct = () => {
735
828
  const candidate = compiled ?? compileSqlExpression(expression);
@@ -760,7 +853,22 @@ function compileSafeSqlPrefilter(expression, compiled) {
760
853
  compiled ??= compileSqlExpression(expression);
761
854
  if (!compiled.supported) return void 0;
762
855
  const [left, right] = expression.args;
856
+ if (expression.name === `not` && expression.args.length === 1 && left && nativeComparisonRef(left)) {
857
+ return { ...compiled, sql: `COALESCE(${compiled.sql}, 1)` };
858
+ }
763
859
  if (expression.args.length === 2) {
860
+ const nativeRef = nativeComparisonRef(expression);
861
+ if (nativeRef) {
862
+ if (expression.name === `eq` || expression.name === `in`) return compiled;
863
+ const fieldSql = compileSqlExpression(nativeRef, `index-expression`).sql;
864
+ return { ...compiled, sql: `(${compiled.sql} OR ${fieldSql} IS NULL)` };
865
+ }
866
+ if (expression.name === `eq` && left?.type === `ref` && right?.type === `ref`) {
867
+ return {
868
+ ...compiled,
869
+ sql: `(CASE WHEN ${compileNativeRefGuard(left)} AND ${compileNativeRefGuard(right)} THEN ${compiled.sql} ELSE 1 END)`
870
+ };
871
+ }
764
872
  if ([`gt`, `gte`, `lt`, `lte`].includes(expression.name) && (left?.type === `ref` || right?.type === `ref`)) {
765
873
  const field = left?.type === `ref` ? left : right?.type === `ref` ? right : void 0;
766
874
  const literal = field === left ? right : left;