@abloatai/ablo 0.26.0 → 0.27.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/CHANGELOG.md +14 -0
- package/README.md +101 -85
- package/dist/BaseSyncedStore.d.ts +85 -88
- package/dist/BaseSyncedStore.js +131 -147
- package/dist/Database.d.ts +54 -68
- package/dist/Database.js +97 -113
- package/dist/{ObjectPool.d.ts → InstanceCache.d.ts} +10 -13
- package/dist/{ObjectPool.js → InstanceCache.js} +85 -83
- package/dist/LazyReferenceCollection.d.ts +11 -15
- package/dist/LazyReferenceCollection.js +12 -16
- package/dist/Model.d.ts +37 -52
- package/dist/Model.js +46 -61
- package/dist/ModelRegistry.d.ts +21 -19
- package/dist/ModelRegistry.js +23 -27
- package/dist/NetworkMonitor.d.ts +5 -6
- package/dist/NetworkMonitor.js +5 -6
- package/dist/SyncClient.d.ts +112 -112
- package/dist/SyncClient.js +165 -172
- package/dist/adapters/alwaysOnline.d.ts +6 -8
- package/dist/adapters/alwaysOnline.js +6 -8
- package/dist/adapters/inMemoryStorage.d.ts +9 -9
- package/dist/adapters/inMemoryStorage.js +9 -9
- package/dist/agent/Agent.d.ts +27 -32
- package/dist/agent/Agent.js +18 -19
- package/dist/agent/index.d.ts +4 -4
- package/dist/agent/index.js +5 -5
- package/dist/agent/session.d.ts +47 -44
- package/dist/agent/session.js +37 -48
- package/dist/agent/types.d.ts +26 -31
- package/dist/agent/types.js +6 -7
- package/dist/ai-sdk/coordinatedTool.d.ts +108 -0
- package/dist/ai-sdk/{coordinated-tool.js → coordinatedTool.js} +44 -38
- package/dist/ai-sdk/coordinationContext.d.ts +46 -0
- package/dist/ai-sdk/{coordination-context.js → coordinationContext.js} +26 -33
- package/dist/ai-sdk/index.d.ts +25 -22
- package/dist/ai-sdk/index.js +25 -22
- package/dist/ai-sdk/wrap.d.ts +6 -7
- package/dist/ai-sdk/wrap.js +1 -1
- package/dist/auth/credentialPolicy.d.ts +69 -74
- package/dist/auth/credentialPolicy.js +51 -56
- package/dist/auth/credentialSource.d.ts +6 -5
- package/dist/auth/credentialSource.js +9 -10
- package/dist/auth/index.d.ts +59 -58
- package/dist/auth/index.js +31 -37
- package/dist/auth/schemas.d.ts +5 -4
- package/dist/auth/schemas.js +5 -4
- package/dist/batching/index.d.ts +19 -21
- package/dist/batching/index.js +14 -17
- package/dist/cli.cjs +167 -119
- package/dist/client/Ablo.d.ts +73 -73
- package/dist/client/Ablo.js +125 -160
- package/dist/client/ApiClient.d.ts +30 -19
- package/dist/client/ApiClient.js +133 -38
- package/dist/client/auth.d.ts +47 -47
- package/dist/client/auth.js +108 -117
- package/dist/client/claimHeartbeatLoop.d.ts +50 -0
- package/dist/client/claimHeartbeatLoop.js +88 -0
- package/dist/client/consoleLogger.d.ts +5 -6
- package/dist/client/consoleLogger.js +5 -6
- package/dist/client/createInternalComponents.d.ts +14 -17
- package/dist/client/createInternalComponents.js +25 -30
- package/dist/client/createModelProxy.d.ts +130 -120
- package/dist/client/createModelProxy.js +152 -122
- package/dist/client/credentialEndpoint.d.ts +40 -42
- package/dist/client/credentialEndpoint.js +35 -36
- package/dist/client/functionalUpdate.d.ts +29 -27
- package/dist/client/functionalUpdate.js +21 -21
- package/dist/client/hostedEndpoints.d.ts +9 -12
- package/dist/client/hostedEndpoints.js +9 -12
- package/dist/client/httpClient.d.ts +57 -53
- package/dist/client/httpClient.js +29 -31
- package/dist/client/identity.d.ts +15 -20
- package/dist/client/identity.js +47 -58
- package/dist/client/modelRegistration.d.ts +5 -9
- package/dist/client/modelRegistration.js +67 -87
- package/dist/client/options.d.ts +134 -157
- package/dist/client/options.js +3 -7
- package/dist/client/registerDataSource.d.ts +9 -9
- package/dist/client/registerDataSource.js +15 -16
- package/dist/client/resourceTypes.d.ts +64 -75
- package/dist/client/resourceTypes.js +4 -10
- package/dist/client/schemaConfig.d.ts +31 -43
- package/dist/client/schemaConfig.js +38 -50
- package/dist/client/sessionMint.d.ts +16 -12
- package/dist/client/sessionMint.js +26 -31
- package/dist/client/validateAbloOptions.d.ts +12 -14
- package/dist/client/validateAbloOptions.js +8 -9
- package/dist/client/writeOptionsSchema.d.ts +18 -16
- package/dist/client/writeOptionsSchema.js +23 -20
- package/dist/client/wsMutationExecutor.d.ts +15 -20
- package/dist/client/wsMutationExecutor.js +17 -23
- package/dist/context.d.ts +6 -4
- package/dist/context.js +6 -4
- package/dist/coordination/index.d.ts +10 -8
- package/dist/coordination/index.js +14 -12
- package/dist/coordination/schema.d.ts +176 -128
- package/dist/coordination/schema.js +197 -133
- package/dist/coordination/trace.d.ts +9 -10
- package/dist/coordination/trace.js +13 -14
- package/dist/core/DatabaseManager.d.ts +5 -7
- package/dist/core/DatabaseManager.js +15 -19
- package/dist/core/QueryProcessor.d.ts +7 -9
- package/dist/core/QueryProcessor.js +22 -28
- package/dist/core/QueryView.d.ts +8 -8
- package/dist/core/QueryView.js +2 -2
- package/dist/core/StoreManager.d.ts +12 -14
- package/dist/core/StoreManager.js +21 -24
- package/dist/core/ViewRegistry.d.ts +5 -5
- package/dist/core/ViewRegistry.js +4 -4
- package/dist/core/index.d.ts +17 -12
- package/dist/core/index.js +32 -26
- package/dist/core/openIDBWithTimeout.d.ts +38 -36
- package/dist/core/openIDBWithTimeout.js +42 -43
- package/dist/core/queryUtils.d.ts +45 -0
- package/dist/core/queryUtils.js +69 -0
- package/dist/core/storeContract.d.ts +63 -61
- package/dist/core/storeContract.js +8 -12
- package/dist/environment.d.ts +28 -0
- package/dist/environment.js +21 -0
- package/dist/errorCodes.d.ts +107 -99
- package/dist/errorCodes.js +131 -132
- package/dist/errors.d.ts +160 -166
- package/dist/errors.js +155 -158
- package/dist/index.d.ts +30 -27
- package/dist/index.js +89 -86
- package/dist/interfaces/index.d.ts +102 -113
- package/dist/interfaces/index.js +5 -4
- package/dist/keys/index.d.ts +27 -29
- package/dist/keys/index.js +41 -40
- package/dist/mutators/RecordingTransaction.d.ts +16 -16
- package/dist/mutators/RecordingTransaction.js +31 -37
- package/dist/mutators/Transaction.d.ts +18 -26
- package/dist/mutators/Transaction.js +14 -20
- package/dist/mutators/UndoManager.d.ts +122 -131
- package/dist/mutators/UndoManager.js +145 -156
- package/dist/mutators/defineMutators.d.ts +23 -34
- package/dist/mutators/defineMutators.js +14 -20
- package/dist/mutators/inverseOp.d.ts +12 -15
- package/dist/mutators/inverseOp.js +12 -15
- package/dist/mutators/mutateActions.d.ts +10 -9
- package/dist/mutators/mutateActions.js +1 -1
- package/dist/mutators/readerActions.d.ts +9 -8
- package/dist/mutators/readerActions.js +2 -2
- package/dist/mutators/undoApply.d.ts +31 -27
- package/dist/mutators/undoApply.js +26 -24
- package/dist/policy/index.d.ts +5 -3
- package/dist/policy/index.js +5 -3
- package/dist/policy/types.d.ts +104 -100
- package/dist/policy/types.js +67 -66
- package/dist/query/client.d.ts +28 -23
- package/dist/query/client.js +45 -43
- package/dist/query/types.d.ts +37 -60
- package/dist/query/types.js +13 -33
- package/dist/react/AbloProvider.d.ts +1 -1
- package/dist/react/AbloProvider.js +2 -2
- package/dist/react/context.d.ts +25 -28
- package/dist/react/context.js +9 -10
- package/dist/react/index.d.ts +41 -42
- package/dist/react/index.js +37 -38
- package/dist/react/internalContext.d.ts +17 -19
- package/dist/react/useAblo.d.ts +23 -22
- package/dist/react/useAblo.js +16 -14
- package/dist/react/useCurrentUserId.d.ts +8 -7
- package/dist/react/useCurrentUserId.js +8 -7
- package/dist/react/useErrorListener.d.ts +7 -7
- package/dist/react/useErrorListener.js +10 -11
- package/dist/react/useMutationFailureListener.d.ts +8 -8
- package/dist/react/useMutationFailureListener.js +8 -8
- package/dist/react/useMutators.d.ts +11 -11
- package/dist/react/useMutators.js +3 -3
- package/dist/react/useReactive.js +2 -2
- package/dist/react/useSyncStatus.d.ts +4 -6
- package/dist/react/useUndoScope.d.ts +7 -9
- package/dist/react/useUndoScope.js +1 -1
- package/dist/schema/coordination.d.ts +21 -25
- package/dist/schema/coordination.js +21 -25
- package/dist/schema/ddl.d.ts +43 -39
- package/dist/schema/ddl.js +75 -68
- package/dist/schema/ddlLock.d.ts +20 -24
- package/dist/schema/ddlLock.js +18 -23
- package/dist/schema/diff.d.ts +99 -61
- package/dist/schema/diff.js +43 -34
- package/dist/schema/field.d.ts +37 -42
- package/dist/schema/field.js +35 -48
- package/dist/schema/generate.d.ts +12 -12
- package/dist/schema/generate.js +12 -12
- package/dist/schema/index.d.ts +2 -2
- package/dist/schema/index.js +21 -23
- package/dist/schema/model.d.ts +118 -143
- package/dist/schema/model.js +22 -33
- package/dist/schema/openapi.d.ts +10 -9
- package/dist/schema/openapi.js +5 -3
- package/dist/schema/queries.d.ts +29 -31
- package/dist/schema/queries.js +23 -25
- package/dist/schema/relation.d.ts +89 -99
- package/dist/schema/relation.js +13 -13
- package/dist/schema/residency.d.ts +16 -13
- package/dist/schema/residency.js +16 -13
- package/dist/schema/roles.d.ts +36 -43
- package/dist/schema/roles.js +31 -37
- package/dist/schema/schema.d.ts +33 -42
- package/dist/schema/schema.js +31 -32
- package/dist/schema/select.d.ts +13 -13
- package/dist/schema/select.js +13 -13
- package/dist/schema/serialize.d.ts +28 -31
- package/dist/schema/serialize.js +27 -31
- package/dist/schema/sugar.d.ts +17 -32
- package/dist/schema/sugar.js +14 -29
- package/dist/schema/{sync-delta-row.d.ts → syncDeltaRow.d.ts} +26 -49
- package/dist/schema/syncDeltaRow.js +89 -0
- package/dist/schema/tenancy.d.ts +44 -46
- package/dist/schema/tenancy.js +46 -48
- package/dist/server/adapter.d.ts +58 -58
- package/dist/server/adapter.js +13 -14
- package/dist/server/commit.d.ts +60 -64
- package/dist/server/index.d.ts +9 -10
- package/dist/server/index.js +1 -1
- package/dist/server/readConfig.d.ts +70 -0
- package/dist/server/readConfig.js +8 -0
- package/dist/server/storageMode.d.ts +23 -0
- package/dist/server/storageMode.js +17 -0
- package/dist/source/adapter.d.ts +30 -25
- package/dist/source/adapter.js +10 -10
- package/dist/source/adapters/drizzle.d.ts +28 -23
- package/dist/source/adapters/drizzle.js +30 -25
- package/dist/source/adapters/kysely.d.ts +27 -25
- package/dist/source/adapters/kysely.js +24 -23
- package/dist/source/adapters/memory.d.ts +8 -7
- package/dist/source/adapters/memory.js +9 -8
- package/dist/source/adapters/prisma.d.ts +13 -12
- package/dist/source/adapters/prisma.js +22 -25
- package/dist/source/conformance.d.ts +18 -11
- package/dist/source/conformance.js +17 -11
- package/dist/source/connector.d.ts +31 -32
- package/dist/source/connector.js +28 -28
- package/dist/source/connectorProtocol.d.ts +160 -0
- package/dist/source/connectorProtocol.js +162 -0
- package/dist/source/contract.d.ts +26 -27
- package/dist/source/contract.js +28 -29
- package/dist/source/factory.d.ts +46 -58
- package/dist/source/factory.js +22 -27
- package/dist/source/index.d.ts +7 -9
- package/dist/source/index.js +12 -14
- package/dist/source/migrations.d.ts +9 -9
- package/dist/source/migrations.js +9 -9
- package/dist/source/next.d.ts +9 -10
- package/dist/source/next.js +6 -7
- package/dist/source/pushQueue.d.ts +69 -47
- package/dist/source/pushQueue.js +32 -28
- package/dist/source/signing.d.ts +46 -17
- package/dist/source/signing.js +28 -11
- package/dist/source/types.d.ts +121 -104
- package/dist/source/types.js +13 -14
- package/dist/stores/ObjectStore.d.ts +10 -11
- package/dist/stores/ObjectStore.js +11 -12
- package/dist/stores/ObjectStoreContract.d.ts +12 -15
- package/dist/stores/SyncActionStore.d.ts +7 -11
- package/dist/stores/SyncActionStore.js +13 -17
- package/dist/surface.d.ts +27 -20
- package/dist/surface.js +27 -20
- package/dist/sync/{BootstrapHelper.d.ts → BootstrapFetcher.d.ts} +36 -42
- package/dist/sync/{BootstrapHelper.js → BootstrapFetcher.js} +76 -76
- package/dist/sync/ConnectionManager.d.ts +39 -50
- package/dist/sync/ConnectionManager.js +55 -66
- package/dist/sync/NetworkProbe.d.ts +24 -29
- package/dist/sync/NetworkProbe.js +63 -69
- package/dist/sync/{HydrationCoordinator.d.ts → OnDemandLoader.d.ts} +42 -41
- package/dist/sync/{HydrationCoordinator.js → OnDemandLoader.js} +59 -54
- package/dist/sync/{AreaOfInterestManager.d.ts → SubscriptionManager.d.ts} +43 -57
- package/dist/sync/{AreaOfInterestManager.js → SubscriptionManager.js} +43 -51
- package/dist/sync/SyncWebSocket.d.ts +139 -165
- package/dist/sync/SyncWebSocket.js +191 -223
- package/dist/sync/awaitClaimGrant.d.ts +18 -18
- package/dist/sync/awaitClaimGrant.js +11 -11
- package/dist/sync/bootstrapApply.d.ts +34 -24
- package/dist/sync/bootstrapApply.js +27 -19
- package/dist/sync/commitFrames.d.ts +21 -20
- package/dist/sync/commitFrames.js +18 -18
- package/dist/sync/createClaimStream.d.ts +23 -22
- package/dist/sync/createClaimStream.js +105 -23
- package/dist/sync/createPresenceStream.d.ts +19 -18
- package/dist/sync/createPresenceStream.js +25 -26
- package/dist/sync/createSnapshot.d.ts +12 -14
- package/dist/sync/createSnapshot.js +20 -26
- package/dist/sync/credentialLifecycle.d.ts +104 -104
- package/dist/sync/credentialLifecycle.js +140 -147
- package/dist/sync/deltaPipeline.d.ts +36 -34
- package/dist/sync/deltaPipeline.js +64 -65
- package/dist/sync/groupChange.d.ts +63 -61
- package/dist/sync/groupChange.js +74 -78
- package/dist/sync/heartbeat.d.ts +34 -33
- package/dist/sync/heartbeat.js +31 -31
- package/dist/sync/participants.d.ts +19 -19
- package/dist/sync/schemas.d.ts +3 -2
- package/dist/sync/schemas.js +14 -10
- package/dist/sync/syncCursor.d.ts +17 -21
- package/dist/sync/syncCursor.js +17 -21
- package/dist/sync/syncPlan.d.ts +28 -36
- package/dist/sync/syncPlan.js +18 -19
- package/dist/sync/syncPosition.d.ts +54 -49
- package/dist/sync/syncPosition.js +57 -52
- package/dist/sync/wsFrameHandlers.d.ts +35 -36
- package/dist/sync/wsFrameHandlers.js +63 -67
- package/dist/testing/fixtures/bootstrap.d.ts +12 -6
- package/dist/testing/fixtures/bootstrap.js +12 -6
- package/dist/testing/fixtures/deltas.d.ts +30 -33
- package/dist/testing/fixtures/deltas.js +30 -33
- package/dist/testing/fixtures/models.d.ts +11 -10
- package/dist/testing/fixtures/models.js +11 -10
- package/dist/testing/helpers/{react-wrapper.d.ts → reactWrapper.d.ts} +13 -10
- package/dist/testing/helpers/{react-wrapper.js → reactWrapper.js} +15 -12
- package/dist/testing/helpers/{sync-engine-harness.d.ts → syncEngineHarness.d.ts} +17 -15
- package/dist/testing/helpers/{sync-engine-harness.js → syncEngineHarness.js} +12 -10
- package/dist/testing/helpers/wait.d.ts +13 -8
- package/dist/testing/helpers/wait.js +13 -8
- package/dist/testing/index.d.ts +3 -3
- package/dist/testing/index.js +2 -2
- package/dist/testing/mocks/MockMutationExecutor.d.ts +18 -17
- package/dist/testing/mocks/MockMutationExecutor.js +15 -14
- package/dist/testing/mocks/MockNetworkMonitor.d.ts +8 -8
- package/dist/testing/mocks/MockNetworkMonitor.js +8 -8
- package/dist/testing/mocks/MockSyncContext.d.ts +20 -17
- package/dist/testing/mocks/MockSyncContext.js +15 -13
- package/dist/testing/mocks/MockSyncStore.d.ts +10 -10
- package/dist/testing/mocks/MockSyncStore.js +11 -11
- package/dist/testing/mocks/MockWebSocket.d.ts +26 -22
- package/dist/testing/mocks/MockWebSocket.js +22 -21
- package/dist/transactions/TransactionQueue.d.ts +181 -176
- package/dist/transactions/TransactionQueue.js +338 -350
- package/dist/transactions/TransactionStore.d.ts +6 -4
- package/dist/transactions/TransactionStore.js +6 -4
- package/dist/transactions/UnconfirmedWrites.d.ts +82 -0
- package/dist/transactions/UnconfirmedWrites.js +104 -0
- package/dist/transactions/coalesceRules.d.ts +41 -17
- package/dist/transactions/coalesceRules.js +40 -17
- package/dist/transactions/commitPayload.d.ts +48 -52
- package/dist/transactions/commitPayload.js +48 -57
- package/dist/transactions/deltaConfirmation.d.ts +20 -22
- package/dist/transactions/deltaConfirmation.js +37 -45
- package/dist/transactions/optimisticApply.d.ts +49 -0
- package/dist/transactions/optimisticApply.js +65 -0
- package/dist/transactions/{persistedReplay.d.ts → replayValidation.d.ts} +28 -22
- package/dist/transactions/{persistedReplay.js → replayValidation.js} +33 -27
- package/dist/types/global.d.ts +46 -41
- package/dist/types/global.js +20 -19
- package/dist/types/index.d.ts +71 -77
- package/dist/types/index.js +22 -22
- package/dist/types/modelData.d.ts +6 -8
- package/dist/types/modelData.js +5 -7
- package/dist/types/participant.d.ts +10 -11
- package/dist/types/participant.js +6 -8
- package/dist/types/streams.d.ts +208 -195
- package/dist/types/streams.js +7 -7
- package/dist/utils/asyncIterator.d.ts +25 -32
- package/dist/utils/asyncIterator.js +25 -32
- package/dist/utils/duration.d.ts +12 -15
- package/dist/utils/duration.js +12 -15
- package/dist/utils/mobxSetup.d.ts +53 -0
- package/dist/utils/{mobx-setup.js → mobxSetup.js} +42 -98
- package/dist/webhooks/events.d.ts +21 -16
- package/dist/webhooks/events.js +10 -8
- package/dist/webhooks/index.d.ts +5 -7
- package/dist/webhooks/index.js +5 -7
- package/dist/{schema/sync-delta-wire.d.ts → wire/delta.d.ts} +58 -41
- package/dist/wire/delta.js +114 -0
- package/dist/wire/errorEnvelope.d.ts +30 -31
- package/dist/wire/errorEnvelope.js +34 -40
- package/dist/wire/frames.d.ts +79 -86
- package/dist/wire/frames.js +26 -33
- package/dist/wire/index.d.ts +14 -12
- package/dist/wire/index.js +30 -26
- package/dist/wire/listEnvelope.d.ts +16 -23
- package/dist/wire/listEnvelope.js +7 -6
- package/dist/wire/protocol.d.ts +25 -32
- package/dist/wire/protocol.js +25 -32
- package/dist/wire/protocolVersion.d.ts +44 -40
- package/dist/wire/protocolVersion.js +44 -40
- package/docs/coordination.md +59 -0
- package/package.json +11 -10
- package/dist/ai-sdk/coordinated-tool.d.ts +0 -101
- package/dist/ai-sdk/coordination-context.d.ts +0 -52
- package/dist/core/query-utils.d.ts +0 -34
- package/dist/core/query-utils.js +0 -59
- package/dist/schema/sync-delta-row.js +0 -103
- package/dist/schema/sync-delta-wire.js +0 -102
- package/dist/server/read-config.d.ts +0 -67
- package/dist/server/read-config.js +0 -8
- package/dist/server/storage-mode.d.ts +0 -8
- package/dist/server/storage-mode.js +0 -28
- package/dist/source/connector-protocol.d.ts +0 -159
- package/dist/source/connector-protocol.js +0 -161
- package/dist/transactions/OptimisticEchoTracker.d.ts +0 -82
- package/dist/transactions/OptimisticEchoTracker.js +0 -104
- package/dist/transactions/mutation-error-handler.d.ts +0 -5
- package/dist/transactions/mutation-error-handler.js +0 -39
- package/dist/transactions/optimistic.d.ts +0 -24
- package/dist/transactions/optimistic.js +0 -45
- package/dist/utils/mobx-setup.d.ts +0 -42
package/dist/schema/field.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* survives `.optional()`, `.nullable()`, and `.default()`
|
|
2
|
+
* Field builders for schema definitions. Each helper — {@link field}.string(),
|
|
3
|
+
* .number(), .enum(), and so on — returns an ordinary Zod schema with a little
|
|
4
|
+
* sync-engine metadata attached (its type tag and whether it is indexed) plus a
|
|
5
|
+
* couple of chainable methods. The metadata is tucked into the schema's description
|
|
6
|
+
* as a JSON string so it survives `.optional()`, `.nullable()`, and `.default()`
|
|
7
|
+
* chaining, and {@link resolveFieldMeta} reads it back out as a {@link FieldMeta}.
|
|
7
8
|
*
|
|
8
9
|
* Usage:
|
|
9
10
|
* import { field } from '@abloatai/ablo/schema';
|
|
@@ -92,17 +93,11 @@ export function getFieldMeta(schema) {
|
|
|
92
93
|
return { ...base, isOptional };
|
|
93
94
|
}
|
|
94
95
|
/**
|
|
95
|
-
*
|
|
96
|
-
* `
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
* the sync-engine type tag. Used by `resolveFieldMeta` and by
|
|
101
|
-
* `model()` / `query()` at definition time.
|
|
102
|
-
*
|
|
103
|
-
* Kept as an internal helper rather than exported directly — the
|
|
104
|
-
* public API is `resolveFieldMeta`, which combines this fallback
|
|
105
|
-
* with the `getFieldMeta` fast path.
|
|
96
|
+
* Infers a {@link FieldMeta} from a plain Zod schema that carries no field-builder
|
|
97
|
+
* metadata — for example a bare `z.string()`. It unwraps `.optional()`,
|
|
98
|
+
* `.nullable()`, and `.default()` to reach the inner type, then maps that Zod type
|
|
99
|
+
* to a sync-engine type tag. Most callers should use {@link resolveFieldMeta}
|
|
100
|
+
* instead, which tries the attached metadata first and falls back to this.
|
|
106
101
|
*/
|
|
107
102
|
export function inferFieldMetaFromZod(schema) {
|
|
108
103
|
let current = schema;
|
|
@@ -144,33 +139,24 @@ export function inferFieldMetaFromZod(schema) {
|
|
|
144
139
|
current instanceof z.ZodRecord ||
|
|
145
140
|
current instanceof z.ZodUnion ||
|
|
146
141
|
current instanceof z.ZodUnknown ||
|
|
147
|
-
// `z.custom<T>()` is
|
|
148
|
-
//
|
|
149
|
-
// the
|
|
150
|
-
//
|
|
151
|
-
// gave these fields deep MobX observability instead of the intended
|
|
152
|
-
// `observable.ref` (see Ablo.ts registerProperty), producing the
|
|
153
|
-
// microtask-storm + nested-reactivity-drift bug on live updates.
|
|
142
|
+
// `z.custom<T>()` is opaque — its shape cannot be inspected — so it is treated
|
|
143
|
+
// as a JSON blob rather than falling through to the `'string'` default. The type
|
|
144
|
+
// tag drives how the runtime observes the field, and an opaque custom value
|
|
145
|
+
// should be tracked by reference rather than deeply.
|
|
154
146
|
current instanceof z.ZodCustom) {
|
|
155
147
|
type = 'json';
|
|
156
148
|
}
|
|
157
149
|
return { type, isOptional, isIndexed: false, enumValues };
|
|
158
150
|
}
|
|
159
151
|
/**
|
|
160
|
-
*
|
|
161
|
-
*
|
|
162
|
-
*
|
|
163
|
-
*
|
|
164
|
-
*
|
|
165
|
-
* me its sync-engine type tag and optionality." Both `model()` and
|
|
166
|
-
* `query()` use it to populate their `fields` / `inputFields` maps at
|
|
167
|
-
* definition time, and the schema serializer reads those maps at
|
|
168
|
-
* serialization time.
|
|
152
|
+
* Resolves a {@link FieldMeta} for any Zod schema, whether it was built with a
|
|
153
|
+
* {@link field} builder (which attaches metadata) or with plain Zod (which needs
|
|
154
|
+
* inference). This is the single entry point for "given a Zod field, tell me its
|
|
155
|
+
* sync-engine type tag and whether it is optional"; the model and query builders use
|
|
156
|
+
* it to populate their field maps, and the serializer reads those maps.
|
|
169
157
|
*
|
|
170
|
-
*
|
|
171
|
-
*
|
|
172
|
-
* the existing behavior that was previously duplicated in
|
|
173
|
-
* `model.ts:inferMetaFromZod`.
|
|
158
|
+
* It always returns a value and never returns null. A Zod type it does not recognize
|
|
159
|
+
* falls through to the `string` tag by design.
|
|
174
160
|
*/
|
|
175
161
|
export function resolveFieldMeta(schema) {
|
|
176
162
|
const attached = getFieldMeta(schema);
|
|
@@ -197,28 +183,28 @@ function buildField(schema, baseMeta) {
|
|
|
197
183
|
return withFieldMethods(schema, { ...baseMeta, isIndexed: false });
|
|
198
184
|
}
|
|
199
185
|
export const field = {
|
|
200
|
-
/**
|
|
186
|
+
/** Defines a text field. */
|
|
201
187
|
string() {
|
|
202
188
|
return buildField(z.string(), { type: 'string' });
|
|
203
189
|
},
|
|
204
|
-
/**
|
|
190
|
+
/** Defines a numeric field. */
|
|
205
191
|
number() {
|
|
206
192
|
return buildField(z.number(), { type: 'number' });
|
|
207
193
|
},
|
|
208
|
-
/**
|
|
194
|
+
/** Defines a true/false field. */
|
|
209
195
|
boolean() {
|
|
210
196
|
return buildField(z.boolean(), { type: 'boolean' });
|
|
211
197
|
},
|
|
212
|
-
/**
|
|
198
|
+
/** Defines a timestamp field, represented as a JavaScript `Date`. */
|
|
213
199
|
date() {
|
|
214
200
|
return buildField(z.date(), { type: 'date' });
|
|
215
201
|
},
|
|
216
|
-
/**
|
|
202
|
+
/** Defines a field constrained to a fixed set of string values. */
|
|
217
203
|
enum(values) {
|
|
218
204
|
return buildField(z.enum(values), { type: 'enum', enumValues: values });
|
|
219
205
|
},
|
|
220
206
|
/**
|
|
221
|
-
* JSON field
|
|
207
|
+
* Defines a JSON field, with three call shapes:
|
|
222
208
|
*
|
|
223
209
|
* ```ts
|
|
224
210
|
* field.json() // unknown JSON blob
|
|
@@ -226,9 +212,9 @@ export const field = {
|
|
|
226
212
|
* field.json({ icon: z.string().default('default') }) // typed sub-properties with defaults
|
|
227
213
|
* ```
|
|
228
214
|
*
|
|
229
|
-
* The third form is
|
|
230
|
-
*
|
|
231
|
-
*
|
|
215
|
+
* The third form is especially handy for metadata fields. It wraps the plain
|
|
216
|
+
* object in `z.object()` automatically, and the model runtime adds a
|
|
217
|
+
* `${field}Json` getter that parses the JSON string on read, applies the Zod
|
|
232
218
|
* defaults, and caches the result.
|
|
233
219
|
*
|
|
234
220
|
* Example:
|
|
@@ -261,13 +247,14 @@ export const field = {
|
|
|
261
247
|
}
|
|
262
248
|
return buildField(inner, { type: 'json' });
|
|
263
249
|
},
|
|
264
|
-
/**
|
|
250
|
+
/** Defines an indexed text field — shorthand for `field.string().indexed()`. */
|
|
265
251
|
id() {
|
|
266
252
|
return field.string().indexed();
|
|
267
253
|
},
|
|
268
254
|
};
|
|
269
|
-
// ──
|
|
270
|
-
/**
|
|
255
|
+
// ── Function form ────────────────────────────────────────────────────────
|
|
256
|
+
/** Marks a Zod schema as indexed so lookups on it use a database index. This is the
|
|
257
|
+
* standalone-function form of the `.indexed()` chain method. */
|
|
271
258
|
export function indexed(schema) {
|
|
272
259
|
// Try to preserve existing metadata type tag if present.
|
|
273
260
|
const meta = decodeMeta(schema.description);
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
2
|
+
* Generates TypeScript types from a serialized schema. Given the schema, it produces
|
|
3
|
+
* the source text of a `.ts` module containing one row interface per model plus an
|
|
4
|
+
* `AbloSchema` map, so an app is typed against the same schema the database and sync
|
|
5
|
+
* layer enforce. This function is pure and returns the source as a string; the
|
|
6
|
+
* command-line tool writes it to disk.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
* it (which migrates the
|
|
10
|
-
* types
|
|
11
|
-
*
|
|
8
|
+
* It is the counterpart to the migration planner in {@link diffSchema}: you write one
|
|
9
|
+
* schema definition, push it (which migrates the database), and generate types from
|
|
10
|
+
* that same schema, so the types you code against, the rows the database stores, and
|
|
11
|
+
* the entities the sync layer moves all describe the same thing.
|
|
12
12
|
*
|
|
13
|
-
*
|
|
14
|
-
* unions
|
|
15
|
-
*
|
|
13
|
+
* The generated interface covers the base columns plus each declared field, with
|
|
14
|
+
* enums emitted as string-literal unions. Relations are not expanded here — the
|
|
15
|
+
* runtime SDK resolves those through its typed accessors.
|
|
16
16
|
*/
|
|
17
17
|
import type { SchemaJSON } from './serialize.js';
|
|
18
18
|
/** Emit a TypeScript module of row interfaces + the `AbloSchema` map. */
|
package/dist/schema/generate.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
2
|
+
* Generates TypeScript types from a serialized schema. Given the schema, it produces
|
|
3
|
+
* the source text of a `.ts` module containing one row interface per model plus an
|
|
4
|
+
* `AbloSchema` map, so an app is typed against the same schema the database and sync
|
|
5
|
+
* layer enforce. This function is pure and returns the source as a string; the
|
|
6
|
+
* command-line tool writes it to disk.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
* it (which migrates the
|
|
10
|
-
* types
|
|
11
|
-
*
|
|
8
|
+
* It is the counterpart to the migration planner in {@link diffSchema}: you write one
|
|
9
|
+
* schema definition, push it (which migrates the database), and generate types from
|
|
10
|
+
* that same schema, so the types you code against, the rows the database stores, and
|
|
11
|
+
* the entities the sync layer moves all describe the same thing.
|
|
12
12
|
*
|
|
13
|
-
*
|
|
14
|
-
* unions
|
|
15
|
-
*
|
|
13
|
+
* The generated interface covers the base columns plus each declared field, with
|
|
14
|
+
* enums emitted as string-literal unions. Relations are not expanded here — the
|
|
15
|
+
* runtime SDK resolves those through its typed accessors.
|
|
16
16
|
*/
|
|
17
17
|
import { BASE_FIELDS } from './schema.js';
|
|
18
18
|
function tsType(meta) {
|
package/dist/schema/index.d.ts
CHANGED
|
@@ -25,8 +25,8 @@ export { field, indexed, getFieldMeta, type FieldBuilder, type FieldMeta } from
|
|
|
25
25
|
export { relation, type RelationDef, type RelationType } from './relation.js';
|
|
26
26
|
export { tenancySchema, scopedViaRefSchema, policyInputSchema, resolvePolicy, resolveTenancy, tenancyColumn, DEFAULT_ORG_COLUMN, type Tenancy, type ScopedViaRef, type PolicyInput, } from './tenancy.js';
|
|
27
27
|
export { residencySchema, DEFAULT_RESIDENCY, type ModelResidency, planeSchema, DEFAULT_PLANE, type SchemaPlane, } from './residency.js';
|
|
28
|
-
export { syncDeltaCoreSchema, deltaAttributionSchema, deltaProvenanceSchema, syncDeltaRowSchema, participantKindSchema, confirmationStateSchema, backfillProvenanceSchema, DELTA_RESIDENCY, type SyncDeltaCore, type DeltaAttribution, type DeltaProvenance, type SyncDeltaRow, type ParticipantKind, type ConfirmationState, type BackfillProvenance, } from './
|
|
29
|
-
export { syncDeltaActionSchema, wireDeltaDataSchema, participantRefSchema, syncDeltaWireCoreSchema, clientSyncDeltaSchema, serverSyncDeltaSchema, type SyncDeltaAction, type WireDeltaData, type ParticipantRef, type SyncDeltaWireCore, type ClientSyncDelta, type ServerSyncDelta, } from '
|
|
28
|
+
export { syncDeltaCoreSchema, deltaAttributionSchema, deltaProvenanceSchema, syncDeltaRowSchema, participantKindSchema, confirmationStateSchema, backfillProvenanceSchema, DELTA_RESIDENCY, type SyncDeltaCore, type DeltaAttribution, type DeltaProvenance, type SyncDeltaRow, type ParticipantKind, type ConfirmationState, type BackfillProvenance, } from './syncDeltaRow.js';
|
|
29
|
+
export { syncDeltaActionSchema, wireDeltaDataSchema, participantRefSchema, syncDeltaWireCoreSchema, clientSyncDeltaSchema, serverSyncDeltaSchema, type SyncDeltaAction, type WireDeltaData, type ParticipantRef, type SyncDeltaWireCore, type ClientSyncDelta, type ServerSyncDelta, } from '../wire/delta.js';
|
|
30
30
|
export { model, scopeKindOf, type ModelDef, type ModelOptions, type LoadStrategy, type PersistOptions, type RelationRecord, type GrantsRef, type ConflictAxis, } from './model.js';
|
|
31
31
|
export { coordination, humansOverwrite, humansReject, humansNotify, agentsOverwrite, agentsReject, agentsNotify, systemOverwrite, systemReject, systemNotify, type ConflictRule, } from './coordination.js';
|
|
32
32
|
export { mutable, readOnly, type SugarOptions } from './sugar.js';
|
package/dist/schema/index.js
CHANGED
|
@@ -28,47 +28,45 @@ export { field, indexed, getFieldMeta } from './field.js';
|
|
|
28
28
|
export { relation } from './relation.js';
|
|
29
29
|
// Tenancy — the single source of truth for how a model's rows are tenant-scoped.
|
|
30
30
|
export { tenancySchema, scopedViaRefSchema, policyInputSchema, resolvePolicy, resolveTenancy, tenancyColumn, DEFAULT_ORG_COLUMN, } from './tenancy.js';
|
|
31
|
-
// Model residency — which
|
|
32
|
-
// customer's own
|
|
33
|
-
// (Renamed from "plane" — that word is the server's tenancy scope.)
|
|
31
|
+
// Model residency — which database a model's rows live in (`tenant` can be a
|
|
32
|
+
// customer's own database, `control` is Ablo's). A sibling axis to `tenancy`.
|
|
34
33
|
export { residencySchema, DEFAULT_RESIDENCY,
|
|
35
34
|
// Deliberate back-compat re-export of the deprecated aliases:
|
|
36
35
|
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
37
36
|
planeSchema,
|
|
38
37
|
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
39
38
|
DEFAULT_PLANE, } from './residency.js';
|
|
40
|
-
//
|
|
41
|
-
//
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
//
|
|
45
|
-
//
|
|
46
|
-
|
|
47
|
-
export { syncDeltaActionSchema, wireDeltaDataSchema, participantRefSchema, syncDeltaWireCoreSchema, clientSyncDeltaSchema, serverSyncDeltaSchema, } from './sync-delta-wire.js';
|
|
39
|
+
// The stored `sync_deltas` row, described as Zod schemas grouped by subsystem and by
|
|
40
|
+
// which database the columns live in.
|
|
41
|
+
export { syncDeltaCoreSchema, deltaAttributionSchema, deltaProvenanceSchema, syncDeltaRowSchema, participantKindSchema, confirmationStateSchema, backfillProvenanceSchema, DELTA_RESIDENCY, } from './syncDeltaRow.js';
|
|
42
|
+
// The wire delta contract — the server-to-client projection of the stored row.
|
|
43
|
+
// Both the client SDK and the server derive their `SyncDelta` type from these with
|
|
44
|
+
// `z.infer`, so the two ends cannot drift apart.
|
|
45
|
+
export { syncDeltaActionSchema, wireDeltaDataSchema, participantRefSchema, syncDeltaWireCoreSchema, clientSyncDeltaSchema, serverSyncDeltaSchema, } from '../wire/delta.js';
|
|
48
46
|
// Model builder
|
|
49
47
|
export { model, scopeKindOf, } from './model.js';
|
|
50
|
-
//
|
|
51
|
-
//
|
|
48
|
+
// Coordination authoring helpers for the `conflict` axis — composable disposition
|
|
49
|
+
// functions plus a combinator that merges them.
|
|
52
50
|
export { coordination, humansOverwrite, humansReject, humansNotify, agentsOverwrite, agentsReject, agentsNotify, systemOverwrite, systemReject, systemNotify, } from './coordination.js';
|
|
53
|
-
// Claim-first shorthand: `mutable.lazy({...})` and friends
|
|
54
|
-
// safety
|
|
55
|
-
//
|
|
51
|
+
// Claim-first shorthand for common model options: `mutable.lazy({...})` and friends
|
|
52
|
+
// encode a model's write-safety and load strategy in the verb, and fall back to
|
|
53
|
+
// sensible defaults for everything else.
|
|
56
54
|
export { mutable, readOnly } from './sugar.js';
|
|
57
55
|
// Schema definition + type inference
|
|
58
56
|
export { defineSchema, composeIdentitySyncGroups, composeEntitySyncGroups, intersectRequestedWithAllowed, identityRole, entityRole, extractIdentityIds, extractEntityIds, syncGroup, syncGroupSchema, syncGroupInputSchema, isSyncGroupInput, identityRoleSchema, entityRoleSchema, roleSchema, roleSourceSchema, scopeSchema, grantsRefSchema, groupsInputSchema, } from './schema.js';
|
|
59
|
-
// Schema ⇄ JSON
|
|
57
|
+
// Schema ⇄ JSON — serialize a schema for transport and rebuild it on the far side.
|
|
60
58
|
export { serializeSchema, parseSchema, toSchemaJSON, fromSchemaJSON, schemaHash, } from './serialize.js';
|
|
61
59
|
// Schema projection — derive an app's subset from one canonical schema.
|
|
62
60
|
export { selectModels } from './select.js';
|
|
63
|
-
// Schema → Postgres DDL
|
|
61
|
+
// Schema → Postgres DDL — shared by the host implementation and the command-line tools.
|
|
64
62
|
export { generateProvisionPlan, generateMigrationPlan, appSchemaName, camelToSnake, snakeToCamel, q, sqlType, } from './ddl.js';
|
|
65
|
-
// Safe-DDL locking knobs (lock_timeout
|
|
66
|
-
//
|
|
67
|
-
//
|
|
63
|
+
// Safe-DDL locking knobs (lock_timeout plus a bounded retry on lock contention),
|
|
64
|
+
// shared by `ablo migrate` and the host that applies a schema push, so tuning the
|
|
65
|
+
// ABLO_SCHEMA_LOCK_* variables changes both paths the same way.
|
|
68
66
|
export { PG_LOCK_NOT_AVAILABLE, resolveDdlLockTimeout, resolveDdlMaxLockAttempts, ddlLockRetryBackoffMs, } from './ddlLock.js';
|
|
69
|
-
// Schema diff + migration planning
|
|
67
|
+
// Schema diff + migration planning — produces the plan the DDL layer turns into SQL.
|
|
70
68
|
export { diffSchema, classifyMigration, classifyCast, isAutoApplicable, isBlockerResolved, unresolvedBlockers, } from './diff.js';
|
|
71
|
-
// Schema → TypeScript type emission
|
|
69
|
+
// Schema → TypeScript type emission.
|
|
72
70
|
export { generateTypes } from './generate.js';
|
|
73
71
|
// Query definition DSL + type inference
|
|
74
72
|
export { query, defineQueries, } from './queries.js';
|