@abloatai/ablo 0.36.0 → 0.37.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +2 -2
- package/CHANGELOG.md +55 -2014
- package/NOTICE +2 -2
- package/README.md +45 -63
- 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
package/dist/schema/index.js
DELETED
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @abloatai/ablo/schema — Schema Definition DSL
|
|
3
|
-
*
|
|
4
|
-
* Define your data models with Zod. Types are inferred automatically.
|
|
5
|
-
*
|
|
6
|
-
* ```ts
|
|
7
|
-
* import { z } from 'zod';
|
|
8
|
-
* import { defineSchema, model, relation } from '@abloatai/ablo/schema';
|
|
9
|
-
*
|
|
10
|
-
* export const schema = defineSchema({
|
|
11
|
-
* tasks: model({
|
|
12
|
-
* title: z.string(),
|
|
13
|
-
* status: z.enum(['todo', 'doing', 'done']).default('todo'),
|
|
14
|
-
* projectId: z.string().optional(),
|
|
15
|
-
* }, {
|
|
16
|
-
* project: relation.belongsTo('projects', 'projectId'),
|
|
17
|
-
* }),
|
|
18
|
-
* });
|
|
19
|
-
*
|
|
20
|
-
* type Task = Model<typeof schema, 'tasks'>;
|
|
21
|
-
* ```
|
|
22
|
-
*/
|
|
23
|
-
// Re-export Zod for convenience (consumers can also import directly)
|
|
24
|
-
export { z } from 'zod';
|
|
25
|
-
// Field helpers (optional convenience wrappers around Zod)
|
|
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';
|
|
31
|
-
// Relation builders
|
|
32
|
-
export { relation } from '../transaction/schema/relation.js';
|
|
33
|
-
// Tenancy — the single source of truth for how a model's rows are tenant-scoped.
|
|
34
|
-
export { tenancySchema, scopedViaRefSchema, policyInputSchema, resolvePolicy, resolveTenancy, tenancyColumn, DEFAULT_ORG_COLUMN, } from '../transaction/schema/tenancy.js';
|
|
35
|
-
// Model residency — which database a model's rows live in (`tenant` can be a
|
|
36
|
-
// customer's own database, `control` is Ablo's). A sibling axis to `tenancy`.
|
|
37
|
-
export { residencySchema, DEFAULT_RESIDENCY, } from '../transaction/schema/residency.js';
|
|
38
|
-
// The stored `sync_deltas` row, described as Zod schemas grouped by subsystem and by
|
|
39
|
-
// which database the columns live in.
|
|
40
|
-
export { syncDeltaCoreSchema, deltaAttributionSchema, syncDeltaRowSchema, participantKindSchema, confirmationStateSchema, backfillProvenanceSchema, DELTA_DATA_CLASSIFICATION, DELTA_PHYSICAL_STORAGE, } from './syncDeltaRow.js';
|
|
41
|
-
// The wire delta contract — the server-to-client projection of the stored row.
|
|
42
|
-
// Both the client SDK and the server derive their `SyncDelta` type from these with
|
|
43
|
-
// `z.infer`, so the two ends cannot drift apart.
|
|
44
|
-
export { syncDeltaActionSchema, wireDeltaDataSchema, participantRefSchema, syncDeltaWireCoreSchema, clientSyncDeltaSchema, serverSyncDeltaSchema, } from '../transaction/wire/delta.js';
|
|
45
|
-
// Model builder
|
|
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
|
-
// Coordination authoring helpers for the `conflict` axis — composable disposition
|
|
52
|
-
// functions plus a combinator that merges them.
|
|
53
|
-
export { coordination, humansOverwrite, humansReject, humansNotify, agentsOverwrite, agentsReject, agentsNotify, systemOverwrite, systemReject, systemNotify, } from './coordination.js';
|
|
54
|
-
// Claim-first shorthand for common model options: `mutable.lazy({...})` and friends
|
|
55
|
-
// encode a model's write-safety and load strategy in the verb, and fall back to
|
|
56
|
-
// sensible defaults for everything else.
|
|
57
|
-
export { mutable, readOnly } from './sugar.js';
|
|
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 '../transaction/schema/schema.js';
|
|
60
|
-
// Schema ⇄ JSON — serialize a schema for transport and rebuild it on the far side.
|
|
61
|
-
export { serializeSchema, parseSchema, toSchemaJSON, fromSchemaJSON, schemaHash, modelHash, } from './serialize.js';
|
|
62
|
-
// Schema projection — derive an app's subset from one canonical schema.
|
|
63
|
-
export { selectModels, omitModels } from './select.js';
|
|
64
|
-
// Schema → Postgres DDL — shared by the host implementation and the command-line tools.
|
|
65
|
-
export { generateProvisionPlan, generateMigrationPlan, appSchemaName, camelToSnake, snakeToCamel, q, sqlType, } from './ddl.js';
|
|
66
|
-
// Safe-DDL locking knobs (lock_timeout plus a bounded retry on lock contention),
|
|
67
|
-
// shared by `ablo migrate` and the host that applies a schema push, so tuning the
|
|
68
|
-
// ABLO_SCHEMA_LOCK_* variables changes both paths the same way.
|
|
69
|
-
export { PG_LOCK_NOT_AVAILABLE, resolveDdlLockTimeout, resolveDdlMaxLockAttempts, ddlLockRetryBackoffMs, } from './ddlLock.js';
|
|
70
|
-
// Schema diff + migration planning — produces the plan the DDL layer turns into SQL.
|
|
71
|
-
export { diffSchema, classifyMigration, classifyCast, isAutoApplicable, isBlockerResolved, unresolvedBlockers, } from './diff.js';
|
|
72
|
-
// Schema → TypeScript type emission.
|
|
73
|
-
export { generateTypes } from './generate.js';
|
|
74
|
-
// Query definition DSL + type inference
|
|
75
|
-
export { query, defineQueries, } from './queries.js';
|
|
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
DELETED
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Query definitions for a schema.
|
|
3
|
-
*
|
|
4
|
-
* A query pairs a Zod input schema with the name of the model it returns.
|
|
5
|
-
* Input types flow through `z.infer` and result types through `InferModel`,
|
|
6
|
-
* the same inference path `model` and `relation` use, so there is no separate
|
|
7
|
-
* type system to learn.
|
|
8
|
-
*
|
|
9
|
-
* Usage:
|
|
10
|
-
* import { z } from 'zod';
|
|
11
|
-
* import {
|
|
12
|
-
* defineSchema, defineQueries, model, query, relation,
|
|
13
|
-
* } from '@abloatai/ablo/schema';
|
|
14
|
-
*
|
|
15
|
-
* const schema = defineSchema({
|
|
16
|
-
* block: model(
|
|
17
|
-
* { sectionId: z.string(), type: z.string() },
|
|
18
|
-
* { section: relation.belongsTo('sections', 'sectionId') },
|
|
19
|
-
* { load: 'lazy', typename: 'Block', persist: {} },
|
|
20
|
-
* ),
|
|
21
|
-
* });
|
|
22
|
-
*
|
|
23
|
-
* const queries = defineQueries(schema, {
|
|
24
|
-
* blocksByReport: query({
|
|
25
|
-
* input: z.object({ reportId: z.string() }),
|
|
26
|
-
* returns: 'block', // ← type-checked against schema.models
|
|
27
|
-
* }),
|
|
28
|
-
* });
|
|
29
|
-
*
|
|
30
|
-
* type Input = InferQueryInput<typeof queries.queries.blocksByReport>;
|
|
31
|
-
* // ^? { reportId: string }
|
|
32
|
-
* type Result = InferQueryResult<
|
|
33
|
-
* typeof schema,
|
|
34
|
-
* typeof queries.queries.blocksByReport
|
|
35
|
-
* >;
|
|
36
|
-
* // ^? Array<Block>
|
|
37
|
-
*
|
|
38
|
-
* Design notes:
|
|
39
|
-
*
|
|
40
|
-
* - `query()` accepts any string for `returns`. The check that the string
|
|
41
|
-
* names a real model runs when the query passes through
|
|
42
|
-
* `defineQueries(schema, ...)`, the same way
|
|
43
|
-
* `relation.belongsTo('projects', 'projectId')` takes a plain string at
|
|
44
|
-
* the factory and defers the cross-reference check to schema assembly.
|
|
45
|
-
*
|
|
46
|
-
* - A query carries no `name` until `defineQueries()` assigns one from its
|
|
47
|
-
* record key — the same pattern `defineSchema({ tasks: model(...) })`
|
|
48
|
-
* uses, where the model's name is the record key rather than a field on
|
|
49
|
-
* the factory.
|
|
50
|
-
*
|
|
51
|
-
* - Every query returns an array of a single model type. To fetch several
|
|
52
|
-
* model types at once, run several queries in one batch rather than
|
|
53
|
-
* declaring a combined shape. Each `QueryDef` therefore points at exactly
|
|
54
|
-
* one model, and the loader hydrates results through a single
|
|
55
|
-
* `schema.models[queryDef.returns]` lookup.
|
|
56
|
-
*/
|
|
57
|
-
import { z } from 'zod';
|
|
58
|
-
import type { Schema, InferModel, InferModelNames } from '../transaction/schema/schema.js';
|
|
59
|
-
/**
|
|
60
|
-
* A single query definition: a zod input shape, the schema key of the
|
|
61
|
-
* model it returns, and (after assembly) the name it was registered
|
|
62
|
-
* under.
|
|
63
|
-
*
|
|
64
|
-
* `name` is filled in by `defineQueries()` from the record key. It is
|
|
65
|
-
* optional on the type so `query()` can return a value without one —
|
|
66
|
-
* downstream code should only read `name` after the query has been
|
|
67
|
-
* passed through `defineQueries()`.
|
|
68
|
-
*/
|
|
69
|
-
export interface QueryDef<TInput extends z.ZodType = z.ZodType, TReturns extends string = string> {
|
|
70
|
-
/** Zod schema for the query's input arguments. */
|
|
71
|
-
readonly input: TInput;
|
|
72
|
-
/**
|
|
73
|
-
* The schema key of the model this query returns. Narrowed by
|
|
74
|
-
* `defineQueries()` to `InferModelNames<S>` via the `Q` generic, so
|
|
75
|
-
* a query whose `returns` does not match a known model fails at
|
|
76
|
-
* compile time.
|
|
77
|
-
*/
|
|
78
|
-
readonly returns: TReturns;
|
|
79
|
-
/**
|
|
80
|
-
* The name under which the query is registered. {@link defineQueries}
|
|
81
|
-
* fills this in from the record key; you do not set it directly. It lives
|
|
82
|
-
* on the definition itself so dispatch and lookup code can read the name
|
|
83
|
-
* straight off a {@link QueryDef} without carrying the surrounding
|
|
84
|
-
* {@link Queries} object.
|
|
85
|
-
*/
|
|
86
|
-
readonly name?: string;
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* The raw spec accepted by `query()`. Internal type — consumers never
|
|
90
|
-
* reference this directly, they call `query({ input, returns })`.
|
|
91
|
-
*/
|
|
92
|
-
interface QuerySpec<TInput extends z.ZodType, TReturns extends string> {
|
|
93
|
-
readonly input: TInput;
|
|
94
|
-
readonly returns: TReturns;
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Define a query.
|
|
98
|
-
*
|
|
99
|
-
* `TReturns` is a `const` generic so TypeScript preserves the literal
|
|
100
|
-
* type of the `returns` value at call time (e.g., `'block'`
|
|
101
|
-
* instead of widening to `string`). This is what lets `defineQueries`
|
|
102
|
-
* type-check `returns` against the schema's model keys without
|
|
103
|
-
* requiring the consumer to write `as const` manually.
|
|
104
|
-
*
|
|
105
|
-
* ```ts
|
|
106
|
-
* const blocksByReport = query({
|
|
107
|
-
* input: z.object({ reportId: z.string() }),
|
|
108
|
-
* returns: 'block',
|
|
109
|
-
* });
|
|
110
|
-
* ```
|
|
111
|
-
*/
|
|
112
|
-
export declare function query<TInput extends z.ZodType, const TReturns extends string>(spec: QuerySpec<TInput, TReturns>): QueryDef<TInput, TReturns>;
|
|
113
|
-
/**
|
|
114
|
-
* A record of query names → query definitions, parameterized by a
|
|
115
|
-
* schema so each query's `returns` must reference a known model.
|
|
116
|
-
*
|
|
117
|
-
* This is the constraint type used by `defineQueries()` — it's what
|
|
118
|
-
* turns "any string" into "a model in this schema" without touching
|
|
119
|
-
* the `query()` factory itself.
|
|
120
|
-
*/
|
|
121
|
-
export type QueryRecord<S extends Schema> = Record<string, QueryDef<z.ZodType, InferModelNames<S>>>;
|
|
122
|
-
/**
|
|
123
|
-
* The object returned by `defineQueries()`. Holds a reference back to
|
|
124
|
-
* the schema (so the loader can resolve `queryDef.returns` to
|
|
125
|
-
* a `ModelDef` at runtime via `schema.models[def.returns]`) and the
|
|
126
|
-
* resolved record of queries, each with its `name` field filled in.
|
|
127
|
-
*/
|
|
128
|
-
export interface Queries<S extends Schema, Q extends QueryRecord<S>> {
|
|
129
|
-
readonly schema: S;
|
|
130
|
-
readonly queries: Q;
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* Infer the input type of a query from its zod schema.
|
|
134
|
-
*
|
|
135
|
-
* ```ts
|
|
136
|
-
* type Input = InferQueryInput<typeof queries.queries.blocksByReport>;
|
|
137
|
-
* // { reportId: string }
|
|
138
|
-
* ```
|
|
139
|
-
*/
|
|
140
|
-
export type InferQueryInput<Q extends QueryDef> = z.infer<Q['input']>;
|
|
141
|
-
/**
|
|
142
|
-
* Infer the result type of a query by looking up its `returns` model
|
|
143
|
-
* in the schema.
|
|
144
|
-
*
|
|
145
|
-
* Returns `Array<InferModel<S, returns>>` — all queries return a
|
|
146
|
-
* collection at this layer. Single-entity fetches use
|
|
147
|
-
* `ids: [singleId]` and the caller picks `result[0]`; this avoids a
|
|
148
|
-
* second `scope: 'single'` shape in the DSL for a case that can be
|
|
149
|
-
* expressed with the collection form.
|
|
150
|
-
*
|
|
151
|
-
* ```ts
|
|
152
|
-
* type Result = InferQueryResult<
|
|
153
|
-
* typeof schema,
|
|
154
|
-
* typeof queries.queries.blocksByReport
|
|
155
|
-
* >;
|
|
156
|
-
* // Array<Block>
|
|
157
|
-
* ```
|
|
158
|
-
*/
|
|
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;
|
|
160
|
-
/**
|
|
161
|
-
* Define a typed query set against a schema.
|
|
162
|
-
*
|
|
163
|
-
* Each entry's `returns` field is constrained to the schema's model
|
|
164
|
-
* names at compile time via the `Q` generic bound to `QueryRecord<S>`.
|
|
165
|
-
* A query whose `returns` does not match a known model will fail at
|
|
166
|
-
* the `defineQueries` call site with a TypeScript error, not at
|
|
167
|
-
* runtime.
|
|
168
|
-
*
|
|
169
|
-
* The factory also performs a runtime validation of the same
|
|
170
|
-
* invariant. This catches the edge case where the schema and the
|
|
171
|
-
* queries live in separate modules that drift out of sync — for
|
|
172
|
-
* example, when a developer removes a model from the schema without
|
|
173
|
-
* updating the queries that referenced it. The runtime error points
|
|
174
|
-
* at the specific offending query and lists the available models,
|
|
175
|
-
* which is a nicer failure mode than a generic "property does not
|
|
176
|
-
* exist" error deep inside the loader.
|
|
177
|
-
*
|
|
178
|
-
* Each resolved query gets its `name` populated from the record key:
|
|
179
|
-
* `queries.blocksByReport.name === 'blocksByReport'`. Dispatch and
|
|
180
|
-
* lookup code read `queryDef.name` directly rather than re-deriving it from
|
|
181
|
-
* the surrounding record.
|
|
182
|
-
*
|
|
183
|
-
* ```ts
|
|
184
|
-
* const schema = defineSchema({
|
|
185
|
-
* block: model(
|
|
186
|
-
* { sectionId: z.string() },
|
|
187
|
-
* {},
|
|
188
|
-
* { load: 'lazy', typename: 'Block', persist: {} },
|
|
189
|
-
* ),
|
|
190
|
-
* });
|
|
191
|
-
*
|
|
192
|
-
* const queries = defineQueries(schema, {
|
|
193
|
-
* blocksByReport: query({
|
|
194
|
-
* input: z.object({ reportId: z.string() }),
|
|
195
|
-
* returns: 'block', // ← type-checked
|
|
196
|
-
* }),
|
|
197
|
-
* });
|
|
198
|
-
* ```
|
|
199
|
-
*/
|
|
200
|
-
export declare function defineQueries<S extends Schema, const Q extends QueryRecord<S>>(schema: S, queries: Q): Queries<S, Q>;
|
|
201
|
-
export {};
|
package/dist/schema/queries.js
DELETED
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Query definitions for a schema.
|
|
3
|
-
*
|
|
4
|
-
* A query pairs a Zod input schema with the name of the model it returns.
|
|
5
|
-
* Input types flow through `z.infer` and result types through `InferModel`,
|
|
6
|
-
* the same inference path `model` and `relation` use, so there is no separate
|
|
7
|
-
* type system to learn.
|
|
8
|
-
*
|
|
9
|
-
* Usage:
|
|
10
|
-
* import { z } from 'zod';
|
|
11
|
-
* import {
|
|
12
|
-
* defineSchema, defineQueries, model, query, relation,
|
|
13
|
-
* } from '@abloatai/ablo/schema';
|
|
14
|
-
*
|
|
15
|
-
* const schema = defineSchema({
|
|
16
|
-
* block: model(
|
|
17
|
-
* { sectionId: z.string(), type: z.string() },
|
|
18
|
-
* { section: relation.belongsTo('sections', 'sectionId') },
|
|
19
|
-
* { load: 'lazy', typename: 'Block', persist: {} },
|
|
20
|
-
* ),
|
|
21
|
-
* });
|
|
22
|
-
*
|
|
23
|
-
* const queries = defineQueries(schema, {
|
|
24
|
-
* blocksByReport: query({
|
|
25
|
-
* input: z.object({ reportId: z.string() }),
|
|
26
|
-
* returns: 'block', // ← type-checked against schema.models
|
|
27
|
-
* }),
|
|
28
|
-
* });
|
|
29
|
-
*
|
|
30
|
-
* type Input = InferQueryInput<typeof queries.queries.blocksByReport>;
|
|
31
|
-
* // ^? { reportId: string }
|
|
32
|
-
* type Result = InferQueryResult<
|
|
33
|
-
* typeof schema,
|
|
34
|
-
* typeof queries.queries.blocksByReport
|
|
35
|
-
* >;
|
|
36
|
-
* // ^? Array<Block>
|
|
37
|
-
*
|
|
38
|
-
* Design notes:
|
|
39
|
-
*
|
|
40
|
-
* - `query()` accepts any string for `returns`. The check that the string
|
|
41
|
-
* names a real model runs when the query passes through
|
|
42
|
-
* `defineQueries(schema, ...)`, the same way
|
|
43
|
-
* `relation.belongsTo('projects', 'projectId')` takes a plain string at
|
|
44
|
-
* the factory and defers the cross-reference check to schema assembly.
|
|
45
|
-
*
|
|
46
|
-
* - A query carries no `name` until `defineQueries()` assigns one from its
|
|
47
|
-
* record key — the same pattern `defineSchema({ tasks: model(...) })`
|
|
48
|
-
* uses, where the model's name is the record key rather than a field on
|
|
49
|
-
* the factory.
|
|
50
|
-
*
|
|
51
|
-
* - Every query returns an array of a single model type. To fetch several
|
|
52
|
-
* model types at once, run several queries in one batch rather than
|
|
53
|
-
* declaring a combined shape. Each `QueryDef` therefore points at exactly
|
|
54
|
-
* one model, and the loader hydrates results through a single
|
|
55
|
-
* `schema.models[queryDef.returns]` lookup.
|
|
56
|
-
*/
|
|
57
|
-
import { z } from 'zod';
|
|
58
|
-
import { AbloValidationError } from '../transaction/errors.js';
|
|
59
|
-
// ── query() factory ───────────────────────────────────────────────────────
|
|
60
|
-
/**
|
|
61
|
-
* Define a query.
|
|
62
|
-
*
|
|
63
|
-
* `TReturns` is a `const` generic so TypeScript preserves the literal
|
|
64
|
-
* type of the `returns` value at call time (e.g., `'block'`
|
|
65
|
-
* instead of widening to `string`). This is what lets `defineQueries`
|
|
66
|
-
* type-check `returns` against the schema's model keys without
|
|
67
|
-
* requiring the consumer to write `as const` manually.
|
|
68
|
-
*
|
|
69
|
-
* ```ts
|
|
70
|
-
* const blocksByReport = query({
|
|
71
|
-
* input: z.object({ reportId: z.string() }),
|
|
72
|
-
* returns: 'block',
|
|
73
|
-
* });
|
|
74
|
-
* ```
|
|
75
|
-
*/
|
|
76
|
-
export function query(spec) {
|
|
77
|
-
return {
|
|
78
|
-
input: spec.input,
|
|
79
|
-
returns: spec.returns,
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
// ── defineQueries() factory ───────────────────────────────────────────────
|
|
83
|
-
/**
|
|
84
|
-
* Define a typed query set against a schema.
|
|
85
|
-
*
|
|
86
|
-
* Each entry's `returns` field is constrained to the schema's model
|
|
87
|
-
* names at compile time via the `Q` generic bound to `QueryRecord<S>`.
|
|
88
|
-
* A query whose `returns` does not match a known model will fail at
|
|
89
|
-
* the `defineQueries` call site with a TypeScript error, not at
|
|
90
|
-
* runtime.
|
|
91
|
-
*
|
|
92
|
-
* The factory also performs a runtime validation of the same
|
|
93
|
-
* invariant. This catches the edge case where the schema and the
|
|
94
|
-
* queries live in separate modules that drift out of sync — for
|
|
95
|
-
* example, when a developer removes a model from the schema without
|
|
96
|
-
* updating the queries that referenced it. The runtime error points
|
|
97
|
-
* at the specific offending query and lists the available models,
|
|
98
|
-
* which is a nicer failure mode than a generic "property does not
|
|
99
|
-
* exist" error deep inside the loader.
|
|
100
|
-
*
|
|
101
|
-
* Each resolved query gets its `name` populated from the record key:
|
|
102
|
-
* `queries.blocksByReport.name === 'blocksByReport'`. Dispatch and
|
|
103
|
-
* lookup code read `queryDef.name` directly rather than re-deriving it from
|
|
104
|
-
* the surrounding record.
|
|
105
|
-
*
|
|
106
|
-
* ```ts
|
|
107
|
-
* const schema = defineSchema({
|
|
108
|
-
* block: model(
|
|
109
|
-
* { sectionId: z.string() },
|
|
110
|
-
* {},
|
|
111
|
-
* { load: 'lazy', typename: 'Block', persist: {} },
|
|
112
|
-
* ),
|
|
113
|
-
* });
|
|
114
|
-
*
|
|
115
|
-
* const queries = defineQueries(schema, {
|
|
116
|
-
* blocksByReport: query({
|
|
117
|
-
* input: z.object({ reportId: z.string() }),
|
|
118
|
-
* returns: 'block', // ← type-checked
|
|
119
|
-
* }),
|
|
120
|
-
* });
|
|
121
|
-
* ```
|
|
122
|
-
*/
|
|
123
|
-
export function defineQueries(schema, queries) {
|
|
124
|
-
// Rebuild the queries record with `name` populated per entry. Same
|
|
125
|
-
// shallow-spread strategy `defineSchema` uses for `typename` / `persist`
|
|
126
|
-
// defaults — preserves input references, avoids mutating `readonly`
|
|
127
|
-
// fields in place, and keeps each resolved `QueryDef` immutable from
|
|
128
|
-
// construction onward.
|
|
129
|
-
const resolvedQueries = {};
|
|
130
|
-
for (const [name, def] of Object.entries(queries)) {
|
|
131
|
-
if (!(def.returns in schema.models)) {
|
|
132
|
-
throw new AbloValidationError(`defineQueries: query "${name}" declares returns: "${def.returns}", ` +
|
|
133
|
-
`which is not a model in the schema. ` +
|
|
134
|
-
`Available models: ${Object.keys(schema.models).join(', ') || '(none)'}`, { code: 'query_returns_unknown_model' });
|
|
135
|
-
}
|
|
136
|
-
resolvedQueries[name] = { ...def, name };
|
|
137
|
-
}
|
|
138
|
-
return {
|
|
139
|
-
schema,
|
|
140
|
-
// Cast back to Q: the rebuild only added `name` (already optional on
|
|
141
|
-
// QueryDef) to each entry, so the shape is structurally unchanged.
|
|
142
|
-
queries: resolvedQueries,
|
|
143
|
-
};
|
|
144
|
-
}
|
package/dist/schema/select.d.ts
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `selectModels` projects a schema down to a subset of its models.
|
|
3
|
-
*
|
|
4
|
-
* It lets one canonical schema serve several apps, each subscribing only to the
|
|
5
|
-
* models it needs. Rather than re-declare a model's fields in a second schema —
|
|
6
|
-
* which you would then have to keep identical by hand — an app selects the
|
|
7
|
-
* models it wants from the canonical schema. Field shapes, resolved foreign-key
|
|
8
|
-
* columns, computed getters, typenames, and identity roles all come from the
|
|
9
|
-
* source, so a subset cannot drift from the canonical definition.
|
|
10
|
-
*
|
|
11
|
-
* ```ts
|
|
12
|
-
* import { schema as full } from './schema';
|
|
13
|
-
* import { selectModels } from '@abloatai/ablo/schema';
|
|
14
|
-
*
|
|
15
|
-
* // Subscribe to identity and document content only.
|
|
16
|
-
* export const schema = selectModels(full, ['users', 'organizations', 'workspaces', 'folders', 'files']);
|
|
17
|
-
* ```
|
|
18
|
-
*
|
|
19
|
-
* Relations whose target falls outside the selected set are dropped, so the
|
|
20
|
-
* subset sees only its own models. Dropping a relation that carries `parent`
|
|
21
|
-
* scope-inheritance throws instead, because silently losing it would mis-route
|
|
22
|
-
* a record's fan-out — the selected set must be closed under `parent` edges.
|
|
23
|
-
*/
|
|
24
|
-
import type { Schema, SchemaRecord } from '../transaction/schema/schema.js';
|
|
25
|
-
export declare function selectModels<S extends SchemaRecord, K extends keyof S & string>(schema: Schema<S>, keys: readonly K[]): Schema<Pick<S, K>>;
|
|
26
|
-
/**
|
|
27
|
-
* `omitModels` is `selectModels` from the other side: keep every model EXCEPT
|
|
28
|
-
* the named ones. Use it when an app is the general case and a separate app
|
|
29
|
-
* owns the omitted models — the suite shell drops a specialized store that the
|
|
30
|
-
* standalone app selects for itself:
|
|
31
|
-
*
|
|
32
|
-
* ```ts
|
|
33
|
-
* export const schema = omitModels(full, ['reports', 'reportSections']);
|
|
34
|
-
* ```
|
|
35
|
-
*
|
|
36
|
-
* Same validation as `selectModels`: relations into the omitted set are
|
|
37
|
-
* dropped, and a dropped `parent` edge throws — so a model whose scope routes
|
|
38
|
-
* through an omitted parent cannot be silently kept.
|
|
39
|
-
*/
|
|
40
|
-
export declare function omitModels<S extends SchemaRecord, K extends keyof S & string>(schema: Schema<S>, keys: readonly K[]): Schema<Omit<S, K>>;
|
package/dist/schema/select.js
DELETED
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `selectModels` projects a schema down to a subset of its models.
|
|
3
|
-
*
|
|
4
|
-
* It lets one canonical schema serve several apps, each subscribing only to the
|
|
5
|
-
* models it needs. Rather than re-declare a model's fields in a second schema —
|
|
6
|
-
* which you would then have to keep identical by hand — an app selects the
|
|
7
|
-
* models it wants from the canonical schema. Field shapes, resolved foreign-key
|
|
8
|
-
* columns, computed getters, typenames, and identity roles all come from the
|
|
9
|
-
* source, so a subset cannot drift from the canonical definition.
|
|
10
|
-
*
|
|
11
|
-
* ```ts
|
|
12
|
-
* import { schema as full } from './schema';
|
|
13
|
-
* import { selectModels } from '@abloatai/ablo/schema';
|
|
14
|
-
*
|
|
15
|
-
* // Subscribe to identity and document content only.
|
|
16
|
-
* export const schema = selectModels(full, ['users', 'organizations', 'workspaces', 'folders', 'files']);
|
|
17
|
-
* ```
|
|
18
|
-
*
|
|
19
|
-
* Relations whose target falls outside the selected set are dropped, so the
|
|
20
|
-
* subset sees only its own models. Dropping a relation that carries `parent`
|
|
21
|
-
* scope-inheritance throws instead, because silently losing it would mis-route
|
|
22
|
-
* a record's fan-out — the selected set must be closed under `parent` edges.
|
|
23
|
-
*/
|
|
24
|
-
import { buildFieldRefs } from '../transaction/schema/schema.js';
|
|
25
|
-
import { AbloValidationError } from '../transaction/errors.js';
|
|
26
|
-
import { schemaHash } from './serialize.js';
|
|
27
|
-
export function selectModels(schema, keys) {
|
|
28
|
-
const keep = new Set(keys);
|
|
29
|
-
const models = {};
|
|
30
|
-
const validators = {};
|
|
31
|
-
for (const key of keys) {
|
|
32
|
-
const def = schema.models[key];
|
|
33
|
-
if (!def) {
|
|
34
|
-
throw new AbloValidationError(`selectModels: "${key}" is not a model in the source schema`, { code: 'invalid_schema', param: key });
|
|
35
|
-
}
|
|
36
|
-
// Prune relations whose target isn't in the selected set. A pruned
|
|
37
|
-
// `parent` edge is a routing error, not a silent drop.
|
|
38
|
-
const relations = {};
|
|
39
|
-
for (const [relName, rel] of Object.entries(def.relations)) {
|
|
40
|
-
if (keep.has(rel.target)) {
|
|
41
|
-
relations[relName] = rel;
|
|
42
|
-
continue;
|
|
43
|
-
}
|
|
44
|
-
if (rel.options?.parent) {
|
|
45
|
-
throw new AbloValidationError(`selectModels: model "${key}" has a parent relation "${relName}" → "${rel.target}", ` +
|
|
46
|
-
`which is not in the selected set. Include "${rel.target}" so scope inheritance still routes.`, { code: 'invalid_schema', param: `${key}.${relName}` });
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
models[key] = { ...def, relations };
|
|
50
|
-
validators[key] = schema.validators[key];
|
|
51
|
-
}
|
|
52
|
-
return {
|
|
53
|
-
models: models,
|
|
54
|
-
// References for exactly the models this projection kept.
|
|
55
|
-
fields: buildFieldRefs(models),
|
|
56
|
-
validators: validators,
|
|
57
|
-
identityRoles: schema.identityRoles,
|
|
58
|
-
sessionSettings: schema.sessionSettings,
|
|
59
|
-
// Record the full source's hash so the drift check can recognize this subset
|
|
60
|
-
// as current against a server running that full schema. Prefer the source's
|
|
61
|
-
// OWN `sourceSchemaHash` when it is itself a projection, so a subset-of-a-
|
|
62
|
-
// subset still points at the original full schema rather than an intermediate
|
|
63
|
-
// one. `schemaHash` ignores this field, so re-projecting stays deterministic.
|
|
64
|
-
sourceSchemaHash: schema.sourceSchemaHash ?? schemaHash(schema),
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* `omitModels` is `selectModels` from the other side: keep every model EXCEPT
|
|
69
|
-
* the named ones. Use it when an app is the general case and a separate app
|
|
70
|
-
* owns the omitted models — the suite shell drops a specialized store that the
|
|
71
|
-
* standalone app selects for itself:
|
|
72
|
-
*
|
|
73
|
-
* ```ts
|
|
74
|
-
* export const schema = omitModels(full, ['reports', 'reportSections']);
|
|
75
|
-
* ```
|
|
76
|
-
*
|
|
77
|
-
* Same validation as `selectModels`: relations into the omitted set are
|
|
78
|
-
* dropped, and a dropped `parent` edge throws — so a model whose scope routes
|
|
79
|
-
* through an omitted parent cannot be silently kept.
|
|
80
|
-
*/
|
|
81
|
-
export function omitModels(schema, keys) {
|
|
82
|
-
const drop = new Set(keys);
|
|
83
|
-
for (const key of keys) {
|
|
84
|
-
if (!schema.models[key]) {
|
|
85
|
-
throw new AbloValidationError(`omitModels: "${key}" is not a model in the source schema`, { code: 'invalid_schema', param: key });
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
const kept = Object.keys(schema.models).filter((k) => !drop.has(k));
|
|
89
|
-
return selectModels(schema, kept);
|
|
90
|
-
}
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Schema ⇄ JSON.
|
|
3
|
-
*
|
|
4
|
-
* A `Schema` is fully serializable apart from its client-only closures — the
|
|
5
|
-
* Zod validators and computed getters. {@link serializeSchema} emits the
|
|
6
|
-
* plain-data JSON form and {@link parseSchema} reconstructs a working `Schema`
|
|
7
|
-
* from it: one `Schema` type with two representations.
|
|
8
|
-
*
|
|
9
|
-
* A hosted, multi-tenant server loads a tenant's schema with `parseSchema(json)`
|
|
10
|
-
* rather than importing it in process. The JSON is what `ablo push` sends and
|
|
11
|
-
* what the server stores per tenant and version.
|
|
12
|
-
*
|
|
13
|
-
* What round-trips:
|
|
14
|
-
* - all model routing and scoping metadata: typename, tableName, load,
|
|
15
|
-
* mutable, the `tenancy` descriptor, bootstrap hints, scope, grants,
|
|
16
|
-
* entityRoles, the `conflict` disposition map, persist, autoFill,
|
|
17
|
-
* requiredFields, and lazyObservable. The authoring shorthands (`policy`
|
|
18
|
-
* and `groups`) are normalized into these canonical fields when the model
|
|
19
|
-
* is built, so only the canonical fields cross here.
|
|
20
|
-
* - relations, including the resolved `foreignKeyColumn`
|
|
21
|
-
* - field metadata (names and type tags), from which validators are rebuilt
|
|
22
|
-
* - identity roles
|
|
23
|
-
*
|
|
24
|
-
* What does not round-trip, because the server never needs it:
|
|
25
|
-
* - computed getters, which are closures and are dropped
|
|
26
|
-
* - exact Zod refinements, which are rebuilt as permissive validators from
|
|
27
|
-
* {@link FieldMeta}; the server does no field-shape validation
|
|
28
|
-
*/
|
|
29
|
-
import type { FieldMeta } from '../transaction/schema/field.js';
|
|
30
|
-
import type { Tenancy } from '../transaction/schema/tenancy.js';
|
|
31
|
-
import type { ModelResidency } from '../transaction/schema/residency.js';
|
|
32
|
-
import type { GrantsRef, LoadStrategy, PersistOptions, AutoFillRule, ConflictAxis } from '../transaction/schema/model.js';
|
|
33
|
-
import type { RelationType } from '../transaction/schema/relation.js';
|
|
34
|
-
import { type Schema, type IdentityRole, type EntityRole, type SessionSettings } from '../transaction/schema/schema.js';
|
|
35
|
-
/** Current schema-JSON envelope version. Bump this on a breaking change to the
|
|
36
|
-
* JSON shape itself — not to a user's schema. */
|
|
37
|
-
declare const SCHEMA_JSON_VERSION: 3;
|
|
38
|
-
/** A relation in JSON form. Mirrors the serializable members of {@link RelationDef}. */
|
|
39
|
-
export interface RelationJSON {
|
|
40
|
-
readonly type: RelationType;
|
|
41
|
-
readonly target: string;
|
|
42
|
-
readonly foreignKey: string;
|
|
43
|
-
readonly foreignKeyColumn: string;
|
|
44
|
-
readonly options?: Record<string, boolean>;
|
|
45
|
-
readonly orderBy?: string;
|
|
46
|
-
}
|
|
47
|
-
/** A model in JSON form. Everything on {@link ModelDef} except closures. */
|
|
48
|
-
export interface ModelJSON {
|
|
49
|
-
readonly fields: Record<string, FieldMeta>;
|
|
50
|
-
readonly relations: Record<string, RelationJSON>;
|
|
51
|
-
readonly load: LoadStrategy;
|
|
52
|
-
readonly typename: string;
|
|
53
|
-
readonly tableName?: string;
|
|
54
|
-
readonly tenancy: Tenancy;
|
|
55
|
-
/** The database plane the model's rows live in. Optional for backward
|
|
56
|
-
* compatibility: when absent (an artifact written before this field existed)
|
|
57
|
-
* it reads as `tenant`, the default. See {@link ModelResidency}. */
|
|
58
|
-
readonly plane?: ModelResidency;
|
|
59
|
-
readonly scope?: boolean | string;
|
|
60
|
-
readonly grants?: GrantsRef;
|
|
61
|
-
readonly entityRoles?: readonly EntityRole[];
|
|
62
|
-
/** The declared write-conflict disposition per committer kind. When absent,
|
|
63
|
-
* the engine falls back to its default. */
|
|
64
|
-
readonly conflict?: ConflictAxis;
|
|
65
|
-
readonly bootstrapLimit?: number;
|
|
66
|
-
readonly bootstrapOrderBy?: string;
|
|
67
|
-
readonly mutable?: boolean;
|
|
68
|
-
readonly lazyObservable?: boolean;
|
|
69
|
-
readonly persist?: PersistOptions;
|
|
70
|
-
readonly autoFill?: readonly AutoFillRule[];
|
|
71
|
-
readonly requiredFields?: readonly string[];
|
|
72
|
-
}
|
|
73
|
-
/** The JSON form of a {@link Schema}. The `ablo push` payload. */
|
|
74
|
-
export interface SchemaJSON {
|
|
75
|
-
readonly v: typeof SCHEMA_JSON_VERSION;
|
|
76
|
-
readonly models: Record<string, ModelJSON>;
|
|
77
|
-
readonly identityRoles: readonly IdentityRole[];
|
|
78
|
-
/** Optional so schemas pushed before ADR 0011 still parse (defaults to `{}`). */
|
|
79
|
-
readonly sessionSettings?: SessionSettings;
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Project a `Schema` to its JSON form. Drops the client-only closures
|
|
83
|
-
* (validators, `computed`); keeps everything the server and a faithful
|
|
84
|
-
* rebuild need. The result is plain data — `JSON.stringify`-safe.
|
|
85
|
-
*/
|
|
86
|
-
export declare function toSchemaJSON(schema: Schema): SchemaJSON;
|
|
87
|
-
/** Serialize a `Schema` to a JSON string (the `ablo push` payload). */
|
|
88
|
-
export declare function serializeSchema(schema: Schema): string;
|
|
89
|
-
/**
|
|
90
|
-
* Reconstruct a working `Schema` from its JSON form. Validators are rebuilt
|
|
91
|
-
* permissively from field metadata (the server never validates field shapes);
|
|
92
|
-
* `computed` getters are absent. Everything the server reads — routing,
|
|
93
|
-
* scoping, relations, identity roles — is restored exactly.
|
|
94
|
-
*/
|
|
95
|
-
export declare function fromSchemaJSON(json: SchemaJSON): Schema;
|
|
96
|
-
/** Parse a `Schema` from a JSON string (inverse of {@link serializeSchema}). */
|
|
97
|
-
export declare function parseSchema(json: string): Schema;
|
|
98
|
-
/**
|
|
99
|
-
* Stable content hash of a `Schema`'s JSON form. FNV-1a over a canonical
|
|
100
|
-
* (sorted-key) encoding — deterministic across runs and order-invariant, no
|
|
101
|
-
* `crypto` dependency. Used for connect-time version gating: the client sends
|
|
102
|
-
* the hash it was built against, the server compares it to the tenant's
|
|
103
|
-
* active schema hash. Not a security primitive.
|
|
104
|
-
*/
|
|
105
|
-
export declare function schemaHash(schema: Schema): string;
|
|
106
|
-
/**
|
|
107
|
-
* Content hash of ONE serialized model — the unit of the semantic drift check.
|
|
108
|
-
* Two schemas agree on a model exactly when these match, which is what lets a
|
|
109
|
-
* client compare only the models it declares instead of welding itself to the
|
|
110
|
-
* whole-schema hash (where any additive push reads as drift). Computed over the
|
|
111
|
-
* model's `SchemaJSON` entry with the same canonicalization and hash as
|
|
112
|
-
* {@link schemaHash}, on both the client and the server's `GET /api/schema`.
|
|
113
|
-
*/
|
|
114
|
-
export declare function modelHash(modelJson: unknown): string;
|
|
115
|
-
export {};
|