@abloatai/ablo 0.36.0 → 0.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +2 -2
- package/CHANGELOG.md +71 -2013
- package/NOTICE +2 -2
- package/README.md +25 -71
- package/assets/banner.png +0 -0
- package/dist/auth.d.ts +2 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +2 -0
- package/dist/auth.js.map +1 -0
- package/dist/client.d.ts +3 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +3 -0
- package/dist/client.js.map +1 -0
- package/dist/coordination.d.ts +2 -0
- package/dist/coordination.d.ts.map +1 -0
- package/dist/coordination.js +2 -0
- package/dist/coordination.js.map +1 -0
- package/dist/index.d.ts +3 -114
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -163
- package/dist/index.js.map +1 -0
- package/dist/react.d.ts +4 -0
- package/dist/react.d.ts.map +1 -0
- package/dist/react.js +3 -0
- package/dist/react.js.map +1 -0
- package/dist/schema.d.ts +2 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +2 -0
- package/dist/schema.js.map +1 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +2 -0
- package/dist/server.js.map +1 -0
- package/dist/source-conformance.d.ts +2 -0
- package/dist/source-conformance.d.ts.map +1 -0
- package/dist/source-conformance.js +2 -0
- package/dist/source-conformance.js.map +1 -0
- package/dist/source-drizzle.d.ts +2 -0
- package/dist/source-drizzle.d.ts.map +1 -0
- package/dist/source-drizzle.js +2 -0
- package/dist/source-drizzle.js.map +1 -0
- package/dist/source-kysely.d.ts +2 -0
- package/dist/source-kysely.d.ts.map +1 -0
- package/dist/source-kysely.js +2 -0
- package/dist/source-kysely.js.map +1 -0
- package/dist/source-next.d.ts +2 -0
- package/dist/source-next.d.ts.map +1 -0
- package/dist/source-next.js +2 -0
- package/dist/source-next.js.map +1 -0
- package/dist/source.d.ts +2 -0
- package/dist/source.d.ts.map +1 -0
- package/dist/source.js +2 -0
- package/dist/source.js.map +1 -0
- package/dist/wire.d.ts +2 -0
- package/dist/wire.d.ts.map +1 -0
- package/dist/wire.js +2 -0
- package/dist/wire.js.map +1 -0
- package/docs/agents.md +1 -1
- package/docs/api-keys.md +7 -6
- package/docs/api.md +10 -10
- package/docs/client-behavior.md +5 -5
- package/docs/coordination.md +52 -62
- package/docs/data-sources.md +1 -1
- package/docs/examples/agent-human.md +4 -4
- package/docs/examples/ai-sdk-tool.md +1 -1
- package/docs/examples/existing-python-backend.md +15 -4
- package/docs/examples/nextjs.md +27 -6
- package/docs/examples/server-agent.md +2 -2
- package/docs/how-it-works.md +4 -4
- package/docs/identity.md +2 -1
- package/docs/integration-guide.md +24 -13
- package/docs/internal/README.md +18 -0
- package/docs/internal/agent-fleet-coordination-design.md +171 -0
- package/docs/internal/agent-orchestration.md +58 -0
- package/docs/internal/commit-identifiers.md +91 -0
- package/docs/internal/concurrency-open-decisions.md +37 -0
- package/docs/internal/data-source-reverse-channel.md +150 -0
- package/docs/internal/per-field-conflict-detection.md +165 -0
- package/docs/internal/postgres-replication.md +64 -0
- package/docs/internal/serializable-schema.md +119 -0
- package/docs/internal/structure.md +32 -0
- package/docs/mcp.md +2 -2
- package/docs/migration.md +3 -3
- package/docs/quickstart.md +2 -2
- package/docs/react.md +5 -5
- package/docs/schema-contract.md +3 -3
- package/docs/sessions.md +91 -37
- package/examples/README.md +2 -2
- package/examples/data-source/README.md +1 -1
- package/examples/data-source/ablo-driver.ts +1 -1
- package/examples/data-source/customer-server.ts +1 -1
- package/examples/data-source/run.ts +1 -1
- package/examples/data-source/schema.ts +1 -1
- package/examples/quickstart.ts +2 -2
- package/llms.txt +8 -8
- package/package.json +63 -166
- package/bin/ablo.cjs +0 -39
- package/dist/BaseSyncedStore.d.ts +0 -843
- package/dist/BaseSyncedStore.js +0 -1971
- package/dist/Database.d.ts +0 -323
- package/dist/Database.js +0 -1502
- package/dist/InstanceCache.d.ts +0 -237
- package/dist/InstanceCache.js +0 -1166
- package/dist/LazyReferenceCollection.d.ts +0 -177
- package/dist/LazyReferenceCollection.js +0 -461
- package/dist/Model.d.ts +0 -454
- package/dist/Model.js +0 -919
- package/dist/ModelRegistry.d.ts +0 -225
- package/dist/ModelRegistry.js +0 -539
- package/dist/NetworkMonitor.d.ts +0 -28
- package/dist/NetworkMonitor.js +0 -79
- package/dist/RuntimeContext.d.ts +0 -52
- package/dist/RuntimeContext.js +0 -80
- package/dist/SyncClient.d.ts +0 -541
- package/dist/SyncClient.js +0 -2202
- package/dist/adapters/alwaysOnline.d.ts +0 -14
- package/dist/adapters/alwaysOnline.js +0 -17
- package/dist/adapters/inMemoryStorage.d.ts +0 -31
- package/dist/adapters/inMemoryStorage.js +0 -110
- package/dist/ai-sdk/coordinatedTool.d.ts +0 -120
- package/dist/ai-sdk/coordinatedTool.js +0 -134
- package/dist/ai-sdk/coordinationContext.d.ts +0 -46
- package/dist/ai-sdk/coordinationContext.js +0 -106
- package/dist/ai-sdk/index.d.ts +0 -121
- package/dist/ai-sdk/index.js +0 -121
- package/dist/ai-sdk/wrap.d.ts +0 -65
- package/dist/ai-sdk/wrap.js +0 -39
- package/dist/auth/index.d.ts +0 -1
- package/dist/auth/index.js +0 -8
- package/dist/batching/index.d.ts +0 -55
- package/dist/batching/index.js +0 -147
- package/dist/client/Ablo.d.ts +0 -231
- package/dist/client/Ablo.js +0 -160
- package/dist/client/abloClient.d.ts +0 -309
- package/dist/client/abloClient.js +0 -13
- package/dist/client/clientPrelude.d.ts +0 -52
- package/dist/client/clientPrelude.js +0 -60
- package/dist/client/consoleLogger.d.ts +0 -35
- package/dist/client/consoleLogger.js +0 -44
- package/dist/client/coreClient.d.ts +0 -60
- package/dist/client/coreClient.js +0 -118
- package/dist/client/createInternalComponents.d.ts +0 -50
- package/dist/client/createInternalComponents.js +0 -98
- package/dist/client/createModelProxy.d.ts +0 -248
- package/dist/client/createModelProxy.js +0 -884
- package/dist/client/humans.d.ts +0 -69
- package/dist/client/humans.js +0 -78
- package/dist/client/modelRegistration.d.ts +0 -10
- package/dist/client/modelRegistration.js +0 -312
- package/dist/client/options.d.ts +0 -461
- package/dist/client/options.js +0 -7
- package/dist/client/reactiveEngine.d.ts +0 -53
- package/dist/client/reactiveEngine.js +0 -688
- package/dist/client/resourceTypes.d.ts +0 -12
- package/dist/client/resourceTypes.js +0 -10
- package/dist/client/schemaConfig.d.ts +0 -44
- package/dist/client/schemaConfig.js +0 -185
- package/dist/client/storeCluster.d.ts +0 -47
- package/dist/client/storeCluster.js +0 -118
- package/dist/client/storeLifecycle.d.ts +0 -61
- package/dist/client/storeLifecycle.js +0 -231
- package/dist/client/validateAbloOptions.d.ts +0 -42
- package/dist/client/validateAbloOptions.js +0 -43
- package/dist/client/wsMutationExecutor.d.ts +0 -27
- package/dist/client/wsMutationExecutor.js +0 -72
- package/dist/context.d.ts +0 -42
- package/dist/context.js +0 -81
- package/dist/coordination/ClaimLog.d.ts +0 -26
- package/dist/coordination/ClaimLog.js +0 -32
- package/dist/coordination/index.d.ts +0 -1
- package/dist/coordination/index.js +0 -8
- package/dist/core/index.d.ts +0 -33
- package/dist/core/index.js +0 -48
- package/dist/docs/catalog.d.ts +0 -72
- package/dist/docs/catalog.js +0 -230
- package/dist/docs/index.d.ts +0 -10
- package/dist/docs/index.js +0 -10
- package/dist/environment.d.ts +0 -1
- package/dist/environment.js +0 -8
- package/dist/interfaces/index.d.ts +0 -311
- package/dist/interfaces/index.js +0 -9
- package/dist/keys/index.d.ts +0 -1
- package/dist/keys/index.js +0 -8
- package/dist/mutators/RecordingMutation.d.ts +0 -36
- package/dist/mutators/RecordingMutation.js +0 -182
- package/dist/mutators/Transaction.d.ts +0 -40
- package/dist/mutators/Transaction.js +0 -58
- package/dist/mutators/UndoManager.d.ts +0 -258
- package/dist/mutators/UndoManager.js +0 -658
- package/dist/mutators/defineMutators.d.ts +0 -60
- package/dist/mutators/defineMutators.js +0 -18
- package/dist/mutators/inverseOp.d.ts +0 -126
- package/dist/mutators/inverseOp.js +0 -71
- package/dist/mutators/mutateActions.d.ts +0 -45
- package/dist/mutators/mutateActions.js +0 -105
- package/dist/mutators/readerActions.d.ts +0 -33
- package/dist/mutators/readerActions.js +0 -57
- package/dist/mutators/undoApply.d.ts +0 -51
- package/dist/mutators/undoApply.js +0 -117
- package/dist/policy/index.d.ts +0 -21
- package/dist/policy/index.js +0 -20
- package/dist/query/QueryProcessor.d.ts +0 -75
- package/dist/query/QueryProcessor.js +0 -255
- package/dist/query/client.d.ts +0 -64
- package/dist/query/client.js +0 -138
- package/dist/query/types.d.ts +0 -85
- package/dist/query/types.js +0 -16
- package/dist/react/AbloProvider.d.ts +0 -242
- package/dist/react/AbloProvider.js +0 -458
- package/dist/react/ClientSideSuspense.d.ts +0 -36
- package/dist/react/ClientSideSuspense.js +0 -17
- package/dist/react/DefaultFallback.d.ts +0 -24
- package/dist/react/DefaultFallback.js +0 -43
- package/dist/react/context.d.ts +0 -55
- package/dist/react/context.js +0 -29
- package/dist/react/createAbloReact.d.ts +0 -56
- package/dist/react/createAbloReact.js +0 -51
- package/dist/react/index.d.ts +0 -62
- package/dist/react/index.js +0 -69
- package/dist/react/internalContext.d.ts +0 -33
- package/dist/react/internalContext.js +0 -3
- package/dist/react/useAblo.d.ts +0 -82
- package/dist/react/useAblo.js +0 -120
- package/dist/react/useCurrentUserId.d.ts +0 -22
- package/dist/react/useCurrentUserId.js +0 -34
- package/dist/react/useErrorListener.d.ts +0 -20
- package/dist/react/useErrorListener.js +0 -38
- package/dist/react/useMutationFailureListener.d.ts +0 -26
- package/dist/react/useMutationFailureListener.js +0 -38
- package/dist/react/useMutators.d.ts +0 -56
- package/dist/react/useMutators.js +0 -84
- package/dist/react/useReactive.d.ts +0 -35
- package/dist/react/useReactive.js +0 -123
- package/dist/react/useSyncStatus.d.ts +0 -59
- package/dist/react/useSyncStatus.js +0 -76
- package/dist/react/useUndoScope.d.ts +0 -34
- package/dist/react/useUndoScope.js +0 -81
- package/dist/schema/coordination.d.ts +0 -112
- package/dist/schema/coordination.js +0 -133
- package/dist/schema/ddl.d.ts +0 -97
- package/dist/schema/ddl.js +0 -491
- package/dist/schema/ddlLock.d.ts +0 -35
- package/dist/schema/ddlLock.js +0 -46
- package/dist/schema/diff.d.ts +0 -225
- package/dist/schema/diff.js +0 -289
- package/dist/schema/generate.d.ts +0 -19
- package/dist/schema/generate.js +0 -86
- package/dist/schema/index.d.ts +0 -42
- package/dist/schema/index.js +0 -80
- package/dist/schema/queries.d.ts +0 -201
- package/dist/schema/queries.js +0 -144
- package/dist/schema/select.d.ts +0 -40
- package/dist/schema/select.js +0 -90
- package/dist/schema/serialize.d.ts +0 -115
- package/dist/schema/serialize.js +0 -265
- package/dist/schema/sugar.d.ts +0 -109
- package/dist/schema/sugar.js +0 -83
- package/dist/schema/syncDeltaRow.d.ts +0 -6
- package/dist/schema/syncDeltaRow.js +0 -6
- package/dist/server/adapter.d.ts +0 -173
- package/dist/server/adapter.js +0 -18
- package/dist/server/commit.d.ts +0 -107
- package/dist/server/commit.js +0 -1
- package/dist/server/index.d.ts +0 -14
- package/dist/server/index.js +0 -2
- package/dist/server/readConfig.d.ts +0 -80
- package/dist/server/readConfig.js +0 -8
- package/dist/server/storageMode.d.ts +0 -23
- package/dist/server/storageMode.js +0 -17
- package/dist/source/adapter.d.ts +0 -83
- package/dist/source/adapter.js +0 -24
- package/dist/source/adapters/drizzle.d.ts +0 -48
- package/dist/source/adapters/drizzle.js +0 -219
- package/dist/source/adapters/kysely.d.ts +0 -42
- package/dist/source/adapters/kysely.js +0 -205
- package/dist/source/adapters/kyselyMutationCore.d.ts +0 -76
- package/dist/source/adapters/kyselyMutationCore.js +0 -125
- package/dist/source/adapters/memory.d.ts +0 -13
- package/dist/source/adapters/memory.js +0 -130
- package/dist/source/adapters/prisma.d.ts +0 -63
- package/dist/source/adapters/prisma.js +0 -202
- package/dist/source/conformance.d.ts +0 -37
- package/dist/source/conformance.js +0 -215
- package/dist/source/connector.d.ts +0 -95
- package/dist/source/connector.js +0 -266
- package/dist/source/connectorProtocol.d.ts +0 -154
- package/dist/source/connectorProtocol.js +0 -163
- package/dist/source/contract.d.ts +0 -195
- package/dist/source/contract.js +0 -164
- package/dist/source/factory.d.ts +0 -92
- package/dist/source/factory.js +0 -286
- package/dist/source/idempotency.d.ts +0 -61
- package/dist/source/idempotency.js +0 -144
- package/dist/source/index.d.ts +0 -23
- package/dist/source/index.js +0 -30
- package/dist/source/migrations.d.ts +0 -21
- package/dist/source/migrations.js +0 -103
- package/dist/source/next.d.ts +0 -32
- package/dist/source/next.js +0 -25
- package/dist/source/pushQueue.d.ts +0 -134
- package/dist/source/pushQueue.js +0 -256
- package/dist/source/signing.d.ts +0 -92
- package/dist/source/signing.js +0 -162
- package/dist/source/types.d.ts +0 -401
- package/dist/source/types.js +0 -59
- package/dist/storeContract.d.ts +0 -145
- package/dist/storeContract.js +0 -12
- package/dist/stores/DatabaseManager.d.ts +0 -107
- package/dist/stores/DatabaseManager.js +0 -388
- package/dist/stores/ObjectStore.d.ts +0 -115
- package/dist/stores/ObjectStore.js +0 -393
- package/dist/stores/ObjectStoreContract.d.ts +0 -38
- package/dist/stores/ObjectStoreContract.js +0 -1
- package/dist/stores/StoreManager.d.ts +0 -114
- package/dist/stores/StoreManager.js +0 -304
- package/dist/stores/SyncActionStore.d.ts +0 -99
- package/dist/stores/SyncActionStore.js +0 -506
- package/dist/stores/openIDBWithTimeout.d.ts +0 -65
- package/dist/stores/openIDBWithTimeout.js +0 -153
- package/dist/stores/syncAction.d.ts +0 -26
- package/dist/stores/syncAction.js +0 -16
- package/dist/surface.d.ts +0 -36
- package/dist/surface.js +0 -75
- package/dist/sync/BootstrapFetcher.d.ts +0 -284
- package/dist/sync/BootstrapFetcher.js +0 -964
- package/dist/sync/ConnectionManager.d.ts +0 -8
- package/dist/sync/ConnectionManager.js +0 -8
- package/dist/sync/OnDemandLoader.d.ts +0 -231
- package/dist/sync/OnDemandLoader.js +0 -743
- package/dist/sync/SubscriptionManager.d.ts +0 -159
- package/dist/sync/SubscriptionManager.js +0 -243
- package/dist/sync/SyncWebSocket.d.ts +0 -173
- package/dist/sync/SyncWebSocket.js +0 -438
- package/dist/sync/awaitClaimGrant.d.ts +0 -6
- package/dist/sync/awaitClaimGrant.js +0 -6
- package/dist/sync/bootstrapApply.d.ts +0 -73
- package/dist/sync/bootstrapApply.js +0 -73
- package/dist/sync/commitFrames.d.ts +0 -8
- package/dist/sync/commitFrames.js +0 -8
- package/dist/sync/contextPorts.d.ts +0 -18
- package/dist/sync/contextPorts.js +0 -31
- package/dist/sync/createClaimStream.d.ts +0 -7
- package/dist/sync/createClaimStream.js +0 -7
- package/dist/sync/createPresenceStream.d.ts +0 -69
- package/dist/sync/createPresenceStream.js +0 -200
- package/dist/sync/createSnapshot.d.ts +0 -29
- package/dist/sync/createSnapshot.js +0 -118
- package/dist/sync/credentialLifecycle.d.ts +0 -7
- package/dist/sync/credentialLifecycle.js +0 -7
- package/dist/sync/deltaPipeline.d.ts +0 -114
- package/dist/sync/deltaPipeline.js +0 -278
- package/dist/sync/groupChange.d.ts +0 -116
- package/dist/sync/groupChange.js +0 -244
- package/dist/sync/participants.d.ts +0 -132
- package/dist/sync/participants.js +0 -346
- package/dist/sync/persistedPrefix.d.ts +0 -12
- package/dist/sync/persistedPrefix.js +0 -22
- package/dist/sync/schemaDrift.d.ts +0 -55
- package/dist/sync/schemaDrift.js +0 -53
- package/dist/sync/schemas.d.ts +0 -71
- package/dist/sync/schemas.js +0 -94
- package/dist/sync/syncCursor.d.ts +0 -40
- package/dist/sync/syncCursor.js +0 -55
- package/dist/sync/syncPlan.d.ts +0 -54
- package/dist/sync/syncPlan.js +0 -50
- package/dist/sync/wsFrameHandlers.d.ts +0 -8
- package/dist/sync/wsFrameHandlers.js +0 -8
- package/dist/syncLog/contract.d.ts +0 -20
- package/dist/syncLog/contract.js +0 -19
- package/dist/syncLog/index.d.ts +0 -1
- package/dist/syncLog/index.js +0 -1
- package/dist/transaction/ablo.d.ts +0 -88
- package/dist/transaction/ablo.js +0 -33
- package/dist/transaction/auth/apiKey.d.ts +0 -152
- package/dist/transaction/auth/apiKey.js +0 -419
- package/dist/transaction/auth/bootstrapScope.d.ts +0 -15
- package/dist/transaction/auth/bootstrapScope.js +0 -1
- package/dist/transaction/auth/capability.d.ts +0 -212
- package/dist/transaction/auth/capability.js +0 -224
- package/dist/transaction/auth/credentialEndpoint.d.ts +0 -61
- package/dist/transaction/auth/credentialEndpoint.js +0 -86
- package/dist/transaction/auth/credentialPolicy.d.ts +0 -148
- package/dist/transaction/auth/credentialPolicy.js +0 -125
- package/dist/transaction/auth/credentialSource.d.ts +0 -30
- package/dist/transaction/auth/credentialSource.js +0 -55
- package/dist/transaction/auth/hostedEndpoints.d.ts +0 -21
- package/dist/transaction/auth/hostedEndpoints.js +0 -21
- package/dist/transaction/auth/identity.d.ts +0 -55
- package/dist/transaction/auth/identity.js +0 -210
- package/dist/transaction/auth/index.d.ts +0 -162
- package/dist/transaction/auth/index.js +0 -304
- package/dist/transaction/auth/schemas.d.ts +0 -59
- package/dist/transaction/auth/schemas.js +0 -85
- package/dist/transaction/auth/sessionMint.d.ts +0 -28
- package/dist/transaction/auth/sessionMint.js +0 -85
- package/dist/transaction/coordination/awaitClaimGrant.d.ts +0 -56
- package/dist/transaction/coordination/awaitClaimGrant.js +0 -124
- package/dist/transaction/coordination/claimHeartbeatLoop.d.ts +0 -84
- package/dist/transaction/coordination/claimHeartbeatLoop.js +0 -108
- package/dist/transaction/coordination/claimMeta.d.ts +0 -49
- package/dist/transaction/coordination/claimMeta.js +0 -52
- package/dist/transaction/coordination/createClaimStream.d.ts +0 -64
- package/dist/transaction/coordination/createClaimStream.js +0 -475
- package/dist/transaction/coordination/events.d.ts +0 -74
- package/dist/transaction/coordination/events.js +0 -7
- package/dist/transaction/coordination/index.d.ts +0 -19
- package/dist/transaction/coordination/index.js +0 -45
- package/dist/transaction/coordination/locator.d.ts +0 -104
- package/dist/transaction/coordination/locator.js +0 -102
- package/dist/transaction/coordination/schema.d.ts +0 -1536
- package/dist/transaction/coordination/schema.js +0 -1177
- package/dist/transaction/coordination/targetConflict.d.ts +0 -2
- package/dist/transaction/coordination/targetConflict.js +0 -107
- package/dist/transaction/coordination/trace.d.ts +0 -78
- package/dist/transaction/coordination/trace.js +0 -138
- package/dist/transaction/durableWrites.d.ts +0 -62
- package/dist/transaction/durableWrites.js +0 -71
- package/dist/transaction/environment.d.ts +0 -105
- package/dist/transaction/environment.js +0 -108
- package/dist/transaction/errorCodes.d.ts +0 -403
- package/dist/transaction/errorCodes.js +0 -484
- package/dist/transaction/errors.d.ts +0 -428
- package/dist/transaction/errors.js +0 -686
- package/dist/transaction/footprint.d.ts +0 -111
- package/dist/transaction/footprint.js +0 -0
- package/dist/transaction/index.d.ts +0 -20
- package/dist/transaction/index.js +0 -20
- package/dist/transaction/keys/index.d.ts +0 -87
- package/dist/transaction/keys/index.js +0 -207
- package/dist/transaction/log/syncDeltaRow.d.ts +0 -158
- package/dist/transaction/log/syncDeltaRow.js +0 -95
- package/dist/transaction/logPosition.d.ts +0 -97
- package/dist/transaction/logPosition.js +0 -125
- package/dist/transaction/logger.d.ts +0 -16
- package/dist/transaction/logger.js +0 -7
- package/dist/transaction/observability.d.ts +0 -53
- package/dist/transaction/observability.js +0 -19
- package/dist/transaction/persistence.d.ts +0 -12
- package/dist/transaction/persistence.js +0 -11
- package/dist/transaction/plugin.d.ts +0 -285
- package/dist/transaction/plugin.js +0 -106
- package/dist/transaction/policy/types.d.ts +0 -217
- package/dist/transaction/policy/types.js +0 -126
- package/dist/transaction/resources/functionalUpdate.d.ts +0 -79
- package/dist/transaction/resources/functionalUpdate.js +0 -87
- package/dist/transaction/resources/httpResources.d.ts +0 -321
- package/dist/transaction/resources/httpResources.js +0 -7
- package/dist/transaction/resources/modelOperations.d.ts +0 -427
- package/dist/transaction/resources/modelOperations.js +0 -12
- package/dist/transaction/resources/mutationOptions.d.ts +0 -66
- package/dist/transaction/resources/mutationOptions.js +0 -9
- package/dist/transaction/resources/where.d.ts +0 -101
- package/dist/transaction/resources/where.js +0 -115
- package/dist/transaction/resources/writeOptionsSchema.d.ts +0 -47
- package/dist/transaction/resources/writeOptionsSchema.js +0 -73
- package/dist/transaction/schema/field.d.ts +0 -120
- package/dist/transaction/schema/field.js +0 -265
- package/dist/transaction/schema/fieldRef.d.ts +0 -38
- package/dist/transaction/schema/fieldRef.js +0 -11
- package/dist/transaction/schema/loadStrategy.d.ts +0 -45
- package/dist/transaction/schema/loadStrategy.js +0 -46
- package/dist/transaction/schema/model.d.ts +0 -379
- package/dist/transaction/schema/model.js +0 -123
- package/dist/transaction/schema/openapi.d.ts +0 -58
- package/dist/transaction/schema/openapi.js +0 -501
- package/dist/transaction/schema/relation.d.ts +0 -204
- package/dist/transaction/schema/relation.js +0 -104
- package/dist/transaction/schema/residency.d.ts +0 -29
- package/dist/transaction/schema/residency.js +0 -25
- package/dist/transaction/schema/roles.d.ts +0 -249
- package/dist/transaction/schema/roles.js +0 -230
- package/dist/transaction/schema/schema.d.ts +0 -351
- package/dist/transaction/schema/schema.js +0 -325
- package/dist/transaction/schema/tenancy.d.ts +0 -139
- package/dist/transaction/schema/tenancy.js +0 -190
- package/dist/transaction/transactionLayer.d.ts +0 -82
- package/dist/transaction/transactionLayer.js +0 -24
- package/dist/transaction/transactions/settlement/commitEnvelope.d.ts +0 -143
- package/dist/transaction/transactions/settlement/commitEnvelope.js +0 -161
- package/dist/transaction/transactions/settlement/httpCommitEnvelope.d.ts +0 -53
- package/dist/transaction/transactions/settlement/httpCommitEnvelope.js +0 -207
- package/dist/transaction/transactions/settlement/idempotencyKey.d.ts +0 -10
- package/dist/transaction/transactions/settlement/idempotencyKey.js +0 -9
- package/dist/transaction/transactions/settlement/pendingWrite.d.ts +0 -112
- package/dist/transaction/transactions/settlement/pendingWrite.js +0 -20
- package/dist/transaction/transport/commitFrames.d.ts +0 -90
- package/dist/transaction/transport/commitFrames.js +0 -134
- package/dist/transaction/transport/connectionManager.d.ts +0 -215
- package/dist/transaction/transport/connectionManager.js +0 -673
- package/dist/transaction/transport/credentialLifecycle.d.ts +0 -177
- package/dist/transaction/transport/credentialLifecycle.js +0 -324
- package/dist/transaction/transport/heartbeat.d.ts +0 -65
- package/dist/transaction/transport/heartbeat.js +0 -93
- package/dist/transaction/transport/httpClient.d.ts +0 -131
- package/dist/transaction/transport/httpClient.js +0 -146
- package/dist/transaction/transport/httpOptions.d.ts +0 -33
- package/dist/transaction/transport/httpOptions.js +0 -12
- package/dist/transaction/transport/httpTransport.d.ts +0 -8
- package/dist/transaction/transport/httpTransport.js +0 -1388
- package/dist/transaction/transport/networkProbe.d.ts +0 -84
- package/dist/transaction/transport/networkProbe.js +0 -207
- package/dist/transaction/transport/wsFrameHandlers.d.ts +0 -128
- package/dist/transaction/transport/wsFrameHandlers.js +0 -429
- package/dist/transaction/transport/wsTransport.d.ts +0 -574
- package/dist/transaction/transport/wsTransport.js +0 -1023
- package/dist/transaction/types/assertExact.d.ts +0 -17
- package/dist/transaction/types/assertExact.js +0 -1
- package/dist/transaction/types/global.d.ts +0 -107
- package/dist/transaction/types/global.js +0 -40
- package/dist/transaction/types/index.d.ts +0 -205
- package/dist/transaction/types/index.js +0 -56
- package/dist/transaction/types/modelData.d.ts +0 -10
- package/dist/transaction/types/modelData.js +0 -9
- package/dist/transaction/types/participant.d.ts +0 -20
- package/dist/transaction/types/participant.js +0 -10
- package/dist/transaction/types/streams.d.ts +0 -550
- package/dist/transaction/types/streams.js +0 -11
- package/dist/transaction/utils/asyncIterator.d.ts +0 -34
- package/dist/transaction/utils/asyncIterator.js +0 -135
- package/dist/transaction/utils/duration.d.ts +0 -50
- package/dist/transaction/utils/duration.js +0 -77
- package/dist/transaction/utils/json.d.ts +0 -57
- package/dist/transaction/utils/json.js +0 -276
- package/dist/transaction/wire/accountResponses.d.ts +0 -420
- package/dist/transaction/wire/accountResponses.js +0 -290
- package/dist/transaction/wire/auth.d.ts +0 -56
- package/dist/transaction/wire/auth.js +0 -63
- package/dist/transaction/wire/bootstrapReason.d.ts +0 -9
- package/dist/transaction/wire/bootstrapReason.js +0 -8
- package/dist/transaction/wire/claimEvent.d.ts +0 -76
- package/dist/transaction/wire/claimEvent.js +0 -73
- package/dist/transaction/wire/claims.d.ts +0 -530
- package/dist/transaction/wire/claims.js +0 -327
- package/dist/transaction/wire/commit.d.ts +0 -603
- package/dist/transaction/wire/commit.js +0 -321
- package/dist/transaction/wire/delta.d.ts +0 -250
- package/dist/transaction/wire/delta.js +0 -147
- package/dist/transaction/wire/errorEnvelope.d.ts +0 -72
- package/dist/transaction/wire/errorEnvelope.js +0 -123
- package/dist/transaction/wire/feedCursor.d.ts +0 -60
- package/dist/transaction/wire/feedCursor.js +0 -82
- package/dist/transaction/wire/feedEvent.d.ts +0 -204
- package/dist/transaction/wire/feedEvent.js +0 -65
- package/dist/transaction/wire/frames.d.ts +0 -194
- package/dist/transaction/wire/frames.js +0 -50
- package/dist/transaction/wire/inboundFrames.d.ts +0 -562
- package/dist/transaction/wire/inboundFrames.js +0 -116
- package/dist/transaction/wire/index.d.ts +0 -54
- package/dist/transaction/wire/index.js +0 -83
- package/dist/transaction/wire/listEnvelope.d.ts +0 -37
- package/dist/transaction/wire/listEnvelope.js +0 -42
- package/dist/transaction/wire/modelMutations.d.ts +0 -31
- package/dist/transaction/wire/modelMutations.js +0 -52
- package/dist/transaction/wire/modelResponses.d.ts +0 -85
- package/dist/transaction/wire/modelResponses.js +0 -43
- package/dist/transaction/wire/modelShape.d.ts +0 -78
- package/dist/transaction/wire/modelShape.js +0 -74
- package/dist/transaction/wire/protocol.d.ts +0 -38
- package/dist/transaction/wire/protocol.js +0 -38
- package/dist/transaction/wire/protocolVersion.d.ts +0 -73
- package/dist/transaction/wire/protocolVersion.js +0 -83
- package/dist/transactions/mutations/MutationQueue.d.ts +0 -661
- package/dist/transactions/mutations/MutationQueue.js +0 -2807
- package/dist/transactions/mutations/MutationStore.d.ts +0 -20
- package/dist/transactions/mutations/MutationStore.js +0 -53
- package/dist/transactions/mutations/UnconfirmedWrites.d.ts +0 -82
- package/dist/transactions/mutations/UnconfirmedWrites.js +0 -104
- package/dist/transactions/mutations/coalesceRules.d.ts +0 -58
- package/dist/transactions/mutations/coalesceRules.js +0 -140
- package/dist/transactions/mutations/commitLatency.d.ts +0 -52
- package/dist/transactions/mutations/commitLatency.js +0 -130
- package/dist/transactions/mutations/commitOutboxStore.d.ts +0 -28
- package/dist/transactions/mutations/commitOutboxStore.js +0 -26
- package/dist/transactions/mutations/commitPayload.d.ts +0 -165
- package/dist/transactions/mutations/commitPayload.js +0 -152
- package/dist/transactions/mutations/deltaConfirmation.d.ts +0 -63
- package/dist/transactions/mutations/deltaConfirmation.js +0 -235
- package/dist/transactions/mutations/durableWriteStore.d.ts +0 -14
- package/dist/transactions/mutations/durableWriteStore.js +0 -12
- package/dist/transactions/mutations/optimisticApply.d.ts +0 -49
- package/dist/transactions/mutations/optimisticApply.js +0 -65
- package/dist/transactions/mutations/replayValidation.d.ts +0 -187
- package/dist/transactions/mutations/replayValidation.js +0 -164
- package/dist/utils/mobxSetup.d.ts +0 -53
- package/dist/utils/mobxSetup.js +0 -330
- package/dist/views/QueryView.d.ts +0 -79
- package/dist/views/QueryView.js +0 -218
- package/dist/views/ViewRegistry.d.ts +0 -20
- package/dist/views/ViewRegistry.js +0 -55
- package/dist/views/incrementalView.d.ts +0 -45
- package/dist/views/incrementalView.js +0 -69
- package/dist/webhooks/events.d.ts +0 -43
- package/dist/webhooks/events.js +0 -42
- package/dist/webhooks/index.d.ts +0 -8
- package/dist/webhooks/index.js +0 -8
- package/dist/wire/index.d.ts +0 -1
- package/dist/wire/index.js +0 -8
|
@@ -1,427 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The request contract for `ablo.<model>` — the option and parameter shapes a
|
|
3
|
-
* caller passes to a read, a write, or a claim.
|
|
4
|
-
*
|
|
5
|
-
* These types describe the *change or the query being requested*, never a local
|
|
6
|
-
* copy of the rows it touches, so they sit in the settlement core and are shared
|
|
7
|
-
* by every transport and every caller (ADR 0013 §4, ADR 0016). The factory that
|
|
8
|
-
* binds them to reactive model instances — `createModelProxy` — stays with the
|
|
9
|
-
* reactive consumer, along with `ModelOperations` and `ModelCollaboration`,
|
|
10
|
-
* which reference the live participant handle.
|
|
11
|
-
*/
|
|
12
|
-
import type { ModelScope } from '../types/index.js';
|
|
13
|
-
import type { ResolveClaimMeta } from '../types/global.js';
|
|
14
|
-
import type { ClaimPart, StaleNotification, TrackDependency } from '../coordination/schema.js';
|
|
15
|
-
import type { ClaimHeartbeatPlan } from '../coordination/claimHeartbeatLoop.js';
|
|
16
|
-
import type { Duration } from '../utils/duration.js';
|
|
17
|
-
import type { Claim, ClaimHeartbeat, ClaimHeartbeatOptions, HeldClaim, HeldLease, TargetRange } from '../types/streams.js';
|
|
18
|
-
import type { MutationOptions } from './mutationOptions.js';
|
|
19
|
-
import type { LoadWhere } from './where.js';
|
|
20
|
-
/**
|
|
21
|
-
* A lifecycle filter, accepted either as the enum or as its bare string. The
|
|
22
|
-
* string arm is a template projection of the enum rather than a second list, so
|
|
23
|
-
* a scope added to {@link ModelScope} is spellable both ways at once.
|
|
24
|
-
*/
|
|
25
|
-
export type ModelListScope = ModelScope | `${ModelScope}`;
|
|
26
|
-
/**
|
|
27
|
-
* Options for `track({ id })` — register a durable premise on a row.
|
|
28
|
-
*
|
|
29
|
-
* Derived from the wire's row-form {@link TrackDependency} rather than restated
|
|
30
|
-
* beside it: the caller names the row and, optionally, the watermark it is
|
|
31
|
-
* premised on, while `model` comes from the proxy the call was made on. Adding
|
|
32
|
-
* a field to the dependency therefore reaches this surface automatically, and
|
|
33
|
-
* removing one stops the callers compiling.
|
|
34
|
-
*
|
|
35
|
-
* On `readAt`: omit it to baseline at the current head — "tell me about
|
|
36
|
-
* anything from here on". Pass a known watermark (the one you read the row at)
|
|
37
|
-
* to also catch a change that landed between that read and this call.
|
|
38
|
-
*/
|
|
39
|
-
export type ModelTrackParams = Omit<Extract<TrackDependency, {
|
|
40
|
-
model: string;
|
|
41
|
-
}>, 'model'>;
|
|
42
|
-
/** The result of `track({ id })`. */
|
|
43
|
-
export interface ModelTrackResult {
|
|
44
|
-
/**
|
|
45
|
-
* Tracks that had ALREADY fired at registration time — a change matching an
|
|
46
|
-
* open track that landed before this call. Present only when something was
|
|
47
|
-
* already stale; the ongoing signal arrives on the receipts of later commits.
|
|
48
|
-
*/
|
|
49
|
-
notifications?: StaleNotification[];
|
|
50
|
-
}
|
|
51
|
-
/** Options for the synchronous local-graph reads `local.list` and `onChange` —
|
|
52
|
-
* a JavaScript `filter`, an equality `where`, and a lifecycle `state`. This is
|
|
53
|
-
* the local, reactive axis; contrast {@link ServerReadOptions}, the
|
|
54
|
-
* asynchronous server axis. */
|
|
55
|
-
export interface LocalReadOptions<T> {
|
|
56
|
-
where?: Partial<T>;
|
|
57
|
-
/** Arbitrary local predicate. Applied after `where`. */
|
|
58
|
-
filter?: (entity: T) => boolean;
|
|
59
|
-
orderBy?: {
|
|
60
|
-
[K in keyof T]?: 'asc' | 'desc';
|
|
61
|
-
};
|
|
62
|
-
limit?: number;
|
|
63
|
-
offset?: number;
|
|
64
|
-
/** Lifecycle filter — `live` (the default), `archived`, or `all`. Named
|
|
65
|
-
* `state` so it does not collide with the sync-group `scope`. */
|
|
66
|
-
state?: ModelListScope;
|
|
67
|
-
}
|
|
68
|
-
export type LocalCountOptions<T> = Pick<LocalReadOptions<T>, 'where' | 'filter' | 'state'>;
|
|
69
|
-
/** Options for the asynchronous server reads `retrieve` and `list` — the
|
|
70
|
-
* operator `where` filter, `type`, and `expand`. This is the server axis;
|
|
71
|
-
* contrast {@link LocalReadOptions}, the local, reactive axis. */
|
|
72
|
-
export interface ServerReadOptions<T> {
|
|
73
|
-
/**
|
|
74
|
-
* Filter for the lookup. Accepts two forms:
|
|
75
|
-
* - object form — `{ name: 'foo' }`: equality, where an array value means `IN`
|
|
76
|
-
* - tuple form — `[['name', 'ILIKE', '%Goldman%']]`: explicit operators
|
|
77
|
-
*
|
|
78
|
-
* See {@link LoadWhere} for the full grammar. The wire protocol matches on AND
|
|
79
|
-
* only; for OR semantics, run two `list()` calls and union the results.
|
|
80
|
-
*/
|
|
81
|
-
where?: LoadWhere<T>;
|
|
82
|
-
orderBy?: {
|
|
83
|
-
[K in keyof T]?: 'asc' | 'desc';
|
|
84
|
-
};
|
|
85
|
-
limit?: number;
|
|
86
|
-
/**
|
|
87
|
-
* `complete` waits for the server. `unknown` returns whatever is local
|
|
88
|
-
* immediately and refreshes in the background.
|
|
89
|
-
*/
|
|
90
|
-
type?: 'complete' | 'unknown';
|
|
91
|
-
/**
|
|
92
|
-
* Schema-declared relation names to hydrate alongside the primary
|
|
93
|
-
* rows. The server's compiler resolves each name via the schema's
|
|
94
|
-
* relation metadata (`relation.belongsTo` / `relation.hasMany`)
|
|
95
|
-
* and emits the JOIN.
|
|
96
|
-
*/
|
|
97
|
-
expand?: readonly string[];
|
|
98
|
-
}
|
|
99
|
-
/** Options for the single-row async server read `retrieve({ id })`. A subset of
|
|
100
|
-
* {@link ServerReadOptions} — `where`/`limit`/`orderBy` are fixed by the id. */
|
|
101
|
-
export type ServerRetrieveOptions = Pick<ServerReadOptions<unknown>, 'type' | 'expand'>;
|
|
102
|
-
/**
|
|
103
|
-
* A claimable part of a row: one of the model's own fields, an app-defined name
|
|
104
|
-
* marked with {@link part}, or any other string.
|
|
105
|
-
*
|
|
106
|
-
* The third arm is the one that matters, and it is not a TypeScript
|
|
107
|
-
* limitation. Function parameters are contravariant, so a claim accepting
|
|
108
|
-
* `'title' | 'status'` is not assignable to one accepting `string` — and the
|
|
109
|
-
* legacy `useAblo<R>()` path erases a concrete schema to `SchemaRecord`
|
|
110
|
-
* (`AbloProvider.tsx`: `engine as Ablo<SchemaRecord>`) and restores it, which
|
|
111
|
-
* is exactly that assignment. While that path exists this union must stay open,
|
|
112
|
-
* and `fields: ['titel']` therefore compiles, is granted, excludes nobody, and
|
|
113
|
-
* leaves the write of `title` unguarded — the conflict rule compares names as
|
|
114
|
-
* opaque strings, so an invented one matches no other claim and nothing reports
|
|
115
|
-
* it.
|
|
116
|
-
*
|
|
117
|
-
* The replacement already exists: `createAbloReact(schema)` creates its context
|
|
118
|
-
* after the schema is known, so nothing is erased and nothing is restored — the
|
|
119
|
-
* same shape as `createTRPCReact<AppRouter>()`. What remains is retiring the
|
|
120
|
-
* generic provider in favour of it; the callers are enumerated in
|
|
121
|
-
* docs/plans/typed-react-binding.md. When they have moved, this arm goes, and
|
|
122
|
-
* `fields: ['titel']` stops compiling with no change at any call site.
|
|
123
|
-
*/
|
|
124
|
-
export type ClaimField<T> = Extract<keyof T, string> | ClaimPart | (string & {});
|
|
125
|
-
/**
|
|
126
|
-
* The options on a claim, in four axes — each answers one question, and no
|
|
127
|
-
* member sits in two:
|
|
128
|
-
*
|
|
129
|
-
* - **what you claim** — `field` / `fields` / `path` / `range`, the target
|
|
130
|
-
* narrowed below the row;
|
|
131
|
-
* - **what others see** — `description` / `meta`, the presence half;
|
|
132
|
-
* - **how you wait** — `queue` / `maxQueueDepth` / `waitTimeoutMs` /
|
|
133
|
-
* `signal`, admission to the line;
|
|
134
|
-
* - **how long you hold** — `ttl` / `heartbeat`, the lease.
|
|
135
|
-
*/
|
|
136
|
-
export interface ClaimTargetOptions<T = Record<string, unknown>> {
|
|
137
|
-
/**
|
|
138
|
-
* @deprecated Say it as a set: `fields: ['title']`. Removed in 0.37.0.
|
|
139
|
-
*
|
|
140
|
-
* One member for a set of one, beside another for a set of any size, is two
|
|
141
|
-
* ways to say one thing — and the singular is the one that misleads. A caller
|
|
142
|
-
* needing two parts reached for the member named `field` and packed
|
|
143
|
-
* `'b_3,b_7'` into it, which compares as a single unrelated name, so both
|
|
144
|
-
* writers were granted the same part and one update was lost. That spelling
|
|
145
|
-
* is refused now, and this member is going with it.
|
|
146
|
-
*
|
|
147
|
-
* The wire keeps reading `field` — it is frozen, and an older client emits it
|
|
148
|
-
* — so this is a change of what you write, not of what is understood.
|
|
149
|
-
*/
|
|
150
|
-
field?: ClaimField<T>;
|
|
151
|
-
/**
|
|
152
|
-
* Narrow the claim to named parts of the row — one or several.
|
|
153
|
-
*
|
|
154
|
-
* Exclusion follows the target: claims on the same row conflict only where
|
|
155
|
-
* their sets intersect, so a holder on `['title']` and a holder on
|
|
156
|
-
* `['status']` proceed concurrently, while a whole-row claim (no target)
|
|
157
|
-
* conflicts with both. The per-field claimed-state badge is a consequence of
|
|
158
|
-
* the narrower lease, not its purpose.
|
|
159
|
-
*/
|
|
160
|
-
fields?: readonly ClaimField<T>[];
|
|
161
|
-
/**
|
|
162
|
-
* @deprecated Claim the field the position lives in — `fields: ['content']`.
|
|
163
|
-
* Removed in 0.37.0.
|
|
164
|
-
*
|
|
165
|
-
* A claim may not be finer than the smallest thing the write path can
|
|
166
|
-
* address, and today that is a field: nothing writes part of a value. Two
|
|
167
|
-
* holders of `/content/3` and `/content/7` therefore contend, because either
|
|
168
|
-
* one committing takes the whole `content` field — so naming the position
|
|
169
|
-
* bought exclusion it could not deliver, and this member read as a peer of
|
|
170
|
-
* `fields` while being nothing of the kind.
|
|
171
|
-
*
|
|
172
|
-
* For a UI that draws a rail per block, put the block id in `meta`: that is
|
|
173
|
-
* the open bag for describing your work to peers, it renders exactly as well,
|
|
174
|
-
* and it promises nothing about exclusion. The wire keeps parsing `path`, so
|
|
175
|
-
* an older client is unaffected.
|
|
176
|
-
*/
|
|
177
|
-
path?: string;
|
|
178
|
-
/**
|
|
179
|
-
* @deprecated Claim the field the span lives in — `fields: ['content']`.
|
|
180
|
-
* Removed in 0.37.0.
|
|
181
|
-
*
|
|
182
|
-
* Same rule as {@link path}: a span of a value is not separately writable, so
|
|
183
|
-
* two disjoint spans of one field contend. Unlike `path` this one has a
|
|
184
|
-
* future — a mergeable field makes an operation the write unit, at which
|
|
185
|
-
* point a span inside it is addressable and this becomes enforceable. It
|
|
186
|
-
* returns then, for code rather than prose, and it returns working.
|
|
187
|
-
*/
|
|
188
|
-
range?: TargetRange;
|
|
189
|
-
/** Peer-visible description of the work being performed — the sentence a
|
|
190
|
-
* contending participant reads to decide whether to wait, work elsewhere, or
|
|
191
|
-
* move on. Defaults to `'editing'`. The same field on every claim surface. */
|
|
192
|
-
description?: string;
|
|
193
|
-
/**
|
|
194
|
-
* App-defined structured metadata, carried verbatim to every participant
|
|
195
|
-
* that observes the claim. Declare its shape once, on `Register`'s
|
|
196
|
-
* `ClaimMeta` slot, and what you write here is what every reader is typed to
|
|
197
|
-
* find — the write side and the read side are the same declaration.
|
|
198
|
-
*/
|
|
199
|
-
meta?: ResolveClaimMeta;
|
|
200
|
-
/**
|
|
201
|
-
* Behavior under contention. `true` (the default) queues behind the current
|
|
202
|
-
* holder and resolves once the row is yours. `false` is fail-fast: if another
|
|
203
|
-
* participant already holds the row, it rejects immediately with
|
|
204
|
-
* {@link AbloClaimedError} instead of waiting. Use `false` to deduplicate
|
|
205
|
-
* distributed work ("if someone else has this job, skip it"), where waiting
|
|
206
|
-
* would mean double-processing.
|
|
207
|
-
*/
|
|
208
|
-
queue?: boolean;
|
|
209
|
-
/**
|
|
210
|
-
* Backpressure: queue, but not behind too many others. If the server reports a
|
|
211
|
-
* position at or beyond `maxQueueDepth` when the client joins the line, it
|
|
212
|
-
* rejects with {@link AbloClaimedError} (`queue_too_deep`) instead of waiting.
|
|
213
|
-
* Omit to wait however deep the queue is.
|
|
214
|
-
*/
|
|
215
|
-
maxQueueDepth?: number;
|
|
216
|
-
/**
|
|
217
|
-
* Cap on how long a queued claim waits for its grant before rejecting with
|
|
218
|
-
* {@link AbloClaimedError} (`grant_timeout`). Omit to wait as long as the
|
|
219
|
-
* line takes. Same meaning on both transports; on the stateless HTTP client
|
|
220
|
-
* a timed-out wait also leaves the line, so the slot is not left to expire.
|
|
221
|
-
*/
|
|
222
|
-
waitTimeoutMs?: number;
|
|
223
|
-
/**
|
|
224
|
-
* Abort a pending wait from outside — the same signal that cancels
|
|
225
|
-
* everything else in the program, so a cancelled agent task or an unmounted
|
|
226
|
-
* component takes its queued claim with it. Rejects with
|
|
227
|
-
* {@link AbloClaimedError} (`claim_wait_aborted`); over HTTP the abort also
|
|
228
|
-
* leaves the line. Ignored once the grant has arrived — a held lease is
|
|
229
|
-
* never torn down by a late abort; release it instead.
|
|
230
|
-
*/
|
|
231
|
-
signal?: AbortSignal;
|
|
232
|
-
/** Crash-cleanup TTL — the claim auto-releases if the holder dies. */
|
|
233
|
-
ttl?: Duration;
|
|
234
|
-
/**
|
|
235
|
-
* Keep the lease alive for the duration of real work by beating on a
|
|
236
|
-
* cadence — the pattern for background workers whose task outlives the
|
|
237
|
-
* crash-cleanup TTL. `true` beats every third of the TTL (so two beats can
|
|
238
|
-
* fail before the lease is at risk, and a crashed worker's lease still
|
|
239
|
-
* lapses within one beat window); a duration such as `'2m'` sets the
|
|
240
|
-
* cadence explicitly; the structured {@link ClaimHeartbeatPlan} carries the
|
|
241
|
-
* cadence and both callbacks in one place —
|
|
242
|
-
* `heartbeat: { every: '2m', onBeat, onLost }`. The loop stops on release.
|
|
243
|
-
* You can also beat manually with `held.heartbeat()`.
|
|
244
|
-
*/
|
|
245
|
-
heartbeat?: true | Duration | ClaimHeartbeatPlan;
|
|
246
|
-
}
|
|
247
|
-
/** Options for `claim({ id, ... })`. */
|
|
248
|
-
export interface ClaimParams<T = Record<string, unknown>> extends ClaimTargetOptions<T> {
|
|
249
|
-
readonly id: string;
|
|
250
|
-
}
|
|
251
|
-
export interface ClaimLookupParams<T = Record<string, unknown>> {
|
|
252
|
-
readonly id: string;
|
|
253
|
-
/** @deprecated Say it as a set: `fields: ['title']`. Removed in 0.37.0. */
|
|
254
|
-
readonly field?: ClaimField<T>;
|
|
255
|
-
/** Read the claim state of named parts of the row rather than the row. */
|
|
256
|
-
readonly fields?: readonly ClaimField<T>[];
|
|
257
|
-
}
|
|
258
|
-
export interface ClaimReorderParams<T = Record<string, unknown>> extends ClaimLookupParams<T> {
|
|
259
|
-
readonly order: readonly Claim[];
|
|
260
|
-
}
|
|
261
|
-
/**
|
|
262
|
-
* A claim handle: the held entity data plus an explicit release hook.
|
|
263
|
-
*
|
|
264
|
-
* ```ts
|
|
265
|
-
* const claim = await ablo.weatherReports.claim({
|
|
266
|
-
* id: 'report_stockholm',
|
|
267
|
-
* description: 'Fetching current weather before writing the forecast.',
|
|
268
|
-
* });
|
|
269
|
-
* try {
|
|
270
|
-
* await ablo.weatherReports.update({
|
|
271
|
-
* id: claim.target.id,
|
|
272
|
-
* data: { status: 'ready' },
|
|
273
|
-
* claim,
|
|
274
|
-
* });
|
|
275
|
-
* } finally {
|
|
276
|
-
* await claim.release();
|
|
277
|
-
* }
|
|
278
|
-
* ```
|
|
279
|
-
*
|
|
280
|
-
* `data` is a snapshot taken after the lease is held. Write through the flat
|
|
281
|
-
* `ablo.<model>.update({ id, data, claim })` verb — the handle carries the
|
|
282
|
-
* lease id and snapshot watermark for attribution and stale-write protection.
|
|
283
|
-
*/
|
|
284
|
-
export type { Claim, ClaimHeartbeat, ClaimHeartbeatOptions, HeldClaim, HeldLease };
|
|
285
|
-
export type ClaimOptions<T = Record<string, unknown>> = ClaimTargetOptions<T>;
|
|
286
|
-
/**
|
|
287
|
-
* The coordination surface for a model, exposed as a callable namespace.
|
|
288
|
-
*
|
|
289
|
-
* Most callers do not need this namespace directly. Put `claim: { ... }` on a
|
|
290
|
-
* write and the SDK acquires/releases around that one mutation:
|
|
291
|
-
*
|
|
292
|
-
* ```ts
|
|
293
|
-
* await ablo.tasks.update({
|
|
294
|
-
* id,
|
|
295
|
-
* data: { title },
|
|
296
|
-
* claim: {
|
|
297
|
-
* field: 'title',
|
|
298
|
-
* description: 'Renaming the task to match the project brief.',
|
|
299
|
-
* },
|
|
300
|
-
* });
|
|
301
|
-
* ```
|
|
302
|
-
*
|
|
303
|
-
* Use `claim({ id, ... })` when a tool spans multiple writes and needs one
|
|
304
|
-
* handle. `state`, `queue`, and `reorder` are coordination reads/scheduler
|
|
305
|
-
* controls for UI and operators.
|
|
306
|
-
*/
|
|
307
|
-
/**
|
|
308
|
-
* The coordination reads and scheduler controls on a claim namespace, in their
|
|
309
|
-
* reactive (synchronous) form: `state`, `queue`, and `reorder` resolve against
|
|
310
|
-
* the local pool with no round-trip, which is what lets a reactive selector read
|
|
311
|
-
* coordination state inside a React render.
|
|
312
|
-
*
|
|
313
|
-
* This is the single source of truth for the claim read surface. The stateless
|
|
314
|
-
* HTTP client exposes the awaited projection of exactly these methods (derived
|
|
315
|
-
* via {@link AwaitedClaimMethod}), so the two transports cannot drift — change a
|
|
316
|
-
* signature here and the HTTP surface follows.
|
|
317
|
-
*/
|
|
318
|
-
export interface ClaimReadApi<T = Record<string, unknown>> {
|
|
319
|
-
/**
|
|
320
|
-
* Current holder for a row, or `null` when free. Use this for UI badges and
|
|
321
|
-
* preflight checks, not for the normal write path.
|
|
322
|
-
*
|
|
323
|
-
* `target.meta` reads as the shape declared on `Register`'s `ClaimMeta`
|
|
324
|
-
* slot, so no read of it needs a guard. Pass `M` only to override that
|
|
325
|
-
* declaration for one call — `state<OtherMeta>({ id })` — which a program
|
|
326
|
-
* carrying more than one meta shape occasionally needs.
|
|
327
|
-
*/
|
|
328
|
-
state<M = ResolveClaimMeta>(params: ClaimLookupParams<T>): Claim<Record<string, unknown>, M> | null;
|
|
329
|
-
/**
|
|
330
|
-
* Every holder of a row, not just one.
|
|
331
|
-
*
|
|
332
|
-
* A claim that names a narrower target — a `path`, a `range`, a `field` or
|
|
333
|
-
* `fields` — excludes only what it overlaps, so several participants hold
|
|
334
|
-
* disjoint parts of one row at the same time and
|
|
335
|
-
* {@link ClaimReadApi.state} answers with one of them. This is the read
|
|
336
|
-
* behind a per-region UI: a rail for each claimed block, a chip for each
|
|
337
|
-
* participant. Synchronous and reactive off the same snapshot as `state`,
|
|
338
|
-
* so a render reads it inline.
|
|
339
|
-
*
|
|
340
|
-
* Own claim first when this client holds one, then peers. Takes the same
|
|
341
|
-
* `meta` parameter as {@link ClaimReadApi.state}.
|
|
342
|
-
*/
|
|
343
|
-
list<M = ResolveClaimMeta>(params: ClaimLookupParams<T>): {
|
|
344
|
-
readonly object: 'list';
|
|
345
|
-
readonly data: readonly Claim<Record<string, unknown>, M>[];
|
|
346
|
-
};
|
|
347
|
-
/**
|
|
348
|
-
* FIFO wait line behind the current holder. Advanced: useful for operator
|
|
349
|
-
* UIs and schedulers. Takes the same `meta` parameter as
|
|
350
|
-
* {@link ClaimReadApi.state}.
|
|
351
|
-
*/
|
|
352
|
-
queue<M = ResolveClaimMeta>(params: ClaimLookupParams<T>): {
|
|
353
|
-
readonly object: 'list';
|
|
354
|
-
readonly data: readonly Claim<Record<string, unknown>, M>[];
|
|
355
|
-
};
|
|
356
|
-
/**
|
|
357
|
-
* Re-rank the wait line. Advanced and permission-gated.
|
|
358
|
-
*/
|
|
359
|
-
reorder(params: ClaimReorderParams<T>): void;
|
|
360
|
-
/** Release a manual claim handle early. Single-write claims auto-release. */
|
|
361
|
-
release(params: ClaimLookupParams<T> | Claim<T>): Promise<void>;
|
|
362
|
-
}
|
|
363
|
-
/**
|
|
364
|
-
* The awaited form of a claim method: a synchronous return becomes a `Promise`,
|
|
365
|
-
* an already-async one (`release`) is left untouched. Used to derive the
|
|
366
|
-
* stateless HTTP claim surface from the reactive {@link ClaimReadApi}.
|
|
367
|
-
*/
|
|
368
|
-
export type AwaitedClaimMethod<F> = F extends (...args: infer A) => infer R ? R extends Promise<unknown> ? (...args: A) => R : (...args: A) => Promise<R> : F;
|
|
369
|
-
export interface ClaimApi<T> extends ClaimReadApi<T> {
|
|
370
|
-
/**
|
|
371
|
-
* The try-claim: `queue: false` treats a held target as an expected outcome,
|
|
372
|
-
* not an error — it resolves `null`, so claim-or-skip dedup reads
|
|
373
|
-
* `if (!claim) return` with no try/catch. Who holds it, and why, stays
|
|
374
|
-
* readable through `claim.state({ id })`. (A write to a row someone else
|
|
375
|
-
* holds still rejects with `entity_claimed` — a failed write is an error;
|
|
376
|
-
* a declined try is not.)
|
|
377
|
-
*/
|
|
378
|
-
(params: ClaimParams<T> & {
|
|
379
|
-
queue: false;
|
|
380
|
-
}): Promise<HeldClaim<T> | null>;
|
|
381
|
-
/**
|
|
382
|
-
* Takes a claim and returns an explicit held-work handle — a {@link HeldClaim}.
|
|
383
|
-
* `data`, `release`, `revoke`, and the async disposer are always present (this
|
|
384
|
-
* call re-reads the row under the lease), so callers can use `handle.data`
|
|
385
|
-
* directly and `await using` works without a guard.
|
|
386
|
-
*/
|
|
387
|
-
(params: ClaimParams<T>): Promise<HeldClaim<T>>;
|
|
388
|
-
/** The row-free try-claim — `null` when the key is already held. */
|
|
389
|
-
(id: string, opts: ClaimOptions<T> & {
|
|
390
|
-
queue: false;
|
|
391
|
-
}): Promise<HeldLease | null>;
|
|
392
|
-
/**
|
|
393
|
-
* Takes a claim by id alone, for a row that lives only in the customer's own
|
|
394
|
-
* database — Ablo has never seen it, so there is nothing to re-read. Returns a
|
|
395
|
-
* {@link HeldLease}: the same lease controls as {@link HeldClaim}
|
|
396
|
-
* (`release`, `revoke`, `heartbeat`, `await using`) but no `.data`. Locking a
|
|
397
|
-
* key you know by id is exactly this — serialize writers without first
|
|
398
|
-
* syncing the row into Ablo.
|
|
399
|
-
*/
|
|
400
|
-
(id: string, opts?: ClaimOptions<T>): Promise<HeldLease>;
|
|
401
|
-
}
|
|
402
|
-
export interface ModelRetrieveParams extends ServerRetrieveOptions {
|
|
403
|
-
readonly id: string;
|
|
404
|
-
}
|
|
405
|
-
export interface ModelCreateParams<T, CreateInput> extends MutationOptions {
|
|
406
|
-
readonly data: CreateInput;
|
|
407
|
-
readonly id?: string | null;
|
|
408
|
-
readonly claim?: Claim<T> | ClaimTargetOptions<T> | null;
|
|
409
|
-
}
|
|
410
|
-
export interface ModelUpdateParams<T> extends MutationOptions {
|
|
411
|
-
readonly id: string;
|
|
412
|
-
readonly data: Partial<T>;
|
|
413
|
-
readonly claim?: Claim<T> | ClaimTargetOptions<T> | null;
|
|
414
|
-
}
|
|
415
|
-
export interface ModelDeleteParams<T> extends MutationOptions {
|
|
416
|
-
readonly id: string;
|
|
417
|
-
readonly claim?: Claim<T> | ClaimTargetOptions<T> | null;
|
|
418
|
-
}
|
|
419
|
-
/** Options for the WebSocket-only `ablo.<model>.join(ids, options?)`. */
|
|
420
|
-
export interface JoinOptions {
|
|
421
|
-
/**
|
|
422
|
-
* Lease TTL for the underlying presence claim — the participant
|
|
423
|
-
* auto-releases after this if the holder dies. Compact duration string
|
|
424
|
-
* (`'5m'`) or ms number, mirroring the claim `ttl`.
|
|
425
|
-
*/
|
|
426
|
-
ttl?: Duration;
|
|
427
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The request contract for `ablo.<model>` — the option and parameter shapes a
|
|
3
|
-
* caller passes to a read, a write, or a claim.
|
|
4
|
-
*
|
|
5
|
-
* These types describe the *change or the query being requested*, never a local
|
|
6
|
-
* copy of the rows it touches, so they sit in the settlement core and are shared
|
|
7
|
-
* by every transport and every caller (ADR 0013 §4, ADR 0016). The factory that
|
|
8
|
-
* binds them to reactive model instances — `createModelProxy` — stays with the
|
|
9
|
-
* reactive consumer, along with `ModelOperations` and `ModelCollaboration`,
|
|
10
|
-
* which reference the live participant handle.
|
|
11
|
-
*/
|
|
12
|
-
export {};
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Per-call options accepted by any mutation.
|
|
3
|
-
*
|
|
4
|
-
* Every field here defines, orders, settles, or authorises *the change itself*
|
|
5
|
-
* — request identity, commit disposition, fencing, and the premise it rests on.
|
|
6
|
-
* None of it touches a local copy of rows, so it belongs with the settlement
|
|
7
|
-
* core rather than the reactive consumer (ADR 0013 §4, ADR 0016).
|
|
8
|
-
*/
|
|
9
|
-
import type { CommitWait } from '../wire/commit.js';
|
|
10
|
-
import type { OnStaleMode, ReadDependency, TrackDependency } from '../coordination/schema.js';
|
|
11
|
-
/**
|
|
12
|
-
* Per-call options accepted by any mutation, passed as the last argument.
|
|
13
|
-
* Every field is optional; omitted fields fall back to sensible defaults.
|
|
14
|
-
*
|
|
15
|
-
* - `idempotencyKey` — when set, the server caches the response for 24 hours and
|
|
16
|
-
* returns the cached result on any retry using the same key. When omitted, the
|
|
17
|
-
* SDK generates a fresh UUID per mutation, so every call is retry-safe by
|
|
18
|
-
* default. `null` is retained for source compatibility and is treated like
|
|
19
|
-
* omission; write retries never opt out of request identity.
|
|
20
|
-
* - `label` — a human-readable tag recorded with the mutation for debugging, such
|
|
21
|
-
* as "nightly cleanup" or "user click".
|
|
22
|
-
*/
|
|
23
|
-
export interface MutationOptions {
|
|
24
|
-
idempotencyKey?: string | null;
|
|
25
|
-
label?: string;
|
|
26
|
-
wait?: CommitWait;
|
|
27
|
-
readAt?: number | null;
|
|
28
|
-
onStale?: OnStaleMode | null;
|
|
29
|
-
/**
|
|
30
|
-
* The fencing token (Option B) of the held claim this write belongs to. The
|
|
31
|
-
* server validates it against the entity's persisted high-water and rejects a
|
|
32
|
-
* stale token. Sourced from the claim handle, never set by hand.
|
|
33
|
-
*/
|
|
34
|
-
fenceToken?: number | null;
|
|
35
|
-
/** The id (or `{ id }`) of the claim this write belongs to. This is the
|
|
36
|
-
* low-level reference the commit carries so the write is attributed to a claim
|
|
37
|
-
* and can pass the holder's own lock. It is distinct from the `claim` handle on
|
|
38
|
-
* the model write parameters, which is the higher-level object you usually pass. */
|
|
39
|
-
claimRef?: string | {
|
|
40
|
-
readonly id: string;
|
|
41
|
-
} | null;
|
|
42
|
-
/**
|
|
43
|
-
* The batch premise — the answer to "did anything I looked at change?" Each
|
|
44
|
-
* entry is a row (`{ model, id, readAt, fields? }`) or a sync group
|
|
45
|
-
* (`{ group, readAt }`) that this write was premised on. The server checks
|
|
46
|
-
* that none of them moved since their `readAt` and applies the entry's
|
|
47
|
-
* `onStale` behavior to the whole batch. This is distinct from the per-operation
|
|
48
|
-
* `readAt`, which guards only the row being written.
|
|
49
|
-
*
|
|
50
|
-
* See `packages/sync-engine/docs/concurrency-convention.md` (§3 the two
|
|
51
|
-
* premises, §4 the batch premise) for the governing convention.
|
|
52
|
-
*/
|
|
53
|
-
reads?: ReadDependency[] | null;
|
|
54
|
-
/**
|
|
55
|
-
* Durable premises — what this write (or the record it produces) should
|
|
56
|
-
* keep watching. Unlike `reads`, which is checked once at commit and discarded,
|
|
57
|
-
* each `track` entry is persisted and re-checked against every future delta; a
|
|
58
|
-
* later matching change opens a `StaleNotification` for the tracking participant,
|
|
59
|
-
* delivered at their next commit or live to a held claim. Each entry is a row
|
|
60
|
-
* (`{ model, id }`) or a sync group (`{ group }`), optionally pinned to a `readAt`
|
|
61
|
-
* baseline (defaults to this commit's watermark).
|
|
62
|
-
*
|
|
63
|
-
* See `packages/sync-engine/docs/groups.md` for how `track` drives propagation.
|
|
64
|
-
*/
|
|
65
|
-
track?: TrackDependency[] | null;
|
|
66
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Per-call options accepted by any mutation.
|
|
3
|
-
*
|
|
4
|
-
* Every field here defines, orders, settles, or authorises *the change itself*
|
|
5
|
-
* — request identity, commit disposition, fencing, and the premise it rests on.
|
|
6
|
-
* None of it touches a local copy of rows, so it belongs with the settlement
|
|
7
|
-
* core rather than the reactive consumer (ADR 0013 §4, ADR 0016).
|
|
8
|
-
*/
|
|
9
|
-
export {};
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The where-clause grammar carried by a filtered read.
|
|
3
|
-
*
|
|
4
|
-
* A `where` is a flat list of `[column, operator, value]` conditions combined
|
|
5
|
-
* with AND. The protocol carries no model-specific logic: the server compiles a
|
|
6
|
-
* condition against your schema, so adding a model or relation is a schema
|
|
7
|
-
* change rather than a server change.
|
|
8
|
-
*
|
|
9
|
-
* The `IN` operator lets you batch a read by any column, including a foreign
|
|
10
|
-
* key — for example, fetching every block whose `sectionId` falls in a set of ids.
|
|
11
|
-
*
|
|
12
|
-
* These types describe the *request*, not any local copy of the rows it returns,
|
|
13
|
-
* so they live with the settlement core rather than the reactive consumer.
|
|
14
|
-
*/
|
|
15
|
-
import { z } from 'zod';
|
|
16
|
-
/** Primitive operand types allowed in a where clause. */
|
|
17
|
-
export type WherePrimitive = string | number | boolean | null;
|
|
18
|
-
/**
|
|
19
|
-
* The comparison operators a {@link WhereClause} may use: equality and
|
|
20
|
-
* inequality, ordering, set membership (`IN` / `NOT IN`), null checks
|
|
21
|
-
* (`IS` / `IS NOT`), and case-sensitive or case-insensitive pattern
|
|
22
|
-
* matching (`LIKE`, `ILIKE`, and their negations).
|
|
23
|
-
*/
|
|
24
|
-
export declare const whereOpSchema: z.ZodEnum<{
|
|
25
|
-
"=": "=";
|
|
26
|
-
"!=": "!=";
|
|
27
|
-
"<": "<";
|
|
28
|
-
"<=": "<=";
|
|
29
|
-
">": ">";
|
|
30
|
-
">=": ">=";
|
|
31
|
-
IN: "IN";
|
|
32
|
-
"NOT IN": "NOT IN";
|
|
33
|
-
IS: "IS";
|
|
34
|
-
"IS NOT": "IS NOT";
|
|
35
|
-
LIKE: "LIKE";
|
|
36
|
-
"NOT LIKE": "NOT LIKE";
|
|
37
|
-
ILIKE: "ILIKE";
|
|
38
|
-
"NOT ILIKE": "NOT ILIKE";
|
|
39
|
-
}>;
|
|
40
|
-
export type WhereOp = z.infer<typeof whereOpSchema>;
|
|
41
|
-
/**
|
|
42
|
-
* How each operator binds its operand — the classification a compiler needs
|
|
43
|
-
* before it can render or evaluate a condition: a scalar on the right, an array
|
|
44
|
-
* to expand, or a null check with no operand at all. `LIKE_OPS` is the subset
|
|
45
|
-
* whose operand is a pattern and therefore needs pattern validation.
|
|
46
|
-
*
|
|
47
|
-
* These live here, beside the operators, because every consumer of the grammar
|
|
48
|
-
* needs the same split and there is more than one consumer: a where clause is
|
|
49
|
-
* compiled to SQL on a hosted plane and evaluated in memory against the log on
|
|
50
|
-
* a source plane. Two hand-maintained copies of this split meant the same
|
|
51
|
-
* request could be accepted by one plane and rejected by the other — and the
|
|
52
|
-
* pattern-safety set existed on only one of them.
|
|
53
|
-
*/
|
|
54
|
-
export declare const WHERE_SCALAR_OPS: ReadonlySet<WhereOp>;
|
|
55
|
-
export declare const WHERE_ARRAY_OPS: ReadonlySet<WhereOp>;
|
|
56
|
-
export declare const WHERE_NULL_OPS: ReadonlySet<WhereOp>;
|
|
57
|
-
export declare const WHERE_LIKE_OPS: ReadonlySet<WhereOp>;
|
|
58
|
-
/**
|
|
59
|
-
* Does this operator accept this operand? The rule the sets above imply, stated
|
|
60
|
-
* once and thrown once.
|
|
61
|
-
*
|
|
62
|
-
* The sets were collapsed here because two copies of the split let one plane
|
|
63
|
-
* accept a request the other refused. The check that consumes them stayed
|
|
64
|
-
* duplicated — the SQL compiler and the log-plane evaluator each carried their
|
|
65
|
-
* own arity tests and their own wording — which leaves the same gap one step
|
|
66
|
-
* further along: relax `IN` in one evaluator and a request succeeds against a
|
|
67
|
-
* hosted plane and fails against a connected one, with no test in a position to
|
|
68
|
-
* notice.
|
|
69
|
-
*
|
|
70
|
-
* Returns the classification the caller needs next, so the check and the branch
|
|
71
|
-
* are the same statement rather than two that can disagree.
|
|
72
|
-
*/
|
|
73
|
-
export declare function classifyWhereOperand(op: WhereOp, value: unknown): 'null' | 'array' | 'scalar';
|
|
74
|
-
/**
|
|
75
|
-
* A single condition. Two supported shapes:
|
|
76
|
-
*
|
|
77
|
-
* - `[col, value]` — shortcut for `[col, '=', value]`
|
|
78
|
-
* - `[col, op, value]` — explicit operator
|
|
79
|
-
*
|
|
80
|
-
* The value is a single primitive for scalar operators and an array of
|
|
81
|
-
* primitives for IN/NOT IN.
|
|
82
|
-
*/
|
|
83
|
-
export type WhereClause = readonly [col: string, value: WherePrimitive] | readonly [col: string, op: WhereOp, value: WherePrimitive | readonly WherePrimitive[]];
|
|
84
|
-
/**
|
|
85
|
-
* Client-facing where shape for `load({where})` and `deleteMany({where})`.
|
|
86
|
-
*
|
|
87
|
-
* Two shapes accepted, both AND-combined:
|
|
88
|
-
*
|
|
89
|
-
* - Object form: `{ name: 'foo', orgId: '1' }` — each entry is an `=`
|
|
90
|
-
* clause; array values become `IN`. Ergonomic for the common case.
|
|
91
|
-
* - Tuple form: `[['name', 'ILIKE', '%Goldman%'], ['orgId', '1']]` —
|
|
92
|
-
* explicit operators (LIKE/ILIKE/<=/etc.). Matches the wire
|
|
93
|
-
* `WhereClause[]` 1:1, so no translation layer.
|
|
94
|
-
*
|
|
95
|
-
* The two forms compose: pass tuple form when you need an operator,
|
|
96
|
-
* object form otherwise. For OR semantics, run two `load()` calls and
|
|
97
|
-
* union client-side — keeps the protocol AND-only.
|
|
98
|
-
*/
|
|
99
|
-
export type LoadWhere<T> = Partial<T> | {
|
|
100
|
-
[K in keyof T]?: T[K] | readonly T[K][];
|
|
101
|
-
} | readonly WhereClause[];
|