@dxos/echo 0.8.4-main.c85a9c8dae → 0.8.4-main.cb12b3f963
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/dist/lib/neutral/Annotation.mjs +3 -3
- package/dist/lib/neutral/Database.mjs +8 -4
- package/dist/lib/neutral/Entity.mjs +16 -11
- package/dist/lib/neutral/Err.mjs +1 -1
- package/dist/lib/neutral/Extension.mjs +18 -0
- package/dist/lib/neutral/Extension.mjs.map +7 -0
- package/dist/lib/neutral/Feed.mjs +21 -14
- package/dist/lib/neutral/Filter.mjs +21 -10
- package/dist/lib/neutral/Format.mjs +3 -3
- package/dist/lib/neutral/JsonSchema.mjs +8 -7
- package/dist/lib/neutral/Key.mjs +1 -1
- package/dist/lib/neutral/Migration.mjs +17 -0
- package/dist/lib/neutral/Migration.mjs.map +7 -0
- package/dist/lib/neutral/Obj.mjs +16 -10
- package/dist/lib/neutral/Order.mjs +1 -1
- package/dist/lib/neutral/Query.mjs +19 -13
- package/dist/lib/neutral/QueryResult.mjs +1 -1
- package/dist/lib/neutral/Ref.mjs +7 -7
- package/dist/lib/neutral/Relation.mjs +15 -11
- package/dist/lib/neutral/SchemaRegistry.mjs +1 -1
- package/dist/lib/neutral/Tag.mjs +14 -10
- package/dist/lib/neutral/Type.mjs +10 -7
- package/dist/lib/neutral/{chunk-ALOGSVBP.mjs → chunk-3U5PIVPZ.mjs} +59 -4
- package/dist/lib/neutral/chunk-3U5PIVPZ.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-DZQSL6RW.mjs → chunk-44HT3MEC.mjs} +2 -2
- package/dist/lib/neutral/{chunk-DZQSL6RW.mjs.map → chunk-44HT3MEC.mjs.map} +1 -1
- package/dist/lib/neutral/{chunk-5ELDDYWE.mjs → chunk-4VTRFJV3.mjs} +17 -19
- package/dist/lib/neutral/chunk-4VTRFJV3.mjs.map +7 -0
- package/dist/lib/neutral/chunk-5NR2KWDU.mjs +34 -0
- package/dist/lib/neutral/chunk-5NR2KWDU.mjs.map +7 -0
- package/dist/lib/neutral/chunk-62RJTYOZ.mjs +346 -0
- package/dist/lib/neutral/chunk-62RJTYOZ.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-OVUBTQLT.mjs → chunk-7OO5B5DD.mjs} +2 -2
- package/dist/lib/neutral/chunk-7OO5B5DD.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-ANHVGJI4.mjs → chunk-7RVZT53K.mjs} +1 -1
- package/dist/lib/neutral/{chunk-GAWKQ5DZ.mjs → chunk-AG7JS76F.mjs} +5 -5
- package/dist/lib/neutral/chunk-AG7JS76F.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-PP4DNUZU.mjs → chunk-AVPYX7FF.mjs} +1399 -2882
- package/dist/lib/neutral/chunk-AVPYX7FF.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-ZWKJ4LZJ.mjs → chunk-BCKTAKBX.mjs} +23 -51
- package/dist/lib/neutral/chunk-BCKTAKBX.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-T6JEFNP6.mjs → chunk-BICZKPQG.mjs} +1 -1
- package/dist/lib/neutral/{chunk-T6JEFNP6.mjs.map → chunk-BICZKPQG.mjs.map} +1 -1
- package/dist/lib/neutral/{chunk-F7KMHDPJ.mjs → chunk-GECFB2UL.mjs} +49 -31
- package/dist/lib/neutral/chunk-GECFB2UL.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-BRJSLACP.mjs → chunk-M7ET73JD.mjs} +71 -17
- package/dist/lib/neutral/chunk-M7ET73JD.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-4KG6IGL4.mjs → chunk-N4B7FHQT.mjs} +4 -4
- package/dist/lib/neutral/{chunk-4KG6IGL4.mjs.map → chunk-N4B7FHQT.mjs.map} +2 -2
- package/dist/lib/neutral/{chunk-KGV3QIRX.mjs → chunk-NCSIQP3L.mjs} +124 -17
- package/dist/lib/neutral/chunk-NCSIQP3L.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-QXF3LGN2.mjs → chunk-NGQNU3KX.mjs} +5 -3
- package/dist/lib/neutral/chunk-NGQNU3KX.mjs.map +7 -0
- package/dist/lib/neutral/chunk-PRCRETDK.mjs +36 -0
- package/dist/lib/neutral/chunk-PRCRETDK.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-AQP4QKYP.mjs → chunk-S4JXD2RO.mjs} +44 -9
- package/dist/lib/neutral/chunk-S4JXD2RO.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-W7OP5HGZ.mjs → chunk-SVEGO3DJ.mjs} +14 -10
- package/dist/lib/neutral/chunk-SVEGO3DJ.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-M2KVTHZM.mjs → chunk-TRPZU2HV.mjs} +10 -10
- package/dist/lib/neutral/chunk-TRPZU2HV.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-ZTUBYOGB.mjs → chunk-TTCSATUD.mjs} +1 -1
- package/dist/lib/neutral/chunk-TTCSATUD.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-GFNCSK7F.mjs → chunk-TTUIJXGD.mjs} +54 -23
- package/dist/lib/neutral/chunk-TTUIJXGD.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-OMUPQMLR.mjs → chunk-V72DY6LU.mjs} +1 -1
- package/dist/lib/neutral/{chunk-T4MPQJ7X.mjs → chunk-WGMPVUUL.mjs} +6 -22
- package/dist/lib/neutral/chunk-WGMPVUUL.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-O3TZFQCT.mjs → chunk-YDRLYZKW.mjs} +2 -2
- package/dist/lib/neutral/chunk-YDRLYZKW.mjs.map +7 -0
- package/dist/lib/neutral/chunk-Z25FPDXG.mjs +734 -0
- package/dist/lib/neutral/chunk-Z25FPDXG.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-MXQJZCPY.mjs → chunk-ZISMEVKD.mjs} +1 -1
- package/dist/lib/neutral/chunk-ZISMEVKD.mjs.map +7 -0
- package/dist/lib/neutral/index.mjs +38 -25
- package/dist/lib/neutral/internal/index.mjs +48 -38
- package/dist/lib/neutral/meta.json +1 -1
- package/dist/lib/neutral/testing/index.mjs +41 -35
- package/dist/lib/neutral/testing/index.mjs.map +2 -2
- package/dist/types/src/Annotation.d.ts +3 -3
- package/dist/types/src/Annotation.d.ts.map +1 -1
- package/dist/types/src/Collection.d.ts.map +1 -1
- package/dist/types/src/Database.d.ts +15 -3
- package/dist/types/src/Database.d.ts.map +1 -1
- package/dist/types/src/Dataset.d.ts +2 -1
- package/dist/types/src/Dataset.d.ts.map +1 -1
- package/dist/types/src/Entity.d.ts +17 -11
- package/dist/types/src/Entity.d.ts.map +1 -1
- package/dist/types/src/Err.d.ts +18 -18
- package/dist/types/src/Err.d.ts.map +1 -1
- 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 +40 -23
- package/dist/types/src/Feed.d.ts.map +1 -1
- package/dist/types/src/Filter.d.ts +33 -4
- package/dist/types/src/Filter.d.ts.map +1 -1
- 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 +1 -1
- package/dist/types/src/Format.d.ts.map +1 -1
- package/dist/types/src/Hypergraph.d.ts +6 -1
- package/dist/types/src/Hypergraph.d.ts.map +1 -1
- package/dist/types/src/Json.d.ts +33 -0
- package/dist/types/src/Json.d.ts.map +1 -0
- package/dist/types/src/Json.test.d.ts +2 -0
- package/dist/types/src/Json.test.d.ts.map +1 -0
- package/dist/types/src/JsonSchema.d.ts +5 -5
- package/dist/types/src/JsonSchema.d.ts.map +1 -1
- package/dist/types/src/Migration.d.ts +57 -0
- package/dist/types/src/Migration.d.ts.map +1 -0
- package/dist/types/src/Obj.d.ts +45 -29
- package/dist/types/src/Obj.d.ts.map +1 -1
- package/dist/types/src/Order.d.ts.map +1 -1
- package/dist/types/src/Query.d.ts +13 -2
- package/dist/types/src/Query.d.ts.map +1 -1
- package/dist/types/src/Ref.d.ts +11 -11
- package/dist/types/src/Ref.d.ts.map +1 -1
- package/dist/types/src/Relation.d.ts +16 -16
- package/dist/types/src/Relation.d.ts.map +1 -1
- package/dist/types/src/SchemaRegistry.d.ts +1 -1
- package/dist/types/src/Tag.d.ts +2 -2
- package/dist/types/src/Tag.d.ts.map +1 -1
- package/dist/types/src/Type.d.ts +10 -9
- package/dist/types/src/Type.d.ts.map +1 -1
- package/dist/types/src/View.d.ts +1 -1
- package/dist/types/src/View.d.ts.map +1 -1
- package/dist/types/src/exemplars.test.d.ts +2 -0
- package/dist/types/src/exemplars.test.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +3 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/internal/{annotations → Annotation}/annotations.d.ts +24 -2
- 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/{api → Annotation}/sorting.d.ts +1 -1
- package/dist/types/src/internal/Annotation/sorting.d.ts.map +1 -0
- package/dist/types/src/internal/{annotations → Annotation}/util.d.ts +2 -2
- package/dist/types/src/internal/Annotation/util.d.ts.map +1 -0
- package/dist/types/src/internal/{api/entity.d.ts → Entity/api.d.ts} +2 -2
- package/dist/types/src/internal/Entity/api.d.ts.map +1 -0
- package/dist/types/src/internal/{entities → Entity}/entity.d.ts +2 -2
- package/dist/types/src/internal/Entity/entity.d.ts.map +1 -0
- package/dist/types/src/internal/{entities → Entity}/index.d.ts +2 -0
- package/dist/types/src/internal/Entity/index.d.ts.map +1 -0
- package/dist/types/src/internal/{entities → Entity}/model.d.ts +2 -26
- package/dist/types/src/internal/Entity/model.d.ts.map +1 -0
- package/dist/types/src/internal/{entities → Entity}/object.d.ts +2 -2
- package/dist/types/src/internal/Entity/object.d.ts.map +1 -0
- package/dist/types/src/internal/{entities → Entity}/relation.d.ts +3 -30
- package/dist/types/src/internal/Entity/relation.d.ts.map +1 -0
- package/dist/types/src/internal/Entity/util.d.ts.map +1 -0
- package/dist/types/src/internal/{api → Entity}/version.d.ts +1 -1
- 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/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/Format/select.d.ts.map +1 -0
- package/dist/types/src/internal/Format/string.d.ts.map +1 -0
- package/dist/types/src/internal/{formats → Format}/types.d.ts +1 -1
- package/dist/types/src/internal/Format/types.d.ts.map +1 -0
- package/dist/types/src/internal/{json-schema → 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.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 +23 -23
- package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts.map +1 -0
- package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema.d.ts +1 -1
- 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.map +1 -0
- package/dist/types/src/internal/Obj/common.d.ts.map +1 -0
- package/dist/types/src/internal/{object → Obj}/create-object.d.ts +2 -2
- package/dist/types/src/internal/Obj/create-object.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/create-object.test.d.ts.map +1 -0
- package/dist/types/src/internal/{object → Obj}/deleted.d.ts +1 -1
- package/dist/types/src/internal/Obj/deleted.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/ids.d.ts.map +1 -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/{object → Obj}/json-serializer.d.ts +13 -5
- 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/{object → Obj}/set-value.d.ts +2 -2
- package/dist/types/src/internal/Obj/set-value.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/set-value.test.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/snapshot.d.ts.map +1 -0
- package/dist/types/src/internal/{object → Obj}/typed-object.d.ts +2 -2
- 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 +1 -1
- package/dist/types/src/internal/Ref/ref-array.d.ts.map +1 -0
- package/dist/types/src/internal/{ref → Ref}/ref.d.ts +15 -2
- 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/{schema → Type}/compose.d.ts +1 -1
- 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 +6 -6
- package/dist/types/src/internal/Type/echo-schema.d.ts.map +1 -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/{schema → Type}/persistent-schema.d.ts +2 -2
- package/dist/types/src/internal/Type/persistent-schema.d.ts.map +1 -0
- package/dist/types/src/internal/{api → common/api}/index.d.ts +0 -4
- package/dist/types/src/internal/common/api/index.d.ts.map +1 -0
- package/dist/types/src/internal/{api → common/api}/meta.d.ts +3 -3
- 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/{proxy → common/proxy}/change-context.d.ts +1 -1
- 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.map +1 -0
- package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts.map +1 -0
- package/dist/types/src/internal/{proxy → common/proxy}/errors.d.ts +1 -1
- package/dist/types/src/internal/common/proxy/errors.d.ts.map +1 -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.map +1 -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.map +1 -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.map +1 -0
- package/dist/types/src/internal/common/proxy/proxy-utils.d.ts.map +1 -0
- package/dist/types/src/internal/{proxy → common/proxy}/reactive-array.d.ts +1 -1
- package/dist/types/src/internal/common/proxy/reactive-array.d.ts.map +1 -0
- package/dist/types/src/internal/{proxy → common/proxy}/reactive.d.ts +2 -2
- package/dist/types/src/internal/{proxy → common/proxy}/reactive.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/reactive.test.d.ts +2 -0
- package/dist/types/src/internal/common/proxy/reactive.test.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/schema-validator.d.ts.map +1 -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.map +1 -0
- package/dist/types/src/internal/common/proxy/typed-handler.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/typed-handler.test.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/typed-object.test.d.ts.map +1 -0
- package/dist/types/src/internal/common/types/base.d.ts.map +1 -0
- package/dist/types/src/internal/{types → common/types}/entity.d.ts +4 -4
- package/dist/types/src/internal/common/types/entity.d.ts.map +1 -0
- package/dist/types/src/internal/{types → common/types}/index.d.ts +1 -0
- package/dist/types/src/internal/common/types/index.d.ts.map +1 -0
- package/dist/types/src/internal/{types → common/types}/meta.d.ts +3 -3
- 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.map +1 -0
- package/dist/types/src/internal/{types → common/types}/version.d.ts +1 -1
- package/dist/types/src/internal/common/types/version.d.ts.map +1 -0
- package/dist/types/src/internal/index.d.ts +9 -10
- package/dist/types/src/internal/index.d.ts.map +1 -1
- package/dist/types/src/testing/test-data.d.ts.map +1 -1
- package/dist/types/src/testing/test-schema.d.ts +53 -53
- package/dist/types/src/testing/test-schema.d.ts.map +1 -1
- package/dist/types/src/testing/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +24 -14
- package/src/Annotation.ts +5 -3
- package/src/Collection.ts +8 -1
- package/src/Database.ts +54 -17
- package/src/Dataset.ts +2 -0
- package/src/Entity.ts +20 -11
- package/src/Err.ts +2 -0
- package/src/Extension.test.ts +235 -0
- package/src/Extension.ts +122 -0
- package/src/Feed.ts +86 -36
- package/src/Filter.test.ts +90 -0
- package/src/Filter.ts +68 -3
- package/src/Format.ts +1 -1
- package/src/Hypergraph.ts +7 -2
- package/src/Json.test.ts +175 -0
- package/src/Json.ts +102 -0
- package/src/JsonSchema.ts +7 -5
- package/src/Migration.ts +94 -0
- package/src/Obj.test.ts +107 -15
- package/src/Obj.ts +166 -40
- package/src/Order.ts +2 -0
- package/src/Query.test.ts +221 -31
- package/src/Query.ts +50 -3
- package/src/Ref.ts +14 -12
- package/src/Relation.test.ts +2 -2
- package/src/Relation.ts +28 -21
- package/src/SchemaRegistry.ts +1 -1
- package/src/Tag.ts +3 -1
- package/src/Type.ts +14 -11
- package/src/View.ts +9 -2
- package/src/exemplars.test.ts +21 -0
- package/src/index.ts +4 -0
- package/src/internal/{annotations → Annotation}/annotations.test.ts +56 -7
- package/src/internal/{annotations → Annotation}/annotations.ts +71 -20
- package/src/internal/{annotations → Annotation}/index.ts +1 -0
- package/src/internal/{api → Annotation}/sorting.ts +2 -4
- package/src/internal/{annotations → Annotation}/util.ts +1 -1
- package/src/internal/{api/entity.ts → Entity/api.ts} +3 -2
- package/src/internal/{entities → Entity}/entity.ts +2 -2
- package/src/internal/{entities → Entity}/index.ts +2 -0
- package/src/internal/{entities → Entity}/model.ts +13 -42
- package/src/internal/{entities → Entity}/object.ts +2 -3
- package/src/internal/{entities → Entity}/relation.ts +19 -36
- package/src/internal/{api → Entity}/version.ts +2 -2
- package/src/internal/{formats → Format}/date.test.ts +1 -2
- package/src/internal/{formats → Format}/format.test.ts +1 -2
- package/src/internal/{formats → Format}/types.ts +2 -2
- package/src/internal/{json-schema → JsonSchema}/annotations.ts +3 -3
- package/src/internal/{json-schema → JsonSchema}/json-schema-type.ts +4 -4
- package/src/internal/{json-schema → JsonSchema}/json-schema.test.ts +48 -49
- package/src/internal/{json-schema → JsonSchema}/json-schema.ts +3 -4
- package/src/internal/{object → Obj}/clone.ts +3 -3
- package/src/internal/{object → Obj}/common.ts +2 -2
- package/src/internal/{object → Obj}/create-object.test.ts +5 -7
- package/src/internal/{object → Obj}/create-object.ts +5 -6
- package/src/internal/{object → Obj}/deleted.ts +2 -2
- package/src/internal/{object → Obj}/inspect.ts +2 -2
- package/src/internal/{object → Obj}/json-serializer.test.ts +8 -9
- package/src/internal/{object → Obj}/json-serializer.ts +36 -18
- package/src/internal/{object → Obj}/schema-validator.ts +1 -1
- package/src/internal/{object → Obj}/set-value.test.ts +24 -24
- package/src/internal/{object → Obj}/set-value.ts +3 -3
- package/src/internal/{object → Obj}/snapshot.ts +14 -5
- package/src/internal/{object → Obj}/typed-object.test.ts +3 -3
- package/src/internal/{object → Obj}/typed-object.ts +2 -2
- package/src/internal/Query.ts +137 -0
- package/src/internal/{ref → Ref}/ref-array.ts +1 -2
- package/src/internal/{ref → Ref}/ref.test.ts +4 -5
- package/src/internal/{ref → Ref}/ref.ts +20 -3
- package/src/internal/{schema → Type}/compose.test.ts +5 -6
- package/src/internal/{schema → Type}/compose.ts +1 -1
- package/src/internal/{schema → Type}/echo-schema.ts +7 -8
- package/src/internal/{schema → Type}/manipulation.ts +1 -1
- package/src/internal/{schema → Type}/persistent-schema.ts +7 -7
- package/src/internal/{README.md → common/README.md} +1 -1
- package/src/internal/{api → common/api}/index.ts +0 -4
- package/src/internal/{api → common/api}/meta.ts +3 -3
- package/src/internal/common/index.ts +7 -0
- package/src/internal/{proxy → common/proxy}/change-context.ts +1 -1
- package/src/internal/{proxy → common/proxy}/change.test.ts +97 -97
- package/src/internal/{proxy → common/proxy}/errors.ts +2 -2
- package/src/internal/{proxy → common/proxy}/handler.test.ts +2 -4
- package/src/internal/{proxy → common/proxy}/json-serializer.ts +6 -3
- package/src/internal/{proxy → common/proxy}/make-object.ts +1 -2
- package/src/internal/{proxy → common/proxy}/ownership.ts +0 -1
- package/src/internal/{proxy → common/proxy}/reactive-array.ts +1 -1
- package/src/internal/common/proxy/reactive.test.ts +54 -0
- package/src/internal/{proxy → common/proxy}/reactive.ts +12 -4
- package/src/internal/{proxy → common/proxy}/schema.test.ts +10 -10
- package/src/internal/{proxy → common/proxy}/typed-handler.test.ts +6 -7
- package/src/internal/{proxy → common/proxy}/typed-handler.ts +10 -13
- package/src/internal/{proxy → common/proxy}/typed-object.test.ts +5 -6
- package/src/internal/{types → common/types}/entity.ts +1 -1
- package/src/internal/{types → common/types}/index.ts +1 -0
- package/src/internal/{types → common/types}/meta.ts +1 -2
- package/src/internal/common/types/model-symbols.ts +69 -0
- package/src/internal/index.ts +9 -31
- package/src/testing/api.test.ts +2 -3
- package/src/testing/test-data.ts +0 -1
- package/src/testing/test-schema.ts +9 -9
- package/dist/lib/neutral/chunk-5ELDDYWE.mjs.map +0 -7
- package/dist/lib/neutral/chunk-ALOGSVBP.mjs.map +0 -7
- package/dist/lib/neutral/chunk-AQP4QKYP.mjs.map +0 -7
- package/dist/lib/neutral/chunk-BRJSLACP.mjs.map +0 -7
- package/dist/lib/neutral/chunk-F7KMHDPJ.mjs.map +0 -7
- package/dist/lib/neutral/chunk-GAWKQ5DZ.mjs.map +0 -7
- package/dist/lib/neutral/chunk-GFNCSK7F.mjs.map +0 -7
- package/dist/lib/neutral/chunk-KGV3QIRX.mjs.map +0 -7
- package/dist/lib/neutral/chunk-M2KVTHZM.mjs.map +0 -7
- package/dist/lib/neutral/chunk-MXQJZCPY.mjs.map +0 -7
- package/dist/lib/neutral/chunk-O3TZFQCT.mjs.map +0 -7
- package/dist/lib/neutral/chunk-OVUBTQLT.mjs.map +0 -7
- package/dist/lib/neutral/chunk-PP4DNUZU.mjs.map +0 -7
- package/dist/lib/neutral/chunk-QXF3LGN2.mjs.map +0 -7
- package/dist/lib/neutral/chunk-T4MPQJ7X.mjs.map +0 -7
- package/dist/lib/neutral/chunk-W7OP5HGZ.mjs.map +0 -7
- package/dist/lib/neutral/chunk-ZTUBYOGB.mjs.map +0 -7
- package/dist/lib/neutral/chunk-ZWKJ4LZJ.mjs.map +0 -7
- package/dist/types/src/internal/annotations/annotations.d.ts.map +0 -1
- package/dist/types/src/internal/annotations/annotations.test.d.ts.map +0 -1
- package/dist/types/src/internal/annotations/index.d.ts +0 -3
- package/dist/types/src/internal/annotations/index.d.ts.map +0 -1
- package/dist/types/src/internal/annotations/util.d.ts.map +0 -1
- package/dist/types/src/internal/api/annotations.d.ts +0 -23
- package/dist/types/src/internal/api/annotations.d.ts.map +0 -1
- package/dist/types/src/internal/api/entity.d.ts.map +0 -1
- package/dist/types/src/internal/api/index.d.ts.map +0 -1
- package/dist/types/src/internal/api/meta.d.ts.map +0 -1
- package/dist/types/src/internal/api/sorting.d.ts.map +0 -1
- package/dist/types/src/internal/api/version.d.ts.map +0 -1
- package/dist/types/src/internal/entities/entity.d.ts.map +0 -1
- package/dist/types/src/internal/entities/index.d.ts.map +0 -1
- package/dist/types/src/internal/entities/model.d.ts.map +0 -1
- package/dist/types/src/internal/entities/object.d.ts.map +0 -1
- package/dist/types/src/internal/entities/relation.d.ts.map +0 -1
- package/dist/types/src/internal/entities/util.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-schema/annotations.d.ts.map +0 -1
- package/dist/types/src/internal/json-schema/effect-schema.test.d.ts.map +0 -1
- 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/json-schema/json-schema.d.ts.map +0 -1
- package/dist/types/src/internal/json-schema/json-schema.test.d.ts.map +0 -1
- package/dist/types/src/internal/object/clone.d.ts.map +0 -1
- package/dist/types/src/internal/object/common.d.ts.map +0 -1
- package/dist/types/src/internal/object/create-object.d.ts.map +0 -1
- package/dist/types/src/internal/object/create-object.test.d.ts.map +0 -1
- package/dist/types/src/internal/object/deleted.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.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.map +0 -1
- package/dist/types/src/internal/object/json-serializer.test.d.ts.map +0 -1
- package/dist/types/src/internal/object/schema-validator.d.ts +0 -2
- 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/set-value.d.ts.map +0 -1
- package/dist/types/src/internal/object/set-value.test.d.ts.map +0 -1
- package/dist/types/src/internal/object/snapshot.d.ts.map +0 -1
- 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/proxy/change-context.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/change.test.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/define-hidden-property.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/errors.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/event-batch.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/handler.test.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/index.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/json-serializer.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/make-object.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/ownership.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/proxy-types.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/proxy-utils.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/reactive-array.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/schema-validator.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/schema.test.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/symbols.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/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/compose.d.ts.map +0 -1
- package/dist/types/src/internal/schema/compose.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.map +0 -1
- package/dist/types/src/internal/schema/manipulation.d.ts.map +0 -1
- package/dist/types/src/internal/schema/persistent-schema.d.ts.map +0 -1
- package/dist/types/src/internal/types/base.d.ts.map +0 -1
- package/dist/types/src/internal/types/entity.d.ts.map +0 -1
- package/dist/types/src/internal/types/index.d.ts.map +0 -1
- package/dist/types/src/internal/types/meta.d.ts.map +0 -1
- package/dist/types/src/internal/types/typename.d.ts.map +0 -1
- package/dist/types/src/internal/types/version.d.ts.map +0 -1
- package/src/internal/api/annotations.ts +0 -60
- /package/dist/lib/neutral/{chunk-ANHVGJI4.mjs.map → chunk-7RVZT53K.mjs.map} +0 -0
- /package/dist/lib/neutral/{chunk-OMUPQMLR.mjs.map → chunk-V72DY6LU.mjs.map} +0 -0
- /package/dist/types/src/internal/{annotations → Annotation}/annotations.test.d.ts +0 -0
- /package/dist/types/src/internal/{entities → Entity}/util.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.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/{formats → Format}/select.d.ts +0 -0
- /package/dist/types/src/internal/{formats → Format}/string.d.ts +0 -0
- /package/dist/types/src/internal/{json-schema → JsonSchema}/effect-schema.test.d.ts +0 -0
- /package/dist/types/src/internal/{json-schema → JsonSchema}/index.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-schema → JsonSchema}/json-schema.test.d.ts +0 -0
- /package/dist/types/src/internal/{object → Obj}/clone.d.ts +0 -0
- /package/dist/types/src/internal/{object → Obj}/common.d.ts +0 -0
- /package/dist/types/src/internal/{object → Obj}/create-object.test.d.ts +0 -0
- /package/dist/types/src/internal/{object → Obj}/ids.d.ts +0 -0
- /package/dist/types/src/internal/{object → Obj}/index.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}/set-value.test.d.ts +0 -0
- /package/dist/types/src/internal/{object → Obj}/snapshot.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/{schema → Type}/compose.test.d.ts +0 -0
- /package/dist/types/src/internal/{schema → Type}/index.d.ts +0 -0
- /package/dist/types/src/internal/{schema → Type}/manipulation.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/change.test.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/define-hidden-property.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/event-batch.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/handler.test.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/index.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/json-serializer.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/make-object.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/ownership.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/proxy-types.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/proxy-utils.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → 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}/symbols.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/typed-handler.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/internal/{types → common/types}/base.d.ts +0 -0
- /package/dist/types/src/internal/{types → common/types}/typename.d.ts +0 -0
- /package/src/internal/{entities → Entity}/util.ts +0 -0
- /package/src/internal/{formats → Format}/date.ts +0 -0
- /package/src/internal/{formats → Format}/format.ts +0 -0
- /package/src/internal/{formats → Format}/index.ts +0 -0
- /package/src/internal/{formats → Format}/number.ts +0 -0
- /package/src/internal/{formats → Format}/object.ts +0 -0
- /package/src/internal/{formats → Format}/select.ts +0 -0
- /package/src/internal/{formats → Format}/string.ts +0 -0
- /package/src/internal/{json-schema → JsonSchema}/effect-schema.test.ts +0 -0
- /package/src/internal/{json-schema → JsonSchema}/index.ts +0 -0
- /package/src/internal/{json-schema → JsonSchema}/json-schema-normalize.ts +0 -0
- /package/src/internal/{object → Obj}/ids.ts +0 -0
- /package/src/internal/{object → Obj}/index.ts +0 -0
- /package/src/internal/{object → Obj}/schema-validator.test.ts +0 -0
- /package/src/internal/{ref → Ref}/index.ts +0 -0
- /package/src/internal/{schema → Type}/index.ts +0 -0
- /package/src/internal/{proxy → common/proxy}/define-hidden-property.ts +0 -0
- /package/src/internal/{proxy → common/proxy}/event-batch.ts +0 -0
- /package/src/internal/{proxy → common/proxy}/index.ts +0 -0
- /package/src/internal/{proxy → common/proxy}/proxy-types.ts +0 -0
- /package/src/internal/{proxy → common/proxy}/proxy-utils.ts +0 -0
- /package/src/internal/{proxy → common/proxy}/schema-validator.ts +0 -0
- /package/src/internal/{proxy → common/proxy}/symbols.ts +0 -0
- /package/src/internal/{types → common/types}/base.ts +0 -0
- /package/src/internal/{types → common/types}/typename.ts +0 -0
- /package/src/internal/{types → common/types}/version.ts +0 -0
package/src/Relation.ts
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
+
// @import-as-namespace
|
|
6
|
+
|
|
5
7
|
import * as Schema from 'effect/Schema';
|
|
6
8
|
|
|
7
9
|
import { raise } from '@dxos/debug';
|
|
@@ -14,6 +16,7 @@ import { assumeType } from '@dxos/util';
|
|
|
14
16
|
import type * as Database from './Database';
|
|
15
17
|
import * as Entity from './Entity';
|
|
16
18
|
import * as internal from './internal';
|
|
19
|
+
import * as entityInternal from './internal/Entity';
|
|
17
20
|
import * as Obj from './Obj';
|
|
18
21
|
import type * as Type from './Type';
|
|
19
22
|
|
|
@@ -64,7 +67,7 @@ export const Unknown: Type.Relation<Unknown, Obj.Any, Obj.Any> = Schema.Struct({
|
|
|
64
67
|
// NOTE: The EchoRelationSchema annotation is required for Ref.Ref(Relation.Unknown) to work.
|
|
65
68
|
// The typename/version/source/target only satisfy ECHO schema machinery for reference targets.
|
|
66
69
|
internal.EchoRelationSchema({
|
|
67
|
-
typename: 'dxos.
|
|
70
|
+
typename: 'org.dxos.schema.anyRelation',
|
|
68
71
|
version: '0.0.0',
|
|
69
72
|
source: Obj.Unknown,
|
|
70
73
|
target: Obj.Unknown,
|
|
@@ -107,10 +110,10 @@ export interface BaseRelationJson {
|
|
|
107
110
|
export type Snapshot<T extends Unknown = Unknown> = Omit<T, Entity.KindId> &
|
|
108
111
|
BaseRelationSnapshot<Obj.Unknown, Obj.Unknown>;
|
|
109
112
|
|
|
110
|
-
export const Source: unique symbol =
|
|
113
|
+
export const Source: unique symbol = entityInternal.RelationSourceId as any;
|
|
111
114
|
export type Source = typeof Source;
|
|
112
115
|
|
|
113
|
-
export const Target: unique symbol =
|
|
116
|
+
export const Target: unique symbol = entityInternal.RelationTargetId as any;
|
|
114
117
|
export type Target = typeof Target;
|
|
115
118
|
|
|
116
119
|
/**
|
|
@@ -234,7 +237,9 @@ export const getSource = <T extends Unknown | Snapshot>(relation: T): SourceOf<T
|
|
|
234
237
|
assertArgument(isRelation(relation), 'Expected a relation');
|
|
235
238
|
assumeType<internal.InternalObjectProps>(relation);
|
|
236
239
|
const obj = (relation as internal.InternalObjectProps)[internal.RelationSourceId];
|
|
237
|
-
|
|
240
|
+
if (obj === undefined) {
|
|
241
|
+
throw new Error(`Relation source could not be resolved.`);
|
|
242
|
+
}
|
|
238
243
|
return obj as SourceOf<T>;
|
|
239
244
|
};
|
|
240
245
|
|
|
@@ -247,7 +252,9 @@ export const getTarget = <T extends Unknown | Snapshot>(relation: T): TargetOf<T
|
|
|
247
252
|
assertArgument(isRelation(relation), 'Expected a relation');
|
|
248
253
|
assumeType<internal.InternalObjectProps>(relation);
|
|
249
254
|
const obj = (relation as internal.InternalObjectProps)[internal.RelationTargetId];
|
|
250
|
-
|
|
255
|
+
if (obj === undefined) {
|
|
256
|
+
throw new Error(`Relation target could not be resolved.`);
|
|
257
|
+
}
|
|
251
258
|
return obj as TargetOf<T>;
|
|
252
259
|
};
|
|
253
260
|
|
|
@@ -257,7 +264,7 @@ export const getTarget = <T extends Unknown | Snapshot>(relation: T): TargetOf<T
|
|
|
257
264
|
|
|
258
265
|
/**
|
|
259
266
|
* Makes all properties mutable recursively.
|
|
260
|
-
* Used to provide a mutable view of a relation within `Relation.
|
|
267
|
+
* Used to provide a mutable view of a relation within `Relation.update`.
|
|
261
268
|
*/
|
|
262
269
|
export type Mutable<T> = internal.Mutable<T>;
|
|
263
270
|
|
|
@@ -265,10 +272,10 @@ export type Mutable<T> = internal.Mutable<T>;
|
|
|
265
272
|
* Perform mutations on an echo relation within a controlled context.
|
|
266
273
|
*
|
|
267
274
|
* All mutations within the callback are batched and trigger a single notification
|
|
268
|
-
* when the callback completes. Direct mutations outside of `Relation.
|
|
275
|
+
* when the callback completes. Direct mutations outside of `Relation.update` will throw
|
|
269
276
|
* an error for echo relations.
|
|
270
277
|
*
|
|
271
|
-
* @param relation - The echo relation to mutate. Use `Obj.
|
|
278
|
+
* @param relation - The echo relation to mutate. Use `Obj.update` for objects.
|
|
272
279
|
* @param callback - The callback that performs mutations on the relation.
|
|
273
280
|
*
|
|
274
281
|
* @example
|
|
@@ -279,15 +286,15 @@ export type Mutable<T> = internal.Mutable<T>;
|
|
|
279
286
|
* role: 'Engineer',
|
|
280
287
|
* });
|
|
281
288
|
*
|
|
282
|
-
* // Mutate within Relation.
|
|
283
|
-
* Relation.
|
|
284
|
-
*
|
|
289
|
+
* // Mutate within Relation.update
|
|
290
|
+
* Relation.update(worksFor, (obj) => {
|
|
291
|
+
* obj.role = 'Senior Engineer';
|
|
285
292
|
* });
|
|
286
293
|
* ```
|
|
287
294
|
*
|
|
288
|
-
* Note: Only accepts relations. Use `Obj.
|
|
295
|
+
* Note: Only accepts relations. Use `Obj.update` for objects.
|
|
289
296
|
*/
|
|
290
|
-
export const
|
|
297
|
+
export const update = <T extends Unknown>(relation: T, callback: internal.ChangeCallback<T>): void => {
|
|
291
298
|
internal.change(relation, callback);
|
|
292
299
|
};
|
|
293
300
|
|
|
@@ -330,7 +337,7 @@ export const getValue = (rel: Unknown | Snapshot, path: readonly (string | numbe
|
|
|
330
337
|
|
|
331
338
|
/**
|
|
332
339
|
* Set a deeply nested property on a relation.
|
|
333
|
-
* Must be called within a `Relation.
|
|
340
|
+
* Must be called within a `Relation.update` callback.
|
|
334
341
|
*
|
|
335
342
|
* NOTE: TypeScript's structural typing allows readonly objects to be passed to `Mutable<T>`
|
|
336
343
|
* parameters, so there is no compile-time error. Enforcement is runtime-only.
|
|
@@ -392,13 +399,13 @@ export const Meta = internal.MetaId;
|
|
|
392
399
|
export type ReadonlyMeta = internal.ReadonlyMeta;
|
|
393
400
|
|
|
394
401
|
/**
|
|
395
|
-
* Mutable meta type returned by `Relation.getMeta` inside a `Relation.
|
|
402
|
+
* Mutable meta type returned by `Relation.getMeta` inside a `Relation.update` callback.
|
|
396
403
|
*/
|
|
397
404
|
export type Meta = internal.Meta;
|
|
398
405
|
|
|
399
406
|
/**
|
|
400
407
|
* Get the metadata for a relation.
|
|
401
|
-
* Returns mutable meta when passed a mutable relation (inside `Relation.
|
|
408
|
+
* Returns mutable meta when passed a mutable relation (inside `Relation.update` callback).
|
|
402
409
|
* Returns read-only meta when passed a regular relation or snapshot.
|
|
403
410
|
*/
|
|
404
411
|
// TODO(wittjosiah): When passed a Snapshot, should return a snapshot of meta, not the live meta proxy.
|
|
@@ -416,7 +423,7 @@ export const getKeys = (entity: Unknown | Snapshot, source: string): ForeignKey[
|
|
|
416
423
|
|
|
417
424
|
/**
|
|
418
425
|
* Delete all keys from the relation for the specified source.
|
|
419
|
-
* Must be called within a `Relation.
|
|
426
|
+
* Must be called within a `Relation.update` callback.
|
|
420
427
|
*
|
|
421
428
|
* NOTE: TypeScript's structural typing allows readonly objects to be passed to `Mutable<T>`
|
|
422
429
|
* parameters, so there is no compile-time error. Enforcement is runtime-only.
|
|
@@ -425,7 +432,7 @@ export const deleteKeys = (entity: Mutable<Unknown>, source: string): void => in
|
|
|
425
432
|
|
|
426
433
|
/**
|
|
427
434
|
* Add a tag to the relation.
|
|
428
|
-
* Must be called within a `Relation.
|
|
435
|
+
* Must be called within a `Relation.update` callback.
|
|
429
436
|
*
|
|
430
437
|
* NOTE: TypeScript's structural typing allows readonly objects to be passed to `Mutable<T>`
|
|
431
438
|
* parameters, so there is no compile-time error. Enforcement is runtime-only.
|
|
@@ -434,7 +441,7 @@ export const addTag = (entity: Mutable<Unknown>, tag: string): void => internal.
|
|
|
434
441
|
|
|
435
442
|
/**
|
|
436
443
|
* Remove a tag from the relation.
|
|
437
|
-
* Must be called within a `Relation.
|
|
444
|
+
* Must be called within a `Relation.update` callback.
|
|
438
445
|
*
|
|
439
446
|
* NOTE: TypeScript's structural typing allows readonly objects to be passed to `Mutable<T>`
|
|
440
447
|
* parameters, so there is no compile-time error. Enforcement is runtime-only.
|
|
@@ -459,7 +466,7 @@ export const getLabel = (entity: Unknown | Snapshot): string | undefined => inte
|
|
|
459
466
|
|
|
460
467
|
/**
|
|
461
468
|
* Set the label of the relation.
|
|
462
|
-
* Must be called within a `Relation.
|
|
469
|
+
* Must be called within a `Relation.update` callback.
|
|
463
470
|
*
|
|
464
471
|
* NOTE: TypeScript's structural typing allows readonly objects to be passed to `Mutable<T>`
|
|
465
472
|
* parameters, so there is no compile-time error. Enforcement is runtime-only.
|
|
@@ -474,7 +481,7 @@ export const getDescription = (entity: Unknown | Snapshot): string | undefined =
|
|
|
474
481
|
|
|
475
482
|
/**
|
|
476
483
|
* Set the description of the relation.
|
|
477
|
-
* Must be called within a `Relation.
|
|
484
|
+
* Must be called within a `Relation.update` callback.
|
|
478
485
|
*
|
|
479
486
|
* NOTE: TypeScript's structural typing allows readonly objects to be passed to `Mutable<T>`
|
|
480
487
|
* parameters, so there is no compile-time error. Enforcement is runtime-only.
|
package/src/SchemaRegistry.ts
CHANGED
package/src/Tag.ts
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
+
// @import-as-namespace
|
|
6
|
+
|
|
5
7
|
import * as Schema from 'effect/Schema';
|
|
6
8
|
|
|
7
9
|
import * as internal from './internal';
|
|
@@ -13,7 +15,7 @@ export const Tag = Schema.Struct({
|
|
|
13
15
|
hue: Schema.optional(Schema.String), // TODO(burdon): Color name?
|
|
14
16
|
}).pipe(
|
|
15
17
|
Type.object({
|
|
16
|
-
typename: 'dxos.
|
|
18
|
+
typename: 'org.dxos.type.tag',
|
|
17
19
|
version: '0.1.0',
|
|
18
20
|
}),
|
|
19
21
|
internal.LabelAnnotation.set(['label']),
|
package/src/Type.ts
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
+
// @import-as-namespace
|
|
6
|
+
|
|
5
7
|
import type * as Schema from 'effect/Schema';
|
|
6
8
|
|
|
7
9
|
import { type EncodedReference } from '@dxos/echo-protocol';
|
|
@@ -9,20 +11,21 @@ import { invariant } from '@dxos/invariant';
|
|
|
9
11
|
import { type DXN } from '@dxos/keys';
|
|
10
12
|
import { type ToMutable } from '@dxos/util';
|
|
11
13
|
|
|
12
|
-
import type * as
|
|
14
|
+
import type * as Entity from './Entity';
|
|
13
15
|
import * as internal from './internal';
|
|
16
|
+
import * as typeInternal from './internal/Type';
|
|
14
17
|
import type * as ObjModule from './Obj';
|
|
15
18
|
import type * as RelationModule from './Relation';
|
|
16
19
|
|
|
17
20
|
/**
|
|
18
21
|
* Dynamic type that can be constructed, mutated, and persisted in the ECHO database.
|
|
19
22
|
*/
|
|
20
|
-
export const RuntimeType =
|
|
23
|
+
export const RuntimeType = typeInternal.EchoSchema;
|
|
21
24
|
|
|
22
25
|
/**
|
|
23
26
|
* Dynamic type that can be constructed, mutated, and persisted in the ECHO database.
|
|
24
27
|
*/
|
|
25
|
-
export type RuntimeType =
|
|
28
|
+
export type RuntimeType = typeInternal.EchoSchema;
|
|
26
29
|
|
|
27
30
|
//
|
|
28
31
|
// Internal types (not exported)
|
|
@@ -61,7 +64,7 @@ export interface Obj<T, Fields extends Schema.Struct.Fields = Schema.Struct.Fiel
|
|
|
61
64
|
EchoSchemaKind<internal.EntityKind.Object>,
|
|
62
65
|
Schema.AnnotableClass<
|
|
63
66
|
Obj<T, Fields>,
|
|
64
|
-
|
|
67
|
+
Entity.OfKind<typeof Entity.Kind.Object> & T,
|
|
65
68
|
Schema.Simplify<ObjModule.BaseObjJson & ToMutable<T>>,
|
|
66
69
|
never
|
|
67
70
|
> {
|
|
@@ -97,7 +100,7 @@ export type AnyObj = ObjectSchemaBase;
|
|
|
97
100
|
* ```ts
|
|
98
101
|
* const Person = Schema.Struct({
|
|
99
102
|
* name: Schema.String,
|
|
100
|
-
* }).pipe(Type.object({ typename: 'example.
|
|
103
|
+
* }).pipe(Type.object({ typename: 'com.example.type.person', version: '0.1.0' }));
|
|
101
104
|
* ```
|
|
102
105
|
*/
|
|
103
106
|
export const object: {
|
|
@@ -108,7 +111,7 @@ export const object: {
|
|
|
108
111
|
// PersistentType (Schema stored in database)
|
|
109
112
|
//
|
|
110
113
|
|
|
111
|
-
export const PersistentType: Obj<
|
|
114
|
+
export const PersistentType: Obj<typeInternal.PersistentSchema> = typeInternal.PersistentSchema as any;
|
|
112
115
|
|
|
113
116
|
export interface PersistentType extends Schema.Schema.Type<typeof PersistentType> {}
|
|
114
117
|
|
|
@@ -124,7 +127,7 @@ export interface Relation<T, Source, Target, Fields extends Schema.Struct.Fields
|
|
|
124
127
|
EchoSchemaKind<internal.EntityKind.Relation>,
|
|
125
128
|
Schema.AnnotableClass<
|
|
126
129
|
Relation<T, Source, Target, Fields>,
|
|
127
|
-
|
|
130
|
+
Entity.OfKind<typeof Entity.Kind.Relation> & RelationModule.Endpoints<Source, Target> & T,
|
|
128
131
|
Schema.Simplify<RelationModule.BaseRelationJson & ToMutable<T>>,
|
|
129
132
|
never
|
|
130
133
|
> {
|
|
@@ -161,7 +164,7 @@ export type AnyRelation = RelationSchemaBase;
|
|
|
161
164
|
* const WorksFor = Schema.Struct({
|
|
162
165
|
* role: Schema.String,
|
|
163
166
|
* }).pipe(Type.relation({
|
|
164
|
-
* typename: 'example.
|
|
167
|
+
* typename: 'com.example.type.works-for',
|
|
165
168
|
* version: '0.1.0',
|
|
166
169
|
* source: Person,
|
|
167
170
|
* target: Company,
|
|
@@ -211,7 +214,7 @@ export type AnyRef = Schema.Schema<internal.Ref<any>, EncodedReference>;
|
|
|
211
214
|
/**
|
|
212
215
|
* Gets the full DXN of the schema.
|
|
213
216
|
* Will include the version if it's a `type` DXN.
|
|
214
|
-
* @example "dxn:example.
|
|
217
|
+
* @example "dxn:com.example.type.person:0.1.0"
|
|
215
218
|
* @example "dxn:echo:SSSSSSSSSS:XXXXXXXXXXXXX"
|
|
216
219
|
*/
|
|
217
220
|
export const getDXN = (schema: AnyEntity): DXN | undefined => {
|
|
@@ -220,7 +223,7 @@ export const getDXN = (schema: AnyEntity): DXN | undefined => {
|
|
|
220
223
|
|
|
221
224
|
/**
|
|
222
225
|
* @param schema - Schema to get the typename from.
|
|
223
|
-
* @returns The typename of the schema. Example: `example.
|
|
226
|
+
* @returns The typename of the schema. Example: `com.example.type.person`.
|
|
224
227
|
*/
|
|
225
228
|
export const getTypename = (schema: AnyEntity): string => {
|
|
226
229
|
const typename = internal.getSchemaTypename(schema);
|
|
@@ -241,7 +244,7 @@ export const getVersion = (schema: AnyEntity): string => {
|
|
|
241
244
|
/**
|
|
242
245
|
* @returns True if the schema is mutable.
|
|
243
246
|
*/
|
|
244
|
-
export const isMutable =
|
|
247
|
+
export const isMutable = typeInternal.isMutable;
|
|
245
248
|
|
|
246
249
|
/**
|
|
247
250
|
* ECHO type metadata.
|
package/src/View.ts
CHANGED
|
@@ -2,12 +2,15 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
+
// @import-as-namespace
|
|
6
|
+
|
|
5
7
|
import * as Schema from 'effect/Schema';
|
|
6
8
|
|
|
7
9
|
import { QueryAST } from '@dxos/echo-protocol';
|
|
8
10
|
import { JsonPath } from '@dxos/effect';
|
|
9
11
|
import { PublicKey } from '@dxos/keys';
|
|
10
12
|
|
|
13
|
+
import * as Annotation from './Annotation';
|
|
11
14
|
import * as Filter from './Filter';
|
|
12
15
|
import * as internal from './internal';
|
|
13
16
|
import * as Obj from './Obj';
|
|
@@ -73,10 +76,14 @@ const ViewSchema = Schema.Struct({
|
|
|
73
76
|
projection: Projection,
|
|
74
77
|
}).pipe(
|
|
75
78
|
Type.object({
|
|
76
|
-
typename: 'dxos.
|
|
77
|
-
version: '0.
|
|
79
|
+
typename: 'org.dxos.type.view',
|
|
80
|
+
version: '0.1.0',
|
|
78
81
|
}),
|
|
79
82
|
internal.SystemTypeAnnotation.set(true),
|
|
83
|
+
Annotation.IconAnnotation.set({
|
|
84
|
+
icon: 'ph--funnel--regular',
|
|
85
|
+
hue: 'green',
|
|
86
|
+
}),
|
|
80
87
|
);
|
|
81
88
|
|
|
82
89
|
export interface View extends Schema.Schema.Type<typeof ViewSchema> {}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2026 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { describe, test } from 'vitest';
|
|
6
|
+
|
|
7
|
+
import * as Obj from './Obj';
|
|
8
|
+
import { TestSchema } from './testing';
|
|
9
|
+
import type * as Type from './Type';
|
|
10
|
+
|
|
11
|
+
describe('Exemplars', () => {
|
|
12
|
+
test('factory', ({ expect }) => {
|
|
13
|
+
const factory = <S extends Type.AnyObj>(schema: S) => {
|
|
14
|
+
return (props: Obj.MakeProps<S>) => Obj.make(schema, props);
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
const makePerson = factory(TestSchema.Person);
|
|
18
|
+
const person = makePerson({ name: 'John Doe' });
|
|
19
|
+
expect(person.name).toBe('John Doe');
|
|
20
|
+
});
|
|
21
|
+
});
|
package/src/index.ts
CHANGED
|
@@ -9,13 +9,16 @@ export { DXN } from '@dxos/keys';
|
|
|
9
9
|
export * as Annotation from './Annotation';
|
|
10
10
|
export * as Database from './Database';
|
|
11
11
|
export * as Entity from './Entity';
|
|
12
|
+
// TODO(burdon): Rename to Error (less problematic than Obj/Object).
|
|
12
13
|
export * as Err from './Err';
|
|
13
14
|
export * as Feed from './Feed';
|
|
14
15
|
export * as Filter from './Filter';
|
|
15
16
|
export * as Format from './Format';
|
|
16
17
|
export * as Hypergraph from './Hypergraph';
|
|
18
|
+
export * as Json from './Json';
|
|
17
19
|
export * as JsonSchema from './JsonSchema';
|
|
18
20
|
export * as Key from './Key';
|
|
21
|
+
export * as Migration from './Migration';
|
|
19
22
|
export * as Obj from './Obj';
|
|
20
23
|
export * as Order from './Order';
|
|
21
24
|
export * as Query from './Query';
|
|
@@ -28,3 +31,4 @@ export * as Type from './Type';
|
|
|
28
31
|
export * as Collection from './Collection';
|
|
29
32
|
export * as View from './View';
|
|
30
33
|
export * as Dataset from './Dataset';
|
|
34
|
+
export * as Extension from './Extension';
|
|
@@ -5,8 +5,7 @@
|
|
|
5
5
|
import * as Schema from 'effect/Schema';
|
|
6
6
|
import { describe, test } from 'vitest';
|
|
7
7
|
|
|
8
|
-
import { EchoObjectSchema } from '../
|
|
9
|
-
|
|
8
|
+
import { EchoObjectSchema } from '../Entity';
|
|
10
9
|
import { LabelAnnotation, TypenameSchema, VersionSchema, getLabelWithSchema } from './annotations';
|
|
11
10
|
|
|
12
11
|
// TODO(dmaretskyi): Use one of the testing schemas.
|
|
@@ -20,7 +19,7 @@ type TestObject = Schema.Schema.Type<typeof TestObject>;
|
|
|
20
19
|
|
|
21
20
|
const TestEchoSchema = TestObject.pipe(
|
|
22
21
|
EchoObjectSchema({
|
|
23
|
-
typename: 'dxos.
|
|
22
|
+
typename: 'org.dxos.type.test',
|
|
24
23
|
version: '0.1.0',
|
|
25
24
|
}),
|
|
26
25
|
);
|
|
@@ -30,10 +29,10 @@ type TestEchoSchema = Schema.Schema.Type<typeof TestEchoSchema>;
|
|
|
30
29
|
describe('annotations', () => {
|
|
31
30
|
describe('Typename', () => {
|
|
32
31
|
test('should validate typename', ({ expect }) => {
|
|
33
|
-
// Valid.
|
|
34
|
-
expect(TypenameSchema.make('dxos.
|
|
35
|
-
expect(TypenameSchema.make('dxos.
|
|
36
|
-
expect(TypenameSchema.make('dxos.
|
|
32
|
+
// Valid (reverse-DNS format).
|
|
33
|
+
expect(TypenameSchema.make('org.dxos.type.foo')).to.exist;
|
|
34
|
+
expect(TypenameSchema.make('org.dxos.type.fooBar')).to.exist;
|
|
35
|
+
expect(TypenameSchema.make('org.dxos.type.foobar')).to.exist;
|
|
37
36
|
|
|
38
37
|
// Invalid.
|
|
39
38
|
expect(() => TypenameSchema.make('dxn:dxos.org')).to.throw();
|
|
@@ -82,6 +81,56 @@ describe('annotations', () => {
|
|
|
82
81
|
expect(getLabelWithSchema(TestObject, obj)).toBeUndefined();
|
|
83
82
|
});
|
|
84
83
|
|
|
84
|
+
test('should skip empty string and fallback to next path', ({ expect }) => {
|
|
85
|
+
const obj: TestObject = {
|
|
86
|
+
name: '',
|
|
87
|
+
fallbackName: 'Fallback Name',
|
|
88
|
+
other: 'Other',
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
expect(getLabelWithSchema(TestObject, obj)).toEqual('Fallback Name');
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
test('should skip whitespace-only string and fallback to next path', ({ expect }) => {
|
|
95
|
+
const obj: TestObject = {
|
|
96
|
+
name: ' ',
|
|
97
|
+
fallbackName: 'Fallback Name',
|
|
98
|
+
other: 'Other',
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
expect(getLabelWithSchema(TestObject, obj)).toEqual('Fallback Name');
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
test('should return undefined if all paths are empty strings', ({ expect }) => {
|
|
105
|
+
const obj: TestObject = {
|
|
106
|
+
name: '',
|
|
107
|
+
fallbackName: '',
|
|
108
|
+
other: 'Other',
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
expect(getLabelWithSchema(TestObject, obj)).toBeUndefined();
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
test('should return undefined if all paths are whitespace-only', ({ expect }) => {
|
|
115
|
+
const obj: TestObject = {
|
|
116
|
+
name: ' ',
|
|
117
|
+
fallbackName: '\t\n',
|
|
118
|
+
other: 'Other',
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
expect(getLabelWithSchema(TestObject, obj)).toBeUndefined();
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
test('should preserve original string with leading/trailing whitespace when valid', ({ expect }) => {
|
|
125
|
+
const obj: TestObject = {
|
|
126
|
+
name: ' Valid Name ',
|
|
127
|
+
fallbackName: 'Fallback Name',
|
|
128
|
+
other: 'Other',
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
expect(getLabelWithSchema(TestObject, obj)).toEqual(' Valid Name ');
|
|
132
|
+
});
|
|
133
|
+
|
|
85
134
|
test('should return label from echo object', ({ expect }) => {
|
|
86
135
|
const obj: TestEchoSchema = {
|
|
87
136
|
id: 'test',
|
|
@@ -13,8 +13,8 @@ import { assertArgument, invariant } from '@dxos/invariant';
|
|
|
13
13
|
import { DXN } from '@dxos/keys';
|
|
14
14
|
import { type Primitive } from '@dxos/util';
|
|
15
15
|
|
|
16
|
-
import { type
|
|
17
|
-
|
|
16
|
+
import { type Mutable } from '../common/proxy';
|
|
17
|
+
import { type AnyProperties, EntityKind, TypeId, getSchema } from '../common/types';
|
|
18
18
|
import { type AnnotationHelper, createAnnotationHelper } from './util';
|
|
19
19
|
|
|
20
20
|
/**
|
|
@@ -87,16 +87,17 @@ export const getTypeDXNFromSpecifier = (input: Schema.Schema.All | string): DXN
|
|
|
87
87
|
|
|
88
88
|
/**
|
|
89
89
|
* Fully qualified globally unique typename.
|
|
90
|
-
* Example: `dxos.
|
|
91
|
-
*/
|
|
92
|
-
// TODO(
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
90
|
+
* Example: `org.dxos.type.message`
|
|
91
|
+
*/
|
|
92
|
+
// TODO(wittjosiah): Factor out to DXN spec.
|
|
93
|
+
export const TypenameSchema = Schema.String.pipe(
|
|
94
|
+
Schema.pattern(
|
|
95
|
+
/^[a-zA-Z]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(\.[a-zA-Z]([a-zA-Z0-9]{0,62})?)$/,
|
|
96
|
+
),
|
|
97
|
+
).annotations({
|
|
98
|
+
description: 'Fully qualified globally unique typename in reverse-DNS form.',
|
|
99
|
+
example: 'org.dxos.type.message',
|
|
100
|
+
});
|
|
100
101
|
|
|
101
102
|
/**
|
|
102
103
|
* Semantic version format: `major.minor.patch`
|
|
@@ -175,7 +176,7 @@ export const getSchemaVersion = (schema: Schema.Schema.All): string | undefined
|
|
|
175
176
|
/**
|
|
176
177
|
* Gets the typename of the object without the version.
|
|
177
178
|
* Returns only the name portion, not the DXN.
|
|
178
|
-
* @example "example.
|
|
179
|
+
* @example "org.example.type.contact"
|
|
179
180
|
*
|
|
180
181
|
* @internal (use Obj.getTypename)
|
|
181
182
|
*/
|
|
@@ -207,7 +208,7 @@ export const setTypename = (obj: any, typename: DXN): void => {
|
|
|
207
208
|
/**
|
|
208
209
|
* @returns Object type as {@link DXN}.
|
|
209
210
|
* @returns undefined if the object doesn't have a type.
|
|
210
|
-
* @example `dxn:example.
|
|
211
|
+
* @example `dxn:com.example.type.person:1.0.0`
|
|
211
212
|
*
|
|
212
213
|
* @internal (use Obj.getTypeDXN)
|
|
213
214
|
*/
|
|
@@ -337,6 +338,7 @@ export const LabelAnnotation = createAnnotationHelper<string[]>(LabelAnnotationI
|
|
|
337
338
|
/**
|
|
338
339
|
* Returns the label for a given object based on {@link LabelAnnotationId}.
|
|
339
340
|
* Lower-level version that requires explicit schema parameter.
|
|
341
|
+
* Skips empty strings and whitespace-only strings, continuing to the next field.
|
|
340
342
|
*/
|
|
341
343
|
// TODO(burdon): Convert to JsonPath?
|
|
342
344
|
export const getLabelWithSchema = <S extends Schema.Schema.Any>(
|
|
@@ -352,7 +354,13 @@ export const getLabelWithSchema = <S extends Schema.Schema.Any>(
|
|
|
352
354
|
);
|
|
353
355
|
const value = getField(object, accessor as JsonPath);
|
|
354
356
|
switch (typeof value) {
|
|
355
|
-
case 'string':
|
|
357
|
+
case 'string': {
|
|
358
|
+
const trimmed = value.trim();
|
|
359
|
+
if (trimmed.length > 0) {
|
|
360
|
+
return value;
|
|
361
|
+
}
|
|
362
|
+
continue;
|
|
363
|
+
}
|
|
356
364
|
case 'number':
|
|
357
365
|
case 'boolean':
|
|
358
366
|
case 'bigint':
|
|
@@ -435,7 +443,6 @@ export const setDescriptionWithSchema = <S extends Schema.Schema.Any>(
|
|
|
435
443
|
* Identifies if a property should be included in a form or not.
|
|
436
444
|
* By default, all properties are included in forms, so this is opt-out.
|
|
437
445
|
*/
|
|
438
|
-
// TODO(burdon): UI concern.
|
|
439
446
|
export const FormInputAnnotationId = Symbol.for('@dxos/schema/annotation/FormInput');
|
|
440
447
|
export const FormInputAnnotation = createAnnotationHelper<boolean>(FormInputAnnotationId);
|
|
441
448
|
|
|
@@ -467,14 +474,14 @@ interface MakeAnnoationsProps<T> {
|
|
|
467
474
|
// TODO(wittjosiah): Comment.
|
|
468
475
|
export const makeUserAnnotation = <T>(props: MakeAnnoationsProps<T>): AnnotationHelper<T> => {
|
|
469
476
|
assertArgument(
|
|
470
|
-
|
|
477
|
+
/^[a-z][a-z0-9]*(\.[a-z][a-z0-9-]*){2,}$/.test(props.id),
|
|
471
478
|
'id',
|
|
472
|
-
'Annotation id must be in the FQN format (dxos.
|
|
479
|
+
'Annotation id must be in the FQN format (org.dxos.annotation.example).',
|
|
473
480
|
);
|
|
474
481
|
|
|
475
482
|
const getFromAst = (ast: SchemaAST.AST) =>
|
|
476
483
|
SchemaAST.getAnnotation<PropertyMetaAnnotation>(PropertyMetaAnnotationId)(ast).pipe(
|
|
477
|
-
Option.
|
|
484
|
+
Option.flatMap((meta) => Option.fromNullable(meta[props.id])),
|
|
478
485
|
Option.map(Schema.decodeUnknownSync(props.schema)),
|
|
479
486
|
);
|
|
480
487
|
|
|
@@ -521,6 +528,50 @@ export interface IconAnnotation extends Schema.Schema.Type<typeof IconAnnotation
|
|
|
521
528
|
* Icon to render in the UI.
|
|
522
529
|
*/
|
|
523
530
|
export const IconAnnotation = makeUserAnnotation<IconAnnotation>({
|
|
524
|
-
id: 'dxos.
|
|
531
|
+
id: 'org.dxos.annotation.icon',
|
|
525
532
|
schema: IconAnnotationSchema,
|
|
526
533
|
});
|
|
534
|
+
|
|
535
|
+
/**
|
|
536
|
+
* Get the label of an entity.
|
|
537
|
+
* Accepts both reactive entities and snapshots.
|
|
538
|
+
*/
|
|
539
|
+
export const getLabel = (entity: AnyProperties): string | undefined => {
|
|
540
|
+
const schema = getSchema(entity);
|
|
541
|
+
if (schema != null) {
|
|
542
|
+
return getLabelWithSchema(schema, entity);
|
|
543
|
+
}
|
|
544
|
+
};
|
|
545
|
+
|
|
546
|
+
/**
|
|
547
|
+
* Set the label of an entity.
|
|
548
|
+
* Must be called within an Obj.update or Relation.update callback.
|
|
549
|
+
*/
|
|
550
|
+
export const setLabel = (entity: Mutable<AnyProperties>, label: string) => {
|
|
551
|
+
const schema = getSchema(entity);
|
|
552
|
+
if (schema != null) {
|
|
553
|
+
setLabelWithSchema(schema, entity, label);
|
|
554
|
+
}
|
|
555
|
+
};
|
|
556
|
+
|
|
557
|
+
/**
|
|
558
|
+
* Get the description of an entity.
|
|
559
|
+
* Accepts both reactive entities and snapshots.
|
|
560
|
+
*/
|
|
561
|
+
export const getDescription = (entity: AnyProperties): string | undefined => {
|
|
562
|
+
const schema = getSchema(entity);
|
|
563
|
+
if (schema != null) {
|
|
564
|
+
return getDescriptionWithSchema(schema, entity);
|
|
565
|
+
}
|
|
566
|
+
};
|
|
567
|
+
|
|
568
|
+
/**
|
|
569
|
+
* Set the description of an entity.
|
|
570
|
+
* Must be called within an Obj.update or Relation.update callback.
|
|
571
|
+
*/
|
|
572
|
+
export const setDescription = (entity: Mutable<AnyProperties>, description: string) => {
|
|
573
|
+
const schema = getSchema(entity);
|
|
574
|
+
if (schema != null) {
|
|
575
|
+
setDescriptionWithSchema(schema, entity, description);
|
|
576
|
+
}
|
|
577
|
+
};
|
|
@@ -2,10 +2,8 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
7
|
-
|
|
8
|
-
import { getLabel } from './annotations';
|
|
5
|
+
import type { AnyEntity } from '../common/types';
|
|
6
|
+
import { getLabel, getTypename } from './annotations';
|
|
9
7
|
|
|
10
8
|
/**
|
|
11
9
|
* String comparison helper for sorting.
|
|
@@ -9,7 +9,7 @@ import * as SchemaAST from 'effect/SchemaAST';
|
|
|
9
9
|
import { assertArgument } from '@dxos/invariant';
|
|
10
10
|
import { DXN } from '@dxos/keys';
|
|
11
11
|
|
|
12
|
-
import { EntityKind } from '../types';
|
|
12
|
+
import { EntityKind } from '../common/types';
|
|
13
13
|
|
|
14
14
|
export interface AnnotationHelper<T> {
|
|
15
15
|
/**
|
|
@@ -6,8 +6,9 @@ import { invariant } from '@dxos/invariant';
|
|
|
6
6
|
import { type DXN } from '@dxos/keys';
|
|
7
7
|
import { assumeType } from '@dxos/util';
|
|
8
8
|
|
|
9
|
-
import
|
|
10
|
-
import type
|
|
9
|
+
import type { AnyEntity } from '../common/types';
|
|
10
|
+
import { type InternalObjectProps, ObjectDatabaseId } from './model';
|
|
11
|
+
import { getObjectDXN } from './util';
|
|
11
12
|
|
|
12
13
|
/**
|
|
13
14
|
* Get the DXN of an entity.
|