@dxos/echo 0.8.4-main.7ace549 → 0.8.4-main.937b3ca
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 +1 -2
- package/dist/lib/browser/Annotation.mjs +33 -0
- package/dist/lib/browser/Annotation.mjs.map +7 -0
- package/dist/lib/browser/Database.mjs +18 -0
- package/dist/lib/browser/Database.mjs.map +7 -0
- package/dist/lib/browser/Entity.mjs +52 -0
- package/dist/lib/browser/Entity.mjs.map +7 -0
- package/dist/lib/browser/Err.mjs +11 -0
- package/dist/lib/browser/Err.mjs.map +7 -0
- package/dist/lib/browser/Filter.mjs +62 -0
- package/dist/lib/browser/Filter.mjs.map +7 -0
- package/dist/lib/browser/Format.mjs +67 -0
- package/dist/lib/browser/Format.mjs.map +7 -0
- package/dist/lib/browser/JsonSchema.mjs +20 -0
- package/dist/lib/browser/JsonSchema.mjs.map +7 -0
- package/dist/lib/browser/Key.mjs +13 -0
- package/dist/lib/browser/Key.mjs.map +7 -0
- package/dist/lib/browser/Obj.mjs +91 -0
- package/dist/lib/browser/Obj.mjs.map +7 -0
- package/dist/lib/browser/Order.mjs +13 -0
- package/dist/lib/browser/Order.mjs.map +7 -0
- package/dist/lib/browser/Query.mjs +27 -0
- package/dist/lib/browser/Query.mjs.map +7 -0
- package/dist/lib/browser/QueryResult.mjs +3 -0
- package/dist/lib/browser/QueryResult.mjs.map +7 -0
- package/dist/lib/browser/Ref.mjs +23 -0
- package/dist/lib/browser/Ref.mjs.map +7 -0
- package/dist/lib/browser/Relation.mjs +85 -0
- package/dist/lib/browser/Relation.mjs.map +7 -0
- package/dist/lib/browser/SchemaRegistry.mjs +3 -0
- package/dist/lib/browser/SchemaRegistry.mjs.map +7 -0
- package/dist/lib/browser/Tag.mjs +26 -0
- package/dist/lib/browser/Tag.mjs.map +7 -0
- package/dist/lib/browser/Type.mjs +48 -0
- package/dist/lib/browser/Type.mjs.map +7 -0
- package/dist/lib/browser/chunk-22JMFST2.mjs +24 -0
- package/dist/lib/browser/chunk-22JMFST2.mjs.map +7 -0
- package/dist/lib/browser/chunk-2SBB7OWV.mjs +250 -0
- package/dist/lib/browser/chunk-2SBB7OWV.mjs.map +7 -0
- package/dist/lib/browser/chunk-6L5HHUVU.mjs +158 -0
- package/dist/lib/browser/chunk-6L5HHUVU.mjs.map +7 -0
- package/dist/lib/browser/chunk-7STIBCP7.mjs +133 -0
- package/dist/lib/browser/chunk-7STIBCP7.mjs.map +7 -0
- package/dist/lib/browser/{chunk-7GH6RXJ3.mjs → chunk-BJPE6CIC.mjs} +1999 -1835
- package/dist/lib/browser/chunk-BJPE6CIC.mjs.map +7 -0
- package/dist/lib/browser/chunk-CGS2ULMK.mjs +11 -0
- package/dist/lib/browser/chunk-CGS2ULMK.mjs.map +7 -0
- package/dist/lib/browser/chunk-CJ5YELTO.mjs +39 -0
- package/dist/lib/browser/chunk-CJ5YELTO.mjs.map +7 -0
- package/dist/lib/browser/chunk-FPOISFQK.mjs +40 -0
- package/dist/lib/browser/chunk-FPOISFQK.mjs.map +7 -0
- package/dist/lib/browser/chunk-FRDT7RA4.mjs +403 -0
- package/dist/lib/browser/chunk-FRDT7RA4.mjs.map +7 -0
- package/dist/lib/browser/chunk-INHXFXY5.mjs +22 -0
- package/dist/lib/browser/chunk-INHXFXY5.mjs.map +7 -0
- package/dist/lib/browser/chunk-IXVWLTG7.mjs +9 -0
- package/dist/lib/browser/chunk-IXVWLTG7.mjs.map +7 -0
- package/dist/lib/browser/chunk-JMKVF2YQ.mjs +43 -0
- package/dist/lib/browser/chunk-JMKVF2YQ.mjs.map +7 -0
- package/dist/lib/browser/chunk-KQQGVHFN.mjs +143 -0
- package/dist/lib/browser/chunk-KQQGVHFN.mjs.map +7 -0
- package/dist/lib/browser/chunk-MYCCGG2T.mjs +15 -0
- package/dist/lib/browser/chunk-MYCCGG2T.mjs.map +7 -0
- package/dist/lib/browser/chunk-NOPVNWPT.mjs +204 -0
- package/dist/lib/browser/chunk-NOPVNWPT.mjs.map +7 -0
- package/dist/lib/browser/chunk-PQZW3S6L.mjs +74 -0
- package/dist/lib/browser/chunk-PQZW3S6L.mjs.map +7 -0
- package/dist/lib/browser/chunk-RK4Z4JUZ.mjs +283 -0
- package/dist/lib/browser/chunk-RK4Z4JUZ.mjs.map +7 -0
- package/dist/lib/browser/chunk-U2J7TA7K.mjs +57 -0
- package/dist/lib/browser/chunk-U2J7TA7K.mjs.map +7 -0
- package/dist/lib/browser/chunk-W5D2GWAW.mjs +98 -0
- package/dist/lib/browser/chunk-W5D2GWAW.mjs.map +7 -0
- package/dist/lib/browser/chunk-XDIUHAAX.mjs +41 -0
- package/dist/lib/browser/chunk-XDIUHAAX.mjs.map +7 -0
- package/dist/lib/browser/chunk-YKTSSMDS.mjs +69 -0
- package/dist/lib/browser/chunk-YKTSSMDS.mjs.map +7 -0
- package/dist/lib/browser/chunk-ZAGAOZVY.mjs +288 -0
- package/dist/lib/browser/chunk-ZAGAOZVY.mjs.map +7 -0
- package/dist/lib/browser/chunk-ZHXZGIXD.mjs +9 -0
- package/dist/lib/browser/chunk-ZHXZGIXD.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +65 -25
- package/dist/lib/browser/internal/index.mjs +213 -92
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +80 -41
- package/dist/lib/browser/testing/index.mjs.map +3 -3
- package/dist/lib/node-esm/Annotation.mjs +33 -0
- package/dist/lib/node-esm/Annotation.mjs.map +7 -0
- package/dist/lib/node-esm/Database.mjs +18 -0
- package/dist/lib/node-esm/Database.mjs.map +7 -0
- package/dist/lib/node-esm/Entity.mjs +52 -0
- package/dist/lib/node-esm/Entity.mjs.map +7 -0
- package/dist/lib/node-esm/Err.mjs +11 -0
- package/dist/lib/node-esm/Err.mjs.map +7 -0
- package/dist/lib/node-esm/Filter.mjs +62 -0
- package/dist/lib/node-esm/Filter.mjs.map +7 -0
- package/dist/lib/node-esm/Format.mjs +67 -0
- package/dist/lib/node-esm/Format.mjs.map +7 -0
- package/dist/lib/node-esm/JsonSchema.mjs +20 -0
- package/dist/lib/node-esm/JsonSchema.mjs.map +7 -0
- package/dist/lib/node-esm/Key.mjs +13 -0
- package/dist/lib/node-esm/Key.mjs.map +7 -0
- package/dist/lib/node-esm/Obj.mjs +91 -0
- package/dist/lib/node-esm/Obj.mjs.map +7 -0
- package/dist/lib/node-esm/Order.mjs +13 -0
- package/dist/lib/node-esm/Order.mjs.map +7 -0
- package/dist/lib/node-esm/Query.mjs +27 -0
- package/dist/lib/node-esm/Query.mjs.map +7 -0
- package/dist/lib/node-esm/QueryResult.mjs +3 -0
- package/dist/lib/node-esm/QueryResult.mjs.map +7 -0
- package/dist/lib/node-esm/Ref.mjs +23 -0
- package/dist/lib/node-esm/Ref.mjs.map +7 -0
- package/dist/lib/node-esm/Relation.mjs +85 -0
- package/dist/lib/node-esm/Relation.mjs.map +7 -0
- package/dist/lib/node-esm/SchemaRegistry.mjs +3 -0
- package/dist/lib/node-esm/SchemaRegistry.mjs.map +7 -0
- package/dist/lib/node-esm/Tag.mjs +26 -0
- package/dist/lib/node-esm/Tag.mjs.map +7 -0
- package/dist/lib/node-esm/Type.mjs +48 -0
- package/dist/lib/node-esm/Type.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-4PNXQA64.mjs +250 -0
- package/dist/lib/node-esm/chunk-4PNXQA64.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-5OBN7GZW.mjs +158 -0
- package/dist/lib/node-esm/chunk-5OBN7GZW.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-AJEMYSIR.mjs +22 -0
- package/dist/lib/node-esm/chunk-AJEMYSIR.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-ANLVLWME.mjs +98 -0
- package/dist/lib/node-esm/chunk-ANLVLWME.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-DMR7OAFK.mjs +57 -0
- package/dist/lib/node-esm/chunk-DMR7OAFK.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-FWTSPIFF.mjs +133 -0
- package/dist/lib/node-esm/chunk-FWTSPIFF.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
- package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-ILMLLM4R.mjs +204 -0
- package/dist/lib/node-esm/chunk-ILMLLM4R.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-K37NA7PO.mjs +43 -0
- package/dist/lib/node-esm/chunk-K37NA7PO.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-M4B6BMD2.mjs → chunk-LT3H4JOX.mjs} +1999 -1835
- package/dist/lib/node-esm/chunk-LT3H4JOX.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-MOLNWFNL.mjs +9 -0
- package/dist/lib/node-esm/chunk-MOLNWFNL.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-MOWUEW5P.mjs +15 -0
- package/dist/lib/node-esm/chunk-MOWUEW5P.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-NBWL7UCZ.mjs +40 -0
- package/dist/lib/node-esm/chunk-NBWL7UCZ.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-NRN3ZW2T.mjs +143 -0
- package/dist/lib/node-esm/chunk-NRN3ZW2T.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-QLI2EIJ2.mjs +41 -0
- package/dist/lib/node-esm/chunk-QLI2EIJ2.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-QYR67VBV.mjs +288 -0
- package/dist/lib/node-esm/chunk-QYR67VBV.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-UKGVOINP.mjs +9 -0
- package/dist/lib/node-esm/chunk-UKGVOINP.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-W6QIEBTQ.mjs +403 -0
- package/dist/lib/node-esm/chunk-W6QIEBTQ.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-XHJRMQZD.mjs +69 -0
- package/dist/lib/node-esm/chunk-XHJRMQZD.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-Y75VU7LB.mjs +74 -0
- package/dist/lib/node-esm/chunk-Y75VU7LB.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-YOLH5KS4.mjs +283 -0
- package/dist/lib/node-esm/chunk-YOLH5KS4.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-YQ2NWGL5.mjs +39 -0
- package/dist/lib/node-esm/chunk-YQ2NWGL5.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-ZBB67AKD.mjs +24 -0
- package/dist/lib/node-esm/chunk-ZBB67AKD.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +65 -25
- package/dist/lib/node-esm/internal/index.mjs +213 -92
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/testing/index.mjs +80 -41
- package/dist/lib/node-esm/testing/index.mjs.map +3 -3
- package/dist/types/src/Annotation.d.ts +1 -1
- package/dist/types/src/Annotation.d.ts.map +1 -1
- package/dist/types/src/Database.d.ts +117 -60
- package/dist/types/src/Database.d.ts.map +1 -1
- package/dist/types/src/Entity.d.ts +111 -5
- package/dist/types/src/Entity.d.ts.map +1 -1
- 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/{errors.d.ts → Err.d.ts} +13 -17
- package/dist/types/src/Err.d.ts.map +1 -0
- package/dist/types/src/Filter.d.ts +120 -0
- package/dist/types/src/Filter.d.ts.map +1 -0
- package/dist/types/src/Format.d.ts.map +1 -1
- package/dist/types/src/Hypergraph.d.ts +60 -0
- package/dist/types/src/Hypergraph.d.ts.map +1 -0
- package/dist/types/src/Obj.d.ts +268 -76
- 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/query.d.ts → Query.d.ts} +53 -50
- 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 +9 -7
- package/dist/types/src/Ref.d.ts.map +1 -1
- package/dist/types/src/Relation.d.ts +235 -18
- 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 +6 -6
- package/dist/types/src/Tag.d.ts.map +1 -1
- package/dist/types/src/Type.d.ts +213 -50
- 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/index.d.ts +8 -2
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/internal/annotations/annotations.d.ts +23 -27
- package/dist/types/src/internal/annotations/annotations.d.ts.map +1 -1
- package/dist/types/src/internal/annotations/util.d.ts +1 -0
- package/dist/types/src/internal/annotations/util.d.ts.map +1 -1
- package/dist/types/src/internal/api/annotations.d.ts +23 -0
- package/dist/types/src/internal/api/annotations.d.ts.map +1 -0
- package/dist/types/src/internal/api/entity.d.ts +13 -0
- package/dist/types/src/internal/api/entity.d.ts.map +1 -0
- package/dist/types/src/internal/api/index.d.ts +15 -0
- package/dist/types/src/internal/api/index.d.ts.map +1 -0
- package/dist/types/src/internal/api/meta.d.ts +42 -0
- package/dist/types/src/internal/api/meta.d.ts.map +1 -0
- package/dist/types/src/internal/api/sorting.d.ts +24 -0
- package/dist/types/src/internal/api/sorting.d.ts.map +1 -0
- package/dist/types/src/internal/api/version.d.ts +42 -0
- package/dist/types/src/internal/api/version.d.ts.map +1 -0
- package/dist/types/src/internal/entities/entity.d.ts +13 -3
- package/dist/types/src/internal/entities/entity.d.ts.map +1 -1
- package/dist/types/src/internal/entities/index.d.ts +1 -1
- package/dist/types/src/internal/entities/index.d.ts.map +1 -1
- package/dist/types/src/internal/entities/model.d.ts +14 -7
- package/dist/types/src/internal/entities/model.d.ts.map +1 -1
- package/dist/types/src/internal/entities/object.d.ts +8 -1
- package/dist/types/src/internal/entities/object.d.ts.map +1 -1
- package/dist/types/src/internal/entities/relation.d.ts +8 -1
- package/dist/types/src/internal/entities/relation.d.ts.map +1 -1
- package/dist/types/src/internal/formats/format.d.ts +4 -4
- package/dist/types/src/internal/formats/format.d.ts.map +1 -1
- package/dist/types/src/internal/formats/select.d.ts +5 -3
- package/dist/types/src/internal/formats/select.d.ts.map +1 -1
- package/dist/types/src/internal/formats/string.d.ts +4 -0
- package/dist/types/src/internal/formats/string.d.ts.map +1 -1
- package/dist/types/src/internal/formats/types.d.ts +6 -2
- package/dist/types/src/internal/formats/types.d.ts.map +1 -1
- package/dist/types/src/internal/index.d.ts +2 -1
- package/dist/types/src/internal/index.d.ts.map +1 -1
- package/dist/types/src/internal/json-schema/json-schema.d.ts.map +1 -1
- package/dist/types/src/internal/object/clone.d.ts +8 -0
- package/dist/types/src/internal/object/clone.d.ts.map +1 -0
- package/dist/types/src/internal/object/create-object.d.ts +1 -1
- package/dist/types/src/internal/object/index.d.ts +3 -0
- package/dist/types/src/internal/object/index.d.ts.map +1 -1
- package/dist/types/src/internal/object/json-serializer.d.ts +13 -7
- package/dist/types/src/internal/object/json-serializer.d.ts.map +1 -1
- package/dist/types/src/internal/object/schema-validator.d.ts +1 -14
- package/dist/types/src/internal/object/schema-validator.d.ts.map +1 -1
- package/dist/types/src/internal/object/set-value.d.ts +7 -0
- package/dist/types/src/internal/object/set-value.d.ts.map +1 -0
- package/dist/types/src/internal/object/set-value.test.d.ts +2 -0
- package/dist/types/src/internal/object/set-value.test.d.ts.map +1 -0
- package/dist/types/src/internal/object/snapshot.d.ts +6 -0
- package/dist/types/src/internal/object/snapshot.d.ts.map +1 -0
- package/dist/types/src/internal/object/typed-object.d.ts +7 -13
- package/dist/types/src/internal/object/typed-object.d.ts.map +1 -1
- package/dist/types/src/internal/proxy/change-context.d.ts +55 -0
- package/dist/types/src/internal/proxy/change-context.d.ts.map +1 -0
- package/dist/types/src/internal/proxy/change.test.d.ts +2 -0
- package/dist/types/src/internal/proxy/change.test.d.ts.map +1 -0
- package/dist/types/src/internal/proxy/define-hidden-property.d.ts +5 -0
- package/dist/types/src/internal/proxy/define-hidden-property.d.ts.map +1 -0
- package/dist/types/src/internal/proxy/errors.d.ts +19 -0
- package/dist/types/src/internal/proxy/errors.d.ts.map +1 -0
- package/dist/types/src/internal/proxy/event-batch.d.ts +10 -0
- package/dist/types/src/internal/proxy/event-batch.d.ts.map +1 -0
- package/dist/types/src/internal/proxy/index.d.ts +11 -0
- package/dist/types/src/internal/proxy/index.d.ts.map +1 -1
- package/dist/types/src/internal/proxy/json-serializer.d.ts +6 -0
- package/dist/types/src/internal/proxy/json-serializer.d.ts.map +1 -0
- package/dist/types/src/internal/proxy/make-object.d.ts +2 -4
- package/dist/types/src/internal/proxy/make-object.d.ts.map +1 -1
- package/dist/types/src/internal/proxy/ownership.d.ts +57 -0
- package/dist/types/src/internal/proxy/ownership.d.ts.map +1 -0
- package/dist/types/src/internal/proxy/proxy-types.d.ts +18 -0
- package/dist/types/src/internal/proxy/proxy-types.d.ts.map +1 -0
- package/dist/types/src/internal/proxy/proxy-utils.d.ts +47 -0
- package/dist/types/src/internal/proxy/proxy-utils.d.ts.map +1 -0
- package/dist/types/src/internal/proxy/reactive-array.d.ts +8 -0
- package/dist/types/src/internal/proxy/reactive-array.d.ts.map +1 -0
- package/dist/types/src/internal/proxy/reactive.d.ts +39 -0
- package/dist/types/src/internal/proxy/reactive.d.ts.map +1 -0
- package/dist/types/src/internal/proxy/schema-validator.d.ts +15 -0
- package/dist/types/src/internal/proxy/schema-validator.d.ts.map +1 -0
- package/dist/types/src/internal/proxy/symbols.d.ts +3 -0
- package/dist/types/src/internal/proxy/symbols.d.ts.map +1 -0
- package/dist/types/src/internal/proxy/typed-handler.d.ts +14 -11
- package/dist/types/src/internal/proxy/typed-handler.d.ts.map +1 -1
- package/dist/types/src/internal/ref/ref-array.d.ts +4 -4
- package/dist/types/src/internal/ref/ref-array.d.ts.map +1 -1
- package/dist/types/src/internal/ref/ref.d.ts +14 -6
- package/dist/types/src/internal/ref/ref.d.ts.map +1 -1
- package/dist/types/src/internal/schema/compose.d.ts.map +1 -1
- package/dist/types/src/internal/schema/echo-schema.d.ts +15 -3
- package/dist/types/src/internal/schema/echo-schema.d.ts.map +1 -1
- package/dist/types/src/internal/schema/index.d.ts +0 -2
- package/dist/types/src/internal/schema/index.d.ts.map +1 -1
- package/dist/types/src/internal/schema/persistent-schema.d.ts +9 -7
- package/dist/types/src/internal/schema/persistent-schema.d.ts.map +1 -1
- package/dist/types/src/internal/types/base.d.ts +5 -16
- package/dist/types/src/internal/types/base.d.ts.map +1 -1
- package/dist/types/src/internal/types/entity.d.ts +27 -2
- package/dist/types/src/internal/types/entity.d.ts.map +1 -1
- package/dist/types/src/internal/types/meta.d.ts +1 -9
- package/dist/types/src/internal/types/meta.d.ts.map +1 -1
- package/dist/types/src/testing/test-schema.d.ts +141 -175
- package/dist/types/src/testing/test-schema.d.ts.map +1 -1
- package/dist/types/src/testing/util.d.ts +6 -1
- package/dist/types/src/testing/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +130 -23
- package/src/Annotation.ts +5 -4
- package/src/Database.ts +229 -82
- package/src/Entity.test.ts +22 -0
- package/src/Entity.ts +173 -7
- package/src/{errors.ts → Err.ts} +2 -2
- package/src/Filter.ts +376 -0
- package/src/Format.ts +0 -2
- package/src/Hypergraph.ts +74 -0
- package/src/Obj.test.ts +386 -0
- package/src/Obj.ts +338 -250
- package/src/{query/order.ts → Order.ts} +19 -9
- package/src/{query/query.test.ts → Query.test.ts} +180 -49
- package/src/{query/query.ts → Query.ts} +115 -122
- package/src/QueryResult.ts +106 -0
- package/src/Ref.ts +20 -3
- package/src/Relation.test.ts +82 -0
- package/src/Relation.ts +364 -27
- package/src/SchemaRegistry.ts +105 -0
- package/src/Tag.ts +1 -1
- package/src/Type.test.ts +52 -0
- package/src/Type.ts +322 -88
- package/src/index.ts +9 -5
- package/src/internal/README.md +36 -17
- package/src/internal/annotations/annotations.test.ts +6 -6
- package/src/internal/annotations/annotations.ts +73 -76
- package/src/internal/annotations/util.ts +2 -0
- package/src/internal/api/annotations.ts +60 -0
- package/src/internal/api/entity.ts +29 -0
- package/src/internal/api/index.ts +19 -0
- package/src/internal/api/meta.ts +88 -0
- package/src/internal/api/sorting.ts +53 -0
- package/src/internal/api/version.ts +96 -0
- package/src/internal/entities/entity.ts +36 -19
- package/src/internal/entities/index.ts +1 -1
- package/src/internal/entities/model.ts +17 -12
- package/src/internal/entities/object.ts +20 -5
- package/src/internal/entities/relation.ts +22 -4
- package/src/internal/formats/format.ts +7 -8
- package/src/internal/formats/object.ts +2 -2
- package/src/internal/formats/select.ts +5 -3
- package/src/internal/formats/string.ts +5 -0
- package/src/internal/formats/types.ts +9 -3
- package/src/internal/index.ts +2 -1
- package/src/internal/json-schema/json-schema-type.ts +1 -1
- package/src/internal/json-schema/json-schema.test.ts +19 -17
- package/src/internal/json-schema/json-schema.ts +4 -4
- package/src/internal/object/clone.ts +48 -0
- package/src/internal/object/create-object.ts +2 -2
- package/src/internal/object/index.ts +3 -0
- package/src/internal/object/inspect.ts +3 -3
- package/src/internal/object/json-serializer.test.ts +4 -1
- package/src/internal/object/json-serializer.ts +28 -70
- package/src/internal/object/schema-validator.ts +2 -238
- package/src/internal/object/set-value.test.ts +281 -0
- package/src/internal/object/set-value.ts +165 -0
- package/src/internal/object/snapshot.ts +70 -0
- package/src/internal/object/typed-object.test.ts +11 -11
- package/src/internal/object/typed-object.ts +8 -72
- package/src/internal/proxy/change-context.ts +138 -0
- package/src/internal/proxy/change.test.ts +519 -0
- package/src/internal/proxy/define-hidden-property.ts +14 -0
- package/src/internal/proxy/errors.ts +42 -0
- package/src/internal/proxy/event-batch.ts +44 -0
- package/src/internal/proxy/handler.test.ts +30 -80
- package/src/internal/proxy/index.ts +11 -0
- package/src/internal/proxy/json-serializer.ts +87 -0
- package/src/internal/proxy/make-object.ts +33 -50
- package/src/internal/proxy/ownership.ts +253 -0
- package/src/internal/proxy/proxy-types.ts +23 -0
- package/src/internal/proxy/proxy-utils.ts +150 -0
- package/src/internal/proxy/reactive-array.ts +71 -0
- package/src/internal/proxy/reactive.ts +69 -0
- package/src/internal/proxy/schema-validator.ts +244 -0
- package/src/internal/proxy/schema.test.ts +23 -15
- package/src/internal/proxy/symbols.ts +7 -0
- package/src/internal/proxy/typed-handler.test.ts +251 -35
- package/src/internal/proxy/typed-handler.ts +265 -56
- package/src/internal/proxy/typed-object.test.ts +26 -15
- package/src/internal/ref/ref-array.ts +4 -4
- package/src/internal/ref/ref.ts +62 -39
- package/src/internal/schema/compose.test.ts +3 -3
- package/src/internal/schema/compose.ts +1 -2
- package/src/internal/schema/echo-schema.ts +49 -11
- package/src/internal/schema/index.ts +0 -2
- package/src/internal/schema/persistent-schema.ts +3 -4
- package/src/internal/types/base.ts +6 -21
- package/src/internal/types/entity.ts +35 -4
- package/src/internal/types/meta.ts +1 -11
- package/src/testing/api.test.ts +31 -5
- package/src/testing/test-schema.ts +55 -30
- package/src/testing/util.ts +22 -15
- package/dist/lib/browser/chunk-7GH6RXJ3.mjs.map +0 -7
- package/dist/lib/browser/chunk-E4UTVJNF.mjs +0 -1111
- package/dist/lib/browser/chunk-E4UTVJNF.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-JE5RXM2I.mjs +0 -1111
- package/dist/lib/node-esm/chunk-JE5RXM2I.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-M4B6BMD2.mjs.map +0 -7
- package/dist/types/src/errors.d.ts.map +0 -1
- package/dist/types/src/internal/entities/expando.d.ts +0 -16
- package/dist/types/src/internal/entities/expando.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/query/filter.d.ts +0 -167
- package/dist/types/src/query/filter.d.ts.map +0 -1
- package/dist/types/src/query/index.d.ts +0 -5
- package/dist/types/src/query/index.d.ts.map +0 -1
- package/dist/types/src/query/order.d.ts +0 -12
- package/dist/types/src/query/order.d.ts.map +0 -1
- package/dist/types/src/query/query.d.ts.map +0 -1
- package/dist/types/src/query/query.test.d.ts +0 -2
- package/dist/types/src/query/query.test.d.ts.map +0 -1
- package/dist/types/src/query/testing.d.ts +0 -51
- package/dist/types/src/query/testing.d.ts.map +0 -1
- package/dist/types/src/query/types.d.ts +0 -17
- package/dist/types/src/query/types.d.ts.map +0 -1
- package/dist/types/src/query/util.d.ts +0 -8
- package/dist/types/src/query/util.d.ts.map +0 -1
- package/src/internal/entities/expando.ts +0 -23
- package/src/internal/schema/runtime-schema-registry.ts +0 -78
- package/src/internal/schema/snapshot.ts +0 -25
- package/src/query/filter.ts +0 -455
- package/src/query/index.ts +0 -9
- package/src/query/testing.ts +0 -64
- package/src/query/types.ts +0 -23
- package/src/query/util.ts +0 -25
package/src/internal/ref/ref.ts
CHANGED
|
@@ -8,14 +8,16 @@ import * as ParseResult from 'effect/ParseResult';
|
|
|
8
8
|
import * as Schema from 'effect/Schema';
|
|
9
9
|
import * as SchemaAST from 'effect/SchemaAST';
|
|
10
10
|
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
11
|
+
import { Event } from '@dxos/async';
|
|
12
|
+
import { type CustomInspectFunction, inspectCustom } from '@dxos/debug';
|
|
13
|
+
import { EncodedReference } from '@dxos/echo-protocol';
|
|
13
14
|
import { assertArgument, invariant } from '@dxos/invariant';
|
|
14
15
|
import { DXN, ObjectId } from '@dxos/keys';
|
|
15
16
|
|
|
17
|
+
import * as Database from '../../Database';
|
|
16
18
|
import { ReferenceAnnotationId, getSchemaDXN, getTypeAnnotation, getTypeIdentifierAnnotation } from '../annotations';
|
|
17
19
|
import { type JsonSchemaType } from '../json-schema';
|
|
18
|
-
import type {
|
|
20
|
+
import type { AnyEntity, AnyProperties } from '../types';
|
|
19
21
|
|
|
20
22
|
/**
|
|
21
23
|
* The `$id` and `$ref` fields for an ECHO reference schema.
|
|
@@ -70,7 +72,7 @@ export const RefTypeId: unique symbol = Symbol('@dxos/echo/internal/Ref');
|
|
|
70
72
|
/**
|
|
71
73
|
* Reference Schema.
|
|
72
74
|
*/
|
|
73
|
-
export interface RefSchema<T extends
|
|
75
|
+
export interface RefSchema<T extends AnyEntity> extends Schema.SchemaClass<Ref<T>, EncodedReference> {}
|
|
74
76
|
|
|
75
77
|
/**
|
|
76
78
|
* Type of the `Ref` function and extra methods attached to it.
|
|
@@ -101,8 +103,8 @@ export interface RefFn {
|
|
|
101
103
|
/**
|
|
102
104
|
* Constructs a reference that points to the given object.
|
|
103
105
|
*/
|
|
104
|
-
// TODO(burdon): Narrow to Obj.
|
|
105
|
-
make: <T extends
|
|
106
|
+
// TODO(burdon): Narrow to Obj.Unknown?
|
|
107
|
+
make: <T extends AnyEntity>(object: T) => Ref<T>;
|
|
106
108
|
|
|
107
109
|
/**
|
|
108
110
|
* Constructs a reference that points to the object specified by the provided DXN.
|
|
@@ -115,18 +117,12 @@ export interface RefFn {
|
|
|
115
117
|
*/
|
|
116
118
|
export const Ref: RefFn = <S extends Schema.Schema.Any>(schema: S): RefSchema<Schema.Schema.Type<S>> => {
|
|
117
119
|
assertArgument(Schema.isSchema(schema), 'schema', 'Must call with an instance of effect-schema');
|
|
118
|
-
|
|
119
120
|
const annotation = getTypeAnnotation(schema);
|
|
120
121
|
if (annotation == null) {
|
|
121
122
|
throw new Error('Reference target must be an ECHO schema.');
|
|
122
123
|
}
|
|
123
124
|
|
|
124
|
-
return createEchoReferenceSchema(
|
|
125
|
-
getTypeIdentifierAnnotation(schema),
|
|
126
|
-
annotation.typename,
|
|
127
|
-
annotation.version,
|
|
128
|
-
getSchemaExpectedName(schema.ast),
|
|
129
|
-
);
|
|
125
|
+
return createEchoReferenceSchema(getTypeIdentifierAnnotation(schema), annotation.typename, annotation.version);
|
|
130
126
|
};
|
|
131
127
|
|
|
132
128
|
/**
|
|
@@ -139,12 +135,15 @@ export interface Ref<T> {
|
|
|
139
135
|
*/
|
|
140
136
|
get dxn(): DXN;
|
|
141
137
|
|
|
138
|
+
/**
|
|
139
|
+
* Returns true if the reference has a target available (inlined or resolver set).
|
|
140
|
+
*/
|
|
141
|
+
get isAvailable(): boolean;
|
|
142
|
+
|
|
142
143
|
/**
|
|
143
144
|
* @returns The reference target.
|
|
144
145
|
* May return `undefined` if the object is not loaded in the working set.
|
|
145
146
|
* Accessing this property, even if it returns `undefined` will trigger the object to be loaded to the working set.
|
|
146
|
-
*
|
|
147
|
-
* @reactive Supports signal subscriptions.
|
|
148
147
|
*/
|
|
149
148
|
get target(): T | undefined;
|
|
150
149
|
|
|
@@ -158,6 +157,7 @@ export interface Ref<T> {
|
|
|
158
157
|
/**
|
|
159
158
|
* @returns Promise that will resolves with the target object or undefined if the object is not loaded locally.
|
|
160
159
|
*/
|
|
160
|
+
|
|
161
161
|
tryLoad(): Promise<T | undefined>;
|
|
162
162
|
|
|
163
163
|
/**
|
|
@@ -219,7 +219,7 @@ Ref.make = <T extends AnyProperties>(obj: T): Ref<T> => {
|
|
|
219
219
|
// TODO(dmaretskyi): Extract to `getObjectDXN` function.
|
|
220
220
|
const id = obj.id;
|
|
221
221
|
invariant(ObjectId.isValid(id), 'Invalid object ID');
|
|
222
|
-
const dxn =
|
|
222
|
+
const dxn = DXN.fromLocalObjectId(id);
|
|
223
223
|
return new RefImpl(dxn, obj);
|
|
224
224
|
};
|
|
225
225
|
|
|
@@ -244,7 +244,6 @@ export const createEchoReferenceSchema = (
|
|
|
244
244
|
echoId: string | undefined,
|
|
245
245
|
typename: string | undefined,
|
|
246
246
|
version: string | undefined,
|
|
247
|
-
schemaName?: string, // TODO(burdon): Not used.
|
|
248
247
|
): Schema.SchemaClass<Ref<any>, EncodedReference> => {
|
|
249
248
|
if (!echoId && !typename) {
|
|
250
249
|
throw new TypeError('Either echoId or typename must be provided.');
|
|
@@ -263,25 +262,39 @@ export const createEchoReferenceSchema = (
|
|
|
263
262
|
[],
|
|
264
263
|
{
|
|
265
264
|
encode: () => {
|
|
266
|
-
return (value) =>
|
|
267
|
-
|
|
268
|
-
|
|
265
|
+
return (value) =>
|
|
266
|
+
Effect.gen(function* () {
|
|
267
|
+
if (Ref.isRef(value)) {
|
|
268
|
+
return EncodedReference.fromDXN((value as Ref<any>).dxn);
|
|
269
|
+
} else if (EncodedReference.isEncodedReference(value)) {
|
|
270
|
+
return value;
|
|
271
|
+
}
|
|
272
|
+
throw new Error('Invalid reference');
|
|
269
273
|
});
|
|
270
|
-
};
|
|
271
274
|
},
|
|
272
275
|
decode: () => {
|
|
273
|
-
return (value) =>
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
276
|
+
return (value) =>
|
|
277
|
+
Effect.gen(function* () {
|
|
278
|
+
const dbService = yield* Effect.serviceOption(Database.Service);
|
|
279
|
+
|
|
280
|
+
// TODO(dmaretskyi): This branch seems to be taken by Schema.is
|
|
281
|
+
if (Ref.isRef(value)) {
|
|
282
|
+
if (Option.isSome(dbService)) {
|
|
283
|
+
return dbService.value.db.makeRef(value.dxn);
|
|
284
|
+
} else {
|
|
285
|
+
return value;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
if (!EncodedReference.isEncodedReference(value)) {
|
|
290
|
+
return yield* Effect.fail(new ParseResult.Unexpected(value, 'reference'));
|
|
291
|
+
}
|
|
292
|
+
if (Option.isSome(dbService)) {
|
|
293
|
+
return dbService.value.db.makeRef(EncodedReference.toDXN(value));
|
|
294
|
+
} else {
|
|
295
|
+
return Ref.fromDXN(EncodedReference.toDXN(value));
|
|
296
|
+
}
|
|
297
|
+
});
|
|
285
298
|
},
|
|
286
299
|
},
|
|
287
300
|
{
|
|
@@ -331,7 +344,7 @@ export interface RefResolver {
|
|
|
331
344
|
export class RefImpl<T> implements Ref<T> {
|
|
332
345
|
#dxn: DXN;
|
|
333
346
|
#resolver?: RefResolver = undefined;
|
|
334
|
-
#
|
|
347
|
+
#resolved = new Event<void>();
|
|
335
348
|
|
|
336
349
|
/**
|
|
337
350
|
* Target is set when the reference is created from a specific object.
|
|
@@ -343,7 +356,7 @@ export class RefImpl<T> implements Ref<T> {
|
|
|
343
356
|
* Callback to issue a reactive notification when object is resolved.
|
|
344
357
|
*/
|
|
345
358
|
#resolverCallback = () => {
|
|
346
|
-
this.#
|
|
359
|
+
this.#resolved.emit();
|
|
347
360
|
};
|
|
348
361
|
|
|
349
362
|
constructor(dxn: DXN, target?: T) {
|
|
@@ -358,11 +371,17 @@ export class RefImpl<T> implements Ref<T> {
|
|
|
358
371
|
return this.#dxn;
|
|
359
372
|
}
|
|
360
373
|
|
|
374
|
+
/**
|
|
375
|
+
* @inheritdoc
|
|
376
|
+
*/
|
|
377
|
+
get isAvailable(): boolean {
|
|
378
|
+
return this.#target !== undefined || this.#resolver !== undefined;
|
|
379
|
+
}
|
|
380
|
+
|
|
361
381
|
/**
|
|
362
382
|
* @inheritdoc
|
|
363
383
|
*/
|
|
364
384
|
get target(): T | undefined {
|
|
365
|
-
this.#signal.notifyRead();
|
|
366
385
|
if (this.#target) {
|
|
367
386
|
return this.#target;
|
|
368
387
|
}
|
|
@@ -390,6 +409,9 @@ export class RefImpl<T> implements Ref<T> {
|
|
|
390
409
|
* @inheritdoc
|
|
391
410
|
*/
|
|
392
411
|
async tryLoad(): Promise<T | undefined> {
|
|
412
|
+
if (this.#target) {
|
|
413
|
+
return this.#target;
|
|
414
|
+
}
|
|
393
415
|
invariant(this.#resolver, 'Resolver is not set');
|
|
394
416
|
return (await this.#resolver.resolve(this.#dxn)) as T | undefined;
|
|
395
417
|
}
|
|
@@ -430,6 +452,10 @@ export class RefImpl<T> implements Ref<T> {
|
|
|
430
452
|
return `Ref(${this.#dxn.toString()})`;
|
|
431
453
|
}
|
|
432
454
|
|
|
455
|
+
[inspectCustom]: CustomInspectFunction = (depth, options, inspect) => {
|
|
456
|
+
return this.toString();
|
|
457
|
+
};
|
|
458
|
+
|
|
433
459
|
[RefTypeId] = refVariance;
|
|
434
460
|
|
|
435
461
|
/**
|
|
@@ -442,9 +468,6 @@ export class RefImpl<T> implements Ref<T> {
|
|
|
442
468
|
}
|
|
443
469
|
|
|
444
470
|
/**
|
|
445
|
-
* Internal method to get the saved target.
|
|
446
|
-
* Not the same as `target` which is resolved from the resolver.
|
|
447
|
-
*
|
|
448
471
|
* @internal
|
|
449
472
|
*/
|
|
450
473
|
_getSavedTarget(): T | undefined {
|
|
@@ -6,18 +6,18 @@ import * as Schema from 'effect/Schema';
|
|
|
6
6
|
import { describe, test } from 'vitest';
|
|
7
7
|
|
|
8
8
|
import { FieldPath } from '../annotations';
|
|
9
|
+
import { EchoObjectSchema } from '../entities';
|
|
9
10
|
import { FormatAnnotation, TypeFormat } from '../formats';
|
|
10
11
|
import { ECHO_ANNOTATIONS_NS_KEY, toJsonSchema } from '../json-schema';
|
|
11
|
-
import { TypedObject } from '../object';
|
|
12
12
|
|
|
13
13
|
import { composeSchema } from './compose';
|
|
14
14
|
|
|
15
15
|
describe('schema composition', () => {
|
|
16
16
|
test('schema composition', ({ expect }) => {
|
|
17
|
-
|
|
17
|
+
const BaseType = Schema.Struct({
|
|
18
18
|
name: Schema.String,
|
|
19
19
|
email: Schema.String,
|
|
20
|
-
})
|
|
20
|
+
}).pipe(EchoObjectSchema({ typename: 'example.com/Person', version: '0.1.0' }));
|
|
21
21
|
|
|
22
22
|
const OverlaySchema = Schema.Struct({
|
|
23
23
|
email: Schema.String.pipe(FieldPath('$.email'), FormatAnnotation.set(TypeFormat.Email)),
|
|
@@ -5,8 +5,7 @@
|
|
|
5
5
|
import { invariant } from '@dxos/invariant';
|
|
6
6
|
|
|
7
7
|
import { type JsonSchemaType } from '../json-schema';
|
|
8
|
-
|
|
9
|
-
import { getSnapshot } from './snapshot';
|
|
8
|
+
import { getSnapshot } from '../object';
|
|
10
9
|
|
|
11
10
|
/**
|
|
12
11
|
* Creates a composite schema from the source and projection schemas.
|
|
@@ -10,7 +10,9 @@ import { type ObjectId } from '@dxos/keys';
|
|
|
10
10
|
|
|
11
11
|
import { type SchemaMeta, SchemaMetaSymbol, type TypeAnnotation, getTypeAnnotation } from '../annotations';
|
|
12
12
|
import { type JsonSchemaType, toEffectSchema, toJsonSchema } from '../json-schema';
|
|
13
|
-
import { type TypedObject, type TypedObjectPrototype } from '../object';
|
|
13
|
+
import { type TypedObject, type TypedObjectPrototype, getSnapshot } from '../object';
|
|
14
|
+
import { ChangeId } from '../proxy';
|
|
15
|
+
import { EntityKind, SchemaKindId } from '../types';
|
|
14
16
|
|
|
15
17
|
import {
|
|
16
18
|
addFieldsToSchema,
|
|
@@ -20,7 +22,6 @@ import {
|
|
|
20
22
|
updateFieldsInSchema,
|
|
21
23
|
} from './manipulation';
|
|
22
24
|
import { PersistentSchema } from './persistent-schema';
|
|
23
|
-
import { getSnapshot } from './snapshot';
|
|
24
25
|
|
|
25
26
|
/**
|
|
26
27
|
* Base schema type.
|
|
@@ -83,6 +84,10 @@ export class ImmutableSchema<A = any, I = any> implements BaseSchema<A, I> {
|
|
|
83
84
|
// TypedObject
|
|
84
85
|
//
|
|
85
86
|
|
|
87
|
+
get kind(): EntityKind {
|
|
88
|
+
return this._objectAnnotation.kind;
|
|
89
|
+
}
|
|
90
|
+
|
|
86
91
|
get typename(): string {
|
|
87
92
|
return this._objectAnnotation.typename;
|
|
88
93
|
}
|
|
@@ -172,7 +177,7 @@ const schemaVariance = {
|
|
|
172
177
|
*
|
|
173
178
|
* @example
|
|
174
179
|
* ```ts
|
|
175
|
-
* export class TableType extends Schema.Struct({...}).pipe(Type.
|
|
180
|
+
* export class TableType extends Schema.Struct({...}).pipe(Type.object({ typename: 'example.org/type/Table', version: '0.1.0' })){
|
|
176
181
|
* title: Schema.String,
|
|
177
182
|
* schema: Schema.optional(ref(EchoSchema)),
|
|
178
183
|
* props: Schema.mutable(S.Array(TablePropSchema)),
|
|
@@ -185,6 +190,12 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
|
|
|
185
190
|
private _schema: Schema.Schema.AnyNoContext | undefined;
|
|
186
191
|
private _isDirty = true;
|
|
187
192
|
|
|
193
|
+
/**
|
|
194
|
+
* Schema kind key that marks this as an ECHO schema.
|
|
195
|
+
* Makes EchoSchema satisfy the Type.Obj.Any type.
|
|
196
|
+
*/
|
|
197
|
+
readonly [SchemaKindId]: EntityKind.Object = EntityKind.Object;
|
|
198
|
+
|
|
188
199
|
constructor(private readonly _persistentSchema: PersistentSchema) {
|
|
189
200
|
super();
|
|
190
201
|
}
|
|
@@ -229,6 +240,11 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
|
|
|
229
240
|
// BaseSchema
|
|
230
241
|
//
|
|
231
242
|
|
|
243
|
+
public get kind(): EntityKind.Object {
|
|
244
|
+
// Dynamic schemas are always object schemas.
|
|
245
|
+
return EntityKind.Object;
|
|
246
|
+
}
|
|
247
|
+
|
|
232
248
|
public get typename(): string {
|
|
233
249
|
return this._persistentSchema.typename;
|
|
234
250
|
}
|
|
@@ -249,7 +265,7 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
|
|
|
249
265
|
}
|
|
250
266
|
|
|
251
267
|
/**
|
|
252
|
-
*
|
|
268
|
+
* Returns the JSON schema for the schema.
|
|
253
269
|
*/
|
|
254
270
|
public get jsonSchema(): JsonSchemaType {
|
|
255
271
|
return this._persistentSchema.jsonSchema;
|
|
@@ -309,8 +325,10 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
|
|
|
309
325
|
*/
|
|
310
326
|
public updateTypename(typename: string): void {
|
|
311
327
|
const updated = setTypenameInSchema(this._getSchema(), typename);
|
|
312
|
-
this.
|
|
313
|
-
|
|
328
|
+
this._change((schema) => {
|
|
329
|
+
schema.typename = typename;
|
|
330
|
+
schema.jsonSchema = toJsonSchema(updated);
|
|
331
|
+
});
|
|
314
332
|
}
|
|
315
333
|
|
|
316
334
|
/**
|
|
@@ -318,7 +336,9 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
|
|
|
318
336
|
*/
|
|
319
337
|
public addFields(fields: Schema.Struct.Fields): void {
|
|
320
338
|
const extended = addFieldsToSchema(this._getSchema(), fields);
|
|
321
|
-
this.
|
|
339
|
+
this._change((schema) => {
|
|
340
|
+
schema.jsonSchema = toJsonSchema(extended);
|
|
341
|
+
});
|
|
322
342
|
}
|
|
323
343
|
|
|
324
344
|
/**
|
|
@@ -326,7 +346,9 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
|
|
|
326
346
|
*/
|
|
327
347
|
public updateFields(fields: Schema.Struct.Fields): void {
|
|
328
348
|
const updated = updateFieldsInSchema(this._getSchema(), fields);
|
|
329
|
-
this.
|
|
349
|
+
this._change((schema) => {
|
|
350
|
+
schema.jsonSchema = toJsonSchema(updated);
|
|
351
|
+
});
|
|
330
352
|
}
|
|
331
353
|
|
|
332
354
|
/**
|
|
@@ -334,7 +356,9 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
|
|
|
334
356
|
*/
|
|
335
357
|
public updateFieldPropertyName({ before, after }: { before: PropertyKey; after: PropertyKey }): void {
|
|
336
358
|
const renamed = updateFieldNameInSchema(this._getSchema(), { before, after });
|
|
337
|
-
this.
|
|
359
|
+
this._change((schema) => {
|
|
360
|
+
schema.jsonSchema = toJsonSchema(renamed);
|
|
361
|
+
});
|
|
338
362
|
}
|
|
339
363
|
|
|
340
364
|
/**
|
|
@@ -342,7 +366,21 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
|
|
|
342
366
|
*/
|
|
343
367
|
public removeFields(fieldNames: string[]): void {
|
|
344
368
|
const removed = removeFieldsFromSchema(this._getSchema(), fieldNames);
|
|
345
|
-
this.
|
|
369
|
+
this._change((schema) => {
|
|
370
|
+
schema.jsonSchema = toJsonSchema(removed);
|
|
371
|
+
});
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
/**
|
|
375
|
+
* Wrapper for Obj.change that handles the change context for the persistent schema.
|
|
376
|
+
*/
|
|
377
|
+
private _change(callback: (schema: PersistentSchema) => void): void {
|
|
378
|
+
const changeFn = (this._persistentSchema as any)[ChangeId];
|
|
379
|
+
if (changeFn) {
|
|
380
|
+
changeFn(callback);
|
|
381
|
+
} else {
|
|
382
|
+
callback(this._persistentSchema);
|
|
383
|
+
}
|
|
346
384
|
}
|
|
347
385
|
|
|
348
386
|
//
|
|
@@ -350,7 +388,7 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
|
|
|
350
388
|
//
|
|
351
389
|
|
|
352
390
|
/**
|
|
353
|
-
* Called by
|
|
391
|
+
* Called by DatabaseSchemaRegistry on update.
|
|
354
392
|
*/
|
|
355
393
|
_invalidate(): void {
|
|
356
394
|
this._isDirty = true;
|
|
@@ -12,7 +12,7 @@ import { JsonSchemaType } from '../json-schema';
|
|
|
12
12
|
* Persistent representation of a schema.
|
|
13
13
|
*/
|
|
14
14
|
// TODO(burdon): Move.
|
|
15
|
-
const
|
|
15
|
+
export const PersistentSchema = Schema.Struct({
|
|
16
16
|
name: Schema.optional(Schema.String),
|
|
17
17
|
typename: TypenameSchema,
|
|
18
18
|
version: VersionSchema,
|
|
@@ -23,6 +23,5 @@ const PersistentEchoSchema = Schema.Struct({
|
|
|
23
23
|
version: '0.1.0',
|
|
24
24
|
}),
|
|
25
25
|
);
|
|
26
|
-
|
|
27
|
-
export interface
|
|
28
|
-
export const PersistentSchema: Schema.Schema<PersistentSchema, PersistentSchemaEncoded> = PersistentEchoSchema;
|
|
26
|
+
|
|
27
|
+
export interface PersistentSchema extends Schema.Schema.Type<typeof PersistentSchema> {}
|
|
@@ -9,20 +9,6 @@ import { type ObjectId } from '@dxos/keys';
|
|
|
9
9
|
|
|
10
10
|
import { type ATTR_META, type ObjectMeta } from './meta';
|
|
11
11
|
|
|
12
|
-
/**
|
|
13
|
-
* Marker interface for object with an `id`.
|
|
14
|
-
*/
|
|
15
|
-
export interface HasId {
|
|
16
|
-
readonly id: ObjectId;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Object that has an associated typename.
|
|
21
|
-
* The typename is retrievable using {@link getTypename}.
|
|
22
|
-
* The object can be used with {@link isInstanceOf} to check if it is an instance of a schema.
|
|
23
|
-
*/
|
|
24
|
-
export type HasTypename = {};
|
|
25
|
-
|
|
26
12
|
/**
|
|
27
13
|
* Base type for all data objects (reactive, ECHO, and other raw objects).
|
|
28
14
|
* NOTE: This describes the base type for all database objects.
|
|
@@ -30,23 +16,22 @@ export type HasTypename = {};
|
|
|
30
16
|
*/
|
|
31
17
|
// TODO(burdon): Make internal.
|
|
32
18
|
// TODO(burdon): Prefer Record<string, unknown>.
|
|
33
|
-
// TODO(burdon): Exclude "id", etc. from keys.
|
|
34
19
|
export type AnyProperties = Record<string, any>;
|
|
35
20
|
|
|
36
21
|
/**
|
|
37
|
-
* Canonical type for all ECHO objects.
|
|
22
|
+
* Canonical type for all ECHO entities (objects and relations).
|
|
38
23
|
*/
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
24
|
+
// TODO(wittjosiah): Remove. Prefer higher level types (e.g. Entity.Unknown).
|
|
25
|
+
export interface AnyEntity {
|
|
26
|
+
readonly id: ObjectId;
|
|
27
|
+
}
|
|
43
28
|
|
|
44
29
|
export type ExcludeId<T extends AnyProperties> = Omit<T, 'id'>;
|
|
45
30
|
|
|
46
31
|
export type PropertyKey<T extends AnyProperties> = Extract<keyof ExcludeId<T>, string>;
|
|
47
32
|
|
|
48
33
|
// TODO(dmaretskyi): Remove. This should be using the symbol type.
|
|
49
|
-
|
|
34
|
+
type WithMeta = { [ATTR_META]?: ObjectMeta };
|
|
50
35
|
|
|
51
36
|
/**
|
|
52
37
|
* The raw object should not include the ECHO id, but may include metadata.
|
|
@@ -4,10 +4,33 @@
|
|
|
4
4
|
|
|
5
5
|
import * as Schema from 'effect/Schema';
|
|
6
6
|
|
|
7
|
+
// NOTE: String literals are used instead of unique symbols for both KindId and SchemaKindId.
|
|
8
|
+
// Unique symbols cause TS4023 "cannot be named" errors when external packages
|
|
9
|
+
// try to export types that reference this key (e.g., `export const Graph = ...`).
|
|
10
|
+
// TypeScript cannot emit declaration files that reference unique symbols from
|
|
11
|
+
// external modules. Using a string literal allows the type to be inlined in
|
|
12
|
+
// declaration files, making the API portable across package boundaries.
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* String key used to identify the kind of an entity instance (object or relation).
|
|
16
|
+
*/
|
|
17
|
+
export const KindId = '~@dxos/echo/Kind' as const;
|
|
18
|
+
export type KindId = typeof KindId;
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* String key used to identify the kind of a schema (object schema or relation schema).
|
|
22
|
+
* Parallels KindId which identifies instance kinds.
|
|
23
|
+
*/
|
|
24
|
+
export const SchemaKindId = '~@dxos/echo/SchemaKind' as const;
|
|
25
|
+
export type SchemaKindId = typeof SchemaKindId;
|
|
26
|
+
|
|
7
27
|
/**
|
|
8
|
-
*
|
|
28
|
+
* String key used to brand snapshot types.
|
|
29
|
+
* Snapshots have SnapshotKindId instead of KindId, making them
|
|
30
|
+
* distinguishable from reactive objects at the type level.
|
|
9
31
|
*/
|
|
10
|
-
const
|
|
32
|
+
export const SnapshotKindId = '~@dxos/echo/SnapshotKind' as const;
|
|
33
|
+
export type SnapshotKindId = typeof SnapshotKindId;
|
|
11
34
|
|
|
12
35
|
/**
|
|
13
36
|
* Kinds of entities stored in ECHO: objects and relations.
|
|
@@ -19,5 +42,13 @@ export enum EntityKind {
|
|
|
19
42
|
|
|
20
43
|
export const EntityKindSchema = Schema.Enums(EntityKind);
|
|
21
44
|
|
|
22
|
-
|
|
23
|
-
|
|
45
|
+
/**
|
|
46
|
+
* Typename for generic object references (Type.Obj / Type.Ref(Type.Obj)).
|
|
47
|
+
* Used when referencing any object without a specific schema.
|
|
48
|
+
*/
|
|
49
|
+
export const ANY_OBJECT_TYPENAME = 'dxos.org/schema/AnyObject';
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Version for generic object references.
|
|
53
|
+
*/
|
|
54
|
+
export const ANY_OBJECT_VERSION = '0.0.0';
|
|
@@ -8,7 +8,7 @@ import { ForeignKey } from '@dxos/echo-protocol';
|
|
|
8
8
|
import { invariant } from '@dxos/invariant';
|
|
9
9
|
import { type Comparator, intersection } from '@dxos/util';
|
|
10
10
|
|
|
11
|
-
import { type AnyProperties
|
|
11
|
+
import { type AnyProperties } from './base';
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* Property name for meta when object is serialized to JSON.
|
|
@@ -54,16 +54,6 @@ export const getMeta = (obj: AnyProperties): ObjectMeta => {
|
|
|
54
54
|
return metadata;
|
|
55
55
|
};
|
|
56
56
|
|
|
57
|
-
/**
|
|
58
|
-
* Utility to split meta property from raw object.
|
|
59
|
-
* @deprecated Bad API.
|
|
60
|
-
*/
|
|
61
|
-
export const splitMeta = <T>(object: T & WithMeta): { object: T; meta?: ObjectMeta } => {
|
|
62
|
-
const meta = object[ATTR_META];
|
|
63
|
-
delete object[ATTR_META];
|
|
64
|
-
return { meta, object };
|
|
65
|
-
};
|
|
66
|
-
|
|
67
57
|
//
|
|
68
58
|
// Foreign keys
|
|
69
59
|
//
|
package/src/testing/api.test.ts
CHANGED
|
@@ -14,12 +14,12 @@ import { TestSchema } from './test-schema';
|
|
|
14
14
|
describe('Experimental API review', () => {
|
|
15
15
|
test('type checks', ({ expect }) => {
|
|
16
16
|
const contact = Obj.make(TestSchema.Person, { name: 'Test' });
|
|
17
|
-
const
|
|
17
|
+
const schema = Obj.getSchema(contact) ?? raise(new Error('No schema found'));
|
|
18
18
|
|
|
19
|
-
expect(Type.getDXN(
|
|
20
|
-
expect(Type.getTypename(
|
|
21
|
-
expect(Type.getVersion(
|
|
22
|
-
expect(Type.getMeta(
|
|
19
|
+
expect(Type.getDXN(schema)?.typename).to.eq(TestSchema.Person.typename);
|
|
20
|
+
expect(Type.getTypename(schema)).to.eq('example.com/type/Person');
|
|
21
|
+
expect(Type.getVersion(schema)).to.eq('0.1.0');
|
|
22
|
+
expect(Type.getMeta(schema)).to.deep.eq({
|
|
23
23
|
kind: Entity.Kind.Object,
|
|
24
24
|
typename: 'example.com/type/Person',
|
|
25
25
|
version: '0.1.0',
|
|
@@ -97,4 +97,30 @@ describe('Experimental API review', () => {
|
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
99
|
});
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Test that Obj.make return types are clean and don't expose internal markers like OfKind.
|
|
103
|
+
* The return type of Obj.make(Schema, props) should be assignable to Obj.Obj<InstanceType>.
|
|
104
|
+
*/
|
|
105
|
+
describe('Obj.make return type', () => {
|
|
106
|
+
test('Obj.make with custom schema should be assignable to Obj.Obj<Person>', ({ expect }) => {
|
|
107
|
+
{
|
|
108
|
+
const expando = Obj.make(TestSchema.Expando, { content: 'Test' });
|
|
109
|
+
expect(Obj.isObject(expando)).to.be.true;
|
|
110
|
+
expect(expando.content).to.eq('Test');
|
|
111
|
+
|
|
112
|
+
// This should work: assign to Obj.Obj of the schema's instance type
|
|
113
|
+
const _typed: Obj.Obj<TestSchema.Expando> = expando;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
{
|
|
117
|
+
const person = Obj.make(TestSchema.Person, { name: 'Test' });
|
|
118
|
+
expect(Obj.isObject(person)).to.be.true;
|
|
119
|
+
expect(person.name).to.eq('Test');
|
|
120
|
+
|
|
121
|
+
// This should work: assign to Obj.Obj of the schema's instance type
|
|
122
|
+
const _typed: Obj.Obj<TestSchema.Person> = person;
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
});
|
|
100
126
|
});
|