@dxos/echo 0.8.4-main.bc674ce → 0.8.4-main.bcb3aa67d6
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 +2 -2
- package/dist/lib/neutral/Annotation.mjs +8 -3
- package/dist/lib/neutral/Database.mjs +36 -6
- package/dist/lib/neutral/Entity.mjs +18 -10
- package/dist/lib/neutral/Err.mjs +3 -1
- package/dist/lib/neutral/Extension.mjs +18 -0
- package/dist/lib/neutral/Extension.mjs.map +7 -0
- package/dist/lib/neutral/Feed.mjs +45 -0
- package/dist/lib/neutral/Feed.mjs.map +7 -0
- package/dist/lib/neutral/Filter.mjs +19 -10
- package/dist/lib/neutral/Format.mjs +3 -3
- package/dist/lib/neutral/JsonSchema.mjs +9 -9
- package/dist/lib/neutral/Obj.mjs +35 -15
- package/dist/lib/neutral/Order.mjs +1 -1
- package/dist/lib/neutral/Query.mjs +21 -9
- package/dist/lib/neutral/Ref.mjs +9 -7
- package/dist/lib/neutral/Relation.mjs +20 -11
- package/dist/lib/neutral/SchemaRegistry.mjs +1 -1
- package/dist/lib/neutral/Tag.mjs +13 -10
- package/dist/lib/neutral/Type.mjs +13 -23
- package/dist/lib/neutral/chunk-24XI6DOL.mjs +34 -0
- package/dist/lib/neutral/chunk-24XI6DOL.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-VB5HVDCA.mjs → chunk-4YAAHG3E.mjs} +53 -5
- package/dist/lib/neutral/chunk-4YAAHG3E.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-CUDIBUM4.mjs → chunk-4ZRIO2QF.mjs} +104 -25
- package/dist/lib/neutral/chunk-4ZRIO2QF.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-SU2LVM7J.mjs → chunk-7C2A2RP6.mjs} +1731 -2747
- package/dist/lib/neutral/chunk-7C2A2RP6.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-4L6DOFXP.mjs → chunk-BNCCGLJN.mjs} +1 -1
- package/dist/lib/neutral/{chunk-4L6DOFXP.mjs.map → chunk-BNCCGLJN.mjs.map} +1 -1
- package/dist/lib/neutral/{chunk-2MTHJ5UW.mjs → chunk-CAB5PWUF.mjs} +134 -24
- package/dist/lib/neutral/chunk-CAB5PWUF.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-62DWJ6CE.mjs → chunk-DQYLD2RB.mjs} +14 -14
- package/dist/lib/neutral/chunk-DQYLD2RB.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-XMIDBDE6.mjs → chunk-DUTD5HFU.mjs} +11 -56
- package/dist/lib/neutral/chunk-DUTD5HFU.mjs.map +7 -0
- package/dist/lib/neutral/chunk-EKQJGGA3.mjs +396 -0
- package/dist/lib/neutral/chunk-EKQJGGA3.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-VR4A4WGG.mjs → chunk-EOIR5O5I.mjs} +72 -23
- package/dist/lib/neutral/chunk-EOIR5O5I.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-HMOXCO27.mjs → chunk-GVY6O76A.mjs} +8 -3
- package/dist/lib/neutral/chunk-GVY6O76A.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-4TT624YA.mjs → chunk-GZQTCRJB.mjs} +2 -2
- package/dist/lib/neutral/{chunk-4TT624YA.mjs.map → chunk-GZQTCRJB.mjs.map} +1 -1
- package/dist/lib/neutral/chunk-HGHJ36DH.mjs +117 -0
- package/dist/lib/neutral/chunk-HGHJ36DH.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-3ZEAZF7T.mjs → chunk-IICPQK3M.mjs} +8 -4
- package/dist/lib/neutral/chunk-IICPQK3M.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-IP2GHXWA.mjs → chunk-NKPWM67P.mjs} +5 -5
- package/dist/lib/neutral/chunk-NKPWM67P.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-6QPSGMEF.mjs → chunk-OPMZTWI3.mjs} +32 -8
- package/dist/lib/neutral/chunk-OPMZTWI3.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-NWUO5FKZ.mjs → chunk-OPQEHU36.mjs} +8 -2
- package/dist/lib/neutral/chunk-OPQEHU36.mjs.map +7 -0
- package/dist/lib/neutral/chunk-QDV7C7VM.mjs +299 -0
- package/dist/lib/neutral/chunk-QDV7C7VM.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-YQYMWZAD.mjs → chunk-TBKX6JQO.mjs} +4 -4
- package/dist/lib/neutral/chunk-TBKX6JQO.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-RPB6V4BE.mjs → chunk-UBEZSGXY.mjs} +14 -1
- package/dist/lib/neutral/chunk-UBEZSGXY.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-ROKO4RKJ.mjs → chunk-UI6MWK5W.mjs} +2 -2
- package/dist/lib/neutral/chunk-UI6MWK5W.mjs.map +7 -0
- package/dist/lib/neutral/chunk-XV5R2XZH.mjs +133 -0
- package/dist/lib/neutral/chunk-XV5R2XZH.mjs.map +7 -0
- package/dist/lib/neutral/chunk-YPGDBRPH.mjs +159 -0
- package/dist/lib/neutral/chunk-YPGDBRPH.mjs.map +7 -0
- package/dist/lib/neutral/chunk-YS6Q3XAD.mjs +50 -0
- package/dist/lib/neutral/chunk-YS6Q3XAD.mjs.map +7 -0
- package/dist/lib/neutral/chunk-ZCBOJ6I7.mjs +787 -0
- package/dist/lib/neutral/chunk-ZCBOJ6I7.mjs.map +7 -0
- package/dist/lib/neutral/index.mjs +42 -25
- package/dist/lib/neutral/internal/index.mjs +56 -38
- package/dist/lib/neutral/meta.json +1 -1
- package/dist/lib/neutral/testing/index.mjs +42 -34
- package/dist/lib/neutral/testing/index.mjs.map +3 -3
- package/dist/types/src/Annotation.d.ts +23 -1
- 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 +86 -84
- 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 +41 -15
- package/dist/types/src/Entity.d.ts.map +1 -1
- package/dist/types/src/Err.d.ts +43 -0
- 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 +163 -0
- package/dist/types/src/Feed.d.ts.map +1 -0
- package/dist/types/src/Filter.d.ts +21 -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/JsonSchema.d.ts +11 -4
- package/dist/types/src/JsonSchema.d.ts.map +1 -1
- package/dist/types/src/Obj.d.ts +158 -43
- 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 +109 -15
- 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 +75 -28
- 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 +4 -3
- 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/hierarchy.test.d.ts +2 -0
- package/dist/types/src/hierarchy.test.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +5 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/internal/{annotations → Annotation}/annotations.d.ts +69 -8
- 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 +13 -1
- 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 +4 -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 +19 -19
- package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts.map +1 -0
- 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 +12 -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 +1 -1
- 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 +16 -3
- 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 +8 -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/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/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/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/common/proxy/reactive-array.d.ts.map +1 -0
- package/dist/types/src/internal/{proxy → common/proxy}/reactive.d.ts +1 -1
- package/dist/types/src/internal/common/proxy/reactive.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/{proxy → common/proxy}/typed-handler.d.ts +2 -1
- 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 +2 -2
- 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/{types → common/types}/typename.d.ts +8 -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-schema.d.ts +19 -18
- package/dist/types/src/testing/test-schema.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +24 -14
- package/src/Annotation.ts +31 -1
- package/src/Collection.ts +37 -0
- package/src/Database.ts +167 -173
- package/src/Dataset.ts +26 -0
- package/src/Entity.ts +73 -54
- package/src/Err.ts +22 -0
- package/src/Extension.test.ts +235 -0
- package/src/Extension.ts +122 -0
- package/src/Feed.ts +268 -0
- package/src/Filter.test.ts +90 -0
- package/src/Filter.ts +55 -7
- package/src/Format.ts +3 -3
- package/src/Hypergraph.ts +9 -4
- package/src/JsonSchema.ts +14 -4
- package/src/Obj.test.ts +69 -8
- package/src/Obj.ts +285 -140
- package/src/Order.ts +3 -1
- package/src/Query.test.ts +248 -15
- package/src/Query.ts +275 -24
- package/src/Ref.ts +64 -11
- package/src/Relation.test.ts +8 -2
- package/src/Relation.ts +165 -131
- 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/hierarchy.test.ts +33 -0
- package/src/index.ts +5 -0
- package/src/internal/{annotations → Annotation}/annotations.test.ts +56 -6
- package/src/internal/{annotations → Annotation}/annotations.ts +134 -15
- package/src/internal/{annotations → Annotation}/index.ts +1 -0
- package/src/internal/{api → Annotation}/sorting.ts +2 -3
- package/src/internal/{annotations → Annotation}/util.ts +14 -1
- package/src/internal/{api/entity.ts → Entity/api.ts} +4 -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 +17 -42
- package/src/internal/{entities → Entity}/object.ts +2 -2
- package/src/internal/{entities → Entity}/relation.ts +19 -36
- package/src/internal/{api → Entity}/version.ts +3 -2
- package/src/internal/{formats → Format}/date.test.ts +1 -1
- package/src/internal/{formats → Format}/format.test.ts +1 -1
- package/src/internal/{formats → Format}/types.ts +3 -3
- 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 -48
- package/src/internal/{json-schema → JsonSchema}/json-schema.ts +6 -4
- 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 +4 -4
- package/src/internal/{object → Obj}/create-object.ts +5 -5
- 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 -8
- package/src/internal/{object → Obj}/json-serializer.ts +42 -15
- 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 +2 -2
- package/src/internal/Obj/snapshot.ts +105 -0
- 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 +132 -0
- package/src/internal/{ref → Ref}/ref-array.ts +1 -1
- package/src/internal/{ref → Ref}/ref.test.ts +4 -4
- package/src/internal/{ref → Ref}/ref.ts +27 -4
- package/src/internal/{schema → Type}/compose.test.ts +5 -5
- package/src/internal/{schema → Type}/compose.ts +1 -1
- package/src/internal/{schema → Type}/echo-schema.ts +11 -10
- package/src/internal/{schema → Type}/manipulation.ts +1 -1
- package/src/internal/{schema → Type}/persistent-schema.ts +10 -4
- package/src/internal/{README.md → common/README.md} +1 -1
- package/src/internal/{api → common/api}/index.ts +0 -4
- package/src/internal/common/index.ts +7 -0
- package/src/internal/{proxy → common/proxy}/change.test.ts +58 -58
- package/src/internal/{proxy → common/proxy}/handler.test.ts +2 -2
- package/src/internal/{proxy → common/proxy}/json-serializer.ts +6 -3
- package/src/internal/{proxy → common/proxy}/make-object.ts +13 -3
- package/src/internal/{proxy → common/proxy}/reactive.ts +1 -1
- package/src/internal/{proxy → common/proxy}/schema.test.ts +10 -10
- package/src/internal/{proxy → common/proxy}/typed-handler.test.ts +6 -6
- package/src/internal/{proxy → common/proxy}/typed-handler.ts +10 -3
- package/src/internal/{proxy → common/proxy}/typed-object.test.ts +4 -4
- 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 +4 -1
- package/src/internal/common/types/model-symbols.ts +69 -0
- package/src/internal/{types → common/types}/typename.ts +10 -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 -4
- package/src/testing/test-schema.ts +20 -18
- package/dist/lib/neutral/chunk-2MTHJ5UW.mjs.map +0 -7
- package/dist/lib/neutral/chunk-3ZEAZF7T.mjs.map +0 -7
- package/dist/lib/neutral/chunk-62DWJ6CE.mjs.map +0 -7
- package/dist/lib/neutral/chunk-6QPSGMEF.mjs.map +0 -7
- package/dist/lib/neutral/chunk-CUDIBUM4.mjs.map +0 -7
- package/dist/lib/neutral/chunk-HMOXCO27.mjs.map +0 -7
- package/dist/lib/neutral/chunk-IP2GHXWA.mjs.map +0 -7
- package/dist/lib/neutral/chunk-KRHDMXSU.mjs +0 -132
- package/dist/lib/neutral/chunk-KRHDMXSU.mjs.map +0 -7
- package/dist/lib/neutral/chunk-NWUO5FKZ.mjs.map +0 -7
- package/dist/lib/neutral/chunk-ROKO4RKJ.mjs.map +0 -7
- package/dist/lib/neutral/chunk-RPB6V4BE.mjs.map +0 -7
- package/dist/lib/neutral/chunk-SU2LVM7J.mjs.map +0 -7
- package/dist/lib/neutral/chunk-VB5HVDCA.mjs.map +0 -7
- package/dist/lib/neutral/chunk-VR4A4WGG.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-XK5OUUBY.mjs +0 -157
- package/dist/lib/neutral/chunk-XK5OUUBY.mjs.map +0 -7
- package/dist/lib/neutral/chunk-XMIDBDE6.mjs.map +0 -7
- package/dist/lib/neutral/chunk-YQYMWZAD.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/reactive.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/src/internal/object/snapshot.ts +0 -70
- /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.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/{api → common/api}/meta.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/change-context.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}/errors.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}/reactive-array.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.test.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/typed-object.test.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/{api → common/api}/meta.ts +0 -0
- /package/src/internal/{proxy → common/proxy}/change-context.ts +0 -0
- /package/src/internal/{proxy → common/proxy}/define-hidden-property.ts +0 -0
- /package/src/internal/{proxy → common/proxy}/errors.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}/ownership.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}/reactive-array.ts +0 -0
- /package/src/internal/{proxy → common/proxy}/schema-validator.ts +0 -0
- /package/src/internal/{proxy → common/proxy}/symbols.ts +0 -0
|
@@ -3,8 +3,11 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import * as Effect from 'effect/Effect';
|
|
6
|
+
import * as Equal from 'effect/Equal';
|
|
7
|
+
import * as Hash from 'effect/Hash';
|
|
6
8
|
import * as Option from 'effect/Option';
|
|
7
9
|
import * as ParseResult from 'effect/ParseResult';
|
|
10
|
+
import * as Pipeable from 'effect/Pipeable';
|
|
8
11
|
import * as Schema from 'effect/Schema';
|
|
9
12
|
import * as SchemaAST from 'effect/SchemaAST';
|
|
10
13
|
import type * as Types from 'effect/Types';
|
|
@@ -16,9 +19,9 @@ import { assertArgument, invariant } from '@dxos/invariant';
|
|
|
16
19
|
import { DXN, ObjectId } from '@dxos/keys';
|
|
17
20
|
|
|
18
21
|
import * as Database from '../../Database';
|
|
19
|
-
import { ReferenceAnnotationId, getSchemaDXN, getTypeAnnotation, getTypeIdentifierAnnotation } from '../
|
|
20
|
-
import { type JsonSchemaType } from '../
|
|
21
|
-
import type { AnyEntity, AnyProperties } from '../types';
|
|
22
|
+
import { ReferenceAnnotationId, getSchemaDXN, getTypeAnnotation, getTypeIdentifierAnnotation } from '../Annotation';
|
|
23
|
+
import { type JsonSchemaType } from '../JsonSchema';
|
|
24
|
+
import type { AnyEntity, AnyProperties } from '../common/types';
|
|
22
25
|
|
|
23
26
|
/**
|
|
24
27
|
* The `$id` and `$ref` fields for an ECHO reference schema.
|
|
@@ -130,7 +133,7 @@ export const Ref: RefFn = <S extends Schema.Schema.Any>(schema: S): RefSchema<Sc
|
|
|
130
133
|
* Represents materialized reference to a target.
|
|
131
134
|
* This is the data type for the fields marked as ref.
|
|
132
135
|
*/
|
|
133
|
-
export interface Ref<T> {
|
|
136
|
+
export interface Ref<T> extends Pipeable.Pipeable {
|
|
134
137
|
/**
|
|
135
138
|
* Target object DXN.
|
|
136
139
|
*/
|
|
@@ -459,6 +462,21 @@ export class RefImpl<T> implements Ref<T> {
|
|
|
459
462
|
|
|
460
463
|
[RefTypeId] = refVariance;
|
|
461
464
|
|
|
465
|
+
/**
|
|
466
|
+
* Effect Hash trait. Required for MutableHashMap-based caches (e.g., Atom.family)
|
|
467
|
+
* to deduplicate Ref instances that point to the same object.
|
|
468
|
+
* ECHO proxies return new RefImpl instances on every property access,
|
|
469
|
+
* so without this, each access would create a separate cache entry.
|
|
470
|
+
*/
|
|
471
|
+
[Hash.symbol](): number {
|
|
472
|
+
return Hash.hash(this.#dxn.toString());
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
/** Effect Equal trait. See {@link Hash.symbol} for rationale. */
|
|
476
|
+
[Equal.symbol](that: Equal.Equal): boolean {
|
|
477
|
+
return that instanceof RefImpl && this.#dxn.toString() === that.dxn.toString();
|
|
478
|
+
}
|
|
479
|
+
|
|
462
480
|
/**
|
|
463
481
|
* Internal method to set the resolver.
|
|
464
482
|
*
|
|
@@ -474,6 +492,11 @@ export class RefImpl<T> implements Ref<T> {
|
|
|
474
492
|
_getSavedTarget(): T | undefined {
|
|
475
493
|
return this.#target;
|
|
476
494
|
}
|
|
495
|
+
|
|
496
|
+
pipe() {
|
|
497
|
+
// eslint-disable-next-line prefer-rest-params
|
|
498
|
+
return Pipeable.pipeArguments(this, arguments);
|
|
499
|
+
}
|
|
477
500
|
}
|
|
478
501
|
|
|
479
502
|
/**
|
|
@@ -5,10 +5,10 @@
|
|
|
5
5
|
import * as Schema from 'effect/Schema';
|
|
6
6
|
import { describe, test } from 'vitest';
|
|
7
7
|
|
|
8
|
-
import { FieldPath } from '../
|
|
9
|
-
import { EchoObjectSchema } from '../
|
|
10
|
-
import { FormatAnnotation, TypeFormat } from '../
|
|
11
|
-
import { ECHO_ANNOTATIONS_NS_KEY, toJsonSchema } from '../
|
|
8
|
+
import { FieldPath } from '../Annotation';
|
|
9
|
+
import { EchoObjectSchema } from '../Entity';
|
|
10
|
+
import { FormatAnnotation, TypeFormat } from '../Format';
|
|
11
|
+
import { ECHO_ANNOTATIONS_NS_KEY, toJsonSchema } from '../JsonSchema';
|
|
12
12
|
|
|
13
13
|
import { composeSchema } from './compose';
|
|
14
14
|
|
|
@@ -17,7 +17,7 @@ describe('schema composition', () => {
|
|
|
17
17
|
const BaseType = Schema.Struct({
|
|
18
18
|
name: Schema.String,
|
|
19
19
|
email: Schema.String,
|
|
20
|
-
}).pipe(EchoObjectSchema({ typename: 'example.
|
|
20
|
+
}).pipe(EchoObjectSchema({ typename: 'com.example.person', version: '0.1.0' }));
|
|
21
21
|
|
|
22
22
|
const OverlaySchema = Schema.Struct({
|
|
23
23
|
email: Schema.String.pipe(FieldPath('$.email'), FormatAnnotation.set(TypeFormat.Email)),
|
|
@@ -6,7 +6,7 @@ import type * as Types from 'effect/Types';
|
|
|
6
6
|
|
|
7
7
|
import { invariant } from '@dxos/invariant';
|
|
8
8
|
|
|
9
|
-
import { type JsonSchemaType } from '../
|
|
9
|
+
import { type JsonSchemaType } from '../JsonSchema';
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* Creates a composite schema from the source and projection schemas.
|
|
@@ -8,11 +8,12 @@ import * as SchemaAST from 'effect/SchemaAST';
|
|
|
8
8
|
import { invariant } from '@dxos/invariant';
|
|
9
9
|
import { type ObjectId } from '@dxos/keys';
|
|
10
10
|
|
|
11
|
-
import
|
|
12
|
-
import { type
|
|
13
|
-
import { type
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
11
|
+
import type * as Type from '../../Type';
|
|
12
|
+
import { type SchemaMeta, SchemaMetaSymbol, type TypeAnnotation, getTypeAnnotation } from '../Annotation';
|
|
13
|
+
import { type JsonSchemaType, toEffectSchema, toJsonSchema } from '../JsonSchema';
|
|
14
|
+
import { type TypedObject, type TypedObjectPrototype, getSnapshot } from '../Obj';
|
|
15
|
+
import { ChangeId } from '../common/proxy';
|
|
16
|
+
import { EntityKind, SchemaKindId } from '../common/types';
|
|
16
17
|
|
|
17
18
|
import {
|
|
18
19
|
addFieldsToSchema,
|
|
@@ -177,7 +178,7 @@ const schemaVariance = {
|
|
|
177
178
|
*
|
|
178
179
|
* @example
|
|
179
180
|
* ```ts
|
|
180
|
-
* export class TableType extends Schema.Struct({...}).pipe(Type.object({ typename: 'example.
|
|
181
|
+
* export class TableType extends Schema.Struct({...}).pipe(Type.object({ typename: 'com.example.type.table', version: '0.1.0' })){
|
|
181
182
|
* title: Schema.String,
|
|
182
183
|
* schema: Schema.optional(ref(EchoSchema)),
|
|
183
184
|
* props: Schema.mutable(S.Array(TablePropSchema)),
|
|
@@ -192,7 +193,7 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
|
|
|
192
193
|
|
|
193
194
|
/**
|
|
194
195
|
* Schema kind key that marks this as an ECHO schema.
|
|
195
|
-
* Makes EchoSchema satisfy the Type.
|
|
196
|
+
* Makes EchoSchema satisfy the Type.AnyObj type.
|
|
196
197
|
*/
|
|
197
198
|
readonly [SchemaKindId]: EntityKind.Object = EntityKind.Object;
|
|
198
199
|
|
|
@@ -304,8 +305,8 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
|
|
|
304
305
|
/**
|
|
305
306
|
* Reference to the underlying persistent schema object.
|
|
306
307
|
*/
|
|
307
|
-
public get persistentSchema():
|
|
308
|
-
return this._persistentSchema;
|
|
308
|
+
public get persistentSchema(): Type.PersistentType {
|
|
309
|
+
return this._persistentSchema as Type.PersistentType;
|
|
309
310
|
}
|
|
310
311
|
|
|
311
312
|
public getProperties(): SchemaAST.PropertySignature[] {
|
|
@@ -399,7 +400,7 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
|
|
|
399
400
|
*/
|
|
400
401
|
_rebuild(): void {
|
|
401
402
|
if (this._isDirty || this._schema == null) {
|
|
402
|
-
this._schema = toEffectSchema(getSnapshot(this._persistentSchema.jsonSchema)
|
|
403
|
+
this._schema = toEffectSchema(getSnapshot(this._persistentSchema).jsonSchema);
|
|
403
404
|
this._isDirty = false;
|
|
404
405
|
}
|
|
405
406
|
}
|
|
@@ -8,7 +8,7 @@ import * as SchemaAST from 'effect/SchemaAST';
|
|
|
8
8
|
import { invariant } from '@dxos/invariant';
|
|
9
9
|
import { DXN } from '@dxos/keys';
|
|
10
10
|
|
|
11
|
-
import { type TypeAnnotation, TypeAnnotationId, TypeIdentifierAnnotationId } from '../
|
|
11
|
+
import { type TypeAnnotation, TypeAnnotationId, TypeIdentifierAnnotationId } from '../Annotation';
|
|
12
12
|
|
|
13
13
|
// TODO(ZaymonFC): Do this one at a time. This might be dangerous.
|
|
14
14
|
export const addFieldsToSchema = (
|
|
@@ -4,9 +4,10 @@
|
|
|
4
4
|
|
|
5
5
|
import * as Schema from 'effect/Schema';
|
|
6
6
|
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
7
|
+
import { IconAnnotation } from '../Annotation';
|
|
8
|
+
import { LabelAnnotation, TypenameSchema, VersionSchema } from '../Annotation';
|
|
9
|
+
import { EchoObjectSchema } from '../Entity';
|
|
10
|
+
import { JsonSchemaType } from '../JsonSchema';
|
|
10
11
|
|
|
11
12
|
/**
|
|
12
13
|
* Persistent representation of a schema.
|
|
@@ -19,9 +20,14 @@ export const PersistentSchema = Schema.Struct({
|
|
|
19
20
|
jsonSchema: JsonSchemaType,
|
|
20
21
|
}).pipe(
|
|
21
22
|
EchoObjectSchema({
|
|
22
|
-
typename: 'dxos.
|
|
23
|
+
typename: 'org.dxos.type.schema',
|
|
23
24
|
version: '0.1.0',
|
|
24
25
|
}),
|
|
26
|
+
LabelAnnotation.set(['name']),
|
|
27
|
+
IconAnnotation.set({
|
|
28
|
+
icon: 'ph--database--regular',
|
|
29
|
+
hue: 'green',
|
|
30
|
+
}),
|
|
25
31
|
);
|
|
26
32
|
|
|
27
33
|
export interface PersistentSchema extends Schema.Schema.Type<typeof PersistentSchema> {}
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
|
|
31
31
|
- [x] QueryResult namespace
|
|
32
32
|
- [x] SchemaRegistry interface
|
|
33
|
-
- [x] Schema registry should return Type.
|
|
33
|
+
- [x] Schema registry should return Type.AnyEntity instead of Schema.Schema.AnyNoContext.
|
|
34
34
|
- [x] Hypergraph interface
|
|
35
35
|
- [x] Obj.getDatabase
|
|
36
36
|
- [x] SpaceAction.AddObject target should be a db not a space.
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
import { describe, test } from 'vitest';
|
|
6
6
|
|
|
7
|
-
import * as Obj from '
|
|
8
|
-
import * as Relation from '
|
|
9
|
-
import { TestSchema } from '
|
|
7
|
+
import * as Obj from '../../../Obj';
|
|
8
|
+
import * as Relation from '../../../Relation';
|
|
9
|
+
import { TestSchema } from '../../../testing';
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* Tests for Obj.change context enforcement and mutator type safety.
|
|
@@ -122,8 +122,8 @@ describe('Obj.change enforcement', () => {
|
|
|
122
122
|
// Person schema uses 'name' as label field.
|
|
123
123
|
expect(Obj.getLabel(obj)).toBe('John');
|
|
124
124
|
|
|
125
|
-
Obj.change(obj, (
|
|
126
|
-
Obj.setLabel(
|
|
125
|
+
Obj.change(obj, (obj) => {
|
|
126
|
+
Obj.setLabel(obj, 'Jane');
|
|
127
127
|
});
|
|
128
128
|
|
|
129
129
|
// setLabel updates the name field.
|
|
@@ -140,8 +140,8 @@ describe('Obj.change enforcement', () => {
|
|
|
140
140
|
|
|
141
141
|
// setDescription only works if schema has description annotation.
|
|
142
142
|
// For schemas without it, this is a no-op.
|
|
143
|
-
Obj.change(obj, (
|
|
144
|
-
Obj.setDescription(
|
|
143
|
+
Obj.change(obj, (obj) => {
|
|
144
|
+
Obj.setDescription(obj, 'My Description');
|
|
145
145
|
});
|
|
146
146
|
|
|
147
147
|
// Verify setDescription doesn't throw.
|
|
@@ -153,15 +153,15 @@ describe('Obj.change enforcement', () => {
|
|
|
153
153
|
|
|
154
154
|
expect(Obj.getMeta(obj).tags).toBeUndefined();
|
|
155
155
|
|
|
156
|
-
Obj.change(obj, (
|
|
157
|
-
Obj.addTag(
|
|
158
|
-
Obj.addTag(
|
|
156
|
+
Obj.change(obj, (obj) => {
|
|
157
|
+
Obj.addTag(obj, 'tag-1');
|
|
158
|
+
Obj.addTag(obj, 'tag-2');
|
|
159
159
|
});
|
|
160
160
|
|
|
161
161
|
expect(Obj.getMeta(obj).tags).toEqual(['tag-1', 'tag-2']);
|
|
162
162
|
|
|
163
|
-
Obj.change(obj, (
|
|
164
|
-
Obj.removeTag(
|
|
163
|
+
Obj.change(obj, (obj) => {
|
|
164
|
+
Obj.removeTag(obj, 'tag-1');
|
|
165
165
|
});
|
|
166
166
|
|
|
167
167
|
expect(Obj.getMeta(obj).tags).toEqual(['tag-2']);
|
|
@@ -170,8 +170,8 @@ describe('Obj.change enforcement', () => {
|
|
|
170
170
|
test('deleteKeys removes foreign keys by source', ({ expect }) => {
|
|
171
171
|
const obj = Obj.make(TestSchema.Person, { name: 'Test' });
|
|
172
172
|
|
|
173
|
-
Obj.change(obj, (
|
|
174
|
-
const meta = Obj.getMeta(
|
|
173
|
+
Obj.change(obj, (obj) => {
|
|
174
|
+
const meta = Obj.getMeta(obj);
|
|
175
175
|
meta.keys.push({ source: 'source-a', id: '1' });
|
|
176
176
|
meta.keys.push({ source: 'source-a', id: '2' });
|
|
177
177
|
meta.keys.push({ source: 'source-b', id: '3' });
|
|
@@ -179,8 +179,8 @@ describe('Obj.change enforcement', () => {
|
|
|
179
179
|
|
|
180
180
|
expect(Obj.getMeta(obj).keys).toHaveLength(3);
|
|
181
181
|
|
|
182
|
-
Obj.change(obj, (
|
|
183
|
-
Obj.deleteKeys(
|
|
182
|
+
Obj.change(obj, (obj) => {
|
|
183
|
+
Obj.deleteKeys(obj, 'source-a');
|
|
184
184
|
});
|
|
185
185
|
|
|
186
186
|
expect(Obj.getMeta(obj).keys).toHaveLength(1);
|
|
@@ -190,8 +190,8 @@ describe('Obj.change enforcement', () => {
|
|
|
190
190
|
test('setValue sets nested properties', ({ expect }) => {
|
|
191
191
|
const obj = Obj.make(TestSchema.Person, { name: 'Test' });
|
|
192
192
|
|
|
193
|
-
Obj.change(obj, (
|
|
194
|
-
Obj.setValue(
|
|
193
|
+
Obj.change(obj, (obj) => {
|
|
194
|
+
Obj.setValue(obj, ['name'], 'Updated Name');
|
|
195
195
|
});
|
|
196
196
|
|
|
197
197
|
expect(obj.name).toBe('Updated Name');
|
|
@@ -200,8 +200,8 @@ describe('Obj.change enforcement', () => {
|
|
|
200
200
|
test('getMeta is mutable inside change and changes persist', ({ expect }) => {
|
|
201
201
|
const obj = Obj.make(TestSchema.Person, { name: 'Test' });
|
|
202
202
|
|
|
203
|
-
Obj.change(obj, (
|
|
204
|
-
const meta = Obj.getMeta(
|
|
203
|
+
Obj.change(obj, (obj) => {
|
|
204
|
+
const meta = Obj.getMeta(obj);
|
|
205
205
|
meta.tags = ['tag-1', 'tag-2'];
|
|
206
206
|
meta.keys.push({ source: 'external', id: '123' });
|
|
207
207
|
});
|
|
@@ -214,12 +214,12 @@ describe('Obj.change enforcement', () => {
|
|
|
214
214
|
test('multiple mutations in single change all persist', ({ expect }) => {
|
|
215
215
|
const obj = Obj.make(TestSchema.Person, { name: 'Test' });
|
|
216
216
|
|
|
217
|
-
Obj.change(obj, (
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
Obj.addTag(
|
|
222
|
-
Obj.addTag(
|
|
217
|
+
Obj.change(obj, (obj) => {
|
|
218
|
+
obj.name = 'Name 1';
|
|
219
|
+
obj.name = 'Name 2';
|
|
220
|
+
obj.name = 'Name 3';
|
|
221
|
+
Obj.addTag(obj, 'tag-1');
|
|
222
|
+
Obj.addTag(obj, 'tag-2');
|
|
223
223
|
});
|
|
224
224
|
|
|
225
225
|
// All mutations should persist.
|
|
@@ -237,9 +237,9 @@ describe('Obj.change enforcement', () => {
|
|
|
237
237
|
notificationCount++;
|
|
238
238
|
});
|
|
239
239
|
|
|
240
|
-
Obj.change(obj, (
|
|
241
|
-
|
|
242
|
-
|
|
240
|
+
Obj.change(obj, (obj) => {
|
|
241
|
+
obj.name = 'Jane';
|
|
242
|
+
obj.age = 30;
|
|
243
243
|
});
|
|
244
244
|
|
|
245
245
|
// Should only fire one notification for all changes.
|
|
@@ -256,8 +256,8 @@ describe('Obj.change enforcement', () => {
|
|
|
256
256
|
address: { city: 'NYC', coordinates: {} },
|
|
257
257
|
});
|
|
258
258
|
|
|
259
|
-
Obj.change(obj, (
|
|
260
|
-
|
|
259
|
+
Obj.change(obj, (obj) => {
|
|
260
|
+
obj.address!.state = 'NY';
|
|
261
261
|
});
|
|
262
262
|
|
|
263
263
|
expect(obj.address?.state).toBe('NY');
|
|
@@ -270,9 +270,9 @@ describe('Obj.change enforcement', () => {
|
|
|
270
270
|
address: { city: 'NYC', coordinates: { lat: 40.7128, lng: -74.006 } },
|
|
271
271
|
});
|
|
272
272
|
|
|
273
|
-
Obj.change(obj, (
|
|
274
|
-
|
|
275
|
-
|
|
273
|
+
Obj.change(obj, (obj) => {
|
|
274
|
+
obj.address!.coordinates!.lat = 51.5074;
|
|
275
|
+
obj.address!.coordinates!.lng = -0.1278;
|
|
276
276
|
});
|
|
277
277
|
|
|
278
278
|
expect(obj.address?.coordinates?.lat).toBe(51.5074);
|
|
@@ -306,8 +306,8 @@ describe('Obj.change enforcement', () => {
|
|
|
306
306
|
test('nested Obj.change calls work correctly', ({ expect }) => {
|
|
307
307
|
const obj = Obj.make(TestSchema.Person, { name: 'John' });
|
|
308
308
|
|
|
309
|
-
Obj.change(obj, (
|
|
310
|
-
|
|
309
|
+
Obj.change(obj, (obj) => {
|
|
310
|
+
obj.name = 'Jane';
|
|
311
311
|
|
|
312
312
|
// Nested change should work (already in change context).
|
|
313
313
|
Obj.change(obj, (p2) => {
|
|
@@ -323,8 +323,8 @@ describe('Obj.change enforcement', () => {
|
|
|
323
323
|
const obj = Obj.make(TestSchema.Person, { name: 'John' });
|
|
324
324
|
|
|
325
325
|
expect(() => {
|
|
326
|
-
Obj.change(obj, (
|
|
327
|
-
|
|
326
|
+
Obj.change(obj, (obj) => {
|
|
327
|
+
obj.name = 'Jane';
|
|
328
328
|
throw new Error('Test error');
|
|
329
329
|
});
|
|
330
330
|
}).toThrow('Test error');
|
|
@@ -344,8 +344,8 @@ describe('Obj.change enforcement', () => {
|
|
|
344
344
|
fields: [{ label: 'tag1', value: 'val1' }],
|
|
345
345
|
});
|
|
346
346
|
|
|
347
|
-
Obj.change(obj, (
|
|
348
|
-
|
|
347
|
+
Obj.change(obj, (obj) => {
|
|
348
|
+
obj.fields!.push({ label: 'tag2', value: 'val2' });
|
|
349
349
|
});
|
|
350
350
|
|
|
351
351
|
expect(obj.fields).toHaveLength(2);
|
|
@@ -362,8 +362,8 @@ describe('Obj.change enforcement', () => {
|
|
|
362
362
|
});
|
|
363
363
|
|
|
364
364
|
let popped: any;
|
|
365
|
-
Obj.change(obj, (
|
|
366
|
-
popped =
|
|
365
|
+
Obj.change(obj, (obj) => {
|
|
366
|
+
popped = obj.fields!.pop();
|
|
367
367
|
});
|
|
368
368
|
|
|
369
369
|
expect(popped.label).toBe('b');
|
|
@@ -380,8 +380,8 @@ describe('Obj.change enforcement', () => {
|
|
|
380
380
|
],
|
|
381
381
|
});
|
|
382
382
|
|
|
383
|
-
Obj.change(obj, (
|
|
384
|
-
|
|
383
|
+
Obj.change(obj, (obj) => {
|
|
384
|
+
obj.fields!.splice(1, 1, { label: 'x', value: 'x' });
|
|
385
385
|
});
|
|
386
386
|
|
|
387
387
|
expect(obj.fields).toHaveLength(3);
|
|
@@ -429,8 +429,8 @@ describe('Obj.change enforcement', () => {
|
|
|
429
429
|
test('delete property within Obj.change', ({ expect }) => {
|
|
430
430
|
const obj = Obj.make(TestSchema.Person, { name: 'John', age: 25 });
|
|
431
431
|
|
|
432
|
-
Obj.change(obj, (
|
|
433
|
-
delete
|
|
432
|
+
Obj.change(obj, (obj) => {
|
|
433
|
+
delete obj.age;
|
|
434
434
|
});
|
|
435
435
|
|
|
436
436
|
expect(obj.age).toBeUndefined();
|
|
@@ -455,8 +455,8 @@ describe('Obj.change enforcement', () => {
|
|
|
455
455
|
[Relation.Target]: target,
|
|
456
456
|
});
|
|
457
457
|
|
|
458
|
-
Relation.change(rel, (
|
|
459
|
-
const meta = Relation.getMeta(
|
|
458
|
+
Relation.change(rel, (obj) => {
|
|
459
|
+
const meta = Relation.getMeta(obj);
|
|
460
460
|
meta.tags = ['rel-tag'];
|
|
461
461
|
meta.keys.push({ source: 'rel-source', id: 'rel-key' });
|
|
462
462
|
});
|
|
@@ -473,14 +473,14 @@ describe('Obj.change enforcement', () => {
|
|
|
473
473
|
[Relation.Target]: target,
|
|
474
474
|
});
|
|
475
475
|
|
|
476
|
-
Relation.change(rel, (
|
|
477
|
-
Relation.addTag(
|
|
476
|
+
Relation.change(rel, (obj) => {
|
|
477
|
+
Relation.addTag(obj, 'important');
|
|
478
478
|
});
|
|
479
479
|
|
|
480
480
|
expect(Relation.getMeta(rel).tags).toContain('important');
|
|
481
481
|
|
|
482
|
-
Relation.change(rel, (
|
|
483
|
-
Relation.removeTag(
|
|
482
|
+
Relation.change(rel, (obj) => {
|
|
483
|
+
Relation.removeTag(obj, 'important');
|
|
484
484
|
});
|
|
485
485
|
|
|
486
486
|
expect(Relation.getMeta(rel).tags).not.toContain('important');
|
|
@@ -494,8 +494,8 @@ describe('Obj.change enforcement', () => {
|
|
|
494
494
|
|
|
495
495
|
// Direct assignment of root ECHO objects (created with Obj.make) is not allowed.
|
|
496
496
|
expect(() => {
|
|
497
|
-
Obj.change(obj, (
|
|
498
|
-
|
|
497
|
+
Obj.change(obj, (obj) => {
|
|
498
|
+
obj.other = other;
|
|
499
499
|
});
|
|
500
500
|
}).toThrow(/Object references must be wrapped with `Ref\.make`/);
|
|
501
501
|
});
|
|
@@ -504,14 +504,14 @@ describe('Obj.change enforcement', () => {
|
|
|
504
504
|
const obj = Obj.make(TestSchema.Expando, {});
|
|
505
505
|
|
|
506
506
|
// Assign a plain object (not created with Obj.make).
|
|
507
|
-
Obj.change(obj, (
|
|
508
|
-
|
|
507
|
+
Obj.change(obj, (obj) => {
|
|
508
|
+
obj.nested = { value: 'initial' };
|
|
509
509
|
});
|
|
510
510
|
expect(obj.nested.value).toBe('initial');
|
|
511
511
|
|
|
512
512
|
// Modify plain nested object through parent's change context.
|
|
513
|
-
Obj.change(obj, (
|
|
514
|
-
|
|
513
|
+
Obj.change(obj, (obj) => {
|
|
514
|
+
obj.nested.value = 'modified';
|
|
515
515
|
});
|
|
516
516
|
expect(obj.nested.value).toBe('modified');
|
|
517
517
|
});
|
|
@@ -8,8 +8,8 @@ import { describe, expect, test } from 'vitest';
|
|
|
8
8
|
|
|
9
9
|
import { isNode } from '@dxos/util';
|
|
10
10
|
|
|
11
|
-
import { TestSchema, updateCounter } from '
|
|
12
|
-
import { createObject } from '
|
|
11
|
+
import { TestSchema, updateCounter } from '../../../testing';
|
|
12
|
+
import { createObject } from '../../Obj';
|
|
13
13
|
import { ATTR_META } from '../types';
|
|
14
14
|
|
|
15
15
|
import { makeObject } from './make-object';
|
|
@@ -7,16 +7,19 @@ import { invariant } from '@dxos/invariant';
|
|
|
7
7
|
import { DXN } from '@dxos/keys';
|
|
8
8
|
import { deepMapValues } from '@dxos/util';
|
|
9
9
|
|
|
10
|
+
import { Ref } from '../../Ref';
|
|
10
11
|
import {
|
|
12
|
+
ATTR_META,
|
|
11
13
|
ATTR_RELATION_SOURCE,
|
|
12
14
|
ATTR_RELATION_TARGET,
|
|
13
15
|
ATTR_SELF_DXN,
|
|
16
|
+
ATTR_TYPE,
|
|
17
|
+
MetaId,
|
|
14
18
|
RelationSourceDXNId,
|
|
15
19
|
RelationTargetDXNId,
|
|
16
20
|
SelfDXNId,
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
import { ATTR_META, ATTR_TYPE, MetaId, TypeId } from '../types';
|
|
21
|
+
TypeId,
|
|
22
|
+
} from '../types';
|
|
20
23
|
|
|
21
24
|
/**
|
|
22
25
|
* Attaches a toJSON method to the object for typed serialization.
|
|
@@ -6,8 +6,8 @@ import type * as Schema from 'effect/Schema';
|
|
|
6
6
|
|
|
7
7
|
import { ObjectId } from '@dxos/keys';
|
|
8
8
|
|
|
9
|
-
import { getTypeAnnotation } from '
|
|
10
|
-
import { type AnyProperties, KindId, MetaId, type ObjectMeta, ObjectMetaSchema } from '../types';
|
|
9
|
+
import { getTypeAnnotation } from '../../Annotation';
|
|
10
|
+
import { type AnyProperties, KindId, MetaId, type ObjectMeta, ObjectMetaSchema, ParentId } from '../types';
|
|
11
11
|
|
|
12
12
|
import { defineHiddenProperty } from './define-hidden-property';
|
|
13
13
|
import { attachTypedJsonSerializer } from './json-serializer';
|
|
@@ -35,7 +35,8 @@ export const makeObject: {
|
|
|
35
35
|
meta?: ObjectMeta,
|
|
36
36
|
): T;
|
|
37
37
|
} = <T extends AnyProperties>(schema: Schema.Schema<T, any>, obj: MakeObjectProps<T>, meta?: ObjectMeta): T => {
|
|
38
|
-
|
|
38
|
+
// Use Object.assign to copy symbol properties (like ParentId) that spread operator doesn't copy.
|
|
39
|
+
return createReactiveObject<T>(Object.assign({}, obj) as T, meta, schema);
|
|
39
40
|
};
|
|
40
41
|
|
|
41
42
|
const createReactiveObject = <T extends AnyProperties>(obj: T, meta?: ObjectMeta, schema?: Schema.Schema<T>): T => {
|
|
@@ -47,12 +48,21 @@ const createReactiveObject = <T extends AnyProperties>(obj: T, meta?: ObjectMeta
|
|
|
47
48
|
throw new Error('Schema is required for reactive objects. Use Atom for untyped reactive state.');
|
|
48
49
|
}
|
|
49
50
|
|
|
51
|
+
// Extract parent from props (can be set via [Obj.Parent]).
|
|
52
|
+
const parent = (obj as any)[ParentId];
|
|
53
|
+
if (parent !== undefined) {
|
|
54
|
+
delete (obj as any)[ParentId];
|
|
55
|
+
}
|
|
56
|
+
|
|
50
57
|
const annotation = getTypeAnnotation(schema);
|
|
51
58
|
if (annotation) {
|
|
52
59
|
setIdOnTarget(obj);
|
|
53
60
|
defineHiddenProperty(obj, KindId, annotation.kind);
|
|
54
61
|
}
|
|
55
62
|
initMeta(obj, meta);
|
|
63
|
+
if (parent !== undefined) {
|
|
64
|
+
defineHiddenProperty(obj, ParentId, parent);
|
|
65
|
+
}
|
|
56
66
|
prepareTypedTarget(obj, schema);
|
|
57
67
|
attachTypedJsonSerializer(obj);
|
|
58
68
|
const proxy = createProxy<T>(obj, TypedReactiveHandler.instance);
|
|
@@ -6,14 +6,14 @@ import * as Schema from 'effect/Schema';
|
|
|
6
6
|
import * as SchemaAST from 'effect/SchemaAST';
|
|
7
7
|
import { describe, expect, test } from 'vitest';
|
|
8
8
|
|
|
9
|
-
import { createEchoSchema } from '
|
|
10
|
-
import { PropertyMeta, getPropertyMetaAnnotation, getTypeAnnotation } from '
|
|
11
|
-
import { EchoObjectSchema } from '
|
|
9
|
+
import { createEchoSchema } from '../../../testing';
|
|
10
|
+
import { PropertyMeta, getPropertyMetaAnnotation, getTypeAnnotation } from '../../Annotation';
|
|
11
|
+
import { EchoObjectSchema } from '../../Entity';
|
|
12
12
|
|
|
13
13
|
// TODO(dmaretskyi): Comment.
|
|
14
14
|
const EmptySchemaType = Schema.Struct({}).pipe(
|
|
15
15
|
EchoObjectSchema({
|
|
16
|
-
typename: 'example.
|
|
16
|
+
typename: 'com.example.type.empty',
|
|
17
17
|
version: '0.1.0',
|
|
18
18
|
}),
|
|
19
19
|
);
|
|
@@ -27,7 +27,7 @@ describe('dynamic schema', () => {
|
|
|
27
27
|
field2: Schema.Boolean,
|
|
28
28
|
}).pipe(
|
|
29
29
|
EchoObjectSchema({
|
|
30
|
-
typename: 'example.
|
|
30
|
+
typename: 'com.example.type.test',
|
|
31
31
|
version: '0.1.0',
|
|
32
32
|
}),
|
|
33
33
|
);
|
|
@@ -44,7 +44,7 @@ describe('dynamic schema', () => {
|
|
|
44
44
|
field1: Schema.String,
|
|
45
45
|
}).pipe(
|
|
46
46
|
EchoObjectSchema({
|
|
47
|
-
typename: 'example.
|
|
47
|
+
typename: 'com.example.type.test',
|
|
48
48
|
version: '0.1.0',
|
|
49
49
|
}),
|
|
50
50
|
);
|
|
@@ -95,7 +95,7 @@ describe('dynamic schema', () => {
|
|
|
95
95
|
registered.updateFields({ field3: Schema.Boolean });
|
|
96
96
|
registered.removeFields(['field2']);
|
|
97
97
|
expect(getTypeAnnotation(registered)).to.deep.contain({
|
|
98
|
-
typename: 'example.
|
|
98
|
+
typename: 'com.example.type.empty',
|
|
99
99
|
version: '0.1.0',
|
|
100
100
|
});
|
|
101
101
|
expect(getPropertyMetaAnnotation(registered.getProperties()[0], metaNamespace)).to.deep.eq(metaInfo);
|
|
@@ -111,7 +111,7 @@ describe('dynamic schema', () => {
|
|
|
111
111
|
});
|
|
112
112
|
|
|
113
113
|
// First update.
|
|
114
|
-
const newTypename1 = 'example.
|
|
114
|
+
const newTypename1 = 'com.example.type.individual';
|
|
115
115
|
registered.updateTypename(newTypename1);
|
|
116
116
|
|
|
117
117
|
// Basic typename update checks.
|
|
@@ -132,13 +132,13 @@ describe('dynamic schema', () => {
|
|
|
132
132
|
expect(nameMeta).toEqual({ maxLength: 10 });
|
|
133
133
|
|
|
134
134
|
// Second update to ensure multiple updates work.
|
|
135
|
-
const newTypename2 = 'example.
|
|
135
|
+
const newTypename2 = 'com.example.type.person';
|
|
136
136
|
registered.updateTypename(newTypename2);
|
|
137
137
|
expect(registered.typename).toBe(newTypename2);
|
|
138
138
|
expect(registered.jsonSchema.$id).toBe(`dxn:type:${newTypename2}`);
|
|
139
139
|
expect(registered.jsonSchema.typename).toBe(newTypename2);
|
|
140
140
|
expect(getTypeAnnotation(registered)).to.deep.contain({
|
|
141
|
-
typename: 'example.
|
|
141
|
+
typename: 'com.example.type.person',
|
|
142
142
|
version: '0.1.0',
|
|
143
143
|
});
|
|
144
144
|
});
|