@dxos/echo 0.8.4-main.3a94e84 → 0.8.4-main.3c1ae3b
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 -1
- package/dist/lib/browser/Annotation.mjs +31 -0
- package/dist/lib/browser/Annotation.mjs.map +7 -0
- package/dist/lib/browser/Database.mjs +14 -0
- package/dist/lib/browser/Database.mjs.map +7 -0
- package/dist/lib/browser/Entity.mjs +20 -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 +60 -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 +18 -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 +83 -0
- package/dist/lib/browser/Obj.mjs.map +7 -0
- package/dist/lib/browser/Order.mjs +11 -0
- package/dist/lib/browser/Order.mjs.map +7 -0
- package/dist/lib/browser/Query.mjs +25 -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 +21 -0
- package/dist/lib/browser/Ref.mjs.map +7 -0
- package/dist/lib/browser/Relation.mjs +33 -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 +25 -0
- package/dist/lib/browser/Tag.mjs.map +7 -0
- package/dist/lib/browser/Type.mjs +38 -0
- package/dist/lib/browser/Type.mjs.map +7 -0
- package/dist/lib/browser/chunk-3B2G6BW4.mjs +74 -0
- package/dist/lib/browser/chunk-3B2G6BW4.mjs.map +7 -0
- package/dist/lib/browser/chunk-5IN7XBIQ.mjs +24 -0
- package/dist/lib/browser/chunk-5IN7XBIQ.mjs.map +7 -0
- package/dist/lib/browser/chunk-6XVZF5VJ.mjs +2924 -0
- package/dist/lib/browser/chunk-6XVZF5VJ.mjs.map +7 -0
- package/dist/lib/browser/chunk-AGOWBKY6.mjs +94 -0
- package/dist/lib/browser/chunk-AGOWBKY6.mjs.map +7 -0
- package/dist/lib/browser/chunk-BD6MRI4M.mjs +113 -0
- package/dist/lib/browser/chunk-BD6MRI4M.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-DOPKE2FQ.mjs +32 -0
- package/dist/lib/browser/chunk-DOPKE2FQ.mjs.map +7 -0
- package/dist/lib/browser/chunk-ESLW4N7S.mjs +41 -0
- package/dist/lib/browser/chunk-ESLW4N7S.mjs.map +7 -0
- package/dist/lib/browser/chunk-F4YF6C3O.mjs +363 -0
- package/dist/lib/browser/chunk-F4YF6C3O.mjs.map +7 -0
- package/dist/lib/browser/chunk-FGFQWIZE.mjs +9 -0
- package/dist/lib/browser/chunk-FGFQWIZE.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-JG4GH6LN.mjs +9 -0
- package/dist/lib/browser/chunk-JG4GH6LN.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-NFH3POTD.mjs +37 -0
- package/dist/lib/browser/chunk-NFH3POTD.mjs.map +7 -0
- package/dist/lib/browser/chunk-O6FOICWT.mjs +57 -0
- package/dist/lib/browser/chunk-O6FOICWT.mjs.map +7 -0
- package/dist/lib/browser/chunk-P2B4BASR.mjs +288 -0
- package/dist/lib/browser/chunk-P2B4BASR.mjs.map +7 -0
- package/dist/lib/browser/chunk-QHC3ZYNC.mjs +152 -0
- package/dist/lib/browser/chunk-QHC3ZYNC.mjs.map +7 -0
- package/dist/lib/browser/chunk-QU7PWSZD.mjs +62 -0
- package/dist/lib/browser/chunk-QU7PWSZD.mjs.map +7 -0
- package/dist/lib/browser/chunk-RP4JV7FD.mjs +403 -0
- package/dist/lib/browser/chunk-RP4JV7FD.mjs.map +7 -0
- package/dist/lib/browser/chunk-V7TON6BX.mjs +151 -0
- package/dist/lib/browser/chunk-V7TON6BX.mjs.map +7 -0
- package/dist/lib/browser/chunk-WABSVOOX.mjs +303 -0
- package/dist/lib/browser/chunk-WABSVOOX.mjs.map +7 -0
- package/dist/lib/browser/chunk-XRHHSMHJ.mjs +39 -0
- package/dist/lib/browser/chunk-XRHHSMHJ.mjs.map +7 -0
- package/dist/lib/browser/chunk-ZIM3Y4ZK.mjs +38 -0
- package/dist/lib/browser/chunk-ZIM3Y4ZK.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +72 -9
- package/dist/lib/browser/internal/index.mjs +347 -0
- package/dist/lib/browser/internal/index.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +322 -32
- package/dist/lib/browser/testing/index.mjs.map +4 -4
- package/dist/lib/node-esm/Annotation.mjs +31 -0
- package/dist/lib/node-esm/Annotation.mjs.map +7 -0
- package/dist/lib/node-esm/Database.mjs +14 -0
- package/dist/lib/node-esm/Database.mjs.map +7 -0
- package/dist/lib/node-esm/Entity.mjs +20 -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 +60 -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 +18 -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 +83 -0
- package/dist/lib/node-esm/Obj.mjs.map +7 -0
- package/dist/lib/node-esm/Order.mjs +11 -0
- package/dist/lib/node-esm/Order.mjs.map +7 -0
- package/dist/lib/node-esm/Query.mjs +25 -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 +21 -0
- package/dist/lib/node-esm/Ref.mjs.map +7 -0
- package/dist/lib/node-esm/Relation.mjs +33 -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 +25 -0
- package/dist/lib/node-esm/Tag.mjs.map +7 -0
- package/dist/lib/node-esm/Type.mjs +38 -0
- package/dist/lib/node-esm/Type.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-5M5P2DCR.mjs +32 -0
- package/dist/lib/node-esm/chunk-5M5P2DCR.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-6OTQZKHX.mjs +303 -0
- package/dist/lib/node-esm/chunk-6OTQZKHX.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-76LEDWHO.mjs +152 -0
- package/dist/lib/node-esm/chunk-76LEDWHO.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-AGHZH33D.mjs +9 -0
- package/dist/lib/node-esm/chunk-AGHZH33D.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-BJACR7QG.mjs +363 -0
- package/dist/lib/node-esm/chunk-BJACR7QG.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-BYL2NPEA.mjs +37 -0
- package/dist/lib/node-esm/chunk-BYL2NPEA.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-CCMFPJUT.mjs +74 -0
- package/dist/lib/node-esm/chunk-CCMFPJUT.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-D5BW7KHR.mjs +39 -0
- package/dist/lib/node-esm/chunk-D5BW7KHR.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-DJX53IQ3.mjs +2924 -0
- package/dist/lib/node-esm/chunk-DJX53IQ3.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-FWTPV5QD.mjs +94 -0
- package/dist/lib/node-esm/chunk-FWTPV5QD.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-HLUDHPFO.mjs +403 -0
- package/dist/lib/node-esm/chunk-HLUDHPFO.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-JYZSF62S.mjs +113 -0
- package/dist/lib/node-esm/chunk-JYZSF62S.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-KUX5JEL2.mjs +57 -0
- package/dist/lib/node-esm/chunk-KUX5JEL2.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-LDXRA5TC.mjs +288 -0
- package/dist/lib/node-esm/chunk-LDXRA5TC.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-NHYOREKX.mjs +62 -0
- package/dist/lib/node-esm/chunk-NHYOREKX.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-QVZZHCDS.mjs +9 -0
- package/dist/lib/node-esm/chunk-QVZZHCDS.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-W3OLV7MG.mjs +41 -0
- package/dist/lib/node-esm/chunk-W3OLV7MG.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-W5AQXKVF.mjs +38 -0
- package/dist/lib/node-esm/chunk-W5AQXKVF.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-YNBFXTDG.mjs +24 -0
- package/dist/lib/node-esm/chunk-YNBFXTDG.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-Z53QIBP2.mjs +151 -0
- package/dist/lib/node-esm/chunk-Z53QIBP2.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +72 -9
- package/dist/lib/node-esm/internal/index.mjs +347 -0
- package/dist/lib/node-esm/internal/index.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/testing/index.mjs +322 -32
- 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 +179 -0
- package/dist/types/src/Database.d.ts.map +1 -0
- package/dist/types/src/Entity.d.ts +36 -0
- package/dist/types/src/Entity.d.ts.map +1 -0
- package/dist/types/src/Err.d.ts +68 -0
- 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 +152 -35
- package/dist/types/src/Obj.d.ts.map +1 -1
- package/dist/types/src/Order.d.ts +11 -0
- package/dist/types/src/Order.d.ts.map +1 -0
- package/dist/types/src/Query.d.ts +107 -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 +84 -0
- package/dist/types/src/QueryResult.d.ts.map +1 -0
- package/dist/types/src/Ref.d.ts +12 -10
- package/dist/types/src/Ref.d.ts.map +1 -1
- package/dist/types/src/Relation.d.ts +20 -14
- package/dist/types/src/Relation.d.ts.map +1 -1
- package/dist/types/src/SchemaRegistry.d.ts +73 -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 +39 -50
- package/dist/types/src/Type.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +15 -3
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/internal/annotations/annotations.d.ts +179 -0
- package/dist/types/src/internal/annotations/annotations.d.ts.map +1 -0
- package/dist/types/src/internal/annotations/annotations.test.d.ts +2 -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/entities/entity.d.ts +10 -0
- package/dist/types/src/internal/entities/entity.d.ts.map +1 -0
- package/dist/types/src/internal/entities/expando.d.ts +16 -0
- package/dist/types/src/internal/entities/expando.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 +70 -0
- package/dist/types/src/internal/entities/model.d.ts.map +1 -0
- package/dist/types/src/internal/entities/object.d.ts +11 -0
- package/dist/types/src/internal/entities/object.d.ts.map +1 -0
- package/dist/types/src/internal/entities/relation.d.ts +55 -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/date.d.ts +63 -0
- package/dist/types/src/internal/formats/date.d.ts.map +1 -0
- package/dist/types/src/internal/formats/date.test.d.ts +2 -0
- package/dist/types/src/internal/formats/date.test.d.ts.map +1 -0
- package/dist/types/src/internal/formats/format.d.ts +32 -0
- package/dist/types/src/internal/formats/format.d.ts.map +1 -0
- package/dist/types/src/internal/formats/format.test.d.ts +2 -0
- package/dist/types/src/internal/formats/format.test.d.ts.map +1 -0
- package/dist/types/src/internal/formats/index.d.ts +8 -0
- package/dist/types/src/internal/formats/index.d.ts.map +1 -0
- package/dist/types/src/internal/formats/number.d.ts +31 -0
- package/dist/types/src/internal/formats/number.d.ts.map +1 -0
- package/dist/types/src/internal/formats/object.d.ts +35 -0
- package/dist/types/src/internal/formats/object.d.ts.map +1 -0
- package/dist/types/src/internal/formats/select.d.ts +13 -0
- package/dist/types/src/internal/formats/select.d.ts.map +1 -0
- package/dist/types/src/internal/formats/string.d.ts +42 -0
- package/dist/types/src/internal/formats/string.d.ts.map +1 -0
- package/dist/types/src/internal/formats/types.d.ts +72 -0
- package/dist/types/src/internal/formats/types.d.ts.map +1 -0
- package/dist/types/src/internal/index.d.ts +11 -0
- package/dist/types/src/internal/index.d.ts.map +1 -0
- package/dist/types/src/internal/json-schema/annotations.d.ts +19 -0
- 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 +2 -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 +5 -0
- package/dist/types/src/internal/json-schema/index.d.ts.map +1 -0
- package/dist/types/src/internal/json-schema/json-schema-normalize.d.ts +7 -0
- package/dist/types/src/internal/json-schema/json-schema-normalize.d.ts.map +1 -0
- package/dist/types/src/internal/json-schema/json-schema-type.d.ts +250 -0
- package/dist/types/src/internal/json-schema/json-schema-type.d.ts.map +1 -0
- package/dist/types/src/internal/json-schema/json-schema.d.ts +29 -0
- 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 +2 -0
- package/dist/types/src/internal/json-schema/json-schema.test.d.ts.map +1 -0
- package/dist/types/src/internal/object/common.d.ts +18 -0
- package/dist/types/src/internal/object/common.d.ts.map +1 -0
- package/dist/types/src/internal/object/create-object.d.ts +39 -0
- 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 +6 -0
- package/dist/types/src/internal/object/deleted.d.ts.map +1 -0
- package/dist/types/src/internal/object/ids.d.ts +6 -0
- package/dist/types/src/internal/object/ids.d.ts.map +1 -0
- package/dist/types/src/internal/object/index.d.ts +8 -0
- package/dist/types/src/internal/object/index.d.ts.map +1 -0
- package/dist/types/src/internal/object/inspect.d.ts +2 -0
- package/dist/types/src/internal/object/inspect.d.ts.map +1 -0
- package/dist/types/src/internal/object/json-serializer.d.ts +31 -0
- package/dist/types/src/internal/object/json-serializer.d.ts.map +1 -0
- package/dist/types/src/internal/object/json-serializer.test.d.ts +2 -0
- package/dist/types/src/internal/object/json-serializer.test.d.ts.map +1 -0
- package/dist/types/src/internal/object/schema-validator.d.ts +15 -0
- package/dist/types/src/internal/object/schema-validator.d.ts.map +1 -0
- package/dist/types/src/internal/object/schema-validator.test.d.ts +2 -0
- package/dist/types/src/internal/object/schema-validator.test.d.ts.map +1 -0
- package/dist/types/src/internal/object/typed-object.d.ts +31 -0
- package/dist/types/src/internal/object/typed-object.d.ts.map +1 -0
- package/dist/types/src/internal/object/typed-object.test.d.ts +2 -0
- package/dist/types/src/internal/object/typed-object.test.d.ts.map +1 -0
- package/dist/types/src/internal/proxy/handler.test.d.ts +2 -0
- package/dist/types/src/internal/proxy/handler.test.d.ts.map +1 -0
- package/dist/types/src/internal/proxy/index.d.ts +3 -0
- package/dist/types/src/internal/proxy/index.d.ts.map +1 -0
- package/dist/types/src/internal/proxy/make-object.d.ts +16 -0
- package/dist/types/src/internal/proxy/make-object.d.ts.map +1 -0
- package/dist/types/src/internal/proxy/schema.test.d.ts +2 -0
- package/dist/types/src/internal/proxy/schema.test.d.ts.map +1 -0
- package/dist/types/src/internal/proxy/typed-handler.d.ts +44 -0
- package/dist/types/src/internal/proxy/typed-handler.d.ts.map +1 -0
- package/dist/types/src/internal/proxy/typed-handler.test.d.ts +2 -0
- package/dist/types/src/internal/proxy/typed-handler.test.d.ts.map +1 -0
- package/dist/types/src/internal/proxy/typed-object.test.d.ts +2 -0
- package/dist/types/src/internal/proxy/typed-object.test.d.ts.map +1 -0
- package/dist/types/src/internal/ref/index.d.ts +3 -0
- package/dist/types/src/internal/ref/index.d.ts.map +1 -0
- package/dist/types/src/internal/ref/ref-array.d.ts +21 -0
- package/dist/types/src/internal/ref/ref-array.d.ts.map +1 -0
- package/dist/types/src/internal/ref/ref.d.ts +209 -0
- package/dist/types/src/internal/ref/ref.d.ts.map +1 -0
- package/dist/types/src/internal/ref/ref.test.d.ts +2 -0
- package/dist/types/src/internal/ref/ref.test.d.ts.map +1 -0
- package/dist/types/src/internal/schema/compose.d.ts +6 -0
- package/dist/types/src/internal/schema/compose.d.ts.map +1 -0
- package/dist/types/src/internal/schema/compose.test.d.ts +2 -0
- package/dist/types/src/internal/schema/compose.test.d.ts.map +1 -0
- package/dist/types/src/internal/schema/echo-schema.d.ts +168 -0
- package/dist/types/src/internal/schema/echo-schema.d.ts.map +1 -0
- package/dist/types/src/internal/schema/index.d.ts +5 -0
- package/dist/types/src/internal/schema/index.d.ts.map +1 -0
- package/dist/types/src/internal/schema/manipulation.d.ts +10 -0
- package/dist/types/src/internal/schema/manipulation.d.ts.map +1 -0
- package/dist/types/src/internal/schema/persistent-schema.d.ts +18 -0
- package/dist/types/src/internal/schema/persistent-schema.d.ts.map +1 -0
- package/dist/types/src/internal/schema/snapshot.d.ts +6 -0
- package/dist/types/src/internal/schema/snapshot.d.ts.map +1 -0
- package/dist/types/src/internal/types/base.d.ts +37 -0
- package/dist/types/src/internal/types/base.d.ts.map +1 -0
- package/dist/types/src/internal/types/entity.d.ts +12 -0
- package/dist/types/src/internal/types/entity.d.ts.map +1 -0
- package/dist/types/src/internal/types/index.d.ts +6 -0
- package/dist/types/src/internal/types/index.d.ts.map +1 -0
- package/dist/types/src/internal/types/meta.d.ts +40 -0
- 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/types/version.d.ts +15 -0
- 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 -1
- 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 +407 -0
- package/dist/types/src/testing/test-schema.d.ts.map +1 -0
- package/dist/types/src/testing/util.d.ts +16 -0
- package/dist/types/src/testing/util.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +164 -33
- package/src/Annotation.ts +17 -0
- package/src/Database.ts +308 -0
- package/src/Entity.ts +51 -0
- package/src/Err.ts +18 -0
- 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.ts +407 -71
- package/src/Order.ts +34 -0
- package/src/Query.test.ts +346 -0
- package/src/Query.ts +279 -0
- package/src/QueryResult.ts +109 -0
- package/src/Ref.ts +25 -9
- package/src/Relation.ts +72 -46
- package/src/SchemaRegistry.ts +92 -0
- package/src/Tag.ts +40 -0
- package/src/Type.ts +98 -84
- package/src/index.ts +17 -4
- package/src/internal/README.md +87 -0
- package/src/internal/annotations/annotations.test.ts +96 -0
- package/src/internal/annotations/annotations.ts +488 -0
- package/src/internal/annotations/index.ts +6 -0
- package/src/internal/annotations/util.ts +72 -0
- package/src/internal/entities/entity.ts +109 -0
- package/src/internal/entities/expando.ts +23 -0
- package/src/internal/entities/index.ts +9 -0
- package/src/internal/entities/model.ts +129 -0
- package/src/internal/entities/object.ts +45 -0
- package/src/internal/entities/relation.ts +155 -0
- package/src/internal/entities/util.ts +33 -0
- package/src/internal/formats/date.test.ts +56 -0
- package/src/internal/formats/date.ts +217 -0
- package/src/internal/formats/format.test.ts +77 -0
- package/src/internal/formats/format.ts +54 -0
- package/src/internal/formats/index.ts +12 -0
- package/src/internal/formats/number.ts +89 -0
- package/src/internal/formats/object.ts +80 -0
- package/src/internal/formats/select.ts +18 -0
- package/src/internal/formats/string.ts +81 -0
- package/src/internal/formats/types.ts +186 -0
- package/src/internal/index.ts +38 -0
- package/src/internal/json-schema/annotations.ts +50 -0
- package/src/internal/json-schema/effect-schema.test.ts +143 -0
- package/src/internal/json-schema/index.ts +8 -0
- package/src/internal/json-schema/json-schema-normalize.ts +109 -0
- package/src/internal/json-schema/json-schema-type.ts +404 -0
- package/src/internal/json-schema/json-schema.test.ts +861 -0
- package/src/internal/json-schema/json-schema.ts +528 -0
- package/src/internal/object/common.ts +75 -0
- package/src/internal/object/create-object.test.ts +116 -0
- package/src/internal/object/create-object.ts +95 -0
- package/src/internal/object/deleted.ts +19 -0
- package/src/internal/object/ids.ts +12 -0
- package/src/internal/object/index.ts +11 -0
- package/src/internal/object/inspect.ts +46 -0
- package/src/internal/object/json-serializer.test.ts +94 -0
- package/src/internal/object/json-serializer.ts +230 -0
- package/src/internal/object/schema-validator.test.ts +186 -0
- package/src/internal/object/schema-validator.ts +244 -0
- package/src/internal/object/typed-object.test.ts +34 -0
- package/src/internal/object/typed-object.ts +94 -0
- package/src/internal/proxy/handler.test.ts +173 -0
- package/src/internal/proxy/index.ts +6 -0
- package/src/internal/proxy/make-object.ts +113 -0
- package/src/internal/proxy/schema.test.ts +137 -0
- package/src/internal/proxy/typed-handler.test.ts +102 -0
- package/src/internal/proxy/typed-handler.ts +233 -0
- package/src/internal/proxy/typed-object.test.ts +105 -0
- package/src/internal/ref/index.ts +6 -0
- package/src/internal/ref/ref-array.ts +39 -0
- package/src/internal/ref/ref.test.ts +101 -0
- package/src/internal/ref/ref.ts +525 -0
- package/src/internal/schema/compose.test.ts +42 -0
- package/src/internal/schema/compose.ts +37 -0
- package/src/internal/schema/echo-schema.ts +385 -0
- package/src/internal/schema/index.ts +8 -0
- package/src/internal/schema/manipulation.ts +92 -0
- package/src/internal/schema/persistent-schema.ts +28 -0
- package/src/internal/schema/snapshot.ts +25 -0
- package/src/internal/types/base.ts +57 -0
- package/src/internal/types/entity.ts +23 -0
- package/src/internal/types/index.ts +9 -0
- package/src/internal/types/meta.ts +76 -0
- package/src/internal/types/typename.ts +45 -0
- package/src/internal/types/version.ts +20 -0
- package/src/testing/api.test.ts +100 -0
- package/src/testing/index.ts +3 -1
- package/src/testing/test-data.ts +130 -0
- package/src/testing/test-schema.ts +224 -0
- package/src/testing/util.ts +78 -0
- package/dist/lib/browser/chunk-EUA7CM23.mjs +0 -619
- package/dist/lib/browser/chunk-EUA7CM23.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-IV6BWGHK.mjs +0 -619
- package/dist/lib/node-esm/chunk-IV6BWGHK.mjs.map +0 -7
- package/dist/types/src/experimental/database.d.ts +0 -8
- package/dist/types/src/experimental/database.d.ts.map +0 -1
- package/dist/types/src/experimental/index.d.ts +0 -1
- package/dist/types/src/experimental/index.d.ts.map +0 -1
- package/dist/types/src/experimental/queue.d.ts +0 -8
- package/dist/types/src/experimental/queue.d.ts.map +0 -1
- package/dist/types/src/experimental/space.d.ts +0 -8
- package/dist/types/src/experimental/space.d.ts.map +0 -1
- package/dist/types/src/query/dsl.d.ts +0 -218
- package/dist/types/src/query/dsl.d.ts.map +0 -1
- package/dist/types/src/query/dsl.test.d.ts +0 -2
- package/dist/types/src/query/dsl.test.d.ts.map +0 -1
- package/dist/types/src/query/index.d.ts +0 -2
- package/dist/types/src/query/index.d.ts.map +0 -1
- package/dist/types/src/testing/types.d.ts +0 -113
- package/dist/types/src/testing/types.d.ts.map +0 -1
- package/src/experimental/database.ts +0 -11
- package/src/experimental/index.ts +0 -7
- package/src/experimental/queue.ts +0 -11
- package/src/experimental/space.ts +0 -11
- package/src/query/dsl.test.ts +0 -323
- package/src/query/dsl.ts +0 -646
- package/src/query/index.ts +0 -5
- package/src/test/api.test.ts +0 -173
- package/src/testing/types.ts +0 -91
- /package/dist/types/src/{test → testing}/api.test.d.ts +0 -0
package/src/Obj.ts
CHANGED
|
@@ -2,161 +2,497 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
import * as Function from 'effect/Function';
|
|
6
|
+
import * as Schema from 'effect/Schema';
|
|
6
7
|
|
|
7
|
-
import
|
|
8
|
+
import { type ForeignKey } from '@dxos/echo-protocol';
|
|
8
9
|
import { assertArgument, invariant } from '@dxos/invariant';
|
|
9
|
-
import { type DXN } from '@dxos/keys';
|
|
10
|
-
import
|
|
11
|
-
import {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
import
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
10
|
+
import { type DXN, ObjectId } from '@dxos/keys';
|
|
11
|
+
import { getSnapshot as getSnapshot$ } from '@dxos/live-object';
|
|
12
|
+
import { assumeType, deepMapValues } from '@dxos/util';
|
|
13
|
+
|
|
14
|
+
import * as Entity from './Entity';
|
|
15
|
+
import {
|
|
16
|
+
type AnyEchoObject,
|
|
17
|
+
type AnyProperties,
|
|
18
|
+
type InternalObjectProps,
|
|
19
|
+
MetaId,
|
|
20
|
+
type ObjectJSON,
|
|
21
|
+
type ObjectMeta,
|
|
22
|
+
ObjectVersionId,
|
|
23
|
+
VersionTypeId,
|
|
24
|
+
getDescription as getDescription$,
|
|
25
|
+
getLabel as getLabel$,
|
|
26
|
+
getMeta as getMeta$,
|
|
27
|
+
getObjectDXN,
|
|
28
|
+
getSchema as getSchema$,
|
|
29
|
+
getSchemaTypename,
|
|
30
|
+
getTypeAnnotation,
|
|
31
|
+
getTypeDXN as getTypeDXN$,
|
|
32
|
+
isDeleted as isDeleted$,
|
|
33
|
+
isInstanceOf,
|
|
34
|
+
makeObject,
|
|
35
|
+
objectFromJSON,
|
|
36
|
+
objectToJSON,
|
|
37
|
+
setDescription as setDescription$,
|
|
38
|
+
setLabel as setLabel$,
|
|
39
|
+
} from './internal';
|
|
40
|
+
import * as Ref from './Ref';
|
|
41
|
+
import * as Type from './Type';
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Base type for all ECHO objects.
|
|
45
|
+
* @private
|
|
46
|
+
*/
|
|
47
|
+
interface BaseObj extends AnyEchoObject, Entity.OfKind<typeof Entity.Kind.Object> {}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Base type for all Obj objects.
|
|
51
|
+
*/
|
|
52
|
+
export interface Any extends BaseObj {}
|
|
53
|
+
|
|
54
|
+
export const Any = Schema.Struct({}).pipe(
|
|
55
|
+
Type.Obj({
|
|
56
|
+
typename: 'dxos.org/type/Any',
|
|
57
|
+
version: '0.1.0',
|
|
58
|
+
}),
|
|
59
|
+
);
|
|
22
60
|
|
|
23
61
|
/**
|
|
24
62
|
* Object type with specific properties.
|
|
25
63
|
*/
|
|
26
|
-
export type Obj<Props> =
|
|
64
|
+
export type Obj<Props> = BaseObj & Props;
|
|
27
65
|
|
|
28
66
|
/**
|
|
29
|
-
*
|
|
67
|
+
* Object with arbitrary properties.
|
|
68
|
+
*
|
|
69
|
+
* NOTE: Due to how typescript works, this type is not assignable to a specific schema type.
|
|
70
|
+
* In that case, use `Obj.instanceOf` to check if an object is of a specific type.
|
|
30
71
|
*/
|
|
31
|
-
export interface
|
|
72
|
+
export interface AnyProps extends BaseObj, AnyProperties {}
|
|
73
|
+
|
|
74
|
+
const defaultMeta: ObjectMeta = {
|
|
75
|
+
keys: [],
|
|
76
|
+
};
|
|
32
77
|
|
|
33
|
-
type Props<T> = {
|
|
78
|
+
type Props<T = any> = {
|
|
79
|
+
id?: ObjectId;
|
|
80
|
+
[Meta]?: Partial<ObjectMeta>;
|
|
81
|
+
} & Type.Properties<T>;
|
|
34
82
|
|
|
35
|
-
|
|
83
|
+
// TODO(burdon): Should we allow the caller to set the id?
|
|
84
|
+
export type MakeProps<T extends Schema.Schema.AnyNoContext> = {
|
|
85
|
+
id?: ObjectId;
|
|
86
|
+
[Meta]?: Partial<ObjectMeta>;
|
|
87
|
+
} & NoInfer<Props<Schema.Schema.Type<T>>>;
|
|
36
88
|
|
|
37
89
|
/**
|
|
38
|
-
* Creates new object.
|
|
90
|
+
* Creates a new object of the given types.
|
|
91
|
+
* @param schema - Object schema.
|
|
92
|
+
* @param props - Object properties.
|
|
93
|
+
* @param meta - Object metadata (deprecated) -- pass with Obj.Meta.
|
|
94
|
+
*
|
|
95
|
+
* Meta can be passed as a symbol in `props`.
|
|
96
|
+
*
|
|
97
|
+
* Example:
|
|
98
|
+
* ```ts
|
|
99
|
+
* const obj = Obj.make(Person, { [Obj.Meta]: { keys: [...] }, name: 'John' });
|
|
100
|
+
* ```
|
|
39
101
|
*/
|
|
40
|
-
|
|
41
|
-
export const make = <S extends Type.Obj.Any>(
|
|
102
|
+
export const make = <S extends Schema.Schema.AnyNoContext>(
|
|
42
103
|
schema: S,
|
|
43
104
|
props: MakeProps<S>,
|
|
44
|
-
meta?:
|
|
45
|
-
):
|
|
46
|
-
assertArgument(
|
|
47
|
-
EchoSchema.getTypeAnnotation(schema)?.kind === EchoSchema.EntityKind.Object,
|
|
48
|
-
'Expected an object schema',
|
|
49
|
-
);
|
|
105
|
+
meta?: Partial<ObjectMeta>,
|
|
106
|
+
): Obj<Schema.Schema.Type<S>> => {
|
|
107
|
+
assertArgument(getTypeAnnotation(schema)?.kind === Entity.Kind.Object, 'schema', 'Expected an object schema');
|
|
50
108
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
109
|
+
// Set default fields on meta on creation.
|
|
110
|
+
if (props[MetaId] != null) {
|
|
111
|
+
meta = { ...structuredClone(defaultMeta), ...props[MetaId] };
|
|
112
|
+
delete props[MetaId];
|
|
54
113
|
}
|
|
55
114
|
|
|
56
|
-
|
|
115
|
+
// Filter undefined values.
|
|
116
|
+
const filterUndefined = Object.fromEntries(Object.entries(props).filter(([_, v]) => v !== undefined));
|
|
117
|
+
|
|
118
|
+
return makeObject<Schema.Schema.Type<S>>(schema, filterUndefined as any, {
|
|
119
|
+
...defaultMeta,
|
|
120
|
+
...meta,
|
|
121
|
+
});
|
|
57
122
|
};
|
|
58
123
|
|
|
124
|
+
/**
|
|
125
|
+
* Determine if object is an ECHO object.
|
|
126
|
+
*/
|
|
59
127
|
export const isObject = (obj: unknown): obj is Any => {
|
|
60
|
-
assumeType<
|
|
61
|
-
return typeof obj === 'object' && obj !== null && obj[
|
|
128
|
+
assumeType<InternalObjectProps>(obj);
|
|
129
|
+
return typeof obj === 'object' && obj !== null && obj[Entity.KindId] === Entity.Kind.Object;
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
//
|
|
133
|
+
// Snapshot
|
|
134
|
+
//
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Returns an immutable snapshot of an object.
|
|
138
|
+
*/
|
|
139
|
+
export const getSnapshot: <T extends Any>(obj: Obj<T>) => T = getSnapshot$;
|
|
140
|
+
|
|
141
|
+
export type CloneOptions = {
|
|
142
|
+
/**
|
|
143
|
+
* Retain the original object's ID.
|
|
144
|
+
* @default false
|
|
145
|
+
*/
|
|
146
|
+
retainId?: boolean;
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Clones an object or relation.
|
|
151
|
+
* This does not clone referenced objects, only the properties in the object.
|
|
152
|
+
* @returns A new object with the same schema and properties.
|
|
153
|
+
*/
|
|
154
|
+
export const clone = <T extends Any>(obj: T, opts?: CloneOptions): T => {
|
|
155
|
+
const { id, ...data } = obj;
|
|
156
|
+
const schema = getSchema$(obj);
|
|
157
|
+
invariant(schema != null, 'Object should have a schema');
|
|
158
|
+
const props: any = deepMapValues(data, (value, recurse) => {
|
|
159
|
+
if (Ref.isRef(value)) {
|
|
160
|
+
return value;
|
|
161
|
+
}
|
|
162
|
+
return recurse(value);
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
if (opts?.retainId) {
|
|
166
|
+
props.id = id;
|
|
167
|
+
}
|
|
168
|
+
const meta = getMeta(obj);
|
|
169
|
+
props[MetaId] = deepMapValues(meta, (value, recurse) => {
|
|
170
|
+
if (Ref.isRef(value)) {
|
|
171
|
+
return value;
|
|
172
|
+
}
|
|
173
|
+
return recurse(value);
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
return make(schema as Type.Obj.Any, props);
|
|
62
177
|
};
|
|
63
178
|
|
|
179
|
+
//
|
|
180
|
+
// Type
|
|
181
|
+
//
|
|
182
|
+
|
|
183
|
+
// TODO(burdon): To discuss: prefer over ObjectId or Key.ObjectId or Type.ID?
|
|
184
|
+
export const ID = ObjectId;
|
|
185
|
+
export type ID = ObjectId;
|
|
186
|
+
|
|
64
187
|
/**
|
|
65
188
|
* Test if object or relation is an instance of a schema.
|
|
66
189
|
* @example
|
|
67
190
|
* ```ts
|
|
68
191
|
* const john = Obj.make(Person, { name: 'John' });
|
|
69
|
-
* const johnIsPerson = Obj.instanceOf(Person)(john);
|
|
70
|
-
*
|
|
71
192
|
* const isPerson = Obj.instanceOf(Person);
|
|
72
|
-
* if(isPerson(john)) {
|
|
193
|
+
* if (isPerson(john)) {
|
|
73
194
|
* // john is Person
|
|
74
195
|
* }
|
|
75
196
|
* ```
|
|
76
197
|
*/
|
|
77
198
|
export const instanceOf: {
|
|
78
|
-
<S extends Type.
|
|
79
|
-
<S extends Type.
|
|
80
|
-
} = ((
|
|
81
|
-
...args: [schema: Type.Relation.Any | Type.Obj.Any, value: unknown] | [schema: Type.Relation.Any | Type.Obj.Any]
|
|
82
|
-
) => {
|
|
199
|
+
<S extends Type.Entity.Any>(schema: S): (value: unknown) => value is Schema.Schema.Type<S>;
|
|
200
|
+
<S extends Type.Entity.Any>(schema: S, value: unknown): value is Schema.Schema.Type<S>;
|
|
201
|
+
} = ((...args: [schema: Type.Entity.Any, value: unknown] | [schema: Type.Entity.Any]) => {
|
|
83
202
|
if (args.length === 1) {
|
|
84
|
-
return (
|
|
203
|
+
return (entity: unknown) => isInstanceOf(args[0], entity);
|
|
85
204
|
}
|
|
86
205
|
|
|
87
|
-
return
|
|
206
|
+
return isInstanceOf(args[0], args[1]);
|
|
88
207
|
}) as any;
|
|
89
208
|
|
|
90
|
-
export const getSchema = EchoSchema.getSchema;
|
|
91
|
-
|
|
92
209
|
// TODO(dmaretskyi): Allow returning undefined.
|
|
93
|
-
export const getDXN = (
|
|
94
|
-
assertArgument(!Schema.isSchema(
|
|
95
|
-
const dxn =
|
|
210
|
+
export const getDXN = (entity: Entity.Unknown): DXN => {
|
|
211
|
+
assertArgument(!Schema.isSchema(entity), 'obj', 'Object should not be a schema.');
|
|
212
|
+
const dxn = getObjectDXN(entity);
|
|
96
213
|
invariant(dxn != null, 'Invalid object.');
|
|
97
214
|
return dxn;
|
|
98
215
|
};
|
|
99
216
|
|
|
100
217
|
/**
|
|
101
218
|
* @returns The DXN of the object's type.
|
|
102
|
-
* @example dxn:example.com/type/
|
|
219
|
+
* @example dxn:example.com/type/Person:1.0.0
|
|
220
|
+
*/
|
|
221
|
+
// TODO(burdon): Must define and return type for expando.
|
|
222
|
+
export const getTypeDXN = getTypeDXN$;
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Get the schema of the object.
|
|
103
226
|
*/
|
|
104
|
-
|
|
105
|
-
export const getTypeDXN = EchoSchema.getType;
|
|
227
|
+
export const getSchema = getSchema$;
|
|
106
228
|
|
|
107
229
|
/**
|
|
108
230
|
* @returns The typename of the object's type.
|
|
109
|
-
* @example `example.com/type/
|
|
231
|
+
* @example `example.com/type/Person`
|
|
110
232
|
*/
|
|
111
|
-
export const getTypename = (
|
|
112
|
-
const schema = getSchema(
|
|
233
|
+
export const getTypename = (entity: Entity.Unknown): string | undefined => {
|
|
234
|
+
const schema = getSchema$(entity);
|
|
113
235
|
if (schema == null) {
|
|
114
236
|
// Try to extract typename from DXN.
|
|
115
|
-
return
|
|
237
|
+
return getTypeDXN$(entity)?.asTypeDXN()?.type;
|
|
116
238
|
}
|
|
117
239
|
|
|
118
|
-
return
|
|
240
|
+
return getSchemaTypename(schema);
|
|
119
241
|
};
|
|
120
242
|
|
|
243
|
+
//
|
|
244
|
+
// Meta
|
|
245
|
+
//
|
|
246
|
+
|
|
247
|
+
export const Meta: unique symbol = MetaId as any;
|
|
248
|
+
|
|
249
|
+
// TODO(burdon): Narrow type.
|
|
121
250
|
// TODO(dmaretskyi): Allow returning undefined.
|
|
122
|
-
export const getMeta = (
|
|
123
|
-
const meta =
|
|
251
|
+
export const getMeta = (entity: AnyProperties): ObjectMeta => {
|
|
252
|
+
const meta = getMeta$(entity);
|
|
124
253
|
invariant(meta != null, 'Invalid object.');
|
|
125
254
|
return meta;
|
|
126
255
|
};
|
|
127
256
|
|
|
257
|
+
/**
|
|
258
|
+
* @returns Foreign keys for the object from the specified source.
|
|
259
|
+
*/
|
|
260
|
+
export const getKeys: {
|
|
261
|
+
(entity: Entity.Unknown, source: string): ForeignKey[];
|
|
262
|
+
(source: string): (entity: Entity.Unknown) => ForeignKey[];
|
|
263
|
+
} = Function.dual(2, (entity: Entity.Unknown, source?: string): ForeignKey[] => {
|
|
264
|
+
const meta = getMeta(entity);
|
|
265
|
+
invariant(meta != null, 'Invalid object.');
|
|
266
|
+
return meta.keys.filter((key) => key.source === source);
|
|
267
|
+
});
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* Delete all keys from the object for the specified source.
|
|
271
|
+
* @param entity
|
|
272
|
+
* @param source
|
|
273
|
+
*/
|
|
274
|
+
export const deleteKeys = (entity: Entity.Unknown, source: string) => {
|
|
275
|
+
const meta = getMeta(entity);
|
|
276
|
+
for (let i = 0; i < meta.keys.length; i++) {
|
|
277
|
+
if (meta.keys[i].source === source) {
|
|
278
|
+
meta.keys.splice(i, 1);
|
|
279
|
+
i--;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
};
|
|
283
|
+
|
|
284
|
+
export const addTag = (entity: Entity.Unknown, tag: string) => {
|
|
285
|
+
const meta = getMeta(entity);
|
|
286
|
+
meta.tags ??= [];
|
|
287
|
+
meta.tags.push(tag);
|
|
288
|
+
};
|
|
289
|
+
|
|
290
|
+
export const removeTag = (entity: Entity.Unknown, tag: string) => {
|
|
291
|
+
const meta = getMeta(entity);
|
|
292
|
+
if (!meta.tags) {
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
for (let i = 0; i < meta.tags.length; i++) {
|
|
296
|
+
if (meta.tags[i] === tag) {
|
|
297
|
+
meta.tags.splice(i, 1);
|
|
298
|
+
i--;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
};
|
|
302
|
+
|
|
128
303
|
// TODO(dmaretskyi): Default to `false`.
|
|
129
|
-
export const isDeleted = (
|
|
130
|
-
const deleted =
|
|
304
|
+
export const isDeleted = (entity: Entity.Unknown): boolean => {
|
|
305
|
+
const deleted = isDeleted$(entity);
|
|
131
306
|
invariant(typeof deleted === 'boolean', 'Invalid object.');
|
|
132
307
|
return deleted;
|
|
133
308
|
};
|
|
134
309
|
|
|
135
|
-
//
|
|
136
|
-
|
|
137
|
-
|
|
310
|
+
//
|
|
311
|
+
// Annotations
|
|
312
|
+
//
|
|
313
|
+
|
|
314
|
+
export const getLabel = (entity: Entity.Unknown): string | undefined => {
|
|
315
|
+
const schema = getSchema$(entity);
|
|
138
316
|
if (schema != null) {
|
|
139
|
-
return
|
|
317
|
+
return getLabel$(schema, entity);
|
|
140
318
|
}
|
|
141
319
|
};
|
|
142
320
|
|
|
321
|
+
export const setLabel = (entity: Entity.Unknown, label: string) => {
|
|
322
|
+
const schema = getSchema$(entity);
|
|
323
|
+
if (schema != null) {
|
|
324
|
+
setLabel$(schema, entity, label);
|
|
325
|
+
}
|
|
326
|
+
};
|
|
327
|
+
|
|
328
|
+
export const getDescription = (entity: Entity.Unknown): string | undefined => {
|
|
329
|
+
const schema = getSchema$(entity);
|
|
330
|
+
if (schema != null) {
|
|
331
|
+
return getDescription$(schema, entity);
|
|
332
|
+
}
|
|
333
|
+
};
|
|
334
|
+
|
|
335
|
+
export const setDescription = (entity: Entity.Unknown, description: string) => {
|
|
336
|
+
const schema = getSchema$(entity);
|
|
337
|
+
if (schema != null) {
|
|
338
|
+
setDescription$(schema, entity, description);
|
|
339
|
+
}
|
|
340
|
+
};
|
|
341
|
+
|
|
342
|
+
//
|
|
343
|
+
// JSON
|
|
344
|
+
//
|
|
345
|
+
|
|
143
346
|
/**
|
|
144
347
|
* JSON representation of an object.
|
|
145
348
|
*/
|
|
146
|
-
export type JSON =
|
|
349
|
+
export type JSON = ObjectJSON;
|
|
147
350
|
|
|
148
351
|
/**
|
|
149
352
|
* Converts object to its JSON representation.
|
|
150
353
|
*
|
|
151
354
|
* The same algorithm is used when calling the standard `JSON.stringify(obj)` function.
|
|
152
355
|
*/
|
|
153
|
-
export const toJSON = (
|
|
356
|
+
export const toJSON = (entity: Entity.Unknown): JSON => objectToJSON(entity);
|
|
154
357
|
|
|
155
358
|
/**
|
|
156
359
|
* Creates an object from its json representation, performing schema validation.
|
|
157
360
|
* References and schemas will be resolvable if the `refResolver` is provided.
|
|
158
361
|
*
|
|
159
|
-
* The function
|
|
362
|
+
* The function must be async to support resolving the schema as well as the relation endpoints.
|
|
363
|
+
*
|
|
364
|
+
* @param options.refResolver - Resolver for references. Produces hydrated references that can be resolved.
|
|
365
|
+
* @param options.dxn - Override object DXN. Changes the result of `Obj.getDXN`.
|
|
366
|
+
*/
|
|
367
|
+
export const fromJSON: (json: unknown, options?: { refResolver?: Ref.Resolver; dxn?: DXN }) => Promise<Any> =
|
|
368
|
+
objectFromJSON as any;
|
|
369
|
+
|
|
370
|
+
//
|
|
371
|
+
// Sorting
|
|
372
|
+
//
|
|
373
|
+
|
|
374
|
+
const compare = (a?: string, b?: string) => {
|
|
375
|
+
if (a == null) {
|
|
376
|
+
return b == null ? 0 : 1;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
if (b == null) {
|
|
380
|
+
return -1;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
return a.localeCompare(b);
|
|
384
|
+
};
|
|
385
|
+
|
|
386
|
+
export type Comparator = (a: Entity.Unknown, b: Entity.Unknown) => number;
|
|
387
|
+
|
|
388
|
+
export const sortByLabel: Comparator = (a: Entity.Unknown, b: Entity.Unknown) => compare(getLabel(a), getLabel(b));
|
|
389
|
+
export const sortByTypename: Comparator = (a: Entity.Unknown, b: Entity.Unknown) =>
|
|
390
|
+
compare(getTypename(a), getTypename(b));
|
|
391
|
+
export const sort = (...comparators: Comparator[]): Comparator => {
|
|
392
|
+
return (a: Entity.Unknown, b: Entity.Unknown) => {
|
|
393
|
+
for (const comparator of comparators) {
|
|
394
|
+
const result = comparator(a, b);
|
|
395
|
+
if (result !== 0) {
|
|
396
|
+
return result;
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
return 0;
|
|
401
|
+
};
|
|
402
|
+
};
|
|
403
|
+
|
|
404
|
+
//
|
|
405
|
+
// Version
|
|
406
|
+
//
|
|
407
|
+
|
|
408
|
+
/**
|
|
409
|
+
* Unique symbol for version type identification.
|
|
410
|
+
*/
|
|
411
|
+
export { VersionTypeId };
|
|
412
|
+
|
|
413
|
+
/**
|
|
414
|
+
* Represent object version.
|
|
415
|
+
* May be backed by Automerge.
|
|
416
|
+
* Objects with no history are not versioned.
|
|
160
417
|
*/
|
|
161
|
-
export
|
|
162
|
-
|
|
418
|
+
export interface Version {
|
|
419
|
+
[VersionTypeId]: {};
|
|
420
|
+
|
|
421
|
+
/**
|
|
422
|
+
* Whether the object is versioned.
|
|
423
|
+
*/
|
|
424
|
+
versioned: boolean;
|
|
425
|
+
|
|
426
|
+
/**
|
|
427
|
+
* Automerge heads.
|
|
428
|
+
*/
|
|
429
|
+
automergeHeads?: string[];
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
const unversioned: Version = {
|
|
433
|
+
[VersionTypeId]: {},
|
|
434
|
+
versioned: false,
|
|
435
|
+
};
|
|
436
|
+
|
|
437
|
+
/**
|
|
438
|
+
* Checks that `obj` is a version object.
|
|
439
|
+
*/
|
|
440
|
+
export const isVersion = (entity: unknown): entity is Version => {
|
|
441
|
+
return entity != null && typeof entity === 'object' && VersionTypeId in entity;
|
|
442
|
+
};
|
|
443
|
+
|
|
444
|
+
/**
|
|
445
|
+
* Returns the version of the object.
|
|
446
|
+
*/
|
|
447
|
+
export const version = (entity: Entity.Unknown): Version => {
|
|
448
|
+
const version = (entity as any)[ObjectVersionId];
|
|
449
|
+
if (version === undefined) {
|
|
450
|
+
return unversioned;
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
return version;
|
|
454
|
+
};
|
|
455
|
+
|
|
456
|
+
/**
|
|
457
|
+
* Checks that `version` is a valid version object.
|
|
458
|
+
*/
|
|
459
|
+
export const versionValid = (version: Version): boolean => {
|
|
460
|
+
assertArgument(isVersion(version), 'version', 'Invalid version object');
|
|
461
|
+
return !!version.versioned;
|
|
462
|
+
};
|
|
463
|
+
|
|
464
|
+
export type VersionCompareResult = 'unversioned' | 'equal' | 'different';
|
|
465
|
+
|
|
466
|
+
/**
|
|
467
|
+
* Compares two versions.
|
|
468
|
+
* @param version1
|
|
469
|
+
* @param version2
|
|
470
|
+
* @returns 'unversioned' if either object is unversioned, 'equal' if the versions are equal, 'different' if the versions are different.
|
|
471
|
+
*/
|
|
472
|
+
export const compareVersions = (version1: Version, version2: Version): VersionCompareResult => {
|
|
473
|
+
assertArgument(isVersion(version1), 'version1', 'Invalid version object');
|
|
474
|
+
assertArgument(isVersion(version2), 'version2', 'Invalid version object');
|
|
475
|
+
|
|
476
|
+
if (!versionValid(version1) || !versionValid(version2)) {
|
|
477
|
+
return 'unversioned';
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
if (version1.automergeHeads?.length !== version2.automergeHeads?.length) {
|
|
481
|
+
return 'different';
|
|
482
|
+
}
|
|
483
|
+
if (version1.automergeHeads?.some((head) => !version2.automergeHeads?.includes(head))) {
|
|
484
|
+
return 'different';
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
return 'equal';
|
|
488
|
+
};
|
|
489
|
+
|
|
490
|
+
export const encodeVersion = (version: Version): string => {
|
|
491
|
+
return JSON.stringify(version);
|
|
492
|
+
};
|
|
493
|
+
|
|
494
|
+
export const decodeVersion = (version: string): Version => {
|
|
495
|
+
const parsed = JSON.parse(version);
|
|
496
|
+
parsed[VersionTypeId] = {};
|
|
497
|
+
return parsed;
|
|
498
|
+
};
|
package/src/Order.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { type QueryAST } from '@dxos/echo-protocol';
|
|
6
|
+
|
|
7
|
+
export interface Order<T> {
|
|
8
|
+
// TODO(dmaretskyi): See new effect-schema approach to variance.
|
|
9
|
+
'~Order': { value: T };
|
|
10
|
+
|
|
11
|
+
ast: QueryAST.Order;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export type Any = Order<any>;
|
|
15
|
+
|
|
16
|
+
class OrderClass implements Order<any> {
|
|
17
|
+
private static variance: Order<any>['~Order'] = {} as Order<any>['~Order'];
|
|
18
|
+
|
|
19
|
+
static is(value: unknown): value is Order<any> {
|
|
20
|
+
return typeof value === 'object' && value !== null && '~Order' in value;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
constructor(public readonly ast: QueryAST.Order) {}
|
|
24
|
+
|
|
25
|
+
'~Order' = OrderClass.variance;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export const natural: Order<any> = new OrderClass({ kind: 'natural' });
|
|
29
|
+
export const property = <T>(property: keyof T & string, direction: QueryAST.OrderDirection): Order<T> =>
|
|
30
|
+
new OrderClass({
|
|
31
|
+
kind: 'property',
|
|
32
|
+
property,
|
|
33
|
+
direction,
|
|
34
|
+
});
|