@dxos/echo 0.8.4-main.c85a9c8dae → 0.8.4-main.d05539e30a
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 +3 -3
- package/dist/lib/neutral/Annotation.mjs +5 -3
- package/dist/lib/neutral/Database.mjs +8 -4
- package/dist/lib/neutral/Entity.mjs +16 -11
- package/dist/lib/neutral/Err.mjs +1 -1
- package/dist/lib/neutral/Extension.mjs +18 -0
- package/dist/lib/neutral/Extension.mjs.map +7 -0
- package/dist/lib/neutral/Feed.mjs +23 -14
- package/dist/lib/neutral/Filter.mjs +23 -10
- package/dist/lib/neutral/Format.mjs +3 -3
- package/dist/lib/neutral/JsonSchema.mjs +8 -7
- package/dist/lib/neutral/Key.mjs +1 -1
- package/dist/lib/neutral/Migration.mjs +17 -0
- package/dist/lib/neutral/Migration.mjs.map +7 -0
- package/dist/lib/neutral/Obj.mjs +16 -10
- package/dist/lib/neutral/Order.mjs +1 -1
- package/dist/lib/neutral/Query.mjs +19 -13
- package/dist/lib/neutral/QueryResult.mjs +1 -1
- package/dist/lib/neutral/Ref.mjs +9 -7
- package/dist/lib/neutral/Relation.mjs +15 -11
- package/dist/lib/neutral/SchemaRegistry.mjs +1 -1
- package/dist/lib/neutral/Tag.mjs +14 -10
- package/dist/lib/neutral/Type.mjs +10 -7
- package/dist/lib/neutral/{chunk-DZQSL6RW.mjs → chunk-44HT3MEC.mjs} +2 -2
- package/dist/lib/neutral/{chunk-DZQSL6RW.mjs.map → chunk-44HT3MEC.mjs.map} +1 -1
- package/dist/lib/neutral/{chunk-OVUBTQLT.mjs → chunk-5SL5LDLD.mjs} +4 -2
- package/dist/lib/neutral/chunk-5SL5LDLD.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-ANHVGJI4.mjs → chunk-7RVZT53K.mjs} +1 -1
- package/dist/lib/neutral/chunk-APHSOTIX.mjs +34 -0
- package/dist/lib/neutral/chunk-APHSOTIX.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-ALOGSVBP.mjs → chunk-APJKDGFL.mjs} +72 -6
- package/dist/lib/neutral/chunk-APJKDGFL.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-T6JEFNP6.mjs → chunk-BICZKPQG.mjs} +1 -1
- package/dist/lib/neutral/{chunk-T6JEFNP6.mjs.map → chunk-BICZKPQG.mjs.map} +1 -1
- package/dist/lib/neutral/chunk-BMB7IHGB.mjs +346 -0
- package/dist/lib/neutral/chunk-BMB7IHGB.mjs.map +7 -0
- package/dist/lib/neutral/chunk-FIWO2FZK.mjs +36 -0
- package/dist/lib/neutral/chunk-FIWO2FZK.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-PP4DNUZU.mjs → chunk-G54OX4IX.mjs} +1418 -2885
- package/dist/lib/neutral/chunk-G54OX4IX.mjs.map +7 -0
- package/dist/lib/neutral/chunk-GWFFC34K.mjs +50 -0
- package/dist/lib/neutral/chunk-GWFFC34K.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-5ELDDYWE.mjs → chunk-I2DARWPX.mjs} +17 -19
- package/dist/lib/neutral/chunk-I2DARWPX.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-KGV3QIRX.mjs → chunk-J54QMAKF.mjs} +125 -17
- package/dist/lib/neutral/chunk-J54QMAKF.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-BRJSLACP.mjs → chunk-MGSQGHOD.mjs} +71 -17
- package/dist/lib/neutral/chunk-MGSQGHOD.mjs.map +7 -0
- package/dist/lib/neutral/chunk-MLS7U7AT.mjs +734 -0
- package/dist/lib/neutral/chunk-MLS7U7AT.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-4KG6IGL4.mjs → chunk-N4B7FHQT.mjs} +4 -4
- package/dist/lib/neutral/{chunk-4KG6IGL4.mjs.map → chunk-N4B7FHQT.mjs.map} +2 -2
- package/dist/lib/neutral/{chunk-QXF3LGN2.mjs → chunk-N7VOEPSV.mjs} +8 -3
- package/dist/lib/neutral/chunk-N7VOEPSV.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-T4MPQJ7X.mjs → chunk-PSZBLH53.mjs} +6 -22
- package/dist/lib/neutral/chunk-PSZBLH53.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-ZWKJ4LZJ.mjs → chunk-PT37DG2F.mjs} +23 -51
- package/dist/lib/neutral/chunk-PT37DG2F.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-GAWKQ5DZ.mjs → chunk-Q2KKKJSV.mjs} +5 -5
- package/dist/lib/neutral/chunk-Q2KKKJSV.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-AQP4QKYP.mjs → chunk-Q7ZL2P5H.mjs} +56 -19
- package/dist/lib/neutral/chunk-Q7ZL2P5H.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-O3TZFQCT.mjs → chunk-QRZ2I3ZM.mjs} +2 -2
- package/dist/lib/neutral/chunk-QRZ2I3ZM.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-W7OP5HGZ.mjs → chunk-SCPFDS2E.mjs} +14 -10
- package/dist/lib/neutral/chunk-SCPFDS2E.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-F7KMHDPJ.mjs → chunk-TNBK56IN.mjs} +54 -31
- package/dist/lib/neutral/chunk-TNBK56IN.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-M2KVTHZM.mjs → chunk-TRPZU2HV.mjs} +10 -10
- package/dist/lib/neutral/chunk-TRPZU2HV.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-ZTUBYOGB.mjs → chunk-TTCSATUD.mjs} +1 -1
- package/dist/lib/neutral/chunk-TTCSATUD.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-OMUPQMLR.mjs → chunk-V72DY6LU.mjs} +1 -1
- package/dist/lib/neutral/chunk-ZFACXBY6.mjs +136 -0
- package/dist/lib/neutral/chunk-ZFACXBY6.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-MXQJZCPY.mjs → chunk-ZISMEVKD.mjs} +1 -1
- package/dist/lib/neutral/chunk-ZISMEVKD.mjs.map +7 -0
- package/dist/lib/neutral/index.mjs +38 -25
- package/dist/lib/neutral/internal/index.mjs +50 -38
- package/dist/lib/neutral/meta.json +1 -1
- package/dist/lib/neutral/testing/index.mjs +196 -136
- 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.map +1 -1
- package/dist/types/src/Database.d.ts +16 -4
- package/dist/types/src/Database.d.ts.map +1 -1
- package/dist/types/src/Dataset.d.ts +2 -1
- package/dist/types/src/Dataset.d.ts.map +1 -1
- package/dist/types/src/Entity.d.ts +17 -11
- package/dist/types/src/Entity.d.ts.map +1 -1
- package/dist/types/src/Err.d.ts +18 -18
- package/dist/types/src/Err.d.ts.map +1 -1
- package/dist/types/src/Extension.d.ts +80 -0
- package/dist/types/src/Extension.d.ts.map +1 -0
- package/dist/types/src/Extension.test.d.ts +2 -0
- package/dist/types/src/Extension.test.d.ts.map +1 -0
- package/dist/types/src/Feed.d.ts +65 -24
- package/dist/types/src/Feed.d.ts.map +1 -1
- package/dist/types/src/Filter.d.ts +54 -4
- package/dist/types/src/Filter.d.ts.map +1 -1
- package/dist/types/src/Filter.test.d.ts +2 -0
- package/dist/types/src/Filter.test.d.ts.map +1 -0
- package/dist/types/src/Format.d.ts +1 -1
- package/dist/types/src/Format.d.ts.map +1 -1
- package/dist/types/src/Hypergraph.d.ts +9 -4
- package/dist/types/src/Hypergraph.d.ts.map +1 -1
- package/dist/types/src/Json.d.ts +33 -0
- package/dist/types/src/Json.d.ts.map +1 -0
- package/dist/types/src/Json.test.d.ts +2 -0
- package/dist/types/src/Json.test.d.ts.map +1 -0
- package/dist/types/src/JsonSchema.d.ts +5 -5
- package/dist/types/src/JsonSchema.d.ts.map +1 -1
- package/dist/types/src/Migration.d.ts +69 -0
- package/dist/types/src/Migration.d.ts.map +1 -0
- package/dist/types/src/Obj.d.ts +46 -30
- package/dist/types/src/Obj.d.ts.map +1 -1
- package/dist/types/src/Order.d.ts.map +1 -1
- package/dist/types/src/Query.d.ts +13 -2
- package/dist/types/src/Query.d.ts.map +1 -1
- package/dist/types/src/Ref.d.ts +12 -11
- package/dist/types/src/Ref.d.ts.map +1 -1
- package/dist/types/src/Relation.d.ts +16 -16
- package/dist/types/src/Relation.d.ts.map +1 -1
- package/dist/types/src/SchemaRegistry.d.ts +1 -1
- package/dist/types/src/Tag.d.ts +2 -2
- package/dist/types/src/Tag.d.ts.map +1 -1
- package/dist/types/src/Type.d.ts +10 -9
- package/dist/types/src/Type.d.ts.map +1 -1
- package/dist/types/src/View.d.ts +1 -1
- package/dist/types/src/View.d.ts.map +1 -1
- package/dist/types/src/exemplars.test.d.ts +2 -0
- package/dist/types/src/exemplars.test.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +3 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/internal/{annotations → Annotation}/annotations.d.ts +33 -2
- package/dist/types/src/internal/Annotation/annotations.d.ts.map +1 -0
- package/dist/types/src/internal/Annotation/annotations.test.d.ts.map +1 -0
- package/dist/types/src/internal/Annotation/index.d.ts +4 -0
- package/dist/types/src/internal/Annotation/index.d.ts.map +1 -0
- package/dist/types/src/internal/{api → Annotation}/sorting.d.ts +1 -1
- package/dist/types/src/internal/Annotation/sorting.d.ts.map +1 -0
- package/dist/types/src/internal/{annotations → Annotation}/util.d.ts +2 -2
- package/dist/types/src/internal/Annotation/util.d.ts.map +1 -0
- package/dist/types/src/internal/{api/entity.d.ts → Entity/api.d.ts} +2 -2
- package/dist/types/src/internal/Entity/api.d.ts.map +1 -0
- package/dist/types/src/internal/{entities → Entity}/entity.d.ts +2 -2
- package/dist/types/src/internal/Entity/entity.d.ts.map +1 -0
- package/dist/types/src/internal/{entities → Entity}/index.d.ts +2 -0
- package/dist/types/src/internal/Entity/index.d.ts.map +1 -0
- package/dist/types/src/internal/{entities → Entity}/model.d.ts +4 -26
- package/dist/types/src/internal/Entity/model.d.ts.map +1 -0
- package/dist/types/src/internal/{entities → Entity}/object.d.ts +2 -2
- package/dist/types/src/internal/Entity/object.d.ts.map +1 -0
- package/dist/types/src/internal/{entities → Entity}/relation.d.ts +3 -30
- package/dist/types/src/internal/Entity/relation.d.ts.map +1 -0
- package/dist/types/src/internal/Entity/util.d.ts.map +1 -0
- package/dist/types/src/internal/{api → Entity}/version.d.ts +1 -1
- package/dist/types/src/internal/Entity/version.d.ts.map +1 -0
- package/dist/types/src/internal/Format/date.d.ts.map +1 -0
- package/dist/types/src/internal/Format/date.test.d.ts.map +1 -0
- package/dist/types/src/internal/Format/format.d.ts.map +1 -0
- package/dist/types/src/internal/Format/format.test.d.ts.map +1 -0
- package/dist/types/src/internal/Format/index.d.ts.map +1 -0
- package/dist/types/src/internal/Format/number.d.ts.map +1 -0
- package/dist/types/src/internal/Format/object.d.ts.map +1 -0
- package/dist/types/src/internal/Format/select.d.ts.map +1 -0
- package/dist/types/src/internal/Format/string.d.ts.map +1 -0
- package/dist/types/src/internal/{formats → Format}/types.d.ts +1 -1
- package/dist/types/src/internal/Format/types.d.ts.map +1 -0
- package/dist/types/src/internal/{json-schema → JsonSchema}/annotations.d.ts +1 -1
- package/dist/types/src/internal/JsonSchema/annotations.d.ts.map +1 -0
- package/dist/types/src/internal/JsonSchema/effect-schema.test.d.ts.map +1 -0
- package/dist/types/src/internal/JsonSchema/index.d.ts.map +1 -0
- package/dist/types/src/internal/JsonSchema/json-schema-normalize.d.ts.map +1 -0
- package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema-type.d.ts +23 -23
- package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts.map +1 -0
- package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema.d.ts +1 -1
- package/dist/types/src/internal/JsonSchema/json-schema.d.ts.map +1 -0
- package/dist/types/src/internal/JsonSchema/json-schema.test.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/clone.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/common.d.ts.map +1 -0
- package/dist/types/src/internal/{object → Obj}/create-object.d.ts +2 -2
- package/dist/types/src/internal/Obj/create-object.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/create-object.test.d.ts.map +1 -0
- package/dist/types/src/internal/{object → Obj}/deleted.d.ts +1 -1
- package/dist/types/src/internal/Obj/deleted.d.ts.map +1 -0
- package/dist/types/src/internal/{object → Obj}/ids.d.ts +1 -1
- package/dist/types/src/internal/Obj/ids.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/index.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/inspect.d.ts.map +1 -0
- package/dist/types/src/internal/{object → Obj}/json-serializer.d.ts +13 -5
- package/dist/types/src/internal/Obj/json-serializer.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/json-serializer.test.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/schema-validator.d.ts +2 -0
- package/dist/types/src/internal/Obj/schema-validator.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/schema-validator.test.d.ts.map +1 -0
- package/dist/types/src/internal/{object → Obj}/set-value.d.ts +2 -2
- package/dist/types/src/internal/Obj/set-value.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/set-value.test.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/snapshot.d.ts.map +1 -0
- package/dist/types/src/internal/{object → Obj}/typed-object.d.ts +2 -2
- package/dist/types/src/internal/Obj/typed-object.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/typed-object.test.d.ts.map +1 -0
- package/dist/types/src/internal/Query.d.ts +10 -0
- package/dist/types/src/internal/Query.d.ts.map +1 -0
- package/dist/types/src/internal/Ref/index.d.ts.map +1 -0
- package/dist/types/src/internal/{ref → Ref}/ref-array.d.ts +1 -1
- package/dist/types/src/internal/Ref/ref-array.d.ts.map +1 -0
- package/dist/types/src/internal/{ref → Ref}/ref.d.ts +15 -2
- package/dist/types/src/internal/Ref/ref.d.ts.map +1 -0
- package/dist/types/src/internal/Ref/ref.test.d.ts.map +1 -0
- package/dist/types/src/internal/{schema → Type}/compose.d.ts +1 -1
- package/dist/types/src/internal/Type/compose.d.ts.map +1 -0
- package/dist/types/src/internal/Type/compose.test.d.ts.map +1 -0
- package/dist/types/src/internal/{schema → Type}/echo-schema.d.ts +6 -6
- package/dist/types/src/internal/Type/echo-schema.d.ts.map +1 -0
- package/dist/types/src/internal/Type/index.d.ts.map +1 -0
- package/dist/types/src/internal/Type/manipulation.d.ts.map +1 -0
- package/dist/types/src/internal/{schema → Type}/persistent-schema.d.ts +2 -2
- package/dist/types/src/internal/Type/persistent-schema.d.ts.map +1 -0
- package/dist/types/src/internal/{api → common/api}/index.d.ts +0 -4
- package/dist/types/src/internal/common/api/index.d.ts.map +1 -0
- package/dist/types/src/internal/{api → common/api}/meta.d.ts +3 -3
- package/dist/types/src/internal/common/api/meta.d.ts.map +1 -0
- package/dist/types/src/internal/common/index.d.ts +4 -0
- package/dist/types/src/internal/common/index.d.ts.map +1 -0
- package/dist/types/src/internal/{proxy → common/proxy}/change-context.d.ts +1 -1
- package/dist/types/src/internal/common/proxy/change-context.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/change.test.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts.map +1 -0
- package/dist/types/src/internal/{proxy → common/proxy}/errors.d.ts +1 -1
- package/dist/types/src/internal/common/proxy/errors.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/event-batch.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/handler.test.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/index.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/json-serializer.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/make-object.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/ownership.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/proxy-types.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/proxy-utils.d.ts.map +1 -0
- package/dist/types/src/internal/{proxy → common/proxy}/reactive-array.d.ts +1 -1
- package/dist/types/src/internal/common/proxy/reactive-array.d.ts.map +1 -0
- package/dist/types/src/internal/{proxy → common/proxy}/reactive.d.ts +2 -2
- package/dist/types/src/internal/{proxy → common/proxy}/reactive.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/reactive.test.d.ts +2 -0
- package/dist/types/src/internal/common/proxy/reactive.test.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/schema-validator.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/schema.test.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/symbols.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/typed-handler.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/typed-handler.test.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/typed-object.test.d.ts.map +1 -0
- package/dist/types/src/internal/common/types/base.d.ts.map +1 -0
- package/dist/types/src/internal/{types → common/types}/entity.d.ts +4 -4
- package/dist/types/src/internal/common/types/entity.d.ts.map +1 -0
- package/dist/types/src/internal/{types → common/types}/index.d.ts +1 -0
- package/dist/types/src/internal/common/types/index.d.ts.map +1 -0
- package/dist/types/src/internal/{types → common/types}/meta.d.ts +13 -3
- package/dist/types/src/internal/common/types/meta.d.ts.map +1 -0
- package/dist/types/src/internal/common/types/model-symbols.d.ts +54 -0
- package/dist/types/src/internal/common/types/model-symbols.d.ts.map +1 -0
- package/dist/types/src/internal/common/types/typename.d.ts.map +1 -0
- package/dist/types/src/internal/{types → common/types}/version.d.ts +1 -1
- package/dist/types/src/internal/common/types/version.d.ts.map +1 -0
- package/dist/types/src/internal/index.d.ts +9 -10
- package/dist/types/src/internal/index.d.ts.map +1 -1
- package/dist/types/src/testing/test-data.d.ts +8 -8
- package/dist/types/src/testing/test-data.d.ts.map +1 -1
- package/dist/types/src/testing/test-schema.d.ts +53 -53
- package/dist/types/src/testing/test-schema.d.ts.map +1 -1
- package/dist/types/src/testing/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +25 -15
- package/src/Annotation.ts +6 -3
- package/src/Collection.ts +8 -1
- package/src/Database.ts +55 -18
- package/src/Dataset.ts +2 -0
- package/src/Entity.ts +20 -11
- package/src/Err.ts +2 -0
- package/src/Extension.test.ts +235 -0
- package/src/Extension.ts +122 -0
- package/src/Feed.ts +118 -37
- package/src/Filter.test.ts +90 -0
- package/src/Filter.ts +99 -3
- package/src/Format.ts +1 -1
- package/src/Hypergraph.ts +10 -5
- package/src/Json.test.ts +175 -0
- package/src/Json.ts +102 -0
- package/src/JsonSchema.ts +7 -5
- package/src/Migration.ts +106 -0
- package/src/Obj.test.ts +107 -15
- package/src/Obj.ts +167 -40
- package/src/Order.ts +2 -0
- package/src/Query.test.ts +222 -32
- package/src/Query.ts +62 -10
- package/src/Ref.ts +16 -12
- package/src/Relation.test.ts +2 -2
- package/src/Relation.ts +28 -21
- package/src/SchemaRegistry.ts +1 -1
- package/src/Tag.ts +3 -1
- package/src/Type.ts +14 -11
- package/src/View.ts +9 -2
- package/src/exemplars.test.ts +21 -0
- package/src/index.ts +4 -0
- package/src/internal/{annotations → Annotation}/annotations.test.ts +56 -7
- package/src/internal/{annotations → Annotation}/annotations.ts +84 -20
- package/src/internal/{annotations → Annotation}/index.ts +1 -0
- package/src/internal/{api → Annotation}/sorting.ts +2 -4
- package/src/internal/{annotations → Annotation}/util.ts +1 -1
- package/src/internal/{api/entity.ts → Entity/api.ts} +3 -2
- package/src/internal/{entities → Entity}/entity.ts +2 -2
- package/src/internal/{entities → Entity}/index.ts +2 -0
- package/src/internal/{entities → Entity}/model.ts +15 -42
- package/src/internal/{entities → Entity}/object.ts +2 -3
- package/src/internal/{entities → Entity}/relation.ts +19 -36
- package/src/internal/{api → Entity}/version.ts +2 -2
- package/src/internal/{formats → Format}/date.test.ts +1 -2
- package/src/internal/{formats → Format}/format.test.ts +1 -2
- package/src/internal/{formats → Format}/types.ts +2 -2
- package/src/internal/{json-schema → JsonSchema}/annotations.ts +3 -3
- package/src/internal/{json-schema → JsonSchema}/json-schema-type.ts +4 -4
- package/src/internal/{json-schema → JsonSchema}/json-schema.test.ts +48 -49
- package/src/internal/{json-schema → JsonSchema}/json-schema.ts +3 -4
- package/src/internal/{object → Obj}/clone.ts +3 -3
- package/src/internal/{object → Obj}/common.ts +2 -2
- package/src/internal/{object → Obj}/create-object.test.ts +5 -7
- package/src/internal/{object → Obj}/create-object.ts +5 -6
- package/src/internal/{object → Obj}/deleted.ts +2 -2
- package/src/internal/{object → Obj}/ids.ts +1 -1
- package/src/internal/{object → Obj}/inspect.ts +2 -2
- package/src/internal/{object → Obj}/json-serializer.test.ts +8 -9
- package/src/internal/{object → Obj}/json-serializer.ts +44 -26
- package/src/internal/{object → Obj}/schema-validator.ts +1 -1
- package/src/internal/{object → Obj}/set-value.test.ts +24 -24
- package/src/internal/{object → Obj}/set-value.ts +3 -3
- package/src/internal/{object → Obj}/snapshot.ts +14 -5
- package/src/internal/{object → Obj}/typed-object.test.ts +3 -3
- package/src/internal/{object → Obj}/typed-object.ts +2 -2
- package/src/internal/Query.ts +156 -0
- package/src/internal/{ref → Ref}/ref-array.ts +1 -2
- package/src/internal/{ref → Ref}/ref.test.ts +4 -5
- package/src/internal/{ref → Ref}/ref.ts +20 -3
- package/src/internal/{schema → Type}/compose.test.ts +5 -6
- package/src/internal/{schema → Type}/compose.ts +1 -1
- package/src/internal/{schema → Type}/echo-schema.ts +7 -8
- package/src/internal/{schema → Type}/manipulation.ts +1 -1
- package/src/internal/{schema → Type}/persistent-schema.ts +7 -7
- package/src/internal/{README.md → common/README.md} +1 -1
- package/src/internal/{api → common/api}/index.ts +0 -4
- package/src/internal/{api → common/api}/meta.ts +3 -3
- package/src/internal/common/index.ts +7 -0
- package/src/internal/{proxy → common/proxy}/change-context.ts +1 -1
- package/src/internal/{proxy → common/proxy}/change.test.ts +97 -97
- package/src/internal/{proxy → common/proxy}/errors.ts +2 -2
- package/src/internal/{proxy → common/proxy}/handler.test.ts +2 -4
- package/src/internal/{proxy → common/proxy}/json-serializer.ts +6 -3
- package/src/internal/{proxy → common/proxy}/make-object.ts +1 -2
- package/src/internal/{proxy → common/proxy}/ownership.ts +0 -1
- package/src/internal/{proxy → common/proxy}/reactive-array.ts +1 -1
- package/src/internal/common/proxy/reactive.test.ts +54 -0
- package/src/internal/{proxy → common/proxy}/reactive.ts +12 -4
- package/src/internal/{proxy → common/proxy}/schema.test.ts +10 -10
- package/src/internal/{proxy → common/proxy}/typed-handler.test.ts +6 -7
- package/src/internal/{proxy → common/proxy}/typed-handler.ts +10 -13
- package/src/internal/{proxy → common/proxy}/typed-object.test.ts +5 -6
- package/src/internal/{types → common/types}/entity.ts +1 -1
- package/src/internal/{types → common/types}/index.ts +1 -0
- package/src/internal/{types → common/types}/meta.ts +13 -2
- package/src/internal/common/types/model-symbols.ts +69 -0
- package/src/internal/index.ts +9 -31
- package/src/testing/api.test.ts +2 -3
- package/src/testing/test-data.ts +157 -98
- package/src/testing/test-schema.ts +9 -9
- package/dist/lib/neutral/chunk-5ELDDYWE.mjs.map +0 -7
- package/dist/lib/neutral/chunk-ALOGSVBP.mjs.map +0 -7
- package/dist/lib/neutral/chunk-AQP4QKYP.mjs.map +0 -7
- package/dist/lib/neutral/chunk-BRJSLACP.mjs.map +0 -7
- package/dist/lib/neutral/chunk-F7KMHDPJ.mjs.map +0 -7
- package/dist/lib/neutral/chunk-GAWKQ5DZ.mjs.map +0 -7
- package/dist/lib/neutral/chunk-GFNCSK7F.mjs +0 -101
- package/dist/lib/neutral/chunk-GFNCSK7F.mjs.map +0 -7
- package/dist/lib/neutral/chunk-KGV3QIRX.mjs.map +0 -7
- package/dist/lib/neutral/chunk-M2KVTHZM.mjs.map +0 -7
- package/dist/lib/neutral/chunk-MXQJZCPY.mjs.map +0 -7
- package/dist/lib/neutral/chunk-O3TZFQCT.mjs.map +0 -7
- package/dist/lib/neutral/chunk-OVUBTQLT.mjs.map +0 -7
- package/dist/lib/neutral/chunk-PP4DNUZU.mjs.map +0 -7
- package/dist/lib/neutral/chunk-QXF3LGN2.mjs.map +0 -7
- package/dist/lib/neutral/chunk-T4MPQJ7X.mjs.map +0 -7
- package/dist/lib/neutral/chunk-W7OP5HGZ.mjs.map +0 -7
- package/dist/lib/neutral/chunk-ZTUBYOGB.mjs.map +0 -7
- package/dist/lib/neutral/chunk-ZWKJ4LZJ.mjs.map +0 -7
- package/dist/types/src/internal/annotations/annotations.d.ts.map +0 -1
- package/dist/types/src/internal/annotations/annotations.test.d.ts.map +0 -1
- package/dist/types/src/internal/annotations/index.d.ts +0 -3
- package/dist/types/src/internal/annotations/index.d.ts.map +0 -1
- package/dist/types/src/internal/annotations/util.d.ts.map +0 -1
- package/dist/types/src/internal/api/annotations.d.ts +0 -23
- package/dist/types/src/internal/api/annotations.d.ts.map +0 -1
- package/dist/types/src/internal/api/entity.d.ts.map +0 -1
- package/dist/types/src/internal/api/index.d.ts.map +0 -1
- package/dist/types/src/internal/api/meta.d.ts.map +0 -1
- package/dist/types/src/internal/api/sorting.d.ts.map +0 -1
- package/dist/types/src/internal/api/version.d.ts.map +0 -1
- package/dist/types/src/internal/entities/entity.d.ts.map +0 -1
- package/dist/types/src/internal/entities/index.d.ts.map +0 -1
- package/dist/types/src/internal/entities/model.d.ts.map +0 -1
- package/dist/types/src/internal/entities/object.d.ts.map +0 -1
- package/dist/types/src/internal/entities/relation.d.ts.map +0 -1
- package/dist/types/src/internal/entities/util.d.ts.map +0 -1
- package/dist/types/src/internal/formats/date.d.ts.map +0 -1
- package/dist/types/src/internal/formats/date.test.d.ts.map +0 -1
- package/dist/types/src/internal/formats/format.d.ts.map +0 -1
- package/dist/types/src/internal/formats/format.test.d.ts.map +0 -1
- package/dist/types/src/internal/formats/index.d.ts.map +0 -1
- package/dist/types/src/internal/formats/number.d.ts.map +0 -1
- package/dist/types/src/internal/formats/object.d.ts.map +0 -1
- package/dist/types/src/internal/formats/select.d.ts.map +0 -1
- package/dist/types/src/internal/formats/string.d.ts.map +0 -1
- package/dist/types/src/internal/formats/types.d.ts.map +0 -1
- package/dist/types/src/internal/json-schema/annotations.d.ts.map +0 -1
- package/dist/types/src/internal/json-schema/effect-schema.test.d.ts.map +0 -1
- package/dist/types/src/internal/json-schema/index.d.ts.map +0 -1
- package/dist/types/src/internal/json-schema/json-schema-normalize.d.ts.map +0 -1
- package/dist/types/src/internal/json-schema/json-schema-type.d.ts.map +0 -1
- package/dist/types/src/internal/json-schema/json-schema.d.ts.map +0 -1
- package/dist/types/src/internal/json-schema/json-schema.test.d.ts.map +0 -1
- package/dist/types/src/internal/object/clone.d.ts.map +0 -1
- package/dist/types/src/internal/object/common.d.ts.map +0 -1
- package/dist/types/src/internal/object/create-object.d.ts.map +0 -1
- package/dist/types/src/internal/object/create-object.test.d.ts.map +0 -1
- package/dist/types/src/internal/object/deleted.d.ts.map +0 -1
- package/dist/types/src/internal/object/ids.d.ts.map +0 -1
- package/dist/types/src/internal/object/index.d.ts.map +0 -1
- package/dist/types/src/internal/object/inspect.d.ts.map +0 -1
- package/dist/types/src/internal/object/json-serializer.d.ts.map +0 -1
- package/dist/types/src/internal/object/json-serializer.test.d.ts.map +0 -1
- package/dist/types/src/internal/object/schema-validator.d.ts +0 -2
- package/dist/types/src/internal/object/schema-validator.d.ts.map +0 -1
- package/dist/types/src/internal/object/schema-validator.test.d.ts.map +0 -1
- package/dist/types/src/internal/object/set-value.d.ts.map +0 -1
- package/dist/types/src/internal/object/set-value.test.d.ts.map +0 -1
- package/dist/types/src/internal/object/snapshot.d.ts.map +0 -1
- package/dist/types/src/internal/object/typed-object.d.ts.map +0 -1
- package/dist/types/src/internal/object/typed-object.test.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/change-context.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/change.test.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/define-hidden-property.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/errors.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/event-batch.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/handler.test.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/index.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/json-serializer.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/make-object.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/ownership.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/proxy-types.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/proxy-utils.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/reactive-array.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/schema-validator.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/schema.test.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/symbols.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/typed-handler.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/typed-handler.test.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/typed-object.test.d.ts.map +0 -1
- package/dist/types/src/internal/ref/index.d.ts.map +0 -1
- package/dist/types/src/internal/ref/ref-array.d.ts.map +0 -1
- package/dist/types/src/internal/ref/ref.d.ts.map +0 -1
- package/dist/types/src/internal/ref/ref.test.d.ts.map +0 -1
- package/dist/types/src/internal/schema/compose.d.ts.map +0 -1
- package/dist/types/src/internal/schema/compose.test.d.ts.map +0 -1
- package/dist/types/src/internal/schema/echo-schema.d.ts.map +0 -1
- package/dist/types/src/internal/schema/index.d.ts.map +0 -1
- package/dist/types/src/internal/schema/manipulation.d.ts.map +0 -1
- package/dist/types/src/internal/schema/persistent-schema.d.ts.map +0 -1
- package/dist/types/src/internal/types/base.d.ts.map +0 -1
- package/dist/types/src/internal/types/entity.d.ts.map +0 -1
- package/dist/types/src/internal/types/index.d.ts.map +0 -1
- package/dist/types/src/internal/types/meta.d.ts.map +0 -1
- package/dist/types/src/internal/types/typename.d.ts.map +0 -1
- package/dist/types/src/internal/types/version.d.ts.map +0 -1
- package/src/internal/api/annotations.ts +0 -60
- /package/dist/lib/neutral/{chunk-ANHVGJI4.mjs.map → chunk-7RVZT53K.mjs.map} +0 -0
- /package/dist/lib/neutral/{chunk-OMUPQMLR.mjs.map → chunk-V72DY6LU.mjs.map} +0 -0
- /package/dist/types/src/internal/{annotations → Annotation}/annotations.test.d.ts +0 -0
- /package/dist/types/src/internal/{entities → Entity}/util.d.ts +0 -0
- /package/dist/types/src/internal/{formats → Format}/date.d.ts +0 -0
- /package/dist/types/src/internal/{formats → Format}/date.test.d.ts +0 -0
- /package/dist/types/src/internal/{formats → Format}/format.d.ts +0 -0
- /package/dist/types/src/internal/{formats → Format}/format.test.d.ts +0 -0
- /package/dist/types/src/internal/{formats → Format}/index.d.ts +0 -0
- /package/dist/types/src/internal/{formats → Format}/number.d.ts +0 -0
- /package/dist/types/src/internal/{formats → Format}/object.d.ts +0 -0
- /package/dist/types/src/internal/{formats → Format}/select.d.ts +0 -0
- /package/dist/types/src/internal/{formats → Format}/string.d.ts +0 -0
- /package/dist/types/src/internal/{json-schema → JsonSchema}/effect-schema.test.d.ts +0 -0
- /package/dist/types/src/internal/{json-schema → JsonSchema}/index.d.ts +0 -0
- /package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema-normalize.d.ts +0 -0
- /package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema.test.d.ts +0 -0
- /package/dist/types/src/internal/{object → Obj}/clone.d.ts +0 -0
- /package/dist/types/src/internal/{object → Obj}/common.d.ts +0 -0
- /package/dist/types/src/internal/{object → Obj}/create-object.test.d.ts +0 -0
- /package/dist/types/src/internal/{object → Obj}/index.d.ts +0 -0
- /package/dist/types/src/internal/{object → Obj}/inspect.d.ts +0 -0
- /package/dist/types/src/internal/{object → Obj}/json-serializer.test.d.ts +0 -0
- /package/dist/types/src/internal/{object → Obj}/schema-validator.test.d.ts +0 -0
- /package/dist/types/src/internal/{object → Obj}/set-value.test.d.ts +0 -0
- /package/dist/types/src/internal/{object → Obj}/snapshot.d.ts +0 -0
- /package/dist/types/src/internal/{object → Obj}/typed-object.test.d.ts +0 -0
- /package/dist/types/src/internal/{ref → Ref}/index.d.ts +0 -0
- /package/dist/types/src/internal/{ref → Ref}/ref.test.d.ts +0 -0
- /package/dist/types/src/internal/{schema → Type}/compose.test.d.ts +0 -0
- /package/dist/types/src/internal/{schema → Type}/index.d.ts +0 -0
- /package/dist/types/src/internal/{schema → Type}/manipulation.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/change.test.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/define-hidden-property.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/event-batch.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/handler.test.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/index.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/json-serializer.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/make-object.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/ownership.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/proxy-types.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/proxy-utils.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/schema-validator.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/schema.test.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/symbols.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/typed-handler.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/typed-handler.test.d.ts +0 -0
- /package/dist/types/src/internal/{proxy → common/proxy}/typed-object.test.d.ts +0 -0
- /package/dist/types/src/internal/{types → common/types}/base.d.ts +0 -0
- /package/dist/types/src/internal/{types → common/types}/typename.d.ts +0 -0
- /package/src/internal/{entities → Entity}/util.ts +0 -0
- /package/src/internal/{formats → Format}/date.ts +0 -0
- /package/src/internal/{formats → Format}/format.ts +0 -0
- /package/src/internal/{formats → Format}/index.ts +0 -0
- /package/src/internal/{formats → Format}/number.ts +0 -0
- /package/src/internal/{formats → Format}/object.ts +0 -0
- /package/src/internal/{formats → Format}/select.ts +0 -0
- /package/src/internal/{formats → Format}/string.ts +0 -0
- /package/src/internal/{json-schema → JsonSchema}/effect-schema.test.ts +0 -0
- /package/src/internal/{json-schema → JsonSchema}/index.ts +0 -0
- /package/src/internal/{json-schema → JsonSchema}/json-schema-normalize.ts +0 -0
- /package/src/internal/{object → Obj}/index.ts +0 -0
- /package/src/internal/{object → Obj}/schema-validator.test.ts +0 -0
- /package/src/internal/{ref → Ref}/index.ts +0 -0
- /package/src/internal/{schema → Type}/index.ts +0 -0
- /package/src/internal/{proxy → common/proxy}/define-hidden-property.ts +0 -0
- /package/src/internal/{proxy → common/proxy}/event-batch.ts +0 -0
- /package/src/internal/{proxy → common/proxy}/index.ts +0 -0
- /package/src/internal/{proxy → common/proxy}/proxy-types.ts +0 -0
- /package/src/internal/{proxy → common/proxy}/proxy-utils.ts +0 -0
- /package/src/internal/{proxy → common/proxy}/schema-validator.ts +0 -0
- /package/src/internal/{proxy → common/proxy}/symbols.ts +0 -0
- /package/src/internal/{types → common/types}/base.ts +0 -0
- /package/src/internal/{types → common/types}/typename.ts +0 -0
- /package/src/internal/{types → common/types}/version.ts +0 -0
package/src/Query.test.ts
CHANGED
|
@@ -6,7 +6,7 @@ import * as Schema from 'effect/Schema';
|
|
|
6
6
|
import { describe, expect, test } from 'vitest';
|
|
7
7
|
|
|
8
8
|
import { QueryAST } from '@dxos/echo-protocol';
|
|
9
|
-
import { DXN } from '@dxos/keys';
|
|
9
|
+
import { DXN, ObjectId, SpaceId } from '@dxos/keys';
|
|
10
10
|
import { log } from '@dxos/log';
|
|
11
11
|
|
|
12
12
|
import * as Dataset from './Dataset';
|
|
@@ -98,7 +98,7 @@ describe('query api', () => {
|
|
|
98
98
|
expect(ObjectsReferencingFred.ast).toMatchObject({
|
|
99
99
|
type: 'incoming-references',
|
|
100
100
|
property: null,
|
|
101
|
-
typename: 'dxn:type:example.
|
|
101
|
+
typename: 'dxn:type:com.example.type.task:0.1.0',
|
|
102
102
|
});
|
|
103
103
|
});
|
|
104
104
|
|
|
@@ -150,17 +150,17 @@ describe('query api', () => {
|
|
|
150
150
|
{
|
|
151
151
|
"props": {},
|
|
152
152
|
"type": "object",
|
|
153
|
-
"typename": "dxn:type:dxos.
|
|
153
|
+
"typename": "dxn:type:org.dxos.type.feed:0.1.0",
|
|
154
154
|
},
|
|
155
155
|
{
|
|
156
156
|
"props": {},
|
|
157
157
|
"type": "object",
|
|
158
|
-
"typename": "dxn:type:dxos.
|
|
158
|
+
"typename": "dxn:type:org.dxos.type.collection:0.1.0",
|
|
159
159
|
},
|
|
160
160
|
{
|
|
161
161
|
"props": {},
|
|
162
162
|
"type": "object",
|
|
163
|
-
"typename": "dxn:type:dxos.
|
|
163
|
+
"typename": "dxn:type:org.dxos.type.view:0.1.0",
|
|
164
164
|
},
|
|
165
165
|
],
|
|
166
166
|
"type": "or",
|
|
@@ -183,17 +183,17 @@ describe('query api', () => {
|
|
|
183
183
|
{
|
|
184
184
|
"props": {},
|
|
185
185
|
"type": "object",
|
|
186
|
-
"typename": "dxn:type:dxos.
|
|
186
|
+
"typename": "dxn:type:org.dxos.type.feed:0.1.0",
|
|
187
187
|
},
|
|
188
188
|
{
|
|
189
189
|
"props": {},
|
|
190
190
|
"type": "object",
|
|
191
|
-
"typename": "dxn:type:dxos.
|
|
191
|
+
"typename": "dxn:type:org.dxos.type.collection:0.1.0",
|
|
192
192
|
},
|
|
193
193
|
{
|
|
194
194
|
"props": {},
|
|
195
195
|
"type": "object",
|
|
196
|
-
"typename": "dxn:type:dxos.
|
|
196
|
+
"typename": "dxn:type:org.dxos.type.view:0.1.0",
|
|
197
197
|
},
|
|
198
198
|
],
|
|
199
199
|
"type": "or",
|
|
@@ -258,7 +258,7 @@ describe('query api', () => {
|
|
|
258
258
|
"id": undefined,
|
|
259
259
|
"props": {},
|
|
260
260
|
"type": "object",
|
|
261
|
-
"typename": "dxn:type:example.
|
|
261
|
+
"typename": "dxn:type:com.example.type.person:0.1.0",
|
|
262
262
|
},
|
|
263
263
|
"type": "select",
|
|
264
264
|
},
|
|
@@ -281,7 +281,7 @@ describe('query api', () => {
|
|
|
281
281
|
},
|
|
282
282
|
},
|
|
283
283
|
type: 'object',
|
|
284
|
-
typename: 'dxn:type:example.
|
|
284
|
+
typename: 'dxn:type:com.example.type.task:0.1.0',
|
|
285
285
|
});
|
|
286
286
|
log('tasksByFred', { ast: tasksByFred.ast });
|
|
287
287
|
});
|
|
@@ -300,13 +300,13 @@ describe('query api', () => {
|
|
|
300
300
|
"id": undefined,
|
|
301
301
|
"props": {},
|
|
302
302
|
"type": "object",
|
|
303
|
-
"typename": "dxn:type:example.
|
|
303
|
+
"typename": "dxn:type:com.example.type.organization:0.1.0",
|
|
304
304
|
},
|
|
305
305
|
{
|
|
306
306
|
"id": undefined,
|
|
307
307
|
"props": {},
|
|
308
308
|
"type": "object",
|
|
309
|
-
"typename": "dxn:type:example.
|
|
309
|
+
"typename": "dxn:type:com.example.type.person:0.1.0",
|
|
310
310
|
},
|
|
311
311
|
],
|
|
312
312
|
"type": "or",
|
|
@@ -331,13 +331,13 @@ describe('query api', () => {
|
|
|
331
331
|
"id": undefined,
|
|
332
332
|
"props": {},
|
|
333
333
|
"type": "object",
|
|
334
|
-
"typename": "dxn:type:example.
|
|
334
|
+
"typename": "dxn:type:com.example.type.organization:0.1.0",
|
|
335
335
|
},
|
|
336
336
|
{
|
|
337
337
|
"id": undefined,
|
|
338
338
|
"props": {},
|
|
339
339
|
"type": "object",
|
|
340
|
-
"typename": "dxn:type:example.
|
|
340
|
+
"typename": "dxn:type:com.example.type.person:0.1.0",
|
|
341
341
|
},
|
|
342
342
|
],
|
|
343
343
|
"type": "or",
|
|
@@ -365,7 +365,7 @@ describe('query api', () => {
|
|
|
365
365
|
"id": undefined,
|
|
366
366
|
"props": {},
|
|
367
367
|
"type": "object",
|
|
368
|
-
"typename": "dxn:type:example.
|
|
368
|
+
"typename": "dxn:type:com.example.type.task:0.1.0",
|
|
369
369
|
},
|
|
370
370
|
"type": "select",
|
|
371
371
|
},
|
|
@@ -388,7 +388,7 @@ describe('query api', () => {
|
|
|
388
388
|
"id": undefined,
|
|
389
389
|
"props": {},
|
|
390
390
|
"type": "object",
|
|
391
|
-
"typename": "dxn:type:example.
|
|
391
|
+
"typename": "dxn:type:com.example.type.task:0.1.0",
|
|
392
392
|
},
|
|
393
393
|
"type": "select",
|
|
394
394
|
},
|
|
@@ -408,7 +408,7 @@ describe('query api', () => {
|
|
|
408
408
|
"id": undefined,
|
|
409
409
|
"props": {},
|
|
410
410
|
"type": "object",
|
|
411
|
-
"typename": "dxn:type:example.
|
|
411
|
+
"typename": "dxn:type:com.example.type.task:0.1.0",
|
|
412
412
|
},
|
|
413
413
|
"type": "select",
|
|
414
414
|
},
|
|
@@ -436,7 +436,7 @@ describe('query api', () => {
|
|
|
436
436
|
"id": undefined,
|
|
437
437
|
"props": {},
|
|
438
438
|
"type": "object",
|
|
439
|
-
"typename": "dxn:type:example.
|
|
439
|
+
"typename": "dxn:type:com.example.type.task:0.1.0",
|
|
440
440
|
},
|
|
441
441
|
"type": "select",
|
|
442
442
|
},
|
|
@@ -463,7 +463,7 @@ describe('query api', () => {
|
|
|
463
463
|
"id": undefined,
|
|
464
464
|
"props": {},
|
|
465
465
|
"type": "object",
|
|
466
|
-
"typename": "dxn:type:example.
|
|
466
|
+
"typename": "dxn:type:com.example.type.person:0.1.0",
|
|
467
467
|
},
|
|
468
468
|
"type": "select",
|
|
469
469
|
},
|
|
@@ -476,7 +476,7 @@ describe('query api', () => {
|
|
|
476
476
|
"id": undefined,
|
|
477
477
|
"props": {},
|
|
478
478
|
"type": "object",
|
|
479
|
-
"typename": "dxn:type:example.
|
|
479
|
+
"typename": "dxn:type:com.example.type.organization:0.1.0",
|
|
480
480
|
},
|
|
481
481
|
"type": "select",
|
|
482
482
|
},
|
|
@@ -503,7 +503,7 @@ describe('query api', () => {
|
|
|
503
503
|
"id": undefined,
|
|
504
504
|
"props": {},
|
|
505
505
|
"type": "object",
|
|
506
|
-
"typename": "dxn:type:example.
|
|
506
|
+
"typename": "dxn:type:com.example.type.person:0.1.0",
|
|
507
507
|
},
|
|
508
508
|
"type": "select",
|
|
509
509
|
},
|
|
@@ -523,7 +523,7 @@ describe('query api', () => {
|
|
|
523
523
|
"from": {
|
|
524
524
|
"_tag": "scope",
|
|
525
525
|
"scope": {
|
|
526
|
-
"
|
|
526
|
+
"allFeedsFromSpaces": true,
|
|
527
527
|
},
|
|
528
528
|
},
|
|
529
529
|
"query": {
|
|
@@ -531,7 +531,7 @@ describe('query api', () => {
|
|
|
531
531
|
"id": undefined,
|
|
532
532
|
"props": {},
|
|
533
533
|
"type": "object",
|
|
534
|
-
"typename": "dxn:type:example.
|
|
534
|
+
"typename": "dxn:type:com.example.type.person:0.1.0",
|
|
535
535
|
},
|
|
536
536
|
"type": "select",
|
|
537
537
|
},
|
|
@@ -560,12 +560,20 @@ describe('query api', () => {
|
|
|
560
560
|
});
|
|
561
561
|
});
|
|
562
562
|
|
|
563
|
-
test('Query.type(...).from(feed) sets queue scope', () => {
|
|
564
|
-
const
|
|
565
|
-
const
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
563
|
+
test('Query.type(...).from(feed) sets queue scope', async () => {
|
|
564
|
+
const spaceId = SpaceId.random();
|
|
565
|
+
const feedId = ObjectId.random();
|
|
566
|
+
const feedDXN = DXN.parse(`dxn:echo:${spaceId}:${feedId}`);
|
|
567
|
+
const feed = (await Obj.fromJSON(
|
|
568
|
+
{
|
|
569
|
+
'@type': 'dxn:type:org.dxos.type.feed:0.1.0',
|
|
570
|
+
id: feedId,
|
|
571
|
+
name: 'test-feed',
|
|
572
|
+
},
|
|
573
|
+
{ dxn: feedDXN },
|
|
574
|
+
)) as Feed.Feed;
|
|
575
|
+
|
|
576
|
+
const expectedQueueDXN = new DXN(DXN.kind.QUEUE, ['data', spaceId, feedId]);
|
|
569
577
|
|
|
570
578
|
const query = Query.type(TestSchema.Person).from(feed);
|
|
571
579
|
Schema.validateSync(QueryAST.Query)(query.ast);
|
|
@@ -574,19 +582,73 @@ describe('query api', () => {
|
|
|
574
582
|
from: {
|
|
575
583
|
_tag: 'scope',
|
|
576
584
|
scope: {
|
|
577
|
-
|
|
585
|
+
feeds: [expectedQueueDXN.toString()],
|
|
578
586
|
},
|
|
579
587
|
},
|
|
580
588
|
query: {
|
|
581
589
|
type: 'select',
|
|
582
590
|
filter: {
|
|
583
591
|
type: 'object',
|
|
584
|
-
typename: 'dxn:type:example.
|
|
592
|
+
typename: 'dxn:type:com.example.type.person:0.1.0',
|
|
585
593
|
},
|
|
586
594
|
},
|
|
587
595
|
});
|
|
588
596
|
});
|
|
589
597
|
|
|
598
|
+
test('Query.from(non-feed) throws TypeError', () => {
|
|
599
|
+
const person = Obj.make(TestSchema.Person, { name: 'Fred' });
|
|
600
|
+
expect(() => Query.select(Filter.type(TestSchema.Person)).from(person as any)).toThrow(TypeError);
|
|
601
|
+
expect(() => Query.select(Filter.type(TestSchema.Person)).from(person as any)).toThrow(
|
|
602
|
+
/Query\.from\(\) expects Feed objects/,
|
|
603
|
+
);
|
|
604
|
+
});
|
|
605
|
+
|
|
606
|
+
test('Query.from(undefined) throws TypeError', () => {
|
|
607
|
+
expect(() => Query.select(Filter.type(TestSchema.Person)).from(undefined as any)).toThrow(TypeError);
|
|
608
|
+
expect(() => Query.select(Filter.type(TestSchema.Person)).from(undefined as any)).toThrow(
|
|
609
|
+
/Query\.from\(\) requires a valid data source argument/,
|
|
610
|
+
);
|
|
611
|
+
});
|
|
612
|
+
|
|
613
|
+
test('Query.from(null) throws TypeError', () => {
|
|
614
|
+
expect(() => Query.select(Filter.type(TestSchema.Person)).from(null as any)).toThrow(TypeError);
|
|
615
|
+
expect(() => Query.select(Filter.type(TestSchema.Person)).from(null as any)).toThrow(
|
|
616
|
+
/Query\.from\(\) requires a valid data source argument/,
|
|
617
|
+
);
|
|
618
|
+
});
|
|
619
|
+
|
|
620
|
+
test('Query.pretty surfaces debugLabel from options', () => {
|
|
621
|
+
const query = Query.select(Filter.type(TestSchema.Person)).debugLabel('my-label');
|
|
622
|
+
expect(Query.pretty(query)).toContain('debugLabel');
|
|
623
|
+
expect(Query.pretty(query)).toContain('"my-label"');
|
|
624
|
+
});
|
|
625
|
+
|
|
626
|
+
test('Query.debugLabel merges onto existing options clause', () => {
|
|
627
|
+
const query = Query.select(Filter.type(TestSchema.Person))
|
|
628
|
+
.options({ deleted: 'exclude' })
|
|
629
|
+
.debugLabel('timer-probe');
|
|
630
|
+
const pretty = Query.pretty(query);
|
|
631
|
+
expect(pretty).toContain('deleted');
|
|
632
|
+
expect(pretty).toContain('debugLabel');
|
|
633
|
+
expect(pretty).toContain('"timer-probe"');
|
|
634
|
+
});
|
|
635
|
+
|
|
636
|
+
test('Query.pretty returns human-readable query string', () => {
|
|
637
|
+
const query = Query.select(Filter.type(TestSchema.Person, { name: 'Fred' }));
|
|
638
|
+
const pretty = Query.pretty(query);
|
|
639
|
+
expect(pretty).toContain('Query.select');
|
|
640
|
+
expect(pretty).toContain('Filter.type');
|
|
641
|
+
expect(pretty).toContain('com.example.type.person');
|
|
642
|
+
});
|
|
643
|
+
|
|
644
|
+
test('Query.pretty handles complex queries', () => {
|
|
645
|
+
const query = Query.select(Filter.and(Filter.type(TestSchema.Person), Filter.id(ObjectId.random()))).limit(10);
|
|
646
|
+
const pretty = Query.pretty(query);
|
|
647
|
+
expect(pretty).toContain('Query.select');
|
|
648
|
+
expect(pretty).toContain('Filter.and');
|
|
649
|
+
expect(pretty).toContain('limit(10)');
|
|
650
|
+
});
|
|
651
|
+
|
|
590
652
|
test.skip('chain', () => {
|
|
591
653
|
// NOTE: Can't support props without type since they can't be inferred.
|
|
592
654
|
// const f1: Filter<Person> = Filter.props({ name: 'Fred' });
|
|
@@ -622,11 +684,139 @@ describe('query api', () => {
|
|
|
622
684
|
});
|
|
623
685
|
});
|
|
624
686
|
|
|
687
|
+
describe('Filter.childOf', () => {
|
|
688
|
+
test('childOf with Ref', () => {
|
|
689
|
+
const parentDXN = DXN.fromSpaceAndObjectId(SpaceId.random(), ObjectId.random());
|
|
690
|
+
const parentRef = Ref.fromDXN(parentDXN);
|
|
691
|
+
const filter = Filter.childOf(parentRef);
|
|
692
|
+
|
|
693
|
+
expect(filter.ast).toMatchObject({
|
|
694
|
+
type: 'child-of',
|
|
695
|
+
parents: [parentDXN.toString()],
|
|
696
|
+
transitive: true,
|
|
697
|
+
});
|
|
698
|
+
Schema.validateSync(QueryAST.Filter)(filter.ast);
|
|
699
|
+
});
|
|
700
|
+
|
|
701
|
+
test('childOf with object', () => {
|
|
702
|
+
const parent = Obj.make(TestSchema.Person, { name: 'Parent' });
|
|
703
|
+
const filter = Filter.childOf(parent);
|
|
704
|
+
|
|
705
|
+
expect(filter.ast).toMatchObject({
|
|
706
|
+
type: 'child-of',
|
|
707
|
+
transitive: true,
|
|
708
|
+
});
|
|
709
|
+
expect(filter.ast.type === 'child-of' && filter.ast.parents.length).toBe(1);
|
|
710
|
+
Schema.validateSync(QueryAST.Filter)(filter.ast);
|
|
711
|
+
});
|
|
712
|
+
|
|
713
|
+
test('childOf with array of Refs', () => {
|
|
714
|
+
const dxn1 = DXN.fromSpaceAndObjectId(SpaceId.random(), ObjectId.random());
|
|
715
|
+
const dxn2 = DXN.fromSpaceAndObjectId(SpaceId.random(), ObjectId.random());
|
|
716
|
+
const filter = Filter.childOf([Ref.fromDXN(dxn1), Ref.fromDXN(dxn2)]);
|
|
717
|
+
|
|
718
|
+
expect(filter.ast).toMatchObject({
|
|
719
|
+
type: 'child-of',
|
|
720
|
+
parents: [dxn1.toString(), dxn2.toString()],
|
|
721
|
+
transitive: true,
|
|
722
|
+
});
|
|
723
|
+
Schema.validateSync(QueryAST.Filter)(filter.ast);
|
|
724
|
+
});
|
|
725
|
+
|
|
726
|
+
test('childOf with transitive=false', () => {
|
|
727
|
+
const parentRef = Ref.fromDXN(DXN.fromSpaceAndObjectId(SpaceId.random(), ObjectId.random()));
|
|
728
|
+
const filter = Filter.childOf(parentRef, { transitive: false });
|
|
729
|
+
|
|
730
|
+
expect(filter.ast).toMatchObject({
|
|
731
|
+
type: 'child-of',
|
|
732
|
+
parents: [parentRef.dxn.toString()],
|
|
733
|
+
transitive: false,
|
|
734
|
+
});
|
|
735
|
+
Schema.validateSync(QueryAST.Filter)(filter.ast);
|
|
736
|
+
});
|
|
737
|
+
|
|
738
|
+
test('childOf in select query', () => {
|
|
739
|
+
const parentDXN = DXN.fromSpaceAndObjectId(SpaceId.random(), ObjectId.random());
|
|
740
|
+
const parentRef = Ref.fromDXN(parentDXN);
|
|
741
|
+
const query = Query.select(Filter.childOf(parentRef));
|
|
742
|
+
|
|
743
|
+
expect(query.ast).toMatchObject({
|
|
744
|
+
type: 'select',
|
|
745
|
+
filter: {
|
|
746
|
+
type: 'child-of',
|
|
747
|
+
parents: [parentDXN.toString()],
|
|
748
|
+
transitive: true,
|
|
749
|
+
},
|
|
750
|
+
});
|
|
751
|
+
Schema.validateSync(QueryAST.Query)(query.ast);
|
|
752
|
+
});
|
|
753
|
+
|
|
754
|
+
test('childOf combined with type filter', () => {
|
|
755
|
+
const parentDXN = DXN.fromSpaceAndObjectId(SpaceId.random(), ObjectId.random());
|
|
756
|
+
const parentRef = Ref.fromDXN(parentDXN);
|
|
757
|
+
const query = Query.select(Filter.and(Filter.type(TestSchema.Person), Filter.childOf(parentRef)));
|
|
758
|
+
|
|
759
|
+
Schema.validateSync(QueryAST.Query)(query.ast);
|
|
760
|
+
expect(query.ast).toMatchObject({
|
|
761
|
+
type: 'select',
|
|
762
|
+
filter: {
|
|
763
|
+
type: 'and',
|
|
764
|
+
filters: [
|
|
765
|
+
{ type: 'object', typename: 'dxn:type:com.example.type.person:0.1.0' },
|
|
766
|
+
{ type: 'child-of', parents: [parentDXN.toString()], transitive: true },
|
|
767
|
+
],
|
|
768
|
+
},
|
|
769
|
+
});
|
|
770
|
+
});
|
|
771
|
+
|
|
772
|
+
test('childOf pretty-prints correctly', () => {
|
|
773
|
+
const parentRef = Ref.fromDXN(DXN.fromSpaceAndObjectId(SpaceId.random(), ObjectId.random()));
|
|
774
|
+
const filter = Filter.childOf(parentRef);
|
|
775
|
+
const pretty = Filter.pretty(filter);
|
|
776
|
+
expect(pretty).toContain('Filter.childOf');
|
|
777
|
+
expect(pretty).toContain('transitive: true');
|
|
778
|
+
});
|
|
779
|
+
|
|
780
|
+
test('childOf with mixed objects and Refs', () => {
|
|
781
|
+
const parent = Obj.make(TestSchema.Person, { name: 'Parent' });
|
|
782
|
+
const refDXN = DXN.fromSpaceAndObjectId(SpaceId.random(), ObjectId.random());
|
|
783
|
+
const parentRef = Ref.fromDXN(refDXN);
|
|
784
|
+
const filter = Filter.childOf([parent, parentRef]);
|
|
785
|
+
|
|
786
|
+
expect(filter.ast).toMatchObject({
|
|
787
|
+
type: 'child-of',
|
|
788
|
+
transitive: true,
|
|
789
|
+
});
|
|
790
|
+
expect(filter.ast.type === 'child-of' && filter.ast.parents.length).toBe(2);
|
|
791
|
+
Schema.validateSync(QueryAST.Filter)(filter.ast);
|
|
792
|
+
});
|
|
793
|
+
});
|
|
794
|
+
|
|
625
795
|
describe('Filter', () => {
|
|
626
796
|
test('Filter.or(Filter.typename(...))', () => {
|
|
627
|
-
const filter = Filter.or(Filter.typename('example.
|
|
797
|
+
const filter = Filter.or(Filter.typename('com.example.type.person'));
|
|
628
798
|
// TODO(dmaretskyi): Give vitest type-tests a try.
|
|
629
799
|
const _isAssignable: Obj.Unknown = null as any as Filter.Type<typeof filter>;
|
|
630
800
|
});
|
|
801
|
+
|
|
802
|
+
test('Filter.pretty returns human-readable filter string', () => {
|
|
803
|
+
const filter = Filter.type(TestSchema.Person, { name: 'Fred' });
|
|
804
|
+
const pretty = Filter.pretty(filter);
|
|
805
|
+
expect(pretty).toContain('Filter.type');
|
|
806
|
+
expect(pretty).toContain('com.example.type.person');
|
|
807
|
+
});
|
|
808
|
+
|
|
809
|
+
test('Filter.pretty handles complex filters', () => {
|
|
810
|
+
const filter = Filter.and(Filter.type(TestSchema.Person), Filter.id(ObjectId.random()));
|
|
811
|
+
const pretty = Filter.pretty(filter);
|
|
812
|
+
expect(pretty).toContain('Filter.and');
|
|
813
|
+
expect(pretty).toContain('Filter.type');
|
|
814
|
+
});
|
|
815
|
+
|
|
816
|
+
test('Filter.pretty handles or filters', () => {
|
|
817
|
+
const filter = Filter.or(Filter.type(TestSchema.Person), Filter.type(TestSchema.Organization));
|
|
818
|
+
const pretty = Filter.pretty(filter);
|
|
819
|
+
expect(pretty).toContain('Filter.or');
|
|
820
|
+
});
|
|
631
821
|
});
|
|
632
822
|
});
|
package/src/Query.ts
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
+
// @import-as-namespace
|
|
6
|
+
|
|
5
7
|
import type * as EffectArray from 'effect/Array';
|
|
6
8
|
import type * as Schema from 'effect/Schema';
|
|
7
9
|
|
|
@@ -205,6 +207,11 @@ export interface Query<T> {
|
|
|
205
207
|
* Add options to a query.
|
|
206
208
|
*/
|
|
207
209
|
'options'(options: QueryAST.QueryOptions): Query<T>;
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Attach a diagnostic label for logs and tooling (execution semantics unchanged).
|
|
213
|
+
*/
|
|
214
|
+
'debugLabel'(label: string): Query<T>;
|
|
208
215
|
}
|
|
209
216
|
|
|
210
217
|
export type Any = Query<any>;
|
|
@@ -331,6 +338,12 @@ class QueryClass implements Any {
|
|
|
331
338
|
| 'all-accessible-spaces',
|
|
332
339
|
options?: { includeFeeds?: boolean },
|
|
333
340
|
): Any {
|
|
341
|
+
if (arg == null) {
|
|
342
|
+
throw new TypeError(
|
|
343
|
+
'Query.from() requires a valid data source argument (database, feed, query, scope, or "all-accessible-spaces").',
|
|
344
|
+
);
|
|
345
|
+
}
|
|
346
|
+
|
|
334
347
|
if (is(arg)) {
|
|
335
348
|
return new QueryClass({
|
|
336
349
|
type: 'from',
|
|
@@ -346,7 +359,7 @@ class QueryClass implements Any {
|
|
|
346
359
|
from: {
|
|
347
360
|
_tag: 'scope',
|
|
348
361
|
scope: {
|
|
349
|
-
...(options?.includeFeeds ? {
|
|
362
|
+
...(options?.includeFeeds ? { allFeedsFromSpaces: true } : {}),
|
|
350
363
|
},
|
|
351
364
|
},
|
|
352
365
|
});
|
|
@@ -371,7 +384,7 @@ class QueryClass implements Any {
|
|
|
371
384
|
_tag: 'scope',
|
|
372
385
|
scope: {
|
|
373
386
|
spaceIds: databases.map((db) => db.spaceId),
|
|
374
|
-
...(options?.includeFeeds ? {
|
|
387
|
+
...(options?.includeFeeds ? { allFeedsFromSpaces: true } : {}),
|
|
375
388
|
},
|
|
376
389
|
},
|
|
377
390
|
});
|
|
@@ -380,19 +393,32 @@ class QueryClass implements Any {
|
|
|
380
393
|
if (items.length > 0) {
|
|
381
394
|
const typename = Obj.getTypename(items[0] as Obj.Unknown);
|
|
382
395
|
// TODO(dmaretskyi): Support querying from views.
|
|
383
|
-
if (typename === 'dxos.
|
|
396
|
+
if (typename === 'org.dxos.type.view') {
|
|
384
397
|
throw new Error('Query.from(view) is not yet supported.');
|
|
385
398
|
}
|
|
386
399
|
// TODO(dmaretskyi): Support querying from collections.
|
|
387
|
-
if (typename === 'dxos.
|
|
400
|
+
if (typename === 'org.dxos.type.collection') {
|
|
388
401
|
throw new Error('Query.from(collection) is not yet supported.');
|
|
389
402
|
}
|
|
403
|
+
// Validate that the items are Feed.Feed instances.
|
|
404
|
+
for (const item of items) {
|
|
405
|
+
if (!Obj.instanceOf(Feed.Feed, item)) {
|
|
406
|
+
throw new TypeError(
|
|
407
|
+
`Query.from() expects Feed objects (org.dxos.type.feed), but received an object with typename '${typename ?? 'unknown'}'.`,
|
|
408
|
+
);
|
|
409
|
+
}
|
|
410
|
+
}
|
|
390
411
|
}
|
|
391
412
|
|
|
392
|
-
const
|
|
393
|
-
const
|
|
413
|
+
const feedItems = items as Feed.Feed[];
|
|
414
|
+
const feedDXNs = feedItems.map((feed) => {
|
|
394
415
|
const dxn = Feed.getQueueDxn(feed);
|
|
395
|
-
|
|
416
|
+
if (!dxn) {
|
|
417
|
+
throw new TypeError(
|
|
418
|
+
`Query.from() expects persisted Feed objects with a queue DXN; got feed without a space (id=${Obj.getDXN(feed).toString()}).`,
|
|
419
|
+
);
|
|
420
|
+
}
|
|
421
|
+
return dxn.toString();
|
|
396
422
|
});
|
|
397
423
|
return new QueryClass({
|
|
398
424
|
type: 'from',
|
|
@@ -400,7 +426,7 @@ class QueryClass implements Any {
|
|
|
400
426
|
from: {
|
|
401
427
|
_tag: 'scope',
|
|
402
428
|
scope: {
|
|
403
|
-
|
|
429
|
+
feeds: feedDXNs,
|
|
404
430
|
},
|
|
405
431
|
},
|
|
406
432
|
});
|
|
@@ -413,6 +439,21 @@ class QueryClass implements Any {
|
|
|
413
439
|
options,
|
|
414
440
|
});
|
|
415
441
|
}
|
|
442
|
+
|
|
443
|
+
debugLabel(label: string): Any {
|
|
444
|
+
if (this.ast.type === 'options') {
|
|
445
|
+
return new QueryClass({
|
|
446
|
+
type: 'options',
|
|
447
|
+
query: this.ast.query,
|
|
448
|
+
options: { ...this.ast.options, debugLabel: label },
|
|
449
|
+
});
|
|
450
|
+
}
|
|
451
|
+
return new QueryClass({
|
|
452
|
+
type: 'options',
|
|
453
|
+
query: this.ast,
|
|
454
|
+
options: { debugLabel: label },
|
|
455
|
+
});
|
|
456
|
+
}
|
|
416
457
|
}
|
|
417
458
|
|
|
418
459
|
export const is = (value: unknown): value is Any => {
|
|
@@ -444,7 +485,13 @@ export const select = <F extends Filter.Any>(filter: F): Query<Filter.Type<F>> =
|
|
|
444
485
|
*
|
|
445
486
|
* Shorthand for: `Query.select(Filter.type(schema, predicates))`.
|
|
446
487
|
*/
|
|
447
|
-
export const type
|
|
488
|
+
export const type: {
|
|
489
|
+
<S extends Schema.Schema.All>(
|
|
490
|
+
schema: S,
|
|
491
|
+
predicates?: Filter.Props<Schema.Schema.Type<S>>,
|
|
492
|
+
): Query<Schema.Schema.Type<S>>;
|
|
493
|
+
(schema: string, predicates?: Filter.Props<unknown>): Query<any>;
|
|
494
|
+
} = (schema: Schema.Schema.All | string, predicates?: Filter.Props<unknown>): Any => {
|
|
448
495
|
return new QueryClass({
|
|
449
496
|
type: 'select',
|
|
450
497
|
filter: Filter.type(schema, predicates).ast,
|
|
@@ -509,7 +556,7 @@ export const from = (
|
|
|
509
556
|
return wrapper.from(source as any, options);
|
|
510
557
|
};
|
|
511
558
|
|
|
512
|
-
const SCOPE_KEYS = new Set(['spaceIds', '
|
|
559
|
+
const SCOPE_KEYS = new Set(['spaceIds', 'feeds', 'allFeedsFromSpaces']);
|
|
513
560
|
|
|
514
561
|
/** Detect a raw Scope object (plain object with only Scope-valid keys). */
|
|
515
562
|
const _isScope = (value: unknown): value is QueryAST.Scope => {
|
|
@@ -518,3 +565,8 @@ const _isScope = (value: unknown): value is QueryAST.Scope => {
|
|
|
518
565
|
}
|
|
519
566
|
return Object.keys(value).every((key) => SCOPE_KEYS.has(key));
|
|
520
567
|
};
|
|
568
|
+
|
|
569
|
+
/**
|
|
570
|
+
* Returns a human-readable string representation of a Query AST.
|
|
571
|
+
*/
|
|
572
|
+
export const pretty = (query: Any): string => internal.prettyQuery(query.ast);
|
package/src/Ref.ts
CHANGED
|
@@ -2,12 +2,14 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
+
// @import-as-namespace
|
|
6
|
+
|
|
5
7
|
import * as Option from 'effect/Option';
|
|
6
8
|
import type * as Schema from 'effect/Schema';
|
|
7
9
|
import * as SchemaAST from 'effect/SchemaAST';
|
|
8
10
|
|
|
9
11
|
import type * as Entity from './Entity';
|
|
10
|
-
import * as
|
|
12
|
+
import * as refInternal from './internal/Ref';
|
|
11
13
|
import type * as JsonSchema from './JsonSchema';
|
|
12
14
|
import type * as Obj from './Obj';
|
|
13
15
|
|
|
@@ -29,8 +31,8 @@ import type * as Obj from './Obj';
|
|
|
29
31
|
* database.makeRef(dxn); // Create a ref from a DXN.
|
|
30
32
|
* ```
|
|
31
33
|
*/
|
|
32
|
-
export type Ref<T> =
|
|
33
|
-
export type Unknown =
|
|
34
|
+
export type Ref<T> = refInternal.Ref<T>;
|
|
35
|
+
export type Unknown = refInternal.Ref<Obj.Unknown>;
|
|
34
36
|
|
|
35
37
|
/**
|
|
36
38
|
* Factory function to create a Ref schema for the given target schema.
|
|
@@ -43,9 +45,9 @@ export type Unknown = internal.Ref<Obj.Unknown>;
|
|
|
43
45
|
* }).pipe(Type.object({ typename: 'Task', version: '0.1.0' }));
|
|
44
46
|
* ```
|
|
45
47
|
*/
|
|
46
|
-
export const Ref: <S extends Schema.Schema.Any>(schema: S) => RefSchema<Schema.Schema.Type<S>> =
|
|
48
|
+
export const Ref: <S extends Schema.Schema.Any>(schema: S) => RefSchema<Schema.Schema.Type<S>> = refInternal.Ref;
|
|
47
49
|
|
|
48
|
-
export const Array =
|
|
50
|
+
export const Array = refInternal.RefArray;
|
|
49
51
|
|
|
50
52
|
/**
|
|
51
53
|
* TypeScript type for a Ref schema.
|
|
@@ -64,31 +66,33 @@ export const Array = internal.RefArray;
|
|
|
64
66
|
// TODO(dmaretskyi): Investigate if we can remove this type.
|
|
65
67
|
// Post DX-836 it will become just `Schema.Schema<Ref.Ref<T>>`.
|
|
66
68
|
// NOTE: This could be Type.Ref<T> instead, but since it going to be removed, it's better to keep it here, self-contained.
|
|
67
|
-
export interface RefSchema<T extends Entity.Unknown> extends
|
|
69
|
+
export interface RefSchema<T extends Entity.Unknown> extends refInternal.RefSchema<T> {}
|
|
68
70
|
|
|
69
71
|
/**
|
|
70
72
|
* Extract reference target.
|
|
71
73
|
*/
|
|
72
|
-
export type Target<R extends Unknown> = R extends
|
|
74
|
+
export type Target<R extends Unknown> = R extends refInternal.Ref<infer T> ? T : never;
|
|
73
75
|
|
|
74
76
|
/**
|
|
75
77
|
* Reference resolver.
|
|
76
78
|
*/
|
|
77
|
-
export type Resolver =
|
|
79
|
+
export type Resolver = refInternal.RefResolver;
|
|
78
80
|
|
|
79
|
-
export const isRef: (value: unknown) => value is Unknown =
|
|
81
|
+
export const isRef: (value: unknown) => value is Unknown = refInternal.Ref.isRef;
|
|
80
82
|
|
|
81
|
-
export const make =
|
|
83
|
+
export const make = refInternal.Ref.make;
|
|
82
84
|
|
|
83
85
|
// TODO(dmaretskyi): Consider just allowing `make` to accept DXN.
|
|
84
|
-
export const fromDXN =
|
|
86
|
+
export const fromDXN = refInternal.Ref.fromDXN;
|
|
87
|
+
|
|
88
|
+
export const hasObjectId = refInternal.Ref.hasObjectId;
|
|
85
89
|
|
|
86
90
|
// TODO(wittjosiah): Factor out?
|
|
87
91
|
export const isRefType = (ast: SchemaAST.AST): boolean => {
|
|
88
92
|
return SchemaAST.getAnnotation<JsonSchema.JsonSchema>(ast, SchemaAST.JSONSchemaAnnotationId).pipe(
|
|
89
93
|
Option.flatMap((jsonSchema) => ('$id' in jsonSchema ? Option.some(jsonSchema) : Option.none())),
|
|
90
94
|
Option.flatMap((jsonSchema) => {
|
|
91
|
-
const { typename } =
|
|
95
|
+
const { typename } = refInternal.getSchemaReference(jsonSchema) ?? {};
|
|
92
96
|
return typename ? Option.some(true) : Option.some(false);
|
|
93
97
|
}),
|
|
94
98
|
Option.getOrElse(() => false),
|
package/src/Relation.test.ts
CHANGED
|
@@ -65,8 +65,8 @@ describe('Relation', () => {
|
|
|
65
65
|
expect(Relation.getDXN(snapshot)).toBeDefined();
|
|
66
66
|
|
|
67
67
|
// getTypename - works with both.
|
|
68
|
-
expect(Relation.getTypename(rel)).toBe('example.
|
|
69
|
-
expect(Relation.getTypename(snapshot)).toBe('example.
|
|
68
|
+
expect(Relation.getTypename(rel)).toBe('com.example.type.has-manager');
|
|
69
|
+
expect(Relation.getTypename(snapshot)).toBe('com.example.type.has-manager');
|
|
70
70
|
|
|
71
71
|
// getMeta - works with both.
|
|
72
72
|
expect(Relation.getMeta(rel)).toBeDefined();
|