@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
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { type CleanupFn } from '@dxos/async';
|
|
6
|
+
|
|
7
|
+
import type * as Entity from './Entity';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Individual query result entry.
|
|
11
|
+
*/
|
|
12
|
+
export type Entry<T> = {
|
|
13
|
+
id: string;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* May not be present for remote results.
|
|
17
|
+
*/
|
|
18
|
+
result?: T;
|
|
19
|
+
|
|
20
|
+
match?: {
|
|
21
|
+
// TODO(dmaretskyi): text positional info.
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Higher means better match.
|
|
25
|
+
*/
|
|
26
|
+
rank: number;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Query resolution metadata.
|
|
31
|
+
*/
|
|
32
|
+
// TODO(dmaretskyi): Rename to meta?
|
|
33
|
+
resolution?: {
|
|
34
|
+
// TODO(dmaretskyi): Make this more generic.
|
|
35
|
+
source: 'remote' | 'local' | 'index';
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Query resolution time in milliseconds.
|
|
39
|
+
*/
|
|
40
|
+
time: number;
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Invidual query result entry for a database Entity.
|
|
46
|
+
*/
|
|
47
|
+
export type EntityEntry<T extends Entity.Unknown = Entity.Unknown> = Entry<T>;
|
|
48
|
+
|
|
49
|
+
export type RunOptions = {
|
|
50
|
+
timeout?: number;
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
export type SubscriptionOptions = {
|
|
54
|
+
/**
|
|
55
|
+
* Fire the callback immediately.
|
|
56
|
+
*/
|
|
57
|
+
fire?: boolean;
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
export interface QueryResult<T> {
|
|
61
|
+
/**
|
|
62
|
+
* Currently available results along with their match metadata.
|
|
63
|
+
*
|
|
64
|
+
* @reactive
|
|
65
|
+
*/
|
|
66
|
+
readonly entries: Entry<T>[];
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Currently available results.
|
|
70
|
+
*
|
|
71
|
+
* @reactive
|
|
72
|
+
*/
|
|
73
|
+
readonly results: T[];
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Returns all known results.
|
|
77
|
+
*/
|
|
78
|
+
run(opts?: RunOptions): Promise<T[]>;
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Returns all known results along with their match metadata.
|
|
82
|
+
*/
|
|
83
|
+
runEntries(opts?: RunOptions): Promise<Entry<T>[]>;
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Returns currently available results synchronously.
|
|
87
|
+
*/
|
|
88
|
+
runSync(): T[];
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Returns currently available results synchronously along with their match metadata.
|
|
92
|
+
*/
|
|
93
|
+
runSyncEntries(): Entry<T>[];
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Returns first result.
|
|
97
|
+
*/
|
|
98
|
+
first(opts?: RunOptions): Promise<T>;
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Returns first result if there is one.
|
|
102
|
+
*/
|
|
103
|
+
firstOrUndefined(opts?: RunOptions): Promise<T | undefined>;
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Subscribes to changes in query results.
|
|
107
|
+
*/
|
|
108
|
+
subscribe(callback?: (query: QueryResult<T>) => void, opts?: SubscriptionOptions): CleanupFn;
|
|
109
|
+
}
|
package/src/Ref.ts
CHANGED
|
@@ -2,28 +2,44 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import * as
|
|
5
|
+
import * as Option from 'effect/Option';
|
|
6
|
+
import * as SchemaAST from 'effect/SchemaAST';
|
|
6
7
|
|
|
8
|
+
import { Ref as Ref$, RefArray, type RefResolver } from './internal';
|
|
9
|
+
import { getSchemaReference } from './internal';
|
|
10
|
+
import type * as JsonSchema from './JsonSchema';
|
|
7
11
|
import type * as Obj from './Obj';
|
|
8
12
|
|
|
9
|
-
export type Ref<T> =
|
|
10
|
-
export type Any =
|
|
13
|
+
export type Ref<T> = Ref$<T>;
|
|
14
|
+
export type Any = Ref$<Obj.Any>;
|
|
11
15
|
|
|
12
|
-
export const Array =
|
|
16
|
+
export const Array = RefArray;
|
|
13
17
|
|
|
14
18
|
/**
|
|
15
19
|
* Extract reference target.
|
|
16
20
|
*/
|
|
17
|
-
export type Target<R extends Any> = R extends
|
|
21
|
+
export type Target<R extends Any> = R extends Ref$<infer T> ? T : never;
|
|
18
22
|
|
|
19
23
|
/**
|
|
20
24
|
* Reference resolver.
|
|
21
25
|
*/
|
|
22
|
-
export type Resolver =
|
|
26
|
+
export type Resolver = RefResolver;
|
|
23
27
|
|
|
24
|
-
export const isRef: (value: unknown) => value is Any =
|
|
28
|
+
export const isRef: (value: unknown) => value is Any = Ref$.isRef;
|
|
25
29
|
|
|
26
|
-
export const make =
|
|
30
|
+
export const make = Ref$.make;
|
|
27
31
|
|
|
28
32
|
// TODO(dmaretskyi): Consider just allowing `make` to accept DXN.
|
|
29
|
-
export const fromDXN =
|
|
33
|
+
export const fromDXN = Ref$.fromDXN;
|
|
34
|
+
|
|
35
|
+
// TODO(wittjosiah): Factor out?
|
|
36
|
+
export const isRefType = (ast: SchemaAST.AST): boolean => {
|
|
37
|
+
return SchemaAST.getAnnotation<JsonSchema.JsonSchema>(ast, SchemaAST.JSONSchemaAnnotationId).pipe(
|
|
38
|
+
Option.flatMap((jsonSchema) => ('$id' in jsonSchema ? Option.some(jsonSchema) : Option.none())),
|
|
39
|
+
Option.flatMap((jsonSchema) => {
|
|
40
|
+
const { typename } = getSchemaReference(jsonSchema) ?? {};
|
|
41
|
+
return typename ? Option.some(true) : Option.some(false);
|
|
42
|
+
}),
|
|
43
|
+
Option.getOrElse(() => false),
|
|
44
|
+
);
|
|
45
|
+
};
|
package/src/Relation.ts
CHANGED
|
@@ -2,43 +2,71 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
import * as Schema from 'effect/Schema';
|
|
6
6
|
|
|
7
7
|
import { raise } from '@dxos/debug';
|
|
8
|
-
import * as EchoSchema from '@dxos/echo-schema';
|
|
9
8
|
import { assertArgument, invariant } from '@dxos/invariant';
|
|
10
|
-
import { DXN } from '@dxos/keys';
|
|
11
|
-
import { type Live
|
|
9
|
+
import { DXN, type ObjectId } from '@dxos/keys';
|
|
10
|
+
import { type Live } from '@dxos/live-object';
|
|
12
11
|
import { assumeType } from '@dxos/util';
|
|
13
12
|
|
|
14
|
-
import
|
|
15
|
-
import
|
|
13
|
+
import * as Entity from './Entity';
|
|
14
|
+
import {
|
|
15
|
+
ATTR_RELATION_SOURCE,
|
|
16
|
+
ATTR_RELATION_TARGET,
|
|
17
|
+
type AnyEchoObject,
|
|
18
|
+
EntityKind,
|
|
19
|
+
type InternalObjectProps,
|
|
20
|
+
MetaId,
|
|
21
|
+
type ObjectMeta,
|
|
22
|
+
RelationSourceDXNId,
|
|
23
|
+
RelationSourceId,
|
|
24
|
+
RelationTargetDXNId,
|
|
25
|
+
RelationTargetId,
|
|
26
|
+
getObjectDXN,
|
|
27
|
+
getTypeAnnotation,
|
|
28
|
+
makeObject,
|
|
29
|
+
} from './internal';
|
|
30
|
+
import * as Obj from './Obj';
|
|
31
|
+
import * as Type from './Type';
|
|
16
32
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
33
|
+
/**
|
|
34
|
+
* Base type for all ECHO relations.
|
|
35
|
+
* @private
|
|
36
|
+
*/
|
|
37
|
+
interface BaseRelation<Source, Target>
|
|
38
|
+
extends AnyEchoObject,
|
|
39
|
+
Type.Relation.Endpoints<Source, Target>,
|
|
40
|
+
Entity.OfKind<EntityKind.Relation> {}
|
|
23
41
|
|
|
24
42
|
/**
|
|
25
|
-
*
|
|
43
|
+
* Base type for all Relations objects.
|
|
26
44
|
*/
|
|
27
|
-
export
|
|
45
|
+
export interface Any extends BaseRelation<Obj.Any, Obj.Any> {}
|
|
46
|
+
|
|
47
|
+
export const Any = Schema.Struct({}).pipe(
|
|
48
|
+
Type.Relation({
|
|
49
|
+
typename: 'dxos.org/type/Any',
|
|
50
|
+
version: '0.1.0',
|
|
51
|
+
source: Obj.Any,
|
|
52
|
+
target: Obj.Any,
|
|
53
|
+
}),
|
|
54
|
+
);
|
|
28
55
|
|
|
29
56
|
/**
|
|
30
|
-
*
|
|
57
|
+
* Relation type with specific source and target types.
|
|
31
58
|
*/
|
|
32
|
-
export
|
|
59
|
+
export type Relation<Source extends Obj.Any, Target extends Obj.Any, Props> = BaseRelation<Source, Target> & Props;
|
|
33
60
|
|
|
34
|
-
|
|
35
|
-
export const Source: unique symbol = EchoSchema.RelationSourceId as any;
|
|
61
|
+
export const Source: unique symbol = RelationSourceId as any;
|
|
36
62
|
export type Source = typeof Source;
|
|
37
|
-
|
|
63
|
+
|
|
64
|
+
export const Target: unique symbol = RelationTargetId as any;
|
|
38
65
|
export type Target = typeof Target;
|
|
39
66
|
|
|
40
67
|
type MakeProps<T extends Any> = {
|
|
41
|
-
id?:
|
|
68
|
+
id?: ObjectId;
|
|
69
|
+
[MetaId]?: ObjectMeta;
|
|
42
70
|
[Source]: T[Source];
|
|
43
71
|
[Target]: T[Target];
|
|
44
72
|
} & Type.Properties<T>;
|
|
@@ -55,36 +83,34 @@ type MakeProps<T extends Any> = {
|
|
|
55
83
|
export const make = <S extends Type.Relation.Any>(
|
|
56
84
|
schema: S,
|
|
57
85
|
props: NoInfer<MakeProps<Schema.Schema.Type<S>>>,
|
|
58
|
-
meta?:
|
|
59
|
-
): Live<Schema.Schema.Type<S> &
|
|
60
|
-
assertArgument(
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
if (props[EchoSchema.MetaId] != null) {
|
|
66
|
-
meta = props[EchoSchema.MetaId] as any;
|
|
67
|
-
delete props[EchoSchema.MetaId];
|
|
86
|
+
meta?: ObjectMeta,
|
|
87
|
+
): Live<Schema.Schema.Type<S> & Entity.OfKind<typeof Entity.Kind.Relation>> => {
|
|
88
|
+
assertArgument(getTypeAnnotation(schema)?.kind === EntityKind.Relation, 'schema', 'Expected a relation schema');
|
|
89
|
+
|
|
90
|
+
if (props[MetaId] != null) {
|
|
91
|
+
meta = props[MetaId] as any;
|
|
92
|
+
delete props[MetaId];
|
|
68
93
|
}
|
|
69
94
|
|
|
70
|
-
const sourceDXN =
|
|
71
|
-
const targetDXN =
|
|
72
|
-
|
|
73
|
-
(props as any)[
|
|
95
|
+
const sourceDXN = getObjectDXN(props[Source]) ?? raise(new Error('Unresolved relation source'));
|
|
96
|
+
const targetDXN = getObjectDXN(props[Target]) ?? raise(new Error('Unresolved relation target'));
|
|
97
|
+
|
|
98
|
+
(props as any)[RelationSourceDXNId] = sourceDXN;
|
|
99
|
+
(props as any)[RelationTargetDXNId] = targetDXN;
|
|
74
100
|
|
|
75
|
-
return
|
|
101
|
+
return makeObject<Schema.Schema.Type<S>>(schema, props as any, meta);
|
|
76
102
|
};
|
|
77
103
|
|
|
78
104
|
export const isRelation = (value: unknown): value is Any => {
|
|
79
105
|
if (typeof value !== 'object' || value === null) {
|
|
80
106
|
return false;
|
|
81
107
|
}
|
|
82
|
-
if (
|
|
108
|
+
if (ATTR_RELATION_SOURCE in value || ATTR_RELATION_TARGET in value) {
|
|
83
109
|
return true;
|
|
84
110
|
}
|
|
85
111
|
|
|
86
|
-
const kind = (value as any)[
|
|
87
|
-
return kind ===
|
|
112
|
+
const kind = (value as any)[Entity.KindId];
|
|
113
|
+
return kind === EntityKind.Relation;
|
|
88
114
|
};
|
|
89
115
|
|
|
90
116
|
/**
|
|
@@ -93,8 +119,8 @@ export const isRelation = (value: unknown): value is Any => {
|
|
|
93
119
|
*/
|
|
94
120
|
export const getSourceDXN = (value: Any): DXN => {
|
|
95
121
|
assertArgument(isRelation(value), 'Expected a relation');
|
|
96
|
-
assumeType<
|
|
97
|
-
const dxn = (value as
|
|
122
|
+
assumeType<InternalObjectProps>(value);
|
|
123
|
+
const dxn = (value as InternalObjectProps)[RelationSourceDXNId];
|
|
98
124
|
invariant(dxn instanceof DXN);
|
|
99
125
|
return dxn;
|
|
100
126
|
};
|
|
@@ -105,8 +131,8 @@ export const getSourceDXN = (value: Any): DXN => {
|
|
|
105
131
|
*/
|
|
106
132
|
export const getTargetDXN = (value: Any): DXN => {
|
|
107
133
|
assertArgument(isRelation(value), 'Expected a relation');
|
|
108
|
-
assumeType<
|
|
109
|
-
const dxn = (value as
|
|
134
|
+
assumeType<InternalObjectProps>(value);
|
|
135
|
+
const dxn = (value as InternalObjectProps)[RelationTargetDXNId];
|
|
110
136
|
invariant(dxn instanceof DXN);
|
|
111
137
|
return dxn;
|
|
112
138
|
};
|
|
@@ -117,8 +143,8 @@ export const getTargetDXN = (value: Any): DXN => {
|
|
|
117
143
|
*/
|
|
118
144
|
export const getSource = <T extends Any>(relation: T): Type.Relation.Source<T> => {
|
|
119
145
|
assertArgument(isRelation(relation), 'Expected a relation');
|
|
120
|
-
assumeType<
|
|
121
|
-
const obj = (relation as
|
|
146
|
+
assumeType<InternalObjectProps>(relation);
|
|
147
|
+
const obj = (relation as InternalObjectProps)[RelationSourceId];
|
|
122
148
|
invariant(obj !== undefined, `Invalid source: ${relation.id}`);
|
|
123
149
|
return obj as Type.Relation.Source<T>;
|
|
124
150
|
};
|
|
@@ -129,8 +155,8 @@ export const getSource = <T extends Any>(relation: T): Type.Relation.Source<T> =
|
|
|
129
155
|
*/
|
|
130
156
|
export const getTarget = <T extends Any>(relation: T): Type.Relation.Target<T> => {
|
|
131
157
|
assertArgument(isRelation(relation), 'Expected a relation');
|
|
132
|
-
assumeType<
|
|
133
|
-
const obj = (relation as
|
|
158
|
+
assumeType<InternalObjectProps>(relation);
|
|
159
|
+
const obj = (relation as InternalObjectProps)[RelationTargetId];
|
|
134
160
|
invariant(obj !== undefined, `Invalid target: ${relation.id}`);
|
|
135
161
|
return obj as Type.Relation.Target<T>;
|
|
136
162
|
};
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import type * as Types from 'effect/Types';
|
|
6
|
+
|
|
7
|
+
import type * as JsonSchema from './JsonSchema';
|
|
8
|
+
import type * as Key from './Key';
|
|
9
|
+
import type * as QueryResult from './QueryResult';
|
|
10
|
+
import type * as Type from './Type';
|
|
11
|
+
|
|
12
|
+
// TODO(wittjosiah): Replace w/ Query.Query.
|
|
13
|
+
export type Query = {
|
|
14
|
+
/**
|
|
15
|
+
* Filter by schema ID.
|
|
16
|
+
* Schema id is a DXN with `echo` or `type` kind.
|
|
17
|
+
*/
|
|
18
|
+
id?: string | string[];
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Id of the backing ECHO object.
|
|
22
|
+
*/
|
|
23
|
+
backingObjectId?: Key.ObjectId | Key.ObjectId[];
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* One or more typenames to filter by.
|
|
27
|
+
*/
|
|
28
|
+
typename?: string | string[];
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* [Semver Range](https://docs.npmjs.com/cli/v6/using-npm/semver#ranges) for the schema version.
|
|
32
|
+
*/
|
|
33
|
+
version?: string;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Where to look for the schema.
|
|
37
|
+
*
|
|
38
|
+
* Database schema are stored in the database of the current space.
|
|
39
|
+
* Runtime schema are registered in the runtime.
|
|
40
|
+
*
|
|
41
|
+
* @default ['database']
|
|
42
|
+
*/
|
|
43
|
+
location?: ('database' | 'runtime')[];
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Include system schemas.
|
|
47
|
+
* @default false
|
|
48
|
+
*
|
|
49
|
+
* The system schema include but are not limited to:
|
|
50
|
+
* - dxos.org/type/Schema
|
|
51
|
+
*/
|
|
52
|
+
includeSystem?: boolean;
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Input for schema registration.
|
|
57
|
+
* The typename, version and schema mutability metadata is read from the schema annotations.
|
|
58
|
+
*/
|
|
59
|
+
export type RegisterSchemaInput =
|
|
60
|
+
| Type.Entity.Any
|
|
61
|
+
| {
|
|
62
|
+
typename: string;
|
|
63
|
+
version: string;
|
|
64
|
+
jsonSchema: JsonSchema.JsonSchema;
|
|
65
|
+
/**
|
|
66
|
+
* Display name of the schema.
|
|
67
|
+
*/
|
|
68
|
+
name?: string;
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
export type ExtractQueryResult<Query> = Query extends { location: ('database' | 'runtime')[] }
|
|
72
|
+
? Type.Entity.Any
|
|
73
|
+
: Type.RuntimeType;
|
|
74
|
+
|
|
75
|
+
export interface SchemaRegistry {
|
|
76
|
+
/**
|
|
77
|
+
* Registers the provided schema.
|
|
78
|
+
*
|
|
79
|
+
* @returns Mutable runtime instances of schemas that were registered.
|
|
80
|
+
*
|
|
81
|
+
* The behavior of this method depends on the state of the database.
|
|
82
|
+
* The general principle is that the schema will be upserted into the space.
|
|
83
|
+
* If an equivalent schema with the same name and version already exists, the method does nothing.
|
|
84
|
+
* If a different schema with the same name and version exists, the method throws an error.
|
|
85
|
+
* If no schema with the same name and version exists, a new schema will be inserted based on semantic versioning rules.
|
|
86
|
+
*/
|
|
87
|
+
register(input: RegisterSchemaInput[]): Promise<Type.RuntimeType[]>;
|
|
88
|
+
|
|
89
|
+
query<Q extends Types.NoExcessProperties<Query, Q>>(
|
|
90
|
+
query?: Q & Query,
|
|
91
|
+
): QueryResult.QueryResult<ExtractQueryResult<Q>>;
|
|
92
|
+
}
|
package/src/Tag.ts
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import * as Schema from 'effect/Schema';
|
|
6
|
+
|
|
7
|
+
import { LabelAnnotation, SystemTypeAnnotation } from './internal';
|
|
8
|
+
import * as Obj from './Obj';
|
|
9
|
+
import * as Type from './Type';
|
|
10
|
+
|
|
11
|
+
export const Tag = Schema.Struct({
|
|
12
|
+
label: Schema.String,
|
|
13
|
+
hue: Schema.optional(Schema.String), // TODO(burdon): Color name?
|
|
14
|
+
}).pipe(
|
|
15
|
+
Type.Obj({
|
|
16
|
+
typename: 'dxos.org/type/Tag',
|
|
17
|
+
version: '0.1.0',
|
|
18
|
+
}),
|
|
19
|
+
LabelAnnotation.set(['label']),
|
|
20
|
+
SystemTypeAnnotation.set(true),
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
export type Tag = Schema.Schema.Type<typeof Tag>;
|
|
24
|
+
|
|
25
|
+
export const make = (props: Obj.MakeProps<typeof Tag>) => Obj.make(Tag, props);
|
|
26
|
+
|
|
27
|
+
// TODO(burdon): Rename Map.
|
|
28
|
+
export type Map = Record<string, Tag>;
|
|
29
|
+
|
|
30
|
+
export const sortTags = ({ label: a }: Tag, { label: b }: Tag) => a.localeCompare(b);
|
|
31
|
+
|
|
32
|
+
export const createTagList = (tags: Map): Tag[] =>
|
|
33
|
+
Object.entries(tags)
|
|
34
|
+
.map(([id, tag]) => ({ ...tag, id }))
|
|
35
|
+
.sort(sortTags);
|
|
36
|
+
|
|
37
|
+
export const findTagByLabel = (tags: Map | undefined, name: string): Tag | undefined => {
|
|
38
|
+
const entry = Object.entries(tags ?? {}).find(([_, tag]) => tag.label.toLowerCase() === name.toLowerCase());
|
|
39
|
+
return entry ? { ...entry[1], id: entry[0] } : undefined;
|
|
40
|
+
};
|