@dxos/echo 0.8.4-main.ef1bc66f44 → 0.8.4-main.effb148878
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +102 -5
- package/README.md +9 -9
- package/dist/lib/neutral/Annotation.mjs +7 -3
- package/dist/lib/neutral/Database.mjs +8 -4
- package/dist/lib/neutral/Entity.mjs +35 -18
- package/dist/lib/neutral/Err.mjs +3 -1
- package/dist/lib/neutral/Extension.mjs +18 -0
- package/dist/lib/neutral/Extension.mjs.map +7 -0
- package/dist/lib/neutral/Feed.mjs +54 -0
- package/dist/lib/neutral/Feed.mjs.map +7 -0
- package/dist/lib/neutral/Filter.mjs +25 -12
- package/dist/lib/neutral/Format.mjs +23 -3
- package/dist/lib/neutral/JsonSchema.mjs +9 -9
- package/dist/lib/neutral/Key.mjs +7 -3
- package/dist/lib/neutral/Migration.mjs +18 -0
- package/dist/lib/neutral/Migration.mjs.map +7 -0
- package/dist/lib/neutral/Obj.mjs +41 -23
- package/dist/lib/neutral/Order.mjs +1 -1
- package/dist/lib/neutral/Query.mjs +21 -9
- package/dist/lib/neutral/QueryResult.mjs +1 -1
- package/dist/lib/neutral/Ref.mjs +13 -9
- package/dist/lib/neutral/Relation.mjs +34 -23
- package/dist/lib/neutral/SchemaRegistry.mjs +1 -1
- package/dist/lib/neutral/Tag.mjs +14 -10
- package/dist/lib/neutral/Type.mjs +52 -36
- package/dist/lib/neutral/{chunk-K5K3Z62A.mjs → chunk-4SYHDOQA.mjs} +14 -6
- package/dist/lib/neutral/chunk-4SYHDOQA.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-XAJMXQ4H.mjs → chunk-4U7OD55H.mjs} +6 -2
- package/dist/lib/neutral/chunk-4U7OD55H.mjs.map +7 -0
- package/dist/lib/neutral/chunk-52NG2XEE.mjs +34 -0
- package/dist/lib/neutral/chunk-52NG2XEE.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-KB7RIVLK.mjs → chunk-A5HDDVKS.mjs} +33 -6
- package/dist/lib/neutral/chunk-A5HDDVKS.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-DLPC7DHQ.mjs → chunk-EZ4XJFHJ.mjs} +9 -11
- package/dist/lib/neutral/chunk-EZ4XJFHJ.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-ZAHWXGK4.mjs → chunk-F625JEZB.mjs} +97 -19
- package/dist/lib/neutral/chunk-F625JEZB.mjs.map +7 -0
- package/dist/lib/neutral/chunk-FFCN66OF.mjs +420 -0
- package/dist/lib/neutral/chunk-FFCN66OF.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-RPB6V4BE.mjs → chunk-GOHDOJE3.mjs} +16 -3
- package/dist/lib/neutral/chunk-GOHDOJE3.mjs.map +7 -0
- package/dist/lib/neutral/chunk-GWFFC34K.mjs +50 -0
- package/dist/lib/neutral/chunk-GWFFC34K.mjs.map +7 -0
- package/dist/lib/neutral/chunk-J7QWJQQV.mjs +318 -0
- package/dist/lib/neutral/chunk-J7QWJQQV.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-QARLJVDB.mjs → chunk-JTHNDGAR.mjs} +8 -4
- package/dist/lib/neutral/chunk-JTHNDGAR.mjs.map +7 -0
- package/dist/lib/neutral/chunk-K5RH2PBH.mjs +361 -0
- package/dist/lib/neutral/chunk-K5RH2PBH.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-RIMHNJ3E.mjs → chunk-KHRAQDYX.mjs} +138 -91
- package/dist/lib/neutral/chunk-KHRAQDYX.mjs.map +7 -0
- package/dist/lib/neutral/chunk-L65CW5EI.mjs +156 -0
- package/dist/lib/neutral/chunk-L65CW5EI.mjs.map +7 -0
- package/dist/lib/neutral/chunk-LNZIPZX6.mjs +2186 -0
- package/dist/lib/neutral/chunk-LNZIPZX6.mjs.map +7 -0
- package/dist/lib/neutral/chunk-MPXUNTME.mjs +41 -0
- package/dist/lib/neutral/chunk-MPXUNTME.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-7WE7SBA2.mjs → chunk-O2EOH7XQ.mjs} +152 -134
- package/dist/lib/neutral/chunk-O2EOH7XQ.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-MTEHHY62.mjs → chunk-Q7ID37KF.mjs} +121 -94
- package/dist/lib/neutral/chunk-Q7ID37KF.mjs.map +7 -0
- package/dist/lib/neutral/chunk-QLYEQ5VA.mjs +205 -0
- package/dist/lib/neutral/chunk-QLYEQ5VA.mjs.map +7 -0
- package/dist/lib/neutral/chunk-SSDGRJ3A.mjs +747 -0
- package/dist/lib/neutral/chunk-SSDGRJ3A.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-ROKO4RKJ.mjs → chunk-TTCSATUD.mjs} +2 -2
- package/dist/lib/neutral/chunk-TTCSATUD.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-ANHVGJI4.mjs → chunk-UEFRFUYC.mjs} +8 -4
- package/dist/lib/neutral/chunk-UEFRFUYC.mjs.map +7 -0
- package/dist/lib/neutral/chunk-UN7K472Q.mjs +132 -0
- package/dist/lib/neutral/chunk-UN7K472Q.mjs.map +7 -0
- package/dist/lib/neutral/chunk-UQAMAXDU.mjs +243 -0
- package/dist/lib/neutral/chunk-UQAMAXDU.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-4L6DOFXP.mjs → chunk-V5NE2X7Y.mjs} +1 -1
- package/dist/lib/neutral/chunk-V5NE2X7Y.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-OMUPQMLR.mjs → chunk-V72DY6LU.mjs} +1 -1
- package/dist/lib/neutral/chunk-ZII2BGPM.mjs +269 -0
- package/dist/lib/neutral/chunk-ZII2BGPM.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-N2QNHMT5.mjs → chunk-ZM7VFIS2.mjs} +22 -2
- package/dist/lib/neutral/chunk-ZM7VFIS2.mjs.map +7 -0
- package/dist/lib/neutral/index.mjs +56 -29
- package/dist/lib/neutral/internal/index.mjs +128 -77
- package/dist/lib/neutral/meta.json +1 -1
- package/dist/lib/neutral/testing/index.mjs +226 -174
- package/dist/lib/neutral/testing/index.mjs.map +3 -3
- 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 +15 -0
- package/dist/types/src/Collection.d.ts.map +1 -0
- package/dist/types/src/Database.d.ts +27 -42
- package/dist/types/src/Database.d.ts.map +1 -1
- package/dist/types/src/Dataset.d.ts +29 -0
- package/dist/types/src/Dataset.d.ts.map +1 -0
- package/dist/types/src/Entity.d.ts +123 -29
- package/dist/types/src/Entity.d.ts.map +1 -1
- package/dist/types/src/Err.d.ts +56 -13
- 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 +229 -0
- package/dist/types/src/Feed.d.ts.map +1 -0
- package/dist/types/src/Filter.d.ts +74 -11
- 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 +3 -3
- package/dist/types/src/Format.d.ts.map +1 -1
- package/dist/types/src/Hypergraph.d.ts +15 -10
- 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 +11 -4
- package/dist/types/src/JsonSchema.d.ts.map +1 -1
- package/dist/types/src/Key.d.ts +1 -1
- package/dist/types/src/Key.d.ts.map +1 -1
- package/dist/types/src/Migration.d.ts +72 -0
- package/dist/types/src/Migration.d.ts.map +1 -0
- package/dist/types/src/Obj.d.ts +201 -77
- 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 +117 -17
- package/dist/types/src/Query.d.ts.map +1 -1
- package/dist/types/src/Ref.d.ts +66 -10
- package/dist/types/src/Ref.d.ts.map +1 -1
- package/dist/types/src/Relation.d.ts +127 -54
- package/dist/types/src/Relation.d.ts.map +1 -1
- package/dist/types/src/SchemaRegistry.d.ts +12 -13
- package/dist/types/src/SchemaRegistry.d.ts.map +1 -1
- package/dist/types/src/Tag.d.ts +4 -3
- package/dist/types/src/Tag.d.ts.map +1 -1
- package/dist/types/src/Type.d.ts +337 -218
- package/dist/types/src/Type.d.ts.map +1 -1
- package/dist/types/src/View.d.ts +65 -0
- package/dist/types/src/View.d.ts.map +1 -0
- package/dist/types/src/exemplars.test.d.ts +2 -0
- package/dist/types/src/exemplars.test.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +8 -1
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/internal/{annotations → Annotation}/annotations.d.ts +98 -24
- 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 +15 -6
- package/dist/types/src/internal/Annotation/util.d.ts.map +1 -0
- package/dist/types/src/internal/Entity/api.d.ts +13 -0
- package/dist/types/src/internal/Entity/api.d.ts.map +1 -0
- package/dist/types/src/internal/Entity/entity.d.ts +67 -0
- package/dist/types/src/internal/Entity/entity.d.ts.map +1 -0
- package/dist/types/src/internal/Entity/index.d.ts +10 -0
- package/dist/types/src/internal/Entity/index.d.ts.map +1 -0
- package/dist/types/src/internal/Entity/model.d.ts +57 -0
- package/dist/types/src/internal/Entity/model.d.ts.map +1 -0
- package/dist/types/src/internal/{entities → Entity}/object.d.ts +3 -3
- package/dist/types/src/internal/Entity/object.d.ts.map +1 -0
- package/dist/types/src/internal/Entity/relation.d.ts +51 -0
- package/dist/types/src/internal/Entity/relation.d.ts.map +1 -0
- package/dist/types/src/internal/Entity/type-kind.d.ts +24 -0
- package/dist/types/src/internal/Entity/type-kind.d.ts.map +1 -0
- package/dist/types/src/internal/Entity/type-uri.d.ts +25 -0
- package/dist/types/src/internal/Entity/type-uri.d.ts.map +1 -0
- package/dist/types/src/internal/Entity/util.d.ts.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/{formats → Format}/format.d.ts +2 -1
- package/dist/types/src/internal/Format/format.d.ts.map +1 -0
- package/dist/types/src/internal/Format/format.test.d.ts.map +1 -0
- package/dist/types/src/internal/{formats → Format}/index.d.ts +2 -2
- package/dist/types/src/internal/Format/index.d.ts.map +1 -0
- package/dist/types/src/internal/Format/number.d.ts.map +1 -0
- package/dist/types/src/internal/Format/object.d.ts.map +1 -0
- package/dist/types/src/internal/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 +37 -37
- 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 +3 -2
- 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 +10 -12
- 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/{object → Obj}/index.d.ts +0 -1
- 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 +16 -8
- 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 +5 -5
- 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 +42 -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/{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/Type/index.d.ts +3 -0
- package/dist/types/src/internal/Type/index.d.ts.map +1 -0
- package/dist/types/src/internal/{schema → Type}/manipulation.d.ts +0 -1
- package/dist/types/src/internal/Type/manipulation.d.ts.map +1 -0
- package/dist/types/src/internal/Type/type-schema.d.ts +52 -0
- package/dist/types/src/internal/Type/type-schema.d.ts.map +1 -0
- package/dist/types/src/internal/{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 +19 -0
- package/dist/types/src/internal/common/proxy/make-object.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/ownership.d.ts.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/{proxy → common/proxy}/typed-handler.d.ts +18 -2
- 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/{types → common/types}/base.d.ts +1 -0
- package/dist/types/src/internal/common/types/base.d.ts.map +1 -0
- package/dist/types/src/internal/common/types/entity.d.ts +94 -0
- package/dist/types/src/internal/common/types/entity.d.ts.map +1 -0
- package/dist/types/src/internal/{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 +12 -1
- package/dist/types/src/internal/common/types/meta.d.ts.map +1 -0
- package/dist/types/src/internal/common/types/model-symbols.d.ts +58 -0
- package/dist/types/src/internal/common/types/model-symbols.d.ts.map +1 -0
- package/dist/types/src/internal/{types → common/types}/typename.d.ts +7 -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 +2 -2
- 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 +8 -8
- package/dist/types/src/testing/test-data.d.ts.map +1 -1
- package/dist/types/src/testing/test-schema.d.ts +77 -82
- package/dist/types/src/testing/test-schema.d.ts.map +1 -1
- package/dist/types/src/testing/util.d.ts +5 -3
- package/dist/types/src/testing/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +30 -15
- package/src/Annotation.ts +7 -3
- package/src/Collection.ts +36 -0
- package/src/Database.ts +80 -77
- package/src/Dataset.ts +34 -0
- package/src/Entity.test.ts +116 -6
- package/src/Entity.ts +181 -66
- package/src/Err.ts +25 -3
- package/src/Extension.test.ts +235 -0
- package/src/Extension.ts +122 -0
- package/src/Feed.ts +356 -0
- package/src/Filter.test.ts +90 -0
- package/src/Filter.ts +152 -21
- package/src/Format.ts +3 -3
- package/src/Hypergraph.ts +16 -11
- package/src/Json.test.ts +175 -0
- package/src/Json.ts +103 -0
- package/src/JsonSchema.ts +14 -4
- package/src/Key.ts +1 -1
- package/src/Migration.ts +114 -0
- package/src/Obj.test.ts +158 -20
- package/src/Obj.ts +451 -183
- package/src/Order.ts +3 -1
- package/src/Query.test.ts +446 -89
- package/src/Query.ts +300 -35
- package/src/Ref.ts +83 -12
- package/src/Relation.test.ts +16 -10
- package/src/Relation.ts +236 -165
- package/src/SchemaRegistry.ts +13 -17
- package/src/Tag.ts +9 -9
- package/src/Type.test.ts +169 -24
- package/src/Type.ts +561 -354
- package/src/View.ts +101 -0
- package/src/exemplars.test.ts +21 -0
- package/src/index.ts +9 -2
- package/src/internal/Annotation/annotations.test.ts +165 -0
- package/src/internal/{annotations → Annotation}/annotations.ts +181 -101
- 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 +17 -9
- package/src/internal/{api/entity.ts → Entity/api.ts} +9 -8
- package/src/internal/Entity/entity.ts +246 -0
- package/src/internal/{entities → Entity}/index.ts +4 -0
- package/src/internal/{entities → Entity}/model.ts +42 -60
- package/src/internal/{entities → Entity}/object.ts +13 -6
- package/src/internal/Entity/relation.ts +179 -0
- package/src/internal/Entity/type-kind.ts +67 -0
- package/src/internal/Entity/type-uri.ts +87 -0
- package/src/internal/Entity/util.ts +34 -0
- package/src/internal/{api → Entity}/version.ts +2 -2
- package/src/internal/{formats → Format}/date.test.ts +1 -2
- package/src/internal/{formats → Format}/date.ts +0 -4
- package/src/internal/{formats → Format}/format.test.ts +1 -2
- package/src/internal/{formats → Format}/index.ts +2 -3
- 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 +64 -151
- package/src/internal/{json-schema → JsonSchema}/json-schema.ts +47 -28
- package/src/internal/{object → Obj}/clone.ts +10 -6
- package/src/internal/{object → Obj}/common.ts +2 -2
- package/src/internal/{object → Obj}/create-object.test.ts +13 -14
- package/src/internal/Obj/create-object.ts +135 -0
- package/src/internal/{object → Obj}/deleted.ts +2 -2
- package/src/internal/{object → Obj}/index.ts +0 -1
- package/src/internal/{object → Obj}/inspect.ts +3 -3
- package/src/internal/Obj/json-serializer.test.ts +185 -0
- package/src/internal/{object → Obj}/json-serializer.ts +108 -45
- package/src/internal/{object → Obj}/schema-validator.ts +1 -1
- package/src/internal/{object → Obj}/set-value.test.ts +31 -54
- package/src/internal/{object → Obj}/set-value.ts +3 -3
- package/src/internal/{object → Obj}/snapshot.ts +41 -23
- package/src/internal/Obj/typed-object.test.ts +32 -0
- package/src/internal/{object → Obj}/typed-object.ts +5 -5
- package/src/internal/Query.ts +156 -0
- package/src/internal/{ref → Ref}/ref-array.ts +1 -2
- package/src/internal/{ref → Ref}/ref.test.ts +16 -26
- package/src/internal/{ref → Ref}/ref.ts +117 -57
- package/src/internal/{schema → Type}/compose.test.ts +6 -5
- package/src/internal/{schema → Type}/compose.ts +1 -1
- package/src/internal/Type/index.ts +6 -0
- package/src/internal/{schema → Type}/manipulation.ts +0 -25
- package/src/internal/Type/type-schema.ts +60 -0
- package/src/internal/{README.md → common/README.md} +2 -2
- 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 +20 -14
- package/src/internal/{proxy → common/proxy}/make-object.ts +37 -15
- 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/common/proxy/schema.test.ts +107 -0
- package/src/internal/{proxy → common/proxy}/typed-handler.test.ts +15 -15
- package/src/internal/{proxy → common/proxy}/typed-handler.ts +75 -18
- package/src/internal/{proxy → common/proxy}/typed-object.test.ts +17 -30
- package/src/internal/{types → common/types}/base.ts +1 -1
- package/src/internal/common/types/entity.ts +133 -0
- package/src/internal/{types → common/types}/index.ts +1 -0
- package/src/internal/{types → common/types}/meta.ts +15 -1
- package/src/internal/common/types/model-symbols.ts +74 -0
- package/src/internal/common/types/typename.ts +91 -0
- package/src/internal/{types → common/types}/version.ts +2 -3
- package/src/internal/index.ts +9 -31
- package/src/testing/api.test.ts +15 -12
- package/src/testing/test-data.ts +158 -99
- package/src/testing/test-schema.ts +33 -67
- package/src/testing/util.ts +14 -11
- package/dist/lib/neutral/chunk-2AF5GMG6.mjs +0 -171
- package/dist/lib/neutral/chunk-2AF5GMG6.mjs.map +0 -7
- package/dist/lib/neutral/chunk-4L6DOFXP.mjs.map +0 -7
- package/dist/lib/neutral/chunk-7WE7SBA2.mjs.map +0 -7
- package/dist/lib/neutral/chunk-ANHVGJI4.mjs.map +0 -7
- package/dist/lib/neutral/chunk-DLPC7DHQ.mjs.map +0 -7
- package/dist/lib/neutral/chunk-EBUAT5ID.mjs +0 -229
- package/dist/lib/neutral/chunk-EBUAT5ID.mjs.map +0 -7
- package/dist/lib/neutral/chunk-K5K3Z62A.mjs.map +0 -7
- package/dist/lib/neutral/chunk-KB7RIVLK.mjs.map +0 -7
- package/dist/lib/neutral/chunk-LKFNEFHF.mjs +0 -130
- package/dist/lib/neutral/chunk-LKFNEFHF.mjs.map +0 -7
- package/dist/lib/neutral/chunk-MTEHHY62.mjs.map +0 -7
- package/dist/lib/neutral/chunk-N2QNHMT5.mjs.map +0 -7
- package/dist/lib/neutral/chunk-QARLJVDB.mjs.map +0 -7
- package/dist/lib/neutral/chunk-RIMHNJ3E.mjs.map +0 -7
- package/dist/lib/neutral/chunk-ROKO4RKJ.mjs.map +0 -7
- package/dist/lib/neutral/chunk-RPB6V4BE.mjs.map +0 -7
- package/dist/lib/neutral/chunk-TLGNKUUG.mjs +0 -3905
- package/dist/lib/neutral/chunk-TLGNKUUG.mjs.map +0 -7
- package/dist/lib/neutral/chunk-TQT6WTIJ.mjs +0 -142
- package/dist/lib/neutral/chunk-TQT6WTIJ.mjs.map +0 -7
- package/dist/lib/neutral/chunk-VUQGRDRI.mjs +0 -97
- package/dist/lib/neutral/chunk-VUQGRDRI.mjs.map +0 -7
- package/dist/lib/neutral/chunk-X2MPMYYN.mjs +0 -13
- package/dist/lib/neutral/chunk-X2MPMYYN.mjs.map +0 -7
- package/dist/lib/neutral/chunk-XAJMXQ4H.mjs.map +0 -7
- package/dist/lib/neutral/chunk-ZAHWXGK4.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 +0 -13
- 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 +0 -20
- package/dist/types/src/internal/entities/entity.d.ts.map +0 -1
- package/dist/types/src/internal/entities/index.d.ts +0 -6
- package/dist/types/src/internal/entities/index.d.ts.map +0 -1
- package/dist/types/src/internal/entities/model.d.ts +0 -79
- 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 +0 -62
- 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 +0 -6
- 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 +0 -14
- 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 +0 -181
- package/dist/types/src/internal/schema/echo-schema.d.ts.map +0 -1
- package/dist/types/src/internal/schema/index.d.ts +0 -4
- 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 +0 -20
- 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 +0 -37
- 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/annotations/annotations.test.ts +0 -96
- package/src/internal/api/annotations.ts +0 -60
- package/src/internal/entities/entity.ts +0 -126
- package/src/internal/entities/relation.ts +0 -171
- package/src/internal/entities/util.ts +0 -33
- package/src/internal/object/create-object.ts +0 -95
- package/src/internal/object/ids.ts +0 -12
- package/src/internal/object/json-serializer.test.ts +0 -98
- package/src/internal/object/typed-object.test.ts +0 -34
- package/src/internal/proxy/schema.test.ts +0 -145
- package/src/internal/schema/echo-schema.ts +0 -424
- package/src/internal/schema/index.ts +0 -7
- package/src/internal/schema/persistent-schema.ts +0 -28
- package/src/internal/types/entity.ts +0 -54
- package/src/internal/types/typename.ts +0 -55
- /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.test.d.ts +0 -0
- /package/dist/types/src/internal/{formats → Format}/number.d.ts +0 -0
- /package/dist/types/src/internal/{formats → Format}/object.d.ts +0 -0
- /package/dist/types/src/internal/{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}/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/{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}/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.test.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/typed-object.test.d.ts +0 -0
- /package/src/internal/{formats → Format}/format.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}/schema-validator.test.ts +0 -0
- /package/src/internal/{ref → Ref}/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
|
@@ -7,14 +7,13 @@ import * as Option from 'effect/Option';
|
|
|
7
7
|
import * as Schema from 'effect/Schema';
|
|
8
8
|
import * as SchemaAST from 'effect/SchemaAST';
|
|
9
9
|
|
|
10
|
-
import { raise } from '@dxos/debug';
|
|
11
10
|
import { type JsonPath, getField } from '@dxos/effect';
|
|
12
11
|
import { assertArgument, invariant } from '@dxos/invariant';
|
|
13
|
-
import { DXN } from '@dxos/keys';
|
|
12
|
+
import { DXN, URI } from '@dxos/keys';
|
|
14
13
|
import { type Primitive } from '@dxos/util';
|
|
15
14
|
|
|
16
|
-
import { type
|
|
17
|
-
|
|
15
|
+
import { type Mutable } from '../common/proxy';
|
|
16
|
+
import { type AnyProperties, EntityKind, TypeId, getSchema } from '../common/types';
|
|
18
17
|
import { type AnnotationHelper, createAnnotationHelper } from './util';
|
|
19
18
|
|
|
20
19
|
/**
|
|
@@ -46,39 +45,27 @@ export const getTypeIdentifierAnnotation = (schema: Schema.Schema.All) =>
|
|
|
46
45
|
)(schema.ast);
|
|
47
46
|
|
|
48
47
|
/**
|
|
49
|
-
* @returns
|
|
48
|
+
* @returns The schema's type identifier URI — whichever URI fits.
|
|
49
|
+
*
|
|
50
|
+
* - Stored (dynamic) schemas: the schema-as-object's EchoURI, so loaded objects ride
|
|
51
|
+
* along with their schema as a strong dependency.
|
|
52
|
+
* - Non-stored (static) schemas: the typename DXN built from `TypeAnnotation`.
|
|
50
53
|
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
54
|
+
* This URI is what gets written to an object's `system.type`; queries that filter by
|
|
55
|
+
* type also use it (see `Filter.type` / `getTypeURIFromSpecifier`), so both sides
|
|
56
|
+
* stay symmetric without per-schema branching.
|
|
53
57
|
*/
|
|
54
|
-
export const
|
|
58
|
+
export const getSchemaURI = (schema: Schema.Schema.All): URI.URI | undefined => {
|
|
55
59
|
assertArgument(Schema.isSchema(schema), 'schema', 'invalid schema');
|
|
56
60
|
const id = getTypeIdentifierAnnotation(schema);
|
|
57
61
|
if (id) {
|
|
58
|
-
return
|
|
62
|
+
return URI.make(id);
|
|
59
63
|
}
|
|
60
|
-
|
|
61
|
-
// TODO(dmaretskyi): Add support for dynamic schema.
|
|
62
64
|
const objectAnnotation = getTypeAnnotation(schema);
|
|
63
|
-
if (
|
|
64
|
-
return
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
return DXN.fromTypenameAndVersion(objectAnnotation.typename, objectAnnotation.version);
|
|
68
|
-
};
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* @param input schema or a typename string.
|
|
72
|
-
* @return type DXN.
|
|
73
|
-
*/
|
|
74
|
-
export const getTypeDXNFromSpecifier = (input: Schema.Schema.All | string): DXN => {
|
|
75
|
-
if (Schema.isSchema(input)) {
|
|
76
|
-
return getSchemaDXN(input) ?? raise(new TypeError('Schema has no DXN'));
|
|
77
|
-
} else {
|
|
78
|
-
assertArgument(typeof input === 'string', 'input');
|
|
79
|
-
assertArgument(!input.startsWith('dxn:'), 'input');
|
|
80
|
-
return DXN.fromTypename(input);
|
|
65
|
+
if (objectAnnotation) {
|
|
66
|
+
return DXN.make(objectAnnotation.typename, objectAnnotation.version);
|
|
81
67
|
}
|
|
68
|
+
return undefined;
|
|
82
69
|
};
|
|
83
70
|
|
|
84
71
|
//
|
|
@@ -87,16 +74,17 @@ export const getTypeDXNFromSpecifier = (input: Schema.Schema.All | string): DXN
|
|
|
87
74
|
|
|
88
75
|
/**
|
|
89
76
|
* Fully qualified globally unique typename.
|
|
90
|
-
* Example: `dxos.
|
|
91
|
-
*/
|
|
92
|
-
// TODO(
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
77
|
+
* Example: `org.dxos.type.message`
|
|
78
|
+
*/
|
|
79
|
+
// TODO(wittjosiah): Factor out to DXN spec.
|
|
80
|
+
export const TypenameSchema = Schema.String.pipe(
|
|
81
|
+
Schema.pattern(
|
|
82
|
+
/^[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})?)$/,
|
|
83
|
+
),
|
|
84
|
+
).annotations({
|
|
85
|
+
description: 'Fully qualified globally unique typename in reverse-DNS form.',
|
|
86
|
+
example: 'org.dxos.type.message',
|
|
87
|
+
});
|
|
100
88
|
|
|
101
89
|
/**
|
|
102
90
|
* Semantic version format: `major.minor.patch`
|
|
@@ -175,7 +163,7 @@ export const getSchemaVersion = (schema: Schema.Schema.All): string | undefined
|
|
|
175
163
|
/**
|
|
176
164
|
* Gets the typename of the object without the version.
|
|
177
165
|
* Returns only the name portion, not the DXN.
|
|
178
|
-
* @example "example.
|
|
166
|
+
* @example "org.example.type.contact"
|
|
179
167
|
*
|
|
180
168
|
* @internal (use Obj.getTypename)
|
|
181
169
|
*/
|
|
@@ -185,8 +173,15 @@ export const getTypename = (obj: AnyProperties): string | undefined => {
|
|
|
185
173
|
// Try to extract typename from DXN.
|
|
186
174
|
return getSchemaTypename(schema);
|
|
187
175
|
} else {
|
|
188
|
-
|
|
189
|
-
return
|
|
176
|
+
// `obj` may be an arbitrary value (e.g. from `isInstanceOf`); read TypeId
|
|
177
|
+
// directly so we return undefined for non-entities instead of throwing.
|
|
178
|
+
const type = (obj as any)?.[TypeId];
|
|
179
|
+
// Parse the URI string to extract typename.
|
|
180
|
+
if (DXN.isDXN(type)) {
|
|
181
|
+
const parsed = DXN.tryMake(type);
|
|
182
|
+
return parsed && DXN.getName(parsed);
|
|
183
|
+
}
|
|
184
|
+
return undefined;
|
|
190
185
|
}
|
|
191
186
|
};
|
|
192
187
|
|
|
@@ -194,8 +189,8 @@ export const getTypename = (obj: AnyProperties): string | undefined => {
|
|
|
194
189
|
* @internal (use Type.setTypename)
|
|
195
190
|
*/
|
|
196
191
|
// TODO(dmaretskyi): Rename setTypeDXN.
|
|
197
|
-
export const setTypename = (obj: any, typename:
|
|
198
|
-
invariant(typename
|
|
192
|
+
export const setTypename = (obj: any, typename: URI.URI): void => {
|
|
193
|
+
invariant(typeof typename === 'string', 'Invalid type.');
|
|
199
194
|
Object.defineProperty(obj, TypeId, {
|
|
200
195
|
value: typename,
|
|
201
196
|
writable: false,
|
|
@@ -205,68 +200,25 @@ export const setTypename = (obj: any, typename: DXN): void => {
|
|
|
205
200
|
};
|
|
206
201
|
|
|
207
202
|
/**
|
|
208
|
-
* @returns Object type
|
|
209
|
-
* @returns undefined if the object
|
|
210
|
-
* @example `dxn:example.
|
|
203
|
+
* @returns Object type URI — either a typename {@link DXN} or an `echo:` reference to a stored Schema object.
|
|
204
|
+
* @returns undefined if the object has no registered type URI (e.g. unresolved query result).
|
|
205
|
+
* @example `dxn:com.example.type.person:1.0.0`
|
|
206
|
+
* @example `echo:/01KKKG2FHWCMTR0BY00GJSVT1X` (stored schema)
|
|
211
207
|
*
|
|
212
|
-
* @internal (use Obj.
|
|
208
|
+
* @internal (use Obj.getTypeURI)
|
|
213
209
|
*/
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
if (!obj) {
|
|
210
|
+
export const getTypeURI = (obj: AnyProperties): URI.URI | undefined => {
|
|
211
|
+
if (obj == null) {
|
|
217
212
|
return undefined;
|
|
218
213
|
}
|
|
219
|
-
|
|
220
214
|
const type = (obj as any)[TypeId];
|
|
221
|
-
if (
|
|
215
|
+
if (type == null) {
|
|
222
216
|
return undefined;
|
|
223
217
|
}
|
|
224
|
-
|
|
225
|
-
invariant(type instanceof DXN, 'Invalid object.');
|
|
218
|
+
invariant(URI.isURI(type), 'Invalid object.');
|
|
226
219
|
return type;
|
|
227
220
|
};
|
|
228
221
|
|
|
229
|
-
/**
|
|
230
|
-
* Checks if the object is an instance of the schema.
|
|
231
|
-
* Only typename is compared, the schema version is ignored.
|
|
232
|
-
*
|
|
233
|
-
* The following cases are considered to mean that the object is an instance of the schema:
|
|
234
|
-
* - Object was created with this exact schema.
|
|
235
|
-
* - Object was created with a different version of this schema.
|
|
236
|
-
* - Object was created with a different schema (maybe dynamic) that has the same typename.
|
|
237
|
-
*/
|
|
238
|
-
// TODO(burdon): Can we use `Schema.is`?
|
|
239
|
-
export const isInstanceOf = <Schema extends Schema.Schema.AnyNoContext>(
|
|
240
|
-
schema: Schema,
|
|
241
|
-
object: any,
|
|
242
|
-
): object is Schema.Schema.Type<Schema> => {
|
|
243
|
-
if (object == null) {
|
|
244
|
-
return false;
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
const schemaDXN = getSchemaDXN(schema);
|
|
248
|
-
if (!schemaDXN) {
|
|
249
|
-
throw new Error('Schema must have an object annotation.');
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
const type = getTypeDXN(object);
|
|
253
|
-
if (type && DXN.equals(type, schemaDXN)) {
|
|
254
|
-
return true;
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
const typename = getTypename(object);
|
|
258
|
-
if (!typename) {
|
|
259
|
-
return false;
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
const typeDXN = schemaDXN.asTypeDXN();
|
|
263
|
-
if (!typeDXN) {
|
|
264
|
-
return false;
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
return typeDXN.type === typename;
|
|
268
|
-
};
|
|
269
|
-
|
|
270
222
|
//
|
|
271
223
|
// PropertyMeta
|
|
272
224
|
//
|
|
@@ -285,6 +237,12 @@ export type PropertyMetaAnnotation = {
|
|
|
285
237
|
|
|
286
238
|
// TODO(wittjosiah): Align with other annotations.
|
|
287
239
|
// TODO(wittjosiah): Why is this separate from FormatAnnotation?
|
|
240
|
+
/**
|
|
241
|
+
* Apply property-level metadata to an Effect schema. Only accepts
|
|
242
|
+
* `Schema.Schema.Any` — apply BEFORE wrapping the schema with
|
|
243
|
+
* `Type.makeObject` / `Type.makeRelation`. To read property meta off a
|
|
244
|
+
* `Type.Type` entity, unwrap it first with `Type.getSchema(entity)`.
|
|
245
|
+
*/
|
|
288
246
|
export const PropertyMeta = (name: string, value: PropertyMetaValue) => {
|
|
289
247
|
return <A, I, R>(self: Schema.Schema<A, I, R>): Schema.Schema<A, I, R> => {
|
|
290
248
|
const existingMeta = self.ast.annotations[PropertyMetaAnnotationId] as PropertyMetaAnnotation;
|
|
@@ -337,6 +295,7 @@ export const LabelAnnotation = createAnnotationHelper<string[]>(LabelAnnotationI
|
|
|
337
295
|
/**
|
|
338
296
|
* Returns the label for a given object based on {@link LabelAnnotationId}.
|
|
339
297
|
* Lower-level version that requires explicit schema parameter.
|
|
298
|
+
* Skips empty strings and whitespace-only strings, continuing to the next field.
|
|
340
299
|
*/
|
|
341
300
|
// TODO(burdon): Convert to JsonPath?
|
|
342
301
|
export const getLabelWithSchema = <S extends Schema.Schema.Any>(
|
|
@@ -352,7 +311,13 @@ export const getLabelWithSchema = <S extends Schema.Schema.Any>(
|
|
|
352
311
|
);
|
|
353
312
|
const value = getField(object, accessor as JsonPath);
|
|
354
313
|
switch (typeof value) {
|
|
355
|
-
case 'string':
|
|
314
|
+
case 'string': {
|
|
315
|
+
const trimmed = value.trim();
|
|
316
|
+
if (trimmed.length > 0) {
|
|
317
|
+
return value;
|
|
318
|
+
}
|
|
319
|
+
continue;
|
|
320
|
+
}
|
|
356
321
|
case 'number':
|
|
357
322
|
case 'boolean':
|
|
358
323
|
case 'bigint':
|
|
@@ -435,7 +400,6 @@ export const setDescriptionWithSchema = <S extends Schema.Schema.Any>(
|
|
|
435
400
|
* Identifies if a property should be included in a form or not.
|
|
436
401
|
* By default, all properties are included in forms, so this is opt-out.
|
|
437
402
|
*/
|
|
438
|
-
// TODO(burdon): UI concern.
|
|
439
403
|
export const FormInputAnnotationId = Symbol.for('@dxos/schema/annotation/FormInput');
|
|
440
404
|
export const FormInputAnnotation = createAnnotationHelper<boolean>(FormInputAnnotationId);
|
|
441
405
|
|
|
@@ -467,14 +431,14 @@ interface MakeAnnoationsProps<T> {
|
|
|
467
431
|
// TODO(wittjosiah): Comment.
|
|
468
432
|
export const makeUserAnnotation = <T>(props: MakeAnnoationsProps<T>): AnnotationHelper<T> => {
|
|
469
433
|
assertArgument(
|
|
470
|
-
|
|
434
|
+
/^[a-z][a-z0-9]*(\.[a-z][a-z0-9-]*){2,}$/.test(props.id),
|
|
471
435
|
'id',
|
|
472
|
-
'Annotation id must be in the FQN format (dxos.
|
|
436
|
+
'Annotation id must be in the FQN format (org.dxos.annotation.example).',
|
|
473
437
|
);
|
|
474
438
|
|
|
475
439
|
const getFromAst = (ast: SchemaAST.AST) =>
|
|
476
440
|
SchemaAST.getAnnotation<PropertyMetaAnnotation>(PropertyMetaAnnotationId)(ast).pipe(
|
|
477
|
-
Option.
|
|
441
|
+
Option.flatMap((meta) => Option.fromNullable(meta[props.id])),
|
|
478
442
|
Option.map(Schema.decodeUnknownSync(props.schema)),
|
|
479
443
|
);
|
|
480
444
|
|
|
@@ -485,3 +449,119 @@ export const makeUserAnnotation = <T>(props: MakeAnnoationsProps<T>): Annotation
|
|
|
485
449
|
PropertyMeta(props.id, Schema.encodeSync(props.schema)(value)) as <S extends Schema.Schema.Any>(schema: S) => S,
|
|
486
450
|
};
|
|
487
451
|
};
|
|
452
|
+
|
|
453
|
+
const IconAnnotationSchema = Schema.Struct({
|
|
454
|
+
/**
|
|
455
|
+
* Phosphor icon name (e.g., 'ph--user--regular', 'ph--cube--regular', 'ph--link--regular ', etc.)
|
|
456
|
+
*/
|
|
457
|
+
icon: Schema.String.pipe(Schema.pattern(/^ph--[a-z-]+--[a-z]+$/)),
|
|
458
|
+
|
|
459
|
+
/**
|
|
460
|
+
* Color name.
|
|
461
|
+
*
|
|
462
|
+
* List of colors:
|
|
463
|
+
* - 'red'
|
|
464
|
+
* - 'orange'
|
|
465
|
+
* - 'amber'
|
|
466
|
+
* - 'yellow'
|
|
467
|
+
* - 'lime'
|
|
468
|
+
* - 'green'
|
|
469
|
+
* - 'emerald'
|
|
470
|
+
* - 'teal'
|
|
471
|
+
* - 'cyan'
|
|
472
|
+
* - 'violet'
|
|
473
|
+
* - 'purple'
|
|
474
|
+
* - 'fuchsia'
|
|
475
|
+
* - 'pink'
|
|
476
|
+
* - 'rose'
|
|
477
|
+
*/
|
|
478
|
+
hue: Schema.optional(Schema.String),
|
|
479
|
+
});
|
|
480
|
+
|
|
481
|
+
export interface IconAnnotation extends Schema.Schema.Type<typeof IconAnnotationSchema> {}
|
|
482
|
+
|
|
483
|
+
/**
|
|
484
|
+
* Icon to render in the UI.
|
|
485
|
+
*/
|
|
486
|
+
export const IconAnnotation = makeUserAnnotation<IconAnnotation>({
|
|
487
|
+
id: 'org.dxos.annotation.icon',
|
|
488
|
+
schema: IconAnnotationSchema,
|
|
489
|
+
});
|
|
490
|
+
|
|
491
|
+
/**
|
|
492
|
+
* Indicates that this entity's icon should be resolved from a property whose value is a `Ref`
|
|
493
|
+
* to another entity. Consumers (e.g. graph node builders) resolve the ref target and use that
|
|
494
|
+
* target's schema `IconAnnotation` in place of the static one declared on this schema.
|
|
495
|
+
*
|
|
496
|
+
* Useful for wrapper schemas that delegate their visual identity to a referenced sub-entity
|
|
497
|
+
* (e.g. a generic `Game` whose icon should come from its `variant` ref's typed state).
|
|
498
|
+
*/
|
|
499
|
+
export const IconFromRefAnnotation = makeUserAnnotation<string>({
|
|
500
|
+
id: 'org.dxos.annotation.icon.from-ref',
|
|
501
|
+
schema: Schema.String,
|
|
502
|
+
});
|
|
503
|
+
|
|
504
|
+
/**
|
|
505
|
+
* Options for {@link getLabel}.
|
|
506
|
+
*/
|
|
507
|
+
export type GetLabelOptions = {
|
|
508
|
+
/**
|
|
509
|
+
* Strategy for deriving a label when the entity has no `LabelAnnotation` value.
|
|
510
|
+
* - `'typename'`: use the entity's typename (e.g. `org.dxos.type.table`).
|
|
511
|
+
* Useful for Card.Title chrome that must always display something, even
|
|
512
|
+
* for unlabeled objects.
|
|
513
|
+
*/
|
|
514
|
+
fallback?: 'typename';
|
|
515
|
+
};
|
|
516
|
+
|
|
517
|
+
/**
|
|
518
|
+
* Get the label of an entity.
|
|
519
|
+
* Accepts both reactive entities and snapshots.
|
|
520
|
+
*
|
|
521
|
+
* If `options.fallback === 'typename'` and no label is set, returns the
|
|
522
|
+
* entity's typename instead.
|
|
523
|
+
*/
|
|
524
|
+
export const getLabel = (entity: AnyProperties, options?: GetLabelOptions): string | undefined => {
|
|
525
|
+
const schema = getSchema(entity);
|
|
526
|
+
const label = schema != null ? getLabelWithSchema(schema, entity) : undefined;
|
|
527
|
+
if (label != null) {
|
|
528
|
+
return label;
|
|
529
|
+
}
|
|
530
|
+
if (options?.fallback === 'typename') {
|
|
531
|
+
return getTypename(entity);
|
|
532
|
+
}
|
|
533
|
+
return undefined;
|
|
534
|
+
};
|
|
535
|
+
|
|
536
|
+
/**
|
|
537
|
+
* Set the label of an entity.
|
|
538
|
+
* Must be called within an Obj.update or Relation.update callback.
|
|
539
|
+
*/
|
|
540
|
+
export const setLabel = (entity: Mutable<AnyProperties>, label: string) => {
|
|
541
|
+
const schema = getSchema(entity);
|
|
542
|
+
if (schema != null) {
|
|
543
|
+
setLabelWithSchema(schema, entity, label);
|
|
544
|
+
}
|
|
545
|
+
};
|
|
546
|
+
|
|
547
|
+
/**
|
|
548
|
+
* Get the description of an entity.
|
|
549
|
+
* Accepts both reactive entities and snapshots.
|
|
550
|
+
*/
|
|
551
|
+
export const getDescription = (entity: AnyProperties): string | undefined => {
|
|
552
|
+
const schema = getSchema(entity);
|
|
553
|
+
if (schema != null) {
|
|
554
|
+
return getDescriptionWithSchema(schema, entity);
|
|
555
|
+
}
|
|
556
|
+
};
|
|
557
|
+
|
|
558
|
+
/**
|
|
559
|
+
* Set the description of an entity.
|
|
560
|
+
* Must be called within an Obj.update or Relation.update callback.
|
|
561
|
+
*/
|
|
562
|
+
export const setDescription = (entity: Mutable<AnyProperties>, description: string) => {
|
|
563
|
+
const schema = getSchema(entity);
|
|
564
|
+
if (schema != null) {
|
|
565
|
+
setDescriptionWithSchema(schema, entity, description);
|
|
566
|
+
}
|
|
567
|
+
};
|
|
@@ -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.
|
|
@@ -2,18 +2,23 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
import * as Option from 'effect/Option';
|
|
6
6
|
import type * as Schema from 'effect/Schema';
|
|
7
7
|
import * as SchemaAST from 'effect/SchemaAST';
|
|
8
8
|
|
|
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
|
/**
|
|
16
|
-
* Get the annotation value from
|
|
16
|
+
* Get the annotation value from an Effect schema.
|
|
17
|
+
*
|
|
18
|
+
* Only accepts `Schema.Schema.Any` — to read an annotation off a `Type.Type`
|
|
19
|
+
* entity, unwrap it first with `Type.getSchema(entity)`. This keeps the
|
|
20
|
+
* annotation pipeline single-shaped and forces annotations to live on the
|
|
21
|
+
* source schema, not on the post-construction Type entity.
|
|
17
22
|
*/
|
|
18
23
|
get: (schema: Schema.Schema.Any) => Option.Option<T>;
|
|
19
24
|
/**
|
|
@@ -21,7 +26,11 @@ export interface AnnotationHelper<T> {
|
|
|
21
26
|
*/
|
|
22
27
|
getFromAst: (ast: SchemaAST.AST) => Option.Option<T>;
|
|
23
28
|
/**
|
|
24
|
-
* Set the annotation
|
|
29
|
+
* Set the annotation on an Effect schema.
|
|
30
|
+
*
|
|
31
|
+
* Only accepts `Schema.Schema.Any` — annotations must be applied to the
|
|
32
|
+
* source schema BEFORE wrapping it with `Type.makeObject` / `Type.makeRelation`.
|
|
33
|
+
* In a pipe, place every `Annotation.X.set(...)` before the `Type.make...` step.
|
|
25
34
|
*/
|
|
26
35
|
set: (value: T) => <S extends Schema.Schema.Any>(schema: S) => S;
|
|
27
36
|
}
|
|
@@ -36,7 +45,7 @@ export const createAnnotationHelper = <T>(id: symbol): AnnotationHelper<T> => {
|
|
|
36
45
|
getFromAst: (ast) => SchemaAST.getAnnotation(ast, id),
|
|
37
46
|
set:
|
|
38
47
|
(value) =>
|
|
39
|
-
<S extends Schema.Schema.Any>(schema: S) =>
|
|
48
|
+
<S extends Schema.Schema.Any>(schema: S): S =>
|
|
40
49
|
schema.annotations({ [id]: value }) as S,
|
|
41
50
|
};
|
|
42
51
|
};
|
|
@@ -69,13 +78,12 @@ export const makeTypeJsonSchemaAnnotation = (options: {
|
|
|
69
78
|
assertArgument(!!options.relationSource === (options.kind === EntityKind.Relation), 'relationSource');
|
|
70
79
|
assertArgument(!!options.relationTarget === (options.kind === EntityKind.Relation), 'relationTarget');
|
|
71
80
|
|
|
72
|
-
const obj = {
|
|
73
|
-
|
|
74
|
-
$id: options.identifier ?? DXN.fromTypename(options.typename).toString(),
|
|
81
|
+
const obj: Record<string, unknown> = {
|
|
82
|
+
$id: options.identifier ?? DXN.make(options.typename, options.version),
|
|
75
83
|
entityKind: options.kind,
|
|
76
84
|
version: options.version,
|
|
77
85
|
typename: options.typename,
|
|
78
|
-
}
|
|
86
|
+
};
|
|
79
87
|
if (options.kind === EntityKind.Relation) {
|
|
80
88
|
obj.relationSource = { $ref: options.relationSource };
|
|
81
89
|
obj.relationTarget = { $ref: options.relationTarget };
|
|
@@ -3,20 +3,21 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { invariant } from '@dxos/invariant';
|
|
6
|
-
import { type
|
|
6
|
+
import { type EchoURI } 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 { getObjectEchoUri } from './util';
|
|
11
12
|
|
|
12
13
|
/**
|
|
13
|
-
* Get the
|
|
14
|
+
* Get the canonical EchoURI of an entity.
|
|
14
15
|
* Accepts both reactive entities and snapshots.
|
|
15
16
|
*/
|
|
16
|
-
export const
|
|
17
|
-
const
|
|
18
|
-
invariant(
|
|
19
|
-
return
|
|
17
|
+
export const getUri = (entity: AnyEntity): EchoURI.EchoURI => {
|
|
18
|
+
const uri = getObjectEchoUri(entity);
|
|
19
|
+
invariant(uri != null, 'Invalid entity.');
|
|
20
|
+
return uri;
|
|
20
21
|
};
|
|
21
22
|
|
|
22
23
|
/**
|