@dxos/echo 0.8.4-staging.ac66bdf99f → 0.9.1-main.c7dcc2e112
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +102 -5
- package/README.md +7 -7
- package/dist/lib/neutral/Annotation.mjs +45 -6
- package/dist/lib/neutral/Database.mjs +10 -17
- package/dist/lib/neutral/Entity.mjs +35 -20
- package/dist/lib/neutral/Err.mjs +3 -3
- package/dist/lib/neutral/Feed.mjs +23 -19
- package/dist/lib/neutral/Filter.mjs +13 -15
- package/dist/lib/neutral/Format.mjs +23 -3
- package/dist/lib/neutral/JsonSchema.mjs +7 -8
- package/dist/lib/neutral/Key.mjs +9 -5
- package/dist/lib/neutral/Migration.mjs +11 -10
- package/dist/lib/neutral/Obj.mjs +33 -20
- package/dist/lib/neutral/Order.mjs +7 -3
- package/dist/lib/neutral/Query.mjs +17 -17
- package/dist/lib/neutral/QueryResult.mjs +1 -1
- package/dist/lib/neutral/Ref.mjs +10 -9
- package/dist/lib/neutral/Registry.mjs +14 -0
- package/dist/lib/neutral/Relation.mjs +28 -25
- package/dist/lib/neutral/Scope.mjs +12 -0
- package/dist/lib/neutral/Tag.mjs +17 -14
- package/dist/lib/neutral/Type.mjs +54 -26
- package/dist/lib/neutral/{chunk-OMUPQMLR.mjs → chunk-35INCYOE.mjs} +1 -1
- package/dist/lib/neutral/chunk-35INCYOE.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-4OIBYSXE.mjs → chunk-3JXQUMUI.mjs} +78 -32
- package/dist/lib/neutral/chunk-3JXQUMUI.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-G3IQMKF7.mjs → chunk-4TPQZPLY.mjs} +130 -119
- package/dist/lib/neutral/chunk-4TPQZPLY.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-TU3GW67D.mjs → chunk-5GAIWRQB.mjs} +40 -40
- package/dist/lib/neutral/chunk-5GAIWRQB.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-B4BASU6W.mjs → chunk-6CEISA3V.mjs} +93 -76
- package/dist/lib/neutral/chunk-6CEISA3V.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-GZQTCRJB.mjs → chunk-6M2Z6WBH.mjs} +22 -2
- package/dist/lib/neutral/chunk-6M2Z6WBH.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-ANHVGJI4.mjs → chunk-7LOUAPYZ.mjs} +9 -5
- package/dist/lib/neutral/chunk-7LOUAPYZ.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-WAK4DMFV.mjs → chunk-A53NTBHE.mjs} +12 -7
- package/dist/lib/neutral/chunk-A53NTBHE.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-EAMSSLZC.mjs → chunk-AFANXSGV.mjs} +83 -46
- package/dist/lib/neutral/chunk-AFANXSGV.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-UBEZSGXY.mjs → chunk-BBFJWWAV.mjs} +6 -6
- package/dist/lib/neutral/chunk-BBFJWWAV.mjs.map +7 -0
- package/dist/lib/neutral/chunk-E7IOTOZD.mjs +108 -0
- package/dist/lib/neutral/chunk-E7IOTOZD.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-UI6MWK5W.mjs → chunk-EVK6XBXO.mjs} +16 -2
- package/dist/lib/neutral/chunk-EVK6XBXO.mjs.map +7 -0
- package/dist/lib/neutral/chunk-HGWQR5KH.mjs +259 -0
- package/dist/lib/neutral/chunk-HGWQR5KH.mjs.map +7 -0
- package/dist/lib/neutral/chunk-JZ6LFQU5.mjs +109 -0
- package/dist/lib/neutral/chunk-JZ6LFQU5.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-JUXPFOEI.mjs → chunk-K3S7D5PR.mjs} +48 -88
- package/dist/lib/neutral/chunk-K3S7D5PR.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-OS35K56T.mjs → chunk-L3OBWBV2.mjs} +3 -3
- package/dist/lib/neutral/{chunk-OS35K56T.mjs.map → chunk-L3OBWBV2.mjs.map} +2 -2
- package/dist/lib/neutral/{chunk-V36VO5SS.mjs → chunk-NOL7O3BL.mjs} +32 -40
- package/dist/lib/neutral/chunk-NOL7O3BL.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-TBKX6JQO.mjs → chunk-O6BH7EPN.mjs} +30 -3
- package/dist/lib/neutral/chunk-O6BH7EPN.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-7RO7CPBZ.mjs → chunk-PLDMJJJC.mjs} +2 -2
- package/dist/lib/neutral/{chunk-HBUZJNZO.mjs → chunk-SZ5WB6HF.mjs} +94 -99
- package/dist/lib/neutral/chunk-SZ5WB6HF.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-BVOFLCVF.mjs → chunk-TF5BSLF6.mjs} +9 -6
- package/dist/lib/neutral/chunk-TF5BSLF6.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-DQYLD2RB.mjs → chunk-TFEWTY5A.mjs} +155 -129
- package/dist/lib/neutral/chunk-TFEWTY5A.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-MOR5ERFM.mjs → chunk-VQYL2OQF.mjs} +771 -1252
- package/dist/lib/neutral/chunk-VQYL2OQF.mjs.map +7 -0
- package/dist/lib/neutral/chunk-WISOH2XH.mjs +36 -0
- package/dist/lib/neutral/chunk-WISOH2XH.mjs.map +7 -0
- package/dist/lib/neutral/chunk-WU3GIANS.mjs +31 -0
- package/dist/lib/neutral/chunk-WU3GIANS.mjs.map +7 -0
- package/dist/lib/neutral/chunk-WZ32BF53.mjs +702 -0
- package/dist/lib/neutral/chunk-WZ32BF53.mjs.map +7 -0
- package/dist/lib/neutral/chunk-X3NUUON4.mjs +184 -0
- package/dist/lib/neutral/chunk-X3NUUON4.mjs.map +7 -0
- package/dist/lib/neutral/chunk-Z3WMRRAZ.mjs +168 -0
- package/dist/lib/neutral/chunk-Z3WMRRAZ.mjs.map +7 -0
- package/dist/lib/neutral/index.mjs +47 -41
- package/dist/lib/neutral/internal/index.mjs +157 -72
- package/dist/lib/neutral/meta.json +1 -1
- package/dist/lib/neutral/testing/index.mjs +261 -178
- package/dist/lib/neutral/testing/index.mjs.map +4 -4
- package/dist/types/src/Annotation.d.ts +108 -4
- package/dist/types/src/Annotation.d.ts.map +1 -1
- package/dist/types/src/Annotation.test.d.ts +2 -0
- package/dist/types/src/Annotation.test.d.ts.map +1 -0
- package/dist/types/src/Collection.d.ts +2 -3
- package/dist/types/src/Collection.d.ts.map +1 -1
- package/dist/types/src/Database.d.ts +78 -49
- package/dist/types/src/Database.d.ts.map +1 -1
- package/dist/types/src/Dataset.d.ts +16 -6
- package/dist/types/src/Dataset.d.ts.map +1 -1
- package/dist/types/src/Entity.d.ts +103 -28
- package/dist/types/src/Entity.d.ts.map +1 -1
- package/dist/types/src/Err.d.ts +27 -27
- package/dist/types/src/Err.d.ts.map +1 -1
- package/dist/types/src/Feed.d.ts +69 -19
- package/dist/types/src/Feed.d.ts.map +1 -1
- package/dist/types/src/Filter.d.ts +38 -12
- package/dist/types/src/Filter.d.ts.map +1 -1
- package/dist/types/src/Format.d.ts +0 -2
- package/dist/types/src/Format.d.ts.map +1 -1
- package/dist/types/src/Hypergraph.d.ts +14 -9
- package/dist/types/src/Hypergraph.d.ts.map +1 -1
- package/dist/types/src/Json.d.ts +33 -0
- package/dist/types/src/Json.d.ts.map +1 -0
- package/dist/types/src/Json.test.d.ts +2 -0
- package/dist/types/src/Json.test.d.ts.map +1 -0
- package/dist/types/src/JsonSchema.d.ts +2 -2
- package/dist/types/src/JsonSchema.d.ts.map +1 -1
- package/dist/types/src/Key.d.ts +1 -1
- package/dist/types/src/Key.d.ts.map +1 -1
- package/dist/types/src/Migration.d.ts +26 -11
- package/dist/types/src/Migration.d.ts.map +1 -1
- package/dist/types/src/Obj.d.ts +106 -61
- package/dist/types/src/Obj.d.ts.map +1 -1
- package/dist/types/src/Order.d.ts +10 -0
- package/dist/types/src/Order.d.ts.map +1 -1
- package/dist/types/src/Query.d.ts +34 -12
- package/dist/types/src/Query.d.ts.map +1 -1
- package/dist/types/src/QueryResult.d.ts +21 -0
- package/dist/types/src/QueryResult.d.ts.map +1 -1
- package/dist/types/src/Ref.d.ts +15 -7
- package/dist/types/src/Ref.d.ts.map +1 -1
- package/dist/types/src/Registry.d.ts +131 -0
- package/dist/types/src/Registry.d.ts.map +1 -0
- package/dist/types/src/Relation.d.ts +73 -41
- package/dist/types/src/Relation.d.ts.map +1 -1
- package/dist/types/src/Scope.d.ts +35 -0
- package/dist/types/src/Scope.d.ts.map +1 -0
- package/dist/types/src/Tag.d.ts +21 -5
- package/dist/types/src/Tag.d.ts.map +1 -1
- package/dist/types/src/Type.d.ts +366 -95
- package/dist/types/src/Type.d.ts.map +1 -1
- package/dist/types/src/View.d.ts +9 -12
- package/dist/types/src/View.d.ts.map +1 -1
- package/dist/types/src/exemplars.test.d.ts +2 -0
- package/dist/types/src/exemplars.test.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +4 -3
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/internal/Annotation/annotations.d.ts +120 -38
- package/dist/types/src/internal/Annotation/annotations.d.ts.map +1 -1
- package/dist/types/src/internal/Annotation/dictionary.d.ts +24 -0
- package/dist/types/src/internal/Annotation/dictionary.d.ts.map +1 -0
- package/dist/types/src/internal/Annotation/entity-dictionary.d.ts +14 -0
- package/dist/types/src/internal/Annotation/entity-dictionary.d.ts.map +1 -0
- package/dist/types/src/internal/Annotation/index.d.ts +4 -2
- package/dist/types/src/internal/Annotation/index.d.ts.map +1 -1
- package/dist/types/src/internal/Annotation/sorting.d.ts.map +1 -1
- package/dist/types/src/internal/Annotation/util.d.ts +14 -5
- package/dist/types/src/internal/Annotation/util.d.ts.map +1 -1
- package/dist/types/src/internal/Entity/api.d.ts +17 -3
- package/dist/types/src/internal/Entity/api.d.ts.map +1 -1
- package/dist/types/src/internal/Entity/entity.d.ts +72 -8
- package/dist/types/src/internal/Entity/entity.d.ts.map +1 -1
- package/dist/types/src/internal/Entity/guard.d.ts +10 -0
- package/dist/types/src/internal/Entity/guard.d.ts.map +1 -0
- package/dist/types/src/internal/Entity/index.d.ts +2 -0
- package/dist/types/src/internal/Entity/index.d.ts.map +1 -1
- package/dist/types/src/internal/Entity/model.d.ts +21 -17
- package/dist/types/src/internal/Entity/model.d.ts.map +1 -1
- package/dist/types/src/internal/Entity/object.d.ts +3 -3
- package/dist/types/src/internal/Entity/object.d.ts.map +1 -1
- package/dist/types/src/internal/Entity/relation.d.ts +30 -7
- package/dist/types/src/internal/Entity/relation.d.ts.map +1 -1
- package/dist/types/src/internal/Entity/type-kind.d.ts +24 -0
- package/dist/types/src/internal/Entity/type-kind.d.ts.map +1 -0
- package/dist/types/src/internal/Entity/type-uri.d.ts +24 -0
- package/dist/types/src/internal/Entity/type-uri.d.ts.map +1 -0
- package/dist/types/src/internal/Entity/version.d.ts.map +1 -1
- package/dist/types/src/internal/Format/date.d.ts.map +1 -1
- package/dist/types/src/internal/Format/format.d.ts +3 -2
- package/dist/types/src/internal/Format/format.d.ts.map +1 -1
- package/dist/types/src/internal/Format/index.d.ts +2 -2
- package/dist/types/src/internal/Format/index.d.ts.map +1 -1
- package/dist/types/src/internal/Format/number.d.ts.map +1 -1
- package/dist/types/src/internal/Format/object.d.ts +3 -1
- package/dist/types/src/internal/Format/object.d.ts.map +1 -1
- package/dist/types/src/internal/Format/types.d.ts.map +1 -1
- package/dist/types/src/internal/JsonSchema/json-schema-normalize.d.ts.map +1 -1
- package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts +34 -34
- package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts.map +1 -1
- package/dist/types/src/internal/JsonSchema/json-schema.d.ts +3 -2
- package/dist/types/src/internal/JsonSchema/json-schema.d.ts.map +1 -1
- package/dist/types/src/internal/Obj/atoms.d.ts +43 -0
- package/dist/types/src/internal/Obj/atoms.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/clone.d.ts.map +1 -1
- package/dist/types/src/internal/Obj/common.d.ts.map +1 -1
- package/dist/types/src/internal/Obj/create-object.d.ts +12 -12
- package/dist/types/src/internal/Obj/create-object.d.ts.map +1 -1
- package/dist/types/src/internal/Obj/deleted.d.ts.map +1 -1
- package/dist/types/src/internal/Obj/index.d.ts +1 -1
- package/dist/types/src/internal/Obj/index.d.ts.map +1 -1
- package/dist/types/src/internal/Obj/json-serializer.d.ts +8 -8
- package/dist/types/src/internal/Obj/json-serializer.d.ts.map +1 -1
- package/dist/types/src/internal/Obj/set-value.d.ts +1 -1
- package/dist/types/src/internal/Obj/set-value.d.ts.map +1 -1
- package/dist/types/src/internal/Obj/snapshot.d.ts.map +1 -1
- package/dist/types/src/internal/Obj/typed-object.d.ts +1 -1
- package/dist/types/src/internal/Query/index.d.ts +2 -0
- package/dist/types/src/internal/Query/index.d.ts.map +1 -0
- package/dist/types/src/internal/{Query.d.ts → Query/pretty.d.ts} +1 -1
- package/dist/types/src/internal/Query/pretty.d.ts.map +1 -0
- package/dist/types/src/internal/Ref/atoms.d.ts +10 -0
- package/dist/types/src/internal/Ref/atoms.d.ts.map +1 -0
- package/dist/types/src/internal/Ref/index.d.ts +1 -0
- package/dist/types/src/internal/Ref/index.d.ts.map +1 -1
- package/dist/types/src/internal/Ref/ref-array.d.ts +2 -2
- package/dist/types/src/internal/Ref/ref.d.ts +114 -19
- package/dist/types/src/internal/Ref/ref.d.ts.map +1 -1
- package/dist/types/src/internal/Ref/strong-deps.d.ts +35 -0
- package/dist/types/src/internal/Ref/strong-deps.d.ts.map +1 -0
- package/dist/types/src/internal/Ref/utils.d.ts +8 -0
- package/dist/types/src/internal/Ref/utils.d.ts.map +1 -0
- package/dist/types/src/internal/Type/compose.d.ts.map +1 -1
- package/dist/types/src/internal/Type/index.d.ts +1 -2
- package/dist/types/src/internal/Type/index.d.ts.map +1 -1
- package/dist/types/src/internal/Type/manipulation.d.ts +0 -1
- package/dist/types/src/internal/Type/manipulation.d.ts.map +1 -1
- package/dist/types/src/internal/Type/type-schema.d.ts +52 -0
- package/dist/types/src/internal/Type/type-schema.d.ts.map +1 -0
- package/dist/types/src/internal/common/api/meta.d.ts +14 -11
- package/dist/types/src/internal/common/api/meta.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/change-context.d.ts +1 -1
- package/dist/types/src/internal/common/proxy/change-context.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/errors.d.ts +1 -1
- package/dist/types/src/internal/common/proxy/errors.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/event-batch.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/json-serializer.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/make-object.d.ts +11 -5
- package/dist/types/src/internal/common/proxy/make-object.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/ownership.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/proxy-utils.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/reactive-array.d.ts +1 -1
- package/dist/types/src/internal/common/proxy/reactive.d.ts +1 -1
- package/dist/types/src/internal/common/proxy/reactive.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/reactive.test.d.ts +2 -0
- package/dist/types/src/internal/common/proxy/reactive.test.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/schema-validator.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/typed-handler.d.ts +18 -2
- package/dist/types/src/internal/common/proxy/typed-handler.d.ts.map +1 -1
- package/dist/types/src/internal/common/types/base.d.ts +4 -4
- package/dist/types/src/internal/common/types/base.d.ts.map +1 -1
- package/dist/types/src/internal/common/types/entity.d.ts +62 -5
- package/dist/types/src/internal/common/types/entity.d.ts.map +1 -1
- package/dist/types/src/internal/common/types/index.d.ts +1 -1
- package/dist/types/src/internal/common/types/index.d.ts.map +1 -1
- package/dist/types/src/internal/common/types/meta.d.ts +33 -12
- package/dist/types/src/internal/common/types/meta.d.ts.map +1 -1
- package/dist/types/src/internal/common/types/model-symbols.d.ts +15 -4
- package/dist/types/src/internal/common/types/model-symbols.d.ts.map +1 -1
- package/dist/types/src/internal/common/types/typename.d.ts +7 -0
- package/dist/types/src/internal/common/types/typename.d.ts.map +1 -1
- package/dist/types/src/internal/common/types/version.d.ts +1 -1
- package/dist/types/src/internal/common/types/well-known-types.d.ts +11 -0
- package/dist/types/src/internal/common/types/well-known-types.d.ts.map +1 -0
- package/dist/types/src/internal/index.d.ts +2 -2
- package/dist/types/src/internal/index.d.ts.map +1 -1
- package/dist/types/src/testing/index.d.ts +1 -0
- package/dist/types/src/testing/index.d.ts.map +1 -1
- package/dist/types/src/testing/registry.d.ts +9 -0
- package/dist/types/src/testing/registry.d.ts.map +1 -0
- package/dist/types/src/testing/test-data.d.ts +8 -8
- package/dist/types/src/testing/test-data.d.ts.map +1 -1
- package/dist/types/src/testing/test-schema.d.ts +83 -89
- package/dist/types/src/testing/test-schema.d.ts.map +1 -1
- package/dist/types/src/testing/util.d.ts +5 -3
- package/dist/types/src/testing/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +26 -24
- package/src/Annotation.test.ts +439 -0
- package/src/Annotation.ts +163 -4
- package/src/Collection.ts +5 -9
- package/src/Database.ts +126 -101
- package/src/Dataset.ts +10 -2
- package/src/Entity.test.ts +116 -6
- package/src/Entity.ts +136 -32
- package/src/Err.ts +4 -4
- package/src/Feed.ts +95 -44
- package/src/Filter.ts +70 -40
- package/src/Format.ts +0 -4
- package/src/Hypergraph.ts +14 -9
- package/src/Json.test.ts +175 -0
- package/src/Json.ts +103 -0
- package/src/Key.ts +1 -1
- package/src/Migration.ts +39 -19
- package/src/Obj.test.ts +122 -20
- package/src/Obj.ts +170 -91
- package/src/Order.ts +22 -0
- package/src/Query.test.ts +183 -154
- package/src/Query.ts +172 -85
- package/src/QueryResult.ts +26 -0
- package/src/Ref.ts +22 -4
- package/src/Registry.ts +155 -0
- package/src/Relation.test.ts +10 -10
- package/src/Relation.ts +116 -69
- package/src/Scope.ts +50 -0
- package/src/Tag.md +88 -0
- package/src/Tag.ts +50 -6
- package/src/Type.test.ts +223 -18
- package/src/Type.ts +623 -131
- package/src/View.ts +14 -23
- package/src/exemplars.test.ts +21 -0
- package/src/index.ts +4 -4
- package/src/internal/Annotation/annotations.test.ts +31 -11
- package/src/internal/Annotation/annotations.ts +199 -111
- package/src/internal/Annotation/dictionary.ts +47 -0
- package/src/internal/Annotation/entity-dictionary.ts +74 -0
- package/src/internal/Annotation/index.ts +4 -2
- package/src/internal/Annotation/util.ts +17 -8
- package/src/internal/Entity/api.ts +54 -7
- package/src/internal/Entity/entity.ts +196 -47
- package/src/internal/Entity/guard.ts +26 -0
- package/src/internal/Entity/index.ts +2 -0
- package/src/internal/Entity/model.ts +38 -28
- package/src/internal/Entity/object.ts +21 -5
- package/src/internal/Entity/relation.ts +68 -34
- package/src/internal/Entity/type-kind.ts +75 -0
- package/src/internal/Entity/type-uri.ts +92 -0
- package/src/internal/Entity/util.ts +9 -9
- package/src/internal/Format/date.ts +0 -4
- package/src/internal/Format/format.test.ts +21 -0
- package/src/internal/Format/index.ts +2 -3
- package/src/internal/Format/object.ts +21 -4
- package/src/internal/Format/types.ts +1 -1
- package/src/internal/JsonSchema/annotations.ts +1 -1
- package/src/internal/JsonSchema/json-schema-type.ts +4 -4
- package/src/internal/JsonSchema/json-schema.test.ts +71 -145
- package/src/internal/JsonSchema/json-schema.ts +49 -35
- package/src/internal/Obj/atoms.ts +275 -0
- package/src/internal/Obj/clone.ts +9 -4
- package/src/internal/Obj/create-object.test.ts +12 -10
- package/src/internal/Obj/create-object.ts +68 -22
- package/src/internal/Obj/index.ts +1 -1
- package/src/internal/Obj/inspect.ts +5 -3
- package/src/internal/Obj/json-serializer.test.ts +101 -22
- package/src/internal/Obj/json-serializer.ts +92 -36
- package/src/internal/Obj/set-value.test.ts +22 -45
- package/src/internal/Obj/set-value.ts +12 -19
- package/src/internal/Obj/snapshot.ts +13 -4
- package/src/internal/Obj/typed-object.test.ts +9 -11
- package/src/internal/Obj/typed-object.ts +1 -1
- package/src/internal/Query/index.ts +5 -0
- package/src/internal/{Query.ts → Query/pretty.ts} +40 -12
- package/src/internal/Ref/atoms.ts +20 -0
- package/src/internal/Ref/index.ts +1 -0
- package/src/internal/Ref/ref-array.ts +3 -3
- package/src/internal/Ref/ref.test.ts +18 -27
- package/src/internal/Ref/ref.ts +224 -69
- package/src/internal/Ref/strong-deps.ts +107 -0
- package/src/internal/Ref/utils.ts +45 -0
- package/src/internal/Type/compose.test.ts +3 -1
- package/src/internal/Type/index.ts +1 -2
- package/src/internal/Type/manipulation.ts +0 -25
- package/src/internal/Type/type-schema.ts +60 -0
- package/src/internal/common/README.md +2 -2
- package/src/internal/common/api/meta.ts +19 -17
- package/src/internal/common/proxy/change-context.ts +1 -1
- package/src/internal/common/proxy/change.test.ts +91 -83
- package/src/internal/common/proxy/errors.ts +2 -2
- package/src/internal/common/proxy/handler.test.ts +1 -1
- package/src/internal/common/proxy/json-serializer.ts +27 -16
- package/src/internal/common/proxy/make-object.ts +44 -20
- package/src/internal/common/proxy/ownership.ts +2 -2
- package/src/internal/common/proxy/reactive-array.ts +1 -1
- package/src/internal/common/proxy/reactive.test.ts +54 -0
- package/src/internal/common/proxy/reactive.ts +11 -2
- package/src/internal/common/proxy/schema.test.ts +48 -86
- package/src/internal/common/proxy/typed-handler.test.ts +12 -11
- package/src/internal/common/proxy/typed-handler.ts +78 -16
- package/src/internal/common/proxy/typed-object.test.ts +16 -28
- package/src/internal/common/types/base.ts +4 -4
- package/src/internal/common/types/entity.ts +80 -1
- package/src/internal/common/types/index.ts +6 -1
- package/src/internal/common/types/meta.ts +62 -20
- package/src/internal/common/types/model-symbols.ts +24 -4
- package/src/internal/common/types/typename.ts +39 -3
- package/src/internal/common/types/well-known-types.ts +15 -0
- package/src/internal/index.ts +6 -4
- package/src/testing/api.test.ts +15 -9
- package/src/testing/index.ts +1 -0
- package/src/testing/registry.ts +44 -0
- package/src/testing/test-data.ts +159 -99
- package/src/testing/test-schema.ts +22 -58
- package/src/testing/util.ts +14 -11
- package/dist/lib/neutral/Extension.mjs +0 -18
- package/dist/lib/neutral/SchemaRegistry.mjs +0 -2
- package/dist/lib/neutral/chunk-2KHZ36F5.mjs +0 -361
- package/dist/lib/neutral/chunk-2KHZ36F5.mjs.map +0 -7
- package/dist/lib/neutral/chunk-4OIBYSXE.mjs.map +0 -7
- package/dist/lib/neutral/chunk-4P3IXBLT.mjs +0 -45
- package/dist/lib/neutral/chunk-4P3IXBLT.mjs.map +0 -7
- package/dist/lib/neutral/chunk-ANHVGJI4.mjs.map +0 -7
- package/dist/lib/neutral/chunk-B4BASU6W.mjs.map +0 -7
- package/dist/lib/neutral/chunk-BNCCGLJN.mjs +0 -7
- package/dist/lib/neutral/chunk-BNCCGLJN.mjs.map +0 -7
- package/dist/lib/neutral/chunk-BVOFLCVF.mjs.map +0 -7
- package/dist/lib/neutral/chunk-DQYLD2RB.mjs.map +0 -7
- package/dist/lib/neutral/chunk-EAMSSLZC.mjs.map +0 -7
- package/dist/lib/neutral/chunk-G3IQMKF7.mjs.map +0 -7
- package/dist/lib/neutral/chunk-GZQTCRJB.mjs.map +0 -7
- package/dist/lib/neutral/chunk-HBUZJNZO.mjs.map +0 -7
- package/dist/lib/neutral/chunk-JUXPFOEI.mjs.map +0 -7
- package/dist/lib/neutral/chunk-MOR5ERFM.mjs.map +0 -7
- package/dist/lib/neutral/chunk-OMUPQMLR.mjs.map +0 -7
- package/dist/lib/neutral/chunk-PHU22NLC.mjs +0 -136
- package/dist/lib/neutral/chunk-PHU22NLC.mjs.map +0 -7
- package/dist/lib/neutral/chunk-ROG4RXXL.mjs +0 -97
- package/dist/lib/neutral/chunk-ROG4RXXL.mjs.map +0 -7
- package/dist/lib/neutral/chunk-T6W2LEZU.mjs +0 -125
- package/dist/lib/neutral/chunk-T6W2LEZU.mjs.map +0 -7
- package/dist/lib/neutral/chunk-TBKX6JQO.mjs.map +0 -7
- package/dist/lib/neutral/chunk-TU3GW67D.mjs.map +0 -7
- package/dist/lib/neutral/chunk-UBEZSGXY.mjs.map +0 -7
- package/dist/lib/neutral/chunk-UI6MWK5W.mjs.map +0 -7
- package/dist/lib/neutral/chunk-V36VO5SS.mjs.map +0 -7
- package/dist/lib/neutral/chunk-WAK4DMFV.mjs.map +0 -7
- package/dist/lib/neutral/chunk-YAHXAYOW.mjs +0 -56
- package/dist/lib/neutral/chunk-YAHXAYOW.mjs.map +0 -7
- package/dist/lib/neutral/chunk-YS6Q3XAD.mjs +0 -50
- package/dist/lib/neutral/chunk-YS6Q3XAD.mjs.map +0 -7
- package/dist/types/src/Extension.d.ts +0 -80
- package/dist/types/src/Extension.d.ts.map +0 -1
- package/dist/types/src/Extension.test.d.ts +0 -2
- package/dist/types/src/Extension.test.d.ts.map +0 -1
- package/dist/types/src/SchemaRegistry.d.ts +0 -84
- package/dist/types/src/SchemaRegistry.d.ts.map +0 -1
- package/dist/types/src/internal/Obj/ids.d.ts +0 -6
- package/dist/types/src/internal/Obj/ids.d.ts.map +0 -1
- package/dist/types/src/internal/Query.d.ts.map +0 -1
- package/dist/types/src/internal/Type/echo-schema.d.ts +0 -181
- package/dist/types/src/internal/Type/echo-schema.d.ts.map +0 -1
- package/dist/types/src/internal/Type/persistent-schema.d.ts +0 -20
- package/dist/types/src/internal/Type/persistent-schema.d.ts.map +0 -1
- package/src/Extension.test.ts +0 -235
- package/src/Extension.ts +0 -122
- package/src/SchemaRegistry.ts +0 -106
- package/src/internal/Obj/ids.ts +0 -12
- package/src/internal/Type/echo-schema.ts +0 -423
- package/src/internal/Type/persistent-schema.ts +0 -33
- /package/dist/lib/neutral/{Extension.mjs.map → Registry.mjs.map} +0 -0
- /package/dist/lib/neutral/{SchemaRegistry.mjs.map → Scope.mjs.map} +0 -0
- /package/dist/lib/neutral/{chunk-7RO7CPBZ.mjs.map → chunk-PLDMJJJC.mjs.map} +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/internal/Ref/ref.ts", "../../../src/internal/Ref/atoms.ts", "../../../src/internal/Ref/utils.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport type * as Atom from '@effect-atom/atom/Atom';\nimport * as Effect from 'effect/Effect';\nimport * as Equal from 'effect/Equal';\nimport * as Hash from 'effect/Hash';\nimport * as Option from 'effect/Option';\nimport * as ParseResult from 'effect/ParseResult';\nimport * as Pipeable from 'effect/Pipeable';\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\nimport type * as Types from 'effect/Types';\n\nimport { Event } from '@dxos/async';\nimport { type CustomInspectFunction, inspectCustom } from '@dxos/debug';\nimport { EncodedReference } from '@dxos/echo-protocol';\nimport { assertArgument, invariant } from '@dxos/invariant';\nimport { DXN, EID, EntityId, type URI } from '@dxos/keys';\n\nimport * as Database from '../../Database';\nimport type * as Type from '../../Type';\nimport {\n ReferenceAnnotationId,\n getSchemaURI,\n getTypeAnnotation,\n getTypeIdentifierAnnotation,\n} from '../Annotation/annotations';\nimport { type AnyEntity, type AnyProperties, type UnknownTypeSchema, getStaticTypeSchema } from '../common/types';\nimport { type JsonSchemaType } from '../JsonSchema';\nimport * as RefAtoms from './atoms';\n\n/**\n * The `$id` and `$ref` fields for an ECHO reference schema.\n */\nexport const JSON_SCHEMA_ECHO_REF_ID = '/schemas/echo/ref';\n\nexport const getSchemaReference = (property: JsonSchemaType): { typename: string } | undefined => {\n const { $id, reference: { schema: { $ref } = {} } = {} } = property;\n if ($id === JSON_SCHEMA_ECHO_REF_ID && $ref) {\n const parsed = DXN.tryMake($ref);\n const typename = parsed ? DXN.getName(parsed) : undefined;\n return typename ? { typename } : undefined;\n }\n};\n\nexport const createSchemaReference = (typename: string): Types.DeepMutable<JsonSchemaType> => {\n return {\n $id: JSON_SCHEMA_ECHO_REF_ID,\n reference: {\n schema: {\n $ref: DXN.make(typename),\n },\n },\n };\n};\n\n/**\n * Runtime type-info for a reference extracted from effect AST.\n */\nexport type RefereneAST = {\n /**\n * Typename of linked schema.\n */\n typename: string;\n\n /**\n * Version of linked schema.\n */\n version: string;\n};\n\nexport const getReferenceAst = (ast: SchemaAST.AST): RefereneAST | undefined => {\n if (ast._tag !== 'Declaration' || !ast.annotations[ReferenceAnnotationId]) {\n return undefined;\n }\n return {\n typename: (ast.annotations[ReferenceAnnotationId] as any).typename,\n version: (ast.annotations[ReferenceAnnotationId] as any).version,\n };\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const RefTypeId: unique symbol = Symbol.for('@dxos/echo/internal/Ref') as any;\n\n/**\n * Reference Schema.\n */\nexport interface RefSchema<T extends AnyEntity> extends Schema.SchemaClass<Ref<T>, EncodedReference> {}\n\n/**\n * Type of the `Ref` function and extra methods attached to it.\n */\nexport interface RefFn {\n // A reference target is a `Type.AnyEntity` entity (the canonical Option B\n // input) or one of the well-known \"any object\" / \"any relation\" branded\n // schemas (`Obj.Unknown` / `Relation.Unknown`). Arbitrary raw schemas are\n // rejected.\n //\n // Referencing a type-kind entity (a meta-schema, e.g. `Type.Type`) yields a\n // reference to a stored schema record; its loaded target is any registered\n // entity (`Type.AnyEntity`), since a stored object/relation schema is itself a\n // `Type.Type` record. Referencing an object/relation type yields a reference\n // to an instance of that type.\n <S extends Type.AnyEntity | UnknownTypeSchema<any, any> = Type.AnyEntity>(\n schema: S,\n ): RefSchema<\n S extends Type.AnyType\n ? Type.AnyEntity\n : S extends Type.AnyObj | Type.AnyRelation\n ? Type.InstanceType<S>\n : S extends UnknownTypeSchema<infer A, any>\n ? A\n : never\n >;\n\n /**\n * @returns True if the object is a reference.\n */\n isRef: (obj: unknown) => obj is Ref<any>;\n\n /**\n * @returns True if the reference points to the given object id.\n */\n hasEntityId: (id: EntityId) => (ref: Ref<any>) => boolean;\n\n /**\n * @returns True if the schema is a reference schema.\n */\n isRefSchema: (schema: Schema.Schema<any, any>) => schema is RefSchema<any>;\n\n /**\n * @returns True if the schema AST is a reference schema.\n */\n isRefSchemaAST: (ast: SchemaAST.AST) => boolean;\n\n /**\n * Constructs a reference that points to the given object.\n */\n // TODO(burdon): Narrow to Obj.Unknown?\n make: <T extends AnyEntity>(object: T) => Ref<T>;\n\n /**\n * Constructs a reference that points to the object specified by the provided URI\n * (either an `echo:` EID for an object reference or a `dxn:` DXN for a type reference).\n */\n fromURI: (uri: URI.URI) => Ref<any>;\n}\n\n/**\n * Schema builder for references.\n */\nexport const Ref: RefFn = (input: any): RefSchema<any> => {\n // `Type.Type` entities carry their source schema on the hidden slot; the\n // branded `Obj.Unknown` / `Relation.Unknown` schemas are used directly.\n const schema = getStaticTypeSchema(input) ?? input;\n assertArgument(Schema.isSchema(schema), 'schema', 'Must call with an instance of effect-schema');\n const annotation = getTypeAnnotation(schema);\n if (annotation == null) {\n throw new Error('Reference target must be an ECHO schema.');\n }\n\n return createEchoReferenceSchema(getTypeIdentifierAnnotation(schema), annotation.typename, annotation.version);\n};\n\n/**\n * Represents materialized reference to a target.\n * This is the data type for the fields marked as ref.\n */\nexport interface Ref<T> extends Pipeable.Pipeable {\n /**\n * Target URI (either an `echo:` EID for an object reference or a `dxn:` DXN for a type reference).\n */\n get uri(): URI.URI;\n\n /**\n * Returns true if the reference has a target available (inlined or resolver set).\n */\n get isAvailable(): boolean;\n\n /**\n * @returns The reference target.\n * May return `undefined` if the object is not loaded in the working set.\n * Accessing this property, even if it returns `undefined` will trigger the object to be loaded to the working set.\n */\n get target(): T | undefined;\n\n /**\n * @returns Promise that will resolves with the target object.\n * Will load the object from disk if it is not present in the working set.\n * @throws If the object is not available locally.\n */\n load(): Promise<T>;\n\n /**\n * @returns Promise that will resolves with the target object or undefined if the object is not loaded locally.\n */\n\n tryLoad(): Promise<T | undefined>;\n\n /**\n * Subscribe to the ref's resolution event.\n * The callback fires when the target object becomes available in the working set\n * (e.g. when its document is loaded after sibling-client mutation).\n * Note: the resolver only schedules a notification when the target is requested\n * via {@link target} while it is not yet loaded.\n * @returns Function that unsubscribes the callback.\n */\n onResolved(callback: () => void): () => void;\n\n /**\n * Do not inline the target object in the reference.\n * Makes .target unavailable unless the reference is connected to a database context.\n *\n * When serialized with toJSON, the difference is between:\n * `{ \"/\": \"dxn:...\" }`\n * and\n * `{ \"/\": \"dxn:...\", \"target\": { ... } }`\n *\n * Clones the reference object.\n */\n noInline(): Ref<T>;\n\n /**\n * Read-only atom for the ref target.\n * Resolves once when the target loads; does NOT subscribe to target object mutations.\n * Use `Obj.atom(ref)` if you need reactive snapshots that update on every object mutation.\n */\n get atom(): Atom.Atom<T | undefined>;\n\n /**\n * Serializes the reference to a JSON object.\n * The serialization format is compatible with the IPLD-style encoded references.\n * When a reference has a saved target (i.e. the target or object holding the reference is not in the database),\n * the target is included in the serialized object.\n *\n * Examples:\n * `{ \"/\": \"dxn:...\" }`\n * `{ \"/\": \"dxn:...\", \"target\": { ... } }`\n */\n encode(): EncodedReference;\n\n [RefTypeId]: {\n _T: T;\n };\n}\n\nexport declare namespace Ref {\n /**\n * Target of the reference.\n */\n export type Target<R> = R extends Ref<infer U> ? U : never;\n}\n\nRef.isRef = (obj: any): obj is Ref<any> => {\n return obj != null && typeof obj === 'object' && RefTypeId in obj;\n};\n\nRef.hasEntityId = (id: EntityId) => (ref: Ref<any>) => {\n const uri = EID.tryParse(ref.uri);\n return uri !== undefined && EID.isLocal(uri) && EID.getEntityId(uri) === id;\n};\n\nRef.isRefSchema = (schema: Schema.Schema<any, any>): schema is RefSchema<any> => {\n return Ref.isRefSchemaAST(schema.ast);\n};\n\nRef.isRefSchemaAST = (ast: SchemaAST.AST): boolean => {\n return SchemaAST.getAnnotation(ast, ReferenceAnnotationId).pipe(Option.isSome);\n};\n\nRef.make = <T extends AnyProperties>(obj: T): Ref<T> => {\n if (typeof obj !== 'object' || obj === null) {\n throw new TypeError('Expected: ECHO object.');\n }\n\n // TODO(dmaretskyi): Extract to `getObjectEchoUri` function.\n const id = obj.id;\n invariant(EntityId.isValid(id), 'Invalid object ID');\n const uri = EID.make({ entityId: id });\n const ref = new RefImpl(uri, obj);\n return ref;\n};\n\nRef.fromURI = (uri: URI.URI): Ref<any> => {\n assertArgument(typeof uri === 'string', 'uri', 'Expected URI string');\n return new RefImpl(uri);\n};\n\n/**\n * `reference` field on the schema object.\n */\nexport type JsonSchemaReferenceInfo = {\n schema: { $ref: string };\n schemaVersion?: string;\n};\n\n/**\n * @internal\n */\n// TODO(burdon): Move to json schema and make private?\nexport const createEchoReferenceSchema = (\n echoUri: string | undefined,\n typename: string | undefined,\n version: string | undefined,\n): Schema.SchemaClass<Ref<any>, EncodedReference> => {\n if (!echoUri && !typename) {\n throw new TypeError('Either echoUri or typename must be provided.');\n }\n\n const referenceInfo: JsonSchemaReferenceInfo = {\n schema: {\n // TODO(dmaretskyi): Include version?\n $ref: echoUri ?? DXN.make(typename!),\n },\n schemaVersion: version,\n };\n\n // TODO(dmaretskyi): Add name and description.\n const refSchema = Schema.declare<Ref<any>, EncodedReference, []>(\n [],\n {\n encode: () => {\n return (value) =>\n Effect.gen(function* () {\n if (Ref.isRef(value)) {\n return EncodedReference.fromURI((value as Ref<any>).uri);\n } else if (EncodedReference.isEncodedReference(value)) {\n return value;\n }\n throw new Error('Invalid reference');\n });\n },\n decode: () => {\n return (value) =>\n Effect.gen(function* () {\n const dbService = yield* Effect.serviceOption(Database.Service);\n\n // TODO(dmaretskyi): This branch seems to be taken by Schema.is\n if (Ref.isRef(value)) {\n if (Option.isSome(dbService)) {\n return dbService.value.db.makeRef(value.uri);\n } else {\n return value;\n }\n }\n\n if (!EncodedReference.isEncodedReference(value)) {\n return yield* Effect.fail(new ParseResult.Unexpected(value, 'reference'));\n }\n if (Option.isSome(dbService)) {\n return dbService.value.db.makeRef(EncodedReference.toURI(value));\n } else {\n return Ref.fromURI(EncodedReference.toURI(value));\n }\n });\n },\n },\n {\n jsonSchema: {\n // TODO(dmaretskyi): We should remove `$id` and keep `$ref` with a fully qualified name.\n $id: JSON_SCHEMA_ECHO_REF_ID,\n $ref: JSON_SCHEMA_ECHO_REF_ID,\n reference: referenceInfo,\n },\n [ReferenceAnnotationId]: {\n typename: typename ?? '',\n version,\n },\n },\n );\n\n return refSchema;\n};\n\nconst getSchemaExpectedName = (ast: SchemaAST.Annotated): string | undefined => {\n return SchemaAST.getIdentifierAnnotation(ast).pipe(\n Option.orElse(() => SchemaAST.getTitleAnnotation(ast)),\n Option.orElse(() => SchemaAST.getDescriptionAnnotation(ast)),\n Option.getOrElse(() => undefined),\n );\n};\n\n/**\n * Load-source ceiling for a resolution request. Cheaper tiers are always probed first; the\n * ceiling caps how far a request is allowed to reach:\n * - `working-set`: synchronous, in-memory only. A miss settles `unavailable` immediately.\n * - `disk`: probe the working set, then local storage; never the network.\n * - `network`: probe the working set, disk, then fetch from peers.\n *\n * `unavailable` is always relative to the requested ceiling (disk-unavailable ≠ network-unavailable).\n */\nexport type RefSource = 'working-set' | 'disk' | 'network';\n\n/**\n * A stateful, closure-aware handle to an in-flight (or settled) reference resolution.\n *\n * `ready` means the entity is FULLY USABLE: its own body and its strong-dependency closure are all\n * materialized. The body-vs-closure split is internal; `requesting` transparently covers \"a\n * dependency is still loading\".\n */\nexport interface RefResolverRequest {\n /**\n * `pending` is a one-way entry state (never re-entered). `requesting` means the body and/or\n * closure is still loading. `ready` means fully usable. `unavailable` means unreachable at the\n * requested ceiling.\n */\n readonly state: 'pending' | 'requesting' | 'ready' | 'unavailable';\n\n /**\n * Fires (deferred to a microtask) whenever {@link state} changes.\n */\n readonly stateChanged: Event<void>;\n\n /**\n * Synchronous snapshot of the resolved entity; defined iff `state === 'ready'`.\n */\n getResult(): AnyProperties | undefined;\n\n /**\n * Settles when `state ∈ {ready, unavailable}`.\n */\n wait(): Promise<AnyProperties | undefined>;\n\n /**\n * Decrements the refcount on the shared load op(s); cancels the underlying IO at zero.\n */\n abort(): void;\n}\n\nexport interface RefResolver {\n /**\n * Resolve a reference, returning a stateful handle. `source` is a required ceiling; cheaper\n * tiers are always probed first.\n */\n resolve(uri: URI.URI, options: { source: RefSource }): RefResolverRequest;\n\n /**\n * Resolve ref synchronously from the objects in the working set.\n *\n * @param uri\n * @param load If true the resolver should attempt to load the object from disk.\n * @param onLoad Callback to call when the object is loaded.\n * @deprecated Use {@link resolve} with `{ source: 'working-set' }`. Removed in Task 11.\n */\n resolveSync(uri: URI.URI, load: boolean, onLoad?: () => void): AnyProperties | undefined;\n\n /**\n * Resolver ref asynchronously.\n * @deprecated Use {@link resolve} with `{ source: 'network' }`. Removed in Task 11.\n */\n resolveLegacy(uri: URI.URI): Promise<AnyProperties | undefined>;\n\n /**\n * @deprecated Use {@link resolve} + `Type.getSchema`. Removed in Task 11.\n */\n resolveSchema(uri: URI.URI): Promise<Schema.Schema.AnyNoContext | undefined>;\n\n /**\n * Resolve the source `Type.AnyEntity` entity for a type URI. Used by\n * deserialization paths (`Obj.fromJSON`) to set the back-reference accessed\n * via `Obj.getType` / `Entity.getType`. Optional — resolvers that only\n * carry raw schemas may leave this unimplemented; the deserializer falls\n * back to leaving the type entity unset.\n * @deprecated Use {@link resolve}. Removed in Task 11.\n */\n resolveType?(uri: URI.URI): Promise<unknown | undefined>;\n}\n\n/**\n * A settled {@link RefResolverRequest} with a fixed `state` and `result`, used by resolvers\n * whose backends are fully synchronous (e.g. {@link StaticRefResolver}).\n */\nexport const makeSettledRequest = (\n state: RefResolverRequest['state'],\n result: AnyProperties | undefined,\n): RefResolverRequest => ({\n state,\n stateChanged: new Event<void>(),\n getResult: () => (state === 'ready' ? result : undefined),\n wait: async () => (state === 'ready' ? result : undefined),\n abort: () => {},\n});\n\nexport class RefImpl<T> implements Ref<T> {\n #uri: URI.URI;\n #resolver?: RefResolver = undefined;\n #resolved = new Event<void>();\n\n /**\n * Target is set when the reference is created from a specific object.\n * In this case, the target might not be in the database.\n */\n #target: T | undefined = undefined;\n\n /**\n * Callback to issue a reactive notification when object is resolved.\n */\n #resolverCallback = () => {\n this.#resolved.emit();\n };\n\n constructor(uri: URI.URI, target?: T) {\n this.#uri = uri;\n this.#target = target;\n }\n\n /**\n * @inheritdoc\n */\n get uri(): URI.URI {\n return this.#uri;\n }\n\n /**\n * @inheritdoc\n */\n get isAvailable(): boolean {\n return this.#target !== undefined || this.#resolver !== undefined;\n }\n\n /**\n * @inheritdoc\n */\n get target(): T | undefined {\n if (this.#target) {\n return this.#target;\n }\n\n invariant(this.#resolver, 'Resolver is not set');\n return this.#resolver.resolveSync(this.#uri, true, this.#resolverCallback) as T | undefined;\n }\n\n /**\n * @inheritdoc\n */\n async load(): Promise<T> {\n if (this.#target) {\n return this.#target;\n }\n invariant(this.#resolver, 'Resolver is not set');\n const obj = await this.#resolver.resolveLegacy(this.#uri);\n if (obj == null) {\n throw new Error('Object not found');\n }\n return obj as T;\n }\n\n /**\n * @inheritdoc\n */\n async tryLoad(): Promise<T | undefined> {\n if (this.#target) {\n return this.#target;\n }\n invariant(this.#resolver, 'Resolver is not set');\n return (await this.#resolver.resolveLegacy(this.#uri)) as T | undefined;\n }\n\n /**\n * @inheritdoc\n */\n onResolved(callback: () => void): () => void {\n return this.#resolved.on(callback);\n }\n\n /**\n * Do not inline the target object in the reference.\n * Makes .target unavailable unless the reference is connected to a database context.\n * Clones the reference object.\n */\n noInline(): RefImpl<T> {\n const ref = new RefImpl<T>(this.#uri, undefined);\n ref.#resolver = this.#resolver;\n return ref;\n }\n\n encode(): EncodedReference {\n return {\n '/': this.#uri,\n ...(this.#target ? { target: this.#target } : {}),\n };\n }\n\n /**\n * Serializes the reference to a JSON object.\n * The serialization format is compatible with the IPLD-style encoded references.\n * When a reference has a saved target (i.e. the target or object holding the reference is not in the database),\n * the target is included in the serialized object.\n */\n toJSON(): EncodedReference {\n return this.encode();\n }\n\n toString(): string {\n if (this.#target) {\n return `Ref(${this.#target.toString()})`;\n }\n\n return `Ref(${this.#uri.toString()})`;\n }\n\n [inspectCustom]: CustomInspectFunction = (depth, options, inspect) => {\n return this.toString();\n };\n\n [RefTypeId] = refVariance;\n\n /**\n * Effect Hash trait. Required for MutableHashMap-based caches (e.g., Atom.family)\n * to deduplicate Ref instances that point to the same object.\n * ECHO proxies return new RefImpl instances on every property access,\n * so without this, each access would create a separate cache entry.\n */\n [Hash.symbol](): number {\n return Hash.hash(this.#uri.toString());\n }\n\n /** Effect Equal trait. See {@link Hash.symbol} for rationale. */\n [Equal.symbol](that: Equal.Equal): boolean {\n return that instanceof RefImpl && this.#uri === that.uri;\n }\n\n get atom(): Atom.Atom<T | undefined> {\n return RefAtoms.refSimpleFamily(this);\n }\n\n /**\n * Internal method to set the resolver.\n *\n * @internal\n */\n _setResolver(resolver: RefResolver): void {\n this.#resolver = resolver;\n }\n\n /**\n * @internal\n */\n _getSavedTarget(): T | undefined {\n return this.#target;\n }\n\n pipe() {\n // eslint-disable-next-line prefer-rest-params\n return Pipeable.pipeArguments(this, arguments);\n }\n}\n\n/**\n * Internal API for setting the reference resolver.\n */\nexport const setRefResolver = (ref: Ref<any>, resolver: RefResolver) => {\n invariant(ref instanceof RefImpl, 'Ref is not an instance of RefImpl');\n ref._setResolver(resolver);\n};\n\n/**\n * Internal API for getting the saved target on a reference.\n */\nexport const getRefSavedTarget = (ref: Ref<any>): AnyProperties | undefined => {\n invariant(ref instanceof RefImpl, 'Ref is not an instance of RefImpl');\n return ref._getSavedTarget();\n};\n\n// Used to validate reference target type.\nconst refVariance: Ref<any>[typeof RefTypeId] = {\n _T: null as any,\n};\n\nexport const refFromEncodedReference = (encodedReference: EncodedReference, resolver?: RefResolver): Ref<any> => {\n const uri = EncodedReference.toURI(encodedReference);\n const ref = new RefImpl(uri);\n\n // TODO(dmaretskyi): Handle inline target in the encoded reference.\n\n if (resolver) {\n setRefResolver(ref, resolver);\n }\n return ref;\n};\n\nexport class StaticRefResolver implements RefResolver {\n public objects = new Map<EntityId, AnyProperties>();\n public schemas = new Map<URI.URI, Schema.Schema.AnyNoContext>();\n\n addObject(obj: AnyProperties): this {\n this.objects.set(obj.id, obj);\n return this;\n }\n\n addSchema(input: Type.AnyEntity): this {\n const schema = getStaticTypeSchema(input);\n invariant(schema, 'Type entity is missing its source schema');\n const uri = getSchemaURI(schema);\n invariant(uri, 'Schema has no URI');\n this.schemas.set(uri, schema);\n return this;\n }\n\n resolve(uri: URI.URI, _options: { source: RefSource }): RefResolverRequest {\n const obj = this.#lookup(uri);\n return makeSettledRequest(obj ? 'ready' : 'unavailable', obj);\n }\n\n resolveSync(uri: URI.URI, _load: boolean, _onLoad?: () => void): AnyProperties | undefined {\n return this.#lookup(uri);\n }\n\n async resolveLegacy(uri: URI.URI): Promise<AnyProperties | undefined> {\n return this.#lookup(uri);\n }\n\n async resolveSchema(uri: URI.URI): Promise<Schema.Schema.AnyNoContext | undefined> {\n return this.schemas.get(uri);\n }\n\n #lookup(uri: URI.URI): AnyProperties | undefined {\n const echoUri = EID.tryParse(uri);\n const id = echoUri ? EID.getEntityId(echoUri) : undefined;\n if (id == null) {\n return undefined;\n }\n return this.objects.get(id);\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Atom from '@effect-atom/atom/Atom';\n\nimport type { Ref } from './ref';\nimport { loadRefTarget } from './utils';\n\n/**\n * Atom family for ECHO refs.\n * Uses ref reference as key — same ref returns same atom.\n * This atom only updates once when the ref loads — it does not subscribe to target object changes.\n * Use `Obj.atom(ref)` if you need reactive snapshots of ECHO objects via a ref.\n */\nexport const refSimpleFamily = Atom.family(<T>(ref: Ref<T>): Atom.Atom<T | undefined> => {\n return Atom.make<T | undefined>((get) => {\n return loadRefTarget(ref, get, (target) => target);\n });\n});\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as Atom from '@effect-atom/atom/Atom';\n\nimport type { Ref } from './ref';\n\n/**\n * Internal helper for loading ref targets in atoms.\n * Handles the common pattern of checking for loaded target and triggering async load.\n */\nexport const loadRefTarget = <T, R>(\n ref: Ref<T>,\n get: Atom.Context,\n onTargetAvailable: (target: T) => R,\n): R | undefined => {\n // Accessing `ref.target` registers a resolution callback when the target is\n // not yet loaded, so resolution can be observed via `ref.onResolved` below.\n const currentTarget = ref.target;\n if (currentTarget) {\n return onTargetAvailable(currentTarget);\n }\n\n // Subscribe to the ref's resolution event in case the target loads later.\n const unsubscribe = ref.onResolved(() => {\n const target = ref.target;\n if (target) {\n get.setSelf(onTargetAvailable(target));\n }\n });\n get.addFinalizer(unsubscribe);\n\n // Also try async load (e.g. for objects that need disk loading).\n void ref\n .load()\n .then((loadedTarget) => {\n get.setSelf(onTargetAvailable(loadedTarget));\n })\n .catch(() => {\n // Loading failed; the resolution subscription above will pick up cross-client updates.\n });\n\n return undefined;\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Effect", "Equal", "Hash", "Option", "ParseResult", "Pipeable", "Schema", "SchemaAST", "Event", "inspectCustom", "EncodedReference", "assertArgument", "invariant", "DXN", "EID", "EntityId", "Atom", "loadRefTarget", "ref", "get", "onTargetAvailable", "currentTarget", "target", "unsubscribe", "onResolved", "setSelf", "addFinalizer", "load", "then", "loadedTarget", "catch", "undefined", "refSimpleFamily", "family", "ref", "make", "get", "loadRefTarget", "target", "reference", "$ref", "$id", "JSON_SCHEMA_ECHO_REF_ID", "parsed", "tryMake", "typename", "getName", "undefined", "schema", "version", "annotation", "getTypeAnnotation", "Error", "createEchoReferenceSchema", "isRef", "obj", "hasEntityId", "ref", "uri", "isRefSchema", "isRefSchemaAST", "ast", "make", "TypeError", "EID", "entityId", "id", "fromURI", "RefImpl", "referenceInfo", "schemaVersion", "Effect", "gen", "EncodedReference", "value", "Ref", "dbService", "Option", "isSome", "jsonSchema", "ReferenceAnnotationId", "getSchemaExpectedName", "stateChanged", "Event", "getResult", "wait", "state", "abort", "RefImpl", "undefined", "target", "invariant", "obj", "Error", "ref", "encode", "toString", "inspectCustom", "depth", "options", "inspect", "RefTypeId", "refVariance", "atom", "pipe", "_setResolver", "resolver", "_getSavedTarget", "uri", "schemas", "addObject", "objects", "set", "addSchema", "input", "schema", "getSchemaURI", "resolve", "makeSettledRequest", "resolveSync", "_onLoad", "resolveLegacy", "resolveSchema", "id"]
|
|
7
|
+
}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
} from "./chunk-ROG4RXXL.mjs";
|
|
4
|
-
import {
|
|
5
|
-
getDXN,
|
|
2
|
+
getURI,
|
|
6
3
|
make
|
|
7
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-6CEISA3V.mjs";
|
|
5
|
+
import {
|
|
6
|
+
makeObject
|
|
7
|
+
} from "./chunk-HGWQR5KH.mjs";
|
|
8
8
|
import {
|
|
9
9
|
FormInputAnnotation,
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
} from "./chunk-
|
|
10
|
+
HiddenAnnotation,
|
|
11
|
+
IconAnnotation
|
|
12
|
+
} from "./chunk-WZ32BF53.mjs";
|
|
13
13
|
import {
|
|
14
14
|
__export
|
|
15
15
|
} from "./chunk-J5LGTIGS.mjs";
|
|
@@ -17,12 +17,14 @@ import {
|
|
|
17
17
|
// src/Feed.ts
|
|
18
18
|
var Feed_exports = {};
|
|
19
19
|
__export(Feed_exports, {
|
|
20
|
+
ContextFeedService: () => ContextFeedService,
|
|
20
21
|
Feed: () => Feed,
|
|
21
22
|
FeedService: () => FeedService,
|
|
22
23
|
Service: () => Service,
|
|
23
24
|
append: () => append,
|
|
24
25
|
cursor: () => cursor,
|
|
25
|
-
|
|
26
|
+
getQueueUri: () => getQueueUri,
|
|
27
|
+
getSyncState: () => getSyncState,
|
|
26
28
|
make: () => make2,
|
|
27
29
|
next: () => next,
|
|
28
30
|
nextOption: () => nextOption,
|
|
@@ -31,13 +33,13 @@ __export(Feed_exports, {
|
|
|
31
33
|
remove: () => remove,
|
|
32
34
|
runQuery: () => runQuery,
|
|
33
35
|
setRetention: () => setRetention,
|
|
34
|
-
|
|
36
|
+
sync: () => sync
|
|
35
37
|
});
|
|
36
38
|
import * as Context from "effect/Context";
|
|
37
39
|
import * as Effect from "effect/Effect";
|
|
38
40
|
import * as Layer from "effect/Layer";
|
|
39
41
|
import * as Schema from "effect/Schema";
|
|
40
|
-
import { DXN } from "@dxos/keys";
|
|
42
|
+
import { DXN, EID } from "@dxos/keys";
|
|
41
43
|
var Feed = Schema.Struct({
|
|
42
44
|
/** User-facing display name. */
|
|
43
45
|
name: Schema.String.pipe(Schema.optional),
|
|
@@ -50,38 +52,20 @@ var Feed = Schema.Struct({
|
|
|
50
52
|
* - `trace`: Trace feed.
|
|
51
53
|
*/
|
|
52
54
|
namespace: Schema.optional(Schema.Literal("data", "trace"))
|
|
53
|
-
}).pipe(
|
|
54
|
-
typename: "org.dxos.type.feed",
|
|
55
|
-
version: "0.1.0"
|
|
56
|
-
}), SystemTypeAnnotation.set(true), IconAnnotation.set({
|
|
55
|
+
}).pipe(HiddenAnnotation.set(true), IconAnnotation.set({
|
|
57
56
|
icon: "ph--rows--regular",
|
|
58
57
|
hue: "yellow"
|
|
59
|
-
}));
|
|
58
|
+
}), makeObject(DXN.make("org.dxos.type.feed", "0.1.0")));
|
|
60
59
|
var make2 = (props = {}) => make(Feed, props);
|
|
61
|
-
var
|
|
62
|
-
const self = getDXN(feed).asEchoDXN();
|
|
63
|
-
if (!self || !self.spaceId) {
|
|
64
|
-
return void 0;
|
|
65
|
-
}
|
|
66
|
-
return new DXN(DXN.kind.QUEUE, [
|
|
67
|
-
feed.namespace ?? "data",
|
|
68
|
-
self.spaceId,
|
|
69
|
-
self.echoId
|
|
70
|
-
]);
|
|
71
|
-
};
|
|
72
|
-
var unsafeFromQueueDXN = (queueDxn) => {
|
|
73
|
-
const parts = queueDxn.asQueueDXN();
|
|
74
|
-
if (!parts) {
|
|
75
|
-
throw new Error(`Expected a queue DXN, got: ${queueDxn.toString()}`);
|
|
76
|
-
}
|
|
77
|
-
return make(Feed, {
|
|
78
|
-
id: parts.queueId,
|
|
79
|
-
namespace: parts.subspaceTag === "trace" ? "trace" : void 0
|
|
80
|
-
});
|
|
81
|
-
};
|
|
60
|
+
var getQueueUri = (feed) => EID.tryParse(getURI(feed));
|
|
82
61
|
var FeedService = class extends Context.Tag("@dxos/echo/Feed/FeedService")() {
|
|
83
62
|
};
|
|
84
63
|
var Service = FeedService;
|
|
64
|
+
var ContextFeedService = class _ContextFeedService extends Context.Tag("@dxos/echo/Feed/ContextFeedService")() {
|
|
65
|
+
static layer = (feed) => Layer.succeed(_ContextFeedService, {
|
|
66
|
+
feed
|
|
67
|
+
});
|
|
68
|
+
};
|
|
85
69
|
var notAvailable = Layer.succeed(FeedService, {
|
|
86
70
|
append: () => {
|
|
87
71
|
throw new Error("Feed.FeedService not available");
|
|
@@ -91,6 +75,12 @@ var notAvailable = Layer.succeed(FeedService, {
|
|
|
91
75
|
},
|
|
92
76
|
query: () => {
|
|
93
77
|
throw new Error("Feed.FeedService not available");
|
|
78
|
+
},
|
|
79
|
+
sync: () => {
|
|
80
|
+
throw new Error("Feed.FeedService not available");
|
|
81
|
+
},
|
|
82
|
+
getSyncState: () => {
|
|
83
|
+
throw new Error("Feed.FeedService not available");
|
|
94
84
|
}
|
|
95
85
|
});
|
|
96
86
|
var append = (feed, items) => Effect.gen(function* () {
|
|
@@ -104,6 +94,14 @@ var remove = (feed, items) => Effect.gen(function* () {
|
|
|
104
94
|
});
|
|
105
95
|
var query = (feed, queryOrFilter) => FeedService.pipe(Effect.map((service) => service.query(feed, queryOrFilter)));
|
|
106
96
|
var runQuery = (feed, queryOrFilter) => query(feed, queryOrFilter).pipe(Effect.flatMap((queryResult) => Effect.promise(() => queryResult.run())));
|
|
97
|
+
var sync = (feed, options) => Effect.gen(function* () {
|
|
98
|
+
const service = yield* FeedService;
|
|
99
|
+
yield* Effect.promise(() => service.sync(feed, options));
|
|
100
|
+
});
|
|
101
|
+
var getSyncState = (feed) => Effect.gen(function* () {
|
|
102
|
+
const service = yield* FeedService;
|
|
103
|
+
return yield* Effect.promise(() => service.getSyncState(feed));
|
|
104
|
+
});
|
|
107
105
|
var cursor = (_feed) => Effect.succeed({
|
|
108
106
|
_tag: "Cursor"
|
|
109
107
|
});
|
|
@@ -114,19 +112,21 @@ var setRetention = (_feed, _options) => Effect.void;
|
|
|
114
112
|
export {
|
|
115
113
|
Feed,
|
|
116
114
|
make2 as make,
|
|
117
|
-
|
|
118
|
-
unsafeFromQueueDXN,
|
|
115
|
+
getQueueUri,
|
|
119
116
|
FeedService,
|
|
120
117
|
Service,
|
|
118
|
+
ContextFeedService,
|
|
121
119
|
notAvailable,
|
|
122
120
|
append,
|
|
123
121
|
remove,
|
|
124
122
|
query,
|
|
125
123
|
runQuery,
|
|
124
|
+
sync,
|
|
125
|
+
getSyncState,
|
|
126
126
|
cursor,
|
|
127
127
|
next,
|
|
128
128
|
nextOption,
|
|
129
129
|
setRetention,
|
|
130
130
|
Feed_exports
|
|
131
131
|
};
|
|
132
|
-
//# sourceMappingURL=chunk-
|
|
132
|
+
//# sourceMappingURL=chunk-5GAIWRQB.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/Feed.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport * as Context from 'effect/Context';\nimport * as Effect from 'effect/Effect';\nimport * as Layer from 'effect/Layer';\nimport type * as Option from 'effect/Option';\nimport * as Schema from 'effect/Schema';\n\nimport { DXN, EID } from '@dxos/keys';\n\nimport * as Annotation from './Annotation';\nimport type * as Entity from './Entity';\nimport type * as Filter from './Filter';\nimport * as internal from './internal';\nimport * as Obj from './Obj';\nimport type * as Query from './Query';\nimport type * as QueryResult from './QueryResult';\nimport * as Type from './Type';\n\n/**\n * Runtime schema for a Feed object.\n *\n * @example\n * ```ts\n * const feed = Obj.make(Feed.Feed, { name: 'notifications', kind: 'org.dxos.plugin.notifications.v1' });\n * ```\n */\nexport const Feed = Schema.Struct({\n /** User-facing display name. */\n name: Schema.String.pipe(Schema.optional),\n /** Identifier for the feed's kind (e.g., plugin id). */\n kind: Schema.String.pipe(internal.FormInputAnnotation.set(false), Schema.optional),\n\n /**\n * Feed namespace.\n * Controls how feed data is stored and replicated.\n * - `data`: Data feed (default).\n * - `trace`: Trace feed.\n */\n namespace: Schema.optional(Schema.Literal('data', 'trace')),\n}).pipe(\n internal.HiddenAnnotation.set(true),\n Annotation.IconAnnotation.set({ icon: 'ph--rows--regular', hue: 'yellow' }),\n Type.makeObject(DXN.make('org.dxos.type.feed', '0.1.0')),\n);\n\n/**\n * TypeScript instance type for a Feed object.\n */\nexport type Feed = Type.InstanceType<typeof Feed>;\n\n//\n// Types\n//\n\n/**\n * Opaque cursor for iterating over feed items.\n */\n// TODO(dmaretskyi): T needs to be referenced in the type structure for typescript to respect it during inference and type-checking.\nexport interface Cursor<T = Obj.Snapshot> {\n readonly _tag: 'Cursor';\n}\n\n/**\n * Retention options for a feed.\n */\nexport interface RetentionOptions {\n /** Retain items after this cursor position. */\n // TODO(wittjosiah): Use FeedCursor from @dxos/feed?\n cursor?: string;\n}\n\n/**\n * Sync options for a feed.\n */\nexport interface SyncOptions {\n /** Push local changes to the server. Defaults to true. */\n shouldPush?: boolean;\n /** Pull remote changes from the server. Defaults to true. */\n shouldPull?: boolean;\n}\n\n/**\n * Queue replication backlog for a feed namespace.\n * `0` / `0` means caught up on pull and push.\n */\nexport interface SyncState {\n /** Blocks still to pull from remote. */\n blocksToPull: number;\n /** Unpositioned blocks still to push to remote. */\n blocksToPush: number;\n /** Total blocks stored locally for the feed namespace. */\n totalBlocks: number;\n}\n\n//\n// Factory\n//\n\n/**\n * Creates a new feed object.\n *\n * @example\n * ```ts\n * const feed = Feed.make({ name: 'notifications', kind: 'org.dxos.plugin.notifications.v1' });\n * ```\n */\n// TODO(wittjosiah): How to control the feed namespace (data/trace)? Why do feeds have namespaces?\nexport const make = (props: Obj.MakeProps<typeof Feed> = {}): Feed => Obj.make(Feed, props);\n\n/**\n * Returns the feed object's EID when the feed is stored in a space.\n *\n * Used internally by the feed service layer.\n */\nexport const getQueueUri = (feed: Feed): EID.EID | undefined => EID.tryParse(Obj.getURI(feed));\n\n//\n// Service\n//\n\n/**\n * Effect service for feed operations.\n * Provides the bridge to the underlying storage implementation.\n * Must be provided by the application layer (e.g., echo-db).\n */\nexport class FeedService extends Context.Tag('@dxos/echo/Feed/FeedService')<\n FeedService,\n {\n /**\n * Appends items to a feed.\n */\n append(feed: Feed, items: Entity.Unknown[]): Promise<void>;\n\n /**\n * Removes items from a feed by ID.\n */\n remove(feed: Feed, ids: string[]): Promise<void>;\n\n /**\n * Queries items in a feed.\n */\n query: {\n <Q extends Query.Any>(feed: Feed, query: Q): QueryResult.QueryResult<Query.Type<Q>>;\n <F extends Filter.Any>(feed: Feed, filter: F): QueryResult.QueryResult<Filter.Type<F>>;\n };\n\n /**\n * Syncs the feed with the server.\n */\n sync(feed: Feed, options?: SyncOptions): Promise<void>;\n\n /**\n * Returns queue replication backlog for the feed's namespace.\n */\n getSyncState(feed: Feed): Promise<SyncState>;\n }\n>() {}\n\n/**\n * @deprecated Use `FeedService` instead.\n */\nexport type Service = FeedService;\n\n/**\n * @deprecated Use `FeedService` instead.\n */\nexport const Service = FeedService;\n\n/**\n * Effect context service that holds the current feed for a scoped operation.\n *\n * @deprecated Prefer threading a `Feed.Feed` explicitly through function signatures\n * over hiding it behind a context service.\n */\nexport class ContextFeedService extends Context.Tag('@dxos/echo/Feed/ContextFeedService')<\n ContextFeedService,\n {\n readonly feed: Feed;\n }\n>() {\n static layer = (feed: Feed): Layer.Layer<ContextFeedService> => Layer.succeed(ContextFeedService, { feed });\n}\n\n/**\n * Layer that provides a Feed service that throws when accessed.\n * Useful as a default layer when no feed service is available.\n */\nexport const notAvailable: Layer.Layer<FeedService> = Layer.succeed(FeedService, {\n append: () => {\n throw new Error('Feed.FeedService not available');\n },\n remove: () => {\n throw new Error('Feed.FeedService not available');\n },\n query: () => {\n throw new Error('Feed.FeedService not available');\n },\n sync: () => {\n throw new Error('Feed.FeedService not available');\n },\n getSyncState: () => {\n throw new Error('Feed.FeedService not available');\n },\n} as Context.Tag.Service<FeedService>);\n\n//\n// Operations\n//\n\n/**\n * Appends items to a feed.\n *\n * @example\n * ```ts\n * yield* Feed.append(feed, [Obj.make(Notification, { title: 'Hello' })]);\n * ```\n */\nexport const append = (feed: Feed, items: Entity.Unknown[]): Effect.Effect<void, never, FeedService> =>\n Effect.gen(function* () {\n const service = yield* FeedService;\n yield* Effect.promise(() => service.append(feed, items));\n });\n\n/**\n * Removes items from a feed.\n *\n * @example\n * ```ts\n * yield* Feed.remove(feed, [item]);\n * ```\n */\n// TODO(dmaretskyi): Should we allow snapshots here? - what does it mean to remove a snapshot?\nexport const remove = (feed: Feed, items: (Entity.Unknown | Obj.Snapshot)[]): Effect.Effect<void, never, FeedService> =>\n Effect.gen(function* () {\n const service = yield* FeedService;\n const ids = items.map((item) => item.id);\n yield* Effect.promise(() => service.remove(feed, ids));\n });\n\n/**\n * Creates a reactive query over items in a feed.\n *\n * In non-Effect code, query a feed directly through the database with a feed scope:\n * `db.query(Query.select(filter).from(Scope.feed(Feed.getQueueUri(feed))))`.\n *\n * @example\n * ```ts\n * const result = yield* Feed.query(feed, Filter.type(Person));\n * ```\n */\n// TODO(dmaretskyi): Suport chained queries:\n// const result = yield* feed.pipe(Feed.query(Filter.type(Person))); result.subscribe(...)\n// const objects = yield* feed.pipe(Feed.query(Filter.type(Person))).run;\n// const object = yield* feed.pipe(Feed.query(Filter.type(Person))).first;\n// ... unify for Database and schema queries.\nexport const query: {\n <Q extends Query.Any>(\n feed: Feed,\n query: Q,\n ): Effect.Effect<QueryResult.QueryResult<Query.Type<Q>>, never, FeedService>;\n <F extends Filter.Any>(\n feed: Feed,\n filter: F,\n ): Effect.Effect<QueryResult.QueryResult<Filter.Type<F>>, never, FeedService>;\n} = (feed: Feed, queryOrFilter: Query.Any | Filter.Any) =>\n FeedService.pipe(Effect.map((service) => service.query(feed, queryOrFilter as any) as QueryResult.QueryResult<any>));\n\n/**\n * Executes a feed query once and returns the results.\n *\n * @example\n * ```ts\n * const items = yield* Feed.runQuery(feed, Filter.type(Person));\n * ```\n */\nexport const runQuery: {\n <Q extends Query.Any>(feed: Feed, query: Q): Effect.Effect<Query.Type<Q>[], never, FeedService>;\n <F extends Filter.Any>(feed: Feed, filter: F): Effect.Effect<Filter.Type<F>[], never, FeedService>;\n} = (feed: Feed, queryOrFilter: Query.Any | Filter.Any) =>\n query(feed, queryOrFilter as any).pipe(Effect.flatMap((queryResult) => Effect.promise(() => queryResult.run())));\n\n/**\n * Syncs the feed with the server.\n *\n * @example\n * ```ts\n * yield* Feed.sync(feed);\n * yield* Feed.sync(feed, { shouldPush: false });\n * ```\n */\nexport const sync = (feed: Feed, options?: SyncOptions): Effect.Effect<void, never, FeedService> =>\n Effect.gen(function* () {\n const service = yield* FeedService;\n yield* Effect.promise(() => service.sync(feed, options));\n });\n\n/**\n * Returns queue replication backlog for the feed's namespace.\n *\n * @example\n * ```ts\n * const { blocksToPull, blocksToPush } = yield* Feed.getSyncState(feed);\n * ```\n */\nexport const getSyncState = (feed: Feed): Effect.Effect<SyncState, never, FeedService> =>\n Effect.gen(function* () {\n const service = yield* FeedService;\n return yield* Effect.promise(() => service.getSyncState(feed));\n });\n\n/**\n * Creates a cursor for iterating over feed items.\n * Currently stubbed — cursor operations are not yet implemented.\n *\n * @example\n * ```ts\n * const cursor = yield* Feed.cursor<Person>(feed);\n * const item = yield* Feed.next(cursor);\n * ```\n */\n// TODO(wittjosiah): Implement cursor operations. Use Effect streams?\nexport const cursor = <T = Obj.Snapshot>(_feed: Feed): Effect.Effect<Cursor<T>, never, FeedService> =>\n Effect.succeed({ _tag: 'Cursor' } as Cursor<T>);\n\n/**\n * Returns the next item from a feed cursor.\n * Currently stubbed — cursor operations are not yet implemented.\n */\nexport const next = <T = Obj.Snapshot>(_cursor: Cursor<T>): Effect.Effect<T, never, FeedService> =>\n Effect.die('Feed.next is not yet implemented');\n\n/**\n * Returns the next item from a feed cursor as an Option.\n * Currently stubbed — cursor operations are not yet implemented.\n */\nexport const nextOption = <T = Obj.Snapshot>(_cursor: Cursor<T>): Effect.Effect<Option.Option<T>, never, FeedService> =>\n Effect.die('Feed.nextOption is not yet implemented');\n\n/**\n * Sets the local retention policy for a feed.\n * Currently stubbed — feeds do not yet support retention.\n *\n * @example\n * ```ts\n * yield* Feed.setRetention(feed, { count: 1000 });\n * ```\n */\n// TODO(dmaretskyi): Implement when feed retention is supported.\nexport const setRetention = (_feed: Feed, _options: RetentionOptions): Effect.Effect<void, never, FeedService> =>\n Effect.void;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["make", "Context", "Effect", "Layer", "Schema", "DXN", "EID", "Feed", "Struct", "name", "String", "pipe", "optional", "kind", "FormInputAnnotation", "set", "namespace", "Literal", "HiddenAnnotation", "IconAnnotation", "icon", "hue", "makeObject", "DXN", "make", "props", "getQueueUri", "feed", "EID", "tryParse", "getURI", "FeedService", "Tag", "Service", "ContextFeedService", "layer", "succeed", "notAvailable", "append", "Error", "remove", "query", "sync", "getSyncState", "items", "gen", "service", "promise", "ids", "map", "item", "id", "queryOrFilter", "runQuery", "flatMap", "queryResult", "run", "options", "cursor", "_feed", "_tag", "next", "_cursor", "die", "nextOption", "setRetention", "_options", "void"]
|
|
7
|
+
}
|
|
@@ -1,36 +1,33 @@
|
|
|
1
1
|
import {
|
|
2
2
|
isRef
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-TF5BSLF6.mjs";
|
|
4
4
|
import {
|
|
5
5
|
Kind,
|
|
6
6
|
KindId,
|
|
7
7
|
SnapshotKindId
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-Z3WMRRAZ.mjs";
|
|
9
|
+
import {
|
|
10
|
+
getSchema
|
|
11
|
+
} from "./chunk-HGWQR5KH.mjs";
|
|
9
12
|
import {
|
|
10
|
-
EchoObjectSchema,
|
|
11
|
-
MetaId,
|
|
12
13
|
VersionTypeId,
|
|
13
|
-
addTag,
|
|
14
14
|
change,
|
|
15
15
|
clone,
|
|
16
16
|
compareVersions,
|
|
17
17
|
decodeVersion,
|
|
18
|
-
deleteKeys,
|
|
19
18
|
encodeVersion,
|
|
20
|
-
getDXN,
|
|
21
|
-
getDatabase,
|
|
22
|
-
getKeys,
|
|
23
|
-
getMetaChecked,
|
|
24
19
|
getProxyTarget,
|
|
25
20
|
getSnapshot,
|
|
26
|
-
getValue,
|
|
27
21
|
isDeleted,
|
|
28
22
|
isProxy,
|
|
29
23
|
isVersion,
|
|
24
|
+
makeAtom,
|
|
25
|
+
makeLabelAtom,
|
|
30
26
|
makeObject,
|
|
27
|
+
makeProperty,
|
|
28
|
+
makeWithReactive,
|
|
31
29
|
objectFromJSON,
|
|
32
30
|
objectToJSON,
|
|
33
|
-
removeTag,
|
|
34
31
|
setValue,
|
|
35
32
|
sort,
|
|
36
33
|
sortByLabel,
|
|
@@ -38,27 +35,39 @@ import {
|
|
|
38
35
|
subscribe,
|
|
39
36
|
version,
|
|
40
37
|
versionValid
|
|
41
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-VQYL2OQF.mjs";
|
|
39
|
+
import {
|
|
40
|
+
addTag,
|
|
41
|
+
deleteKeys,
|
|
42
|
+
getKeys,
|
|
43
|
+
getMetaChecked,
|
|
44
|
+
removeTag
|
|
45
|
+
} from "./chunk-X3NUUON4.mjs";
|
|
42
46
|
import {
|
|
47
|
+
MetaId,
|
|
43
48
|
ParentId,
|
|
49
|
+
TypeAnnotationId,
|
|
50
|
+
getDatabase,
|
|
44
51
|
getDescription,
|
|
52
|
+
getIcon,
|
|
45
53
|
getLabel,
|
|
46
|
-
|
|
54
|
+
getLabelProperty,
|
|
55
|
+
getType,
|
|
47
56
|
getTypeAnnotation,
|
|
48
|
-
|
|
57
|
+
getTypeURI,
|
|
49
58
|
getTypename,
|
|
59
|
+
getUri,
|
|
50
60
|
isInstanceOf,
|
|
51
61
|
setDescription,
|
|
52
62
|
setLabel
|
|
53
|
-
} from "./chunk-
|
|
63
|
+
} from "./chunk-WZ32BF53.mjs";
|
|
54
64
|
import {
|
|
55
65
|
ANY_OBJECT_TYPENAME,
|
|
56
|
-
ANY_OBJECT_VERSION
|
|
57
|
-
|
|
58
|
-
} from "./chunk-TBKX6JQO.mjs";
|
|
66
|
+
ANY_OBJECT_VERSION
|
|
67
|
+
} from "./chunk-O6BH7EPN.mjs";
|
|
59
68
|
import {
|
|
60
69
|
GetReactiveError
|
|
61
|
-
} from "./chunk-
|
|
70
|
+
} from "./chunk-BBFJWWAV.mjs";
|
|
62
71
|
import {
|
|
63
72
|
__export
|
|
64
73
|
} from "./chunk-J5LGTIGS.mjs";
|
|
@@ -72,16 +81,18 @@ __export(Obj_exports, {
|
|
|
72
81
|
Unknown: () => Unknown2,
|
|
73
82
|
VersionTypeId: () => VersionTypeId2,
|
|
74
83
|
addTag: () => addTag2,
|
|
75
|
-
|
|
84
|
+
atom: () => atom,
|
|
85
|
+
atomProperty: () => atomProperty,
|
|
86
|
+
atomReactive: () => atomReactive,
|
|
76
87
|
clone: () => clone2,
|
|
77
88
|
compareVersions: () => compareVersions2,
|
|
78
89
|
decodeVersion: () => decodeVersion2,
|
|
79
90
|
deleteKeys: () => deleteKeys2,
|
|
80
91
|
encodeVersion: () => encodeVersion2,
|
|
81
92
|
fromJSON: () => fromJSON,
|
|
82
|
-
getDXN: () => getDXN2,
|
|
83
93
|
getDatabase: () => getDatabase2,
|
|
84
94
|
getDescription: () => getDescription2,
|
|
95
|
+
getIcon: () => getIcon2,
|
|
85
96
|
getKeys: () => getKeys2,
|
|
86
97
|
getLabel: () => getLabel2,
|
|
87
98
|
getMeta: () => getMeta,
|
|
@@ -89,16 +100,19 @@ __export(Obj_exports, {
|
|
|
89
100
|
getReactive: () => getReactive,
|
|
90
101
|
getReactiveOption: () => getReactiveOption,
|
|
91
102
|
getReactiveOrThrow: () => getReactiveOrThrow,
|
|
92
|
-
getSchema: () => getSchema2,
|
|
93
103
|
getSnapshot: () => getSnapshot2,
|
|
94
|
-
|
|
104
|
+
getType: () => getType2,
|
|
105
|
+
getTypeURI: () => getTypeURI2,
|
|
95
106
|
getTypename: () => getTypename2,
|
|
96
|
-
|
|
107
|
+
getURI: () => getURI,
|
|
108
|
+
getValue: () => getValue,
|
|
97
109
|
instanceOf: () => instanceOf,
|
|
98
110
|
isDeleted: () => isDeleted2,
|
|
99
111
|
isObject: () => isObject,
|
|
100
112
|
isSnapshot: () => isSnapshot,
|
|
101
113
|
isVersion: () => isVersion2,
|
|
114
|
+
labelAtom: () => labelAtom,
|
|
115
|
+
labelProperty: () => labelProperty,
|
|
102
116
|
make: () => make,
|
|
103
117
|
removeTag: () => removeTag2,
|
|
104
118
|
setDescription: () => setDescription2,
|
|
@@ -111,6 +125,7 @@ __export(Obj_exports, {
|
|
|
111
125
|
sortByTypename: () => sortByTypename2,
|
|
112
126
|
subscribe: () => subscribe2,
|
|
113
127
|
toJSON: () => toJSON,
|
|
128
|
+
update: () => update,
|
|
114
129
|
updateFrom: () => updateFrom,
|
|
115
130
|
version: () => version2,
|
|
116
131
|
versionValid: () => versionValid2
|
|
@@ -121,38 +136,35 @@ import * as Function from "effect/Function";
|
|
|
121
136
|
import * as Option from "effect/Option";
|
|
122
137
|
import * as Schema from "effect/Schema";
|
|
123
138
|
import * as Utils from "effect/Utils";
|
|
124
|
-
import {
|
|
139
|
+
import { SchemaEx } from "@dxos/effect";
|
|
125
140
|
import { assertArgument, invariant } from "@dxos/invariant";
|
|
126
|
-
import {
|
|
141
|
+
import { EntityId } from "@dxos/keys";
|
|
127
142
|
import { assumeType, deepMapValues } from "@dxos/util";
|
|
128
143
|
var __dxlog_file = "/__w/dxos/dxos/packages/core/echo/echo/src/Obj.ts";
|
|
129
144
|
var Unknown2 = Schema.Struct({
|
|
130
145
|
id: Schema.String
|
|
131
|
-
}).pipe(
|
|
132
|
-
Schema.
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
// NOTE: The EchoObjectSchema annotation is required for Ref.Ref(Obj.Unknown) to work.
|
|
138
|
-
// The typename/version only satisfy ECHO schema machinery for reference targets.
|
|
139
|
-
EchoObjectSchema({
|
|
146
|
+
}).pipe(Schema.extend(Schema.Record({
|
|
147
|
+
key: Schema.String,
|
|
148
|
+
value: Schema.Unknown
|
|
149
|
+
})), Schema.annotations({
|
|
150
|
+
[TypeAnnotationId]: {
|
|
151
|
+
kind: Kind.Object,
|
|
140
152
|
typename: ANY_OBJECT_TYPENAME,
|
|
141
153
|
version: ANY_OBJECT_VERSION
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
154
|
+
}
|
|
155
|
+
}));
|
|
156
|
+
var defaultMeta = () => ({
|
|
157
|
+
keys: [],
|
|
158
|
+
tags: [],
|
|
159
|
+
annotations: {}
|
|
160
|
+
});
|
|
161
|
+
function make(input, props) {
|
|
162
|
+
const schema = getSchema(input);
|
|
151
163
|
assertArgument(getTypeAnnotation(schema)?.kind === Kind.Object, "schema", "Expected an object schema");
|
|
152
164
|
let meta = void 0;
|
|
153
165
|
if (props[MetaId] != null) {
|
|
154
166
|
meta = {
|
|
155
|
-
...
|
|
167
|
+
...defaultMeta(),
|
|
156
168
|
...props[MetaId]
|
|
157
169
|
};
|
|
158
170
|
delete props[MetaId];
|
|
@@ -165,10 +177,10 @@ var make = (schema, props) => {
|
|
|
165
177
|
}
|
|
166
178
|
}
|
|
167
179
|
return makeObject(schema, filterUndefined, {
|
|
168
|
-
...defaultMeta,
|
|
180
|
+
...defaultMeta(),
|
|
169
181
|
...meta
|
|
170
|
-
});
|
|
171
|
-
}
|
|
182
|
+
}, input);
|
|
183
|
+
}
|
|
172
184
|
var isObject = (obj) => {
|
|
173
185
|
assumeType(obj);
|
|
174
186
|
return typeof obj === "object" && obj !== null && obj[KindId] === Kind.Object;
|
|
@@ -201,14 +213,14 @@ var getReactive = (snapshot) => Effect.gen(function* () {
|
|
|
201
213
|
var getReactiveOption = (snapshot) => getReactive(snapshot).pipe(Effect.map(Option.some), Effect.catchAll(() => Effect.succeed(Option.none())));
|
|
202
214
|
var getReactiveOrThrow = (snapshot) => Effect.runSync(getReactive(snapshot));
|
|
203
215
|
var clone2 = clone;
|
|
204
|
-
var
|
|
216
|
+
var update = (obj, callback) => {
|
|
205
217
|
change(obj, callback);
|
|
206
218
|
};
|
|
207
|
-
var
|
|
208
|
-
return getValue(obj, createJsonPath(path));
|
|
219
|
+
var getValue = (obj, path) => {
|
|
220
|
+
return SchemaEx.getValue(obj, SchemaEx.createJsonPath(path));
|
|
209
221
|
};
|
|
210
222
|
var setValue2 = setValue;
|
|
211
|
-
var ID =
|
|
223
|
+
var ID = EntityId;
|
|
212
224
|
var instanceOf = (...args) => {
|
|
213
225
|
if (args.length === 1) {
|
|
214
226
|
return (entity) => isInstanceOf(args[0], entity);
|
|
@@ -222,24 +234,16 @@ var snapshotOf = (...args) => {
|
|
|
222
234
|
}
|
|
223
235
|
return check(args[1]);
|
|
224
236
|
};
|
|
225
|
-
var
|
|
237
|
+
var getURI = (entity, options) => {
|
|
226
238
|
assertArgument(!Schema.isSchema(entity), "obj", "Object should not be a schema.");
|
|
227
|
-
return
|
|
239
|
+
return getUri(entity, options);
|
|
228
240
|
};
|
|
229
|
-
var
|
|
230
|
-
const type =
|
|
231
|
-
invariant(type != null, "Corrupted object: missing type.", {
|
|
232
|
-
F: __dxlog_file,
|
|
233
|
-
L: 477,
|
|
234
|
-
S: void 0,
|
|
235
|
-
A: [
|
|
236
|
-
"type != null",
|
|
237
|
-
"'Corrupted object: missing type.'"
|
|
238
|
-
]
|
|
239
|
-
});
|
|
241
|
+
var getTypeURI2 = (obj) => {
|
|
242
|
+
const type = getTypeURI(obj);
|
|
243
|
+
invariant(type != null, "Corrupted object: missing type.", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 313, S: void 0, A: ["type != null", "'Corrupted object: missing type.'"] });
|
|
240
244
|
return type;
|
|
241
245
|
};
|
|
242
|
-
var
|
|
246
|
+
var getType2 = (obj) => getType(obj);
|
|
243
247
|
var getTypename2 = (entity) => getTypename(entity);
|
|
244
248
|
var getDatabase2 = (entity) => getDatabase(entity);
|
|
245
249
|
var Meta = MetaId;
|
|
@@ -251,13 +255,14 @@ var deleteKeys2 = (entity, source) => deleteKeys(entity, source);
|
|
|
251
255
|
var addTag2 = (entity, tag) => addTag(entity, tag);
|
|
252
256
|
var removeTag2 = (entity, tag) => removeTag(entity, tag);
|
|
253
257
|
var isDeleted2 = (entity) => isDeleted(entity);
|
|
254
|
-
var getLabel2 = (entity) => getLabel(entity);
|
|
258
|
+
var getLabel2 = (entity, options) => getLabel(entity, options);
|
|
255
259
|
var setLabel2 = (entity, label) => setLabel(entity, label);
|
|
256
260
|
var getDescription2 = (entity) => getDescription(entity);
|
|
261
|
+
var getIcon2 = (entity) => getIcon(entity);
|
|
257
262
|
var setDescription2 = (entity, description) => setDescription(entity, description);
|
|
258
263
|
var Parent = ParentId;
|
|
259
264
|
var getParent = (entity) => {
|
|
260
|
-
assertArgument(isObject(entity), "Expected an object");
|
|
265
|
+
assertArgument(isObject(entity) || isSnapshot(entity), "Expected an object");
|
|
261
266
|
assumeType(entity);
|
|
262
267
|
return entity[ParentId];
|
|
263
268
|
};
|
|
@@ -267,6 +272,7 @@ var setParent = (entity, parent) => {
|
|
|
267
272
|
assumeType(entity);
|
|
268
273
|
assumeType(parent);
|
|
269
274
|
entity[ParentId] = parent;
|
|
275
|
+
return entity;
|
|
270
276
|
};
|
|
271
277
|
var valuesEqual = (left, right) => {
|
|
272
278
|
if (left === right) {
|
|
@@ -279,7 +285,7 @@ var valuesEqual = (left, right) => {
|
|
|
279
285
|
return Utils.structuralRegion(() => Equal.equals(left, right));
|
|
280
286
|
}
|
|
281
287
|
if (isRef(left) && isRef(right)) {
|
|
282
|
-
return left.
|
|
288
|
+
return left.uri === right.uri;
|
|
283
289
|
}
|
|
284
290
|
if (isRef(left) || isRef(right)) {
|
|
285
291
|
return false;
|
|
@@ -373,6 +379,11 @@ var compareVersions2 = compareVersions;
|
|
|
373
379
|
var encodeVersion2 = encodeVersion;
|
|
374
380
|
var decodeVersion2 = decodeVersion;
|
|
375
381
|
var version2 = (entity) => version(entity);
|
|
382
|
+
var atom = makeAtom;
|
|
383
|
+
var atomReactive = makeWithReactive;
|
|
384
|
+
var atomProperty = makeProperty;
|
|
385
|
+
var labelAtom = makeLabelAtom;
|
|
386
|
+
var labelProperty = getLabelProperty;
|
|
376
387
|
|
|
377
388
|
export {
|
|
378
389
|
Unknown2 as Unknown,
|
|
@@ -385,15 +396,15 @@ export {
|
|
|
385
396
|
getReactiveOption,
|
|
386
397
|
getReactiveOrThrow,
|
|
387
398
|
clone2 as clone,
|
|
388
|
-
|
|
389
|
-
|
|
399
|
+
update,
|
|
400
|
+
getValue,
|
|
390
401
|
setValue2 as setValue,
|
|
391
402
|
ID,
|
|
392
403
|
instanceOf,
|
|
393
404
|
snapshotOf,
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
405
|
+
getURI,
|
|
406
|
+
getTypeURI2 as getTypeURI,
|
|
407
|
+
getType2 as getType,
|
|
397
408
|
getTypename2 as getTypename,
|
|
398
409
|
getDatabase2 as getDatabase,
|
|
399
410
|
Meta,
|
|
@@ -406,6 +417,7 @@ export {
|
|
|
406
417
|
getLabel2 as getLabel,
|
|
407
418
|
setLabel2 as setLabel,
|
|
408
419
|
getDescription2 as getDescription,
|
|
420
|
+
getIcon2 as getIcon,
|
|
409
421
|
setDescription2 as setDescription,
|
|
410
422
|
Parent,
|
|
411
423
|
getParent,
|
|
@@ -423,6 +435,11 @@ export {
|
|
|
423
435
|
encodeVersion2 as encodeVersion,
|
|
424
436
|
decodeVersion2 as decodeVersion,
|
|
425
437
|
version2 as version,
|
|
438
|
+
atom,
|
|
439
|
+
atomReactive,
|
|
440
|
+
atomProperty,
|
|
441
|
+
labelAtom,
|
|
442
|
+
labelProperty,
|
|
426
443
|
Obj_exports
|
|
427
444
|
};
|
|
428
|
-
//# sourceMappingURL=chunk-
|
|
445
|
+
//# sourceMappingURL=chunk-6CEISA3V.mjs.map
|