@dxos/echo 0.8.4-main.ead640a → 0.8.4-main.f466a3d56e
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 +6 -7
- package/dist/lib/neutral/Annotation.mjs +39 -0
- package/dist/lib/neutral/Database.mjs +49 -0
- package/dist/lib/neutral/Entity.mjs +61 -0
- package/dist/lib/neutral/Err.mjs +12 -0
- package/dist/lib/neutral/Extension.mjs +18 -0
- package/dist/lib/neutral/Feed.mjs +52 -0
- package/dist/lib/neutral/Filter.mjs +74 -0
- package/dist/lib/neutral/Filter.mjs.map +7 -0
- package/dist/lib/neutral/Format.mjs +66 -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 +12 -0
- package/dist/lib/neutral/Key.mjs.map +7 -0
- package/dist/lib/neutral/Migration.mjs +17 -0
- package/dist/lib/neutral/Migration.mjs.map +7 -0
- package/dist/lib/neutral/Obj.mjs +113 -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 +94 -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 +37 -0
- package/dist/lib/neutral/Type.mjs.map +7 -0
- package/dist/lib/neutral/chunk-44HT3MEC.mjs +73 -0
- package/dist/lib/neutral/chunk-44HT3MEC.mjs.map +7 -0
- package/dist/lib/neutral/chunk-5SL5LDLD.mjs +47 -0
- package/dist/lib/neutral/chunk-5SL5LDLD.mjs.map +7 -0
- package/dist/lib/neutral/chunk-7RVZT53K.mjs +21 -0
- package/dist/lib/neutral/chunk-7RVZT53K.mjs.map +7 -0
- package/dist/lib/neutral/chunk-APHSOTIX.mjs +34 -0
- package/dist/lib/neutral/chunk-APHSOTIX.mjs.map +7 -0
- package/dist/lib/neutral/chunk-APJKDGFL.mjs +365 -0
- package/dist/lib/neutral/chunk-APJKDGFL.mjs.map +7 -0
- package/dist/lib/neutral/chunk-BICZKPQG.mjs +7 -0
- package/dist/lib/neutral/chunk-BICZKPQG.mjs.map +7 -0
- package/dist/lib/neutral/chunk-BMB7IHGB.mjs +346 -0
- package/dist/lib/neutral/chunk-BMB7IHGB.mjs.map +7 -0
- package/dist/lib/neutral/chunk-FIWO2FZK.mjs +36 -0
- package/dist/lib/neutral/chunk-FIWO2FZK.mjs.map +7 -0
- package/dist/lib/neutral/chunk-G54OX4IX.mjs +2452 -0
- package/dist/lib/neutral/chunk-G54OX4IX.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-I2DARWPX.mjs +128 -0
- package/dist/lib/neutral/chunk-I2DARWPX.mjs.map +7 -0
- package/dist/lib/neutral/chunk-J54QMAKF.mjs +421 -0
- package/dist/lib/neutral/chunk-J54QMAKF.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-MGSQGHOD.mjs +206 -0
- package/dist/lib/neutral/chunk-MGSQGHOD.mjs.map +7 -0
- package/dist/lib/neutral/chunk-MLS7U7AT.mjs +734 -0
- package/dist/lib/neutral/chunk-MLS7U7AT.mjs.map +7 -0
- package/dist/lib/neutral/chunk-N4B7FHQT.mjs +67 -0
- package/dist/lib/neutral/chunk-N4B7FHQT.mjs.map +7 -0
- package/dist/lib/neutral/chunk-N7VOEPSV.mjs +48 -0
- package/dist/lib/neutral/chunk-N7VOEPSV.mjs.map +7 -0
- package/dist/lib/neutral/chunk-PSZBLH53.mjs +81 -0
- package/dist/lib/neutral/chunk-PSZBLH53.mjs.map +7 -0
- package/dist/lib/neutral/chunk-PT37DG2F.mjs +270 -0
- package/dist/lib/neutral/chunk-PT37DG2F.mjs.map +7 -0
- package/dist/lib/neutral/chunk-Q2KKKJSV.mjs +56 -0
- package/dist/lib/neutral/chunk-Q2KKKJSV.mjs.map +7 -0
- package/dist/lib/neutral/chunk-Q7ZL2P5H.mjs +320 -0
- package/dist/lib/neutral/chunk-Q7ZL2P5H.mjs.map +7 -0
- package/dist/lib/neutral/chunk-QRZ2I3ZM.mjs +27 -0
- package/dist/lib/neutral/chunk-QRZ2I3ZM.mjs.map +7 -0
- package/dist/lib/neutral/chunk-SCPFDS2E.mjs +125 -0
- package/dist/lib/neutral/chunk-SCPFDS2E.mjs.map +7 -0
- package/dist/lib/neutral/chunk-TNBK56IN.mjs +350 -0
- package/dist/lib/neutral/chunk-TNBK56IN.mjs.map +7 -0
- package/dist/lib/neutral/chunk-TRPZU2HV.mjs +402 -0
- package/dist/lib/neutral/chunk-TRPZU2HV.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-V72DY6LU.mjs +7 -0
- package/dist/lib/neutral/chunk-V72DY6LU.mjs.map +7 -0
- package/dist/lib/neutral/chunk-ZFACXBY6.mjs +136 -0
- package/dist/lib/neutral/chunk-ZFACXBY6.mjs.map +7 -0
- package/dist/lib/neutral/chunk-ZISMEVKD.mjs +51 -0
- package/dist/lib/neutral/chunk-ZISMEVKD.mjs.map +7 -0
- package/dist/lib/neutral/index.mjs +107 -0
- package/dist/lib/neutral/index.mjs.map +7 -0
- package/dist/lib/{node-esm → neutral}/internal/index.mjs +292 -148
- 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 +429 -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 +16 -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 +19 -0
- package/dist/types/src/Dataset.d.ts.map +1 -0
- package/dist/types/src/Entity.d.ts +174 -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 +206 -0
- package/dist/types/src/Feed.d.ts.map +1 -0
- package/dist/types/src/Filter.d.ts +170 -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 +1 -0
- package/dist/types/src/Key.d.ts.map +1 -1
- package/dist/types/src/Migration.d.ts +69 -0
- package/dist/types/src/Migration.d.ts.map +1 -0
- package/dist/types/src/Obj.d.ts +434 -102
- 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 +213 -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 +62 -11
- package/dist/types/src/Ref.d.ts.map +1 -1
- package/dist/types/src/Relation.d.ts +287 -21
- 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 +84 -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 +123 -99
- 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 +68 -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 +240 -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 +39 -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 +20 -0
- package/dist/types/src/internal/Entity/entity.d.ts.map +1 -0
- package/dist/types/src/internal/Entity/index.d.ts +8 -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 +35 -0
- package/dist/types/src/internal/Entity/relation.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 +4 -2
- 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/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 +5 -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} +10 -11
- 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/{object → Obj}/ids.d.ts +1 -1
- package/dist/types/src/internal/Obj/ids.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.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 +57 -19
- 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/{schema → Type}/echo-schema.d.ts +27 -14
- package/dist/types/src/internal/Type/echo-schema.d.ts.map +1 -0
- package/dist/types/src/internal/Type/index.d.ts +4 -0
- package/dist/types/src/internal/Type/index.d.ts.map +1 -0
- package/dist/types/src/internal/Type/manipulation.d.ts.map +1 -0
- package/dist/types/src/internal/Type/persistent-schema.d.ts +20 -0
- package/dist/types/src/internal/Type/persistent-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 +14 -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/{proxy → common/proxy}/typed-handler.d.ts +16 -12
- 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 +37 -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 +54 -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 +21 -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 +304 -0
- package/dist/types/src/testing/test-schema.d.ts.map +1 -0
- package/dist/types/src/testing/util.d.ts +21 -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 +37 -0
- package/src/Database.ts +352 -0
- package/src/Dataset.ts +26 -0
- package/src/Entity.test.ts +22 -0
- package/src/Entity.ts +243 -0
- package/src/Err.ts +40 -0
- package/src/Extension.test.ts +235 -0
- package/src/Extension.ts +122 -0
- package/src/Feed.ts +335 -0
- package/src/Filter.test.ts +90 -0
- package/src/Filter.ts +485 -0
- package/src/Format.ts +9 -0
- package/src/Hypergraph.ts +79 -0
- package/src/Json.test.ts +175 -0
- package/src/Json.ts +102 -0
- package/src/JsonSchema.ts +26 -0
- package/src/Key.ts +3 -0
- package/src/Migration.ts +106 -0
- package/src/Obj.test.ts +539 -0
- package/src/Obj.ts +702 -262
- package/src/Order.ts +46 -0
- package/src/Query.test.ts +822 -0
- package/src/Query.ts +572 -0
- package/src/QueryResult.ts +106 -0
- package/src/Ref.ts +81 -9
- package/src/Relation.test.ts +88 -0
- package/src/Relation.ts +449 -60
- package/src/SchemaRegistry.ts +106 -0
- package/src/{query/tag.ts → Tag.ts} +13 -9
- package/src/Type.test.ts +52 -0
- package/src/Type.ts +167 -153
- package/src/View.ts +107 -0
- package/src/exemplars.test.ts +21 -0
- package/src/hierarchy.test.ts +33 -0
- package/src/index.ts +24 -6
- package/src/internal/Annotation/annotations.test.ts +145 -0
- package/src/internal/Annotation/annotations.ts +590 -0
- package/src/internal/Annotation/index.ts +7 -0
- package/src/internal/Annotation/sorting.ts +51 -0
- package/src/internal/Annotation/util.ts +85 -0
- package/src/internal/Entity/api.ts +30 -0
- package/src/internal/Entity/entity.ts +128 -0
- package/src/internal/Entity/index.ts +11 -0
- package/src/internal/Entity/model.ts +111 -0
- package/src/internal/Entity/object.ts +57 -0
- package/src/internal/Entity/relation.ts +154 -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 -5
- package/src/internal/{formats → Format}/format.test.ts +6 -7
- package/src/internal/{formats → Format}/format.ts +8 -6
- 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 +98 -95
- package/src/internal/{json → JsonSchema}/json-schema.ts +29 -15
- package/src/internal/Obj/clone.ts +48 -0
- package/src/internal/{object → Obj}/common.ts +3 -4
- package/src/internal/{object/create.test.ts → Obj/create-object.test.ts} +32 -36
- package/src/internal/{object/create.ts → Obj/create-object.ts} +35 -37
- package/src/internal/Obj/deleted.ts +19 -0
- package/src/internal/{object → Obj}/ids.ts +2 -2
- package/src/internal/Obj/index.ts +14 -0
- package/src/internal/{object → Obj}/inspect.ts +5 -7
- package/src/internal/Obj/json-serializer.test.ts +120 -0
- package/src/internal/Obj/json-serializer.ts +222 -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 +281 -0
- package/src/internal/Obj/set-value.ts +165 -0
- package/src/internal/Obj/snapshot.ts +105 -0
- package/src/internal/{object → Obj}/typed-object.test.ts +12 -12
- 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 +11 -11
- package/src/internal/{ref → Ref}/ref.ts +125 -57
- package/src/internal/{projection → Type}/compose.test.ts +8 -10
- package/src/internal/{projection → Type}/compose.ts +14 -9
- package/src/internal/{schema → Type}/echo-schema.ts +74 -34
- package/src/internal/Type/index.ts +7 -0
- package/src/internal/{schema → Type}/manipulation.ts +1 -1
- package/src/internal/Type/persistent-schema.ts +33 -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 +90 -0
- package/src/internal/common/proxy/make-object.ts +105 -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/{proxy → common/proxy}/schema.test.ts +31 -22
- package/src/internal/common/proxy/symbols.ts +7 -0
- package/src/internal/common/proxy/typed-handler.test.ts +313 -0
- package/src/internal/common/proxy/typed-handler.ts +447 -0
- package/src/internal/common/proxy/typed-object.test.ts +115 -0
- package/src/internal/common/types/base.ts +43 -0
- package/src/internal/common/types/entity.ts +54 -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 +69 -0
- package/src/internal/common/types/typename.ts +55 -0
- package/src/internal/common/types/version.ts +19 -0
- package/src/internal/index.ts +12 -17
- package/src/testing/api.test.ts +125 -0
- package/src/testing/index.ts +3 -3
- package/src/testing/test-data.ts +189 -0
- package/src/testing/test-schema.ts +240 -0
- package/src/testing/util.ts +85 -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/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.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.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.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/deleted.ts +0 -19
- package/src/internal/object/entity.ts +0 -248
- package/src/internal/object/expando.ts +0 -21
- 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.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/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/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}/index.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/{schema → Type}/manipulation.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/{formats → Format}/index.ts +0 -0
- /package/src/internal/{json → JsonSchema}/effect-schema.test.ts +0 -0
- /package/src/internal/{ref → Ref}/index.ts +0 -0
|
@@ -3,26 +3,31 @@
|
|
|
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
19
|
import { DXN, ObjectId } from '@dxos/keys';
|
|
15
20
|
|
|
16
|
-
import
|
|
17
|
-
import {
|
|
18
|
-
import type {
|
|
21
|
+
import * as Database from '../../Database';
|
|
22
|
+
import { ReferenceAnnotationId, getSchemaDXN, getTypeAnnotation, getTypeIdentifierAnnotation } from '../Annotation';
|
|
23
|
+
import type { AnyEntity, AnyProperties } from '../common/types';
|
|
24
|
+
import { type JsonSchemaType } from '../JsonSchema';
|
|
19
25
|
|
|
20
26
|
/**
|
|
21
27
|
* The `$id` and `$ref` fields for an ECHO reference schema.
|
|
22
28
|
*/
|
|
23
29
|
export const JSON_SCHEMA_ECHO_REF_ID = '/schemas/echo/ref';
|
|
24
30
|
|
|
25
|
-
// TODO(burdon): Define return type.
|
|
26
31
|
export const getSchemaReference = (property: JsonSchemaType): { typename: string } | undefined => {
|
|
27
32
|
const { $id, reference: { schema: { $ref } = {} } = {} } = property;
|
|
28
33
|
if ($id === JSON_SCHEMA_ECHO_REF_ID && $ref) {
|
|
@@ -30,7 +35,7 @@ export const getSchemaReference = (property: JsonSchemaType): { typename: string
|
|
|
30
35
|
}
|
|
31
36
|
};
|
|
32
37
|
|
|
33
|
-
export const createSchemaReference = (typename: string): JsonSchemaType => {
|
|
38
|
+
export const createSchemaReference = (typename: string): Types.DeepMutable<JsonSchemaType> => {
|
|
34
39
|
return {
|
|
35
40
|
$id: JSON_SCHEMA_ECHO_REF_ID,
|
|
36
41
|
reference: {
|
|
@@ -71,16 +76,18 @@ export const RefTypeId: unique symbol = Symbol('@dxos/echo/internal/Ref');
|
|
|
71
76
|
/**
|
|
72
77
|
* Reference Schema.
|
|
73
78
|
*/
|
|
74
|
-
export interface
|
|
79
|
+
export interface RefSchema<T extends AnyEntity> extends Schema.SchemaClass<Ref<T>, EncodedReference> {}
|
|
75
80
|
|
|
76
|
-
|
|
81
|
+
/**
|
|
82
|
+
* Type of the `Ref` function and extra methods attached to it.
|
|
83
|
+
*/
|
|
77
84
|
export interface RefFn {
|
|
78
|
-
<S extends Schema.Schema.Any>(schema: S):
|
|
85
|
+
<S extends Schema.Schema.Any>(schema: S): RefSchema<Schema.Schema.Type<S>>;
|
|
79
86
|
|
|
80
87
|
/**
|
|
81
88
|
* @returns True if the object is a reference.
|
|
82
89
|
*/
|
|
83
|
-
isRef: (obj:
|
|
90
|
+
isRef: (obj: unknown) => obj is Ref<any>;
|
|
84
91
|
|
|
85
92
|
/**
|
|
86
93
|
* @returns True if the reference points to the given object id.
|
|
@@ -90,7 +97,7 @@ export interface RefFn {
|
|
|
90
97
|
/**
|
|
91
98
|
* @returns True if the schema is a reference schema.
|
|
92
99
|
*/
|
|
93
|
-
isRefSchema: (schema: Schema.Schema<any, any>) => schema is
|
|
100
|
+
isRefSchema: (schema: Schema.Schema<any, any>) => schema is RefSchema<any>;
|
|
94
101
|
|
|
95
102
|
/**
|
|
96
103
|
* @returns True if the schema AST is a reference schema.
|
|
@@ -100,49 +107,47 @@ export interface RefFn {
|
|
|
100
107
|
/**
|
|
101
108
|
* Constructs a reference that points to the given object.
|
|
102
109
|
*/
|
|
103
|
-
// TODO(burdon):
|
|
104
|
-
make: <T extends
|
|
110
|
+
// TODO(burdon): Narrow to Obj.Unknown?
|
|
111
|
+
make: <T extends AnyEntity>(object: T) => Ref<T>;
|
|
105
112
|
|
|
106
113
|
/**
|
|
107
114
|
* Constructs a reference that points to the object specified by the provided DXN.
|
|
108
115
|
*/
|
|
109
116
|
fromDXN: (dxn: DXN) => Ref<any>;
|
|
110
117
|
}
|
|
118
|
+
|
|
111
119
|
/**
|
|
112
120
|
* Schema builder for references.
|
|
113
121
|
*/
|
|
114
|
-
export const Ref: RefFn = <S extends Schema.Schema.Any>(schema: S):
|
|
122
|
+
export const Ref: RefFn = <S extends Schema.Schema.Any>(schema: S): RefSchema<Schema.Schema.Type<S>> => {
|
|
115
123
|
assertArgument(Schema.isSchema(schema), 'schema', 'Must call with an instance of effect-schema');
|
|
116
|
-
|
|
117
124
|
const annotation = getTypeAnnotation(schema);
|
|
118
125
|
if (annotation == null) {
|
|
119
126
|
throw new Error('Reference target must be an ECHO schema.');
|
|
120
127
|
}
|
|
121
128
|
|
|
122
|
-
return createEchoReferenceSchema(
|
|
123
|
-
getTypeIdentifierAnnotation(schema),
|
|
124
|
-
annotation.typename,
|
|
125
|
-
annotation.version,
|
|
126
|
-
getSchemaExpectedName(schema.ast),
|
|
127
|
-
);
|
|
129
|
+
return createEchoReferenceSchema(getTypeIdentifierAnnotation(schema), annotation.typename, annotation.version);
|
|
128
130
|
};
|
|
129
131
|
|
|
130
132
|
/**
|
|
131
133
|
* Represents materialized reference to a target.
|
|
132
134
|
* This is the data type for the fields marked as ref.
|
|
133
135
|
*/
|
|
134
|
-
export interface Ref<T> {
|
|
136
|
+
export interface Ref<T> extends Pipeable.Pipeable {
|
|
135
137
|
/**
|
|
136
138
|
* Target object DXN.
|
|
137
139
|
*/
|
|
138
140
|
get dxn(): DXN;
|
|
139
141
|
|
|
142
|
+
/**
|
|
143
|
+
* Returns true if the reference has a target available (inlined or resolver set).
|
|
144
|
+
*/
|
|
145
|
+
get isAvailable(): boolean;
|
|
146
|
+
|
|
140
147
|
/**
|
|
141
148
|
* @returns The reference target.
|
|
142
149
|
* May return `undefined` if the object is not loaded in the working set.
|
|
143
150
|
* 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
151
|
*/
|
|
147
152
|
get target(): T | undefined;
|
|
148
153
|
|
|
@@ -156,8 +161,19 @@ export interface Ref<T> {
|
|
|
156
161
|
/**
|
|
157
162
|
* @returns Promise that will resolves with the target object or undefined if the object is not loaded locally.
|
|
158
163
|
*/
|
|
164
|
+
|
|
159
165
|
tryLoad(): Promise<T | undefined>;
|
|
160
166
|
|
|
167
|
+
/**
|
|
168
|
+
* Subscribe to the ref's resolution event.
|
|
169
|
+
* The callback fires when the target object becomes available in the working set
|
|
170
|
+
* (e.g. when its document is loaded after sibling-client mutation).
|
|
171
|
+
* Note: the resolver only schedules a notification when the target is requested
|
|
172
|
+
* via {@link target} while it is not yet loaded.
|
|
173
|
+
* @returns Function that unsubscribes the callback.
|
|
174
|
+
*/
|
|
175
|
+
onResolved(callback: () => void): () => void;
|
|
176
|
+
|
|
161
177
|
/**
|
|
162
178
|
* Do not inline the target object in the reference.
|
|
163
179
|
* Makes .target unavailable unless the reference is connected to a database context.
|
|
@@ -201,7 +217,7 @@ Ref.isRef = (obj: any): obj is Ref<any> => {
|
|
|
201
217
|
|
|
202
218
|
Ref.hasObjectId = (id: ObjectId) => (ref: Ref<any>) => ref.dxn.isLocalObjectId() && ref.dxn.parts[1] === id;
|
|
203
219
|
|
|
204
|
-
Ref.isRefSchema = (schema: Schema.Schema<any, any>): schema is
|
|
220
|
+
Ref.isRefSchema = (schema: Schema.Schema<any, any>): schema is RefSchema<any> => {
|
|
205
221
|
return Ref.isRefSchemaAST(schema.ast);
|
|
206
222
|
};
|
|
207
223
|
|
|
@@ -209,7 +225,7 @@ Ref.isRefSchemaAST = (ast: SchemaAST.AST): boolean => {
|
|
|
209
225
|
return SchemaAST.getAnnotation(ast, ReferenceAnnotationId).pipe(Option.isSome);
|
|
210
226
|
};
|
|
211
227
|
|
|
212
|
-
Ref.make = <T extends
|
|
228
|
+
Ref.make = <T extends AnyProperties>(obj: T): Ref<T> => {
|
|
213
229
|
if (typeof obj !== 'object' || obj === null) {
|
|
214
230
|
throw new TypeError('Expected: ECHO object.');
|
|
215
231
|
}
|
|
@@ -217,7 +233,7 @@ Ref.make = <T extends BaseObject>(obj: T): Ref<T> => {
|
|
|
217
233
|
// TODO(dmaretskyi): Extract to `getObjectDXN` function.
|
|
218
234
|
const id = obj.id;
|
|
219
235
|
invariant(ObjectId.isValid(id), 'Invalid object ID');
|
|
220
|
-
const dxn =
|
|
236
|
+
const dxn = DXN.fromLocalObjectId(id);
|
|
221
237
|
return new RefImpl(dxn, obj);
|
|
222
238
|
};
|
|
223
239
|
|
|
@@ -242,7 +258,6 @@ export const createEchoReferenceSchema = (
|
|
|
242
258
|
echoId: string | undefined,
|
|
243
259
|
typename: string | undefined,
|
|
244
260
|
version: string | undefined,
|
|
245
|
-
schemaName?: string,
|
|
246
261
|
): Schema.SchemaClass<Ref<any>, EncodedReference> => {
|
|
247
262
|
if (!echoId && !typename) {
|
|
248
263
|
throw new TypeError('Either echoId or typename must be provided.');
|
|
@@ -261,25 +276,39 @@ export const createEchoReferenceSchema = (
|
|
|
261
276
|
[],
|
|
262
277
|
{
|
|
263
278
|
encode: () => {
|
|
264
|
-
return (value) =>
|
|
265
|
-
|
|
266
|
-
|
|
279
|
+
return (value) =>
|
|
280
|
+
Effect.gen(function* () {
|
|
281
|
+
if (Ref.isRef(value)) {
|
|
282
|
+
return EncodedReference.fromDXN((value as Ref<any>).dxn);
|
|
283
|
+
} else if (EncodedReference.isEncodedReference(value)) {
|
|
284
|
+
return value;
|
|
285
|
+
}
|
|
286
|
+
throw new Error('Invalid reference');
|
|
267
287
|
});
|
|
268
|
-
};
|
|
269
288
|
},
|
|
270
289
|
decode: () => {
|
|
271
|
-
return (value) =>
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
290
|
+
return (value) =>
|
|
291
|
+
Effect.gen(function* () {
|
|
292
|
+
const dbService = yield* Effect.serviceOption(Database.Service);
|
|
293
|
+
|
|
294
|
+
// TODO(dmaretskyi): This branch seems to be taken by Schema.is
|
|
295
|
+
if (Ref.isRef(value)) {
|
|
296
|
+
if (Option.isSome(dbService)) {
|
|
297
|
+
return dbService.value.db.makeRef(value.dxn);
|
|
298
|
+
} else {
|
|
299
|
+
return value;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
if (!EncodedReference.isEncodedReference(value)) {
|
|
304
|
+
return yield* Effect.fail(new ParseResult.Unexpected(value, 'reference'));
|
|
305
|
+
}
|
|
306
|
+
if (Option.isSome(dbService)) {
|
|
307
|
+
return dbService.value.db.makeRef(EncodedReference.toDXN(value));
|
|
308
|
+
} else {
|
|
309
|
+
return Ref.fromDXN(EncodedReference.toDXN(value));
|
|
310
|
+
}
|
|
311
|
+
});
|
|
283
312
|
},
|
|
284
313
|
},
|
|
285
314
|
{
|
|
@@ -315,12 +344,12 @@ export interface RefResolver {
|
|
|
315
344
|
* @param load If true the resolver should attempt to load the object from disk.
|
|
316
345
|
* @param onLoad Callback to call when the object is loaded.
|
|
317
346
|
*/
|
|
318
|
-
resolveSync(dxn: DXN, load: boolean, onLoad?: () => void):
|
|
347
|
+
resolveSync(dxn: DXN, load: boolean, onLoad?: () => void): AnyProperties | undefined;
|
|
319
348
|
|
|
320
349
|
/**
|
|
321
350
|
* Resolver ref asynchronously.
|
|
322
351
|
*/
|
|
323
|
-
resolve(dxn: DXN): Promise<
|
|
352
|
+
resolve(dxn: DXN): Promise<AnyProperties | undefined>;
|
|
324
353
|
|
|
325
354
|
// TODO(dmaretskyi): Combine with `resolve`.
|
|
326
355
|
resolveSchema(dxn: DXN): Promise<Schema.Schema.AnyNoContext | undefined>;
|
|
@@ -329,7 +358,7 @@ export interface RefResolver {
|
|
|
329
358
|
export class RefImpl<T> implements Ref<T> {
|
|
330
359
|
#dxn: DXN;
|
|
331
360
|
#resolver?: RefResolver = undefined;
|
|
332
|
-
#
|
|
361
|
+
#resolved = new Event<void>();
|
|
333
362
|
|
|
334
363
|
/**
|
|
335
364
|
* Target is set when the reference is created from a specific object.
|
|
@@ -341,7 +370,7 @@ export class RefImpl<T> implements Ref<T> {
|
|
|
341
370
|
* Callback to issue a reactive notification when object is resolved.
|
|
342
371
|
*/
|
|
343
372
|
#resolverCallback = () => {
|
|
344
|
-
this.#
|
|
373
|
+
this.#resolved.emit();
|
|
345
374
|
};
|
|
346
375
|
|
|
347
376
|
constructor(dxn: DXN, target?: T) {
|
|
@@ -356,11 +385,17 @@ export class RefImpl<T> implements Ref<T> {
|
|
|
356
385
|
return this.#dxn;
|
|
357
386
|
}
|
|
358
387
|
|
|
388
|
+
/**
|
|
389
|
+
* @inheritdoc
|
|
390
|
+
*/
|
|
391
|
+
get isAvailable(): boolean {
|
|
392
|
+
return this.#target !== undefined || this.#resolver !== undefined;
|
|
393
|
+
}
|
|
394
|
+
|
|
359
395
|
/**
|
|
360
396
|
* @inheritdoc
|
|
361
397
|
*/
|
|
362
398
|
get target(): T | undefined {
|
|
363
|
-
this.#signal.notifyRead();
|
|
364
399
|
if (this.#target) {
|
|
365
400
|
return this.#target;
|
|
366
401
|
}
|
|
@@ -388,10 +423,20 @@ export class RefImpl<T> implements Ref<T> {
|
|
|
388
423
|
* @inheritdoc
|
|
389
424
|
*/
|
|
390
425
|
async tryLoad(): Promise<T | undefined> {
|
|
426
|
+
if (this.#target) {
|
|
427
|
+
return this.#target;
|
|
428
|
+
}
|
|
391
429
|
invariant(this.#resolver, 'Resolver is not set');
|
|
392
430
|
return (await this.#resolver.resolve(this.#dxn)) as T | undefined;
|
|
393
431
|
}
|
|
394
432
|
|
|
433
|
+
/**
|
|
434
|
+
* @inheritdoc
|
|
435
|
+
*/
|
|
436
|
+
onResolved(callback: () => void): () => void {
|
|
437
|
+
return this.#resolved.on(callback);
|
|
438
|
+
}
|
|
439
|
+
|
|
395
440
|
/**
|
|
396
441
|
* Do not inline the target object in the reference.
|
|
397
442
|
* Makes .target unavailable unless the reference is connected to a database context.
|
|
@@ -428,10 +473,30 @@ export class RefImpl<T> implements Ref<T> {
|
|
|
428
473
|
return `Ref(${this.#dxn.toString()})`;
|
|
429
474
|
}
|
|
430
475
|
|
|
476
|
+
[inspectCustom]: CustomInspectFunction = (depth, options, inspect) => {
|
|
477
|
+
return this.toString();
|
|
478
|
+
};
|
|
479
|
+
|
|
431
480
|
[RefTypeId] = refVariance;
|
|
432
481
|
|
|
482
|
+
/**
|
|
483
|
+
* Effect Hash trait. Required for MutableHashMap-based caches (e.g., Atom.family)
|
|
484
|
+
* to deduplicate Ref instances that point to the same object.
|
|
485
|
+
* ECHO proxies return new RefImpl instances on every property access,
|
|
486
|
+
* so without this, each access would create a separate cache entry.
|
|
487
|
+
*/
|
|
488
|
+
[Hash.symbol](): number {
|
|
489
|
+
return Hash.hash(this.#dxn.toString());
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
/** Effect Equal trait. See {@link Hash.symbol} for rationale. */
|
|
493
|
+
[Equal.symbol](that: Equal.Equal): boolean {
|
|
494
|
+
return that instanceof RefImpl && this.#dxn.toString() === that.dxn.toString();
|
|
495
|
+
}
|
|
496
|
+
|
|
433
497
|
/**
|
|
434
498
|
* Internal method to set the resolver.
|
|
499
|
+
*
|
|
435
500
|
* @internal
|
|
436
501
|
*/
|
|
437
502
|
_setResolver(resolver: RefResolver): void {
|
|
@@ -439,13 +504,16 @@ export class RefImpl<T> implements Ref<T> {
|
|
|
439
504
|
}
|
|
440
505
|
|
|
441
506
|
/**
|
|
442
|
-
* Internal method to get the saved target.
|
|
443
|
-
* Not the same as `target` which is resolved from the resolver.
|
|
444
507
|
* @internal
|
|
445
508
|
*/
|
|
446
509
|
_getSavedTarget(): T | undefined {
|
|
447
510
|
return this.#target;
|
|
448
511
|
}
|
|
512
|
+
|
|
513
|
+
pipe() {
|
|
514
|
+
// eslint-disable-next-line prefer-rest-params
|
|
515
|
+
return Pipeable.pipeArguments(this, arguments);
|
|
516
|
+
}
|
|
449
517
|
}
|
|
450
518
|
|
|
451
519
|
/**
|
|
@@ -459,7 +527,7 @@ export const setRefResolver = (ref: Ref<any>, resolver: RefResolver) => {
|
|
|
459
527
|
/**
|
|
460
528
|
* Internal API for getting the saved target on a reference.
|
|
461
529
|
*/
|
|
462
|
-
export const getRefSavedTarget = (ref: Ref<any>):
|
|
530
|
+
export const getRefSavedTarget = (ref: Ref<any>): AnyProperties | undefined => {
|
|
463
531
|
invariant(ref instanceof RefImpl, 'Ref is not an instance of RefImpl');
|
|
464
532
|
return ref._getSavedTarget();
|
|
465
533
|
};
|
|
@@ -482,10 +550,10 @@ export const refFromEncodedReference = (encodedReference: EncodedReference, reso
|
|
|
482
550
|
};
|
|
483
551
|
|
|
484
552
|
export class StaticRefResolver implements RefResolver {
|
|
485
|
-
public objects = new Map<ObjectId,
|
|
553
|
+
public objects = new Map<ObjectId, AnyProperties>();
|
|
486
554
|
public schemas = new Map<DXN.String, Schema.Schema.AnyNoContext>();
|
|
487
555
|
|
|
488
|
-
addObject(obj:
|
|
556
|
+
addObject(obj: AnyProperties): this {
|
|
489
557
|
this.objects.set(obj.id, obj);
|
|
490
558
|
return this;
|
|
491
559
|
}
|
|
@@ -497,7 +565,7 @@ export class StaticRefResolver implements RefResolver {
|
|
|
497
565
|
return this;
|
|
498
566
|
}
|
|
499
567
|
|
|
500
|
-
resolveSync(dxn: DXN, _load: boolean, _onLoad?: () => void):
|
|
568
|
+
resolveSync(dxn: DXN, _load: boolean, _onLoad?: () => void): AnyProperties | undefined {
|
|
501
569
|
const id = dxn?.asEchoDXN()?.echoId;
|
|
502
570
|
if (id == null) {
|
|
503
571
|
return undefined;
|
|
@@ -506,7 +574,7 @@ export class StaticRefResolver implements RefResolver {
|
|
|
506
574
|
return this.objects.get(id);
|
|
507
575
|
}
|
|
508
576
|
|
|
509
|
-
async resolve(dxn: DXN): Promise<
|
|
577
|
+
async resolve(dxn: DXN): Promise<AnyProperties | undefined> {
|
|
510
578
|
const id = dxn?.asEchoDXN()?.echoId;
|
|
511
579
|
if (id == null) {
|
|
512
580
|
return undefined;
|
|
@@ -5,23 +5,21 @@
|
|
|
5
5
|
import * as Schema from 'effect/Schema';
|
|
6
6
|
import { describe, test } from 'vitest';
|
|
7
7
|
|
|
8
|
-
import { FieldPath } from '../
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import { ECHO_ANNOTATIONS_NS_KEY } from '../
|
|
12
|
-
import { TypedObject } from '../object';
|
|
13
|
-
|
|
8
|
+
import { FieldPath } from '../Annotation';
|
|
9
|
+
import { EchoObjectSchema } from '../Entity';
|
|
10
|
+
import { FormatAnnotation, TypeFormat } from '../Format';
|
|
11
|
+
import { ECHO_ANNOTATIONS_NS_KEY, toJsonSchema } from '../JsonSchema';
|
|
14
12
|
import { composeSchema } from './compose';
|
|
15
13
|
|
|
16
14
|
describe('schema composition', () => {
|
|
17
15
|
test('schema composition', ({ expect }) => {
|
|
18
|
-
|
|
16
|
+
const BaseType = Schema.Struct({
|
|
19
17
|
name: Schema.String,
|
|
20
18
|
email: Schema.String,
|
|
21
|
-
})
|
|
19
|
+
}).pipe(EchoObjectSchema({ typename: 'com.example.person', version: '0.1.0' }));
|
|
22
20
|
|
|
23
21
|
const OverlaySchema = Schema.Struct({
|
|
24
|
-
email: Schema.String.pipe(FieldPath('$.email'), FormatAnnotation.set(
|
|
22
|
+
email: Schema.String.pipe(FieldPath('$.email'), FormatAnnotation.set(TypeFormat.Email)),
|
|
25
23
|
});
|
|
26
24
|
|
|
27
25
|
const baseSchema = toJsonSchema(BaseType);
|
|
@@ -30,7 +28,7 @@ describe('schema composition', () => {
|
|
|
30
28
|
expect(composedSchema.properties).to.deep.eq({
|
|
31
29
|
email: {
|
|
32
30
|
type: 'string',
|
|
33
|
-
format:
|
|
31
|
+
format: TypeFormat.Email,
|
|
34
32
|
// TODO(dmaretskyi): Should use the new field.
|
|
35
33
|
[ECHO_ANNOTATIONS_NS_KEY]: {
|
|
36
34
|
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
|
}
|