@abloatai/ablo 0.34.1 → 0.36.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 -1
- package/CHANGELOG.md +758 -5
- package/README.md +56 -502
- package/bin/ablo.cjs +39 -0
- package/dist/BaseSyncedStore.d.ts +176 -48
- package/dist/BaseSyncedStore.js +346 -214
- package/dist/Database.d.ts +17 -44
- package/dist/Database.js +96 -79
- package/dist/InstanceCache.d.ts +31 -6
- package/dist/InstanceCache.js +65 -30
- package/dist/LazyReferenceCollection.d.ts +3 -3
- package/dist/LazyReferenceCollection.js +4 -4
- package/dist/Model.d.ts +23 -13
- package/dist/Model.js +27 -17
- package/dist/ModelRegistry.d.ts +8 -4
- package/dist/ModelRegistry.js +20 -18
- package/dist/NetworkMonitor.d.ts +3 -1
- package/dist/NetworkMonitor.js +7 -5
- package/dist/{SyncEngineContext.d.ts → RuntimeContext.d.ts} +20 -13
- package/dist/{SyncEngineContext.js → RuntimeContext.js} +11 -12
- package/dist/SyncClient.d.ts +47 -47
- package/dist/SyncClient.js +215 -156
- package/dist/ai-sdk/coordinatedTool.d.ts +2 -2
- package/dist/ai-sdk/coordinatedTool.js +1 -1
- package/dist/ai-sdk/coordinationContext.d.ts +2 -2
- package/dist/ai-sdk/coordinationContext.js +1 -1
- package/dist/ai-sdk/wrap.d.ts +3 -3
- package/dist/ai-sdk/wrap.js +2 -2
- package/dist/auth/index.d.ts +1 -156
- package/dist/auth/index.js +8 -301
- package/dist/client/Ablo.d.ts +42 -287
- package/dist/client/Ablo.js +129 -963
- package/dist/client/abloClient.d.ts +309 -0
- package/dist/client/abloClient.js +13 -0
- package/dist/client/clientPrelude.d.ts +52 -0
- package/dist/client/clientPrelude.js +60 -0
- package/dist/client/consoleLogger.d.ts +2 -2
- package/dist/client/coreClient.d.ts +60 -0
- package/dist/client/coreClient.js +118 -0
- package/dist/client/createInternalComponents.d.ts +8 -4
- package/dist/client/createInternalComponents.js +17 -10
- package/dist/client/createModelProxy.d.ts +98 -373
- package/dist/client/createModelProxy.js +233 -139
- package/dist/client/humans.d.ts +69 -0
- package/dist/client/humans.js +78 -0
- package/dist/client/modelRegistration.d.ts +1 -1
- package/dist/client/modelRegistration.js +9 -9
- package/dist/client/options.d.ts +73 -17
- package/dist/client/reactiveEngine.d.ts +53 -0
- package/dist/client/reactiveEngine.js +688 -0
- package/dist/client/resourceTypes.d.ts +9 -250
- package/dist/client/resourceTypes.js +8 -5
- package/dist/client/schemaConfig.d.ts +4 -4
- package/dist/client/schemaConfig.js +6 -2
- package/dist/client/storeCluster.d.ts +47 -0
- package/dist/client/storeCluster.js +118 -0
- package/dist/client/storeLifecycle.d.ts +61 -0
- package/dist/client/storeLifecycle.js +231 -0
- package/dist/client/validateAbloOptions.d.ts +3 -2
- package/dist/client/validateAbloOptions.js +1 -1
- package/dist/client/wsMutationExecutor.d.ts +3 -3
- package/dist/client/wsMutationExecutor.js +3 -3
- package/dist/context.d.ts +22 -9
- package/dist/context.js +33 -9
- package/dist/coordination/ClaimLog.d.ts +26 -0
- package/dist/coordination/ClaimLog.js +32 -0
- package/dist/coordination/index.d.ts +1 -15
- package/dist/coordination/index.js +8 -31
- package/dist/core/index.d.ts +3 -3
- package/dist/core/index.js +2 -2
- package/dist/docs/catalog.d.ts +72 -0
- package/dist/docs/catalog.js +230 -0
- package/dist/docs/index.d.ts +10 -0
- package/dist/docs/index.js +10 -0
- package/dist/environment.d.ts +1 -40
- package/dist/environment.js +8 -37
- package/dist/index.d.ts +44 -36
- package/dist/index.js +30 -22
- package/dist/interfaces/index.d.ts +44 -134
- package/dist/keys/index.d.ts +1 -77
- package/dist/keys/index.js +8 -190
- package/dist/mutators/{RecordingTransaction.d.ts → RecordingMutation.d.ts} +4 -4
- package/dist/mutators/{RecordingTransaction.js → RecordingMutation.js} +2 -2
- package/dist/mutators/Transaction.d.ts +1 -1
- package/dist/mutators/Transaction.js +1 -1
- package/dist/mutators/UndoManager.d.ts +6 -6
- package/dist/mutators/UndoManager.js +5 -5
- package/dist/mutators/defineMutators.d.ts +3 -3
- package/dist/mutators/defineMutators.js +1 -1
- package/dist/mutators/inverseOp.js +2 -2
- package/dist/mutators/mutateActions.d.ts +3 -3
- package/dist/mutators/mutateActions.js +1 -1
- package/dist/mutators/readerActions.d.ts +1 -1
- package/dist/mutators/undoApply.d.ts +1 -1
- package/dist/mutators/undoApply.js +1 -1
- package/dist/policy/index.d.ts +2 -2
- package/dist/policy/index.js +1 -1
- package/dist/query/client.d.ts +5 -2
- package/dist/query/client.js +10 -9
- package/dist/query/types.d.ts +6 -41
- package/dist/query/types.js +2 -2
- package/dist/react/AbloProvider.d.ts +18 -8
- package/dist/react/AbloProvider.js +10 -9
- package/dist/react/context.d.ts +3 -3
- package/dist/react/context.js +1 -1
- package/dist/react/createAbloReact.d.ts +56 -0
- package/dist/react/createAbloReact.js +51 -0
- package/dist/react/index.d.ts +6 -5
- package/dist/react/index.js +6 -3
- package/dist/react/internalContext.d.ts +1 -1
- package/dist/react/useAblo.d.ts +12 -5
- package/dist/react/useAblo.js +26 -8
- package/dist/react/useCurrentUserId.js +1 -1
- package/dist/react/useErrorListener.js +1 -1
- package/dist/react/useMutationFailureListener.d.ts +2 -2
- package/dist/react/useMutationFailureListener.js +1 -1
- package/dist/react/useMutators.d.ts +3 -3
- package/dist/react/useMutators.js +3 -3
- package/dist/react/useUndoScope.d.ts +5 -5
- package/dist/react/useUndoScope.js +1 -1
- package/dist/schema/coordination.d.ts +69 -10
- package/dist/schema/coordination.js +90 -9
- package/dist/schema/ddl.js +2 -2
- package/dist/schema/diff.d.ts +1 -1
- package/dist/schema/generate.js +1 -1
- package/dist/schema/index.d.ts +11 -10
- package/dist/schema/index.js +22 -18
- package/dist/schema/queries.d.ts +27 -27
- package/dist/schema/queries.js +23 -23
- package/dist/schema/select.d.ts +3 -3
- package/dist/schema/select.js +6 -3
- package/dist/schema/serialize.d.ts +15 -6
- package/dist/schema/serialize.js +20 -3
- package/dist/schema/sugar.d.ts +6 -7
- package/dist/schema/sugar.js +9 -12
- package/dist/schema/syncDeltaRow.d.ts +4 -152
- package/dist/schema/syncDeltaRow.js +4 -105
- package/dist/server/adapter.d.ts +18 -1
- package/dist/server/commit.d.ts +10 -16
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/readConfig.d.ts +1 -1
- package/dist/source/adapter.d.ts +7 -5
- package/dist/source/adapter.js +7 -5
- package/dist/source/adapters/drizzle.d.ts +1 -1
- package/dist/source/adapters/drizzle.js +2 -2
- package/dist/source/adapters/kysely.d.ts +1 -1
- package/dist/source/adapters/kysely.js +1 -1
- package/dist/source/adapters/kyselyMutationCore.d.ts +1 -1
- package/dist/source/adapters/kyselyMutationCore.js +2 -2
- package/dist/source/adapters/memory.js +1 -1
- package/dist/source/adapters/prisma.d.ts +8 -3
- package/dist/source/adapters/prisma.js +1 -1
- package/dist/source/connector.js +1 -1
- package/dist/source/connectorProtocol.d.ts +2 -8
- package/dist/source/connectorProtocol.js +3 -2
- package/dist/source/contract.d.ts +29 -17
- package/dist/source/contract.js +27 -22
- package/dist/source/factory.d.ts +1 -1
- package/dist/source/idempotency.js +2 -2
- package/dist/source/index.d.ts +1 -0
- package/dist/source/index.js +3 -0
- package/dist/source/next.d.ts +1 -1
- package/dist/source/signing.d.ts +9 -2
- package/dist/source/signing.js +4 -1
- package/dist/source/types.d.ts +6 -4
- package/dist/source/types.js +1 -1
- package/dist/{core/storeContract.d.ts → storeContract.d.ts} +6 -6
- package/dist/{core → stores}/DatabaseManager.d.ts +3 -1
- package/dist/{core → stores}/DatabaseManager.js +14 -13
- package/dist/stores/ObjectStore.d.ts +1 -1
- package/dist/{core → stores}/StoreManager.d.ts +9 -26
- package/dist/{core → stores}/StoreManager.js +29 -77
- package/dist/stores/SyncActionStore.d.ts +4 -2
- package/dist/stores/SyncActionStore.js +11 -17
- package/dist/stores/syncAction.d.ts +26 -0
- package/dist/stores/syncAction.js +16 -0
- package/dist/surface.d.ts +3 -3
- package/dist/surface.js +6 -4
- package/dist/sync/BootstrapFetcher.d.ts +127 -6
- package/dist/sync/BootstrapFetcher.js +511 -83
- package/dist/sync/ConnectionManager.d.ts +6 -198
- package/dist/sync/ConnectionManager.js +6 -677
- package/dist/sync/OnDemandLoader.d.ts +5 -2
- package/dist/sync/OnDemandLoader.js +61 -21
- package/dist/sync/SubscriptionManager.d.ts +13 -2
- package/dist/sync/SubscriptionManager.js +23 -5
- package/dist/sync/SyncWebSocket.d.ts +27 -510
- package/dist/sync/SyncWebSocket.js +76 -954
- package/dist/sync/awaitClaimGrant.d.ts +4 -44
- package/dist/sync/awaitClaimGrant.js +4 -109
- package/dist/sync/bootstrapApply.d.ts +3 -0
- package/dist/sync/bootstrapApply.js +2 -2
- package/dist/sync/commitFrames.d.ts +6 -40
- package/dist/sync/commitFrames.js +6 -97
- package/dist/sync/contextPorts.d.ts +18 -0
- package/dist/sync/contextPorts.js +31 -0
- package/dist/sync/createClaimStream.d.ts +5 -49
- package/dist/sync/createClaimStream.js +5 -469
- package/dist/sync/createPresenceStream.d.ts +26 -4
- package/dist/sync/createPresenceStream.js +28 -20
- package/dist/sync/createSnapshot.d.ts +2 -2
- package/dist/sync/createSnapshot.js +1 -1
- package/dist/sync/credentialLifecycle.d.ts +5 -173
- package/dist/sync/credentialLifecycle.js +5 -320
- package/dist/sync/deltaPipeline.d.ts +13 -12
- package/dist/sync/deltaPipeline.js +21 -4
- package/dist/sync/groupChange.d.ts +3 -0
- package/dist/sync/groupChange.js +16 -14
- package/dist/sync/participants.d.ts +24 -6
- package/dist/sync/participants.js +32 -23
- package/dist/sync/schemaDrift.d.ts +55 -0
- package/dist/sync/schemaDrift.js +53 -0
- package/dist/sync/schemas.d.ts +23 -33
- package/dist/sync/schemas.js +29 -20
- package/dist/sync/syncPlan.d.ts +3 -3
- package/dist/sync/wsFrameHandlers.d.ts +6 -114
- package/dist/sync/wsFrameHandlers.js +6 -392
- package/dist/syncLog/contract.d.ts +20 -0
- package/dist/syncLog/contract.js +19 -0
- package/dist/syncLog/index.d.ts +1 -0
- package/dist/syncLog/index.js +1 -0
- package/dist/transaction/ablo.d.ts +88 -0
- package/dist/transaction/ablo.js +33 -0
- package/dist/{client/auth.d.ts → transaction/auth/apiKey.d.ts} +43 -8
- package/dist/{client/auth.js → transaction/auth/apiKey.js} +19 -0
- package/dist/transaction/auth/bootstrapScope.d.ts +15 -0
- package/dist/transaction/auth/bootstrapScope.js +1 -0
- package/dist/transaction/auth/capability.d.ts +212 -0
- package/dist/transaction/auth/capability.js +224 -0
- package/dist/{auth → transaction/auth}/credentialSource.d.ts +8 -1
- package/dist/{client → transaction/auth}/identity.d.ts +8 -7
- package/dist/{client → transaction/auth}/identity.js +1 -1
- package/dist/transaction/auth/index.d.ts +162 -0
- package/dist/transaction/auth/index.js +304 -0
- package/dist/{auth → transaction/auth}/schemas.d.ts +1 -1
- package/dist/{auth → transaction/auth}/schemas.js +13 -13
- package/dist/{client → transaction/auth}/sessionMint.d.ts +8 -8
- package/dist/{client → transaction/auth}/sessionMint.js +4 -7
- package/dist/transaction/coordination/awaitClaimGrant.d.ts +56 -0
- package/dist/transaction/coordination/awaitClaimGrant.js +124 -0
- package/dist/{client → transaction/coordination}/claimHeartbeatLoop.d.ts +34 -0
- package/dist/{client → transaction/coordination}/claimHeartbeatLoop.js +20 -0
- package/dist/transaction/coordination/claimMeta.d.ts +49 -0
- package/dist/transaction/coordination/claimMeta.js +52 -0
- package/dist/transaction/coordination/createClaimStream.d.ts +64 -0
- package/dist/transaction/coordination/createClaimStream.js +475 -0
- package/dist/transaction/coordination/events.d.ts +74 -0
- package/dist/transaction/coordination/events.js +7 -0
- package/dist/transaction/coordination/index.d.ts +19 -0
- package/dist/transaction/coordination/index.js +45 -0
- package/dist/transaction/coordination/locator.d.ts +104 -0
- package/dist/transaction/coordination/locator.js +102 -0
- package/dist/transaction/coordination/schema.d.ts +1536 -0
- package/dist/transaction/coordination/schema.js +1177 -0
- package/dist/transaction/coordination/targetConflict.d.ts +2 -0
- package/dist/transaction/coordination/targetConflict.js +107 -0
- package/dist/{coordination → transaction/coordination}/trace.d.ts +7 -18
- package/dist/{coordination → transaction/coordination}/trace.js +18 -25
- package/dist/transaction/durableWrites.d.ts +62 -0
- package/dist/{client → transaction}/durableWrites.js +28 -3
- package/dist/transaction/environment.d.ts +105 -0
- package/dist/transaction/environment.js +108 -0
- package/dist/{errorCodes.d.ts → transaction/errorCodes.d.ts} +12 -12
- package/dist/{errorCodes.js → transaction/errorCodes.js} +45 -18
- package/dist/{errors.d.ts → transaction/errors.d.ts} +37 -13
- package/dist/{errors.js → transaction/errors.js} +85 -16
- package/dist/transaction/footprint.d.ts +111 -0
- package/dist/transaction/footprint.js +0 -0
- package/dist/transaction/index.d.ts +20 -0
- package/dist/transaction/index.js +20 -0
- package/dist/transaction/keys/index.d.ts +87 -0
- package/dist/transaction/keys/index.js +207 -0
- package/dist/transaction/log/syncDeltaRow.d.ts +158 -0
- package/dist/transaction/log/syncDeltaRow.js +95 -0
- package/dist/{sync/syncPosition.d.ts → transaction/logPosition.d.ts} +22 -8
- package/dist/{sync/syncPosition.js → transaction/logPosition.js} +15 -6
- package/dist/transaction/logger.d.ts +16 -0
- package/dist/transaction/logger.js +7 -0
- package/dist/transaction/observability.d.ts +53 -0
- package/dist/transaction/observability.js +19 -0
- package/dist/transaction/plugin.d.ts +285 -0
- package/dist/transaction/plugin.js +106 -0
- package/dist/{policy → transaction/policy}/types.d.ts +3 -3
- package/dist/{policy → transaction/policy}/types.js +2 -0
- package/dist/transaction/resources/httpResources.d.ts +321 -0
- package/dist/transaction/resources/httpResources.js +7 -0
- package/dist/transaction/resources/modelOperations.d.ts +427 -0
- package/dist/transaction/resources/modelOperations.js +12 -0
- package/dist/transaction/resources/mutationOptions.d.ts +66 -0
- package/dist/transaction/resources/mutationOptions.js +9 -0
- package/dist/transaction/resources/where.d.ts +101 -0
- package/dist/transaction/resources/where.js +115 -0
- package/dist/{client → transaction/resources}/writeOptionsSchema.d.ts +2 -6
- package/dist/{client → transaction/resources}/writeOptionsSchema.js +9 -5
- package/dist/{schema → transaction/schema}/field.d.ts +17 -23
- package/dist/{schema → transaction/schema}/field.js +5 -5
- package/dist/transaction/schema/fieldRef.d.ts +38 -0
- package/dist/transaction/schema/fieldRef.js +11 -0
- package/dist/transaction/schema/loadStrategy.d.ts +45 -0
- package/dist/transaction/schema/loadStrategy.js +46 -0
- package/dist/{schema → transaction/schema}/model.d.ts +50 -35
- package/dist/{schema → transaction/schema}/model.js +30 -20
- package/dist/transaction/schema/openapi.d.ts +58 -0
- package/dist/transaction/schema/openapi.js +501 -0
- package/dist/{schema → transaction/schema}/relation.d.ts +21 -16
- package/dist/{schema → transaction/schema}/relation.js +7 -7
- package/dist/{schema → transaction/schema}/residency.d.ts +0 -9
- package/dist/{schema → transaction/schema}/residency.js +0 -5
- package/dist/{schema → transaction/schema}/roles.d.ts +5 -5
- package/dist/{schema → transaction/schema}/roles.js +5 -5
- package/dist/{schema → transaction/schema}/schema.d.ts +39 -10
- package/dist/{schema → transaction/schema}/schema.js +24 -3
- package/dist/{schema → transaction/schema}/tenancy.d.ts +1 -1
- package/dist/{schema → transaction/schema}/tenancy.js +7 -4
- package/dist/transaction/transactionLayer.d.ts +82 -0
- package/dist/transaction/transactionLayer.js +24 -0
- package/dist/{transactions → transaction/transactions/settlement}/commitEnvelope.d.ts +5 -6
- package/dist/{transactions → transaction/transactions/settlement}/commitEnvelope.js +9 -13
- package/dist/{transactions → transaction/transactions/settlement}/httpCommitEnvelope.d.ts +9 -2
- package/dist/{transactions → transaction/transactions/settlement}/httpCommitEnvelope.js +5 -9
- package/dist/{transactions/durableWriteStore.d.ts → transaction/transactions/settlement/pendingWrite.d.ts} +11 -37
- package/dist/transaction/transactions/settlement/pendingWrite.js +20 -0
- package/dist/transaction/transport/commitFrames.d.ts +90 -0
- package/dist/transaction/transport/commitFrames.js +134 -0
- package/dist/transaction/transport/connectionManager.d.ts +215 -0
- package/dist/transaction/transport/connectionManager.js +673 -0
- package/dist/transaction/transport/credentialLifecycle.d.ts +177 -0
- package/dist/transaction/transport/credentialLifecycle.js +324 -0
- package/dist/{sync → transaction/transport}/heartbeat.d.ts +3 -1
- package/dist/{sync → transaction/transport}/heartbeat.js +6 -4
- package/dist/transaction/transport/httpClient.d.ts +131 -0
- package/dist/{client → transaction/transport}/httpClient.js +6 -5
- package/dist/transaction/transport/httpOptions.d.ts +33 -0
- package/dist/transaction/transport/httpOptions.js +12 -0
- package/dist/{client → transaction/transport}/httpTransport.js +295 -97
- package/dist/{sync/NetworkProbe.d.ts → transaction/transport/networkProbe.d.ts} +7 -4
- package/dist/{sync/NetworkProbe.js → transaction/transport/networkProbe.js} +14 -13
- package/dist/transaction/transport/wsFrameHandlers.d.ts +128 -0
- package/dist/transaction/transport/wsFrameHandlers.js +429 -0
- package/dist/transaction/transport/wsTransport.d.ts +574 -0
- package/dist/transaction/transport/wsTransport.js +1023 -0
- package/dist/transaction/types/assertExact.d.ts +17 -0
- package/dist/transaction/types/assertExact.js +1 -0
- package/dist/{types → transaction/types}/global.d.ts +17 -2
- package/dist/{types → transaction/types}/global.js +2 -1
- package/dist/{types → transaction/types}/index.d.ts +14 -46
- package/dist/{types → transaction/types}/index.js +7 -16
- package/dist/{types → transaction/types}/streams.d.ts +73 -45
- package/dist/transaction/utils/duration.d.ts +50 -0
- package/dist/{utils → transaction/utils}/duration.js +32 -0
- package/dist/{utils → transaction/utils}/json.d.ts +18 -0
- package/dist/transaction/utils/json.js +276 -0
- package/dist/transaction/wire/accountResponses.d.ts +420 -0
- package/dist/transaction/wire/accountResponses.js +290 -0
- package/dist/transaction/wire/auth.d.ts +56 -0
- package/dist/transaction/wire/auth.js +63 -0
- package/dist/transaction/wire/claimEvent.d.ts +76 -0
- package/dist/transaction/wire/claimEvent.js +73 -0
- package/dist/transaction/wire/claims.d.ts +530 -0
- package/dist/transaction/wire/claims.js +327 -0
- package/dist/{wire → transaction/wire}/commit.d.ts +125 -193
- package/dist/{wire → transaction/wire}/commit.js +68 -47
- package/dist/{wire → transaction/wire}/delta.d.ts +66 -17
- package/dist/{wire → transaction/wire}/delta.js +37 -13
- package/dist/transaction/wire/errorEnvelope.d.ts +72 -0
- package/dist/{wire → transaction/wire}/errorEnvelope.js +36 -5
- package/dist/transaction/wire/feedCursor.d.ts +60 -0
- package/dist/transaction/wire/feedCursor.js +82 -0
- package/dist/transaction/wire/feedEvent.d.ts +204 -0
- package/dist/transaction/wire/feedEvent.js +65 -0
- package/dist/transaction/wire/frames.d.ts +194 -0
- package/dist/transaction/wire/frames.js +50 -0
- package/dist/transaction/wire/inboundFrames.d.ts +562 -0
- package/dist/transaction/wire/inboundFrames.js +116 -0
- package/dist/transaction/wire/index.d.ts +54 -0
- package/dist/transaction/wire/index.js +83 -0
- package/dist/{wire → transaction/wire}/listEnvelope.d.ts +13 -14
- package/dist/transaction/wire/listEnvelope.js +42 -0
- package/dist/transaction/wire/modelMutations.d.ts +31 -0
- package/dist/transaction/wire/modelMutations.js +52 -0
- package/dist/transaction/wire/modelResponses.d.ts +85 -0
- package/dist/transaction/wire/modelResponses.js +43 -0
- package/dist/transaction/wire/modelShape.d.ts +78 -0
- package/dist/transaction/wire/modelShape.js +74 -0
- package/dist/transactions/{TransactionQueue.d.ts → mutations/MutationQueue.d.ts} +85 -38
- package/dist/transactions/{TransactionQueue.js → mutations/MutationQueue.js} +141 -80
- package/dist/transactions/{TransactionStore.d.ts → mutations/MutationStore.d.ts} +8 -8
- package/dist/transactions/{TransactionStore.js → mutations/MutationStore.js} +2 -2
- package/dist/transactions/{coalesceRules.d.ts → mutations/coalesceRules.d.ts} +10 -10
- package/dist/transactions/{coalesceRules.js → mutations/coalesceRules.js} +1 -1
- package/dist/transactions/mutations/commitLatency.d.ts +52 -0
- package/dist/transactions/mutations/commitLatency.js +130 -0
- package/dist/transactions/{commitOutboxStore.d.ts → mutations/commitOutboxStore.d.ts} +1 -5
- package/dist/transactions/{commitOutboxStore.js → mutations/commitOutboxStore.js} +1 -1
- package/dist/transactions/{commitPayload.d.ts → mutations/commitPayload.d.ts} +18 -16
- package/dist/transactions/{commitPayload.js → mutations/commitPayload.js} +15 -15
- package/dist/transactions/{deltaConfirmation.d.ts → mutations/deltaConfirmation.d.ts} +15 -11
- package/dist/transactions/{deltaConfirmation.js → mutations/deltaConfirmation.js} +14 -12
- package/dist/transactions/mutations/durableWriteStore.d.ts +14 -0
- package/dist/transactions/mutations/durableWriteStore.js +12 -0
- package/dist/transactions/{optimisticApply.d.ts → mutations/optimisticApply.d.ts} +7 -7
- package/dist/transactions/{replayValidation.d.ts → mutations/replayValidation.d.ts} +4 -3
- package/dist/transactions/{replayValidation.js → mutations/replayValidation.js} +7 -5
- package/dist/utils/mobxSetup.d.ts +1 -1
- package/dist/utils/mobxSetup.js +5 -2
- package/dist/{core → views}/QueryView.d.ts +2 -2
- package/dist/{core → views}/QueryView.js +2 -2
- package/dist/{core → views}/ViewRegistry.d.ts +1 -1
- package/dist/{core/queryUtils.d.ts → views/incrementalView.d.ts} +6 -6
- package/dist/{core/queryUtils.js → views/incrementalView.js} +6 -6
- package/dist/webhooks/events.d.ts +2 -2
- package/dist/wire/index.d.ts +1 -34
- package/dist/wire/index.js +8 -49
- package/docs/agent-messaging.md +3 -3
- package/docs/agents.md +20 -13
- package/docs/api-keys.md +14 -10
- package/docs/api.md +27 -61
- package/docs/audit.md +6 -3
- package/docs/cli.md +41 -13
- package/docs/client-behavior.md +11 -9
- package/docs/concurrency-convention.md +49 -57
- package/docs/coordination.md +283 -121
- package/docs/data-sources.md +7 -5
- package/docs/debugging.md +39 -15
- package/docs/deployment.md +267 -0
- package/docs/examples/agent-human.md +49 -42
- package/docs/examples/ai-sdk-tool.md +69 -44
- package/docs/examples/existing-python-backend.md +8 -6
- package/docs/examples/nextjs.md +129 -47
- package/docs/examples/scoped-agent.md +46 -45
- package/docs/examples/server-agent.md +46 -26
- package/docs/groups.md +87 -30
- package/docs/guarantees.md +41 -12
- package/docs/how-it-works.md +38 -12
- package/docs/idempotency.md +126 -0
- package/docs/identity.md +77 -74
- package/docs/index.md +172 -86
- package/docs/integration-guide.md +31 -19
- package/docs/mcp.md +46 -21
- package/docs/migration.md +95 -18
- package/docs/operating-on-your-database.md +3 -1
- package/docs/projects.md +3 -1
- package/docs/quickstart.md +22 -5
- package/docs/react.md +31 -18
- package/docs/schema-contract.md +5 -3
- package/docs/session-settings.md +108 -0
- package/docs/sessions.md +4 -2
- package/docs/webhooks.md +12 -10
- package/llms.txt +48 -18
- package/package.json +21 -26
- package/dist/agent/Agent.d.ts +0 -366
- package/dist/agent/Agent.js +0 -514
- package/dist/agent/index.d.ts +0 -115
- package/dist/agent/index.js +0 -128
- package/dist/agent/session.d.ts +0 -93
- package/dist/agent/session.js +0 -149
- package/dist/agent/types.d.ts +0 -68
- package/dist/agent/types.js +0 -9
- package/dist/cli.cjs +0 -286329
- package/dist/client/durableWrites.d.ts +0 -21
- package/dist/client/httpClient.d.ts +0 -80
- package/dist/coordination/schema.d.ts +0 -722
- package/dist/coordination/schema.js +0 -578
- package/dist/schema/openapi.d.ts +0 -29
- package/dist/schema/openapi.js +0 -124
- package/dist/testing/fixtures/bootstrap.d.ts +0 -49
- package/dist/testing/fixtures/bootstrap.js +0 -59
- package/dist/testing/fixtures/deltas.d.ts +0 -83
- package/dist/testing/fixtures/deltas.js +0 -136
- package/dist/testing/fixtures/models.d.ts +0 -83
- package/dist/testing/fixtures/models.js +0 -272
- package/dist/testing/helpers/reactWrapper.d.ts +0 -69
- package/dist/testing/helpers/reactWrapper.js +0 -67
- package/dist/testing/helpers/syncEngineHarness.d.ts +0 -54
- package/dist/testing/helpers/syncEngineHarness.js +0 -73
- package/dist/testing/helpers/wait.d.ts +0 -30
- package/dist/testing/helpers/wait.js +0 -49
- package/dist/testing/index.d.ts +0 -23
- package/dist/testing/index.js +0 -33
- package/dist/testing/mocks/FakeDatabase.d.ts +0 -18
- package/dist/testing/mocks/FakeDatabase.js +0 -10
- package/dist/testing/mocks/MockMutationExecutor.d.ts +0 -87
- package/dist/testing/mocks/MockMutationExecutor.js +0 -192
- package/dist/testing/mocks/MockNetworkMonitor.d.ts +0 -20
- package/dist/testing/mocks/MockNetworkMonitor.js +0 -46
- package/dist/testing/mocks/MockSyncContext.d.ts +0 -51
- package/dist/testing/mocks/MockSyncContext.js +0 -71
- package/dist/testing/mocks/MockSyncStore.d.ts +0 -88
- package/dist/testing/mocks/MockSyncStore.js +0 -171
- package/dist/testing/mocks/MockWebSocket.d.ts +0 -71
- package/dist/testing/mocks/MockWebSocket.js +0 -118
- package/dist/transactions/durableWriteStore.js +0 -30
- package/dist/utils/duration.d.ts +0 -25
- package/dist/utils/json.js +0 -88
- package/dist/wire/errorEnvelope.d.ts +0 -55
- package/dist/wire/frames.d.ts +0 -197
- package/dist/wire/frames.js +0 -49
- package/dist/wire/listEnvelope.js +0 -18
- package/docs/interaction-model.md +0 -97
- /package/dist/{core → query}/QueryProcessor.d.ts +0 -0
- /package/dist/{core → query}/QueryProcessor.js +0 -0
- /package/dist/{core/storeContract.js → storeContract.js} +0 -0
- /package/dist/{core → stores}/openIDBWithTimeout.d.ts +0 -0
- /package/dist/{core → stores}/openIDBWithTimeout.js +0 -0
- /package/dist/{client → transaction/auth}/credentialEndpoint.d.ts +0 -0
- /package/dist/{client → transaction/auth}/credentialEndpoint.js +0 -0
- /package/dist/{auth → transaction/auth}/credentialPolicy.d.ts +0 -0
- /package/dist/{auth → transaction/auth}/credentialPolicy.js +0 -0
- /package/dist/{auth → transaction/auth}/credentialSource.js +0 -0
- /package/dist/{client → transaction/auth}/hostedEndpoints.d.ts +0 -0
- /package/dist/{client → transaction/auth}/hostedEndpoints.js +0 -0
- /package/dist/{client → transaction}/persistence.d.ts +0 -0
- /package/dist/{client → transaction}/persistence.js +0 -0
- /package/dist/{client → transaction/resources}/functionalUpdate.d.ts +0 -0
- /package/dist/{client → transaction/resources}/functionalUpdate.js +0 -0
- /package/dist/{transactions → transaction/transactions/settlement}/idempotencyKey.d.ts +0 -0
- /package/dist/{transactions → transaction/transactions/settlement}/idempotencyKey.js +0 -0
- /package/dist/{client → transaction/transport}/httpTransport.d.ts +0 -0
- /package/dist/{types → transaction/types}/modelData.d.ts +0 -0
- /package/dist/{types → transaction/types}/modelData.js +0 -0
- /package/dist/{types → transaction/types}/participant.d.ts +0 -0
- /package/dist/{types → transaction/types}/participant.js +0 -0
- /package/dist/{types → transaction/types}/streams.js +0 -0
- /package/dist/{utils → transaction/utils}/asyncIterator.d.ts +0 -0
- /package/dist/{utils → transaction/utils}/asyncIterator.js +0 -0
- /package/dist/{wire → transaction/wire}/bootstrapReason.d.ts +0 -0
- /package/dist/{wire → transaction/wire}/bootstrapReason.js +0 -0
- /package/dist/{wire → transaction/wire}/protocol.d.ts +0 -0
- /package/dist/{wire → transaction/wire}/protocol.js +0 -0
- /package/dist/{wire → transaction/wire}/protocolVersion.d.ts +0 -0
- /package/dist/{wire → transaction/wire}/protocolVersion.js +0 -0
- /package/dist/transactions/{UnconfirmedWrites.d.ts → mutations/UnconfirmedWrites.d.ts} +0 -0
- /package/dist/transactions/{UnconfirmedWrites.js → mutations/UnconfirmedWrites.js} +0 -0
- /package/dist/transactions/{optimisticApply.js → mutations/optimisticApply.js} +0 -0
- /package/dist/{core → views}/ViewRegistry.js +0 -0
|
@@ -1,23 +1,33 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Authoring helpers for a model's `conflict` axis — the setting that decides
|
|
3
3
|
* what happens when two writers touch the same row. Instead of writing a raw
|
|
4
|
-
* disposition map, you
|
|
5
|
-
*
|
|
4
|
+
* disposition map, you name the rules the way the rest of the schema DSL reads
|
|
5
|
+
* (`relation.belongsTo()`, `field.string()`), and chain them the way a field
|
|
6
|
+
* chains its own modifiers:
|
|
6
7
|
*
|
|
7
8
|
* ```ts
|
|
8
|
-
* import { coordination
|
|
9
|
+
* import { coordination } from '@abloatai/ablo/schema';
|
|
9
10
|
*
|
|
10
|
-
* conflict: coordination
|
|
11
|
+
* conflict: coordination.humansOverwrite().agentsReject()
|
|
11
12
|
* // → { user: 'overwrite', agent: 'reject' } (a human's write wins, an agent's yields)
|
|
12
13
|
* ```
|
|
13
14
|
*
|
|
14
|
-
* Each
|
|
15
|
+
* Each rule is named for the disposition it applies — drawn from the same
|
|
15
16
|
* `overwrite | reject | notify` vocabulary the write guards use (`onStale`) —
|
|
16
|
-
* and
|
|
17
|
-
*
|
|
18
|
-
*
|
|
17
|
+
* and every one of them is also available as a standalone function, which
|
|
18
|
+
* {@link coordination} merges when the rules are assembled dynamically rather
|
|
19
|
+
* than written out:
|
|
20
|
+
*
|
|
21
|
+
* ```ts
|
|
22
|
+
* conflict: coordination(humansOverwrite(), agentsReject())
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* Either way the result is plain, serializable data that the engine reads at
|
|
26
|
+
* commit time. The `humans`/`agents` wording belongs to the author; the `user`/
|
|
27
|
+
* `agent`/`system` keys belong to the wire, and this module is the one place
|
|
28
|
+
* the two are mapped to each other.
|
|
19
29
|
*/
|
|
20
|
-
import type { ConflictAxis } from '../policy/types.js';
|
|
30
|
+
import type { ConflictAxis } from '../transaction/policy/types.js';
|
|
21
31
|
/**
|
|
22
32
|
* One coordination rule: a partial {@link ConflictAxis} produced by a
|
|
23
33
|
* disposition helper below. Compose with {@link coordination}.
|
|
@@ -41,6 +51,34 @@ export declare const systemOverwrite: () => ConflictRule;
|
|
|
41
51
|
export declare const systemReject: () => ConflictRule;
|
|
42
52
|
/** A system or automation stale write triggers a notification: it re-reads and re-applies. */
|
|
43
53
|
export declare const systemNotify: () => ConflictRule;
|
|
54
|
+
/**
|
|
55
|
+
* A conflict axis that is still open to more rules. Every method applies one
|
|
56
|
+
* disposition and hands back a new axis, so a model's whole stance reads as a
|
|
57
|
+
* single sentence and the reader never has to hold a merge in their head.
|
|
58
|
+
*
|
|
59
|
+
* Each method delegates to the standalone rule of the same name, so a
|
|
60
|
+
* disposition map like `{ user: 'overwrite' }` is written in exactly one place
|
|
61
|
+
* no matter which authoring style a schema uses. Dispositions are own
|
|
62
|
+
* enumerable properties and the methods live on the prototype, so an axis
|
|
63
|
+
* serializes to the same plain object the server has always received.
|
|
64
|
+
*/
|
|
65
|
+
declare class CoordinationAxis implements ConflictAxis {
|
|
66
|
+
readonly user?: ConflictAxis['user'];
|
|
67
|
+
readonly agent?: ConflictAxis['agent'];
|
|
68
|
+
readonly system?: ConflictAxis['system'];
|
|
69
|
+
constructor(axis: ConflictAxis);
|
|
70
|
+
/** Apply one more rule, later winning on a repeated kind. */
|
|
71
|
+
private and;
|
|
72
|
+
humansOverwrite(): CoordinationAxis;
|
|
73
|
+
humansReject(): CoordinationAxis;
|
|
74
|
+
humansNotify(): CoordinationAxis;
|
|
75
|
+
agentsOverwrite(): CoordinationAxis;
|
|
76
|
+
agentsReject(): CoordinationAxis;
|
|
77
|
+
agentsNotify(): CoordinationAxis;
|
|
78
|
+
systemOverwrite(): CoordinationAxis;
|
|
79
|
+
systemReject(): CoordinationAxis;
|
|
80
|
+
systemNotify(): CoordinationAxis;
|
|
81
|
+
}
|
|
44
82
|
/**
|
|
45
83
|
* Merges coordination rules into a single {@link ConflictAxis}. Later rules win
|
|
46
84
|
* on key collisions, and a committer kind you leave out falls through to the
|
|
@@ -50,4 +88,25 @@ export declare const systemNotify: () => ConflictRule;
|
|
|
50
88
|
* coordination(humansOverwrite(), agentsReject()) // → { user: 'overwrite', agent: 'reject' }
|
|
51
89
|
* ```
|
|
52
90
|
*/
|
|
53
|
-
|
|
91
|
+
declare function mergeRules(...rules: readonly ConflictRule[]): ConflictAxis;
|
|
92
|
+
/**
|
|
93
|
+
* The coordination vocabulary, reachable through one name. Call it to merge
|
|
94
|
+
* rules you have assembled; reach through it to start a chain.
|
|
95
|
+
*
|
|
96
|
+
* ```ts
|
|
97
|
+
* conflict: coordination.humansOverwrite().agentsReject()
|
|
98
|
+
* conflict: coordination(humansOverwrite(), agentsReject())
|
|
99
|
+
* ```
|
|
100
|
+
*/
|
|
101
|
+
export declare const coordination: typeof mergeRules & {
|
|
102
|
+
humansOverwrite: () => CoordinationAxis;
|
|
103
|
+
humansReject: () => CoordinationAxis;
|
|
104
|
+
humansNotify: () => CoordinationAxis;
|
|
105
|
+
agentsOverwrite: () => CoordinationAxis;
|
|
106
|
+
agentsReject: () => CoordinationAxis;
|
|
107
|
+
agentsNotify: () => CoordinationAxis;
|
|
108
|
+
systemOverwrite: () => CoordinationAxis;
|
|
109
|
+
systemReject: () => CoordinationAxis;
|
|
110
|
+
systemNotify: () => CoordinationAxis;
|
|
111
|
+
};
|
|
112
|
+
export {};
|
|
@@ -1,21 +1,31 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Authoring helpers for a model's `conflict` axis — the setting that decides
|
|
3
3
|
* what happens when two writers touch the same row. Instead of writing a raw
|
|
4
|
-
* disposition map, you
|
|
5
|
-
*
|
|
4
|
+
* disposition map, you name the rules the way the rest of the schema DSL reads
|
|
5
|
+
* (`relation.belongsTo()`, `field.string()`), and chain them the way a field
|
|
6
|
+
* chains its own modifiers:
|
|
6
7
|
*
|
|
7
8
|
* ```ts
|
|
8
|
-
* import { coordination
|
|
9
|
+
* import { coordination } from '@abloatai/ablo/schema';
|
|
9
10
|
*
|
|
10
|
-
* conflict: coordination
|
|
11
|
+
* conflict: coordination.humansOverwrite().agentsReject()
|
|
11
12
|
* // → { user: 'overwrite', agent: 'reject' } (a human's write wins, an agent's yields)
|
|
12
13
|
* ```
|
|
13
14
|
*
|
|
14
|
-
* Each
|
|
15
|
+
* Each rule is named for the disposition it applies — drawn from the same
|
|
15
16
|
* `overwrite | reject | notify` vocabulary the write guards use (`onStale`) —
|
|
16
|
-
* and
|
|
17
|
-
*
|
|
18
|
-
*
|
|
17
|
+
* and every one of them is also available as a standalone function, which
|
|
18
|
+
* {@link coordination} merges when the rules are assembled dynamically rather
|
|
19
|
+
* than written out:
|
|
20
|
+
*
|
|
21
|
+
* ```ts
|
|
22
|
+
* conflict: coordination(humansOverwrite(), agentsReject())
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* Either way the result is plain, serializable data that the engine reads at
|
|
26
|
+
* commit time. The `humans`/`agents` wording belongs to the author; the `user`/
|
|
27
|
+
* `agent`/`system` keys belong to the wire, and this module is the one place
|
|
28
|
+
* the two are mapped to each other.
|
|
19
29
|
*/
|
|
20
30
|
// ── Humans (user sessions) ──────────────────────────────────────────────
|
|
21
31
|
/** A human's conflicting write wins and overwrites the other; it is never blocked. Among humans this gives last-write-wins. */
|
|
@@ -38,6 +48,57 @@ export const systemOverwrite = () => ({ system: 'overwrite' });
|
|
|
38
48
|
export const systemReject = () => ({ system: 'reject' });
|
|
39
49
|
/** A system or automation stale write triggers a notification: it re-reads and re-applies. */
|
|
40
50
|
export const systemNotify = () => ({ system: 'notify' });
|
|
51
|
+
/**
|
|
52
|
+
* A conflict axis that is still open to more rules. Every method applies one
|
|
53
|
+
* disposition and hands back a new axis, so a model's whole stance reads as a
|
|
54
|
+
* single sentence and the reader never has to hold a merge in their head.
|
|
55
|
+
*
|
|
56
|
+
* Each method delegates to the standalone rule of the same name, so a
|
|
57
|
+
* disposition map like `{ user: 'overwrite' }` is written in exactly one place
|
|
58
|
+
* no matter which authoring style a schema uses. Dispositions are own
|
|
59
|
+
* enumerable properties and the methods live on the prototype, so an axis
|
|
60
|
+
* serializes to the same plain object the server has always received.
|
|
61
|
+
*/
|
|
62
|
+
class CoordinationAxis {
|
|
63
|
+
constructor(axis) {
|
|
64
|
+
Object.assign(this, Object.fromEntries(Object.entries(axis).filter(([, mode]) => mode !== undefined)));
|
|
65
|
+
}
|
|
66
|
+
/** Apply one more rule, later winning on a repeated kind. */
|
|
67
|
+
and(rule) {
|
|
68
|
+
// Assigned rather than spread, and for the reason the merge form below
|
|
69
|
+
// assigns too: what carries forward is the dispositions, which are own
|
|
70
|
+
// enumerable properties. The chaining methods live on the prototype and the
|
|
71
|
+
// constructor puts them back, so a chain accumulates nothing but data.
|
|
72
|
+
return new CoordinationAxis(Object.assign({}, this, rule));
|
|
73
|
+
}
|
|
74
|
+
humansOverwrite() {
|
|
75
|
+
return this.and(humansOverwrite());
|
|
76
|
+
}
|
|
77
|
+
humansReject() {
|
|
78
|
+
return this.and(humansReject());
|
|
79
|
+
}
|
|
80
|
+
humansNotify() {
|
|
81
|
+
return this.and(humansNotify());
|
|
82
|
+
}
|
|
83
|
+
agentsOverwrite() {
|
|
84
|
+
return this.and(agentsOverwrite());
|
|
85
|
+
}
|
|
86
|
+
agentsReject() {
|
|
87
|
+
return this.and(agentsReject());
|
|
88
|
+
}
|
|
89
|
+
agentsNotify() {
|
|
90
|
+
return this.and(agentsNotify());
|
|
91
|
+
}
|
|
92
|
+
systemOverwrite() {
|
|
93
|
+
return this.and(systemOverwrite());
|
|
94
|
+
}
|
|
95
|
+
systemReject() {
|
|
96
|
+
return this.and(systemReject());
|
|
97
|
+
}
|
|
98
|
+
systemNotify() {
|
|
99
|
+
return this.and(systemNotify());
|
|
100
|
+
}
|
|
101
|
+
}
|
|
41
102
|
/**
|
|
42
103
|
* Merges coordination rules into a single {@link ConflictAxis}. Later rules win
|
|
43
104
|
* on key collisions, and a committer kind you leave out falls through to the
|
|
@@ -47,6 +108,26 @@ export const systemNotify = () => ({ system: 'notify' });
|
|
|
47
108
|
* coordination(humansOverwrite(), agentsReject()) // → { user: 'overwrite', agent: 'reject' }
|
|
48
109
|
* ```
|
|
49
110
|
*/
|
|
50
|
-
|
|
111
|
+
function mergeRules(...rules) {
|
|
51
112
|
return Object.assign({}, ...rules);
|
|
52
113
|
}
|
|
114
|
+
/**
|
|
115
|
+
* The coordination vocabulary, reachable through one name. Call it to merge
|
|
116
|
+
* rules you have assembled; reach through it to start a chain.
|
|
117
|
+
*
|
|
118
|
+
* ```ts
|
|
119
|
+
* conflict: coordination.humansOverwrite().agentsReject()
|
|
120
|
+
* conflict: coordination(humansOverwrite(), agentsReject())
|
|
121
|
+
* ```
|
|
122
|
+
*/
|
|
123
|
+
export const coordination = Object.assign(mergeRules, {
|
|
124
|
+
humansOverwrite: () => new CoordinationAxis(humansOverwrite()),
|
|
125
|
+
humansReject: () => new CoordinationAxis(humansReject()),
|
|
126
|
+
humansNotify: () => new CoordinationAxis(humansNotify()),
|
|
127
|
+
agentsOverwrite: () => new CoordinationAxis(agentsOverwrite()),
|
|
128
|
+
agentsReject: () => new CoordinationAxis(agentsReject()),
|
|
129
|
+
agentsNotify: () => new CoordinationAxis(agentsNotify()),
|
|
130
|
+
systemOverwrite: () => new CoordinationAxis(systemOverwrite()),
|
|
131
|
+
systemReject: () => new CoordinationAxis(systemReject()),
|
|
132
|
+
systemNotify: () => new CoordinationAxis(systemNotify()),
|
|
133
|
+
});
|
package/dist/schema/ddl.js
CHANGED
|
@@ -21,8 +21,8 @@
|
|
|
21
21
|
* by a {@link diffSchema} step list: drops, renames, type casts, and
|
|
22
22
|
* backfills.
|
|
23
23
|
*/
|
|
24
|
-
import { AbloValidationError } from '../errors.js';
|
|
25
|
-
import { resolveTenancy, tenancyColumn } from '
|
|
24
|
+
import { AbloValidationError } from '../transaction/errors.js';
|
|
25
|
+
import { resolveTenancy, tenancyColumn } from '../transaction/schema/tenancy.js';
|
|
26
26
|
// ── Identifier safety ────────────────────────────────────────────────────────
|
|
27
27
|
/** Postgres unquoted-identifier-safe slug: lowercase `[a-z0-9_]`, ≤50 chars. */
|
|
28
28
|
function slug(raw) {
|
package/dist/schema/diff.d.ts
CHANGED
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
* drop models. A newly added column is never created `NOT NULL`; making a column
|
|
29
29
|
* required is a separate nullability change that a backfill must run before.
|
|
30
30
|
*/
|
|
31
|
-
import type { FieldMeta } from '
|
|
31
|
+
import type { FieldMeta } from '../transaction/schema/field.js';
|
|
32
32
|
import type { SchemaJSON } from './serialize.js';
|
|
33
33
|
export type FieldType = FieldMeta['type'];
|
|
34
34
|
/** Whether a Postgres `ALTER COLUMN … TYPE` can preserve the existing data. */
|
package/dist/schema/generate.js
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* enums emitted as string-literal unions. Relations are not expanded here — the
|
|
15
15
|
* runtime SDK resolves those through its typed accessors.
|
|
16
16
|
*/
|
|
17
|
-
import { BASE_FIELDS } from '
|
|
17
|
+
import { BASE_FIELDS } from '../transaction/schema/schema.js';
|
|
18
18
|
function tsType(meta) {
|
|
19
19
|
switch (meta.type) {
|
|
20
20
|
case 'string':
|
package/dist/schema/index.d.ts
CHANGED
|
@@ -21,21 +21,22 @@
|
|
|
21
21
|
* ```
|
|
22
22
|
*/
|
|
23
23
|
export { z } from 'zod';
|
|
24
|
-
export { field, indexed, getFieldMeta, type FieldBuilder, type FieldMeta } from '
|
|
25
|
-
export {
|
|
26
|
-
export {
|
|
27
|
-
export {
|
|
28
|
-
export {
|
|
29
|
-
export {
|
|
30
|
-
export {
|
|
24
|
+
export { field, indexed, getFieldMeta, type FieldBuilder, type FieldMeta } from '../transaction/schema/field.js';
|
|
25
|
+
export { isFieldRef, type FieldRef } from '../transaction/schema/fieldRef.js';
|
|
26
|
+
export { relation, type RelationDef, type RelationType } from '../transaction/schema/relation.js';
|
|
27
|
+
export { tenancySchema, scopedViaRefSchema, policyInputSchema, resolvePolicy, resolveTenancy, tenancyColumn, DEFAULT_ORG_COLUMN, type Tenancy, type ScopedViaRef, type PolicyInput, } from '../transaction/schema/tenancy.js';
|
|
28
|
+
export { residencySchema, DEFAULT_RESIDENCY, type ModelResidency, } from '../transaction/schema/residency.js';
|
|
29
|
+
export { syncDeltaCoreSchema, deltaAttributionSchema, syncDeltaRowSchema, participantKindSchema, confirmationStateSchema, backfillProvenanceSchema, DELTA_DATA_CLASSIFICATION, DELTA_PHYSICAL_STORAGE, type SyncDeltaCore, type DeltaAttribution, type SyncDeltaRow, type ParticipantKind, type ConfirmationState, type BackfillProvenance, } from './syncDeltaRow.js';
|
|
30
|
+
export { syncDeltaActionSchema, wireDeltaDataSchema, participantRefSchema, syncDeltaWireCoreSchema, clientSyncDeltaSchema, serverSyncDeltaSchema, type SyncDeltaAction, type WireDeltaData, type ParticipantRef, type SyncDeltaWireCore, type ClientSyncDelta, type ServerSyncDelta, } from '../transaction/wire/delta.js';
|
|
31
|
+
export { model, scopeKindOf, LoadStrategy, DEFAULT_LOAD_STRATEGY, loadsAtBootstrap, type ModelDef, type ModelOptions, type PersistOptions, type RelationRecord, type GrantsRef, type ConflictAxis, } from '../transaction/schema/model.js';
|
|
31
32
|
export { coordination, humansOverwrite, humansReject, humansNotify, agentsOverwrite, agentsReject, agentsNotify, systemOverwrite, systemReject, systemNotify, type ConflictRule, } from './coordination.js';
|
|
32
33
|
export { mutable, readOnly, type SugarOptions } from './sugar.js';
|
|
33
|
-
export { defineSchema, composeIdentitySyncGroups, type Schema, type SchemaRecord, type Model, type Row, type
|
|
34
|
-
export { serializeSchema, parseSchema, toSchemaJSON, fromSchemaJSON, schemaHash, type SchemaJSON, type ModelJSON, type RelationJSON, } from './serialize.js';
|
|
34
|
+
export { defineSchema, composeIdentitySyncGroups, type Schema, type SchemaRecord, type Model, type Row, type InferCreate, type InferRow, type InferModelNames, type BaseModelFields, type InsertValue, type UpsertValue, type UpdateValue, type DeleteId, type DefineSchemaOptions, type Casing, type CasingConvention, type CasingFn, composeEntitySyncGroups, intersectRequestedWithAllowed, type IdentityRole, type IdentityContext, type IdentityRoleSource, type EntityRole, type EntityContext, type EntityRoleSource, type RoleSource, type RoleContext, type SyncGroup, type SyncGroupInput, identityRole, entityRole, extractIdentityIds, extractEntityIds, syncGroup, syncGroupSchema, syncGroupInputSchema, isSyncGroupInput, identityRoleSchema, entityRoleSchema, roleSchema, roleSourceSchema, scopeSchema, grantsRefSchema, groupsInputSchema, type GroupsInput, type SessionSettings, type SessionSettingSource, RESERVED_SESSION_SETTINGS, } from '../transaction/schema/schema.js';
|
|
35
|
+
export { serializeSchema, parseSchema, toSchemaJSON, fromSchemaJSON, schemaHash, modelHash, type SchemaJSON, type ModelJSON, type RelationJSON, } from './serialize.js';
|
|
35
36
|
export { selectModels, omitModels } from './select.js';
|
|
36
37
|
export { generateProvisionPlan, generateMigrationPlan, appSchemaName, camelToSnake, snakeToCamel, q, sqlType, type ProvisionPlan, type MigrationPlan, } from './ddl.js';
|
|
37
38
|
export { PG_LOCK_NOT_AVAILABLE, resolveDdlLockTimeout, resolveDdlMaxLockAttempts, ddlLockRetryBackoffMs, type DdlLockEnv, } from './ddlLock.js';
|
|
38
39
|
export { diffSchema, classifyMigration, classifyCast, isAutoApplicable, isBlockerResolved, unresolvedBlockers, type BackfillValue, type MigrationStep, type FieldChanges, type FieldColumnChange, type FieldTypeChange, type NullabilityChange, type EnumValuesChange, type IndexChange, type CastSafety, type FieldType, type RenameHints, type MigrationSignal, type MigrationClassification, type WarningCode, type BlockerCode, } from './diff.js';
|
|
39
40
|
export { generateTypes } from './generate.js';
|
|
40
41
|
export { query, defineQueries, type QueryDef, type QueryRecord, type Queries, type InferQueryInput, type InferQueryResult, } from './queries.js';
|
|
41
|
-
export { schemaToOpenApi, type SchemaToOpenApiOptions } from '
|
|
42
|
+
export { abloOpenApi, schemaToOpenApi, type SchemaToOpenApiOptions } from '../transaction/schema/openapi.js';
|
package/dist/schema/index.js
CHANGED
|
@@ -23,31 +23,31 @@
|
|
|
23
23
|
// Re-export Zod for convenience (consumers can also import directly)
|
|
24
24
|
export { z } from 'zod';
|
|
25
25
|
// Field helpers (optional convenience wrappers around Zod)
|
|
26
|
-
export { field, indexed, getFieldMeta } from '
|
|
26
|
+
export { field, indexed, getFieldMeta } from '../transaction/schema/field.js';
|
|
27
|
+
// A field as a value rather than a quoted name — `schema.fields.tasks.status`.
|
|
28
|
+
// Surfaces that name a field (claims today) take one of these so a name that
|
|
29
|
+
// does not exist stops compiling.
|
|
30
|
+
export { isFieldRef } from '../transaction/schema/fieldRef.js';
|
|
27
31
|
// Relation builders
|
|
28
|
-
export { relation } from '
|
|
32
|
+
export { relation } from '../transaction/schema/relation.js';
|
|
29
33
|
// Tenancy — the single source of truth for how a model's rows are tenant-scoped.
|
|
30
|
-
export { tenancySchema, scopedViaRefSchema, policyInputSchema, resolvePolicy, resolveTenancy, tenancyColumn, DEFAULT_ORG_COLUMN, } from '
|
|
34
|
+
export { tenancySchema, scopedViaRefSchema, policyInputSchema, resolvePolicy, resolveTenancy, tenancyColumn, DEFAULT_ORG_COLUMN, } from '../transaction/schema/tenancy.js';
|
|
31
35
|
// Model residency — which database a model's rows live in (`tenant` can be a
|
|
32
36
|
// customer's own database, `control` is Ablo's). A sibling axis to `tenancy`.
|
|
33
|
-
export { residencySchema, DEFAULT_RESIDENCY,
|
|
34
|
-
// Deliberate back-compat re-export of the deprecated aliases:
|
|
35
|
-
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
36
|
-
planeSchema,
|
|
37
|
-
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
38
|
-
DEFAULT_PLANE, } from './residency.js';
|
|
37
|
+
export { residencySchema, DEFAULT_RESIDENCY, } from '../transaction/schema/residency.js';
|
|
39
38
|
// The stored `sync_deltas` row, described as Zod schemas grouped by subsystem and by
|
|
40
39
|
// which database the columns live in.
|
|
41
|
-
export { syncDeltaCoreSchema, deltaAttributionSchema,
|
|
42
|
-
// Deliberate back-compat re-export; physical storage is the precise name.
|
|
43
|
-
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
44
|
-
DELTA_RESIDENCY, } from './syncDeltaRow.js';
|
|
40
|
+
export { syncDeltaCoreSchema, deltaAttributionSchema, syncDeltaRowSchema, participantKindSchema, confirmationStateSchema, backfillProvenanceSchema, DELTA_DATA_CLASSIFICATION, DELTA_PHYSICAL_STORAGE, } from './syncDeltaRow.js';
|
|
45
41
|
// The wire delta contract — the server-to-client projection of the stored row.
|
|
46
42
|
// Both the client SDK and the server derive their `SyncDelta` type from these with
|
|
47
43
|
// `z.infer`, so the two ends cannot drift apart.
|
|
48
|
-
export { syncDeltaActionSchema, wireDeltaDataSchema, participantRefSchema, syncDeltaWireCoreSchema, clientSyncDeltaSchema, serverSyncDeltaSchema, } from '../wire/delta.js';
|
|
44
|
+
export { syncDeltaActionSchema, wireDeltaDataSchema, participantRefSchema, syncDeltaWireCoreSchema, clientSyncDeltaSchema, serverSyncDeltaSchema, } from '../transaction/wire/delta.js';
|
|
49
45
|
// Model builder
|
|
50
|
-
export { model, scopeKindOf,
|
|
46
|
+
export { model, scopeKindOf,
|
|
47
|
+
// Both meanings: the value a tool enumerates to learn the strategies, and the
|
|
48
|
+
// type a `load` option is checked against. `loadsAtBootstrap` is the one
|
|
49
|
+
// predicate both the client subscription and the server payload ask.
|
|
50
|
+
LoadStrategy, DEFAULT_LOAD_STRATEGY, loadsAtBootstrap, } from '../transaction/schema/model.js';
|
|
51
51
|
// Coordination authoring helpers for the `conflict` axis — composable disposition
|
|
52
52
|
// functions plus a combinator that merges them.
|
|
53
53
|
export { coordination, humansOverwrite, humansReject, humansNotify, agentsOverwrite, agentsReject, agentsNotify, systemOverwrite, systemReject, systemNotify, } from './coordination.js';
|
|
@@ -56,9 +56,9 @@ export { coordination, humansOverwrite, humansReject, humansNotify, agentsOverwr
|
|
|
56
56
|
// sensible defaults for everything else.
|
|
57
57
|
export { mutable, readOnly } from './sugar.js';
|
|
58
58
|
// Schema definition + type inference
|
|
59
|
-
export { defineSchema, composeIdentitySyncGroups, composeEntitySyncGroups, intersectRequestedWithAllowed, identityRole, entityRole, extractIdentityIds, extractEntityIds, syncGroup, syncGroupSchema, syncGroupInputSchema, isSyncGroupInput, identityRoleSchema, entityRoleSchema, roleSchema, roleSourceSchema, scopeSchema, grantsRefSchema, groupsInputSchema, RESERVED_SESSION_SETTINGS, } from '
|
|
59
|
+
export { defineSchema, composeIdentitySyncGroups, composeEntitySyncGroups, intersectRequestedWithAllowed, identityRole, entityRole, extractIdentityIds, extractEntityIds, syncGroup, syncGroupSchema, syncGroupInputSchema, isSyncGroupInput, identityRoleSchema, entityRoleSchema, roleSchema, roleSourceSchema, scopeSchema, grantsRefSchema, groupsInputSchema, RESERVED_SESSION_SETTINGS, } from '../transaction/schema/schema.js';
|
|
60
60
|
// Schema ⇄ JSON — serialize a schema for transport and rebuild it on the far side.
|
|
61
|
-
export { serializeSchema, parseSchema, toSchemaJSON, fromSchemaJSON, schemaHash, } from './serialize.js';
|
|
61
|
+
export { serializeSchema, parseSchema, toSchemaJSON, fromSchemaJSON, schemaHash, modelHash, } from './serialize.js';
|
|
62
62
|
// Schema projection — derive an app's subset from one canonical schema.
|
|
63
63
|
export { selectModels, omitModels } from './select.js';
|
|
64
64
|
// Schema → Postgres DDL — shared by the host implementation and the command-line tools.
|
|
@@ -73,4 +73,8 @@ export { diffSchema, classifyMigration, classifyCast, isAutoApplicable, isBlocke
|
|
|
73
73
|
export { generateTypes } from './generate.js';
|
|
74
74
|
// Query definition DSL + type inference
|
|
75
75
|
export { query, defineQueries, } from './queries.js';
|
|
76
|
-
|
|
76
|
+
// The OpenAPI generator describes the language-agnostic `/v1` surface — the
|
|
77
|
+
// primitive itself, which a Python or Go caller consumes with no TypeScript
|
|
78
|
+
// anywhere — so it lives in the settlement core (ADR 0016). Re-exported here so
|
|
79
|
+
// the `@abloatai/ablo/schema` import path keeps resolving.
|
|
80
|
+
export { abloOpenApi, schemaToOpenApi } from '../transaction/schema/openapi.js';
|
package/dist/schema/queries.d.ts
CHANGED
|
@@ -13,27 +13,27 @@
|
|
|
13
13
|
* } from '@abloatai/ablo/schema';
|
|
14
14
|
*
|
|
15
15
|
* const schema = defineSchema({
|
|
16
|
-
*
|
|
17
|
-
* {
|
|
18
|
-
* {
|
|
19
|
-
* { load: 'lazy', typename: '
|
|
16
|
+
* block: model(
|
|
17
|
+
* { sectionId: z.string(), type: z.string() },
|
|
18
|
+
* { section: relation.belongsTo('sections', 'sectionId') },
|
|
19
|
+
* { load: 'lazy', typename: 'Block', persist: {} },
|
|
20
20
|
* ),
|
|
21
21
|
* });
|
|
22
22
|
*
|
|
23
23
|
* const queries = defineQueries(schema, {
|
|
24
|
-
*
|
|
25
|
-
* input: z.object({
|
|
26
|
-
* returns: '
|
|
24
|
+
* blocksByReport: query({
|
|
25
|
+
* input: z.object({ reportId: z.string() }),
|
|
26
|
+
* returns: 'block', // ← type-checked against schema.models
|
|
27
27
|
* }),
|
|
28
28
|
* });
|
|
29
29
|
*
|
|
30
|
-
* type Input = InferQueryInput<typeof queries.queries.
|
|
31
|
-
* // ^? {
|
|
30
|
+
* type Input = InferQueryInput<typeof queries.queries.blocksByReport>;
|
|
31
|
+
* // ^? { reportId: string }
|
|
32
32
|
* type Result = InferQueryResult<
|
|
33
33
|
* typeof schema,
|
|
34
|
-
* typeof queries.queries.
|
|
34
|
+
* typeof queries.queries.blocksByReport
|
|
35
35
|
* >;
|
|
36
|
-
* // ^? Array<
|
|
36
|
+
* // ^? Array<Block>
|
|
37
37
|
*
|
|
38
38
|
* Design notes:
|
|
39
39
|
*
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
* `schema.models[queryDef.returns]` lookup.
|
|
56
56
|
*/
|
|
57
57
|
import { z } from 'zod';
|
|
58
|
-
import type { Schema, InferModel, InferModelNames } from '
|
|
58
|
+
import type { Schema, InferModel, InferModelNames } from '../transaction/schema/schema.js';
|
|
59
59
|
/**
|
|
60
60
|
* A single query definition: a zod input shape, the schema key of the
|
|
61
61
|
* model it returns, and (after assembly) the name it was registered
|
|
@@ -97,15 +97,15 @@ interface QuerySpec<TInput extends z.ZodType, TReturns extends string> {
|
|
|
97
97
|
* Define a query.
|
|
98
98
|
*
|
|
99
99
|
* `TReturns` is a `const` generic so TypeScript preserves the literal
|
|
100
|
-
* type of the `returns` value at call time (e.g., `'
|
|
100
|
+
* type of the `returns` value at call time (e.g., `'block'`
|
|
101
101
|
* instead of widening to `string`). This is what lets `defineQueries`
|
|
102
102
|
* type-check `returns` against the schema's model keys without
|
|
103
103
|
* requiring the consumer to write `as const` manually.
|
|
104
104
|
*
|
|
105
105
|
* ```ts
|
|
106
|
-
* const
|
|
107
|
-
* input: z.object({
|
|
108
|
-
* returns: '
|
|
106
|
+
* const blocksByReport = query({
|
|
107
|
+
* input: z.object({ reportId: z.string() }),
|
|
108
|
+
* returns: 'block',
|
|
109
109
|
* });
|
|
110
110
|
* ```
|
|
111
111
|
*/
|
|
@@ -133,8 +133,8 @@ export interface Queries<S extends Schema, Q extends QueryRecord<S>> {
|
|
|
133
133
|
* Infer the input type of a query from its zod schema.
|
|
134
134
|
*
|
|
135
135
|
* ```ts
|
|
136
|
-
* type Input = InferQueryInput<typeof queries.queries.
|
|
137
|
-
* // {
|
|
136
|
+
* type Input = InferQueryInput<typeof queries.queries.blocksByReport>;
|
|
137
|
+
* // { reportId: string }
|
|
138
138
|
* ```
|
|
139
139
|
*/
|
|
140
140
|
export type InferQueryInput<Q extends QueryDef> = z.infer<Q['input']>;
|
|
@@ -151,9 +151,9 @@ export type InferQueryInput<Q extends QueryDef> = z.infer<Q['input']>;
|
|
|
151
151
|
* ```ts
|
|
152
152
|
* type Result = InferQueryResult<
|
|
153
153
|
* typeof schema,
|
|
154
|
-
* typeof queries.queries.
|
|
154
|
+
* typeof queries.queries.blocksByReport
|
|
155
155
|
* >;
|
|
156
|
-
* // Array<
|
|
156
|
+
* // Array<Block>
|
|
157
157
|
* ```
|
|
158
158
|
*/
|
|
159
159
|
export type InferQueryResult<S extends Schema, Q extends QueryDef> = Q extends QueryDef<z.ZodType, infer R> ? R extends InferModelNames<S> ? InferModel<S, R>[] : never : never;
|
|
@@ -176,23 +176,23 @@ export type InferQueryResult<S extends Schema, Q extends QueryDef> = Q extends Q
|
|
|
176
176
|
* exist" error deep inside the loader.
|
|
177
177
|
*
|
|
178
178
|
* Each resolved query gets its `name` populated from the record key:
|
|
179
|
-
* `queries.
|
|
179
|
+
* `queries.blocksByReport.name === 'blocksByReport'`. Dispatch and
|
|
180
180
|
* lookup code read `queryDef.name` directly rather than re-deriving it from
|
|
181
181
|
* the surrounding record.
|
|
182
182
|
*
|
|
183
183
|
* ```ts
|
|
184
184
|
* const schema = defineSchema({
|
|
185
|
-
*
|
|
186
|
-
* {
|
|
185
|
+
* block: model(
|
|
186
|
+
* { sectionId: z.string() },
|
|
187
187
|
* {},
|
|
188
|
-
* { load: 'lazy', typename: '
|
|
188
|
+
* { load: 'lazy', typename: 'Block', persist: {} },
|
|
189
189
|
* ),
|
|
190
190
|
* });
|
|
191
191
|
*
|
|
192
192
|
* const queries = defineQueries(schema, {
|
|
193
|
-
*
|
|
194
|
-
* input: z.object({
|
|
195
|
-
* returns: '
|
|
193
|
+
* blocksByReport: query({
|
|
194
|
+
* input: z.object({ reportId: z.string() }),
|
|
195
|
+
* returns: 'block', // ← type-checked
|
|
196
196
|
* }),
|
|
197
197
|
* });
|
|
198
198
|
* ```
|
package/dist/schema/queries.js
CHANGED
|
@@ -13,27 +13,27 @@
|
|
|
13
13
|
* } from '@abloatai/ablo/schema';
|
|
14
14
|
*
|
|
15
15
|
* const schema = defineSchema({
|
|
16
|
-
*
|
|
17
|
-
* {
|
|
18
|
-
* {
|
|
19
|
-
* { load: 'lazy', typename: '
|
|
16
|
+
* block: model(
|
|
17
|
+
* { sectionId: z.string(), type: z.string() },
|
|
18
|
+
* { section: relation.belongsTo('sections', 'sectionId') },
|
|
19
|
+
* { load: 'lazy', typename: 'Block', persist: {} },
|
|
20
20
|
* ),
|
|
21
21
|
* });
|
|
22
22
|
*
|
|
23
23
|
* const queries = defineQueries(schema, {
|
|
24
|
-
*
|
|
25
|
-
* input: z.object({
|
|
26
|
-
* returns: '
|
|
24
|
+
* blocksByReport: query({
|
|
25
|
+
* input: z.object({ reportId: z.string() }),
|
|
26
|
+
* returns: 'block', // ← type-checked against schema.models
|
|
27
27
|
* }),
|
|
28
28
|
* });
|
|
29
29
|
*
|
|
30
|
-
* type Input = InferQueryInput<typeof queries.queries.
|
|
31
|
-
* // ^? {
|
|
30
|
+
* type Input = InferQueryInput<typeof queries.queries.blocksByReport>;
|
|
31
|
+
* // ^? { reportId: string }
|
|
32
32
|
* type Result = InferQueryResult<
|
|
33
33
|
* typeof schema,
|
|
34
|
-
* typeof queries.queries.
|
|
34
|
+
* typeof queries.queries.blocksByReport
|
|
35
35
|
* >;
|
|
36
|
-
* // ^? Array<
|
|
36
|
+
* // ^? Array<Block>
|
|
37
37
|
*
|
|
38
38
|
* Design notes:
|
|
39
39
|
*
|
|
@@ -55,21 +55,21 @@
|
|
|
55
55
|
* `schema.models[queryDef.returns]` lookup.
|
|
56
56
|
*/
|
|
57
57
|
import { z } from 'zod';
|
|
58
|
-
import { AbloValidationError } from '../errors.js';
|
|
58
|
+
import { AbloValidationError } from '../transaction/errors.js';
|
|
59
59
|
// ── query() factory ───────────────────────────────────────────────────────
|
|
60
60
|
/**
|
|
61
61
|
* Define a query.
|
|
62
62
|
*
|
|
63
63
|
* `TReturns` is a `const` generic so TypeScript preserves the literal
|
|
64
|
-
* type of the `returns` value at call time (e.g., `'
|
|
64
|
+
* type of the `returns` value at call time (e.g., `'block'`
|
|
65
65
|
* instead of widening to `string`). This is what lets `defineQueries`
|
|
66
66
|
* type-check `returns` against the schema's model keys without
|
|
67
67
|
* requiring the consumer to write `as const` manually.
|
|
68
68
|
*
|
|
69
69
|
* ```ts
|
|
70
|
-
* const
|
|
71
|
-
* input: z.object({
|
|
72
|
-
* returns: '
|
|
70
|
+
* const blocksByReport = query({
|
|
71
|
+
* input: z.object({ reportId: z.string() }),
|
|
72
|
+
* returns: 'block',
|
|
73
73
|
* });
|
|
74
74
|
* ```
|
|
75
75
|
*/
|
|
@@ -99,23 +99,23 @@ export function query(spec) {
|
|
|
99
99
|
* exist" error deep inside the loader.
|
|
100
100
|
*
|
|
101
101
|
* Each resolved query gets its `name` populated from the record key:
|
|
102
|
-
* `queries.
|
|
102
|
+
* `queries.blocksByReport.name === 'blocksByReport'`. Dispatch and
|
|
103
103
|
* lookup code read `queryDef.name` directly rather than re-deriving it from
|
|
104
104
|
* the surrounding record.
|
|
105
105
|
*
|
|
106
106
|
* ```ts
|
|
107
107
|
* const schema = defineSchema({
|
|
108
|
-
*
|
|
109
|
-
* {
|
|
108
|
+
* block: model(
|
|
109
|
+
* { sectionId: z.string() },
|
|
110
110
|
* {},
|
|
111
|
-
* { load: 'lazy', typename: '
|
|
111
|
+
* { load: 'lazy', typename: 'Block', persist: {} },
|
|
112
112
|
* ),
|
|
113
113
|
* });
|
|
114
114
|
*
|
|
115
115
|
* const queries = defineQueries(schema, {
|
|
116
|
-
*
|
|
117
|
-
* input: z.object({
|
|
118
|
-
* returns: '
|
|
116
|
+
* blocksByReport: query({
|
|
117
|
+
* input: z.object({ reportId: z.string() }),
|
|
118
|
+
* returns: 'block', // ← type-checked
|
|
119
119
|
* }),
|
|
120
120
|
* });
|
|
121
121
|
* ```
|
package/dist/schema/select.d.ts
CHANGED
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
* import { schema as full } from './schema';
|
|
13
13
|
* import { selectModels } from '@abloatai/ablo/schema';
|
|
14
14
|
*
|
|
15
|
-
* // Subscribe to identity and
|
|
16
|
-
* export const schema = selectModels(full, ['users', 'organizations', '
|
|
15
|
+
* // Subscribe to identity and document content only.
|
|
16
|
+
* export const schema = selectModels(full, ['users', 'organizations', 'workspaces', 'folders', 'files']);
|
|
17
17
|
* ```
|
|
18
18
|
*
|
|
19
19
|
* Relations whose target falls outside the selected set are dropped, so the
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
* scope-inheritance throws instead, because silently losing it would mis-route
|
|
22
22
|
* a record's fan-out — the selected set must be closed under `parent` edges.
|
|
23
23
|
*/
|
|
24
|
-
import type { Schema, SchemaRecord } from '
|
|
24
|
+
import type { Schema, SchemaRecord } from '../transaction/schema/schema.js';
|
|
25
25
|
export declare function selectModels<S extends SchemaRecord, K extends keyof S & string>(schema: Schema<S>, keys: readonly K[]): Schema<Pick<S, K>>;
|
|
26
26
|
/**
|
|
27
27
|
* `omitModels` is `selectModels` from the other side: keep every model EXCEPT
|
package/dist/schema/select.js
CHANGED
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
* import { schema as full } from './schema';
|
|
13
13
|
* import { selectModels } from '@abloatai/ablo/schema';
|
|
14
14
|
*
|
|
15
|
-
* // Subscribe to identity and
|
|
16
|
-
* export const schema = selectModels(full, ['users', 'organizations', '
|
|
15
|
+
* // Subscribe to identity and document content only.
|
|
16
|
+
* export const schema = selectModels(full, ['users', 'organizations', 'workspaces', 'folders', 'files']);
|
|
17
17
|
* ```
|
|
18
18
|
*
|
|
19
19
|
* Relations whose target falls outside the selected set are dropped, so the
|
|
@@ -21,7 +21,8 @@
|
|
|
21
21
|
* scope-inheritance throws instead, because silently losing it would mis-route
|
|
22
22
|
* a record's fan-out — the selected set must be closed under `parent` edges.
|
|
23
23
|
*/
|
|
24
|
-
import {
|
|
24
|
+
import { buildFieldRefs } from '../transaction/schema/schema.js';
|
|
25
|
+
import { AbloValidationError } from '../transaction/errors.js';
|
|
25
26
|
import { schemaHash } from './serialize.js';
|
|
26
27
|
export function selectModels(schema, keys) {
|
|
27
28
|
const keep = new Set(keys);
|
|
@@ -50,6 +51,8 @@ export function selectModels(schema, keys) {
|
|
|
50
51
|
}
|
|
51
52
|
return {
|
|
52
53
|
models: models,
|
|
54
|
+
// References for exactly the models this projection kept.
|
|
55
|
+
fields: buildFieldRefs(models),
|
|
53
56
|
validators: validators,
|
|
54
57
|
identityRoles: schema.identityRoles,
|
|
55
58
|
sessionSettings: schema.sessionSettings,
|