@dxos/echo 0.8.4-main.72ec0f3 → 0.8.4-main.74a063c4e0
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/README.md +3 -4
- package/dist/lib/neutral/Annotation.mjs +37 -0
- package/dist/lib/neutral/Database.mjs +47 -0
- package/dist/lib/neutral/Entity.mjs +59 -0
- package/dist/lib/neutral/Err.mjs +12 -0
- package/dist/lib/neutral/Extension.mjs +18 -0
- package/dist/lib/neutral/Feed.mjs +48 -0
- package/dist/lib/neutral/Filter.mjs +70 -0
- package/dist/lib/neutral/Filter.mjs.map +7 -0
- package/dist/lib/neutral/Format.mjs +66 -0
- package/dist/lib/neutral/Format.mjs.map +7 -0
- package/dist/lib/neutral/JsonSchema.mjs +19 -0
- package/dist/lib/neutral/JsonSchema.mjs.map +7 -0
- package/dist/lib/neutral/Key.mjs +12 -0
- package/dist/lib/neutral/Key.mjs.map +7 -0
- package/dist/lib/neutral/Obj.mjs +113 -0
- package/dist/lib/neutral/Obj.mjs.map +7 -0
- package/dist/lib/neutral/Order.mjs +12 -0
- package/dist/lib/neutral/Order.mjs.map +7 -0
- package/dist/lib/neutral/Query.mjs +38 -0
- package/dist/lib/neutral/Query.mjs.map +7 -0
- package/dist/lib/neutral/QueryResult.mjs +2 -0
- package/dist/lib/neutral/QueryResult.mjs.map +7 -0
- package/dist/lib/neutral/Ref.mjs +24 -0
- package/dist/lib/neutral/Ref.mjs.map +7 -0
- package/dist/lib/neutral/Relation.mjs +94 -0
- package/dist/lib/neutral/Relation.mjs.map +7 -0
- package/dist/lib/neutral/SchemaRegistry.mjs +2 -0
- package/dist/lib/neutral/SchemaRegistry.mjs.map +7 -0
- package/dist/lib/neutral/Tag.mjs +29 -0
- package/dist/lib/neutral/Tag.mjs.map +7 -0
- package/dist/lib/neutral/Type.mjs +37 -0
- package/dist/lib/neutral/Type.mjs.map +7 -0
- package/dist/lib/neutral/chunk-2U2BZDLU.mjs +121 -0
- package/dist/lib/neutral/chunk-2U2BZDLU.mjs.map +7 -0
- package/dist/lib/neutral/chunk-46QNGNTY.mjs +45 -0
- package/dist/lib/neutral/chunk-46QNGNTY.mjs.map +7 -0
- package/dist/lib/neutral/chunk-66GBFH43.mjs +298 -0
- package/dist/lib/neutral/chunk-66GBFH43.mjs.map +7 -0
- package/dist/lib/neutral/chunk-6URFBQJH.mjs +361 -0
- package/dist/lib/neutral/chunk-6URFBQJH.mjs.map +7 -0
- package/dist/lib/neutral/chunk-7QQMUDE6.mjs +159 -0
- package/dist/lib/neutral/chunk-7QQMUDE6.mjs.map +7 -0
- package/dist/lib/neutral/chunk-ANHVGJI4.mjs +21 -0
- package/dist/lib/neutral/chunk-ANHVGJI4.mjs.map +7 -0
- package/dist/lib/neutral/chunk-BNCCGLJN.mjs +7 -0
- package/dist/lib/neutral/chunk-BNCCGLJN.mjs.map +7 -0
- package/dist/lib/neutral/chunk-DQYLD2RB.mjs +402 -0
- package/dist/lib/neutral/chunk-DQYLD2RB.mjs.map +7 -0
- package/dist/lib/neutral/chunk-E5PBQJWV.mjs +27 -0
- package/dist/lib/neutral/chunk-E5PBQJWV.mjs.map +7 -0
- package/dist/lib/neutral/chunk-EBVB5NOH.mjs +133 -0
- package/dist/lib/neutral/chunk-EBVB5NOH.mjs.map +7 -0
- package/dist/lib/neutral/chunk-FNEFSO2C.mjs +787 -0
- package/dist/lib/neutral/chunk-FNEFSO2C.mjs.map +7 -0
- package/dist/lib/neutral/chunk-GZQTCRJB.mjs +73 -0
- package/dist/lib/neutral/chunk-GZQTCRJB.mjs.map +7 -0
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +7 -0
- package/dist/lib/neutral/chunk-KPY6FC5I.mjs +415 -0
- package/dist/lib/neutral/chunk-KPY6FC5I.mjs.map +7 -0
- package/dist/lib/neutral/chunk-MYMU4TWK.mjs +299 -0
- package/dist/lib/neutral/chunk-MYMU4TWK.mjs.map +7 -0
- package/dist/lib/neutral/chunk-MZXWVR3T.mjs +97 -0
- package/dist/lib/neutral/chunk-MZXWVR3T.mjs.map +7 -0
- package/dist/lib/neutral/chunk-OMUPQMLR.mjs +7 -0
- package/dist/lib/neutral/chunk-OMUPQMLR.mjs.map +7 -0
- package/dist/lib/neutral/chunk-QWAOTFCY.mjs +396 -0
- package/dist/lib/neutral/chunk-QWAOTFCY.mjs.map +7 -0
- package/dist/lib/neutral/chunk-R72KFH2X.mjs +34 -0
- package/dist/lib/neutral/chunk-R72KFH2X.mjs.map +7 -0
- package/dist/lib/neutral/chunk-TBKX6JQO.mjs +67 -0
- package/dist/lib/neutral/chunk-TBKX6JQO.mjs.map +7 -0
- package/dist/lib/neutral/chunk-UBEZSGXY.mjs +51 -0
- package/dist/lib/neutral/chunk-UBEZSGXY.mjs.map +7 -0
- package/dist/lib/neutral/chunk-UI6MWK5W.mjs +42 -0
- package/dist/lib/neutral/chunk-UI6MWK5W.mjs.map +7 -0
- package/dist/lib/neutral/chunk-VCAP4OOT.mjs +120 -0
- package/dist/lib/neutral/chunk-VCAP4OOT.mjs.map +7 -0
- package/dist/lib/neutral/chunk-WMFVS4KR.mjs +2830 -0
- package/dist/lib/neutral/chunk-WMFVS4KR.mjs.map +7 -0
- package/dist/lib/neutral/chunk-XZJUNTML.mjs +335 -0
- package/dist/lib/neutral/chunk-XZJUNTML.mjs.map +7 -0
- package/dist/lib/neutral/chunk-XZM7FERR.mjs +56 -0
- package/dist/lib/neutral/chunk-XZM7FERR.mjs.map +7 -0
- package/dist/lib/neutral/chunk-YS6Q3XAD.mjs +50 -0
- package/dist/lib/neutral/chunk-YS6Q3XAD.mjs.map +7 -0
- package/dist/lib/neutral/chunk-ZIXGDU6F.mjs +45 -0
- package/dist/lib/neutral/chunk-ZIXGDU6F.mjs.map +7 -0
- package/dist/lib/neutral/index.mjs +101 -0
- package/dist/lib/neutral/index.mjs.map +7 -0
- package/dist/lib/{node-esm → neutral}/internal/index.mjs +290 -152
- package/dist/lib/neutral/internal/index.mjs.map +7 -0
- package/dist/lib/neutral/meta.json +1 -0
- package/dist/lib/neutral/testing/index.mjs +374 -0
- package/dist/lib/neutral/testing/index.mjs.map +7 -0
- package/dist/types/src/Annotation.d.ts +24 -0
- package/dist/types/src/Annotation.d.ts.map +1 -0
- package/dist/types/src/Collection.d.ts +16 -0
- package/dist/types/src/Collection.d.ts.map +1 -0
- package/dist/types/src/Database.d.ts +196 -0
- package/dist/types/src/Database.d.ts.map +1 -0
- package/dist/types/src/Dataset.d.ts +19 -0
- package/dist/types/src/Dataset.d.ts.map +1 -0
- package/dist/types/src/Entity.d.ts +168 -0
- package/dist/types/src/Entity.d.ts.map +1 -0
- package/dist/types/src/Entity.test.d.ts +2 -0
- package/dist/types/src/Entity.test.d.ts.map +1 -0
- package/dist/types/src/Err.d.ts +107 -0
- package/dist/types/src/Err.d.ts.map +1 -0
- package/dist/types/src/Extension.d.ts +80 -0
- package/dist/types/src/Extension.d.ts.map +1 -0
- package/dist/types/src/Extension.test.d.ts +2 -0
- package/dist/types/src/Extension.test.d.ts.map +1 -0
- package/dist/types/src/Feed.d.ts +171 -0
- package/dist/types/src/Feed.d.ts.map +1 -0
- package/dist/types/src/Filter.d.ts +136 -0
- package/dist/types/src/Filter.d.ts.map +1 -0
- package/dist/types/src/Filter.test.d.ts +2 -0
- package/dist/types/src/Filter.test.d.ts.map +1 -0
- package/dist/types/src/Format.d.ts +4 -0
- package/dist/types/src/Format.d.ts.map +1 -0
- package/dist/types/src/Hypergraph.d.ts +65 -0
- package/dist/types/src/Hypergraph.d.ts.map +1 -0
- package/dist/types/src/JsonSchema.d.ts +16 -0
- package/dist/types/src/JsonSchema.d.ts.map +1 -0
- package/dist/types/src/Key.d.ts +1 -0
- package/dist/types/src/Key.d.ts.map +1 -1
- package/dist/types/src/Obj.d.ts +432 -104
- package/dist/types/src/Obj.d.ts.map +1 -1
- package/dist/types/src/Obj.test.d.ts +2 -0
- package/dist/types/src/Obj.test.d.ts.map +1 -0
- package/dist/types/src/Order.d.ts +16 -0
- package/dist/types/src/Order.d.ts.map +1 -0
- package/dist/types/src/Query.d.ts +209 -0
- package/dist/types/src/Query.d.ts.map +1 -0
- package/dist/types/src/Query.test.d.ts +2 -0
- package/dist/types/src/Query.test.d.ts.map +1 -0
- package/dist/types/src/QueryResult.d.ts +80 -0
- package/dist/types/src/QueryResult.d.ts.map +1 -0
- package/dist/types/src/Ref.d.ts +61 -11
- package/dist/types/src/Ref.d.ts.map +1 -1
- package/dist/types/src/Relation.d.ts +287 -21
- package/dist/types/src/Relation.d.ts.map +1 -1
- package/dist/types/src/Relation.test.d.ts +2 -0
- package/dist/types/src/Relation.test.d.ts.map +1 -0
- package/dist/types/src/SchemaRegistry.d.ts +84 -0
- package/dist/types/src/SchemaRegistry.d.ts.map +1 -0
- package/dist/types/src/Tag.d.ts +8 -7
- package/dist/types/src/Tag.d.ts.map +1 -1
- package/dist/types/src/Type.d.ts +123 -99
- package/dist/types/src/Type.d.ts.map +1 -1
- package/dist/types/src/Type.test.d.ts +2 -0
- package/dist/types/src/Type.test.d.ts.map +1 -0
- package/dist/types/src/View.d.ts +68 -0
- package/dist/types/src/View.d.ts.map +1 -0
- package/dist/types/src/hierarchy.test.d.ts +2 -0
- package/dist/types/src/hierarchy.test.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +19 -5
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/internal/Annotation/annotations.d.ts +231 -0
- package/dist/types/src/internal/Annotation/annotations.d.ts.map +1 -0
- package/dist/types/src/internal/Annotation/annotations.test.d.ts.map +1 -0
- package/dist/types/src/internal/Annotation/index.d.ts +4 -0
- package/dist/types/src/internal/Annotation/index.d.ts.map +1 -0
- package/dist/types/src/internal/Annotation/sorting.d.ts +24 -0
- package/dist/types/src/internal/Annotation/sorting.d.ts.map +1 -0
- package/dist/types/src/internal/Annotation/util.d.ts +39 -0
- package/dist/types/src/internal/Annotation/util.d.ts.map +1 -0
- package/dist/types/src/internal/Entity/api.d.ts +13 -0
- package/dist/types/src/internal/Entity/api.d.ts.map +1 -0
- package/dist/types/src/internal/Entity/entity.d.ts +20 -0
- package/dist/types/src/internal/Entity/entity.d.ts.map +1 -0
- package/dist/types/src/internal/Entity/index.d.ts +8 -0
- package/dist/types/src/internal/Entity/index.d.ts.map +1 -0
- package/dist/types/src/internal/Entity/model.d.ts +55 -0
- package/dist/types/src/internal/Entity/model.d.ts.map +1 -0
- package/dist/types/src/internal/Entity/object.d.ts +18 -0
- package/dist/types/src/internal/Entity/object.d.ts.map +1 -0
- package/dist/types/src/internal/Entity/relation.d.ts +35 -0
- package/dist/types/src/internal/Entity/relation.d.ts.map +1 -0
- package/dist/types/src/internal/Entity/util.d.ts +2 -0
- package/dist/types/src/internal/Entity/util.d.ts.map +1 -0
- package/dist/types/src/internal/Entity/version.d.ts +42 -0
- package/dist/types/src/internal/Entity/version.d.ts.map +1 -0
- package/dist/types/src/internal/Format/date.d.ts.map +1 -0
- package/dist/types/src/internal/Format/date.test.d.ts.map +1 -0
- package/dist/types/src/internal/{formats → Format}/format.d.ts +4 -2
- package/dist/types/src/internal/Format/format.d.ts.map +1 -0
- package/dist/types/src/internal/Format/format.test.d.ts.map +1 -0
- package/dist/types/src/internal/Format/index.d.ts.map +1 -0
- package/dist/types/src/internal/Format/number.d.ts.map +1 -0
- package/dist/types/src/internal/Format/object.d.ts.map +1 -0
- package/dist/types/src/internal/{formats → Format}/select.d.ts +6 -4
- package/dist/types/src/internal/Format/select.d.ts.map +1 -0
- package/dist/types/src/internal/{formats → Format}/string.d.ts +4 -0
- package/dist/types/src/internal/Format/string.d.ts.map +1 -0
- package/dist/types/src/internal/{formats → Format}/types.d.ts +14 -10
- package/dist/types/src/internal/Format/types.d.ts.map +1 -0
- package/dist/types/src/internal/{json → JsonSchema}/annotations.d.ts +1 -1
- package/dist/types/src/internal/JsonSchema/annotations.d.ts.map +1 -0
- package/dist/types/src/internal/JsonSchema/effect-schema.test.d.ts.map +1 -0
- package/dist/types/src/internal/JsonSchema/index.d.ts +5 -0
- package/dist/types/src/internal/JsonSchema/index.d.ts.map +1 -0
- package/dist/types/src/internal/JsonSchema/json-schema-normalize.d.ts.map +1 -0
- package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema-type.d.ts +131 -30
- package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts.map +1 -0
- package/dist/types/src/internal/{json → JsonSchema}/json-schema.d.ts +4 -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 +8 -0
- package/dist/types/src/internal/Obj/clone.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/common.d.ts.map +1 -0
- package/dist/types/src/internal/{object/create.d.ts → Obj/create-object.d.ts} +10 -11
- package/dist/types/src/internal/Obj/create-object.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/create-object.test.d.ts +2 -0
- package/dist/types/src/internal/Obj/create-object.test.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/deleted.d.ts +6 -0
- package/dist/types/src/internal/Obj/deleted.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/ids.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/index.d.ts +11 -0
- package/dist/types/src/internal/Obj/index.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/inspect.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/json-serializer.d.ts +44 -0
- package/dist/types/src/internal/Obj/json-serializer.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/json-serializer.test.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/schema-validator.d.ts +2 -0
- package/dist/types/src/internal/Obj/schema-validator.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/schema-validator.test.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/set-value.d.ts +7 -0
- package/dist/types/src/internal/Obj/set-value.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/set-value.test.d.ts +2 -0
- package/dist/types/src/internal/Obj/set-value.test.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/snapshot.d.ts +6 -0
- package/dist/types/src/internal/Obj/snapshot.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/typed-object.d.ts +25 -0
- package/dist/types/src/internal/Obj/typed-object.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/typed-object.test.d.ts.map +1 -0
- package/dist/types/src/internal/Query.d.ts +10 -0
- package/dist/types/src/internal/Query.d.ts.map +1 -0
- package/dist/types/src/internal/Ref/index.d.ts.map +1 -0
- package/dist/types/src/internal/{ref → Ref}/ref-array.d.ts +4 -4
- package/dist/types/src/internal/Ref/ref-array.d.ts.map +1 -0
- package/dist/types/src/internal/{ref → Ref}/ref.d.ts +44 -19
- package/dist/types/src/internal/Ref/ref.d.ts.map +1 -0
- package/dist/types/src/internal/Ref/ref.test.d.ts.map +1 -0
- package/dist/types/src/internal/Type/compose.d.ts +7 -0
- package/dist/types/src/internal/Type/compose.d.ts.map +1 -0
- package/dist/types/src/internal/Type/compose.test.d.ts.map +1 -0
- package/dist/types/src/internal/{schema → Type}/echo-schema.d.ts +27 -14
- package/dist/types/src/internal/Type/echo-schema.d.ts.map +1 -0
- package/dist/types/src/internal/Type/index.d.ts +4 -0
- package/dist/types/src/internal/Type/index.d.ts.map +1 -0
- package/dist/types/src/internal/Type/manipulation.d.ts.map +1 -0
- package/dist/types/src/internal/Type/persistent-schema.d.ts +20 -0
- package/dist/types/src/internal/Type/persistent-schema.d.ts.map +1 -0
- package/dist/types/src/internal/common/api/index.d.ts +11 -0
- package/dist/types/src/internal/common/api/index.d.ts.map +1 -0
- package/dist/types/src/internal/common/api/meta.d.ts +42 -0
- package/dist/types/src/internal/common/api/meta.d.ts.map +1 -0
- package/dist/types/src/internal/common/index.d.ts +4 -0
- package/dist/types/src/internal/common/index.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/change-context.d.ts +55 -0
- package/dist/types/src/internal/common/proxy/change-context.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/change.test.d.ts +2 -0
- package/dist/types/src/internal/common/proxy/change.test.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts +5 -0
- package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/errors.d.ts +19 -0
- package/dist/types/src/internal/common/proxy/errors.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/event-batch.d.ts +10 -0
- package/dist/types/src/internal/common/proxy/event-batch.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/handler.test.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/index.d.ts +14 -0
- package/dist/types/src/internal/common/proxy/index.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/json-serializer.d.ts +6 -0
- package/dist/types/src/internal/common/proxy/json-serializer.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/make-object.d.ts +14 -0
- package/dist/types/src/internal/common/proxy/make-object.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/ownership.d.ts +57 -0
- package/dist/types/src/internal/common/proxy/ownership.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/proxy-types.d.ts +18 -0
- package/dist/types/src/internal/common/proxy/proxy-types.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/proxy-utils.d.ts +47 -0
- package/dist/types/src/internal/common/proxy/proxy-utils.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/reactive-array.d.ts +8 -0
- package/dist/types/src/internal/common/proxy/reactive-array.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/reactive.d.ts +39 -0
- package/dist/types/src/internal/common/proxy/reactive.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/schema-validator.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/schema.test.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/symbols.d.ts +3 -0
- package/dist/types/src/internal/common/proxy/symbols.d.ts.map +1 -0
- package/dist/types/src/internal/{proxy → common/proxy}/typed-handler.d.ts +16 -12
- package/dist/types/src/internal/common/proxy/typed-handler.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/typed-handler.test.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/typed-object.test.d.ts.map +1 -0
- package/dist/types/src/internal/common/types/base.d.ts +27 -0
- package/dist/types/src/internal/common/types/base.d.ts.map +1 -0
- package/dist/types/src/internal/common/types/entity.d.ts +37 -0
- package/dist/types/src/internal/common/types/entity.d.ts.map +1 -0
- package/dist/types/src/internal/common/types/index.d.ts +7 -0
- package/dist/types/src/internal/common/types/index.d.ts.map +1 -0
- package/dist/types/src/internal/{object → common/types}/meta.d.ts +18 -16
- package/dist/types/src/internal/common/types/meta.d.ts.map +1 -0
- package/dist/types/src/internal/common/types/model-symbols.d.ts +54 -0
- package/dist/types/src/internal/common/types/model-symbols.d.ts.map +1 -0
- package/dist/types/src/internal/common/types/typename.d.ts +21 -0
- package/dist/types/src/internal/common/types/typename.d.ts.map +1 -0
- package/dist/types/src/internal/common/types/version.d.ts +15 -0
- package/dist/types/src/internal/common/types/version.d.ts.map +1 -0
- package/dist/types/src/internal/index.d.ts +10 -14
- package/dist/types/src/internal/index.d.ts.map +1 -1
- package/dist/types/src/{test → testing}/api.test.d.ts.map +1 -1
- package/dist/types/src/testing/index.d.ts +3 -3
- package/dist/types/src/testing/index.d.ts.map +1 -1
- package/dist/types/src/testing/test-data.d.ts +18 -0
- package/dist/types/src/testing/test-data.d.ts.map +1 -0
- package/dist/types/src/testing/test-schema.d.ts +304 -0
- package/dist/types/src/testing/test-schema.d.ts.map +1 -0
- package/dist/types/src/testing/util.d.ts +21 -0
- package/dist/types/src/testing/util.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +111 -65
- package/src/Annotation.ts +48 -0
- package/src/Collection.ts +37 -0
- package/src/Database.ts +330 -0
- package/src/Dataset.ts +26 -0
- package/src/Entity.test.ts +22 -0
- package/src/Entity.ts +236 -0
- package/src/Err.ts +40 -0
- package/src/Extension.test.ts +235 -0
- package/src/Extension.ts +122 -0
- package/src/Feed.ts +283 -0
- package/src/Filter.test.ts +90 -0
- package/src/Filter.ts +424 -0
- package/src/Format.ts +9 -0
- package/src/Hypergraph.ts +79 -0
- package/src/JsonSchema.ts +26 -0
- package/src/Key.ts +3 -0
- package/src/Obj.test.ts +539 -0
- package/src/Obj.ts +695 -278
- package/src/Order.ts +46 -0
- package/src/Query.test.ts +698 -0
- package/src/Query.ts +547 -0
- package/src/QueryResult.ts +106 -0
- package/src/Ref.ts +79 -9
- package/src/Relation.test.ts +88 -0
- package/src/Relation.ts +443 -58
- package/src/SchemaRegistry.ts +106 -0
- package/src/Tag.ts +7 -5
- package/src/Type.test.ts +52 -0
- package/src/Type.ts +167 -153
- package/src/View.ts +107 -0
- package/src/hierarchy.test.ts +33 -0
- package/src/index.ts +20 -6
- package/src/internal/Annotation/annotations.test.ts +145 -0
- package/src/internal/Annotation/annotations.ts +578 -0
- package/src/internal/Annotation/index.ts +7 -0
- package/src/internal/Annotation/sorting.ts +51 -0
- package/src/internal/Annotation/util.ts +85 -0
- package/src/internal/Entity/api.ts +30 -0
- package/src/internal/Entity/entity.ts +128 -0
- package/src/internal/Entity/index.ts +11 -0
- package/src/internal/Entity/model.ts +109 -0
- package/src/internal/Entity/object.ts +57 -0
- package/src/internal/Entity/relation.ts +154 -0
- package/src/internal/Entity/util.ts +33 -0
- package/src/internal/Entity/version.ts +96 -0
- package/src/internal/{formats → Format}/date.test.ts +1 -2
- package/src/internal/{formats → Format}/date.ts +5 -5
- package/src/internal/{formats → Format}/format.test.ts +6 -7
- package/src/internal/{formats → Format}/format.ts +8 -6
- package/src/internal/{formats → Format}/number.ts +5 -5
- package/src/internal/{formats → Format}/object.ts +4 -4
- package/src/internal/{formats → Format}/select.ts +6 -4
- package/src/internal/{formats → Format}/string.ts +14 -9
- package/src/internal/{formats → Format}/types.ts +54 -43
- package/src/internal/{json → JsonSchema}/annotations.ts +3 -3
- package/src/internal/{json-schema → JsonSchema}/index.ts +2 -0
- package/src/internal/{json-schema → JsonSchema}/json-schema-normalize.ts +4 -2
- package/src/internal/{json-schema → JsonSchema}/json-schema-type.ts +36 -36
- package/src/internal/{json → JsonSchema}/json-schema.test.ts +106 -95
- package/src/internal/{json → JsonSchema}/json-schema.ts +29 -15
- package/src/internal/Obj/clone.ts +48 -0
- package/src/internal/{object → Obj}/common.ts +3 -4
- package/src/internal/{object/create.test.ts → Obj/create-object.test.ts} +32 -36
- package/src/internal/{object/create.ts → Obj/create-object.ts} +35 -37
- package/src/internal/Obj/deleted.ts +19 -0
- package/src/internal/{object → Obj}/ids.ts +1 -1
- package/src/internal/Obj/index.ts +14 -0
- package/src/internal/{object → Obj}/inspect.ts +5 -7
- package/src/internal/Obj/json-serializer.test.ts +120 -0
- package/src/internal/{object → Obj}/json-serializer.ts +99 -109
- package/src/internal/{object → Obj}/schema-validator.test.ts +3 -7
- package/src/internal/Obj/schema-validator.ts +6 -0
- package/src/internal/Obj/set-value.test.ts +281 -0
- package/src/internal/Obj/set-value.ts +165 -0
- package/src/internal/Obj/snapshot.ts +105 -0
- package/src/internal/{object → Obj}/typed-object.test.ts +12 -12
- package/src/internal/Obj/typed-object.ts +30 -0
- package/src/internal/Query.ts +132 -0
- package/src/internal/{ref → Ref}/ref-array.ts +4 -5
- package/src/internal/{ref → Ref}/ref.test.ts +11 -11
- package/src/internal/{ref → Ref}/ref.ts +108 -57
- package/src/internal/{projection → Type}/compose.test.ts +8 -10
- package/src/internal/{projection → Type}/compose.ts +14 -9
- package/src/internal/{schema → Type}/echo-schema.ts +74 -34
- package/src/internal/Type/index.ts +7 -0
- package/src/internal/{schema → Type}/manipulation.ts +1 -1
- package/src/internal/Type/persistent-schema.ts +33 -0
- package/src/internal/common/README.md +102 -0
- package/src/internal/common/api/index.ts +15 -0
- package/src/internal/common/api/meta.ts +88 -0
- package/src/internal/{testing → common}/index.ts +2 -1
- package/src/internal/common/proxy/change-context.ts +138 -0
- package/src/internal/common/proxy/change.test.ts +519 -0
- package/src/internal/common/proxy/define-hidden-property.ts +14 -0
- package/src/internal/common/proxy/errors.ts +42 -0
- package/src/internal/common/proxy/event-batch.ts +44 -0
- package/src/internal/common/proxy/handler.test.ts +121 -0
- package/src/internal/common/proxy/index.ts +17 -0
- package/src/internal/common/proxy/json-serializer.ts +90 -0
- package/src/internal/common/proxy/make-object.ts +105 -0
- package/src/internal/common/proxy/ownership.ts +252 -0
- package/src/internal/common/proxy/proxy-types.ts +23 -0
- package/src/internal/common/proxy/proxy-utils.ts +150 -0
- package/src/internal/common/proxy/reactive-array.ts +71 -0
- package/src/internal/common/proxy/reactive.ts +68 -0
- package/src/internal/{object → common/proxy}/schema-validator.ts +6 -3
- package/src/internal/{proxy → common/proxy}/schema.test.ts +31 -22
- package/src/internal/common/proxy/symbols.ts +7 -0
- package/src/internal/common/proxy/typed-handler.test.ts +313 -0
- package/src/internal/common/proxy/typed-handler.ts +447 -0
- package/src/internal/common/proxy/typed-object.test.ts +115 -0
- package/src/internal/common/types/base.ts +43 -0
- package/src/internal/common/types/entity.ts +54 -0
- package/src/internal/common/types/index.ts +10 -0
- package/src/internal/common/types/meta.ts +67 -0
- package/src/internal/common/types/model-symbols.ts +69 -0
- package/src/internal/common/types/typename.ts +55 -0
- package/src/internal/common/types/version.ts +19 -0
- package/src/internal/index.ts +12 -17
- package/src/testing/api.test.ts +125 -0
- package/src/testing/index.ts +3 -3
- package/src/testing/test-data.ts +129 -0
- package/src/testing/test-schema.ts +240 -0
- package/src/testing/util.ts +85 -0
- package/dist/lib/browser/chunk-BIDAASFK.mjs +0 -3727
- package/dist/lib/browser/chunk-BIDAASFK.mjs.map +0 -7
- package/dist/lib/browser/chunk-ZDLCWGEW.mjs +0 -410
- package/dist/lib/browser/chunk-ZDLCWGEW.mjs.map +0 -7
- package/dist/lib/browser/chunk-ZFRJKT4A.mjs +0 -585
- package/dist/lib/browser/chunk-ZFRJKT4A.mjs.map +0 -7
- package/dist/lib/browser/index.mjs +0 -35
- package/dist/lib/browser/internal/index.mjs +0 -336
- package/dist/lib/browser/meta.json +0 -1
- package/dist/lib/browser/query/index.mjs +0 -13
- package/dist/lib/browser/testing/index.mjs +0 -267
- package/dist/lib/browser/testing/index.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-3SVRRCUU.mjs +0 -3727
- package/dist/lib/node-esm/chunk-3SVRRCUU.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-CGDHRZWH.mjs +0 -585
- package/dist/lib/node-esm/chunk-CGDHRZWH.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-HWS6VBQC.mjs +0 -410
- package/dist/lib/node-esm/chunk-HWS6VBQC.mjs.map +0 -7
- package/dist/lib/node-esm/index.mjs +0 -35
- package/dist/lib/node-esm/meta.json +0 -1
- package/dist/lib/node-esm/query/index.mjs +0 -13
- package/dist/lib/node-esm/testing/index.mjs +0 -267
- package/dist/lib/node-esm/testing/index.mjs.map +0 -7
- package/dist/types/src/errors.d.ts +0 -68
- package/dist/types/src/errors.d.ts.map +0 -1
- package/dist/types/src/internal/ast/annotation-helper.d.ts +0 -8
- package/dist/types/src/internal/ast/annotation-helper.d.ts.map +0 -1
- package/dist/types/src/internal/ast/annotations.d.ts +0 -131
- package/dist/types/src/internal/ast/annotations.d.ts.map +0 -1
- package/dist/types/src/internal/ast/annotations.test.d.ts.map +0 -1
- package/dist/types/src/internal/ast/entity-kind.d.ts +0 -10
- package/dist/types/src/internal/ast/entity-kind.d.ts.map +0 -1
- package/dist/types/src/internal/ast/index.d.ts +0 -5
- package/dist/types/src/internal/ast/index.d.ts.map +0 -1
- package/dist/types/src/internal/ast/types.d.ts +0 -6
- package/dist/types/src/internal/ast/types.d.ts.map +0 -1
- package/dist/types/src/internal/formats/date.d.ts.map +0 -1
- package/dist/types/src/internal/formats/date.test.d.ts.map +0 -1
- package/dist/types/src/internal/formats/format.d.ts.map +0 -1
- package/dist/types/src/internal/formats/format.test.d.ts.map +0 -1
- package/dist/types/src/internal/formats/index.d.ts.map +0 -1
- package/dist/types/src/internal/formats/number.d.ts.map +0 -1
- package/dist/types/src/internal/formats/object.d.ts.map +0 -1
- package/dist/types/src/internal/formats/select.d.ts.map +0 -1
- package/dist/types/src/internal/formats/string.d.ts.map +0 -1
- package/dist/types/src/internal/formats/types.d.ts.map +0 -1
- package/dist/types/src/internal/json/annotations.d.ts.map +0 -1
- package/dist/types/src/internal/json/effect-schema.test.d.ts.map +0 -1
- package/dist/types/src/internal/json/index.d.ts +0 -2
- package/dist/types/src/internal/json/index.d.ts.map +0 -1
- package/dist/types/src/internal/json/json-schema.d.ts.map +0 -1
- package/dist/types/src/internal/json/json-schema.test.d.ts.map +0 -1
- package/dist/types/src/internal/json-schema/index.d.ts +0 -3
- package/dist/types/src/internal/json-schema/index.d.ts.map +0 -1
- package/dist/types/src/internal/json-schema/json-schema-normalize.d.ts.map +0 -1
- package/dist/types/src/internal/json-schema/json-schema-type.d.ts.map +0 -1
- package/dist/types/src/internal/object/accessors.d.ts +0 -37
- package/dist/types/src/internal/object/accessors.d.ts.map +0 -1
- package/dist/types/src/internal/object/common.d.ts.map +0 -1
- package/dist/types/src/internal/object/create.d.ts.map +0 -1
- package/dist/types/src/internal/object/create.test.d.ts +0 -2
- package/dist/types/src/internal/object/create.test.d.ts.map +0 -1
- package/dist/types/src/internal/object/deleted.d.ts +0 -6
- package/dist/types/src/internal/object/deleted.d.ts.map +0 -1
- package/dist/types/src/internal/object/entity.d.ts +0 -33
- package/dist/types/src/internal/object/entity.d.ts.map +0 -1
- package/dist/types/src/internal/object/expando.d.ts +0 -14
- package/dist/types/src/internal/object/expando.d.ts.map +0 -1
- package/dist/types/src/internal/object/ids.d.ts.map +0 -1
- package/dist/types/src/internal/object/index.d.ts +0 -16
- package/dist/types/src/internal/object/index.d.ts.map +0 -1
- package/dist/types/src/internal/object/inspect.d.ts.map +0 -1
- package/dist/types/src/internal/object/json-serializer.d.ts +0 -32
- package/dist/types/src/internal/object/json-serializer.d.ts.map +0 -1
- package/dist/types/src/internal/object/json-serializer.test.d.ts.map +0 -1
- package/dist/types/src/internal/object/meta.d.ts.map +0 -1
- package/dist/types/src/internal/object/model.d.ts +0 -117
- package/dist/types/src/internal/object/model.d.ts.map +0 -1
- package/dist/types/src/internal/object/relation.d.ts +0 -17
- package/dist/types/src/internal/object/relation.d.ts.map +0 -1
- package/dist/types/src/internal/object/schema-validator.d.ts.map +0 -1
- package/dist/types/src/internal/object/schema-validator.test.d.ts.map +0 -1
- package/dist/types/src/internal/object/typed-object.d.ts +0 -31
- package/dist/types/src/internal/object/typed-object.d.ts.map +0 -1
- package/dist/types/src/internal/object/typed-object.test.d.ts.map +0 -1
- package/dist/types/src/internal/object/typename.d.ts +0 -15
- package/dist/types/src/internal/object/typename.d.ts.map +0 -1
- package/dist/types/src/internal/object/version.d.ts +0 -14
- package/dist/types/src/internal/object/version.d.ts.map +0 -1
- package/dist/types/src/internal/projection/compose.d.ts +0 -6
- package/dist/types/src/internal/projection/compose.d.ts.map +0 -1
- package/dist/types/src/internal/projection/compose.test.d.ts.map +0 -1
- package/dist/types/src/internal/projection/index.d.ts +0 -2
- package/dist/types/src/internal/projection/index.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/handler.test.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/reactive-object.d.ts +0 -15
- package/dist/types/src/internal/proxy/reactive-object.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/schema.test.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/typed-handler.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/typed-handler.test.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/typed-object.test.d.ts.map +0 -1
- package/dist/types/src/internal/query/index.d.ts +0 -2
- package/dist/types/src/internal/query/index.d.ts.map +0 -1
- package/dist/types/src/internal/query/query.d.ts +0 -17
- package/dist/types/src/internal/query/query.d.ts.map +0 -1
- package/dist/types/src/internal/ref/index.d.ts.map +0 -1
- package/dist/types/src/internal/ref/ref-array.d.ts.map +0 -1
- package/dist/types/src/internal/ref/ref.d.ts.map +0 -1
- package/dist/types/src/internal/ref/ref.test.d.ts.map +0 -1
- package/dist/types/src/internal/schema/echo-schema.d.ts.map +0 -1
- package/dist/types/src/internal/schema/index.d.ts +0 -7
- package/dist/types/src/internal/schema/index.d.ts.map +0 -1
- package/dist/types/src/internal/schema/manipulation.d.ts.map +0 -1
- package/dist/types/src/internal/schema/runtime-schema-registry.d.ts +0 -18
- package/dist/types/src/internal/schema/runtime-schema-registry.d.ts.map +0 -1
- package/dist/types/src/internal/schema/snapshot.d.ts +0 -6
- package/dist/types/src/internal/schema/snapshot.d.ts.map +0 -1
- package/dist/types/src/internal/schema/stored-schema.d.ts +0 -13
- package/dist/types/src/internal/schema/stored-schema.d.ts.map +0 -1
- package/dist/types/src/internal/testing/index.d.ts +0 -3
- package/dist/types/src/internal/testing/index.d.ts.map +0 -1
- package/dist/types/src/internal/testing/types.d.ts +0 -381
- package/dist/types/src/internal/testing/types.d.ts.map +0 -1
- package/dist/types/src/internal/testing/utils.d.ts +0 -10
- package/dist/types/src/internal/testing/utils.d.ts.map +0 -1
- package/dist/types/src/internal/types/index.d.ts +0 -3
- package/dist/types/src/internal/types/index.d.ts.map +0 -1
- package/dist/types/src/internal/types/types.d.ts +0 -79
- package/dist/types/src/internal/types/types.d.ts.map +0 -1
- package/dist/types/src/internal/types/types.test.d.ts +0 -2
- package/dist/types/src/internal/types/types.test.d.ts.map +0 -1
- package/dist/types/src/internal/types/util.d.ts +0 -5
- package/dist/types/src/internal/types/util.d.ts.map +0 -1
- package/dist/types/src/query/index.d.ts +0 -2
- package/dist/types/src/query/index.d.ts.map +0 -1
- package/dist/types/src/query/query.d.ts +0 -248
- package/dist/types/src/query/query.d.ts.map +0 -1
- package/dist/types/src/query/query.test.d.ts +0 -2
- package/dist/types/src/query/query.test.d.ts.map +0 -1
- package/dist/types/src/testing/echo-schema.d.ts +0 -7
- package/dist/types/src/testing/echo-schema.d.ts.map +0 -1
- package/dist/types/src/testing/types.d.ts +0 -228
- package/dist/types/src/testing/types.d.ts.map +0 -1
- package/src/errors.ts +0 -18
- package/src/internal/ast/annotation-helper.ts +0 -22
- package/src/internal/ast/annotations.test.ts +0 -98
- package/src/internal/ast/annotations.ts +0 -226
- package/src/internal/ast/entity-kind.ts +0 -15
- package/src/internal/ast/index.ts +0 -8
- package/src/internal/ast/types.ts +0 -17
- package/src/internal/json/index.ts +0 -5
- package/src/internal/object/accessors.ts +0 -153
- package/src/internal/object/deleted.ts +0 -19
- package/src/internal/object/entity.ts +0 -248
- package/src/internal/object/expando.ts +0 -21
- package/src/internal/object/index.ts +0 -19
- package/src/internal/object/json-serializer.test.ts +0 -99
- package/src/internal/object/meta.ts +0 -61
- package/src/internal/object/model.ts +0 -170
- package/src/internal/object/relation.ts +0 -24
- package/src/internal/object/typed-object.ts +0 -88
- package/src/internal/object/typename.ts +0 -61
- package/src/internal/object/version.ts +0 -22
- package/src/internal/projection/index.ts +0 -5
- package/src/internal/proxy/handler.test.ts +0 -163
- package/src/internal/proxy/reactive-object.ts +0 -108
- package/src/internal/proxy/typed-handler.test.ts +0 -102
- package/src/internal/proxy/typed-handler.ts +0 -228
- package/src/internal/proxy/typed-object.test.ts +0 -100
- package/src/internal/query/index.ts +0 -5
- package/src/internal/query/query.ts +0 -23
- package/src/internal/schema/index.ts +0 -10
- package/src/internal/schema/runtime-schema-registry.ts +0 -78
- package/src/internal/schema/snapshot.ts +0 -25
- package/src/internal/schema/stored-schema.ts +0 -26
- package/src/internal/testing/types.ts +0 -144
- package/src/internal/testing/utils.ts +0 -54
- package/src/internal/types/index.ts +0 -6
- package/src/internal/types/types.test.ts +0 -48
- package/src/internal/types/types.ts +0 -176
- package/src/internal/types/util.ts +0 -9
- package/src/query/index.ts +0 -6
- package/src/query/query.test.ts +0 -401
- package/src/query/query.ts +0 -789
- package/src/test/api.test.ts +0 -180
- package/src/testing/echo-schema.ts +0 -39
- package/src/testing/types.ts +0 -108
- /package/dist/lib/{browser/index.mjs.map → neutral/Annotation.mjs.map} +0 -0
- /package/dist/lib/{browser/internal/index.mjs.map → neutral/Database.mjs.map} +0 -0
- /package/dist/lib/{browser/query/index.mjs.map → neutral/Entity.mjs.map} +0 -0
- /package/dist/lib/{node-esm/index.mjs.map → neutral/Err.mjs.map} +0 -0
- /package/dist/lib/{node-esm/internal/index.mjs.map → neutral/Extension.mjs.map} +0 -0
- /package/dist/lib/{node-esm/query/index.mjs.map → neutral/Feed.mjs.map} +0 -0
- /package/dist/types/src/internal/{ast → Annotation}/annotations.test.d.ts +0 -0
- /package/dist/types/src/internal/{formats → Format}/date.d.ts +0 -0
- /package/dist/types/src/internal/{formats → Format}/date.test.d.ts +0 -0
- /package/dist/types/src/internal/{formats → Format}/format.test.d.ts +0 -0
- /package/dist/types/src/internal/{formats → Format}/index.d.ts +0 -0
- /package/dist/types/src/internal/{formats → Format}/number.d.ts +0 -0
- /package/dist/types/src/internal/{formats → Format}/object.d.ts +0 -0
- /package/dist/types/src/internal/{json → JsonSchema}/effect-schema.test.d.ts +0 -0
- /package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema-normalize.d.ts +0 -0
- /package/dist/types/src/internal/{json → JsonSchema}/json-schema.test.d.ts +0 -0
- /package/dist/types/src/internal/{object → Obj}/common.d.ts +0 -0
- /package/dist/types/src/internal/{object → Obj}/ids.d.ts +0 -0
- /package/dist/types/src/internal/{object → Obj}/inspect.d.ts +0 -0
- /package/dist/types/src/internal/{object → Obj}/json-serializer.test.d.ts +0 -0
- /package/dist/types/src/internal/{object → Obj}/schema-validator.test.d.ts +0 -0
- /package/dist/types/src/internal/{object → Obj}/typed-object.test.d.ts +0 -0
- /package/dist/types/src/internal/{ref → Ref}/index.d.ts +0 -0
- /package/dist/types/src/internal/{ref → Ref}/ref.test.d.ts +0 -0
- /package/dist/types/src/internal/{projection → Type}/compose.test.d.ts +0 -0
- /package/dist/types/src/internal/{schema → Type}/manipulation.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/handler.test.d.ts +0 -0
- /package/dist/types/src/internal/{object → common/proxy}/schema-validator.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/schema.test.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/typed-handler.test.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/typed-object.test.d.ts +0 -0
- /package/dist/types/src/{test → testing}/api.test.d.ts +0 -0
- /package/src/internal/{formats → Format}/index.ts +0 -0
- /package/src/internal/{json → JsonSchema}/effect-schema.test.ts +0 -0
- /package/src/internal/{ref → Ref}/index.ts +0 -0
package/src/Tag.ts
CHANGED
|
@@ -2,9 +2,11 @@
|
|
|
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
|
-
import
|
|
9
|
+
import * as internal from './internal';
|
|
8
10
|
import * as Obj from './Obj';
|
|
9
11
|
import * as Type from './Type';
|
|
10
12
|
|
|
@@ -12,18 +14,18 @@ export const Tag = Schema.Struct({
|
|
|
12
14
|
label: Schema.String,
|
|
13
15
|
hue: Schema.optional(Schema.String), // TODO(burdon): Color name?
|
|
14
16
|
}).pipe(
|
|
15
|
-
Type.
|
|
16
|
-
typename: 'dxos.
|
|
17
|
+
Type.object({
|
|
18
|
+
typename: 'org.dxos.type.tag',
|
|
17
19
|
version: '0.1.0',
|
|
18
20
|
}),
|
|
19
|
-
LabelAnnotation.set(['label']),
|
|
21
|
+
internal.LabelAnnotation.set(['label']),
|
|
22
|
+
internal.SystemTypeAnnotation.set(true),
|
|
20
23
|
);
|
|
21
24
|
|
|
22
25
|
export type Tag = Schema.Schema.Type<typeof Tag>;
|
|
23
26
|
|
|
24
27
|
export const make = (props: Obj.MakeProps<typeof Tag>) => Obj.make(Tag, props);
|
|
25
28
|
|
|
26
|
-
// TODO(burdon): Rename Map.
|
|
27
29
|
export type Map = Record<string, Tag>;
|
|
28
30
|
|
|
29
31
|
export const sortTags = ({ label: a }: Tag, { label: b }: Tag) => a.localeCompare(b);
|
package/src/Type.test.ts
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2026 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import * as Schema from 'effect/Schema';
|
|
6
|
+
import { describe, test } from 'vitest';
|
|
7
|
+
|
|
8
|
+
import * as Obj from './Obj';
|
|
9
|
+
import * as Relation from './Relation';
|
|
10
|
+
import { TestSchema } from './testing';
|
|
11
|
+
import * as Type from './Type';
|
|
12
|
+
|
|
13
|
+
describe('Type', () => {
|
|
14
|
+
describe('Obj.Unknown schema', () => {
|
|
15
|
+
test('has SchemaKindId for schema type checking', ({ expect }) => {
|
|
16
|
+
// Type.isObjectSchema uses SchemaKindId to check if a schema is an object schema.
|
|
17
|
+
expect(Type.isObjectSchema(Obj.Unknown)).toBe(true);
|
|
18
|
+
expect(Type.isObjectSchema(TestSchema.Person)).toBe(true);
|
|
19
|
+
expect(Type.isObjectSchema(Relation.Unknown)).toBe(false);
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
test('Schema.is validates structural compatibility only', ({ expect }) => {
|
|
23
|
+
// Schema.is does structural validation (has id field).
|
|
24
|
+
// It accepts both ECHO objects and plain objects with compatible structure.
|
|
25
|
+
expect(Schema.is(Obj.Unknown)({ id: 'plain-object' })).toBe(true);
|
|
26
|
+
const obj = Obj.make(TestSchema.Person, { name: 'Test' });
|
|
27
|
+
expect(Schema.is(Obj.Unknown)(obj)).toBe(true);
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
describe('Relation.Unknown schema', () => {
|
|
32
|
+
test('has SchemaKindId for schema type checking', ({ expect }) => {
|
|
33
|
+
// Type.isRelationSchema uses SchemaKindId to check if a schema is a relation schema.
|
|
34
|
+
expect(Type.isRelationSchema(Relation.Unknown)).toBe(true);
|
|
35
|
+
expect(Type.isRelationSchema(TestSchema.HasManager)).toBe(true);
|
|
36
|
+
expect(Type.isRelationSchema(Obj.Unknown)).toBe(false);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
test('Schema.is validates structural compatibility only', ({ expect }) => {
|
|
40
|
+
// Schema.is does structural validation (has id field).
|
|
41
|
+
// It accepts both ECHO relations and plain objects with compatible structure.
|
|
42
|
+
expect(Schema.is(Relation.Unknown)({ id: 'plain-object' })).toBe(true);
|
|
43
|
+
const obj1 = Obj.make(TestSchema.Person, { name: 'Alice' });
|
|
44
|
+
const obj2 = Obj.make(TestSchema.Person, { name: 'Bob' });
|
|
45
|
+
const rel = Relation.make(TestSchema.HasManager, {
|
|
46
|
+
[Relation.Source]: obj1,
|
|
47
|
+
[Relation.Target]: obj2,
|
|
48
|
+
});
|
|
49
|
+
expect(Schema.is(Relation.Unknown)(rel)).toBe(true);
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
});
|
package/src/Type.ts
CHANGED
|
@@ -2,212 +2,231 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
// @import-as-namespace
|
|
6
|
+
|
|
7
|
+
import type * as Schema from 'effect/Schema';
|
|
6
8
|
|
|
7
9
|
import { type EncodedReference } from '@dxos/echo-protocol';
|
|
8
10
|
import { invariant } from '@dxos/invariant';
|
|
9
|
-
import type
|
|
11
|
+
import { type DXN } from '@dxos/keys';
|
|
12
|
+
import { type ToMutable } from '@dxos/util';
|
|
10
13
|
|
|
11
|
-
import
|
|
12
|
-
import * as
|
|
14
|
+
import type * as Entity from './Entity';
|
|
15
|
+
import * as internal from './internal';
|
|
16
|
+
import * as typeInternal from './internal/Type';
|
|
17
|
+
import type * as ObjModule from './Obj';
|
|
13
18
|
import type * as RelationModule from './Relation';
|
|
14
19
|
|
|
15
|
-
//
|
|
16
|
-
// Kind
|
|
17
|
-
//
|
|
18
|
-
|
|
19
|
-
export const KindId: unique symbol = EchoSchema.EntityKindId as any;
|
|
20
|
-
export type KindId = typeof KindId;
|
|
21
|
-
|
|
22
|
-
export const Kind = EchoSchema.EntityKind;
|
|
23
|
-
|
|
24
20
|
/**
|
|
25
|
-
*
|
|
21
|
+
* Dynamic type that can be constructed, mutated, and persisted in the ECHO database.
|
|
26
22
|
*/
|
|
27
|
-
|
|
28
|
-
export interface OfKind<Kind extends EchoSchema.EntityKind> {
|
|
29
|
-
readonly id: Keys.ObjectId;
|
|
30
|
-
readonly [KindId]: Kind;
|
|
31
|
-
}
|
|
23
|
+
export const RuntimeType = typeInternal.EchoSchema;
|
|
32
24
|
|
|
33
25
|
/**
|
|
34
|
-
*
|
|
26
|
+
* Dynamic type that can be constructed, mutated, and persisted in the ECHO database.
|
|
35
27
|
*/
|
|
36
|
-
export type
|
|
28
|
+
export type RuntimeType = typeInternal.EchoSchema;
|
|
29
|
+
|
|
30
|
+
//
|
|
31
|
+
// Internal types (not exported)
|
|
32
|
+
//
|
|
37
33
|
|
|
38
34
|
/**
|
|
39
|
-
*
|
|
35
|
+
* Type that marks a schema as an ECHO schema.
|
|
36
|
+
* The value indicates the entity kind (Object or Relation).
|
|
40
37
|
*/
|
|
41
|
-
|
|
38
|
+
type EchoSchemaKind<K extends internal.EntityKind = internal.EntityKind> = {
|
|
39
|
+
readonly [internal.SchemaKindId]: K;
|
|
40
|
+
};
|
|
42
41
|
|
|
43
42
|
//
|
|
44
|
-
// Obj
|
|
43
|
+
// Obj - Runtime schema for any ECHO object
|
|
45
44
|
//
|
|
46
45
|
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
/**
|
|
47
|
+
* TypeScript type for an ECHO object schema.
|
|
48
|
+
* `T` is the instance type produced by the schema.
|
|
49
|
+
* `Fields` is the optional struct fields type for introspection.
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```ts
|
|
53
|
+
* const PersonSchema: Type.Obj<Person> = Schema.Struct({
|
|
54
|
+
* name: Schema.String,
|
|
55
|
+
* }).pipe(Type.object({ typename: 'Person', version: '0.1.0' }));
|
|
56
|
+
*
|
|
57
|
+
* // Access fields for introspection:
|
|
58
|
+
* Object.keys(PersonSchema.fields); // ['name']
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
export interface Obj<T, Fields extends Schema.Struct.Fields = Schema.Struct.Fields>
|
|
62
|
+
extends
|
|
63
|
+
internal.TypeMeta,
|
|
64
|
+
EchoSchemaKind<internal.EntityKind.Object>,
|
|
65
|
+
Schema.AnnotableClass<
|
|
66
|
+
Obj<T, Fields>,
|
|
67
|
+
Entity.OfKind<typeof Entity.Kind.Object> & T,
|
|
68
|
+
Schema.Simplify<ObjModule.BaseObjJson & ToMutable<T>>,
|
|
69
|
+
never
|
|
70
|
+
> {
|
|
71
|
+
/**
|
|
72
|
+
* The fields defined in the original struct schema.
|
|
73
|
+
* Allows accessing field definitions for introspection.
|
|
74
|
+
*/
|
|
75
|
+
readonly fields: Fields;
|
|
49
76
|
}
|
|
50
77
|
|
|
51
78
|
/**
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
79
|
+
* Structural base type for any ECHO object schema.
|
|
80
|
+
* Accepts both static schemas (created with Type.object()) and EchoSchema.
|
|
81
|
+
* NOTE: Does not include the brand symbol to avoid TS4053 declaration portability issues.
|
|
82
|
+
* Use Type.isObjectSchema() for runtime type guards.
|
|
56
83
|
*/
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
OfKind<EchoSchema.EntityKind.Object> & ToMutable<EffectSchema.Schema.Type<Self>>,
|
|
62
|
-
EffectSchema.Simplify<ObjJsonProps & ToMutable<EffectSchema.Schema.Encoded<Self>>>,
|
|
63
|
-
EffectSchema.Schema.Context<Self>
|
|
64
|
-
> {}
|
|
84
|
+
type ObjectSchemaBase = Schema.Schema.AnyNoContext & {
|
|
85
|
+
readonly typename: string;
|
|
86
|
+
readonly version: string;
|
|
87
|
+
};
|
|
65
88
|
|
|
66
89
|
/**
|
|
67
|
-
*
|
|
90
|
+
* Type that represents any ECHO object schema.
|
|
91
|
+
* Accepts both static schemas (Type.object()) and mutable schemas (EchoSchema).
|
|
68
92
|
*/
|
|
69
|
-
export
|
|
70
|
-
(opts: EchoSchema.TypeMeta): <Self extends EffectSchema.Schema.Any>(self: Self) => obj<Self>;
|
|
71
|
-
} = EchoSchema.EchoObject as any;
|
|
93
|
+
export type AnyObj = ObjectSchemaBase;
|
|
72
94
|
|
|
73
95
|
/**
|
|
74
|
-
*
|
|
96
|
+
* Factory function to create an ECHO object schema.
|
|
97
|
+
* Adds object metadata annotations to an Effect schema.
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* ```ts
|
|
101
|
+
* const Person = Schema.Struct({
|
|
102
|
+
* name: Schema.String,
|
|
103
|
+
* }).pipe(Type.object({ typename: 'com.example.type.person', version: '0.1.0' }));
|
|
104
|
+
* ```
|
|
75
105
|
*/
|
|
76
|
-
export
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
* NOTE: This is not an instance type.
|
|
80
|
-
*/
|
|
81
|
-
// TODO(dmaretskyi): If schema was covariant, we could specify props in here, like `id: ObjectId`.
|
|
82
|
-
// TODO(burdon): This erases the ECHO type info (e.g., id, typename).
|
|
83
|
-
export type Any = EffectSchema.Schema.AnyNoContext;
|
|
84
|
-
}
|
|
106
|
+
export const object: {
|
|
107
|
+
(opts: internal.TypeMeta): <Self extends Schema.Schema.Any>(self: Self) => Obj<Schema.Schema.Type<Self>>;
|
|
108
|
+
} = internal.EchoObjectSchema as any;
|
|
85
109
|
|
|
86
110
|
//
|
|
87
|
-
//
|
|
111
|
+
// PersistentType (Schema stored in database)
|
|
88
112
|
//
|
|
89
113
|
|
|
90
|
-
|
|
91
|
-
export interface Expando extends OfKind<EchoSchema.EntityKind.Object> {
|
|
92
|
-
[key: string]: any;
|
|
93
|
-
}
|
|
114
|
+
export const PersistentType: Obj<typeInternal.PersistentSchema> = typeInternal.PersistentSchema as any;
|
|
94
115
|
|
|
95
|
-
|
|
116
|
+
export interface PersistentType extends Schema.Schema.Type<typeof PersistentType> {}
|
|
96
117
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
interface
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
118
|
+
/**
|
|
119
|
+
* TypeScript type for an ECHO relation schema.
|
|
120
|
+
* `T` is the instance type produced by the schema (excluding source/target).
|
|
121
|
+
* `Source` and `Target` are the endpoint types.
|
|
122
|
+
* `Fields` is the optional struct fields type for introspection.
|
|
123
|
+
*/
|
|
124
|
+
export interface Relation<T, Source, Target, Fields extends Schema.Struct.Fields = Schema.Struct.Fields>
|
|
125
|
+
extends
|
|
126
|
+
internal.TypeMeta,
|
|
127
|
+
EchoSchemaKind<internal.EntityKind.Relation>,
|
|
128
|
+
Schema.AnnotableClass<
|
|
129
|
+
Relation<T, Source, Target, Fields>,
|
|
130
|
+
Entity.OfKind<typeof Entity.Kind.Relation> & RelationModule.Endpoints<Source, Target> & T,
|
|
131
|
+
Schema.Simplify<RelationModule.BaseRelationJson & ToMutable<T>>,
|
|
132
|
+
never
|
|
133
|
+
> {
|
|
134
|
+
/**
|
|
135
|
+
* The fields defined in the original struct schema.
|
|
136
|
+
* Allows accessing field definitions for introspection.
|
|
137
|
+
*/
|
|
138
|
+
readonly fields: Fields;
|
|
107
139
|
}
|
|
108
140
|
|
|
109
141
|
/**
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
*
|
|
113
|
-
*
|
|
142
|
+
* Structural base type for any ECHO relation schema.
|
|
143
|
+
* Accepts static schemas (created with Type.relation()).
|
|
144
|
+
* NOTE: Does not include the brand symbol to avoid TS4053 declaration portability issues.
|
|
145
|
+
* Use Type.isRelationSchema() for runtime type guards.
|
|
114
146
|
*/
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
> extends EchoSchema.TypeMeta,
|
|
120
|
-
EffectSchema.AnnotableClass<
|
|
121
|
-
relation<Self, SourceSchema, TargetSchema>,
|
|
122
|
-
OfKind<EchoSchema.EntityKind.Relation> &
|
|
123
|
-
Relation.Endpoints<EffectSchema.Schema.Type<SourceSchema>, EffectSchema.Schema.Type<TargetSchema>> &
|
|
124
|
-
ToMutable<EffectSchema.Schema.Type<Self>>,
|
|
125
|
-
EffectSchema.Simplify<RelationJsonProps & ToMutable<EffectSchema.Schema.Encoded<Self>>>,
|
|
126
|
-
EffectSchema.Schema.Context<Self>
|
|
127
|
-
> {}
|
|
147
|
+
type RelationSchemaBase = Schema.Schema.AnyNoContext & {
|
|
148
|
+
readonly typename: string;
|
|
149
|
+
readonly version: string;
|
|
150
|
+
};
|
|
128
151
|
|
|
129
152
|
/**
|
|
130
|
-
*
|
|
153
|
+
* Type that represents any ECHO relation schema.
|
|
154
|
+
* Accepts static schemas (Type.relation()).
|
|
131
155
|
*/
|
|
132
|
-
|
|
133
|
-
export const Relation: {
|
|
134
|
-
<Source extends EffectSchema.Schema.AnyNoContext, Target extends EffectSchema.Schema.AnyNoContext>(
|
|
135
|
-
opts: EchoSchema.EchoRelationOptions<Source, Target>,
|
|
136
|
-
): <Self extends EffectSchema.Schema.Any>(self: Self) => relation<Self, Source, Target>;
|
|
137
|
-
} = EchoSchema.EchoRelation as any;
|
|
156
|
+
export type AnyRelation = RelationSchemaBase;
|
|
138
157
|
|
|
139
158
|
/**
|
|
140
|
-
*
|
|
159
|
+
* Factory function to create an ECHO relation schema.
|
|
160
|
+
* Adds relation metadata annotations to an Effect schema.
|
|
161
|
+
*
|
|
162
|
+
* @example
|
|
163
|
+
* ```ts
|
|
164
|
+
* const WorksFor = Schema.Struct({
|
|
165
|
+
* role: Schema.String,
|
|
166
|
+
* }).pipe(Type.relation({
|
|
167
|
+
* typename: 'com.example.type.works-for',
|
|
168
|
+
* version: '0.1.0',
|
|
169
|
+
* source: Person,
|
|
170
|
+
* target: Company,
|
|
171
|
+
* }));
|
|
172
|
+
* ```
|
|
141
173
|
*/
|
|
142
|
-
export
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
174
|
+
export const relation: {
|
|
175
|
+
<SourceSchema extends Schema.Schema.AnyNoContext, TargetSchema extends Schema.Schema.AnyNoContext>(
|
|
176
|
+
opts: internal.EchoRelationSchemaOptions<SourceSchema, TargetSchema>,
|
|
177
|
+
): <Self extends Schema.Schema.Any>(
|
|
178
|
+
self: Self,
|
|
179
|
+
) => Relation<Schema.Schema.Type<Self>, Schema.Schema.Type<SourceSchema>, Schema.Schema.Type<TargetSchema>>;
|
|
180
|
+
} = internal.EchoRelationSchema as any;
|
|
149
181
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
/**
|
|
156
|
-
* Get relation target type.
|
|
157
|
-
*/
|
|
158
|
-
export type Target<A> = A extends Relation.Endpoints<infer _S, infer T> ? T : never;
|
|
159
|
-
|
|
160
|
-
export type Endpoints<Source, Target> = {
|
|
161
|
-
[RelationModule.Source]: Source;
|
|
162
|
-
[RelationModule.Target]: Target;
|
|
163
|
-
};
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
//
|
|
167
|
-
// Ref
|
|
168
|
-
//
|
|
182
|
+
/**
|
|
183
|
+
* Type alias for any ECHO entity schema (object or relation).
|
|
184
|
+
* Use this in type annotations for schema parameters.
|
|
185
|
+
*/
|
|
186
|
+
export type AnyEntity = AnyObj | AnyRelation;
|
|
169
187
|
|
|
170
188
|
/**
|
|
171
|
-
*
|
|
172
|
-
*
|
|
173
|
-
* This typedef avoids `TS4023` error (name from external module cannot be used named).
|
|
174
|
-
* See Effect's note on interface types.
|
|
189
|
+
* Type guard to check if a schema is an object schema.
|
|
190
|
+
* NOTE: This checks SCHEMAS, not instances. Use Obj.isObject for instances.
|
|
175
191
|
*/
|
|
176
|
-
export
|
|
177
|
-
|
|
192
|
+
export const isObjectSchema = (schema: AnyEntity): schema is AnyObj => {
|
|
193
|
+
return (schema as any)[internal.SchemaKindId] === internal.EntityKind.Object;
|
|
194
|
+
};
|
|
178
195
|
|
|
179
196
|
/**
|
|
180
|
-
*
|
|
197
|
+
* Type guard to check if a schema is a relation schema.
|
|
198
|
+
* NOTE: This checks SCHEMAS, not instances. Use Relation.isRelation for instances.
|
|
181
199
|
*/
|
|
182
|
-
export const
|
|
200
|
+
export const isRelationSchema = (schema: AnyEntity): schema is AnyRelation => {
|
|
201
|
+
return (schema as any)[internal.SchemaKindId] === internal.EntityKind.Relation;
|
|
202
|
+
};
|
|
183
203
|
|
|
184
|
-
|
|
204
|
+
/**
|
|
205
|
+
* Type that represents any Ref schema (with unknown target type).
|
|
206
|
+
* This is a schema type, not an instance type.
|
|
207
|
+
*/
|
|
208
|
+
export type AnyRef = Schema.Schema<internal.Ref<any>, EncodedReference>;
|
|
185
209
|
|
|
186
|
-
//
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
* Type that represents an arbitrary schema type of a reference.
|
|
190
|
-
* NOTE: This is not an instance type.
|
|
191
|
-
*/
|
|
192
|
-
export type Any = EffectSchema.Schema<EchoSchema.Ref<any>, EncodedReference>;
|
|
193
|
-
}
|
|
210
|
+
//
|
|
211
|
+
// Schema utility functions
|
|
212
|
+
//
|
|
194
213
|
|
|
195
214
|
/**
|
|
196
215
|
* Gets the full DXN of the schema.
|
|
197
216
|
* Will include the version if it's a `type` DXN.
|
|
198
|
-
* @example "dxn:example.
|
|
217
|
+
* @example "dxn:com.example.type.person:0.1.0"
|
|
199
218
|
* @example "dxn:echo:SSSSSSSSSS:XXXXXXXXXXXXX"
|
|
200
219
|
*/
|
|
201
|
-
export const getDXN = (schema:
|
|
202
|
-
return
|
|
220
|
+
export const getDXN = (schema: AnyEntity): DXN | undefined => {
|
|
221
|
+
return internal.getSchemaDXN(schema);
|
|
203
222
|
};
|
|
204
223
|
|
|
205
224
|
/**
|
|
206
225
|
* @param schema - Schema to get the typename from.
|
|
207
|
-
* @returns The typename of the schema. Example: `example.
|
|
226
|
+
* @returns The typename of the schema. Example: `com.example.type.person`.
|
|
208
227
|
*/
|
|
209
|
-
export const getTypename = (schema:
|
|
210
|
-
const typename =
|
|
228
|
+
export const getTypename = (schema: AnyEntity): string => {
|
|
229
|
+
const typename = internal.getSchemaTypename(schema);
|
|
211
230
|
invariant(typeof typename === 'string' && !typename.startsWith('dxn:'), 'Invalid typename');
|
|
212
231
|
return typename;
|
|
213
232
|
};
|
|
@@ -216,8 +235,8 @@ export const getTypename = (schema: Obj.Any | Relation.Any): string => {
|
|
|
216
235
|
* Gets the version of the schema.
|
|
217
236
|
* @example 0.1.0
|
|
218
237
|
*/
|
|
219
|
-
export const getVersion = (schema:
|
|
220
|
-
const version =
|
|
238
|
+
export const getVersion = (schema: AnyEntity): string => {
|
|
239
|
+
const version = internal.getSchemaVersion(schema);
|
|
221
240
|
invariant(typeof version === 'string' && version.match(/^\d+\.\d+\.\d+$/), 'Invalid version');
|
|
222
241
|
return version;
|
|
223
242
|
};
|
|
@@ -225,21 +244,16 @@ export const getVersion = (schema: Obj.Any | Relation.Any): string => {
|
|
|
225
244
|
/**
|
|
226
245
|
* @returns True if the schema is mutable.
|
|
227
246
|
*/
|
|
228
|
-
export const isMutable =
|
|
247
|
+
export const isMutable = typeInternal.isMutable;
|
|
229
248
|
|
|
230
249
|
/**
|
|
231
250
|
* ECHO type metadata.
|
|
232
251
|
*/
|
|
233
|
-
export type Meta =
|
|
252
|
+
export type Meta = internal.TypeAnnotation;
|
|
234
253
|
|
|
235
254
|
/**
|
|
236
255
|
* Gets the meta data of the schema.
|
|
237
256
|
*/
|
|
238
|
-
export const getMeta = (schema:
|
|
239
|
-
return
|
|
257
|
+
export const getMeta = (schema: AnyEntity): Meta | undefined => {
|
|
258
|
+
return internal.getTypeAnnotation(schema);
|
|
240
259
|
};
|
|
241
|
-
|
|
242
|
-
// TODO(dmaretskyi): Remove re-exports.
|
|
243
|
-
export { SpaceId, ObjectId, DXN } from '@dxos/keys';
|
|
244
|
-
|
|
245
|
-
export { Format, JsonSchemaType as JsonSchema, toEffectSchema, toJsonSchema } from './internal';
|
package/src/View.ts
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
// @import-as-namespace
|
|
6
|
+
|
|
7
|
+
import * as Schema from 'effect/Schema';
|
|
8
|
+
|
|
9
|
+
import { QueryAST } from '@dxos/echo-protocol';
|
|
10
|
+
import { JsonPath } from '@dxos/effect';
|
|
11
|
+
import { PublicKey } from '@dxos/keys';
|
|
12
|
+
|
|
13
|
+
import * as Annotation from './Annotation';
|
|
14
|
+
import * as Filter from './Filter';
|
|
15
|
+
import * as internal from './internal';
|
|
16
|
+
import * as Obj from './Obj';
|
|
17
|
+
import * as Query from './Query';
|
|
18
|
+
import * as Type from './Type';
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Stored field metadata (e.g., for UX).
|
|
22
|
+
*/
|
|
23
|
+
export const FieldSchema = Schema.Struct({
|
|
24
|
+
id: Schema.String,
|
|
25
|
+
path: JsonPath,
|
|
26
|
+
visible: Schema.optional(Schema.Boolean),
|
|
27
|
+
|
|
28
|
+
// TODO(wittjosiah): Presentation-specific?
|
|
29
|
+
referencePath: Schema.optional(JsonPath),
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
export type FieldType = Schema.Schema.Type<typeof FieldSchema>;
|
|
33
|
+
|
|
34
|
+
export const KeyValueProps = Schema.Record({ key: Schema.String, value: Schema.Any });
|
|
35
|
+
|
|
36
|
+
export const createFieldId = () => PublicKey.random().truncate();
|
|
37
|
+
|
|
38
|
+
export const Projection = Schema.Struct({
|
|
39
|
+
/**
|
|
40
|
+
* Optional schema override used to customize the underlying schema.
|
|
41
|
+
*/
|
|
42
|
+
schema: internal.JsonSchemaType.pipe(Schema.optional),
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* UX metadata associated with displayed fields (in table, form, etc.)
|
|
46
|
+
*/
|
|
47
|
+
// TODO(wittjosiah): Should this just be an array of JsonPath?
|
|
48
|
+
fields: Schema.Array(FieldSchema),
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* The id for the field used to pivot the view.
|
|
52
|
+
* E.g., the field to use for kanban columns or the field to use for map coordinates.
|
|
53
|
+
*/
|
|
54
|
+
pivotFieldId: Schema.String.pipe(Schema.optional),
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
export type Projection = Schema.Schema.Type<typeof Projection>;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Views are generated or user-defined projections of a schema's properties.
|
|
61
|
+
* They are used to configure the visual representation of the data.
|
|
62
|
+
*/
|
|
63
|
+
const ViewSchema = Schema.Struct({
|
|
64
|
+
/**
|
|
65
|
+
* Query used to retrieve data.
|
|
66
|
+
* Can be a user-provided query grammar string or a query AST.
|
|
67
|
+
*/
|
|
68
|
+
query: Schema.Struct({
|
|
69
|
+
raw: Schema.optional(Schema.String),
|
|
70
|
+
ast: QueryAST.Query,
|
|
71
|
+
}),
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Projection of the data returned from the query.
|
|
75
|
+
*/
|
|
76
|
+
projection: Projection,
|
|
77
|
+
}).pipe(
|
|
78
|
+
Type.object({
|
|
79
|
+
typename: 'org.dxos.type.view',
|
|
80
|
+
version: '0.1.0',
|
|
81
|
+
}),
|
|
82
|
+
internal.SystemTypeAnnotation.set(true),
|
|
83
|
+
Annotation.IconAnnotation.set({
|
|
84
|
+
icon: 'ph--funnel--regular',
|
|
85
|
+
hue: 'green',
|
|
86
|
+
}),
|
|
87
|
+
);
|
|
88
|
+
|
|
89
|
+
export interface View extends Schema.Schema.Type<typeof ViewSchema> {}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* View instance type.
|
|
93
|
+
*/
|
|
94
|
+
// NOTE: This interface is explicitly defined rather than derived from the schema to avoid
|
|
95
|
+
// TypeScript "cannot be named" portability errors. The schema contains QueryAST.Query which
|
|
96
|
+
// references internal @dxos/echo-protocol module paths. Without this explicit interface,
|
|
97
|
+
// any schema using Ref.Ref(View) would inherit the non-portable type and fail to compile.
|
|
98
|
+
// TODO(wittjosiah): Find a better solution that doesn't require manually keeping the interface in sync.
|
|
99
|
+
export const View: Type.Obj<View> = ViewSchema as any;
|
|
100
|
+
|
|
101
|
+
export const make = (props: Partial<Obj.MakeProps<typeof View>>): View => {
|
|
102
|
+
return Obj.make(View, {
|
|
103
|
+
query: { ast: Query.select(Filter.nothing()).ast },
|
|
104
|
+
projection: { fields: [] },
|
|
105
|
+
...props,
|
|
106
|
+
});
|
|
107
|
+
};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { describe, expect, test } from 'vitest';
|
|
6
|
+
|
|
7
|
+
import * as Obj from './Obj';
|
|
8
|
+
import { TestSchema } from './testing';
|
|
9
|
+
|
|
10
|
+
describe('Hierarchy', () => {
|
|
11
|
+
test('setParent and getParent', async () => {
|
|
12
|
+
const parent = Obj.make(TestSchema.Organization, { name: 'parent' });
|
|
13
|
+
const child = Obj.make(TestSchema.Person, { name: 'child' });
|
|
14
|
+
expect(Obj.getParent(child)).toBeUndefined();
|
|
15
|
+
|
|
16
|
+
Obj.setParent(child, parent);
|
|
17
|
+
expect(Obj.getParent(child)).toBe(parent);
|
|
18
|
+
|
|
19
|
+
Obj.setParent(child, undefined);
|
|
20
|
+
expect(Obj.getParent(child)).toBeUndefined();
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
test('create object with Obj.Parent in props', () => {
|
|
24
|
+
const parent = Obj.make(TestSchema.Organization, { name: 'DXOS' });
|
|
25
|
+
const child = Obj.make(TestSchema.Person, {
|
|
26
|
+
[Obj.Parent]: parent,
|
|
27
|
+
name: 'John',
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
expect(child.name).toBe('John');
|
|
31
|
+
expect(Obj.getParent(child)).toBe(parent);
|
|
32
|
+
});
|
|
33
|
+
});
|