@dxos/echo 0.8.4-staging.ac66bdf99f → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +102 -5
- package/README.md +7 -7
- package/dist/lib/neutral/Annotation.mjs +37 -6
- package/dist/lib/neutral/Database.mjs +6 -17
- package/dist/lib/neutral/Entity.mjs +31 -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 +29 -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-3PBP4V4O.mjs +101 -0
- package/dist/lib/neutral/chunk-3PBP4V4O.mjs.map +7 -0
- package/dist/lib/neutral/chunk-4ZUHOTCG.mjs +184 -0
- package/dist/lib/neutral/chunk-4ZUHOTCG.mjs.map +7 -0
- package/dist/lib/neutral/chunk-5SMDBFVB.mjs +108 -0
- package/dist/lib/neutral/chunk-5SMDBFVB.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-OS35K56T.mjs → chunk-5SUJPHAE.mjs} +3 -3
- package/dist/lib/neutral/{chunk-OS35K56T.mjs.map → chunk-5SUJPHAE.mjs.map} +2 -2
- 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-V36VO5SS.mjs → chunk-6YDI3J37.mjs} +32 -40
- package/dist/lib/neutral/chunk-6YDI3J37.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-MOR5ERFM.mjs → chunk-7FPIAJIV.mjs} +701 -1256
- package/dist/lib/neutral/chunk-7FPIAJIV.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-JUXPFOEI.mjs → chunk-7PI7C4EF.mjs} +48 -88
- package/dist/lib/neutral/chunk-7PI7C4EF.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-UI6MWK5W.mjs → chunk-EVK6XBXO.mjs} +16 -2
- package/dist/lib/neutral/chunk-EVK6XBXO.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-7RO7CPBZ.mjs → chunk-IGK6FN65.mjs} +2 -2
- package/dist/lib/neutral/{chunk-HBUZJNZO.mjs → chunk-LWXVKPPW.mjs} +94 -99
- package/dist/lib/neutral/chunk-LWXVKPPW.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-BVOFLCVF.mjs → chunk-MZ7K3MLL.mjs} +9 -6
- package/dist/lib/neutral/chunk-MZ7K3MLL.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-EAMSSLZC.mjs → chunk-QQIYS74I.mjs} +83 -46
- package/dist/lib/neutral/chunk-QQIYS74I.mjs.map +7 -0
- package/dist/lib/neutral/chunk-R5W6DXR4.mjs +678 -0
- package/dist/lib/neutral/chunk-R5W6DXR4.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-WAK4DMFV.mjs → chunk-RIVWNMSF.mjs} +12 -7
- package/dist/lib/neutral/chunk-RIVWNMSF.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-T6W2LEZU.mjs → chunk-SBVFRTST.mjs} +73 -38
- package/dist/lib/neutral/chunk-SBVFRTST.mjs.map +7 -0
- package/dist/lib/neutral/chunk-T6E37YIP.mjs +251 -0
- package/dist/lib/neutral/chunk-T6E37YIP.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-B4BASU6W.mjs → chunk-TYGKCRMK.mjs} +85 -76
- package/dist/lib/neutral/chunk-TYGKCRMK.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-4OIBYSXE.mjs → chunk-UUP46KUQ.mjs} +78 -32
- package/dist/lib/neutral/chunk-UUP46KUQ.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-G3IQMKF7.mjs → chunk-WTQJHC75.mjs} +111 -112
- package/dist/lib/neutral/chunk-WTQJHC75.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-TU3GW67D.mjs → chunk-ZGNNFYHS.mjs} +40 -40
- package/dist/lib/neutral/chunk-ZGNNFYHS.mjs.map +7 -0
- package/dist/lib/neutral/index.mjs +47 -41
- package/dist/lib/neutral/internal/index.mjs +137 -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 +56 -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 +101 -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 +66 -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 +104 -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 +362 -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 +79 -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 +38 -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/ref-array.d.ts +2 -2
- package/dist/types/src/internal/Ref/ref.d.ts +50 -19
- package/dist/types/src/internal/Ref/ref.d.ts.map +1 -1
- 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 +158 -4
- package/src/Collection.ts +5 -9
- package/src/Database.ts +93 -100
- package/src/Dataset.ts +10 -2
- package/src/Entity.test.ts +116 -6
- package/src/Entity.ts +134 -32
- package/src/Err.ts +4 -4
- package/src/Feed.ts +92 -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 +168 -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 +49 -6
- package/src/Type.test.ts +223 -18
- package/src/Type.ts +609 -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 +143 -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 +244 -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 +89 -33
- 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/ref-array.ts +3 -3
- package/src/internal/Ref/ref.test.ts +18 -27
- package/src/internal/Ref/ref.ts +137 -59
- 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.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-IGK6FN65.mjs.map} +0 -0
|
@@ -3,47 +3,70 @@ import {
|
|
|
3
3
|
JsonSchemaType,
|
|
4
4
|
toEffectSchema,
|
|
5
5
|
toJsonSchema
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-7PI7C4EF.mjs";
|
|
7
|
+
import {
|
|
8
|
+
ATTR_META,
|
|
9
|
+
EntityMetaSchema,
|
|
10
|
+
getMeta,
|
|
11
|
+
isEntity
|
|
12
|
+
} from "./chunk-4ZUHOTCG.mjs";
|
|
7
13
|
import {
|
|
8
14
|
Ref,
|
|
15
|
+
RefTypeId,
|
|
16
|
+
loadRefTarget,
|
|
9
17
|
refFromEncodedReference,
|
|
10
18
|
setRefResolver
|
|
11
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-WTQJHC75.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-R5W6DXR4.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,64 +104,6 @@ var sort = (...comparators) => {
|
|
|
135
104
|
};
|
|
136
105
|
};
|
|
137
106
|
|
|
138
|
-
// src/internal/common/api/meta.ts
|
|
139
|
-
import { assertArgument, invariant as invariant2 } from "@dxos/invariant";
|
|
140
|
-
var __dxlog_file2 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/common/api/meta.ts";
|
|
141
|
-
function getMetaChecked(entity) {
|
|
142
|
-
assertArgument(entity, "entity", "Should be an entity.");
|
|
143
|
-
const meta = getMeta(entity);
|
|
144
|
-
invariant2(meta != null, "Invalid entity.", {
|
|
145
|
-
F: __dxlog_file2,
|
|
146
|
-
L: 34,
|
|
147
|
-
S: this,
|
|
148
|
-
A: [
|
|
149
|
-
"meta != null",
|
|
150
|
-
"'Invalid entity.'"
|
|
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--;
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
};
|
|
178
|
-
var addTag = (entity, tag) => {
|
|
179
|
-
const meta = getMetaChecked(entity);
|
|
180
|
-
meta.tags ??= [];
|
|
181
|
-
meta.tags.push(tag);
|
|
182
|
-
};
|
|
183
|
-
var removeTag = (entity, tag) => {
|
|
184
|
-
const meta = getMetaChecked(entity);
|
|
185
|
-
if (!meta.tags) {
|
|
186
|
-
return;
|
|
187
|
-
}
|
|
188
|
-
for (let i = 0; i < meta.tags.length; i++) {
|
|
189
|
-
if (meta.tags[i] === tag) {
|
|
190
|
-
meta.tags.splice(i, 1);
|
|
191
|
-
i--;
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
};
|
|
195
|
-
|
|
196
107
|
// src/internal/common/proxy/symbols.ts
|
|
197
108
|
var EventId = /* @__PURE__ */ Symbol.for("@dxos/live-object/EventId");
|
|
198
109
|
var ChangeId = /* @__PURE__ */ Symbol.for("@dxos/live-object/ChangeId");
|
|
@@ -282,7 +193,7 @@ var defineHiddenProperty = (object, key, value2) => {
|
|
|
282
193
|
// src/internal/common/proxy/errors.ts
|
|
283
194
|
var MutationOutsideChangeContextError = class extends Error {
|
|
284
195
|
constructor(operation, suggestion) {
|
|
285
|
-
super(`Cannot ${operation} outside of Obj.
|
|
196
|
+
super(`Cannot ${operation} outside of Obj.update(). Use Obj.update(obj, (mutableObj) => { ${suggestion} }) instead.`);
|
|
286
197
|
this.name = "MutationOutsideChangeContextError";
|
|
287
198
|
}
|
|
288
199
|
};
|
|
@@ -297,10 +208,10 @@ var createArrayMethodError = (method) => {
|
|
|
297
208
|
};
|
|
298
209
|
|
|
299
210
|
// src/internal/common/proxy/json-serializer.ts
|
|
300
|
-
import { invariant
|
|
301
|
-
import {
|
|
302
|
-
import { deepMapValues } from "@dxos/util";
|
|
303
|
-
var
|
|
211
|
+
import { invariant } from "@dxos/invariant";
|
|
212
|
+
import { EID } from "@dxos/keys";
|
|
213
|
+
import { deepMapValues, encodeUint8ArrayToJson } from "@dxos/util";
|
|
214
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/common/proxy/json-serializer.ts";
|
|
304
215
|
var attachTypedJsonSerializer = (obj) => {
|
|
305
216
|
const descriptor = Object.getOwnPropertyDescriptor(obj, "toJSON");
|
|
306
217
|
if (descriptor) {
|
|
@@ -320,39 +231,23 @@ var typedJsonSerializer = function() {
|
|
|
320
231
|
id
|
|
321
232
|
};
|
|
322
233
|
if (this[TypeId]) {
|
|
323
|
-
result[ATTR_TYPE] = this[TypeId]
|
|
234
|
+
result[ATTR_TYPE] = this[TypeId];
|
|
324
235
|
}
|
|
325
236
|
if (this[MetaId]) {
|
|
326
237
|
result[ATTR_META] = serializeMeta(this[MetaId]);
|
|
327
238
|
}
|
|
328
|
-
if (this[
|
|
329
|
-
result[
|
|
239
|
+
if (this[SelfURIId]) {
|
|
240
|
+
result[ATTR_SELF_URI] = this[SelfURIId];
|
|
330
241
|
}
|
|
331
242
|
if (this[RelationSourceDXNId]) {
|
|
332
243
|
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();
|
|
244
|
+
invariant(EID.isEID(sourceDXN), void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 44, S: this, A: ["EID.isEID(sourceDXN)", ""] });
|
|
245
|
+
result[ATTR_RELATION_SOURCE] = sourceDXN;
|
|
343
246
|
}
|
|
344
247
|
if (this[RelationTargetDXNId]) {
|
|
345
248
|
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();
|
|
249
|
+
invariant(EID.isEID(targetDXN), void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 49, S: this, A: ["EID.isEID(targetDXN)", ""] });
|
|
250
|
+
result[ATTR_RELATION_TARGET] = targetDXN;
|
|
356
251
|
}
|
|
357
252
|
Object.assign(result, serializeData(rest));
|
|
358
253
|
return result;
|
|
@@ -362,19 +257,32 @@ var serializeData = (data) => {
|
|
|
362
257
|
if (Ref.isRef(value2)) {
|
|
363
258
|
return value2.noInline().encode();
|
|
364
259
|
}
|
|
260
|
+
if (value2 instanceof Uint8Array) {
|
|
261
|
+
return encodeUint8ArrayToJson(value2);
|
|
262
|
+
}
|
|
365
263
|
return recurse(value2);
|
|
366
264
|
});
|
|
367
265
|
};
|
|
368
266
|
var serializeMeta = (meta) => {
|
|
369
|
-
|
|
267
|
+
const { tags, annotations: annotations5, ...rest } = meta;
|
|
268
|
+
const compact = {
|
|
269
|
+
...rest,
|
|
270
|
+
...tags != null && tags.length > 0 ? {
|
|
271
|
+
tags
|
|
272
|
+
} : {},
|
|
273
|
+
...annotations5 != null && Object.keys(annotations5).length > 0 ? {
|
|
274
|
+
annotations: annotations5
|
|
275
|
+
} : {}
|
|
276
|
+
};
|
|
277
|
+
return serializeData(compact);
|
|
370
278
|
};
|
|
371
279
|
|
|
372
280
|
// src/internal/common/proxy/make-object.ts
|
|
373
|
-
import {
|
|
281
|
+
import { EntityId } from "@dxos/keys";
|
|
374
282
|
|
|
375
283
|
// src/internal/common/proxy/proxy-utils.ts
|
|
376
|
-
import { invariant as
|
|
377
|
-
var
|
|
284
|
+
import { invariant as invariant2 } from "@dxos/invariant";
|
|
285
|
+
var __dxlog_file2 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/common/proxy/proxy-utils.ts";
|
|
378
286
|
var symbolIsProxy = /* @__PURE__ */ Symbol.for("@dxos/schema/Proxy");
|
|
379
287
|
var isProxy = (value2) => !!value2?.[symbolIsProxy];
|
|
380
288
|
var isValidProxyTarget = (value2) => {
|
|
@@ -388,15 +296,7 @@ var isValidProxyTarget = (value2) => {
|
|
|
388
296
|
};
|
|
389
297
|
var getProxySlot = (proxy) => {
|
|
390
298
|
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
|
-
});
|
|
299
|
+
invariant2(value2 instanceof ProxyHandlerSlot, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 22, S: void 0, A: ["value instanceof ProxyHandlerSlot", ""] });
|
|
400
300
|
return value2;
|
|
401
301
|
};
|
|
402
302
|
var getProxyTarget = (proxy) => {
|
|
@@ -430,15 +330,7 @@ var ProxyHandlerSlot = class {
|
|
|
430
330
|
this._handler = _handler;
|
|
431
331
|
}
|
|
432
332
|
get handler() {
|
|
433
|
-
|
|
434
|
-
F: __dxlog_file4,
|
|
435
|
-
L: 91,
|
|
436
|
-
S: this,
|
|
437
|
-
A: [
|
|
438
|
-
"this._handler",
|
|
439
|
-
""
|
|
440
|
-
]
|
|
441
|
-
});
|
|
333
|
+
invariant2(this._handler, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 71, S: this, A: ["this._handler", ""] });
|
|
442
334
|
return this._handler;
|
|
443
335
|
}
|
|
444
336
|
// TODO(burdon): Requires comment.
|
|
@@ -491,15 +383,15 @@ var ProxyHandlerSlot = class {
|
|
|
491
383
|
};
|
|
492
384
|
|
|
493
385
|
// src/internal/common/proxy/typed-handler.ts
|
|
494
|
-
import * as
|
|
386
|
+
import * as Schema3 from "effect/Schema";
|
|
495
387
|
import * as SchemaAST3 from "effect/SchemaAST";
|
|
496
388
|
import { Event } from "@dxos/async";
|
|
497
389
|
import { inspectCustom } from "@dxos/debug";
|
|
498
|
-
import { invariant as
|
|
390
|
+
import { assertArgument, invariant as invariant5 } from "@dxos/invariant";
|
|
499
391
|
|
|
500
392
|
// src/internal/common/proxy/ownership.ts
|
|
501
|
-
import { invariant as
|
|
502
|
-
var
|
|
393
|
+
import { invariant as invariant3 } from "@dxos/invariant";
|
|
394
|
+
var __dxlog_file3 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/common/proxy/ownership.ts";
|
|
503
395
|
var EchoOwner = /* @__PURE__ */ Symbol.for("@dxos/echo/Owner");
|
|
504
396
|
var getRawTarget = (value2) => {
|
|
505
397
|
return isProxy(value2) ? getProxyTarget(value2) : value2;
|
|
@@ -528,15 +420,7 @@ var setOwnerRecursive = (value2, owner, options = {}) => {
|
|
|
528
420
|
}
|
|
529
421
|
if (!isRootEchoObject) {
|
|
530
422
|
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
|
-
});
|
|
423
|
+
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
424
|
}
|
|
541
425
|
defineHiddenProperty(actualValue, EchoOwner, owner);
|
|
542
426
|
const recursiveOptions = {
|
|
@@ -603,15 +487,7 @@ var hasForeignOwner = (value2, target) => traverseObjectGraph(value2, (v) => {
|
|
|
603
487
|
});
|
|
604
488
|
var MAX_OWNER_DEPTH = 100;
|
|
605
489
|
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
|
-
});
|
|
490
|
+
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
491
|
if (KindId in target) {
|
|
616
492
|
return target;
|
|
617
493
|
}
|
|
@@ -675,18 +551,18 @@ var ReactiveArray = class extends Array {
|
|
|
675
551
|
};
|
|
676
552
|
|
|
677
553
|
// src/internal/common/proxy/schema-validator.ts
|
|
678
|
-
import * as
|
|
554
|
+
import * as Schema2 from "effect/Schema";
|
|
679
555
|
import * as SchemaAST2 from "effect/SchemaAST";
|
|
680
|
-
import { invariant as
|
|
556
|
+
import { invariant as invariant4 } from "@dxos/invariant";
|
|
681
557
|
import { log } from "@dxos/log";
|
|
682
|
-
var
|
|
558
|
+
var __dxlog_file4 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/common/proxy/schema-validator.ts";
|
|
683
559
|
var SchemaValidator = class {
|
|
684
560
|
/**
|
|
685
561
|
* Recursively check that schema specifies constructions we can handle.
|
|
686
562
|
* Validates there are no ambiguous discriminated union types.
|
|
687
563
|
*/
|
|
688
564
|
static validateSchema(schema) {
|
|
689
|
-
const visitAll = (nodes) => nodes.forEach((node) => this.validateSchema(
|
|
565
|
+
const visitAll = (nodes) => nodes.forEach((node) => this.validateSchema(Schema2.make(node)));
|
|
690
566
|
if (SchemaAST2.isUnion(schema.ast)) {
|
|
691
567
|
const typeAstList = schema.ast.types.filter((type) => SchemaAST2.isTypeLiteral(type));
|
|
692
568
|
if (typeAstList.length > 1) {
|
|
@@ -733,70 +609,41 @@ var SchemaValidator = class {
|
|
|
733
609
|
log.warn("unknown property", {
|
|
734
610
|
path: propertyPath,
|
|
735
611
|
property: propertyName
|
|
736
|
-
}, {
|
|
737
|
-
F: __dxlog_file6,
|
|
738
|
-
L: 71,
|
|
739
|
-
S: this,
|
|
740
|
-
C: (f, a) => f(...a)
|
|
741
|
-
});
|
|
612
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 60, S: this });
|
|
742
613
|
continue;
|
|
743
614
|
}
|
|
744
|
-
schema =
|
|
615
|
+
schema = Schema2.make(propertyType).annotations(propertyType.annotations);
|
|
745
616
|
}
|
|
746
617
|
}
|
|
747
618
|
return schema;
|
|
748
619
|
}
|
|
749
620
|
static getTargetPropertySchema(target, prop) {
|
|
750
621
|
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
|
-
});
|
|
622
|
+
invariant4(schema, "target has no schema", { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 73, S: this, A: ["schema", "'target has no schema'"] });
|
|
760
623
|
const arrayAst = unwrapArray(schema.ast);
|
|
761
624
|
if (arrayAst != null) {
|
|
762
625
|
return getArrayElementSchema(arrayAst, prop);
|
|
763
626
|
}
|
|
764
627
|
const propertyType = getPropertyType(schema.ast, prop.toString(), (prop2) => target[prop2]);
|
|
765
628
|
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);
|
|
629
|
+
return Schema2.Any;
|
|
630
|
+
}
|
|
631
|
+
invariant4(propertyType, `invalid property: ${prop.toString()}`, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 82, S: this, A: ["propertyType", "`invalid property: ${prop.toString()}`"] });
|
|
632
|
+
return Schema2.make(propertyType);
|
|
778
633
|
}
|
|
779
634
|
};
|
|
780
635
|
var getArrayElementSchema = (tupleAst, property) => {
|
|
781
636
|
const elementIndex = typeof property === "string" ? parseInt(property, 10) : Number.NaN;
|
|
782
637
|
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;
|
|
638
|
+
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)}`"] });
|
|
639
|
+
return Schema2.Number;
|
|
793
640
|
}
|
|
794
641
|
if (elementIndex < tupleAst.elements.length) {
|
|
795
642
|
const elementType = tupleAst.elements[elementIndex].type;
|
|
796
|
-
return
|
|
643
|
+
return Schema2.make(elementType).annotations(elementType.annotations);
|
|
797
644
|
}
|
|
798
645
|
const restType = tupleAst.rest;
|
|
799
|
-
return
|
|
646
|
+
return Schema2.make(restType[0].type).annotations(restType[0].annotations);
|
|
800
647
|
};
|
|
801
648
|
var flattenUnion = (typeAst) => SchemaAST2.isUnion(typeAst) ? typeAst.types.flatMap(flattenUnion) : [
|
|
802
649
|
typeAst
|
|
@@ -813,15 +660,7 @@ var getProperties = (typeAst, getTargetPropertyFn) => {
|
|
|
813
660
|
const typeDiscriminators = getTypeDiscriminators(typeAstList);
|
|
814
661
|
const targetPropertyValue = getTargetPropertyFn(String(typeDiscriminators[0].name));
|
|
815
662
|
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
|
-
});
|
|
663
|
+
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
664
|
return SchemaAST2.getPropertySignatures(typeAstList[typeIndex]);
|
|
826
665
|
};
|
|
827
666
|
var getPropertyType = (ast, propertyName, getTargetPropertyFn) => {
|
|
@@ -851,15 +690,7 @@ var getTypeDiscriminators = (typeAstList) => {
|
|
|
851
690
|
const isValidDiscriminator = discriminatorPropCandidates.every((p) => p.name === propertyName && !p.isOptional);
|
|
852
691
|
const everyTypeHasDiscriminator = discriminatorPropCandidates.length === typeAstList.length;
|
|
853
692
|
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
|
-
});
|
|
693
|
+
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
694
|
return discriminatorPropCandidates;
|
|
864
695
|
};
|
|
865
696
|
var unwrapAst = (rootAst, predicate) => {
|
|
@@ -885,15 +716,7 @@ var unwrapAst = (rootAst, predicate) => {
|
|
|
885
716
|
};
|
|
886
717
|
var unwrapArray = (ast) => unwrapAst(ast, SchemaAST2.isTupleType);
|
|
887
718
|
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
|
-
});
|
|
719
|
+
invariant4(SchemaAST2.isTypeLiteral(schema.ast), void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 184, S: void 0, A: ["SchemaAST.isTypeLiteral(schema.ast)", ""] });
|
|
897
720
|
const idProperty = SchemaAST2.getPropertySignatures(schema.ast).find((prop) => prop.name === "id");
|
|
898
721
|
if (idProperty != null) {
|
|
899
722
|
throw new Error('"id" property name is reserved');
|
|
@@ -901,7 +724,7 @@ var checkIdNotPresentOnSchema = (schema) => {
|
|
|
901
724
|
};
|
|
902
725
|
|
|
903
726
|
// src/internal/common/proxy/typed-handler.ts
|
|
904
|
-
var
|
|
727
|
+
var __dxlog_file5 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/common/proxy/typed-handler.ts";
|
|
905
728
|
var deepCopy = (value2, visited = /* @__PURE__ */ new Map()) => {
|
|
906
729
|
if (value2 == null || typeof value2 !== "object") {
|
|
907
730
|
return value2;
|
|
@@ -954,24 +777,8 @@ var TypedReactiveHandler = class _TypedReactiveHandler {
|
|
|
954
777
|
constructor() {
|
|
955
778
|
}
|
|
956
779
|
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
|
-
});
|
|
780
|
+
assertArgument(typeof target === "object" && target !== null, "target");
|
|
781
|
+
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
782
|
const hasOwner = !!getOwner(target);
|
|
976
783
|
if (!(EventId in target) && !hasOwner) {
|
|
977
784
|
defineHiddenProperty(target, EventId, new Event());
|
|
@@ -1013,6 +820,22 @@ var TypedReactiveHandler = class _TypedReactiveHandler {
|
|
|
1013
820
|
}
|
|
1014
821
|
return (callback) => executeChange(target, target, receiver, callback);
|
|
1015
822
|
}
|
|
823
|
+
case TypeEntityId: {
|
|
824
|
+
return Reflect.get(target, prop, receiver);
|
|
825
|
+
}
|
|
826
|
+
case StaticTypeSchemaSlot: {
|
|
827
|
+
const existing = Reflect.get(target, prop, receiver);
|
|
828
|
+
if (existing !== void 0) {
|
|
829
|
+
return existing;
|
|
830
|
+
}
|
|
831
|
+
const jsonSchema = target.jsonSchema;
|
|
832
|
+
if (jsonSchema == null) {
|
|
833
|
+
return void 0;
|
|
834
|
+
}
|
|
835
|
+
const rebuilt = toEffectSchema(jsonSchema);
|
|
836
|
+
defineHiddenProperty(target, StaticTypeSchemaSlot, rebuilt);
|
|
837
|
+
return rebuilt;
|
|
838
|
+
}
|
|
1016
839
|
}
|
|
1017
840
|
if (Object.getOwnPropertyDescriptor(target, prop)?.get) {
|
|
1018
841
|
return Reflect.get(target, prop, receiver);
|
|
@@ -1028,7 +851,7 @@ var TypedReactiveHandler = class _TypedReactiveHandler {
|
|
|
1028
851
|
const isInitialized = ChangeId in echoRoot || EventId in echoRoot;
|
|
1029
852
|
const isSymbolProp = typeof prop === "symbol";
|
|
1030
853
|
if (isInitialized && !isSymbolProp && !isInChangeContext(echoRoot)) {
|
|
1031
|
-
throw new Error(`Cannot modify object property "${String(prop)}" outside of Obj.
|
|
854
|
+
throw new Error(`Cannot modify object property "${String(prop)}" outside of Obj.update(). Use Obj.update(obj, (mutableObj) => { mutableObj.property = value; }) instead.`);
|
|
1032
855
|
}
|
|
1033
856
|
let result = false;
|
|
1034
857
|
this._inSet = true;
|
|
@@ -1036,6 +859,9 @@ var TypedReactiveHandler = class _TypedReactiveHandler {
|
|
|
1036
859
|
batchEvents(() => {
|
|
1037
860
|
const { echoRoot: _, preparedValue } = this._prepareValueForAssignment(target, prop, value2);
|
|
1038
861
|
result = Reflect.set(target, prop, preparedValue, receiver);
|
|
862
|
+
if (prop === "jsonSchema") {
|
|
863
|
+
Reflect.deleteProperty(target, StaticTypeSchemaSlot);
|
|
864
|
+
}
|
|
1039
865
|
if (isInitialized) {
|
|
1040
866
|
queueNotification(echoRoot);
|
|
1041
867
|
notifyOwnerChain(target);
|
|
@@ -1067,7 +893,7 @@ var TypedReactiveHandler = class _TypedReactiveHandler {
|
|
|
1067
893
|
const isInitialized = ChangeId in echoRoot || EventId in echoRoot;
|
|
1068
894
|
const isSymbolProp = typeof property === "symbol";
|
|
1069
895
|
if (isInitialized && !isSymbolProp && !isInChangeContext(echoRoot)) {
|
|
1070
|
-
throw new Error(`Cannot modify object property "${String(property)}" outside of Obj.
|
|
896
|
+
throw new Error(`Cannot modify object property "${String(property)}" outside of Obj.update(). Use Obj.update(obj, (mutableObj) => { mutableObj.property = value; }) instead.`);
|
|
1071
897
|
}
|
|
1072
898
|
const { echoRoot: _, preparedValue } = this._prepareValueForAssignment(target, property, attributes.value);
|
|
1073
899
|
const result = Reflect.defineProperty(target, property, {
|
|
@@ -1127,7 +953,7 @@ var TypedReactiveHandler = class _TypedReactiveHandler {
|
|
|
1127
953
|
return value2;
|
|
1128
954
|
}
|
|
1129
955
|
const schema = SchemaValidator.getTargetPropertySchema(target, prop);
|
|
1130
|
-
const _ =
|
|
956
|
+
const _ = Schema3.asserts(schema)(value2);
|
|
1131
957
|
if (isValidProxyTarget(value2)) {
|
|
1132
958
|
setSchemaProperties(value2, schema);
|
|
1133
959
|
}
|
|
@@ -1148,12 +974,21 @@ var toJSON = (target) => {
|
|
|
1148
974
|
...target
|
|
1149
975
|
};
|
|
1150
976
|
};
|
|
1151
|
-
var setSchemaProperties = (obj, schema) => {
|
|
1152
|
-
const schemaType =
|
|
977
|
+
var setSchemaProperties = (obj, schema, typeSource) => {
|
|
978
|
+
const schemaType = getSchemaURI(schema);
|
|
1153
979
|
if (schemaType != null) {
|
|
1154
980
|
defineHiddenProperty(obj, TypeId, schemaType);
|
|
1155
981
|
}
|
|
1156
|
-
|
|
982
|
+
if (typeSource != null) {
|
|
983
|
+
defineHiddenProperty(obj, TypeEntityId, typeSource);
|
|
984
|
+
Object.defineProperty(obj, SchemaId, {
|
|
985
|
+
get: () => typeSource[StaticTypeSchemaSlot] ?? schema,
|
|
986
|
+
enumerable: false,
|
|
987
|
+
configurable: true
|
|
988
|
+
});
|
|
989
|
+
} else {
|
|
990
|
+
defineHiddenProperty(obj, SchemaId, schema);
|
|
991
|
+
}
|
|
1157
992
|
for (const key in obj) {
|
|
1158
993
|
if (isValidProxyTarget(obj[key])) {
|
|
1159
994
|
const elementSchema = SchemaValidator.getTargetPropertySchema(obj, key);
|
|
@@ -1163,14 +998,14 @@ var setSchemaProperties = (obj, schema) => {
|
|
|
1163
998
|
}
|
|
1164
999
|
}
|
|
1165
1000
|
};
|
|
1166
|
-
var prepareTypedTarget = (target, schema) => {
|
|
1001
|
+
var prepareTypedTarget = (target, schema, typeSource) => {
|
|
1167
1002
|
if (!SchemaAST3.isTypeLiteral(schema.ast)) {
|
|
1168
1003
|
throw new Error("schema has to describe an object type");
|
|
1169
1004
|
}
|
|
1170
1005
|
SchemaValidator.validateSchema(schema);
|
|
1171
|
-
const _ =
|
|
1006
|
+
const _ = Schema3.asserts(schema)(target);
|
|
1172
1007
|
makeArraysReactive(target);
|
|
1173
|
-
setSchemaProperties(target, schema);
|
|
1008
|
+
setSchemaProperties(target, schema, typeSource);
|
|
1174
1009
|
};
|
|
1175
1010
|
var makeArraysReactive = (target) => {
|
|
1176
1011
|
for (const key in target) {
|
|
@@ -1187,10 +1022,10 @@ var makeArraysReactive = (target) => {
|
|
|
1187
1022
|
};
|
|
1188
1023
|
|
|
1189
1024
|
// src/internal/common/proxy/make-object.ts
|
|
1190
|
-
var makeObject = (schema, obj, meta) => {
|
|
1191
|
-
return createReactiveObject(Object.assign({}, obj), meta, schema);
|
|
1025
|
+
var makeObject = (schema, obj, meta, typeSource) => {
|
|
1026
|
+
return createReactiveObject(Object.assign({}, obj), meta, schema, typeSource);
|
|
1192
1027
|
};
|
|
1193
|
-
var createReactiveObject = (obj, meta, schema) => {
|
|
1028
|
+
var createReactiveObject = (obj, meta, schema, typeSource) => {
|
|
1194
1029
|
if (!isValidProxyTarget(obj)) {
|
|
1195
1030
|
throw new Error("Value cannot be made into a reactive object.");
|
|
1196
1031
|
}
|
|
@@ -1210,7 +1045,7 @@ var createReactiveObject = (obj, meta, schema) => {
|
|
|
1210
1045
|
if (parent !== void 0) {
|
|
1211
1046
|
defineHiddenProperty(obj, ParentId, parent);
|
|
1212
1047
|
}
|
|
1213
|
-
prepareTypedTarget(obj, schema);
|
|
1048
|
+
prepareTypedTarget(obj, schema, typeSource);
|
|
1214
1049
|
attachTypedJsonSerializer(obj);
|
|
1215
1050
|
const proxy = createProxy(obj, TypedReactiveHandler.instance);
|
|
1216
1051
|
const metaProxy = obj[MetaId];
|
|
@@ -1224,22 +1059,30 @@ var createReactiveObject = (obj, meta, schema) => {
|
|
|
1224
1059
|
};
|
|
1225
1060
|
var setIdOnTarget = (target) => {
|
|
1226
1061
|
if ("id" in target && target.id !== void 0 && target.id !== null) {
|
|
1227
|
-
if (!
|
|
1062
|
+
if (!EntityId.isValid(target.id)) {
|
|
1228
1063
|
throw new Error("Invalid object id format.");
|
|
1229
1064
|
}
|
|
1230
1065
|
} else {
|
|
1231
|
-
target.id =
|
|
1066
|
+
target.id = EntityId.random();
|
|
1232
1067
|
}
|
|
1233
1068
|
};
|
|
1234
|
-
var initMeta = (obj, meta
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1069
|
+
var initMeta = (obj, meta) => {
|
|
1070
|
+
const fullMeta = {
|
|
1071
|
+
...meta,
|
|
1072
|
+
keys: meta?.keys ?? [],
|
|
1073
|
+
tags: meta?.tags ?? [],
|
|
1074
|
+
annotations: meta?.annotations ?? {}
|
|
1075
|
+
};
|
|
1076
|
+
prepareTypedTarget(fullMeta, EntityMetaSchema);
|
|
1077
|
+
defineHiddenProperty(obj, MetaId, createProxy(fullMeta, TypedReactiveHandler.instance));
|
|
1239
1078
|
};
|
|
1240
1079
|
|
|
1241
1080
|
// src/internal/common/proxy/reactive.ts
|
|
1242
1081
|
var subscribe = (obj, callback) => {
|
|
1082
|
+
if (!isProxy(obj)) {
|
|
1083
|
+
return () => {
|
|
1084
|
+
};
|
|
1085
|
+
}
|
|
1243
1086
|
const target = getProxyTarget(obj);
|
|
1244
1087
|
if (target && EventId in target) {
|
|
1245
1088
|
return target[EventId].on(callback);
|
|
@@ -1256,208 +1099,177 @@ var change = (obj, callback) => {
|
|
|
1256
1099
|
}
|
|
1257
1100
|
};
|
|
1258
1101
|
|
|
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
|
-
]
|
|
1102
|
+
// src/internal/Entity/entity.ts
|
|
1103
|
+
import * as Schema4 from "effect/Schema";
|
|
1104
|
+
import * as SchemaAST4 from "effect/SchemaAST";
|
|
1105
|
+
import { DXN, EntityId as EntityId2 } from "@dxos/keys";
|
|
1106
|
+
var TypeMetaSchemaDXN = DXN.make("org.dxos.type.schema", "0.1.0");
|
|
1107
|
+
var persistentEntitySchema = (() => {
|
|
1108
|
+
const typename = DXN.getName(TypeMetaSchemaDXN);
|
|
1109
|
+
const version2 = DXN.getVersion(TypeMetaSchemaDXN);
|
|
1110
|
+
const struct = Schema4.Struct({
|
|
1111
|
+
name: Schema4.optional(Schema4.String),
|
|
1112
|
+
jsonSchema: JsonSchemaType.pipe(Schema4.optional),
|
|
1113
|
+
id: EntityId2
|
|
1277
1114
|
});
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1115
|
+
const ast = SchemaAST4.annotations(struct.ast, {
|
|
1116
|
+
[TypeAnnotationId]: {
|
|
1117
|
+
kind: EntityKind.Type,
|
|
1118
|
+
typename,
|
|
1119
|
+
version: version2
|
|
1120
|
+
},
|
|
1121
|
+
[SchemaAST4.JSONSchemaAnnotationId]: makeTypeJsonSchemaAnnotation({
|
|
1122
|
+
kind: EntityKind.Type,
|
|
1123
|
+
typename,
|
|
1124
|
+
version: version2
|
|
1125
|
+
})
|
|
1287
1126
|
});
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1127
|
+
return Schema4.make(ast);
|
|
1128
|
+
})();
|
|
1129
|
+
var makeEchoTypeSchema = (fields, ast, typename, version2, kind, computeJsonSchema, explicitId) => {
|
|
1130
|
+
const sourceSchema = Schema4.make(ast);
|
|
1131
|
+
const meta = {
|
|
1132
|
+
keys: [],
|
|
1133
|
+
key: typename,
|
|
1134
|
+
version: version2
|
|
1135
|
+
};
|
|
1136
|
+
const id = explicitId ?? EntityId2.deterministic(typename, version2);
|
|
1137
|
+
const entity = makeObject(persistentEntitySchema, {
|
|
1138
|
+
id
|
|
1139
|
+
}, meta);
|
|
1140
|
+
const target = getProxyTarget(entity);
|
|
1141
|
+
let memoizedJsonSchema;
|
|
1142
|
+
Object.defineProperty(target, "jsonSchema", {
|
|
1143
|
+
configurable: true,
|
|
1144
|
+
enumerable: true,
|
|
1145
|
+
get() {
|
|
1146
|
+
return memoizedJsonSchema ??= computeJsonSchema();
|
|
1147
|
+
},
|
|
1148
|
+
set(value2) {
|
|
1149
|
+
memoizedJsonSchema = value2;
|
|
1150
|
+
}
|
|
1296
1151
|
});
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
"'Invalid object model: invalid entity kind'"
|
|
1304
|
-
]
|
|
1152
|
+
defineHiddenProperty(target, StaticTypeSchemaSlot, sourceSchema);
|
|
1153
|
+
defineHiddenProperty(target, SchemaKindId, kind);
|
|
1154
|
+
Object.defineProperty(target, "fields", {
|
|
1155
|
+
configurable: true,
|
|
1156
|
+
enumerable: false,
|
|
1157
|
+
get: () => fields
|
|
1305
1158
|
});
|
|
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
|
-
}
|
|
1159
|
+
return entity;
|
|
1160
|
+
};
|
|
1345
1161
|
|
|
1346
|
-
// src/internal/Entity/
|
|
1162
|
+
// src/internal/Entity/object.ts
|
|
1347
1163
|
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
|
-
};
|
|
1164
|
+
import * as SchemaAST5 from "effect/SchemaAST";
|
|
1165
|
+
import { invariant as invariant6 } from "@dxos/invariant";
|
|
1166
|
+
import { DXN as DXN2 } from "@dxos/keys";
|
|
1381
1167
|
|
|
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;
|
|
1168
|
+
// src/internal/JsonSchema/json-schema-normalize.ts
|
|
1169
|
+
var normalizeSchema = (schema) => {
|
|
1170
|
+
const copy = structuredClone(schema);
|
|
1171
|
+
go(copy);
|
|
1172
|
+
return copy;
|
|
1396
1173
|
};
|
|
1397
|
-
var
|
|
1398
|
-
|
|
1399
|
-
|
|
1174
|
+
var go = (schema) => {
|
|
1175
|
+
if (typeof schema !== "object" || schema === null) {
|
|
1176
|
+
return;
|
|
1177
|
+
}
|
|
1178
|
+
if (schema.exclusiveMaximum === true) {
|
|
1179
|
+
schema.exclusiveMaximum = schema.maximum;
|
|
1180
|
+
delete schema.exclusiveMaximum;
|
|
1181
|
+
} else if (schema.exclusiveMaximum === false) {
|
|
1182
|
+
delete schema.exclusiveMaximum;
|
|
1183
|
+
}
|
|
1184
|
+
if (schema.exclusiveMinimum === true) {
|
|
1185
|
+
schema.exclusiveMinimum = schema.minimum;
|
|
1186
|
+
delete schema.exclusiveMinimum;
|
|
1187
|
+
} else if (schema.exclusiveMinimum === false) {
|
|
1188
|
+
delete schema.exclusiveMinimum;
|
|
1189
|
+
}
|
|
1190
|
+
for (const key of Object.keys(schema)) {
|
|
1191
|
+
if (!JsonSchemaFields.includes(key)) {
|
|
1192
|
+
delete schema[key];
|
|
1193
|
+
}
|
|
1194
|
+
}
|
|
1195
|
+
if (schema.properties) {
|
|
1196
|
+
goOnRecord(schema.properties);
|
|
1197
|
+
}
|
|
1198
|
+
if (schema.patternProperties) {
|
|
1199
|
+
goOnRecord(schema.patternProperties);
|
|
1200
|
+
}
|
|
1201
|
+
if (schema.propertyNames) {
|
|
1202
|
+
go(schema.propertyNames);
|
|
1203
|
+
}
|
|
1204
|
+
if (schema.definitions) {
|
|
1205
|
+
goOnRecord(schema.definitions);
|
|
1206
|
+
}
|
|
1207
|
+
if (schema.items) {
|
|
1208
|
+
maybeGoOnArray(schema.items);
|
|
1209
|
+
}
|
|
1210
|
+
if (schema.additionalItems) {
|
|
1211
|
+
maybeGoOnArray(schema.additionalItems);
|
|
1212
|
+
}
|
|
1213
|
+
if (schema.contains) {
|
|
1214
|
+
go(schema.contains);
|
|
1215
|
+
}
|
|
1216
|
+
if (schema.if) {
|
|
1217
|
+
go(schema.if);
|
|
1218
|
+
}
|
|
1219
|
+
if (schema.then) {
|
|
1220
|
+
go(schema.then);
|
|
1221
|
+
}
|
|
1222
|
+
if (schema.else) {
|
|
1223
|
+
go(schema.else);
|
|
1224
|
+
}
|
|
1225
|
+
if (schema.allOf) {
|
|
1226
|
+
maybeGoOnArray(schema.allOf);
|
|
1227
|
+
}
|
|
1228
|
+
if (schema.anyOf) {
|
|
1229
|
+
maybeGoOnArray(schema.anyOf);
|
|
1230
|
+
}
|
|
1231
|
+
if (schema.oneOf) {
|
|
1232
|
+
maybeGoOnArray(schema.oneOf);
|
|
1233
|
+
}
|
|
1234
|
+
if (schema.not) {
|
|
1235
|
+
go(schema.not);
|
|
1236
|
+
}
|
|
1237
|
+
if (schema.$defs) {
|
|
1238
|
+
goOnRecord(schema.$defs);
|
|
1239
|
+
}
|
|
1240
|
+
if (schema.reference) {
|
|
1241
|
+
go(schema.reference.schema);
|
|
1242
|
+
}
|
|
1400
1243
|
};
|
|
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);
|
|
1244
|
+
var maybeGoOnArray = (value2) => {
|
|
1245
|
+
if (Array.isArray(value2)) {
|
|
1246
|
+
for (const item of value2) {
|
|
1247
|
+
go(item);
|
|
1427
1248
|
}
|
|
1428
|
-
}
|
|
1249
|
+
} else if (typeof value2 === "object" && value2 !== null) {
|
|
1250
|
+
go(value2);
|
|
1251
|
+
}
|
|
1252
|
+
};
|
|
1253
|
+
var goOnRecord = (record) => {
|
|
1254
|
+
for (const key of Object.keys(record)) {
|
|
1255
|
+
go(record[key]);
|
|
1256
|
+
}
|
|
1429
1257
|
};
|
|
1430
1258
|
|
|
1431
1259
|
// src/internal/Entity/object.ts
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
|
|
1260
|
+
var __dxlog_file6 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/Entity/object.ts";
|
|
1261
|
+
var EchoObjectSchema = (dxn, options) => {
|
|
1262
|
+
const typename = DXN2.getName(dxn);
|
|
1263
|
+
const version2 = DXN2.getVersion(dxn);
|
|
1264
|
+
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
1265
|
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
|
-
});
|
|
1266
|
+
invariant6(typeof TypeAnnotationId === "symbol", "Sanity.", { "~LogMeta": "~LogMeta", F: __dxlog_file6, L: 21, S: void 0, A: ["typeof TypeAnnotationId === 'symbol'", "'Sanity.'"] });
|
|
1267
|
+
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
1268
|
const fields = self.fields ?? {};
|
|
1457
|
-
const schemaWithId =
|
|
1458
|
-
id:
|
|
1269
|
+
const schemaWithId = Schema5.extend(self, Schema5.Struct({
|
|
1270
|
+
id: Schema5.String
|
|
1459
1271
|
}));
|
|
1460
|
-
const ast =
|
|
1272
|
+
const ast = SchemaAST5.annotations(schemaWithId.ast, {
|
|
1461
1273
|
// TODO(dmaretskyi): `extend` kills the annotations.
|
|
1462
1274
|
...self.ast.annotations,
|
|
1463
1275
|
[TypeAnnotationId]: {
|
|
@@ -1466,49 +1278,46 @@ var EchoObjectSchema = ({ typename, version: version2 }) => {
|
|
|
1466
1278
|
version: version2
|
|
1467
1279
|
},
|
|
1468
1280
|
// TODO(dmaretskyi): TypeIdentifierAnnotationId?
|
|
1469
|
-
[
|
|
1281
|
+
[SchemaAST5.JSONSchemaAnnotationId]: makeTypeJsonSchemaAnnotation({
|
|
1470
1282
|
kind: EntityKind.Object,
|
|
1471
1283
|
typename,
|
|
1472
1284
|
version: version2
|
|
1473
1285
|
})
|
|
1474
1286
|
});
|
|
1475
|
-
return makeEchoTypeSchema(fields, ast, typename, version2, EntityKind.Object);
|
|
1287
|
+
return makeEchoTypeSchema(fields, ast, typename, version2, EntityKind.Object, () => toJsonSchema(Schema5.make(ast)), options?.id);
|
|
1476
1288
|
};
|
|
1477
1289
|
};
|
|
1478
1290
|
|
|
1479
1291
|
// src/internal/Entity/relation.ts
|
|
1480
|
-
import * as
|
|
1481
|
-
import * as
|
|
1292
|
+
import * as Schema6 from "effect/Schema";
|
|
1293
|
+
import * as SchemaAST6 from "effect/SchemaAST";
|
|
1482
1294
|
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
|
-
|
|
1295
|
+
import { assertArgument as assertArgument2, invariant as invariant7 } from "@dxos/invariant";
|
|
1296
|
+
import { DXN as DXN3 } from "@dxos/keys";
|
|
1297
|
+
var __dxlog_file7 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/Entity/relation.ts";
|
|
1298
|
+
var EchoRelationSchema = ({ dxn, source, target, id: explicitId }) => {
|
|
1299
|
+
const sourceSchema = source != null ? getStaticTypeSchema(source) ?? source : source;
|
|
1300
|
+
const targetSchema = target != null ? getStaticTypeSchema(target) ?? target : target;
|
|
1301
|
+
assertArgument2(Schema6.isSchema(sourceSchema), "source");
|
|
1302
|
+
assertArgument2(Schema6.isSchema(targetSchema), "target");
|
|
1303
|
+
const typename = DXN3.getName(dxn);
|
|
1304
|
+
const version2 = DXN3.getVersion(dxn);
|
|
1305
|
+
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}`"] });
|
|
1306
|
+
const sourceDXN = getDXNForRelationSchemaRef(sourceSchema);
|
|
1307
|
+
const targetDXN = getDXNForRelationSchemaRef(targetSchema);
|
|
1308
|
+
if (getEntityKind(sourceSchema) !== EntityKind.Object) {
|
|
1492
1309
|
raise(new Error("Source schema must be an echo object schema."));
|
|
1493
1310
|
}
|
|
1494
|
-
if (getEntityKind(
|
|
1311
|
+
if (getEntityKind(targetSchema) !== EntityKind.Object) {
|
|
1495
1312
|
raise(new Error("Target schema must be an echo object schema."));
|
|
1496
1313
|
}
|
|
1497
1314
|
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
|
-
});
|
|
1315
|
+
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
1316
|
const fields = self.fields ?? {};
|
|
1508
|
-
const schemaWithId =
|
|
1509
|
-
id:
|
|
1317
|
+
const schemaWithId = Schema6.extend(self, Schema6.Struct({
|
|
1318
|
+
id: Schema6.String
|
|
1510
1319
|
}));
|
|
1511
|
-
const ast =
|
|
1320
|
+
const ast = SchemaAST6.annotations(schemaWithId.ast, {
|
|
1512
1321
|
// TODO(dmaretskyi): `extend` kills the annotations.
|
|
1513
1322
|
...self.ast.annotations,
|
|
1514
1323
|
[TypeAnnotationId]: {
|
|
@@ -1519,7 +1328,7 @@ var EchoRelationSchema = ({ source, target, typename, version: version2 }) => {
|
|
|
1519
1328
|
targetSchema: targetDXN
|
|
1520
1329
|
},
|
|
1521
1330
|
// TODO(dmaretskyi): TypeIdentifierAnnotationId?
|
|
1522
|
-
[
|
|
1331
|
+
[SchemaAST6.JSONSchemaAnnotationId]: makeTypeJsonSchemaAnnotation({
|
|
1523
1332
|
kind: EntityKind.Relation,
|
|
1524
1333
|
typename,
|
|
1525
1334
|
version: version2,
|
|
@@ -1527,24 +1336,57 @@ var EchoRelationSchema = ({ source, target, typename, version: version2 }) => {
|
|
|
1527
1336
|
relationTarget: targetDXN
|
|
1528
1337
|
})
|
|
1529
1338
|
});
|
|
1530
|
-
return makeEchoTypeSchema(fields, ast, typename, version2, EntityKind.Relation);
|
|
1339
|
+
return makeEchoTypeSchema(fields, ast, typename, version2, EntityKind.Relation, () => toJsonSchema(Schema6.make(ast)), explicitId);
|
|
1531
1340
|
};
|
|
1532
1341
|
};
|
|
1533
1342
|
var getDXNForRelationSchemaRef = (schema) => {
|
|
1534
|
-
|
|
1343
|
+
assertArgument2(Schema6.isSchema(schema), "schema");
|
|
1535
1344
|
const identifier = getTypeIdentifierAnnotation(schema);
|
|
1536
1345
|
if (identifier) {
|
|
1537
|
-
return identifier;
|
|
1346
|
+
return DXN3.tryMake(identifier) ?? raise(new Error(`Invalid schema identifier: ${identifier}`));
|
|
1538
1347
|
}
|
|
1539
1348
|
const typename = getSchemaTypename(schema);
|
|
1540
1349
|
if (!typename) {
|
|
1541
1350
|
throw new Error("Schema must have a typename");
|
|
1542
1351
|
}
|
|
1543
|
-
return
|
|
1352
|
+
return DXN3.make(typename);
|
|
1353
|
+
};
|
|
1354
|
+
|
|
1355
|
+
// src/internal/Entity/type-kind.ts
|
|
1356
|
+
import * as Schema7 from "effect/Schema";
|
|
1357
|
+
import * as SchemaAST7 from "effect/SchemaAST";
|
|
1358
|
+
import { invariant as invariant8 } from "@dxos/invariant";
|
|
1359
|
+
import { DXN as DXN4 } from "@dxos/keys";
|
|
1360
|
+
var __dxlog_file8 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/Entity/type-kind.ts";
|
|
1361
|
+
var EchoTypeKindSchema = (dxn, options) => {
|
|
1362
|
+
const typename = DXN4.getName(dxn);
|
|
1363
|
+
const version2 = DXN4.getVersion(dxn);
|
|
1364
|
+
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}`"] });
|
|
1365
|
+
return (self) => {
|
|
1366
|
+
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.'"] });
|
|
1367
|
+
const fields = self.fields ?? {};
|
|
1368
|
+
const schemaWithId = Schema7.extend(self, Schema7.Struct({
|
|
1369
|
+
id: Schema7.String
|
|
1370
|
+
}));
|
|
1371
|
+
const ast = SchemaAST7.annotations(schemaWithId.ast, {
|
|
1372
|
+
...self.ast.annotations,
|
|
1373
|
+
[TypeAnnotationId]: {
|
|
1374
|
+
kind: EntityKind.Type,
|
|
1375
|
+
typename,
|
|
1376
|
+
version: version2
|
|
1377
|
+
},
|
|
1378
|
+
[SchemaAST7.JSONSchemaAnnotationId]: makeTypeJsonSchemaAnnotation({
|
|
1379
|
+
kind: EntityKind.Type,
|
|
1380
|
+
typename,
|
|
1381
|
+
version: version2
|
|
1382
|
+
})
|
|
1383
|
+
});
|
|
1384
|
+
return makeEchoTypeSchema(fields, ast, typename, version2, EntityKind.Type, () => toJsonSchema(Schema7.make(ast)), options?.id);
|
|
1385
|
+
};
|
|
1544
1386
|
};
|
|
1545
1387
|
|
|
1546
1388
|
// src/internal/Entity/version.ts
|
|
1547
|
-
import { assertArgument as
|
|
1389
|
+
import { assertArgument as assertArgument3 } from "@dxos/invariant";
|
|
1548
1390
|
var unversioned = {
|
|
1549
1391
|
[VersionTypeId]: {},
|
|
1550
1392
|
versioned: false
|
|
@@ -1560,12 +1402,12 @@ var version = (entity) => {
|
|
|
1560
1402
|
return ver;
|
|
1561
1403
|
};
|
|
1562
1404
|
var versionValid = (ver) => {
|
|
1563
|
-
|
|
1405
|
+
assertArgument3(isVersion(ver), "version", "Invalid version object");
|
|
1564
1406
|
return !!ver.versioned;
|
|
1565
1407
|
};
|
|
1566
1408
|
var compareVersions = (version1, version2) => {
|
|
1567
|
-
|
|
1568
|
-
|
|
1409
|
+
assertArgument3(isVersion(version1), "version1", "Invalid version object");
|
|
1410
|
+
assertArgument3(isVersion(version2), "version2", "Invalid version object");
|
|
1569
1411
|
if (!versionValid(version1) || !versionValid(version2)) {
|
|
1570
1412
|
return "unversioned";
|
|
1571
1413
|
}
|
|
@@ -1586,99 +1428,8 @@ var decodeVersion = (ver) => {
|
|
|
1586
1428
|
return parsed;
|
|
1587
1429
|
};
|
|
1588
1430
|
|
|
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
1431
|
// src/internal/Obj/common.ts
|
|
1681
|
-
import * as
|
|
1432
|
+
import * as Schema8 from "effect/Schema";
|
|
1682
1433
|
var makeTypedEntityClass = (typename, version2, baseSchema) => {
|
|
1683
1434
|
return class {
|
|
1684
1435
|
// Implement TypedObject properties.
|
|
@@ -1686,7 +1437,7 @@ var makeTypedEntityClass = (typename, version2, baseSchema) => {
|
|
|
1686
1437
|
static version = version2;
|
|
1687
1438
|
// Implement Schema.Schema properties.
|
|
1688
1439
|
// TODO(burdon): Comment required.
|
|
1689
|
-
static [
|
|
1440
|
+
static [Schema8.TypeId] = schemaVariance;
|
|
1690
1441
|
static ast = baseSchema.ast;
|
|
1691
1442
|
static annotations = baseSchema.annotations.bind(baseSchema);
|
|
1692
1443
|
static pipe = baseSchema.pipe.bind(baseSchema);
|
|
@@ -1708,8 +1459,8 @@ var schemaVariance = {
|
|
|
1708
1459
|
|
|
1709
1460
|
// src/internal/Obj/create-object.ts
|
|
1710
1461
|
import { raise as raise3 } from "@dxos/debug";
|
|
1711
|
-
import { assertArgument as
|
|
1712
|
-
import {
|
|
1462
|
+
import { assertArgument as assertArgument5, failedInvariant } from "@dxos/invariant";
|
|
1463
|
+
import { EntityId as EntityId4 } from "@dxos/keys";
|
|
1713
1464
|
|
|
1714
1465
|
// src/internal/Obj/inspect.ts
|
|
1715
1466
|
import { inspectCustom as inspectCustom2 } from "@dxos/debug";
|
|
@@ -1729,53 +1480,37 @@ var typedObjectInspectFunction = function(depth, options, inspect) {
|
|
|
1729
1480
|
const { id, ...props } = this;
|
|
1730
1481
|
return inspect({
|
|
1731
1482
|
id,
|
|
1732
|
-
[ATTR_TYPE]:
|
|
1483
|
+
[ATTR_TYPE]: getTypeURI(this),
|
|
1733
1484
|
...props,
|
|
1734
1485
|
[ATTR_META]: this[MetaId]
|
|
1735
1486
|
}, options);
|
|
1736
1487
|
};
|
|
1737
1488
|
|
|
1738
1489
|
// src/internal/Obj/json-serializer.ts
|
|
1739
|
-
import * as
|
|
1490
|
+
import * as Schema9 from "effect/Schema";
|
|
1740
1491
|
import { raise as raise2 } from "@dxos/debug";
|
|
1741
|
-
import {
|
|
1742
|
-
import { assertArgument as
|
|
1743
|
-
import {
|
|
1744
|
-
import { assumeType
|
|
1745
|
-
var
|
|
1492
|
+
import { EntityStructure, isEncodedReference } from "@dxos/echo-protocol";
|
|
1493
|
+
import { assertArgument as assertArgument4, invariant as invariant9 } from "@dxos/invariant";
|
|
1494
|
+
import { EID as EID2, EntityId as EntityId3, URI } from "@dxos/keys";
|
|
1495
|
+
import { assumeType, decodeUint8ArrayFromJson, deepMapValues as deepMapValues2, isEncodedUint8Array, visitValues } from "@dxos/util";
|
|
1496
|
+
var __dxlog_file9 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/Obj/json-serializer.ts";
|
|
1746
1497
|
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
|
-
});
|
|
1498
|
+
const typename = getTypeURI(obj);
|
|
1499
|
+
invariant9(typename && typeof typename === "string", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file9, L: 23, S: void 0, A: ["typename && typeof typename === 'string'", ""] });
|
|
1757
1500
|
return typedJsonSerializer.call(obj);
|
|
1758
1501
|
};
|
|
1759
|
-
var objectFromJSON = async (jsonData, { refResolver,
|
|
1760
|
-
|
|
1761
|
-
|
|
1762
|
-
|
|
1763
|
-
|
|
1764
|
-
const type =
|
|
1502
|
+
var objectFromJSON = async (jsonData, { refResolver, uri, database, parent } = {}) => {
|
|
1503
|
+
assumeType(jsonData);
|
|
1504
|
+
assertArgument4(typeof jsonData === "object" && jsonData !== null, "jsonData", "expect object");
|
|
1505
|
+
assertArgument4(typeof jsonData[ATTR_TYPE] === "string", "jsonData[ATTR_TYPE]", "expected object to have a type");
|
|
1506
|
+
assertArgument4(typeof jsonData.id === "string", "jsonData.id", "expected object to have an id");
|
|
1507
|
+
const type = URI.make(jsonData[ATTR_TYPE]);
|
|
1765
1508
|
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);
|
|
1509
|
+
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)", ""] });
|
|
1510
|
+
const decodedInput = restoreUint8Arrays(stripInternalJsonKeys(jsonData));
|
|
1776
1511
|
let obj;
|
|
1777
1512
|
if (schema != null) {
|
|
1778
|
-
obj = await schema.pipe(
|
|
1513
|
+
obj = await schema.pipe(Schema9.decodeUnknownPromise)(decodedInput);
|
|
1779
1514
|
if (refResolver) {
|
|
1780
1515
|
setRefResolverOnData(obj, refResolver);
|
|
1781
1516
|
}
|
|
@@ -1784,23 +1519,21 @@ var objectFromJSON = async (jsonData, { refResolver, dxn, database, parent } = {
|
|
|
1784
1519
|
refResolver
|
|
1785
1520
|
});
|
|
1786
1521
|
}
|
|
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
|
-
});
|
|
1522
|
+
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
1523
|
setTypename(obj, type);
|
|
1797
1524
|
if (schema) {
|
|
1798
1525
|
setSchema(obj, schema);
|
|
1799
1526
|
}
|
|
1527
|
+
if (refResolver?.resolveType) {
|
|
1528
|
+
const typeEntity = await refResolver.resolveType(type);
|
|
1529
|
+
if (typeEntity != null) {
|
|
1530
|
+
setType(obj, typeEntity);
|
|
1531
|
+
}
|
|
1532
|
+
}
|
|
1800
1533
|
const isRelation = typeof jsonData[ATTR_RELATION_SOURCE] === "string" || typeof jsonData[ATTR_RELATION_TARGET] === "string";
|
|
1801
1534
|
if (isRelation) {
|
|
1802
|
-
const sourceDxn =
|
|
1803
|
-
const targetDxn =
|
|
1535
|
+
const sourceDxn = jsonData[ATTR_RELATION_SOURCE] ?? raise2(new TypeError("Missing relation source"));
|
|
1536
|
+
const targetDxn = jsonData[ATTR_RELATION_TARGET] ?? raise2(new TypeError("Missing relation target"));
|
|
1804
1537
|
const source = await refResolver?.resolve(sourceDxn);
|
|
1805
1538
|
const target = await refResolver?.resolve(targetDxn);
|
|
1806
1539
|
defineHiddenProperty(obj, KindId, EntityKind.Relation);
|
|
@@ -1809,106 +1542,74 @@ var objectFromJSON = async (jsonData, { refResolver, dxn, database, parent } = {
|
|
|
1809
1542
|
defineHiddenProperty(obj, RelationSourceId, source);
|
|
1810
1543
|
defineHiddenProperty(obj, RelationTargetId, target);
|
|
1811
1544
|
} else {
|
|
1812
|
-
|
|
1545
|
+
const annotationKind = schema != null ? getTypeAnnotation(schema)?.kind : void 0;
|
|
1546
|
+
defineHiddenProperty(obj, KindId, annotationKind === EntityKind.Type ? EntityKind.Type : EntityKind.Object);
|
|
1813
1547
|
}
|
|
1814
1548
|
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
|
-
});
|
|
1549
|
+
const meta = await EntityMetaSchema.pipe(Schema9.decodeUnknownPromise)(normalizeMeta(jsonData[ATTR_META]));
|
|
1550
|
+
invariant9(Array.isArray(meta.keys), void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file9, L: 92, S: void 0, A: ["Array.isArray(meta.keys)", ""] });
|
|
1825
1551
|
defineHiddenProperty(obj, MetaId, meta);
|
|
1826
1552
|
} else {
|
|
1827
1553
|
defineHiddenProperty(obj, MetaId, {
|
|
1828
|
-
keys: []
|
|
1554
|
+
keys: [],
|
|
1555
|
+
tags: [],
|
|
1556
|
+
annotations: {}
|
|
1829
1557
|
});
|
|
1830
1558
|
}
|
|
1831
1559
|
if (jsonData[ATTR_PARENT]) {
|
|
1832
|
-
const parentDxn =
|
|
1560
|
+
const parentDxn = jsonData[ATTR_PARENT];
|
|
1833
1561
|
const resolvedParent = await refResolver?.resolve(parentDxn);
|
|
1834
1562
|
defineHiddenProperty(obj, ParentId, resolvedParent);
|
|
1835
1563
|
} else if (parent) {
|
|
1836
1564
|
defineHiddenProperty(obj, ParentId, parent);
|
|
1837
1565
|
}
|
|
1838
|
-
if (
|
|
1839
|
-
defineHiddenProperty(obj,
|
|
1566
|
+
if (uri) {
|
|
1567
|
+
defineHiddenProperty(obj, SelfURIId, uri);
|
|
1840
1568
|
}
|
|
1841
1569
|
if (database) {
|
|
1842
1570
|
defineHiddenProperty(obj, ObjectDatabaseId, database);
|
|
1843
1571
|
}
|
|
1844
1572
|
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
|
-
});
|
|
1573
|
+
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'"] });
|
|
1574
|
+
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'"] });
|
|
1575
|
+
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'"] });
|
|
1576
|
+
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'"] });
|
|
1577
|
+
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'"] });
|
|
1578
|
+
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'"] });
|
|
1579
|
+
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
1580
|
return obj;
|
|
1900
1581
|
};
|
|
1582
|
+
var normalizeMeta = (meta) => {
|
|
1583
|
+
const tags = Array.isArray(meta?.tags) ? meta.tags.map((tag) => typeof tag === "string" ? {
|
|
1584
|
+
"/": URI.make(tag)
|
|
1585
|
+
} : tag) : [];
|
|
1586
|
+
return {
|
|
1587
|
+
...meta,
|
|
1588
|
+
keys: Array.isArray(meta?.keys) ? meta.keys : [],
|
|
1589
|
+
tags,
|
|
1590
|
+
annotations: meta?.annotations ?? {}
|
|
1591
|
+
};
|
|
1592
|
+
};
|
|
1901
1593
|
var decodeGeneric = (jsonData, options) => {
|
|
1902
1594
|
const props = stripInternalJsonKeys(jsonData);
|
|
1903
1595
|
return deepMapValues2(props, (value2, visitor) => {
|
|
1904
1596
|
if (isEncodedReference(value2)) {
|
|
1905
1597
|
return refFromEncodedReference(value2, options.refResolver);
|
|
1906
1598
|
}
|
|
1599
|
+
if (isEncodedUint8Array(value2)) {
|
|
1600
|
+
return decodeUint8ArrayFromJson(value2);
|
|
1601
|
+
}
|
|
1907
1602
|
return visitor(value2);
|
|
1908
1603
|
});
|
|
1909
1604
|
};
|
|
1605
|
+
var restoreUint8Arrays = (data) => deepMapValues2(data, (value2, recurse) => {
|
|
1606
|
+
if (isEncodedUint8Array(value2)) {
|
|
1607
|
+
return decodeUint8ArrayFromJson(value2);
|
|
1608
|
+
}
|
|
1609
|
+
return recurse(value2);
|
|
1610
|
+
});
|
|
1910
1611
|
var stripInternalJsonKeys = (jsonData) => {
|
|
1911
|
-
const { [ATTR_TYPE]: _type, [ATTR_META]: _meta, [ATTR_DELETED]: _deleted, [
|
|
1612
|
+
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
1613
|
return props;
|
|
1913
1614
|
};
|
|
1914
1615
|
var setRefResolverOnData = (obj, refResolver) => {
|
|
@@ -1922,43 +1623,58 @@ var setRefResolverOnData = (obj, refResolver) => {
|
|
|
1922
1623
|
visitor(obj);
|
|
1923
1624
|
};
|
|
1924
1625
|
var objectStructureToJson = (objectId, structure) => {
|
|
1626
|
+
const typeRef = EntityStructure.getTypeReference(structure)?.["/"];
|
|
1627
|
+
const parent = EntityStructure.getParent(structure)?.["/"];
|
|
1628
|
+
const source = EntityStructure.getRelationSource(structure)?.["/"];
|
|
1629
|
+
const target = EntityStructure.getRelationTarget(structure)?.["/"];
|
|
1925
1630
|
return {
|
|
1926
1631
|
...structure.data,
|
|
1927
1632
|
id: objectId,
|
|
1928
|
-
[ATTR_TYPE]:
|
|
1929
|
-
[ATTR_DELETED]:
|
|
1930
|
-
[ATTR_PARENT]:
|
|
1931
|
-
[ATTR_RELATION_SOURCE]:
|
|
1932
|
-
[ATTR_RELATION_TARGET]:
|
|
1633
|
+
[ATTR_TYPE]: typeRef ? URI.make(typeRef) : void 0,
|
|
1634
|
+
[ATTR_DELETED]: EntityStructure.isDeleted(structure),
|
|
1635
|
+
[ATTR_PARENT]: parent !== void 0 ? EID2.tryParse(parent) : void 0,
|
|
1636
|
+
[ATTR_RELATION_SOURCE]: source !== void 0 ? EID2.tryParse(source) : void 0,
|
|
1637
|
+
[ATTR_RELATION_TARGET]: target !== void 0 ? EID2.tryParse(target) : void 0
|
|
1933
1638
|
};
|
|
1934
1639
|
};
|
|
1935
1640
|
|
|
1936
1641
|
// src/internal/Obj/create-object.ts
|
|
1937
|
-
var createObject = (
|
|
1642
|
+
var createObject = (input, props) => {
|
|
1643
|
+
const schema = getStaticTypeSchema(input) ?? failedInvariant("Type entity is missing its source schema");
|
|
1938
1644
|
const annotation = getTypeAnnotation(schema);
|
|
1939
1645
|
if (!annotation) {
|
|
1940
1646
|
throw new Error("Schema is not an ECHO schema");
|
|
1941
1647
|
}
|
|
1942
|
-
|
|
1943
|
-
|
|
1944
|
-
|
|
1945
|
-
|
|
1648
|
+
assertArgument5(!("@type" in props), "data", "@type is not allowed");
|
|
1649
|
+
assertArgument5(!(RelationSourceDXNId in props), "data", "Relation source DXN is not allowed in the constructor");
|
|
1650
|
+
assertArgument5(!(RelationTargetDXNId in props), "data", "Relation target DXN is not allowed in the constructor");
|
|
1651
|
+
assertArgument5(RelationSourceId in props === RelationTargetId in props, "data", "Relation source and target must be provided together");
|
|
1652
|
+
const metaOverride = props[MetaId];
|
|
1653
|
+
if (metaOverride !== void 0) {
|
|
1654
|
+
delete props[MetaId];
|
|
1655
|
+
}
|
|
1946
1656
|
const obj = {
|
|
1947
1657
|
...props,
|
|
1948
|
-
id: props.id ??
|
|
1658
|
+
id: props.id ?? EntityId4.random()
|
|
1949
1659
|
};
|
|
1950
|
-
const kind = RelationSourceId in props ? EntityKind.Relation : EntityKind.Object;
|
|
1660
|
+
const kind = annotation.kind === EntityKind.Type ? EntityKind.Type : annotation.kind === EntityKind.Relation || RelationSourceId in props ? EntityKind.Relation : EntityKind.Object;
|
|
1951
1661
|
defineHiddenProperty(obj, KindId, kind);
|
|
1952
1662
|
defineHiddenProperty(obj, MetaId, {
|
|
1953
|
-
|
|
1663
|
+
...metaOverride,
|
|
1664
|
+
keys: metaOverride?.keys ?? [],
|
|
1665
|
+
tags: metaOverride?.tags ?? [],
|
|
1666
|
+
annotations: metaOverride?.annotations ?? {}
|
|
1954
1667
|
});
|
|
1955
1668
|
setSchema(obj, schema);
|
|
1956
|
-
|
|
1669
|
+
if (input !== schema) {
|
|
1670
|
+
setType(obj, input);
|
|
1671
|
+
}
|
|
1672
|
+
setTypename(obj, getSchemaURI(schema) ?? failedInvariant("Missing schema URI"));
|
|
1957
1673
|
attachTypedJsonSerializer(obj);
|
|
1958
1674
|
attachedTypedObjectInspector(obj);
|
|
1959
1675
|
if (kind === EntityKind.Relation) {
|
|
1960
|
-
const sourceDXN =
|
|
1961
|
-
const targetDXN =
|
|
1676
|
+
const sourceDXN = getObjectEchoUri(props[RelationSourceId]) ?? raise3(new Error("Unresolved relation source"));
|
|
1677
|
+
const targetDXN = getObjectEchoUri(props[RelationTargetId]) ?? raise3(new Error("Unresolved relation target"));
|
|
1962
1678
|
defineHiddenProperty(obj, RelationSourceDXNId, sourceDXN);
|
|
1963
1679
|
defineHiddenProperty(obj, RelationTargetDXNId, targetDXN);
|
|
1964
1680
|
}
|
|
@@ -1974,41 +1690,17 @@ var isDeleted = (obj) => {
|
|
|
1974
1690
|
return obj[ObjectDeletedId] ?? false;
|
|
1975
1691
|
};
|
|
1976
1692
|
|
|
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
1693
|
// src/internal/Obj/set-value.ts
|
|
1986
1694
|
import * as Match from "effect/Match";
|
|
1987
1695
|
import * as Option from "effect/Option";
|
|
1988
|
-
import * as
|
|
1989
|
-
import {
|
|
1990
|
-
import { invariant as
|
|
1991
|
-
var
|
|
1696
|
+
import * as SchemaAST8 from "effect/SchemaAST";
|
|
1697
|
+
import { SchemaEx } from "@dxos/effect";
|
|
1698
|
+
import { invariant as invariant10 } from "@dxos/invariant";
|
|
1699
|
+
var __dxlog_file10 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/Obj/set-value.ts";
|
|
1992
1700
|
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
|
-
});
|
|
1701
|
+
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
1702
|
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
|
-
});
|
|
1703
|
+
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
1704
|
let parent = obj;
|
|
2013
1705
|
let currentAST = schema.ast;
|
|
2014
1706
|
for (let i = 0; i < path.length - 1; i++) {
|
|
@@ -2016,7 +1708,7 @@ var setValue = (obj, path, value2) => {
|
|
|
2016
1708
|
const key = typeof part === "number" ? part : String(part);
|
|
2017
1709
|
if (parent[key] === void 0) {
|
|
2018
1710
|
const propertyAST = getPropertyAST(currentAST, String(part));
|
|
2019
|
-
const shouldBeArray = propertyAST ? isArrayType(propertyAST) : false;
|
|
1711
|
+
const shouldBeArray = propertyAST ? SchemaEx.isArrayType(propertyAST) : false;
|
|
2020
1712
|
if (shouldBeArray) {
|
|
2021
1713
|
parent[key] = [];
|
|
2022
1714
|
} else {
|
|
@@ -2035,15 +1727,15 @@ var getPropertyAST = (ast, propertyName) => {
|
|
|
2035
1727
|
if (!ast) {
|
|
2036
1728
|
return void 0;
|
|
2037
1729
|
}
|
|
2038
|
-
if (isNestedType(ast)) {
|
|
2039
|
-
const properties =
|
|
1730
|
+
if (SchemaEx.isNestedType(ast)) {
|
|
1731
|
+
const properties = SchemaEx.getProperties(ast);
|
|
2040
1732
|
const property = properties.find((p) => p.name.toString() === propertyName);
|
|
2041
1733
|
if (property) {
|
|
2042
|
-
return getBaseType(property).type;
|
|
1734
|
+
return SchemaEx.getBaseType(property).type;
|
|
2043
1735
|
}
|
|
2044
1736
|
}
|
|
2045
|
-
if (isArrayType(ast)) {
|
|
2046
|
-
const elementType = getArrayElementType(ast);
|
|
1737
|
+
if (SchemaEx.isArrayType(ast)) {
|
|
1738
|
+
const elementType = SchemaEx.getArrayElementType(ast);
|
|
2047
1739
|
return elementType;
|
|
2048
1740
|
}
|
|
2049
1741
|
return void 0;
|
|
@@ -2052,17 +1744,17 @@ var getRequiredProperties = (ast) => {
|
|
|
2052
1744
|
if (!ast) {
|
|
2053
1745
|
return [];
|
|
2054
1746
|
}
|
|
2055
|
-
if (!isNestedType(ast)) {
|
|
1747
|
+
if (!SchemaEx.isNestedType(ast)) {
|
|
2056
1748
|
return [];
|
|
2057
1749
|
}
|
|
2058
|
-
const properties =
|
|
1750
|
+
const properties = SchemaEx.getProperties(ast);
|
|
2059
1751
|
return properties.filter((p) => !p.isOptional);
|
|
2060
1752
|
};
|
|
2061
1753
|
var getDefaultValueForType = (ast) => {
|
|
2062
1754
|
if (!ast) {
|
|
2063
1755
|
return void 0;
|
|
2064
1756
|
}
|
|
2065
|
-
const defaultValue =
|
|
1757
|
+
const defaultValue = SchemaAST8.getDefaultAnnotation(ast);
|
|
2066
1758
|
if (Option.isSome(defaultValue)) {
|
|
2067
1759
|
return defaultValue.value;
|
|
2068
1760
|
}
|
|
@@ -2084,7 +1776,7 @@ var createObjectWithDefaults = (ast) => {
|
|
|
2084
1776
|
const defaultValue = getDefaultValueForType(prop.type);
|
|
2085
1777
|
if (defaultValue !== void 0) {
|
|
2086
1778
|
obj[prop.name] = defaultValue;
|
|
2087
|
-
} else if (isNestedType(prop.type)) {
|
|
1779
|
+
} else if (SchemaEx.isNestedType(prop.type)) {
|
|
2088
1780
|
obj[prop.name] = createObjectWithDefaults(prop.type);
|
|
2089
1781
|
}
|
|
2090
1782
|
}
|
|
@@ -2092,7 +1784,7 @@ var createObjectWithDefaults = (ast) => {
|
|
|
2092
1784
|
};
|
|
2093
1785
|
|
|
2094
1786
|
// src/internal/Obj/snapshot.ts
|
|
2095
|
-
import { assertArgument as
|
|
1787
|
+
import { assertArgument as assertArgument6 } from "@dxos/invariant";
|
|
2096
1788
|
import { deepMapValues as deepMapValues3 } from "@dxos/util";
|
|
2097
1789
|
var copySymbolProperty = (source, target, symbol, transform) => {
|
|
2098
1790
|
let value2;
|
|
@@ -2112,7 +1804,7 @@ var copySymbolProperty = (source, target, symbol, transform) => {
|
|
|
2112
1804
|
}
|
|
2113
1805
|
};
|
|
2114
1806
|
var getSnapshot = (obj) => {
|
|
2115
|
-
|
|
1807
|
+
assertArgument6(typeof obj === "object" && obj !== null && KindId in obj, "obj", "must be an entity");
|
|
2116
1808
|
const snapshot = deepMapValues3(obj, (value2, recurse) => {
|
|
2117
1809
|
if (typeof value2 === "object" && value2 !== null && Object.getPrototypeOf(value2) !== Object.prototype && !Array.isArray(value2)) {
|
|
2118
1810
|
return value2;
|
|
@@ -2125,16 +1817,29 @@ var getSnapshot = (obj) => {
|
|
|
2125
1817
|
const source = obj;
|
|
2126
1818
|
copySymbolProperty(source, snapshot, TypeId);
|
|
2127
1819
|
copySymbolProperty(source, snapshot, SchemaId);
|
|
2128
|
-
copySymbolProperty(source, snapshot,
|
|
1820
|
+
copySymbolProperty(source, snapshot, TypeEntityId);
|
|
1821
|
+
copySymbolProperty(source, snapshot, SelfURIId);
|
|
2129
1822
|
copySymbolProperty(source, snapshot, ObjectDatabaseId);
|
|
2130
1823
|
copySymbolProperty(source, snapshot, ObjectDeletedId);
|
|
1824
|
+
copySymbolProperty(source, snapshot, ParentId);
|
|
2131
1825
|
copySymbolProperty(source, snapshot, MetaId, (meta) => ({
|
|
2132
1826
|
keys: [
|
|
2133
1827
|
...meta?.keys ?? []
|
|
2134
1828
|
],
|
|
2135
1829
|
tags: [
|
|
2136
1830
|
...meta?.tags ?? []
|
|
2137
|
-
]
|
|
1831
|
+
],
|
|
1832
|
+
...meta?.key != null ? {
|
|
1833
|
+
key: meta.key
|
|
1834
|
+
} : {},
|
|
1835
|
+
...meta?.version != null ? {
|
|
1836
|
+
version: meta.version
|
|
1837
|
+
} : {},
|
|
1838
|
+
...meta?.annotations ? {
|
|
1839
|
+
annotations: {
|
|
1840
|
+
...meta.annotations
|
|
1841
|
+
}
|
|
1842
|
+
} : {}
|
|
2138
1843
|
}));
|
|
2139
1844
|
copySymbolProperty(source, snapshot, RelationSourceDXNId);
|
|
2140
1845
|
copySymbolProperty(source, snapshot, RelationTargetDXNId);
|
|
@@ -2143,22 +1848,151 @@ var getSnapshot = (obj) => {
|
|
|
2143
1848
|
return Object.freeze(snapshot);
|
|
2144
1849
|
};
|
|
2145
1850
|
|
|
1851
|
+
// src/internal/Obj/atoms.ts
|
|
1852
|
+
import * as Atom from "@effect-atom/atom/Atom";
|
|
1853
|
+
import * as Result from "@effect-atom/atom/Result";
|
|
1854
|
+
import * as Effect from "effect/Effect";
|
|
1855
|
+
import * as Function from "effect/Function";
|
|
1856
|
+
import * as Option2 from "effect/Option";
|
|
1857
|
+
import { assertArgument as assertArgument7 } from "@dxos/invariant";
|
|
1858
|
+
var isRef = (obj) => obj != null && typeof obj === "object" && RefTypeId in obj;
|
|
1859
|
+
var getReactiveOption = (snapshot) => Effect.gen(function* () {
|
|
1860
|
+
const db = getDatabase(snapshot);
|
|
1861
|
+
if (!db) {
|
|
1862
|
+
return Option2.none();
|
|
1863
|
+
}
|
|
1864
|
+
const obj = db.getObjectById(snapshot.id);
|
|
1865
|
+
return obj ? Option2.some(obj) : Option2.none();
|
|
1866
|
+
});
|
|
1867
|
+
var objectFamily = Atom.family((obj) => {
|
|
1868
|
+
return Atom.make((get) => {
|
|
1869
|
+
const unsubscribe = subscribe(obj, () => {
|
|
1870
|
+
get.setSelf(getSnapshot(obj));
|
|
1871
|
+
});
|
|
1872
|
+
get.addFinalizer(() => unsubscribe());
|
|
1873
|
+
return getSnapshot(obj);
|
|
1874
|
+
}).pipe(Atom.keepAlive);
|
|
1875
|
+
});
|
|
1876
|
+
var refFamily = Atom.family((ref) => {
|
|
1877
|
+
return Atom.make((get) => {
|
|
1878
|
+
let unsubscribeTarget;
|
|
1879
|
+
const setupTargetSubscription = (target) => {
|
|
1880
|
+
unsubscribeTarget?.();
|
|
1881
|
+
unsubscribeTarget = subscribe(target, () => {
|
|
1882
|
+
get.setSelf(getSnapshot(target));
|
|
1883
|
+
});
|
|
1884
|
+
return getSnapshot(target);
|
|
1885
|
+
};
|
|
1886
|
+
get.addFinalizer(() => {
|
|
1887
|
+
unsubscribeTarget?.();
|
|
1888
|
+
});
|
|
1889
|
+
return loadRefTarget(ref, get, setupTargetSubscription);
|
|
1890
|
+
}).pipe(Atom.keepAlive);
|
|
1891
|
+
});
|
|
1892
|
+
var snapshotForComparison = (value2) => {
|
|
1893
|
+
if (Array.isArray(value2)) {
|
|
1894
|
+
return [
|
|
1895
|
+
...value2
|
|
1896
|
+
];
|
|
1897
|
+
}
|
|
1898
|
+
if (value2 !== null && typeof value2 === "object") {
|
|
1899
|
+
return {
|
|
1900
|
+
...value2
|
|
1901
|
+
};
|
|
1902
|
+
}
|
|
1903
|
+
return value2;
|
|
1904
|
+
};
|
|
1905
|
+
var propertyFamily = Atom.family((obj) => Atom.family((key) => {
|
|
1906
|
+
return Atom.make((get) => {
|
|
1907
|
+
let previousSnapshot = snapshotForComparison(obj[key]);
|
|
1908
|
+
const unsubscribe2 = subscribe(obj, () => {
|
|
1909
|
+
const newValue = obj[key];
|
|
1910
|
+
const newSnapshot = snapshotForComparison(newValue);
|
|
1911
|
+
if (newSnapshot !== previousSnapshot) {
|
|
1912
|
+
previousSnapshot = newSnapshot;
|
|
1913
|
+
get.setSelf(newSnapshot);
|
|
1914
|
+
}
|
|
1915
|
+
});
|
|
1916
|
+
get.addFinalizer(() => unsubscribe2());
|
|
1917
|
+
return snapshotForComparison(obj[key]);
|
|
1918
|
+
}).pipe(Atom.keepAlive);
|
|
1919
|
+
}));
|
|
1920
|
+
var objectWithReactiveFamily = Atom.family((obj) => {
|
|
1921
|
+
return Atom.make((get) => {
|
|
1922
|
+
const unsubscribe = subscribe(obj, () => {
|
|
1923
|
+
get.setSelf(obj);
|
|
1924
|
+
});
|
|
1925
|
+
get.addFinalizer(() => unsubscribe());
|
|
1926
|
+
return obj;
|
|
1927
|
+
}).pipe(Atom.keepAlive);
|
|
1928
|
+
});
|
|
1929
|
+
var refWithReactiveFamily = Atom.family((ref) => {
|
|
1930
|
+
const effect = (get) => Effect.gen(function* () {
|
|
1931
|
+
const snapshot = get(makeAtom(ref));
|
|
1932
|
+
if (snapshot == null) {
|
|
1933
|
+
return void 0;
|
|
1934
|
+
}
|
|
1935
|
+
const option = yield* getReactiveOption(snapshot);
|
|
1936
|
+
return Option2.getOrElse(option, () => void 0);
|
|
1937
|
+
});
|
|
1938
|
+
return Function.pipe(Atom.make(effect), Atom.map((result) => Result.getOrElse(result, () => void 0)));
|
|
1939
|
+
});
|
|
1940
|
+
var entityFamily = Atom.family((entity) => {
|
|
1941
|
+
return Atom.make((get) => {
|
|
1942
|
+
const unsubscribe = subscribe(entity, () => {
|
|
1943
|
+
get.setSelf(getSnapshot(entity));
|
|
1944
|
+
});
|
|
1945
|
+
get.addFinalizer(() => unsubscribe());
|
|
1946
|
+
return getSnapshot(entity);
|
|
1947
|
+
}).pipe(Atom.keepAlive);
|
|
1948
|
+
});
|
|
1949
|
+
var relationFamily = Atom.family((relation) => {
|
|
1950
|
+
return Atom.make((get) => {
|
|
1951
|
+
const unsubscribe = subscribe(relation, () => {
|
|
1952
|
+
get.setSelf(getSnapshot(relation));
|
|
1953
|
+
});
|
|
1954
|
+
get.addFinalizer(() => unsubscribe());
|
|
1955
|
+
return getSnapshot(relation);
|
|
1956
|
+
}).pipe(Atom.keepAlive);
|
|
1957
|
+
});
|
|
1958
|
+
var makeAtom = (objOrRef) => {
|
|
1959
|
+
if (isRef(objOrRef)) {
|
|
1960
|
+
return refFamily(objOrRef);
|
|
1961
|
+
}
|
|
1962
|
+
const obj = objOrRef;
|
|
1963
|
+
assertArgument7(isEntity(obj), "obj", "Object must be a reactive object");
|
|
1964
|
+
return objectFamily(obj);
|
|
1965
|
+
};
|
|
1966
|
+
var makeProperty = (obj, key) => {
|
|
1967
|
+
assertArgument7(isEntity(obj), "obj", "Object must be a reactive object");
|
|
1968
|
+
return propertyFamily(obj)(key);
|
|
1969
|
+
};
|
|
1970
|
+
var makeWithReactive = (objOrRef) => {
|
|
1971
|
+
if (isRef(objOrRef)) {
|
|
1972
|
+
return refWithReactiveFamily(objOrRef);
|
|
1973
|
+
}
|
|
1974
|
+
const obj = objOrRef;
|
|
1975
|
+
assertArgument7(isEntity(obj), "obj", "Object must be a reactive object");
|
|
1976
|
+
return objectWithReactiveFamily(obj);
|
|
1977
|
+
};
|
|
1978
|
+
var makeEntity = (entity) => {
|
|
1979
|
+
assertArgument7(isEntity(entity), "entity", "Must be a reactive ECHO entity");
|
|
1980
|
+
return entityFamily(entity);
|
|
1981
|
+
};
|
|
1982
|
+
var makeRelation = (relation) => {
|
|
1983
|
+
assertArgument7(isEntity(relation), "relation", "Must be a reactive ECHO relation");
|
|
1984
|
+
return relationFamily(relation);
|
|
1985
|
+
};
|
|
1986
|
+
|
|
2146
1987
|
// src/internal/Obj/clone.ts
|
|
2147
|
-
import { invariant as
|
|
1988
|
+
import { invariant as invariant11 } from "@dxos/invariant";
|
|
2148
1989
|
import { deepMapValues as deepMapValues4 } from "@dxos/util";
|
|
2149
|
-
var
|
|
1990
|
+
var __dxlog_file11 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/Obj/clone.ts";
|
|
2150
1991
|
var clone = (obj, opts) => {
|
|
2151
1992
|
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
|
-
});
|
|
1993
|
+
const typeEntity = getType(obj);
|
|
1994
|
+
const schema = typeEntity != null ? getStaticTypeSchema(typeEntity) : getSchema(obj);
|
|
1995
|
+
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
1996
|
const props = deepMapValues4(data, (value2, recurse) => {
|
|
2163
1997
|
if (Ref.isRef(value2)) {
|
|
2164
1998
|
if (opts?.deep) {
|
|
@@ -2180,13 +2014,16 @@ var clone = (obj, opts) => {
|
|
|
2180
2014
|
}
|
|
2181
2015
|
return recurse(value2);
|
|
2182
2016
|
});
|
|
2183
|
-
return makeObject(schema, props, meta);
|
|
2017
|
+
return makeObject(schema, props, meta, typeEntity);
|
|
2184
2018
|
};
|
|
2185
2019
|
|
|
2186
|
-
// src/internal/Query.ts
|
|
2020
|
+
// src/internal/Query/pretty.ts
|
|
2187
2021
|
var prettyFilter = (filter) => {
|
|
2188
2022
|
switch (filter.type) {
|
|
2189
2023
|
case "object": {
|
|
2024
|
+
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) {
|
|
2025
|
+
return filter.metaVersion !== void 0 ? `Filter.key(${JSON.stringify(filter.metaKey)}, { version: ${JSON.stringify(filter.metaVersion)} })` : `Filter.key(${JSON.stringify(filter.metaKey)})`;
|
|
2026
|
+
}
|
|
2190
2027
|
const parts = [];
|
|
2191
2028
|
if (filter.typename !== null) {
|
|
2192
2029
|
parts.push(String(filter.typename));
|
|
@@ -2202,6 +2039,9 @@ var prettyFilter = (filter) => {
|
|
|
2202
2039
|
if (filter.foreignKeys !== void 0 && filter.foreignKeys.length > 0) {
|
|
2203
2040
|
parts.push(`foreignKeys: [${filter.foreignKeys.map((fk) => JSON.stringify(fk)).join(", ")}]`);
|
|
2204
2041
|
}
|
|
2042
|
+
if (filter.metaKey !== void 0) {
|
|
2043
|
+
parts.push(filter.metaVersion !== void 0 ? `metaKey: ${JSON.stringify(filter.metaKey)} (${filter.metaVersion})` : `metaKey: ${JSON.stringify(filter.metaKey)}`);
|
|
2044
|
+
}
|
|
2205
2045
|
return parts.length > 0 ? `Filter.type(${parts.join(", ")})` : "Filter.everything()";
|
|
2206
2046
|
}
|
|
2207
2047
|
case "compare":
|
|
@@ -2265,6 +2105,9 @@ var prettyQuery = (query) => {
|
|
|
2265
2105
|
return "Order.natural()";
|
|
2266
2106
|
} else if (o.kind === "rank") {
|
|
2267
2107
|
return `Order.rank(${JSON.stringify(o.direction)})`;
|
|
2108
|
+
} else if (o.kind === "timestamp") {
|
|
2109
|
+
const fn = o.field === "updatedAt" ? "updated" : "created";
|
|
2110
|
+
return `Order.${fn}(${JSON.stringify(o.direction)})`;
|
|
2268
2111
|
} else {
|
|
2269
2112
|
return `Order.property(${JSON.stringify(o.property)}, ${JSON.stringify(o.direction)})`;
|
|
2270
2113
|
}
|
|
@@ -2277,22 +2120,26 @@ var prettyQuery = (query) => {
|
|
|
2277
2120
|
if (opts.deleted !== void 0) {
|
|
2278
2121
|
parts.push(`deleted: ${JSON.stringify(opts.deleted)}`);
|
|
2279
2122
|
}
|
|
2123
|
+
if (opts.debugLabel !== void 0) {
|
|
2124
|
+
parts.push(`debugLabel: ${JSON.stringify(opts.debugLabel)}`);
|
|
2125
|
+
}
|
|
2280
2126
|
return `${prettyQuery(query.query)}.options({ ${parts.join(", ")} })`;
|
|
2281
2127
|
}
|
|
2282
2128
|
case "from": {
|
|
2283
2129
|
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}`);
|
|
2130
|
+
if (query.from.scopes.length === 0) {
|
|
2131
|
+
return `${prettyQuery(query.query)}.from('all-accessible-spaces')`;
|
|
2294
2132
|
}
|
|
2295
|
-
|
|
2133
|
+
const scopeStrs = query.from.scopes.map((scope) => {
|
|
2134
|
+
if (scope._tag === "space") {
|
|
2135
|
+
return scope.includeAllFeeds ? `{ space: ${JSON.stringify(scope.spaceId)}, includeAllFeeds: true }` : `{ space: ${JSON.stringify(scope.spaceId)} }`;
|
|
2136
|
+
}
|
|
2137
|
+
if (scope._tag === "feed") {
|
|
2138
|
+
return `{ feed: ${JSON.stringify(String(scope.feedUri))} }`;
|
|
2139
|
+
}
|
|
2140
|
+
return `{ registry: ${JSON.stringify(scope.location)} }`;
|
|
2141
|
+
});
|
|
2142
|
+
return `${prettyQuery(query.query)}.from([${scopeStrs.join(", ")}])`;
|
|
2296
2143
|
}
|
|
2297
2144
|
return `${prettyQuery(query.query)}.from(${prettyQuery(query.from.query)})`;
|
|
2298
2145
|
}
|
|
@@ -2301,36 +2148,22 @@ var prettyQuery = (query) => {
|
|
|
2301
2148
|
}
|
|
2302
2149
|
};
|
|
2303
2150
|
|
|
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
2151
|
// 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";
|
|
2152
|
+
import * as Schema10 from "effect/Schema";
|
|
2153
|
+
import * as SchemaAST9 from "effect/SchemaAST";
|
|
2154
|
+
import { invariant as invariant12 } from "@dxos/invariant";
|
|
2155
|
+
var __dxlog_file12 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/Type/manipulation.ts";
|
|
2315
2156
|
var addFieldsToSchema = (schema, fields) => {
|
|
2316
|
-
const schemaExtension =
|
|
2317
|
-
return
|
|
2157
|
+
const schemaExtension = Schema10.partial(Schema10.Struct(fields));
|
|
2158
|
+
return Schema10.extend(schema, schemaExtension).annotations(schema.ast.annotations);
|
|
2318
2159
|
};
|
|
2319
2160
|
var updateFieldsInSchema = (schema, fields) => {
|
|
2320
2161
|
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
|
-
});
|
|
2162
|
+
invariant12(SchemaAST9.isTypeLiteral(ast), void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file12, L: 14, S: void 0, A: ["SchemaAST.isTypeLiteral(ast)", ""] });
|
|
2330
2163
|
const updatedProperties = [
|
|
2331
2164
|
...ast.propertySignatures
|
|
2332
2165
|
];
|
|
2333
|
-
const propertiesToUpdate =
|
|
2166
|
+
const propertiesToUpdate = Schema10.partial(Schema10.Struct(fields)).ast.propertySignatures;
|
|
2334
2167
|
for (const property of propertiesToUpdate) {
|
|
2335
2168
|
const index = updatedProperties.findIndex((p) => p.name === property.name);
|
|
2336
2169
|
if (index !== -1) {
|
|
@@ -2339,420 +2172,37 @@ var updateFieldsInSchema = (schema, fields) => {
|
|
|
2339
2172
|
updatedProperties.push(property);
|
|
2340
2173
|
}
|
|
2341
2174
|
}
|
|
2342
|
-
return
|
|
2175
|
+
return Schema10.make(new SchemaAST9.TypeLiteral(updatedProperties, ast.indexSignatures, ast.annotations));
|
|
2343
2176
|
};
|
|
2344
2177
|
var removeFieldsFromSchema = (schema, fieldNames) => {
|
|
2345
|
-
return
|
|
2178
|
+
return Schema10.make(SchemaAST9.omit(schema.ast, fieldNames)).annotations(schema.ast.annotations);
|
|
2346
2179
|
};
|
|
2347
2180
|
var updateFieldNameInSchema = (schema, { before, after }) => {
|
|
2348
2181
|
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
|
-
});
|
|
2182
|
+
invariant12(SchemaAST9.isTypeLiteral(ast), void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file12, L: 34, S: void 0, A: ["SchemaAST.isTypeLiteral(ast)", ""] });
|
|
2183
|
+
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
2184
|
};
|
|
2385
2185
|
|
|
2386
|
-
// src/internal/Type/
|
|
2387
|
-
import * as
|
|
2388
|
-
var
|
|
2389
|
-
name:
|
|
2390
|
-
typename: TypenameSchema,
|
|
2391
|
-
version: VersionSchema,
|
|
2186
|
+
// src/internal/Type/type-schema.ts
|
|
2187
|
+
import * as Schema11 from "effect/Schema";
|
|
2188
|
+
var TypeSchemaStruct = Schema11.Struct({
|
|
2189
|
+
name: Schema11.optional(Schema11.String),
|
|
2392
2190
|
jsonSchema: JsonSchemaType
|
|
2393
|
-
})
|
|
2394
|
-
|
|
2395
|
-
version: "0.1.0"
|
|
2396
|
-
}), LabelAnnotation.set([
|
|
2191
|
+
});
|
|
2192
|
+
var TypeSchema = TypeSchemaStruct.pipe(LabelAnnotation.set([
|
|
2397
2193
|
"name"
|
|
2398
2194
|
]), IconAnnotation.set({
|
|
2399
2195
|
icon: "ph--database--regular",
|
|
2400
2196
|
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
|
-
};
|
|
2197
|
+
}), EchoTypeKindSchema(TypeMetaSchemaDXN));
|
|
2724
2198
|
|
|
2725
2199
|
export {
|
|
2726
2200
|
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
2201
|
VersionTypeId,
|
|
2747
2202
|
compare,
|
|
2748
2203
|
sortByLabel,
|
|
2749
2204
|
sortByTypename,
|
|
2750
2205
|
sort,
|
|
2751
|
-
getMetaChecked,
|
|
2752
|
-
getKeys,
|
|
2753
|
-
deleteKeys,
|
|
2754
|
-
addTag,
|
|
2755
|
-
removeTag,
|
|
2756
2206
|
EventId,
|
|
2757
2207
|
ChangeId,
|
|
2758
2208
|
batchEvents,
|
|
@@ -2790,20 +2240,19 @@ export {
|
|
|
2790
2240
|
makeObject,
|
|
2791
2241
|
subscribe,
|
|
2792
2242
|
change,
|
|
2793
|
-
|
|
2794
|
-
getObjectDXN,
|
|
2795
|
-
getDXN,
|
|
2796
|
-
getDatabase,
|
|
2243
|
+
TypeMetaSchemaDXN,
|
|
2797
2244
|
makeEchoTypeSchema,
|
|
2245
|
+
normalizeSchema,
|
|
2798
2246
|
EchoObjectSchema,
|
|
2799
2247
|
EchoRelationSchema,
|
|
2248
|
+
getDXNForRelationSchemaRef,
|
|
2249
|
+
EchoTypeKindSchema,
|
|
2800
2250
|
isVersion,
|
|
2801
2251
|
version,
|
|
2802
2252
|
versionValid,
|
|
2803
2253
|
compareVersions,
|
|
2804
2254
|
encodeVersion,
|
|
2805
2255
|
decodeVersion,
|
|
2806
|
-
normalizeSchema,
|
|
2807
2256
|
makeTypedEntityClass,
|
|
2808
2257
|
objectToJSON,
|
|
2809
2258
|
objectFromJSON,
|
|
@@ -2811,9 +2260,13 @@ export {
|
|
|
2811
2260
|
objectStructureToJson,
|
|
2812
2261
|
createObject,
|
|
2813
2262
|
isDeleted,
|
|
2814
|
-
createQueueDXN,
|
|
2815
2263
|
setValue,
|
|
2816
2264
|
getSnapshot,
|
|
2265
|
+
makeAtom,
|
|
2266
|
+
makeProperty,
|
|
2267
|
+
makeWithReactive,
|
|
2268
|
+
makeEntity,
|
|
2269
|
+
makeRelation,
|
|
2817
2270
|
clone,
|
|
2818
2271
|
prettyFilter,
|
|
2819
2272
|
prettyQuery,
|
|
@@ -2821,14 +2274,6 @@ export {
|
|
|
2821
2274
|
updateFieldsInSchema,
|
|
2822
2275
|
removeFieldsFromSchema,
|
|
2823
2276
|
updateFieldNameInSchema,
|
|
2824
|
-
|
|
2825
|
-
|
|
2826
|
-
|
|
2827
|
-
isMutable,
|
|
2828
|
-
EchoSchema,
|
|
2829
|
-
JsonPath,
|
|
2830
|
-
JsonProp,
|
|
2831
|
-
getValue,
|
|
2832
|
-
splitJsonPath
|
|
2833
|
-
};
|
|
2834
|
-
//# sourceMappingURL=chunk-MOR5ERFM.mjs.map
|
|
2277
|
+
TypeSchema
|
|
2278
|
+
};
|
|
2279
|
+
//# sourceMappingURL=chunk-7FPIAJIV.mjs.map
|