@tanstack/db-sqlite-persistence-core 0.4.7 → 0.4.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +32 -3
- package/dist/cjs/broadcast-coordinator.cjs +282 -43
- package/dist/cjs/broadcast-coordinator.cjs.map +1 -1
- package/dist/cjs/broadcast-coordinator.d.cts +25 -8
- package/dist/cjs/committed-tx-anchor.cjs +9 -0
- package/dist/cjs/committed-tx-anchor.cjs.map +1 -0
- package/dist/cjs/committed-tx-anchor.d.cts +1 -0
- package/dist/cjs/index.cjs +4 -0
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/persisted.cjs +1599 -313
- package/dist/cjs/persisted.cjs.map +1 -1
- package/dist/cjs/persisted.d.cts +106 -13
- package/dist/cjs/remote-subset-wire.cjs +11 -0
- package/dist/cjs/remote-subset-wire.cjs.map +1 -1
- package/dist/cjs/remote-subset-wire.d.cts +1 -0
- package/dist/cjs/sqlite-core-adapter.cjs +705 -64
- package/dist/cjs/sqlite-core-adapter.cjs.map +1 -1
- package/dist/cjs/sqlite-core-adapter.d.cts +53 -10
- package/dist/esm/broadcast-coordinator.d.ts +25 -8
- package/dist/esm/broadcast-coordinator.js +283 -44
- package/dist/esm/broadcast-coordinator.js.map +1 -1
- package/dist/esm/committed-tx-anchor.d.ts +1 -0
- package/dist/esm/committed-tx-anchor.js +9 -0
- package/dist/esm/committed-tx-anchor.js.map +1 -0
- package/dist/esm/index.js +6 -2
- package/dist/esm/persisted.d.ts +106 -13
- package/dist/esm/persisted.js +1601 -315
- package/dist/esm/persisted.js.map +1 -1
- package/dist/esm/remote-subset-wire.d.ts +1 -0
- package/dist/esm/remote-subset-wire.js +11 -0
- package/dist/esm/remote-subset-wire.js.map +1 -1
- package/dist/esm/sqlite-core-adapter.d.ts +53 -10
- package/dist/esm/sqlite-core-adapter.js +708 -67
- package/dist/esm/sqlite-core-adapter.js.map +1 -1
- package/package.json +2 -2
- package/src/broadcast-coordinator.ts +415 -62
- package/src/committed-tx-anchor.ts +13 -0
- package/src/persisted.ts +2283 -370
- package/src/remote-subset-wire.ts +12 -0
- package/src/sqlite-core-adapter.ts +891 -68
package/dist/cjs/persisted.d.cts
CHANGED
|
@@ -49,6 +49,7 @@ export type TxCommitted = {
|
|
|
49
49
|
latestRowVersion: number;
|
|
50
50
|
} & ({
|
|
51
51
|
requiresFullReload: true;
|
|
52
|
+
reconciliationReload?: true;
|
|
52
53
|
} | {
|
|
53
54
|
requiresFullReload: false;
|
|
54
55
|
changedRows: Array<{
|
|
@@ -149,6 +150,41 @@ export type ApplyCommittedTxResponse = {
|
|
|
149
150
|
sourceCode?: string | number;
|
|
150
151
|
path?: string | ReadonlyArray<string | number>;
|
|
151
152
|
};
|
|
153
|
+
/** The durable version read before a source transaction enters coordination. */
|
|
154
|
+
export type CommittedTxAnchor = {
|
|
155
|
+
latestRowVersion: number;
|
|
156
|
+
resetEpoch: number;
|
|
157
|
+
};
|
|
158
|
+
export type ReconcileCommittedTxResponse = {
|
|
159
|
+
type: `rpc:reconcileCommittedTx:res`;
|
|
160
|
+
rpcId: string;
|
|
161
|
+
ok: true;
|
|
162
|
+
alreadyApplied: boolean;
|
|
163
|
+
committed: {
|
|
164
|
+
term: number;
|
|
165
|
+
seq: number;
|
|
166
|
+
rowVersion: number;
|
|
167
|
+
};
|
|
168
|
+
} | {
|
|
169
|
+
type: `rpc:reconcileCommittedTx:res`;
|
|
170
|
+
rpcId: string;
|
|
171
|
+
ok: false;
|
|
172
|
+
code: `NOT_LEADER` | `UNDETERMINED` | `PERSISTENCE_ERROR`;
|
|
173
|
+
error: string;
|
|
174
|
+
sourceCode?: string | number;
|
|
175
|
+
path?: string | ReadonlyArray<string | number>;
|
|
176
|
+
};
|
|
177
|
+
export type ReconciledCommittedTx = {
|
|
178
|
+
kind: `already-applied` | `applied-now`;
|
|
179
|
+
committed: {
|
|
180
|
+
term: number;
|
|
181
|
+
seq: number;
|
|
182
|
+
rowVersion: number;
|
|
183
|
+
};
|
|
184
|
+
latestRowVersion: number;
|
|
185
|
+
} | {
|
|
186
|
+
kind: `unknown`;
|
|
187
|
+
};
|
|
152
188
|
export type PullSinceRequest = {
|
|
153
189
|
type: `rpc:pullSince:req`;
|
|
154
190
|
rpcId: string;
|
|
@@ -223,6 +259,27 @@ export type PersistedScannedRow<T extends object = Record<string, unknown>, TKey
|
|
|
223
259
|
};
|
|
224
260
|
export type PersistedRowScanOptions = SyncPersistenceScanOptions;
|
|
225
261
|
export type PersistedKeySetEvidence = SyncPersistenceKeySetEvidence;
|
|
262
|
+
export type PersistedCacheGenerationClaim = {
|
|
263
|
+
storageCollectionId: string;
|
|
264
|
+
claimId: string;
|
|
265
|
+
/** Present when the adapter expires dormant claims. */
|
|
266
|
+
expiresAtMs?: number;
|
|
267
|
+
};
|
|
268
|
+
/** An eager Collection name or a claim-bound persisted cache generation. */
|
|
269
|
+
export type PersistedStorageTarget = {
|
|
270
|
+
kind: `eager`;
|
|
271
|
+
collectionId: string;
|
|
272
|
+
} | {
|
|
273
|
+
kind: `managed`;
|
|
274
|
+
storageCollectionId: string;
|
|
275
|
+
claimId: string;
|
|
276
|
+
};
|
|
277
|
+
export declare function eagerStorageTarget(collectionId: string): PersistedStorageTarget;
|
|
278
|
+
export declare function managedStorageTarget(storageCollectionId: string, claimId: string): PersistedStorageTarget;
|
|
279
|
+
export declare function resolvePersistedStorageTarget(target: PersistedStorageTarget, legacyClaimId?: string): {
|
|
280
|
+
collectionId: string;
|
|
281
|
+
claimId?: string;
|
|
282
|
+
};
|
|
226
283
|
export type PersistencePullSinceResult = {
|
|
227
284
|
latestRowVersion: number;
|
|
228
285
|
requiresFullReload: true;
|
|
@@ -238,6 +295,8 @@ export type PersistedTx<T extends object = Record<string, unknown>, TKey extends
|
|
|
238
295
|
term: number;
|
|
239
296
|
seq: number;
|
|
240
297
|
rowVersion: number;
|
|
298
|
+
/** Claim authorizing this transaction's persisted cache generation. */
|
|
299
|
+
cacheGenerationClaimId?: string;
|
|
241
300
|
truncate?: boolean;
|
|
242
301
|
mutations: Array<{
|
|
243
302
|
type: `insert`;
|
|
@@ -272,16 +331,18 @@ export type PersistedTx<T extends object = Record<string, unknown>, TKey extends
|
|
|
272
331
|
*/
|
|
273
332
|
export declare const SQLITE_DRIVER_SHARED_LOGICAL_SCHEDULING_KEY: unique symbol;
|
|
274
333
|
export interface PersistenceAdapter {
|
|
275
|
-
loadSubset: (
|
|
334
|
+
loadSubset: (target: PersistedStorageTarget, options: LoadSubsetOptions, ctx?: {
|
|
276
335
|
requiredIndexSignatures?: ReadonlyArray<string>;
|
|
336
|
+
cacheGenerationClaimId?: string;
|
|
277
337
|
}) => Promise<Array<{
|
|
278
338
|
key: string | number;
|
|
279
339
|
value: Record<string, unknown>;
|
|
280
340
|
metadata?: unknown;
|
|
281
341
|
}>>;
|
|
282
|
-
loadResumeSnapshot: (
|
|
342
|
+
loadResumeSnapshot: (target: PersistedStorageTarget, ctx?: {
|
|
283
343
|
requiredIndexSignatures?: ReadonlyArray<string>;
|
|
284
344
|
includeRows?: boolean;
|
|
345
|
+
cacheGenerationClaimId?: string;
|
|
285
346
|
}) => Promise<{
|
|
286
347
|
rows: Array<{
|
|
287
348
|
key: string | number;
|
|
@@ -298,15 +359,43 @@ export interface PersistenceAdapter {
|
|
|
298
359
|
latestRowVersion: number;
|
|
299
360
|
resetEpoch: number;
|
|
300
361
|
}>;
|
|
301
|
-
applyCommittedTx: (
|
|
302
|
-
|
|
362
|
+
applyCommittedTx: (target: PersistedStorageTarget, tx: PersistedTx) => Promise<void>;
|
|
363
|
+
claimCacheGeneration?: (collectionId: string) => Promise<PersistedCacheGenerationClaim>;
|
|
364
|
+
rotateCacheGeneration?: (collectionId: string, claimId: string, resetMetadata?: {
|
|
365
|
+
key: string;
|
|
366
|
+
value: unknown;
|
|
367
|
+
}, expectedStorageCollectionId?: string) => Promise<PersistedCacheGenerationClaim>;
|
|
368
|
+
releaseCacheGenerationClaim?: (claimId: string) => Promise<void>;
|
|
369
|
+
renewCacheGenerationClaim?: (storageCollectionId: string, claimId: string) => Promise<number | undefined>;
|
|
370
|
+
getCacheGenerationNow?: () => number;
|
|
371
|
+
/** Atomically certify or apply one source transaction after a lost response. */
|
|
372
|
+
reconcileCommittedTx?: (target: PersistedStorageTarget, tx: PersistedTx, anchor: CommittedTxAnchor) => Promise<ReconciledCommittedTx>;
|
|
373
|
+
loadCollectionMetadata?: (target: PersistedStorageTarget, ctx?: {
|
|
374
|
+
cacheGenerationClaimId?: string;
|
|
375
|
+
}) => Promise<Array<{
|
|
303
376
|
key: string;
|
|
304
377
|
value: unknown;
|
|
305
378
|
}>>;
|
|
306
|
-
scanRows?: (
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
379
|
+
scanRows?: (target: PersistedStorageTarget, options?: PersistedRowScanOptions, ctx?: {
|
|
380
|
+
cacheGenerationClaimId?: string;
|
|
381
|
+
}) => Promise<Array<PersistedScannedRow>>;
|
|
382
|
+
ensureIndex: (target: PersistedStorageTarget, signature: string, spec: PersistedIndexSpec, ctx?: {
|
|
383
|
+
cacheGenerationClaimId?: string;
|
|
384
|
+
}) => Promise<void>;
|
|
385
|
+
markIndexRemoved?: (target: PersistedStorageTarget, signature: string, ctx?: {
|
|
386
|
+
cacheGenerationClaimId?: string;
|
|
387
|
+
}) => Promise<void>;
|
|
388
|
+
getStreamPosition?: (target: PersistedStorageTarget, ctx?: {
|
|
389
|
+
cacheGenerationClaimId?: string;
|
|
390
|
+
}) => Promise<{
|
|
391
|
+
latestTerm: number;
|
|
392
|
+
latestSeq: number;
|
|
393
|
+
latestRowVersion: number;
|
|
394
|
+
}>;
|
|
395
|
+
/** Reserve a new durable election term before announcing Browser leadership. */
|
|
396
|
+
reserveLeadershipTerm?: (target: PersistedStorageTarget, observedTerm: number, ctx?: {
|
|
397
|
+
cacheGenerationClaimId?: string;
|
|
398
|
+
}) => Promise<{
|
|
310
399
|
latestTerm: number;
|
|
311
400
|
latestSeq: number;
|
|
312
401
|
latestRowVersion: number;
|
|
@@ -323,7 +412,9 @@ export interface PersistenceAdapter {
|
|
|
323
412
|
isHydrationScopeScheduled?: () => boolean;
|
|
324
413
|
}
|
|
325
414
|
export type HydrationPersistenceAdapter = PersistenceAdapter & {
|
|
326
|
-
pullSince?: (
|
|
415
|
+
pullSince?: (target: PersistedStorageTarget, fromRowVersion: number, ctx?: {
|
|
416
|
+
cacheGenerationClaimId?: string;
|
|
417
|
+
}) => Promise<PersistencePullSinceResult>;
|
|
327
418
|
};
|
|
328
419
|
export type { RemoteSubsetOwner } from './remote-subset-owner.cjs';
|
|
329
420
|
export interface SQLiteDriver {
|
|
@@ -343,7 +434,7 @@ export interface SQLiteDriver {
|
|
|
343
434
|
export declare function forwardSQLiteDriverSharedLogicalScheduling<TDriver extends SQLiteDriver>(source: SQLiteDriver, wrapper: TDriver): TDriver;
|
|
344
435
|
export interface PersistedCollectionCoordinator {
|
|
345
436
|
getNodeId: () => string;
|
|
346
|
-
setAdapterForCollection?: (collectionId: string, adapter: PersistenceAdapter) => void;
|
|
437
|
+
setAdapterForCollection?: (collectionId: string, adapter: PersistenceAdapter, cacheGenerationClaimId?: string) => void;
|
|
347
438
|
subscribe: (collectionId: string, onMessage: (message: ProtocolEnvelope<unknown>) => void) => () => void;
|
|
348
439
|
publish: (collectionId: string, message: ProtocolEnvelope<unknown>) => void;
|
|
349
440
|
isLeader: (collectionId: string) => boolean;
|
|
@@ -356,8 +447,8 @@ export interface PersistedCollectionCoordinator {
|
|
|
356
447
|
* and is never serialized to a follower. `localEnsureCompleted` lets the
|
|
357
448
|
* built-in leader avoid repeating successful local work.
|
|
358
449
|
*/
|
|
359
|
-
requestEnsurePersistedIndex: (collectionId: string, signature: string, spec: PersistedIndexSpec, scopedAdapter?: HydrationPersistenceAdapter, localEnsureCompleted?: boolean) => Promise<void>;
|
|
360
|
-
requestApplyLocalMutations?: (collectionId: string, mutations: Array<PersistedMutationEnvelope
|
|
450
|
+
requestEnsurePersistedIndex: (collectionId: string, signature: string, spec: PersistedIndexSpec, scopedAdapter?: HydrationPersistenceAdapter, localEnsureCompleted?: boolean, cacheGenerationClaimId?: string) => Promise<void>;
|
|
451
|
+
requestApplyLocalMutations?: (collectionId: string, mutations: Array<PersistedMutationEnvelope>, cacheGenerationClaimId?: string) => Promise<ApplyLocalMutationsResponse>;
|
|
361
452
|
/**
|
|
362
453
|
* Applies a committed transaction through the supplied adapter when present.
|
|
363
454
|
* Wrappers must forward this leader-local loan: scheduling it again can wait
|
|
@@ -365,8 +456,10 @@ export interface PersistedCollectionCoordinator {
|
|
|
365
456
|
* loan after the call; ordinary work uses the registered collection adapter.
|
|
366
457
|
*/
|
|
367
458
|
requestApplyCommittedTx: (collectionId: string, tx: PersistedTx, scopedAdapter?: HydrationPersistenceAdapter) => Promise<ApplyCommittedTxResponse>;
|
|
459
|
+
/** Available only when the elected adapter can certify the durable outcome. */
|
|
460
|
+
reconcileCommittedTx?: (collectionId: string, tx: PersistedTx, anchor: CommittedTxAnchor, scopedAdapter?: HydrationPersistenceAdapter) => Promise<ReconcileCommittedTxResponse>;
|
|
368
461
|
/** The scoped adapter is leader-local and is never serialized to a follower. */
|
|
369
|
-
pullSince?: (collectionId: string, fromRowVersion: number, scopedAdapter?: HydrationPersistenceAdapter) => Promise<PullSinceResponse>;
|
|
462
|
+
pullSince?: (collectionId: string, fromRowVersion: number, scopedAdapter?: HydrationPersistenceAdapter, cacheGenerationClaimId?: string) => Promise<PullSinceResponse>;
|
|
370
463
|
}
|
|
371
464
|
export interface PersistedCollectionPersistence {
|
|
372
465
|
adapter: PersistenceAdapter;
|
|
@@ -37,6 +37,7 @@ function visitLoadSubsetOptions(options, validateOnly) {
|
|
|
37
37
|
`limit`,
|
|
38
38
|
`cursor`,
|
|
39
39
|
`offset`,
|
|
40
|
+
`refetch`,
|
|
40
41
|
`signal`,
|
|
41
42
|
`subscription`
|
|
42
43
|
]);
|
|
@@ -57,6 +58,7 @@ function visitLoadSubsetOptions(options, validateOnly) {
|
|
|
57
58
|
const limit = readDataProperty(options, `limit`, `options.limit`);
|
|
58
59
|
const cursor = readDataProperty(options, `cursor`, `options.cursor`);
|
|
59
60
|
const offset = readDataProperty(options, `offset`, `options.offset`);
|
|
61
|
+
const refetch = readDataProperty(options, `refetch`, `options.refetch`);
|
|
60
62
|
if (where.present && where.value !== void 0) {
|
|
61
63
|
const result = projectExpression(where.value, `options.where`, state);
|
|
62
64
|
if (!state.validateOnly) projected.where = result;
|
|
@@ -77,6 +79,15 @@ function visitLoadSubsetOptions(options, validateOnly) {
|
|
|
77
79
|
const result = projectNumber(offset.value, `options.offset`);
|
|
78
80
|
if (!state.validateOnly) projected.offset = result;
|
|
79
81
|
}
|
|
82
|
+
if (refetch.present && refetch.value !== void 0) {
|
|
83
|
+
if (typeof refetch.value !== `boolean`) {
|
|
84
|
+
throw new RemoteSubsetWireValueError(
|
|
85
|
+
`options.refetch`,
|
|
86
|
+
`expected boolean`
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
if (!state.validateOnly) projected.refetch = refetch.value;
|
|
90
|
+
}
|
|
80
91
|
return projected;
|
|
81
92
|
}
|
|
82
93
|
function toProcessLocalLoadSubsetOptions(options, transported = toTransportedLoadSubsetOptions(options)) {
|
|
@@ -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 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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"}
|
|
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 refetch?: boolean\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 `refetch`,\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 const refetch = readDataProperty(options, `refetch`, `options.refetch`)\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 if (refetch.present && refetch.value !== undefined) {\n if (typeof refetch.value !== `boolean`) {\n throw new RemoteSubsetWireValueError(\n `options.refetch`,\n `expected boolean`,\n )\n }\n if (!state.validateOnly) projected.refetch = refetch.value\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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"}
|