@dxos/echo 0.8.4-staging.ac66bdf99f → 0.9.1-main.c7dcc2e112
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/LICENSE +102 -5
- package/README.md +7 -7
- package/dist/lib/neutral/Annotation.mjs +45 -6
- package/dist/lib/neutral/Database.mjs +10 -17
- package/dist/lib/neutral/Entity.mjs +35 -20
- package/dist/lib/neutral/Err.mjs +3 -3
- package/dist/lib/neutral/Feed.mjs +23 -19
- package/dist/lib/neutral/Filter.mjs +13 -15
- package/dist/lib/neutral/Format.mjs +23 -3
- package/dist/lib/neutral/JsonSchema.mjs +7 -8
- package/dist/lib/neutral/Key.mjs +9 -5
- package/dist/lib/neutral/Migration.mjs +11 -10
- package/dist/lib/neutral/Obj.mjs +33 -20
- package/dist/lib/neutral/Order.mjs +7 -3
- package/dist/lib/neutral/Query.mjs +17 -17
- package/dist/lib/neutral/QueryResult.mjs +1 -1
- package/dist/lib/neutral/Ref.mjs +10 -9
- package/dist/lib/neutral/Registry.mjs +14 -0
- package/dist/lib/neutral/Relation.mjs +28 -25
- package/dist/lib/neutral/Scope.mjs +12 -0
- package/dist/lib/neutral/Tag.mjs +17 -14
- package/dist/lib/neutral/Type.mjs +54 -26
- package/dist/lib/neutral/{chunk-OMUPQMLR.mjs → chunk-35INCYOE.mjs} +1 -1
- package/dist/lib/neutral/chunk-35INCYOE.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-4OIBYSXE.mjs → chunk-3JXQUMUI.mjs} +78 -32
- package/dist/lib/neutral/chunk-3JXQUMUI.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-G3IQMKF7.mjs → chunk-4TPQZPLY.mjs} +130 -119
- package/dist/lib/neutral/chunk-4TPQZPLY.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-TU3GW67D.mjs → chunk-5GAIWRQB.mjs} +40 -40
- package/dist/lib/neutral/chunk-5GAIWRQB.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-B4BASU6W.mjs → chunk-6CEISA3V.mjs} +93 -76
- package/dist/lib/neutral/chunk-6CEISA3V.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-GZQTCRJB.mjs → chunk-6M2Z6WBH.mjs} +22 -2
- package/dist/lib/neutral/chunk-6M2Z6WBH.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-ANHVGJI4.mjs → chunk-7LOUAPYZ.mjs} +9 -5
- package/dist/lib/neutral/chunk-7LOUAPYZ.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-WAK4DMFV.mjs → chunk-A53NTBHE.mjs} +12 -7
- package/dist/lib/neutral/chunk-A53NTBHE.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-EAMSSLZC.mjs → chunk-AFANXSGV.mjs} +83 -46
- package/dist/lib/neutral/chunk-AFANXSGV.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-UBEZSGXY.mjs → chunk-BBFJWWAV.mjs} +6 -6
- package/dist/lib/neutral/chunk-BBFJWWAV.mjs.map +7 -0
- package/dist/lib/neutral/chunk-E7IOTOZD.mjs +108 -0
- package/dist/lib/neutral/chunk-E7IOTOZD.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-UI6MWK5W.mjs → chunk-EVK6XBXO.mjs} +16 -2
- package/dist/lib/neutral/chunk-EVK6XBXO.mjs.map +7 -0
- package/dist/lib/neutral/chunk-HGWQR5KH.mjs +259 -0
- package/dist/lib/neutral/chunk-HGWQR5KH.mjs.map +7 -0
- package/dist/lib/neutral/chunk-JZ6LFQU5.mjs +109 -0
- package/dist/lib/neutral/chunk-JZ6LFQU5.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-JUXPFOEI.mjs → chunk-K3S7D5PR.mjs} +48 -88
- package/dist/lib/neutral/chunk-K3S7D5PR.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-OS35K56T.mjs → chunk-L3OBWBV2.mjs} +3 -3
- package/dist/lib/neutral/{chunk-OS35K56T.mjs.map → chunk-L3OBWBV2.mjs.map} +2 -2
- package/dist/lib/neutral/{chunk-V36VO5SS.mjs → chunk-NOL7O3BL.mjs} +32 -40
- package/dist/lib/neutral/chunk-NOL7O3BL.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-TBKX6JQO.mjs → chunk-O6BH7EPN.mjs} +30 -3
- package/dist/lib/neutral/chunk-O6BH7EPN.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-7RO7CPBZ.mjs → chunk-PLDMJJJC.mjs} +2 -2
- package/dist/lib/neutral/{chunk-HBUZJNZO.mjs → chunk-SZ5WB6HF.mjs} +94 -99
- package/dist/lib/neutral/chunk-SZ5WB6HF.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-BVOFLCVF.mjs → chunk-TF5BSLF6.mjs} +9 -6
- package/dist/lib/neutral/chunk-TF5BSLF6.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-DQYLD2RB.mjs → chunk-TFEWTY5A.mjs} +155 -129
- package/dist/lib/neutral/chunk-TFEWTY5A.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-MOR5ERFM.mjs → chunk-VQYL2OQF.mjs} +771 -1252
- package/dist/lib/neutral/chunk-VQYL2OQF.mjs.map +7 -0
- package/dist/lib/neutral/chunk-WISOH2XH.mjs +36 -0
- package/dist/lib/neutral/chunk-WISOH2XH.mjs.map +7 -0
- package/dist/lib/neutral/chunk-WU3GIANS.mjs +31 -0
- package/dist/lib/neutral/chunk-WU3GIANS.mjs.map +7 -0
- package/dist/lib/neutral/chunk-WZ32BF53.mjs +702 -0
- package/dist/lib/neutral/chunk-WZ32BF53.mjs.map +7 -0
- package/dist/lib/neutral/chunk-X3NUUON4.mjs +184 -0
- package/dist/lib/neutral/chunk-X3NUUON4.mjs.map +7 -0
- package/dist/lib/neutral/chunk-Z3WMRRAZ.mjs +168 -0
- package/dist/lib/neutral/chunk-Z3WMRRAZ.mjs.map +7 -0
- package/dist/lib/neutral/index.mjs +47 -41
- package/dist/lib/neutral/internal/index.mjs +157 -72
- package/dist/lib/neutral/meta.json +1 -1
- package/dist/lib/neutral/testing/index.mjs +261 -178
- package/dist/lib/neutral/testing/index.mjs.map +4 -4
- package/dist/types/src/Annotation.d.ts +108 -4
- package/dist/types/src/Annotation.d.ts.map +1 -1
- package/dist/types/src/Annotation.test.d.ts +2 -0
- package/dist/types/src/Annotation.test.d.ts.map +1 -0
- package/dist/types/src/Collection.d.ts +2 -3
- package/dist/types/src/Collection.d.ts.map +1 -1
- package/dist/types/src/Database.d.ts +78 -49
- package/dist/types/src/Database.d.ts.map +1 -1
- package/dist/types/src/Dataset.d.ts +16 -6
- package/dist/types/src/Dataset.d.ts.map +1 -1
- package/dist/types/src/Entity.d.ts +103 -28
- package/dist/types/src/Entity.d.ts.map +1 -1
- package/dist/types/src/Err.d.ts +27 -27
- package/dist/types/src/Err.d.ts.map +1 -1
- package/dist/types/src/Feed.d.ts +69 -19
- package/dist/types/src/Feed.d.ts.map +1 -1
- package/dist/types/src/Filter.d.ts +38 -12
- package/dist/types/src/Filter.d.ts.map +1 -1
- package/dist/types/src/Format.d.ts +0 -2
- package/dist/types/src/Format.d.ts.map +1 -1
- package/dist/types/src/Hypergraph.d.ts +14 -9
- 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 +2 -2
- package/dist/types/src/JsonSchema.d.ts.map +1 -1
- package/dist/types/src/Key.d.ts +1 -1
- package/dist/types/src/Key.d.ts.map +1 -1
- package/dist/types/src/Migration.d.ts +26 -11
- package/dist/types/src/Migration.d.ts.map +1 -1
- package/dist/types/src/Obj.d.ts +106 -61
- package/dist/types/src/Obj.d.ts.map +1 -1
- package/dist/types/src/Order.d.ts +10 -0
- package/dist/types/src/Order.d.ts.map +1 -1
- package/dist/types/src/Query.d.ts +34 -12
- package/dist/types/src/Query.d.ts.map +1 -1
- package/dist/types/src/QueryResult.d.ts +21 -0
- package/dist/types/src/QueryResult.d.ts.map +1 -1
- package/dist/types/src/Ref.d.ts +15 -7
- package/dist/types/src/Ref.d.ts.map +1 -1
- package/dist/types/src/Registry.d.ts +131 -0
- package/dist/types/src/Registry.d.ts.map +1 -0
- package/dist/types/src/Relation.d.ts +73 -41
- package/dist/types/src/Relation.d.ts.map +1 -1
- package/dist/types/src/Scope.d.ts +35 -0
- package/dist/types/src/Scope.d.ts.map +1 -0
- package/dist/types/src/Tag.d.ts +21 -5
- package/dist/types/src/Tag.d.ts.map +1 -1
- package/dist/types/src/Type.d.ts +366 -95
- package/dist/types/src/Type.d.ts.map +1 -1
- package/dist/types/src/View.d.ts +9 -12
- package/dist/types/src/View.d.ts.map +1 -1
- 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 +4 -3
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/internal/Annotation/annotations.d.ts +120 -38
- package/dist/types/src/internal/Annotation/annotations.d.ts.map +1 -1
- package/dist/types/src/internal/Annotation/dictionary.d.ts +24 -0
- package/dist/types/src/internal/Annotation/dictionary.d.ts.map +1 -0
- package/dist/types/src/internal/Annotation/entity-dictionary.d.ts +14 -0
- package/dist/types/src/internal/Annotation/entity-dictionary.d.ts.map +1 -0
- package/dist/types/src/internal/Annotation/index.d.ts +4 -2
- package/dist/types/src/internal/Annotation/index.d.ts.map +1 -1
- package/dist/types/src/internal/Annotation/sorting.d.ts.map +1 -1
- package/dist/types/src/internal/Annotation/util.d.ts +14 -5
- package/dist/types/src/internal/Annotation/util.d.ts.map +1 -1
- package/dist/types/src/internal/Entity/api.d.ts +17 -3
- package/dist/types/src/internal/Entity/api.d.ts.map +1 -1
- package/dist/types/src/internal/Entity/entity.d.ts +72 -8
- package/dist/types/src/internal/Entity/entity.d.ts.map +1 -1
- package/dist/types/src/internal/Entity/guard.d.ts +10 -0
- package/dist/types/src/internal/Entity/guard.d.ts.map +1 -0
- package/dist/types/src/internal/Entity/index.d.ts +2 -0
- package/dist/types/src/internal/Entity/index.d.ts.map +1 -1
- package/dist/types/src/internal/Entity/model.d.ts +21 -17
- package/dist/types/src/internal/Entity/model.d.ts.map +1 -1
- package/dist/types/src/internal/Entity/object.d.ts +3 -3
- package/dist/types/src/internal/Entity/object.d.ts.map +1 -1
- package/dist/types/src/internal/Entity/relation.d.ts +30 -7
- package/dist/types/src/internal/Entity/relation.d.ts.map +1 -1
- package/dist/types/src/internal/Entity/type-kind.d.ts +24 -0
- package/dist/types/src/internal/Entity/type-kind.d.ts.map +1 -0
- package/dist/types/src/internal/Entity/type-uri.d.ts +24 -0
- package/dist/types/src/internal/Entity/type-uri.d.ts.map +1 -0
- package/dist/types/src/internal/Entity/version.d.ts.map +1 -1
- package/dist/types/src/internal/Format/date.d.ts.map +1 -1
- package/dist/types/src/internal/Format/format.d.ts +3 -2
- package/dist/types/src/internal/Format/format.d.ts.map +1 -1
- package/dist/types/src/internal/Format/index.d.ts +2 -2
- package/dist/types/src/internal/Format/index.d.ts.map +1 -1
- package/dist/types/src/internal/Format/number.d.ts.map +1 -1
- package/dist/types/src/internal/Format/object.d.ts +3 -1
- package/dist/types/src/internal/Format/object.d.ts.map +1 -1
- package/dist/types/src/internal/Format/types.d.ts.map +1 -1
- package/dist/types/src/internal/JsonSchema/json-schema-normalize.d.ts.map +1 -1
- package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts +34 -34
- package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts.map +1 -1
- package/dist/types/src/internal/JsonSchema/json-schema.d.ts +3 -2
- package/dist/types/src/internal/JsonSchema/json-schema.d.ts.map +1 -1
- package/dist/types/src/internal/Obj/atoms.d.ts +43 -0
- package/dist/types/src/internal/Obj/atoms.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/clone.d.ts.map +1 -1
- package/dist/types/src/internal/Obj/common.d.ts.map +1 -1
- package/dist/types/src/internal/Obj/create-object.d.ts +12 -12
- package/dist/types/src/internal/Obj/create-object.d.ts.map +1 -1
- package/dist/types/src/internal/Obj/deleted.d.ts.map +1 -1
- package/dist/types/src/internal/Obj/index.d.ts +1 -1
- package/dist/types/src/internal/Obj/index.d.ts.map +1 -1
- package/dist/types/src/internal/Obj/json-serializer.d.ts +8 -8
- package/dist/types/src/internal/Obj/json-serializer.d.ts.map +1 -1
- package/dist/types/src/internal/Obj/set-value.d.ts +1 -1
- package/dist/types/src/internal/Obj/set-value.d.ts.map +1 -1
- package/dist/types/src/internal/Obj/snapshot.d.ts.map +1 -1
- package/dist/types/src/internal/Obj/typed-object.d.ts +1 -1
- package/dist/types/src/internal/Query/index.d.ts +2 -0
- package/dist/types/src/internal/Query/index.d.ts.map +1 -0
- package/dist/types/src/internal/{Query.d.ts → Query/pretty.d.ts} +1 -1
- package/dist/types/src/internal/Query/pretty.d.ts.map +1 -0
- package/dist/types/src/internal/Ref/atoms.d.ts +10 -0
- package/dist/types/src/internal/Ref/atoms.d.ts.map +1 -0
- package/dist/types/src/internal/Ref/index.d.ts +1 -0
- package/dist/types/src/internal/Ref/index.d.ts.map +1 -1
- package/dist/types/src/internal/Ref/ref-array.d.ts +2 -2
- package/dist/types/src/internal/Ref/ref.d.ts +114 -19
- package/dist/types/src/internal/Ref/ref.d.ts.map +1 -1
- package/dist/types/src/internal/Ref/strong-deps.d.ts +35 -0
- package/dist/types/src/internal/Ref/strong-deps.d.ts.map +1 -0
- package/dist/types/src/internal/Ref/utils.d.ts +8 -0
- package/dist/types/src/internal/Ref/utils.d.ts.map +1 -0
- package/dist/types/src/internal/Type/compose.d.ts.map +1 -1
- package/dist/types/src/internal/Type/index.d.ts +1 -2
- package/dist/types/src/internal/Type/index.d.ts.map +1 -1
- package/dist/types/src/internal/Type/manipulation.d.ts +0 -1
- package/dist/types/src/internal/Type/manipulation.d.ts.map +1 -1
- package/dist/types/src/internal/Type/type-schema.d.ts +52 -0
- package/dist/types/src/internal/Type/type-schema.d.ts.map +1 -0
- package/dist/types/src/internal/common/api/meta.d.ts +14 -11
- package/dist/types/src/internal/common/api/meta.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/change-context.d.ts +1 -1
- package/dist/types/src/internal/common/proxy/change-context.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/errors.d.ts +1 -1
- package/dist/types/src/internal/common/proxy/errors.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/event-batch.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/json-serializer.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/make-object.d.ts +11 -5
- package/dist/types/src/internal/common/proxy/make-object.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/ownership.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/proxy-utils.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/reactive-array.d.ts +1 -1
- package/dist/types/src/internal/common/proxy/reactive.d.ts +1 -1
- package/dist/types/src/internal/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 -1
- package/dist/types/src/internal/common/proxy/typed-handler.d.ts +18 -2
- package/dist/types/src/internal/common/proxy/typed-handler.d.ts.map +1 -1
- package/dist/types/src/internal/common/types/base.d.ts +4 -4
- package/dist/types/src/internal/common/types/base.d.ts.map +1 -1
- package/dist/types/src/internal/common/types/entity.d.ts +62 -5
- package/dist/types/src/internal/common/types/entity.d.ts.map +1 -1
- package/dist/types/src/internal/common/types/index.d.ts +1 -1
- package/dist/types/src/internal/common/types/index.d.ts.map +1 -1
- package/dist/types/src/internal/common/types/meta.d.ts +33 -12
- package/dist/types/src/internal/common/types/meta.d.ts.map +1 -1
- package/dist/types/src/internal/common/types/model-symbols.d.ts +15 -4
- package/dist/types/src/internal/common/types/model-symbols.d.ts.map +1 -1
- package/dist/types/src/internal/common/types/typename.d.ts +7 -0
- package/dist/types/src/internal/common/types/typename.d.ts.map +1 -1
- package/dist/types/src/internal/common/types/version.d.ts +1 -1
- package/dist/types/src/internal/common/types/well-known-types.d.ts +11 -0
- package/dist/types/src/internal/common/types/well-known-types.d.ts.map +1 -0
- package/dist/types/src/internal/index.d.ts +2 -2
- package/dist/types/src/internal/index.d.ts.map +1 -1
- package/dist/types/src/testing/index.d.ts +1 -0
- package/dist/types/src/testing/index.d.ts.map +1 -1
- package/dist/types/src/testing/registry.d.ts +9 -0
- package/dist/types/src/testing/registry.d.ts.map +1 -0
- 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 +83 -89
- package/dist/types/src/testing/test-schema.d.ts.map +1 -1
- package/dist/types/src/testing/util.d.ts +5 -3
- package/dist/types/src/testing/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +26 -24
- package/src/Annotation.test.ts +439 -0
- package/src/Annotation.ts +163 -4
- package/src/Collection.ts +5 -9
- package/src/Database.ts +126 -101
- package/src/Dataset.ts +10 -2
- package/src/Entity.test.ts +116 -6
- package/src/Entity.ts +136 -32
- package/src/Err.ts +4 -4
- package/src/Feed.ts +95 -44
- package/src/Filter.ts +70 -40
- package/src/Format.ts +0 -4
- package/src/Hypergraph.ts +14 -9
- package/src/Json.test.ts +175 -0
- package/src/Json.ts +103 -0
- package/src/Key.ts +1 -1
- package/src/Migration.ts +39 -19
- package/src/Obj.test.ts +122 -20
- package/src/Obj.ts +170 -91
- package/src/Order.ts +22 -0
- package/src/Query.test.ts +183 -154
- package/src/Query.ts +172 -85
- package/src/QueryResult.ts +26 -0
- package/src/Ref.ts +22 -4
- package/src/Registry.ts +155 -0
- package/src/Relation.test.ts +10 -10
- package/src/Relation.ts +116 -69
- package/src/Scope.ts +50 -0
- package/src/Tag.md +88 -0
- package/src/Tag.ts +50 -6
- package/src/Type.test.ts +223 -18
- package/src/Type.ts +623 -131
- package/src/View.ts +14 -23
- package/src/exemplars.test.ts +21 -0
- package/src/index.ts +4 -4
- package/src/internal/Annotation/annotations.test.ts +31 -11
- package/src/internal/Annotation/annotations.ts +199 -111
- package/src/internal/Annotation/dictionary.ts +47 -0
- package/src/internal/Annotation/entity-dictionary.ts +74 -0
- package/src/internal/Annotation/index.ts +4 -2
- package/src/internal/Annotation/util.ts +17 -8
- package/src/internal/Entity/api.ts +54 -7
- package/src/internal/Entity/entity.ts +196 -47
- package/src/internal/Entity/guard.ts +26 -0
- package/src/internal/Entity/index.ts +2 -0
- package/src/internal/Entity/model.ts +38 -28
- package/src/internal/Entity/object.ts +21 -5
- package/src/internal/Entity/relation.ts +68 -34
- package/src/internal/Entity/type-kind.ts +75 -0
- package/src/internal/Entity/type-uri.ts +92 -0
- package/src/internal/Entity/util.ts +9 -9
- package/src/internal/Format/date.ts +0 -4
- package/src/internal/Format/format.test.ts +21 -0
- package/src/internal/Format/index.ts +2 -3
- package/src/internal/Format/object.ts +21 -4
- package/src/internal/Format/types.ts +1 -1
- package/src/internal/JsonSchema/annotations.ts +1 -1
- package/src/internal/JsonSchema/json-schema-type.ts +4 -4
- package/src/internal/JsonSchema/json-schema.test.ts +71 -145
- package/src/internal/JsonSchema/json-schema.ts +49 -35
- package/src/internal/Obj/atoms.ts +275 -0
- package/src/internal/Obj/clone.ts +9 -4
- package/src/internal/Obj/create-object.test.ts +12 -10
- package/src/internal/Obj/create-object.ts +68 -22
- package/src/internal/Obj/index.ts +1 -1
- package/src/internal/Obj/inspect.ts +5 -3
- package/src/internal/Obj/json-serializer.test.ts +101 -22
- package/src/internal/Obj/json-serializer.ts +92 -36
- package/src/internal/Obj/set-value.test.ts +22 -45
- package/src/internal/Obj/set-value.ts +12 -19
- package/src/internal/Obj/snapshot.ts +13 -4
- package/src/internal/Obj/typed-object.test.ts +9 -11
- package/src/internal/Obj/typed-object.ts +1 -1
- package/src/internal/Query/index.ts +5 -0
- package/src/internal/{Query.ts → Query/pretty.ts} +40 -12
- package/src/internal/Ref/atoms.ts +20 -0
- package/src/internal/Ref/index.ts +1 -0
- package/src/internal/Ref/ref-array.ts +3 -3
- package/src/internal/Ref/ref.test.ts +18 -27
- package/src/internal/Ref/ref.ts +224 -69
- package/src/internal/Ref/strong-deps.ts +107 -0
- package/src/internal/Ref/utils.ts +45 -0
- package/src/internal/Type/compose.test.ts +3 -1
- package/src/internal/Type/index.ts +1 -2
- package/src/internal/Type/manipulation.ts +0 -25
- package/src/internal/Type/type-schema.ts +60 -0
- package/src/internal/common/README.md +2 -2
- package/src/internal/common/api/meta.ts +19 -17
- package/src/internal/common/proxy/change-context.ts +1 -1
- package/src/internal/common/proxy/change.test.ts +91 -83
- package/src/internal/common/proxy/errors.ts +2 -2
- package/src/internal/common/proxy/handler.test.ts +1 -1
- package/src/internal/common/proxy/json-serializer.ts +27 -16
- package/src/internal/common/proxy/make-object.ts +44 -20
- package/src/internal/common/proxy/ownership.ts +2 -2
- package/src/internal/common/proxy/reactive-array.ts +1 -1
- package/src/internal/common/proxy/reactive.test.ts +54 -0
- package/src/internal/common/proxy/reactive.ts +11 -2
- package/src/internal/common/proxy/schema.test.ts +48 -86
- package/src/internal/common/proxy/typed-handler.test.ts +12 -11
- package/src/internal/common/proxy/typed-handler.ts +78 -16
- package/src/internal/common/proxy/typed-object.test.ts +16 -28
- package/src/internal/common/types/base.ts +4 -4
- package/src/internal/common/types/entity.ts +80 -1
- package/src/internal/common/types/index.ts +6 -1
- package/src/internal/common/types/meta.ts +62 -20
- package/src/internal/common/types/model-symbols.ts +24 -4
- package/src/internal/common/types/typename.ts +39 -3
- package/src/internal/common/types/well-known-types.ts +15 -0
- package/src/internal/index.ts +6 -4
- package/src/testing/api.test.ts +15 -9
- package/src/testing/index.ts +1 -0
- package/src/testing/registry.ts +44 -0
- package/src/testing/test-data.ts +159 -99
- package/src/testing/test-schema.ts +22 -58
- package/src/testing/util.ts +14 -11
- package/dist/lib/neutral/Extension.mjs +0 -18
- package/dist/lib/neutral/SchemaRegistry.mjs +0 -2
- package/dist/lib/neutral/chunk-2KHZ36F5.mjs +0 -361
- package/dist/lib/neutral/chunk-2KHZ36F5.mjs.map +0 -7
- package/dist/lib/neutral/chunk-4OIBYSXE.mjs.map +0 -7
- package/dist/lib/neutral/chunk-4P3IXBLT.mjs +0 -45
- package/dist/lib/neutral/chunk-4P3IXBLT.mjs.map +0 -7
- package/dist/lib/neutral/chunk-ANHVGJI4.mjs.map +0 -7
- package/dist/lib/neutral/chunk-B4BASU6W.mjs.map +0 -7
- package/dist/lib/neutral/chunk-BNCCGLJN.mjs +0 -7
- package/dist/lib/neutral/chunk-BNCCGLJN.mjs.map +0 -7
- package/dist/lib/neutral/chunk-BVOFLCVF.mjs.map +0 -7
- package/dist/lib/neutral/chunk-DQYLD2RB.mjs.map +0 -7
- package/dist/lib/neutral/chunk-EAMSSLZC.mjs.map +0 -7
- package/dist/lib/neutral/chunk-G3IQMKF7.mjs.map +0 -7
- package/dist/lib/neutral/chunk-GZQTCRJB.mjs.map +0 -7
- package/dist/lib/neutral/chunk-HBUZJNZO.mjs.map +0 -7
- package/dist/lib/neutral/chunk-JUXPFOEI.mjs.map +0 -7
- package/dist/lib/neutral/chunk-MOR5ERFM.mjs.map +0 -7
- package/dist/lib/neutral/chunk-OMUPQMLR.mjs.map +0 -7
- package/dist/lib/neutral/chunk-PHU22NLC.mjs +0 -136
- package/dist/lib/neutral/chunk-PHU22NLC.mjs.map +0 -7
- package/dist/lib/neutral/chunk-ROG4RXXL.mjs +0 -97
- package/dist/lib/neutral/chunk-ROG4RXXL.mjs.map +0 -7
- package/dist/lib/neutral/chunk-T6W2LEZU.mjs +0 -125
- package/dist/lib/neutral/chunk-T6W2LEZU.mjs.map +0 -7
- package/dist/lib/neutral/chunk-TBKX6JQO.mjs.map +0 -7
- package/dist/lib/neutral/chunk-TU3GW67D.mjs.map +0 -7
- package/dist/lib/neutral/chunk-UBEZSGXY.mjs.map +0 -7
- package/dist/lib/neutral/chunk-UI6MWK5W.mjs.map +0 -7
- package/dist/lib/neutral/chunk-V36VO5SS.mjs.map +0 -7
- package/dist/lib/neutral/chunk-WAK4DMFV.mjs.map +0 -7
- package/dist/lib/neutral/chunk-YAHXAYOW.mjs +0 -56
- package/dist/lib/neutral/chunk-YAHXAYOW.mjs.map +0 -7
- package/dist/lib/neutral/chunk-YS6Q3XAD.mjs +0 -50
- package/dist/lib/neutral/chunk-YS6Q3XAD.mjs.map +0 -7
- package/dist/types/src/Extension.d.ts +0 -80
- package/dist/types/src/Extension.d.ts.map +0 -1
- package/dist/types/src/Extension.test.d.ts +0 -2
- package/dist/types/src/Extension.test.d.ts.map +0 -1
- package/dist/types/src/SchemaRegistry.d.ts +0 -84
- package/dist/types/src/SchemaRegistry.d.ts.map +0 -1
- package/dist/types/src/internal/Obj/ids.d.ts +0 -6
- package/dist/types/src/internal/Obj/ids.d.ts.map +0 -1
- package/dist/types/src/internal/Query.d.ts.map +0 -1
- package/dist/types/src/internal/Type/echo-schema.d.ts +0 -181
- package/dist/types/src/internal/Type/echo-schema.d.ts.map +0 -1
- package/dist/types/src/internal/Type/persistent-schema.d.ts +0 -20
- package/dist/types/src/internal/Type/persistent-schema.d.ts.map +0 -1
- package/src/Extension.test.ts +0 -235
- package/src/Extension.ts +0 -122
- package/src/SchemaRegistry.ts +0 -106
- package/src/internal/Obj/ids.ts +0 -12
- package/src/internal/Type/echo-schema.ts +0 -423
- package/src/internal/Type/persistent-schema.ts +0 -33
- /package/dist/lib/neutral/{Extension.mjs.map → Registry.mjs.map} +0 -0
- /package/dist/lib/neutral/{SchemaRegistry.mjs.map → Scope.mjs.map} +0 -0
- /package/dist/lib/neutral/{chunk-7RO7CPBZ.mjs.map → chunk-PLDMJJJC.mjs.map} +0 -0
|
@@ -3,47 +3,70 @@ import {
|
|
|
3
3
|
JsonSchemaType,
|
|
4
4
|
toEffectSchema,
|
|
5
5
|
toJsonSchema
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-K3S7D5PR.mjs";
|
|
7
|
+
import {
|
|
8
|
+
ATTR_META,
|
|
9
|
+
EntityMetaSchema,
|
|
10
|
+
getMeta,
|
|
11
|
+
isEntity
|
|
12
|
+
} from "./chunk-X3NUUON4.mjs";
|
|
7
13
|
import {
|
|
8
14
|
Ref,
|
|
15
|
+
RefTypeId,
|
|
16
|
+
loadRefTarget,
|
|
9
17
|
refFromEncodedReference,
|
|
10
18
|
setRefResolver
|
|
11
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-4TPQZPLY.mjs";
|
|
12
20
|
import {
|
|
21
|
+
ATTR_DELETED,
|
|
13
22
|
ATTR_PARENT,
|
|
23
|
+
ATTR_RELATION_SOURCE,
|
|
24
|
+
ATTR_RELATION_TARGET,
|
|
25
|
+
ATTR_SELF_URI,
|
|
26
|
+
ATTR_SELF_URI_LEGACY,
|
|
14
27
|
ATTR_TYPE,
|
|
15
28
|
IconAnnotation,
|
|
16
29
|
LabelAnnotation,
|
|
30
|
+
MetaId,
|
|
31
|
+
ObjectDatabaseId,
|
|
32
|
+
ObjectDeletedId,
|
|
33
|
+
ObjectVersionId,
|
|
17
34
|
ParentId,
|
|
35
|
+
RelationSourceDXNId,
|
|
36
|
+
RelationSourceId,
|
|
37
|
+
RelationTargetDXNId,
|
|
38
|
+
RelationTargetId,
|
|
18
39
|
SchemaId,
|
|
19
|
-
|
|
40
|
+
SelfURIId,
|
|
20
41
|
TypeAnnotationId,
|
|
42
|
+
TypeEntityId,
|
|
21
43
|
TypeId,
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
VersionSchema,
|
|
44
|
+
assertObjectModel,
|
|
45
|
+
getDatabase,
|
|
25
46
|
getEntityKind,
|
|
26
47
|
getLabel,
|
|
48
|
+
getObjectEchoUri,
|
|
27
49
|
getSchema,
|
|
28
|
-
getSchemaDXN,
|
|
29
50
|
getSchemaTypename,
|
|
51
|
+
getSchemaURI,
|
|
52
|
+
getType,
|
|
30
53
|
getTypeAnnotation,
|
|
31
|
-
getTypeDXN,
|
|
32
54
|
getTypeIdentifierAnnotation,
|
|
55
|
+
getTypeURI,
|
|
33
56
|
getTypename,
|
|
34
57
|
setSchema,
|
|
58
|
+
setType,
|
|
35
59
|
setTypename
|
|
36
|
-
} from "./chunk-
|
|
60
|
+
} from "./chunk-WZ32BF53.mjs";
|
|
37
61
|
import {
|
|
38
62
|
EntityKind,
|
|
39
63
|
KindId,
|
|
40
64
|
SchemaKindId,
|
|
41
65
|
SnapshotKindId,
|
|
66
|
+
StaticTypeSchemaSlot,
|
|
67
|
+
getStaticTypeSchema,
|
|
42
68
|
makeTypeJsonSchemaAnnotation
|
|
43
|
-
} from "./chunk-
|
|
44
|
-
|
|
45
|
-
// src/internal/index.ts
|
|
46
|
-
import { JsonPath, JsonProp, getValue, splitJsonPath } from "@dxos/effect";
|
|
69
|
+
} from "./chunk-O6BH7EPN.mjs";
|
|
47
70
|
|
|
48
71
|
// src/internal/common/types/base.ts
|
|
49
72
|
import * as Schema from "effect/Schema";
|
|
@@ -54,60 +77,6 @@ var RawObject = (schema) => {
|
|
|
54
77
|
]));
|
|
55
78
|
};
|
|
56
79
|
|
|
57
|
-
// src/internal/common/types/meta.ts
|
|
58
|
-
import * as Schema2 from "effect/Schema";
|
|
59
|
-
import { ForeignKey } from "@dxos/echo-protocol";
|
|
60
|
-
import { invariant } from "@dxos/invariant";
|
|
61
|
-
import { intersection } from "@dxos/util";
|
|
62
|
-
var __dxlog_file = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/common/types/meta.ts";
|
|
63
|
-
var ATTR_META = "@meta";
|
|
64
|
-
var MetaId = /* @__PURE__ */ Symbol.for("@dxos/echo/Meta");
|
|
65
|
-
var ObjectMetaSchema = Schema2.Struct({
|
|
66
|
-
keys: Schema2.Array(ForeignKey),
|
|
67
|
-
/**
|
|
68
|
-
* A set of tags.
|
|
69
|
-
* Tags are arbitrary application-defined strings.
|
|
70
|
-
* ECHO makes no assumptions about the tag structure.
|
|
71
|
-
*/
|
|
72
|
-
// TODO(dmaretskyi): Has to be optional for compatibility with old data.
|
|
73
|
-
// Defaulting to an empty array is possible but requires a bit more work.
|
|
74
|
-
// TODO(dmaretskyi): In automerge this should be a map of { [tag]: boolean } for uniqueness and conflict resolution.
|
|
75
|
-
tags: Schema2.optional(Schema2.Array(Schema2.String))
|
|
76
|
-
});
|
|
77
|
-
var getMeta = (obj) => {
|
|
78
|
-
const metadata = obj[MetaId];
|
|
79
|
-
invariant(metadata, "ObjectMeta not found.", {
|
|
80
|
-
F: __dxlog_file,
|
|
81
|
-
L: 54,
|
|
82
|
-
S: void 0,
|
|
83
|
-
A: [
|
|
84
|
-
"metadata",
|
|
85
|
-
"'ObjectMeta not found.'"
|
|
86
|
-
]
|
|
87
|
-
});
|
|
88
|
-
return metadata;
|
|
89
|
-
};
|
|
90
|
-
var foreignKey = (source, id) => ({
|
|
91
|
-
source,
|
|
92
|
-
id
|
|
93
|
-
});
|
|
94
|
-
var foreignKeyEquals = (a, b) => a.source === b.source && a.id === b.id;
|
|
95
|
-
var compareForeignKeys = (a, b) => intersection(getMeta(a).keys, getMeta(b).keys, foreignKeyEquals).length > 0;
|
|
96
|
-
|
|
97
|
-
// src/internal/common/types/model-symbols.ts
|
|
98
|
-
var ATTR_SELF_DXN = "@dxn";
|
|
99
|
-
var SelfDXNId = /* @__PURE__ */ Symbol.for("@dxos/echo/DXN");
|
|
100
|
-
var ATTR_DELETED = "@deleted";
|
|
101
|
-
var ObjectDeletedId = /* @__PURE__ */ Symbol.for("@dxos/echo/Deleted");
|
|
102
|
-
var ObjectVersionId = /* @__PURE__ */ Symbol.for("@dxos/echo/Version");
|
|
103
|
-
var ObjectDatabaseId = /* @__PURE__ */ Symbol.for("@dxos/echo/Database");
|
|
104
|
-
var ATTR_RELATION_SOURCE = "@relationSource";
|
|
105
|
-
var RelationSourceId = /* @__PURE__ */ Symbol.for("@dxos/echo/RelationSource");
|
|
106
|
-
var RelationSourceDXNId = /* @__PURE__ */ Symbol.for("@dxos/echo/RelationSourceDXN");
|
|
107
|
-
var ATTR_RELATION_TARGET = "@relationTarget";
|
|
108
|
-
var RelationTargetId = /* @__PURE__ */ Symbol.for("@dxos/echo/RelationTarget");
|
|
109
|
-
var RelationTargetDXNId = /* @__PURE__ */ Symbol.for("@dxos/echo/RelationTargetDXN");
|
|
110
|
-
|
|
111
80
|
// src/internal/common/types/version.ts
|
|
112
81
|
var VersionTypeId = "~@dxos/echo/VersionTypeId";
|
|
113
82
|
|
|
@@ -135,62 +104,57 @@ var sort = (...comparators) => {
|
|
|
135
104
|
};
|
|
136
105
|
};
|
|
137
106
|
|
|
138
|
-
// src/internal/
|
|
139
|
-
import {
|
|
140
|
-
var
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
]
|
|
152
|
-
});
|
|
153
|
-
return meta;
|
|
154
|
-
}
|
|
155
|
-
var getKeys = (entity, source) => {
|
|
156
|
-
assertArgument(entity, "entity", "Should be an entity.");
|
|
157
|
-
const meta = getMetaChecked(entity);
|
|
158
|
-
invariant2(meta != null, "Invalid entity.", {
|
|
159
|
-
F: __dxlog_file2,
|
|
160
|
-
L: 45,
|
|
161
|
-
S: void 0,
|
|
162
|
-
A: [
|
|
163
|
-
"meta != null",
|
|
164
|
-
"'Invalid entity.'"
|
|
165
|
-
]
|
|
166
|
-
});
|
|
167
|
-
return meta.keys.filter((key) => key.source === source);
|
|
168
|
-
};
|
|
169
|
-
var deleteKeys = (entity, source) => {
|
|
170
|
-
const meta = getMetaChecked(entity);
|
|
171
|
-
for (let i = 0; i < meta.keys.length; i++) {
|
|
172
|
-
if (meta.keys[i].source === source) {
|
|
173
|
-
meta.keys.splice(i, 1);
|
|
174
|
-
i--;
|
|
107
|
+
// src/internal/Ref/strong-deps.ts
|
|
108
|
+
import { EID } from "@dxos/keys";
|
|
109
|
+
var getStrongDependencyUris = (refs, owningSpaceId) => {
|
|
110
|
+
const res = [];
|
|
111
|
+
if (refs.type != null && EID.tryParse(refs.type) != null) {
|
|
112
|
+
res.push(qualifyToSpace(refs.type, owningSpaceId));
|
|
113
|
+
}
|
|
114
|
+
if (refs.kind === EntityKind.Relation) {
|
|
115
|
+
if (refs.source != null) {
|
|
116
|
+
res.push(qualifyToSpace(refs.source, owningSpaceId));
|
|
117
|
+
}
|
|
118
|
+
if (refs.target != null) {
|
|
119
|
+
res.push(qualifyToSpace(refs.target, owningSpaceId));
|
|
175
120
|
}
|
|
176
121
|
}
|
|
122
|
+
if (refs.parent != null) {
|
|
123
|
+
res.push(qualifyToSpace(refs.parent, owningSpaceId));
|
|
124
|
+
}
|
|
125
|
+
return res;
|
|
177
126
|
};
|
|
178
|
-
var
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
meta.tags.push(tag);
|
|
182
|
-
};
|
|
183
|
-
var removeTag = (entity, tag) => {
|
|
184
|
-
const meta = getMetaChecked(entity);
|
|
185
|
-
if (!meta.tags) {
|
|
186
|
-
return;
|
|
127
|
+
var qualifyToSpace = (uri, owningSpaceId) => {
|
|
128
|
+
if (owningSpaceId == null) {
|
|
129
|
+
return uri;
|
|
187
130
|
}
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
i--;
|
|
192
|
-
}
|
|
131
|
+
const eid = EID.tryParse(uri);
|
|
132
|
+
if (eid == null || !EID.isLocal(eid)) {
|
|
133
|
+
return uri;
|
|
193
134
|
}
|
|
135
|
+
const entityId = EID.getEntityId(eid);
|
|
136
|
+
return entityId != null ? EID.make({
|
|
137
|
+
spaceId: owningSpaceId,
|
|
138
|
+
entityId
|
|
139
|
+
}) : uri;
|
|
140
|
+
};
|
|
141
|
+
var getStrongDependencies = (entity) => {
|
|
142
|
+
if (entity == null || typeof entity !== "object") {
|
|
143
|
+
return [];
|
|
144
|
+
}
|
|
145
|
+
const props = entity;
|
|
146
|
+
const kind = props[RelationSourceDXNId] != null || props[RelationTargetDXNId] != null ? EntityKind.Relation : EntityKind.Object;
|
|
147
|
+
const parent = props[ParentId];
|
|
148
|
+
const selfUri = getObjectEchoUri(entity);
|
|
149
|
+
const owningSpaceId = selfUri != null ? EID.getSpaceId(selfUri) : void 0;
|
|
150
|
+
return getStrongDependencyUris({
|
|
151
|
+
kind,
|
|
152
|
+
type: typeof props[TypeId] === "string" ? props[TypeId] : void 0,
|
|
153
|
+
source: props[RelationSourceDXNId],
|
|
154
|
+
target: props[RelationTargetDXNId],
|
|
155
|
+
// A parent is held as the resolved entity; derive its absolute URI for the dependency edge.
|
|
156
|
+
parent: parent != null ? getObjectEchoUri(parent) : void 0
|
|
157
|
+
}, owningSpaceId);
|
|
194
158
|
};
|
|
195
159
|
|
|
196
160
|
// src/internal/common/proxy/symbols.ts
|
|
@@ -282,7 +246,7 @@ var defineHiddenProperty = (object, key, value2) => {
|
|
|
282
246
|
// src/internal/common/proxy/errors.ts
|
|
283
247
|
var MutationOutsideChangeContextError = class extends Error {
|
|
284
248
|
constructor(operation, suggestion) {
|
|
285
|
-
super(`Cannot ${operation} outside of Obj.
|
|
249
|
+
super(`Cannot ${operation} outside of Obj.update(). Use Obj.update(obj, (mutableObj) => { ${suggestion} }) instead.`);
|
|
286
250
|
this.name = "MutationOutsideChangeContextError";
|
|
287
251
|
}
|
|
288
252
|
};
|
|
@@ -297,10 +261,10 @@ var createArrayMethodError = (method) => {
|
|
|
297
261
|
};
|
|
298
262
|
|
|
299
263
|
// src/internal/common/proxy/json-serializer.ts
|
|
300
|
-
import { invariant
|
|
301
|
-
import {
|
|
302
|
-
import { deepMapValues } from "@dxos/util";
|
|
303
|
-
var
|
|
264
|
+
import { invariant } from "@dxos/invariant";
|
|
265
|
+
import { EID as EID2 } from "@dxos/keys";
|
|
266
|
+
import { deepMapValues, encodeUint8ArrayToJson } from "@dxos/util";
|
|
267
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/common/proxy/json-serializer.ts";
|
|
304
268
|
var attachTypedJsonSerializer = (obj) => {
|
|
305
269
|
const descriptor = Object.getOwnPropertyDescriptor(obj, "toJSON");
|
|
306
270
|
if (descriptor) {
|
|
@@ -320,39 +284,23 @@ var typedJsonSerializer = function() {
|
|
|
320
284
|
id
|
|
321
285
|
};
|
|
322
286
|
if (this[TypeId]) {
|
|
323
|
-
result[ATTR_TYPE] = this[TypeId]
|
|
287
|
+
result[ATTR_TYPE] = this[TypeId];
|
|
324
288
|
}
|
|
325
289
|
if (this[MetaId]) {
|
|
326
290
|
result[ATTR_META] = serializeMeta(this[MetaId]);
|
|
327
291
|
}
|
|
328
|
-
if (this[
|
|
329
|
-
result[
|
|
292
|
+
if (this[SelfURIId]) {
|
|
293
|
+
result[ATTR_SELF_URI] = this[SelfURIId];
|
|
330
294
|
}
|
|
331
295
|
if (this[RelationSourceDXNId]) {
|
|
332
296
|
const sourceDXN = this[RelationSourceDXNId];
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
L: 64,
|
|
336
|
-
S: this,
|
|
337
|
-
A: [
|
|
338
|
-
"sourceDXN instanceof DXN",
|
|
339
|
-
""
|
|
340
|
-
]
|
|
341
|
-
});
|
|
342
|
-
result[ATTR_RELATION_SOURCE] = sourceDXN.toString();
|
|
297
|
+
invariant(EID2.isEID(sourceDXN), void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 44, S: this, A: ["EID.isEID(sourceDXN)", ""] });
|
|
298
|
+
result[ATTR_RELATION_SOURCE] = sourceDXN;
|
|
343
299
|
}
|
|
344
300
|
if (this[RelationTargetDXNId]) {
|
|
345
301
|
const targetDXN = this[RelationTargetDXNId];
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
L: 69,
|
|
349
|
-
S: this,
|
|
350
|
-
A: [
|
|
351
|
-
"targetDXN instanceof DXN",
|
|
352
|
-
""
|
|
353
|
-
]
|
|
354
|
-
});
|
|
355
|
-
result[ATTR_RELATION_TARGET] = targetDXN.toString();
|
|
302
|
+
invariant(EID2.isEID(targetDXN), void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 49, S: this, A: ["EID.isEID(targetDXN)", ""] });
|
|
303
|
+
result[ATTR_RELATION_TARGET] = targetDXN;
|
|
356
304
|
}
|
|
357
305
|
Object.assign(result, serializeData(rest));
|
|
358
306
|
return result;
|
|
@@ -362,19 +310,32 @@ var serializeData = (data) => {
|
|
|
362
310
|
if (Ref.isRef(value2)) {
|
|
363
311
|
return value2.noInline().encode();
|
|
364
312
|
}
|
|
313
|
+
if (value2 instanceof Uint8Array) {
|
|
314
|
+
return encodeUint8ArrayToJson(value2);
|
|
315
|
+
}
|
|
365
316
|
return recurse(value2);
|
|
366
317
|
});
|
|
367
318
|
};
|
|
368
319
|
var serializeMeta = (meta) => {
|
|
369
|
-
|
|
320
|
+
const { tags, annotations: annotations5, ...rest } = meta;
|
|
321
|
+
const compact = {
|
|
322
|
+
...rest,
|
|
323
|
+
...tags != null && tags.length > 0 ? {
|
|
324
|
+
tags
|
|
325
|
+
} : {},
|
|
326
|
+
...annotations5 != null && Object.keys(annotations5).length > 0 ? {
|
|
327
|
+
annotations: annotations5
|
|
328
|
+
} : {}
|
|
329
|
+
};
|
|
330
|
+
return serializeData(compact);
|
|
370
331
|
};
|
|
371
332
|
|
|
372
333
|
// src/internal/common/proxy/make-object.ts
|
|
373
|
-
import {
|
|
334
|
+
import { EntityId } from "@dxos/keys";
|
|
374
335
|
|
|
375
336
|
// src/internal/common/proxy/proxy-utils.ts
|
|
376
|
-
import { invariant as
|
|
377
|
-
var
|
|
337
|
+
import { invariant as invariant2 } from "@dxos/invariant";
|
|
338
|
+
var __dxlog_file2 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/common/proxy/proxy-utils.ts";
|
|
378
339
|
var symbolIsProxy = /* @__PURE__ */ Symbol.for("@dxos/schema/Proxy");
|
|
379
340
|
var isProxy = (value2) => !!value2?.[symbolIsProxy];
|
|
380
341
|
var isValidProxyTarget = (value2) => {
|
|
@@ -388,15 +349,7 @@ var isValidProxyTarget = (value2) => {
|
|
|
388
349
|
};
|
|
389
350
|
var getProxySlot = (proxy) => {
|
|
390
351
|
const value2 = proxy[symbolIsProxy];
|
|
391
|
-
|
|
392
|
-
F: __dxlog_file4,
|
|
393
|
-
L: 32,
|
|
394
|
-
S: void 0,
|
|
395
|
-
A: [
|
|
396
|
-
"value instanceof ProxyHandlerSlot",
|
|
397
|
-
""
|
|
398
|
-
]
|
|
399
|
-
});
|
|
352
|
+
invariant2(value2 instanceof ProxyHandlerSlot, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 22, S: void 0, A: ["value instanceof ProxyHandlerSlot", ""] });
|
|
400
353
|
return value2;
|
|
401
354
|
};
|
|
402
355
|
var getProxyTarget = (proxy) => {
|
|
@@ -430,15 +383,7 @@ var ProxyHandlerSlot = class {
|
|
|
430
383
|
this._handler = _handler;
|
|
431
384
|
}
|
|
432
385
|
get handler() {
|
|
433
|
-
|
|
434
|
-
F: __dxlog_file4,
|
|
435
|
-
L: 91,
|
|
436
|
-
S: this,
|
|
437
|
-
A: [
|
|
438
|
-
"this._handler",
|
|
439
|
-
""
|
|
440
|
-
]
|
|
441
|
-
});
|
|
386
|
+
invariant2(this._handler, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 71, S: this, A: ["this._handler", ""] });
|
|
442
387
|
return this._handler;
|
|
443
388
|
}
|
|
444
389
|
// TODO(burdon): Requires comment.
|
|
@@ -491,15 +436,15 @@ var ProxyHandlerSlot = class {
|
|
|
491
436
|
};
|
|
492
437
|
|
|
493
438
|
// src/internal/common/proxy/typed-handler.ts
|
|
494
|
-
import * as
|
|
439
|
+
import * as Schema3 from "effect/Schema";
|
|
495
440
|
import * as SchemaAST3 from "effect/SchemaAST";
|
|
496
441
|
import { Event } from "@dxos/async";
|
|
497
442
|
import { inspectCustom } from "@dxos/debug";
|
|
498
|
-
import { invariant as
|
|
443
|
+
import { assertArgument, invariant as invariant5 } from "@dxos/invariant";
|
|
499
444
|
|
|
500
445
|
// src/internal/common/proxy/ownership.ts
|
|
501
|
-
import { invariant as
|
|
502
|
-
var
|
|
446
|
+
import { invariant as invariant3 } from "@dxos/invariant";
|
|
447
|
+
var __dxlog_file3 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/common/proxy/ownership.ts";
|
|
503
448
|
var EchoOwner = /* @__PURE__ */ Symbol.for("@dxos/echo/Owner");
|
|
504
449
|
var getRawTarget = (value2) => {
|
|
505
450
|
return isProxy(value2) ? getProxyTarget(value2) : value2;
|
|
@@ -528,15 +473,7 @@ var setOwnerRecursive = (value2, owner, options = {}) => {
|
|
|
528
473
|
}
|
|
529
474
|
if (!isRootEchoObject) {
|
|
530
475
|
const ownershipAllowed = existingOwner == null || existingOwner === owner || existingOwner === newAllowedPreviousOwner;
|
|
531
|
-
|
|
532
|
-
F: __dxlog_file5,
|
|
533
|
-
L: 101,
|
|
534
|
-
S: void 0,
|
|
535
|
-
A: [
|
|
536
|
-
"ownershipAllowed",
|
|
537
|
-
"'Cannot reassign ownership of a nested record to a different ECHO object. Use deep copy first.'"
|
|
538
|
-
]
|
|
539
|
-
});
|
|
476
|
+
invariant3(ownershipAllowed, "Cannot reassign ownership of a nested record to a different ECHO object. Use deep copy first.", { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 76, S: void 0, A: ["ownershipAllowed", "'Cannot reassign ownership of a nested record to a different ECHO object. Use deep copy first.'"] });
|
|
540
477
|
}
|
|
541
478
|
defineHiddenProperty(actualValue, EchoOwner, owner);
|
|
542
479
|
const recursiveOptions = {
|
|
@@ -603,15 +540,7 @@ var hasForeignOwner = (value2, target) => traverseObjectGraph(value2, (v) => {
|
|
|
603
540
|
});
|
|
604
541
|
var MAX_OWNER_DEPTH = 100;
|
|
605
542
|
var getEchoRoot = (target, depth = 0) => {
|
|
606
|
-
|
|
607
|
-
F: __dxlog_file5,
|
|
608
|
-
L: 220,
|
|
609
|
-
S: void 0,
|
|
610
|
-
A: [
|
|
611
|
-
"depth < MAX_OWNER_DEPTH",
|
|
612
|
-
"'Owner chain too deep - possible circular ownership'"
|
|
613
|
-
]
|
|
614
|
-
});
|
|
543
|
+
invariant3(depth < MAX_OWNER_DEPTH, "Owner chain too deep - possible circular ownership", { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 169, S: void 0, A: ["depth < MAX_OWNER_DEPTH", "'Owner chain too deep - possible circular ownership'"] });
|
|
615
544
|
if (KindId in target) {
|
|
616
545
|
return target;
|
|
617
546
|
}
|
|
@@ -675,18 +604,18 @@ var ReactiveArray = class extends Array {
|
|
|
675
604
|
};
|
|
676
605
|
|
|
677
606
|
// src/internal/common/proxy/schema-validator.ts
|
|
678
|
-
import * as
|
|
607
|
+
import * as Schema2 from "effect/Schema";
|
|
679
608
|
import * as SchemaAST2 from "effect/SchemaAST";
|
|
680
|
-
import { invariant as
|
|
609
|
+
import { invariant as invariant4 } from "@dxos/invariant";
|
|
681
610
|
import { log } from "@dxos/log";
|
|
682
|
-
var
|
|
611
|
+
var __dxlog_file4 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/common/proxy/schema-validator.ts";
|
|
683
612
|
var SchemaValidator = class {
|
|
684
613
|
/**
|
|
685
614
|
* Recursively check that schema specifies constructions we can handle.
|
|
686
615
|
* Validates there are no ambiguous discriminated union types.
|
|
687
616
|
*/
|
|
688
617
|
static validateSchema(schema) {
|
|
689
|
-
const visitAll = (nodes) => nodes.forEach((node) => this.validateSchema(
|
|
618
|
+
const visitAll = (nodes) => nodes.forEach((node) => this.validateSchema(Schema2.make(node)));
|
|
690
619
|
if (SchemaAST2.isUnion(schema.ast)) {
|
|
691
620
|
const typeAstList = schema.ast.types.filter((type) => SchemaAST2.isTypeLiteral(type));
|
|
692
621
|
if (typeAstList.length > 1) {
|
|
@@ -733,70 +662,41 @@ var SchemaValidator = class {
|
|
|
733
662
|
log.warn("unknown property", {
|
|
734
663
|
path: propertyPath,
|
|
735
664
|
property: propertyName
|
|
736
|
-
}, {
|
|
737
|
-
F: __dxlog_file6,
|
|
738
|
-
L: 71,
|
|
739
|
-
S: this,
|
|
740
|
-
C: (f, a) => f(...a)
|
|
741
|
-
});
|
|
665
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 60, S: this });
|
|
742
666
|
continue;
|
|
743
667
|
}
|
|
744
|
-
schema =
|
|
668
|
+
schema = Schema2.make(propertyType).annotations(propertyType.annotations);
|
|
745
669
|
}
|
|
746
670
|
}
|
|
747
671
|
return schema;
|
|
748
672
|
}
|
|
749
673
|
static getTargetPropertySchema(target, prop) {
|
|
750
674
|
const schema = target[SchemaId];
|
|
751
|
-
|
|
752
|
-
F: __dxlog_file6,
|
|
753
|
-
L: 84,
|
|
754
|
-
S: this,
|
|
755
|
-
A: [
|
|
756
|
-
"schema",
|
|
757
|
-
"'target has no schema'"
|
|
758
|
-
]
|
|
759
|
-
});
|
|
675
|
+
invariant4(schema, "target has no schema", { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 73, S: this, A: ["schema", "'target has no schema'"] });
|
|
760
676
|
const arrayAst = unwrapArray(schema.ast);
|
|
761
677
|
if (arrayAst != null) {
|
|
762
678
|
return getArrayElementSchema(arrayAst, prop);
|
|
763
679
|
}
|
|
764
680
|
const propertyType = getPropertyType(schema.ast, prop.toString(), (prop2) => target[prop2]);
|
|
765
681
|
if (propertyType == null) {
|
|
766
|
-
return
|
|
767
|
-
}
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
L: 95,
|
|
771
|
-
S: this,
|
|
772
|
-
A: [
|
|
773
|
-
"propertyType",
|
|
774
|
-
"`invalid property: ${prop.toString()}`"
|
|
775
|
-
]
|
|
776
|
-
});
|
|
777
|
-
return Schema3.make(propertyType);
|
|
682
|
+
return Schema2.Any;
|
|
683
|
+
}
|
|
684
|
+
invariant4(propertyType, `invalid property: ${prop.toString()}`, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 82, S: this, A: ["propertyType", "`invalid property: ${prop.toString()}`"] });
|
|
685
|
+
return Schema2.make(propertyType);
|
|
778
686
|
}
|
|
779
687
|
};
|
|
780
688
|
var getArrayElementSchema = (tupleAst, property) => {
|
|
781
689
|
const elementIndex = typeof property === "string" ? parseInt(property, 10) : Number.NaN;
|
|
782
690
|
if (Number.isNaN(elementIndex)) {
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
L: 111,
|
|
786
|
-
S: void 0,
|
|
787
|
-
A: [
|
|
788
|
-
"property === 'length'",
|
|
789
|
-
"`invalid array property: ${String(property)}`"
|
|
790
|
-
]
|
|
791
|
-
});
|
|
792
|
-
return Schema3.Number;
|
|
691
|
+
invariant4(property === "length", `invalid array property: ${String(property)}`, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 93, S: void 0, A: ["property === 'length'", "`invalid array property: ${String(property)}`"] });
|
|
692
|
+
return Schema2.Number;
|
|
793
693
|
}
|
|
794
694
|
if (elementIndex < tupleAst.elements.length) {
|
|
795
695
|
const elementType = tupleAst.elements[elementIndex].type;
|
|
796
|
-
return
|
|
696
|
+
return Schema2.make(elementType).annotations(elementType.annotations);
|
|
797
697
|
}
|
|
798
698
|
const restType = tupleAst.rest;
|
|
799
|
-
return
|
|
699
|
+
return Schema2.make(restType[0].type).annotations(restType[0].annotations);
|
|
800
700
|
};
|
|
801
701
|
var flattenUnion = (typeAst) => SchemaAST2.isUnion(typeAst) ? typeAst.types.flatMap(flattenUnion) : [
|
|
802
702
|
typeAst
|
|
@@ -813,15 +713,7 @@ var getProperties = (typeAst, getTargetPropertyFn) => {
|
|
|
813
713
|
const typeDiscriminators = getTypeDiscriminators(typeAstList);
|
|
814
714
|
const targetPropertyValue = getTargetPropertyFn(String(typeDiscriminators[0].name));
|
|
815
715
|
const typeIndex = typeDiscriminators.findIndex((p) => targetPropertyValue === p.type.literal);
|
|
816
|
-
|
|
817
|
-
F: __dxlog_file6,
|
|
818
|
-
L: 142,
|
|
819
|
-
S: void 0,
|
|
820
|
-
A: [
|
|
821
|
-
"typeIndex !== -1",
|
|
822
|
-
"'discriminator field not set on target'"
|
|
823
|
-
]
|
|
824
|
-
});
|
|
716
|
+
invariant4(typeIndex !== -1, "discriminator field not set on target", { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 118, S: void 0, A: ["typeIndex !== -1", "'discriminator field not set on target'"] });
|
|
825
717
|
return SchemaAST2.getPropertySignatures(typeAstList[typeIndex]);
|
|
826
718
|
};
|
|
827
719
|
var getPropertyType = (ast, propertyName, getTargetPropertyFn) => {
|
|
@@ -851,15 +743,7 @@ var getTypeDiscriminators = (typeAstList) => {
|
|
|
851
743
|
const isValidDiscriminator = discriminatorPropCandidates.every((p) => p.name === propertyName && !p.isOptional);
|
|
852
744
|
const everyTypeHasDiscriminator = discriminatorPropCandidates.length === typeAstList.length;
|
|
853
745
|
const isDiscriminatedUnion = isValidDiscriminator && everyTypeHasDiscriminator;
|
|
854
|
-
|
|
855
|
-
F: __dxlog_file6,
|
|
856
|
-
L: 193,
|
|
857
|
-
S: void 0,
|
|
858
|
-
A: [
|
|
859
|
-
"isDiscriminatedUnion",
|
|
860
|
-
"'type ambiguity: every type in a union must have a single unique-literal field'"
|
|
861
|
-
]
|
|
862
|
-
});
|
|
746
|
+
invariant4(isDiscriminatedUnion, "type ambiguity: every type in a union must have a single unique-literal field", { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 148, S: void 0, A: ["isDiscriminatedUnion", "'type ambiguity: every type in a union must have a single unique-literal field'"] });
|
|
863
747
|
return discriminatorPropCandidates;
|
|
864
748
|
};
|
|
865
749
|
var unwrapAst = (rootAst, predicate) => {
|
|
@@ -885,15 +769,7 @@ var unwrapAst = (rootAst, predicate) => {
|
|
|
885
769
|
};
|
|
886
770
|
var unwrapArray = (ast) => unwrapAst(ast, SchemaAST2.isTupleType);
|
|
887
771
|
var checkIdNotPresentOnSchema = (schema) => {
|
|
888
|
-
|
|
889
|
-
F: __dxlog_file6,
|
|
890
|
-
L: 236,
|
|
891
|
-
S: void 0,
|
|
892
|
-
A: [
|
|
893
|
-
"SchemaAST.isTypeLiteral(schema.ast)",
|
|
894
|
-
""
|
|
895
|
-
]
|
|
896
|
-
});
|
|
772
|
+
invariant4(SchemaAST2.isTypeLiteral(schema.ast), void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 184, S: void 0, A: ["SchemaAST.isTypeLiteral(schema.ast)", ""] });
|
|
897
773
|
const idProperty = SchemaAST2.getPropertySignatures(schema.ast).find((prop) => prop.name === "id");
|
|
898
774
|
if (idProperty != null) {
|
|
899
775
|
throw new Error('"id" property name is reserved');
|
|
@@ -901,7 +777,7 @@ var checkIdNotPresentOnSchema = (schema) => {
|
|
|
901
777
|
};
|
|
902
778
|
|
|
903
779
|
// src/internal/common/proxy/typed-handler.ts
|
|
904
|
-
var
|
|
780
|
+
var __dxlog_file5 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/common/proxy/typed-handler.ts";
|
|
905
781
|
var deepCopy = (value2, visited = /* @__PURE__ */ new Map()) => {
|
|
906
782
|
if (value2 == null || typeof value2 !== "object") {
|
|
907
783
|
return value2;
|
|
@@ -954,24 +830,8 @@ var TypedReactiveHandler = class _TypedReactiveHandler {
|
|
|
954
830
|
constructor() {
|
|
955
831
|
}
|
|
956
832
|
init(target) {
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
L: 145,
|
|
960
|
-
S: this,
|
|
961
|
-
A: [
|
|
962
|
-
"typeof target === 'object' && target !== null",
|
|
963
|
-
""
|
|
964
|
-
]
|
|
965
|
-
});
|
|
966
|
-
invariant7(SchemaId in target, "Schema is not defined for the target", {
|
|
967
|
-
F: __dxlog_file7,
|
|
968
|
-
L: 146,
|
|
969
|
-
S: this,
|
|
970
|
-
A: [
|
|
971
|
-
"SchemaId in target",
|
|
972
|
-
"'Schema is not defined for the target'"
|
|
973
|
-
]
|
|
974
|
-
});
|
|
833
|
+
assertArgument(typeof target === "object" && target !== null, "target");
|
|
834
|
+
invariant5(SchemaId in target, "Schema is not defined for the target", { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 101, S: this, A: ["SchemaId in target", "'Schema is not defined for the target'"] });
|
|
975
835
|
const hasOwner = !!getOwner(target);
|
|
976
836
|
if (!(EventId in target) && !hasOwner) {
|
|
977
837
|
defineHiddenProperty(target, EventId, new Event());
|
|
@@ -1013,6 +873,22 @@ var TypedReactiveHandler = class _TypedReactiveHandler {
|
|
|
1013
873
|
}
|
|
1014
874
|
return (callback) => executeChange(target, target, receiver, callback);
|
|
1015
875
|
}
|
|
876
|
+
case TypeEntityId: {
|
|
877
|
+
return Reflect.get(target, prop, receiver);
|
|
878
|
+
}
|
|
879
|
+
case StaticTypeSchemaSlot: {
|
|
880
|
+
const existing = Reflect.get(target, prop, receiver);
|
|
881
|
+
if (existing !== void 0) {
|
|
882
|
+
return existing;
|
|
883
|
+
}
|
|
884
|
+
const jsonSchema = target.jsonSchema;
|
|
885
|
+
if (jsonSchema == null) {
|
|
886
|
+
return void 0;
|
|
887
|
+
}
|
|
888
|
+
const rebuilt = toEffectSchema(jsonSchema);
|
|
889
|
+
defineHiddenProperty(target, StaticTypeSchemaSlot, rebuilt);
|
|
890
|
+
return rebuilt;
|
|
891
|
+
}
|
|
1016
892
|
}
|
|
1017
893
|
if (Object.getOwnPropertyDescriptor(target, prop)?.get) {
|
|
1018
894
|
return Reflect.get(target, prop, receiver);
|
|
@@ -1028,7 +904,7 @@ var TypedReactiveHandler = class _TypedReactiveHandler {
|
|
|
1028
904
|
const isInitialized = ChangeId in echoRoot || EventId in echoRoot;
|
|
1029
905
|
const isSymbolProp = typeof prop === "symbol";
|
|
1030
906
|
if (isInitialized && !isSymbolProp && !isInChangeContext(echoRoot)) {
|
|
1031
|
-
throw new Error(`Cannot modify object property "${String(prop)}" outside of Obj.
|
|
907
|
+
throw new Error(`Cannot modify object property "${String(prop)}" outside of Obj.update(). Use Obj.update(obj, (mutableObj) => { mutableObj.property = value; }) instead.`);
|
|
1032
908
|
}
|
|
1033
909
|
let result = false;
|
|
1034
910
|
this._inSet = true;
|
|
@@ -1036,6 +912,9 @@ var TypedReactiveHandler = class _TypedReactiveHandler {
|
|
|
1036
912
|
batchEvents(() => {
|
|
1037
913
|
const { echoRoot: _, preparedValue } = this._prepareValueForAssignment(target, prop, value2);
|
|
1038
914
|
result = Reflect.set(target, prop, preparedValue, receiver);
|
|
915
|
+
if (prop === "jsonSchema") {
|
|
916
|
+
Reflect.deleteProperty(target, StaticTypeSchemaSlot);
|
|
917
|
+
}
|
|
1039
918
|
if (isInitialized) {
|
|
1040
919
|
queueNotification(echoRoot);
|
|
1041
920
|
notifyOwnerChain(target);
|
|
@@ -1067,7 +946,7 @@ var TypedReactiveHandler = class _TypedReactiveHandler {
|
|
|
1067
946
|
const isInitialized = ChangeId in echoRoot || EventId in echoRoot;
|
|
1068
947
|
const isSymbolProp = typeof property === "symbol";
|
|
1069
948
|
if (isInitialized && !isSymbolProp && !isInChangeContext(echoRoot)) {
|
|
1070
|
-
throw new Error(`Cannot modify object property "${String(property)}" outside of Obj.
|
|
949
|
+
throw new Error(`Cannot modify object property "${String(property)}" outside of Obj.update(). Use Obj.update(obj, (mutableObj) => { mutableObj.property = value; }) instead.`);
|
|
1071
950
|
}
|
|
1072
951
|
const { echoRoot: _, preparedValue } = this._prepareValueForAssignment(target, property, attributes.value);
|
|
1073
952
|
const result = Reflect.defineProperty(target, property, {
|
|
@@ -1127,7 +1006,7 @@ var TypedReactiveHandler = class _TypedReactiveHandler {
|
|
|
1127
1006
|
return value2;
|
|
1128
1007
|
}
|
|
1129
1008
|
const schema = SchemaValidator.getTargetPropertySchema(target, prop);
|
|
1130
|
-
const _ =
|
|
1009
|
+
const _ = Schema3.asserts(schema)(value2);
|
|
1131
1010
|
if (isValidProxyTarget(value2)) {
|
|
1132
1011
|
setSchemaProperties(value2, schema);
|
|
1133
1012
|
}
|
|
@@ -1148,12 +1027,21 @@ var toJSON = (target) => {
|
|
|
1148
1027
|
...target
|
|
1149
1028
|
};
|
|
1150
1029
|
};
|
|
1151
|
-
var setSchemaProperties = (obj, schema) => {
|
|
1152
|
-
const schemaType =
|
|
1030
|
+
var setSchemaProperties = (obj, schema, typeSource) => {
|
|
1031
|
+
const schemaType = getSchemaURI(schema);
|
|
1153
1032
|
if (schemaType != null) {
|
|
1154
1033
|
defineHiddenProperty(obj, TypeId, schemaType);
|
|
1155
1034
|
}
|
|
1156
|
-
|
|
1035
|
+
if (typeSource != null) {
|
|
1036
|
+
defineHiddenProperty(obj, TypeEntityId, typeSource);
|
|
1037
|
+
Object.defineProperty(obj, SchemaId, {
|
|
1038
|
+
get: () => typeSource[StaticTypeSchemaSlot] ?? schema,
|
|
1039
|
+
enumerable: false,
|
|
1040
|
+
configurable: true
|
|
1041
|
+
});
|
|
1042
|
+
} else {
|
|
1043
|
+
defineHiddenProperty(obj, SchemaId, schema);
|
|
1044
|
+
}
|
|
1157
1045
|
for (const key in obj) {
|
|
1158
1046
|
if (isValidProxyTarget(obj[key])) {
|
|
1159
1047
|
const elementSchema = SchemaValidator.getTargetPropertySchema(obj, key);
|
|
@@ -1163,14 +1051,14 @@ var setSchemaProperties = (obj, schema) => {
|
|
|
1163
1051
|
}
|
|
1164
1052
|
}
|
|
1165
1053
|
};
|
|
1166
|
-
var prepareTypedTarget = (target, schema) => {
|
|
1054
|
+
var prepareTypedTarget = (target, schema, typeSource) => {
|
|
1167
1055
|
if (!SchemaAST3.isTypeLiteral(schema.ast)) {
|
|
1168
1056
|
throw new Error("schema has to describe an object type");
|
|
1169
1057
|
}
|
|
1170
1058
|
SchemaValidator.validateSchema(schema);
|
|
1171
|
-
const _ =
|
|
1059
|
+
const _ = Schema3.asserts(schema)(target);
|
|
1172
1060
|
makeArraysReactive(target);
|
|
1173
|
-
setSchemaProperties(target, schema);
|
|
1061
|
+
setSchemaProperties(target, schema, typeSource);
|
|
1174
1062
|
};
|
|
1175
1063
|
var makeArraysReactive = (target) => {
|
|
1176
1064
|
for (const key in target) {
|
|
@@ -1187,10 +1075,10 @@ var makeArraysReactive = (target) => {
|
|
|
1187
1075
|
};
|
|
1188
1076
|
|
|
1189
1077
|
// src/internal/common/proxy/make-object.ts
|
|
1190
|
-
var makeObject = (schema, obj, meta) => {
|
|
1191
|
-
return createReactiveObject(Object.assign({}, obj), meta, schema);
|
|
1078
|
+
var makeObject = (schema, obj, meta, typeSource) => {
|
|
1079
|
+
return createReactiveObject(Object.assign({}, obj), meta, schema, typeSource);
|
|
1192
1080
|
};
|
|
1193
|
-
var createReactiveObject = (obj, meta, schema) => {
|
|
1081
|
+
var createReactiveObject = (obj, meta, schema, typeSource) => {
|
|
1194
1082
|
if (!isValidProxyTarget(obj)) {
|
|
1195
1083
|
throw new Error("Value cannot be made into a reactive object.");
|
|
1196
1084
|
}
|
|
@@ -1210,7 +1098,7 @@ var createReactiveObject = (obj, meta, schema) => {
|
|
|
1210
1098
|
if (parent !== void 0) {
|
|
1211
1099
|
defineHiddenProperty(obj, ParentId, parent);
|
|
1212
1100
|
}
|
|
1213
|
-
prepareTypedTarget(obj, schema);
|
|
1101
|
+
prepareTypedTarget(obj, schema, typeSource);
|
|
1214
1102
|
attachTypedJsonSerializer(obj);
|
|
1215
1103
|
const proxy = createProxy(obj, TypedReactiveHandler.instance);
|
|
1216
1104
|
const metaProxy = obj[MetaId];
|
|
@@ -1224,22 +1112,30 @@ var createReactiveObject = (obj, meta, schema) => {
|
|
|
1224
1112
|
};
|
|
1225
1113
|
var setIdOnTarget = (target) => {
|
|
1226
1114
|
if ("id" in target && target.id !== void 0 && target.id !== null) {
|
|
1227
|
-
if (!
|
|
1115
|
+
if (!EntityId.isValid(target.id)) {
|
|
1228
1116
|
throw new Error("Invalid object id format.");
|
|
1229
1117
|
}
|
|
1230
1118
|
} else {
|
|
1231
|
-
target.id =
|
|
1119
|
+
target.id = EntityId.random();
|
|
1232
1120
|
}
|
|
1233
1121
|
};
|
|
1234
|
-
var initMeta = (obj, meta
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1122
|
+
var initMeta = (obj, meta) => {
|
|
1123
|
+
const fullMeta = {
|
|
1124
|
+
...meta,
|
|
1125
|
+
keys: meta?.keys ?? [],
|
|
1126
|
+
tags: meta?.tags ?? [],
|
|
1127
|
+
annotations: meta?.annotations ?? {}
|
|
1128
|
+
};
|
|
1129
|
+
prepareTypedTarget(fullMeta, EntityMetaSchema);
|
|
1130
|
+
defineHiddenProperty(obj, MetaId, createProxy(fullMeta, TypedReactiveHandler.instance));
|
|
1239
1131
|
};
|
|
1240
1132
|
|
|
1241
1133
|
// src/internal/common/proxy/reactive.ts
|
|
1242
1134
|
var subscribe = (obj, callback) => {
|
|
1135
|
+
if (!isProxy(obj)) {
|
|
1136
|
+
return () => {
|
|
1137
|
+
};
|
|
1138
|
+
}
|
|
1243
1139
|
const target = getProxyTarget(obj);
|
|
1244
1140
|
if (target && EventId in target) {
|
|
1245
1141
|
return target[EventId].on(callback);
|
|
@@ -1256,208 +1152,177 @@ var change = (obj, callback) => {
|
|
|
1256
1152
|
}
|
|
1257
1153
|
};
|
|
1258
1154
|
|
|
1259
|
-
// src/internal/Entity/
|
|
1260
|
-
import
|
|
1261
|
-
import
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
L: 94,
|
|
1272
|
-
S: this,
|
|
1273
|
-
A: [
|
|
1274
|
-
"typeof obj === 'object' && obj !== null",
|
|
1275
|
-
"'Invalid object model: not an object'"
|
|
1276
|
-
]
|
|
1155
|
+
// src/internal/Entity/entity.ts
|
|
1156
|
+
import * as Schema4 from "effect/Schema";
|
|
1157
|
+
import * as SchemaAST4 from "effect/SchemaAST";
|
|
1158
|
+
import { DXN, EntityId as EntityId2 } from "@dxos/keys";
|
|
1159
|
+
var TypeMetaSchemaDXN = DXN.make("org.dxos.type.schema", "0.1.0");
|
|
1160
|
+
var persistentEntitySchema = (() => {
|
|
1161
|
+
const typename = DXN.getName(TypeMetaSchemaDXN);
|
|
1162
|
+
const version2 = DXN.getVersion(TypeMetaSchemaDXN);
|
|
1163
|
+
const struct = Schema4.Struct({
|
|
1164
|
+
name: Schema4.optional(Schema4.String),
|
|
1165
|
+
jsonSchema: JsonSchemaType.pipe(Schema4.optional),
|
|
1166
|
+
id: EntityId2
|
|
1277
1167
|
});
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1168
|
+
const ast = SchemaAST4.annotations(struct.ast, {
|
|
1169
|
+
[TypeAnnotationId]: {
|
|
1170
|
+
kind: EntityKind.Type,
|
|
1171
|
+
typename,
|
|
1172
|
+
version: version2
|
|
1173
|
+
},
|
|
1174
|
+
[SchemaAST4.JSONSchemaAnnotationId]: makeTypeJsonSchemaAnnotation({
|
|
1175
|
+
kind: EntityKind.Type,
|
|
1176
|
+
typename,
|
|
1177
|
+
version: version2
|
|
1178
|
+
})
|
|
1287
1179
|
});
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1180
|
+
return Schema4.make(ast);
|
|
1181
|
+
})();
|
|
1182
|
+
var makeEchoTypeSchema = (fields, ast, typename, version2, kind, computeJsonSchema, explicitId) => {
|
|
1183
|
+
const sourceSchema = Schema4.make(ast);
|
|
1184
|
+
const meta = {
|
|
1185
|
+
keys: [],
|
|
1186
|
+
key: typename,
|
|
1187
|
+
version: version2
|
|
1188
|
+
};
|
|
1189
|
+
const id = explicitId ?? EntityId2.deterministic(typename, version2);
|
|
1190
|
+
const entity = makeObject(persistentEntitySchema, {
|
|
1191
|
+
id
|
|
1192
|
+
}, meta);
|
|
1193
|
+
const target = getProxyTarget(entity);
|
|
1194
|
+
let memoizedJsonSchema;
|
|
1195
|
+
Object.defineProperty(target, "jsonSchema", {
|
|
1196
|
+
configurable: true,
|
|
1197
|
+
enumerable: true,
|
|
1198
|
+
get() {
|
|
1199
|
+
return memoizedJsonSchema ??= computeJsonSchema();
|
|
1200
|
+
},
|
|
1201
|
+
set(value2) {
|
|
1202
|
+
memoizedJsonSchema = value2;
|
|
1203
|
+
}
|
|
1296
1204
|
});
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
"'Invalid object model: invalid entity kind'"
|
|
1304
|
-
]
|
|
1205
|
+
defineHiddenProperty(target, StaticTypeSchemaSlot, sourceSchema);
|
|
1206
|
+
defineHiddenProperty(target, SchemaKindId, kind);
|
|
1207
|
+
Object.defineProperty(target, "fields", {
|
|
1208
|
+
configurable: true,
|
|
1209
|
+
enumerable: false,
|
|
1210
|
+
get: () => fields
|
|
1305
1211
|
});
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
F: __dxlog_file8,
|
|
1309
|
-
L: 104,
|
|
1310
|
-
S: this,
|
|
1311
|
-
A: [
|
|
1312
|
-
"obj[RelationSourceDXNId] instanceof DXN",
|
|
1313
|
-
"'Invalid object model: invalid relation source'"
|
|
1314
|
-
]
|
|
1315
|
-
});
|
|
1316
|
-
invariant8(obj[RelationTargetDXNId] instanceof DXN2, "Invalid object model: invalid relation target", {
|
|
1317
|
-
F: __dxlog_file8,
|
|
1318
|
-
L: 105,
|
|
1319
|
-
S: this,
|
|
1320
|
-
A: [
|
|
1321
|
-
"obj[RelationTargetDXNId] instanceof DXN",
|
|
1322
|
-
"'Invalid object model: invalid relation target'"
|
|
1323
|
-
]
|
|
1324
|
-
});
|
|
1325
|
-
invariant8(!(obj[RelationSourceId] instanceof DXN2), "Invalid object model: source pointer is a DXN", {
|
|
1326
|
-
F: __dxlog_file8,
|
|
1327
|
-
L: 106,
|
|
1328
|
-
S: this,
|
|
1329
|
-
A: [
|
|
1330
|
-
"!(obj[RelationSourceId] instanceof DXN)",
|
|
1331
|
-
"'Invalid object model: source pointer is a DXN'"
|
|
1332
|
-
]
|
|
1333
|
-
});
|
|
1334
|
-
invariant8(!(obj[RelationTargetId] instanceof DXN2), "Invalid object model: target pointer is a DXN", {
|
|
1335
|
-
F: __dxlog_file8,
|
|
1336
|
-
L: 107,
|
|
1337
|
-
S: this,
|
|
1338
|
-
A: [
|
|
1339
|
-
"!(obj[RelationTargetId] instanceof DXN)",
|
|
1340
|
-
"'Invalid object model: target pointer is a DXN'"
|
|
1341
|
-
]
|
|
1342
|
-
});
|
|
1343
|
-
}
|
|
1344
|
-
}
|
|
1212
|
+
return entity;
|
|
1213
|
+
};
|
|
1345
1214
|
|
|
1346
|
-
// src/internal/Entity/
|
|
1215
|
+
// src/internal/Entity/object.ts
|
|
1347
1216
|
import * as Schema5 from "effect/Schema";
|
|
1348
|
-
import
|
|
1349
|
-
import {
|
|
1350
|
-
import {
|
|
1351
|
-
var __dxlog_file9 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/Entity/util.ts";
|
|
1352
|
-
var getObjectDXN = (object) => {
|
|
1353
|
-
invariant9(!Schema5.isSchema(object), "schema not allowed in this function", {
|
|
1354
|
-
F: __dxlog_file9,
|
|
1355
|
-
L: 19,
|
|
1356
|
-
S: void 0,
|
|
1357
|
-
A: [
|
|
1358
|
-
"!Schema.isSchema(object)",
|
|
1359
|
-
"'schema not allowed in this function'"
|
|
1360
|
-
]
|
|
1361
|
-
});
|
|
1362
|
-
assertArgument2(typeof object === "object" && object != null, "object", "expected object");
|
|
1363
|
-
assumeType2(object);
|
|
1364
|
-
if (object[SelfDXNId]) {
|
|
1365
|
-
invariant9(object[SelfDXNId] instanceof DXN3, "Invalid object model: invalid self dxn", {
|
|
1366
|
-
F: __dxlog_file9,
|
|
1367
|
-
L: 24,
|
|
1368
|
-
S: void 0,
|
|
1369
|
-
A: [
|
|
1370
|
-
"object[SelfDXNId] instanceof DXN",
|
|
1371
|
-
"'Invalid object model: invalid self dxn'"
|
|
1372
|
-
]
|
|
1373
|
-
});
|
|
1374
|
-
return object[SelfDXNId];
|
|
1375
|
-
}
|
|
1376
|
-
if (!ObjectId3.isValid(object.id)) {
|
|
1377
|
-
throw new TypeError("Object id is not valid.");
|
|
1378
|
-
}
|
|
1379
|
-
return DXN3.fromLocalObjectId(object.id);
|
|
1380
|
-
};
|
|
1217
|
+
import * as SchemaAST5 from "effect/SchemaAST";
|
|
1218
|
+
import { invariant as invariant6 } from "@dxos/invariant";
|
|
1219
|
+
import { DXN as DXN2 } from "@dxos/keys";
|
|
1381
1220
|
|
|
1382
|
-
// src/internal/
|
|
1383
|
-
var
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
F: __dxlog_file10,
|
|
1388
|
-
L: 19,
|
|
1389
|
-
S: void 0,
|
|
1390
|
-
A: [
|
|
1391
|
-
"dxn != null",
|
|
1392
|
-
"'Invalid entity.'"
|
|
1393
|
-
]
|
|
1394
|
-
});
|
|
1395
|
-
return dxn;
|
|
1221
|
+
// src/internal/JsonSchema/json-schema-normalize.ts
|
|
1222
|
+
var normalizeSchema = (schema) => {
|
|
1223
|
+
const copy = structuredClone(schema);
|
|
1224
|
+
go(copy);
|
|
1225
|
+
return copy;
|
|
1396
1226
|
};
|
|
1397
|
-
var
|
|
1398
|
-
|
|
1399
|
-
|
|
1227
|
+
var go = (schema) => {
|
|
1228
|
+
if (typeof schema !== "object" || schema === null) {
|
|
1229
|
+
return;
|
|
1230
|
+
}
|
|
1231
|
+
if (schema.exclusiveMaximum === true) {
|
|
1232
|
+
schema.exclusiveMaximum = schema.maximum;
|
|
1233
|
+
delete schema.exclusiveMaximum;
|
|
1234
|
+
} else if (schema.exclusiveMaximum === false) {
|
|
1235
|
+
delete schema.exclusiveMaximum;
|
|
1236
|
+
}
|
|
1237
|
+
if (schema.exclusiveMinimum === true) {
|
|
1238
|
+
schema.exclusiveMinimum = schema.minimum;
|
|
1239
|
+
delete schema.exclusiveMinimum;
|
|
1240
|
+
} else if (schema.exclusiveMinimum === false) {
|
|
1241
|
+
delete schema.exclusiveMinimum;
|
|
1242
|
+
}
|
|
1243
|
+
for (const key of Object.keys(schema)) {
|
|
1244
|
+
if (!JsonSchemaFields.includes(key)) {
|
|
1245
|
+
delete schema[key];
|
|
1246
|
+
}
|
|
1247
|
+
}
|
|
1248
|
+
if (schema.properties) {
|
|
1249
|
+
goOnRecord(schema.properties);
|
|
1250
|
+
}
|
|
1251
|
+
if (schema.patternProperties) {
|
|
1252
|
+
goOnRecord(schema.patternProperties);
|
|
1253
|
+
}
|
|
1254
|
+
if (schema.propertyNames) {
|
|
1255
|
+
go(schema.propertyNames);
|
|
1256
|
+
}
|
|
1257
|
+
if (schema.definitions) {
|
|
1258
|
+
goOnRecord(schema.definitions);
|
|
1259
|
+
}
|
|
1260
|
+
if (schema.items) {
|
|
1261
|
+
maybeGoOnArray(schema.items);
|
|
1262
|
+
}
|
|
1263
|
+
if (schema.additionalItems) {
|
|
1264
|
+
maybeGoOnArray(schema.additionalItems);
|
|
1265
|
+
}
|
|
1266
|
+
if (schema.contains) {
|
|
1267
|
+
go(schema.contains);
|
|
1268
|
+
}
|
|
1269
|
+
if (schema.if) {
|
|
1270
|
+
go(schema.if);
|
|
1271
|
+
}
|
|
1272
|
+
if (schema.then) {
|
|
1273
|
+
go(schema.then);
|
|
1274
|
+
}
|
|
1275
|
+
if (schema.else) {
|
|
1276
|
+
go(schema.else);
|
|
1277
|
+
}
|
|
1278
|
+
if (schema.allOf) {
|
|
1279
|
+
maybeGoOnArray(schema.allOf);
|
|
1280
|
+
}
|
|
1281
|
+
if (schema.anyOf) {
|
|
1282
|
+
maybeGoOnArray(schema.anyOf);
|
|
1283
|
+
}
|
|
1284
|
+
if (schema.oneOf) {
|
|
1285
|
+
maybeGoOnArray(schema.oneOf);
|
|
1286
|
+
}
|
|
1287
|
+
if (schema.not) {
|
|
1288
|
+
go(schema.not);
|
|
1289
|
+
}
|
|
1290
|
+
if (schema.$defs) {
|
|
1291
|
+
goOnRecord(schema.$defs);
|
|
1292
|
+
}
|
|
1293
|
+
if (schema.reference) {
|
|
1294
|
+
go(schema.reference.schema);
|
|
1295
|
+
}
|
|
1400
1296
|
};
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
return class EchoObjectSchemaClass extends Schema6.make(ast) {
|
|
1406
|
-
static typename = typename;
|
|
1407
|
-
static version = version2;
|
|
1408
|
-
static [SchemaKindId] = kind;
|
|
1409
|
-
static fields = fields;
|
|
1410
|
-
static annotations(annotations3) {
|
|
1411
|
-
const schema = Schema6.make(ast).annotations(annotations3);
|
|
1412
|
-
return makeEchoTypeSchema(fields, schema.ast, typename, version2, kind);
|
|
1413
|
-
}
|
|
1414
|
-
// static make(
|
|
1415
|
-
// props: RequiredKeys<Schema.TypeLiteral.Constructor<Fields, []>> extends never
|
|
1416
|
-
// ? void | Simplify<Schema.TypeLiteral.Constructor<Fields, []>>
|
|
1417
|
-
// : Simplify<Schema.TypeLiteral.Constructor<Fields, []>>,
|
|
1418
|
-
// options?: MakeProps,
|
|
1419
|
-
// ): Simplify<Schema.TypeLiteral.Type<Fields, []>> {
|
|
1420
|
-
// const propsWithDefaults: any = _lazilyMergeDefaults(fields, { ...(props as any) });
|
|
1421
|
-
// return _getDisableValidationMakeOption(options)
|
|
1422
|
-
// ? propsWithDefaults
|
|
1423
|
-
// : ParseResult.validateSync(this)(propsWithDefaults);
|
|
1424
|
-
// }
|
|
1425
|
-
static instanceOf(value2) {
|
|
1426
|
-
return Schema6.is(this)(value2);
|
|
1297
|
+
var maybeGoOnArray = (value2) => {
|
|
1298
|
+
if (Array.isArray(value2)) {
|
|
1299
|
+
for (const item of value2) {
|
|
1300
|
+
go(item);
|
|
1427
1301
|
}
|
|
1428
|
-
}
|
|
1302
|
+
} else if (typeof value2 === "object" && value2 !== null) {
|
|
1303
|
+
go(value2);
|
|
1304
|
+
}
|
|
1305
|
+
};
|
|
1306
|
+
var goOnRecord = (record) => {
|
|
1307
|
+
for (const key of Object.keys(record)) {
|
|
1308
|
+
go(record[key]);
|
|
1309
|
+
}
|
|
1429
1310
|
};
|
|
1430
1311
|
|
|
1431
1312
|
// src/internal/Entity/object.ts
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
|
|
1313
|
+
var __dxlog_file6 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/Entity/object.ts";
|
|
1314
|
+
var EchoObjectSchema = (dxn, options) => {
|
|
1315
|
+
const typename = DXN2.getName(dxn);
|
|
1316
|
+
const version2 = DXN2.getVersion(dxn);
|
|
1317
|
+
invariant6(version2, `Type.makeObject requires a versioned DXN: ${dxn}`, { "~LogMeta": "~LogMeta", F: __dxlog_file6, L: 19, S: void 0, A: ["version", "`Type.makeObject requires a versioned DXN: ${dxn}`"] });
|
|
1437
1318
|
return (self) => {
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
L: 36,
|
|
1441
|
-
S: void 0,
|
|
1442
|
-
A: [
|
|
1443
|
-
"typeof TypeAnnotationId === 'symbol'",
|
|
1444
|
-
"'Sanity.'"
|
|
1445
|
-
]
|
|
1446
|
-
});
|
|
1447
|
-
invariant11(SchemaAST4.isTypeLiteral(self.ast), "Schema must be a TypeLiteral.", {
|
|
1448
|
-
F: __dxlog_file11,
|
|
1449
|
-
L: 37,
|
|
1450
|
-
S: void 0,
|
|
1451
|
-
A: [
|
|
1452
|
-
"SchemaAST.isTypeLiteral(self.ast)",
|
|
1453
|
-
"'Schema must be a TypeLiteral.'"
|
|
1454
|
-
]
|
|
1455
|
-
});
|
|
1319
|
+
invariant6(typeof TypeAnnotationId === "symbol", "Sanity.", { "~LogMeta": "~LogMeta", F: __dxlog_file6, L: 21, S: void 0, A: ["typeof TypeAnnotationId === 'symbol'", "'Sanity.'"] });
|
|
1320
|
+
invariant6(SchemaAST5.isTypeLiteral(self.ast), "Schema must be a TypeLiteral.", { "~LogMeta": "~LogMeta", F: __dxlog_file6, L: 22, S: void 0, A: ["SchemaAST.isTypeLiteral(self.ast)", "'Schema must be a TypeLiteral.'"] });
|
|
1456
1321
|
const fields = self.fields ?? {};
|
|
1457
|
-
const schemaWithId =
|
|
1458
|
-
id:
|
|
1322
|
+
const schemaWithId = Schema5.extend(self, Schema5.Struct({
|
|
1323
|
+
id: Schema5.String
|
|
1459
1324
|
}));
|
|
1460
|
-
const ast =
|
|
1325
|
+
const ast = SchemaAST5.annotations(schemaWithId.ast, {
|
|
1461
1326
|
// TODO(dmaretskyi): `extend` kills the annotations.
|
|
1462
1327
|
...self.ast.annotations,
|
|
1463
1328
|
[TypeAnnotationId]: {
|
|
@@ -1466,49 +1331,46 @@ var EchoObjectSchema = ({ typename, version: version2 }) => {
|
|
|
1466
1331
|
version: version2
|
|
1467
1332
|
},
|
|
1468
1333
|
// TODO(dmaretskyi): TypeIdentifierAnnotationId?
|
|
1469
|
-
[
|
|
1334
|
+
[SchemaAST5.JSONSchemaAnnotationId]: makeTypeJsonSchemaAnnotation({
|
|
1470
1335
|
kind: EntityKind.Object,
|
|
1471
1336
|
typename,
|
|
1472
1337
|
version: version2
|
|
1473
1338
|
})
|
|
1474
1339
|
});
|
|
1475
|
-
return makeEchoTypeSchema(fields, ast, typename, version2, EntityKind.Object);
|
|
1340
|
+
return makeEchoTypeSchema(fields, ast, typename, version2, EntityKind.Object, () => toJsonSchema(Schema5.make(ast)), options?.id);
|
|
1476
1341
|
};
|
|
1477
1342
|
};
|
|
1478
1343
|
|
|
1479
1344
|
// src/internal/Entity/relation.ts
|
|
1480
|
-
import * as
|
|
1481
|
-
import * as
|
|
1345
|
+
import * as Schema6 from "effect/Schema";
|
|
1346
|
+
import * as SchemaAST6 from "effect/SchemaAST";
|
|
1482
1347
|
import { raise } from "@dxos/debug";
|
|
1483
|
-
import { assertArgument as
|
|
1484
|
-
import { DXN as
|
|
1485
|
-
var
|
|
1486
|
-
var EchoRelationSchema = ({ source, target,
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1348
|
+
import { assertArgument as assertArgument2, invariant as invariant7 } from "@dxos/invariant";
|
|
1349
|
+
import { DXN as DXN3 } from "@dxos/keys";
|
|
1350
|
+
var __dxlog_file7 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/Entity/relation.ts";
|
|
1351
|
+
var EchoRelationSchema = ({ dxn, source, target, id: explicitId }) => {
|
|
1352
|
+
const sourceSchema = source != null ? getStaticTypeSchema(source) ?? source : source;
|
|
1353
|
+
const targetSchema = target != null ? getStaticTypeSchema(target) ?? target : target;
|
|
1354
|
+
assertArgument2(Schema6.isSchema(sourceSchema), "source");
|
|
1355
|
+
assertArgument2(Schema6.isSchema(targetSchema), "target");
|
|
1356
|
+
const typename = DXN3.getName(dxn);
|
|
1357
|
+
const version2 = DXN3.getVersion(dxn);
|
|
1358
|
+
invariant7(version2, `Type.makeRelation requires a versioned DXN: ${dxn}`, { "~LogMeta": "~LogMeta", F: __dxlog_file7, L: 27, S: void 0, A: ["version", "`Type.makeRelation requires a versioned DXN: ${dxn}`"] });
|
|
1359
|
+
const sourceDXN = getDXNForRelationSchemaRef(sourceSchema);
|
|
1360
|
+
const targetDXN = getDXNForRelationSchemaRef(targetSchema);
|
|
1361
|
+
if (getEntityKind(sourceSchema) !== EntityKind.Object) {
|
|
1492
1362
|
raise(new Error("Source schema must be an echo object schema."));
|
|
1493
1363
|
}
|
|
1494
|
-
if (getEntityKind(
|
|
1364
|
+
if (getEntityKind(targetSchema) !== EntityKind.Object) {
|
|
1495
1365
|
raise(new Error("Target schema must be an echo object schema."));
|
|
1496
1366
|
}
|
|
1497
1367
|
return (self) => {
|
|
1498
|
-
|
|
1499
|
-
F: __dxlog_file12,
|
|
1500
|
-
L: 110,
|
|
1501
|
-
S: void 0,
|
|
1502
|
-
A: [
|
|
1503
|
-
"SchemaAST.isTypeLiteral(self.ast)",
|
|
1504
|
-
"'Schema must be a TypeLiteral.'"
|
|
1505
|
-
]
|
|
1506
|
-
});
|
|
1368
|
+
invariant7(SchemaAST6.isTypeLiteral(self.ast), "Schema must be a TypeLiteral.", { "~LogMeta": "~LogMeta", F: __dxlog_file7, L: 37, S: void 0, A: ["SchemaAST.isTypeLiteral(self.ast)", "'Schema must be a TypeLiteral.'"] });
|
|
1507
1369
|
const fields = self.fields ?? {};
|
|
1508
|
-
const schemaWithId =
|
|
1509
|
-
id:
|
|
1370
|
+
const schemaWithId = Schema6.extend(self, Schema6.Struct({
|
|
1371
|
+
id: Schema6.String
|
|
1510
1372
|
}));
|
|
1511
|
-
const ast =
|
|
1373
|
+
const ast = SchemaAST6.annotations(schemaWithId.ast, {
|
|
1512
1374
|
// TODO(dmaretskyi): `extend` kills the annotations.
|
|
1513
1375
|
...self.ast.annotations,
|
|
1514
1376
|
[TypeAnnotationId]: {
|
|
@@ -1519,7 +1381,7 @@ var EchoRelationSchema = ({ source, target, typename, version: version2 }) => {
|
|
|
1519
1381
|
targetSchema: targetDXN
|
|
1520
1382
|
},
|
|
1521
1383
|
// TODO(dmaretskyi): TypeIdentifierAnnotationId?
|
|
1522
|
-
[
|
|
1384
|
+
[SchemaAST6.JSONSchemaAnnotationId]: makeTypeJsonSchemaAnnotation({
|
|
1523
1385
|
kind: EntityKind.Relation,
|
|
1524
1386
|
typename,
|
|
1525
1387
|
version: version2,
|
|
@@ -1527,24 +1389,57 @@ var EchoRelationSchema = ({ source, target, typename, version: version2 }) => {
|
|
|
1527
1389
|
relationTarget: targetDXN
|
|
1528
1390
|
})
|
|
1529
1391
|
});
|
|
1530
|
-
return makeEchoTypeSchema(fields, ast, typename, version2, EntityKind.Relation);
|
|
1392
|
+
return makeEchoTypeSchema(fields, ast, typename, version2, EntityKind.Relation, () => toJsonSchema(Schema6.make(ast)), explicitId);
|
|
1531
1393
|
};
|
|
1532
1394
|
};
|
|
1533
1395
|
var getDXNForRelationSchemaRef = (schema) => {
|
|
1534
|
-
|
|
1396
|
+
assertArgument2(Schema6.isSchema(schema), "schema");
|
|
1535
1397
|
const identifier = getTypeIdentifierAnnotation(schema);
|
|
1536
1398
|
if (identifier) {
|
|
1537
|
-
return identifier;
|
|
1399
|
+
return DXN3.tryMake(identifier) ?? raise(new Error(`Invalid schema identifier: ${identifier}`));
|
|
1538
1400
|
}
|
|
1539
1401
|
const typename = getSchemaTypename(schema);
|
|
1540
1402
|
if (!typename) {
|
|
1541
1403
|
throw new Error("Schema must have a typename");
|
|
1542
1404
|
}
|
|
1543
|
-
return
|
|
1405
|
+
return DXN3.make(typename);
|
|
1406
|
+
};
|
|
1407
|
+
|
|
1408
|
+
// src/internal/Entity/type-kind.ts
|
|
1409
|
+
import * as Schema7 from "effect/Schema";
|
|
1410
|
+
import * as SchemaAST7 from "effect/SchemaAST";
|
|
1411
|
+
import { invariant as invariant8 } from "@dxos/invariant";
|
|
1412
|
+
import { DXN as DXN4 } from "@dxos/keys";
|
|
1413
|
+
var __dxlog_file8 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/Entity/type-kind.ts";
|
|
1414
|
+
var EchoTypeKindSchema = (dxn, options) => {
|
|
1415
|
+
const typename = DXN4.getName(dxn);
|
|
1416
|
+
const version2 = DXN4.getVersion(dxn);
|
|
1417
|
+
invariant8(version2, `Type-kind schemas require a versioned DXN: ${dxn}`, { "~LogMeta": "~LogMeta", F: __dxlog_file8, L: 22, S: void 0, A: ["version", "`Type-kind schemas require a versioned DXN: ${dxn}`"] });
|
|
1418
|
+
return (self) => {
|
|
1419
|
+
invariant8(SchemaAST7.isTypeLiteral(self.ast), "Schema must be a TypeLiteral.", { "~LogMeta": "~LogMeta", F: __dxlog_file8, L: 24, S: void 0, A: ["SchemaAST.isTypeLiteral(self.ast)", "'Schema must be a TypeLiteral.'"] });
|
|
1420
|
+
const fields = self.fields ?? {};
|
|
1421
|
+
const schemaWithId = Schema7.extend(self, Schema7.Struct({
|
|
1422
|
+
id: Schema7.String
|
|
1423
|
+
}));
|
|
1424
|
+
const ast = SchemaAST7.annotations(schemaWithId.ast, {
|
|
1425
|
+
...self.ast.annotations,
|
|
1426
|
+
[TypeAnnotationId]: {
|
|
1427
|
+
kind: EntityKind.Type,
|
|
1428
|
+
typename,
|
|
1429
|
+
version: version2
|
|
1430
|
+
},
|
|
1431
|
+
[SchemaAST7.JSONSchemaAnnotationId]: makeTypeJsonSchemaAnnotation({
|
|
1432
|
+
kind: EntityKind.Type,
|
|
1433
|
+
typename,
|
|
1434
|
+
version: version2
|
|
1435
|
+
})
|
|
1436
|
+
});
|
|
1437
|
+
return makeEchoTypeSchema(fields, ast, typename, version2, EntityKind.Type, () => toJsonSchema(Schema7.make(ast)), options?.id);
|
|
1438
|
+
};
|
|
1544
1439
|
};
|
|
1545
1440
|
|
|
1546
1441
|
// src/internal/Entity/version.ts
|
|
1547
|
-
import { assertArgument as
|
|
1442
|
+
import { assertArgument as assertArgument3 } from "@dxos/invariant";
|
|
1548
1443
|
var unversioned = {
|
|
1549
1444
|
[VersionTypeId]: {},
|
|
1550
1445
|
versioned: false
|
|
@@ -1560,12 +1455,12 @@ var version = (entity) => {
|
|
|
1560
1455
|
return ver;
|
|
1561
1456
|
};
|
|
1562
1457
|
var versionValid = (ver) => {
|
|
1563
|
-
|
|
1458
|
+
assertArgument3(isVersion(ver), "version", "Invalid version object");
|
|
1564
1459
|
return !!ver.versioned;
|
|
1565
1460
|
};
|
|
1566
1461
|
var compareVersions = (version1, version2) => {
|
|
1567
|
-
|
|
1568
|
-
|
|
1462
|
+
assertArgument3(isVersion(version1), "version1", "Invalid version object");
|
|
1463
|
+
assertArgument3(isVersion(version2), "version2", "Invalid version object");
|
|
1569
1464
|
if (!versionValid(version1) || !versionValid(version2)) {
|
|
1570
1465
|
return "unversioned";
|
|
1571
1466
|
}
|
|
@@ -1586,99 +1481,8 @@ var decodeVersion = (ver) => {
|
|
|
1586
1481
|
return parsed;
|
|
1587
1482
|
};
|
|
1588
1483
|
|
|
1589
|
-
// src/internal/JsonSchema/json-schema-normalize.ts
|
|
1590
|
-
var normalizeSchema = (schema) => {
|
|
1591
|
-
const copy = structuredClone(schema);
|
|
1592
|
-
go(copy);
|
|
1593
|
-
return copy;
|
|
1594
|
-
};
|
|
1595
|
-
var go = (schema) => {
|
|
1596
|
-
if (typeof schema !== "object" || schema === null) {
|
|
1597
|
-
return;
|
|
1598
|
-
}
|
|
1599
|
-
if (schema.exclusiveMaximum === true) {
|
|
1600
|
-
schema.exclusiveMaximum = schema.maximum;
|
|
1601
|
-
delete schema.exclusiveMaximum;
|
|
1602
|
-
} else if (schema.exclusiveMaximum === false) {
|
|
1603
|
-
delete schema.exclusiveMaximum;
|
|
1604
|
-
}
|
|
1605
|
-
if (schema.exclusiveMinimum === true) {
|
|
1606
|
-
schema.exclusiveMinimum = schema.minimum;
|
|
1607
|
-
delete schema.exclusiveMinimum;
|
|
1608
|
-
} else if (schema.exclusiveMinimum === false) {
|
|
1609
|
-
delete schema.exclusiveMinimum;
|
|
1610
|
-
}
|
|
1611
|
-
for (const key of Object.keys(schema)) {
|
|
1612
|
-
if (!JsonSchemaFields.includes(key)) {
|
|
1613
|
-
delete schema[key];
|
|
1614
|
-
}
|
|
1615
|
-
}
|
|
1616
|
-
if (schema.properties) {
|
|
1617
|
-
goOnRecord(schema.properties);
|
|
1618
|
-
}
|
|
1619
|
-
if (schema.patternProperties) {
|
|
1620
|
-
goOnRecord(schema.patternProperties);
|
|
1621
|
-
}
|
|
1622
|
-
if (schema.propertyNames) {
|
|
1623
|
-
go(schema.propertyNames);
|
|
1624
|
-
}
|
|
1625
|
-
if (schema.definitions) {
|
|
1626
|
-
goOnRecord(schema.definitions);
|
|
1627
|
-
}
|
|
1628
|
-
if (schema.items) {
|
|
1629
|
-
maybeGoOnArray(schema.items);
|
|
1630
|
-
}
|
|
1631
|
-
if (schema.additionalItems) {
|
|
1632
|
-
maybeGoOnArray(schema.additionalItems);
|
|
1633
|
-
}
|
|
1634
|
-
if (schema.contains) {
|
|
1635
|
-
go(schema.contains);
|
|
1636
|
-
}
|
|
1637
|
-
if (schema.if) {
|
|
1638
|
-
go(schema.if);
|
|
1639
|
-
}
|
|
1640
|
-
if (schema.then) {
|
|
1641
|
-
go(schema.then);
|
|
1642
|
-
}
|
|
1643
|
-
if (schema.else) {
|
|
1644
|
-
go(schema.else);
|
|
1645
|
-
}
|
|
1646
|
-
if (schema.allOf) {
|
|
1647
|
-
maybeGoOnArray(schema.allOf);
|
|
1648
|
-
}
|
|
1649
|
-
if (schema.anyOf) {
|
|
1650
|
-
maybeGoOnArray(schema.anyOf);
|
|
1651
|
-
}
|
|
1652
|
-
if (schema.oneOf) {
|
|
1653
|
-
maybeGoOnArray(schema.oneOf);
|
|
1654
|
-
}
|
|
1655
|
-
if (schema.not) {
|
|
1656
|
-
go(schema.not);
|
|
1657
|
-
}
|
|
1658
|
-
if (schema.$defs) {
|
|
1659
|
-
goOnRecord(schema.$defs);
|
|
1660
|
-
}
|
|
1661
|
-
if (schema.reference) {
|
|
1662
|
-
go(schema.reference.schema);
|
|
1663
|
-
}
|
|
1664
|
-
};
|
|
1665
|
-
var maybeGoOnArray = (value2) => {
|
|
1666
|
-
if (Array.isArray(value2)) {
|
|
1667
|
-
for (const item of value2) {
|
|
1668
|
-
go(item);
|
|
1669
|
-
}
|
|
1670
|
-
} else if (typeof value2 === "object" && value2 !== null) {
|
|
1671
|
-
go(value2);
|
|
1672
|
-
}
|
|
1673
|
-
};
|
|
1674
|
-
var goOnRecord = (record) => {
|
|
1675
|
-
for (const key of Object.keys(record)) {
|
|
1676
|
-
go(record[key]);
|
|
1677
|
-
}
|
|
1678
|
-
};
|
|
1679
|
-
|
|
1680
1484
|
// src/internal/Obj/common.ts
|
|
1681
|
-
import * as
|
|
1485
|
+
import * as Schema8 from "effect/Schema";
|
|
1682
1486
|
var makeTypedEntityClass = (typename, version2, baseSchema) => {
|
|
1683
1487
|
return class {
|
|
1684
1488
|
// Implement TypedObject properties.
|
|
@@ -1686,7 +1490,7 @@ var makeTypedEntityClass = (typename, version2, baseSchema) => {
|
|
|
1686
1490
|
static version = version2;
|
|
1687
1491
|
// Implement Schema.Schema properties.
|
|
1688
1492
|
// TODO(burdon): Comment required.
|
|
1689
|
-
static [
|
|
1493
|
+
static [Schema8.TypeId] = schemaVariance;
|
|
1690
1494
|
static ast = baseSchema.ast;
|
|
1691
1495
|
static annotations = baseSchema.annotations.bind(baseSchema);
|
|
1692
1496
|
static pipe = baseSchema.pipe.bind(baseSchema);
|
|
@@ -1708,8 +1512,8 @@ var schemaVariance = {
|
|
|
1708
1512
|
|
|
1709
1513
|
// src/internal/Obj/create-object.ts
|
|
1710
1514
|
import { raise as raise3 } from "@dxos/debug";
|
|
1711
|
-
import { assertArgument as
|
|
1712
|
-
import {
|
|
1515
|
+
import { assertArgument as assertArgument5, failedInvariant } from "@dxos/invariant";
|
|
1516
|
+
import { EntityId as EntityId4 } from "@dxos/keys";
|
|
1713
1517
|
|
|
1714
1518
|
// src/internal/Obj/inspect.ts
|
|
1715
1519
|
import { inspectCustom as inspectCustom2 } from "@dxos/debug";
|
|
@@ -1729,53 +1533,37 @@ var typedObjectInspectFunction = function(depth, options, inspect) {
|
|
|
1729
1533
|
const { id, ...props } = this;
|
|
1730
1534
|
return inspect({
|
|
1731
1535
|
id,
|
|
1732
|
-
[ATTR_TYPE]:
|
|
1536
|
+
[ATTR_TYPE]: getTypeURI(this),
|
|
1733
1537
|
...props,
|
|
1734
1538
|
[ATTR_META]: this[MetaId]
|
|
1735
1539
|
}, options);
|
|
1736
1540
|
};
|
|
1737
1541
|
|
|
1738
1542
|
// src/internal/Obj/json-serializer.ts
|
|
1739
|
-
import * as
|
|
1543
|
+
import * as Schema9 from "effect/Schema";
|
|
1740
1544
|
import { raise as raise2 } from "@dxos/debug";
|
|
1741
|
-
import {
|
|
1742
|
-
import { assertArgument as
|
|
1743
|
-
import {
|
|
1744
|
-
import { assumeType
|
|
1745
|
-
var
|
|
1545
|
+
import { EntityStructure, isEncodedReference } from "@dxos/echo-protocol";
|
|
1546
|
+
import { assertArgument as assertArgument4, invariant as invariant9 } from "@dxos/invariant";
|
|
1547
|
+
import { EID as EID3, EntityId as EntityId3, URI } from "@dxos/keys";
|
|
1548
|
+
import { assumeType, decodeUint8ArrayFromJson, deepMapValues as deepMapValues2, isEncodedUint8Array, visitValues } from "@dxos/util";
|
|
1549
|
+
var __dxlog_file9 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/Obj/json-serializer.ts";
|
|
1746
1550
|
var objectToJSON = (obj) => {
|
|
1747
|
-
const typename =
|
|
1748
|
-
|
|
1749
|
-
F: __dxlog_file13,
|
|
1750
|
-
L: 66,
|
|
1751
|
-
S: void 0,
|
|
1752
|
-
A: [
|
|
1753
|
-
"typename && typeof typename === 'string'",
|
|
1754
|
-
""
|
|
1755
|
-
]
|
|
1756
|
-
});
|
|
1551
|
+
const typename = getTypeURI(obj);
|
|
1552
|
+
invariant9(typename && typeof typename === "string", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file9, L: 23, S: void 0, A: ["typename && typeof typename === 'string'", ""] });
|
|
1757
1553
|
return typedJsonSerializer.call(obj);
|
|
1758
1554
|
};
|
|
1759
|
-
var objectFromJSON = async (jsonData, { refResolver,
|
|
1760
|
-
|
|
1761
|
-
|
|
1762
|
-
|
|
1763
|
-
|
|
1764
|
-
const type =
|
|
1555
|
+
var objectFromJSON = async (jsonData, { refResolver, uri, database, parent } = {}) => {
|
|
1556
|
+
assumeType(jsonData);
|
|
1557
|
+
assertArgument4(typeof jsonData === "object" && jsonData !== null, "jsonData", "expect object");
|
|
1558
|
+
assertArgument4(typeof jsonData[ATTR_TYPE] === "string", "jsonData[ATTR_TYPE]", "expected object to have a type");
|
|
1559
|
+
assertArgument4(typeof jsonData.id === "string", "jsonData.id", "expected object to have an id");
|
|
1560
|
+
const type = URI.make(jsonData[ATTR_TYPE]);
|
|
1765
1561
|
const schema = await refResolver?.resolveSchema(type);
|
|
1766
|
-
|
|
1767
|
-
|
|
1768
|
-
L: 97,
|
|
1769
|
-
S: void 0,
|
|
1770
|
-
A: [
|
|
1771
|
-
"schema === undefined || Schema.isSchema(schema)",
|
|
1772
|
-
""
|
|
1773
|
-
]
|
|
1774
|
-
});
|
|
1775
|
-
const decodedInput = stripInternalJsonKeys(jsonData);
|
|
1562
|
+
invariant9(schema === void 0 || Schema9.isSchema(schema), void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file9, L: 43, S: void 0, A: ["schema === undefined || Schema.isSchema(schema)", ""] });
|
|
1563
|
+
const decodedInput = restoreUint8Arrays(stripInternalJsonKeys(jsonData));
|
|
1776
1564
|
let obj;
|
|
1777
1565
|
if (schema != null) {
|
|
1778
|
-
obj = await schema.pipe(
|
|
1566
|
+
obj = await schema.pipe(Schema9.decodeUnknownPromise)(decodedInput);
|
|
1779
1567
|
if (refResolver) {
|
|
1780
1568
|
setRefResolverOnData(obj, refResolver);
|
|
1781
1569
|
}
|
|
@@ -1784,131 +1572,97 @@ var objectFromJSON = async (jsonData, { refResolver, dxn, database, parent } = {
|
|
|
1784
1572
|
refResolver
|
|
1785
1573
|
});
|
|
1786
1574
|
}
|
|
1787
|
-
|
|
1788
|
-
F: __dxlog_file13,
|
|
1789
|
-
L: 110,
|
|
1790
|
-
S: void 0,
|
|
1791
|
-
A: [
|
|
1792
|
-
"ObjectId.isValid(obj.id)",
|
|
1793
|
-
"'Invalid object id'"
|
|
1794
|
-
]
|
|
1795
|
-
});
|
|
1575
|
+
invariant9(EntityId3.isValid(obj.id), "Invalid object id", { "~LogMeta": "~LogMeta", F: __dxlog_file9, L: 56, S: void 0, A: ["EntityId.isValid(obj.id)", "'Invalid object id'"] });
|
|
1796
1576
|
setTypename(obj, type);
|
|
1797
1577
|
if (schema) {
|
|
1798
1578
|
setSchema(obj, schema);
|
|
1799
1579
|
}
|
|
1580
|
+
if (refResolver?.resolveType) {
|
|
1581
|
+
const typeEntity = await refResolver.resolveType(type);
|
|
1582
|
+
if (typeEntity != null) {
|
|
1583
|
+
setType(obj, typeEntity);
|
|
1584
|
+
}
|
|
1585
|
+
}
|
|
1800
1586
|
const isRelation = typeof jsonData[ATTR_RELATION_SOURCE] === "string" || typeof jsonData[ATTR_RELATION_TARGET] === "string";
|
|
1801
1587
|
if (isRelation) {
|
|
1802
|
-
const sourceDxn =
|
|
1803
|
-
const targetDxn =
|
|
1804
|
-
const source = await refResolver?.
|
|
1805
|
-
const target = await refResolver?.
|
|
1588
|
+
const sourceDxn = jsonData[ATTR_RELATION_SOURCE] ?? raise2(new TypeError("Missing relation source"));
|
|
1589
|
+
const targetDxn = jsonData[ATTR_RELATION_TARGET] ?? raise2(new TypeError("Missing relation target"));
|
|
1590
|
+
const source = await refResolver?.resolveLegacy(sourceDxn);
|
|
1591
|
+
const target = await refResolver?.resolveLegacy(targetDxn);
|
|
1806
1592
|
defineHiddenProperty(obj, KindId, EntityKind.Relation);
|
|
1807
1593
|
defineHiddenProperty(obj, RelationSourceDXNId, sourceDxn);
|
|
1808
1594
|
defineHiddenProperty(obj, RelationTargetDXNId, targetDxn);
|
|
1809
1595
|
defineHiddenProperty(obj, RelationSourceId, source);
|
|
1810
1596
|
defineHiddenProperty(obj, RelationTargetId, target);
|
|
1811
1597
|
} else {
|
|
1812
|
-
|
|
1598
|
+
const annotationKind = schema != null ? getTypeAnnotation(schema)?.kind : void 0;
|
|
1599
|
+
defineHiddenProperty(obj, KindId, annotationKind === EntityKind.Type ? EntityKind.Type : EntityKind.Object);
|
|
1813
1600
|
}
|
|
1814
1601
|
if (typeof jsonData[ATTR_META] === "object") {
|
|
1815
|
-
const meta = await
|
|
1816
|
-
|
|
1817
|
-
F: __dxlog_file13,
|
|
1818
|
-
L: 136,
|
|
1819
|
-
S: void 0,
|
|
1820
|
-
A: [
|
|
1821
|
-
"Array.isArray(meta.keys)",
|
|
1822
|
-
""
|
|
1823
|
-
]
|
|
1824
|
-
});
|
|
1602
|
+
const meta = await EntityMetaSchema.pipe(Schema9.decodeUnknownPromise)(normalizeMeta(jsonData[ATTR_META]));
|
|
1603
|
+
invariant9(Array.isArray(meta.keys), void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file9, L: 92, S: void 0, A: ["Array.isArray(meta.keys)", ""] });
|
|
1825
1604
|
defineHiddenProperty(obj, MetaId, meta);
|
|
1826
1605
|
} else {
|
|
1827
1606
|
defineHiddenProperty(obj, MetaId, {
|
|
1828
|
-
keys: []
|
|
1607
|
+
keys: [],
|
|
1608
|
+
tags: [],
|
|
1609
|
+
annotations: {}
|
|
1829
1610
|
});
|
|
1830
1611
|
}
|
|
1831
1612
|
if (jsonData[ATTR_PARENT]) {
|
|
1832
|
-
const parentDxn =
|
|
1833
|
-
const resolvedParent = await refResolver?.
|
|
1613
|
+
const parentDxn = jsonData[ATTR_PARENT];
|
|
1614
|
+
const resolvedParent = await refResolver?.resolveLegacy(parentDxn);
|
|
1834
1615
|
defineHiddenProperty(obj, ParentId, resolvedParent);
|
|
1835
1616
|
} else if (parent) {
|
|
1836
1617
|
defineHiddenProperty(obj, ParentId, parent);
|
|
1837
1618
|
}
|
|
1838
|
-
if (
|
|
1839
|
-
defineHiddenProperty(obj,
|
|
1619
|
+
if (uri) {
|
|
1620
|
+
defineHiddenProperty(obj, SelfURIId, uri);
|
|
1840
1621
|
}
|
|
1841
1622
|
if (database) {
|
|
1842
1623
|
defineHiddenProperty(obj, ObjectDatabaseId, database);
|
|
1843
1624
|
}
|
|
1844
1625
|
assertObjectModel(obj);
|
|
1845
|
-
|
|
1846
|
-
|
|
1847
|
-
|
|
1848
|
-
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
|
-
|
|
1852
|
-
]
|
|
1853
|
-
});
|
|
1854
|
-
invariant13(obj[ATTR_META] === void 0, "Invalid object model", {
|
|
1855
|
-
F: __dxlog_file13,
|
|
1856
|
-
L: 162,
|
|
1857
|
-
S: void 0,
|
|
1858
|
-
A: [
|
|
1859
|
-
"(obj as any)[ATTR_META] === undefined",
|
|
1860
|
-
"'Invalid object model'"
|
|
1861
|
-
]
|
|
1862
|
-
});
|
|
1863
|
-
invariant13(obj[ATTR_DELETED] === void 0, "Invalid object model", {
|
|
1864
|
-
F: __dxlog_file13,
|
|
1865
|
-
L: 163,
|
|
1866
|
-
S: void 0,
|
|
1867
|
-
A: [
|
|
1868
|
-
"(obj as any)[ATTR_DELETED] === undefined",
|
|
1869
|
-
"'Invalid object model'"
|
|
1870
|
-
]
|
|
1871
|
-
});
|
|
1872
|
-
invariant13(obj[ATTR_SELF_DXN] === void 0, "Invalid object model", {
|
|
1873
|
-
F: __dxlog_file13,
|
|
1874
|
-
L: 164,
|
|
1875
|
-
S: void 0,
|
|
1876
|
-
A: [
|
|
1877
|
-
"(obj as any)[ATTR_SELF_DXN] === undefined",
|
|
1878
|
-
"'Invalid object model'"
|
|
1879
|
-
]
|
|
1880
|
-
});
|
|
1881
|
-
invariant13(obj[ATTR_RELATION_SOURCE] === void 0, "Invalid object model", {
|
|
1882
|
-
F: __dxlog_file13,
|
|
1883
|
-
L: 165,
|
|
1884
|
-
S: void 0,
|
|
1885
|
-
A: [
|
|
1886
|
-
"(obj as any)[ATTR_RELATION_SOURCE] === undefined",
|
|
1887
|
-
"'Invalid object model'"
|
|
1888
|
-
]
|
|
1889
|
-
});
|
|
1890
|
-
invariant13(obj[ATTR_RELATION_TARGET] === void 0, "Invalid object model", {
|
|
1891
|
-
F: __dxlog_file13,
|
|
1892
|
-
L: 166,
|
|
1893
|
-
S: void 0,
|
|
1894
|
-
A: [
|
|
1895
|
-
"(obj as any)[ATTR_RELATION_TARGET] === undefined",
|
|
1896
|
-
"'Invalid object model'"
|
|
1897
|
-
]
|
|
1898
|
-
});
|
|
1626
|
+
invariant9(obj[ATTR_TYPE] === void 0, "Invalid object model", { "~LogMeta": "~LogMeta", F: __dxlog_file9, L: 115, S: void 0, A: ["obj[ATTR_TYPE] === undefined", "'Invalid object model'"] });
|
|
1627
|
+
invariant9(obj[ATTR_META] === void 0, "Invalid object model", { "~LogMeta": "~LogMeta", F: __dxlog_file9, L: 116, S: void 0, A: ["obj[ATTR_META] === undefined", "'Invalid object model'"] });
|
|
1628
|
+
invariant9(obj[ATTR_DELETED] === void 0, "Invalid object model", { "~LogMeta": "~LogMeta", F: __dxlog_file9, L: 117, S: void 0, A: ["obj[ATTR_DELETED] === undefined", "'Invalid object model'"] });
|
|
1629
|
+
invariant9(obj[ATTR_SELF_URI] === void 0, "Invalid object model", { "~LogMeta": "~LogMeta", F: __dxlog_file9, L: 118, S: void 0, A: ["obj[ATTR_SELF_URI] === undefined", "'Invalid object model'"] });
|
|
1630
|
+
invariant9(obj[ATTR_SELF_URI_LEGACY] === void 0, "Invalid object model", { "~LogMeta": "~LogMeta", F: __dxlog_file9, L: 119, S: void 0, A: ["obj[ATTR_SELF_URI_LEGACY] === undefined", "'Invalid object model'"] });
|
|
1631
|
+
invariant9(obj[ATTR_RELATION_SOURCE] === void 0, "Invalid object model", { "~LogMeta": "~LogMeta", F: __dxlog_file9, L: 120, S: void 0, A: ["obj[ATTR_RELATION_SOURCE] === undefined", "'Invalid object model'"] });
|
|
1632
|
+
invariant9(obj[ATTR_RELATION_TARGET] === void 0, "Invalid object model", { "~LogMeta": "~LogMeta", F: __dxlog_file9, L: 121, S: void 0, A: ["obj[ATTR_RELATION_TARGET] === undefined", "'Invalid object model'"] });
|
|
1899
1633
|
return obj;
|
|
1900
1634
|
};
|
|
1635
|
+
var normalizeMeta = (meta) => {
|
|
1636
|
+
const tags = Array.isArray(meta?.tags) ? meta.tags.map((tag) => typeof tag === "string" ? {
|
|
1637
|
+
"/": URI.make(tag)
|
|
1638
|
+
} : tag) : [];
|
|
1639
|
+
return {
|
|
1640
|
+
...meta,
|
|
1641
|
+
keys: Array.isArray(meta?.keys) ? meta.keys : [],
|
|
1642
|
+
tags,
|
|
1643
|
+
annotations: meta?.annotations ?? {}
|
|
1644
|
+
};
|
|
1645
|
+
};
|
|
1901
1646
|
var decodeGeneric = (jsonData, options) => {
|
|
1902
1647
|
const props = stripInternalJsonKeys(jsonData);
|
|
1903
1648
|
return deepMapValues2(props, (value2, visitor) => {
|
|
1904
1649
|
if (isEncodedReference(value2)) {
|
|
1905
1650
|
return refFromEncodedReference(value2, options.refResolver);
|
|
1906
1651
|
}
|
|
1652
|
+
if (isEncodedUint8Array(value2)) {
|
|
1653
|
+
return decodeUint8ArrayFromJson(value2);
|
|
1654
|
+
}
|
|
1907
1655
|
return visitor(value2);
|
|
1908
1656
|
});
|
|
1909
1657
|
};
|
|
1658
|
+
var restoreUint8Arrays = (data) => deepMapValues2(data, (value2, recurse) => {
|
|
1659
|
+
if (isEncodedUint8Array(value2)) {
|
|
1660
|
+
return decodeUint8ArrayFromJson(value2);
|
|
1661
|
+
}
|
|
1662
|
+
return recurse(value2);
|
|
1663
|
+
});
|
|
1910
1664
|
var stripInternalJsonKeys = (jsonData) => {
|
|
1911
|
-
const { [ATTR_TYPE]: _type, [ATTR_META]: _meta, [ATTR_DELETED]: _deleted, [
|
|
1665
|
+
const { [ATTR_TYPE]: _type, [ATTR_META]: _meta, [ATTR_DELETED]: _deleted, [ATTR_SELF_URI]: _selfUri, [ATTR_SELF_URI_LEGACY]: _legacySelfUri, [ATTR_RELATION_SOURCE]: _relationSource, [ATTR_RELATION_TARGET]: _relationTarget, ...props } = jsonData;
|
|
1912
1666
|
return props;
|
|
1913
1667
|
};
|
|
1914
1668
|
var setRefResolverOnData = (obj, refResolver) => {
|
|
@@ -1922,43 +1676,58 @@ var setRefResolverOnData = (obj, refResolver) => {
|
|
|
1922
1676
|
visitor(obj);
|
|
1923
1677
|
};
|
|
1924
1678
|
var objectStructureToJson = (objectId, structure) => {
|
|
1679
|
+
const typeRef = EntityStructure.getTypeReference(structure)?.["/"];
|
|
1680
|
+
const parent = EntityStructure.getParent(structure)?.["/"];
|
|
1681
|
+
const source = EntityStructure.getRelationSource(structure)?.["/"];
|
|
1682
|
+
const target = EntityStructure.getRelationTarget(structure)?.["/"];
|
|
1925
1683
|
return {
|
|
1926
1684
|
...structure.data,
|
|
1927
1685
|
id: objectId,
|
|
1928
|
-
[ATTR_TYPE]:
|
|
1929
|
-
[ATTR_DELETED]:
|
|
1930
|
-
[ATTR_PARENT]:
|
|
1931
|
-
[ATTR_RELATION_SOURCE]:
|
|
1932
|
-
[ATTR_RELATION_TARGET]:
|
|
1686
|
+
[ATTR_TYPE]: typeRef ? URI.make(typeRef) : void 0,
|
|
1687
|
+
[ATTR_DELETED]: EntityStructure.isDeleted(structure),
|
|
1688
|
+
[ATTR_PARENT]: parent !== void 0 ? EID3.tryParse(parent) : void 0,
|
|
1689
|
+
[ATTR_RELATION_SOURCE]: source !== void 0 ? EID3.tryParse(source) : void 0,
|
|
1690
|
+
[ATTR_RELATION_TARGET]: target !== void 0 ? EID3.tryParse(target) : void 0
|
|
1933
1691
|
};
|
|
1934
1692
|
};
|
|
1935
1693
|
|
|
1936
1694
|
// src/internal/Obj/create-object.ts
|
|
1937
|
-
var createObject = (
|
|
1695
|
+
var createObject = (input, props) => {
|
|
1696
|
+
const schema = getStaticTypeSchema(input) ?? failedInvariant("Type entity is missing its source schema");
|
|
1938
1697
|
const annotation = getTypeAnnotation(schema);
|
|
1939
1698
|
if (!annotation) {
|
|
1940
1699
|
throw new Error("Schema is not an ECHO schema");
|
|
1941
1700
|
}
|
|
1942
|
-
|
|
1943
|
-
|
|
1944
|
-
|
|
1945
|
-
|
|
1701
|
+
assertArgument5(!("@type" in props), "data", "@type is not allowed");
|
|
1702
|
+
assertArgument5(!(RelationSourceDXNId in props), "data", "Relation source DXN is not allowed in the constructor");
|
|
1703
|
+
assertArgument5(!(RelationTargetDXNId in props), "data", "Relation target DXN is not allowed in the constructor");
|
|
1704
|
+
assertArgument5(RelationSourceId in props === RelationTargetId in props, "data", "Relation source and target must be provided together");
|
|
1705
|
+
const metaOverride = props[MetaId];
|
|
1706
|
+
if (metaOverride !== void 0) {
|
|
1707
|
+
delete props[MetaId];
|
|
1708
|
+
}
|
|
1946
1709
|
const obj = {
|
|
1947
1710
|
...props,
|
|
1948
|
-
id: props.id ??
|
|
1711
|
+
id: props.id ?? EntityId4.random()
|
|
1949
1712
|
};
|
|
1950
|
-
const kind = RelationSourceId in props ? EntityKind.Relation : EntityKind.Object;
|
|
1713
|
+
const kind = annotation.kind === EntityKind.Type ? EntityKind.Type : annotation.kind === EntityKind.Relation || RelationSourceId in props ? EntityKind.Relation : EntityKind.Object;
|
|
1951
1714
|
defineHiddenProperty(obj, KindId, kind);
|
|
1952
1715
|
defineHiddenProperty(obj, MetaId, {
|
|
1953
|
-
|
|
1716
|
+
...metaOverride,
|
|
1717
|
+
keys: metaOverride?.keys ?? [],
|
|
1718
|
+
tags: metaOverride?.tags ?? [],
|
|
1719
|
+
annotations: metaOverride?.annotations ?? {}
|
|
1954
1720
|
});
|
|
1955
1721
|
setSchema(obj, schema);
|
|
1956
|
-
|
|
1722
|
+
if (input !== schema) {
|
|
1723
|
+
setType(obj, input);
|
|
1724
|
+
}
|
|
1725
|
+
setTypename(obj, getSchemaURI(schema) ?? failedInvariant("Missing schema URI"));
|
|
1957
1726
|
attachTypedJsonSerializer(obj);
|
|
1958
1727
|
attachedTypedObjectInspector(obj);
|
|
1959
1728
|
if (kind === EntityKind.Relation) {
|
|
1960
|
-
const sourceDXN =
|
|
1961
|
-
const targetDXN =
|
|
1729
|
+
const sourceDXN = getObjectEchoUri(props[RelationSourceId]) ?? raise3(new Error("Unresolved relation source"));
|
|
1730
|
+
const targetDXN = getObjectEchoUri(props[RelationTargetId]) ?? raise3(new Error("Unresolved relation target"));
|
|
1962
1731
|
defineHiddenProperty(obj, RelationSourceDXNId, sourceDXN);
|
|
1963
1732
|
defineHiddenProperty(obj, RelationTargetDXNId, targetDXN);
|
|
1964
1733
|
}
|
|
@@ -1974,41 +1743,17 @@ var isDeleted = (obj) => {
|
|
|
1974
1743
|
return obj[ObjectDeletedId] ?? false;
|
|
1975
1744
|
};
|
|
1976
1745
|
|
|
1977
|
-
// src/internal/Obj/ids.ts
|
|
1978
|
-
import { DXN as DXN6, ObjectId as ObjectId6, QueueSubspaceTags, SpaceId } from "@dxos/keys";
|
|
1979
|
-
var createQueueDXN = (spaceId = SpaceId.random(), queueId = ObjectId6.random()) => new DXN6(DXN6.kind.QUEUE, [
|
|
1980
|
-
QueueSubspaceTags.DATA,
|
|
1981
|
-
spaceId,
|
|
1982
|
-
queueId
|
|
1983
|
-
]);
|
|
1984
|
-
|
|
1985
1746
|
// src/internal/Obj/set-value.ts
|
|
1986
1747
|
import * as Match from "effect/Match";
|
|
1987
1748
|
import * as Option from "effect/Option";
|
|
1988
|
-
import * as
|
|
1989
|
-
import {
|
|
1990
|
-
import { invariant as
|
|
1991
|
-
var
|
|
1749
|
+
import * as SchemaAST8 from "effect/SchemaAST";
|
|
1750
|
+
import { SchemaEx } from "@dxos/effect";
|
|
1751
|
+
import { invariant as invariant10 } from "@dxos/invariant";
|
|
1752
|
+
var __dxlog_file10 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/Obj/set-value.ts";
|
|
1992
1753
|
var setValue = (obj, path, value2) => {
|
|
1993
|
-
|
|
1994
|
-
F: __dxlog_file14,
|
|
1995
|
-
L: 27,
|
|
1996
|
-
S: void 0,
|
|
1997
|
-
A: [
|
|
1998
|
-
"path.length > 0",
|
|
1999
|
-
"'Path must not be empty'"
|
|
2000
|
-
]
|
|
2001
|
-
});
|
|
1754
|
+
invariant10(path.length > 0, "Path must not be empty", { "~LogMeta": "~LogMeta", F: __dxlog_file10, L: 14, S: void 0, A: ["path.length > 0", "'Path must not be empty'"] });
|
|
2002
1755
|
const schema = getSchema(obj);
|
|
2003
|
-
|
|
2004
|
-
F: __dxlog_file14,
|
|
2005
|
-
L: 30,
|
|
2006
|
-
S: void 0,
|
|
2007
|
-
A: [
|
|
2008
|
-
"schema != null",
|
|
2009
|
-
"'Object must have a schema'"
|
|
2010
|
-
]
|
|
2011
|
-
});
|
|
1756
|
+
invariant10(schema != null, "Object must have a schema", { "~LogMeta": "~LogMeta", F: __dxlog_file10, L: 16, S: void 0, A: ["schema != null", "'Object must have a schema'"] });
|
|
2012
1757
|
let parent = obj;
|
|
2013
1758
|
let currentAST = schema.ast;
|
|
2014
1759
|
for (let i = 0; i < path.length - 1; i++) {
|
|
@@ -2016,7 +1761,7 @@ var setValue = (obj, path, value2) => {
|
|
|
2016
1761
|
const key = typeof part === "number" ? part : String(part);
|
|
2017
1762
|
if (parent[key] === void 0) {
|
|
2018
1763
|
const propertyAST = getPropertyAST(currentAST, String(part));
|
|
2019
|
-
const shouldBeArray = propertyAST ? isArrayType(propertyAST) : false;
|
|
1764
|
+
const shouldBeArray = propertyAST ? SchemaEx.isArrayType(propertyAST) : false;
|
|
2020
1765
|
if (shouldBeArray) {
|
|
2021
1766
|
parent[key] = [];
|
|
2022
1767
|
} else {
|
|
@@ -2035,15 +1780,15 @@ var getPropertyAST = (ast, propertyName) => {
|
|
|
2035
1780
|
if (!ast) {
|
|
2036
1781
|
return void 0;
|
|
2037
1782
|
}
|
|
2038
|
-
if (isNestedType(ast)) {
|
|
2039
|
-
const properties =
|
|
1783
|
+
if (SchemaEx.isNestedType(ast)) {
|
|
1784
|
+
const properties = SchemaEx.getProperties(ast);
|
|
2040
1785
|
const property = properties.find((p) => p.name.toString() === propertyName);
|
|
2041
1786
|
if (property) {
|
|
2042
|
-
return getBaseType(property).type;
|
|
1787
|
+
return SchemaEx.getBaseType(property).type;
|
|
2043
1788
|
}
|
|
2044
1789
|
}
|
|
2045
|
-
if (isArrayType(ast)) {
|
|
2046
|
-
const elementType = getArrayElementType(ast);
|
|
1790
|
+
if (SchemaEx.isArrayType(ast)) {
|
|
1791
|
+
const elementType = SchemaEx.getArrayElementType(ast);
|
|
2047
1792
|
return elementType;
|
|
2048
1793
|
}
|
|
2049
1794
|
return void 0;
|
|
@@ -2052,17 +1797,17 @@ var getRequiredProperties = (ast) => {
|
|
|
2052
1797
|
if (!ast) {
|
|
2053
1798
|
return [];
|
|
2054
1799
|
}
|
|
2055
|
-
if (!isNestedType(ast)) {
|
|
1800
|
+
if (!SchemaEx.isNestedType(ast)) {
|
|
2056
1801
|
return [];
|
|
2057
1802
|
}
|
|
2058
|
-
const properties =
|
|
1803
|
+
const properties = SchemaEx.getProperties(ast);
|
|
2059
1804
|
return properties.filter((p) => !p.isOptional);
|
|
2060
1805
|
};
|
|
2061
1806
|
var getDefaultValueForType = (ast) => {
|
|
2062
1807
|
if (!ast) {
|
|
2063
1808
|
return void 0;
|
|
2064
1809
|
}
|
|
2065
|
-
const defaultValue =
|
|
1810
|
+
const defaultValue = SchemaAST8.getDefaultAnnotation(ast);
|
|
2066
1811
|
if (Option.isSome(defaultValue)) {
|
|
2067
1812
|
return defaultValue.value;
|
|
2068
1813
|
}
|
|
@@ -2084,7 +1829,7 @@ var createObjectWithDefaults = (ast) => {
|
|
|
2084
1829
|
const defaultValue = getDefaultValueForType(prop.type);
|
|
2085
1830
|
if (defaultValue !== void 0) {
|
|
2086
1831
|
obj[prop.name] = defaultValue;
|
|
2087
|
-
} else if (isNestedType(prop.type)) {
|
|
1832
|
+
} else if (SchemaEx.isNestedType(prop.type)) {
|
|
2088
1833
|
obj[prop.name] = createObjectWithDefaults(prop.type);
|
|
2089
1834
|
}
|
|
2090
1835
|
}
|
|
@@ -2092,7 +1837,7 @@ var createObjectWithDefaults = (ast) => {
|
|
|
2092
1837
|
};
|
|
2093
1838
|
|
|
2094
1839
|
// src/internal/Obj/snapshot.ts
|
|
2095
|
-
import { assertArgument as
|
|
1840
|
+
import { assertArgument as assertArgument6 } from "@dxos/invariant";
|
|
2096
1841
|
import { deepMapValues as deepMapValues3 } from "@dxos/util";
|
|
2097
1842
|
var copySymbolProperty = (source, target, symbol, transform) => {
|
|
2098
1843
|
let value2;
|
|
@@ -2112,7 +1857,7 @@ var copySymbolProperty = (source, target, symbol, transform) => {
|
|
|
2112
1857
|
}
|
|
2113
1858
|
};
|
|
2114
1859
|
var getSnapshot = (obj) => {
|
|
2115
|
-
|
|
1860
|
+
assertArgument6(typeof obj === "object" && obj !== null && KindId in obj, "obj", "must be an entity");
|
|
2116
1861
|
const snapshot = deepMapValues3(obj, (value2, recurse) => {
|
|
2117
1862
|
if (typeof value2 === "object" && value2 !== null && Object.getPrototypeOf(value2) !== Object.prototype && !Array.isArray(value2)) {
|
|
2118
1863
|
return value2;
|
|
@@ -2125,16 +1870,29 @@ var getSnapshot = (obj) => {
|
|
|
2125
1870
|
const source = obj;
|
|
2126
1871
|
copySymbolProperty(source, snapshot, TypeId);
|
|
2127
1872
|
copySymbolProperty(source, snapshot, SchemaId);
|
|
2128
|
-
copySymbolProperty(source, snapshot,
|
|
1873
|
+
copySymbolProperty(source, snapshot, TypeEntityId);
|
|
1874
|
+
copySymbolProperty(source, snapshot, SelfURIId);
|
|
2129
1875
|
copySymbolProperty(source, snapshot, ObjectDatabaseId);
|
|
2130
1876
|
copySymbolProperty(source, snapshot, ObjectDeletedId);
|
|
1877
|
+
copySymbolProperty(source, snapshot, ParentId);
|
|
2131
1878
|
copySymbolProperty(source, snapshot, MetaId, (meta) => ({
|
|
2132
1879
|
keys: [
|
|
2133
1880
|
...meta?.keys ?? []
|
|
2134
1881
|
],
|
|
2135
1882
|
tags: [
|
|
2136
1883
|
...meta?.tags ?? []
|
|
2137
|
-
]
|
|
1884
|
+
],
|
|
1885
|
+
...meta?.key != null ? {
|
|
1886
|
+
key: meta.key
|
|
1887
|
+
} : {},
|
|
1888
|
+
...meta?.version != null ? {
|
|
1889
|
+
version: meta.version
|
|
1890
|
+
} : {},
|
|
1891
|
+
...meta?.annotations ? {
|
|
1892
|
+
annotations: {
|
|
1893
|
+
...meta.annotations
|
|
1894
|
+
}
|
|
1895
|
+
} : {}
|
|
2138
1896
|
}));
|
|
2139
1897
|
copySymbolProperty(source, snapshot, RelationSourceDXNId);
|
|
2140
1898
|
copySymbolProperty(source, snapshot, RelationTargetDXNId);
|
|
@@ -2143,22 +1901,169 @@ var getSnapshot = (obj) => {
|
|
|
2143
1901
|
return Object.freeze(snapshot);
|
|
2144
1902
|
};
|
|
2145
1903
|
|
|
1904
|
+
// src/internal/Obj/atoms.ts
|
|
1905
|
+
import * as Atom from "@effect-atom/atom/Atom";
|
|
1906
|
+
import * as Result from "@effect-atom/atom/Result";
|
|
1907
|
+
import * as Effect from "effect/Effect";
|
|
1908
|
+
import * as Function from "effect/Function";
|
|
1909
|
+
import * as Option2 from "effect/Option";
|
|
1910
|
+
import { assertArgument as assertArgument7 } from "@dxos/invariant";
|
|
1911
|
+
var isRef = (obj) => obj != null && typeof obj === "object" && RefTypeId in obj;
|
|
1912
|
+
var getReactiveOption = (snapshot) => Effect.gen(function* () {
|
|
1913
|
+
const db = getDatabase(snapshot);
|
|
1914
|
+
if (!db) {
|
|
1915
|
+
return Option2.none();
|
|
1916
|
+
}
|
|
1917
|
+
const obj = db.getObjectById(snapshot.id);
|
|
1918
|
+
return obj ? Option2.some(obj) : Option2.none();
|
|
1919
|
+
});
|
|
1920
|
+
var objectFamily = Atom.family((obj) => {
|
|
1921
|
+
return Atom.make((get) => {
|
|
1922
|
+
const unsubscribe = subscribe(obj, () => {
|
|
1923
|
+
get.setSelf(getSnapshot(obj));
|
|
1924
|
+
});
|
|
1925
|
+
get.addFinalizer(() => unsubscribe());
|
|
1926
|
+
return getSnapshot(obj);
|
|
1927
|
+
}).pipe(Atom.keepAlive);
|
|
1928
|
+
});
|
|
1929
|
+
var refFamily = Atom.family((ref) => {
|
|
1930
|
+
return Atom.make((get) => {
|
|
1931
|
+
let unsubscribeTarget;
|
|
1932
|
+
const setupTargetSubscription = (target) => {
|
|
1933
|
+
unsubscribeTarget?.();
|
|
1934
|
+
unsubscribeTarget = subscribe(target, () => {
|
|
1935
|
+
get.setSelf(getSnapshot(target));
|
|
1936
|
+
});
|
|
1937
|
+
return getSnapshot(target);
|
|
1938
|
+
};
|
|
1939
|
+
get.addFinalizer(() => {
|
|
1940
|
+
unsubscribeTarget?.();
|
|
1941
|
+
});
|
|
1942
|
+
return loadRefTarget(ref, get, setupTargetSubscription);
|
|
1943
|
+
}).pipe(Atom.keepAlive);
|
|
1944
|
+
});
|
|
1945
|
+
var snapshotForComparison = (value2) => {
|
|
1946
|
+
if (Array.isArray(value2)) {
|
|
1947
|
+
return [
|
|
1948
|
+
...value2
|
|
1949
|
+
];
|
|
1950
|
+
}
|
|
1951
|
+
if (value2 !== null && typeof value2 === "object") {
|
|
1952
|
+
return {
|
|
1953
|
+
...value2
|
|
1954
|
+
};
|
|
1955
|
+
}
|
|
1956
|
+
return value2;
|
|
1957
|
+
};
|
|
1958
|
+
var propertyFamily = Atom.family((obj) => Atom.family((key) => {
|
|
1959
|
+
return Atom.make((get) => {
|
|
1960
|
+
let previousSnapshot = snapshotForComparison(obj[key]);
|
|
1961
|
+
const unsubscribe2 = subscribe(obj, () => {
|
|
1962
|
+
const newValue = obj[key];
|
|
1963
|
+
const newSnapshot = snapshotForComparison(newValue);
|
|
1964
|
+
if (newSnapshot !== previousSnapshot) {
|
|
1965
|
+
previousSnapshot = newSnapshot;
|
|
1966
|
+
get.setSelf(newSnapshot);
|
|
1967
|
+
}
|
|
1968
|
+
});
|
|
1969
|
+
get.addFinalizer(() => unsubscribe2());
|
|
1970
|
+
return snapshotForComparison(obj[key]);
|
|
1971
|
+
}).pipe(Atom.keepAlive);
|
|
1972
|
+
}));
|
|
1973
|
+
var objectWithReactiveFamily = Atom.family((obj) => {
|
|
1974
|
+
return Atom.make((get) => {
|
|
1975
|
+
const unsubscribe = subscribe(obj, () => {
|
|
1976
|
+
get.setSelf(obj);
|
|
1977
|
+
});
|
|
1978
|
+
get.addFinalizer(() => unsubscribe());
|
|
1979
|
+
return obj;
|
|
1980
|
+
}).pipe(Atom.keepAlive);
|
|
1981
|
+
});
|
|
1982
|
+
var refWithReactiveFamily = Atom.family((ref) => {
|
|
1983
|
+
const effect = (get) => Effect.gen(function* () {
|
|
1984
|
+
const snapshot = get(makeAtom(ref));
|
|
1985
|
+
if (snapshot == null) {
|
|
1986
|
+
return void 0;
|
|
1987
|
+
}
|
|
1988
|
+
const option = yield* getReactiveOption(snapshot);
|
|
1989
|
+
return Option2.getOrElse(option, () => void 0);
|
|
1990
|
+
});
|
|
1991
|
+
return Function.pipe(Atom.make(effect), Atom.map((result) => Result.getOrElse(result, () => void 0)));
|
|
1992
|
+
});
|
|
1993
|
+
var entityFamily = Atom.family((entity) => {
|
|
1994
|
+
return Atom.make((get) => {
|
|
1995
|
+
const unsubscribe = subscribe(entity, () => {
|
|
1996
|
+
get.setSelf(getSnapshot(entity));
|
|
1997
|
+
});
|
|
1998
|
+
get.addFinalizer(() => unsubscribe());
|
|
1999
|
+
return getSnapshot(entity);
|
|
2000
|
+
}).pipe(Atom.keepAlive);
|
|
2001
|
+
});
|
|
2002
|
+
var relationFamily = Atom.family((relation) => {
|
|
2003
|
+
return Atom.make((get) => {
|
|
2004
|
+
const unsubscribe = subscribe(relation, () => {
|
|
2005
|
+
get.setSelf(getSnapshot(relation));
|
|
2006
|
+
});
|
|
2007
|
+
get.addFinalizer(() => unsubscribe());
|
|
2008
|
+
return getSnapshot(relation);
|
|
2009
|
+
}).pipe(Atom.keepAlive);
|
|
2010
|
+
});
|
|
2011
|
+
var makeAtom = (objOrRef) => {
|
|
2012
|
+
if (isRef(objOrRef)) {
|
|
2013
|
+
return refFamily(objOrRef);
|
|
2014
|
+
}
|
|
2015
|
+
const obj = objOrRef;
|
|
2016
|
+
assertArgument7(isEntity(obj), "obj", "Object must be a reactive object");
|
|
2017
|
+
return objectFamily(obj);
|
|
2018
|
+
};
|
|
2019
|
+
var makeProperty = (obj, key) => {
|
|
2020
|
+
assertArgument7(isEntity(obj), "obj", "Object must be a reactive object");
|
|
2021
|
+
return propertyFamily(obj)(key);
|
|
2022
|
+
};
|
|
2023
|
+
var makeWithReactive = (objOrRef) => {
|
|
2024
|
+
if (isRef(objOrRef)) {
|
|
2025
|
+
return refWithReactiveFamily(objOrRef);
|
|
2026
|
+
}
|
|
2027
|
+
const obj = objOrRef;
|
|
2028
|
+
assertArgument7(isEntity(obj), "obj", "Object must be a reactive object");
|
|
2029
|
+
return objectWithReactiveFamily(obj);
|
|
2030
|
+
};
|
|
2031
|
+
var makeEntity = (entity) => {
|
|
2032
|
+
assertArgument7(isEntity(entity), "entity", "Must be a reactive ECHO entity");
|
|
2033
|
+
return entityFamily(entity);
|
|
2034
|
+
};
|
|
2035
|
+
var makeRelation = (relation) => {
|
|
2036
|
+
assertArgument7(isEntity(relation), "relation", "Must be a reactive ECHO relation");
|
|
2037
|
+
return relationFamily(relation);
|
|
2038
|
+
};
|
|
2039
|
+
var labelAtomFamily = Atom.family((entity) => {
|
|
2040
|
+
return Atom.make((get) => {
|
|
2041
|
+
let previous = getLabel(entity);
|
|
2042
|
+
const unsubscribe = subscribe(entity, () => {
|
|
2043
|
+
const next = getLabel(entity);
|
|
2044
|
+
if (next !== previous) {
|
|
2045
|
+
previous = next;
|
|
2046
|
+
get.setSelf(next);
|
|
2047
|
+
}
|
|
2048
|
+
});
|
|
2049
|
+
get.addFinalizer(() => unsubscribe());
|
|
2050
|
+
return previous;
|
|
2051
|
+
}).pipe(Atom.keepAlive);
|
|
2052
|
+
});
|
|
2053
|
+
var makeLabelAtom = (entity) => {
|
|
2054
|
+
assertArgument7(isEntity(entity), "entity", "Must be a reactive ECHO entity");
|
|
2055
|
+
return labelAtomFamily(entity);
|
|
2056
|
+
};
|
|
2057
|
+
|
|
2146
2058
|
// src/internal/Obj/clone.ts
|
|
2147
|
-
import { invariant as
|
|
2059
|
+
import { invariant as invariant11 } from "@dxos/invariant";
|
|
2148
2060
|
import { deepMapValues as deepMapValues4 } from "@dxos/util";
|
|
2149
|
-
var
|
|
2061
|
+
var __dxlog_file11 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/Obj/clone.ts";
|
|
2150
2062
|
var clone = (obj, opts) => {
|
|
2151
2063
|
const { id, ...data } = obj;
|
|
2152
|
-
const
|
|
2153
|
-
|
|
2154
|
-
|
|
2155
|
-
L: 21,
|
|
2156
|
-
S: void 0,
|
|
2157
|
-
A: [
|
|
2158
|
-
"schema != null",
|
|
2159
|
-
"'Object should have a schema'"
|
|
2160
|
-
]
|
|
2161
|
-
});
|
|
2064
|
+
const typeEntity = getType(obj);
|
|
2065
|
+
const schema = typeEntity != null ? getStaticTypeSchema(typeEntity) : getSchema(obj);
|
|
2066
|
+
invariant11(schema != null, "Object should have a type or schema", { "~LogMeta": "~LogMeta", F: __dxlog_file11, L: 21, S: void 0, A: ["schema != null", "'Object should have a type or schema'"] });
|
|
2162
2067
|
const props = deepMapValues4(data, (value2, recurse) => {
|
|
2163
2068
|
if (Ref.isRef(value2)) {
|
|
2164
2069
|
if (opts?.deep) {
|
|
@@ -2180,13 +2085,16 @@ var clone = (obj, opts) => {
|
|
|
2180
2085
|
}
|
|
2181
2086
|
return recurse(value2);
|
|
2182
2087
|
});
|
|
2183
|
-
return makeObject(schema, props, meta);
|
|
2088
|
+
return makeObject(schema, props, meta, typeEntity);
|
|
2184
2089
|
};
|
|
2185
2090
|
|
|
2186
|
-
// src/internal/Query.ts
|
|
2091
|
+
// src/internal/Query/pretty.ts
|
|
2187
2092
|
var prettyFilter = (filter) => {
|
|
2188
2093
|
switch (filter.type) {
|
|
2189
2094
|
case "object": {
|
|
2095
|
+
if (filter.typename === null && (filter.id === void 0 || filter.id.length === 0) && Object.keys(filter.props).length === 0 && (filter.foreignKeys === void 0 || filter.foreignKeys.length === 0) && filter.metaKey !== void 0) {
|
|
2096
|
+
return filter.metaVersion !== void 0 ? `Filter.key(${JSON.stringify(filter.metaKey)}, { version: ${JSON.stringify(filter.metaVersion)} })` : `Filter.key(${JSON.stringify(filter.metaKey)})`;
|
|
2097
|
+
}
|
|
2190
2098
|
const parts = [];
|
|
2191
2099
|
if (filter.typename !== null) {
|
|
2192
2100
|
parts.push(String(filter.typename));
|
|
@@ -2202,6 +2110,9 @@ var prettyFilter = (filter) => {
|
|
|
2202
2110
|
if (filter.foreignKeys !== void 0 && filter.foreignKeys.length > 0) {
|
|
2203
2111
|
parts.push(`foreignKeys: [${filter.foreignKeys.map((fk) => JSON.stringify(fk)).join(", ")}]`);
|
|
2204
2112
|
}
|
|
2113
|
+
if (filter.metaKey !== void 0) {
|
|
2114
|
+
parts.push(filter.metaVersion !== void 0 ? `metaKey: ${JSON.stringify(filter.metaKey)} (${filter.metaVersion})` : `metaKey: ${JSON.stringify(filter.metaKey)}`);
|
|
2115
|
+
}
|
|
2205
2116
|
return parts.length > 0 ? `Filter.type(${parts.join(", ")})` : "Filter.everything()";
|
|
2206
2117
|
}
|
|
2207
2118
|
case "compare":
|
|
@@ -2265,6 +2176,9 @@ var prettyQuery = (query) => {
|
|
|
2265
2176
|
return "Order.natural()";
|
|
2266
2177
|
} else if (o.kind === "rank") {
|
|
2267
2178
|
return `Order.rank(${JSON.stringify(o.direction)})`;
|
|
2179
|
+
} else if (o.kind === "timestamp") {
|
|
2180
|
+
const fn = o.field === "updatedAt" ? "updated" : "created";
|
|
2181
|
+
return `Order.${fn}(${JSON.stringify(o.direction)})`;
|
|
2268
2182
|
} else {
|
|
2269
2183
|
return `Order.property(${JSON.stringify(o.property)}, ${JSON.stringify(o.direction)})`;
|
|
2270
2184
|
}
|
|
@@ -2277,22 +2191,26 @@ var prettyQuery = (query) => {
|
|
|
2277
2191
|
if (opts.deleted !== void 0) {
|
|
2278
2192
|
parts.push(`deleted: ${JSON.stringify(opts.deleted)}`);
|
|
2279
2193
|
}
|
|
2194
|
+
if (opts.debugLabel !== void 0) {
|
|
2195
|
+
parts.push(`debugLabel: ${JSON.stringify(opts.debugLabel)}`);
|
|
2196
|
+
}
|
|
2280
2197
|
return `${prettyQuery(query.query)}.options({ ${parts.join(", ")} })`;
|
|
2281
2198
|
}
|
|
2282
2199
|
case "from": {
|
|
2283
2200
|
if (query.from._tag === "scope") {
|
|
2284
|
-
|
|
2285
|
-
|
|
2286
|
-
if (scope.spaceIds !== void 0) {
|
|
2287
|
-
parts.push(`spaceIds: [${scope.spaceIds.map((s) => JSON.stringify(s)).join(", ")}]`);
|
|
2288
|
-
}
|
|
2289
|
-
if (scope.queues !== void 0) {
|
|
2290
|
-
parts.push(`queues: [${scope.queues.map(String).join(", ")}]`);
|
|
2291
|
-
}
|
|
2292
|
-
if (scope.allQueuesFromSpaces !== void 0) {
|
|
2293
|
-
parts.push(`allQueuesFromSpaces: ${scope.allQueuesFromSpaces}`);
|
|
2201
|
+
if (query.from.scopes.length === 0) {
|
|
2202
|
+
return `${prettyQuery(query.query)}.from('all-accessible-spaces')`;
|
|
2294
2203
|
}
|
|
2295
|
-
|
|
2204
|
+
const scopeStrs = query.from.scopes.map((scope) => {
|
|
2205
|
+
if (scope._tag === "space") {
|
|
2206
|
+
return scope.includeAllFeeds ? `{ space: ${JSON.stringify(scope.spaceId)}, includeAllFeeds: true }` : `{ space: ${JSON.stringify(scope.spaceId)} }`;
|
|
2207
|
+
}
|
|
2208
|
+
if (scope._tag === "feed") {
|
|
2209
|
+
return `{ feed: ${JSON.stringify(String(scope.feedUri))} }`;
|
|
2210
|
+
}
|
|
2211
|
+
return `{ registry: ${JSON.stringify(scope.location)} }`;
|
|
2212
|
+
});
|
|
2213
|
+
return `${prettyQuery(query.query)}.from([${scopeStrs.join(", ")}])`;
|
|
2296
2214
|
}
|
|
2297
2215
|
return `${prettyQuery(query.query)}.from(${prettyQuery(query.from.query)})`;
|
|
2298
2216
|
}
|
|
@@ -2301,36 +2219,22 @@ var prettyQuery = (query) => {
|
|
|
2301
2219
|
}
|
|
2302
2220
|
};
|
|
2303
2221
|
|
|
2304
|
-
// src/internal/Type/echo-schema.ts
|
|
2305
|
-
import * as Schema13 from "effect/Schema";
|
|
2306
|
-
import * as SchemaAST8 from "effect/SchemaAST";
|
|
2307
|
-
import { invariant as invariant17 } from "@dxos/invariant";
|
|
2308
|
-
|
|
2309
2222
|
// src/internal/Type/manipulation.ts
|
|
2310
|
-
import * as
|
|
2311
|
-
import * as
|
|
2312
|
-
import { invariant as
|
|
2313
|
-
|
|
2314
|
-
var __dxlog_file16 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/Type/manipulation.ts";
|
|
2223
|
+
import * as Schema10 from "effect/Schema";
|
|
2224
|
+
import * as SchemaAST9 from "effect/SchemaAST";
|
|
2225
|
+
import { invariant as invariant12 } from "@dxos/invariant";
|
|
2226
|
+
var __dxlog_file12 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/Type/manipulation.ts";
|
|
2315
2227
|
var addFieldsToSchema = (schema, fields) => {
|
|
2316
|
-
const schemaExtension =
|
|
2317
|
-
return
|
|
2228
|
+
const schemaExtension = Schema10.partial(Schema10.Struct(fields));
|
|
2229
|
+
return Schema10.extend(schema, schemaExtension).annotations(schema.ast.annotations);
|
|
2318
2230
|
};
|
|
2319
2231
|
var updateFieldsInSchema = (schema, fields) => {
|
|
2320
2232
|
const ast = schema.ast;
|
|
2321
|
-
|
|
2322
|
-
F: __dxlog_file16,
|
|
2323
|
-
L: 29,
|
|
2324
|
-
S: void 0,
|
|
2325
|
-
A: [
|
|
2326
|
-
"SchemaAST.isTypeLiteral(ast)",
|
|
2327
|
-
""
|
|
2328
|
-
]
|
|
2329
|
-
});
|
|
2233
|
+
invariant12(SchemaAST9.isTypeLiteral(ast), void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file12, L: 14, S: void 0, A: ["SchemaAST.isTypeLiteral(ast)", ""] });
|
|
2330
2234
|
const updatedProperties = [
|
|
2331
2235
|
...ast.propertySignatures
|
|
2332
2236
|
];
|
|
2333
|
-
const propertiesToUpdate =
|
|
2237
|
+
const propertiesToUpdate = Schema10.partial(Schema10.Struct(fields)).ast.propertySignatures;
|
|
2334
2238
|
for (const property of propertiesToUpdate) {
|
|
2335
2239
|
const index = updatedProperties.findIndex((p) => p.name === property.name);
|
|
2336
2240
|
if (index !== -1) {
|
|
@@ -2339,420 +2243,39 @@ var updateFieldsInSchema = (schema, fields) => {
|
|
|
2339
2243
|
updatedProperties.push(property);
|
|
2340
2244
|
}
|
|
2341
2245
|
}
|
|
2342
|
-
return
|
|
2246
|
+
return Schema10.make(new SchemaAST9.TypeLiteral(updatedProperties, ast.indexSignatures, ast.annotations));
|
|
2343
2247
|
};
|
|
2344
2248
|
var removeFieldsFromSchema = (schema, fieldNames) => {
|
|
2345
|
-
return
|
|
2249
|
+
return Schema10.make(SchemaAST9.omit(schema.ast, fieldNames)).annotations(schema.ast.annotations);
|
|
2346
2250
|
};
|
|
2347
2251
|
var updateFieldNameInSchema = (schema, { before, after }) => {
|
|
2348
2252
|
const ast = schema.ast;
|
|
2349
|
-
|
|
2350
|
-
|
|
2351
|
-
L: 57,
|
|
2352
|
-
S: void 0,
|
|
2353
|
-
A: [
|
|
2354
|
-
"SchemaAST.isTypeLiteral(ast)",
|
|
2355
|
-
""
|
|
2356
|
-
]
|
|
2357
|
-
});
|
|
2358
|
-
return Schema11.make(new SchemaAST7.TypeLiteral(ast.propertySignatures.map((p) => p.name === before ? new SchemaAST7.PropertySignature(after, p.type, p.isOptional, p.isReadonly, p.annotations) : p), ast.indexSignatures, ast.annotations));
|
|
2359
|
-
};
|
|
2360
|
-
var setTypenameInSchema = (schema, typename) => {
|
|
2361
|
-
const existingAnnotation = schema.ast.annotations[TypeAnnotationId];
|
|
2362
|
-
invariant16(existingAnnotation, `Missing ${String(TypeAnnotationId)}`, {
|
|
2363
|
-
F: __dxlog_file16,
|
|
2364
|
-
L: 77,
|
|
2365
|
-
S: void 0,
|
|
2366
|
-
A: [
|
|
2367
|
-
"existingAnnotation",
|
|
2368
|
-
"`Missing ${String(TypeAnnotationId)}`"
|
|
2369
|
-
]
|
|
2370
|
-
});
|
|
2371
|
-
return schema.annotations({
|
|
2372
|
-
...schema.ast.annotations,
|
|
2373
|
-
[TypeAnnotationId]: {
|
|
2374
|
-
kind: existingAnnotation.kind,
|
|
2375
|
-
typename,
|
|
2376
|
-
version: existingAnnotation.version
|
|
2377
|
-
},
|
|
2378
|
-
[SchemaAST7.JSONSchemaAnnotationId]: {
|
|
2379
|
-
...schema.ast.annotations[SchemaAST7.JSONSchemaAnnotationId] ?? {},
|
|
2380
|
-
$id: schema.ast.annotations[TypeIdentifierAnnotationId] ?? DXN7.fromTypename(typename).toString(),
|
|
2381
|
-
typename
|
|
2382
|
-
}
|
|
2383
|
-
});
|
|
2253
|
+
invariant12(SchemaAST9.isTypeLiteral(ast), void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file12, L: 34, S: void 0, A: ["SchemaAST.isTypeLiteral(ast)", ""] });
|
|
2254
|
+
return Schema10.make(new SchemaAST9.TypeLiteral(ast.propertySignatures.map((p) => p.name === before ? new SchemaAST9.PropertySignature(after, p.type, p.isOptional, p.isReadonly, p.annotations) : p), ast.indexSignatures, ast.annotations));
|
|
2384
2255
|
};
|
|
2385
2256
|
|
|
2386
|
-
// src/internal/Type/
|
|
2387
|
-
import * as
|
|
2388
|
-
var
|
|
2389
|
-
name:
|
|
2390
|
-
typename: TypenameSchema,
|
|
2391
|
-
version: VersionSchema,
|
|
2257
|
+
// src/internal/Type/type-schema.ts
|
|
2258
|
+
import * as Schema11 from "effect/Schema";
|
|
2259
|
+
var TypeSchemaStruct = Schema11.Struct({
|
|
2260
|
+
name: Schema11.optional(Schema11.String),
|
|
2392
2261
|
jsonSchema: JsonSchemaType
|
|
2393
|
-
})
|
|
2394
|
-
|
|
2395
|
-
version: "0.1.0"
|
|
2396
|
-
}), LabelAnnotation.set([
|
|
2262
|
+
});
|
|
2263
|
+
var TypeSchema = TypeSchemaStruct.pipe(LabelAnnotation.set([
|
|
2397
2264
|
"name"
|
|
2398
2265
|
]), IconAnnotation.set({
|
|
2399
2266
|
icon: "ph--database--regular",
|
|
2400
2267
|
hue: "green"
|
|
2401
|
-
}));
|
|
2402
|
-
|
|
2403
|
-
// src/internal/Type/echo-schema.ts
|
|
2404
|
-
var __dxlog_file17 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/Type/echo-schema.ts";
|
|
2405
|
-
var ImmutableSchema = class {
|
|
2406
|
-
_schema;
|
|
2407
|
-
_objectAnnotation;
|
|
2408
|
-
constructor(_schema) {
|
|
2409
|
-
this._schema = _schema;
|
|
2410
|
-
this._objectAnnotation = getTypeAnnotation(this._schema);
|
|
2411
|
-
invariant17(this._objectAnnotation, void 0, {
|
|
2412
|
-
F: __dxlog_file17,
|
|
2413
|
-
L: 48,
|
|
2414
|
-
S: this,
|
|
2415
|
-
A: [
|
|
2416
|
-
"this._objectAnnotation",
|
|
2417
|
-
""
|
|
2418
|
-
]
|
|
2419
|
-
});
|
|
2420
|
-
}
|
|
2421
|
-
//
|
|
2422
|
-
// Effect Schema (push to abstract base class).
|
|
2423
|
-
//
|
|
2424
|
-
get [Schema13.TypeId]() {
|
|
2425
|
-
return schemaVariance2;
|
|
2426
|
-
}
|
|
2427
|
-
get Type() {
|
|
2428
|
-
return this._schema.Type;
|
|
2429
|
-
}
|
|
2430
|
-
get Encoded() {
|
|
2431
|
-
return this._schema.Encoded;
|
|
2432
|
-
}
|
|
2433
|
-
get Context() {
|
|
2434
|
-
return this._schema.Context;
|
|
2435
|
-
}
|
|
2436
|
-
get ast() {
|
|
2437
|
-
return this._schema.ast;
|
|
2438
|
-
}
|
|
2439
|
-
get annotations() {
|
|
2440
|
-
return this._schema.annotations;
|
|
2441
|
-
}
|
|
2442
|
-
get pipe() {
|
|
2443
|
-
return this._schema.pipe;
|
|
2444
|
-
}
|
|
2445
|
-
//
|
|
2446
|
-
// TypedObject
|
|
2447
|
-
//
|
|
2448
|
-
get kind() {
|
|
2449
|
-
return this._objectAnnotation.kind;
|
|
2450
|
-
}
|
|
2451
|
-
get typename() {
|
|
2452
|
-
return this._objectAnnotation.typename;
|
|
2453
|
-
}
|
|
2454
|
-
get version() {
|
|
2455
|
-
return this._objectAnnotation.version;
|
|
2456
|
-
}
|
|
2457
|
-
//
|
|
2458
|
-
// BaseSchema
|
|
2459
|
-
//
|
|
2460
|
-
get readonly() {
|
|
2461
|
-
return true;
|
|
2462
|
-
}
|
|
2463
|
-
get snapshot() {
|
|
2464
|
-
return this._schema;
|
|
2465
|
-
}
|
|
2466
|
-
// TODO(burdon): Change from getter since this is expensive.
|
|
2467
|
-
get jsonSchema() {
|
|
2468
|
-
return toJsonSchema(this._schema);
|
|
2469
|
-
}
|
|
2470
|
-
get mutable() {
|
|
2471
|
-
throw new Error("Schema is readonly.");
|
|
2472
|
-
}
|
|
2473
|
-
};
|
|
2474
|
-
var EchoSchemaConstructor = () => {
|
|
2475
|
-
return class {
|
|
2476
|
-
static get _schema() {
|
|
2477
|
-
return Schema13.Union(PersistentSchema, Schema13.instanceOf(EchoSchema)).annotations(PersistentSchema.ast.annotations);
|
|
2478
|
-
}
|
|
2479
|
-
static [Schema13.TypeId] = schemaVariance2;
|
|
2480
|
-
static get ast() {
|
|
2481
|
-
const schema = this._schema;
|
|
2482
|
-
return schema.ast;
|
|
2483
|
-
}
|
|
2484
|
-
static get annotations() {
|
|
2485
|
-
const schema = this._schema;
|
|
2486
|
-
return schema.annotations.bind(schema);
|
|
2487
|
-
}
|
|
2488
|
-
static get pipe() {
|
|
2489
|
-
const schema = this._schema;
|
|
2490
|
-
return schema.pipe.bind(schema);
|
|
2491
|
-
}
|
|
2492
|
-
};
|
|
2493
|
-
};
|
|
2494
|
-
var isMutable = (schema) => {
|
|
2495
|
-
return schema instanceof EchoSchema;
|
|
2496
|
-
};
|
|
2497
|
-
var schemaVariance2 = {
|
|
2498
|
-
_A: (_) => _,
|
|
2499
|
-
_I: (_) => _,
|
|
2500
|
-
_R: (_) => _
|
|
2501
|
-
};
|
|
2502
|
-
var EchoSchema = class extends EchoSchemaConstructor() {
|
|
2503
|
-
_persistentSchema;
|
|
2504
|
-
_schema;
|
|
2505
|
-
_isDirty = true;
|
|
2506
|
-
/**
|
|
2507
|
-
* Schema kind key that marks this as an ECHO schema.
|
|
2508
|
-
* Makes EchoSchema satisfy the Type.AnyObj type.
|
|
2509
|
-
*/
|
|
2510
|
-
[SchemaKindId] = EntityKind.Object;
|
|
2511
|
-
constructor(_persistentSchema) {
|
|
2512
|
-
super(), this._persistentSchema = _persistentSchema;
|
|
2513
|
-
}
|
|
2514
|
-
//
|
|
2515
|
-
// Effect Schema (push to abstract base class).
|
|
2516
|
-
//
|
|
2517
|
-
get [Schema13.TypeId]() {
|
|
2518
|
-
return schemaVariance2;
|
|
2519
|
-
}
|
|
2520
|
-
get Type() {
|
|
2521
|
-
return this._persistentSchema;
|
|
2522
|
-
}
|
|
2523
|
-
get Encoded() {
|
|
2524
|
-
return this._persistentSchema;
|
|
2525
|
-
}
|
|
2526
|
-
get Context() {
|
|
2527
|
-
const schema = this._getSchema();
|
|
2528
|
-
return schema.Context;
|
|
2529
|
-
}
|
|
2530
|
-
get ast() {
|
|
2531
|
-
const schema = this._getSchema();
|
|
2532
|
-
return schema.ast;
|
|
2533
|
-
}
|
|
2534
|
-
get annotations() {
|
|
2535
|
-
const schema = this._getSchema();
|
|
2536
|
-
return schema.annotations.bind(schema);
|
|
2537
|
-
}
|
|
2538
|
-
get pipe() {
|
|
2539
|
-
const schema = this._getSchema();
|
|
2540
|
-
return schema.pipe.bind(schema);
|
|
2541
|
-
}
|
|
2542
|
-
//
|
|
2543
|
-
// BaseSchema
|
|
2544
|
-
//
|
|
2545
|
-
get kind() {
|
|
2546
|
-
return EntityKind.Object;
|
|
2547
|
-
}
|
|
2548
|
-
get typename() {
|
|
2549
|
-
return this._persistentSchema.typename;
|
|
2550
|
-
}
|
|
2551
|
-
get version() {
|
|
2552
|
-
return this._persistentSchema.version;
|
|
2553
|
-
}
|
|
2554
|
-
get readonly() {
|
|
2555
|
-
return false;
|
|
2556
|
-
}
|
|
2557
|
-
/**
|
|
2558
|
-
* Returns an immutable schema snapshot of the current state of the schema.
|
|
2559
|
-
*/
|
|
2560
|
-
get snapshot() {
|
|
2561
|
-
return this._getSchema();
|
|
2562
|
-
}
|
|
2563
|
-
/**
|
|
2564
|
-
* Returns the JSON schema for the schema.
|
|
2565
|
-
*/
|
|
2566
|
-
get jsonSchema() {
|
|
2567
|
-
return this._persistentSchema.jsonSchema;
|
|
2568
|
-
}
|
|
2569
|
-
/**
|
|
2570
|
-
* Returns a mutable schema.
|
|
2571
|
-
*/
|
|
2572
|
-
get mutable() {
|
|
2573
|
-
invariant17(!this.readonly, "Schema is not mutable", {
|
|
2574
|
-
F: __dxlog_file17,
|
|
2575
|
-
L: 278,
|
|
2576
|
-
S: this,
|
|
2577
|
-
A: [
|
|
2578
|
-
"!this.readonly",
|
|
2579
|
-
"'Schema is not mutable'"
|
|
2580
|
-
]
|
|
2581
|
-
});
|
|
2582
|
-
return this;
|
|
2583
|
-
}
|
|
2584
|
-
//
|
|
2585
|
-
// Mutable Schema
|
|
2586
|
-
//
|
|
2587
|
-
/**
|
|
2588
|
-
* Id of the ECHO object containing the schema.
|
|
2589
|
-
*/
|
|
2590
|
-
get id() {
|
|
2591
|
-
return this._persistentSchema.id;
|
|
2592
|
-
}
|
|
2593
|
-
/**
|
|
2594
|
-
* Short name of the schema.
|
|
2595
|
-
*/
|
|
2596
|
-
get name() {
|
|
2597
|
-
return this._persistentSchema.name;
|
|
2598
|
-
}
|
|
2599
|
-
get [SchemaMetaSymbol]() {
|
|
2600
|
-
return {
|
|
2601
|
-
id: this.id,
|
|
2602
|
-
typename: this.typename,
|
|
2603
|
-
version: this._persistentSchema.version
|
|
2604
|
-
};
|
|
2605
|
-
}
|
|
2606
|
-
/**
|
|
2607
|
-
* Reference to the underlying persistent schema object.
|
|
2608
|
-
*/
|
|
2609
|
-
get persistentSchema() {
|
|
2610
|
-
return this._persistentSchema;
|
|
2611
|
-
}
|
|
2612
|
-
getProperties() {
|
|
2613
|
-
const ast = this._getSchema().ast;
|
|
2614
|
-
invariant17(SchemaAST8.isTypeLiteral(ast), void 0, {
|
|
2615
|
-
F: __dxlog_file17,
|
|
2616
|
-
L: 313,
|
|
2617
|
-
S: this,
|
|
2618
|
-
A: [
|
|
2619
|
-
"SchemaAST.isTypeLiteral(ast)",
|
|
2620
|
-
""
|
|
2621
|
-
]
|
|
2622
|
-
});
|
|
2623
|
-
return [
|
|
2624
|
-
...ast.propertySignatures
|
|
2625
|
-
].filter((p) => p.name !== "id").map(unwrapOptionality);
|
|
2626
|
-
}
|
|
2627
|
-
//
|
|
2628
|
-
// Mutation methods.
|
|
2629
|
-
// TODO(burdon): Create separate interface for dynamic schema.
|
|
2630
|
-
// TODO(burdon): Deprecate direct manipulation? Use JSONSchema directly.
|
|
2631
|
-
//
|
|
2632
|
-
/**
|
|
2633
|
-
* @throws Error if the schema is readonly.
|
|
2634
|
-
*/
|
|
2635
|
-
updateTypename(typename) {
|
|
2636
|
-
const updated = setTypenameInSchema(this._getSchema(), typename);
|
|
2637
|
-
this._change((schema) => {
|
|
2638
|
-
schema.typename = typename;
|
|
2639
|
-
schema.jsonSchema = toJsonSchema(updated);
|
|
2640
|
-
});
|
|
2641
|
-
}
|
|
2642
|
-
/**
|
|
2643
|
-
* @throws Error if the schema is readonly.
|
|
2644
|
-
*/
|
|
2645
|
-
addFields(fields) {
|
|
2646
|
-
const extended = addFieldsToSchema(this._getSchema(), fields);
|
|
2647
|
-
this._change((schema) => {
|
|
2648
|
-
schema.jsonSchema = toJsonSchema(extended);
|
|
2649
|
-
});
|
|
2650
|
-
}
|
|
2651
|
-
/**
|
|
2652
|
-
* @throws Error if the schema is readonly.
|
|
2653
|
-
*/
|
|
2654
|
-
updateFields(fields) {
|
|
2655
|
-
const updated = updateFieldsInSchema(this._getSchema(), fields);
|
|
2656
|
-
this._change((schema) => {
|
|
2657
|
-
schema.jsonSchema = toJsonSchema(updated);
|
|
2658
|
-
});
|
|
2659
|
-
}
|
|
2660
|
-
/**
|
|
2661
|
-
* @throws Error if the schema is readonly.
|
|
2662
|
-
*/
|
|
2663
|
-
updateFieldPropertyName({ before, after }) {
|
|
2664
|
-
const renamed = updateFieldNameInSchema(this._getSchema(), {
|
|
2665
|
-
before,
|
|
2666
|
-
after
|
|
2667
|
-
});
|
|
2668
|
-
this._change((schema) => {
|
|
2669
|
-
schema.jsonSchema = toJsonSchema(renamed);
|
|
2670
|
-
});
|
|
2671
|
-
}
|
|
2672
|
-
/**
|
|
2673
|
-
* @throws Error if the schema is readonly.
|
|
2674
|
-
*/
|
|
2675
|
-
removeFields(fieldNames) {
|
|
2676
|
-
const removed = removeFieldsFromSchema(this._getSchema(), fieldNames);
|
|
2677
|
-
this._change((schema) => {
|
|
2678
|
-
schema.jsonSchema = toJsonSchema(removed);
|
|
2679
|
-
});
|
|
2680
|
-
}
|
|
2681
|
-
/**
|
|
2682
|
-
* Wrapper for Obj.change that handles the change context for the persistent schema.
|
|
2683
|
-
*/
|
|
2684
|
-
_change(callback) {
|
|
2685
|
-
const changeFn = this._persistentSchema[ChangeId];
|
|
2686
|
-
if (changeFn) {
|
|
2687
|
-
changeFn(callback);
|
|
2688
|
-
} else {
|
|
2689
|
-
callback(this._persistentSchema);
|
|
2690
|
-
}
|
|
2691
|
-
}
|
|
2692
|
-
//
|
|
2693
|
-
// Internals
|
|
2694
|
-
//
|
|
2695
|
-
/**
|
|
2696
|
-
* Called by DatabaseSchemaRegistry on update.
|
|
2697
|
-
*/
|
|
2698
|
-
_invalidate() {
|
|
2699
|
-
this._isDirty = true;
|
|
2700
|
-
}
|
|
2701
|
-
/**
|
|
2702
|
-
* Rebuilds this schema if it is dirty.
|
|
2703
|
-
*/
|
|
2704
|
-
_rebuild() {
|
|
2705
|
-
if (this._isDirty || this._schema == null) {
|
|
2706
|
-
this._schema = toEffectSchema(getSnapshot(this._persistentSchema).jsonSchema);
|
|
2707
|
-
this._isDirty = false;
|
|
2708
|
-
}
|
|
2709
|
-
}
|
|
2710
|
-
_getSchema() {
|
|
2711
|
-
this._rebuild();
|
|
2712
|
-
return this._schema;
|
|
2713
|
-
}
|
|
2714
|
-
};
|
|
2715
|
-
var unwrapOptionality = (property) => {
|
|
2716
|
-
if (!SchemaAST8.isUnion(property.type)) {
|
|
2717
|
-
return property;
|
|
2718
|
-
}
|
|
2719
|
-
return {
|
|
2720
|
-
...property,
|
|
2721
|
-
type: property.type.types.find((type) => !SchemaAST8.isUndefinedKeyword(type))
|
|
2722
|
-
};
|
|
2723
|
-
};
|
|
2268
|
+
}), EchoTypeKindSchema(TypeMetaSchemaDXN));
|
|
2724
2269
|
|
|
2725
2270
|
export {
|
|
2726
2271
|
RawObject,
|
|
2727
|
-
ATTR_META,
|
|
2728
|
-
MetaId,
|
|
2729
|
-
ObjectMetaSchema,
|
|
2730
|
-
getMeta,
|
|
2731
|
-
foreignKey,
|
|
2732
|
-
foreignKeyEquals,
|
|
2733
|
-
compareForeignKeys,
|
|
2734
|
-
ATTR_SELF_DXN,
|
|
2735
|
-
SelfDXNId,
|
|
2736
|
-
ATTR_DELETED,
|
|
2737
|
-
ObjectDeletedId,
|
|
2738
|
-
ObjectVersionId,
|
|
2739
|
-
ObjectDatabaseId,
|
|
2740
|
-
ATTR_RELATION_SOURCE,
|
|
2741
|
-
RelationSourceId,
|
|
2742
|
-
RelationSourceDXNId,
|
|
2743
|
-
ATTR_RELATION_TARGET,
|
|
2744
|
-
RelationTargetId,
|
|
2745
|
-
RelationTargetDXNId,
|
|
2746
2272
|
VersionTypeId,
|
|
2747
2273
|
compare,
|
|
2748
2274
|
sortByLabel,
|
|
2749
2275
|
sortByTypename,
|
|
2750
2276
|
sort,
|
|
2751
|
-
|
|
2752
|
-
|
|
2753
|
-
deleteKeys,
|
|
2754
|
-
addTag,
|
|
2755
|
-
removeTag,
|
|
2277
|
+
getStrongDependencyUris,
|
|
2278
|
+
getStrongDependencies,
|
|
2756
2279
|
EventId,
|
|
2757
2280
|
ChangeId,
|
|
2758
2281
|
batchEvents,
|
|
@@ -2790,20 +2313,19 @@ export {
|
|
|
2790
2313
|
makeObject,
|
|
2791
2314
|
subscribe,
|
|
2792
2315
|
change,
|
|
2793
|
-
|
|
2794
|
-
getObjectDXN,
|
|
2795
|
-
getDXN,
|
|
2796
|
-
getDatabase,
|
|
2316
|
+
TypeMetaSchemaDXN,
|
|
2797
2317
|
makeEchoTypeSchema,
|
|
2318
|
+
normalizeSchema,
|
|
2798
2319
|
EchoObjectSchema,
|
|
2799
2320
|
EchoRelationSchema,
|
|
2321
|
+
getDXNForRelationSchemaRef,
|
|
2322
|
+
EchoTypeKindSchema,
|
|
2800
2323
|
isVersion,
|
|
2801
2324
|
version,
|
|
2802
2325
|
versionValid,
|
|
2803
2326
|
compareVersions,
|
|
2804
2327
|
encodeVersion,
|
|
2805
2328
|
decodeVersion,
|
|
2806
|
-
normalizeSchema,
|
|
2807
2329
|
makeTypedEntityClass,
|
|
2808
2330
|
objectToJSON,
|
|
2809
2331
|
objectFromJSON,
|
|
@@ -2811,9 +2333,14 @@ export {
|
|
|
2811
2333
|
objectStructureToJson,
|
|
2812
2334
|
createObject,
|
|
2813
2335
|
isDeleted,
|
|
2814
|
-
createQueueDXN,
|
|
2815
2336
|
setValue,
|
|
2816
2337
|
getSnapshot,
|
|
2338
|
+
makeAtom,
|
|
2339
|
+
makeProperty,
|
|
2340
|
+
makeWithReactive,
|
|
2341
|
+
makeEntity,
|
|
2342
|
+
makeRelation,
|
|
2343
|
+
makeLabelAtom,
|
|
2817
2344
|
clone,
|
|
2818
2345
|
prettyFilter,
|
|
2819
2346
|
prettyQuery,
|
|
@@ -2821,14 +2348,6 @@ export {
|
|
|
2821
2348
|
updateFieldsInSchema,
|
|
2822
2349
|
removeFieldsFromSchema,
|
|
2823
2350
|
updateFieldNameInSchema,
|
|
2824
|
-
|
|
2825
|
-
|
|
2826
|
-
|
|
2827
|
-
isMutable,
|
|
2828
|
-
EchoSchema,
|
|
2829
|
-
JsonPath,
|
|
2830
|
-
JsonProp,
|
|
2831
|
-
getValue,
|
|
2832
|
-
splitJsonPath
|
|
2833
|
-
};
|
|
2834
|
-
//# sourceMappingURL=chunk-MOR5ERFM.mjs.map
|
|
2351
|
+
TypeSchema
|
|
2352
|
+
};
|
|
2353
|
+
//# sourceMappingURL=chunk-VQYL2OQF.mjs.map
|