@dxos/echo 0.8.4-main.fffef41 → 0.8.4-staging.60fe92afc8
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 +10 -11
- package/dist/lib/neutral/Annotation.mjs +68 -0
- package/dist/lib/neutral/Database.mjs +38 -0
- package/dist/lib/neutral/Entity.mjs +72 -0
- package/dist/lib/neutral/Err.mjs +12 -0
- package/dist/lib/neutral/Feed.mjs +54 -0
- package/dist/lib/neutral/Filter.mjs +70 -0
- package/dist/lib/neutral/Format.mjs +86 -0
- package/dist/lib/neutral/Format.mjs.map +7 -0
- package/dist/lib/neutral/JsonSchema.mjs +18 -0
- package/dist/lib/neutral/JsonSchema.mjs.map +7 -0
- package/dist/lib/neutral/Key.mjs +16 -0
- package/dist/lib/neutral/Key.mjs.map +7 -0
- package/dist/lib/neutral/Migration.mjs +18 -0
- package/dist/lib/neutral/Migration.mjs.map +7 -0
- package/dist/lib/neutral/Obj.mjs +122 -0
- package/dist/lib/neutral/Obj.mjs.map +7 -0
- package/dist/lib/neutral/Order.mjs +16 -0
- package/dist/lib/neutral/Order.mjs.map +7 -0
- package/dist/lib/neutral/Query.mjs +38 -0
- package/dist/lib/neutral/Query.mjs.map +7 -0
- package/dist/lib/neutral/QueryResult.mjs +2 -0
- package/dist/lib/neutral/QueryResult.mjs.map +7 -0
- package/dist/lib/neutral/Ref.mjs +25 -0
- package/dist/lib/neutral/Ref.mjs.map +7 -0
- package/dist/lib/neutral/Registry.mjs +14 -0
- package/dist/lib/neutral/Registry.mjs.map +7 -0
- package/dist/lib/neutral/Relation.mjs +97 -0
- package/dist/lib/neutral/Relation.mjs.map +7 -0
- package/dist/lib/neutral/Scope.mjs +12 -0
- package/dist/lib/neutral/Scope.mjs.map +7 -0
- package/dist/lib/neutral/Tag.mjs +32 -0
- package/dist/lib/neutral/Tag.mjs.map +7 -0
- package/dist/lib/neutral/Type.mjs +65 -0
- package/dist/lib/neutral/Type.mjs.map +7 -0
- package/dist/lib/neutral/chunk-35INCYOE.mjs +7 -0
- 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-5SUJPHAE.mjs +34 -0
- package/dist/lib/neutral/chunk-5SUJPHAE.mjs.map +7 -0
- package/dist/lib/neutral/chunk-6M2Z6WBH.mjs +93 -0
- package/dist/lib/neutral/chunk-6M2Z6WBH.mjs.map +7 -0
- package/dist/lib/neutral/chunk-6YDI3J37.mjs +346 -0
- package/dist/lib/neutral/chunk-6YDI3J37.mjs.map +7 -0
- package/dist/lib/neutral/chunk-7FPIAJIV.mjs +2279 -0
- package/dist/lib/neutral/chunk-7FPIAJIV.mjs.map +7 -0
- package/dist/lib/neutral/chunk-7LOUAPYZ.mjs +25 -0
- package/dist/lib/neutral/chunk-7LOUAPYZ.mjs.map +7 -0
- package/dist/lib/neutral/chunk-7PI7C4EF.mjs +747 -0
- package/dist/lib/neutral/chunk-7PI7C4EF.mjs.map +7 -0
- package/dist/lib/neutral/chunk-BBFJWWAV.mjs +51 -0
- package/dist/lib/neutral/chunk-BBFJWWAV.mjs.map +7 -0
- package/dist/lib/neutral/chunk-EVK6XBXO.mjs +56 -0
- package/dist/lib/neutral/chunk-EVK6XBXO.mjs.map +7 -0
- package/dist/lib/neutral/chunk-IGK6FN65.mjs +27 -0
- package/dist/lib/neutral/chunk-IGK6FN65.mjs.map +7 -0
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +7 -0
- package/dist/lib/neutral/chunk-LWXVKPPW.mjs +281 -0
- package/dist/lib/neutral/chunk-LWXVKPPW.mjs.map +7 -0
- package/dist/lib/neutral/chunk-MZ7K3MLL.mjs +48 -0
- package/dist/lib/neutral/chunk-MZ7K3MLL.mjs.map +7 -0
- package/dist/lib/neutral/chunk-O6BH7EPN.mjs +94 -0
- package/dist/lib/neutral/chunk-O6BH7EPN.mjs.map +7 -0
- package/dist/lib/neutral/chunk-QQIYS74I.mjs +336 -0
- 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-RIVWNMSF.mjs +41 -0
- package/dist/lib/neutral/chunk-RIVWNMSF.mjs.map +7 -0
- package/dist/lib/neutral/chunk-SBVFRTST.mjs +160 -0
- 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-TFEWTY5A.mjs +428 -0
- package/dist/lib/neutral/chunk-TFEWTY5A.mjs.map +7 -0
- package/dist/lib/neutral/chunk-TYGKCRMK.mjs +437 -0
- package/dist/lib/neutral/chunk-TYGKCRMK.mjs.map +7 -0
- package/dist/lib/neutral/chunk-UUP46KUQ.mjs +205 -0
- 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-WTQJHC75.mjs +395 -0
- 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-ZGNNFYHS.mjs +132 -0
- package/dist/lib/neutral/chunk-ZGNNFYHS.mjs.map +7 -0
- package/dist/lib/neutral/index.mjs +111 -0
- package/dist/lib/neutral/index.mjs.map +7 -0
- package/dist/lib/neutral/internal/index.mjs +539 -0
- package/dist/lib/neutral/internal/index.mjs.map +7 -0
- package/dist/lib/neutral/meta.json +1 -0
- package/dist/lib/neutral/testing/index.mjs +458 -0
- package/dist/lib/neutral/testing/index.mjs.map +7 -0
- package/dist/types/src/Annotation.d.ts +128 -0
- package/dist/types/src/Annotation.d.ts.map +1 -0
- 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 +15 -0
- package/dist/types/src/Collection.d.ts.map +1 -0
- package/dist/types/src/Database.d.ts +208 -0
- package/dist/types/src/Database.d.ts.map +1 -0
- package/dist/types/src/Dataset.d.ts +29 -0
- package/dist/types/src/Dataset.d.ts.map +1 -0
- package/dist/types/src/Entity.d.ts +247 -0
- package/dist/types/src/Entity.d.ts.map +1 -0
- package/dist/types/src/Entity.test.d.ts +2 -0
- package/dist/types/src/Entity.test.d.ts.map +1 -0
- package/dist/types/src/Err.d.ts +107 -0
- package/dist/types/src/Err.d.ts.map +1 -0
- package/dist/types/src/Feed.d.ts +229 -0
- package/dist/types/src/Feed.d.ts.map +1 -0
- package/dist/types/src/Filter.d.ts +175 -0
- package/dist/types/src/Filter.d.ts.map +1 -0
- package/dist/types/src/Filter.test.d.ts +2 -0
- package/dist/types/src/Filter.test.d.ts.map +1 -0
- package/dist/types/src/Format.d.ts +2 -0
- package/dist/types/src/Format.d.ts.map +1 -0
- package/dist/types/src/Hypergraph.d.ts +70 -0
- package/dist/types/src/Hypergraph.d.ts.map +1 -0
- 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 +16 -0
- package/dist/types/src/JsonSchema.d.ts.map +1 -0
- package/dist/types/src/Key.d.ts +2 -1
- package/dist/types/src/Key.d.ts.map +1 -1
- package/dist/types/src/Migration.d.ts +72 -0
- package/dist/types/src/Migration.d.ts.map +1 -0
- package/dist/types/src/Obj.d.ts +483 -110
- package/dist/types/src/Obj.d.ts.map +1 -1
- package/dist/types/src/Obj.test.d.ts +2 -0
- package/dist/types/src/Obj.test.d.ts.map +1 -0
- package/dist/types/src/Order.d.ts +26 -0
- package/dist/types/src/Order.d.ts.map +1 -0
- package/dist/types/src/Query.d.ts +231 -0
- package/dist/types/src/Query.d.ts.map +1 -0
- package/dist/types/src/Query.test.d.ts +2 -0
- package/dist/types/src/Query.test.d.ts.map +1 -0
- package/dist/types/src/QueryResult.d.ts +101 -0
- package/dist/types/src/QueryResult.d.ts.map +1 -0
- package/dist/types/src/Ref.d.ts +69 -11
- 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 +321 -23
- package/dist/types/src/Relation.d.ts.map +1 -1
- package/dist/types/src/Relation.test.d.ts +2 -0
- package/dist/types/src/Relation.test.d.ts.map +1 -0
- 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 +26 -9
- package/dist/types/src/Tag.d.ts.map +1 -1
- package/dist/types/src/Type.d.ts +397 -106
- package/dist/types/src/Type.d.ts.map +1 -1
- package/dist/types/src/Type.test.d.ts +2 -0
- package/dist/types/src/Type.test.d.ts.map +1 -0
- package/dist/types/src/View.d.ts +65 -0
- package/dist/types/src/View.d.ts.map +1 -0
- package/dist/types/src/exemplars.test.d.ts +2 -0
- package/dist/types/src/exemplars.test.d.ts.map +1 -0
- package/dist/types/src/hierarchy.test.d.ts +2 -0
- package/dist/types/src/hierarchy.test.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +21 -5
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/internal/Annotation/annotations.d.ts +272 -0
- package/dist/types/src/internal/Annotation/annotations.d.ts.map +1 -0
- package/dist/types/src/internal/Annotation/annotations.test.d.ts.map +1 -0
- package/dist/types/src/internal/Annotation/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 +6 -0
- package/dist/types/src/internal/Annotation/index.d.ts.map +1 -0
- package/dist/types/src/internal/Annotation/sorting.d.ts +24 -0
- package/dist/types/src/internal/Annotation/sorting.d.ts.map +1 -0
- package/dist/types/src/internal/Annotation/util.d.ts +48 -0
- package/dist/types/src/internal/Annotation/util.d.ts.map +1 -0
- package/dist/types/src/internal/Entity/api.d.ts +27 -0
- package/dist/types/src/internal/Entity/api.d.ts.map +1 -0
- package/dist/types/src/internal/Entity/entity.d.ts +84 -0
- package/dist/types/src/internal/Entity/entity.d.ts.map +1 -0
- 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 +10 -0
- package/dist/types/src/internal/Entity/index.d.ts.map +1 -0
- package/dist/types/src/internal/Entity/model.d.ts +59 -0
- package/dist/types/src/internal/Entity/model.d.ts.map +1 -0
- package/dist/types/src/internal/Entity/object.d.ts +18 -0
- package/dist/types/src/internal/Entity/object.d.ts.map +1 -0
- package/dist/types/src/internal/Entity/relation.d.ts +58 -0
- package/dist/types/src/internal/Entity/relation.d.ts.map +1 -0
- 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/util.d.ts +2 -0
- package/dist/types/src/internal/Entity/util.d.ts.map +1 -0
- package/dist/types/src/internal/Entity/version.d.ts +42 -0
- package/dist/types/src/internal/Entity/version.d.ts.map +1 -0
- package/dist/types/src/internal/Format/date.d.ts.map +1 -0
- package/dist/types/src/internal/Format/date.test.d.ts.map +1 -0
- package/dist/types/src/internal/{formats → Format}/format.d.ts +7 -4
- package/dist/types/src/internal/Format/format.d.ts.map +1 -0
- package/dist/types/src/internal/Format/format.test.d.ts.map +1 -0
- package/dist/types/src/internal/{formats → Format}/index.d.ts +2 -2
- package/dist/types/src/internal/Format/index.d.ts.map +1 -0
- package/dist/types/src/internal/Format/number.d.ts.map +1 -0
- package/dist/types/src/internal/{formats → Format}/object.d.ts +3 -1
- package/dist/types/src/internal/Format/object.d.ts.map +1 -0
- package/dist/types/src/internal/{formats → Format}/select.d.ts +6 -4
- package/dist/types/src/internal/Format/select.d.ts.map +1 -0
- package/dist/types/src/internal/{formats → Format}/string.d.ts +4 -0
- package/dist/types/src/internal/Format/string.d.ts.map +1 -0
- package/dist/types/src/internal/{formats → Format}/types.d.ts +14 -10
- package/dist/types/src/internal/Format/types.d.ts.map +1 -0
- package/dist/types/src/internal/{json → JsonSchema}/annotations.d.ts +1 -1
- package/dist/types/src/internal/JsonSchema/annotations.d.ts.map +1 -0
- package/dist/types/src/internal/JsonSchema/effect-schema.test.d.ts.map +1 -0
- package/dist/types/src/internal/JsonSchema/index.d.ts +5 -0
- package/dist/types/src/internal/JsonSchema/index.d.ts.map +1 -0
- package/dist/types/src/internal/JsonSchema/json-schema-normalize.d.ts.map +1 -0
- package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema-type.d.ts +136 -35
- package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts.map +1 -0
- package/dist/types/src/internal/{json → JsonSchema}/json-schema.d.ts +6 -3
- package/dist/types/src/internal/JsonSchema/json-schema.d.ts.map +1 -0
- package/dist/types/src/internal/JsonSchema/json-schema.test.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/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 +8 -0
- package/dist/types/src/internal/Obj/clone.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/common.d.ts.map +1 -0
- package/dist/types/src/internal/{object/create.d.ts → Obj/create-object.d.ts} +15 -16
- package/dist/types/src/internal/Obj/create-object.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/create-object.test.d.ts +2 -0
- package/dist/types/src/internal/Obj/create-object.test.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/deleted.d.ts +6 -0
- package/dist/types/src/internal/Obj/deleted.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/index.d.ts +11 -0
- package/dist/types/src/internal/Obj/index.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/inspect.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/json-serializer.d.ts +45 -0
- package/dist/types/src/internal/Obj/json-serializer.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/json-serializer.test.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/schema-validator.d.ts +2 -0
- package/dist/types/src/internal/Obj/schema-validator.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/schema-validator.test.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/set-value.d.ts +7 -0
- package/dist/types/src/internal/Obj/set-value.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/set-value.test.d.ts +2 -0
- package/dist/types/src/internal/Obj/set-value.test.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/snapshot.d.ts +6 -0
- package/dist/types/src/internal/Obj/snapshot.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/typed-object.d.ts +25 -0
- package/dist/types/src/internal/Obj/typed-object.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/typed-object.test.d.ts.map +1 -0
- package/dist/types/src/internal/Query/index.d.ts +2 -0
- package/dist/types/src/internal/Query/index.d.ts.map +1 -0
- package/dist/types/src/internal/Query/pretty.d.ts +10 -0
- 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.map +1 -0
- package/dist/types/src/internal/Ref/ref-array.d.ts +21 -0
- package/dist/types/src/internal/Ref/ref-array.d.ts.map +1 -0
- package/dist/types/src/internal/{ref → Ref}/ref.d.ts +88 -32
- package/dist/types/src/internal/Ref/ref.d.ts.map +1 -0
- package/dist/types/src/internal/Ref/ref.test.d.ts.map +1 -0
- package/dist/types/src/internal/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 +7 -0
- package/dist/types/src/internal/Type/compose.d.ts.map +1 -0
- package/dist/types/src/internal/Type/compose.test.d.ts.map +1 -0
- package/dist/types/src/internal/Type/index.d.ts +3 -0
- package/dist/types/src/internal/Type/index.d.ts.map +1 -0
- package/dist/types/src/internal/{schema → Type}/manipulation.d.ts +0 -1
- package/dist/types/src/internal/Type/manipulation.d.ts.map +1 -0
- 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/index.d.ts +11 -0
- package/dist/types/src/internal/common/api/index.d.ts.map +1 -0
- package/dist/types/src/internal/common/api/meta.d.ts +45 -0
- package/dist/types/src/internal/common/api/meta.d.ts.map +1 -0
- package/dist/types/src/internal/common/index.d.ts +4 -0
- package/dist/types/src/internal/common/index.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/change-context.d.ts +55 -0
- package/dist/types/src/internal/common/proxy/change-context.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/change.test.d.ts +2 -0
- package/dist/types/src/internal/common/proxy/change.test.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts +5 -0
- package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/errors.d.ts +19 -0
- package/dist/types/src/internal/common/proxy/errors.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/event-batch.d.ts +10 -0
- package/dist/types/src/internal/common/proxy/event-batch.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/handler.test.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/index.d.ts +14 -0
- package/dist/types/src/internal/common/proxy/index.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/json-serializer.d.ts +6 -0
- package/dist/types/src/internal/common/proxy/json-serializer.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/make-object.d.ts +20 -0
- package/dist/types/src/internal/common/proxy/make-object.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/ownership.d.ts +57 -0
- package/dist/types/src/internal/common/proxy/ownership.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/proxy-types.d.ts +18 -0
- package/dist/types/src/internal/common/proxy/proxy-types.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/proxy-utils.d.ts +47 -0
- package/dist/types/src/internal/common/proxy/proxy-utils.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/reactive-array.d.ts +8 -0
- package/dist/types/src/internal/common/proxy/reactive-array.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/reactive.d.ts +39 -0
- package/dist/types/src/internal/common/proxy/reactive.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/reactive.test.d.ts +2 -0
- package/dist/types/src/internal/common/proxy/reactive.test.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/schema-validator.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/schema.test.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/symbols.d.ts +3 -0
- package/dist/types/src/internal/common/proxy/symbols.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/typed-handler.d.ts +64 -0
- package/dist/types/src/internal/common/proxy/typed-handler.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/typed-handler.test.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/typed-object.test.d.ts.map +1 -0
- package/dist/types/src/internal/common/types/base.d.ts +27 -0
- package/dist/types/src/internal/common/types/base.d.ts.map +1 -0
- package/dist/types/src/internal/common/types/entity.d.ts +94 -0
- package/dist/types/src/internal/common/types/entity.d.ts.map +1 -0
- package/dist/types/src/internal/common/types/index.d.ts +7 -0
- package/dist/types/src/internal/common/types/index.d.ts.map +1 -0
- package/dist/types/src/internal/common/types/meta.d.ts +54 -0
- package/dist/types/src/internal/common/types/meta.d.ts.map +1 -0
- package/dist/types/src/internal/common/types/model-symbols.d.ts +65 -0
- package/dist/types/src/internal/common/types/model-symbols.d.ts.map +1 -0
- package/dist/types/src/internal/common/types/typename.d.ts +28 -0
- package/dist/types/src/internal/common/types/typename.d.ts.map +1 -0
- package/dist/types/src/internal/common/types/version.d.ts +15 -0
- package/dist/types/src/internal/common/types/version.d.ts.map +1 -0
- 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 +10 -14
- package/dist/types/src/internal/index.d.ts.map +1 -1
- package/dist/types/src/{test → testing}/api.test.d.ts.map +1 -1
- package/dist/types/src/testing/index.d.ts +4 -3
- 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 +18 -0
- package/dist/types/src/testing/test-data.d.ts.map +1 -0
- package/dist/types/src/testing/test-schema.d.ts +298 -0
- package/dist/types/src/testing/test-schema.d.ts.map +1 -0
- package/dist/types/src/testing/util.d.ts +23 -0
- package/dist/types/src/testing/util.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +119 -66
- package/src/Annotation.test.ts +439 -0
- package/src/Annotation.ts +202 -0
- package/src/Collection.ts +33 -0
- package/src/Database.ts +345 -0
- package/src/Dataset.ts +34 -0
- package/src/Entity.test.ts +132 -0
- package/src/Entity.ts +345 -0
- package/src/Err.ts +40 -0
- package/src/Feed.ts +352 -0
- package/src/Filter.test.ts +90 -0
- package/src/Filter.ts +484 -0
- package/src/Format.ts +5 -0
- package/src/Hypergraph.ts +84 -0
- package/src/Json.test.ts +175 -0
- package/src/Json.ts +103 -0
- package/src/JsonSchema.ts +26 -0
- package/src/Key.ts +4 -1
- package/src/Migration.ts +114 -0
- package/src/Obj.test.ts +641 -0
- package/src/Obj.ts +778 -281
- package/src/Order.ts +68 -0
- package/src/Query.test.ts +835 -0
- package/src/Query.ts +634 -0
- package/src/QueryResult.ts +132 -0
- package/src/Ref.ts +98 -10
- package/src/Registry.ts +155 -0
- package/src/Relation.test.ts +88 -0
- package/src/Relation.ts +503 -67
- package/src/Scope.ts +50 -0
- package/src/Tag.md +88 -0
- package/src/Tag.ts +53 -8
- package/src/Type.test.ts +257 -0
- package/src/Type.ts +643 -151
- package/src/View.ts +98 -0
- package/src/exemplars.test.ts +21 -0
- package/src/hierarchy.test.ts +33 -0
- package/src/index.ts +22 -6
- package/src/internal/Annotation/annotations.test.ts +165 -0
- package/src/internal/Annotation/annotations.ts +609 -0
- package/src/internal/Annotation/dictionary.ts +47 -0
- package/src/internal/Annotation/entity-dictionary.ts +74 -0
- package/src/internal/Annotation/index.ts +9 -0
- package/src/internal/Annotation/sorting.ts +51 -0
- package/src/internal/Annotation/util.ts +94 -0
- package/src/internal/Entity/api.ts +77 -0
- package/src/internal/Entity/entity.ts +277 -0
- package/src/internal/Entity/guard.ts +26 -0
- package/src/internal/Entity/index.ts +13 -0
- package/src/internal/Entity/model.ts +119 -0
- package/src/internal/Entity/object.ts +73 -0
- package/src/internal/Entity/relation.ts +188 -0
- package/src/internal/Entity/type-kind.ts +75 -0
- package/src/internal/Entity/type-uri.ts +92 -0
- package/src/internal/Entity/util.ts +33 -0
- package/src/internal/Entity/version.ts +96 -0
- package/src/internal/{formats → Format}/date.test.ts +1 -2
- package/src/internal/{formats → Format}/date.ts +5 -9
- package/src/internal/{formats → Format}/format.test.ts +27 -7
- package/src/internal/{formats → Format}/format.ts +8 -6
- package/src/internal/{formats → Format}/index.ts +2 -3
- package/src/internal/{formats → Format}/number.ts +5 -5
- package/src/internal/{formats → Format}/object.ts +23 -6
- package/src/internal/{formats → Format}/select.ts +6 -4
- package/src/internal/{formats → Format}/string.ts +14 -9
- package/src/internal/{formats → Format}/types.ts +54 -43
- package/src/internal/{json → JsonSchema}/annotations.ts +3 -3
- package/src/internal/{json-schema → JsonSchema}/index.ts +2 -0
- package/src/internal/{json-schema → JsonSchema}/json-schema-normalize.ts +4 -2
- package/src/internal/{json-schema → JsonSchema}/json-schema-type.ts +39 -39
- package/src/internal/{json → JsonSchema}/json-schema.test.ts +119 -182
- package/src/internal/{json → JsonSchema}/json-schema.ts +70 -42
- package/src/internal/Obj/atoms.ts +244 -0
- package/src/internal/Obj/clone.ts +53 -0
- package/src/internal/{object → Obj}/common.ts +3 -4
- package/src/internal/Obj/create-object.test.ts +116 -0
- package/src/internal/Obj/create-object.ts +140 -0
- package/src/internal/Obj/deleted.ts +19 -0
- package/src/internal/Obj/index.ts +14 -0
- package/src/internal/{object → Obj}/inspect.ts +7 -7
- package/src/internal/Obj/json-serializer.test.ts +199 -0
- package/src/internal/Obj/json-serializer.ts +278 -0
- package/src/internal/{object → Obj}/schema-validator.test.ts +3 -7
- package/src/internal/Obj/schema-validator.ts +6 -0
- package/src/internal/Obj/set-value.test.ts +258 -0
- package/src/internal/Obj/set-value.ts +158 -0
- package/src/internal/Obj/snapshot.ts +114 -0
- package/src/internal/Obj/typed-object.test.ts +32 -0
- package/src/internal/Obj/typed-object.ts +30 -0
- package/src/internal/{json → Query}/index.ts +1 -1
- package/src/internal/Query/pretty.ts +162 -0
- package/src/internal/Ref/atoms.ts +20 -0
- package/src/internal/{ref → Ref}/ref-array.ts +6 -7
- package/src/internal/Ref/ref.test.ts +91 -0
- package/src/internal/{ref → Ref}/ref.ts +230 -101
- package/src/internal/Ref/utils.ts +45 -0
- package/src/internal/{projection → Type}/compose.test.ts +9 -9
- package/src/internal/{projection → Type}/compose.ts +14 -9
- package/src/internal/Type/index.ts +6 -0
- package/src/internal/{schema → Type}/manipulation.ts +0 -25
- package/src/internal/Type/type-schema.ts +60 -0
- package/src/internal/common/README.md +102 -0
- package/src/internal/common/api/index.ts +15 -0
- package/src/internal/common/api/meta.ts +90 -0
- package/src/internal/{testing → common}/index.ts +2 -1
- package/src/internal/common/proxy/change-context.ts +138 -0
- package/src/internal/common/proxy/change.test.ts +527 -0
- package/src/internal/common/proxy/define-hidden-property.ts +14 -0
- package/src/internal/common/proxy/errors.ts +42 -0
- package/src/internal/common/proxy/event-batch.ts +44 -0
- package/src/internal/common/proxy/handler.test.ts +121 -0
- package/src/internal/common/proxy/index.ts +17 -0
- package/src/internal/common/proxy/json-serializer.ts +101 -0
- package/src/internal/common/proxy/make-object.ts +129 -0
- package/src/internal/common/proxy/ownership.ts +252 -0
- package/src/internal/common/proxy/proxy-types.ts +23 -0
- package/src/internal/common/proxy/proxy-utils.ts +150 -0
- package/src/internal/common/proxy/reactive-array.ts +71 -0
- package/src/internal/common/proxy/reactive.test.ts +54 -0
- package/src/internal/common/proxy/reactive.ts +77 -0
- package/src/internal/{object → common/proxy}/schema-validator.ts +6 -3
- package/src/internal/common/proxy/schema.test.ts +107 -0
- package/src/internal/common/proxy/symbols.ts +7 -0
- package/src/internal/common/proxy/typed-handler.test.ts +314 -0
- package/src/internal/common/proxy/typed-handler.ts +509 -0
- package/src/internal/common/proxy/typed-object.test.ts +103 -0
- package/src/internal/common/types/base.ts +43 -0
- package/src/internal/common/types/entity.ts +133 -0
- package/src/internal/common/types/index.ts +15 -0
- package/src/internal/common/types/meta.ts +109 -0
- package/src/internal/common/types/model-symbols.ts +89 -0
- package/src/internal/common/types/typename.ts +91 -0
- package/src/internal/common/types/version.ts +19 -0
- package/src/internal/common/types/well-known-types.ts +15 -0
- package/src/internal/index.ts +14 -17
- package/src/testing/api.test.ts +131 -0
- package/src/testing/index.ts +4 -3
- package/src/testing/registry.ts +44 -0
- package/src/testing/test-data.ts +189 -0
- package/src/testing/test-schema.ts +204 -0
- package/src/testing/util.ts +88 -0
- package/dist/lib/browser/chunk-BIDAASFK.mjs +0 -3727
- package/dist/lib/browser/chunk-BIDAASFK.mjs.map +0 -7
- package/dist/lib/browser/chunk-ZDLCWGEW.mjs +0 -410
- package/dist/lib/browser/chunk-ZDLCWGEW.mjs.map +0 -7
- package/dist/lib/browser/chunk-ZFRJKT4A.mjs +0 -585
- package/dist/lib/browser/chunk-ZFRJKT4A.mjs.map +0 -7
- package/dist/lib/browser/index.mjs +0 -35
- package/dist/lib/browser/internal/index.mjs +0 -336
- package/dist/lib/browser/meta.json +0 -1
- package/dist/lib/browser/query/index.mjs +0 -13
- package/dist/lib/browser/testing/index.mjs +0 -267
- package/dist/lib/browser/testing/index.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-3SVRRCUU.mjs +0 -3727
- package/dist/lib/node-esm/chunk-3SVRRCUU.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-CGDHRZWH.mjs +0 -585
- package/dist/lib/node-esm/chunk-CGDHRZWH.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-HWS6VBQC.mjs +0 -410
- package/dist/lib/node-esm/chunk-HWS6VBQC.mjs.map +0 -7
- package/dist/lib/node-esm/index.mjs +0 -35
- package/dist/lib/node-esm/internal/index.mjs +0 -336
- package/dist/lib/node-esm/meta.json +0 -1
- package/dist/lib/node-esm/query/index.mjs +0 -13
- package/dist/lib/node-esm/testing/index.mjs +0 -267
- package/dist/lib/node-esm/testing/index.mjs.map +0 -7
- package/dist/types/src/errors.d.ts +0 -68
- package/dist/types/src/errors.d.ts.map +0 -1
- package/dist/types/src/internal/ast/annotation-helper.d.ts +0 -8
- package/dist/types/src/internal/ast/annotation-helper.d.ts.map +0 -1
- package/dist/types/src/internal/ast/annotations.d.ts +0 -131
- package/dist/types/src/internal/ast/annotations.d.ts.map +0 -1
- package/dist/types/src/internal/ast/annotations.test.d.ts.map +0 -1
- package/dist/types/src/internal/ast/entity-kind.d.ts +0 -10
- package/dist/types/src/internal/ast/entity-kind.d.ts.map +0 -1
- package/dist/types/src/internal/ast/index.d.ts +0 -5
- package/dist/types/src/internal/ast/index.d.ts.map +0 -1
- package/dist/types/src/internal/ast/types.d.ts +0 -6
- package/dist/types/src/internal/ast/types.d.ts.map +0 -1
- package/dist/types/src/internal/formats/date.d.ts.map +0 -1
- package/dist/types/src/internal/formats/date.test.d.ts.map +0 -1
- package/dist/types/src/internal/formats/format.d.ts.map +0 -1
- package/dist/types/src/internal/formats/format.test.d.ts.map +0 -1
- package/dist/types/src/internal/formats/index.d.ts.map +0 -1
- package/dist/types/src/internal/formats/number.d.ts.map +0 -1
- package/dist/types/src/internal/formats/object.d.ts.map +0 -1
- package/dist/types/src/internal/formats/select.d.ts.map +0 -1
- package/dist/types/src/internal/formats/string.d.ts.map +0 -1
- package/dist/types/src/internal/formats/types.d.ts.map +0 -1
- package/dist/types/src/internal/json/annotations.d.ts.map +0 -1
- package/dist/types/src/internal/json/effect-schema.test.d.ts.map +0 -1
- package/dist/types/src/internal/json/index.d.ts +0 -2
- package/dist/types/src/internal/json/index.d.ts.map +0 -1
- package/dist/types/src/internal/json/json-schema.d.ts.map +0 -1
- package/dist/types/src/internal/json/json-schema.test.d.ts.map +0 -1
- package/dist/types/src/internal/json-schema/index.d.ts +0 -3
- package/dist/types/src/internal/json-schema/index.d.ts.map +0 -1
- package/dist/types/src/internal/json-schema/json-schema-normalize.d.ts.map +0 -1
- package/dist/types/src/internal/json-schema/json-schema-type.d.ts.map +0 -1
- package/dist/types/src/internal/object/accessors.d.ts +0 -37
- package/dist/types/src/internal/object/accessors.d.ts.map +0 -1
- package/dist/types/src/internal/object/common.d.ts.map +0 -1
- package/dist/types/src/internal/object/create.d.ts.map +0 -1
- package/dist/types/src/internal/object/create.test.d.ts +0 -2
- package/dist/types/src/internal/object/create.test.d.ts.map +0 -1
- package/dist/types/src/internal/object/deleted.d.ts +0 -6
- package/dist/types/src/internal/object/deleted.d.ts.map +0 -1
- package/dist/types/src/internal/object/entity.d.ts +0 -33
- package/dist/types/src/internal/object/entity.d.ts.map +0 -1
- package/dist/types/src/internal/object/expando.d.ts +0 -14
- package/dist/types/src/internal/object/expando.d.ts.map +0 -1
- package/dist/types/src/internal/object/ids.d.ts +0 -6
- package/dist/types/src/internal/object/ids.d.ts.map +0 -1
- package/dist/types/src/internal/object/index.d.ts +0 -16
- package/dist/types/src/internal/object/index.d.ts.map +0 -1
- package/dist/types/src/internal/object/inspect.d.ts.map +0 -1
- package/dist/types/src/internal/object/json-serializer.d.ts +0 -32
- package/dist/types/src/internal/object/json-serializer.d.ts.map +0 -1
- package/dist/types/src/internal/object/json-serializer.test.d.ts.map +0 -1
- package/dist/types/src/internal/object/meta.d.ts +0 -31
- package/dist/types/src/internal/object/meta.d.ts.map +0 -1
- package/dist/types/src/internal/object/model.d.ts +0 -117
- package/dist/types/src/internal/object/model.d.ts.map +0 -1
- package/dist/types/src/internal/object/relation.d.ts +0 -17
- package/dist/types/src/internal/object/relation.d.ts.map +0 -1
- package/dist/types/src/internal/object/schema-validator.d.ts.map +0 -1
- package/dist/types/src/internal/object/schema-validator.test.d.ts.map +0 -1
- package/dist/types/src/internal/object/typed-object.d.ts +0 -31
- package/dist/types/src/internal/object/typed-object.d.ts.map +0 -1
- package/dist/types/src/internal/object/typed-object.test.d.ts.map +0 -1
- package/dist/types/src/internal/object/typename.d.ts +0 -15
- package/dist/types/src/internal/object/typename.d.ts.map +0 -1
- package/dist/types/src/internal/object/version.d.ts +0 -14
- package/dist/types/src/internal/object/version.d.ts.map +0 -1
- package/dist/types/src/internal/projection/compose.d.ts +0 -6
- package/dist/types/src/internal/projection/compose.d.ts.map +0 -1
- package/dist/types/src/internal/projection/compose.test.d.ts.map +0 -1
- package/dist/types/src/internal/projection/index.d.ts +0 -2
- package/dist/types/src/internal/projection/index.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/handler.test.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/reactive-object.d.ts +0 -15
- package/dist/types/src/internal/proxy/reactive-object.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/schema.test.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/typed-handler.d.ts +0 -44
- package/dist/types/src/internal/proxy/typed-handler.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/typed-handler.test.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/typed-object.test.d.ts.map +0 -1
- package/dist/types/src/internal/query/index.d.ts +0 -2
- package/dist/types/src/internal/query/index.d.ts.map +0 -1
- package/dist/types/src/internal/query/query.d.ts +0 -17
- package/dist/types/src/internal/query/query.d.ts.map +0 -1
- package/dist/types/src/internal/ref/index.d.ts.map +0 -1
- package/dist/types/src/internal/ref/ref-array.d.ts +0 -21
- package/dist/types/src/internal/ref/ref-array.d.ts.map +0 -1
- package/dist/types/src/internal/ref/ref.d.ts.map +0 -1
- package/dist/types/src/internal/ref/ref.test.d.ts.map +0 -1
- package/dist/types/src/internal/schema/echo-schema.d.ts +0 -168
- package/dist/types/src/internal/schema/echo-schema.d.ts.map +0 -1
- package/dist/types/src/internal/schema/index.d.ts +0 -7
- package/dist/types/src/internal/schema/index.d.ts.map +0 -1
- package/dist/types/src/internal/schema/manipulation.d.ts.map +0 -1
- package/dist/types/src/internal/schema/runtime-schema-registry.d.ts +0 -18
- package/dist/types/src/internal/schema/runtime-schema-registry.d.ts.map +0 -1
- package/dist/types/src/internal/schema/snapshot.d.ts +0 -6
- package/dist/types/src/internal/schema/snapshot.d.ts.map +0 -1
- package/dist/types/src/internal/schema/stored-schema.d.ts +0 -13
- package/dist/types/src/internal/schema/stored-schema.d.ts.map +0 -1
- package/dist/types/src/internal/testing/index.d.ts +0 -3
- package/dist/types/src/internal/testing/index.d.ts.map +0 -1
- package/dist/types/src/internal/testing/types.d.ts +0 -381
- package/dist/types/src/internal/testing/types.d.ts.map +0 -1
- package/dist/types/src/internal/testing/utils.d.ts +0 -10
- package/dist/types/src/internal/testing/utils.d.ts.map +0 -1
- package/dist/types/src/internal/types/index.d.ts +0 -3
- package/dist/types/src/internal/types/index.d.ts.map +0 -1
- package/dist/types/src/internal/types/types.d.ts +0 -79
- package/dist/types/src/internal/types/types.d.ts.map +0 -1
- package/dist/types/src/internal/types/types.test.d.ts +0 -2
- package/dist/types/src/internal/types/types.test.d.ts.map +0 -1
- package/dist/types/src/internal/types/util.d.ts +0 -5
- package/dist/types/src/internal/types/util.d.ts.map +0 -1
- package/dist/types/src/query/index.d.ts +0 -2
- package/dist/types/src/query/index.d.ts.map +0 -1
- package/dist/types/src/query/query.d.ts +0 -248
- package/dist/types/src/query/query.d.ts.map +0 -1
- package/dist/types/src/query/query.test.d.ts +0 -2
- package/dist/types/src/query/query.test.d.ts.map +0 -1
- package/dist/types/src/testing/echo-schema.d.ts +0 -7
- package/dist/types/src/testing/echo-schema.d.ts.map +0 -1
- package/dist/types/src/testing/types.d.ts +0 -228
- package/dist/types/src/testing/types.d.ts.map +0 -1
- package/src/errors.ts +0 -18
- package/src/internal/ast/annotation-helper.ts +0 -22
- package/src/internal/ast/annotations.test.ts +0 -98
- package/src/internal/ast/annotations.ts +0 -226
- package/src/internal/ast/entity-kind.ts +0 -15
- package/src/internal/ast/index.ts +0 -8
- package/src/internal/ast/types.ts +0 -17
- package/src/internal/object/accessors.ts +0 -153
- package/src/internal/object/create.test.ts +0 -118
- package/src/internal/object/create.ts +0 -96
- package/src/internal/object/deleted.ts +0 -19
- package/src/internal/object/entity.ts +0 -248
- package/src/internal/object/expando.ts +0 -21
- package/src/internal/object/ids.ts +0 -12
- package/src/internal/object/index.ts +0 -19
- package/src/internal/object/json-serializer.test.ts +0 -99
- package/src/internal/object/json-serializer.ts +0 -225
- package/src/internal/object/meta.ts +0 -61
- package/src/internal/object/model.ts +0 -170
- package/src/internal/object/relation.ts +0 -24
- package/src/internal/object/typed-object.test.ts +0 -34
- package/src/internal/object/typed-object.ts +0 -88
- package/src/internal/object/typename.ts +0 -61
- package/src/internal/object/version.ts +0 -22
- package/src/internal/projection/index.ts +0 -5
- package/src/internal/proxy/handler.test.ts +0 -163
- package/src/internal/proxy/reactive-object.ts +0 -108
- package/src/internal/proxy/schema.test.ts +0 -136
- package/src/internal/proxy/typed-handler.test.ts +0 -102
- package/src/internal/proxy/typed-handler.ts +0 -228
- package/src/internal/proxy/typed-object.test.ts +0 -100
- package/src/internal/query/index.ts +0 -5
- package/src/internal/query/query.ts +0 -23
- package/src/internal/ref/ref.test.ts +0 -100
- package/src/internal/schema/echo-schema.ts +0 -383
- package/src/internal/schema/index.ts +0 -10
- package/src/internal/schema/runtime-schema-registry.ts +0 -78
- package/src/internal/schema/snapshot.ts +0 -25
- package/src/internal/schema/stored-schema.ts +0 -26
- package/src/internal/testing/types.ts +0 -144
- package/src/internal/testing/utils.ts +0 -54
- package/src/internal/types/index.ts +0 -6
- package/src/internal/types/types.test.ts +0 -48
- package/src/internal/types/types.ts +0 -176
- package/src/internal/types/util.ts +0 -9
- package/src/query/index.ts +0 -6
- package/src/query/query.test.ts +0 -401
- package/src/query/query.ts +0 -789
- package/src/test/api.test.ts +0 -180
- package/src/testing/echo-schema.ts +0 -39
- package/src/testing/types.ts +0 -108
- /package/dist/lib/{browser/index.mjs.map → neutral/Annotation.mjs.map} +0 -0
- /package/dist/lib/{browser/internal/index.mjs.map → neutral/Database.mjs.map} +0 -0
- /package/dist/lib/{browser/query/index.mjs.map → neutral/Entity.mjs.map} +0 -0
- /package/dist/lib/{node-esm/index.mjs.map → neutral/Err.mjs.map} +0 -0
- /package/dist/lib/{node-esm/internal/index.mjs.map → neutral/Feed.mjs.map} +0 -0
- /package/dist/lib/{node-esm/query/index.mjs.map → neutral/Filter.mjs.map} +0 -0
- /package/dist/types/src/internal/{ast → Annotation}/annotations.test.d.ts +0 -0
- /package/dist/types/src/internal/{formats → Format}/date.d.ts +0 -0
- /package/dist/types/src/internal/{formats → Format}/date.test.d.ts +0 -0
- /package/dist/types/src/internal/{formats → Format}/format.test.d.ts +0 -0
- /package/dist/types/src/internal/{formats → Format}/number.d.ts +0 -0
- /package/dist/types/src/internal/{json → JsonSchema}/effect-schema.test.d.ts +0 -0
- /package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema-normalize.d.ts +0 -0
- /package/dist/types/src/internal/{json → JsonSchema}/json-schema.test.d.ts +0 -0
- /package/dist/types/src/internal/{object → Obj}/common.d.ts +0 -0
- /package/dist/types/src/internal/{object → Obj}/inspect.d.ts +0 -0
- /package/dist/types/src/internal/{object → Obj}/json-serializer.test.d.ts +0 -0
- /package/dist/types/src/internal/{object → Obj}/schema-validator.test.d.ts +0 -0
- /package/dist/types/src/internal/{object → Obj}/typed-object.test.d.ts +0 -0
- /package/dist/types/src/internal/{ref → Ref}/index.d.ts +0 -0
- /package/dist/types/src/internal/{ref → Ref}/ref.test.d.ts +0 -0
- /package/dist/types/src/internal/{projection → Type}/compose.test.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/handler.test.d.ts +0 -0
- /package/dist/types/src/internal/{object → common/proxy}/schema-validator.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/schema.test.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/typed-handler.test.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/typed-object.test.d.ts +0 -0
- /package/dist/types/src/{test → testing}/api.test.d.ts +0 -0
- /package/src/internal/{json → JsonSchema}/effect-schema.test.ts +0 -0
- /package/src/internal/{ref → Ref}/index.ts +0 -0
|
@@ -2,40 +2,55 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
+
import type * as Atom from '@effect-atom/atom/Atom';
|
|
5
6
|
import * as Effect from 'effect/Effect';
|
|
7
|
+
import * as Equal from 'effect/Equal';
|
|
8
|
+
import * as Hash from 'effect/Hash';
|
|
6
9
|
import * as Option from 'effect/Option';
|
|
7
10
|
import * as ParseResult from 'effect/ParseResult';
|
|
11
|
+
import * as Pipeable from 'effect/Pipeable';
|
|
8
12
|
import * as Schema from 'effect/Schema';
|
|
9
13
|
import * as SchemaAST from 'effect/SchemaAST';
|
|
14
|
+
import type * as Types from 'effect/Types';
|
|
10
15
|
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
16
|
+
import { Event } from '@dxos/async';
|
|
17
|
+
import { type CustomInspectFunction, inspectCustom } from '@dxos/debug';
|
|
18
|
+
import { EncodedReference } from '@dxos/echo-protocol';
|
|
13
19
|
import { assertArgument, invariant } from '@dxos/invariant';
|
|
14
|
-
import { DXN,
|
|
15
|
-
|
|
16
|
-
import
|
|
17
|
-
import
|
|
18
|
-
import
|
|
20
|
+
import { DXN, EID, EntityId, type URI } from '@dxos/keys';
|
|
21
|
+
|
|
22
|
+
import * as Database from '../../Database';
|
|
23
|
+
import type * as Type from '../../Type';
|
|
24
|
+
import {
|
|
25
|
+
ReferenceAnnotationId,
|
|
26
|
+
getSchemaURI,
|
|
27
|
+
getTypeAnnotation,
|
|
28
|
+
getTypeIdentifierAnnotation,
|
|
29
|
+
} from '../Annotation/annotations';
|
|
30
|
+
import { type AnyEntity, type AnyProperties, type UnknownTypeSchema, getStaticTypeSchema } from '../common/types';
|
|
31
|
+
import { type JsonSchemaType } from '../JsonSchema';
|
|
32
|
+
import * as RefAtoms from './atoms';
|
|
19
33
|
|
|
20
34
|
/**
|
|
21
35
|
* The `$id` and `$ref` fields for an ECHO reference schema.
|
|
22
36
|
*/
|
|
23
37
|
export const JSON_SCHEMA_ECHO_REF_ID = '/schemas/echo/ref';
|
|
24
38
|
|
|
25
|
-
// TODO(burdon): Define return type.
|
|
26
39
|
export const getSchemaReference = (property: JsonSchemaType): { typename: string } | undefined => {
|
|
27
40
|
const { $id, reference: { schema: { $ref } = {} } = {} } = property;
|
|
28
41
|
if ($id === JSON_SCHEMA_ECHO_REF_ID && $ref) {
|
|
29
|
-
|
|
42
|
+
const parsed = DXN.tryMake($ref);
|
|
43
|
+
const typename = parsed ? DXN.getName(parsed) : undefined;
|
|
44
|
+
return typename ? { typename } : undefined;
|
|
30
45
|
}
|
|
31
46
|
};
|
|
32
47
|
|
|
33
|
-
export const createSchemaReference = (typename: string): JsonSchemaType => {
|
|
48
|
+
export const createSchemaReference = (typename: string): Types.DeepMutable<JsonSchemaType> => {
|
|
34
49
|
return {
|
|
35
50
|
$id: JSON_SCHEMA_ECHO_REF_ID,
|
|
36
51
|
reference: {
|
|
37
52
|
schema: {
|
|
38
|
-
$ref: DXN.
|
|
53
|
+
$ref: DXN.make(typename),
|
|
39
54
|
},
|
|
40
55
|
},
|
|
41
56
|
};
|
|
@@ -71,26 +86,48 @@ export const RefTypeId: unique symbol = Symbol('@dxos/echo/internal/Ref');
|
|
|
71
86
|
/**
|
|
72
87
|
* Reference Schema.
|
|
73
88
|
*/
|
|
74
|
-
export interface
|
|
89
|
+
export interface RefSchema<T extends AnyEntity> extends Schema.SchemaClass<Ref<T>, EncodedReference> {}
|
|
75
90
|
|
|
76
|
-
|
|
91
|
+
/**
|
|
92
|
+
* Type of the `Ref` function and extra methods attached to it.
|
|
93
|
+
*/
|
|
77
94
|
export interface RefFn {
|
|
78
|
-
|
|
95
|
+
// A reference target is a `Type.AnyEntity` entity (the canonical Option B
|
|
96
|
+
// input) or one of the well-known "any object" / "any relation" branded
|
|
97
|
+
// schemas (`Obj.Unknown` / `Relation.Unknown`). Arbitrary raw schemas are
|
|
98
|
+
// rejected.
|
|
99
|
+
//
|
|
100
|
+
// Referencing a type-kind entity (a meta-schema, e.g. `Type.Type`) yields a
|
|
101
|
+
// reference to a stored schema record; its loaded target is any registered
|
|
102
|
+
// entity (`Type.AnyEntity`), since a stored object/relation schema is itself a
|
|
103
|
+
// `Type.Type` record. Referencing an object/relation type yields a reference
|
|
104
|
+
// to an instance of that type.
|
|
105
|
+
<S extends Type.AnyEntity | UnknownTypeSchema<any, any> = Type.AnyEntity>(
|
|
106
|
+
schema: S,
|
|
107
|
+
): RefSchema<
|
|
108
|
+
S extends Type.AnyType
|
|
109
|
+
? Type.AnyEntity
|
|
110
|
+
: S extends Type.AnyObj | Type.AnyRelation
|
|
111
|
+
? Type.InstanceType<S>
|
|
112
|
+
: S extends UnknownTypeSchema<infer A, any>
|
|
113
|
+
? A
|
|
114
|
+
: never
|
|
115
|
+
>;
|
|
79
116
|
|
|
80
117
|
/**
|
|
81
118
|
* @returns True if the object is a reference.
|
|
82
119
|
*/
|
|
83
|
-
isRef: (obj:
|
|
120
|
+
isRef: (obj: unknown) => obj is Ref<any>;
|
|
84
121
|
|
|
85
122
|
/**
|
|
86
123
|
* @returns True if the reference points to the given object id.
|
|
87
124
|
*/
|
|
88
|
-
|
|
125
|
+
hasEntityId: (id: EntityId) => (ref: Ref<any>) => boolean;
|
|
89
126
|
|
|
90
127
|
/**
|
|
91
128
|
* @returns True if the schema is a reference schema.
|
|
92
129
|
*/
|
|
93
|
-
isRefSchema: (schema: Schema.Schema<any, any>) => schema is
|
|
130
|
+
isRefSchema: (schema: Schema.Schema<any, any>) => schema is RefSchema<any>;
|
|
94
131
|
|
|
95
132
|
/**
|
|
96
133
|
* @returns True if the schema AST is a reference schema.
|
|
@@ -100,49 +137,51 @@ export interface RefFn {
|
|
|
100
137
|
/**
|
|
101
138
|
* Constructs a reference that points to the given object.
|
|
102
139
|
*/
|
|
103
|
-
// TODO(burdon):
|
|
104
|
-
make: <T extends
|
|
140
|
+
// TODO(burdon): Narrow to Obj.Unknown?
|
|
141
|
+
make: <T extends AnyEntity>(object: T) => Ref<T>;
|
|
105
142
|
|
|
106
143
|
/**
|
|
107
|
-
* Constructs a reference that points to the object specified by the provided
|
|
144
|
+
* Constructs a reference that points to the object specified by the provided URI
|
|
145
|
+
* (either an `echo:` EID for an object reference or a `dxn:` DXN for a type reference).
|
|
108
146
|
*/
|
|
109
|
-
|
|
147
|
+
fromURI: (uri: URI.URI) => Ref<any>;
|
|
110
148
|
}
|
|
149
|
+
|
|
111
150
|
/**
|
|
112
151
|
* Schema builder for references.
|
|
113
152
|
*/
|
|
114
|
-
export const Ref: RefFn =
|
|
153
|
+
export const Ref: RefFn = (input: any): RefSchema<any> => {
|
|
154
|
+
// `Type.Type` entities carry their source schema on the hidden slot; the
|
|
155
|
+
// branded `Obj.Unknown` / `Relation.Unknown` schemas are used directly.
|
|
156
|
+
const schema = getStaticTypeSchema(input) ?? input;
|
|
115
157
|
assertArgument(Schema.isSchema(schema), 'schema', 'Must call with an instance of effect-schema');
|
|
116
|
-
|
|
117
158
|
const annotation = getTypeAnnotation(schema);
|
|
118
159
|
if (annotation == null) {
|
|
119
160
|
throw new Error('Reference target must be an ECHO schema.');
|
|
120
161
|
}
|
|
121
162
|
|
|
122
|
-
return createEchoReferenceSchema(
|
|
123
|
-
getTypeIdentifierAnnotation(schema),
|
|
124
|
-
annotation.typename,
|
|
125
|
-
annotation.version,
|
|
126
|
-
getSchemaExpectedName(schema.ast),
|
|
127
|
-
);
|
|
163
|
+
return createEchoReferenceSchema(getTypeIdentifierAnnotation(schema), annotation.typename, annotation.version);
|
|
128
164
|
};
|
|
129
165
|
|
|
130
166
|
/**
|
|
131
167
|
* Represents materialized reference to a target.
|
|
132
168
|
* This is the data type for the fields marked as ref.
|
|
133
169
|
*/
|
|
134
|
-
export interface Ref<T> {
|
|
170
|
+
export interface Ref<T> extends Pipeable.Pipeable {
|
|
135
171
|
/**
|
|
136
|
-
* Target object DXN.
|
|
172
|
+
* Target URI (either an `echo:` EID for an object reference or a `dxn:` DXN for a type reference).
|
|
137
173
|
*/
|
|
138
|
-
get
|
|
174
|
+
get uri(): URI.URI;
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Returns true if the reference has a target available (inlined or resolver set).
|
|
178
|
+
*/
|
|
179
|
+
get isAvailable(): boolean;
|
|
139
180
|
|
|
140
181
|
/**
|
|
141
182
|
* @returns The reference target.
|
|
142
183
|
* May return `undefined` if the object is not loaded in the working set.
|
|
143
184
|
* Accessing this property, even if it returns `undefined` will trigger the object to be loaded to the working set.
|
|
144
|
-
*
|
|
145
|
-
* @reactive Supports signal subscriptions.
|
|
146
185
|
*/
|
|
147
186
|
get target(): T | undefined;
|
|
148
187
|
|
|
@@ -156,8 +195,19 @@ export interface Ref<T> {
|
|
|
156
195
|
/**
|
|
157
196
|
* @returns Promise that will resolves with the target object or undefined if the object is not loaded locally.
|
|
158
197
|
*/
|
|
198
|
+
|
|
159
199
|
tryLoad(): Promise<T | undefined>;
|
|
160
200
|
|
|
201
|
+
/**
|
|
202
|
+
* Subscribe to the ref's resolution event.
|
|
203
|
+
* The callback fires when the target object becomes available in the working set
|
|
204
|
+
* (e.g. when its document is loaded after sibling-client mutation).
|
|
205
|
+
* Note: the resolver only schedules a notification when the target is requested
|
|
206
|
+
* via {@link target} while it is not yet loaded.
|
|
207
|
+
* @returns Function that unsubscribes the callback.
|
|
208
|
+
*/
|
|
209
|
+
onResolved(callback: () => void): () => void;
|
|
210
|
+
|
|
161
211
|
/**
|
|
162
212
|
* Do not inline the target object in the reference.
|
|
163
213
|
* Makes .target unavailable unless the reference is connected to a database context.
|
|
@@ -171,6 +221,13 @@ export interface Ref<T> {
|
|
|
171
221
|
*/
|
|
172
222
|
noInline(): Ref<T>;
|
|
173
223
|
|
|
224
|
+
/**
|
|
225
|
+
* Read-only atom for the ref target.
|
|
226
|
+
* Resolves once when the target loads; does NOT subscribe to target object mutations.
|
|
227
|
+
* Use `Obj.atom(ref)` if you need reactive snapshots that update on every object mutation.
|
|
228
|
+
*/
|
|
229
|
+
get atom(): Atom.Atom<T | undefined>;
|
|
230
|
+
|
|
174
231
|
/**
|
|
175
232
|
* Serializes the reference to a JSON object.
|
|
176
233
|
* The serialization format is compatible with the IPLD-style encoded references.
|
|
@@ -199,9 +256,12 @@ Ref.isRef = (obj: any): obj is Ref<any> => {
|
|
|
199
256
|
return obj && typeof obj === 'object' && RefTypeId in obj;
|
|
200
257
|
};
|
|
201
258
|
|
|
202
|
-
Ref.
|
|
259
|
+
Ref.hasEntityId = (id: EntityId) => (ref: Ref<any>) => {
|
|
260
|
+
const uri = EID.tryParse(ref.uri);
|
|
261
|
+
return uri !== undefined && EID.isLocal(uri) && EID.getEntityId(uri) === id;
|
|
262
|
+
};
|
|
203
263
|
|
|
204
|
-
Ref.isRefSchema = (schema: Schema.Schema<any, any>): schema is
|
|
264
|
+
Ref.isRefSchema = (schema: Schema.Schema<any, any>): schema is RefSchema<any> => {
|
|
205
265
|
return Ref.isRefSchemaAST(schema.ast);
|
|
206
266
|
};
|
|
207
267
|
|
|
@@ -209,21 +269,21 @@ Ref.isRefSchemaAST = (ast: SchemaAST.AST): boolean => {
|
|
|
209
269
|
return SchemaAST.getAnnotation(ast, ReferenceAnnotationId).pipe(Option.isSome);
|
|
210
270
|
};
|
|
211
271
|
|
|
212
|
-
Ref.make = <T extends
|
|
272
|
+
Ref.make = <T extends AnyProperties>(obj: T): Ref<T> => {
|
|
213
273
|
if (typeof obj !== 'object' || obj === null) {
|
|
214
274
|
throw new TypeError('Expected: ECHO object.');
|
|
215
275
|
}
|
|
216
276
|
|
|
217
|
-
// TODO(dmaretskyi): Extract to `
|
|
277
|
+
// TODO(dmaretskyi): Extract to `getObjectEchoUri` function.
|
|
218
278
|
const id = obj.id;
|
|
219
|
-
invariant(
|
|
220
|
-
const
|
|
221
|
-
return new RefImpl(
|
|
279
|
+
invariant(EntityId.isValid(id), 'Invalid object ID');
|
|
280
|
+
const uri = EID.make({ entityId: id });
|
|
281
|
+
return new RefImpl(uri, obj);
|
|
222
282
|
};
|
|
223
283
|
|
|
224
|
-
Ref.
|
|
225
|
-
assertArgument(
|
|
226
|
-
return new RefImpl(
|
|
284
|
+
Ref.fromURI = (uri: URI.URI): Ref<any> => {
|
|
285
|
+
assertArgument(typeof uri === 'string', 'uri', 'Expected URI string');
|
|
286
|
+
return new RefImpl(uri);
|
|
227
287
|
};
|
|
228
288
|
|
|
229
289
|
/**
|
|
@@ -239,19 +299,18 @@ export type JsonSchemaReferenceInfo = {
|
|
|
239
299
|
*/
|
|
240
300
|
// TODO(burdon): Move to json schema and make private?
|
|
241
301
|
export const createEchoReferenceSchema = (
|
|
242
|
-
|
|
302
|
+
echoUri: string | undefined,
|
|
243
303
|
typename: string | undefined,
|
|
244
304
|
version: string | undefined,
|
|
245
|
-
schemaName?: string,
|
|
246
305
|
): Schema.SchemaClass<Ref<any>, EncodedReference> => {
|
|
247
|
-
if (!
|
|
248
|
-
throw new TypeError('Either
|
|
306
|
+
if (!echoUri && !typename) {
|
|
307
|
+
throw new TypeError('Either echoUri or typename must be provided.');
|
|
249
308
|
}
|
|
250
309
|
|
|
251
310
|
const referenceInfo: JsonSchemaReferenceInfo = {
|
|
252
311
|
schema: {
|
|
253
312
|
// TODO(dmaretskyi): Include version?
|
|
254
|
-
$ref:
|
|
313
|
+
$ref: echoUri ?? DXN.make(typename!),
|
|
255
314
|
},
|
|
256
315
|
schemaVersion: version,
|
|
257
316
|
};
|
|
@@ -261,25 +320,39 @@ export const createEchoReferenceSchema = (
|
|
|
261
320
|
[],
|
|
262
321
|
{
|
|
263
322
|
encode: () => {
|
|
264
|
-
return (value) =>
|
|
265
|
-
|
|
266
|
-
|
|
323
|
+
return (value) =>
|
|
324
|
+
Effect.gen(function* () {
|
|
325
|
+
if (Ref.isRef(value)) {
|
|
326
|
+
return EncodedReference.fromURI((value as Ref<any>).uri);
|
|
327
|
+
} else if (EncodedReference.isEncodedReference(value)) {
|
|
328
|
+
return value;
|
|
329
|
+
}
|
|
330
|
+
throw new Error('Invalid reference');
|
|
267
331
|
});
|
|
268
|
-
};
|
|
269
332
|
},
|
|
270
333
|
decode: () => {
|
|
271
|
-
return (value) =>
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
334
|
+
return (value) =>
|
|
335
|
+
Effect.gen(function* () {
|
|
336
|
+
const dbService = yield* Effect.serviceOption(Database.Service);
|
|
337
|
+
|
|
338
|
+
// TODO(dmaretskyi): This branch seems to be taken by Schema.is
|
|
339
|
+
if (Ref.isRef(value)) {
|
|
340
|
+
if (Option.isSome(dbService)) {
|
|
341
|
+
return dbService.value.db.makeRef(value.uri);
|
|
342
|
+
} else {
|
|
343
|
+
return value;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
if (!EncodedReference.isEncodedReference(value)) {
|
|
348
|
+
return yield* Effect.fail(new ParseResult.Unexpected(value, 'reference'));
|
|
349
|
+
}
|
|
350
|
+
if (Option.isSome(dbService)) {
|
|
351
|
+
return dbService.value.db.makeRef(EncodedReference.toURI(value));
|
|
352
|
+
} else {
|
|
353
|
+
return Ref.fromURI(EncodedReference.toURI(value));
|
|
354
|
+
}
|
|
355
|
+
});
|
|
283
356
|
},
|
|
284
357
|
},
|
|
285
358
|
{
|
|
@@ -311,25 +384,34 @@ export interface RefResolver {
|
|
|
311
384
|
/**
|
|
312
385
|
* Resolve ref synchronously from the objects in the working set.
|
|
313
386
|
*
|
|
314
|
-
* @param
|
|
387
|
+
* @param uri
|
|
315
388
|
* @param load If true the resolver should attempt to load the object from disk.
|
|
316
389
|
* @param onLoad Callback to call when the object is loaded.
|
|
317
390
|
*/
|
|
318
|
-
resolveSync(
|
|
391
|
+
resolveSync(uri: URI.URI, load: boolean, onLoad?: () => void): AnyProperties | undefined;
|
|
319
392
|
|
|
320
393
|
/**
|
|
321
394
|
* Resolver ref asynchronously.
|
|
322
395
|
*/
|
|
323
|
-
resolve(
|
|
396
|
+
resolve(uri: URI.URI): Promise<AnyProperties | undefined>;
|
|
324
397
|
|
|
325
398
|
// TODO(dmaretskyi): Combine with `resolve`.
|
|
326
|
-
resolveSchema(
|
|
399
|
+
resolveSchema(uri: URI.URI): Promise<Schema.Schema.AnyNoContext | undefined>;
|
|
400
|
+
|
|
401
|
+
/**
|
|
402
|
+
* Resolve the source `Type.AnyEntity` entity for a type URI. Used by
|
|
403
|
+
* deserialization paths (`Obj.fromJSON`) to set the back-reference accessed
|
|
404
|
+
* via `Obj.getType` / `Entity.getType`. Optional — resolvers that only
|
|
405
|
+
* carry raw schemas may leave this unimplemented; the deserializer falls
|
|
406
|
+
* back to leaving the type entity unset.
|
|
407
|
+
*/
|
|
408
|
+
resolveType?(uri: URI.URI): Promise<unknown | undefined>;
|
|
327
409
|
}
|
|
328
410
|
|
|
329
411
|
export class RefImpl<T> implements Ref<T> {
|
|
330
|
-
#
|
|
412
|
+
#uri: URI.URI;
|
|
331
413
|
#resolver?: RefResolver = undefined;
|
|
332
|
-
#
|
|
414
|
+
#resolved = new Event<void>();
|
|
333
415
|
|
|
334
416
|
/**
|
|
335
417
|
* Target is set when the reference is created from a specific object.
|
|
@@ -341,32 +423,38 @@ export class RefImpl<T> implements Ref<T> {
|
|
|
341
423
|
* Callback to issue a reactive notification when object is resolved.
|
|
342
424
|
*/
|
|
343
425
|
#resolverCallback = () => {
|
|
344
|
-
this.#
|
|
426
|
+
this.#resolved.emit();
|
|
345
427
|
};
|
|
346
428
|
|
|
347
|
-
constructor(
|
|
348
|
-
this.#
|
|
429
|
+
constructor(uri: URI.URI, target?: T) {
|
|
430
|
+
this.#uri = uri;
|
|
349
431
|
this.#target = target;
|
|
350
432
|
}
|
|
351
433
|
|
|
352
434
|
/**
|
|
353
435
|
* @inheritdoc
|
|
354
436
|
*/
|
|
355
|
-
get
|
|
356
|
-
return this.#
|
|
437
|
+
get uri(): URI.URI {
|
|
438
|
+
return this.#uri;
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
/**
|
|
442
|
+
* @inheritdoc
|
|
443
|
+
*/
|
|
444
|
+
get isAvailable(): boolean {
|
|
445
|
+
return this.#target !== undefined || this.#resolver !== undefined;
|
|
357
446
|
}
|
|
358
447
|
|
|
359
448
|
/**
|
|
360
449
|
* @inheritdoc
|
|
361
450
|
*/
|
|
362
451
|
get target(): T | undefined {
|
|
363
|
-
this.#signal.notifyRead();
|
|
364
452
|
if (this.#target) {
|
|
365
453
|
return this.#target;
|
|
366
454
|
}
|
|
367
455
|
|
|
368
456
|
invariant(this.#resolver, 'Resolver is not set');
|
|
369
|
-
return this.#resolver.resolveSync(this.#
|
|
457
|
+
return this.#resolver.resolveSync(this.#uri, true, this.#resolverCallback) as T | undefined;
|
|
370
458
|
}
|
|
371
459
|
|
|
372
460
|
/**
|
|
@@ -377,7 +465,7 @@ export class RefImpl<T> implements Ref<T> {
|
|
|
377
465
|
return this.#target;
|
|
378
466
|
}
|
|
379
467
|
invariant(this.#resolver, 'Resolver is not set');
|
|
380
|
-
const obj = await this.#resolver.resolve(this.#
|
|
468
|
+
const obj = await this.#resolver.resolve(this.#uri);
|
|
381
469
|
if (obj == null) {
|
|
382
470
|
throw new Error('Object not found');
|
|
383
471
|
}
|
|
@@ -388,8 +476,18 @@ export class RefImpl<T> implements Ref<T> {
|
|
|
388
476
|
* @inheritdoc
|
|
389
477
|
*/
|
|
390
478
|
async tryLoad(): Promise<T | undefined> {
|
|
479
|
+
if (this.#target) {
|
|
480
|
+
return this.#target;
|
|
481
|
+
}
|
|
391
482
|
invariant(this.#resolver, 'Resolver is not set');
|
|
392
|
-
return (await this.#resolver.resolve(this.#
|
|
483
|
+
return (await this.#resolver.resolve(this.#uri)) as T | undefined;
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
/**
|
|
487
|
+
* @inheritdoc
|
|
488
|
+
*/
|
|
489
|
+
onResolved(callback: () => void): () => void {
|
|
490
|
+
return this.#resolved.on(callback);
|
|
393
491
|
}
|
|
394
492
|
|
|
395
493
|
/**
|
|
@@ -398,14 +496,14 @@ export class RefImpl<T> implements Ref<T> {
|
|
|
398
496
|
* Clones the reference object.
|
|
399
497
|
*/
|
|
400
498
|
noInline(): RefImpl<T> {
|
|
401
|
-
const ref = new RefImpl<T>(this.#
|
|
499
|
+
const ref = new RefImpl<T>(this.#uri, undefined);
|
|
402
500
|
ref.#resolver = this.#resolver;
|
|
403
501
|
return ref;
|
|
404
502
|
}
|
|
405
503
|
|
|
406
504
|
encode(): EncodedReference {
|
|
407
505
|
return {
|
|
408
|
-
'/': this.#
|
|
506
|
+
'/': this.#uri,
|
|
409
507
|
...(this.#target ? { target: this.#target } : {}),
|
|
410
508
|
};
|
|
411
509
|
}
|
|
@@ -425,13 +523,37 @@ export class RefImpl<T> implements Ref<T> {
|
|
|
425
523
|
return `Ref(${this.#target.toString()})`;
|
|
426
524
|
}
|
|
427
525
|
|
|
428
|
-
return `Ref(${this.#
|
|
526
|
+
return `Ref(${this.#uri.toString()})`;
|
|
429
527
|
}
|
|
430
528
|
|
|
529
|
+
[inspectCustom]: CustomInspectFunction = (depth, options, inspect) => {
|
|
530
|
+
return this.toString();
|
|
531
|
+
};
|
|
532
|
+
|
|
431
533
|
[RefTypeId] = refVariance;
|
|
432
534
|
|
|
535
|
+
/**
|
|
536
|
+
* Effect Hash trait. Required for MutableHashMap-based caches (e.g., Atom.family)
|
|
537
|
+
* to deduplicate Ref instances that point to the same object.
|
|
538
|
+
* ECHO proxies return new RefImpl instances on every property access,
|
|
539
|
+
* so without this, each access would create a separate cache entry.
|
|
540
|
+
*/
|
|
541
|
+
[Hash.symbol](): number {
|
|
542
|
+
return Hash.hash(this.#uri.toString());
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
/** Effect Equal trait. See {@link Hash.symbol} for rationale. */
|
|
546
|
+
[Equal.symbol](that: Equal.Equal): boolean {
|
|
547
|
+
return that instanceof RefImpl && this.#uri === that.uri;
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
get atom(): Atom.Atom<T | undefined> {
|
|
551
|
+
return RefAtoms.refSimpleFamily(this);
|
|
552
|
+
}
|
|
553
|
+
|
|
433
554
|
/**
|
|
434
555
|
* Internal method to set the resolver.
|
|
556
|
+
*
|
|
435
557
|
* @internal
|
|
436
558
|
*/
|
|
437
559
|
_setResolver(resolver: RefResolver): void {
|
|
@@ -439,13 +561,16 @@ export class RefImpl<T> implements Ref<T> {
|
|
|
439
561
|
}
|
|
440
562
|
|
|
441
563
|
/**
|
|
442
|
-
* Internal method to get the saved target.
|
|
443
|
-
* Not the same as `target` which is resolved from the resolver.
|
|
444
564
|
* @internal
|
|
445
565
|
*/
|
|
446
566
|
_getSavedTarget(): T | undefined {
|
|
447
567
|
return this.#target;
|
|
448
568
|
}
|
|
569
|
+
|
|
570
|
+
pipe() {
|
|
571
|
+
// eslint-disable-next-line prefer-rest-params
|
|
572
|
+
return Pipeable.pipeArguments(this, arguments);
|
|
573
|
+
}
|
|
449
574
|
}
|
|
450
575
|
|
|
451
576
|
/**
|
|
@@ -459,7 +584,7 @@ export const setRefResolver = (ref: Ref<any>, resolver: RefResolver) => {
|
|
|
459
584
|
/**
|
|
460
585
|
* Internal API for getting the saved target on a reference.
|
|
461
586
|
*/
|
|
462
|
-
export const getRefSavedTarget = (ref: Ref<any>):
|
|
587
|
+
export const getRefSavedTarget = (ref: Ref<any>): AnyProperties | undefined => {
|
|
463
588
|
invariant(ref instanceof RefImpl, 'Ref is not an instance of RefImpl');
|
|
464
589
|
return ref._getSavedTarget();
|
|
465
590
|
};
|
|
@@ -470,8 +595,8 @@ const refVariance: Ref<any>[typeof RefTypeId] = {
|
|
|
470
595
|
};
|
|
471
596
|
|
|
472
597
|
export const refFromEncodedReference = (encodedReference: EncodedReference, resolver?: RefResolver): Ref<any> => {
|
|
473
|
-
const
|
|
474
|
-
const ref = new RefImpl(
|
|
598
|
+
const uri = EncodedReference.toURI(encodedReference);
|
|
599
|
+
const ref = new RefImpl(uri);
|
|
475
600
|
|
|
476
601
|
// TODO(dmaretskyi): Handle inline target in the encoded reference.
|
|
477
602
|
|
|
@@ -482,23 +607,26 @@ export const refFromEncodedReference = (encodedReference: EncodedReference, reso
|
|
|
482
607
|
};
|
|
483
608
|
|
|
484
609
|
export class StaticRefResolver implements RefResolver {
|
|
485
|
-
public objects = new Map<
|
|
486
|
-
public schemas = new Map<
|
|
610
|
+
public objects = new Map<EntityId, AnyProperties>();
|
|
611
|
+
public schemas = new Map<URI.URI, Schema.Schema.AnyNoContext>();
|
|
487
612
|
|
|
488
|
-
addObject(obj:
|
|
613
|
+
addObject(obj: AnyProperties): this {
|
|
489
614
|
this.objects.set(obj.id, obj);
|
|
490
615
|
return this;
|
|
491
616
|
}
|
|
492
617
|
|
|
493
|
-
addSchema(
|
|
494
|
-
const
|
|
495
|
-
invariant(
|
|
496
|
-
|
|
618
|
+
addSchema(input: Type.AnyEntity): this {
|
|
619
|
+
const schema = getStaticTypeSchema(input);
|
|
620
|
+
invariant(schema, 'Type entity is missing its source schema');
|
|
621
|
+
const uri = getSchemaURI(schema);
|
|
622
|
+
invariant(uri, 'Schema has no URI');
|
|
623
|
+
this.schemas.set(uri, schema);
|
|
497
624
|
return this;
|
|
498
625
|
}
|
|
499
626
|
|
|
500
|
-
resolveSync(
|
|
501
|
-
const
|
|
627
|
+
resolveSync(uri: URI.URI, _load: boolean, _onLoad?: () => void): AnyProperties | undefined {
|
|
628
|
+
const echoUri = EID.tryParse(uri);
|
|
629
|
+
const id = echoUri ? EID.getEntityId(echoUri) : undefined;
|
|
502
630
|
if (id == null) {
|
|
503
631
|
return undefined;
|
|
504
632
|
}
|
|
@@ -506,8 +634,9 @@ export class StaticRefResolver implements RefResolver {
|
|
|
506
634
|
return this.objects.get(id);
|
|
507
635
|
}
|
|
508
636
|
|
|
509
|
-
async resolve(
|
|
510
|
-
const
|
|
637
|
+
async resolve(uri: URI.URI): Promise<AnyProperties | undefined> {
|
|
638
|
+
const echoUri = EID.tryParse(uri);
|
|
639
|
+
const id = echoUri ? EID.getEntityId(echoUri) : undefined;
|
|
511
640
|
if (id == null) {
|
|
512
641
|
return undefined;
|
|
513
642
|
}
|
|
@@ -515,7 +644,7 @@ export class StaticRefResolver implements RefResolver {
|
|
|
515
644
|
return this.objects.get(id);
|
|
516
645
|
}
|
|
517
646
|
|
|
518
|
-
async resolveSchema(
|
|
519
|
-
return this.schemas.get(
|
|
647
|
+
async resolveSchema(uri: URI.URI): Promise<Schema.Schema.AnyNoContext | undefined> {
|
|
648
|
+
return this.schemas.get(uri);
|
|
520
649
|
}
|
|
521
650
|
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import type * as Atom from '@effect-atom/atom/Atom';
|
|
6
|
+
|
|
7
|
+
import type { Ref } from './ref';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Internal helper for loading ref targets in atoms.
|
|
11
|
+
* Handles the common pattern of checking for loaded target and triggering async load.
|
|
12
|
+
*/
|
|
13
|
+
export const loadRefTarget = <T, R>(
|
|
14
|
+
ref: Ref<T>,
|
|
15
|
+
get: Atom.Context,
|
|
16
|
+
onTargetAvailable: (target: T) => R,
|
|
17
|
+
): R | undefined => {
|
|
18
|
+
// Accessing `ref.target` registers a resolution callback when the target is
|
|
19
|
+
// not yet loaded, so resolution can be observed via `ref.onResolved` below.
|
|
20
|
+
const currentTarget = ref.target;
|
|
21
|
+
if (currentTarget) {
|
|
22
|
+
return onTargetAvailable(currentTarget);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// Subscribe to the ref's resolution event in case the target loads later.
|
|
26
|
+
const unsubscribe = ref.onResolved(() => {
|
|
27
|
+
const target = ref.target;
|
|
28
|
+
if (target) {
|
|
29
|
+
get.setSelf(onTargetAvailable(target));
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
get.addFinalizer(unsubscribe);
|
|
33
|
+
|
|
34
|
+
// Also try async load (e.g. for objects that need disk loading).
|
|
35
|
+
void ref
|
|
36
|
+
.load()
|
|
37
|
+
.then((loadedTarget) => {
|
|
38
|
+
get.setSelf(onTargetAvailable(loadedTarget));
|
|
39
|
+
})
|
|
40
|
+
.catch(() => {
|
|
41
|
+
// Loading failed; the resolution subscription above will pick up cross-client updates.
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
return undefined;
|
|
45
|
+
};
|