@party-stack/ontology 0.20.0 → 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 +29 -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 +3 -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 -30
- 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 +53 -18
- 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 -18
- 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 -223
- 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 -413
- 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 -104
- 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 -24
- 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 -69
- 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 -50
- 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
package/lib/infer.js
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
//#region src/infer.ts
|
|
2
|
-
function defineOntology(ontology) {
|
|
3
|
-
return ontology;
|
|
4
|
-
}
|
|
5
|
-
function defineType(type) {
|
|
6
|
-
return type;
|
|
7
|
-
}
|
|
8
|
-
function defineNamedType(type) {
|
|
9
|
-
return type;
|
|
10
|
-
}
|
|
11
|
-
//#endregion
|
|
12
|
-
export { defineNamedType, defineOntology, defineType };
|
|
13
|
-
|
|
14
|
-
//# sourceMappingURL=infer.js.map
|
package/lib/infer.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"infer.js","names":[],"sources":["../src/infer.ts"],"sourcesContent":["import type { ImageMediaType, NamedTypeDef, OntologyIR, TypeDef } from \"./ir/generated/types.js\";\nimport type { OntologyDefinition } from \"./live/LiveOntology.js\";\nimport type {\n ActionTypeName,\n ActionTypes,\n ArrayElement,\n NamedTypes,\n ObjectTypeName,\n ObjectTypes,\n QueryFunctionTypeName,\n QueryFunctionTypes,\n} from \"./utils/typeNames.js\";\nimport type {\n attachment,\n date,\n double,\n float,\n geopoint,\n integer,\n Result,\n timestamp,\n} from \"./utils/values.js\";\n\nexport type ReadonlyDeep<T> = T extends (...args: never[]) => unknown\n ? T\n : T extends readonly (infer Element)[]\n ? readonly ReadonlyDeep<Element>[]\n : T extends object\n ? { readonly [K in keyof T]: ReadonlyDeep<T[K]> }\n : T;\n\nexport type MutableDeep<T> = T extends (...args: never[]) => unknown\n ? T\n : T extends readonly (infer Element)[]\n ? Array<MutableDeep<Element>>\n : T extends object\n ? { -readonly [K in keyof T]: MutableDeep<T[K]> }\n : T;\n\ntype FlattenObject<T> = { [K in keyof T]: T[K] } & {};\n\ntype TypeKind<Type> = Type extends { readonly kind: infer Kind extends string } ? Kind : never;\n\ntype TypeValue<Type> = Type extends { readonly value: infer Value } ? Value : never;\n\ntype NamedTypeByName<Ontology, Name extends PropertyKey> = Extract<\n NamedTypes<Ontology>,\n { readonly name: Name }\n>;\n\ntype ObjectTypeByName<Ontology, Name extends PropertyKey> = Extract<\n ObjectTypes<Ontology>,\n { readonly name: Name }\n>;\n\ntype ActionTypeByName<Ontology, Name extends PropertyKey> = Extract<\n ActionTypes<Ontology>,\n { readonly name: Name }\n>;\n\ntype QueryFunctionTypeByName<Ontology, Name extends PropertyKey> = Extract<\n QueryFunctionTypes<Ontology>,\n { readonly name: Name }\n>;\n\ntype ObjectTypeProperties<ObjectType> = ObjectType extends { readonly properties: infer Properties }\n ? Properties\n : never;\n\ntype InferString<Value> = Value extends { readonly constraint?: infer Constraint }\n ? NonNullable<Constraint> extends {\n readonly kind: \"enum\";\n readonly value: { readonly options: infer Options };\n }\n ? ArrayElement<Options> extends { readonly value: infer OptionValue extends string }\n ? OptionValue\n : never\n : string\n : string;\n\ntype StructField<Fields> = ArrayElement<Fields>;\n\ntype FieldName<Field> = Field extends { readonly name: infer Name extends PropertyKey } ? Name : never;\n\ntype FieldByName<Fields, Name extends PropertyKey> = Extract<StructField<Fields>, { readonly name: Name }>;\n\ntype FieldType<Fields, Name extends PropertyKey> =\n FieldByName<Fields, Name> extends { readonly type: infer Type } ? Type : never;\n\ntype RequiredFieldNames<Fields> =\n StructField<Fields> extends infer Field\n ? Field extends { readonly type: infer Type }\n ? Type extends { readonly kind: \"optional\" }\n ? never\n : FieldName<Field>\n : never\n : never;\n\ntype OptionalFieldNames<Fields> =\n StructField<Fields> extends infer Field\n ? Field extends { readonly type: infer Type }\n ? Type extends { readonly kind: \"optional\" }\n ? FieldName<Field>\n : never\n : never\n : never;\n\ntype InferStructFields<Fields, Ontology> =\n StructField<Fields> extends never\n ? Record<never, never>\n : FlattenObject<\n {\n [Name in RequiredFieldNames<Fields>]: InferType<FieldType<Fields, Name>, Ontology>;\n } & {\n [Name in OptionalFieldNames<Fields>]?: TypeValue<FieldType<Fields, Name>> extends {\n readonly type: infer Inner;\n }\n ? InferType<Inner, Ontology>\n : never;\n }\n >;\n\ntype InferUnionVariant<Variant, Ontology> = Variant extends {\n readonly name: infer Name extends string;\n readonly type: infer Type;\n}\n ? { kind: Name; value: InferType<Type, Ontology> }\n : never;\n\ntype ObjectPrimaryKey<ObjectType> = ObjectType extends {\n readonly primaryKey: infer PrimaryKey extends PropertyKey;\n}\n ? PrimaryKey\n : never;\n\ntype InferObjectReference<Value, Ontology> = Value extends {\n readonly objectType: infer Name extends PropertyKey;\n}\n ? InferType<\n FieldType<\n ObjectTypeProperties<ObjectTypeByName<Ontology, Name>>,\n ObjectPrimaryKey<ObjectTypeByName<Ontology, Name>>\n >,\n Ontology\n >\n : never;\n\ntype InferImageAttachment<Value> = Value extends { readonly mediaTypes: infer MediaTypes }\n ? attachment<Extract<ArrayElement<MediaTypes>, string>>\n : attachment<ImageMediaType>;\n\ntype InferAttachment<Value> = Value extends {\n readonly constraint: {\n readonly content: infer Content;\n };\n}\n ? Content extends {\n readonly kind: \"image\";\n readonly value: infer ImageConstraint;\n }\n ? InferImageAttachment<ImageConstraint>\n : attachment\n : attachment;\n\ntype InferByKind<Type, Ontology> = {\n string: InferString<TypeValue<Type>>;\n boolean: boolean;\n integer: integer;\n float: float;\n double: double;\n date: date;\n timestamp: timestamp;\n geopoint: geopoint;\n attachment: InferAttachment<TypeValue<Type>>;\n objectReference: InferObjectReference<TypeValue<Type>, Ontology>;\n unknown: unknown;\n list: TypeValue<Type> extends { readonly elementType: infer ElementType }\n ? Array<InferType<ElementType, Ontology>>\n : never;\n map: TypeValue<Type> extends { readonly valueType: infer ValueType }\n ? Record<string, InferType<ValueType, Ontology>>\n : never;\n struct: TypeValue<Type> extends { readonly fields: infer Fields }\n ? InferStructFields<Fields, Ontology>\n : never;\n union: TypeValue<Type> extends { readonly variants: infer Variants }\n ? InferUnionVariant<ArrayElement<Variants>, Ontology>\n : never;\n optional: TypeValue<Type> extends { readonly type: infer Inner }\n ? InferType<Inner, Ontology> | undefined\n : never;\n result: TypeValue<Type> extends { readonly okType: infer OkType; readonly errType: infer ErrType }\n ? Result<InferType<OkType, Ontology>, InferType<ErrType, Ontology>>\n : never;\n ref: TypeValue<Type> extends { readonly name: infer Name extends PropertyKey }\n ? InferNamedTypeByName<Ontology, Name>\n : never;\n};\n\nexport type InferType<Type, Ontology = never> =\n TypeKind<Type> extends keyof InferByKind<Type, Ontology>\n ? InferByKind<Type, Ontology>[TypeKind<Type>]\n : never;\n\ntype InferNamedTypeByName<Ontology, Name extends PropertyKey> =\n NamedTypeByName<Ontology, Name> extends { readonly type: infer Type }\n ? InferType<Type, Ontology>\n : ObjectTypeByName<Ontology, Name> extends { readonly properties: infer Properties }\n ? InferStructFields<Properties, Ontology>\n : never;\n\nexport type InferNamedType<Type, Ontology = never> = Type extends { readonly type: infer TypeDef }\n ? InferType<TypeDef, Ontology>\n : never;\n\ntype InferObjectType<ObjectType, Ontology> = ObjectType extends { readonly properties: infer Properties }\n ? InferStructFields<Properties, Ontology>\n : never;\n\ntype ActionParameters<ActionType> = ActionType extends { readonly parameters: infer Parameters }\n ? Parameters\n : never;\n\ntype ActionParameter<Parameters> = ArrayElement<Parameters>;\n\ntype ActionParameterName<Parameter> = Parameter extends { readonly name: infer Name extends PropertyKey }\n ? Name\n : never;\n\ntype ActionParameterByName<Parameters, Name extends PropertyKey> = Extract<\n ActionParameter<Parameters>,\n { readonly name: Name }\n>;\n\ntype ActionParameterType<Parameters, Name extends PropertyKey> =\n ActionParameterByName<Parameters, Name> extends { readonly type: infer Type } ? Type : never;\n\ntype RequiredActionParameterNames<Parameters> =\n ActionParameter<Parameters> extends infer Parameter\n ? Parameter extends { readonly type: infer Type }\n ? Type extends { readonly kind: \"optional\" }\n ? never\n : Parameter extends { readonly defaultValue: unknown }\n ? never\n : ActionParameterName<Parameter>\n : never\n : never;\n\ntype OptionalActionParameterNames<Parameters> =\n ActionParameter<Parameters> extends infer Parameter\n ? Parameter extends { readonly type: infer Type }\n ? Type extends { readonly kind: \"optional\" }\n ? ActionParameterName<Parameter>\n : Parameter extends { readonly defaultValue: unknown }\n ? ActionParameterName<Parameter>\n : never\n : never\n : never;\n\ntype InferActionParameter<Parameters, Name extends PropertyKey, Ontology> =\n ActionParameterType<Parameters, Name> extends infer Type\n ? Type extends { readonly kind: \"optional\"; readonly value: { readonly type: infer Inner } }\n ? InferType<Inner, Ontology> | null\n : InferType<Type, Ontology>\n : never;\n\ntype InferActionParameters<Parameters, Ontology> =\n ActionParameter<Parameters> extends never\n ? Record<never, never>\n : FlattenObject<\n {\n [Name in RequiredActionParameterNames<Parameters>]: InferActionParameter<\n Parameters,\n Name,\n Ontology\n >;\n } & {\n [Name in OptionalActionParameterNames<Parameters>]?: InferActionParameter<\n Parameters,\n Name,\n Ontology\n >;\n }\n >;\n\ntype QueryParameters<QueryFunctionType> = QueryFunctionType extends { readonly parameters: infer Parameters }\n ? Parameters\n : never;\n\ntype QueryReturnType<QueryFunctionType> = QueryFunctionType extends { readonly returnType: infer ReturnType }\n ? ReturnType\n : never;\n\ntype QueryParameter<Parameters> = ArrayElement<Parameters>;\n\ntype QueryParameterName<Parameter> = Parameter extends { readonly name: infer Name extends PropertyKey }\n ? Name\n : never;\n\ntype QueryParameterByName<Parameters, Name extends PropertyKey> = Extract<\n QueryParameter<Parameters>,\n { readonly name: Name }\n>;\n\ntype QueryParameterType<Parameters, Name extends PropertyKey> =\n QueryParameterByName<Parameters, Name> extends { readonly type: infer Type } ? Type : never;\n\ntype RequiredQueryParameterNames<Parameters> =\n QueryParameter<Parameters> extends infer Parameter\n ? Parameter extends { readonly type: infer Type }\n ? Type extends { readonly kind: \"optional\" }\n ? never\n : QueryParameterName<Parameter>\n : never\n : never;\n\ntype OptionalQueryParameterNames<Parameters> =\n QueryParameter<Parameters> extends infer Parameter\n ? Parameter extends { readonly type: infer Type }\n ? Type extends { readonly kind: \"optional\" }\n ? QueryParameterName<Parameter>\n : never\n : never\n : never;\n\ntype InferQueryParameter<Parameters, Name extends PropertyKey, Ontology> =\n QueryParameterType<Parameters, Name> extends infer Type\n ? Type extends { readonly kind: \"optional\"; readonly value: { readonly type: infer Inner } }\n ? InferType<Inner, Ontology>\n : InferType<Type, Ontology>\n : never;\n\ntype InferQueryParameters<Parameters, Ontology> =\n QueryParameter<Parameters> extends never\n ? Record<never, never>\n : FlattenObject<\n {\n [Name in RequiredQueryParameterNames<Parameters>]: InferQueryParameter<\n Parameters,\n Name,\n Ontology\n >;\n } & {\n [Name in OptionalQueryParameterNames<Parameters>]?: InferQueryParameter<\n Parameters,\n Name,\n Ontology\n >;\n }\n >;\n\nexport type InferOntology<Ontology> = {\n context: Ontology extends { readonly contextType: infer ContextType }\n ? InferType<ContextType, Ontology>\n : Record<string, unknown>;\n objectTypes: {\n [Name in ObjectTypeName<Ontology>]: InferObjectType<ObjectTypeByName<Ontology, Name>, Ontology>;\n };\n actionTypes: {\n [Name in ActionTypeName<Ontology>]: {\n parameters: InferActionParameters<ActionParameters<ActionTypeByName<Ontology, Name>>, Ontology>;\n };\n };\n queryFunctionTypes: {\n [Name in QueryFunctionTypeName<Ontology>]: {\n parameters: InferQueryParameters<\n QueryParameters<QueryFunctionTypeByName<Ontology, Name>>,\n Ontology\n >;\n returnType: InferType<QueryReturnType<QueryFunctionTypeByName<Ontology, Name>>, Ontology>;\n };\n };\n} & OntologyDefinition;\n\nexport type ConstOntologyIR = ReadonlyDeep<OntologyIR>;\nexport type ConstTypeDef = ReadonlyDeep<TypeDef>;\nexport type ConstNamedTypeDef = ReadonlyDeep<NamedTypeDef>;\n\nexport type Infer<\n Input extends ConstOntologyIR | ConstNamedTypeDef | ConstTypeDef,\n Ontology extends ConstOntologyIR = Extract<Input, ConstOntologyIR>,\n> = Input extends ConstOntologyIR\n ? InferOntology<Input>\n : Input extends ConstNamedTypeDef\n ? InferNamedType<Input, Ontology>\n : Input extends ConstTypeDef\n ? InferType<Input, Ontology>\n : never;\n\nexport function defineOntology<const Ontology extends ConstOntologyIR>(\n ontology: Ontology\n): MutableDeep<Ontology> {\n return ontology as MutableDeep<Ontology>;\n}\n\nexport function defineType<const Type extends ConstTypeDef>(type: Type): MutableDeep<Type> {\n return type as MutableDeep<Type>;\n}\n\nexport function defineNamedType<const Type extends ConstNamedTypeDef>(type: Type): MutableDeep<Type> {\n return type as MutableDeep<Type>;\n}\n"],"mappings":";AAqYA,SAAgB,eACZ,UACqB;CACrB,OAAO;AACX;AAEA,SAAgB,WAA4C,MAA+B;CACvF,OAAO;AACX;AAEA,SAAgB,gBAAsD,MAA+B;CACjG,OAAO;AACX"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { OntologyIR } from "../ir/generated/types.js";
|
|
2
|
-
import "../ir/index.js";
|
|
3
|
-
import { OntologyConfiguration } from "./types.js";
|
|
4
|
-
//#region src/installation/createMetaOntologyConfiguration.d.ts
|
|
5
|
-
export type MetaOntologyConfigurationOptions = Omit<OntologyConfiguration, "ir"> | {
|
|
6
|
-
ir: OntologyIR;
|
|
7
|
-
};
|
|
8
|
-
export declare function createMetaOntologyConfiguration(options: MetaOntologyConfigurationOptions): OntologyConfiguration;
|
|
9
|
-
//#endregion
|
|
10
|
-
//# sourceMappingURL=createMetaOntologyConfiguration.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createMetaOntologyConfiguration.d.ts","names":[],"sources":["../../src/installation/createMetaOntologyConfiguration.ts"],"mappings":";;;;YAKY,mCAAmC,KAAK;EAAiC,IAAI;;wBAEzE,gCACZ,SAAS,mCACV"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { createLocalMetaOntologyBackendAdapter } from "../meta/createLocalMetaOntologyBackendAdapter.js";
|
|
2
|
-
import ontology_default from "../meta/ontology.js";
|
|
3
|
-
//#region src/installation/createMetaOntologyConfiguration.ts
|
|
4
|
-
function createMetaOntologyConfiguration(options) {
|
|
5
|
-
return {
|
|
6
|
-
..."ir" in options ? {
|
|
7
|
-
backend: () => createLocalMetaOntologyBackendAdapter(options.ir),
|
|
8
|
-
persistObjects: false
|
|
9
|
-
} : options,
|
|
10
|
-
ir: ontology_default
|
|
11
|
-
};
|
|
12
|
-
}
|
|
13
|
-
//#endregion
|
|
14
|
-
export { createMetaOntologyConfiguration };
|
|
15
|
-
|
|
16
|
-
//# sourceMappingURL=createMetaOntologyConfiguration.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createMetaOntologyConfiguration.js","names":["metaOntology"],"sources":["../../src/installation/createMetaOntologyConfiguration.ts"],"sourcesContent":["import { createLocalMetaOntologyBackendAdapter } from \"../meta/createLocalMetaOntologyBackendAdapter.js\";\nimport metaOntology from \"../meta/ontology.js\";\nimport type { OntologyIR } from \"../ir/index.js\";\nimport type { OntologyConfiguration } from \"./types.js\";\n\nexport type MetaOntologyConfigurationOptions = Omit<OntologyConfiguration, \"ir\"> | { ir: OntologyIR };\n\nexport function createMetaOntologyConfiguration(\n options: MetaOntologyConfigurationOptions\n): OntologyConfiguration {\n return {\n ...(\"ir\" in options\n ? {\n backend: () => createLocalMetaOntologyBackendAdapter(options.ir),\n persistObjects: false,\n }\n : options),\n ir: metaOntology,\n };\n}\n"],"mappings":";;;AAOA,SAAgB,gCACZ,SACqB;CACrB,OAAO;EACH,GAAI,QAAQ,UACN;GACI,eAAe,sCAAsC,QAAQ,EAAE;GAC/D,gBAAgB;EACpB,IACA;EACN,IAAIA;CACR;AACJ"}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { CreateOntologyBackendInstallationOptions, OntologyBackendInstallation } from "./types.js";
|
|
2
|
-
//#region src/installation/createOntologyBackendInstallation.d.ts
|
|
3
|
-
export declare function createOntologyBackendInstallation<AuthenticationClient extends object = object>(options: CreateOntologyBackendInstallationOptions<AuthenticationClient>): Promise<OntologyBackendInstallation<AuthenticationClient>>;
|
|
4
|
-
//#endregion
|
|
5
|
-
//# sourceMappingURL=createOntologyBackendInstallation.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createOntologyBackendInstallation.d.ts","names":[],"sources":["../../src/installation/createOntologyBackendInstallation.ts"],"mappings":";;wBAqDsB,kCAAkC,8CACpD,SAAS,yCAAyC,wBACnD,QAAQ,4BAA4B"}
|
|
@@ -1,221 +0,0 @@
|
|
|
1
|
-
import { createLiveOntology } from "../live/LiveOntology.js";
|
|
2
|
-
import { createMetaOntologyConfiguration } from "./createMetaOntologyConfiguration.js";
|
|
3
|
-
import { createLocalCollection } from "@party-stack/runtime";
|
|
4
|
-
import { createConnectionManager, createConnectionMonitor } from "@party-stack/connections";
|
|
5
|
-
//#region src/installation/createOntologyBackendInstallation.ts
|
|
6
|
-
function scope(value) {
|
|
7
|
-
return encodeURIComponent(value);
|
|
8
|
-
}
|
|
9
|
-
function ontologyKey(userId, ontologyId) {
|
|
10
|
-
return `${scope(userId)}:${scope(ontologyId)}`;
|
|
11
|
-
}
|
|
12
|
-
function metaOntologyKey(userId, ontologyId) {
|
|
13
|
-
return `${ontologyKey(userId, ontologyId)}:meta`;
|
|
14
|
-
}
|
|
15
|
-
function liveOntologyNamespace(installationId, ontologyId) {
|
|
16
|
-
return `${scope(installationId)}:${scope(ontologyId)}`;
|
|
17
|
-
}
|
|
18
|
-
function isActiveConnection(connection) {
|
|
19
|
-
return connection?.state.status === "active";
|
|
20
|
-
}
|
|
21
|
-
function routeFor(routes, ontologyId) {
|
|
22
|
-
const matching = routes.filter((route) => route.matches(ontologyId));
|
|
23
|
-
if (matching.length !== 1) throw new Error(matching.length === 0 ? `No ontology route matched "${ontologyId}".` : `Multiple ontology routes matched "${ontologyId}".`);
|
|
24
|
-
return matching[0];
|
|
25
|
-
}
|
|
26
|
-
async function createOntologyBackendInstallation(options) {
|
|
27
|
-
const installationRuntime = await options.runtime("installation", scope(options.installationId));
|
|
28
|
-
let connectionManager;
|
|
29
|
-
try {
|
|
30
|
-
connectionManager = await createConnectionManager({
|
|
31
|
-
installationId: options.installationId,
|
|
32
|
-
runtime: installationRuntime,
|
|
33
|
-
adapter: options.connections
|
|
34
|
-
});
|
|
35
|
-
} catch (error) {
|
|
36
|
-
await installationRuntime.cleanup?.();
|
|
37
|
-
throw error;
|
|
38
|
-
}
|
|
39
|
-
const partitions = createLocalCollection({
|
|
40
|
-
name: "ontology-partitions",
|
|
41
|
-
getKey: (partition) => partition.id,
|
|
42
|
-
runtime: installationRuntime,
|
|
43
|
-
schemaVersion: 1
|
|
44
|
-
});
|
|
45
|
-
try {
|
|
46
|
-
await partitions.preload();
|
|
47
|
-
} catch (error) {
|
|
48
|
-
await partitions.cleanup();
|
|
49
|
-
await connectionManager.cleanup();
|
|
50
|
-
await installationRuntime.cleanup?.();
|
|
51
|
-
throw error;
|
|
52
|
-
}
|
|
53
|
-
const live = /* @__PURE__ */ new Map();
|
|
54
|
-
const opening = /* @__PURE__ */ new Map();
|
|
55
|
-
let disposed = false;
|
|
56
|
-
let cleanupPromise;
|
|
57
|
-
const closeKey = async (key) => {
|
|
58
|
-
const pending = opening.get(key);
|
|
59
|
-
if (pending) await pending.catch(() => void 0);
|
|
60
|
-
const ontology = live.get(key);
|
|
61
|
-
if (!ontology) return;
|
|
62
|
-
live.delete(key);
|
|
63
|
-
await ontology.cleanup();
|
|
64
|
-
};
|
|
65
|
-
const close = (userId, ontologyId) => closeKey(ontologyKey(userId, ontologyId));
|
|
66
|
-
const recordPartition = async (partition) => {
|
|
67
|
-
await (partitions.get(partition.id) ? partitions.update(partition.id, { optimistic: false }, (draft) => {
|
|
68
|
-
Object.assign(draft, partition);
|
|
69
|
-
}) : partitions.insert(partition, { optimistic: false })).isPersisted.promise;
|
|
70
|
-
};
|
|
71
|
-
const removePartitionRecord = async (id) => {
|
|
72
|
-
if (!partitions.get(id)) return;
|
|
73
|
-
await partitions.delete(id, { optimistic: false }).isPersisted.promise;
|
|
74
|
-
};
|
|
75
|
-
const destroyPartition = async (partition) => {
|
|
76
|
-
const pending = opening.get(partition.id);
|
|
77
|
-
if (pending) await pending.catch(() => void 0);
|
|
78
|
-
const ontology = live.get(partition.id);
|
|
79
|
-
live.delete(partition.id);
|
|
80
|
-
if (ontology) await ontology.destroy();
|
|
81
|
-
else {
|
|
82
|
-
const namespace = `${liveOntologyNamespace(options.installationId, partition.ontologyId)}${partition.meta ? ":meta" : ""}`;
|
|
83
|
-
const runtime = await options.runtime(partition.userId, namespace);
|
|
84
|
-
if (runtime.destroy) await runtime.destroy();
|
|
85
|
-
else await runtime.cleanup?.();
|
|
86
|
-
}
|
|
87
|
-
await removePartitionRecord(partition.id);
|
|
88
|
-
};
|
|
89
|
-
const destroyUserPartitions = async (userId) => {
|
|
90
|
-
const prefix = `${scope(userId)}:`;
|
|
91
|
-
await Promise.allSettled([...opening].filter(([key]) => key.startsWith(prefix)).map(([, pending]) => pending));
|
|
92
|
-
await Promise.all([...partitions.values()].filter((partition) => partition.userId === userId).map(destroyPartition));
|
|
93
|
-
};
|
|
94
|
-
const closeUserOntologies = async (userId) => {
|
|
95
|
-
const prefix = `${scope(userId)}:`;
|
|
96
|
-
const toClose = [.../* @__PURE__ */ new Set([...live.keys(), ...opening.keys()])].filter((key) => key.startsWith(prefix));
|
|
97
|
-
await Promise.all(toClose.map(closeKey));
|
|
98
|
-
};
|
|
99
|
-
const openConfiguredOntology = async (openOptions) => {
|
|
100
|
-
const { userId, ontologyId, meta } = openOptions;
|
|
101
|
-
if (disposed) throw new Error(`Backend installation "${options.installationId}" is closed.`);
|
|
102
|
-
const current = connectionManager.connections.get(userId);
|
|
103
|
-
if (!isActiveConnection(current)) throw new Error(`User "${userId}" is not connected to backend installation "${options.installationId}".`);
|
|
104
|
-
const egress = connectionManager.egress(userId);
|
|
105
|
-
if (!egress) throw new Error(`Connection egress for user "${userId}" is unavailable.`);
|
|
106
|
-
const key = meta ? metaOntologyKey(userId, ontologyId) : ontologyKey(userId, ontologyId);
|
|
107
|
-
const existing = live.get(key);
|
|
108
|
-
if (existing) return existing;
|
|
109
|
-
const pending = opening.get(key);
|
|
110
|
-
if (pending) return pending;
|
|
111
|
-
const open = (async () => {
|
|
112
|
-
const route = routeFor(options.routes, ontologyId);
|
|
113
|
-
const configureOptions = {
|
|
114
|
-
connection: current,
|
|
115
|
-
egress,
|
|
116
|
-
ontologyId
|
|
117
|
-
};
|
|
118
|
-
let configured;
|
|
119
|
-
if (meta) {
|
|
120
|
-
if (route.configureMeta) configured = await route.configureMeta(configureOptions);
|
|
121
|
-
else if (route.configure) {
|
|
122
|
-
const application = await route.configure(configureOptions);
|
|
123
|
-
configured = createMetaOntologyConfiguration({ ir: application.ir });
|
|
124
|
-
} else throw new Error(`Ontology route for "${ontologyId}" does not support metadata.`);
|
|
125
|
-
} else {
|
|
126
|
-
if (!route.configure) throw new Error(`Ontology route for "${ontologyId}" does not support opening the application ontology.`);
|
|
127
|
-
configured = await route.configure(configureOptions);
|
|
128
|
-
}
|
|
129
|
-
const context = {
|
|
130
|
-
...options.createContext?.(userId, ontologyId),
|
|
131
|
-
...configured.context,
|
|
132
|
-
user: userId
|
|
133
|
-
};
|
|
134
|
-
const runtimeNamespace = `${liveOntologyNamespace(options.installationId, ontologyId)}${meta ? ":meta" : ""}`;
|
|
135
|
-
await recordPartition({
|
|
136
|
-
id: key,
|
|
137
|
-
userId,
|
|
138
|
-
ontologyId,
|
|
139
|
-
meta: meta ? true : void 0
|
|
140
|
-
});
|
|
141
|
-
const ontology = await createLiveOntology({
|
|
142
|
-
id: runtimeNamespace,
|
|
143
|
-
ir: configured.ir,
|
|
144
|
-
backend: configured.backend,
|
|
145
|
-
runtime: options.runtime,
|
|
146
|
-
context,
|
|
147
|
-
persistObjects: configured.persistObjects,
|
|
148
|
-
writes: configured.writes,
|
|
149
|
-
connection: createConnectionMonitor(connectionManager, userId)
|
|
150
|
-
});
|
|
151
|
-
if (disposed) {
|
|
152
|
-
await ontology.cleanup();
|
|
153
|
-
throw new Error(meta ? `Backend installation "${options.installationId}" closed while opening metadata for ontology "${ontologyId}".` : `Backend installation "${options.installationId}" closed while opening ontology "${ontologyId}".`);
|
|
154
|
-
}
|
|
155
|
-
live.set(key, ontology);
|
|
156
|
-
return ontology;
|
|
157
|
-
})();
|
|
158
|
-
opening.set(key, open);
|
|
159
|
-
try {
|
|
160
|
-
return await open;
|
|
161
|
-
} finally {
|
|
162
|
-
if (opening.get(key) === open) opening.delete(key);
|
|
163
|
-
}
|
|
164
|
-
};
|
|
165
|
-
return {
|
|
166
|
-
installationId: options.installationId,
|
|
167
|
-
get connections() {
|
|
168
|
-
return connectionManager.connections;
|
|
169
|
-
},
|
|
170
|
-
get authentication() {
|
|
171
|
-
return connectionManager.authentication;
|
|
172
|
-
},
|
|
173
|
-
async disconnect(userId) {
|
|
174
|
-
await closeUserOntologies(userId);
|
|
175
|
-
await connectionManager.disconnect(userId);
|
|
176
|
-
},
|
|
177
|
-
async forget(userId) {
|
|
178
|
-
const results = await Promise.allSettled([destroyUserPartitions(userId), connectionManager.forget(userId)]);
|
|
179
|
-
const errors = [];
|
|
180
|
-
for (const result of results) if (result.status === "rejected") errors.push(result.reason);
|
|
181
|
-
if (errors.length > 0) throw new AggregateError(errors, `Failed to forget user "${userId}" from backend installation "${options.installationId}".`);
|
|
182
|
-
},
|
|
183
|
-
async openOntology({ userId, ontologyId }) {
|
|
184
|
-
return openConfiguredOntology({
|
|
185
|
-
userId,
|
|
186
|
-
ontologyId,
|
|
187
|
-
meta: false
|
|
188
|
-
});
|
|
189
|
-
},
|
|
190
|
-
async openMetaOntology({ userId, ontologyId }) {
|
|
191
|
-
return openConfiguredOntology({
|
|
192
|
-
userId,
|
|
193
|
-
ontologyId,
|
|
194
|
-
meta: true
|
|
195
|
-
});
|
|
196
|
-
},
|
|
197
|
-
closeOntology: ({ userId, ontologyId }) => close(userId, ontologyId),
|
|
198
|
-
closeMetaOntology: ({ userId, ontologyId }) => closeKey(metaOntologyKey(userId, ontologyId)),
|
|
199
|
-
cleanup() {
|
|
200
|
-
cleanupPromise ??= (async () => {
|
|
201
|
-
disposed = true;
|
|
202
|
-
try {
|
|
203
|
-
await Promise.allSettled(opening.values());
|
|
204
|
-
await Promise.all([...live.values()].map((ontology) => ontology.cleanup()));
|
|
205
|
-
} finally {
|
|
206
|
-
live.clear();
|
|
207
|
-
try {
|
|
208
|
-
await Promise.all([connectionManager.cleanup(), partitions.cleanup()]);
|
|
209
|
-
} finally {
|
|
210
|
-
await installationRuntime.cleanup?.();
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
})();
|
|
214
|
-
return cleanupPromise;
|
|
215
|
-
}
|
|
216
|
-
};
|
|
217
|
-
}
|
|
218
|
-
//#endregion
|
|
219
|
-
export { createOntologyBackendInstallation };
|
|
220
|
-
|
|
221
|
-
//# sourceMappingURL=createOntologyBackendInstallation.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createOntologyBackendInstallation.js","names":[],"sources":["../../src/installation/createOntologyBackendInstallation.ts"],"sourcesContent":["import { createConnectionManager, createConnectionMonitor } from \"@party-stack/connections\";\nimport { createLocalCollection } from \"@party-stack/runtime\";\nimport { createLiveOntology } from \"../live/LiveOntology.js\";\nimport { createMetaOntologyConfiguration } from \"./createMetaOntologyConfiguration.js\";\nimport type { LiveOntology } from \"../live/LiveOntology.js\";\nimport type { OntologyDefinition } from \"../live/LiveOntology.js\";\nimport type { MetaOntology } from \"../meta/generated/types.js\";\nimport type {\n CreateOntologyBackendInstallationOptions,\n OntologyBackendInstallation,\n OntologyRoute,\n} from \"./types.js\";\nimport type { Connection } from \"@party-stack/connections\";\n\ninterface LocalOntologyPartition {\n id: string;\n userId: string;\n ontologyId: string;\n meta?: true;\n}\n\nfunction scope(value: string): string {\n return encodeURIComponent(value);\n}\n\nfunction ontologyKey(userId: string, ontologyId: string): string {\n return `${scope(userId)}:${scope(ontologyId)}`;\n}\n\nfunction metaOntologyKey(userId: string, ontologyId: string): string {\n return `${ontologyKey(userId, ontologyId)}:meta`;\n}\n\nfunction liveOntologyNamespace(installationId: string, ontologyId: string): string {\n return `${scope(installationId)}:${scope(ontologyId)}`;\n}\n\nfunction isActiveConnection(connection: Connection | undefined): connection is Connection<\"active\"> {\n return connection?.state.status === \"active\";\n}\n\nfunction routeFor(routes: readonly OntologyRoute[], ontologyId: string): OntologyRoute {\n const matching = routes.filter((route) => route.matches(ontologyId));\n if (matching.length !== 1) {\n throw new Error(\n matching.length === 0\n ? `No ontology route matched \"${ontologyId}\".`\n : `Multiple ontology routes matched \"${ontologyId}\".`\n );\n }\n return matching[0]!;\n}\n\nexport async function createOntologyBackendInstallation<AuthenticationClient extends object = object>(\n options: CreateOntologyBackendInstallationOptions<AuthenticationClient>\n): Promise<OntologyBackendInstallation<AuthenticationClient>> {\n const installationRuntime = await options.runtime(\"installation\", scope(options.installationId));\n let connectionManager;\n try {\n connectionManager = await createConnectionManager({\n installationId: options.installationId,\n runtime: installationRuntime,\n adapter: options.connections,\n });\n } catch (error) {\n await installationRuntime.cleanup?.();\n throw error;\n }\n const partitions = createLocalCollection<LocalOntologyPartition, string>({\n name: \"ontology-partitions\",\n getKey: (partition) => partition.id,\n runtime: installationRuntime,\n schemaVersion: 1,\n });\n try {\n await partitions.preload();\n } catch (error) {\n await partitions.cleanup();\n await connectionManager.cleanup();\n await installationRuntime.cleanup?.();\n throw error;\n }\n const live = new Map<string, LiveOntology>();\n const opening = new Map<string, Promise<LiveOntology>>();\n let disposed = false;\n let cleanupPromise: Promise<void> | undefined;\n\n const closeKey = async (key: string) => {\n const pending = opening.get(key);\n if (pending) {\n await pending.catch(() => undefined);\n }\n const ontology = live.get(key);\n if (!ontology) return;\n live.delete(key);\n await ontology.cleanup();\n };\n const close = (userId: string, ontologyId: string) => closeKey(ontologyKey(userId, ontologyId));\n const recordPartition = async (partition: LocalOntologyPartition): Promise<void> => {\n const existing = partitions.get(partition.id);\n const transaction = existing\n ? partitions.update(\n partition.id,\n {\n optimistic: false,\n },\n (draft) => {\n Object.assign(draft, partition);\n }\n )\n : partitions.insert(partition, {\n optimistic: false,\n });\n await transaction.isPersisted.promise;\n };\n const removePartitionRecord = async (id: string): Promise<void> => {\n if (!partitions.get(id)) {\n return;\n }\n const transaction = partitions.delete(id, {\n optimistic: false,\n });\n await transaction.isPersisted.promise;\n };\n const destroyPartition = async (partition: LocalOntologyPartition): Promise<void> => {\n const pending = opening.get(partition.id);\n if (pending) {\n await pending.catch(() => undefined);\n }\n const ontology = live.get(partition.id);\n live.delete(partition.id);\n if (ontology) {\n await ontology.destroy();\n } else {\n const namespace = `${liveOntologyNamespace(\n options.installationId,\n partition.ontologyId\n )}${partition.meta ? \":meta\" : \"\"}`;\n const runtime = await options.runtime(partition.userId, namespace);\n if (runtime.destroy) {\n await runtime.destroy();\n } else {\n await runtime.cleanup?.();\n }\n }\n await removePartitionRecord(partition.id);\n };\n const destroyUserPartitions = async (userId: string): Promise<void> => {\n const prefix = `${scope(userId)}:`;\n await Promise.allSettled(\n [...opening].filter(([key]) => key.startsWith(prefix)).map(([, pending]) => pending)\n );\n await Promise.all(\n [...partitions.values()].filter((partition) => partition.userId === userId).map(destroyPartition)\n );\n };\n const closeUserOntologies = async (userId: string): Promise<void> => {\n const prefix = `${scope(userId)}:`;\n const toClose = [...new Set([...live.keys(), ...opening.keys()])].filter((key) =>\n key.startsWith(prefix)\n );\n await Promise.all(toClose.map(closeKey));\n };\n const openConfiguredOntology = async <Ontology extends OntologyDefinition>(openOptions: {\n userId: string;\n ontologyId: string;\n meta: boolean;\n }): Promise<LiveOntology<Ontology>> => {\n const { userId, ontologyId, meta } = openOptions;\n if (disposed) {\n throw new Error(`Backend installation \"${options.installationId}\" is closed.`);\n }\n const current = connectionManager.connections.get(userId);\n if (!isActiveConnection(current)) {\n throw new Error(\n `User \"${userId}\" is not connected to backend installation \"${options.installationId}\".`\n );\n }\n const egress = connectionManager.egress(userId);\n if (!egress) {\n throw new Error(`Connection egress for user \"${userId}\" is unavailable.`);\n }\n const key = meta ? metaOntologyKey(userId, ontologyId) : ontologyKey(userId, ontologyId);\n const existing = live.get(key);\n if (existing) {\n return existing as unknown as LiveOntology<Ontology>;\n }\n const pending = opening.get(key);\n if (pending) {\n return pending as unknown as Promise<LiveOntology<Ontology>>;\n }\n const open = (async () => {\n const route = routeFor(options.routes, ontologyId);\n const configureOptions = {\n connection: current,\n egress,\n ontologyId,\n };\n let configured;\n if (meta) {\n if (route.configureMeta) {\n configured = await route.configureMeta(configureOptions);\n } else if (route.configure) {\n const application = await route.configure(configureOptions);\n configured = createMetaOntologyConfiguration({\n ir: application.ir,\n });\n } else {\n throw new Error(`Ontology route for \"${ontologyId}\" does not support metadata.`);\n }\n } else {\n if (!route.configure) {\n throw new Error(\n `Ontology route for \"${ontologyId}\" does not support opening the application ontology.`\n );\n }\n configured = await route.configure(configureOptions);\n }\n const context = {\n ...options.createContext?.(userId, ontologyId),\n ...configured.context,\n user: userId,\n };\n const runtimeNamespace = `${liveOntologyNamespace(options.installationId, ontologyId)}${\n meta ? \":meta\" : \"\"\n }`;\n await recordPartition({\n id: key,\n userId,\n ontologyId,\n meta: meta ? true : undefined,\n });\n const ontology = await createLiveOntology({\n id: runtimeNamespace,\n ir: configured.ir,\n backend: configured.backend,\n runtime: options.runtime,\n context,\n persistObjects: configured.persistObjects,\n writes: configured.writes,\n connection: createConnectionMonitor(connectionManager, userId),\n });\n if (disposed) {\n await ontology.cleanup();\n throw new Error(\n meta\n ? `Backend installation \"${options.installationId}\" closed while opening metadata for ontology \"${ontologyId}\".`\n : `Backend installation \"${options.installationId}\" closed while opening ontology \"${ontologyId}\".`\n );\n }\n live.set(key, ontology);\n return ontology;\n })();\n opening.set(key, open);\n try {\n return (await open) as unknown as LiveOntology<Ontology>;\n } finally {\n if (opening.get(key) === open) {\n opening.delete(key);\n }\n }\n };\n\n const installation: OntologyBackendInstallation<AuthenticationClient> = {\n installationId: options.installationId,\n get connections() {\n return connectionManager.connections;\n },\n get authentication() {\n return connectionManager.authentication;\n },\n async disconnect(userId) {\n await closeUserOntologies(userId);\n await connectionManager.disconnect(userId);\n },\n async forget(userId) {\n const results = await Promise.allSettled([\n destroyUserPartitions(userId),\n connectionManager.forget(userId),\n ]);\n const errors: unknown[] = [];\n for (const result of results) {\n if (result.status === \"rejected\") {\n errors.push(result.reason as unknown);\n }\n }\n if (errors.length > 0) {\n throw new AggregateError(\n errors,\n `Failed to forget user \"${userId}\" from backend installation \"${options.installationId}\".`\n );\n }\n },\n async openOntology<Ontology extends OntologyDefinition = OntologyDefinition>({\n userId,\n ontologyId,\n }: {\n userId: string;\n ontologyId: string;\n }): Promise<LiveOntology<Ontology>> {\n return openConfiguredOntology<Ontology>({\n userId,\n ontologyId,\n meta: false,\n });\n },\n async openMetaOntology({ userId, ontologyId }) {\n return openConfiguredOntology<MetaOntology>({\n userId,\n ontologyId,\n meta: true,\n });\n },\n closeOntology: ({ userId, ontologyId }) => close(userId, ontologyId),\n closeMetaOntology: ({ userId, ontologyId }) => closeKey(metaOntologyKey(userId, ontologyId)),\n cleanup() {\n cleanupPromise ??= (async () => {\n disposed = true;\n try {\n await Promise.allSettled(opening.values());\n await Promise.all([...live.values()].map((ontology) => ontology.cleanup()));\n } finally {\n live.clear();\n try {\n await Promise.all([connectionManager.cleanup(), partitions.cleanup()]);\n } finally {\n await installationRuntime.cleanup?.();\n }\n }\n })();\n return cleanupPromise;\n },\n };\n return installation;\n}\n"],"mappings":";;;;;AAqBA,SAAS,MAAM,OAAuB;CAClC,OAAO,mBAAmB,KAAK;AACnC;AAEA,SAAS,YAAY,QAAgB,YAA4B;CAC7D,OAAO,GAAG,MAAM,MAAM,EAAE,GAAG,MAAM,UAAU;AAC/C;AAEA,SAAS,gBAAgB,QAAgB,YAA4B;CACjE,OAAO,GAAG,YAAY,QAAQ,UAAU,EAAE;AAC9C;AAEA,SAAS,sBAAsB,gBAAwB,YAA4B;CAC/E,OAAO,GAAG,MAAM,cAAc,EAAE,GAAG,MAAM,UAAU;AACvD;AAEA,SAAS,mBAAmB,YAAwE;CAChG,OAAO,YAAY,MAAM,WAAW;AACxC;AAEA,SAAS,SAAS,QAAkC,YAAmC;CACnF,MAAM,WAAW,OAAO,QAAQ,UAAU,MAAM,QAAQ,UAAU,CAAC;CACnE,IAAI,SAAS,WAAW,GACpB,MAAM,IAAI,MACN,SAAS,WAAW,IACd,8BAA8B,WAAW,MACzC,qCAAqC,WAAW,GAC1D;CAEJ,OAAO,SAAS;AACpB;AAEA,eAAsB,kCAClB,SAC0D;CAC1D,MAAM,sBAAsB,MAAM,QAAQ,QAAQ,gBAAgB,MAAM,QAAQ,cAAc,CAAC;CAC/F,IAAI;CACJ,IAAI;EACA,oBAAoB,MAAM,wBAAwB;GAC9C,gBAAgB,QAAQ;GACxB,SAAS;GACT,SAAS,QAAQ;EACrB,CAAC;CACL,SAAS,OAAO;EACZ,MAAM,oBAAoB,UAAU;EACpC,MAAM;CACV;CACA,MAAM,aAAa,sBAAsD;EACrE,MAAM;EACN,SAAS,cAAc,UAAU;EACjC,SAAS;EACT,eAAe;CACnB,CAAC;CACD,IAAI;EACA,MAAM,WAAW,QAAQ;CAC7B,SAAS,OAAO;EACZ,MAAM,WAAW,QAAQ;EACzB,MAAM,kBAAkB,QAAQ;EAChC,MAAM,oBAAoB,UAAU;EACpC,MAAM;CACV;CACA,MAAM,uBAAO,IAAI,IAA0B;CAC3C,MAAM,0BAAU,IAAI,IAAmC;CACvD,IAAI,WAAW;CACf,IAAI;CAEJ,MAAM,WAAW,OAAO,QAAgB;EACpC,MAAM,UAAU,QAAQ,IAAI,GAAG;EAC/B,IAAI,SACA,MAAM,QAAQ,YAAY,KAAA,CAAS;EAEvC,MAAM,WAAW,KAAK,IAAI,GAAG;EAC7B,IAAI,CAAC,UAAU;EACf,KAAK,OAAO,GAAG;EACf,MAAM,SAAS,QAAQ;CAC3B;CACA,MAAM,SAAS,QAAgB,eAAuB,SAAS,YAAY,QAAQ,UAAU,CAAC;CAC9F,MAAM,kBAAkB,OAAO,cAAqD;EAehF,OAdiB,WAAW,IAAI,UAAU,EACf,IACrB,WAAW,OACP,UAAU,IACV,EACI,YAAY,MAChB,IACC,UAAU;GACP,OAAO,OAAO,OAAO,SAAS;EAClC,CACJ,IACA,WAAW,OAAO,WAAW,EACzB,YAAY,MAChB,CAAC,EAAA,CACW,YAAY;CAClC;CACA,MAAM,wBAAwB,OAAO,OAA8B;EAC/D,IAAI,CAAC,WAAW,IAAI,EAAE,GAClB;EAKJ,MAHoB,WAAW,OAAO,IAAI,EACtC,YAAY,MAChB,CACgB,CAAC,CAAC,YAAY;CAClC;CACA,MAAM,mBAAmB,OAAO,cAAqD;EACjF,MAAM,UAAU,QAAQ,IAAI,UAAU,EAAE;EACxC,IAAI,SACA,MAAM,QAAQ,YAAY,KAAA,CAAS;EAEvC,MAAM,WAAW,KAAK,IAAI,UAAU,EAAE;EACtC,KAAK,OAAO,UAAU,EAAE;EACxB,IAAI,UACA,MAAM,SAAS,QAAQ;OACpB;GACH,MAAM,YAAY,GAAG,sBACjB,QAAQ,gBACR,UAAU,UACd,IAAI,UAAU,OAAO,UAAU;GAC/B,MAAM,UAAU,MAAM,QAAQ,QAAQ,UAAU,QAAQ,SAAS;GACjE,IAAI,QAAQ,SACR,MAAM,QAAQ,QAAQ;QAEtB,MAAM,QAAQ,UAAU;EAEhC;EACA,MAAM,sBAAsB,UAAU,EAAE;CAC5C;CACA,MAAM,wBAAwB,OAAO,WAAkC;EACnE,MAAM,SAAS,GAAG,MAAM,MAAM,EAAE;EAChC,MAAM,QAAQ,WACV,CAAC,GAAG,OAAO,CAAC,CAAC,QAAQ,CAAC,SAAS,IAAI,WAAW,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,aAAa,OAAO,CACvF;EACA,MAAM,QAAQ,IACV,CAAC,GAAG,WAAW,OAAO,CAAC,CAAC,CAAC,QAAQ,cAAc,UAAU,WAAW,MAAM,CAAC,CAAC,IAAI,gBAAgB,CACpG;CACJ;CACA,MAAM,sBAAsB,OAAO,WAAkC;EACjE,MAAM,SAAS,GAAG,MAAM,MAAM,EAAE;EAChC,MAAM,UAAU,CAAC,mBAAG,IAAI,IAAI,CAAC,GAAG,KAAK,KAAK,GAAG,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,QACtE,IAAI,WAAW,MAAM,CACzB;EACA,MAAM,QAAQ,IAAI,QAAQ,IAAI,QAAQ,CAAC;CAC3C;CACA,MAAM,yBAAyB,OAA4C,gBAIpC;EACnC,MAAM,EAAE,QAAQ,YAAY,SAAS;EACrC,IAAI,UACA,MAAM,IAAI,MAAM,yBAAyB,QAAQ,eAAe,aAAa;EAEjF,MAAM,UAAU,kBAAkB,YAAY,IAAI,MAAM;EACxD,IAAI,CAAC,mBAAmB,OAAO,GAC3B,MAAM,IAAI,MACN,SAAS,OAAO,8CAA8C,QAAQ,eAAe,GACzF;EAEJ,MAAM,SAAS,kBAAkB,OAAO,MAAM;EAC9C,IAAI,CAAC,QACD,MAAM,IAAI,MAAM,+BAA+B,OAAO,kBAAkB;EAE5E,MAAM,MAAM,OAAO,gBAAgB,QAAQ,UAAU,IAAI,YAAY,QAAQ,UAAU;EACvF,MAAM,WAAW,KAAK,IAAI,GAAG;EAC7B,IAAI,UACA,OAAO;EAEX,MAAM,UAAU,QAAQ,IAAI,GAAG;EAC/B,IAAI,SACA,OAAO;EAEX,MAAM,QAAQ,YAAY;GACtB,MAAM,QAAQ,SAAS,QAAQ,QAAQ,UAAU;GACjD,MAAM,mBAAmB;IACrB,YAAY;IACZ;IACA;GACJ;GACA,IAAI;GACJ,IAAI,MAAM;IACN,IAAI,MAAM,eACN,aAAa,MAAM,MAAM,cAAc,gBAAgB;SACpD,IAAI,MAAM,WAAW;KACxB,MAAM,cAAc,MAAM,MAAM,UAAU,gBAAgB;KAC1D,aAAa,gCAAgC,EACzC,IAAI,YAAY,GACpB,CAAC;IACL,OACI,MAAM,IAAI,MAAM,uBAAuB,WAAW,6BAA6B;GAEvF,OAAO;IACH,IAAI,CAAC,MAAM,WACP,MAAM,IAAI,MACN,uBAAuB,WAAW,qDACtC;IAEJ,aAAa,MAAM,MAAM,UAAU,gBAAgB;GACvD;GACA,MAAM,UAAU;IACZ,GAAG,QAAQ,gBAAgB,QAAQ,UAAU;IAC7C,GAAG,WAAW;IACd,MAAM;GACV;GACA,MAAM,mBAAmB,GAAG,sBAAsB,QAAQ,gBAAgB,UAAU,IAChF,OAAO,UAAU;GAErB,MAAM,gBAAgB;IAClB,IAAI;IACJ;IACA;IACA,MAAM,OAAO,OAAO,KAAA;GACxB,CAAC;GACD,MAAM,WAAW,MAAM,mBAAmB;IACtC,IAAI;IACJ,IAAI,WAAW;IACf,SAAS,WAAW;IACpB,SAAS,QAAQ;IACjB;IACA,gBAAgB,WAAW;IAC3B,QAAQ,WAAW;IACnB,YAAY,wBAAwB,mBAAmB,MAAM;GACjE,CAAC;GACD,IAAI,UAAU;IACV,MAAM,SAAS,QAAQ;IACvB,MAAM,IAAI,MACN,OACM,yBAAyB,QAAQ,eAAe,gDAAgD,WAAW,MAC3G,yBAAyB,QAAQ,eAAe,mCAAmC,WAAW,GACxG;GACJ;GACA,KAAK,IAAI,KAAK,QAAQ;GACtB,OAAO;EACX,EAAA,CAAG;EACH,QAAQ,IAAI,KAAK,IAAI;EACrB,IAAI;GACA,OAAQ,MAAM;EAClB,UAAU;GACN,IAAI,QAAQ,IAAI,GAAG,MAAM,MACrB,QAAQ,OAAO,GAAG;EAE1B;CACJ;CAwEA,OAAO;EArEH,gBAAgB,QAAQ;EACxB,IAAI,cAAc;GACd,OAAO,kBAAkB;EAC7B;EACA,IAAI,iBAAiB;GACjB,OAAO,kBAAkB;EAC7B;EACA,MAAM,WAAW,QAAQ;GACrB,MAAM,oBAAoB,MAAM;GAChC,MAAM,kBAAkB,WAAW,MAAM;EAC7C;EACA,MAAM,OAAO,QAAQ;GACjB,MAAM,UAAU,MAAM,QAAQ,WAAW,CACrC,sBAAsB,MAAM,GAC5B,kBAAkB,OAAO,MAAM,CACnC,CAAC;GACD,MAAM,SAAoB,CAAC;GAC3B,KAAK,MAAM,UAAU,SACjB,IAAI,OAAO,WAAW,YAClB,OAAO,KAAK,OAAO,MAAiB;GAG5C,IAAI,OAAO,SAAS,GAChB,MAAM,IAAI,eACN,QACA,0BAA0B,OAAO,+BAA+B,QAAQ,eAAe,GAC3F;EAER;EACA,MAAM,aAAuE,EACzE,QACA,cAIgC;GAChC,OAAO,uBAAiC;IACpC;IACA;IACA,MAAM;GACV,CAAC;EACL;EACA,MAAM,iBAAiB,EAAE,QAAQ,cAAc;GAC3C,OAAO,uBAAqC;IACxC;IACA;IACA,MAAM;GACV,CAAC;EACL;EACA,gBAAgB,EAAE,QAAQ,iBAAiB,MAAM,QAAQ,UAAU;EACnE,oBAAoB,EAAE,QAAQ,iBAAiB,SAAS,gBAAgB,QAAQ,UAAU,CAAC;EAC3F,UAAU;GACN,oBAAoB,YAAY;IAC5B,WAAW;IACX,IAAI;KACA,MAAM,QAAQ,WAAW,QAAQ,OAAO,CAAC;KACzC,MAAM,QAAQ,IAAI,CAAC,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,aAAa,SAAS,QAAQ,CAAC,CAAC;IAC9E,UAAU;KACN,KAAK,MAAM;KACX,IAAI;MACA,MAAM,QAAQ,IAAI,CAAC,kBAAkB,QAAQ,GAAG,WAAW,QAAQ,CAAC,CAAC;KACzE,UAAU;MACN,MAAM,oBAAoB,UAAU;KACxC;IACJ;GACJ,EAAA,CAAG;GACH,OAAO;EACX;CAEc;AACtB"}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { ConfigureOntologyOptions, CreateOntologyBackendInstallationOptions, OntologyBackendInstallation, OntologyConfiguration, OntologyRoute } from "./types.js";
|
|
2
|
-
import { createOntologyBackendInstallation } from "./createOntologyBackendInstallation.js";
|
|
3
|
-
import { MetaOntologyConfigurationOptions, createMetaOntologyConfiguration } from "./createMetaOntologyConfiguration.js";
|
|
4
|
-
export { type ConfigureOntologyOptions, type CreateOntologyBackendInstallationOptions, type MetaOntologyConfigurationOptions, type OntologyBackendInstallation, type OntologyConfiguration, type OntologyRoute, createMetaOntologyConfiguration, createOntologyBackendInstallation };
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
import { OntologyIR } from "../ir/generated/types.js";
|
|
2
|
-
import "../ir/index.js";
|
|
3
|
-
import { OntologyBackendAdapterProvider } from "../live/OntologyBackendAdapter.js";
|
|
4
|
-
import { CreateLiveOntologyOpts, LiveOntology, OntologyDefinition } from "../live/LiveOntology.js";
|
|
5
|
-
import { MetaOntology } from "../meta/generated/types.js";
|
|
6
|
-
import { RuntimeAdapterProvider } from "@party-stack/runtime";
|
|
7
|
-
import { Collection } from "@tanstack/db";
|
|
8
|
-
import { BackendConnectionAdapterProvider, Connection, ConnectionEgress } from "@party-stack/connections";
|
|
9
|
-
//#region src/installation/types.d.ts
|
|
10
|
-
export interface ConfigureOntologyOptions {
|
|
11
|
-
connection: Connection<"active">;
|
|
12
|
-
egress: ConnectionEgress;
|
|
13
|
-
ontologyId: string;
|
|
14
|
-
}
|
|
15
|
-
export interface OntologyConfiguration {
|
|
16
|
-
ir: OntologyIR;
|
|
17
|
-
backend: OntologyBackendAdapterProvider;
|
|
18
|
-
context?: Record<string, unknown>;
|
|
19
|
-
persistObjects?: boolean;
|
|
20
|
-
writes?: CreateLiveOntologyOpts["writes"];
|
|
21
|
-
}
|
|
22
|
-
export interface OntologyRoute {
|
|
23
|
-
matches(ontologyId: string): boolean;
|
|
24
|
-
configure?(options: ConfigureOntologyOptions): OntologyConfiguration | Promise<OntologyConfiguration>;
|
|
25
|
-
configureMeta?(options: ConfigureOntologyOptions): OntologyConfiguration | Promise<OntologyConfiguration>;
|
|
26
|
-
}
|
|
27
|
-
export interface CreateOntologyBackendInstallationOptions<AuthenticationClient extends object = object> {
|
|
28
|
-
/**
|
|
29
|
-
* Stable identity for one deployed backend and authentication domain.
|
|
30
|
-
* Every ontology route must be usable through this installation's
|
|
31
|
-
* connections and egress.
|
|
32
|
-
*/
|
|
33
|
-
installationId: string;
|
|
34
|
-
connections: BackendConnectionAdapterProvider<AuthenticationClient>;
|
|
35
|
-
runtime: RuntimeAdapterProvider;
|
|
36
|
-
routes: readonly OntologyRoute[];
|
|
37
|
-
createContext?: (userId: string, ontologyId: string) => Record<string, unknown>;
|
|
38
|
-
}
|
|
39
|
-
export interface OntologyBackendInstallation<AuthenticationClient extends object = object> {
|
|
40
|
-
readonly installationId: string;
|
|
41
|
-
readonly authentication: AuthenticationClient;
|
|
42
|
-
readonly connections: Collection<Connection, string>;
|
|
43
|
-
/**
|
|
44
|
-
* Opens or returns the cached LiveOntology for one user and ontology ID.
|
|
45
|
-
* The user must have an active connection to this installation.
|
|
46
|
-
*/
|
|
47
|
-
openOntology<Ontology extends OntologyDefinition = OntologyDefinition>(options: {
|
|
48
|
-
userId: string;
|
|
49
|
-
ontologyId: string;
|
|
50
|
-
}): Promise<LiveOntology<Ontology>>;
|
|
51
|
-
openMetaOntology(options: {
|
|
52
|
-
userId: string;
|
|
53
|
-
ontologyId: string;
|
|
54
|
-
}): Promise<LiveOntology<MetaOntology>>;
|
|
55
|
-
closeMetaOntology(options: {
|
|
56
|
-
userId: string;
|
|
57
|
-
ontologyId: string;
|
|
58
|
-
}): Promise<void>;
|
|
59
|
-
/**
|
|
60
|
-
* Releases one cached LiveOntology and its process-local resources without
|
|
61
|
-
* disconnecting the user's backend session or deleting durable local data
|
|
62
|
-
* and pending writes.
|
|
63
|
-
*/
|
|
64
|
-
closeOntology(options: {
|
|
65
|
-
userId: string;
|
|
66
|
-
ontologyId: string;
|
|
67
|
-
}): Promise<void>;
|
|
68
|
-
/**
|
|
69
|
-
* Logs the user out of this backend installation.
|
|
70
|
-
*
|
|
71
|
-
* Closes every LiveOntology using the user's connection, then delegates to
|
|
72
|
-
* the connection session to revoke, sign out, or deactivate its
|
|
73
|
-
* credentials. The persisted Connection remains inactive. Local ontology
|
|
74
|
-
* data and pending writes are retained.
|
|
75
|
-
*/
|
|
76
|
-
disconnect(userId: string): Promise<void>;
|
|
77
|
-
/**
|
|
78
|
-
* Logs the user out and removes the persisted Connection from this
|
|
79
|
-
* installation. Every indexed local ontology partition for the user,
|
|
80
|
-
* including durable objects, blobs, and pending writes, is destroyed.
|
|
81
|
-
* Remote backend data and provider accounts are not deleted.
|
|
82
|
-
*/
|
|
83
|
-
forget(userId: string): Promise<void>;
|
|
84
|
-
/**
|
|
85
|
-
* Releases every open LiveOntology and all installation process resources.
|
|
86
|
-
*
|
|
87
|
-
* This does not revoke credentials, mark connections inactive, or delete
|
|
88
|
-
* durable local data. A later installation instance may restore persisted
|
|
89
|
-
* connections and reopen ontologies.
|
|
90
|
-
*/
|
|
91
|
-
cleanup(): Promise<void>;
|
|
92
|
-
}
|
|
93
|
-
//#endregion
|
|
94
|
-
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","names":[],"sources":["../../src/installation/types.ts"],"mappings":";;;;;;;;;iBAYiB;EACb,YAAY;EACZ,QAAQ;EACR;;iBAGa;EACb,IAAI;EACJ,SAAS;EACT,UAAU;EACV;EACA,SAAS;;iBAGI;EACb,QAAQ;EACR,WAAW,SAAS,2BAA2B,wBAAwB,QAAQ;EAC/E,eAAe,SAAS,2BAA2B,wBAAwB,QAAQ;;iBAGtE,yCAAyC;;;;;;EAMtD;EACA,aAAa,iCAAiC;EAC9C,SAAS;EACT,iBAAiB;EACjB,iBAAiB,gBAAgB,uBAAuB;;iBAG3C,4BAA4B;WAChC;WACA,gBAAgB;WAChB,aAAa,WAAW;;;;;EAMjC,aAAa,iBAAiB,qBAAqB,oBAAoB;IACnE;IACA;MACA,QAAQ,aAAa;EACzB,iBAAiB;IAAW;IAAgB;MAAuB,QAAQ,aAAa;EACxF,kBAAkB;IAAW;IAAgB;MAAuB;;;;;;EAMpE,cAAc;IAAW;IAAgB;MAAuB;;;;;;;;;EAShE,WAAW,iBAAiB;;;;;;;EAO5B,OAAO,iBAAiB;;;;;;;;EAQxB,WAAW"}
|