@dxos/echo 0.8.4-main.406dc2a → 0.8.4-main.59c2e9b
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/Database.mjs +18 -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-BJPE6CIC.mjs +3847 -0
- 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 +72 -22
- package/dist/lib/browser/internal/index.mjs +245 -120
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +295 -226
- package/dist/lib/browser/testing/index.mjs.map +4 -4
- 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-LT3H4JOX.mjs +3847 -0
- 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 +72 -22
- package/dist/lib/node-esm/internal/index.mjs +245 -120
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/testing/index.mjs +295 -226
- package/dist/lib/node-esm/testing/index.mjs.map +4 -4
- package/dist/types/src/Annotation.d.ts +2 -0
- package/dist/types/src/Annotation.d.ts.map +1 -0
- package/dist/types/src/Database.d.ts +194 -0
- package/dist/types/src/Database.d.ts.map +1 -0
- package/dist/types/src/Entity.d.ts +142 -0
- package/dist/types/src/Entity.d.ts.map +1 -0
- package/dist/types/src/Entity.test.d.ts +2 -0
- package/dist/types/src/Entity.test.d.ts.map +1 -0
- package/dist/types/src/{errors.d.ts → Err.d.ts} +23 -31
- 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 +4 -0
- package/dist/types/src/Format.d.ts.map +1 -0
- package/dist/types/src/Hypergraph.d.ts +60 -0
- package/dist/types/src/Hypergraph.d.ts.map +1 -0
- package/dist/types/src/JsonSchema.d.ts +9 -0
- package/dist/types/src/JsonSchema.d.ts.map +1 -0
- package/dist/types/src/Key.d.ts +1 -0
- package/dist/types/src/Key.d.ts.map +1 -1
- package/dist/types/src/Obj.d.ts +302 -99
- package/dist/types/src/Obj.d.ts.map +1 -1
- package/dist/types/src/Obj.test.d.ts +2 -0
- package/dist/types/src/Obj.test.d.ts.map +1 -0
- package/dist/types/src/Order.d.ts +16 -0
- package/dist/types/src/Order.d.ts.map +1 -0
- package/dist/types/src/Query.d.ts +115 -0
- package/dist/types/src/Query.d.ts.map +1 -0
- package/dist/types/src/Query.test.d.ts +2 -0
- package/dist/types/src/Query.test.d.ts.map +1 -0
- package/dist/types/src/QueryResult.d.ts +80 -0
- package/dist/types/src/QueryResult.d.ts.map +1 -0
- package/dist/types/src/Ref.d.ts +13 -11
- package/dist/types/src/Ref.d.ts.map +1 -1
- package/dist/types/src/Relation.d.ts +242 -22
- 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 +17 -0
- package/dist/types/src/Tag.d.ts.map +1 -0
- package/dist/types/src/Type.d.ts +225 -72
- 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 +15 -5
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/internal/annotations/annotations.d.ts +170 -0
- package/dist/types/src/internal/annotations/annotations.d.ts.map +1 -0
- package/dist/types/src/internal/annotations/annotations.test.d.ts.map +1 -0
- package/dist/types/src/internal/annotations/index.d.ts +3 -0
- package/dist/types/src/internal/annotations/index.d.ts.map +1 -0
- package/dist/types/src/internal/annotations/util.d.ts +27 -0
- package/dist/types/src/internal/annotations/util.d.ts.map +1 -0
- 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 +20 -0
- package/dist/types/src/internal/entities/entity.d.ts.map +1 -0
- package/dist/types/src/internal/entities/index.d.ts +6 -0
- package/dist/types/src/internal/entities/index.d.ts.map +1 -0
- package/dist/types/src/internal/entities/model.d.ts +77 -0
- package/dist/types/src/internal/entities/model.d.ts.map +1 -0
- package/dist/types/src/internal/entities/object.d.ts +18 -0
- package/dist/types/src/internal/entities/object.d.ts.map +1 -0
- package/dist/types/src/internal/entities/relation.d.ts +62 -0
- package/dist/types/src/internal/entities/relation.d.ts.map +1 -0
- package/dist/types/src/internal/entities/util.d.ts +2 -0
- package/dist/types/src/internal/entities/util.d.ts.map +1 -0
- package/dist/types/src/internal/formats/format.d.ts +4 -2
- 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 +13 -9
- package/dist/types/src/internal/formats/types.d.ts.map +1 -1
- package/dist/types/src/internal/index.d.ts +7 -10
- package/dist/types/src/internal/index.d.ts.map +1 -1
- package/dist/types/src/internal/json-schema/annotations.d.ts.map +1 -0
- package/dist/types/src/internal/json-schema/effect-schema.test.d.ts.map +1 -0
- package/dist/types/src/internal/json-schema/index.d.ts +2 -0
- package/dist/types/src/internal/json-schema/index.d.ts.map +1 -1
- package/dist/types/src/internal/json-schema/json-schema-type.d.ts.map +1 -1
- package/dist/types/src/internal/{json → json-schema}/json-schema.d.ts +2 -1
- package/dist/types/src/internal/json-schema/json-schema.d.ts.map +1 -0
- package/dist/types/src/internal/json-schema/json-schema.test.d.ts.map +1 -0
- 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/common.d.ts.map +1 -1
- package/dist/types/src/internal/object/{create.d.ts → create-object.d.ts} +10 -11
- package/dist/types/src/internal/object/create-object.d.ts.map +1 -0
- package/dist/types/src/internal/object/create-object.test.d.ts +2 -0
- package/dist/types/src/internal/object/create-object.test.d.ts.map +1 -0
- package/dist/types/src/internal/object/deleted.d.ts +2 -2
- package/dist/types/src/internal/object/deleted.d.ts.map +1 -1
- package/dist/types/src/internal/object/ids.d.ts.map +1 -1
- package/dist/types/src/internal/object/index.d.ts +6 -11
- package/dist/types/src/internal/object/index.d.ts.map +1 -1
- package/dist/types/src/internal/object/json-serializer.d.ts +14 -9
- 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 +8 -14
- 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 +14 -0
- package/dist/types/src/internal/proxy/index.d.ts.map +1 -0
- 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 +14 -0
- package/dist/types/src/internal/proxy/make-object.d.ts.map +1 -0
- 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 +15 -12
- 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 +27 -16
- package/dist/types/src/internal/ref/ref.d.ts.map +1 -1
- package/dist/types/src/internal/schema/compose.d.ts.map +1 -0
- package/dist/types/src/internal/schema/compose.test.d.ts.map +1 -0
- package/dist/types/src/internal/schema/echo-schema.d.ts +24 -12
- package/dist/types/src/internal/schema/echo-schema.d.ts.map +1 -1
- package/dist/types/src/internal/schema/index.d.ts +1 -4
- package/dist/types/src/internal/schema/index.d.ts.map +1 -1
- package/dist/types/src/internal/schema/persistent-schema.d.ts +20 -0
- package/dist/types/src/internal/schema/persistent-schema.d.ts.map +1 -0
- package/dist/types/src/internal/types/base.d.ts +26 -0
- package/dist/types/src/internal/types/base.d.ts.map +1 -0
- package/dist/types/src/internal/types/entity.d.ts +37 -0
- package/dist/types/src/internal/types/entity.d.ts.map +1 -0
- package/dist/types/src/internal/types/index.d.ts +5 -2
- package/dist/types/src/internal/types/index.d.ts.map +1 -1
- package/dist/types/src/internal/{object → types}/meta.d.ts +12 -11
- package/dist/types/src/internal/types/meta.d.ts.map +1 -0
- package/dist/types/src/internal/types/typename.d.ts +13 -0
- package/dist/types/src/internal/types/typename.d.ts.map +1 -0
- package/dist/types/src/internal/{object → types}/version.d.ts +3 -2
- package/dist/types/src/internal/types/version.d.ts.map +1 -0
- package/dist/types/src/{test → testing}/api.test.d.ts.map +1 -1
- package/dist/types/src/testing/index.d.ts +3 -3
- package/dist/types/src/testing/index.d.ts.map +1 -1
- package/dist/types/src/testing/test-data.d.ts +18 -0
- package/dist/types/src/testing/test-data.d.ts.map +1 -0
- package/dist/types/src/testing/test-schema.d.ts +303 -0
- package/dist/types/src/testing/test-schema.d.ts.map +1 -0
- package/dist/types/src/testing/util.d.ts +21 -0
- package/dist/types/src/testing/util.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +160 -45
- package/src/Annotation.ts +18 -0
- package/src/Database.ts +336 -0
- package/src/Entity.test.ts +22 -0
- package/src/Entity.ts +217 -0
- package/src/{errors.ts → Err.ts} +2 -2
- package/src/Filter.ts +376 -0
- package/src/Format.ts +9 -0
- package/src/Hypergraph.ts +74 -0
- package/src/JsonSchema.ts +16 -0
- package/src/Key.ts +3 -0
- package/src/Obj.test.ts +386 -0
- package/src/Obj.ts +449 -275
- package/src/Order.ts +44 -0
- package/src/Query.test.ts +465 -0
- package/src/Query.ts +296 -0
- package/src/QueryResult.ts +106 -0
- package/src/Ref.ts +26 -9
- package/src/Relation.test.ts +82 -0
- package/src/Relation.ts +411 -60
- package/src/SchemaRegistry.ts +105 -0
- package/src/{query/tag.ts → Tag.ts} +10 -7
- package/src/Type.test.ts +52 -0
- package/src/Type.ts +361 -114
- package/src/index.ts +16 -6
- package/src/internal/README.md +100 -0
- package/src/internal/{ast → annotations}/annotations.test.ts +18 -20
- package/src/internal/annotations/annotations.ts +460 -0
- package/src/internal/annotations/index.ts +6 -0
- package/src/internal/annotations/util.ts +72 -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 +126 -0
- package/src/internal/entities/index.ts +9 -0
- package/src/internal/entities/model.ts +134 -0
- package/src/internal/entities/object.ts +60 -0
- package/src/internal/entities/relation.ts +173 -0
- package/src/internal/entities/util.ts +33 -0
- package/src/internal/formats/date.test.ts +1 -1
- package/src/internal/formats/date.ts +5 -5
- package/src/internal/formats/format.test.ts +5 -5
- package/src/internal/formats/format.ts +8 -6
- package/src/internal/formats/number.ts +5 -5
- package/src/internal/formats/object.ts +4 -4
- package/src/internal/formats/select.ts +5 -3
- package/src/internal/formats/string.ts +14 -9
- package/src/internal/formats/types.ts +53 -42
- package/src/internal/index.ts +30 -13
- package/src/internal/{json → json-schema}/annotations.ts +1 -1
- package/src/internal/json-schema/index.ts +2 -0
- package/src/internal/json-schema/json-schema-type.ts +5 -4
- package/src/internal/{json → json-schema}/json-schema.test.ts +73 -69
- package/src/internal/{json → json-schema}/json-schema.ts +17 -8
- package/src/internal/object/clone.ts +48 -0
- package/src/internal/object/common.ts +3 -4
- package/src/internal/object/{create.test.ts → create-object.test.ts} +31 -33
- package/src/internal/object/{create.ts → create-object.ts} +36 -37
- package/src/internal/object/deleted.ts +6 -6
- package/src/internal/object/ids.ts +1 -1
- package/src/internal/object/index.ts +6 -11
- package/src/internal/object/inspect.ts +5 -7
- package/src/internal/object/json-serializer.test.ts +35 -37
- package/src/internal/object/json-serializer.ts +65 -102
- package/src/internal/object/schema-validator.ts +2 -237
- 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 -66
- 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 +51 -91
- package/src/internal/proxy/index.ts +17 -0
- package/src/internal/proxy/json-serializer.ts +87 -0
- package/src/internal/proxy/make-object.ts +96 -0
- 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 +27 -18
- package/src/internal/proxy/symbols.ts +7 -0
- package/src/internal/proxy/typed-handler.test.ts +264 -48
- package/src/internal/proxy/typed-handler.ts +275 -61
- package/src/internal/proxy/typed-object.test.ts +43 -27
- package/src/internal/ref/ref-array.ts +4 -4
- package/src/internal/ref/ref.test.ts +9 -8
- package/src/internal/ref/ref.ts +81 -54
- package/src/internal/{projection → schema}/compose.test.ts +8 -9
- package/src/internal/{projection → schema}/compose.ts +1 -1
- package/src/internal/schema/echo-schema.ts +73 -33
- package/src/internal/schema/index.ts +1 -4
- package/src/internal/schema/manipulation.ts +1 -1
- package/src/internal/schema/persistent-schema.ts +27 -0
- package/src/internal/types/base.ts +43 -0
- package/src/internal/types/entity.ts +54 -0
- package/src/internal/types/index.ts +5 -2
- package/src/internal/{object → types}/meta.ts +22 -17
- package/src/internal/types/typename.ts +45 -0
- package/src/internal/types/version.ts +20 -0
- package/src/testing/api.test.ts +126 -0
- package/src/testing/index.ts +3 -3
- package/src/testing/test-data.ts +130 -0
- package/src/testing/test-schema.ts +238 -0
- package/src/testing/util.ts +85 -0
- package/dist/lib/browser/chunk-HKFCK2GL.mjs +0 -175
- package/dist/lib/browser/chunk-HKFCK2GL.mjs.map +0 -7
- package/dist/lib/browser/chunk-MAAYELT7.mjs +0 -830
- package/dist/lib/browser/chunk-MAAYELT7.mjs.map +0 -7
- package/dist/lib/browser/chunk-MB6MMNFP.mjs +0 -3857
- package/dist/lib/browser/chunk-MB6MMNFP.mjs.map +0 -7
- package/dist/lib/browser/query/index.mjs +0 -15
- package/dist/lib/node-esm/chunk-5NWDGIBT.mjs +0 -830
- package/dist/lib/node-esm/chunk-5NWDGIBT.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-AUAH4E2J.mjs +0 -175
- package/dist/lib/node-esm/chunk-AUAH4E2J.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-BQRA4VLX.mjs +0 -3857
- package/dist/lib/node-esm/chunk-BQRA4VLX.mjs.map +0 -7
- package/dist/lib/node-esm/query/index.mjs +0 -15
- package/dist/types/src/errors.d.ts.map +0 -1
- package/dist/types/src/internal/ast/annotation-helper.d.ts +0 -8
- package/dist/types/src/internal/ast/annotation-helper.d.ts.map +0 -1
- package/dist/types/src/internal/ast/annotations.d.ts +0 -125
- package/dist/types/src/internal/ast/annotations.d.ts.map +0 -1
- package/dist/types/src/internal/ast/annotations.test.d.ts.map +0 -1
- package/dist/types/src/internal/ast/entity-kind.d.ts +0 -10
- package/dist/types/src/internal/ast/entity-kind.d.ts.map +0 -1
- package/dist/types/src/internal/ast/index.d.ts +0 -5
- package/dist/types/src/internal/ast/index.d.ts.map +0 -1
- package/dist/types/src/internal/ast/types.d.ts +0 -6
- package/dist/types/src/internal/ast/types.d.ts.map +0 -1
- package/dist/types/src/internal/json/annotations.d.ts.map +0 -1
- package/dist/types/src/internal/json/effect-schema.test.d.ts.map +0 -1
- package/dist/types/src/internal/json/index.d.ts +0 -2
- package/dist/types/src/internal/json/index.d.ts.map +0 -1
- package/dist/types/src/internal/json/json-schema.d.ts.map +0 -1
- package/dist/types/src/internal/json/json-schema.test.d.ts.map +0 -1
- package/dist/types/src/internal/object/accessors.d.ts +0 -37
- package/dist/types/src/internal/object/accessors.d.ts.map +0 -1
- package/dist/types/src/internal/object/create.d.ts.map +0 -1
- package/dist/types/src/internal/object/create.test.d.ts +0 -2
- package/dist/types/src/internal/object/create.test.d.ts.map +0 -1
- package/dist/types/src/internal/object/entity.d.ts +0 -33
- package/dist/types/src/internal/object/entity.d.ts.map +0 -1
- package/dist/types/src/internal/object/expando.d.ts +0 -14
- package/dist/types/src/internal/object/expando.d.ts.map +0 -1
- package/dist/types/src/internal/object/meta.d.ts.map +0 -1
- package/dist/types/src/internal/object/model.d.ts +0 -117
- package/dist/types/src/internal/object/model.d.ts.map +0 -1
- package/dist/types/src/internal/object/relation.d.ts +0 -17
- package/dist/types/src/internal/object/relation.d.ts.map +0 -1
- package/dist/types/src/internal/object/typename.d.ts +0 -15
- package/dist/types/src/internal/object/typename.d.ts.map +0 -1
- package/dist/types/src/internal/object/version.d.ts.map +0 -1
- package/dist/types/src/internal/projection/compose.d.ts.map +0 -1
- package/dist/types/src/internal/projection/compose.test.d.ts.map +0 -1
- package/dist/types/src/internal/projection/index.d.ts +0 -2
- package/dist/types/src/internal/projection/index.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/reactive-object.d.ts +0 -15
- package/dist/types/src/internal/proxy/reactive-object.d.ts.map +0 -1
- package/dist/types/src/internal/query/index.d.ts +0 -2
- package/dist/types/src/internal/query/index.d.ts.map +0 -1
- package/dist/types/src/internal/query/query.d.ts +0 -17
- package/dist/types/src/internal/query/query.d.ts.map +0 -1
- package/dist/types/src/internal/schema/runtime-schema-registry.d.ts +0 -18
- package/dist/types/src/internal/schema/runtime-schema-registry.d.ts.map +0 -1
- package/dist/types/src/internal/schema/snapshot.d.ts +0 -6
- package/dist/types/src/internal/schema/snapshot.d.ts.map +0 -1
- package/dist/types/src/internal/schema/stored-schema.d.ts +0 -13
- package/dist/types/src/internal/schema/stored-schema.d.ts.map +0 -1
- package/dist/types/src/internal/testing/index.d.ts +0 -3
- package/dist/types/src/internal/testing/index.d.ts.map +0 -1
- package/dist/types/src/internal/testing/types.d.ts +0 -455
- package/dist/types/src/internal/testing/types.d.ts.map +0 -1
- package/dist/types/src/internal/testing/utils.d.ts +0 -10
- package/dist/types/src/internal/testing/utils.d.ts.map +0 -1
- package/dist/types/src/internal/types/types.d.ts +0 -79
- package/dist/types/src/internal/types/types.d.ts.map +0 -1
- package/dist/types/src/internal/types/types.test.d.ts +0 -2
- package/dist/types/src/internal/types/types.test.d.ts.map +0 -1
- package/dist/types/src/internal/types/util.d.ts +0 -5
- package/dist/types/src/internal/types/util.d.ts.map +0 -1
- package/dist/types/src/query/index.d.ts +0 -3
- package/dist/types/src/query/index.d.ts.map +0 -1
- package/dist/types/src/query/query.d.ts +0 -248
- package/dist/types/src/query/query.d.ts.map +0 -1
- package/dist/types/src/query/query.test.d.ts +0 -2
- package/dist/types/src/query/query.test.d.ts.map +0 -1
- package/dist/types/src/query/tag.d.ts +0 -17
- package/dist/types/src/query/tag.d.ts.map +0 -1
- package/dist/types/src/testing/echo-schema.d.ts +0 -7
- package/dist/types/src/testing/echo-schema.d.ts.map +0 -1
- package/dist/types/src/testing/types.d.ts +0 -113
- package/dist/types/src/testing/types.d.ts.map +0 -1
- package/src/internal/ast/annotation-helper.ts +0 -22
- package/src/internal/ast/annotations.ts +0 -219
- package/src/internal/ast/entity-kind.ts +0 -15
- package/src/internal/ast/index.ts +0 -8
- package/src/internal/ast/types.ts +0 -17
- package/src/internal/json/index.ts +0 -5
- package/src/internal/object/accessors.ts +0 -153
- package/src/internal/object/entity.ts +0 -248
- package/src/internal/object/expando.ts +0 -21
- package/src/internal/object/model.ts +0 -170
- package/src/internal/object/relation.ts +0 -24
- package/src/internal/object/typename.ts +0 -61
- package/src/internal/object/version.ts +0 -22
- package/src/internal/projection/index.ts +0 -5
- package/src/internal/proxy/reactive-object.ts +0 -108
- package/src/internal/query/index.ts +0 -5
- package/src/internal/query/query.ts +0 -23
- package/src/internal/schema/runtime-schema-registry.ts +0 -78
- package/src/internal/schema/snapshot.ts +0 -25
- package/src/internal/schema/stored-schema.ts +0 -26
- package/src/internal/testing/index.ts +0 -6
- package/src/internal/testing/types.ts +0 -211
- package/src/internal/testing/utils.ts +0 -54
- package/src/internal/types/types.test.ts +0 -48
- package/src/internal/types/types.ts +0 -176
- package/src/internal/types/util.ts +0 -9
- package/src/query/index.ts +0 -6
- package/src/query/query.test.ts +0 -401
- package/src/query/query.ts +0 -789
- package/src/test/api.test.ts +0 -180
- package/src/testing/echo-schema.ts +0 -39
- package/src/testing/types.ts +0 -91
- /package/dist/lib/browser/{query/index.mjs.map → Annotation.mjs.map} +0 -0
- /package/dist/lib/{node-esm/query/index.mjs.map → browser/Database.mjs.map} +0 -0
- /package/dist/types/src/internal/{ast → annotations}/annotations.test.d.ts +0 -0
- /package/dist/types/src/internal/{json → json-schema}/annotations.d.ts +0 -0
- /package/dist/types/src/internal/{json → json-schema}/effect-schema.test.d.ts +0 -0
- /package/dist/types/src/internal/{json → json-schema}/json-schema.test.d.ts +0 -0
- /package/dist/types/src/internal/{projection → schema}/compose.d.ts +0 -0
- /package/dist/types/src/internal/{projection → schema}/compose.test.d.ts +0 -0
- /package/dist/types/src/{test → testing}/api.test.d.ts +0 -0
- /package/src/internal/{json → json-schema}/effect-schema.test.ts +0 -0
package/src/internal/ref/ref.ts
CHANGED
|
@@ -8,21 +8,22 @@ 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
|
|
|
16
|
-
import
|
|
17
|
+
import * as Database from '../../Database';
|
|
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.
|
|
22
24
|
*/
|
|
23
25
|
export const JSON_SCHEMA_ECHO_REF_ID = '/schemas/echo/ref';
|
|
24
26
|
|
|
25
|
-
// TODO(burdon): Define return type.
|
|
26
27
|
export const getSchemaReference = (property: JsonSchemaType): { typename: string } | undefined => {
|
|
27
28
|
const { $id, reference: { schema: { $ref } = {} } = {} } = property;
|
|
28
29
|
if ($id === JSON_SCHEMA_ECHO_REF_ID && $ref) {
|
|
@@ -71,16 +72,18 @@ export const RefTypeId: unique symbol = Symbol('@dxos/echo/internal/Ref');
|
|
|
71
72
|
/**
|
|
72
73
|
* Reference Schema.
|
|
73
74
|
*/
|
|
74
|
-
export interface
|
|
75
|
+
export interface RefSchema<T extends AnyEntity> extends Schema.SchemaClass<Ref<T>, EncodedReference> {}
|
|
75
76
|
|
|
76
|
-
|
|
77
|
+
/**
|
|
78
|
+
* Type of the `Ref` function and extra methods attached to it.
|
|
79
|
+
*/
|
|
77
80
|
export interface RefFn {
|
|
78
|
-
<S extends Schema.Schema.Any>(schema: S):
|
|
81
|
+
<S extends Schema.Schema.Any>(schema: S): RefSchema<Schema.Schema.Type<S>>;
|
|
79
82
|
|
|
80
83
|
/**
|
|
81
84
|
* @returns True if the object is a reference.
|
|
82
85
|
*/
|
|
83
|
-
isRef: (obj:
|
|
86
|
+
isRef: (obj: unknown) => obj is Ref<any>;
|
|
84
87
|
|
|
85
88
|
/**
|
|
86
89
|
* @returns True if the reference points to the given object id.
|
|
@@ -90,7 +93,7 @@ export interface RefFn {
|
|
|
90
93
|
/**
|
|
91
94
|
* @returns True if the schema is a reference schema.
|
|
92
95
|
*/
|
|
93
|
-
isRefSchema: (schema: Schema.Schema<any, any>) => schema is
|
|
96
|
+
isRefSchema: (schema: Schema.Schema<any, any>) => schema is RefSchema<any>;
|
|
94
97
|
|
|
95
98
|
/**
|
|
96
99
|
* @returns True if the schema AST is a reference schema.
|
|
@@ -100,31 +103,26 @@ export interface RefFn {
|
|
|
100
103
|
/**
|
|
101
104
|
* Constructs a reference that points to the given object.
|
|
102
105
|
*/
|
|
103
|
-
// TODO(burdon):
|
|
104
|
-
make: <T extends
|
|
106
|
+
// TODO(burdon): Narrow to Obj.Unknown?
|
|
107
|
+
make: <T extends AnyEntity>(object: T) => Ref<T>;
|
|
105
108
|
|
|
106
109
|
/**
|
|
107
110
|
* Constructs a reference that points to the object specified by the provided DXN.
|
|
108
111
|
*/
|
|
109
112
|
fromDXN: (dxn: DXN) => Ref<any>;
|
|
110
113
|
}
|
|
114
|
+
|
|
111
115
|
/**
|
|
112
116
|
* Schema builder for references.
|
|
113
117
|
*/
|
|
114
|
-
export const Ref: RefFn = <S extends Schema.Schema.Any>(schema: S):
|
|
118
|
+
export const Ref: RefFn = <S extends Schema.Schema.Any>(schema: S): RefSchema<Schema.Schema.Type<S>> => {
|
|
115
119
|
assertArgument(Schema.isSchema(schema), 'schema', 'Must call with an instance of effect-schema');
|
|
116
|
-
|
|
117
120
|
const annotation = getTypeAnnotation(schema);
|
|
118
121
|
if (annotation == null) {
|
|
119
122
|
throw new Error('Reference target must be an ECHO schema.');
|
|
120
123
|
}
|
|
121
124
|
|
|
122
|
-
return createEchoReferenceSchema(
|
|
123
|
-
getTypeIdentifierAnnotation(schema),
|
|
124
|
-
annotation.typename,
|
|
125
|
-
annotation.version,
|
|
126
|
-
getSchemaExpectedName(schema.ast),
|
|
127
|
-
);
|
|
125
|
+
return createEchoReferenceSchema(getTypeIdentifierAnnotation(schema), annotation.typename, annotation.version);
|
|
128
126
|
};
|
|
129
127
|
|
|
130
128
|
/**
|
|
@@ -137,12 +135,15 @@ export interface Ref<T> {
|
|
|
137
135
|
*/
|
|
138
136
|
get dxn(): DXN;
|
|
139
137
|
|
|
138
|
+
/**
|
|
139
|
+
* Returns true if the reference has a target available (inlined or resolver set).
|
|
140
|
+
*/
|
|
141
|
+
get isAvailable(): boolean;
|
|
142
|
+
|
|
140
143
|
/**
|
|
141
144
|
* @returns The reference target.
|
|
142
145
|
* May return `undefined` if the object is not loaded in the working set.
|
|
143
146
|
* Accessing this property, even if it returns `undefined` will trigger the object to be loaded to the working set.
|
|
144
|
-
*
|
|
145
|
-
* @reactive Supports signal subscriptions.
|
|
146
147
|
*/
|
|
147
148
|
get target(): T | undefined;
|
|
148
149
|
|
|
@@ -156,6 +157,7 @@ export interface Ref<T> {
|
|
|
156
157
|
/**
|
|
157
158
|
* @returns Promise that will resolves with the target object or undefined if the object is not loaded locally.
|
|
158
159
|
*/
|
|
160
|
+
|
|
159
161
|
tryLoad(): Promise<T | undefined>;
|
|
160
162
|
|
|
161
163
|
/**
|
|
@@ -201,7 +203,7 @@ Ref.isRef = (obj: any): obj is Ref<any> => {
|
|
|
201
203
|
|
|
202
204
|
Ref.hasObjectId = (id: ObjectId) => (ref: Ref<any>) => ref.dxn.isLocalObjectId() && ref.dxn.parts[1] === id;
|
|
203
205
|
|
|
204
|
-
Ref.isRefSchema = (schema: Schema.Schema<any, any>): schema is
|
|
206
|
+
Ref.isRefSchema = (schema: Schema.Schema<any, any>): schema is RefSchema<any> => {
|
|
205
207
|
return Ref.isRefSchemaAST(schema.ast);
|
|
206
208
|
};
|
|
207
209
|
|
|
@@ -209,7 +211,7 @@ Ref.isRefSchemaAST = (ast: SchemaAST.AST): boolean => {
|
|
|
209
211
|
return SchemaAST.getAnnotation(ast, ReferenceAnnotationId).pipe(Option.isSome);
|
|
210
212
|
};
|
|
211
213
|
|
|
212
|
-
Ref.make = <T extends
|
|
214
|
+
Ref.make = <T extends AnyProperties>(obj: T): Ref<T> => {
|
|
213
215
|
if (typeof obj !== 'object' || obj === null) {
|
|
214
216
|
throw new TypeError('Expected: ECHO object.');
|
|
215
217
|
}
|
|
@@ -217,7 +219,7 @@ Ref.make = <T extends BaseObject>(obj: T): Ref<T> => {
|
|
|
217
219
|
// TODO(dmaretskyi): Extract to `getObjectDXN` function.
|
|
218
220
|
const id = obj.id;
|
|
219
221
|
invariant(ObjectId.isValid(id), 'Invalid object ID');
|
|
220
|
-
const dxn =
|
|
222
|
+
const dxn = DXN.fromLocalObjectId(id);
|
|
221
223
|
return new RefImpl(dxn, obj);
|
|
222
224
|
};
|
|
223
225
|
|
|
@@ -242,7 +244,6 @@ export const createEchoReferenceSchema = (
|
|
|
242
244
|
echoId: string | undefined,
|
|
243
245
|
typename: string | undefined,
|
|
244
246
|
version: string | undefined,
|
|
245
|
-
schemaName?: string,
|
|
246
247
|
): Schema.SchemaClass<Ref<any>, EncodedReference> => {
|
|
247
248
|
if (!echoId && !typename) {
|
|
248
249
|
throw new TypeError('Either echoId or typename must be provided.');
|
|
@@ -261,25 +262,39 @@ export const createEchoReferenceSchema = (
|
|
|
261
262
|
[],
|
|
262
263
|
{
|
|
263
264
|
encode: () => {
|
|
264
|
-
return (value) =>
|
|
265
|
-
|
|
266
|
-
|
|
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');
|
|
267
273
|
});
|
|
268
|
-
};
|
|
269
274
|
},
|
|
270
275
|
decode: () => {
|
|
271
|
-
return (value) =>
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
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
|
+
});
|
|
283
298
|
},
|
|
284
299
|
},
|
|
285
300
|
{
|
|
@@ -315,12 +330,12 @@ export interface RefResolver {
|
|
|
315
330
|
* @param load If true the resolver should attempt to load the object from disk.
|
|
316
331
|
* @param onLoad Callback to call when the object is loaded.
|
|
317
332
|
*/
|
|
318
|
-
resolveSync(dxn: DXN, load: boolean, onLoad?: () => void):
|
|
333
|
+
resolveSync(dxn: DXN, load: boolean, onLoad?: () => void): AnyProperties | undefined;
|
|
319
334
|
|
|
320
335
|
/**
|
|
321
336
|
* Resolver ref asynchronously.
|
|
322
337
|
*/
|
|
323
|
-
resolve(dxn: DXN): Promise<
|
|
338
|
+
resolve(dxn: DXN): Promise<AnyProperties | undefined>;
|
|
324
339
|
|
|
325
340
|
// TODO(dmaretskyi): Combine with `resolve`.
|
|
326
341
|
resolveSchema(dxn: DXN): Promise<Schema.Schema.AnyNoContext | undefined>;
|
|
@@ -329,7 +344,7 @@ export interface RefResolver {
|
|
|
329
344
|
export class RefImpl<T> implements Ref<T> {
|
|
330
345
|
#dxn: DXN;
|
|
331
346
|
#resolver?: RefResolver = undefined;
|
|
332
|
-
#
|
|
347
|
+
#resolved = new Event<void>();
|
|
333
348
|
|
|
334
349
|
/**
|
|
335
350
|
* Target is set when the reference is created from a specific object.
|
|
@@ -341,7 +356,7 @@ export class RefImpl<T> implements Ref<T> {
|
|
|
341
356
|
* Callback to issue a reactive notification when object is resolved.
|
|
342
357
|
*/
|
|
343
358
|
#resolverCallback = () => {
|
|
344
|
-
this.#
|
|
359
|
+
this.#resolved.emit();
|
|
345
360
|
};
|
|
346
361
|
|
|
347
362
|
constructor(dxn: DXN, target?: T) {
|
|
@@ -356,11 +371,17 @@ export class RefImpl<T> implements Ref<T> {
|
|
|
356
371
|
return this.#dxn;
|
|
357
372
|
}
|
|
358
373
|
|
|
374
|
+
/**
|
|
375
|
+
* @inheritdoc
|
|
376
|
+
*/
|
|
377
|
+
get isAvailable(): boolean {
|
|
378
|
+
return this.#target !== undefined || this.#resolver !== undefined;
|
|
379
|
+
}
|
|
380
|
+
|
|
359
381
|
/**
|
|
360
382
|
* @inheritdoc
|
|
361
383
|
*/
|
|
362
384
|
get target(): T | undefined {
|
|
363
|
-
this.#signal.notifyRead();
|
|
364
385
|
if (this.#target) {
|
|
365
386
|
return this.#target;
|
|
366
387
|
}
|
|
@@ -388,6 +409,9 @@ export class RefImpl<T> implements Ref<T> {
|
|
|
388
409
|
* @inheritdoc
|
|
389
410
|
*/
|
|
390
411
|
async tryLoad(): Promise<T | undefined> {
|
|
412
|
+
if (this.#target) {
|
|
413
|
+
return this.#target;
|
|
414
|
+
}
|
|
391
415
|
invariant(this.#resolver, 'Resolver is not set');
|
|
392
416
|
return (await this.#resolver.resolve(this.#dxn)) as T | undefined;
|
|
393
417
|
}
|
|
@@ -428,10 +452,15 @@ export class RefImpl<T> implements Ref<T> {
|
|
|
428
452
|
return `Ref(${this.#dxn.toString()})`;
|
|
429
453
|
}
|
|
430
454
|
|
|
455
|
+
[inspectCustom]: CustomInspectFunction = (depth, options, inspect) => {
|
|
456
|
+
return this.toString();
|
|
457
|
+
};
|
|
458
|
+
|
|
431
459
|
[RefTypeId] = refVariance;
|
|
432
460
|
|
|
433
461
|
/**
|
|
434
462
|
* Internal method to set the resolver.
|
|
463
|
+
*
|
|
435
464
|
* @internal
|
|
436
465
|
*/
|
|
437
466
|
_setResolver(resolver: RefResolver): void {
|
|
@@ -439,8 +468,6 @@ export class RefImpl<T> implements Ref<T> {
|
|
|
439
468
|
}
|
|
440
469
|
|
|
441
470
|
/**
|
|
442
|
-
* Internal method to get the saved target.
|
|
443
|
-
* Not the same as `target` which is resolved from the resolver.
|
|
444
471
|
* @internal
|
|
445
472
|
*/
|
|
446
473
|
_getSavedTarget(): T | undefined {
|
|
@@ -459,7 +486,7 @@ export const setRefResolver = (ref: Ref<any>, resolver: RefResolver) => {
|
|
|
459
486
|
/**
|
|
460
487
|
* Internal API for getting the saved target on a reference.
|
|
461
488
|
*/
|
|
462
|
-
export const getRefSavedTarget = (ref: Ref<any>):
|
|
489
|
+
export const getRefSavedTarget = (ref: Ref<any>): AnyProperties | undefined => {
|
|
463
490
|
invariant(ref instanceof RefImpl, 'Ref is not an instance of RefImpl');
|
|
464
491
|
return ref._getSavedTarget();
|
|
465
492
|
};
|
|
@@ -482,10 +509,10 @@ export const refFromEncodedReference = (encodedReference: EncodedReference, reso
|
|
|
482
509
|
};
|
|
483
510
|
|
|
484
511
|
export class StaticRefResolver implements RefResolver {
|
|
485
|
-
public objects = new Map<ObjectId,
|
|
512
|
+
public objects = new Map<ObjectId, AnyProperties>();
|
|
486
513
|
public schemas = new Map<DXN.String, Schema.Schema.AnyNoContext>();
|
|
487
514
|
|
|
488
|
-
addObject(obj:
|
|
515
|
+
addObject(obj: AnyProperties): this {
|
|
489
516
|
this.objects.set(obj.id, obj);
|
|
490
517
|
return this;
|
|
491
518
|
}
|
|
@@ -497,7 +524,7 @@ export class StaticRefResolver implements RefResolver {
|
|
|
497
524
|
return this;
|
|
498
525
|
}
|
|
499
526
|
|
|
500
|
-
resolveSync(dxn: DXN, _load: boolean, _onLoad?: () => void):
|
|
527
|
+
resolveSync(dxn: DXN, _load: boolean, _onLoad?: () => void): AnyProperties | undefined {
|
|
501
528
|
const id = dxn?.asEchoDXN()?.echoId;
|
|
502
529
|
if (id == null) {
|
|
503
530
|
return undefined;
|
|
@@ -506,7 +533,7 @@ export class StaticRefResolver implements RefResolver {
|
|
|
506
533
|
return this.objects.get(id);
|
|
507
534
|
}
|
|
508
535
|
|
|
509
|
-
async resolve(dxn: DXN): Promise<
|
|
536
|
+
async resolve(dxn: DXN): Promise<AnyProperties | undefined> {
|
|
510
537
|
const id = dxn?.asEchoDXN()?.echoId;
|
|
511
538
|
if (id == null) {
|
|
512
539
|
return undefined;
|
|
@@ -5,23 +5,22 @@
|
|
|
5
5
|
import * as Schema from 'effect/Schema';
|
|
6
6
|
import { describe, test } from 'vitest';
|
|
7
7
|
|
|
8
|
-
import { FieldPath } from '../
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import { ECHO_ANNOTATIONS_NS_KEY } from '../json-schema';
|
|
12
|
-
import { TypedObject } from '../object';
|
|
8
|
+
import { FieldPath } from '../annotations';
|
|
9
|
+
import { EchoObjectSchema } from '../entities';
|
|
10
|
+
import { FormatAnnotation, TypeFormat } from '../formats';
|
|
11
|
+
import { ECHO_ANNOTATIONS_NS_KEY, toJsonSchema } from '../json-schema';
|
|
13
12
|
|
|
14
13
|
import { composeSchema } from './compose';
|
|
15
14
|
|
|
16
15
|
describe('schema composition', () => {
|
|
17
16
|
test('schema composition', ({ expect }) => {
|
|
18
|
-
|
|
17
|
+
const BaseType = Schema.Struct({
|
|
19
18
|
name: Schema.String,
|
|
20
19
|
email: Schema.String,
|
|
21
|
-
})
|
|
20
|
+
}).pipe(EchoObjectSchema({ typename: 'example.com/Person', version: '0.1.0' }));
|
|
22
21
|
|
|
23
22
|
const OverlaySchema = Schema.Struct({
|
|
24
|
-
email: Schema.String.pipe(FieldPath('$.email'), FormatAnnotation.set(
|
|
23
|
+
email: Schema.String.pipe(FieldPath('$.email'), FormatAnnotation.set(TypeFormat.Email)),
|
|
25
24
|
});
|
|
26
25
|
|
|
27
26
|
const baseSchema = toJsonSchema(BaseType);
|
|
@@ -30,7 +29,7 @@ describe('schema composition', () => {
|
|
|
30
29
|
expect(composedSchema.properties).to.deep.eq({
|
|
31
30
|
email: {
|
|
32
31
|
type: 'string',
|
|
33
|
-
format:
|
|
32
|
+
format: TypeFormat.Email,
|
|
34
33
|
// TODO(dmaretskyi): Should use the new field.
|
|
35
34
|
[ECHO_ANNOTATIONS_NS_KEY]: {
|
|
36
35
|
meta: {
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import { invariant } from '@dxos/invariant';
|
|
6
6
|
|
|
7
7
|
import { type JsonSchemaType } from '../json-schema';
|
|
8
|
-
import { getSnapshot } from '../
|
|
8
|
+
import { getSnapshot } from '../object';
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* Creates a composite schema from the source and projection schemas.
|
|
@@ -8,10 +8,11 @@ import * as SchemaAST from 'effect/SchemaAST';
|
|
|
8
8
|
import { invariant } from '@dxos/invariant';
|
|
9
9
|
import { type ObjectId } from '@dxos/keys';
|
|
10
10
|
|
|
11
|
-
import { type SchemaMeta, SchemaMetaSymbol, type TypeAnnotation, getTypeAnnotation } from '../
|
|
12
|
-
import { toEffectSchema, toJsonSchema } from '../json';
|
|
13
|
-
import { type
|
|
14
|
-
import {
|
|
11
|
+
import { type SchemaMeta, SchemaMetaSymbol, type TypeAnnotation, getTypeAnnotation } from '../annotations';
|
|
12
|
+
import { type JsonSchemaType, toEffectSchema, toJsonSchema } from '../json-schema';
|
|
13
|
+
import { type TypedObject, type TypedObjectPrototype, getSnapshot } from '../object';
|
|
14
|
+
import { ChangeId } from '../proxy';
|
|
15
|
+
import { EntityKind, SchemaKindId } from '../types';
|
|
15
16
|
|
|
16
17
|
import {
|
|
17
18
|
addFieldsToSchema,
|
|
@@ -20,14 +21,14 @@ import {
|
|
|
20
21
|
updateFieldNameInSchema,
|
|
21
22
|
updateFieldsInSchema,
|
|
22
23
|
} from './manipulation';
|
|
23
|
-
import {
|
|
24
|
-
import { StoredSchema } from './stored-schema';
|
|
24
|
+
import { PersistentSchema } from './persistent-schema';
|
|
25
25
|
|
|
26
26
|
/**
|
|
27
27
|
* Base schema type.
|
|
28
28
|
*/
|
|
29
29
|
// TODO(burdon): Merge with ImmutableSchema.
|
|
30
30
|
export interface BaseSchema<A = any, I = any> extends TypedObject<A, I> {
|
|
31
|
+
// TODO(burdon): Different from mutable?
|
|
31
32
|
get readonly(): boolean;
|
|
32
33
|
// TODO(burdon): Change to external function.
|
|
33
34
|
get mutable(): EchoSchema<A, I>;
|
|
@@ -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
|
}
|
|
@@ -124,8 +129,10 @@ const EchoSchemaConstructor = (): TypedObjectPrototype => {
|
|
|
124
129
|
*/
|
|
125
130
|
return class {
|
|
126
131
|
private static get _schema() {
|
|
127
|
-
// The field is DynamicEchoSchema in runtime, but is serialized as
|
|
128
|
-
return Schema.Union(
|
|
132
|
+
// The field is DynamicEchoSchema in runtime, but is serialized as PersisentSchema in automerge.
|
|
133
|
+
return Schema.Union(PersistentSchema, Schema.instanceOf(EchoSchema)).annotations(
|
|
134
|
+
PersistentSchema.ast.annotations,
|
|
135
|
+
);
|
|
129
136
|
}
|
|
130
137
|
|
|
131
138
|
static readonly [Schema.TypeId] = schemaVariance;
|
|
@@ -159,7 +166,7 @@ const schemaVariance = {
|
|
|
159
166
|
};
|
|
160
167
|
|
|
161
168
|
/**
|
|
162
|
-
* Represents a schema that is
|
|
169
|
+
* Represents a schema that is persisted in the ECHO database.
|
|
163
170
|
* Schema can me mutable or readonly (specified by the {@link EchoSchema.readonly} field).
|
|
164
171
|
*
|
|
165
172
|
* Schema that can be modified at runtime via the API.
|
|
@@ -170,20 +177,26 @@ const schemaVariance = {
|
|
|
170
177
|
*
|
|
171
178
|
* @example
|
|
172
179
|
* ```ts
|
|
173
|
-
* 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' })){
|
|
174
181
|
* title: Schema.String,
|
|
175
182
|
* schema: Schema.optional(ref(EchoSchema)),
|
|
176
183
|
* props: Schema.mutable(S.Array(TablePropSchema)),
|
|
177
184
|
* }) {}
|
|
178
185
|
* ```
|
|
179
186
|
*
|
|
180
|
-
* The ECHO API will translate any references to
|
|
187
|
+
* The ECHO API will translate any references to PersistentSchema objects to be resolved as EchoSchema objects.
|
|
181
188
|
*/
|
|
182
189
|
export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implements BaseSchema<A, I> {
|
|
183
190
|
private _schema: Schema.Schema.AnyNoContext | undefined;
|
|
184
191
|
private _isDirty = true;
|
|
185
192
|
|
|
186
|
-
|
|
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
|
+
|
|
199
|
+
constructor(private readonly _persistentSchema: PersistentSchema) {
|
|
187
200
|
super();
|
|
188
201
|
}
|
|
189
202
|
|
|
@@ -196,11 +209,11 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
|
|
|
196
209
|
}
|
|
197
210
|
|
|
198
211
|
public get Type() {
|
|
199
|
-
return this.
|
|
212
|
+
return this._persistentSchema as A;
|
|
200
213
|
}
|
|
201
214
|
|
|
202
215
|
public get Encoded() {
|
|
203
|
-
return this.
|
|
216
|
+
return this._persistentSchema as I;
|
|
204
217
|
}
|
|
205
218
|
|
|
206
219
|
public get Context() {
|
|
@@ -227,12 +240,17 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
|
|
|
227
240
|
// BaseSchema
|
|
228
241
|
//
|
|
229
242
|
|
|
243
|
+
public get kind(): EntityKind.Object {
|
|
244
|
+
// Dynamic schemas are always object schemas.
|
|
245
|
+
return EntityKind.Object;
|
|
246
|
+
}
|
|
247
|
+
|
|
230
248
|
public get typename(): string {
|
|
231
|
-
return this.
|
|
249
|
+
return this._persistentSchema.typename;
|
|
232
250
|
}
|
|
233
251
|
|
|
234
252
|
public get version(): string {
|
|
235
|
-
return this.
|
|
253
|
+
return this._persistentSchema.version;
|
|
236
254
|
}
|
|
237
255
|
|
|
238
256
|
public get readonly(): boolean {
|
|
@@ -247,10 +265,10 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
|
|
|
247
265
|
}
|
|
248
266
|
|
|
249
267
|
/**
|
|
250
|
-
*
|
|
268
|
+
* Returns the JSON schema for the schema.
|
|
251
269
|
*/
|
|
252
270
|
public get jsonSchema(): JsonSchemaType {
|
|
253
|
-
return this.
|
|
271
|
+
return this._persistentSchema.jsonSchema;
|
|
254
272
|
}
|
|
255
273
|
|
|
256
274
|
/**
|
|
@@ -269,25 +287,25 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
|
|
|
269
287
|
* Id of the ECHO object containing the schema.
|
|
270
288
|
*/
|
|
271
289
|
public get id(): ObjectId {
|
|
272
|
-
return this.
|
|
290
|
+
return this._persistentSchema.id;
|
|
273
291
|
}
|
|
274
292
|
|
|
275
293
|
/**
|
|
276
294
|
* Short name of the schema.
|
|
277
295
|
*/
|
|
278
296
|
public get name(): string | undefined {
|
|
279
|
-
return this.
|
|
297
|
+
return this._persistentSchema.name;
|
|
280
298
|
}
|
|
281
299
|
|
|
282
300
|
public get [SchemaMetaSymbol](): SchemaMeta {
|
|
283
|
-
return { id: this.id, typename: this.typename, version: this.
|
|
301
|
+
return { id: this.id, typename: this.typename, version: this._persistentSchema.version };
|
|
284
302
|
}
|
|
285
303
|
|
|
286
304
|
/**
|
|
287
|
-
* Reference to the underlying
|
|
305
|
+
* Reference to the underlying persistent schema object.
|
|
288
306
|
*/
|
|
289
|
-
public get
|
|
290
|
-
return this.
|
|
307
|
+
public get persistentSchema(): PersistentSchema {
|
|
308
|
+
return this._persistentSchema;
|
|
291
309
|
}
|
|
292
310
|
|
|
293
311
|
public getProperties(): SchemaAST.PropertySignature[] {
|
|
@@ -307,8 +325,10 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
|
|
|
307
325
|
*/
|
|
308
326
|
public updateTypename(typename: string): void {
|
|
309
327
|
const updated = setTypenameInSchema(this._getSchema(), typename);
|
|
310
|
-
this.
|
|
311
|
-
|
|
328
|
+
this._change((schema) => {
|
|
329
|
+
schema.typename = typename;
|
|
330
|
+
schema.jsonSchema = toJsonSchema(updated);
|
|
331
|
+
});
|
|
312
332
|
}
|
|
313
333
|
|
|
314
334
|
/**
|
|
@@ -316,7 +336,9 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
|
|
|
316
336
|
*/
|
|
317
337
|
public addFields(fields: Schema.Struct.Fields): void {
|
|
318
338
|
const extended = addFieldsToSchema(this._getSchema(), fields);
|
|
319
|
-
this.
|
|
339
|
+
this._change((schema) => {
|
|
340
|
+
schema.jsonSchema = toJsonSchema(extended);
|
|
341
|
+
});
|
|
320
342
|
}
|
|
321
343
|
|
|
322
344
|
/**
|
|
@@ -324,7 +346,9 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
|
|
|
324
346
|
*/
|
|
325
347
|
public updateFields(fields: Schema.Struct.Fields): void {
|
|
326
348
|
const updated = updateFieldsInSchema(this._getSchema(), fields);
|
|
327
|
-
this.
|
|
349
|
+
this._change((schema) => {
|
|
350
|
+
schema.jsonSchema = toJsonSchema(updated);
|
|
351
|
+
});
|
|
328
352
|
}
|
|
329
353
|
|
|
330
354
|
/**
|
|
@@ -332,7 +356,9 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
|
|
|
332
356
|
*/
|
|
333
357
|
public updateFieldPropertyName({ before, after }: { before: PropertyKey; after: PropertyKey }): void {
|
|
334
358
|
const renamed = updateFieldNameInSchema(this._getSchema(), { before, after });
|
|
335
|
-
this.
|
|
359
|
+
this._change((schema) => {
|
|
360
|
+
schema.jsonSchema = toJsonSchema(renamed);
|
|
361
|
+
});
|
|
336
362
|
}
|
|
337
363
|
|
|
338
364
|
/**
|
|
@@ -340,7 +366,21 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
|
|
|
340
366
|
*/
|
|
341
367
|
public removeFields(fieldNames: string[]): void {
|
|
342
368
|
const removed = removeFieldsFromSchema(this._getSchema(), fieldNames);
|
|
343
|
-
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
|
+
}
|
|
344
384
|
}
|
|
345
385
|
|
|
346
386
|
//
|
|
@@ -348,7 +388,7 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
|
|
|
348
388
|
//
|
|
349
389
|
|
|
350
390
|
/**
|
|
351
|
-
* Called by
|
|
391
|
+
* Called by DatabaseSchemaRegistry on update.
|
|
352
392
|
*/
|
|
353
393
|
_invalidate(): void {
|
|
354
394
|
this._isDirty = true;
|
|
@@ -359,12 +399,12 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
|
|
|
359
399
|
*/
|
|
360
400
|
_rebuild(): void {
|
|
361
401
|
if (this._isDirty || this._schema == null) {
|
|
362
|
-
this._schema = toEffectSchema(getSnapshot(this.
|
|
402
|
+
this._schema = toEffectSchema(getSnapshot(this._persistentSchema.jsonSchema));
|
|
363
403
|
this._isDirty = false;
|
|
364
404
|
}
|
|
365
405
|
}
|
|
366
406
|
|
|
367
|
-
|
|
407
|
+
_getSchema(): Schema.Schema.AnyNoContext {
|
|
368
408
|
this._rebuild();
|
|
369
409
|
return this._schema!;
|
|
370
410
|
}
|
|
@@ -8,7 +8,7 @@ import * as SchemaAST from 'effect/SchemaAST';
|
|
|
8
8
|
import { invariant } from '@dxos/invariant';
|
|
9
9
|
import { DXN } from '@dxos/keys';
|
|
10
10
|
|
|
11
|
-
import { type TypeAnnotation, TypeAnnotationId, TypeIdentifierAnnotationId } from '../
|
|
11
|
+
import { type TypeAnnotation, TypeAnnotationId, TypeIdentifierAnnotationId } from '../annotations';
|
|
12
12
|
|
|
13
13
|
// TODO(ZaymonFC): Do this one at a time. This might be dangerous.
|
|
14
14
|
export const addFieldsToSchema = (
|