@dxos/echo 0.8.4-main.ae835ea → 0.8.4-main.bc674ce
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/neutral/Annotation.mjs +32 -0
- package/dist/lib/neutral/Database.mjs +17 -0
- package/dist/lib/neutral/Entity.mjs +51 -0
- package/dist/lib/neutral/Err.mjs +10 -0
- package/dist/lib/neutral/Filter.mjs +61 -0
- package/dist/lib/neutral/Format.mjs +66 -0
- package/dist/lib/neutral/JsonSchema.mjs +19 -0
- package/dist/lib/neutral/JsonSchema.mjs.map +7 -0
- package/dist/lib/neutral/Key.mjs +12 -0
- package/dist/lib/neutral/Key.mjs.map +7 -0
- package/dist/lib/neutral/Obj.mjs +90 -0
- package/dist/lib/neutral/Obj.mjs.map +7 -0
- package/dist/lib/neutral/Order.mjs +12 -0
- package/dist/lib/neutral/Order.mjs.map +7 -0
- package/dist/lib/neutral/Query.mjs +26 -0
- package/dist/lib/neutral/Query.mjs.map +7 -0
- package/dist/lib/neutral/QueryResult.mjs +2 -0
- package/dist/lib/neutral/QueryResult.mjs.map +7 -0
- package/dist/lib/neutral/Ref.mjs +22 -0
- package/dist/lib/neutral/Ref.mjs.map +7 -0
- package/dist/lib/neutral/Relation.mjs +84 -0
- package/dist/lib/neutral/Relation.mjs.map +7 -0
- package/dist/lib/neutral/SchemaRegistry.mjs +2 -0
- package/dist/lib/neutral/SchemaRegistry.mjs.map +7 -0
- package/dist/lib/neutral/Tag.mjs +25 -0
- package/dist/lib/neutral/Tag.mjs.map +7 -0
- package/dist/lib/neutral/Type.mjs +47 -0
- package/dist/lib/neutral/Type.mjs.map +7 -0
- package/dist/lib/neutral/chunk-2MTHJ5UW.mjs +203 -0
- package/dist/lib/neutral/chunk-2MTHJ5UW.mjs.map +7 -0
- package/dist/lib/neutral/chunk-3ZEAZF7T.mjs +23 -0
- package/dist/lib/neutral/chunk-3ZEAZF7T.mjs.map +7 -0
- package/dist/lib/neutral/chunk-4L6DOFXP.mjs +7 -0
- package/dist/lib/neutral/chunk-4L6DOFXP.mjs.map +7 -0
- package/dist/lib/neutral/chunk-4TT624YA.mjs +73 -0
- package/dist/lib/neutral/chunk-4TT624YA.mjs.map +7 -0
- package/dist/lib/neutral/chunk-62DWJ6CE.mjs +402 -0
- package/dist/lib/neutral/chunk-62DWJ6CE.mjs.map +7 -0
- package/dist/lib/neutral/chunk-6QPSGMEF.mjs +97 -0
- package/dist/lib/neutral/chunk-6QPSGMEF.mjs.map +7 -0
- package/dist/lib/neutral/chunk-ANHVGJI4.mjs +21 -0
- package/dist/lib/neutral/chunk-ANHVGJI4.mjs.map +7 -0
- package/dist/lib/neutral/chunk-CUDIBUM4.mjs +282 -0
- package/dist/lib/neutral/chunk-CUDIBUM4.mjs.map +7 -0
- package/dist/lib/neutral/chunk-HMOXCO27.mjs +40 -0
- package/dist/lib/neutral/chunk-HMOXCO27.mjs.map +7 -0
- package/dist/lib/neutral/chunk-IP2GHXWA.mjs +56 -0
- package/dist/lib/neutral/chunk-IP2GHXWA.mjs.map +7 -0
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +7 -0
- package/dist/lib/neutral/chunk-KRHDMXSU.mjs +132 -0
- package/dist/lib/neutral/chunk-KRHDMXSU.mjs.map +7 -0
- package/dist/lib/neutral/chunk-NWUO5FKZ.mjs +39 -0
- package/dist/lib/neutral/chunk-NWUO5FKZ.mjs.map +7 -0
- package/dist/lib/neutral/chunk-OMUPQMLR.mjs +7 -0
- package/dist/lib/neutral/chunk-OMUPQMLR.mjs.map +7 -0
- package/dist/lib/neutral/chunk-ROKO4RKJ.mjs +42 -0
- package/dist/lib/neutral/chunk-ROKO4RKJ.mjs.map +7 -0
- package/dist/lib/neutral/chunk-RPB6V4BE.mjs +38 -0
- package/dist/lib/neutral/chunk-RPB6V4BE.mjs.map +7 -0
- package/dist/lib/neutral/chunk-SU2LVM7J.mjs +3846 -0
- package/dist/lib/neutral/chunk-SU2LVM7J.mjs.map +7 -0
- package/dist/lib/neutral/chunk-VB5HVDCA.mjs +287 -0
- package/dist/lib/neutral/chunk-VB5HVDCA.mjs.map +7 -0
- package/dist/lib/neutral/chunk-VR4A4WGG.mjs +249 -0
- package/dist/lib/neutral/chunk-VR4A4WGG.mjs.map +7 -0
- package/dist/lib/neutral/chunk-X2MPMYYN.mjs +13 -0
- package/dist/lib/neutral/chunk-X2MPMYYN.mjs.map +7 -0
- package/dist/lib/neutral/chunk-XK5OUUBY.mjs +157 -0
- package/dist/lib/neutral/chunk-XK5OUUBY.mjs.map +7 -0
- package/dist/lib/neutral/chunk-XMIDBDE6.mjs +142 -0
- package/dist/lib/neutral/chunk-XMIDBDE6.mjs.map +7 -0
- package/dist/lib/neutral/chunk-YQYMWZAD.mjs +67 -0
- package/dist/lib/neutral/chunk-YQYMWZAD.mjs.map +7 -0
- package/dist/lib/neutral/index.mjs +84 -0
- package/dist/lib/neutral/index.mjs.map +7 -0
- package/dist/lib/{node-esm → neutral}/internal/index.mjs +245 -125
- package/dist/lib/neutral/internal/index.mjs.map +7 -0
- package/dist/lib/neutral/meta.json +1 -0
- package/dist/lib/neutral/testing/index.mjs +366 -0
- package/dist/lib/neutral/testing/index.mjs.map +7 -0
- 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 +6 -4
- 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-normalize.d.ts.map +1 -1
- package/dist/types/src/internal/json-schema/json-schema-type.d.ts +130 -29
- 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 +4 -2
- 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 +29 -17
- package/dist/types/src/internal/ref/ref.d.ts.map +1 -1
- package/dist/types/src/internal/schema/compose.d.ts +7 -0
- 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 +17 -16
- 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 +101 -65
- 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 +102 -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 +58 -0
- package/src/internal/entities/relation.ts +171 -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 +6 -6
- 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 +6 -4
- 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-normalize.ts +4 -2
- package/src/internal/json-schema/json-schema-type.ts +35 -35
- package/src/internal/{json → json-schema}/json-schema.test.ts +73 -69
- package/src/internal/{json → json-schema}/json-schema.ts +27 -14
- 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 +36 -37
- package/src/internal/object/json-serializer.ts +65 -102
- package/src/internal/object/schema-validator.test.ts +3 -7
- 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 +260 -48
- package/src/internal/proxy/typed-handler.ts +275 -61
- package/src/internal/proxy/typed-object.test.ts +54 -38
- package/src/internal/ref/ref-array.ts +4 -4
- package/src/internal/ref/ref.test.ts +10 -9
- package/src/internal/ref/ref.ts +83 -55
- package/src/internal/{projection → schema}/compose.test.ts +8 -9
- package/src/internal/{projection → schema}/compose.ts +13 -8
- 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/types/meta.ts +65 -0
- 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-JUTFUT73.mjs +0 -175
- package/dist/lib/browser/chunk-JUTFUT73.mjs.map +0 -7
- package/dist/lib/browser/chunk-KEBVBR65.mjs +0 -3727
- package/dist/lib/browser/chunk-KEBVBR65.mjs.map +0 -7
- package/dist/lib/browser/chunk-WO76TDT6.mjs +0 -814
- package/dist/lib/browser/chunk-WO76TDT6.mjs.map +0 -7
- package/dist/lib/browser/index.mjs +0 -35
- package/dist/lib/browser/internal/index.mjs +0 -336
- package/dist/lib/browser/meta.json +0 -1
- package/dist/lib/browser/query/index.mjs +0 -15
- package/dist/lib/browser/testing/index.mjs +0 -283
- package/dist/lib/browser/testing/index.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-DWZYQ2UR.mjs +0 -3727
- package/dist/lib/node-esm/chunk-DWZYQ2UR.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-KBD3A2I6.mjs +0 -175
- package/dist/lib/node-esm/chunk-KBD3A2I6.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-ZSSII3JW.mjs +0 -814
- package/dist/lib/node-esm/chunk-ZSSII3JW.mjs.map +0 -7
- package/dist/lib/node-esm/index.mjs +0 -35
- package/dist/lib/node-esm/meta.json +0 -1
- package/dist/lib/node-esm/query/index.mjs +0 -15
- package/dist/lib/node-esm/testing/index.mjs +0 -283
- package/dist/lib/node-esm/testing/index.mjs.map +0 -7
- 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 -131
- 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 +0 -6
- 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 -226
- 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/meta.ts +0 -61
- 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/index.mjs.map → neutral/Annotation.mjs.map} +0 -0
- /package/dist/lib/{browser/internal/index.mjs.map → neutral/Database.mjs.map} +0 -0
- /package/dist/lib/{browser/query/index.mjs.map → neutral/Entity.mjs.map} +0 -0
- /package/dist/lib/{node-esm/index.mjs.map → neutral/Err.mjs.map} +0 -0
- /package/dist/lib/{node-esm/internal/index.mjs.map → neutral/Filter.mjs.map} +0 -0
- /package/dist/lib/{node-esm/query/index.mjs.map → neutral/Format.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.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
|
@@ -7,22 +7,24 @@ import * as Option from 'effect/Option';
|
|
|
7
7
|
import * as ParseResult from 'effect/ParseResult';
|
|
8
8
|
import * as Schema from 'effect/Schema';
|
|
9
9
|
import * as SchemaAST from 'effect/SchemaAST';
|
|
10
|
+
import type * as Types from 'effect/Types';
|
|
10
11
|
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
12
|
+
import { Event } from '@dxos/async';
|
|
13
|
+
import { type CustomInspectFunction, inspectCustom } from '@dxos/debug';
|
|
14
|
+
import { EncodedReference } from '@dxos/echo-protocol';
|
|
13
15
|
import { assertArgument, invariant } from '@dxos/invariant';
|
|
14
16
|
import { DXN, ObjectId } from '@dxos/keys';
|
|
15
17
|
|
|
16
|
-
import
|
|
18
|
+
import * as Database from '../../Database';
|
|
19
|
+
import { ReferenceAnnotationId, getSchemaDXN, getTypeAnnotation, getTypeIdentifierAnnotation } from '../annotations';
|
|
17
20
|
import { type JsonSchemaType } from '../json-schema';
|
|
18
|
-
import type {
|
|
21
|
+
import type { AnyEntity, AnyProperties } from '../types';
|
|
19
22
|
|
|
20
23
|
/**
|
|
21
24
|
* The `$id` and `$ref` fields for an ECHO reference schema.
|
|
22
25
|
*/
|
|
23
26
|
export const JSON_SCHEMA_ECHO_REF_ID = '/schemas/echo/ref';
|
|
24
27
|
|
|
25
|
-
// TODO(burdon): Define return type.
|
|
26
28
|
export const getSchemaReference = (property: JsonSchemaType): { typename: string } | undefined => {
|
|
27
29
|
const { $id, reference: { schema: { $ref } = {} } = {} } = property;
|
|
28
30
|
if ($id === JSON_SCHEMA_ECHO_REF_ID && $ref) {
|
|
@@ -30,7 +32,7 @@ export const getSchemaReference = (property: JsonSchemaType): { typename: string
|
|
|
30
32
|
}
|
|
31
33
|
};
|
|
32
34
|
|
|
33
|
-
export const createSchemaReference = (typename: string): JsonSchemaType => {
|
|
35
|
+
export const createSchemaReference = (typename: string): Types.DeepMutable<JsonSchemaType> => {
|
|
34
36
|
return {
|
|
35
37
|
$id: JSON_SCHEMA_ECHO_REF_ID,
|
|
36
38
|
reference: {
|
|
@@ -71,16 +73,18 @@ export const RefTypeId: unique symbol = Symbol('@dxos/echo/internal/Ref');
|
|
|
71
73
|
/**
|
|
72
74
|
* Reference Schema.
|
|
73
75
|
*/
|
|
74
|
-
export interface
|
|
76
|
+
export interface RefSchema<T extends AnyEntity> extends Schema.SchemaClass<Ref<T>, EncodedReference> {}
|
|
75
77
|
|
|
76
|
-
|
|
78
|
+
/**
|
|
79
|
+
* Type of the `Ref` function and extra methods attached to it.
|
|
80
|
+
*/
|
|
77
81
|
export interface RefFn {
|
|
78
|
-
<S extends Schema.Schema.Any>(schema: S):
|
|
82
|
+
<S extends Schema.Schema.Any>(schema: S): RefSchema<Schema.Schema.Type<S>>;
|
|
79
83
|
|
|
80
84
|
/**
|
|
81
85
|
* @returns True if the object is a reference.
|
|
82
86
|
*/
|
|
83
|
-
isRef: (obj:
|
|
87
|
+
isRef: (obj: unknown) => obj is Ref<any>;
|
|
84
88
|
|
|
85
89
|
/**
|
|
86
90
|
* @returns True if the reference points to the given object id.
|
|
@@ -90,7 +94,7 @@ export interface RefFn {
|
|
|
90
94
|
/**
|
|
91
95
|
* @returns True if the schema is a reference schema.
|
|
92
96
|
*/
|
|
93
|
-
isRefSchema: (schema: Schema.Schema<any, any>) => schema is
|
|
97
|
+
isRefSchema: (schema: Schema.Schema<any, any>) => schema is RefSchema<any>;
|
|
94
98
|
|
|
95
99
|
/**
|
|
96
100
|
* @returns True if the schema AST is a reference schema.
|
|
@@ -100,31 +104,26 @@ export interface RefFn {
|
|
|
100
104
|
/**
|
|
101
105
|
* Constructs a reference that points to the given object.
|
|
102
106
|
*/
|
|
103
|
-
// TODO(burdon):
|
|
104
|
-
make: <T extends
|
|
107
|
+
// TODO(burdon): Narrow to Obj.Unknown?
|
|
108
|
+
make: <T extends AnyEntity>(object: T) => Ref<T>;
|
|
105
109
|
|
|
106
110
|
/**
|
|
107
111
|
* Constructs a reference that points to the object specified by the provided DXN.
|
|
108
112
|
*/
|
|
109
113
|
fromDXN: (dxn: DXN) => Ref<any>;
|
|
110
114
|
}
|
|
115
|
+
|
|
111
116
|
/**
|
|
112
117
|
* Schema builder for references.
|
|
113
118
|
*/
|
|
114
|
-
export const Ref: RefFn = <S extends Schema.Schema.Any>(schema: S):
|
|
119
|
+
export const Ref: RefFn = <S extends Schema.Schema.Any>(schema: S): RefSchema<Schema.Schema.Type<S>> => {
|
|
115
120
|
assertArgument(Schema.isSchema(schema), 'schema', 'Must call with an instance of effect-schema');
|
|
116
|
-
|
|
117
121
|
const annotation = getTypeAnnotation(schema);
|
|
118
122
|
if (annotation == null) {
|
|
119
123
|
throw new Error('Reference target must be an ECHO schema.');
|
|
120
124
|
}
|
|
121
125
|
|
|
122
|
-
return createEchoReferenceSchema(
|
|
123
|
-
getTypeIdentifierAnnotation(schema),
|
|
124
|
-
annotation.typename,
|
|
125
|
-
annotation.version,
|
|
126
|
-
getSchemaExpectedName(schema.ast),
|
|
127
|
-
);
|
|
126
|
+
return createEchoReferenceSchema(getTypeIdentifierAnnotation(schema), annotation.typename, annotation.version);
|
|
128
127
|
};
|
|
129
128
|
|
|
130
129
|
/**
|
|
@@ -137,12 +136,15 @@ export interface Ref<T> {
|
|
|
137
136
|
*/
|
|
138
137
|
get dxn(): DXN;
|
|
139
138
|
|
|
139
|
+
/**
|
|
140
|
+
* Returns true if the reference has a target available (inlined or resolver set).
|
|
141
|
+
*/
|
|
142
|
+
get isAvailable(): boolean;
|
|
143
|
+
|
|
140
144
|
/**
|
|
141
145
|
* @returns The reference target.
|
|
142
146
|
* May return `undefined` if the object is not loaded in the working set.
|
|
143
147
|
* 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
148
|
*/
|
|
147
149
|
get target(): T | undefined;
|
|
148
150
|
|
|
@@ -156,6 +158,7 @@ export interface Ref<T> {
|
|
|
156
158
|
/**
|
|
157
159
|
* @returns Promise that will resolves with the target object or undefined if the object is not loaded locally.
|
|
158
160
|
*/
|
|
161
|
+
|
|
159
162
|
tryLoad(): Promise<T | undefined>;
|
|
160
163
|
|
|
161
164
|
/**
|
|
@@ -201,7 +204,7 @@ Ref.isRef = (obj: any): obj is Ref<any> => {
|
|
|
201
204
|
|
|
202
205
|
Ref.hasObjectId = (id: ObjectId) => (ref: Ref<any>) => ref.dxn.isLocalObjectId() && ref.dxn.parts[1] === id;
|
|
203
206
|
|
|
204
|
-
Ref.isRefSchema = (schema: Schema.Schema<any, any>): schema is
|
|
207
|
+
Ref.isRefSchema = (schema: Schema.Schema<any, any>): schema is RefSchema<any> => {
|
|
205
208
|
return Ref.isRefSchemaAST(schema.ast);
|
|
206
209
|
};
|
|
207
210
|
|
|
@@ -209,7 +212,7 @@ Ref.isRefSchemaAST = (ast: SchemaAST.AST): boolean => {
|
|
|
209
212
|
return SchemaAST.getAnnotation(ast, ReferenceAnnotationId).pipe(Option.isSome);
|
|
210
213
|
};
|
|
211
214
|
|
|
212
|
-
Ref.make = <T extends
|
|
215
|
+
Ref.make = <T extends AnyProperties>(obj: T): Ref<T> => {
|
|
213
216
|
if (typeof obj !== 'object' || obj === null) {
|
|
214
217
|
throw new TypeError('Expected: ECHO object.');
|
|
215
218
|
}
|
|
@@ -217,7 +220,7 @@ Ref.make = <T extends BaseObject>(obj: T): Ref<T> => {
|
|
|
217
220
|
// TODO(dmaretskyi): Extract to `getObjectDXN` function.
|
|
218
221
|
const id = obj.id;
|
|
219
222
|
invariant(ObjectId.isValid(id), 'Invalid object ID');
|
|
220
|
-
const dxn =
|
|
223
|
+
const dxn = DXN.fromLocalObjectId(id);
|
|
221
224
|
return new RefImpl(dxn, obj);
|
|
222
225
|
};
|
|
223
226
|
|
|
@@ -242,7 +245,6 @@ export const createEchoReferenceSchema = (
|
|
|
242
245
|
echoId: string | undefined,
|
|
243
246
|
typename: string | undefined,
|
|
244
247
|
version: string | undefined,
|
|
245
|
-
schemaName?: string,
|
|
246
248
|
): Schema.SchemaClass<Ref<any>, EncodedReference> => {
|
|
247
249
|
if (!echoId && !typename) {
|
|
248
250
|
throw new TypeError('Either echoId or typename must be provided.');
|
|
@@ -261,25 +263,39 @@ export const createEchoReferenceSchema = (
|
|
|
261
263
|
[],
|
|
262
264
|
{
|
|
263
265
|
encode: () => {
|
|
264
|
-
return (value) =>
|
|
265
|
-
|
|
266
|
-
|
|
266
|
+
return (value) =>
|
|
267
|
+
Effect.gen(function* () {
|
|
268
|
+
if (Ref.isRef(value)) {
|
|
269
|
+
return EncodedReference.fromDXN((value as Ref<any>).dxn);
|
|
270
|
+
} else if (EncodedReference.isEncodedReference(value)) {
|
|
271
|
+
return value;
|
|
272
|
+
}
|
|
273
|
+
throw new Error('Invalid reference');
|
|
267
274
|
});
|
|
268
|
-
};
|
|
269
275
|
},
|
|
270
276
|
decode: () => {
|
|
271
|
-
return (value) =>
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
277
|
+
return (value) =>
|
|
278
|
+
Effect.gen(function* () {
|
|
279
|
+
const dbService = yield* Effect.serviceOption(Database.Service);
|
|
280
|
+
|
|
281
|
+
// TODO(dmaretskyi): This branch seems to be taken by Schema.is
|
|
282
|
+
if (Ref.isRef(value)) {
|
|
283
|
+
if (Option.isSome(dbService)) {
|
|
284
|
+
return dbService.value.db.makeRef(value.dxn);
|
|
285
|
+
} else {
|
|
286
|
+
return value;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
if (!EncodedReference.isEncodedReference(value)) {
|
|
291
|
+
return yield* Effect.fail(new ParseResult.Unexpected(value, 'reference'));
|
|
292
|
+
}
|
|
293
|
+
if (Option.isSome(dbService)) {
|
|
294
|
+
return dbService.value.db.makeRef(EncodedReference.toDXN(value));
|
|
295
|
+
} else {
|
|
296
|
+
return Ref.fromDXN(EncodedReference.toDXN(value));
|
|
297
|
+
}
|
|
298
|
+
});
|
|
283
299
|
},
|
|
284
300
|
},
|
|
285
301
|
{
|
|
@@ -315,12 +331,12 @@ export interface RefResolver {
|
|
|
315
331
|
* @param load If true the resolver should attempt to load the object from disk.
|
|
316
332
|
* @param onLoad Callback to call when the object is loaded.
|
|
317
333
|
*/
|
|
318
|
-
resolveSync(dxn: DXN, load: boolean, onLoad?: () => void):
|
|
334
|
+
resolveSync(dxn: DXN, load: boolean, onLoad?: () => void): AnyProperties | undefined;
|
|
319
335
|
|
|
320
336
|
/**
|
|
321
337
|
* Resolver ref asynchronously.
|
|
322
338
|
*/
|
|
323
|
-
resolve(dxn: DXN): Promise<
|
|
339
|
+
resolve(dxn: DXN): Promise<AnyProperties | undefined>;
|
|
324
340
|
|
|
325
341
|
// TODO(dmaretskyi): Combine with `resolve`.
|
|
326
342
|
resolveSchema(dxn: DXN): Promise<Schema.Schema.AnyNoContext | undefined>;
|
|
@@ -329,7 +345,7 @@ export interface RefResolver {
|
|
|
329
345
|
export class RefImpl<T> implements Ref<T> {
|
|
330
346
|
#dxn: DXN;
|
|
331
347
|
#resolver?: RefResolver = undefined;
|
|
332
|
-
#
|
|
348
|
+
#resolved = new Event<void>();
|
|
333
349
|
|
|
334
350
|
/**
|
|
335
351
|
* Target is set when the reference is created from a specific object.
|
|
@@ -341,7 +357,7 @@ export class RefImpl<T> implements Ref<T> {
|
|
|
341
357
|
* Callback to issue a reactive notification when object is resolved.
|
|
342
358
|
*/
|
|
343
359
|
#resolverCallback = () => {
|
|
344
|
-
this.#
|
|
360
|
+
this.#resolved.emit();
|
|
345
361
|
};
|
|
346
362
|
|
|
347
363
|
constructor(dxn: DXN, target?: T) {
|
|
@@ -356,11 +372,17 @@ export class RefImpl<T> implements Ref<T> {
|
|
|
356
372
|
return this.#dxn;
|
|
357
373
|
}
|
|
358
374
|
|
|
375
|
+
/**
|
|
376
|
+
* @inheritdoc
|
|
377
|
+
*/
|
|
378
|
+
get isAvailable(): boolean {
|
|
379
|
+
return this.#target !== undefined || this.#resolver !== undefined;
|
|
380
|
+
}
|
|
381
|
+
|
|
359
382
|
/**
|
|
360
383
|
* @inheritdoc
|
|
361
384
|
*/
|
|
362
385
|
get target(): T | undefined {
|
|
363
|
-
this.#signal.notifyRead();
|
|
364
386
|
if (this.#target) {
|
|
365
387
|
return this.#target;
|
|
366
388
|
}
|
|
@@ -388,6 +410,9 @@ export class RefImpl<T> implements Ref<T> {
|
|
|
388
410
|
* @inheritdoc
|
|
389
411
|
*/
|
|
390
412
|
async tryLoad(): Promise<T | undefined> {
|
|
413
|
+
if (this.#target) {
|
|
414
|
+
return this.#target;
|
|
415
|
+
}
|
|
391
416
|
invariant(this.#resolver, 'Resolver is not set');
|
|
392
417
|
return (await this.#resolver.resolve(this.#dxn)) as T | undefined;
|
|
393
418
|
}
|
|
@@ -428,10 +453,15 @@ export class RefImpl<T> implements Ref<T> {
|
|
|
428
453
|
return `Ref(${this.#dxn.toString()})`;
|
|
429
454
|
}
|
|
430
455
|
|
|
456
|
+
[inspectCustom]: CustomInspectFunction = (depth, options, inspect) => {
|
|
457
|
+
return this.toString();
|
|
458
|
+
};
|
|
459
|
+
|
|
431
460
|
[RefTypeId] = refVariance;
|
|
432
461
|
|
|
433
462
|
/**
|
|
434
463
|
* Internal method to set the resolver.
|
|
464
|
+
*
|
|
435
465
|
* @internal
|
|
436
466
|
*/
|
|
437
467
|
_setResolver(resolver: RefResolver): void {
|
|
@@ -439,8 +469,6 @@ export class RefImpl<T> implements Ref<T> {
|
|
|
439
469
|
}
|
|
440
470
|
|
|
441
471
|
/**
|
|
442
|
-
* Internal method to get the saved target.
|
|
443
|
-
* Not the same as `target` which is resolved from the resolver.
|
|
444
472
|
* @internal
|
|
445
473
|
*/
|
|
446
474
|
_getSavedTarget(): T | undefined {
|
|
@@ -459,7 +487,7 @@ export const setRefResolver = (ref: Ref<any>, resolver: RefResolver) => {
|
|
|
459
487
|
/**
|
|
460
488
|
* Internal API for getting the saved target on a reference.
|
|
461
489
|
*/
|
|
462
|
-
export const getRefSavedTarget = (ref: Ref<any>):
|
|
490
|
+
export const getRefSavedTarget = (ref: Ref<any>): AnyProperties | undefined => {
|
|
463
491
|
invariant(ref instanceof RefImpl, 'Ref is not an instance of RefImpl');
|
|
464
492
|
return ref._getSavedTarget();
|
|
465
493
|
};
|
|
@@ -482,10 +510,10 @@ export const refFromEncodedReference = (encodedReference: EncodedReference, reso
|
|
|
482
510
|
};
|
|
483
511
|
|
|
484
512
|
export class StaticRefResolver implements RefResolver {
|
|
485
|
-
public objects = new Map<ObjectId,
|
|
513
|
+
public objects = new Map<ObjectId, AnyProperties>();
|
|
486
514
|
public schemas = new Map<DXN.String, Schema.Schema.AnyNoContext>();
|
|
487
515
|
|
|
488
|
-
addObject(obj:
|
|
516
|
+
addObject(obj: AnyProperties): this {
|
|
489
517
|
this.objects.set(obj.id, obj);
|
|
490
518
|
return this;
|
|
491
519
|
}
|
|
@@ -497,7 +525,7 @@ export class StaticRefResolver implements RefResolver {
|
|
|
497
525
|
return this;
|
|
498
526
|
}
|
|
499
527
|
|
|
500
|
-
resolveSync(dxn: DXN, _load: boolean, _onLoad?: () => void):
|
|
528
|
+
resolveSync(dxn: DXN, _load: boolean, _onLoad?: () => void): AnyProperties | undefined {
|
|
501
529
|
const id = dxn?.asEchoDXN()?.echoId;
|
|
502
530
|
if (id == null) {
|
|
503
531
|
return undefined;
|
|
@@ -506,7 +534,7 @@ export class StaticRefResolver implements RefResolver {
|
|
|
506
534
|
return this.objects.get(id);
|
|
507
535
|
}
|
|
508
536
|
|
|
509
|
-
async resolve(dxn: DXN): Promise<
|
|
537
|
+
async resolve(dxn: DXN): Promise<AnyProperties | undefined> {
|
|
510
538
|
const id = dxn?.asEchoDXN()?.echoId;
|
|
511
539
|
if (id == null) {
|
|
512
540
|
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: {
|
|
@@ -2,18 +2,22 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
+
import type * as Types from 'effect/Types';
|
|
6
|
+
|
|
5
7
|
import { invariant } from '@dxos/invariant';
|
|
6
8
|
|
|
7
9
|
import { type JsonSchemaType } from '../json-schema';
|
|
8
|
-
import { getSnapshot } from '../schema';
|
|
9
10
|
|
|
10
11
|
/**
|
|
11
12
|
* Creates a composite schema from the source and projection schemas.
|
|
12
13
|
*/
|
|
13
14
|
// TODO(burdon): Use effect schema projections.
|
|
14
15
|
// TODO(burdon): Can avoid having to call this every time we modify any property on the view?
|
|
15
|
-
export const composeSchema = (
|
|
16
|
-
|
|
16
|
+
export const composeSchema = (
|
|
17
|
+
source: Types.Mutable<JsonSchemaType>,
|
|
18
|
+
target: Types.Mutable<JsonSchemaType>,
|
|
19
|
+
): Types.Mutable<JsonSchemaType> => {
|
|
20
|
+
const result = structuredClone(target);
|
|
17
21
|
invariant('type' in result && result.type === 'object', 'source schema must be an object');
|
|
18
22
|
invariant('type' in source && source.type === 'object', 'target schema must be an object');
|
|
19
23
|
|
|
@@ -21,12 +25,13 @@ export const composeSchema = (source: JsonSchemaType, target: JsonSchemaType): J
|
|
|
21
25
|
const propSchema = source.properties![prop]; // TODO(dmaretskyi): Find by json-path instead.
|
|
22
26
|
const annotations = (propSchema as JsonSchemaType)?.annotations?.meta;
|
|
23
27
|
if (annotations) {
|
|
24
|
-
|
|
25
|
-
|
|
28
|
+
const resultProp = result.properties[prop] as Record<string, any>;
|
|
29
|
+
resultProp.annotations ??= {};
|
|
30
|
+
resultProp.annotations.meta ??= {};
|
|
26
31
|
for (const key in annotations) {
|
|
27
|
-
|
|
28
|
-
Object.assign(
|
|
29
|
-
...
|
|
32
|
+
resultProp.annotations.meta[key] ??= {};
|
|
33
|
+
Object.assign(resultProp.annotations.meta[key], annotations[key], {
|
|
34
|
+
...resultProp.annotations.meta[key],
|
|
30
35
|
});
|
|
31
36
|
}
|
|
32
37
|
}
|