@dxos/echo 0.8.4-main.3eb6e50203 → 0.8.4-main.3fbcb4aa9b
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 +4 -4
- package/dist/lib/neutral/Annotation.mjs +7 -3
- package/dist/lib/neutral/Database.mjs +8 -4
- package/dist/lib/neutral/Entity.mjs +24 -14
- package/dist/lib/neutral/Err.mjs +1 -1
- package/dist/lib/neutral/Extension.mjs +18 -0
- package/dist/lib/neutral/Extension.mjs.map +7 -0
- package/dist/lib/neutral/Feed.mjs +50 -0
- package/dist/lib/neutral/Feed.mjs.map +7 -0
- package/dist/lib/neutral/Filter.mjs +21 -10
- package/dist/lib/neutral/Format.mjs +3 -3
- package/dist/lib/neutral/JsonSchema.mjs +9 -9
- package/dist/lib/neutral/Key.mjs +1 -1
- package/dist/lib/neutral/Migration.mjs +17 -0
- package/dist/lib/neutral/Migration.mjs.map +7 -0
- package/dist/lib/neutral/Obj.mjs +26 -17
- package/dist/lib/neutral/Order.mjs +1 -1
- package/dist/lib/neutral/Query.mjs +21 -9
- package/dist/lib/neutral/QueryResult.mjs +1 -1
- package/dist/lib/neutral/Ref.mjs +9 -7
- package/dist/lib/neutral/Relation.mjs +23 -13
- package/dist/lib/neutral/SchemaRegistry.mjs +1 -1
- package/dist/lib/neutral/Tag.mjs +14 -10
- package/dist/lib/neutral/Type.mjs +13 -23
- package/dist/lib/neutral/{chunk-N2QNHMT5.mjs → chunk-44HT3MEC.mjs} +2 -2
- package/dist/lib/neutral/{chunk-N2QNHMT5.mjs.map → chunk-44HT3MEC.mjs.map} +1 -1
- package/dist/lib/neutral/{chunk-XAJMXQ4H.mjs → chunk-5SL5LDLD.mjs} +6 -2
- package/dist/lib/neutral/chunk-5SL5LDLD.mjs.map +7 -0
- package/dist/lib/neutral/chunk-6VIJV543.mjs +34 -0
- package/dist/lib/neutral/chunk-6VIJV543.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-ANHVGJI4.mjs → chunk-7RVZT53K.mjs} +1 -1
- package/dist/lib/neutral/{chunk-4L6DOFXP.mjs → chunk-BICZKPQG.mjs} +1 -1
- package/dist/lib/neutral/{chunk-4L6DOFXP.mjs.map → chunk-BICZKPQG.mjs.map} +1 -1
- package/dist/lib/neutral/{chunk-B4FLOYG7.mjs → chunk-FHYIM4RD.mjs} +18 -20
- package/dist/lib/neutral/chunk-FHYIM4RD.mjs.map +7 -0
- package/dist/lib/neutral/chunk-FZHVQEHN.mjs +81 -0
- package/dist/lib/neutral/chunk-FZHVQEHN.mjs.map +7 -0
- package/dist/lib/neutral/chunk-GWFFC34K.mjs +50 -0
- package/dist/lib/neutral/chunk-GWFFC34K.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-EXAYCLIM.mjs → chunk-HPNQTEEQ.mjs} +5 -5
- package/dist/lib/neutral/chunk-HPNQTEEQ.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-YPIP3WGI.mjs → chunk-LVGOVFDV.mjs} +40 -12
- package/dist/lib/neutral/chunk-LVGOVFDV.mjs.map +7 -0
- package/dist/lib/neutral/chunk-MPAI2MHO.mjs +346 -0
- package/dist/lib/neutral/chunk-MPAI2MHO.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-KB7RIVLK.mjs → chunk-N4B7FHQT.mjs} +4 -4
- package/dist/lib/neutral/{chunk-KB7RIVLK.mjs.map → chunk-N4B7FHQT.mjs.map} +2 -2
- package/dist/lib/neutral/chunk-O5LRY6CO.mjs +734 -0
- package/dist/lib/neutral/chunk-O5LRY6CO.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-VYEWMV5U.mjs → chunk-QGMIH2SN.mjs} +8 -4
- package/dist/lib/neutral/chunk-QGMIH2SN.mjs.map +7 -0
- package/dist/lib/neutral/chunk-QXIANHKU.mjs +206 -0
- package/dist/lib/neutral/chunk-QXIANHKU.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-UMECVTXM.mjs → chunk-RF7ZBZ4A.mjs} +72 -5
- package/dist/lib/neutral/chunk-RF7ZBZ4A.mjs.map +7 -0
- package/dist/lib/neutral/chunk-S7IMFVTB.mjs +132 -0
- package/dist/lib/neutral/chunk-S7IMFVTB.mjs.map +7 -0
- package/dist/lib/neutral/chunk-SJKBWMJY.mjs +2436 -0
- package/dist/lib/neutral/chunk-SJKBWMJY.mjs.map +7 -0
- package/dist/lib/neutral/chunk-SUZMWP3Y.mjs +36 -0
- package/dist/lib/neutral/chunk-SUZMWP3Y.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-HQXQWXLH.mjs → chunk-SW5CUSBY.mjs} +183 -32
- package/dist/lib/neutral/chunk-SW5CUSBY.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-RIMHNJ3E.mjs → chunk-TNBK56IN.mjs} +98 -44
- package/dist/lib/neutral/chunk-TNBK56IN.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-7WE7SBA2.mjs → chunk-TRPZU2HV.mjs} +13 -13
- package/dist/lib/neutral/chunk-TRPZU2HV.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-ROKO4RKJ.mjs → chunk-TTCSATUD.mjs} +2 -2
- package/dist/lib/neutral/chunk-TTCSATUD.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-OMUPQMLR.mjs → chunk-V72DY6LU.mjs} +1 -1
- package/dist/lib/neutral/chunk-VGKLHHRT.mjs +318 -0
- package/dist/lib/neutral/chunk-VGKLHHRT.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-TMLVKIMX.mjs → chunk-VYAGNFSJ.mjs} +8 -3
- package/dist/lib/neutral/chunk-VYAGNFSJ.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-7YWDDFPH.mjs → chunk-WRVRDZDA.mjs} +77 -58
- package/dist/lib/neutral/chunk-WRVRDZDA.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-MXQJZCPY.mjs → chunk-ZISMEVKD.mjs} +1 -1
- package/dist/lib/neutral/chunk-ZISMEVKD.mjs.map +7 -0
- package/dist/lib/neutral/index.mjs +51 -28
- package/dist/lib/neutral/internal/index.mjs +52 -38
- package/dist/lib/neutral/meta.json +1 -1
- package/dist/lib/neutral/testing/index.mjs +199 -136
- package/dist/lib/neutral/testing/index.mjs.map +3 -3
- package/dist/types/src/Annotation.d.ts +3 -3
- package/dist/types/src/Annotation.d.ts.map +1 -1
- package/dist/types/src/Collection.d.ts +16 -0
- package/dist/types/src/Collection.d.ts.map +1 -0
- package/dist/types/src/Database.d.ts +20 -35
- package/dist/types/src/Database.d.ts.map +1 -1
- package/dist/types/src/Dataset.d.ts +19 -0
- package/dist/types/src/Dataset.d.ts.map +1 -0
- package/dist/types/src/Entity.d.ts +54 -22
- package/dist/types/src/Entity.d.ts.map +1 -1
- package/dist/types/src/Err.d.ts +18 -18
- package/dist/types/src/Err.d.ts.map +1 -1
- package/dist/types/src/Extension.d.ts +80 -0
- package/dist/types/src/Extension.d.ts.map +1 -0
- package/dist/types/src/Extension.test.d.ts +2 -0
- package/dist/types/src/Extension.test.d.ts.map +1 -0
- package/dist/types/src/Feed.d.ts +182 -0
- package/dist/types/src/Feed.d.ts.map +1 -0
- package/dist/types/src/Filter.d.ts +34 -5
- package/dist/types/src/Filter.d.ts.map +1 -1
- package/dist/types/src/Filter.test.d.ts +2 -0
- package/dist/types/src/Filter.test.d.ts.map +1 -0
- package/dist/types/src/Format.d.ts +3 -3
- package/dist/types/src/Format.d.ts.map +1 -1
- package/dist/types/src/Hypergraph.d.ts +8 -3
- package/dist/types/src/Hypergraph.d.ts.map +1 -1
- package/dist/types/src/Json.d.ts +33 -0
- package/dist/types/src/Json.d.ts.map +1 -0
- package/dist/types/src/Json.test.d.ts +2 -0
- package/dist/types/src/Json.test.d.ts.map +1 -0
- package/dist/types/src/JsonSchema.d.ts +11 -4
- package/dist/types/src/JsonSchema.d.ts.map +1 -1
- package/dist/types/src/Migration.d.ts +57 -0
- package/dist/types/src/Migration.d.ts.map +1 -0
- package/dist/types/src/Obj.d.ts +109 -60
- package/dist/types/src/Obj.d.ts.map +1 -1
- package/dist/types/src/Order.d.ts.map +1 -1
- package/dist/types/src/Query.d.ts +105 -17
- package/dist/types/src/Query.d.ts.map +1 -1
- package/dist/types/src/Ref.d.ts +58 -10
- package/dist/types/src/Ref.d.ts.map +1 -1
- package/dist/types/src/Relation.d.ts +86 -40
- package/dist/types/src/Relation.d.ts.map +1 -1
- package/dist/types/src/SchemaRegistry.d.ts +4 -4
- package/dist/types/src/SchemaRegistry.d.ts.map +1 -1
- package/dist/types/src/Tag.d.ts +2 -1
- package/dist/types/src/Tag.d.ts.map +1 -1
- package/dist/types/src/Type.d.ts +51 -180
- package/dist/types/src/Type.d.ts.map +1 -1
- package/dist/types/src/View.d.ts +68 -0
- package/dist/types/src/View.d.ts.map +1 -0
- package/dist/types/src/exemplars.test.d.ts +2 -0
- package/dist/types/src/exemplars.test.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +7 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/internal/{annotations → Annotation}/annotations.d.ts +65 -2
- package/dist/types/src/internal/Annotation/annotations.d.ts.map +1 -0
- package/dist/types/src/internal/Annotation/annotations.test.d.ts.map +1 -0
- package/dist/types/src/internal/Annotation/index.d.ts +4 -0
- package/dist/types/src/internal/Annotation/index.d.ts.map +1 -0
- package/dist/types/src/internal/{api → Annotation}/sorting.d.ts +1 -1
- package/dist/types/src/internal/Annotation/sorting.d.ts.map +1 -0
- package/dist/types/src/internal/{annotations → Annotation}/util.d.ts +2 -2
- package/dist/types/src/internal/Annotation/util.d.ts.map +1 -0
- package/dist/types/src/internal/{api/entity.d.ts → Entity/api.d.ts} +2 -2
- package/dist/types/src/internal/Entity/api.d.ts.map +1 -0
- package/dist/types/src/internal/{entities → Entity}/entity.d.ts +3 -3
- package/dist/types/src/internal/Entity/entity.d.ts.map +1 -0
- package/dist/types/src/internal/{entities → Entity}/index.d.ts +2 -0
- package/dist/types/src/internal/Entity/index.d.ts.map +1 -0
- package/dist/types/src/internal/{entities → Entity}/model.d.ts +2 -26
- package/dist/types/src/internal/Entity/model.d.ts.map +1 -0
- package/dist/types/src/internal/{entities → Entity}/object.d.ts +2 -2
- package/dist/types/src/internal/Entity/object.d.ts.map +1 -0
- package/dist/types/src/internal/{entities → Entity}/relation.d.ts +3 -30
- package/dist/types/src/internal/Entity/relation.d.ts.map +1 -0
- package/dist/types/src/internal/Entity/util.d.ts.map +1 -0
- package/dist/types/src/internal/{api → Entity}/version.d.ts +1 -1
- package/dist/types/src/internal/Entity/version.d.ts.map +1 -0
- package/dist/types/src/internal/Format/date.d.ts.map +1 -0
- package/dist/types/src/internal/Format/date.test.d.ts.map +1 -0
- package/dist/types/src/internal/Format/format.d.ts.map +1 -0
- package/dist/types/src/internal/Format/format.test.d.ts.map +1 -0
- package/dist/types/src/internal/Format/index.d.ts.map +1 -0
- package/dist/types/src/internal/Format/number.d.ts.map +1 -0
- package/dist/types/src/internal/Format/object.d.ts.map +1 -0
- package/dist/types/src/internal/Format/select.d.ts.map +1 -0
- package/dist/types/src/internal/Format/string.d.ts.map +1 -0
- package/dist/types/src/internal/{formats → Format}/types.d.ts +1 -1
- package/dist/types/src/internal/Format/types.d.ts.map +1 -0
- package/dist/types/src/internal/{json-schema → JsonSchema}/annotations.d.ts +1 -1
- package/dist/types/src/internal/JsonSchema/annotations.d.ts.map +1 -0
- package/dist/types/src/internal/JsonSchema/effect-schema.test.d.ts.map +1 -0
- package/dist/types/src/internal/JsonSchema/index.d.ts.map +1 -0
- package/dist/types/src/internal/JsonSchema/json-schema-normalize.d.ts.map +1 -0
- package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema-type.d.ts +37 -37
- package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts.map +1 -0
- package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema.d.ts +1 -1
- package/dist/types/src/internal/JsonSchema/json-schema.d.ts.map +1 -0
- package/dist/types/src/internal/JsonSchema/json-schema.test.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/clone.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/common.d.ts.map +1 -0
- package/dist/types/src/internal/{object → Obj}/create-object.d.ts +2 -2
- package/dist/types/src/internal/Obj/create-object.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/create-object.test.d.ts.map +1 -0
- package/dist/types/src/internal/{object → Obj}/deleted.d.ts +1 -1
- package/dist/types/src/internal/Obj/deleted.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/ids.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/index.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/inspect.d.ts.map +1 -0
- package/dist/types/src/internal/{object → Obj}/json-serializer.d.ts +13 -5
- package/dist/types/src/internal/Obj/json-serializer.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/json-serializer.test.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/schema-validator.d.ts +2 -0
- package/dist/types/src/internal/Obj/schema-validator.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/schema-validator.test.d.ts.map +1 -0
- package/dist/types/src/internal/{object → Obj}/set-value.d.ts +2 -2
- package/dist/types/src/internal/Obj/set-value.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/set-value.test.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/snapshot.d.ts.map +1 -0
- package/dist/types/src/internal/{object → Obj}/typed-object.d.ts +4 -4
- package/dist/types/src/internal/Obj/typed-object.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/typed-object.test.d.ts.map +1 -0
- package/dist/types/src/internal/Query.d.ts +10 -0
- package/dist/types/src/internal/Query.d.ts.map +1 -0
- package/dist/types/src/internal/Ref/index.d.ts.map +1 -0
- package/dist/types/src/internal/{ref → Ref}/ref-array.d.ts +1 -1
- package/dist/types/src/internal/Ref/ref-array.d.ts.map +1 -0
- package/dist/types/src/internal/{ref → Ref}/ref.d.ts +15 -2
- package/dist/types/src/internal/Ref/ref.d.ts.map +1 -0
- package/dist/types/src/internal/Ref/ref.test.d.ts.map +1 -0
- package/dist/types/src/internal/{schema → Type}/compose.d.ts +1 -1
- package/dist/types/src/internal/Type/compose.d.ts.map +1 -0
- package/dist/types/src/internal/Type/compose.test.d.ts.map +1 -0
- package/dist/types/src/internal/{schema → Type}/echo-schema.d.ts +7 -7
- package/dist/types/src/internal/Type/echo-schema.d.ts.map +1 -0
- package/dist/types/src/internal/Type/index.d.ts.map +1 -0
- package/dist/types/src/internal/Type/manipulation.d.ts.map +1 -0
- package/dist/types/src/internal/{schema → Type}/persistent-schema.d.ts +2 -2
- package/dist/types/src/internal/Type/persistent-schema.d.ts.map +1 -0
- package/dist/types/src/internal/{api → common/api}/index.d.ts +0 -4
- package/dist/types/src/internal/common/api/index.d.ts.map +1 -0
- package/dist/types/src/internal/{api → common/api}/meta.d.ts +3 -3
- package/dist/types/src/internal/common/api/meta.d.ts.map +1 -0
- package/dist/types/src/internal/common/index.d.ts +4 -0
- package/dist/types/src/internal/common/index.d.ts.map +1 -0
- package/dist/types/src/internal/{proxy → common/proxy}/change-context.d.ts +1 -1
- package/dist/types/src/internal/common/proxy/change-context.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/change.test.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts.map +1 -0
- package/dist/types/src/internal/{proxy → common/proxy}/errors.d.ts +1 -1
- package/dist/types/src/internal/common/proxy/errors.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/event-batch.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/handler.test.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/index.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/json-serializer.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/make-object.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/ownership.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/proxy-types.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/proxy-utils.d.ts.map +1 -0
- package/dist/types/src/internal/{proxy → common/proxy}/reactive-array.d.ts +1 -1
- package/dist/types/src/internal/common/proxy/reactive-array.d.ts.map +1 -0
- package/dist/types/src/internal/{proxy → common/proxy}/reactive.d.ts +2 -2
- package/dist/types/src/internal/{proxy → common/proxy}/reactive.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/reactive.test.d.ts +2 -0
- package/dist/types/src/internal/common/proxy/reactive.test.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/schema-validator.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/schema.test.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/symbols.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/typed-handler.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/typed-handler.test.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/typed-object.test.d.ts.map +1 -0
- package/dist/types/src/internal/{types → common/types}/base.d.ts +1 -0
- package/dist/types/src/internal/common/types/base.d.ts.map +1 -0
- package/dist/types/src/internal/{types → common/types}/entity.d.ts +5 -5
- package/dist/types/src/internal/common/types/entity.d.ts.map +1 -0
- package/dist/types/src/internal/{types → common/types}/index.d.ts +1 -0
- package/dist/types/src/internal/common/types/index.d.ts.map +1 -0
- package/dist/types/src/internal/{types → common/types}/meta.d.ts +2 -1
- package/dist/types/src/internal/common/types/meta.d.ts.map +1 -0
- package/dist/types/src/internal/common/types/model-symbols.d.ts +54 -0
- package/dist/types/src/internal/common/types/model-symbols.d.ts.map +1 -0
- package/dist/types/src/internal/common/types/typename.d.ts.map +1 -0
- package/dist/types/src/internal/{types → common/types}/version.d.ts +2 -2
- package/dist/types/src/internal/common/types/version.d.ts.map +1 -0
- package/dist/types/src/internal/index.d.ts +9 -10
- package/dist/types/src/internal/index.d.ts.map +1 -1
- package/dist/types/src/testing/test-data.d.ts +8 -8
- package/dist/types/src/testing/test-data.d.ts.map +1 -1
- package/dist/types/src/testing/test-schema.d.ts +47 -46
- package/dist/types/src/testing/test-schema.d.ts.map +1 -1
- package/dist/types/src/testing/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +29 -14
- package/src/Annotation.ts +7 -3
- package/src/Collection.ts +37 -0
- package/src/Database.ts +63 -64
- package/src/Dataset.ts +26 -0
- package/src/Entity.ts +87 -61
- package/src/Err.ts +2 -0
- package/src/Extension.test.ts +235 -0
- package/src/Extension.ts +122 -0
- package/src/Feed.ts +304 -0
- package/src/Filter.test.ts +90 -0
- package/src/Filter.ts +85 -7
- package/src/Format.ts +3 -3
- package/src/Hypergraph.ts +9 -4
- package/src/Json.test.ts +175 -0
- package/src/Json.ts +102 -0
- package/src/JsonSchema.ts +14 -4
- package/src/Migration.ts +94 -0
- package/src/Obj.test.ts +112 -15
- package/src/Obj.ts +302 -166
- package/src/Order.ts +3 -1
- package/src/Query.test.ts +372 -15
- package/src/Query.ts +269 -26
- package/src/Ref.ts +64 -11
- package/src/Relation.test.ts +8 -2
- package/src/Relation.ts +183 -147
- package/src/SchemaRegistry.ts +5 -4
- package/src/Tag.ts +6 -5
- package/src/Type.test.ts +10 -10
- package/src/Type.ts +70 -303
- package/src/View.ts +107 -0
- package/src/exemplars.test.ts +21 -0
- package/src/index.ts +8 -0
- package/src/internal/{annotations → Annotation}/annotations.test.ts +56 -7
- package/src/internal/{annotations → Annotation}/annotations.ts +122 -19
- package/src/internal/{annotations → Annotation}/index.ts +1 -0
- package/src/internal/{api → Annotation}/sorting.ts +2 -4
- package/src/internal/{annotations → Annotation}/util.ts +1 -1
- package/src/internal/{api/entity.ts → Entity/api.ts} +3 -2
- package/src/internal/{entities → Entity}/entity.ts +6 -4
- package/src/internal/{entities → Entity}/index.ts +2 -0
- package/src/internal/{entities → Entity}/model.ts +13 -42
- package/src/internal/{entities → Entity}/object.ts +2 -3
- package/src/internal/{entities → Entity}/relation.ts +19 -36
- package/src/internal/{api → Entity}/version.ts +2 -2
- package/src/internal/{formats → Format}/date.test.ts +1 -2
- package/src/internal/{formats → Format}/format.test.ts +1 -2
- package/src/internal/{formats → Format}/types.ts +2 -2
- package/src/internal/{json-schema → JsonSchema}/annotations.ts +3 -3
- package/src/internal/{json-schema → JsonSchema}/json-schema-type.ts +4 -4
- package/src/internal/{json-schema → JsonSchema}/json-schema.test.ts +48 -49
- package/src/internal/{json-schema → JsonSchema}/json-schema.ts +6 -5
- package/src/internal/{object → Obj}/clone.ts +3 -3
- package/src/internal/{object → Obj}/common.ts +2 -2
- package/src/internal/{object → Obj}/create-object.test.ts +5 -7
- package/src/internal/{object → Obj}/create-object.ts +5 -6
- package/src/internal/{object → Obj}/deleted.ts +2 -2
- package/src/internal/{object → Obj}/inspect.ts +2 -2
- package/src/internal/{object → Obj}/json-serializer.test.ts +31 -9
- package/src/internal/{object → Obj}/json-serializer.ts +52 -27
- package/src/internal/{object → Obj}/schema-validator.ts +1 -1
- package/src/internal/{object → Obj}/set-value.test.ts +24 -24
- package/src/internal/{object → Obj}/set-value.ts +3 -3
- package/src/internal/{object → Obj}/snapshot.ts +35 -23
- package/src/internal/{object → Obj}/typed-object.test.ts +3 -3
- package/src/internal/{object → Obj}/typed-object.ts +4 -4
- package/src/internal/Query.ts +137 -0
- package/src/internal/{ref → Ref}/ref-array.ts +1 -2
- package/src/internal/{ref → Ref}/ref.test.ts +4 -5
- package/src/internal/{ref → Ref}/ref.ts +20 -3
- package/src/internal/{schema → Type}/compose.test.ts +5 -6
- package/src/internal/{schema → Type}/compose.ts +1 -1
- package/src/internal/{schema → Type}/echo-schema.ts +9 -10
- package/src/internal/{schema → Type}/manipulation.ts +1 -1
- package/src/internal/{schema → Type}/persistent-schema.ts +9 -4
- package/src/internal/{README.md → common/README.md} +2 -2
- package/src/internal/{api → common/api}/index.ts +0 -4
- package/src/internal/{api → common/api}/meta.ts +3 -3
- package/src/internal/common/index.ts +7 -0
- package/src/internal/{proxy → common/proxy}/change-context.ts +1 -1
- package/src/internal/{proxy → common/proxy}/change.test.ts +97 -97
- package/src/internal/{proxy → common/proxy}/errors.ts +2 -2
- package/src/internal/{proxy → common/proxy}/handler.test.ts +2 -4
- package/src/internal/{proxy → common/proxy}/json-serializer.ts +6 -3
- package/src/internal/{proxy → common/proxy}/make-object.ts +1 -2
- package/src/internal/{proxy → common/proxy}/ownership.ts +0 -1
- package/src/internal/{proxy → common/proxy}/reactive-array.ts +1 -1
- package/src/internal/common/proxy/reactive.test.ts +54 -0
- package/src/internal/{proxy → common/proxy}/reactive.ts +12 -4
- package/src/internal/{proxy → common/proxy}/schema.test.ts +10 -10
- package/src/internal/{proxy → common/proxy}/typed-handler.test.ts +6 -7
- package/src/internal/{proxy → common/proxy}/typed-handler.ts +10 -13
- package/src/internal/{proxy → common/proxy}/typed-object.test.ts +5 -6
- package/src/internal/{types → common/types}/base.ts +1 -1
- package/src/internal/{types → common/types}/entity.ts +2 -2
- package/src/internal/{types → common/types}/index.ts +1 -0
- package/src/internal/{types → common/types}/meta.ts +3 -1
- package/src/internal/common/types/model-symbols.ts +69 -0
- package/src/internal/{types → common/types}/version.ts +2 -3
- package/src/internal/index.ts +9 -31
- package/src/testing/api.test.ts +4 -5
- package/src/testing/test-data.ts +157 -98
- package/src/testing/test-schema.ts +20 -18
- package/dist/lib/neutral/chunk-7WE7SBA2.mjs.map +0 -7
- package/dist/lib/neutral/chunk-7YWDDFPH.mjs.map +0 -7
- package/dist/lib/neutral/chunk-B4FLOYG7.mjs.map +0 -7
- package/dist/lib/neutral/chunk-EXAYCLIM.mjs.map +0 -7
- package/dist/lib/neutral/chunk-F6BTBXL7.mjs +0 -171
- package/dist/lib/neutral/chunk-F6BTBXL7.mjs.map +0 -7
- package/dist/lib/neutral/chunk-HQXQWXLH.mjs.map +0 -7
- package/dist/lib/neutral/chunk-MXQJZCPY.mjs.map +0 -7
- package/dist/lib/neutral/chunk-RCBBZLVM.mjs +0 -142
- package/dist/lib/neutral/chunk-RCBBZLVM.mjs.map +0 -7
- package/dist/lib/neutral/chunk-RIMHNJ3E.mjs.map +0 -7
- package/dist/lib/neutral/chunk-ROKO4RKJ.mjs.map +0 -7
- package/dist/lib/neutral/chunk-TMLVKIMX.mjs.map +0 -7
- package/dist/lib/neutral/chunk-UMECVTXM.mjs.map +0 -7
- package/dist/lib/neutral/chunk-VJ2H5MOJ.mjs +0 -3905
- package/dist/lib/neutral/chunk-VJ2H5MOJ.mjs.map +0 -7
- package/dist/lib/neutral/chunk-VYEWMV5U.mjs.map +0 -7
- package/dist/lib/neutral/chunk-X2MPMYYN.mjs +0 -13
- package/dist/lib/neutral/chunk-X2MPMYYN.mjs.map +0 -7
- package/dist/lib/neutral/chunk-XAJMXQ4H.mjs.map +0 -7
- package/dist/lib/neutral/chunk-YPIP3WGI.mjs.map +0 -7
- package/dist/types/src/internal/annotations/annotations.d.ts.map +0 -1
- package/dist/types/src/internal/annotations/annotations.test.d.ts.map +0 -1
- package/dist/types/src/internal/annotations/index.d.ts +0 -3
- package/dist/types/src/internal/annotations/index.d.ts.map +0 -1
- package/dist/types/src/internal/annotations/util.d.ts.map +0 -1
- package/dist/types/src/internal/api/annotations.d.ts +0 -23
- package/dist/types/src/internal/api/annotations.d.ts.map +0 -1
- package/dist/types/src/internal/api/entity.d.ts.map +0 -1
- package/dist/types/src/internal/api/index.d.ts.map +0 -1
- package/dist/types/src/internal/api/meta.d.ts.map +0 -1
- package/dist/types/src/internal/api/sorting.d.ts.map +0 -1
- package/dist/types/src/internal/api/version.d.ts.map +0 -1
- package/dist/types/src/internal/entities/entity.d.ts.map +0 -1
- package/dist/types/src/internal/entities/index.d.ts.map +0 -1
- package/dist/types/src/internal/entities/model.d.ts.map +0 -1
- package/dist/types/src/internal/entities/object.d.ts.map +0 -1
- package/dist/types/src/internal/entities/relation.d.ts.map +0 -1
- package/dist/types/src/internal/entities/util.d.ts.map +0 -1
- package/dist/types/src/internal/formats/date.d.ts.map +0 -1
- package/dist/types/src/internal/formats/date.test.d.ts.map +0 -1
- package/dist/types/src/internal/formats/format.d.ts.map +0 -1
- package/dist/types/src/internal/formats/format.test.d.ts.map +0 -1
- package/dist/types/src/internal/formats/index.d.ts.map +0 -1
- package/dist/types/src/internal/formats/number.d.ts.map +0 -1
- package/dist/types/src/internal/formats/object.d.ts.map +0 -1
- package/dist/types/src/internal/formats/select.d.ts.map +0 -1
- package/dist/types/src/internal/formats/string.d.ts.map +0 -1
- package/dist/types/src/internal/formats/types.d.ts.map +0 -1
- package/dist/types/src/internal/json-schema/annotations.d.ts.map +0 -1
- package/dist/types/src/internal/json-schema/effect-schema.test.d.ts.map +0 -1
- package/dist/types/src/internal/json-schema/index.d.ts.map +0 -1
- package/dist/types/src/internal/json-schema/json-schema-normalize.d.ts.map +0 -1
- package/dist/types/src/internal/json-schema/json-schema-type.d.ts.map +0 -1
- package/dist/types/src/internal/json-schema/json-schema.d.ts.map +0 -1
- package/dist/types/src/internal/json-schema/json-schema.test.d.ts.map +0 -1
- package/dist/types/src/internal/object/clone.d.ts.map +0 -1
- package/dist/types/src/internal/object/common.d.ts.map +0 -1
- package/dist/types/src/internal/object/create-object.d.ts.map +0 -1
- package/dist/types/src/internal/object/create-object.test.d.ts.map +0 -1
- package/dist/types/src/internal/object/deleted.d.ts.map +0 -1
- package/dist/types/src/internal/object/ids.d.ts.map +0 -1
- package/dist/types/src/internal/object/index.d.ts.map +0 -1
- package/dist/types/src/internal/object/inspect.d.ts.map +0 -1
- package/dist/types/src/internal/object/json-serializer.d.ts.map +0 -1
- package/dist/types/src/internal/object/json-serializer.test.d.ts.map +0 -1
- package/dist/types/src/internal/object/schema-validator.d.ts +0 -2
- package/dist/types/src/internal/object/schema-validator.d.ts.map +0 -1
- package/dist/types/src/internal/object/schema-validator.test.d.ts.map +0 -1
- package/dist/types/src/internal/object/set-value.d.ts.map +0 -1
- package/dist/types/src/internal/object/set-value.test.d.ts.map +0 -1
- package/dist/types/src/internal/object/snapshot.d.ts.map +0 -1
- package/dist/types/src/internal/object/typed-object.d.ts.map +0 -1
- package/dist/types/src/internal/object/typed-object.test.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/change-context.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/change.test.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/define-hidden-property.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/errors.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/event-batch.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/handler.test.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/index.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/json-serializer.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/make-object.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/ownership.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/proxy-types.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/proxy-utils.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/reactive-array.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/schema-validator.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/schema.test.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/symbols.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/typed-handler.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/typed-handler.test.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/typed-object.test.d.ts.map +0 -1
- package/dist/types/src/internal/ref/index.d.ts.map +0 -1
- package/dist/types/src/internal/ref/ref-array.d.ts.map +0 -1
- package/dist/types/src/internal/ref/ref.d.ts.map +0 -1
- package/dist/types/src/internal/ref/ref.test.d.ts.map +0 -1
- package/dist/types/src/internal/schema/compose.d.ts.map +0 -1
- package/dist/types/src/internal/schema/compose.test.d.ts.map +0 -1
- package/dist/types/src/internal/schema/echo-schema.d.ts.map +0 -1
- package/dist/types/src/internal/schema/index.d.ts.map +0 -1
- package/dist/types/src/internal/schema/manipulation.d.ts.map +0 -1
- package/dist/types/src/internal/schema/persistent-schema.d.ts.map +0 -1
- package/dist/types/src/internal/types/base.d.ts.map +0 -1
- package/dist/types/src/internal/types/entity.d.ts.map +0 -1
- package/dist/types/src/internal/types/index.d.ts.map +0 -1
- package/dist/types/src/internal/types/meta.d.ts.map +0 -1
- package/dist/types/src/internal/types/typename.d.ts.map +0 -1
- package/dist/types/src/internal/types/version.d.ts.map +0 -1
- package/src/internal/api/annotations.ts +0 -60
- /package/dist/lib/neutral/{chunk-ANHVGJI4.mjs.map → chunk-7RVZT53K.mjs.map} +0 -0
- /package/dist/lib/neutral/{chunk-OMUPQMLR.mjs.map → chunk-V72DY6LU.mjs.map} +0 -0
- /package/dist/types/src/internal/{annotations → Annotation}/annotations.test.d.ts +0 -0
- /package/dist/types/src/internal/{entities → Entity}/util.d.ts +0 -0
- /package/dist/types/src/internal/{formats → Format}/date.d.ts +0 -0
- /package/dist/types/src/internal/{formats → Format}/date.test.d.ts +0 -0
- /package/dist/types/src/internal/{formats → Format}/format.d.ts +0 -0
- /package/dist/types/src/internal/{formats → Format}/format.test.d.ts +0 -0
- /package/dist/types/src/internal/{formats → Format}/index.d.ts +0 -0
- /package/dist/types/src/internal/{formats → Format}/number.d.ts +0 -0
- /package/dist/types/src/internal/{formats → Format}/object.d.ts +0 -0
- /package/dist/types/src/internal/{formats → Format}/select.d.ts +0 -0
- /package/dist/types/src/internal/{formats → Format}/string.d.ts +0 -0
- /package/dist/types/src/internal/{json-schema → JsonSchema}/effect-schema.test.d.ts +0 -0
- /package/dist/types/src/internal/{json-schema → JsonSchema}/index.d.ts +0 -0
- /package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema-normalize.d.ts +0 -0
- /package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema.test.d.ts +0 -0
- /package/dist/types/src/internal/{object → Obj}/clone.d.ts +0 -0
- /package/dist/types/src/internal/{object → Obj}/common.d.ts +0 -0
- /package/dist/types/src/internal/{object → Obj}/create-object.test.d.ts +0 -0
- /package/dist/types/src/internal/{object → Obj}/ids.d.ts +0 -0
- /package/dist/types/src/internal/{object → Obj}/index.d.ts +0 -0
- /package/dist/types/src/internal/{object → Obj}/inspect.d.ts +0 -0
- /package/dist/types/src/internal/{object → Obj}/json-serializer.test.d.ts +0 -0
- /package/dist/types/src/internal/{object → Obj}/schema-validator.test.d.ts +0 -0
- /package/dist/types/src/internal/{object → Obj}/set-value.test.d.ts +0 -0
- /package/dist/types/src/internal/{object → Obj}/snapshot.d.ts +0 -0
- /package/dist/types/src/internal/{object → Obj}/typed-object.test.d.ts +0 -0
- /package/dist/types/src/internal/{ref → Ref}/index.d.ts +0 -0
- /package/dist/types/src/internal/{ref → Ref}/ref.test.d.ts +0 -0
- /package/dist/types/src/internal/{schema → Type}/compose.test.d.ts +0 -0
- /package/dist/types/src/internal/{schema → Type}/index.d.ts +0 -0
- /package/dist/types/src/internal/{schema → Type}/manipulation.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/change.test.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/define-hidden-property.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/event-batch.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/handler.test.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/index.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/json-serializer.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/make-object.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/ownership.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/proxy-types.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/proxy-utils.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/schema-validator.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/schema.test.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/symbols.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/typed-handler.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/typed-handler.test.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/typed-object.test.d.ts +0 -0
- /package/dist/types/src/internal/{types → common/types}/typename.d.ts +0 -0
- /package/src/internal/{entities → Entity}/util.ts +0 -0
- /package/src/internal/{formats → Format}/date.ts +0 -0
- /package/src/internal/{formats → Format}/format.ts +0 -0
- /package/src/internal/{formats → Format}/index.ts +0 -0
- /package/src/internal/{formats → Format}/number.ts +0 -0
- /package/src/internal/{formats → Format}/object.ts +0 -0
- /package/src/internal/{formats → Format}/select.ts +0 -0
- /package/src/internal/{formats → Format}/string.ts +0 -0
- /package/src/internal/{json-schema → JsonSchema}/effect-schema.test.ts +0 -0
- /package/src/internal/{json-schema → JsonSchema}/index.ts +0 -0
- /package/src/internal/{json-schema → JsonSchema}/json-schema-normalize.ts +0 -0
- /package/src/internal/{object → Obj}/ids.ts +0 -0
- /package/src/internal/{object → Obj}/index.ts +0 -0
- /package/src/internal/{object → Obj}/schema-validator.test.ts +0 -0
- /package/src/internal/{ref → Ref}/index.ts +0 -0
- /package/src/internal/{schema → Type}/index.ts +0 -0
- /package/src/internal/{proxy → common/proxy}/define-hidden-property.ts +0 -0
- /package/src/internal/{proxy → common/proxy}/event-batch.ts +0 -0
- /package/src/internal/{proxy → common/proxy}/index.ts +0 -0
- /package/src/internal/{proxy → common/proxy}/proxy-types.ts +0 -0
- /package/src/internal/{proxy → common/proxy}/proxy-utils.ts +0 -0
- /package/src/internal/{proxy → common/proxy}/schema-validator.ts +0 -0
- /package/src/internal/{proxy → common/proxy}/symbols.ts +0 -0
- /package/src/internal/{types → common/types}/typename.ts +0 -0
package/src/Relation.ts
CHANGED
|
@@ -2,80 +2,35 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
// @import-as-namespace
|
|
6
|
+
|
|
7
|
+
import * as Schema from 'effect/Schema';
|
|
6
8
|
|
|
7
9
|
import { raise } from '@dxos/debug';
|
|
8
10
|
import type { ForeignKey } from '@dxos/echo-protocol';
|
|
9
|
-
import { createJsonPath
|
|
11
|
+
import { createJsonPath } from '@dxos/effect';
|
|
10
12
|
import { assertArgument, invariant } from '@dxos/invariant';
|
|
11
13
|
import { DXN, type ObjectId } from '@dxos/keys';
|
|
12
14
|
import { assumeType } from '@dxos/util';
|
|
13
15
|
|
|
14
16
|
import type * as Database from './Database';
|
|
15
17
|
import * as Entity from './Entity';
|
|
16
|
-
import
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
ATTR_RELATION_TARGET,
|
|
20
|
-
type AnyEntity,
|
|
21
|
-
type Comparator as ApiComparator,
|
|
22
|
-
type Meta as ApiMeta,
|
|
23
|
-
type ReadonlyMeta as ApiReadonlyMeta,
|
|
24
|
-
type EntityVersion as ApiVersion,
|
|
25
|
-
type ChangeCallback,
|
|
26
|
-
EntityKind,
|
|
27
|
-
type InternalObjectProps,
|
|
28
|
-
type KindId,
|
|
29
|
-
MetaId,
|
|
30
|
-
type Mutable,
|
|
31
|
-
type ObjectMeta,
|
|
32
|
-
ParentId,
|
|
33
|
-
RelationSourceDXNId,
|
|
34
|
-
RelationSourceId,
|
|
35
|
-
RelationTargetDXNId,
|
|
36
|
-
RelationTargetId,
|
|
37
|
-
SnapshotKindId,
|
|
38
|
-
VersionTypeId,
|
|
39
|
-
addTag as addTag$,
|
|
40
|
-
change as change$,
|
|
41
|
-
deleteKeys as deleteKeys$,
|
|
42
|
-
getDXN as getDXN$,
|
|
43
|
-
getDatabase as getDatabase$,
|
|
44
|
-
getDescription as getDescription$,
|
|
45
|
-
getKeys as getKeys$,
|
|
46
|
-
getLabel as getLabel$,
|
|
47
|
-
getMetaChecked as getMeta$,
|
|
48
|
-
getObjectDXN,
|
|
49
|
-
getSchema as getSchema$,
|
|
50
|
-
getSnapshot as getSnapshot$,
|
|
51
|
-
getTypeAnnotation,
|
|
52
|
-
getTypeDXN as getTypeDXN$,
|
|
53
|
-
getTypename as getTypename$,
|
|
54
|
-
isDeleted as isDeleted$,
|
|
55
|
-
isVersion,
|
|
56
|
-
makeObject,
|
|
57
|
-
removeTag as removeTag$,
|
|
58
|
-
setDescription as setDescription$,
|
|
59
|
-
setLabel as setLabel$,
|
|
60
|
-
setValue as setValue$,
|
|
61
|
-
sort as sort$,
|
|
62
|
-
sortByLabel as sortByLabel$,
|
|
63
|
-
sortByTypename as sortByTypename$,
|
|
64
|
-
subscribe as subscribe$,
|
|
65
|
-
objectToJSON as toJSON$,
|
|
66
|
-
version as version$,
|
|
67
|
-
} from './internal';
|
|
68
|
-
import type * as Obj from './Obj';
|
|
18
|
+
import * as internal from './internal';
|
|
19
|
+
import * as entityInternal from './internal/Entity';
|
|
20
|
+
import * as Obj from './Obj';
|
|
69
21
|
import type * as Type from './Type';
|
|
70
22
|
|
|
23
|
+
export type Endpoints<Source, Target> = {
|
|
24
|
+
[Source]: Source;
|
|
25
|
+
[Target]: Target;
|
|
26
|
+
};
|
|
27
|
+
|
|
71
28
|
/**
|
|
72
29
|
* Base type for all ECHO relations.
|
|
73
30
|
* @private
|
|
74
31
|
*/
|
|
75
32
|
interface BaseRelation<Source, Target>
|
|
76
|
-
extends AnyEntity,
|
|
77
|
-
Type.Relation.Endpoints<Source, Target>,
|
|
78
|
-
Entity.OfKind<EntityKind.Relation> {}
|
|
33
|
+
extends internal.AnyEntity, Endpoints<Source, Target>, Entity.OfKind<internal.EntityKind.Relation> {}
|
|
79
34
|
|
|
80
35
|
/**
|
|
81
36
|
* Relation with no known properties beyond id, kind, source, and target.
|
|
@@ -86,49 +41,106 @@ interface BaseRelation<Source, Target>
|
|
|
86
41
|
*/
|
|
87
42
|
export interface Unknown extends BaseRelation<Obj.Unknown, Obj.Unknown> {}
|
|
88
43
|
|
|
44
|
+
/**
|
|
45
|
+
* Runtime Effect schema for any ECHO relation.
|
|
46
|
+
* Use for validation, parsing, or as a reference target for collections.
|
|
47
|
+
* A relation has `id`, source, and target fields plus any additional properties.
|
|
48
|
+
*
|
|
49
|
+
* NOTE: `Schema.is(Type.Relation)` does STRUCTURAL validation only (checks for `id` field).
|
|
50
|
+
* Use `Relation.isRelation()` for proper ECHO instance type guards that check the KindId brand.
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```ts
|
|
54
|
+
* // Structural type guard (accepts any object with id field)
|
|
55
|
+
* if (Schema.is(Type.Relation)(unknownValue)) { ... }
|
|
56
|
+
*
|
|
57
|
+
* // ECHO instance type guard (checks KindId brand)
|
|
58
|
+
* if (Relation.isRelation(unknownValue)) { ... }
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
// TODO(dmaretskyi): Change ObjModule.Any to ObjModule.Unknown to have stricter types.
|
|
62
|
+
export const Unknown: Type.Relation<Unknown, Obj.Any, Obj.Any> = Schema.Struct({
|
|
63
|
+
id: Schema.String,
|
|
64
|
+
}).pipe(
|
|
65
|
+
Schema.extend(Schema.Record({ key: Schema.String, value: Schema.Unknown })),
|
|
66
|
+
// TODO(dmaretskyi): Clean this up.
|
|
67
|
+
// NOTE: The EchoRelationSchema annotation is required for Ref.Ref(Relation.Unknown) to work.
|
|
68
|
+
// The typename/version/source/target only satisfy ECHO schema machinery for reference targets.
|
|
69
|
+
internal.EchoRelationSchema({
|
|
70
|
+
typename: 'org.dxos.schema.anyRelation',
|
|
71
|
+
version: '0.0.0',
|
|
72
|
+
source: Obj.Unknown,
|
|
73
|
+
target: Obj.Unknown,
|
|
74
|
+
}),
|
|
75
|
+
(schema) =>
|
|
76
|
+
Object.assign(schema, {
|
|
77
|
+
[internal.SchemaKindId]: (schema as any)[internal.SchemaKindId],
|
|
78
|
+
}) as unknown as Type.Relation<Unknown, Obj.Any, Obj.Any>,
|
|
79
|
+
);
|
|
80
|
+
|
|
89
81
|
/**
|
|
90
82
|
* Relation type with specific source and target types.
|
|
91
83
|
*/
|
|
92
|
-
export type
|
|
84
|
+
export type OfShape<Source extends Obj.Unknown, Target extends Obj.Unknown, Props> = BaseRelation<Source, Target> &
|
|
93
85
|
Props;
|
|
94
86
|
|
|
95
87
|
/**
|
|
96
88
|
* Base type for snapshot relations (has SnapshotKindId instead of KindId).
|
|
97
89
|
*/
|
|
98
|
-
interface BaseRelationSnapshot<Source, Target> extends AnyEntity,
|
|
99
|
-
readonly [SnapshotKindId]: EntityKind.Relation;
|
|
90
|
+
interface BaseRelationSnapshot<Source, Target> extends internal.AnyEntity, Endpoints<Source, Target> {
|
|
91
|
+
readonly [Entity.SnapshotKindId]: internal.EntityKind.Relation;
|
|
100
92
|
readonly id: ObjectId;
|
|
101
93
|
}
|
|
102
94
|
|
|
95
|
+
/**
|
|
96
|
+
* JSON-encoded properties for relations.
|
|
97
|
+
*/
|
|
98
|
+
export interface BaseRelationJson {
|
|
99
|
+
id: string;
|
|
100
|
+
[internal.ATTR_RELATION_SOURCE]: string;
|
|
101
|
+
[internal.ATTR_RELATION_TARGET]: string;
|
|
102
|
+
}
|
|
103
|
+
|
|
103
104
|
/**
|
|
104
105
|
* Immutable snapshot of an ECHO relation.
|
|
105
106
|
* Branded with SnapshotKindId (not KindId).
|
|
106
107
|
* Property values are frozen at the time the snapshot was created.
|
|
107
108
|
* Returned by getSnapshot() and hooks.
|
|
108
109
|
*/
|
|
109
|
-
export type Snapshot<T extends Unknown = Unknown> = Omit<T, KindId> &
|
|
110
|
+
export type Snapshot<T extends Unknown = Unknown> = Omit<T, Entity.KindId> &
|
|
111
|
+
BaseRelationSnapshot<Obj.Unknown, Obj.Unknown>;
|
|
110
112
|
|
|
111
|
-
export const Source: unique symbol = RelationSourceId as any;
|
|
113
|
+
export const Source: unique symbol = entityInternal.RelationSourceId as any;
|
|
112
114
|
export type Source = typeof Source;
|
|
113
115
|
|
|
114
|
-
export const Target: unique symbol = RelationTargetId as any;
|
|
116
|
+
export const Target: unique symbol = entityInternal.RelationTargetId as any;
|
|
115
117
|
export type Target = typeof Target;
|
|
116
118
|
|
|
119
|
+
/**
|
|
120
|
+
* Get relation source type.
|
|
121
|
+
*/
|
|
122
|
+
export type SourceOf<A> = A extends Endpoints<infer S, infer _T> ? S : never;
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Get relation target type.
|
|
126
|
+
*/
|
|
127
|
+
export type TargetOf<A> = A extends Endpoints<infer _S, infer T> ? T : never;
|
|
128
|
+
|
|
117
129
|
/**
|
|
118
130
|
* Internal props type for relation instance creation.
|
|
119
131
|
*/
|
|
120
|
-
type
|
|
132
|
+
type MakePropsInternal<T extends Unknown> = {
|
|
121
133
|
id?: ObjectId;
|
|
122
|
-
[
|
|
134
|
+
[Meta]?: internal.ObjectMeta;
|
|
123
135
|
[Source]: T[Source];
|
|
124
136
|
[Target]: T[Target];
|
|
125
|
-
} &
|
|
137
|
+
} & Entity.Properties<T>;
|
|
126
138
|
|
|
127
139
|
/**
|
|
128
140
|
* Props type for relation creation with a given schema.
|
|
129
141
|
* Takes a schema type (created with Type.Relation) and extracts the props type.
|
|
130
142
|
*/
|
|
131
|
-
export type MakeProps<S extends Type.
|
|
143
|
+
export type MakeProps<S extends Type.AnyRelation> = MakePropsInternal<Schema.Schema.Type<S>>;
|
|
132
144
|
|
|
133
145
|
/**
|
|
134
146
|
* Creates new relation.
|
|
@@ -139,26 +151,31 @@ export type MakeProps<S extends Type.Relation.Any> = RelationMakeProps<Schema.Sc
|
|
|
139
151
|
*/
|
|
140
152
|
// NOTE: Writing the definition this way (with generic over schema) makes typescript perfer to infer the type from the first param (this schema) rather than the second param (the props).
|
|
141
153
|
// TODO(dmaretskyi): Move meta into props.
|
|
142
|
-
export const make = <S extends Type.
|
|
154
|
+
export const make = <S extends Type.AnyRelation>(
|
|
143
155
|
schema: S,
|
|
144
|
-
props: NoInfer<
|
|
145
|
-
meta?: ObjectMeta,
|
|
156
|
+
props: NoInfer<MakeProps<S>>,
|
|
146
157
|
): Schema.Schema.Type<S> & Entity.OfKind<typeof Entity.Kind.Relation> => {
|
|
147
|
-
assertArgument(
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
158
|
+
assertArgument(
|
|
159
|
+
internal.getTypeAnnotation(schema)?.kind === internal.EntityKind.Relation,
|
|
160
|
+
'schema',
|
|
161
|
+
'Expected a relation schema',
|
|
162
|
+
);
|
|
163
|
+
assertArgument(props[internal.ParentId] === undefined, 'props', 'Parent is not allowed for relations');
|
|
164
|
+
|
|
165
|
+
let meta: internal.ObjectMeta | undefined = undefined;
|
|
166
|
+
|
|
167
|
+
if (props[internal.MetaId] != null) {
|
|
168
|
+
meta = props[internal.MetaId] as any;
|
|
169
|
+
delete props[internal.MetaId];
|
|
153
170
|
}
|
|
154
171
|
|
|
155
|
-
const sourceDXN = getObjectDXN(props[Source]) ?? raise(new Error('Unresolved relation source'));
|
|
156
|
-
const targetDXN = getObjectDXN(props[Target]) ?? raise(new Error('Unresolved relation target'));
|
|
172
|
+
const sourceDXN = internal.getObjectDXN(props[Source]) ?? raise(new Error('Unresolved relation source'));
|
|
173
|
+
const targetDXN = internal.getObjectDXN(props[Target]) ?? raise(new Error('Unresolved relation target'));
|
|
157
174
|
|
|
158
|
-
(props as any)[RelationSourceDXNId] = sourceDXN;
|
|
159
|
-
(props as any)[RelationTargetDXNId] = targetDXN;
|
|
175
|
+
(props as any)[internal.RelationSourceDXNId] = sourceDXN;
|
|
176
|
+
(props as any)[internal.RelationTargetDXNId] = targetDXN;
|
|
160
177
|
|
|
161
|
-
return makeObject<Schema.Schema.Type<S>>(schema, props as any, meta);
|
|
178
|
+
return internal.makeObject<Schema.Schema.Type<S>>(schema, props as any, meta);
|
|
162
179
|
};
|
|
163
180
|
|
|
164
181
|
/**
|
|
@@ -169,13 +186,20 @@ export const isRelation = (value: unknown): value is Unknown => {
|
|
|
169
186
|
if (typeof value !== 'object' || value === null) {
|
|
170
187
|
return false;
|
|
171
188
|
}
|
|
172
|
-
if (ATTR_RELATION_SOURCE in value || ATTR_RELATION_TARGET in value) {
|
|
189
|
+
if (internal.ATTR_RELATION_SOURCE in value || internal.ATTR_RELATION_TARGET in value) {
|
|
173
190
|
return true;
|
|
174
191
|
}
|
|
175
192
|
|
|
176
193
|
// Check for reactive relation (KindId) or snapshot (SnapshotKindId).
|
|
177
|
-
const kind = (value as any)[Entity.KindId] ?? (value as any)[SnapshotKindId];
|
|
178
|
-
return kind === EntityKind.Relation;
|
|
194
|
+
const kind = (value as any)[Entity.KindId] ?? (value as any)[Entity.SnapshotKindId];
|
|
195
|
+
return kind === internal.EntityKind.Relation;
|
|
196
|
+
};
|
|
197
|
+
|
|
198
|
+
export const isSnapshot = (value: unknown): value is Snapshot => {
|
|
199
|
+
if (typeof value !== 'object' || value === null) {
|
|
200
|
+
return false;
|
|
201
|
+
}
|
|
202
|
+
return (value as any)[Entity.SnapshotKindId] === internal.EntityKind.Relation;
|
|
179
203
|
};
|
|
180
204
|
|
|
181
205
|
/**
|
|
@@ -185,8 +209,8 @@ export const isRelation = (value: unknown): value is Unknown => {
|
|
|
185
209
|
*/
|
|
186
210
|
export const getSourceDXN = (value: Unknown | Snapshot): DXN => {
|
|
187
211
|
assertArgument(isRelation(value), 'Expected a relation');
|
|
188
|
-
assumeType<InternalObjectProps>(value);
|
|
189
|
-
const dxn = (value as InternalObjectProps)[RelationSourceDXNId];
|
|
212
|
+
assumeType<internal.InternalObjectProps>(value);
|
|
213
|
+
const dxn = (value as internal.InternalObjectProps)[internal.RelationSourceDXNId];
|
|
190
214
|
invariant(dxn instanceof DXN);
|
|
191
215
|
return dxn;
|
|
192
216
|
};
|
|
@@ -198,8 +222,8 @@ export const getSourceDXN = (value: Unknown | Snapshot): DXN => {
|
|
|
198
222
|
*/
|
|
199
223
|
export const getTargetDXN = (value: Unknown | Snapshot): DXN => {
|
|
200
224
|
assertArgument(isRelation(value), 'Expected a relation');
|
|
201
|
-
assumeType<InternalObjectProps>(value);
|
|
202
|
-
const dxn = (value as InternalObjectProps)[RelationTargetDXNId];
|
|
225
|
+
assumeType<internal.InternalObjectProps>(value);
|
|
226
|
+
const dxn = (value as internal.InternalObjectProps)[internal.RelationTargetDXNId];
|
|
203
227
|
invariant(dxn instanceof DXN);
|
|
204
228
|
return dxn;
|
|
205
229
|
};
|
|
@@ -209,12 +233,14 @@ export const getTargetDXN = (value: Unknown | Snapshot): DXN => {
|
|
|
209
233
|
* Accepts both reactive relations and snapshots.
|
|
210
234
|
* @throws If the object is not a relation.
|
|
211
235
|
*/
|
|
212
|
-
export const getSource = <T extends Unknown | Snapshot>(relation: T):
|
|
236
|
+
export const getSource = <T extends Unknown | Snapshot>(relation: T): SourceOf<T> => {
|
|
213
237
|
assertArgument(isRelation(relation), 'Expected a relation');
|
|
214
|
-
assumeType<InternalObjectProps>(relation);
|
|
215
|
-
const obj = (relation as InternalObjectProps)[RelationSourceId];
|
|
216
|
-
|
|
217
|
-
|
|
238
|
+
assumeType<internal.InternalObjectProps>(relation);
|
|
239
|
+
const obj = (relation as internal.InternalObjectProps)[internal.RelationSourceId];
|
|
240
|
+
if (obj === undefined) {
|
|
241
|
+
throw new Error(`Relation source could not be resolved.`);
|
|
242
|
+
}
|
|
243
|
+
return obj as SourceOf<T>;
|
|
218
244
|
};
|
|
219
245
|
|
|
220
246
|
/**
|
|
@@ -222,12 +248,14 @@ export const getSource = <T extends Unknown | Snapshot>(relation: T): Type.Relat
|
|
|
222
248
|
* Accepts both reactive relations and snapshots.
|
|
223
249
|
* @throws If the object is not a relation.
|
|
224
250
|
*/
|
|
225
|
-
export const getTarget = <T extends Unknown | Snapshot>(relation: T):
|
|
251
|
+
export const getTarget = <T extends Unknown | Snapshot>(relation: T): TargetOf<T> => {
|
|
226
252
|
assertArgument(isRelation(relation), 'Expected a relation');
|
|
227
|
-
assumeType<InternalObjectProps>(relation);
|
|
228
|
-
const obj = (relation as InternalObjectProps)[RelationTargetId];
|
|
229
|
-
|
|
230
|
-
|
|
253
|
+
assumeType<internal.InternalObjectProps>(relation);
|
|
254
|
+
const obj = (relation as internal.InternalObjectProps)[internal.RelationTargetId];
|
|
255
|
+
if (obj === undefined) {
|
|
256
|
+
throw new Error(`Relation target could not be resolved.`);
|
|
257
|
+
}
|
|
258
|
+
return obj as TargetOf<T>;
|
|
231
259
|
};
|
|
232
260
|
|
|
233
261
|
//
|
|
@@ -236,18 +264,18 @@ export const getTarget = <T extends Unknown | Snapshot>(relation: T): Type.Relat
|
|
|
236
264
|
|
|
237
265
|
/**
|
|
238
266
|
* Makes all properties mutable recursively.
|
|
239
|
-
* Used to provide a mutable view of a relation within `Relation.
|
|
267
|
+
* Used to provide a mutable view of a relation within `Relation.update`.
|
|
240
268
|
*/
|
|
241
|
-
export type
|
|
269
|
+
export type Mutable<T> = internal.Mutable<T>;
|
|
242
270
|
|
|
243
271
|
/**
|
|
244
272
|
* Perform mutations on an echo relation within a controlled context.
|
|
245
273
|
*
|
|
246
274
|
* All mutations within the callback are batched and trigger a single notification
|
|
247
|
-
* when the callback completes. Direct mutations outside of `Relation.
|
|
275
|
+
* when the callback completes. Direct mutations outside of `Relation.update` will throw
|
|
248
276
|
* an error for echo relations.
|
|
249
277
|
*
|
|
250
|
-
* @param relation - The echo relation to mutate. Use `Obj.
|
|
278
|
+
* @param relation - The echo relation to mutate. Use `Obj.update` for objects.
|
|
251
279
|
* @param callback - The callback that performs mutations on the relation.
|
|
252
280
|
*
|
|
253
281
|
* @example
|
|
@@ -258,16 +286,16 @@ export type { Mutable };
|
|
|
258
286
|
* role: 'Engineer',
|
|
259
287
|
* });
|
|
260
288
|
*
|
|
261
|
-
* // Mutate within Relation.
|
|
262
|
-
* Relation.
|
|
263
|
-
*
|
|
289
|
+
* // Mutate within Relation.update
|
|
290
|
+
* Relation.update(worksFor, (obj) => {
|
|
291
|
+
* obj.role = 'Senior Engineer';
|
|
264
292
|
* });
|
|
265
293
|
* ```
|
|
266
294
|
*
|
|
267
|
-
* Note: Only accepts relations. Use `Obj.
|
|
295
|
+
* Note: Only accepts relations. Use `Obj.update` for objects.
|
|
268
296
|
*/
|
|
269
|
-
export const
|
|
270
|
-
change
|
|
297
|
+
export const update = <T extends Unknown>(relation: T, callback: internal.ChangeCallback<T>): void => {
|
|
298
|
+
internal.change(relation, callback);
|
|
271
299
|
};
|
|
272
300
|
|
|
273
301
|
//
|
|
@@ -279,7 +307,7 @@ export const change = <T extends Unknown>(relation: T, callback: ChangeCallback<
|
|
|
279
307
|
* The snapshot is branded with SnapshotKindId instead of KindId,
|
|
280
308
|
* making it distinguishable from the reactive relation at the type level.
|
|
281
309
|
*/
|
|
282
|
-
export const getSnapshot: <T extends Unknown>(rel: T) => Snapshot<T> = getSnapshot
|
|
310
|
+
export const getSnapshot: <T extends Unknown>(rel: T) => Snapshot<T> = internal.getSnapshot as any;
|
|
283
311
|
|
|
284
312
|
//
|
|
285
313
|
// Subscribe
|
|
@@ -292,7 +320,7 @@ export const getSnapshot: <T extends Unknown>(rel: T) => Snapshot<T> = getSnapsh
|
|
|
292
320
|
* @returns Unsubscribe function.
|
|
293
321
|
*/
|
|
294
322
|
export const subscribe = (rel: Unknown, callback: () => void): (() => void) => {
|
|
295
|
-
return subscribe
|
|
323
|
+
return internal.subscribe(rel, callback);
|
|
296
324
|
};
|
|
297
325
|
|
|
298
326
|
//
|
|
@@ -304,18 +332,18 @@ export const subscribe = (rel: Unknown, callback: () => void): (() => void) => {
|
|
|
304
332
|
* Accepts both reactive relations and snapshots.
|
|
305
333
|
*/
|
|
306
334
|
export const getValue = (rel: Unknown | Snapshot, path: readonly (string | number)[]): any => {
|
|
307
|
-
return getValue
|
|
335
|
+
return internal.getValue(rel, createJsonPath(path));
|
|
308
336
|
};
|
|
309
337
|
|
|
310
338
|
/**
|
|
311
339
|
* Set a deeply nested property on a relation.
|
|
312
|
-
* Must be called within a `Relation.
|
|
340
|
+
* Must be called within a `Relation.update` callback.
|
|
313
341
|
*
|
|
314
342
|
* NOTE: TypeScript's structural typing allows readonly objects to be passed to `Mutable<T>`
|
|
315
343
|
* parameters, so there is no compile-time error. Enforcement is runtime-only.
|
|
316
344
|
*/
|
|
317
345
|
export const setValue: (rel: Mutable<Unknown>, path: readonly (string | number)[], value: any) => void =
|
|
318
|
-
setValue
|
|
346
|
+
internal.setValue as any;
|
|
319
347
|
|
|
320
348
|
//
|
|
321
349
|
// Type
|
|
@@ -325,24 +353,24 @@ export const setValue: (rel: Mutable<Unknown>, path: readonly (string | number)[
|
|
|
325
353
|
* Get the DXN of the relation.
|
|
326
354
|
* Accepts both reactive relations and snapshots.
|
|
327
355
|
*/
|
|
328
|
-
export const getDXN = (entity: Unknown | Snapshot): DXN => getDXN
|
|
356
|
+
export const getDXN = (entity: Unknown | Snapshot): DXN => internal.getDXN(entity);
|
|
329
357
|
|
|
330
358
|
/**
|
|
331
359
|
* @returns The DXN of the relation's type.
|
|
332
360
|
*/
|
|
333
|
-
export const getTypeDXN = getTypeDXN
|
|
361
|
+
export const getTypeDXN = internal.getTypeDXN;
|
|
334
362
|
|
|
335
363
|
/**
|
|
336
364
|
* Get the schema of the relation.
|
|
337
365
|
* Returns the branded ECHO schema used to create the relation.
|
|
338
366
|
*/
|
|
339
|
-
export const getSchema: (rel: unknown | undefined) => Type.
|
|
367
|
+
export const getSchema: (rel: unknown | undefined) => Type.AnyEntity | undefined = internal.getSchema as any;
|
|
340
368
|
|
|
341
369
|
/**
|
|
342
370
|
* @returns The typename of the relation's type.
|
|
343
371
|
* Accepts both reactive relations and snapshots.
|
|
344
372
|
*/
|
|
345
|
-
export const getTypename = (entity: Unknown | Snapshot): string | undefined => getTypename
|
|
373
|
+
export const getTypename = (entity: Unknown | Snapshot): string | undefined => internal.getTypename(entity);
|
|
346
374
|
|
|
347
375
|
//
|
|
348
376
|
// Database
|
|
@@ -352,72 +380,79 @@ export const getTypename = (entity: Unknown | Snapshot): string | undefined => g
|
|
|
352
380
|
* Get the database the relation belongs to.
|
|
353
381
|
* Accepts both reactive relations and snapshots.
|
|
354
382
|
*/
|
|
355
|
-
export const getDatabase = (entity: Unknown | Snapshot): Database.Database | undefined => getDatabase
|
|
383
|
+
export const getDatabase = (entity: Unknown | Snapshot): Database.Database | undefined => internal.getDatabase(entity);
|
|
356
384
|
|
|
357
385
|
//
|
|
358
386
|
// Meta
|
|
359
387
|
//
|
|
360
388
|
|
|
389
|
+
/**
|
|
390
|
+
* Property that accesses metadata for an entity.
|
|
391
|
+
*
|
|
392
|
+
* Alias for `Entity.Meta`.
|
|
393
|
+
*/
|
|
394
|
+
export const Meta = internal.MetaId;
|
|
395
|
+
|
|
361
396
|
/**
|
|
362
397
|
* Deeply read-only version of ObjectMeta.
|
|
363
398
|
*/
|
|
364
|
-
export type ReadonlyMeta =
|
|
399
|
+
export type ReadonlyMeta = internal.ReadonlyMeta;
|
|
365
400
|
|
|
366
401
|
/**
|
|
367
|
-
* Mutable meta type returned by `Relation.getMeta` inside a `Relation.
|
|
402
|
+
* Mutable meta type returned by `Relation.getMeta` inside a `Relation.update` callback.
|
|
368
403
|
*/
|
|
369
|
-
export type Meta =
|
|
404
|
+
export type Meta = internal.Meta;
|
|
370
405
|
|
|
371
406
|
/**
|
|
372
407
|
* Get the metadata for a relation.
|
|
373
|
-
* Returns mutable meta when passed a mutable relation (inside `Relation.
|
|
408
|
+
* Returns mutable meta when passed a mutable relation (inside `Relation.update` callback).
|
|
374
409
|
* Returns read-only meta when passed a regular relation or snapshot.
|
|
375
410
|
*/
|
|
376
411
|
// TODO(wittjosiah): When passed a Snapshot, should return a snapshot of meta, not the live meta proxy.
|
|
377
412
|
export function getMeta(entity: Mutable<Unknown>): Meta;
|
|
378
413
|
export function getMeta(entity: Unknown | Snapshot): ReadonlyMeta;
|
|
379
414
|
export function getMeta(entity: Unknown | Snapshot | Mutable<Unknown>): Meta | ReadonlyMeta {
|
|
380
|
-
return
|
|
415
|
+
return internal.getMetaChecked(entity);
|
|
381
416
|
}
|
|
382
417
|
|
|
383
418
|
/**
|
|
384
419
|
* @returns Foreign keys for the relation from the specified source.
|
|
385
420
|
* Accepts both reactive relations and snapshots.
|
|
386
421
|
*/
|
|
387
|
-
export const getKeys = (entity: Unknown | Snapshot, source: string): ForeignKey[] => getKeys
|
|
422
|
+
export const getKeys = (entity: Unknown | Snapshot, source: string): ForeignKey[] => internal.getKeys(entity, source);
|
|
388
423
|
|
|
389
424
|
/**
|
|
390
425
|
* Delete all keys from the relation for the specified source.
|
|
391
|
-
* Must be called within a `Relation.
|
|
426
|
+
* Must be called within a `Relation.update` callback.
|
|
392
427
|
*
|
|
393
428
|
* NOTE: TypeScript's structural typing allows readonly objects to be passed to `Mutable<T>`
|
|
394
429
|
* parameters, so there is no compile-time error. Enforcement is runtime-only.
|
|
395
430
|
*/
|
|
396
|
-
export const deleteKeys = (entity: Mutable<Unknown>, source: string): void => deleteKeys
|
|
431
|
+
export const deleteKeys = (entity: Mutable<Unknown>, source: string): void => internal.deleteKeys(entity, source);
|
|
397
432
|
|
|
398
433
|
/**
|
|
399
434
|
* Add a tag to the relation.
|
|
400
|
-
* Must be called within a `Relation.
|
|
435
|
+
* Must be called within a `Relation.update` callback.
|
|
401
436
|
*
|
|
402
437
|
* NOTE: TypeScript's structural typing allows readonly objects to be passed to `Mutable<T>`
|
|
403
438
|
* parameters, so there is no compile-time error. Enforcement is runtime-only.
|
|
404
439
|
*/
|
|
405
|
-
export const addTag = (entity: Mutable<Unknown>, tag: string): void => addTag
|
|
440
|
+
export const addTag = (entity: Mutable<Unknown>, tag: string): void => internal.addTag(entity, tag);
|
|
406
441
|
|
|
407
442
|
/**
|
|
408
443
|
* Remove a tag from the relation.
|
|
409
|
-
* Must be called within a `Relation.
|
|
444
|
+
* Must be called within a `Relation.update` callback.
|
|
410
445
|
*
|
|
411
446
|
* NOTE: TypeScript's structural typing allows readonly objects to be passed to `Mutable<T>`
|
|
412
447
|
* parameters, so there is no compile-time error. Enforcement is runtime-only.
|
|
413
448
|
*/
|
|
414
|
-
export const removeTag = (entity: Mutable<Unknown>, tag: string): void => removeTag
|
|
449
|
+
export const removeTag = (entity: Mutable<Unknown>, tag: string): void => internal.removeTag(entity, tag);
|
|
415
450
|
|
|
416
451
|
/**
|
|
417
452
|
* Check if the relation is deleted.
|
|
418
453
|
* Accepts both reactive relations and snapshots.
|
|
419
454
|
*/
|
|
420
|
-
export const isDeleted = (entity: Unknown | Snapshot): boolean => isDeleted
|
|
455
|
+
export const isDeleted = (entity: Unknown | Snapshot): boolean => internal.isDeleted(entity);
|
|
421
456
|
|
|
422
457
|
//
|
|
423
458
|
// Annotations
|
|
@@ -427,32 +462,32 @@ export const isDeleted = (entity: Unknown | Snapshot): boolean => isDeleted$(ent
|
|
|
427
462
|
* Get the label of the relation.
|
|
428
463
|
* Accepts both reactive relations and snapshots.
|
|
429
464
|
*/
|
|
430
|
-
export const getLabel = (entity: Unknown | Snapshot): string | undefined => getLabel
|
|
465
|
+
export const getLabel = (entity: Unknown | Snapshot): string | undefined => internal.getLabel(entity);
|
|
431
466
|
|
|
432
467
|
/**
|
|
433
468
|
* Set the label of the relation.
|
|
434
|
-
* Must be called within a `Relation.
|
|
469
|
+
* Must be called within a `Relation.update` callback.
|
|
435
470
|
*
|
|
436
471
|
* NOTE: TypeScript's structural typing allows readonly objects to be passed to `Mutable<T>`
|
|
437
472
|
* parameters, so there is no compile-time error. Enforcement is runtime-only.
|
|
438
473
|
*/
|
|
439
|
-
export const setLabel = (entity: Mutable<Unknown>, label: string): void => setLabel
|
|
474
|
+
export const setLabel = (entity: Mutable<Unknown>, label: string): void => internal.setLabel(entity, label);
|
|
440
475
|
|
|
441
476
|
/**
|
|
442
477
|
* Get the description of the relation.
|
|
443
478
|
* Accepts both reactive relations and snapshots.
|
|
444
479
|
*/
|
|
445
|
-
export const getDescription = (entity: Unknown | Snapshot): string | undefined => getDescription
|
|
480
|
+
export const getDescription = (entity: Unknown | Snapshot): string | undefined => internal.getDescription(entity);
|
|
446
481
|
|
|
447
482
|
/**
|
|
448
483
|
* Set the description of the relation.
|
|
449
|
-
* Must be called within a `Relation.
|
|
484
|
+
* Must be called within a `Relation.update` callback.
|
|
450
485
|
*
|
|
451
486
|
* NOTE: TypeScript's structural typing allows readonly objects to be passed to `Mutable<T>`
|
|
452
487
|
* parameters, so there is no compile-time error. Enforcement is runtime-only.
|
|
453
488
|
*/
|
|
454
489
|
export const setDescription = (entity: Mutable<Unknown>, description: string): void =>
|
|
455
|
-
setDescription
|
|
490
|
+
internal.setDescription(entity, description);
|
|
456
491
|
|
|
457
492
|
//
|
|
458
493
|
// JSON
|
|
@@ -461,13 +496,13 @@ export const setDescription = (entity: Mutable<Unknown>, description: string): v
|
|
|
461
496
|
/**
|
|
462
497
|
* JSON representation of a relation.
|
|
463
498
|
*/
|
|
464
|
-
export type JSON =
|
|
499
|
+
export type JSON = internal.ObjectJSON;
|
|
465
500
|
|
|
466
501
|
/**
|
|
467
502
|
* Converts relation to its JSON representation.
|
|
468
503
|
* Accepts both reactive relations and snapshots.
|
|
469
504
|
*/
|
|
470
|
-
export const toJSON = (entity: Unknown | Snapshot): JSON =>
|
|
505
|
+
export const toJSON = (entity: Unknown | Snapshot): JSON => internal.objectToJSON(entity);
|
|
471
506
|
|
|
472
507
|
//
|
|
473
508
|
// Sorting
|
|
@@ -477,25 +512,26 @@ export const toJSON = (entity: Unknown | Snapshot): JSON => toJSON$(entity);
|
|
|
477
512
|
* Comparator function type for sorting relations.
|
|
478
513
|
* Accepts both reactive relations and snapshots.
|
|
479
514
|
*/
|
|
480
|
-
export type Comparator =
|
|
515
|
+
export type Comparator = internal.Comparator<Unknown | Snapshot>;
|
|
481
516
|
|
|
482
|
-
export const sortByLabel: Comparator = sortByLabel
|
|
483
|
-
export const sortByTypename: Comparator = sortByTypename
|
|
484
|
-
export const sort = (...comparators: Comparator[]): Comparator => sort
|
|
517
|
+
export const sortByLabel: Comparator = internal.sortByLabel as Comparator;
|
|
518
|
+
export const sortByTypename: Comparator = internal.sortByTypename as Comparator;
|
|
519
|
+
export const sort = (...comparators: Comparator[]): Comparator => internal.sort(...comparators) as Comparator;
|
|
485
520
|
|
|
486
521
|
//
|
|
487
522
|
// Version
|
|
488
523
|
//
|
|
489
524
|
|
|
490
|
-
export
|
|
525
|
+
export const VersionTypeId = internal.VersionTypeId;
|
|
526
|
+
export const isVersion = internal.isVersion;
|
|
491
527
|
|
|
492
528
|
/**
|
|
493
529
|
* Represent relation version.
|
|
494
530
|
*/
|
|
495
|
-
export type Version =
|
|
531
|
+
export type Version = internal.EntityVersion;
|
|
496
532
|
|
|
497
533
|
/**
|
|
498
534
|
* Returns the version of the relation.
|
|
499
535
|
* Accepts both reactive relations and snapshots.
|
|
500
536
|
*/
|
|
501
|
-
export const version = (entity: Unknown | Snapshot): Version => version
|
|
537
|
+
export const version = (entity: Unknown | Snapshot): Version => internal.version(entity);
|
package/src/SchemaRegistry.ts
CHANGED
|
@@ -47,7 +47,7 @@ export type Query = {
|
|
|
47
47
|
* @default false
|
|
48
48
|
*
|
|
49
49
|
* The system schema include but are not limited to:
|
|
50
|
-
* - dxos.
|
|
50
|
+
* - org.dxos.type.schema
|
|
51
51
|
*/
|
|
52
52
|
includeSystem?: boolean;
|
|
53
53
|
};
|
|
@@ -61,7 +61,7 @@ export type Query = {
|
|
|
61
61
|
* - JSON schema with typename and version
|
|
62
62
|
*/
|
|
63
63
|
export type RegisterSchemaInput =
|
|
64
|
-
| Type.
|
|
64
|
+
| Type.AnyEntity
|
|
65
65
|
| {
|
|
66
66
|
typename: string;
|
|
67
67
|
version: string;
|
|
@@ -73,15 +73,16 @@ export type RegisterSchemaInput =
|
|
|
73
73
|
};
|
|
74
74
|
|
|
75
75
|
export type ExtractQueryResult<Query> = Query extends { location: ('database' | 'runtime')[] }
|
|
76
|
-
? Type.
|
|
76
|
+
? Type.AnyEntity
|
|
77
77
|
: Type.RuntimeType;
|
|
78
78
|
|
|
79
|
+
// TODO(dmaretskyi): Rename TypeRegistry
|
|
79
80
|
export interface SchemaRegistry {
|
|
80
81
|
/**
|
|
81
82
|
* Checks if the provided schema is registered.
|
|
82
83
|
*/
|
|
83
84
|
// TODO(burdon): Type?
|
|
84
|
-
hasSchema(schema: Type.
|
|
85
|
+
hasSchema(schema: Type.AnyEntity): boolean;
|
|
85
86
|
|
|
86
87
|
/**
|
|
87
88
|
* Registers the provided schema.
|