@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
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2024 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
import * as Schema from 'effect/Schema';
|
|
6
|
-
|
|
7
|
-
import { EchoObject } from './entity';
|
|
8
|
-
|
|
9
|
-
export const EXPANDO_TYPENAME = 'dxos.org/type/Expando';
|
|
10
|
-
|
|
11
|
-
const ExpandoSchema = Schema.Struct({}, { key: Schema.String, value: Schema.Any }).pipe(
|
|
12
|
-
EchoObject({ typename: EXPANDO_TYPENAME, version: '0.1.0' }),
|
|
13
|
-
);
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Expando object is an object with an arbitrary set of properties.
|
|
17
|
-
*/
|
|
18
|
-
// TODO(dmaretskyi): Can we consider expando a top-type, i.e. have a ref to expando potentially be a valid ref to any object?
|
|
19
|
-
export interface Expando extends Schema.Schema.Type<typeof ExpandoSchema> {}
|
|
20
|
-
|
|
21
|
-
export const Expando: Schema.Schema<Expando> = ExpandoSchema;
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2024 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
export * from './common';
|
|
6
|
-
export * from './create';
|
|
7
|
-
export * from './entity';
|
|
8
|
-
export * from './expando';
|
|
9
|
-
export * from './ids';
|
|
10
|
-
export * from './json-serializer';
|
|
11
|
-
export * from './meta';
|
|
12
|
-
export type * from './relation';
|
|
13
|
-
export * from './typed-object';
|
|
14
|
-
export * from './typename';
|
|
15
|
-
export * from './deleted';
|
|
16
|
-
export * from './model';
|
|
17
|
-
export * from './accessors';
|
|
18
|
-
export * from './schema-validator';
|
|
19
|
-
export * from './version';
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2025 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
import { describe, expect, test } from 'vitest';
|
|
6
|
-
|
|
7
|
-
import { DXN } from '@dxos/keys';
|
|
8
|
-
|
|
9
|
-
import { EntityKind, getSchemaDXN, getSchemaTypename } from '../ast';
|
|
10
|
-
import { Ref, StaticRefResolver } from '../ref';
|
|
11
|
-
import { Testing } from '../testing';
|
|
12
|
-
|
|
13
|
-
import { getObjectDXN, getSchema } from './accessors';
|
|
14
|
-
import { create } from './create';
|
|
15
|
-
import { objectFromJSON, objectToJSON } from './json-serializer';
|
|
16
|
-
import { getMeta } from './meta';
|
|
17
|
-
import { ATTR_TYPE, EntityKindId, MetaId, RelationSourceId, RelationTargetId, TypeId } from './model';
|
|
18
|
-
import { getType, getTypename } from './typename';
|
|
19
|
-
|
|
20
|
-
describe('Object JSON serializer', () => {
|
|
21
|
-
test('should serialize and deserialize object', async () => {
|
|
22
|
-
const contact = create(Testing.Contact, {
|
|
23
|
-
name: 'John Doe',
|
|
24
|
-
});
|
|
25
|
-
getMeta(contact).keys.push({ id: '12345', source: 'crm.example.com' });
|
|
26
|
-
|
|
27
|
-
const task = create(Testing.Task, {
|
|
28
|
-
title: 'Polish my shoes',
|
|
29
|
-
assignee: Ref.make(contact),
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
const contactJson = objectToJSON(contact);
|
|
33
|
-
const taskJson = objectToJSON(task);
|
|
34
|
-
|
|
35
|
-
expect(contactJson.id).toBe(contact.id);
|
|
36
|
-
expect(contactJson[ATTR_TYPE]).toEqual(getSchemaDXN(Testing.Contact)!.toString());
|
|
37
|
-
expect(contactJson.name).toEqual('John Doe');
|
|
38
|
-
|
|
39
|
-
expect(taskJson.id).toBe(task.id);
|
|
40
|
-
expect(taskJson[ATTR_TYPE]).toEqual(getSchemaDXN(Testing.Task)!.toString());
|
|
41
|
-
expect(taskJson.title).toEqual('Polish my shoes');
|
|
42
|
-
expect(taskJson.assignee).toEqual({ '/': DXN.fromLocalObjectId(contact.id).toString() });
|
|
43
|
-
|
|
44
|
-
const refResolver = new StaticRefResolver()
|
|
45
|
-
.addSchema(Testing.Contact)
|
|
46
|
-
.addSchema(Testing.Task)
|
|
47
|
-
.addObject(contact)
|
|
48
|
-
.addObject(task);
|
|
49
|
-
|
|
50
|
-
const contactFromJson = (await objectFromJSON(contactJson, { refResolver })) as Testing.Contact;
|
|
51
|
-
const taskFromJson = (await objectFromJSON(taskJson, { refResolver })) as Testing.Task;
|
|
52
|
-
|
|
53
|
-
expect(contactFromJson.id).toBe(contact.id);
|
|
54
|
-
expect(contactFromJson.name).toBe('John Doe');
|
|
55
|
-
expect((contactFromJson as any)[TypeId]).toEqual(getSchemaDXN(Testing.Contact));
|
|
56
|
-
expect((contactFromJson as any)[EntityKindId]).toBe(EntityKind.Object);
|
|
57
|
-
expect((contactFromJson as any)[RelationSourceId]).toBeUndefined();
|
|
58
|
-
expect((contactFromJson as any)[RelationTargetId]).toBeUndefined();
|
|
59
|
-
expect((contactFromJson as any)[MetaId]).toEqual({
|
|
60
|
-
keys: [
|
|
61
|
-
{
|
|
62
|
-
id: '12345',
|
|
63
|
-
source: 'crm.example.com',
|
|
64
|
-
},
|
|
65
|
-
],
|
|
66
|
-
});
|
|
67
|
-
expect(getType(contactFromJson)?.toString()).toBe(getSchemaDXN(Testing.Contact)!.toString());
|
|
68
|
-
expect(getTypename(contactFromJson)).toBe(getSchemaTypename(Testing.Contact));
|
|
69
|
-
expect(getObjectDXN(contactFromJson)?.toString()).toEqual(getObjectDXN(contact)?.toString());
|
|
70
|
-
expect(getSchema(contactFromJson)).toEqual(Testing.Contact);
|
|
71
|
-
|
|
72
|
-
expect(taskFromJson.id).toBe(task.id);
|
|
73
|
-
expect(taskFromJson.title).toBe('Polish my shoes');
|
|
74
|
-
expect(taskFromJson.assignee!.dxn).toEqual(DXN.fromLocalObjectId(contact.id));
|
|
75
|
-
expect(taskFromJson.assignee!.target).toEqual(contact);
|
|
76
|
-
expect(await taskFromJson.assignee!.load()).toEqual(contact);
|
|
77
|
-
expect((taskFromJson as any)[TypeId]).toEqual(getSchemaDXN(Testing.Task));
|
|
78
|
-
expect((taskFromJson as any)[EntityKindId]).toBe(EntityKind.Object);
|
|
79
|
-
expect((taskFromJson as any)[RelationSourceId]).toBeUndefined();
|
|
80
|
-
expect((taskFromJson as any)[RelationTargetId]).toBeUndefined();
|
|
81
|
-
expect((taskFromJson as any)[MetaId]).toEqual({ keys: [] });
|
|
82
|
-
expect(getSchema(taskFromJson)).toEqual(Testing.Task);
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
test('serialize with unresolved schema', async () => {
|
|
86
|
-
const contact = create(Testing.Contact, {
|
|
87
|
-
name: 'John Doe',
|
|
88
|
-
});
|
|
89
|
-
const contactJson = objectToJSON(contact);
|
|
90
|
-
const contactFromJson: any = await objectFromJSON(contactJson);
|
|
91
|
-
|
|
92
|
-
expect(contactFromJson.id).toBe(contact.id);
|
|
93
|
-
expect(contactFromJson.name).toBe('John Doe');
|
|
94
|
-
expect(getSchema(contactFromJson)).toBeUndefined();
|
|
95
|
-
expect(getTypename(contactFromJson)).toEqual(getSchemaTypename(Testing.Contact));
|
|
96
|
-
expect(getObjectDXN(contactFromJson)).toEqual(getObjectDXN(contact));
|
|
97
|
-
expect(getType(contactFromJson)).toEqual(getSchemaDXN(Testing.Contact));
|
|
98
|
-
});
|
|
99
|
-
});
|
|
@@ -1,225 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2025 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
import * as Schema from 'effect/Schema';
|
|
6
|
-
|
|
7
|
-
import { raise } from '@dxos/debug';
|
|
8
|
-
import { type EncodedReference, type ObjectMeta, isEncodedReference } from '@dxos/echo-protocol';
|
|
9
|
-
import { assertArgument, invariant } from '@dxos/invariant';
|
|
10
|
-
import { DXN, ObjectId } from '@dxos/keys';
|
|
11
|
-
import { defineHiddenProperty } from '@dxos/live-object';
|
|
12
|
-
import { assumeType, deepMapValues, visitValues } from '@dxos/util';
|
|
13
|
-
|
|
14
|
-
import { EntityKind } from '../ast';
|
|
15
|
-
import { Ref, type RefResolver, refFromEncodedReference, setRefResolver } from '../ref';
|
|
16
|
-
import { type AnyEchoObject } from '../types';
|
|
17
|
-
|
|
18
|
-
import { setSchema } from './accessors';
|
|
19
|
-
import { ObjectMetaSchema } from './meta';
|
|
20
|
-
import {
|
|
21
|
-
ATTR_DELETED,
|
|
22
|
-
ATTR_META,
|
|
23
|
-
ATTR_RELATION_SOURCE,
|
|
24
|
-
ATTR_RELATION_TARGET,
|
|
25
|
-
ATTR_SELF_DXN,
|
|
26
|
-
ATTR_TYPE,
|
|
27
|
-
EntityKindId,
|
|
28
|
-
MetaId,
|
|
29
|
-
type ObjectJSON,
|
|
30
|
-
RelationSourceDXNId,
|
|
31
|
-
RelationSourceId,
|
|
32
|
-
RelationTargetDXNId,
|
|
33
|
-
RelationTargetId,
|
|
34
|
-
SelfDXNId,
|
|
35
|
-
TypeId,
|
|
36
|
-
assertObjectModelShape,
|
|
37
|
-
} from './model';
|
|
38
|
-
import { getType, setTypename } from './typename';
|
|
39
|
-
|
|
40
|
-
type DeepReplaceRef<T> =
|
|
41
|
-
T extends Ref<any> ? EncodedReference : T extends object ? { [K in keyof T]: DeepReplaceRef<T[K]> } : T;
|
|
42
|
-
|
|
43
|
-
type SerializedObject<T extends { id: string }> = { [K in keyof T]: DeepReplaceRef<T[K]> } & ObjectJSON;
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Converts object to it's JSON representation.
|
|
47
|
-
*/
|
|
48
|
-
export const objectToJSON = <T extends AnyEchoObject>(obj: T): SerializedObject<T> => {
|
|
49
|
-
const typename = getType(obj)?.toString();
|
|
50
|
-
invariant(typename && typeof typename === 'string');
|
|
51
|
-
return typedJsonSerializer.call(obj);
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Creates an object from it's json representation.
|
|
56
|
-
* Performs schema validation.
|
|
57
|
-
* References and schema will be resolvable if the `refResolver` is provided.
|
|
58
|
-
*
|
|
59
|
-
* The function need to be async to support resolving the schema as well as the relation endpoints.
|
|
60
|
-
*/
|
|
61
|
-
export const objectFromJSON = async (
|
|
62
|
-
jsonData: unknown,
|
|
63
|
-
{ refResolver, dxn }: { refResolver?: RefResolver; dxn?: DXN } = {},
|
|
64
|
-
): Promise<AnyEchoObject> => {
|
|
65
|
-
assumeType<ObjectJSON>(jsonData);
|
|
66
|
-
assertArgument(typeof jsonData === 'object' && jsonData !== null, 'jsonData', 'expect object');
|
|
67
|
-
assertArgument(typeof jsonData[ATTR_TYPE] === 'string', 'jsonData[ATTR_TYPE]', 'expected object to have a type');
|
|
68
|
-
assertArgument(typeof jsonData.id === 'string', 'jsonData.id', 'expected object to have an id');
|
|
69
|
-
|
|
70
|
-
const type = DXN.parse(jsonData[ATTR_TYPE]);
|
|
71
|
-
const schema = await refResolver?.resolveSchema(type);
|
|
72
|
-
invariant(schema === undefined || Schema.isSchema(schema));
|
|
73
|
-
|
|
74
|
-
let obj: any;
|
|
75
|
-
if (schema != null) {
|
|
76
|
-
obj = await schema.pipe(Schema.decodeUnknownPromise)(jsonData);
|
|
77
|
-
if (refResolver) {
|
|
78
|
-
setRefResolverOnData(obj, refResolver);
|
|
79
|
-
}
|
|
80
|
-
} else {
|
|
81
|
-
obj = decodeGeneric(jsonData, { refResolver });
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
invariant(ObjectId.isValid(obj.id), 'Invalid object id');
|
|
85
|
-
|
|
86
|
-
setTypename(obj, type);
|
|
87
|
-
if (schema) {
|
|
88
|
-
setSchema(obj, schema);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
const isRelation =
|
|
92
|
-
typeof jsonData[ATTR_RELATION_SOURCE] === 'string' || typeof jsonData[ATTR_RELATION_TARGET] === 'string';
|
|
93
|
-
if (isRelation) {
|
|
94
|
-
const sourceDxn: DXN = DXN.parse(jsonData[ATTR_RELATION_SOURCE] ?? raise(new TypeError('Missing relation source')));
|
|
95
|
-
const targetDxn: DXN = DXN.parse(jsonData[ATTR_RELATION_TARGET] ?? raise(new TypeError('Missing relation target')));
|
|
96
|
-
|
|
97
|
-
// TODO(dmaretskyi): Async!
|
|
98
|
-
const source = (await refResolver?.resolve(sourceDxn)) as AnyEchoObject | undefined;
|
|
99
|
-
const target = (await refResolver?.resolve(targetDxn)) as AnyEchoObject | undefined;
|
|
100
|
-
|
|
101
|
-
defineHiddenProperty(obj, EntityKindId, EntityKind.Relation);
|
|
102
|
-
defineHiddenProperty(obj, RelationSourceDXNId, sourceDxn);
|
|
103
|
-
defineHiddenProperty(obj, RelationTargetDXNId, targetDxn);
|
|
104
|
-
defineHiddenProperty(obj, RelationSourceId, source);
|
|
105
|
-
defineHiddenProperty(obj, RelationTargetId, target);
|
|
106
|
-
} else {
|
|
107
|
-
defineHiddenProperty(obj, EntityKindId, EntityKind.Object);
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
if (typeof jsonData[ATTR_META] === 'object') {
|
|
111
|
-
const meta = await ObjectMetaSchema.pipe(Schema.decodeUnknownPromise)(jsonData[ATTR_META]);
|
|
112
|
-
|
|
113
|
-
// Defensive programming.
|
|
114
|
-
invariant(Array.isArray(meta.keys));
|
|
115
|
-
|
|
116
|
-
defineHiddenProperty(obj, MetaId, meta);
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
if (dxn) {
|
|
120
|
-
defineHiddenProperty(obj, SelfDXNId, dxn);
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
assertObjectModelShape(obj);
|
|
124
|
-
invariant((obj as any)[ATTR_TYPE] === undefined, 'Invalid object model');
|
|
125
|
-
invariant((obj as any)[ATTR_SELF_DXN] === undefined, 'Invalid object model');
|
|
126
|
-
invariant((obj as any)[ATTR_DELETED] === undefined, 'Invalid object model');
|
|
127
|
-
invariant((obj as any)[ATTR_RELATION_SOURCE] === undefined, 'Invalid object model');
|
|
128
|
-
invariant((obj as any)[ATTR_RELATION_TARGET] === undefined, 'Invalid object model');
|
|
129
|
-
invariant((obj as any)[ATTR_META] === undefined, 'Invalid object model');
|
|
130
|
-
return obj;
|
|
131
|
-
};
|
|
132
|
-
|
|
133
|
-
const decodeGeneric = (jsonData: unknown, options: { refResolver?: RefResolver }) => {
|
|
134
|
-
const {
|
|
135
|
-
[ATTR_TYPE]: _type,
|
|
136
|
-
[ATTR_META]: _meta,
|
|
137
|
-
[ATTR_DELETED]: _deleted,
|
|
138
|
-
[ATTR_RELATION_SOURCE]: _relationSource,
|
|
139
|
-
[ATTR_RELATION_TARGET]: _relationTarget,
|
|
140
|
-
[ATTR_SELF_DXN]: _selfDxn,
|
|
141
|
-
...props
|
|
142
|
-
} = jsonData as any;
|
|
143
|
-
|
|
144
|
-
return deepMapValues(props, (value, recurse) => {
|
|
145
|
-
if (isEncodedReference(value)) {
|
|
146
|
-
return refFromEncodedReference(value, options.refResolver);
|
|
147
|
-
}
|
|
148
|
-
return recurse(value);
|
|
149
|
-
});
|
|
150
|
-
};
|
|
151
|
-
|
|
152
|
-
export const setRefResolverOnData = (obj: AnyEchoObject, refResolver: RefResolver) => {
|
|
153
|
-
const go = (value: unknown) => {
|
|
154
|
-
if (Ref.isRef(value)) {
|
|
155
|
-
setRefResolver(value, refResolver);
|
|
156
|
-
} else {
|
|
157
|
-
visitValues(value, go);
|
|
158
|
-
}
|
|
159
|
-
};
|
|
160
|
-
|
|
161
|
-
go(obj);
|
|
162
|
-
};
|
|
163
|
-
|
|
164
|
-
export const attachTypedJsonSerializer = (obj: any) => {
|
|
165
|
-
const descriptor = Object.getOwnPropertyDescriptor(obj, 'toJSON');
|
|
166
|
-
if (descriptor) {
|
|
167
|
-
return;
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
Object.defineProperty(obj, 'toJSON', {
|
|
171
|
-
value: typedJsonSerializer,
|
|
172
|
-
writable: false,
|
|
173
|
-
enumerable: false,
|
|
174
|
-
// Setting `configurable` to false breaks proxy invariants, should be fixable.
|
|
175
|
-
configurable: true,
|
|
176
|
-
});
|
|
177
|
-
};
|
|
178
|
-
|
|
179
|
-
// NOTE: KEEP as function.
|
|
180
|
-
const typedJsonSerializer = function (this: any) {
|
|
181
|
-
const { id, ...rest } = this;
|
|
182
|
-
const result: any = {
|
|
183
|
-
id,
|
|
184
|
-
};
|
|
185
|
-
|
|
186
|
-
if (this[TypeId]) {
|
|
187
|
-
result[ATTR_TYPE] = this[TypeId].toString();
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
if (this[SelfDXNId]) {
|
|
191
|
-
result[ATTR_SELF_DXN] = this[SelfDXNId].toString();
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
if (this[RelationSourceDXNId]) {
|
|
195
|
-
const sourceDXN = this[RelationSourceDXNId];
|
|
196
|
-
invariant(sourceDXN instanceof DXN);
|
|
197
|
-
result[ATTR_RELATION_SOURCE] = sourceDXN.toString();
|
|
198
|
-
}
|
|
199
|
-
if (this[RelationTargetDXNId]) {
|
|
200
|
-
const targetDXN = this[RelationTargetDXNId];
|
|
201
|
-
invariant(targetDXN instanceof DXN);
|
|
202
|
-
result[ATTR_RELATION_TARGET] = targetDXN.toString();
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
if (this[MetaId]) {
|
|
206
|
-
result[ATTR_META] = serializeMeta(this[MetaId]);
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
Object.assign(result, serializeData(rest));
|
|
210
|
-
return result;
|
|
211
|
-
};
|
|
212
|
-
|
|
213
|
-
const serializeData = (data: unknown) => {
|
|
214
|
-
return deepMapValues(data, (value, recurse) => {
|
|
215
|
-
if (Ref.isRef(value)) {
|
|
216
|
-
// TODO(dmaretskyi): Should this be configurable?
|
|
217
|
-
return value.noInline().encode();
|
|
218
|
-
}
|
|
219
|
-
return recurse(value);
|
|
220
|
-
});
|
|
221
|
-
};
|
|
222
|
-
|
|
223
|
-
const serializeMeta = (meta: ObjectMeta) => {
|
|
224
|
-
return deepMapValues(meta, (value, recurse) => recurse(value));
|
|
225
|
-
};
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2024 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
import * as Schema from 'effect/Schema';
|
|
6
|
-
|
|
7
|
-
import { ForeignKey } from '@dxos/echo-protocol';
|
|
8
|
-
import { invariant } from '@dxos/invariant';
|
|
9
|
-
import { type Comparator, intersection } from '@dxos/util';
|
|
10
|
-
|
|
11
|
-
import { type BaseObject } from '../types';
|
|
12
|
-
|
|
13
|
-
import { MetaId } from './model';
|
|
14
|
-
|
|
15
|
-
//
|
|
16
|
-
// ObjectMeta
|
|
17
|
-
//
|
|
18
|
-
|
|
19
|
-
// TODO(dmaretskyi): Rename to ObjectMeta
|
|
20
|
-
export const ObjectMetaSchema = Schema.mutable(
|
|
21
|
-
Schema.Struct({
|
|
22
|
-
keys: Schema.mutable(Schema.Array(ForeignKey)),
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* A set of tags.
|
|
26
|
-
* Tags are arbitrary application-defined strings.
|
|
27
|
-
* ECHO makes no assumptions about the tag structure.
|
|
28
|
-
*/
|
|
29
|
-
// TODO(dmaretskyi): Has to be optional for compatibility with old data.
|
|
30
|
-
// Defaulting to an empty array is possible but requires a bit more work.
|
|
31
|
-
tags: Schema.optional(Schema.mutable(Schema.Array(Schema.String))),
|
|
32
|
-
}),
|
|
33
|
-
);
|
|
34
|
-
export type ObjectMeta = Schema.Schema.Type<typeof ObjectMetaSchema>;
|
|
35
|
-
|
|
36
|
-
export const foreignKey = (source: string, id: string): ForeignKey => ({ source, id });
|
|
37
|
-
export const foreignKeyEquals = (a: ForeignKey, b: ForeignKey) => a.source === b.source && a.id === b.id;
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Get metadata from object.
|
|
41
|
-
* Only callable on the object root.
|
|
42
|
-
* @deprecated Use {@link getMeta}.
|
|
43
|
-
*/
|
|
44
|
-
// TODO(dmaretskyi): Remove.
|
|
45
|
-
export const getObjectMeta = (obj: any): ObjectMeta => {
|
|
46
|
-
return getMeta(obj);
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
/*
|
|
50
|
-
* Get metadata from object.
|
|
51
|
-
* Only callable on the object root.
|
|
52
|
-
*/
|
|
53
|
-
export const getMeta = (obj: BaseObject): ObjectMeta => {
|
|
54
|
-
const metadata = (obj as any)[MetaId];
|
|
55
|
-
invariant(metadata, 'ObjectMeta not found.');
|
|
56
|
-
return metadata;
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
// TODO(dmaretskyi): Move to echo-schema.
|
|
60
|
-
export const compareForeignKeys: Comparator<BaseObject> = (a: BaseObject, b: BaseObject) =>
|
|
61
|
-
intersection(getMeta(a).keys, getMeta(b).keys, foreignKeyEquals).length > 0;
|
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2025 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
import type * as Schema from 'effect/Schema';
|
|
6
|
-
|
|
7
|
-
import { type ForeignKey } from '@dxos/echo-protocol';
|
|
8
|
-
import { invariant } from '@dxos/invariant';
|
|
9
|
-
import { DXN, ObjectId } from '@dxos/keys';
|
|
10
|
-
import { assumeType } from '@dxos/util';
|
|
11
|
-
|
|
12
|
-
import { EntityKind } from '../ast';
|
|
13
|
-
|
|
14
|
-
import { type ObjectMeta } from './meta';
|
|
15
|
-
import type { Version } from './version';
|
|
16
|
-
|
|
17
|
-
//
|
|
18
|
-
// Defines the internal model of the echo object.
|
|
19
|
-
//
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Entity kind.
|
|
23
|
-
*/
|
|
24
|
-
export const EntityKindId = Symbol('@dxos/echo/EntityKind');
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* DXN to the object itself.
|
|
28
|
-
*/
|
|
29
|
-
export const SelfDXNId = Symbol('@dxos/echo/DXN');
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Property name for self DXN when object is serialized to JSON.
|
|
33
|
-
*/
|
|
34
|
-
export const ATTR_SELF_DXN = '@dxn';
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* DXN to the object type.
|
|
38
|
-
*/
|
|
39
|
-
export const TypeId = Symbol('@dxos/echo/Type');
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Property name for typename when object is serialized to JSON.
|
|
43
|
-
*/
|
|
44
|
-
export const ATTR_TYPE = '@type';
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* Reference to the object schema.
|
|
48
|
-
*/
|
|
49
|
-
export const SchemaId = Symbol('@dxos/echo/Schema');
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Deletion marker.
|
|
53
|
-
*/
|
|
54
|
-
export const DeletedId = Symbol('@dxos/echo/Deleted');
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* Property name for deleted when object is serialized to JSON.
|
|
58
|
-
*/
|
|
59
|
-
export const ATTR_DELETED = '@deleted';
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Metadata section.
|
|
63
|
-
*/
|
|
64
|
-
export const MetaId = Symbol('@dxos/echo/Meta');
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Property name for meta when object is serialized to JSON.
|
|
68
|
-
*/
|
|
69
|
-
export const ATTR_META = '@meta';
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Used to access relation source ref on live ECHO objects.
|
|
73
|
-
* Reading this symbol must return `Live<EchoObject<any>>` or a DXN.
|
|
74
|
-
*/
|
|
75
|
-
export const RelationSourceDXNId: unique symbol = Symbol('@dxos/echo/RelationSourceDXN');
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Property name for relation source when object is serialized to JSON.
|
|
79
|
-
*/
|
|
80
|
-
export const ATTR_RELATION_SOURCE = '@relationSource';
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* Used to access relation target ref on live ECHO objects.
|
|
84
|
-
* Reading this symbol must return `Live<EchoObject<any>>` or a DXN.
|
|
85
|
-
*/
|
|
86
|
-
export const RelationTargetDXNId: unique symbol = Symbol('@dxos/echo/RelationTargetDXN');
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Property name for relation target when object is serialized to JSON.
|
|
90
|
-
*/
|
|
91
|
-
export const ATTR_RELATION_TARGET = '@relationTarget';
|
|
92
|
-
|
|
93
|
-
/**
|
|
94
|
-
* Used to access relation source ref on live ECHO objects.
|
|
95
|
-
* Reading this symbol must return `Live<EchoObject<any>>` or a DXN.
|
|
96
|
-
*/
|
|
97
|
-
export const RelationSourceId: unique symbol = Symbol('@dxos/echo/RelationSource');
|
|
98
|
-
|
|
99
|
-
/**
|
|
100
|
-
* Used to access relation target ref on live ECHO objects.
|
|
101
|
-
* Reading this symbol must return `Live<EchoObject<any>>` or a DXN.
|
|
102
|
-
*/
|
|
103
|
-
export const RelationTargetId: unique symbol = Symbol('@dxos/echo/RelationTarget');
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* Getter to get object version.
|
|
107
|
-
*/
|
|
108
|
-
export const ObjectVersionId: unique symbol = Symbol('@dxos/echo/ObjectVersion');
|
|
109
|
-
|
|
110
|
-
/**
|
|
111
|
-
* Internal runtime representation of an object.
|
|
112
|
-
* The fields are accessed through getter functions.
|
|
113
|
-
*/
|
|
114
|
-
export interface InternalObjectProps {
|
|
115
|
-
id: ObjectId;
|
|
116
|
-
readonly [SelfDXNId]?: DXN;
|
|
117
|
-
|
|
118
|
-
// Echo supports untyped objects O_O.
|
|
119
|
-
readonly [TypeId]?: DXN;
|
|
120
|
-
|
|
121
|
-
/**
|
|
122
|
-
* Returns the schema for the object.
|
|
123
|
-
*/
|
|
124
|
-
readonly [SchemaId]?: Schema.Schema.AnyNoContext;
|
|
125
|
-
readonly [EntityKindId]: EntityKind;
|
|
126
|
-
readonly [DeletedId]?: boolean;
|
|
127
|
-
readonly [MetaId]?: ObjectMeta;
|
|
128
|
-
readonly [RelationSourceDXNId]?: DXN;
|
|
129
|
-
readonly [RelationTargetDXNId]?: DXN;
|
|
130
|
-
readonly [RelationSourceId]?: InternalObjectProps;
|
|
131
|
-
readonly [RelationTargetId]?: InternalObjectProps;
|
|
132
|
-
readonly [ObjectVersionId]?: Version;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* JSON representation of an object or relation.
|
|
137
|
-
*/
|
|
138
|
-
export interface ObjectJSON {
|
|
139
|
-
id: string;
|
|
140
|
-
[ATTR_SELF_DXN]?: DXN.String;
|
|
141
|
-
[ATTR_TYPE]: DXN.String;
|
|
142
|
-
[ATTR_DELETED]?: boolean;
|
|
143
|
-
[ATTR_META]?: ObjectMetaJSON;
|
|
144
|
-
[ATTR_RELATION_SOURCE]?: DXN.String;
|
|
145
|
-
[ATTR_RELATION_TARGET]?: DXN.String;
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
export interface ObjectMetaJSON {
|
|
149
|
-
keys: ForeignKey[];
|
|
150
|
-
tags?: string[];
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
// NOTE: Keep as `function` to avoid type inference issues.
|
|
154
|
-
// eslint-disable-next-line prefer-arrow-functions/prefer-arrow-functions
|
|
155
|
-
export function assertObjectModelShape(obj: unknown): asserts obj is InternalObjectProps {
|
|
156
|
-
invariant(typeof obj === 'object' && obj !== null, 'Invalid object model: not an object');
|
|
157
|
-
assumeType<InternalObjectProps>(obj);
|
|
158
|
-
invariant(ObjectId.isValid(obj.id), 'Invalid object model: invalid id');
|
|
159
|
-
invariant(obj[TypeId] === undefined || obj[TypeId] instanceof DXN, 'Invalid object model: invalid type');
|
|
160
|
-
invariant(
|
|
161
|
-
obj[EntityKindId] === EntityKind.Object || obj[EntityKindId] === EntityKind.Relation,
|
|
162
|
-
'Invalid object model: invalid entity kind',
|
|
163
|
-
);
|
|
164
|
-
if (obj[EntityKindId] === EntityKind.Relation) {
|
|
165
|
-
invariant(obj[RelationSourceDXNId] instanceof DXN, 'Invalid object model: invalid relation source');
|
|
166
|
-
invariant(obj[RelationTargetDXNId] instanceof DXN, 'Invalid object model: invalid relation target');
|
|
167
|
-
invariant(!(obj[RelationSourceId] instanceof DXN), 'Invalid object model: source pointer is a DXN');
|
|
168
|
-
invariant(!(obj[RelationTargetId] instanceof DXN), 'Invalid object model: target pointer is a DXN');
|
|
169
|
-
}
|
|
170
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2025 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
import type { RelationSourceId, RelationTargetId } from './model';
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Source and target props on relations.
|
|
9
|
-
*/
|
|
10
|
-
// TODO(burdon): any?
|
|
11
|
-
export type RelationSourceTargetRefs<Source = any, Target = any> = {
|
|
12
|
-
/**
|
|
13
|
-
* Source ECHO live object.
|
|
14
|
-
*/
|
|
15
|
-
[RelationSourceId]: Source;
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Target ECHO live object.
|
|
19
|
-
*/
|
|
20
|
-
[RelationTargetId]: Target;
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
export type RelationSource<R> = R extends RelationSourceTargetRefs<infer Source, infer _Target> ? Source : never;
|
|
24
|
-
export type RelationTarget<R> = R extends RelationSourceTargetRefs<infer _Source, infer Target> ? Target : never;
|