@dxos/echo 0.8.4-main.ead640a → 0.8.4-main.effb148878
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 +39 -0
- package/dist/lib/neutral/Database.mjs +49 -0
- package/dist/lib/neutral/Entity.mjs +68 -0
- package/dist/lib/neutral/Err.mjs +12 -0
- package/dist/lib/neutral/Extension.mjs +18 -0
- package/dist/lib/neutral/Feed.mjs +54 -0
- package/dist/lib/neutral/Filter.mjs +74 -0
- package/dist/lib/neutral/Filter.mjs.map +7 -0
- package/dist/lib/neutral/Format.mjs +86 -0
- package/dist/lib/neutral/Format.mjs.map +7 -0
- package/dist/lib/neutral/JsonSchema.mjs +19 -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 +114 -0
- package/dist/lib/neutral/Obj.mjs.map +7 -0
- package/dist/lib/neutral/Order.mjs +12 -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 +26 -0
- package/dist/lib/neutral/Ref.mjs.map +7 -0
- package/dist/lib/neutral/Relation.mjs +95 -0
- package/dist/lib/neutral/Relation.mjs.map +7 -0
- package/dist/lib/neutral/SchemaRegistry.mjs +2 -0
- package/dist/lib/neutral/SchemaRegistry.mjs.map +7 -0
- package/dist/lib/neutral/Tag.mjs +29 -0
- package/dist/lib/neutral/Tag.mjs.map +7 -0
- package/dist/lib/neutral/Type.mjs +63 -0
- package/dist/lib/neutral/Type.mjs.map +7 -0
- package/dist/lib/neutral/chunk-4SYHDOQA.mjs +48 -0
- package/dist/lib/neutral/chunk-4SYHDOQA.mjs.map +7 -0
- package/dist/lib/neutral/chunk-4U7OD55H.mjs +47 -0
- package/dist/lib/neutral/chunk-4U7OD55H.mjs.map +7 -0
- package/dist/lib/neutral/chunk-52NG2XEE.mjs +34 -0
- package/dist/lib/neutral/chunk-52NG2XEE.mjs.map +7 -0
- package/dist/lib/neutral/chunk-A5HDDVKS.mjs +94 -0
- package/dist/lib/neutral/chunk-A5HDDVKS.mjs.map +7 -0
- package/dist/lib/neutral/chunk-EZ4XJFHJ.mjs +54 -0
- package/dist/lib/neutral/chunk-EZ4XJFHJ.mjs.map +7 -0
- package/dist/lib/neutral/chunk-F625JEZB.mjs +365 -0
- package/dist/lib/neutral/chunk-F625JEZB.mjs.map +7 -0
- package/dist/lib/neutral/chunk-FFCN66OF.mjs +420 -0
- package/dist/lib/neutral/chunk-FFCN66OF.mjs.map +7 -0
- package/dist/lib/neutral/chunk-GOHDOJE3.mjs +51 -0
- package/dist/lib/neutral/chunk-GOHDOJE3.mjs.map +7 -0
- package/dist/lib/neutral/chunk-GWFFC34K.mjs +50 -0
- package/dist/lib/neutral/chunk-GWFFC34K.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-J7QWJQQV.mjs +318 -0
- package/dist/lib/neutral/chunk-J7QWJQQV.mjs.map +7 -0
- package/dist/lib/neutral/chunk-JTHNDGAR.mjs +27 -0
- package/dist/lib/neutral/chunk-JTHNDGAR.mjs.map +7 -0
- package/dist/lib/neutral/chunk-K5RH2PBH.mjs +361 -0
- package/dist/lib/neutral/chunk-K5RH2PBH.mjs.map +7 -0
- package/dist/lib/neutral/chunk-KHRAQDYX.mjs +343 -0
- package/dist/lib/neutral/chunk-KHRAQDYX.mjs.map +7 -0
- package/dist/lib/neutral/chunk-L65CW5EI.mjs +156 -0
- package/dist/lib/neutral/chunk-L65CW5EI.mjs.map +7 -0
- package/dist/lib/neutral/chunk-LNZIPZX6.mjs +2186 -0
- package/dist/lib/neutral/chunk-LNZIPZX6.mjs.map +7 -0
- package/dist/lib/neutral/chunk-MPXUNTME.mjs +41 -0
- package/dist/lib/neutral/chunk-MPXUNTME.mjs.map +7 -0
- package/dist/lib/neutral/chunk-O2EOH7XQ.mjs +420 -0
- package/dist/lib/neutral/chunk-O2EOH7XQ.mjs.map +7 -0
- package/dist/lib/neutral/chunk-Q7ID37KF.mjs +278 -0
- package/dist/lib/neutral/chunk-Q7ID37KF.mjs.map +7 -0
- package/dist/lib/neutral/chunk-QLYEQ5VA.mjs +205 -0
- package/dist/lib/neutral/chunk-QLYEQ5VA.mjs.map +7 -0
- package/dist/lib/neutral/chunk-SSDGRJ3A.mjs +747 -0
- package/dist/lib/neutral/chunk-SSDGRJ3A.mjs.map +7 -0
- package/dist/lib/neutral/chunk-TTCSATUD.mjs +42 -0
- package/dist/lib/neutral/chunk-TTCSATUD.mjs.map +7 -0
- package/dist/lib/neutral/chunk-UEFRFUYC.mjs +25 -0
- package/dist/lib/neutral/chunk-UEFRFUYC.mjs.map +7 -0
- package/dist/lib/neutral/chunk-UN7K472Q.mjs +132 -0
- package/dist/lib/neutral/chunk-UN7K472Q.mjs.map +7 -0
- package/dist/lib/neutral/chunk-UQAMAXDU.mjs +243 -0
- package/dist/lib/neutral/chunk-UQAMAXDU.mjs.map +7 -0
- package/dist/lib/neutral/chunk-V5NE2X7Y.mjs +7 -0
- package/dist/lib/neutral/chunk-V5NE2X7Y.mjs.map +7 -0
- package/dist/lib/neutral/chunk-V72DY6LU.mjs +7 -0
- package/dist/lib/neutral/chunk-V72DY6LU.mjs.map +7 -0
- package/dist/lib/neutral/chunk-ZII2BGPM.mjs +269 -0
- package/dist/lib/neutral/chunk-ZII2BGPM.mjs.map +7 -0
- package/dist/lib/neutral/chunk-ZM7VFIS2.mjs +93 -0
- package/dist/lib/neutral/chunk-ZM7VFIS2.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 +513 -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 +418 -0
- package/dist/lib/neutral/testing/index.mjs.map +7 -0
- package/dist/types/src/Annotation.d.ts +24 -0
- package/dist/types/src/Annotation.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 +201 -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 +236 -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/Extension.d.ts +80 -0
- package/dist/types/src/Extension.d.ts.map +1 -0
- package/dist/types/src/Extension.test.d.ts +2 -0
- package/dist/types/src/Extension.test.d.ts.map +1 -0
- package/dist/types/src/Feed.d.ts +229 -0
- package/dist/types/src/Feed.d.ts.map +1 -0
- package/dist/types/src/Filter.d.ts +183 -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 +4 -0
- package/dist/types/src/Format.d.ts.map +1 -0
- package/dist/types/src/Hypergraph.d.ts +65 -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 +459 -107
- 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 +16 -0
- package/dist/types/src/Order.d.ts.map +1 -0
- package/dist/types/src/Query.d.ts +225 -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 +80 -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/Relation.d.ts +316 -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/SchemaRegistry.d.ts +83 -0
- package/dist/types/src/SchemaRegistry.d.ts.map +1 -0
- package/dist/types/src/Tag.d.ts +18 -0
- package/dist/types/src/Tag.d.ts.map +1 -0
- package/dist/types/src/Type.d.ts +378 -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 +22 -5
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/internal/Annotation/annotations.d.ts +251 -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/index.d.ts +4 -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 +13 -0
- package/dist/types/src/internal/Entity/api.d.ts.map +1 -0
- package/dist/types/src/internal/Entity/entity.d.ts +67 -0
- package/dist/types/src/internal/Entity/entity.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 +57 -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 +51 -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 +25 -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 +6 -3
- 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/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 +131 -30
- 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/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} +13 -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 +10 -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.d.ts +10 -0
- package/dist/types/src/internal/Query.d.ts.map +1 -0
- package/dist/types/src/internal/Ref/index.d.ts.map +1 -0
- package/dist/types/src/internal/{ref → Ref}/ref-array.d.ts +4 -4
- package/dist/types/src/internal/Ref/ref-array.d.ts.map +1 -0
- package/dist/types/src/internal/{ref → Ref}/ref.d.ts +79 -31
- 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/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 +42 -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 +19 -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 +43 -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 +58 -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/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 +3 -3
- package/dist/types/src/testing/index.d.ts.map +1 -1
- 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 +117 -66
- package/src/Annotation.ts +49 -0
- package/src/Collection.ts +36 -0
- package/src/Database.ts +356 -0
- package/src/Dataset.ts +34 -0
- package/src/Entity.test.ts +132 -0
- package/src/Entity.ts +332 -0
- package/src/Err.ts +40 -0
- package/src/Extension.test.ts +235 -0
- package/src/Extension.ts +122 -0
- package/src/Feed.ts +356 -0
- package/src/Filter.test.ts +90 -0
- package/src/Filter.ts +507 -0
- package/src/Format.ts +9 -0
- package/src/Hypergraph.ts +79 -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 +550 -0
- package/src/Obj.ts +754 -267
- package/src/Order.ts +46 -0
- package/src/Query.test.ts +822 -0
- package/src/Query.ts +589 -0
- package/src/QueryResult.ts +106 -0
- package/src/Ref.ts +98 -10
- package/src/Relation.test.ts +88 -0
- package/src/Relation.ts +491 -67
- package/src/SchemaRegistry.ts +101 -0
- package/src/{query/tag.ts → Tag.ts} +15 -12
- package/src/Type.test.ts +197 -0
- package/src/Type.ts +605 -151
- package/src/View.ts +101 -0
- package/src/exemplars.test.ts +21 -0
- package/src/hierarchy.test.ts +33 -0
- package/src/index.ts +23 -6
- package/src/internal/Annotation/annotations.test.ts +165 -0
- package/src/internal/Annotation/annotations.ts +567 -0
- package/src/internal/Annotation/index.ts +7 -0
- package/src/internal/Annotation/sorting.ts +51 -0
- package/src/internal/Annotation/util.ts +93 -0
- package/src/internal/Entity/api.ts +30 -0
- package/src/internal/Entity/entity.ts +246 -0
- package/src/internal/Entity/index.ts +13 -0
- package/src/internal/Entity/model.ts +120 -0
- package/src/internal/Entity/object.ts +65 -0
- package/src/internal/Entity/relation.ts +179 -0
- package/src/internal/Entity/type-kind.ts +67 -0
- package/src/internal/Entity/type-uri.ts +87 -0
- package/src/internal/Entity/util.ts +34 -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 +6 -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 +4 -4
- 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 +36 -36
- package/src/internal/{json → JsonSchema}/json-schema.test.ts +92 -175
- package/src/internal/{json → JsonSchema}/json-schema.ts +69 -37
- package/src/internal/Obj/clone.ts +52 -0
- package/src/internal/{object → Obj}/common.ts +3 -4
- package/src/internal/{object/create.test.ts → Obj/create-object.test.ts} +34 -37
- package/src/internal/Obj/create-object.ts +135 -0
- package/src/internal/Obj/deleted.ts +19 -0
- package/src/internal/Obj/index.ts +13 -0
- package/src/internal/{object → Obj}/inspect.ts +5 -7
- package/src/internal/Obj/json-serializer.test.ts +185 -0
- package/src/internal/Obj/json-serializer.ts +260 -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 +165 -0
- package/src/internal/Obj/snapshot.ts +111 -0
- package/src/internal/Obj/typed-object.test.ts +32 -0
- package/src/internal/Obj/typed-object.ts +30 -0
- package/src/internal/Query.ts +156 -0
- package/src/internal/{ref → Ref}/ref-array.ts +4 -5
- package/src/internal/{ref → Ref}/ref.test.ts +21 -30
- package/src/internal/{ref → Ref}/ref.ts +209 -98
- 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 +88 -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 +519 -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 +93 -0
- package/src/internal/common/proxy/make-object.ts +128 -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 +507 -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 +10 -0
- package/src/internal/common/types/meta.ts +79 -0
- package/src/internal/common/types/model-symbols.ts +74 -0
- package/src/internal/common/types/typename.ts +91 -0
- package/src/internal/common/types/version.ts +19 -0
- package/src/internal/index.ts +12 -17
- package/src/testing/api.test.ts +129 -0
- package/src/testing/index.ts +3 -3
- 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-HKFCK2GL.mjs +0 -175
- package/dist/lib/browser/chunk-HKFCK2GL.mjs.map +0 -7
- package/dist/lib/browser/chunk-MAAYELT7.mjs +0 -830
- package/dist/lib/browser/chunk-MAAYELT7.mjs.map +0 -7
- package/dist/lib/browser/chunk-MB6MMNFP.mjs +0 -3857
- package/dist/lib/browser/chunk-MB6MMNFP.mjs.map +0 -7
- package/dist/lib/browser/index.mjs +0 -35
- package/dist/lib/browser/internal/index.mjs +0 -332
- package/dist/lib/browser/meta.json +0 -1
- package/dist/lib/browser/query/index.mjs +0 -15
- package/dist/lib/browser/testing/index.mjs +0 -298
- package/dist/lib/browser/testing/index.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-5NWDGIBT.mjs +0 -830
- package/dist/lib/node-esm/chunk-5NWDGIBT.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-AUAH4E2J.mjs +0 -175
- package/dist/lib/node-esm/chunk-AUAH4E2J.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-BQRA4VLX.mjs +0 -3857
- package/dist/lib/node-esm/chunk-BQRA4VLX.mjs.map +0 -7
- package/dist/lib/node-esm/index.mjs +0 -35
- package/dist/lib/node-esm/internal/index.mjs +0 -332
- package/dist/lib/node-esm/meta.json +0 -1
- package/dist/lib/node-esm/query/index.mjs +0 -15
- package/dist/lib/node-esm/testing/index.mjs +0 -298
- package/dist/lib/node-esm/testing/index.mjs.map +0 -7
- package/dist/types/src/errors.d.ts +0 -72
- 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 -125
- 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.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 -455
- 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 -3
- 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/query/tag.d.ts +0 -17
- package/dist/types/src/query/tag.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 -113
- 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 -219
- 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/json/index.ts +0 -5
- package/src/internal/object/accessors.ts +0 -153
- 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/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 -211
- 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 -91
- /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/Extension.mjs.map} +0 -0
- /package/dist/lib/{node-esm/query/index.mjs.map → neutral/Feed.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/{formats → Format}/object.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
|
@@ -3,39 +3,47 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import * as Effect from 'effect/Effect';
|
|
6
|
+
import * as Equal from 'effect/Equal';
|
|
7
|
+
import * as Hash from 'effect/Hash';
|
|
6
8
|
import * as Option from 'effect/Option';
|
|
7
9
|
import * as ParseResult from 'effect/ParseResult';
|
|
10
|
+
import * as Pipeable from 'effect/Pipeable';
|
|
8
11
|
import * as Schema from 'effect/Schema';
|
|
9
12
|
import * as SchemaAST from 'effect/SchemaAST';
|
|
13
|
+
import type * as Types from 'effect/Types';
|
|
10
14
|
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
15
|
+
import { Event } from '@dxos/async';
|
|
16
|
+
import { type CustomInspectFunction, inspectCustom } from '@dxos/debug';
|
|
17
|
+
import { EncodedReference } from '@dxos/echo-protocol';
|
|
13
18
|
import { assertArgument, invariant } from '@dxos/invariant';
|
|
14
|
-
import { DXN, ObjectId } from '@dxos/keys';
|
|
19
|
+
import { DXN, EchoURI, ObjectId, type URI } from '@dxos/keys';
|
|
15
20
|
|
|
16
|
-
import
|
|
17
|
-
import
|
|
18
|
-
import
|
|
21
|
+
import * as Database from '../../Database';
|
|
22
|
+
import type * as Type from '../../Type';
|
|
23
|
+
import { ReferenceAnnotationId, getSchemaURI, getTypeAnnotation, getTypeIdentifierAnnotation } from '../Annotation';
|
|
24
|
+
import { type AnyEntity, type AnyProperties, type UnknownTypeSchema, getStaticTypeSchema } from '../common/types';
|
|
25
|
+
import { type JsonSchemaType } from '../JsonSchema';
|
|
19
26
|
|
|
20
27
|
/**
|
|
21
28
|
* The `$id` and `$ref` fields for an ECHO reference schema.
|
|
22
29
|
*/
|
|
23
30
|
export const JSON_SCHEMA_ECHO_REF_ID = '/schemas/echo/ref';
|
|
24
31
|
|
|
25
|
-
// TODO(burdon): Define return type.
|
|
26
32
|
export const getSchemaReference = (property: JsonSchemaType): { typename: string } | undefined => {
|
|
27
33
|
const { $id, reference: { schema: { $ref } = {} } = {} } = property;
|
|
28
34
|
if ($id === JSON_SCHEMA_ECHO_REF_ID && $ref) {
|
|
29
|
-
|
|
35
|
+
const parsed = DXN.tryMake($ref);
|
|
36
|
+
const typename = parsed ? DXN.getName(parsed) : undefined;
|
|
37
|
+
return typename ? { typename } : undefined;
|
|
30
38
|
}
|
|
31
39
|
};
|
|
32
40
|
|
|
33
|
-
export const createSchemaReference = (typename: string): JsonSchemaType => {
|
|
41
|
+
export const createSchemaReference = (typename: string): Types.DeepMutable<JsonSchemaType> => {
|
|
34
42
|
return {
|
|
35
43
|
$id: JSON_SCHEMA_ECHO_REF_ID,
|
|
36
44
|
reference: {
|
|
37
45
|
schema: {
|
|
38
|
-
$ref: DXN.
|
|
46
|
+
$ref: DXN.make(typename),
|
|
39
47
|
},
|
|
40
48
|
},
|
|
41
49
|
};
|
|
@@ -71,16 +79,38 @@ export const RefTypeId: unique symbol = Symbol('@dxos/echo/internal/Ref');
|
|
|
71
79
|
/**
|
|
72
80
|
* Reference Schema.
|
|
73
81
|
*/
|
|
74
|
-
export interface
|
|
82
|
+
export interface RefSchema<T extends AnyEntity> extends Schema.SchemaClass<Ref<T>, EncodedReference> {}
|
|
75
83
|
|
|
76
|
-
|
|
84
|
+
/**
|
|
85
|
+
* Type of the `Ref` function and extra methods attached to it.
|
|
86
|
+
*/
|
|
77
87
|
export interface RefFn {
|
|
78
|
-
|
|
88
|
+
// A reference target is a `Type.AnyEntity` entity (the canonical Option B
|
|
89
|
+
// input) or one of the well-known "any object" / "any relation" branded
|
|
90
|
+
// schemas (`Obj.Unknown` / `Relation.Unknown`). Arbitrary raw schemas are
|
|
91
|
+
// rejected.
|
|
92
|
+
//
|
|
93
|
+
// Referencing a type-kind entity (a meta-schema, e.g. `Type.Type`) yields a
|
|
94
|
+
// reference to a stored schema record; its loaded target is any registered
|
|
95
|
+
// entity (`Type.AnyEntity`), since a stored object/relation schema is itself a
|
|
96
|
+
// `Type.Type` record. Referencing an object/relation type yields a reference
|
|
97
|
+
// to an instance of that type.
|
|
98
|
+
<S extends Type.AnyEntity | UnknownTypeSchema<any, any> = Type.AnyEntity>(
|
|
99
|
+
schema: S,
|
|
100
|
+
): RefSchema<
|
|
101
|
+
S extends Type.AnyType
|
|
102
|
+
? Type.AnyEntity
|
|
103
|
+
: S extends Type.AnyObj | Type.AnyRelation
|
|
104
|
+
? Type.InstanceType<S>
|
|
105
|
+
: S extends UnknownTypeSchema<infer A, any>
|
|
106
|
+
? A
|
|
107
|
+
: never
|
|
108
|
+
>;
|
|
79
109
|
|
|
80
110
|
/**
|
|
81
111
|
* @returns True if the object is a reference.
|
|
82
112
|
*/
|
|
83
|
-
isRef: (obj:
|
|
113
|
+
isRef: (obj: unknown) => obj is Ref<any>;
|
|
84
114
|
|
|
85
115
|
/**
|
|
86
116
|
* @returns True if the reference points to the given object id.
|
|
@@ -90,7 +120,7 @@ export interface RefFn {
|
|
|
90
120
|
/**
|
|
91
121
|
* @returns True if the schema is a reference schema.
|
|
92
122
|
*/
|
|
93
|
-
isRefSchema: (schema: Schema.Schema<any, any>) => schema is
|
|
123
|
+
isRefSchema: (schema: Schema.Schema<any, any>) => schema is RefSchema<any>;
|
|
94
124
|
|
|
95
125
|
/**
|
|
96
126
|
* @returns True if the schema AST is a reference schema.
|
|
@@ -100,49 +130,51 @@ export interface RefFn {
|
|
|
100
130
|
/**
|
|
101
131
|
* Constructs a reference that points to the given object.
|
|
102
132
|
*/
|
|
103
|
-
// TODO(burdon):
|
|
104
|
-
make: <T extends
|
|
133
|
+
// TODO(burdon): Narrow to Obj.Unknown?
|
|
134
|
+
make: <T extends AnyEntity>(object: T) => Ref<T>;
|
|
105
135
|
|
|
106
136
|
/**
|
|
107
|
-
* Constructs a reference that points to the object specified by the provided
|
|
137
|
+
* Constructs a reference that points to the object specified by the provided URI
|
|
138
|
+
* (either an `echo:` EchoURI for an object reference or a `dxn:` DXN for a type reference).
|
|
108
139
|
*/
|
|
109
|
-
|
|
140
|
+
fromURI: (uri: URI.URI) => Ref<any>;
|
|
110
141
|
}
|
|
142
|
+
|
|
111
143
|
/**
|
|
112
144
|
* Schema builder for references.
|
|
113
145
|
*/
|
|
114
|
-
export const Ref: RefFn =
|
|
146
|
+
export const Ref: RefFn = (input: any): RefSchema<any> => {
|
|
147
|
+
// `Type.Type` entities carry their source schema on the hidden slot; the
|
|
148
|
+
// branded `Obj.Unknown` / `Relation.Unknown` schemas are used directly.
|
|
149
|
+
const schema = getStaticTypeSchema(input) ?? input;
|
|
115
150
|
assertArgument(Schema.isSchema(schema), 'schema', 'Must call with an instance of effect-schema');
|
|
116
|
-
|
|
117
151
|
const annotation = getTypeAnnotation(schema);
|
|
118
152
|
if (annotation == null) {
|
|
119
153
|
throw new Error('Reference target must be an ECHO schema.');
|
|
120
154
|
}
|
|
121
155
|
|
|
122
|
-
return createEchoReferenceSchema(
|
|
123
|
-
getTypeIdentifierAnnotation(schema),
|
|
124
|
-
annotation.typename,
|
|
125
|
-
annotation.version,
|
|
126
|
-
getSchemaExpectedName(schema.ast),
|
|
127
|
-
);
|
|
156
|
+
return createEchoReferenceSchema(getTypeIdentifierAnnotation(schema), annotation.typename, annotation.version);
|
|
128
157
|
};
|
|
129
158
|
|
|
130
159
|
/**
|
|
131
160
|
* Represents materialized reference to a target.
|
|
132
161
|
* This is the data type for the fields marked as ref.
|
|
133
162
|
*/
|
|
134
|
-
export interface Ref<T> {
|
|
163
|
+
export interface Ref<T> extends Pipeable.Pipeable {
|
|
135
164
|
/**
|
|
136
|
-
* Target object DXN.
|
|
165
|
+
* Target URI (either an `echo:` EchoURI for an object reference or a `dxn:` DXN for a type reference).
|
|
137
166
|
*/
|
|
138
|
-
get
|
|
167
|
+
get uri(): URI.URI;
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Returns true if the reference has a target available (inlined or resolver set).
|
|
171
|
+
*/
|
|
172
|
+
get isAvailable(): boolean;
|
|
139
173
|
|
|
140
174
|
/**
|
|
141
175
|
* @returns The reference target.
|
|
142
176
|
* May return `undefined` if the object is not loaded in the working set.
|
|
143
177
|
* 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
178
|
*/
|
|
147
179
|
get target(): T | undefined;
|
|
148
180
|
|
|
@@ -156,8 +188,19 @@ export interface Ref<T> {
|
|
|
156
188
|
/**
|
|
157
189
|
* @returns Promise that will resolves with the target object or undefined if the object is not loaded locally.
|
|
158
190
|
*/
|
|
191
|
+
|
|
159
192
|
tryLoad(): Promise<T | undefined>;
|
|
160
193
|
|
|
194
|
+
/**
|
|
195
|
+
* Subscribe to the ref's resolution event.
|
|
196
|
+
* The callback fires when the target object becomes available in the working set
|
|
197
|
+
* (e.g. when its document is loaded after sibling-client mutation).
|
|
198
|
+
* Note: the resolver only schedules a notification when the target is requested
|
|
199
|
+
* via {@link target} while it is not yet loaded.
|
|
200
|
+
* @returns Function that unsubscribes the callback.
|
|
201
|
+
*/
|
|
202
|
+
onResolved(callback: () => void): () => void;
|
|
203
|
+
|
|
161
204
|
/**
|
|
162
205
|
* Do not inline the target object in the reference.
|
|
163
206
|
* Makes .target unavailable unless the reference is connected to a database context.
|
|
@@ -199,9 +242,12 @@ Ref.isRef = (obj: any): obj is Ref<any> => {
|
|
|
199
242
|
return obj && typeof obj === 'object' && RefTypeId in obj;
|
|
200
243
|
};
|
|
201
244
|
|
|
202
|
-
Ref.hasObjectId = (id: ObjectId) => (ref: Ref<any>) =>
|
|
245
|
+
Ref.hasObjectId = (id: ObjectId) => (ref: Ref<any>) => {
|
|
246
|
+
const uri = EchoURI.tryParse(ref.uri);
|
|
247
|
+
return uri !== undefined && EchoURI.isLocal(uri) && EchoURI.getObjectId(uri) === id;
|
|
248
|
+
};
|
|
203
249
|
|
|
204
|
-
Ref.isRefSchema = (schema: Schema.Schema<any, any>): schema is
|
|
250
|
+
Ref.isRefSchema = (schema: Schema.Schema<any, any>): schema is RefSchema<any> => {
|
|
205
251
|
return Ref.isRefSchemaAST(schema.ast);
|
|
206
252
|
};
|
|
207
253
|
|
|
@@ -209,21 +255,21 @@ Ref.isRefSchemaAST = (ast: SchemaAST.AST): boolean => {
|
|
|
209
255
|
return SchemaAST.getAnnotation(ast, ReferenceAnnotationId).pipe(Option.isSome);
|
|
210
256
|
};
|
|
211
257
|
|
|
212
|
-
Ref.make = <T extends
|
|
258
|
+
Ref.make = <T extends AnyProperties>(obj: T): Ref<T> => {
|
|
213
259
|
if (typeof obj !== 'object' || obj === null) {
|
|
214
260
|
throw new TypeError('Expected: ECHO object.');
|
|
215
261
|
}
|
|
216
262
|
|
|
217
|
-
// TODO(dmaretskyi): Extract to `
|
|
263
|
+
// TODO(dmaretskyi): Extract to `getObjectEchoUri` function.
|
|
218
264
|
const id = obj.id;
|
|
219
265
|
invariant(ObjectId.isValid(id), 'Invalid object ID');
|
|
220
|
-
const
|
|
221
|
-
return new RefImpl(
|
|
266
|
+
const uri = EchoURI.make({ objectId: id });
|
|
267
|
+
return new RefImpl(uri, obj);
|
|
222
268
|
};
|
|
223
269
|
|
|
224
|
-
Ref.
|
|
225
|
-
assertArgument(
|
|
226
|
-
return new RefImpl(
|
|
270
|
+
Ref.fromURI = (uri: URI.URI): Ref<any> => {
|
|
271
|
+
assertArgument(typeof uri === 'string', 'uri', 'Expected URI string');
|
|
272
|
+
return new RefImpl(uri);
|
|
227
273
|
};
|
|
228
274
|
|
|
229
275
|
/**
|
|
@@ -239,19 +285,18 @@ export type JsonSchemaReferenceInfo = {
|
|
|
239
285
|
*/
|
|
240
286
|
// TODO(burdon): Move to json schema and make private?
|
|
241
287
|
export const createEchoReferenceSchema = (
|
|
242
|
-
|
|
288
|
+
echoUri: string | undefined,
|
|
243
289
|
typename: string | undefined,
|
|
244
290
|
version: string | undefined,
|
|
245
|
-
schemaName?: string,
|
|
246
291
|
): Schema.SchemaClass<Ref<any>, EncodedReference> => {
|
|
247
|
-
if (!
|
|
248
|
-
throw new TypeError('Either
|
|
292
|
+
if (!echoUri && !typename) {
|
|
293
|
+
throw new TypeError('Either echoUri or typename must be provided.');
|
|
249
294
|
}
|
|
250
295
|
|
|
251
296
|
const referenceInfo: JsonSchemaReferenceInfo = {
|
|
252
297
|
schema: {
|
|
253
298
|
// TODO(dmaretskyi): Include version?
|
|
254
|
-
$ref:
|
|
299
|
+
$ref: echoUri ?? DXN.make(typename!),
|
|
255
300
|
},
|
|
256
301
|
schemaVersion: version,
|
|
257
302
|
};
|
|
@@ -261,25 +306,39 @@ export const createEchoReferenceSchema = (
|
|
|
261
306
|
[],
|
|
262
307
|
{
|
|
263
308
|
encode: () => {
|
|
264
|
-
return (value) =>
|
|
265
|
-
|
|
266
|
-
|
|
309
|
+
return (value) =>
|
|
310
|
+
Effect.gen(function* () {
|
|
311
|
+
if (Ref.isRef(value)) {
|
|
312
|
+
return EncodedReference.fromURI((value as Ref<any>).uri);
|
|
313
|
+
} else if (EncodedReference.isEncodedReference(value)) {
|
|
314
|
+
return value;
|
|
315
|
+
}
|
|
316
|
+
throw new Error('Invalid reference');
|
|
267
317
|
});
|
|
268
|
-
};
|
|
269
318
|
},
|
|
270
319
|
decode: () => {
|
|
271
|
-
return (value) =>
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
320
|
+
return (value) =>
|
|
321
|
+
Effect.gen(function* () {
|
|
322
|
+
const dbService = yield* Effect.serviceOption(Database.Service);
|
|
323
|
+
|
|
324
|
+
// TODO(dmaretskyi): This branch seems to be taken by Schema.is
|
|
325
|
+
if (Ref.isRef(value)) {
|
|
326
|
+
if (Option.isSome(dbService)) {
|
|
327
|
+
return dbService.value.db.makeRef(value.uri);
|
|
328
|
+
} else {
|
|
329
|
+
return value;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
if (!EncodedReference.isEncodedReference(value)) {
|
|
334
|
+
return yield* Effect.fail(new ParseResult.Unexpected(value, 'reference'));
|
|
335
|
+
}
|
|
336
|
+
if (Option.isSome(dbService)) {
|
|
337
|
+
return dbService.value.db.makeRef(EncodedReference.toURI(value));
|
|
338
|
+
} else {
|
|
339
|
+
return Ref.fromURI(EncodedReference.toURI(value));
|
|
340
|
+
}
|
|
341
|
+
});
|
|
283
342
|
},
|
|
284
343
|
},
|
|
285
344
|
{
|
|
@@ -311,25 +370,34 @@ export interface RefResolver {
|
|
|
311
370
|
/**
|
|
312
371
|
* Resolve ref synchronously from the objects in the working set.
|
|
313
372
|
*
|
|
314
|
-
* @param
|
|
373
|
+
* @param uri
|
|
315
374
|
* @param load If true the resolver should attempt to load the object from disk.
|
|
316
375
|
* @param onLoad Callback to call when the object is loaded.
|
|
317
376
|
*/
|
|
318
|
-
resolveSync(
|
|
377
|
+
resolveSync(uri: URI.URI, load: boolean, onLoad?: () => void): AnyProperties | undefined;
|
|
319
378
|
|
|
320
379
|
/**
|
|
321
380
|
* Resolver ref asynchronously.
|
|
322
381
|
*/
|
|
323
|
-
resolve(
|
|
382
|
+
resolve(uri: URI.URI): Promise<AnyProperties | undefined>;
|
|
324
383
|
|
|
325
384
|
// TODO(dmaretskyi): Combine with `resolve`.
|
|
326
|
-
resolveSchema(
|
|
385
|
+
resolveSchema(uri: URI.URI): Promise<Schema.Schema.AnyNoContext | undefined>;
|
|
386
|
+
|
|
387
|
+
/**
|
|
388
|
+
* Resolve the source `Type.AnyEntity` entity for a type URI. Used by
|
|
389
|
+
* deserialization paths (`Obj.fromJSON`) to set the back-reference accessed
|
|
390
|
+
* via `Obj.getType` / `Entity.getType`. Optional — resolvers that only
|
|
391
|
+
* carry raw schemas may leave this unimplemented; the deserializer falls
|
|
392
|
+
* back to leaving the type entity unset.
|
|
393
|
+
*/
|
|
394
|
+
resolveType?(uri: URI.URI): Promise<unknown | undefined>;
|
|
327
395
|
}
|
|
328
396
|
|
|
329
397
|
export class RefImpl<T> implements Ref<T> {
|
|
330
|
-
#
|
|
398
|
+
#uri: URI.URI;
|
|
331
399
|
#resolver?: RefResolver = undefined;
|
|
332
|
-
#
|
|
400
|
+
#resolved = new Event<void>();
|
|
333
401
|
|
|
334
402
|
/**
|
|
335
403
|
* Target is set when the reference is created from a specific object.
|
|
@@ -341,32 +409,38 @@ export class RefImpl<T> implements Ref<T> {
|
|
|
341
409
|
* Callback to issue a reactive notification when object is resolved.
|
|
342
410
|
*/
|
|
343
411
|
#resolverCallback = () => {
|
|
344
|
-
this.#
|
|
412
|
+
this.#resolved.emit();
|
|
345
413
|
};
|
|
346
414
|
|
|
347
|
-
constructor(
|
|
348
|
-
this.#
|
|
415
|
+
constructor(uri: URI.URI, target?: T) {
|
|
416
|
+
this.#uri = uri;
|
|
349
417
|
this.#target = target;
|
|
350
418
|
}
|
|
351
419
|
|
|
352
420
|
/**
|
|
353
421
|
* @inheritdoc
|
|
354
422
|
*/
|
|
355
|
-
get
|
|
356
|
-
return this.#
|
|
423
|
+
get uri(): URI.URI {
|
|
424
|
+
return this.#uri;
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
/**
|
|
428
|
+
* @inheritdoc
|
|
429
|
+
*/
|
|
430
|
+
get isAvailable(): boolean {
|
|
431
|
+
return this.#target !== undefined || this.#resolver !== undefined;
|
|
357
432
|
}
|
|
358
433
|
|
|
359
434
|
/**
|
|
360
435
|
* @inheritdoc
|
|
361
436
|
*/
|
|
362
437
|
get target(): T | undefined {
|
|
363
|
-
this.#signal.notifyRead();
|
|
364
438
|
if (this.#target) {
|
|
365
439
|
return this.#target;
|
|
366
440
|
}
|
|
367
441
|
|
|
368
442
|
invariant(this.#resolver, 'Resolver is not set');
|
|
369
|
-
return this.#resolver.resolveSync(this.#
|
|
443
|
+
return this.#resolver.resolveSync(this.#uri, true, this.#resolverCallback) as T | undefined;
|
|
370
444
|
}
|
|
371
445
|
|
|
372
446
|
/**
|
|
@@ -377,7 +451,7 @@ export class RefImpl<T> implements Ref<T> {
|
|
|
377
451
|
return this.#target;
|
|
378
452
|
}
|
|
379
453
|
invariant(this.#resolver, 'Resolver is not set');
|
|
380
|
-
const obj = await this.#resolver.resolve(this.#
|
|
454
|
+
const obj = await this.#resolver.resolve(this.#uri);
|
|
381
455
|
if (obj == null) {
|
|
382
456
|
throw new Error('Object not found');
|
|
383
457
|
}
|
|
@@ -388,8 +462,18 @@ export class RefImpl<T> implements Ref<T> {
|
|
|
388
462
|
* @inheritdoc
|
|
389
463
|
*/
|
|
390
464
|
async tryLoad(): Promise<T | undefined> {
|
|
465
|
+
if (this.#target) {
|
|
466
|
+
return this.#target;
|
|
467
|
+
}
|
|
391
468
|
invariant(this.#resolver, 'Resolver is not set');
|
|
392
|
-
return (await this.#resolver.resolve(this.#
|
|
469
|
+
return (await this.#resolver.resolve(this.#uri)) as T | undefined;
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
/**
|
|
473
|
+
* @inheritdoc
|
|
474
|
+
*/
|
|
475
|
+
onResolved(callback: () => void): () => void {
|
|
476
|
+
return this.#resolved.on(callback);
|
|
393
477
|
}
|
|
394
478
|
|
|
395
479
|
/**
|
|
@@ -398,14 +482,14 @@ export class RefImpl<T> implements Ref<T> {
|
|
|
398
482
|
* Clones the reference object.
|
|
399
483
|
*/
|
|
400
484
|
noInline(): RefImpl<T> {
|
|
401
|
-
const ref = new RefImpl<T>(this.#
|
|
485
|
+
const ref = new RefImpl<T>(this.#uri, undefined);
|
|
402
486
|
ref.#resolver = this.#resolver;
|
|
403
487
|
return ref;
|
|
404
488
|
}
|
|
405
489
|
|
|
406
490
|
encode(): EncodedReference {
|
|
407
491
|
return {
|
|
408
|
-
'/': this.#
|
|
492
|
+
'/': this.#uri,
|
|
409
493
|
...(this.#target ? { target: this.#target } : {}),
|
|
410
494
|
};
|
|
411
495
|
}
|
|
@@ -425,13 +509,33 @@ export class RefImpl<T> implements Ref<T> {
|
|
|
425
509
|
return `Ref(${this.#target.toString()})`;
|
|
426
510
|
}
|
|
427
511
|
|
|
428
|
-
return `Ref(${this.#
|
|
512
|
+
return `Ref(${this.#uri.toString()})`;
|
|
429
513
|
}
|
|
430
514
|
|
|
515
|
+
[inspectCustom]: CustomInspectFunction = (depth, options, inspect) => {
|
|
516
|
+
return this.toString();
|
|
517
|
+
};
|
|
518
|
+
|
|
431
519
|
[RefTypeId] = refVariance;
|
|
432
520
|
|
|
521
|
+
/**
|
|
522
|
+
* Effect Hash trait. Required for MutableHashMap-based caches (e.g., Atom.family)
|
|
523
|
+
* to deduplicate Ref instances that point to the same object.
|
|
524
|
+
* ECHO proxies return new RefImpl instances on every property access,
|
|
525
|
+
* so without this, each access would create a separate cache entry.
|
|
526
|
+
*/
|
|
527
|
+
[Hash.symbol](): number {
|
|
528
|
+
return Hash.hash(this.#uri.toString());
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
/** Effect Equal trait. See {@link Hash.symbol} for rationale. */
|
|
532
|
+
[Equal.symbol](that: Equal.Equal): boolean {
|
|
533
|
+
return that instanceof RefImpl && this.#uri === that.uri;
|
|
534
|
+
}
|
|
535
|
+
|
|
433
536
|
/**
|
|
434
537
|
* Internal method to set the resolver.
|
|
538
|
+
*
|
|
435
539
|
* @internal
|
|
436
540
|
*/
|
|
437
541
|
_setResolver(resolver: RefResolver): void {
|
|
@@ -439,13 +543,16 @@ export class RefImpl<T> implements Ref<T> {
|
|
|
439
543
|
}
|
|
440
544
|
|
|
441
545
|
/**
|
|
442
|
-
* Internal method to get the saved target.
|
|
443
|
-
* Not the same as `target` which is resolved from the resolver.
|
|
444
546
|
* @internal
|
|
445
547
|
*/
|
|
446
548
|
_getSavedTarget(): T | undefined {
|
|
447
549
|
return this.#target;
|
|
448
550
|
}
|
|
551
|
+
|
|
552
|
+
pipe() {
|
|
553
|
+
// eslint-disable-next-line prefer-rest-params
|
|
554
|
+
return Pipeable.pipeArguments(this, arguments);
|
|
555
|
+
}
|
|
449
556
|
}
|
|
450
557
|
|
|
451
558
|
/**
|
|
@@ -459,7 +566,7 @@ export const setRefResolver = (ref: Ref<any>, resolver: RefResolver) => {
|
|
|
459
566
|
/**
|
|
460
567
|
* Internal API for getting the saved target on a reference.
|
|
461
568
|
*/
|
|
462
|
-
export const getRefSavedTarget = (ref: Ref<any>):
|
|
569
|
+
export const getRefSavedTarget = (ref: Ref<any>): AnyProperties | undefined => {
|
|
463
570
|
invariant(ref instanceof RefImpl, 'Ref is not an instance of RefImpl');
|
|
464
571
|
return ref._getSavedTarget();
|
|
465
572
|
};
|
|
@@ -470,8 +577,8 @@ const refVariance: Ref<any>[typeof RefTypeId] = {
|
|
|
470
577
|
};
|
|
471
578
|
|
|
472
579
|
export const refFromEncodedReference = (encodedReference: EncodedReference, resolver?: RefResolver): Ref<any> => {
|
|
473
|
-
const
|
|
474
|
-
const ref = new RefImpl(
|
|
580
|
+
const uri = EncodedReference.toURI(encodedReference);
|
|
581
|
+
const ref = new RefImpl(uri);
|
|
475
582
|
|
|
476
583
|
// TODO(dmaretskyi): Handle inline target in the encoded reference.
|
|
477
584
|
|
|
@@ -482,23 +589,26 @@ export const refFromEncodedReference = (encodedReference: EncodedReference, reso
|
|
|
482
589
|
};
|
|
483
590
|
|
|
484
591
|
export class StaticRefResolver implements RefResolver {
|
|
485
|
-
public objects = new Map<ObjectId,
|
|
486
|
-
public schemas = new Map<
|
|
592
|
+
public objects = new Map<ObjectId, AnyProperties>();
|
|
593
|
+
public schemas = new Map<URI.URI, Schema.Schema.AnyNoContext>();
|
|
487
594
|
|
|
488
|
-
addObject(obj:
|
|
595
|
+
addObject(obj: AnyProperties): this {
|
|
489
596
|
this.objects.set(obj.id, obj);
|
|
490
597
|
return this;
|
|
491
598
|
}
|
|
492
599
|
|
|
493
|
-
addSchema(
|
|
494
|
-
const
|
|
495
|
-
invariant(
|
|
496
|
-
|
|
600
|
+
addSchema(input: Type.AnyEntity): this {
|
|
601
|
+
const schema = getStaticTypeSchema(input);
|
|
602
|
+
invariant(schema, 'Type entity is missing its source schema');
|
|
603
|
+
const uri = getSchemaURI(schema);
|
|
604
|
+
invariant(uri, 'Schema has no URI');
|
|
605
|
+
this.schemas.set(uri, schema);
|
|
497
606
|
return this;
|
|
498
607
|
}
|
|
499
608
|
|
|
500
|
-
resolveSync(
|
|
501
|
-
const
|
|
609
|
+
resolveSync(uri: URI.URI, _load: boolean, _onLoad?: () => void): AnyProperties | undefined {
|
|
610
|
+
const echoUri = EchoURI.tryParse(uri);
|
|
611
|
+
const id = echoUri ? EchoURI.getObjectId(echoUri) : undefined;
|
|
502
612
|
if (id == null) {
|
|
503
613
|
return undefined;
|
|
504
614
|
}
|
|
@@ -506,8 +616,9 @@ export class StaticRefResolver implements RefResolver {
|
|
|
506
616
|
return this.objects.get(id);
|
|
507
617
|
}
|
|
508
618
|
|
|
509
|
-
async resolve(
|
|
510
|
-
const
|
|
619
|
+
async resolve(uri: URI.URI): Promise<AnyProperties | undefined> {
|
|
620
|
+
const echoUri = EchoURI.tryParse(uri);
|
|
621
|
+
const id = echoUri ? EchoURI.getObjectId(echoUri) : undefined;
|
|
511
622
|
if (id == null) {
|
|
512
623
|
return undefined;
|
|
513
624
|
}
|
|
@@ -515,7 +626,7 @@ export class StaticRefResolver implements RefResolver {
|
|
|
515
626
|
return this.objects.get(id);
|
|
516
627
|
}
|
|
517
628
|
|
|
518
|
-
async resolveSchema(
|
|
519
|
-
return this.schemas.get(
|
|
629
|
+
async resolveSchema(uri: URI.URI): Promise<Schema.Schema.AnyNoContext | undefined> {
|
|
630
|
+
return this.schemas.get(uri);
|
|
520
631
|
}
|
|
521
632
|
}
|
|
@@ -5,23 +5,23 @@
|
|
|
5
5
|
import * as Schema from 'effect/Schema';
|
|
6
6
|
import { describe, test } from 'vitest';
|
|
7
7
|
|
|
8
|
-
import {
|
|
9
|
-
import { FormatAnnotation, FormatEnum } from '../formats';
|
|
10
|
-
import { toJsonSchema } from '../json';
|
|
11
|
-
import { ECHO_ANNOTATIONS_NS_KEY } from '../json-schema';
|
|
12
|
-
import { TypedObject } from '../object';
|
|
8
|
+
import { DXN } from '@dxos/keys';
|
|
13
9
|
|
|
10
|
+
import { FieldPath } from '../Annotation';
|
|
11
|
+
import { EchoObjectSchema } from '../Entity';
|
|
12
|
+
import { FormatAnnotation, TypeFormat } from '../Format';
|
|
13
|
+
import { ECHO_ANNOTATIONS_NS_KEY, toJsonSchema } from '../JsonSchema';
|
|
14
14
|
import { composeSchema } from './compose';
|
|
15
15
|
|
|
16
16
|
describe('schema composition', () => {
|
|
17
17
|
test('schema composition', ({ expect }) => {
|
|
18
|
-
|
|
18
|
+
const BaseType = Schema.Struct({
|
|
19
19
|
name: Schema.String,
|
|
20
20
|
email: Schema.String,
|
|
21
|
-
})
|
|
21
|
+
}).pipe(EchoObjectSchema(DXN.make('com.example.person', '0.1.0')));
|
|
22
22
|
|
|
23
23
|
const OverlaySchema = Schema.Struct({
|
|
24
|
-
email: Schema.String.pipe(FieldPath('$.email'), FormatAnnotation.set(
|
|
24
|
+
email: Schema.String.pipe(FieldPath('$.email'), FormatAnnotation.set(TypeFormat.Email)),
|
|
25
25
|
});
|
|
26
26
|
|
|
27
27
|
const baseSchema = toJsonSchema(BaseType);
|
|
@@ -30,7 +30,7 @@ describe('schema composition', () => {
|
|
|
30
30
|
expect(composedSchema.properties).to.deep.eq({
|
|
31
31
|
email: {
|
|
32
32
|
type: 'string',
|
|
33
|
-
format:
|
|
33
|
+
format: TypeFormat.Email,
|
|
34
34
|
// TODO(dmaretskyi): Should use the new field.
|
|
35
35
|
[ECHO_ANNOTATIONS_NS_KEY]: {
|
|
36
36
|
meta: {
|
|
@@ -2,18 +2,22 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
+
import type * as Types from 'effect/Types';
|
|
6
|
+
|
|
5
7
|
import { invariant } from '@dxos/invariant';
|
|
6
8
|
|
|
7
|
-
import { type JsonSchemaType } from '../
|
|
8
|
-
import { getSnapshot } from '../schema';
|
|
9
|
+
import { type JsonSchemaType } from '../JsonSchema';
|
|
9
10
|
|
|
10
11
|
/**
|
|
11
12
|
* Creates a composite schema from the source and projection schemas.
|
|
12
13
|
*/
|
|
13
14
|
// TODO(burdon): Use effect schema projections.
|
|
14
15
|
// TODO(burdon): Can avoid having to call this every time we modify any property on the view?
|
|
15
|
-
export const composeSchema = (
|
|
16
|
-
|
|
16
|
+
export const composeSchema = (
|
|
17
|
+
source: Types.Mutable<JsonSchemaType>,
|
|
18
|
+
target: Types.Mutable<JsonSchemaType>,
|
|
19
|
+
): Types.Mutable<JsonSchemaType> => {
|
|
20
|
+
const result = structuredClone(target);
|
|
17
21
|
invariant('type' in result && result.type === 'object', 'source schema must be an object');
|
|
18
22
|
invariant('type' in source && source.type === 'object', 'target schema must be an object');
|
|
19
23
|
|
|
@@ -21,12 +25,13 @@ export const composeSchema = (source: JsonSchemaType, target: JsonSchemaType): J
|
|
|
21
25
|
const propSchema = source.properties![prop]; // TODO(dmaretskyi): Find by json-path instead.
|
|
22
26
|
const annotations = (propSchema as JsonSchemaType)?.annotations?.meta;
|
|
23
27
|
if (annotations) {
|
|
24
|
-
|
|
25
|
-
|
|
28
|
+
const resultProp = result.properties[prop] as Record<string, any>;
|
|
29
|
+
resultProp.annotations ??= {};
|
|
30
|
+
resultProp.annotations.meta ??= {};
|
|
26
31
|
for (const key in annotations) {
|
|
27
|
-
|
|
28
|
-
Object.assign(
|
|
29
|
-
...
|
|
32
|
+
resultProp.annotations.meta[key] ??= {};
|
|
33
|
+
Object.assign(resultProp.annotations.meta[key], annotations[key], {
|
|
34
|
+
...resultProp.annotations.meta[key],
|
|
30
35
|
});
|
|
31
36
|
}
|
|
32
37
|
}
|