@party-stack/ontology 0.19.1 → 0.21.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/README.md +31 -0
- package/lib/OntologyPullConfig.d.ts +4 -17
- package/lib/OntologyPullConfig.d.ts.map +1 -1
- package/lib/authentication.d.ts +1068 -0
- package/lib/authentication.d.ts.map +1 -0
- package/lib/authentication.js +55 -0
- package/lib/authentication.js.map +1 -0
- package/lib/cli/index.js +19 -45
- package/lib/cli/index.js.map +1 -1
- package/lib/cli/pull.d.ts.map +1 -1
- package/lib/cli/pull.js +16 -29
- package/lib/cli/pull.js.map +1 -1
- package/lib/client.d.ts +11 -0
- package/lib/client.d.ts.map +1 -0
- package/lib/client.js +21 -0
- package/lib/client.js.map +1 -0
- package/lib/examples/blog.d.ts +2 -387
- package/lib/examples/blog.js +1 -353
- package/lib/examples/blog.live-queries.d.ts +1 -1
- package/lib/examples/blog.live-queries.d.ts.map +1 -1
- package/lib/examples/blog.live-queries.js +1 -1
- package/lib/examples/blog.live-queries.js.map +1 -1
- package/lib/examples/generated/collections.d.ts +7 -0
- package/lib/examples/generated/collections.d.ts.map +1 -0
- package/lib/examples/generated/collections.js +12 -0
- package/lib/examples/generated/collections.js.map +1 -0
- package/lib/examples/generated/live.d.ts +2 -2
- package/lib/examples/generated/live.d.ts.map +1 -1
- package/lib/examples/generated/live.js.map +1 -1
- package/lib/http.d.ts +13 -0
- package/lib/http.d.ts.map +1 -0
- package/lib/http.js +29 -0
- package/lib/http.js.map +1 -0
- package/lib/index.d.ts +19 -25
- package/lib/index.js +9 -15
- package/lib/json/index.d.ts +1 -16
- package/lib/json/index.js +2 -132
- package/lib/live/LiveOntology.d.ts +114 -50
- package/lib/live/LiveOntology.d.ts.map +1 -1
- package/lib/live/LiveOntology.js +23 -103
- package/lib/live/LiveOntology.js.map +1 -1
- package/lib/live/actions/createLiveOntologyAction.d.ts +15 -16
- package/lib/live/actions/createLiveOntologyAction.d.ts.map +1 -1
- package/lib/live/actions/createLiveOntologyAction.js +3 -11
- package/lib/live/actions/createLiveOntologyAction.js.map +1 -1
- package/lib/live/actions/types.d.ts +21 -0
- package/lib/live/actions/types.d.ts.map +1 -0
- package/lib/live/attachments/createLiveOntologyAttachments.d.ts +30 -19
- package/lib/live/attachments/createLiveOntologyAttachments.d.ts.map +1 -1
- package/lib/live/attachments/createLiveOntologyAttachments.js +43 -60
- package/lib/live/attachments/createLiveOntologyAttachments.js.map +1 -1
- package/lib/live/attachments/types.d.ts +4 -3
- package/lib/live/index.d.ts +10 -10
- package/lib/live/index.js +5 -6
- package/lib/live/mutators/createReadTx.d.ts +5 -0
- package/lib/live/mutators/createReadTx.d.ts.map +1 -0
- package/lib/live/mutators/createReadTx.js +19 -0
- package/lib/live/mutators/createReadTx.js.map +1 -0
- package/lib/live/mutators/types.d.ts +7 -2
- package/lib/live/mutators/types.d.ts.map +1 -1
- package/lib/live/objects/types.d.ts +6 -0
- package/lib/live/objects/types.d.ts.map +1 -0
- package/lib/live/outbox/types.d.ts +24 -15
- package/lib/live/outbox/types.d.ts.map +1 -1
- package/lib/live/outbox/types.js +1 -11
- package/lib/live/pins.d.ts +51 -0
- package/lib/live/pins.d.ts.map +1 -0
- package/lib/live/pins.js +113 -0
- package/lib/live/pins.js.map +1 -0
- package/lib/live/storageBackend.d.ts +50 -0
- package/lib/live/storageBackend.d.ts.map +1 -0
- package/lib/live/storageBackend.js +42 -0
- package/lib/live/storageBackend.js.map +1 -0
- package/lib/local.d.ts +15 -0
- package/lib/local.d.ts.map +1 -0
- package/lib/local.js +19 -0
- package/lib/local.js.map +1 -0
- package/lib/meta/generated/collections.d.ts +7 -0
- package/lib/meta/generated/collections.d.ts.map +1 -0
- package/lib/meta/generated/collections.js +15 -0
- package/lib/meta/generated/collections.js.map +1 -0
- package/lib/meta/generated/live.d.ts +3 -3
- package/lib/meta/generated/live.d.ts.map +1 -1
- package/lib/meta/generated/live.js +2 -2
- package/lib/meta/generated/live.js.map +1 -1
- package/lib/meta/pull.d.ts +5 -9
- package/lib/meta/pull.d.ts.map +1 -1
- package/lib/meta/pull.js +5 -43
- package/lib/meta/pull.js.map +1 -1
- package/lib/query.d.ts +1 -0
- package/lib/query.js +2 -0
- package/lib/runtime/host.d.ts +35 -0
- package/lib/runtime/host.d.ts.map +1 -0
- package/lib/runtime/host.js +39 -0
- package/lib/runtime/host.js.map +1 -0
- package/lib/runtime/index.d.ts +2 -0
- package/lib/runtime/index.js +1 -0
- package/lib/runtime/live.d.ts +25 -0
- package/lib/runtime/live.d.ts.map +1 -0
- package/lib/runtime/live.js +31 -0
- package/lib/runtime/live.js.map +1 -0
- package/lib/runtime/resource.d.ts +24 -0
- package/lib/runtime/resource.d.ts.map +1 -0
- package/lib/runtime/resource.js +127 -0
- package/lib/runtime/resource.js.map +1 -0
- package/lib/runtime/transactions.d.ts +27 -0
- package/lib/runtime/transactions.d.ts.map +1 -0
- package/lib/runtime/transactions.js +188 -0
- package/lib/runtime/transactions.js.map +1 -0
- package/lib/runtime/view.d.ts +25 -0
- package/lib/runtime/view.d.ts.map +1 -0
- package/lib/runtime/view.js +256 -0
- package/lib/runtime/view.js.map +1 -0
- package/lib/tanstack/collections.d.ts +73 -0
- package/lib/tanstack/collections.d.ts.map +1 -0
- package/lib/tanstack/collections.js +495 -0
- package/lib/tanstack/collections.js.map +1 -0
- package/lib/tanstack/createLocalCollection.d.ts +14 -0
- package/lib/tanstack/createLocalCollection.d.ts.map +1 -0
- package/lib/tanstack/createLocalCollection.js +9 -0
- package/lib/tanstack/createLocalCollection.js.map +1 -0
- package/lib/tanstack/descriptors.d.ts +33 -0
- package/lib/tanstack/descriptors.d.ts.map +1 -0
- package/lib/tanstack/descriptors.js +38 -0
- package/lib/tanstack/descriptors.js.map +1 -0
- package/lib/tanstack/diagnostics.d.ts +23 -0
- package/lib/tanstack/diagnostics.d.ts.map +1 -0
- package/lib/tanstack/diagnostics.js +14 -0
- package/lib/tanstack/diagnostics.js.map +1 -0
- package/lib/tanstack/index.d.ts +6 -0
- package/lib/tanstack/index.js +6 -0
- package/lib/tanstack/localCollection.d.ts +14 -0
- package/lib/tanstack/localCollection.d.ts.map +1 -0
- package/lib/tanstack/localCollection.js +73 -0
- package/lib/tanstack/localCollection.js.map +1 -0
- package/lib/tanstack/subset.d.ts +28 -0
- package/lib/tanstack/subset.d.ts.map +1 -0
- package/lib/tanstack/subset.js +290 -0
- package/lib/tanstack/subset.js.map +1 -0
- package/lib/testing/sqlite.d.ts +40 -0
- package/lib/testing/sqlite.d.ts.map +1 -0
- package/lib/testing/sqlite.js +409 -0
- package/lib/testing/sqlite.js.map +1 -0
- package/lib/testing/sqliteBackend.d.ts +68 -0
- package/lib/testing/sqliteBackend.d.ts.map +1 -0
- package/lib/testing/sqliteBackend.js +34 -0
- package/lib/testing/sqliteBackend.js.map +1 -0
- package/lib/utils/index.d.ts +1 -8
- package/lib/utils/index.js +2 -5
- package/lib/utils/values.d.ts +1 -33
- package/lib/worker.d.ts +19 -0
- package/lib/worker.d.ts.map +1 -0
- package/lib/worker.js +46 -0
- package/lib/worker.js.map +1 -0
- package/package.json +54 -19
- package/lib/_virtual/_rolldown/runtime.js +0 -13
- package/lib/cli/format.d.ts +0 -4
- package/lib/cli/format.d.ts.map +0 -1
- package/lib/cli/format.js +0 -19
- package/lib/cli/format.js.map +0 -1
- package/lib/cli/generate.d.ts +0 -10
- package/lib/cli/generate.d.ts.map +0 -1
- package/lib/cli/generate.js +0 -108
- package/lib/cli/generate.js.map +0 -1
- package/lib/examples/blog.d.ts.map +0 -1
- package/lib/examples/blog.js.map +0 -1
- package/lib/generate/builders.d.ts +0 -12
- package/lib/generate/builders.d.ts.map +0 -1
- package/lib/generate/builders.js +0 -58
- package/lib/generate/builders.js.map +0 -1
- package/lib/generate/constants.d.ts +0 -5
- package/lib/generate/constants.d.ts.map +0 -1
- package/lib/generate/constants.js +0 -28
- package/lib/generate/constants.js.map +0 -1
- package/lib/generate/index.d.ts +0 -6
- package/lib/generate/index.js +0 -6
- package/lib/generate/live.d.ts +0 -12
- package/lib/generate/live.d.ts.map +0 -1
- package/lib/generate/live.js +0 -48
- package/lib/generate/live.js.map +0 -1
- package/lib/generate/ontology.d.ts +0 -8
- package/lib/generate/ontology.d.ts.map +0 -1
- package/lib/generate/ontology.js +0 -501
- package/lib/generate/ontology.js.map +0 -1
- package/lib/generate/types.d.ts +0 -17
- package/lib/generate/types.d.ts.map +0 -1
- package/lib/generate/types.js +0 -216
- package/lib/generate/types.js.map +0 -1
- package/lib/generate/utils/buildJsDocs.d.ts +0 -10
- package/lib/generate/utils/buildJsDocs.d.ts.map +0 -1
- package/lib/generate/utils/buildJsDocs.js +0 -16
- package/lib/generate/utils/buildJsDocs.js.map +0 -1
- package/lib/infer.d.ts +0 -222
- package/lib/infer.d.ts.map +0 -1
- package/lib/infer.js +0 -14
- package/lib/infer.js.map +0 -1
- package/lib/installation/createMetaOntologyConfiguration.d.ts +0 -10
- package/lib/installation/createMetaOntologyConfiguration.d.ts.map +0 -1
- package/lib/installation/createMetaOntologyConfiguration.js +0 -16
- package/lib/installation/createMetaOntologyConfiguration.js.map +0 -1
- package/lib/installation/createOntologyBackendInstallation.d.ts +0 -5
- package/lib/installation/createOntologyBackendInstallation.d.ts.map +0 -1
- package/lib/installation/createOntologyBackendInstallation.js +0 -221
- package/lib/installation/createOntologyBackendInstallation.js.map +0 -1
- package/lib/installation/index.d.ts +0 -4
- package/lib/installation/index.js +0 -3
- package/lib/installation/types.d.ts +0 -94
- package/lib/installation/types.d.ts.map +0 -1
- package/lib/ir/generated/builders.d.ts +0 -380
- package/lib/ir/generated/builders.d.ts.map +0 -1
- package/lib/ir/generated/builders.js +0 -186
- package/lib/ir/generated/builders.js.map +0 -1
- package/lib/ir/generated/constants.d.ts +0 -265
- package/lib/ir/generated/constants.d.ts.map +0 -1
- package/lib/ir/generated/constants.js +0 -165
- package/lib/ir/generated/constants.js.map +0 -1
- package/lib/ir/generated/types.d.ts +0 -416
- package/lib/ir/generated/types.d.ts.map +0 -1
- package/lib/ir/index.d.ts +0 -4
- package/lib/ir/index.js +0 -3
- package/lib/ir/schema.d.ts +0 -2246
- package/lib/ir/schema.d.ts.map +0 -1
- package/lib/ir/schema.js +0 -1187
- package/lib/ir/schema.js.map +0 -1
- package/lib/ir/validate.d.ts +0 -8
- package/lib/ir/validate.d.ts.map +0 -1
- package/lib/ir/validate.js +0 -623
- package/lib/ir/validate.js.map +0 -1
- package/lib/json/index.d.ts.map +0 -1
- package/lib/json/index.js.map +0 -1
- package/lib/lenses.d.ts +0 -21
- package/lib/lenses.d.ts.map +0 -1
- package/lib/lenses.js +0 -110
- package/lib/lenses.js.map +0 -1
- package/lib/live/OntologyBackendAdapter.d.ts +0 -100
- package/lib/live/OntologyBackendAdapter.d.ts.map +0 -1
- package/lib/live/OntologyBackendAdapter.js +0 -1
- package/lib/live/actions/createLiveOntologyActions.d.ts +0 -28
- package/lib/live/actions/createLiveOntologyActions.d.ts.map +0 -1
- package/lib/live/actions/createLiveOntologyActions.js +0 -139
- package/lib/live/actions/createLiveOntologyActions.js.map +0 -1
- package/lib/live/actions/prepareActionParameters.d.ts +0 -19
- package/lib/live/actions/prepareActionParameters.d.ts.map +0 -1
- package/lib/live/actions/prepareActionParameters.js +0 -213
- package/lib/live/actions/prepareActionParameters.js.map +0 -1
- package/lib/live/attachments/attachmentSources.d.ts +0 -10
- package/lib/live/attachments/attachmentSources.d.ts.map +0 -1
- package/lib/live/attachments/attachmentSources.js +0 -64
- package/lib/live/attachments/attachmentSources.js.map +0 -1
- package/lib/live/attachments/unsupportedOntologyAttachmentsAdapter.d.ts +0 -5
- package/lib/live/attachments/unsupportedOntologyAttachmentsAdapter.d.ts.map +0 -1
- package/lib/live/attachments/unsupportedOntologyAttachmentsAdapter.js +0 -6
- package/lib/live/attachments/unsupportedOntologyAttachmentsAdapter.js.map +0 -1
- package/lib/live/expression.d.ts +0 -23
- package/lib/live/expression.d.ts.map +0 -1
- package/lib/live/expression.js +0 -160
- package/lib/live/expression.js.map +0 -1
- package/lib/live/mutators/OntologyEdits.d.ts +0 -15
- package/lib/live/mutators/OntologyEdits.d.ts.map +0 -1
- package/lib/live/mutators/OntologyEdits.js +0 -65
- package/lib/live/mutators/OntologyEdits.js.map +0 -1
- package/lib/live/mutators/createMutatorTx.d.ts +0 -11
- package/lib/live/mutators/createMutatorTx.d.ts.map +0 -1
- package/lib/live/mutators/createMutatorTx.js +0 -61
- package/lib/live/mutators/createMutatorTx.js.map +0 -1
- package/lib/live/mutators/runOptimisticAction.d.ts +0 -19
- package/lib/live/mutators/runOptimisticAction.d.ts.map +0 -1
- package/lib/live/mutators/runOptimisticAction.js +0 -30
- package/lib/live/mutators/runOptimisticAction.js.map +0 -1
- package/lib/live/objects/OntologyObject.d.ts +0 -4
- package/lib/live/objects/OntologyObject.d.ts.map +0 -1
- package/lib/live/objects/OntologyObject.js +0 -1
- package/lib/live/objects/createLiveOntologyObjectCollection.d.ts +0 -17
- package/lib/live/objects/createLiveOntologyObjectCollection.d.ts.map +0 -1
- package/lib/live/objects/createLiveOntologyObjectCollection.js +0 -55
- package/lib/live/objects/createLiveOntologyObjectCollection.js.map +0 -1
- package/lib/live/objects/ontologyObjectCollectionId.d.ts +0 -4
- package/lib/live/objects/ontologyObjectCollectionId.d.ts.map +0 -1
- package/lib/live/objects/ontologyObjectCollectionId.js +0 -8
- package/lib/live/objects/ontologyObjectCollectionId.js.map +0 -1
- package/lib/live/outbox/createOntologyOutbox.d.ts +0 -23
- package/lib/live/outbox/createOntologyOutbox.d.ts.map +0 -1
- package/lib/live/outbox/createOntologyOutbox.js +0 -292
- package/lib/live/outbox/createOntologyOutbox.js.map +0 -1
- package/lib/live/outbox/leaderExecutor.d.ts +0 -20
- package/lib/live/outbox/leaderExecutor.d.ts.map +0 -1
- package/lib/live/outbox/leaderExecutor.js +0 -130
- package/lib/live/outbox/leaderExecutor.js.map +0 -1
- package/lib/live/outbox/outboxService.d.ts +0 -7
- package/lib/live/outbox/outboxService.d.ts.map +0 -1
- package/lib/live/outbox/outboxService.js +0 -68
- package/lib/live/outbox/outboxService.js.map +0 -1
- package/lib/live/outbox/projectionManager.d.ts +0 -31
- package/lib/live/outbox/projectionManager.d.ts.map +0 -1
- package/lib/live/outbox/projectionManager.js +0 -127
- package/lib/live/outbox/projectionManager.js.map +0 -1
- package/lib/live/outbox/repository.d.ts +0 -31
- package/lib/live/outbox/repository.d.ts.map +0 -1
- package/lib/live/outbox/repository.js +0 -196
- package/lib/live/outbox/repository.js.map +0 -1
- package/lib/live/outbox/service.d.ts +0 -61
- package/lib/live/outbox/service.d.ts.map +0 -1
- package/lib/live/outbox/service.js +0 -6
- package/lib/live/outbox/service.js.map +0 -1
- package/lib/live/outbox/types.js.map +0 -1
- package/lib/live/waitForCollectionReady.d.ts +0 -5
- package/lib/live/waitForCollectionReady.d.ts.map +0 -1
- package/lib/live/waitForCollectionReady.js +0 -49
- package/lib/live/waitForCollectionReady.js.map +0 -1
- package/lib/meta/createLocalMetaOntologyBackendAdapter.d.ts +0 -7
- package/lib/meta/createLocalMetaOntologyBackendAdapter.d.ts.map +0 -1
- package/lib/meta/createLocalMetaOntologyBackendAdapter.js +0 -44
- package/lib/meta/createLocalMetaOntologyBackendAdapter.js.map +0 -1
- package/lib/meta/generated/constants.d.ts +0 -265
- package/lib/meta/generated/constants.d.ts.map +0 -1
- package/lib/meta/generated/constants.js +0 -165
- package/lib/meta/generated/constants.js.map +0 -1
- package/lib/meta/generated/types.d.ts +0 -417
- package/lib/meta/generated/types.d.ts.map +0 -1
- package/lib/meta/generated/types.js +0 -1
- package/lib/meta/ontology.d.ts +0 -26
- package/lib/meta/ontology.d.ts.map +0 -1
- package/lib/meta/ontology.js +0 -111
- package/lib/meta/ontology.js.map +0 -1
- package/lib/utils/links.d.ts +0 -49
- package/lib/utils/links.d.ts.map +0 -1
- package/lib/utils/links.js +0 -13
- package/lib/utils/links.js.map +0 -1
- package/lib/utils/paths.d.ts +0 -6
- package/lib/utils/paths.d.ts.map +0 -1
- package/lib/utils/paths.js +0 -42
- package/lib/utils/paths.js.map +0 -1
- package/lib/utils/provide.d.ts +0 -4
- package/lib/utils/provide.d.ts.map +0 -1
- package/lib/utils/provide.js +0 -9
- package/lib/utils/provide.js.map +0 -1
- package/lib/utils/targets.d.ts +0 -37
- package/lib/utils/targets.d.ts.map +0 -1
- package/lib/utils/targets.js +0 -1
- package/lib/utils/typeNames.d.ts +0 -28
- package/lib/utils/typeNames.d.ts.map +0 -1
- package/lib/utils/typeNames.js +0 -1
- package/lib/utils/types.d.ts +0 -12
- package/lib/utils/types.d.ts.map +0 -1
- package/lib/utils/types.js +0 -48
- package/lib/utils/types.js.map +0 -1
- package/lib/utils/uncertain.d.ts +0 -11
- package/lib/utils/uncertain.d.ts.map +0 -1
- package/lib/utils/uncertain.js +0 -14
- package/lib/utils/uncertain.js.map +0 -1
- package/lib/utils/validation.d.ts +0 -7
- package/lib/utils/validation.d.ts.map +0 -1
- package/lib/utils/validation.js +0 -1
- package/lib/utils/values.d.ts.map +0 -1
- /package/lib/{installation → live/actions}/types.js +0 -0
- /package/lib/{ir/generated → live/objects}/types.js +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"expression.js","names":[],"sources":["../../src/live/expression.ts"],"sourcesContent":["import { eq } from \"@tanstack/db\";\nimport { Temporal } from \"temporal-polyfill\";\nimport { isLinkHopFromForeignKeySource, resolveLinkHop } from \"../utils/links.js\";\nimport { getAtPath } from \"../utils/paths.js\";\nimport { resolveType, unwrapType } from \"../utils/types.js\";\nimport type {\n Expression,\n ObjectTypeDef,\n OntologyIR,\n TypeDef,\n InputReferenceExpression,\n} from \"../ir/index.js\";\nimport type { OntologyReadTx } from \"./mutators/types.js\";\nimport type { OntologyObject } from \"./objects/OntologyObject.js\";\n\nfunction getActionType(ir: OntologyIR, actionTypeName: string) {\n return ir.actionTypes.find((actionType) => actionType.name === actionTypeName)!;\n}\n\ninterface EvaluateExpressionOptions {\n ir: OntologyIR;\n actionTypeName: string;\n expression: Expression;\n resolveParameter: (parameterName: string) => Promise<unknown>;\n context: Record<string, unknown>;\n tx: OntologyReadTx;\n}\n\nconst ontologyReference = Symbol(\"ontologyReference\");\nconst ontologyObject = Symbol(\"ontologyObject\");\n\ninterface EvaluatedObjectReference {\n [ontologyReference]: true;\n objectType: string;\n key: unknown;\n optional: boolean;\n}\n\ninterface EvaluatedOntologyObject {\n [ontologyObject]: true;\n objectType: string;\n value: OntologyObject;\n}\n\nfunction isEvaluatedObjectReference(value: unknown): value is EvaluatedObjectReference {\n return typeof value === \"object\" && value !== null && ontologyReference in value;\n}\n\nfunction isEvaluatedOntologyObject(value: unknown): value is EvaluatedOntologyObject {\n return typeof value === \"object\" && value !== null && ontologyObject in value;\n}\n\nfunction unwrapEvaluatedValue(value: unknown): unknown {\n if (isEvaluatedObjectReference(value)) return value.key;\n if (isEvaluatedOntologyObject(value)) return value.value;\n if (Array.isArray(value)) return value.map(unwrapEvaluatedValue);\n if (value !== null && typeof value === \"object\" && Object.getPrototypeOf(value) === Object.prototype) {\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [key, unwrapEvaluatedValue(entry)])\n );\n }\n return value;\n}\n\nexport async function evaluateExpression(options: EvaluateExpressionOptions): Promise<unknown> {\n return unwrapEvaluatedValue(await evaluateExpressionWithLocals(options, new Map()));\n}\n\nasync function evaluateExpressionWithLocals(\n options: EvaluateExpressionOptions,\n locals: ReadonlyMap<string, unknown>\n): Promise<unknown> {\n const { ir, actionTypeName, expression, resolveParameter, context, tx } = options;\n\n switch (expression.kind) {\n case \"inputReference\": {\n const parameterValue = await resolveParameter(expression.value.name);\n const actionType = getActionType(ir, actionTypeName);\n const parameter = actionType.parameters.find(\n (candidate) => candidate.name === expression.value.name\n )!;\n const { type: parameterType, isOptional } = unwrapType(resolveType(ir, parameter.type));\n if (parameterType.kind === \"objectReference\") {\n return {\n [ontologyReference]: true,\n objectType: parameterType.value.objectType,\n key: parameterValue,\n optional: isOptional,\n };\n }\n return parameterValue;\n }\n case \"localReference\": {\n const { name } = expression.value;\n if (!locals.has(name)) {\n throw new Error(`Unknown expression binding \"${name}\".`);\n }\n return locals.get(name);\n }\n case \"contextReference\":\n return context[expression.value.name];\n case \"getAt\": {\n const source = await evaluateExpressionWithLocals(\n {\n ...options,\n expression: expression.value.source,\n },\n locals\n );\n if (isEvaluatedObjectReference(source)) {\n throw new Error(\n `Cannot access field \"${expression.value.path.join(\".\")}\" on an object reference without an object lookup.`\n );\n }\n return getAtPath(\n isEvaluatedOntologyObject(source) ? source.value : source,\n expression.value.path\n );\n }\n case \"objectLookup\": {\n const reference = await evaluateExpressionWithLocals(\n {\n ...options,\n expression: expression.value.reference,\n },\n locals\n );\n if (!isEvaluatedObjectReference(reference)) {\n throw new Error(\"Object lookup source must resolve to an object reference.\");\n }\n if (reference.key === undefined || reference.key === null) {\n return undefined;\n }\n const referencedType = ir.objectTypes.find(\n (candidate) => candidate.name === reference.objectType\n )!;\n const referencedObject = await tx.query<OntologyObject | undefined>((query, objects) =>\n query\n .from({\n object: objects[referencedType.name]!,\n })\n .where(({ object }) => eq(object[referencedType.primaryKey], reference.key))\n .select(({ object }) => object)\n .findOne()\n );\n if (!referencedObject && !reference.optional) {\n throw new Error(`Missing loaded \"${referencedType.name}\" object.`);\n }\n return referencedObject\n ? {\n [ontologyObject]: true,\n objectType: referencedType.name,\n value: referencedObject,\n }\n : undefined;\n }\n case \"linkHop\": {\n const source = await evaluateExpressionWithLocals(\n {\n ...options,\n expression: expression.value.source,\n },\n locals\n );\n if (!isEvaluatedOntologyObject(source)) {\n throw new Error(\"Link hop source must resolve to an ontology object.\");\n }\n const link = resolveLinkHop(ir, source.objectType, expression.value.link);\n if (!link) {\n throw new Error(\n `Unknown link \"${expression.value.link}\" on object type \"${source.objectType}\".`\n );\n }\n const foreignKeyOnSource = isLinkHopFromForeignKeySource(\n link,\n source.objectType,\n expression.value.link\n );\n const cardinality = foreignKeyOnSource ? \"one\" : link.cardinality;\n if (cardinality === \"many\") {\n throw new Error(\n `Link \"${expression.value.link}\" on object type \"${source.objectType}\" is to-many.`\n );\n }\n const sourceType = ir.objectTypes.find((candidate) => candidate.name === source.objectType)!;\n const targetType = ir.objectTypes.find(\n (candidate) =>\n candidate.name === (foreignKeyOnSource ? link.target.objectType : link.source.objectType)\n )!;\n const foreignKeyPath = link.foreignKey.split(\".\");\n const sourceKey = foreignKeyOnSource\n ? getAtPath(source.value, foreignKeyPath)\n : source.value[sourceType.primaryKey];\n if (sourceKey === undefined || sourceKey === null) {\n return undefined;\n }\n const targetProperty = foreignKeyOnSource ? targetType.primaryKey : link.foreignKey;\n const linkedObject = await tx.query<OntologyObject | undefined>((query, objects) =>\n query\n .from({\n object: objects[targetType.name]!,\n })\n .where(({ object }) => eq(object[targetProperty], sourceKey))\n .select(({ object }) => object)\n .findOne()\n );\n return linkedObject\n ? {\n [ontologyObject]: true,\n objectType: targetType.name,\n value: linkedObject,\n }\n : undefined;\n }\n case \"struct\": {\n const fields = await Promise.all(\n expression.value.fields.map(\n async (field) =>\n [\n field.name,\n await evaluateExpressionWithLocals(\n {\n ...options,\n expression: field.value,\n },\n locals\n ),\n ] as const\n )\n );\n return Object.fromEntries(fields);\n }\n case \"map\": {\n const source = await evaluateExpressionWithLocals(\n {\n ...options,\n expression: expression.value.source,\n },\n locals\n );\n if (source === undefined) {\n return undefined;\n }\n if (!Array.isArray(source)) {\n throw new Error(\"Map expression source must resolve to a list.\");\n }\n return Promise.all(\n source.map((item) => {\n const itemLocals = new Map(locals);\n itemLocals.set(expression.value.binding, item);\n return evaluateExpressionWithLocals(\n {\n ...options,\n expression: expression.value.body,\n },\n itemLocals\n );\n })\n );\n }\n case \"literal\":\n return expression.value.value;\n case \"uuid\":\n return globalThis.crypto.randomUUID();\n case \"now\":\n return Temporal.Now.instant();\n }\n}\n\nexport async function resolveActionParameters(options: {\n ir: OntologyIR;\n actionTypeName: string;\n initialParameters: Record<string, unknown>;\n context: Record<string, unknown>;\n tx: OntologyReadTx;\n}): Promise<Record<string, unknown>> {\n const action = getActionType(options.ir, options.actionTypeName);\n const resolvedParameters = {\n ...options.initialParameters,\n };\n const parametersByName = new Map(action.parameters.map((parameter) => [parameter.name, parameter]));\n const resolving = new Set<string>();\n\n const resolveParameter = async (parameterName: string): Promise<unknown> => {\n if (resolvedParameters[parameterName] !== undefined) {\n return resolvedParameters[parameterName];\n }\n const parameter = parametersByName.get(parameterName);\n if (!parameter?.defaultValue) return undefined;\n if (resolving.has(parameterName)) {\n throw new Error(`Circular action parameter default for \"${parameterName}\".`);\n }\n\n resolving.add(parameterName);\n try {\n resolvedParameters[parameterName] = await evaluateExpression({\n ir: options.ir,\n actionTypeName: options.actionTypeName,\n expression: parameter.defaultValue,\n resolveParameter,\n context: options.context,\n tx: options.tx,\n });\n return resolvedParameters[parameterName];\n } finally {\n resolving.delete(parameterName);\n }\n };\n\n for (const parameter of action.parameters) {\n await resolveParameter(parameter.name);\n }\n return resolvedParameters;\n}\n\nexport function getObjectReferenceObjectType(\n ir: OntologyIR,\n actionTypeName: string,\n reference: InputReferenceExpression\n): ObjectTypeDef {\n const actionType = getActionType(ir, actionTypeName);\n const parameter = actionType.parameters.find((candidate) => candidate.name === reference.name)!;\n const resolvedType = unwrapType(resolveType(ir, parameter.type)).type as Extract<\n TypeDef,\n { kind: \"objectReference\" }\n >;\n return ir.objectTypes.find((candidate) => candidate.name === resolvedType.value.objectType)!;\n}\n"],"mappings":"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"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { OntologyIR } from "../../ir/generated/types.js";
|
|
2
|
-
import "../../ir/index.js";
|
|
3
|
-
import { OntologyMutatorObjects, OntologyMutatorTx } from "./types.js";
|
|
4
|
-
//#region src/live/mutators/OntologyEdits.d.ts
|
|
5
|
-
export declare function applyActionLogicToMutatorTx(options: {
|
|
6
|
-
ir: OntologyIR;
|
|
7
|
-
actionTypeName: string;
|
|
8
|
-
parameters: Record<string, unknown>;
|
|
9
|
-
context: Record<string, unknown>;
|
|
10
|
-
idempotencyKey?: string;
|
|
11
|
-
objects: OntologyMutatorObjects;
|
|
12
|
-
tx: OntologyMutatorTx;
|
|
13
|
-
}): Promise<void>;
|
|
14
|
-
//#endregion
|
|
15
|
-
//# sourceMappingURL=OntologyEdits.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OntologyEdits.d.ts","names":[],"sources":["../../../src/live/mutators/OntologyEdits.ts"],"mappings":";;;;wBA8CsB,4BAA4B;EAC9C,IAAI;EACJ;EACA,YAAY;EACZ,SAAS;EACT;EACA,SAAS;EACT,IAAI;IACJ"}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { unwrapValueType } from "../../utils/types.js";
|
|
2
|
-
import { setAtPath } from "../../utils/paths.js";
|
|
3
|
-
import { evaluateExpression, getObjectReferenceObjectType } from "../expression.js";
|
|
4
|
-
import { decorateObjectAttachmentSources } from "../attachments/attachmentSources.js";
|
|
5
|
-
//#region src/live/mutators/OntologyEdits.ts
|
|
6
|
-
function objectType(ir, name) {
|
|
7
|
-
const type = ir.objectTypes.find((candidate) => candidate.name === name);
|
|
8
|
-
if (!type) throw new Error(`Unknown object type "${name}".`);
|
|
9
|
-
return type;
|
|
10
|
-
}
|
|
11
|
-
async function propertyChanges(options) {
|
|
12
|
-
const changes = [];
|
|
13
|
-
for (const assignment of options.assignments) {
|
|
14
|
-
const value = await evaluateExpression({
|
|
15
|
-
ir: options.ir,
|
|
16
|
-
actionTypeName: options.actionTypeName,
|
|
17
|
-
expression: assignment.value,
|
|
18
|
-
resolveParameter: (name) => Promise.resolve(options.parameters[name]),
|
|
19
|
-
context: options.context,
|
|
20
|
-
tx: options.tx
|
|
21
|
-
});
|
|
22
|
-
if (value !== void 0) changes.push({
|
|
23
|
-
path: assignment.property,
|
|
24
|
-
value
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
return changes;
|
|
28
|
-
}
|
|
29
|
-
async function applyActionLogicToMutatorTx(options) {
|
|
30
|
-
const action = options.ir.actionTypes.find((candidate) => candidate.name === options.actionTypeName);
|
|
31
|
-
if (!action) throw new Error(`Unknown action "${options.actionTypeName}".`);
|
|
32
|
-
for (const [stepIndex, step] of action.logic.entries()) {
|
|
33
|
-
if (step.kind === "createObject") {
|
|
34
|
-
const type = objectType(options.ir, step.value.objectType);
|
|
35
|
-
let object = {};
|
|
36
|
-
for (const change of await propertyChanges({
|
|
37
|
-
...options,
|
|
38
|
-
assignments: step.value.values
|
|
39
|
-
})) object = setAtPath(object, change.path, change.value);
|
|
40
|
-
decorateObjectAttachmentSources({
|
|
41
|
-
ir: options.ir,
|
|
42
|
-
objectType: type,
|
|
43
|
-
object
|
|
44
|
-
});
|
|
45
|
-
if (object[type.primaryKey] === void 0) {
|
|
46
|
-
const primaryKey = type.properties.find((property) => property.name === type.primaryKey);
|
|
47
|
-
if (!options.idempotencyKey || !primaryKey || unwrapValueType(options.ir, primaryKey.type).kind !== "string") continue;
|
|
48
|
-
object[type.primaryKey] = `optimistic:${options.idempotencyKey}:${type.name}:${stepIndex}`;
|
|
49
|
-
}
|
|
50
|
-
await options.tx.mutate[type.name].create(object);
|
|
51
|
-
continue;
|
|
52
|
-
}
|
|
53
|
-
const type = getObjectReferenceObjectType(options.ir, options.actionTypeName, step.value.object);
|
|
54
|
-
const key = options.parameters[step.value.object.name];
|
|
55
|
-
if (step.kind === "updateObject") await options.tx.mutate[type.name].update(key, await propertyChanges({
|
|
56
|
-
...options,
|
|
57
|
-
assignments: step.value.values
|
|
58
|
-
}));
|
|
59
|
-
else await options.tx.mutate[type.name].delete(key);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
//#endregion
|
|
63
|
-
export { applyActionLogicToMutatorTx };
|
|
64
|
-
|
|
65
|
-
//# sourceMappingURL=OntologyEdits.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OntologyEdits.js","names":[],"sources":["../../../src/live/mutators/OntologyEdits.ts"],"sourcesContent":["import { setAtPath } from \"../../utils/paths.js\";\nimport { unwrapValueType } from \"../../utils/types.js\";\nimport { decorateObjectAttachmentSources } from \"../attachments/attachmentSources.js\";\nimport { evaluateExpression, getObjectReferenceObjectType } from \"../expression.js\";\nimport type { ObjectTypeDef, OntologyIR, PropertyAssignment } from \"../../ir/index.js\";\nimport type {\n OntologyMutatorObjects,\n OntologyMutatorTx,\n OntologyPropertyChange,\n OntologyReadTx,\n} from \"./types.js\";\n\nfunction objectType(ir: OntologyIR, name: string): ObjectTypeDef {\n const type = ir.objectTypes.find((candidate) => candidate.name === name);\n if (!type) throw new Error(`Unknown object type \"${name}\".`);\n return type;\n}\n\nasync function propertyChanges(options: {\n ir: OntologyIR;\n actionTypeName: string;\n assignments: PropertyAssignment[];\n parameters: Record<string, unknown>;\n context: Record<string, unknown>;\n tx: OntologyReadTx;\n}): Promise<OntologyPropertyChange[]> {\n const changes: OntologyPropertyChange[] = [];\n for (const assignment of options.assignments) {\n const value = await evaluateExpression({\n ir: options.ir,\n actionTypeName: options.actionTypeName,\n expression: assignment.value,\n resolveParameter: (name) => Promise.resolve(options.parameters[name]),\n context: options.context,\n tx: options.tx,\n });\n if (value !== undefined) {\n changes.push({\n path: assignment.property,\n value,\n });\n }\n }\n return changes;\n}\n\nexport async function applyActionLogicToMutatorTx(options: {\n ir: OntologyIR;\n actionTypeName: string;\n parameters: Record<string, unknown>;\n context: Record<string, unknown>;\n idempotencyKey?: string;\n objects: OntologyMutatorObjects;\n tx: OntologyMutatorTx;\n}): Promise<void> {\n const action = options.ir.actionTypes.find((candidate) => candidate.name === options.actionTypeName);\n if (!action) {\n throw new Error(`Unknown action \"${options.actionTypeName}\".`);\n }\n\n for (const [stepIndex, step] of action.logic.entries()) {\n if (step.kind === \"createObject\") {\n const type = objectType(options.ir, step.value.objectType);\n let object: Record<string, unknown> = {};\n for (const change of await propertyChanges({\n ...options,\n assignments: step.value.values,\n })) {\n object = setAtPath(object, change.path, change.value);\n }\n decorateObjectAttachmentSources({\n ir: options.ir,\n objectType: type,\n object,\n });\n if (object[type.primaryKey] === undefined) {\n const primaryKey = type.properties.find((property) => property.name === type.primaryKey);\n if (\n !options.idempotencyKey ||\n !primaryKey ||\n unwrapValueType(options.ir, primaryKey.type).kind !== \"string\"\n ) {\n continue;\n }\n // Temporary view key for backend-assigned IDs. This is stable\n // across outbox projection replay, but it cannot support\n // dependent edits until local-to-remote view-key mapping exists.\n object[type.primaryKey] = `optimistic:${options.idempotencyKey}:${type.name}:${stepIndex}`;\n }\n await options.tx.mutate[type.name]!.create(object);\n continue;\n }\n\n const type = getObjectReferenceObjectType(options.ir, options.actionTypeName, step.value.object);\n const key = options.parameters[step.value.object.name] as string | number;\n if (step.kind === \"updateObject\") {\n await options.tx.mutate[type.name]!.update(\n key,\n await propertyChanges({\n ...options,\n assignments: step.value.values,\n })\n );\n } else {\n await options.tx.mutate[type.name]!.delete(key);\n }\n }\n}\n"],"mappings":";;;;;AAYA,SAAS,WAAW,IAAgB,MAA6B;CAC7D,MAAM,OAAO,GAAG,YAAY,MAAM,cAAc,UAAU,SAAS,IAAI;CACvE,IAAI,CAAC,MAAM,MAAM,IAAI,MAAM,wBAAwB,KAAK,GAAG;CAC3D,OAAO;AACX;AAEA,eAAe,gBAAgB,SAOO;CAClC,MAAM,UAAoC,CAAC;CAC3C,KAAK,MAAM,cAAc,QAAQ,aAAa;EAC1C,MAAM,QAAQ,MAAM,mBAAmB;GACnC,IAAI,QAAQ;GACZ,gBAAgB,QAAQ;GACxB,YAAY,WAAW;GACvB,mBAAmB,SAAS,QAAQ,QAAQ,QAAQ,WAAW,KAAK;GACpE,SAAS,QAAQ;GACjB,IAAI,QAAQ;EAChB,CAAC;EACD,IAAI,UAAU,KAAA,GACV,QAAQ,KAAK;GACT,MAAM,WAAW;GACjB;EACJ,CAAC;CAET;CACA,OAAO;AACX;AAEA,eAAsB,4BAA4B,SAQhC;CACd,MAAM,SAAS,QAAQ,GAAG,YAAY,MAAM,cAAc,UAAU,SAAS,QAAQ,cAAc;CACnG,IAAI,CAAC,QACD,MAAM,IAAI,MAAM,mBAAmB,QAAQ,eAAe,GAAG;CAGjE,KAAK,MAAM,CAAC,WAAW,SAAS,OAAO,MAAM,QAAQ,GAAG;EACpD,IAAI,KAAK,SAAS,gBAAgB;GAC9B,MAAM,OAAO,WAAW,QAAQ,IAAI,KAAK,MAAM,UAAU;GACzD,IAAI,SAAkC,CAAC;GACvC,KAAK,MAAM,UAAU,MAAM,gBAAgB;IACvC,GAAG;IACH,aAAa,KAAK,MAAM;GAC5B,CAAC,GACG,SAAS,UAAU,QAAQ,OAAO,MAAM,OAAO,KAAK;GAExD,gCAAgC;IAC5B,IAAI,QAAQ;IACZ,YAAY;IACZ;GACJ,CAAC;GACD,IAAI,OAAO,KAAK,gBAAgB,KAAA,GAAW;IACvC,MAAM,aAAa,KAAK,WAAW,MAAM,aAAa,SAAS,SAAS,KAAK,UAAU;IACvF,IACI,CAAC,QAAQ,kBACT,CAAC,cACD,gBAAgB,QAAQ,IAAI,WAAW,IAAI,CAAC,CAAC,SAAS,UAEtD;IAKJ,OAAO,KAAK,cAAc,cAAc,QAAQ,eAAe,GAAG,KAAK,KAAK,GAAG;GACnF;GACA,MAAM,QAAQ,GAAG,OAAO,KAAK,KAAK,CAAE,OAAO,MAAM;GACjD;EACJ;EAEA,MAAM,OAAO,6BAA6B,QAAQ,IAAI,QAAQ,gBAAgB,KAAK,MAAM,MAAM;EAC/F,MAAM,MAAM,QAAQ,WAAW,KAAK,MAAM,OAAO;EACjD,IAAI,KAAK,SAAS,gBACd,MAAM,QAAQ,GAAG,OAAO,KAAK,KAAK,CAAE,OAChC,KACA,MAAM,gBAAgB;GAClB,GAAG;GACH,aAAa,KAAK,MAAM;EAC5B,CAAC,CACL;OAEA,MAAM,QAAQ,GAAG,OAAO,KAAK,KAAK,CAAE,OAAO,GAAG;CAEtD;AACJ"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { OntologyMutatorObjects, OntologyMutatorTx, OntologyReadTx } from "./types.js";
|
|
2
|
-
import { Transaction } from "@tanstack/db";
|
|
3
|
-
//#region src/live/mutators/createMutatorTx.d.ts
|
|
4
|
-
export declare function createReadTx(objects: OntologyMutatorObjects): OntologyReadTx;
|
|
5
|
-
export declare function createMutatorTx(options: {
|
|
6
|
-
transaction: Transaction;
|
|
7
|
-
objects: OntologyMutatorObjects;
|
|
8
|
-
primaryKeys?: Record<string, string>;
|
|
9
|
-
}): OntologyMutatorTx;
|
|
10
|
-
//#endregion
|
|
11
|
-
//# sourceMappingURL=createMutatorTx.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createMutatorTx.d.ts","names":[],"sources":["../../../src/live/mutators/createMutatorTx.ts"],"mappings":";;;wBASgB,aAAa,SAAS,yBAAyB;wBAM/C,gBAAgB;EAC5B,aAAa;EACb,SAAS;EACT,cAAc;IACd"}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { setAtPath } from "../../utils/paths.js";
|
|
2
|
-
import { eq, queryOnce } from "@tanstack/db";
|
|
3
|
-
//#region src/live/mutators/createMutatorTx.ts
|
|
4
|
-
function createReadTx(objects) {
|
|
5
|
-
return { query: (build) => queryOnce((query) => build(query, objects)) };
|
|
6
|
-
}
|
|
7
|
-
function createMutatorTx(options) {
|
|
8
|
-
return {
|
|
9
|
-
...createReadTx(options.objects),
|
|
10
|
-
mutate: new Proxy({}, { get: (_target, objectType) => {
|
|
11
|
-
if (typeof objectType !== "string") return;
|
|
12
|
-
const collection = options.objects[objectType];
|
|
13
|
-
if (!collection) throw new Error(`Unknown object type "${objectType}".`);
|
|
14
|
-
return {
|
|
15
|
-
create: (object) => {
|
|
16
|
-
options.transaction.mutate(() => {
|
|
17
|
-
collection.insert(object);
|
|
18
|
-
});
|
|
19
|
-
return Promise.resolve();
|
|
20
|
-
},
|
|
21
|
-
update: async (key, changes) => {
|
|
22
|
-
await ensureObjectLoaded(collection, objectType, options.primaryKeys, key);
|
|
23
|
-
options.transaction.mutate(() => {
|
|
24
|
-
collection.update(key, (draft) => {
|
|
25
|
-
applyChanges(draft, changes);
|
|
26
|
-
});
|
|
27
|
-
});
|
|
28
|
-
},
|
|
29
|
-
delete: async (key) => {
|
|
30
|
-
await ensureObjectLoaded(collection, objectType, options.primaryKeys, key);
|
|
31
|
-
options.transaction.mutate(() => {
|
|
32
|
-
collection.delete(key);
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
|
-
} })
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
async function ensureObjectLoaded(collection, objectType, primaryKeys, key) {
|
|
40
|
-
if (collection.has(key)) return;
|
|
41
|
-
const primaryKey = primaryKeys?.[objectType];
|
|
42
|
-
if (!primaryKey) return;
|
|
43
|
-
await queryOnce((query) => query.from({ object: collection }).where(({ object }) => eq(object[primaryKey], key)).findOne());
|
|
44
|
-
}
|
|
45
|
-
function applyChanges(object, changes) {
|
|
46
|
-
if (Array.isArray(changes)) {
|
|
47
|
-
let updated = { ...object };
|
|
48
|
-
const changedProperties = /* @__PURE__ */ new Set();
|
|
49
|
-
for (const change of changes) {
|
|
50
|
-
const [property] = change.path;
|
|
51
|
-
if (property === void 0) throw new Error("Ontology property change paths must not be empty.");
|
|
52
|
-
updated = setAtPath(updated, change.path, change.value);
|
|
53
|
-
changedProperties.add(property);
|
|
54
|
-
}
|
|
55
|
-
for (const property of changedProperties) object[property] = updated[property];
|
|
56
|
-
} else Object.assign(object, changes);
|
|
57
|
-
}
|
|
58
|
-
//#endregion
|
|
59
|
-
export { createMutatorTx, createReadTx };
|
|
60
|
-
|
|
61
|
-
//# sourceMappingURL=createMutatorTx.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createMutatorTx.js","names":[],"sources":["../../../src/live/mutators/createMutatorTx.ts"],"sourcesContent":["import { eq, queryOnce, type Collection, type Transaction } from \"@tanstack/db\";\nimport { setAtPath } from \"../../utils/paths.js\";\nimport type {\n OntologyMutatorObjects,\n OntologyMutatorTx,\n OntologyPropertyChange,\n OntologyReadTx,\n} from \"./types.js\";\n\nexport function createReadTx(objects: OntologyMutatorObjects): OntologyReadTx {\n return {\n query: (build) => queryOnce((query) => build(query, objects) as never),\n };\n}\n\nexport function createMutatorTx(options: {\n transaction: Transaction;\n objects: OntologyMutatorObjects;\n primaryKeys?: Record<string, string>;\n}): OntologyMutatorTx {\n return {\n ...createReadTx(options.objects),\n mutate: new Proxy(\n {},\n {\n get: (_target, objectType) => {\n if (typeof objectType !== \"string\") {\n return undefined;\n }\n const collection = options.objects[objectType];\n if (!collection) {\n throw new Error(`Unknown object type \"${objectType}\".`);\n }\n return {\n create: (object: Record<string, unknown>) => {\n options.transaction.mutate(() => {\n collection.insert(object);\n });\n return Promise.resolve();\n },\n update: async (\n key: string | number,\n changes: Record<string, unknown> | OntologyPropertyChange[]\n ) => {\n await ensureObjectLoaded(collection, objectType, options.primaryKeys, key);\n options.transaction.mutate(() => {\n collection.update(key, (draft) => {\n applyChanges(draft, changes);\n });\n });\n },\n delete: async (key: string | number) => {\n await ensureObjectLoaded(collection, objectType, options.primaryKeys, key);\n options.transaction.mutate(() => {\n collection.delete(key);\n });\n },\n };\n },\n }\n ),\n };\n}\n\nasync function ensureObjectLoaded(\n collection: Collection<Record<string, unknown>, string | number>,\n objectType: string,\n primaryKeys: Record<string, string> | undefined,\n key: string | number\n): Promise<void> {\n if (collection.has(key)) return;\n const primaryKey = primaryKeys?.[objectType];\n if (!primaryKey) return;\n\n await queryOnce((query) =>\n query\n .from({ object: collection })\n .where(({ object }) => eq(object[primaryKey], key))\n .findOne()\n );\n}\n\nfunction applyChanges(\n object: Record<string, unknown>,\n changes: Record<string, unknown> | OntologyPropertyChange[]\n): void {\n if (Array.isArray(changes)) {\n let updated = { ...object };\n const changedProperties = new Set<string>();\n for (const change of changes) {\n const [property] = change.path;\n if (property === undefined) {\n throw new Error(\"Ontology property change paths must not be empty.\");\n }\n updated = setAtPath(updated, change.path, change.value);\n changedProperties.add(property);\n }\n for (const property of changedProperties) {\n object[property] = updated[property];\n }\n } else {\n Object.assign(object, changes);\n }\n}\n"],"mappings":";;;AASA,SAAgB,aAAa,SAAiD;CAC1E,OAAO,EACH,QAAQ,UAAU,WAAW,UAAU,MAAM,OAAO,OAAO,CAAU,EACzE;AACJ;AAEA,SAAgB,gBAAgB,SAIV;CAClB,OAAO;EACH,GAAG,aAAa,QAAQ,OAAO;EAC/B,QAAQ,IAAI,MACR,CAAC,GACD,EACI,MAAM,SAAS,eAAe;GAC1B,IAAI,OAAO,eAAe,UACtB;GAEJ,MAAM,aAAa,QAAQ,QAAQ;GACnC,IAAI,CAAC,YACD,MAAM,IAAI,MAAM,wBAAwB,WAAW,GAAG;GAE1D,OAAO;IACH,SAAS,WAAoC;KACzC,QAAQ,YAAY,aAAa;MAC7B,WAAW,OAAO,MAAM;KAC5B,CAAC;KACD,OAAO,QAAQ,QAAQ;IAC3B;IACA,QAAQ,OACJ,KACA,YACC;KACD,MAAM,mBAAmB,YAAY,YAAY,QAAQ,aAAa,GAAG;KACzE,QAAQ,YAAY,aAAa;MAC7B,WAAW,OAAO,MAAM,UAAU;OAC9B,aAAa,OAAO,OAAO;MAC/B,CAAC;KACL,CAAC;IACL;IACA,QAAQ,OAAO,QAAyB;KACpC,MAAM,mBAAmB,YAAY,YAAY,QAAQ,aAAa,GAAG;KACzE,QAAQ,YAAY,aAAa;MAC7B,WAAW,OAAO,GAAG;KACzB,CAAC;IACL;GACJ;EACJ,EACJ,CACJ;CACJ;AACJ;AAEA,eAAe,mBACX,YACA,YACA,aACA,KACa;CACb,IAAI,WAAW,IAAI,GAAG,GAAG;CACzB,MAAM,aAAa,cAAc;CACjC,IAAI,CAAC,YAAY;CAEjB,MAAM,WAAW,UACb,MACK,KAAK,EAAE,QAAQ,WAAW,CAAC,CAAC,CAC5B,OAAO,EAAE,aAAa,GAAG,OAAO,aAAa,GAAG,CAAC,CAAC,CAClD,QAAQ,CACjB;AACJ;AAEA,SAAS,aACL,QACA,SACI;CACJ,IAAI,MAAM,QAAQ,OAAO,GAAG;EACxB,IAAI,UAAU,EAAE,GAAG,OAAO;EAC1B,MAAM,oCAAoB,IAAI,IAAY;EAC1C,KAAK,MAAM,UAAU,SAAS;GAC1B,MAAM,CAAC,YAAY,OAAO;GAC1B,IAAI,aAAa,KAAA,GACb,MAAM,IAAI,MAAM,mDAAmD;GAEvE,UAAU,UAAU,SAAS,OAAO,MAAM,OAAO,KAAK;GACtD,kBAAkB,IAAI,QAAQ;EAClC;EACA,KAAK,MAAM,YAAY,mBACnB,OAAO,YAAY,QAAQ;CAEnC,OACI,OAAO,OAAO,QAAQ,OAAO;AAErC"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { OntologyIR } from "../../ir/generated/types.js";
|
|
2
|
-
import "../../ir/index.js";
|
|
3
|
-
import { OntologyObject } from "../objects/OntologyObject.js";
|
|
4
|
-
import { OntologyCollection } from "../objects/createLiveOntologyObjectCollection.js";
|
|
5
|
-
import { OntologyMutatorRegistry } from "./types.js";
|
|
6
|
-
import { Transaction } from "@tanstack/db";
|
|
7
|
-
//#region src/live/mutators/runOptimisticAction.d.ts
|
|
8
|
-
export declare function runOptimisticAction(options: {
|
|
9
|
-
transaction: Transaction;
|
|
10
|
-
ir: OntologyIR;
|
|
11
|
-
actionTypeName: string;
|
|
12
|
-
parameters: Record<string, unknown>;
|
|
13
|
-
context: Record<string, unknown>;
|
|
14
|
-
idempotencyKey: string;
|
|
15
|
-
objects: Record<string, OntologyCollection<OntologyObject>>;
|
|
16
|
-
mutators?: OntologyMutatorRegistry;
|
|
17
|
-
}): Promise<void>;
|
|
18
|
-
//#endregion
|
|
19
|
-
//# sourceMappingURL=runOptimisticAction.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runOptimisticAction.d.ts","names":[],"sources":["../../../src/live/mutators/runOptimisticAction.ts"],"mappings":";;;;;;;wBAQsB,oBAAoB;EACtC,aAAa;EACb,IAAI;EACJ;EACA,YAAY;EACZ,SAAS;EACT;EACA,SAAS,eAAe,mBAAmB;EAC3C,WAAW;IACX"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { createMutatorTx } from "./createMutatorTx.js";
|
|
2
|
-
import { applyActionLogicToMutatorTx } from "./OntologyEdits.js";
|
|
3
|
-
//#region src/live/mutators/runOptimisticAction.ts
|
|
4
|
-
async function runOptimisticAction(options) {
|
|
5
|
-
const tx = createMutatorTx({
|
|
6
|
-
transaction: options.transaction,
|
|
7
|
-
objects: options.objects,
|
|
8
|
-
primaryKeys: Object.fromEntries(options.ir.objectTypes.map((objectType) => [objectType.name, objectType.primaryKey]))
|
|
9
|
-
});
|
|
10
|
-
await applyActionLogicToMutatorTx({
|
|
11
|
-
ir: options.ir,
|
|
12
|
-
actionTypeName: options.actionTypeName,
|
|
13
|
-
parameters: options.parameters,
|
|
14
|
-
context: options.context,
|
|
15
|
-
idempotencyKey: options.idempotencyKey,
|
|
16
|
-
objects: options.objects,
|
|
17
|
-
tx
|
|
18
|
-
});
|
|
19
|
-
const mutator = options.mutators?.[options.actionTypeName];
|
|
20
|
-
if (!mutator) return;
|
|
21
|
-
await mutator({
|
|
22
|
-
tx,
|
|
23
|
-
args: options.parameters,
|
|
24
|
-
context: options.context
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
//#endregion
|
|
28
|
-
export { runOptimisticAction };
|
|
29
|
-
|
|
30
|
-
//# sourceMappingURL=runOptimisticAction.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runOptimisticAction.js","names":[],"sources":["../../../src/live/mutators/runOptimisticAction.ts"],"sourcesContent":["import { createMutatorTx } from \"./createMutatorTx.js\";\nimport { applyActionLogicToMutatorTx } from \"./OntologyEdits.js\";\nimport type { OntologyIR } from \"../../ir/index.js\";\nimport type { OntologyCollection } from \"../objects/createLiveOntologyObjectCollection.js\";\nimport type { OntologyObject } from \"../objects/OntologyObject.js\";\nimport type { OntologyMutatorRegistry } from \"./types.js\";\nimport type { Transaction } from \"@tanstack/db\";\n\nexport async function runOptimisticAction(options: {\n transaction: Transaction;\n ir: OntologyIR;\n actionTypeName: string;\n parameters: Record<string, unknown>;\n context: Record<string, unknown>;\n idempotencyKey: string;\n objects: Record<string, OntologyCollection<OntologyObject>>;\n mutators?: OntologyMutatorRegistry;\n}): Promise<void> {\n const tx = createMutatorTx({\n transaction: options.transaction,\n objects: options.objects,\n primaryKeys: Object.fromEntries(\n options.ir.objectTypes.map((objectType) => [objectType.name, objectType.primaryKey])\n ),\n });\n await applyActionLogicToMutatorTx({\n ir: options.ir,\n actionTypeName: options.actionTypeName,\n parameters: options.parameters,\n context: options.context,\n idempotencyKey: options.idempotencyKey,\n objects: options.objects,\n tx,\n });\n\n const mutator = options.mutators?.[options.actionTypeName];\n if (!mutator) return;\n\n await mutator({\n tx,\n args: options.parameters,\n context: options.context,\n });\n}\n"],"mappings":";;;AAQA,eAAsB,oBAAoB,SASxB;CACd,MAAM,KAAK,gBAAgB;EACvB,aAAa,QAAQ;EACrB,SAAS,QAAQ;EACjB,aAAa,OAAO,YAChB,QAAQ,GAAG,YAAY,KAAK,eAAe,CAAC,WAAW,MAAM,WAAW,UAAU,CAAC,CACvF;CACJ,CAAC;CACD,MAAM,4BAA4B;EAC9B,IAAI,QAAQ;EACZ,gBAAgB,QAAQ;EACxB,YAAY,QAAQ;EACpB,SAAS,QAAQ;EACjB,gBAAgB,QAAQ;EACxB,SAAS,QAAQ;EACjB;CACJ,CAAC;CAED,MAAM,UAAU,QAAQ,WAAW,QAAQ;CAC3C,IAAI,CAAC,SAAS;CAEd,MAAM,QAAQ;EACV;EACA,MAAM,QAAQ;EACd,SAAS,QAAQ;CACrB,CAAC;AACL"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OntologyObject.d.ts","names":[],"sources":["../../../src/live/objects/OntologyObject.ts"],"mappings":";YAAY,iBAAiB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { OntologyIR } from "../../ir/generated/types.js";
|
|
2
|
-
import "../../ir/index.js";
|
|
3
|
-
import { OntologyBackendAdapter } from "../OntologyBackendAdapter.js";
|
|
4
|
-
import { OntologyObject } from "./OntologyObject.js";
|
|
5
|
-
import { RuntimeAdapter } from "@party-stack/runtime";
|
|
6
|
-
import { Collection } from "@tanstack/db";
|
|
7
|
-
//#region src/live/objects/createLiveOntologyObjectCollection.d.ts
|
|
8
|
-
export type OntologyCollection<T extends OntologyObject> = Collection<T>;
|
|
9
|
-
export declare function createLiveOntologyObjectCollection(opts: {
|
|
10
|
-
ir: OntologyIR;
|
|
11
|
-
objectType: OntologyIR["objectTypes"][number];
|
|
12
|
-
backendAdapter: OntologyBackendAdapter;
|
|
13
|
-
runtime: RuntimeAdapter;
|
|
14
|
-
persistObjects: boolean;
|
|
15
|
-
}): OntologyCollection<OntologyObject>;
|
|
16
|
-
//#endregion
|
|
17
|
-
//# sourceMappingURL=createLiveOntologyObjectCollection.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createLiveOntologyObjectCollection.d.ts","names":[],"sources":["../../../src/live/objects/createLiveOntologyObjectCollection.ts"],"mappings":";;;;;;;YASY,mBAAmB,UAAU,kBAAkB,WAAW;wBAiCtD,mCAAmC;EAC/C,IAAI;EACJ,YAAY;EACZ,gBAAgB;EAChB,SAAS;EACT;IACA,mBAAmB"}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { decorateObjectAttachmentSources } from "../attachments/attachmentSources.js";
|
|
2
|
-
import { ontologyObjectCollectionId } from "./ontologyObjectCollectionId.js";
|
|
3
|
-
import { createCollectionPersistence } from "@party-stack/runtime";
|
|
4
|
-
import { BasicIndex, createCollection } from "@tanstack/db";
|
|
5
|
-
import { persistedCollectionOptions } from "@tanstack/db-sqlite-persistence-core";
|
|
6
|
-
//#region src/live/objects/createLiveOntologyObjectCollection.ts
|
|
7
|
-
function decorateCollectionSync(opts) {
|
|
8
|
-
return {
|
|
9
|
-
...opts.collectionOptions,
|
|
10
|
-
sync: {
|
|
11
|
-
...opts.collectionOptions.sync,
|
|
12
|
-
sync: (syncParams) => opts.collectionOptions.sync.sync({
|
|
13
|
-
...syncParams,
|
|
14
|
-
write: (message) => {
|
|
15
|
-
if (message.type === "delete") {
|
|
16
|
-
syncParams.write(message);
|
|
17
|
-
return;
|
|
18
|
-
}
|
|
19
|
-
syncParams.write({
|
|
20
|
-
...message,
|
|
21
|
-
value: decorateObjectAttachmentSources({
|
|
22
|
-
ir: opts.ir,
|
|
23
|
-
objectType: opts.objectType,
|
|
24
|
-
object: message.value
|
|
25
|
-
})
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
})
|
|
29
|
-
}
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
function createLiveOntologyObjectCollection(opts) {
|
|
33
|
-
const options = {
|
|
34
|
-
...decorateCollectionSync({
|
|
35
|
-
ir: opts.ir,
|
|
36
|
-
objectType: opts.objectType,
|
|
37
|
-
collectionOptions: opts.backendAdapter.getCollectionOptions(opts.objectType.name)
|
|
38
|
-
}),
|
|
39
|
-
id: ontologyObjectCollectionId(opts.runtime.owner, opts.runtime.namespace, opts.objectType.name),
|
|
40
|
-
defaultIndexType: BasicIndex,
|
|
41
|
-
autoIndex: "eager",
|
|
42
|
-
getKey: (object) => object[opts.objectType.primaryKey]
|
|
43
|
-
};
|
|
44
|
-
if (!opts.persistObjects) return createCollection(options);
|
|
45
|
-
if (!opts.runtime.persistence) throw new Error(`Live ontology object persistence requires a runtime persistence adapter (${opts.objectType.name}).`);
|
|
46
|
-
return createCollection(persistedCollectionOptions({
|
|
47
|
-
...options,
|
|
48
|
-
schemaVersion: 1,
|
|
49
|
-
persistence: createCollectionPersistence(opts.runtime.coordination, opts.runtime.persistence)
|
|
50
|
-
}));
|
|
51
|
-
}
|
|
52
|
-
//#endregion
|
|
53
|
-
export { createLiveOntologyObjectCollection };
|
|
54
|
-
|
|
55
|
-
//# sourceMappingURL=createLiveOntologyObjectCollection.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createLiveOntologyObjectCollection.js","names":[],"sources":["../../../src/live/objects/createLiveOntologyObjectCollection.ts"],"sourcesContent":["import { createCollectionPersistence, type RuntimeAdapter } from \"@party-stack/runtime\";\nimport { BasicIndex, createCollection, type Collection } from \"@tanstack/db\";\nimport { persistedCollectionOptions } from \"@tanstack/db-sqlite-persistence-core\";\nimport { decorateObjectAttachmentSources } from \"../attachments/attachmentSources.js\";\nimport { ontologyObjectCollectionId } from \"./ontologyObjectCollectionId.js\";\nimport type { OntologyIR } from \"../../ir/index.js\";\nimport type { OntologyBackendAdapter } from \"../OntologyBackendAdapter.js\";\nimport type { OntologyObject } from \"./OntologyObject.js\";\n\nexport type OntologyCollection<T extends OntologyObject> = Collection<T>;\n\nfunction decorateCollectionSync(opts: {\n ir: OntologyIR;\n objectType: OntologyIR[\"objectTypes\"][number];\n collectionOptions: ReturnType<OntologyBackendAdapter[\"getCollectionOptions\"]>;\n}): ReturnType<OntologyBackendAdapter[\"getCollectionOptions\"]> {\n return {\n ...opts.collectionOptions,\n sync: {\n ...opts.collectionOptions.sync,\n sync: (syncParams) =>\n opts.collectionOptions.sync.sync({\n ...syncParams,\n write: (message) => {\n if (message.type === \"delete\") {\n syncParams.write(message);\n return;\n }\n syncParams.write({\n ...message,\n value: decorateObjectAttachmentSources({\n ir: opts.ir,\n objectType: opts.objectType,\n object: message.value,\n }),\n });\n },\n }),\n },\n };\n}\n\nexport function createLiveOntologyObjectCollection(opts: {\n ir: OntologyIR;\n objectType: OntologyIR[\"objectTypes\"][number];\n backendAdapter: OntologyBackendAdapter;\n runtime: RuntimeAdapter;\n persistObjects: boolean;\n}): OntologyCollection<OntologyObject> {\n const collectionOptions = decorateCollectionSync({\n ir: opts.ir,\n objectType: opts.objectType,\n collectionOptions: opts.backendAdapter.getCollectionOptions(opts.objectType.name),\n });\n const options = {\n ...collectionOptions,\n id: ontologyObjectCollectionId(opts.runtime.owner, opts.runtime.namespace, opts.objectType.name),\n defaultIndexType: BasicIndex,\n autoIndex: \"eager\" as const,\n getKey: (object: OntologyObject) =>\n (object as Record<string, string | number>)[opts.objectType.primaryKey] as string | number,\n };\n if (!opts.persistObjects) {\n return createCollection(options);\n }\n if (!opts.runtime.persistence) {\n throw new Error(\n `Live ontology object persistence requires a runtime persistence adapter (${opts.objectType.name}).`\n );\n }\n\n return createCollection(\n persistedCollectionOptions<OntologyObject, string | number>({\n ...options,\n schemaVersion: 1,\n persistence: createCollectionPersistence(opts.runtime.coordination, opts.runtime.persistence),\n })\n );\n}\n"],"mappings":";;;;;;AAWA,SAAS,uBAAuB,MAI+B;CAC3D,OAAO;EACH,GAAG,KAAK;EACR,MAAM;GACF,GAAG,KAAK,kBAAkB;GAC1B,OAAO,eACH,KAAK,kBAAkB,KAAK,KAAK;IAC7B,GAAG;IACH,QAAQ,YAAY;KAChB,IAAI,QAAQ,SAAS,UAAU;MAC3B,WAAW,MAAM,OAAO;MACxB;KACJ;KACA,WAAW,MAAM;MACb,GAAG;MACH,OAAO,gCAAgC;OACnC,IAAI,KAAK;OACT,YAAY,KAAK;OACjB,QAAQ,QAAQ;MACpB,CAAC;KACL,CAAC;IACL;GACJ,CAAC;EACT;CACJ;AACJ;AAEA,SAAgB,mCAAmC,MAMZ;CAMnC,MAAM,UAAU;EACZ,GANsB,uBAAuB;GAC7C,IAAI,KAAK;GACT,YAAY,KAAK;GACjB,mBAAmB,KAAK,eAAe,qBAAqB,KAAK,WAAW,IAAI;EACpF,CAEuB;EACnB,IAAI,2BAA2B,KAAK,QAAQ,OAAO,KAAK,QAAQ,WAAW,KAAK,WAAW,IAAI;EAC/F,kBAAkB;EAClB,WAAW;EACX,SAAS,WACJ,OAA2C,KAAK,WAAW;CACpE;CACA,IAAI,CAAC,KAAK,gBACN,OAAO,iBAAiB,OAAO;CAEnC,IAAI,CAAC,KAAK,QAAQ,aACd,MAAM,IAAI,MACN,4EAA4E,KAAK,WAAW,KAAK,GACrG;CAGJ,OAAO,iBACH,2BAA4D;EACxD,GAAG;EACH,eAAe;EACf,aAAa,4BAA4B,KAAK,QAAQ,cAAc,KAAK,QAAQ,WAAW;CAChG,CAAC,CACL;AACJ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ontologyObjectCollectionId.d.ts","names":[],"sources":["../../../src/live/objects/ontologyObjectCollectionId.ts"],"mappings":";wBAAgB,2BAA2B,eAAe,oBAAoB"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
//#region src/live/objects/ontologyObjectCollectionId.ts
|
|
2
|
-
function ontologyObjectCollectionId(owner, ontologyId, objectType) {
|
|
3
|
-
return `party-stack:${owner}:${ontologyId}:objects:${objectType}`;
|
|
4
|
-
}
|
|
5
|
-
//#endregion
|
|
6
|
-
export { ontologyObjectCollectionId };
|
|
7
|
-
|
|
8
|
-
//# sourceMappingURL=ontologyObjectCollectionId.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ontologyObjectCollectionId.js","names":[],"sources":["../../../src/live/objects/ontologyObjectCollectionId.ts"],"sourcesContent":["export function ontologyObjectCollectionId(owner: string, ontologyId: string, objectType: string): string {\n return `party-stack:${owner}:${ontologyId}:objects:${objectType}`;\n}\n"],"mappings":";AAAA,SAAgB,2BAA2B,OAAe,YAAoB,YAA4B;CACtG,OAAO,eAAe,MAAM,GAAG,WAAW,WAAW;AACzD"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { OntologyOutbox, OntologyOutboxEntry } from "./types.js";
|
|
2
|
-
import { OutboxProjection } from "./projectionManager.js";
|
|
3
|
-
import { RuntimeAdapter } from "@party-stack/runtime";
|
|
4
|
-
import { Collection } from "@tanstack/db";
|
|
5
|
-
import { Operation, Task } from "effection";
|
|
6
|
-
import { ConnectionMonitor } from "@party-stack/connections";
|
|
7
|
-
//#region src/live/outbox/createOntologyOutbox.d.ts
|
|
8
|
-
export interface CreateOntologyOutboxOptions {
|
|
9
|
-
runtime: RuntimeAdapter;
|
|
10
|
-
execute(entry: OntologyOutboxEntry): Promise<unknown>;
|
|
11
|
-
project?(entry: OntologyOutboxEntry): Promise<OutboxProjection | undefined>;
|
|
12
|
-
failureStrategy?: "pause" | "discard-all";
|
|
13
|
-
maxRetries?: number;
|
|
14
|
-
connection?: ConnectionMonitor;
|
|
15
|
-
}
|
|
16
|
-
export declare function useOntologyOutbox(options: CreateOntologyOutboxOptions, collection?: Collection<OntologyOutboxEntry, string>): Operation<OntologyOutbox>;
|
|
17
|
-
export interface StartedOntologyOutbox extends OntologyOutbox {
|
|
18
|
-
readonly task: Task<void>;
|
|
19
|
-
}
|
|
20
|
-
export declare function createOntologyOutbox(options: CreateOntologyOutboxOptions): StartedOntologyOutbox;
|
|
21
|
-
//#endregion
|
|
22
|
-
export type { OutboxProjection };
|
|
23
|
-
//# sourceMappingURL=createOntologyOutbox.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createOntologyOutbox.d.ts","names":[],"sources":["../../../src/live/outbox/createOntologyOutbox.ts"],"mappings":";;;;;;;iBA4CiB;EACb,SAAS;EACT,QAAQ,OAAO,sBAAsB;EACrC,SAAS,OAAO,sBAAsB,QAAQ;EAC9C;EACA;EACA,aAAa;;wBA+DD,kBACZ,SAAS,6BACT,aAAY,WAAW,+BACxB,UAAU;iBAuQI,8BAA8B;WAClC,MAAM;;wBAGH,qBAAqB,SAAS,8BAA8B"}
|