@dxos/echo 0.8.4-main.72ec0f3 → 0.8.4-main.7ace549
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/dist/lib/browser/{chunk-BIDAASFK.mjs → chunk-7GH6RXJ3.mjs} +2246 -2290
- package/dist/lib/browser/chunk-7GH6RXJ3.mjs.map +7 -0
- package/dist/lib/browser/chunk-E4UTVJNF.mjs +1111 -0
- package/dist/lib/browser/chunk-E4UTVJNF.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +18 -8
- package/dist/lib/browser/internal/index.mjs +45 -45
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +252 -191
- package/dist/lib/browser/testing/index.mjs.map +4 -4
- package/dist/lib/node-esm/chunk-JE5RXM2I.mjs +1111 -0
- package/dist/lib/node-esm/chunk-JE5RXM2I.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-3SVRRCUU.mjs → chunk-M4B6BMD2.mjs} +2246 -2290
- package/dist/lib/node-esm/chunk-M4B6BMD2.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +18 -8
- package/dist/lib/node-esm/internal/index.mjs +45 -45
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/testing/index.mjs +252 -191
- 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 +137 -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/Format.d.ts +4 -0
- package/dist/types/src/Format.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 +79 -70
- package/dist/types/src/Obj.d.ts.map +1 -1
- package/dist/types/src/Ref.d.ts +10 -10
- package/dist/types/src/Ref.d.ts.map +1 -1
- package/dist/types/src/Relation.d.ts +14 -11
- package/dist/types/src/Relation.d.ts.map +1 -1
- package/dist/types/src/Tag.d.ts +1 -1
- package/dist/types/src/Tag.d.ts.map +1 -1
- package/dist/types/src/Type.d.ts +39 -49
- package/dist/types/src/Type.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +6 -3
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/internal/annotations/annotations.d.ts +174 -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 +26 -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/{object → entities}/expando.d.ts +3 -1
- 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/format.d.ts +2 -0
- package/dist/types/src/internal/formats/format.d.ts.map +1 -1
- package/dist/types/src/internal/formats/types.d.ts +7 -7
- package/dist/types/src/internal/formats/types.d.ts.map +1 -1
- package/dist/types/src/internal/index.d.ts +6 -10
- package/dist/types/src/internal/index.d.ts.map +1 -1
- package/dist/types/src/internal/json-schema/annotations.d.ts.map +1 -0
- package/dist/types/src/internal/json-schema/effect-schema.test.d.ts.map +1 -0
- package/dist/types/src/internal/json-schema/index.d.ts +2 -0
- package/dist/types/src/internal/json-schema/index.d.ts.map +1 -1
- package/dist/types/src/internal/json-schema/json-schema-type.d.ts.map +1 -1
- package/dist/types/src/internal/{json → json-schema}/json-schema.d.ts +2 -1
- package/dist/types/src/internal/json-schema/json-schema.d.ts.map +1 -0
- package/dist/types/src/internal/json-schema/json-schema.test.d.ts.map +1 -0
- package/dist/types/src/internal/object/common.d.ts.map +1 -1
- package/dist/types/src/internal/object/{create.d.ts → create-object.d.ts} +8 -9
- 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 +3 -11
- package/dist/types/src/internal/object/index.d.ts.map +1 -1
- package/dist/types/src/internal/object/json-serializer.d.ts +1 -2
- package/dist/types/src/internal/object/json-serializer.d.ts.map +1 -1
- package/dist/types/src/internal/object/schema-validator.d.ts.map +1 -1
- package/dist/types/src/internal/object/typed-object.d.ts +1 -1
- package/dist/types/src/internal/object/typed-object.d.ts.map +1 -1
- 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/typed-handler.d.ts +1 -1
- package/dist/types/src/internal/proxy/typed-handler.d.ts.map +1 -1
- package/dist/types/src/internal/ref/ref.d.ts +15 -12
- package/dist/types/src/internal/ref/ref.d.ts.map +1 -1
- package/dist/types/src/internal/schema/compose.d.ts.map +1 -0
- package/dist/types/src/internal/schema/compose.test.d.ts.map +1 -0
- package/dist/types/src/internal/schema/echo-schema.d.ts +9 -9
- package/dist/types/src/internal/schema/echo-schema.d.ts.map +1 -1
- package/dist/types/src/internal/schema/index.d.ts +3 -4
- package/dist/types/src/internal/schema/index.d.ts.map +1 -1
- 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/runtime-schema-registry.d.ts +1 -1
- package/dist/types/src/internal/schema/runtime-schema-registry.d.ts.map +1 -1
- 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/{ast/entity-kind.d.ts → types/entity.d.ts} +3 -1
- 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 +20 -11
- package/dist/types/src/internal/types/meta.d.ts.map +1 -0
- package/dist/types/src/internal/types/typename.d.ts +13 -0
- package/dist/types/src/internal/types/typename.d.ts.map +1 -0
- package/dist/types/src/internal/{object → types}/version.d.ts +3 -2
- package/dist/types/src/internal/types/version.d.ts.map +1 -0
- package/dist/types/src/query/filter.d.ts +167 -0
- package/dist/types/src/query/filter.d.ts.map +1 -0
- package/dist/types/src/query/index.d.ts +3 -0
- package/dist/types/src/query/index.d.ts.map +1 -1
- package/dist/types/src/query/order.d.ts +12 -0
- package/dist/types/src/query/order.d.ts.map +1 -0
- package/dist/types/src/query/query.d.ts +9 -145
- package/dist/types/src/query/query.d.ts.map +1 -1
- package/dist/types/src/query/testing.d.ts +51 -0
- package/dist/types/src/query/testing.d.ts.map +1 -0
- package/dist/types/src/{internal/query/query.d.ts → query/types.d.ts} +1 -1
- package/dist/types/src/query/types.d.ts.map +1 -0
- package/dist/types/src/query/util.d.ts +8 -0
- package/dist/types/src/query/util.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/{types.d.ts → test-schema.d.ts} +166 -57
- package/dist/types/src/testing/test-schema.d.ts.map +1 -0
- package/dist/types/src/{internal/testing/utils.d.ts → testing/util.d.ts} +11 -5
- package/dist/types/src/testing/util.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +46 -38
- package/src/Annotation.ts +17 -0
- package/src/Database.ts +189 -0
- package/src/Entity.ts +51 -0
- package/src/Format.ts +11 -0
- package/src/JsonSchema.ts +16 -0
- package/src/Key.ts +3 -0
- package/src/Obj.ts +248 -181
- package/src/Ref.ts +9 -9
- package/src/Relation.ts +58 -44
- package/src/Tag.ts +2 -1
- package/src/Type.ts +96 -83
- package/src/index.ts +9 -4
- package/src/internal/README.md +83 -0
- package/src/internal/{ast → annotations}/annotations.test.ts +13 -15
- package/src/internal/annotations/annotations.ts +463 -0
- package/src/internal/annotations/index.ts +6 -0
- package/src/internal/annotations/util.ts +70 -0
- package/src/internal/entities/entity.ts +109 -0
- package/src/internal/{object → entities}/expando.ts +7 -5
- package/src/internal/entities/index.ts +9 -0
- package/src/internal/{object → entities}/model.ts +49 -90
- 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 +1 -1
- package/src/internal/formats/date.ts +5 -5
- package/src/internal/formats/format.test.ts +5 -5
- package/src/internal/formats/format.ts +3 -0
- package/src/internal/formats/number.ts +5 -5
- package/src/internal/formats/object.ts +2 -2
- package/src/internal/formats/string.ts +9 -9
- package/src/internal/formats/types.ts +44 -39
- package/src/internal/index.ts +29 -13
- package/src/internal/{json → json-schema}/annotations.ts +1 -1
- package/src/internal/json-schema/index.ts +2 -0
- package/src/internal/json-schema/json-schema-type.ts +4 -3
- package/src/internal/{json → json-schema}/json-schema.test.ts +48 -38
- package/src/internal/{json → json-schema}/json-schema.ts +16 -7
- package/src/internal/object/common.ts +3 -4
- package/src/internal/object/{create.test.ts → create-object.test.ts} +30 -32
- package/src/internal/object/{create.ts → create-object.ts} +33 -34
- package/src/internal/object/deleted.ts +6 -6
- package/src/internal/object/ids.ts +1 -1
- package/src/internal/object/index.ts +3 -11
- package/src/internal/object/inspect.ts +3 -5
- package/src/internal/object/json-serializer.test.ts +33 -38
- package/src/internal/object/json-serializer.ts +43 -38
- package/src/internal/object/schema-validator.ts +3 -2
- package/src/internal/object/typed-object.test.ts +1 -1
- package/src/internal/object/typed-object.ts +11 -5
- package/src/internal/proxy/handler.test.ts +30 -20
- package/src/internal/proxy/index.ts +6 -0
- package/src/internal/proxy/{reactive-object.ts → make-object.ts} +19 -14
- package/src/internal/proxy/schema.test.ts +5 -4
- package/src/internal/proxy/typed-handler.test.ts +28 -28
- package/src/internal/proxy/typed-handler.ts +8 -3
- package/src/internal/proxy/typed-object.test.ts +16 -11
- package/src/internal/ref/ref.test.ts +8 -7
- package/src/internal/ref/ref.ts +24 -20
- package/src/internal/{projection → schema}/compose.test.ts +5 -6
- package/src/internal/{projection → schema}/compose.ts +2 -1
- package/src/internal/schema/echo-schema.ts +30 -28
- package/src/internal/schema/index.ts +3 -4
- package/src/internal/schema/manipulation.ts +1 -1
- package/src/internal/schema/persistent-schema.ts +28 -0
- package/src/internal/schema/runtime-schema-registry.ts +4 -4
- package/src/internal/types/base.ts +58 -0
- package/src/internal/{ast/entity-kind.ts → types/entity.ts} +8 -0
- package/src/internal/types/index.ts +5 -2
- package/src/internal/{object → types}/meta.ts +32 -17
- package/src/internal/types/typename.ts +45 -0
- package/src/internal/types/version.ts +20 -0
- package/src/query/filter.ts +455 -0
- package/src/query/index.ts +4 -1
- package/src/query/order.ts +34 -0
- package/src/query/query.test.ts +48 -115
- package/src/query/query.ts +16 -502
- package/src/query/testing.ts +64 -0
- package/src/query/util.ts +25 -0
- package/src/testing/api.test.ts +100 -0
- package/src/testing/index.ts +3 -3
- package/src/testing/test-data.ts +130 -0
- package/src/testing/test-schema.ts +213 -0
- package/src/{internal/testing/utils.ts → testing/util.ts} +38 -14
- package/dist/lib/browser/chunk-BIDAASFK.mjs.map +0 -7
- package/dist/lib/browser/chunk-ZDLCWGEW.mjs +0 -410
- package/dist/lib/browser/chunk-ZDLCWGEW.mjs.map +0 -7
- package/dist/lib/browser/chunk-ZFRJKT4A.mjs +0 -585
- package/dist/lib/browser/chunk-ZFRJKT4A.mjs.map +0 -7
- package/dist/lib/browser/query/index.mjs +0 -13
- package/dist/lib/browser/query/index.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-3SVRRCUU.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-CGDHRZWH.mjs +0 -585
- package/dist/lib/node-esm/chunk-CGDHRZWH.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-HWS6VBQC.mjs +0 -410
- package/dist/lib/node-esm/chunk-HWS6VBQC.mjs.map +0 -7
- package/dist/lib/node-esm/query/index.mjs +0 -13
- package/dist/lib/node-esm/query/index.mjs.map +0 -7
- 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.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.map +0 -1
- package/dist/types/src/internal/object/meta.d.ts.map +0 -1
- package/dist/types/src/internal/object/model.d.ts +0 -117
- package/dist/types/src/internal/object/model.d.ts.map +0 -1
- package/dist/types/src/internal/object/relation.d.ts +0 -17
- package/dist/types/src/internal/object/relation.d.ts.map +0 -1
- package/dist/types/src/internal/object/typename.d.ts +0 -15
- package/dist/types/src/internal/object/typename.d.ts.map +0 -1
- package/dist/types/src/internal/object/version.d.ts.map +0 -1
- package/dist/types/src/internal/projection/compose.d.ts.map +0 -1
- package/dist/types/src/internal/projection/compose.test.d.ts.map +0 -1
- package/dist/types/src/internal/projection/index.d.ts +0 -2
- package/dist/types/src/internal/projection/index.d.ts.map +0 -1
- package/dist/types/src/internal/proxy/reactive-object.d.ts +0 -15
- package/dist/types/src/internal/proxy/reactive-object.d.ts.map +0 -1
- package/dist/types/src/internal/query/index.d.ts +0 -2
- package/dist/types/src/internal/query/index.d.ts.map +0 -1
- package/dist/types/src/internal/query/query.d.ts.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 -381
- package/dist/types/src/internal/testing/types.d.ts.map +0 -1
- 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/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.map +0 -1
- package/src/internal/ast/annotation-helper.ts +0 -22
- package/src/internal/ast/annotations.ts +0 -226
- 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/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/query/index.ts +0 -5
- package/src/internal/schema/stored-schema.ts +0 -26
- package/src/internal/testing/index.ts +0 -6
- package/src/internal/testing/types.ts +0 -144
- 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/test/api.test.ts +0 -180
- package/src/testing/echo-schema.ts +0 -39
- package/src/testing/types.ts +0 -108
- /package/dist/types/src/internal/{ast → annotations}/annotations.test.d.ts +0 -0
- /package/dist/types/src/internal/{json → json-schema}/annotations.d.ts +0 -0
- /package/dist/types/src/internal/{json → json-schema}/effect-schema.test.d.ts +0 -0
- /package/dist/types/src/internal/{json → json-schema}/json-schema.test.d.ts +0 -0
- /package/dist/types/src/internal/{projection → schema}/compose.d.ts +0 -0
- /package/dist/types/src/internal/{projection → schema}/compose.test.d.ts +0 -0
- /package/dist/types/src/{test → testing}/api.test.d.ts +0 -0
- /package/src/internal/{json → json-schema}/effect-schema.test.ts +0 -0
- /package/src/{internal/query/query.ts → query/types.ts} +0 -0
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/internal/index.ts", "../../../src/internal/ast/annotations.ts", "../../../src/internal/ast/annotation-helper.ts", "../../../src/internal/ast/entity-kind.ts", "../../../src/internal/ast/types.ts", "../../../src/internal/formats/number.ts", "../../../src/internal/formats/types.ts", "../../../src/internal/formats/object.ts", "../../../src/internal/formats/format.ts", "../../../src/internal/formats/date.ts", "../../../src/internal/formats/string.ts", "../../../src/internal/formats/select.ts", "../../../src/internal/json/json-schema.ts", "../../../src/internal/json-schema/json-schema-type.ts", "../../../src/internal/json-schema/json-schema-normalize.ts", "../../../src/internal/object/common.ts", "../../../src/internal/object/typename.ts", "../../../src/internal/object/accessors.ts", "../../../src/internal/object/model.ts", "../../../src/internal/object/create.ts", "../../../src/internal/object/inspect.ts", "../../../src/internal/object/json-serializer.ts", "../../../src/internal/ref/ref.ts", "../../../src/internal/ref/ref-array.ts", "../../../src/internal/object/meta.ts", "../../../src/internal/object/entity.ts", "../../../src/internal/object/expando.ts", "../../../src/internal/object/ids.ts", "../../../src/internal/object/typed-object.ts", "../../../src/internal/object/deleted.ts", "../../../src/internal/object/schema-validator.ts", "../../../src/internal/object/version.ts", "../../../src/internal/json/annotations.ts", "../../../src/internal/types/types.ts", "../../../src/internal/projection/compose.ts", "../../../src/internal/schema/echo-schema.ts", "../../../src/internal/schema/manipulation.ts", "../../../src/internal/schema/snapshot.ts", "../../../src/internal/schema/stored-schema.ts", "../../../src/internal/schema/runtime-schema-registry.ts", "../../../src/internal/proxy/reactive-object.ts", "../../../src/internal/proxy/typed-handler.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nexport { JsonPath, splitJsonPath, JsonProp } from '@dxos/effect';\n\n// TODO(dmaretskyi): Remove.\nexport { ObjectId } from '@dxos/keys';\nexport { ForeignKey } from '@dxos/echo-protocol';\n\nexport * from './ast';\nexport * from './formats';\nexport * from './json';\nexport * from './json-schema';\nexport * from './object';\nexport * from './types';\nexport { defineHiddenProperty } from '@dxos/live-object';\nexport * from './projection';\n// TODO(dmaretskyi): Remove\nexport { live } from './proxy/reactive-object';\nexport * from './ref';\nexport * from './schema';\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Function from 'effect/Function';\nimport * as Option from 'effect/Option';\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { assertArgument } from '@dxos/invariant';\nimport { DXN } from '@dxos/keys';\nimport { type Primitive } from '@dxos/util';\n\nimport { createAnnotationHelper } from './annotation-helper';\nimport { EntityKind } from './entity-kind';\n\n/**\n * If property is optional returns the nested property, otherwise returns the property.\n */\n// TODO(wittjosiah): Is there a way to do this as a generic?\nexport const unwrapOptional = (property: SchemaAST.PropertySignature) => {\n if (!property.isOptional || !SchemaAST.isUnion(property.type)) {\n return property;\n }\n\n return property.type.types[0];\n};\n\n/**\n * ECHO identifier (for a stored schema).\n * Must be a `dxn:echo:` URI.\n */\nexport const TypeIdentifierAnnotationId = Symbol.for('@dxos/schema/annotation/TypeIdentifier');\n\nexport const getTypeIdentifierAnnotation = (schema: Schema.Schema.All) =>\n Function.flow(\n SchemaAST.getAnnotation<string>(TypeIdentifierAnnotationId),\n Option.getOrElse(() => undefined),\n )(schema.ast);\n\n/**\n * ECHO type.\n */\nexport const TypeAnnotationId = Symbol.for('@dxos/schema/annotation/Type');\n\n// TODO(burdon): Create echo-schema Format types.\n// TODO(burdon): Reconcile with \"short\" DXN.\nexport const Typename = Schema.String.pipe(Schema.pattern(/^[a-zA-Z]\\w+\\.[a-zA-Z]\\w{1,}\\/[\\w/_-]+$/));\nexport const SchemaVersion = Schema.String.pipe(Schema.pattern(/^\\d+.\\d+.\\d+$/));\n\n/**\n * Payload stored under {@link TypeAnnotationId}.\n */\n// TODO(dmaretskyi): Rename getTypeAnnotation to represent commonality between objects and relations (e.g. `entity`).\nexport const TypeAnnotation = Schema.Struct({\n kind: Schema.Enums(EntityKind),\n typename: Typename,\n version: SchemaVersion,\n\n /**\n * If this is a relation, the schema of the source object.\n * Must be present if entity kind is {@link EntityKind.Relation}.\n */\n sourceSchema: Schema.optional(DXN.Schema),\n\n /**\n * If this is a relation, the schema of the target object.\n * Must be present if entity kind is {@link EntityKind.Relation}.\n */\n targetSchema: Schema.optional(DXN.Schema),\n});\n\nexport interface TypeAnnotation extends Schema.Schema.Type<typeof TypeAnnotation> {}\n\nexport type TypeMeta = Pick<TypeAnnotation, 'typename' | 'version'>;\n\n/**\n * @returns {@link TypeAnnotation} from a schema.\n * Schema must have been created with {@link TypedObject} or {@link TypedLink} or manually assigned an appropriate annotation.\n */\nexport const getTypeAnnotation = (schema: Schema.Schema.All): TypeAnnotation | undefined => {\n assertArgument(schema != null && schema.ast != null, 'schema', 'invalid schema');\n return Function.flow(\n SchemaAST.getAnnotation<TypeAnnotation>(TypeAnnotationId),\n Option.getOrElse(() => undefined),\n )(schema.ast);\n};\n\n/**\n * @returns {@link EntityKind} from a schema.\n */\nexport const getEntityKind = (schema: Schema.Schema.All): EntityKind | undefined => getTypeAnnotation(schema)?.kind;\n\n/**\n * @deprecated Use {@link Type.getTypename} instead.\n * @returns Schema typename (without dxn: prefix or version number).\n */\nexport const getSchemaTypename = (schema: Schema.Schema.All): string | undefined => getTypeAnnotation(schema)?.typename;\n\n/**\n * @deprecated Use {@link Type.getVersion} instead.\n * @returns Schema version in semver format.\n */\nexport const getSchemaVersion = (schema: Schema.Schema.All): string | undefined => getTypeAnnotation(schema)?.version;\n\n/**\n * PropertyMeta (metadata for dynamic schema properties).\n * For user-defined annotations.\n */\nexport const PropertyMetaAnnotationId = Symbol.for('@dxos/schema/annotation/PropertyMeta');\n\nexport type PropertyMetaValue = Primitive | Record<string, Primitive> | Primitive[];\n\nexport type PropertyMetaAnnotation = {\n [name: string]: PropertyMetaValue;\n};\n\nexport const PropertyMeta = (name: string, value: PropertyMetaValue) => {\n return <A, I, R>(self: Schema.Schema<A, I, R>): Schema.Schema<A, I, R> => {\n const existingMeta = self.ast.annotations[PropertyMetaAnnotationId] as PropertyMetaAnnotation;\n return self.annotations({\n [PropertyMetaAnnotationId]: {\n ...existingMeta,\n [name]: value,\n },\n });\n };\n};\n\nexport const getPropertyMetaAnnotation = <T>(prop: SchemaAST.PropertySignature, name: string) =>\n Function.pipe(\n SchemaAST.getAnnotation<PropertyMetaAnnotation>(PropertyMetaAnnotationId)(prop.type),\n Option.map((meta) => meta[name] as T),\n Option.getOrElse(() => undefined),\n );\n\n/**\n * Schema reference.\n */\nexport const ReferenceAnnotationId = Symbol.for('@dxos/schema/annotation/Reference');\n\nexport type ReferenceAnnotationValue = TypeAnnotation;\n\nexport const getReferenceAnnotation = (schema: Schema.Schema.AnyNoContext) =>\n Function.pipe(\n SchemaAST.getAnnotation<ReferenceAnnotationValue>(ReferenceAnnotationId)(schema.ast),\n Option.getOrElse(() => undefined),\n );\n\n/**\n * SchemaMeta.\n */\nexport const SchemaMetaSymbol = Symbol.for('@dxos/schema/SchemaMeta');\n\nexport type SchemaMeta = TypeMeta & { id: string };\n\n/**\n * Identifies a schema as a view.\n */\nexport const ViewAnnotationId = Symbol.for('@dxos/schema/annotation/View');\nexport const ViewAnnotation = createAnnotationHelper<boolean>(ViewAnnotationId);\n\n/**\n * Identifies label property or JSON path expression.\n * Either a string or an array of strings representing field accessors each matched in priority order.\n */\nexport const LabelAnnotationId = Symbol.for('@dxos/schema/annotation/Label');\nexport const LabelAnnotation = createAnnotationHelper<string[]>(LabelAnnotationId);\n\n/**\n * Identifies description property or JSON path expression.\n * A string representing field accessor.\n */\nexport const DescriptionAnnotationId = Symbol.for('@dxos/schema/annotation/Description');\nexport const DescriptionAnnotation = createAnnotationHelper<string>(DescriptionAnnotationId);\n\n/**\n * Identifies if a property should be included in a form or not.\n * By default, all properties are included in forms, so this is opt-out.\n */\nexport const FormAnnotationId = Symbol.for('@dxos/schema/annotation/Form');\nexport const FormAnnotation = createAnnotationHelper<boolean>(FormAnnotationId);\n\n/**\n * Default field to be used on referenced schema to lookup the value.\n */\nexport const FieldLookupAnnotationId = Symbol.for('@dxos/schema/annotation/FieldLookup');\n\n/**\n * Generate test data.\n */\nexport const GeneratorAnnotationId = Symbol.for('@dxos/schema/annotation/Generator');\n\nexport type GeneratorAnnotationValue =\n | string\n | {\n generator: string;\n args?: any[];\n probability?: number;\n };\n\nexport const GeneratorAnnotation = createAnnotationHelper<GeneratorAnnotationValue>(GeneratorAnnotationId);\n\n/**\n * @returns DXN of the schema.\n *\n * For non-stored schema returns `dxn:type:`.\n * For stored schema returns `dxn:echo:`.\n * @deprecated Use `Type.getDXN`.\n */\nexport const getSchemaDXN = (schema: Schema.Schema.All): DXN | undefined => {\n assertArgument(Schema.isSchema(schema), 'schema', 'invalid schema');\n\n const id = getTypeIdentifierAnnotation(schema);\n if (id) {\n return DXN.parse(id);\n }\n\n // TODO(dmaretskyi): Add support for dynamic schema.\n const objectAnnotation = getTypeAnnotation(schema);\n if (!objectAnnotation) {\n return undefined;\n }\n\n return DXN.fromTypenameAndVersion(objectAnnotation.typename, objectAnnotation.version);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as Option from 'effect/Option';\nimport type * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nexport interface AnnotationHelper<T> {\n get: (schema: Schema.Schema.Any) => Option.Option<T>;\n set: (value: T) => <S extends Schema.Schema.Any>(schema: S) => S;\n}\n\nexport const createAnnotationHelper = <T>(id: symbol): AnnotationHelper<T> => {\n return {\n get: (schema) => SchemaAST.getAnnotation(schema.ast, id),\n set:\n (value) =>\n <S extends Schema.Schema.Any>(schema: S) =>\n schema.annotations({ [id]: value }) as S,\n };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\n/**\n * Kinds of entities stored in ECHO: objects and relations.\n */\nexport enum EntityKind {\n Object = 'object',\n Relation = 'relation',\n}\n\nexport const EntityKindSchema = Schema.Enums(EntityKind);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { PropertyMeta } from './annotations';\n\n/**\n * @internal\n */\nexport const FIELD_PATH_ANNOTATION = 'path';\n\n/**\n * Sets the path for the field.\n * @param path Data source path in the json path format. This is the field path in the source object.\n */\n// TODO(burdon): Field, vs. path vs. property.\nexport const FieldPath = (path: string) => PropertyMeta(FIELD_PATH_ANNOTATION, path);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { FormatAnnotation, FormatEnum } from './types';\n\nconst encodeMultipleOf = (divisor: number) => 1 / Math.pow(10, divisor);\n\nconst encodeMultiple =\n <A extends number>(divisor?: number) =>\n <I, R>(self: Schema.Schema<A, I, R>) =>\n divisor === undefined || divisor === 0 ? self : self.pipe(Schema.multipleOf(encodeMultipleOf(divisor)));\n\n/**\n * Convert number of digits to multipleOf annotation.\n */\nexport const DecimalPrecision = Schema.transform(Schema.Number, Schema.Number, {\n strict: true,\n encode: (value) => encodeMultipleOf(value),\n decode: (value) => Math.log10(1 / value),\n}).annotations({\n title: 'Number of digits',\n});\n\nexport const CurrencyAnnotationId = Symbol.for('@dxos/schema/annotation/Currency');\n\nexport type CurrencyAnnotation = {\n decimals?: number;\n code?: string;\n};\n\n/**\n * ISO 4217 currency code.\n */\nexport const Currency = ({ decimals, code }: CurrencyAnnotation = { decimals: 2 }) =>\n Schema.Number.pipe(\n encodeMultiple(decimals),\n FormatAnnotation.set(FormatEnum.Currency),\n Schema.annotations({\n title: 'Currency',\n description: 'Currency value',\n ...(code ? { [CurrencyAnnotationId]: code.toUpperCase() } : {}),\n }),\n );\n\nexport type PercentAnnotation = {\n decimals?: number;\n};\n\n/**\n * Integer.\n */\nexport const Integer = () =>\n Schema.Number.pipe(\n Schema.int(),\n FormatAnnotation.set(FormatEnum.Integer),\n Schema.annotations({\n title: 'Integer',\n description: 'Integer value',\n }),\n );\n\n/**\n * Percent.\n */\n// TODO(burdon): Define min/max (e.g., 0, 1).\nexport const Percent = ({ decimals }: PercentAnnotation = { decimals: 2 }) =>\n Schema.Number.pipe(\n encodeMultiple(decimals),\n FormatAnnotation.set(FormatEnum.Percent),\n Schema.annotations({\n title: 'Percent',\n description: 'Percentage value',\n }),\n );\n\n/**\n * Unix timestamp.\n * https://en.wikipedia.org/wiki/Unix_time\n */\nexport const Timestamp = Schema.Number.pipe(\n FormatAnnotation.set(FormatEnum.Timestamp),\n Schema.annotations({\n title: 'Timestamp',\n description: 'Unix timestamp',\n }),\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Function from 'effect/Function';\nimport type * as JSONSchema from 'effect/JSONSchema';\nimport * as Option from 'effect/Option';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { createAnnotationHelper } from '../ast';\nimport { type JsonSchemaType } from '../json-schema';\n\n// TODO(burdon): Rename PropertyType.\nexport type ScalarType =\n | JSONSchema.JsonSchema7Object\n | JSONSchema.JsonSchema7String\n | JSONSchema.JsonSchema7Number\n | JSONSchema.JsonSchema7Boolean\n | JSONSchema.JsonSchema7Ref;\n\n// TODO(burdon): Rename ValueType and change to disciminated union.\n// export type ValueType = 'array' | 'object' | 'string' | 'number' | 'boolean' | 'ref';\nexport enum TypeEnum {\n Array = 'array', // TODO(burdon): Remove?\n Object = 'object',\n String = 'string',\n Number = 'number',\n Boolean = 'boolean',\n Ref = 'ref',\n}\n\n// TODO(burdon): Ref?\nexport const getTypeEnum = (property: JsonSchemaType): TypeEnum | undefined => {\n switch (property.type) {\n case 'array':\n return TypeEnum.Array;\n case 'object':\n return TypeEnum.Object;\n case 'string':\n return TypeEnum.String;\n case 'number':\n return TypeEnum.Number;\n case 'boolean':\n return TypeEnum.Boolean;\n default:\n return undefined;\n }\n};\n\n/**\n * https://json-schema.org/understanding-json-schema/reference/schema\n * https://json-schema.org/understanding-json-schema/reference/string#built-in-formats\n */\nexport const FormatAnnotationId = Symbol.for('@dxos/schema/annotation/Format');\n\nexport const FormatAnnotation = createAnnotationHelper<FormatEnum>(FormatAnnotationId);\n\nexport const getFormatAnnotation = (node: SchemaAST.AST): FormatEnum | undefined =>\n Function.pipe(SchemaAST.getAnnotation<FormatEnum>(FormatAnnotationId)(node), Option.getOrUndefined);\n\n// TODO(burdon): Rename to FormatType and change to discriminated union.\nexport enum FormatEnum {\n None = 'none',\n String = 'string',\n Number = 'number',\n Boolean = 'boolean',\n Ref = 'ref',\n\n //\n // { type: 'string' }\n //\n\n DID = 'did', // Users, etc.\n DXN = 'dxn',\n Email = 'email',\n Formula = 'formula', // Spreadsheet formula.\n Hostname = 'hostname',\n JSON = 'json',\n Markdown = 'markdown',\n Regex = 'regex',\n SingleSelect = 'single-select',\n MultiSelect = 'multi-select',\n URL = 'url',\n UUID = 'uuid',\n\n //\n // { type: 'number' }\n //\n\n Currency = 'currency',\n Integer = 'integer',\n Percent = 'percent',\n Timestamp = 'timestamp',\n\n //\n // { type: 'date' }\n //\n\n DateTime = 'date-time',\n Date = 'date',\n Time = 'time',\n Duration = 'duration',\n\n //\n // { type: 'object' }\n //\n\n GeoPoint = 'lnglat',\n}\n\nexport const FormatEnums = Object.values(FormatEnum).sort();\n\nexport const PropertyKind = {\n type: TypeEnum,\n format: FormatEnum,\n};\n\n/**\n * Default formats\n */\nexport const typeToFormat: Partial<Record<TypeEnum, FormatEnum>> = {\n [TypeEnum.String]: FormatEnum.String,\n [TypeEnum.Number]: FormatEnum.Number,\n [TypeEnum.Boolean]: FormatEnum.Boolean,\n};\n\n/**\n * Map of format to type.\n */\nexport const formatToType: Record<FormatEnum, TypeEnum> = {\n [FormatEnum.None]: undefined as any,\n [FormatEnum.String]: TypeEnum.String,\n [FormatEnum.Number]: TypeEnum.Number,\n [FormatEnum.Boolean]: TypeEnum.Boolean,\n [FormatEnum.Ref]: TypeEnum.Ref,\n\n // Strings\n [FormatEnum.DID]: TypeEnum.String,\n [FormatEnum.DXN]: TypeEnum.String,\n [FormatEnum.Email]: TypeEnum.String,\n [FormatEnum.Formula]: TypeEnum.String,\n [FormatEnum.Hostname]: TypeEnum.String,\n [FormatEnum.JSON]: TypeEnum.String,\n [FormatEnum.Markdown]: TypeEnum.String,\n [FormatEnum.Regex]: TypeEnum.String,\n [FormatEnum.URL]: TypeEnum.String,\n [FormatEnum.UUID]: TypeEnum.String,\n [FormatEnum.SingleSelect]: TypeEnum.String,\n [FormatEnum.MultiSelect]: TypeEnum.Object,\n\n // Dates\n [FormatEnum.Date]: TypeEnum.String,\n [FormatEnum.DateTime]: TypeEnum.String,\n [FormatEnum.Duration]: TypeEnum.String,\n [FormatEnum.Time]: TypeEnum.String,\n\n // Numbers\n [FormatEnum.Currency]: TypeEnum.Number,\n [FormatEnum.Integer]: TypeEnum.Number,\n [FormatEnum.Percent]: TypeEnum.Number,\n [FormatEnum.Timestamp]: TypeEnum.Number,\n\n // Objects\n [FormatEnum.GeoPoint]: TypeEnum.Array,\n};\n\n/**\n * Allowed value options for select.\n */\nexport const OptionsAnnotationId = Symbol.for('@dxos/schema/annotation/Options');\n\nexport const getOptionsAnnotation = (node: SchemaAST.AST): OptionsAnnotationType[] | undefined =>\n Function.pipe(SchemaAST.getAnnotation<OptionsAnnotationType[]>(OptionsAnnotationId)(node), Option.getOrUndefined);\n\nexport type OptionsAnnotationType = string | number;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { clamp } from '@dxos/util';\n\nimport { FormatAnnotation, FormatEnum } from './types';\n\n/**\n * GeoJSON Format\n * https://datatracker.ietf.org/doc/html/rfc7946\n * https://datatracker.ietf.org/doc/html/rfc7946#section-3.1.1\n * https://en.wikipedia.org/wiki/Geographic_coordinate_system\n * https://geojson.org\n * {\n * \"type\": \"Point\",\n * \"coordinates\": [0, 51.47] // [longitude, latitude]\n * }\n * Note: optional third element for altitude.\n */\nexport const GeoPoint = Schema.Tuple(\n Schema.Number.pipe(Schema.annotations({ title: 'Longitude' }), Schema.clamp(-180, 180), Schema.multipleOf(0.00001)),\n Schema.Number.pipe(Schema.annotations({ title: 'Latitude' }), Schema.clamp(-90, 90), Schema.multipleOf(0.00001)),\n Schema.optionalElement(Schema.Number).annotations({\n title: 'Height ASL (m)',\n }),\n).pipe(\n FormatAnnotation.set(FormatEnum.GeoPoint),\n Schema.annotations({\n title: 'GeoPoint',\n description: 'GeoJSON Position',\n }),\n);\n\nexport type GeoPoint = Schema.Schema.Type<typeof GeoPoint>;\n\nexport type GeoLocation = {\n longitude: number;\n latitude: number;\n height?: number;\n};\n\n/**\n * Geolocation utilities for working with GeoPoint format.\n */\nexport namespace GeoLocation {\n /**\n * Convert latitude and longitude to GeoPoint (GeoJSON format [longitude, latitude, height?]).\n * Clamps values to valid ranges: latitude [-90, 90], longitude [-180, 180].\n */\n export const toGeoPoint = ({ longitude, latitude, height }: GeoLocation): GeoPoint => {\n // TODO(ZaymonFC): Use schema validation instead of doing this manually.\n const clampedLongitude = clamp(longitude, -180, 180);\n const clampedLatitude = clamp(latitude, -90, 90);\n return height !== undefined ? [clampedLongitude, clampedLatitude, height] : [clampedLongitude, clampedLatitude];\n };\n\n /**\n * Extract latitude and longitude from GeoPoint (GeoJSON format [longitude, latitude, height?]).\n */\n export const fromGeoPoint = (geoPoint: GeoPoint | undefined): GeoLocation => {\n if (!geoPoint) {\n return { longitude: 0, latitude: 0 };\n }\n\n const result: GeoLocation = {\n longitude: geoPoint[0],\n latitude: geoPoint[1],\n };\n\n // Add height if defined.\n if (geoPoint[2] !== undefined) {\n result.height = geoPoint[2];\n }\n\n return result;\n };\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport * as Keys from '@dxos/keys';\n\nimport * as DateUtil from './date';\nimport * as NumberUtil from './number';\nimport * as ObjectUtil from './object';\nimport * as StringUtil from './string';\n\n// TODO(burdon): Consider factoring out to separate `@dxos/json-schema`\n// TODO(burdon): Media encoding.\n// - https://json-schema.org/understanding-json-schema/reference/non_json_data\n\n/**\n * Formats.\n * https://json-schema.org/understanding-json-schema/reference/string#built-in-formats\n * NOTE: A JSON Schema validator will ignore any format type that it does not understand.\n */\n// TODO(burdon): Add fields for `examples`, `message`, etc.\nexport namespace Format {\n // Strings\n export const DXN = Keys.DXN.Schema;\n export const Email = StringUtil.Email;\n export const Formula = StringUtil.Formula;\n export const Hostname = StringUtil.Hostname;\n export const JSON = StringUtil.JSON;\n export const Markdown = StringUtil.Markdown;\n export const Regex = StringUtil.Regex;\n export const URL = StringUtil.URL;\n export const UUID = Schema.UUID;\n\n // Numbers\n // TODO(burdon): BigInt.\n export const Currency = NumberUtil.Currency;\n export const Integer = NumberUtil.Integer;\n export const Percent = NumberUtil.Percent;\n export const Timestamp = NumberUtil.Timestamp;\n\n // Dates and times\n export const DateTime = DateUtil.DateTime;\n export const Date = DateUtil.DateOnly;\n export const Time = DateUtil.TimeOnly;\n export const Duration = DateUtil.Duration;\n\n // Objects\n export const GeoPoint = ObjectUtil.GeoPoint;\n export type GeoPoint = ObjectUtil.GeoPoint;\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { FormatAnnotation, FormatEnum } from './types';\n\n/**\n * Datetime values should be stored as ISO strings or unix numbers (ms) in UTC.\n *\n * NOTE: HyperFormula uses Excel's time format (null date 1900/01/01)\n * It can be configured to use a different parser via `parseDateTime`.\n * https://hyperformula.handsontable.com/guide/date-and-time-handling.html#date-and-time-handling\n * https://github.com/handsontable/hyperformula/blob/master/src/DateTimeHelper.ts\n */\n\n// TODO(burdon): Annotations not present in JSON.\n// TODO(burdon): Timezone.\n// TODO(burdon): Format for timestamp (Unix UTC or ISO 8601)?\n// TODO(burdon): Refs\n// - https://www.npmjs.com/package/numfmt\n// - https://date-fns.org/docs/Getting-Started\n// - https://github.com/date-fns/tz\n\n/**\n * Simple date compatible with HF.\n */\nexport const SimpleDate = Schema.Struct({\n year: Schema.Number.pipe(Schema.between(1900, 9999)),\n month: Schema.Number.pipe(Schema.between(1, 12)),\n day: Schema.Number.pipe(Schema.between(1, 31)),\n});\n\nexport type SimpleDate = Schema.Schema.Type<typeof SimpleDate>;\n\nexport const toSimpleDate = (date: Date): SimpleDate => ({\n year: date.getUTCFullYear(),\n month: date.getUTCMonth() + 1,\n day: date.getUTCDate(),\n});\n\n/**\n * Simple time compatible with HF.\n */\nexport const SimpleTime = Schema.Struct({\n hours: Schema.Number.pipe(Schema.between(0, 23)),\n minutes: Schema.Number.pipe(Schema.between(0, 59)),\n seconds: Schema.Number.pipe(Schema.between(0, 59)),\n});\n\nexport type SimpleTime = Schema.Schema.Type<typeof SimpleTime>;\n\nexport const toSimpleTime = (date: Date): SimpleTime => ({\n hours: date.getUTCHours(),\n minutes: date.getUTCSeconds(),\n seconds: date.getUTCSeconds(),\n});\n\n/**\n * Simple date-time compatible with HF.\n */\nexport const SimpleDateTime = Schema.extend(SimpleDate, SimpleTime);\n\nexport type SimpleDateTime = Schema.Schema.Type<typeof SimpleDateTime>;\n\nexport const toSimpleDateTime = (date: Date): SimpleDateTime => ({\n ...toSimpleDate(date),\n ...toSimpleTime(date),\n});\n\n/**\n * https://effect.website/docs/guides/schema/transformations#date-transformations\n */\n\n// TODO(burdon): Consider if transformations should be supported with Automerge.\n\n/**\n * Format: 2018-11-13\n */\nexport const DateOnly = /* Schema.transformOrFail(Schema.String, SimpleDate, {\n strict: true,\n decode: (str, _, ast) => {\n if (!isValidDateFormat(str)) {\n return ParseResult.fail(new ParseResult.Type(ast, str, 'Expected YYYY-MM-DD format'));\n }\n if (!isValidDate(str)) {\n return ParseResult.fail(new ParseResult.Type(ast, str, 'Invalid date'));\n }\n\n const [year, month, day] = str.split('-').map(Number);\n return ParseResult.succeed({ year, month, day });\n },\n encode: (date) => {\n return ParseResult.succeed(\n [\n date.year.toString().padStart(4, '0'),\n date.month.toString().padStart(2, '0'),\n date.day.toString().padStart(2, '0'),\n ].join('-'),\n );\n },\n}) */ Schema.String.pipe(\n FormatAnnotation.set(FormatEnum.Date),\n Schema.annotations({\n title: 'Date',\n description: 'Valid date in ISO format',\n }),\n);\n\n/**\n * Format: 20:20:39+00:00\n */\nexport const TimeOnly = /* Schema.transformOrFail(Schema.String, SimpleTime, {\n strict: true,\n decode: (str, _, ast) => {\n if (!isValidTimeFormat(str)) {\n return ParseResult.fail(new ParseResult.Type(ast, str, 'Expected HH:mm:ss format'));\n }\n\n const [hours, minutes, seconds] = str.split(':').map(Number);\n return ParseResult.succeed({ hours, minutes, seconds });\n },\n encode: (time) => {\n return ParseResult.succeed(\n [\n time.hours.toString().padStart(2, '0'),\n time.minutes.toString().padStart(2, '0'),\n time.seconds.toString().padStart(2, '0'),\n ].join(':'),\n );\n },\n}) */ Schema.String.pipe(\n FormatAnnotation.set(FormatEnum.Time),\n Schema.annotations({\n title: 'Time',\n description: 'Valid time in ISO format',\n }),\n);\n\n/**\n * Format: 2018-11-13T20:20:39+00:00\n */\nexport const DateTime = /* Schema.transformOrFail(Schema.String, SimpleDateTime, {\n strict: false,\n decode: (str, _, ast) => {\n const [date, time] = str.split('T');\n if (!isValidDateFormat(date)) {\n return ParseResult.fail(new ParseResult.Type(ast, date, 'Expected YYYY-MM-DD format'));\n }\n if (!isValidDate(date)) {\n return ParseResult.fail(new ParseResult.Type(ast, date, 'Invalid date'));\n }\n if (!isValidTimeFormat(time)) {\n return ParseResult.fail(new ParseResult.Type(ast, str, 'Expected HH:mm:ss format'));\n }\n\n const [year, month, day] = date.split('-').map(Number);\n const [hours, minutes, seconds] = time.split(':').map(Number);\n return ParseResult.succeed({ year, month, day, hours, minutes, seconds });\n },\n encode: (datetime) => {\n return ParseResult.succeed(\n [\n [\n datetime.year.toString().padStart(4, '0'),\n datetime.month.toString().padStart(2, '0'),\n datetime.day.toString().padStart(2, '0'),\n ].join('-'),\n [\n datetime.hours.toString().padStart(2, '0'),\n datetime.minutes.toString().padStart(2, '0'),\n datetime.seconds.toString().padStart(2, '0'),\n ].join(':'),\n ].join('T'),\n );\n },\n}) */ Schema.String.pipe(\n FormatAnnotation.set(FormatEnum.DateTime),\n Schema.annotations({\n title: 'DateTime',\n description: 'Valid date and time in ISO format',\n }),\n);\n\n/**\n * https://datatracker.ietf.org/doc/html/rfc3339#appendix-A\n */\n// TODO(burdon): Define duration type.\nexport const Duration = Schema.String.pipe(\n FormatAnnotation.set(FormatEnum.Duration),\n Schema.annotations({\n title: 'Duration',\n description: 'Duration in ISO 8601 format',\n [SchemaAST.ExamplesAnnotationId]: ['1h', '3D'],\n }),\n);\n\n//\n// Utils\n//\n\n// YYYY-MM-DD\nconst DATE_REGEX = /^\\d{4}-\\d{2}-\\d{2}$/;\n\nconst _isValidDateFormat = (str: string) => DATE_REGEX.test(str);\n\nconst _isValidDate = (str: string) => {\n const date = new Date(str);\n return !isNaN(date.getTime()) && date.toISOString().startsWith(str);\n};\n\n// HH:mm:ss\nconst TIME_REGEX = /^([01]\\d|2[0-3]):([0-5]\\d):([0-5]\\d)$/;\n\nconst _isValidTimeFormat = (str: string) => TIME_REGEX.test(str);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { FormatAnnotation, FormatEnum } from './types';\n\n/**\n * Email address (RFC 5321)\n * https://datatracker.ietf.org/doc/html/rfc5321#section-4.1.2\n */\nexport const Email = Schema.String.pipe(\n Schema.pattern(/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/),\n FormatAnnotation.set(FormatEnum.Email),\n Schema.annotations({\n title: 'Email',\n description: 'Email address',\n }),\n);\n\n/**\n *\n */\n// TODO(burdon): Implement.\nexport const Formula = Schema.String.pipe(FormatAnnotation.set(FormatEnum.Formula));\n\n/**\n *\n */\n// TODO(burdon): Implement.\nexport const Hostname = Schema.String.pipe(FormatAnnotation.set(FormatEnum.Hostname));\n\n/**\n *\n */\n// TODO(burdon): Implement.\nexport const JSON = Schema.String.pipe(FormatAnnotation.set(FormatEnum.JSON));\n\n/**\n *\n */\n// TODO(burdon): Implement.\nexport const Markdown = Schema.String.pipe(FormatAnnotation.set(FormatEnum.Markdown));\n\n/**\n * Regex\n * https://json-schema.org/understanding-json-schema/reference/regular_expressions\n * https://ecma-international.org/publications-and-standards/standards/ecma-262\n */\n// TODO(burdon): Implement.\nexport const Regex = Schema.String.pipe(FormatAnnotation.set(FormatEnum.Regex));\n\n/**\n * https://datatracker.ietf.org/doc/html/rfc3986#section-1.1.3\n */\nexport const URL = Schema.String.pipe(\n Schema.pattern(/^(\\w+?:\\/\\/)?([\\da-z.-]+)\\.([a-z.]{2,6})([/\\w .-]*)*\\/?$/i),\n FormatAnnotation.set(FormatEnum.URL),\n Schema.annotations({\n title: 'URL',\n description: 'URL',\n }),\n);\n\n/**\n * UUID (RFC 4122)\n * https://datatracker.ietf.org/doc/html/rfc4122\n */\nexport const UUID = Schema.UUID.pipe(\n FormatAnnotation.set(FormatEnum.UUID),\n Schema.annotations({\n [SchemaAST.ExamplesAnnotationId]: ['3e4666bf-d5e5-4aa7-b8ce-cefe41c7568a'],\n }),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\n/** Schema for a single select option. Used to define choices in a {single|multi}-select field. */\nexport const SelectOptionSchema = Schema.Struct({\n /** Stable identifier for the option. */\n id: Schema.NonEmptyString,\n title: Schema.String,\n /** Color palette used for visual styling. */\n color: Schema.String,\n}).pipe(Schema.mutable);\n\nexport type SelectOption = Schema.Schema.Type<typeof SelectOptionSchema>;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Array from 'effect/Array';\nimport * as Function from 'effect/Function';\nimport * as JSONSchema from 'effect/JSONSchema';\nimport * as Option from 'effect/Option';\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\nimport type * as Types from 'effect/Types';\n\nimport { raise } from '@dxos/debug';\nimport { mapAst } from '@dxos/effect';\nimport { assertArgument, invariant } from '@dxos/invariant';\nimport { DXN, ObjectId } from '@dxos/keys';\nimport { log } from '@dxos/log';\nimport { clearUndefined, orderKeys, removeProperties } from '@dxos/util';\n\nimport { type TypeAnnotation, TypeAnnotationId, TypeIdentifierAnnotationId } from '../ast';\nimport { EntityKind, EntityKindSchema } from '../ast';\nimport {\n ECHO_ANNOTATIONS_NS_DEPRECATED_KEY,\n ECHO_ANNOTATIONS_NS_KEY,\n type JsonSchemaEchoAnnotations,\n type JsonSchemaType,\n getNormalizedEchoAnnotations,\n} from '../json-schema';\nimport { Expando, makeTypeJsonSchemaAnnotation } from '../object';\nimport { type JsonSchemaReferenceInfo, Ref, createEchoReferenceSchema } from '../ref';\n\nimport { CustomAnnotations, DecodedAnnotations, EchoAnnotations } from './annotations';\n\n// TODO(burdon): Are these values stored (can they be changed?)\nexport enum PropType {\n NONE = 0,\n STRING = 1, // TODO(burdon): vs TEXT?\n NUMBER = 2,\n BOOLEAN = 3,\n DATE = 4,\n REF = 5,\n RECORD = 6,\n ENUM = 7,\n}\n\n// TODO(burdon): Reconcile with @dxos/schema.\nexport const toPropType = (type?: PropType): string => {\n switch (type) {\n case PropType.STRING:\n return 'string';\n case PropType.NUMBER:\n return 'number';\n case PropType.BOOLEAN:\n return 'boolean';\n case PropType.DATE:\n return 'date';\n case PropType.REF:\n return 'ref';\n case PropType.RECORD:\n return 'object';\n default:\n throw new Error(`Invalid type: ${type}`);\n }\n};\n\nconst JSON_SCHEMA_URL = 'http://json-schema.org/draft-07/schema#';\n\nexport type JsonSchemaOptions = {\n strict?: boolean;\n};\n\n/**\n * Convert effect schema to JSON Schema.\n * @param schema\n */\nexport const toJsonSchema = (schema: Schema.Schema.All, options: JsonSchemaOptions = {}): JsonSchemaType => {\n assertArgument(Schema.isSchema(schema), 'schema');\n let jsonSchema = _toJsonSchemaAST(schema.ast);\n if (options.strict) {\n // TOOD(burdon): Workaround to ensure JSON schema is valid (for agv parsing).\n jsonSchema = removeProperties(jsonSchema, (key, value) => {\n if (key === '$id' && value === '/schemas/any') {\n return true;\n }\n if (key === '$ref' && value === '#/$defs/dependency') {\n return true;\n }\n if (key === '$ref' && value === '#/$defs/jsonSchema') {\n return true;\n }\n\n return false;\n });\n }\n\n return jsonSchema;\n};\n\nconst _toJsonSchemaAST = (ast: SchemaAST.AST): JsonSchemaType => {\n const withRefinements = withEchoRefinements(ast, '#');\n const jsonSchema = JSONSchema.fromAST(withRefinements, {\n definitions: {},\n }) as JsonSchemaType;\n\n return normalizeJsonSchema(jsonSchema);\n};\n\nconst withEchoRefinements = (\n ast: SchemaAST.AST,\n path: string | undefined,\n suspendCache = new Map<SchemaAST.AST, string>(),\n): SchemaAST.AST => {\n if (path) {\n suspendCache.set(ast, path);\n }\n\n let recursiveResult: SchemaAST.AST;\n if (SchemaAST.isSuspend(ast)) {\n // Precompute JSON schema for suspended AST since effect serializer does not support it.\n const suspendedAst = ast.f();\n const cachedPath = suspendCache.get(suspendedAst);\n if (cachedPath) {\n recursiveResult = new SchemaAST.Suspend(() => withEchoRefinements(suspendedAst, path, suspendCache), {\n [SchemaAST.JSONSchemaAnnotationId]: {\n $ref: cachedPath,\n },\n });\n } else {\n const jsonSchema = _toJsonSchemaAST(suspendedAst);\n recursiveResult = new SchemaAST.Suspend(() => withEchoRefinements(suspendedAst, path, suspendCache), {\n [SchemaAST.JSONSchemaAnnotationId]: jsonSchema,\n });\n }\n } else if (SchemaAST.isTypeLiteral(ast)) {\n // Add property order annotations\n recursiveResult = mapAst(ast, (ast, key) =>\n withEchoRefinements(ast, path && typeof key === 'string' ? `${path}/${key}` : undefined, suspendCache),\n );\n recursiveResult = addJsonSchemaFields(recursiveResult, {\n propertyOrder: [...ast.propertySignatures.map((p) => p.name)] as string[],\n });\n } else if (SchemaAST.isUndefinedKeyword(ast)) {\n // Ignore undefined keyword that appears in the optional fields.\n return ast;\n } else {\n recursiveResult = mapAst(ast, (ast, key) =>\n withEchoRefinements(\n ast,\n path && (typeof key === 'string' || typeof key === 'number') ? `${path}/${key}` : undefined,\n suspendCache,\n ),\n );\n }\n\n const annotationFields = annotations_toJsonSchemaFields(ast.annotations);\n if (Object.keys(annotationFields).length === 0) {\n return recursiveResult;\n } else {\n return addJsonSchemaFields(recursiveResult, annotationFields);\n }\n};\n\n/**\n * Convert JSON schema to effect schema.\n * @param root\n * @param definitions\n */\nexport const toEffectSchema = (root: JsonSchemaType, _defs?: JsonSchemaType['$defs']): Schema.Schema.AnyNoContext => {\n const defs = root.$defs ? { ..._defs, ...root.$defs } : (_defs ?? {});\n if ('type' in root && root.type === 'object') {\n return objectToEffectSchema(root, defs);\n }\n\n let result: Schema.Schema.AnyNoContext = Schema.Unknown;\n if ('$ref' in root) {\n switch (root.$ref) {\n case '/schemas/echo/ref': {\n result = refToEffectSchema(root);\n break;\n }\n }\n } else if ('$id' in root) {\n switch (root.$id as string) {\n case '/schemas/any': {\n result = anyToEffectSchema(root as JSONSchema.JsonSchema7Any);\n break;\n }\n case '/schemas/unknown': {\n result = Schema.Unknown;\n break;\n }\n case '/schemas/{}':\n case '/schemas/object': {\n result = Schema.Object;\n break;\n }\n // Custom ECHO object reference.\n case '/schemas/echo/ref': {\n result = refToEffectSchema(root);\n break;\n }\n }\n } else if ('enum' in root) {\n result = Schema.Union(...root.enum!.map((e) => Schema.Literal(e)));\n } else if ('oneOf' in root) {\n result = Schema.Union(...root.oneOf!.map((v) => toEffectSchema(v, defs)));\n } else if ('anyOf' in root) {\n result = Schema.Union(...root.anyOf!.map((v) => toEffectSchema(v, defs)));\n } else if ('allOf' in root) {\n if (root.allOf!.length === 1) {\n result = toEffectSchema(root.allOf![0], defs);\n } else {\n log.warn('allOf with multiple schemas is not supported');\n result = Schema.Unknown;\n }\n } else if ('type' in root) {\n switch (root.type) {\n case 'string': {\n result = Schema.String;\n if (root.pattern) {\n result = result.pipe(Schema.pattern(new RegExp(root.pattern)));\n }\n break;\n }\n case 'number': {\n result = Schema.Number;\n break;\n }\n case 'integer': {\n result = Schema.Number.pipe(Schema.int());\n break;\n }\n case 'boolean': {\n result = Schema.Boolean;\n break;\n }\n case 'array': {\n if (Array.isArray(root.items)) {\n const [required, optional] = Function.pipe(\n root.items,\n Array.map((v) => toEffectSchema(v as JsonSchemaType, defs)),\n Array.splitAt(root.minItems ?? root.items.length),\n );\n result = Schema.Tuple(...required, ...optional.map(Schema.optionalElement));\n } else {\n invariant(root.items);\n const items = root.items;\n result = Array.isArray(items)\n ? Schema.Tuple(...items.map((v) => toEffectSchema(v as JsonSchemaType, defs)))\n : Schema.Array(toEffectSchema(items as JsonSchemaType, defs));\n }\n break;\n }\n case 'null': {\n result = Schema.Null;\n break;\n }\n }\n } else if ('$ref' in root) {\n const refSegments = root.$ref!.split('/');\n const jsonSchema = defs[refSegments[refSegments.length - 1]];\n invariant(jsonSchema, `missing definition for ${root.$ref}`);\n result = toEffectSchema(jsonSchema, defs).pipe(\n Schema.annotations({ identifier: refSegments[refSegments.length - 1] }),\n );\n }\n\n const annotations = jsonSchemaFieldsToAnnotations(root);\n\n // log.info('toEffectSchema', { root, annotations });\n result = result.annotations(annotations);\n\n return result;\n};\n\nconst objectToEffectSchema = (root: JsonSchemaType, defs: JsonSchemaType['$defs']): Schema.Schema.AnyNoContext => {\n invariant('type' in root && root.type === 'object', `not an object: ${root}`);\n\n const echoRefinement: JsonSchemaEchoAnnotations = (root as any)[ECHO_ANNOTATIONS_NS_DEPRECATED_KEY];\n const isEchoObject =\n echoRefinement != null || ('$id' in root && typeof root.$id === 'string' && root.$id.startsWith('dxn:'));\n\n let fields: Schema.Struct.Fields = {};\n const propertyList = Object.entries(root.properties ?? {});\n let immutableIdField: Schema.Schema.AnyNoContext | undefined;\n for (const [key, value] of propertyList) {\n if (isEchoObject && key === 'id') {\n immutableIdField = toEffectSchema(value, defs);\n } else {\n // TODO(burdon): Mutable cast.\n (fields as any)[key] = root.required?.includes(key)\n ? toEffectSchema(value, defs)\n : Schema.optional(toEffectSchema(value, defs));\n }\n }\n\n if (root.propertyOrder) {\n fields = orderKeys(fields, root.propertyOrder as any);\n }\n\n let schema: Schema.Schema<any, any, unknown>;\n if (root.patternProperties) {\n invariant(propertyList.length === 0, 'pattern properties mixed with regular properties are not supported');\n invariant(\n Object.keys(root.patternProperties).length === 1 && Object.keys(root.patternProperties)[0] === '',\n 'only one pattern property is supported',\n );\n\n schema = Schema.Record({ key: Schema.String, value: toEffectSchema(root.patternProperties[''], defs) });\n } else if (typeof root.additionalProperties !== 'object') {\n schema = Schema.Struct(fields);\n } else {\n const indexValue = toEffectSchema(root.additionalProperties, defs);\n if (propertyList.length > 0) {\n schema = Schema.Struct(fields, { key: Schema.String, value: indexValue });\n } else {\n schema = Schema.Record({ key: Schema.String, value: indexValue });\n }\n }\n\n if (immutableIdField) {\n schema = Schema.extend(Schema.mutable(schema), Schema.Struct({ id: immutableIdField }));\n }\n\n const annotations = jsonSchemaFieldsToAnnotations(root);\n return schema.annotations(annotations) as any;\n};\n\nconst anyToEffectSchema = (root: JSONSchema.JsonSchema7Any): Schema.Schema.AnyNoContext => {\n const echoRefinement: JsonSchemaEchoAnnotations = (root as any)[ECHO_ANNOTATIONS_NS_DEPRECATED_KEY];\n // TODO(dmaretskyi): Is this branch still taken?\n if ((echoRefinement as any)?.reference != null) {\n const echoId = root.$id.startsWith('dxn:echo:') ? root.$id : undefined;\n return createEchoReferenceSchema(\n echoId,\n (echoRefinement as any).reference.typename,\n (echoRefinement as any).reference.version,\n );\n }\n\n return Schema.Any;\n};\n\n// TODO(dmaretskyi): Types.\nconst refToEffectSchema = (root: any): Schema.Schema.AnyNoContext => {\n if (!('reference' in root)) {\n return Ref(Expando);\n }\n const reference: JsonSchemaReferenceInfo = root.reference;\n if (typeof reference !== 'object') {\n throw new Error('Invalid reference field in ref schema');\n }\n\n const targetSchemaDXN = DXN.parse(reference.schema.$ref);\n invariant(targetSchemaDXN.kind === DXN.kind.TYPE);\n\n return createEchoReferenceSchema(\n targetSchemaDXN.toString(),\n targetSchemaDXN.kind === DXN.kind.TYPE ? targetSchemaDXN.parts[0] : undefined,\n reference.schemaVersion,\n );\n};\n\n//\n// Annotations\n//\n\nconst annotations_toJsonSchemaFields = (annotations: SchemaAST.Annotations): Record<symbol, any> => {\n const schemaFields: Record<string, any> = {};\n\n const echoAnnotations: JsonSchemaEchoAnnotations = {};\n for (const [key, annotationId] of Object.entries(EchoAnnotations)) {\n if (annotations[annotationId] != null) {\n echoAnnotations[key as keyof JsonSchemaEchoAnnotations] = annotations[annotationId] as any;\n }\n }\n if (Object.keys(echoAnnotations).length > 0) {\n // TODO(dmaretskyi): use new namespace.\n schemaFields[ECHO_ANNOTATIONS_NS_KEY] = echoAnnotations;\n }\n\n const echoIdentifier = annotations[TypeIdentifierAnnotationId];\n if (echoIdentifier) {\n schemaFields[ECHO_ANNOTATIONS_NS_KEY] ??= {};\n schemaFields[ECHO_ANNOTATIONS_NS_KEY].schemaId = echoIdentifier;\n }\n\n // Custom (at end).\n for (const [key, annotationId] of Object.entries(CustomAnnotations)) {\n const value = annotations[annotationId];\n if (value != null) {\n schemaFields[key] = value;\n }\n }\n\n return schemaFields;\n};\n\nconst decodeTypeIdentifierAnnotation = (schema: JsonSchemaType): string | undefined => {\n // Limit to dxn:echo: URIs.\n if (schema.$id && schema.$id.startsWith('dxn:echo:')) {\n return schema.$id;\n } else if (schema.$id && schema.$id.startsWith('dxn:type:') && schema?.echo?.type?.schemaId) {\n const id = schema?.echo?.type?.schemaId;\n if (ObjectId.isValid(id)) {\n return DXN.fromLocalObjectId(id).toString();\n }\n }\n return undefined;\n};\n\nconst decodeTypeAnnotation = (schema: JsonSchemaType): TypeAnnotation | undefined => {\n if (schema.typename) {\n const annotation: Types.Mutable<TypeAnnotation> = {\n // TODO(dmaretskyi): Decoding default.\n kind: schema.entityKind ? Schema.decodeSync(EntityKindSchema)(schema.entityKind) : EntityKind.Object,\n typename: schema.typename,\n version: schema.version ?? '0.1.0',\n };\n\n if (annotation.kind === EntityKind.Relation) {\n const source = schema.relationSource?.$ref ?? raise(new Error('Relation source not set'));\n const target = schema.relationTarget?.$ref ?? raise(new Error('Relation target not set'));\n annotation.sourceSchema = DXN.parse(source).toString();\n annotation.targetSchema = DXN.parse(target).toString();\n }\n\n return annotation;\n }\n\n // Decode legacy schema.\n if (!schema.typename && schema?.echo?.type) {\n return {\n kind: EntityKind.Object,\n typename: schema.echo.type.typename,\n version: schema.echo.type.version,\n };\n }\n\n return undefined;\n};\n\nconst jsonSchemaFieldsToAnnotations = (schema: JsonSchemaType): SchemaAST.Annotations => {\n const annotations: Types.Mutable<Schema.Annotations.Schema<any>> = {};\n\n const echoAnnotations: JsonSchemaEchoAnnotations = getNormalizedEchoAnnotations(schema) ?? {};\n if (echoAnnotations) {\n for (const [key, annotationId] of Object.entries(EchoAnnotations)) {\n if (echoAnnotations[key as keyof JsonSchemaEchoAnnotations]) {\n annotations[annotationId] = echoAnnotations[key as keyof JsonSchemaEchoAnnotations];\n }\n }\n }\n\n annotations[TypeIdentifierAnnotationId] = decodeTypeIdentifierAnnotation(schema);\n const typeAnnotation = decodeTypeAnnotation(schema);\n if (typeAnnotation) {\n annotations[TypeAnnotationId] = typeAnnotation;\n annotations[SchemaAST.JSONSchemaAnnotationId] = makeTypeJsonSchemaAnnotation({\n kind: typeAnnotation.kind,\n typename: typeAnnotation.typename,\n version: typeAnnotation.version,\n relationSource: typeAnnotation.sourceSchema,\n relationTarget: typeAnnotation.targetSchema,\n });\n }\n\n // Custom (at end).\n for (const [key, annotationId] of Object.entries({ ...CustomAnnotations, ...DecodedAnnotations })) {\n if (key in schema) {\n annotations[annotationId] = (schema as any)[key];\n }\n }\n\n return clearUndefined(annotations);\n};\n\nconst makeAnnotatedRefinement = (ast: SchemaAST.AST, annotations: SchemaAST.Annotations): SchemaAST.Refinement => {\n return new SchemaAST.Refinement(ast, () => Option.none(), annotations);\n};\n\nconst addJsonSchemaFields = (ast: SchemaAST.AST, schema: JsonSchemaType): SchemaAST.AST =>\n makeAnnotatedRefinement(ast, { [SchemaAST.JSONSchemaAnnotationId]: schema });\n\n/**\n * Fixes field order.\n * Sets `$schema` prop.\n */\nconst normalizeJsonSchema = (jsonSchema: JsonSchemaType): JsonSchemaType => {\n if (jsonSchema.properties && 'id' in jsonSchema.properties) {\n jsonSchema.properties = orderKeys(jsonSchema.properties, ['id']); // Put id first.\n }\n\n // TODO(dmaretskyi): Makes sure undefined is not left on optional fields for the resulting object.\n jsonSchema.$schema = JSON_SCHEMA_URL;\n jsonSchema = orderKeys(jsonSchema, [\n '$schema',\n '$id',\n\n 'entityKind',\n 'typename',\n 'version',\n 'relationTarget',\n 'relationSource',\n\n 'type',\n 'enum',\n\n 'properties',\n 'required',\n 'propertyOrder', // Custom.\n 'items',\n 'additionalProperties',\n\n 'anyOf',\n 'oneOf',\n ]);\n return jsonSchema;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { JsonPath, type JsonProp } from '@dxos/effect';\n\nimport { EntityKindSchema } from '../ast';\nimport { FormatAnnotation, FormatEnum } from '../formats';\n\n//\n// JSON Schema\n//\n\n// TODO(burdon): Reuse/reconcile with ScalarTypeEnum (handle arrays).\nconst SimpleTypes = Schema.Literal('array', 'boolean', 'integer', 'null', 'number', 'object', 'string');\n\nconst NonNegativeInteger = Schema.Number.pipe(Schema.greaterThanOrEqualTo(0));\n\nconst StringArray = Schema.Array(Schema.String).pipe(Schema.mutable);\n\nconst JsonSchemaOrBoolean = Schema.Union(\n Schema.suspend(() => JsonSchemaType),\n Schema.Boolean,\n);\n\n/**\n * Go under the `annotations` property.\n */\nexport const JsonSchemaEchoAnnotations = Schema.Struct({\n /**\n * Label for this schema.\n * Mapped from {@link LabelAnnotationId}.\n */\n labelProp: Schema.optional(Schema.Union(JsonPath, Schema.Array(JsonPath))),\n\n /**\n * Generator function for this schema.\n * Mapped from {@link GeneratorAnnotationId}.\n */\n generator: Schema.optional(Schema.Union(Schema.String, Schema.Tuple(Schema.String, Schema.Number))),\n\n /**\n * {@link PropertyMeta} annotations get serialized here.\n */\n meta: Schema.optional(\n Schema.Record({\n key: Schema.String,\n value: Schema.Any,\n }).pipe(Schema.mutable),\n ),\n\n /**\n * @deprecated\n */\n // TODO(dmaretskyi): We risk old schema not passing validation due to the extra fields. Remove when we are sure this is safe\n type: Schema.optional(\n Schema.Struct({\n typename: Schema.String,\n version: Schema.String,\n\n // Not used.\n schemaId: Schema.optional(Schema.String),\n }).pipe(Schema.mutable),\n ),\n\n /**\n * @deprecated Superseded by `meta`.\n */\n annotations: Schema.optional(\n Schema.Record({\n key: Schema.String,\n value: Schema.Any,\n }).pipe(Schema.mutable),\n ),\n}).pipe(Schema.mutable);\nexport type JsonSchemaEchoAnnotations = Schema.Schema.Type<typeof JsonSchemaEchoAnnotations>;\n\n/**\n * Describes a schema for the JSON-schema objects stored in ECHO.\n * Contains extensions for ECHO (e.g., references).\n * Ref: https://json-schema.org/draft-07/schema\n */\n// TODO(burdon): Integrate with Effect Serializable?\n// TODO(dmaretskyi): Update to latest draft: https://json-schema.org/draft/2020-12\nconst _JsonSchemaType = Schema.Struct({\n /**\n * Identifier for this schema.\n * This schema might be referenced by $ref clause in other schemas.\n */\n // TODO(dmaretskyi): Specify how the ids are generated.\n // TODO(dmaretskyi): For type dxns, should this include the version?\n $id: Schema.optional(Schema.String),\n\n /**\n * Schema of this schema.\n * Set to \"https://json-schema.org/draft-07/schema\".\n */\n $schema: Schema.optional(Schema.String),\n\n /**\n * Reference to another schema.\n */\n $ref: Schema.optional(Schema.String),\n\n /**\n * Comments are ignored when interpreting the schema.\n */\n $comment: Schema.optional(Schema.String),\n\n /**\n * Defines whether this schema is an object schema or a relation schema.\n */\n entityKind: Schema.optional(EntityKindSchema),\n\n /**\n * Typename of this schema.\n * Only on schema representing an ECHO object.\n *\n * @example 'example.com/type/MyType'\n */\n typename: Schema.optional(Schema.String),\n\n /**\n * Version of this schema.\n * Custom dialect for ECHO.\n */\n version: Schema.optional(Schema.String),\n\n /**\n * Target of this relation.\n * Only for relation schemas.\n * The referenced schema must be an object schema.\n */\n relationTarget: Schema.optional(Schema.suspend(() => JsonSchemaType)),\n\n /**\n * Source of this relation.\n * Only for relation schemas.\n * The referenced schema must be an object schema.\n */\n relationSource: Schema.optional(Schema.suspend(() => JsonSchemaType)),\n\n /**\n * Title of this schema.\n */\n title: Schema.optional(Schema.String),\n\n /**\n * Description of this schema.\n */\n description: Schema.optional(Schema.String),\n\n /**\n * Whether this schema is read-only.\n */\n readOnly: Schema.optional(Schema.Boolean),\n\n /**\n * Whether this schema is write-only.\n */\n writeOnly: Schema.optional(Schema.Boolean),\n\n /**\n * Examples of instances of this schema.\n */\n examples: Schema.optional(Schema.Array(Schema.Any)),\n\n /**\n * Default value for this schema.\n */\n default: Schema.optional(Schema.Any),\n\n /**\n * This schema only matches values that are equal to this value.\n */\n const: Schema.optional(Schema.Any),\n\n /**\n * This schema only matches one of the values in this array.\n */\n enum: Schema.optional(Schema.Array(Schema.Any)),\n\n /**\n * Base type of the schema.\n */\n type: Schema.optional(Schema.Union(SimpleTypes, Schema.Array(SimpleTypes))),\n\n //\n // Numbers.\n //\n\n multipleOf: Schema.optional(Schema.Number.pipe(Schema.greaterThan(0))),\n maximum: Schema.optional(Schema.Number),\n exclusiveMaximum: Schema.optional(Schema.Number),\n minimum: Schema.optional(Schema.Number),\n exclusiveMinimum: Schema.optional(Schema.Number),\n\n //\n // Strings.\n //\n\n maxLength: Schema.optional(NonNegativeInteger),\n\n /**\n * Regex pattern for strings.\n */\n pattern: Schema.optional(Schema.String.pipe(FormatAnnotation.set(FormatEnum.Regex))),\n\n /**\n * Serialized from {@link FormatAnnotationId}.\n */\n format: Schema.optional(Schema.String),\n\n //\n // Arrays\n //\n\n minLength: Schema.optional(NonNegativeInteger),\n items: Schema.optional(\n Schema.Union(\n Schema.suspend(() => JsonSchemaType),\n Schema.Array(Schema.suspend(() => JsonSchemaType)),\n ),\n ),\n additionalItems: Schema.optional(\n Schema.Union(\n Schema.suspend(() => JsonSchemaType),\n Schema.Boolean,\n ),\n ),\n maxItems: Schema.optional(NonNegativeInteger),\n minItems: Schema.optional(NonNegativeInteger),\n uniqueItems: Schema.optional(Schema.Boolean),\n contains: Schema.optional(Schema.suspend(() => JsonSchemaType)),\n\n //\n // Objects\n //\n\n maxProperties: Schema.optional(NonNegativeInteger),\n minProperties: Schema.optional(NonNegativeInteger),\n required: Schema.optional(StringArray),\n\n /**\n * Non-standard JSON Schema extension.\n * Defines the order of properties in the object.\n * The unmentioned properties are placed at the end.\n *\n * Related: https://github.com/json-schema/json-schema/issues/119\n */\n propertyOrder: Schema.optional(StringArray),\n\n additionalProperties: Schema.optional(JsonSchemaOrBoolean),\n properties: Schema.optional(\n Schema.Record({\n key: Schema.String,\n value: Schema.suspend(() => JsonSchemaType),\n }).pipe(Schema.mutable),\n ),\n patternProperties: Schema.optional(\n Schema.Record({\n key: Schema.String,\n value: Schema.suspend(() => JsonSchemaType),\n }).pipe(Schema.mutable),\n ),\n propertyNames: Schema.optional(Schema.suspend(() => JsonSchemaType)),\n\n definitions: Schema.optional(\n Schema.mutable(\n Schema.Record({\n key: Schema.String,\n value: Schema.suspend(() => JsonSchemaType),\n }),\n ),\n ),\n dependencies: Schema.optional(\n Schema.Record({\n key: Schema.String,\n value: Schema.suspend(() => Schema.Union(Schema.String, StringArray, JsonSchemaType)).annotations({\n identifier: 'dependency',\n description: 'Dependency',\n }),\n }),\n ),\n\n contentMediaType: Schema.optional(Schema.String),\n contentEncoding: Schema.optional(Schema.String),\n\n if: Schema.optional(Schema.suspend(() => JsonSchemaType)),\n then: Schema.optional(Schema.suspend(() => JsonSchemaType)),\n else: Schema.optional(Schema.suspend(() => JsonSchemaType)),\n allOf: Schema.optional(Schema.Array(Schema.suspend(() => JsonSchemaType))),\n anyOf: Schema.optional(Schema.Array(Schema.suspend(() => JsonSchemaType))),\n oneOf: Schema.optional(Schema.Array(Schema.suspend(() => JsonSchemaType))),\n not: Schema.optional(Schema.suspend(() => JsonSchemaType)),\n $defs: Schema.optional(\n Schema.mutable(\n Schema.Record({\n key: Schema.String,\n value: Schema.suspend(() => JsonSchemaType),\n }),\n ),\n ),\n\n //\n // ECHO extensions.\n //\n\n currency: Schema.optional(Schema.String),\n\n reference: Schema.optional(\n Schema.mutable(\n Schema.Struct({\n schema: Schema.suspend(() => JsonSchemaType),\n schemaVersion: Schema.optional(Schema.String),\n schemaObject: Schema.optional(Schema.String),\n }),\n ),\n ),\n\n /**\n * ECHO-specific annotations.\n */\n // TODO(dmaretskyi): Since we are adding a lot of new extensions to the JSON Schema, it is safer to namespace them here.\n annotations: Schema.optional(Schema.mutable(JsonSchemaEchoAnnotations)),\n\n /**\n * @deprecated Use `annotations` instead.\n */\n echo: Schema.optional(Schema.mutable(JsonSchemaEchoAnnotations)),\n}).annotations({ identifier: 'jsonSchema', description: 'JSON Schema' });\n\nexport const JsonSchemaFields = Object.keys(_JsonSchemaType.fields);\n\n/**\n * https://json-schema.org/draft-07/schema\n */\nexport interface JsonSchemaType extends Schema.Schema.Type<Schema.mutable<typeof _JsonSchemaType>> {}\n\nexport const JsonSchemaType: Schema.Schema<JsonSchemaType> = _JsonSchemaType.pipe(Schema.mutable);\n\n// TODO(burdon): Factor out JSON schema utils.\n\nexport const getSchemaProperty = (schema: JsonSchemaType, property: JsonProp): JsonSchemaType | undefined => {\n return schema.properties?.[property];\n};\n\n// TODO(burdon): Properties should be ordered.\nexport const setSchemaProperty = (schema: JsonSchemaType, property: JsonProp, value: JsonSchemaType) => {\n schema.properties ??= {};\n schema.properties[property] = value;\n return schema;\n};\n\n/**\n * @internal\n */\nexport const ECHO_ANNOTATIONS_NS_DEPRECATED_KEY: keyof JsonSchemaType = 'echo';\n\n/**\n * @internal\n */\nexport const ECHO_ANNOTATIONS_NS_KEY = 'annotations';\n\n/**\n * @internal\n * @returns ECHO annotations namespace object in its normalized form.\n *\n * `meta` holds PropertyMeta annotations.\n * `annotations` holds other annotations.\n */\nexport const getNormalizedEchoAnnotations = (obj: JsonSchemaType): JsonSchemaEchoAnnotations | undefined => {\n if (obj[ECHO_ANNOTATIONS_NS_KEY] != null && obj[ECHO_ANNOTATIONS_NS_DEPRECATED_KEY] != null) {\n return normalizeEchoAnnotations({\n ...obj[ECHO_ANNOTATIONS_NS_DEPRECATED_KEY],\n ...obj[ECHO_ANNOTATIONS_NS_KEY],\n });\n } else if (obj[ECHO_ANNOTATIONS_NS_KEY] != null) {\n return normalizeEchoAnnotations(obj[ECHO_ANNOTATIONS_NS_KEY]!);\n } else if (obj[ECHO_ANNOTATIONS_NS_DEPRECATED_KEY] != null) {\n return normalizeEchoAnnotations(obj[ECHO_ANNOTATIONS_NS_DEPRECATED_KEY]!);\n } else {\n return undefined;\n }\n};\n\nconst normalizeEchoAnnotations = (obj: JsonSchemaEchoAnnotations): JsonSchemaEchoAnnotations => {\n if (!obj.annotations) {\n return obj;\n } else {\n const res = {\n ...obj,\n meta: {\n ...obj.annotations,\n ...(obj.meta ?? {}),\n },\n };\n delete res.annotations;\n return res;\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { JsonSchemaFields, type JsonSchemaType } from './json-schema-type';\n\n/**\n * Normalize schema to to draft-07 format.\n * Note: the input type does not necessarily match the {@link JsonSchemaType} type.\n */\nexport const normalizeSchema = (schema: JsonSchemaType): JsonSchemaType => {\n const copy = structuredClone(schema);\n go(copy);\n return copy;\n};\n\nconst go = (schema: JsonSchemaType) => {\n if (typeof schema !== 'object' || schema === null) {\n return;\n }\n\n if ((schema as any).exclusiveMaximum === true) {\n schema.exclusiveMaximum = schema.maximum;\n delete (schema as any).exclusiveMaximum;\n } else if ((schema as any).exclusiveMaximum === false) {\n delete (schema as any).exclusiveMaximum;\n }\n\n if ((schema as any).exclusiveMinimum === true) {\n schema.exclusiveMinimum = schema.minimum;\n delete (schema as any).exclusiveMinimum;\n } else if ((schema as any).exclusiveMinimum === false) {\n delete (schema as any).exclusiveMinimum;\n }\n\n // Delete all properties that are not in the JsonSchemaFields.\n for (const key of Object.keys(schema)) {\n if (!JsonSchemaFields.includes(key)) {\n delete (schema as any)[key];\n }\n }\n\n // Recursively normalize the schema.\n // Recursively normalize the schema.\n if (schema.properties) {\n goOnRecord(schema.properties);\n }\n if (schema.patternProperties) {\n goOnRecord(schema.patternProperties);\n }\n if (schema.propertyNames) {\n go(schema.propertyNames);\n }\n if (schema.definitions) {\n goOnRecord(schema.definitions);\n }\n if (schema.items) {\n maybeGoOnArray(schema.items);\n }\n if (schema.additionalItems) {\n maybeGoOnArray(schema.additionalItems);\n }\n if (schema.contains) {\n go(schema.contains);\n }\n if (schema.if) {\n go(schema.if);\n }\n if (schema.then) {\n go(schema.then);\n }\n if (schema.else) {\n go(schema.else);\n }\n if (schema.allOf) {\n maybeGoOnArray(schema.allOf);\n }\n if (schema.anyOf) {\n maybeGoOnArray(schema.anyOf);\n }\n if (schema.oneOf) {\n maybeGoOnArray(schema.oneOf);\n }\n if (schema.not) {\n go(schema.not);\n }\n if (schema.$defs) {\n goOnRecord(schema.$defs);\n }\n if (schema.reference) {\n go(schema.reference.schema);\n }\n};\n\nconst maybeGoOnArray = (value: any) => {\n if (Array.isArray(value)) {\n for (const item of value) {\n go(item);\n }\n } else if (typeof value === 'object' && value !== null) {\n go(value);\n }\n};\n\nconst goOnRecord = (record: Record<string, any>) => {\n for (const key of Object.keys(record)) {\n go(record[key]);\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { type BaseObject } from '../types';\n\nimport { getTypename } from './typename';\n\n// TODO(dmaretskyi): Rename to represent commonality between objects and relations (e.g. `entity`).\nexport type TypedObjectOptions = {\n // TODO(burdon): Document.\n partial?: true;\n // TODO(burdon): Document.\n record?: true;\n};\n\n/**\n *\n */\n// TODO(burdon): Comment required.\n// TODO(dmaretskyi): Rename to represent commonality between objects and relations (e.g. `entity`).\ntype SimplifiedSchemaFields<\n SchemaFields extends Schema.Struct.Fields,\n Options extends TypedObjectOptions,\n> = Options['partial'] extends boolean\n ? Schema.SimplifyMutable<Partial<Schema.Struct.Type<SchemaFields>>>\n : Schema.SimplifyMutable<Schema.Struct.Type<SchemaFields>>;\n\n/**\n *\n */\n// TODO(burdon): Comment required.\n// TODO(dmaretskyi): Rename to represent commonality between objects and relations (e.g. `entity`).\nexport type TypedObjectFields<\n SchemaFields extends Schema.Struct.Fields,\n Options extends TypedObjectOptions,\n> = SimplifiedSchemaFields<SchemaFields, Options> & { id: string } & (Options['record'] extends boolean\n ? Schema.SimplifyMutable<Schema.IndexSignature.Type<Schema.IndexSignature.Records>>\n : {});\n\nexport const makeTypedEntityClass = (\n typename: string,\n version: string,\n baseSchema: Schema.Schema.AnyNoContext,\n): Schema.SchemaClass<any> => {\n return class {\n // Implement TypedObject properties.\n static readonly typename = typename;\n static readonly version = version;\n\n // Implement Schema.Schema properties.\n // TODO(burdon): Comment required.\n static readonly [Schema.TypeId] = schemaVariance;\n static readonly ast = baseSchema.ast;\n static readonly annotations = baseSchema.annotations.bind(baseSchema);\n static readonly pipe = baseSchema.pipe.bind(baseSchema);\n\n // TODO(burdon): Comment required.\n static [Symbol.hasInstance](obj: BaseObject) {\n return obj != null && getTypename(obj) === typename;\n }\n\n // TODO(burdon): Throw APIError.\n private constructor() {\n throw new Error('Use live(Typename, { ...fields }) to instantiate an object.');\n }\n } as any;\n};\n\nconst schemaVariance = {\n _A: (_: any) => _,\n _I: (_: any) => _,\n _R: (_: never) => _,\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\nimport { DXN } from '@dxos/keys';\n\nimport { getSchemaTypename } from '../ast';\nimport { type BaseObject } from '../types';\n\nimport { getSchema } from './accessors';\nimport { TypeId } from './model';\n\n/**\n * Gets the typename of the object without the version.\n * Returns only the name portion, not the DXN.\n * @example \"example.org/type/Contact\"\n */\nexport const getTypename = (obj: BaseObject): string | undefined => {\n const schema = getSchema(obj);\n if (schema != null) {\n // Try to extract typename from DXN.\n return getSchemaTypename(schema);\n } else {\n const type = getType(obj);\n return type?.asTypeDXN()?.type;\n }\n};\n\n/**\n * @internal\n */\n// TODO(dmaretskyi): Rename setTypeDXN.\nexport const setTypename = (obj: any, typename: DXN) => {\n invariant(typename instanceof DXN, 'Invalid type.');\n Object.defineProperty(obj, TypeId, {\n value: typename,\n writable: false,\n enumerable: false,\n configurable: false,\n });\n};\n\n/**\n * @returns Object type as {@link DXN}.\n * @returns undefined if the object doesn't have a type.\n * @example `dxn:example.com/type/Person:1.0.0`\n */\nexport const getType = (obj: BaseObject): DXN | undefined => {\n if (!obj) {\n return undefined;\n }\n\n const type = (obj as any)[TypeId];\n if (!type) {\n return undefined;\n }\n\n invariant(type instanceof DXN, 'Invalid object.');\n return type;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Option from 'effect/Option';\nimport * as Schema from 'effect/Schema';\n\nimport { type JsonPath, getField } from '@dxos/effect';\nimport { assertArgument, invariant } from '@dxos/invariant';\nimport { DXN, ObjectId } from '@dxos/keys';\nimport { assumeType } from '@dxos/util';\n\nimport { DescriptionAnnotation, LabelAnnotation } from '../ast';\n\nimport { type InternalObjectProps, SchemaId, SelfDXNId } from './model';\n\n//\n// Accessors based on model.\n//\n\n/**\n * Returns a DXN for an object or schema.\n * @deprecated Use `Obj.getDXN`.\n */\nexport const getObjectDXN = (object: any): DXN | undefined => {\n invariant(!Schema.isSchema(object), 'schema not allowed in this function');\n assertArgument(typeof object === 'object' && object != null, 'object', 'expected object');\n assumeType<InternalObjectProps>(object);\n\n if (object[SelfDXNId]) {\n invariant(object[SelfDXNId] instanceof DXN, 'Invalid object model: invalid self dxn');\n return object[SelfDXNId];\n }\n\n if (!ObjectId.isValid(object.id)) {\n throw new TypeError('Object id is not valid.');\n }\n\n return DXN.fromLocalObjectId(object.id);\n};\n\n/**\n * Returns the schema for the given object if one is defined.\n */\n// TODO(burdon): Reconcile with `getTypename`.\n// TODO(dmaretskyi): For echo objects, this always returns the root schema.\nexport const getSchema = (obj: unknown | undefined): Schema.Schema.AnyNoContext | undefined => {\n if (obj) {\n return (obj as any)[SchemaId];\n }\n};\n\n/**\n * Internal use only.\n */\nexport const setSchema = (obj: any, schema: Schema.Schema.AnyNoContext) => {\n Object.defineProperty(obj, SchemaId, {\n value: schema,\n writable: false,\n enumerable: false,\n configurable: false,\n });\n};\n\n/**\n * @deprecated Use {@link Obj.getLabel} instead.\n * Returns the label for a given object based on {@link LabelAnnotationId}.\n */\nexport const getLabelForObject = (obj: unknown | undefined): string | undefined => {\n const schema = getSchema(obj);\n if (schema) {\n return getLabel(schema, obj);\n }\n};\n\n/**\n * Returns the label for a given object based on {@link LabelAnnotationId}.\n */\n// TODO(burdon): Convert to JsonPath?\nexport const getLabel = <S extends Schema.Schema.Any>(schema: S, object: Schema.Schema.Type<S>): string | undefined => {\n const annotation = LabelAnnotation.get(schema).pipe(Option.getOrElse(() => ['name']));\n for (const accessor of annotation) {\n assertArgument(\n typeof accessor === 'string',\n 'accessor',\n 'Label annotation must be a string or an array of strings',\n );\n const value = getField(object, accessor as JsonPath);\n switch (typeof value) {\n case 'string':\n case 'number':\n case 'boolean':\n case 'bigint':\n case 'symbol':\n return value.toString();\n case 'undefined':\n case 'object':\n case 'function':\n continue;\n }\n }\n\n return undefined;\n};\n\n/**\n * Sets the label for a given object based on {@link LabelAnnotationId}.\n */\nexport const setLabel = <S extends Schema.Schema.Any>(schema: S, object: Schema.Schema.Type<S>, label: string) => {\n const annotation = LabelAnnotation.get(schema).pipe(\n Option.map((field) => field[0]),\n Option.getOrElse(() => 'name'),\n );\n object[annotation] = label;\n};\n\n/**\n * Returns the label for a given object based on {@link LabelAnnotationId}.\n */\n// TODO(burdon): Convert to JsonPath?\nexport const getDescription = <S extends Schema.Schema.Any>(\n schema: S,\n object: Schema.Schema.Type<S>,\n): string | undefined => {\n const accessor = DescriptionAnnotation.get(schema).pipe(Option.getOrElse(() => 'description'));\n assertArgument(typeof accessor === 'string', 'accessor', 'Description annotation must be a string');\n const value = getField(object, accessor as JsonPath);\n switch (typeof value) {\n case 'string':\n case 'number':\n case 'boolean':\n case 'bigint':\n case 'symbol':\n return value.toString();\n case 'undefined':\n case 'object':\n case 'function':\n default:\n return undefined;\n }\n};\n\n/**\n * Sets the description for a given object based on {@link DescriptionAnnotationId}.\n */\nexport const setDescription = <S extends Schema.Schema.Any>(\n schema: S,\n object: Schema.Schema.Type<S>,\n description: string,\n) => {\n const accessor = DescriptionAnnotation.get(schema).pipe(Option.getOrElse(() => 'description'));\n object[accessor] = description;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as Schema from 'effect/Schema';\n\nimport { type ForeignKey } from '@dxos/echo-protocol';\nimport { invariant } from '@dxos/invariant';\nimport { DXN, ObjectId } from '@dxos/keys';\nimport { assumeType } from '@dxos/util';\n\nimport { EntityKind } from '../ast';\n\nimport { type ObjectMeta } from './meta';\nimport type { Version } from './version';\n\n//\n// Defines the internal model of the echo object.\n//\n\n/**\n * Entity kind.\n */\nexport const EntityKindId = Symbol.for('@dxos/echo/EntityKind');\n\n/**\n * DXN to the object itself.\n */\nexport const SelfDXNId = Symbol.for('@dxos/echo/DXN');\n\n/**\n * Property name for self DXN when object is serialized to JSON.\n */\nexport const ATTR_SELF_DXN = '@dxn';\n\n/**\n * DXN to the object type.\n */\nexport const TypeId = Symbol.for('@dxos/echo/Type');\n\n/**\n * Property name for typename when object is serialized to JSON.\n */\nexport const ATTR_TYPE = '@type';\n\n/**\n * Reference to the object schema.\n */\nexport const SchemaId = Symbol.for('@dxos/echo/Schema');\n\n/**\n * Deletion marker.\n */\nexport const DeletedId = Symbol.for('@dxos/echo/Deleted');\n\n/**\n * Property name for deleted when object is serialized to JSON.\n */\nexport const ATTR_DELETED = '@deleted';\n\n/**\n * Metadata section.\n */\nexport const MetaId = Symbol.for('@dxos/echo/Meta');\n\n/**\n * Property name for meta when object is serialized to JSON.\n */\nexport const ATTR_META = '@meta';\n\n/**\n * Used to access relation source ref on live ECHO objects.\n * Reading this symbol must return `Live<EchoObject<any>>` or a DXN.\n */\nexport const RelationSourceDXNId: unique symbol = Symbol.for('@dxos/echo/RelationSourceDXN');\n\n/**\n * Property name for relation source when object is serialized to JSON.\n */\nexport const ATTR_RELATION_SOURCE = '@relationSource';\n\n/**\n * Used to access relation target ref on live ECHO objects.\n * Reading this symbol must return `Live<EchoObject<any>>` or a DXN.\n */\nexport const RelationTargetDXNId: unique symbol = Symbol.for('@dxos/echo/RelationTargetDXN');\n\n/**\n * Property name for relation target when object is serialized to JSON.\n */\nexport const ATTR_RELATION_TARGET = '@relationTarget';\n\n/**\n * Used to access relation source ref on live ECHO objects.\n * Reading this symbol must return `Live<EchoObject<any>>` or a DXN.\n */\nexport const RelationSourceId: unique symbol = Symbol.for('@dxos/echo/RelationSource');\n\n/**\n * Used to access relation target ref on live ECHO objects.\n * Reading this symbol must return `Live<EchoObject<any>>` or a DXN.\n */\nexport const RelationTargetId: unique symbol = Symbol.for('@dxos/echo/RelationTarget');\n\n/**\n * Getter to get object version.\n */\nexport const ObjectVersionId: unique symbol = Symbol.for('@dxos/echo/ObjectVersion');\n\n/**\n * Internal runtime representation of an object.\n * The fields are accessed through getter functions.\n */\nexport interface InternalObjectProps {\n id: ObjectId;\n readonly [SelfDXNId]?: DXN;\n\n // Echo supports untyped objects O_O.\n readonly [TypeId]?: DXN;\n\n /**\n * Returns the schema for the object.\n */\n readonly [SchemaId]?: Schema.Schema.AnyNoContext;\n readonly [EntityKindId]: EntityKind;\n readonly [DeletedId]?: boolean;\n readonly [MetaId]?: ObjectMeta;\n readonly [RelationSourceDXNId]?: DXN;\n readonly [RelationTargetDXNId]?: DXN;\n readonly [RelationSourceId]?: InternalObjectProps;\n readonly [RelationTargetId]?: InternalObjectProps;\n readonly [ObjectVersionId]?: Version;\n}\n\n/**\n * JSON representation of an object or relation.\n */\nexport interface ObjectJSON {\n id: string;\n [ATTR_SELF_DXN]?: DXN.String;\n [ATTR_TYPE]: DXN.String;\n [ATTR_DELETED]?: boolean;\n [ATTR_META]?: ObjectMetaJSON;\n [ATTR_RELATION_SOURCE]?: DXN.String;\n [ATTR_RELATION_TARGET]?: DXN.String;\n}\n\nexport interface ObjectMetaJSON {\n keys: ForeignKey[];\n tags?: string[];\n}\n\n// NOTE: Keep as `function` to avoid type inference issues.\n// eslint-disable-next-line prefer-arrow-functions/prefer-arrow-functions\nexport function assertObjectModelShape(obj: unknown): asserts obj is InternalObjectProps {\n invariant(typeof obj === 'object' && obj !== null, 'Invalid object model: not an object');\n assumeType<InternalObjectProps>(obj);\n invariant(ObjectId.isValid(obj.id), 'Invalid object model: invalid id');\n invariant(obj[TypeId] === undefined || obj[TypeId] instanceof DXN, 'Invalid object model: invalid type');\n invariant(\n obj[EntityKindId] === EntityKind.Object || obj[EntityKindId] === EntityKind.Relation,\n 'Invalid object model: invalid entity kind',\n );\n if (obj[EntityKindId] === EntityKind.Relation) {\n invariant(obj[RelationSourceDXNId] instanceof DXN, 'Invalid object model: invalid relation source');\n invariant(obj[RelationTargetDXNId] instanceof DXN, 'Invalid object model: invalid relation target');\n invariant(!(obj[RelationSourceId] instanceof DXN), 'Invalid object model: source pointer is a DXN');\n invariant(!(obj[RelationTargetId] instanceof DXN), 'Invalid object model: target pointer is a DXN');\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as Schema from 'effect/Schema';\n\nimport { raise } from '@dxos/debug';\nimport { assertArgument, failedInvariant } from '@dxos/invariant';\nimport { ObjectId } from '@dxos/keys';\nimport { defineHiddenProperty } from '@dxos/live-object';\n\nimport { EntityKind, getSchemaDXN, getTypeAnnotation } from '../ast';\n\nimport { getObjectDXN, setSchema } from './accessors';\nimport { attachedTypedObjectInspector } from './inspect';\nimport { attachTypedJsonSerializer } from './json-serializer';\nimport {\n EntityKindId,\n MetaId,\n RelationSourceDXNId,\n RelationSourceId,\n RelationTargetDXNId,\n RelationTargetId,\n assertObjectModelShape,\n} from './model';\nimport { setTypename } from './typename';\n\n// Make `id` optional.\ntype CreateData<T> = T extends { id: string } ? Omit<T, 'id' | typeof EntityKindId> & { id?: string } : T;\n\n/**\n * Creates a new object instance from a schema and data, without signal reactivity.\n * This static version creates plain JavaScript objects that are not reactive/observable.\n * For reactive objects that automatically update UI when changed, use the regular live() function.\n *\n * @param schema - The Effect schema that defines the object's structure and type, piped into EchoObject\n * @param data - The data to initialize the object with. The id and @type fields are handled automatically.\n * @returns A new non-reactive object instance conforming to the schema\n * @throws {Error} If the schema is not an object schema\n * @throws {TypeError} If data contains an @type field\n *\n * @example\n * ```ts\n * const Contact = Schema.Struct({\n * name: Schema.String,\n * email: Schema.String,\n * }).pipe(Type.Obj({\n * typename: 'example.com/type/Person',\n * version: '0.1.0',\n * }))\n *\n * // Creates a non-reactive contact object\n * const contact = create(Contact, {\n * name: \"John\",\n * email: \"john@example.com\",\n * })\n * ```\n */\n// TODO(burdon): Rename make.\n// TODO(burdon): Handle defaults (see Schema.make).\n// TODO(dmaretskyi): Use `Obj.make` and `Relation.make` from '@dxos/echo' instead.\nexport const create = <S extends Schema.Schema.AnyNoContext>(\n schema: S,\n data: CreateData<Schema.Schema.Type<S>>,\n): CreateData<Schema.Schema.Type<S>> & { id: string } => {\n const annotation = getTypeAnnotation(schema);\n if (!annotation) {\n throw new Error('Schema is not an object schema');\n }\n assertArgument(!('@type' in data), 'data', '@type is not allowed');\n assertArgument(!(RelationSourceDXNId in data), 'data', 'Relation source DXN is not allowed in the constructor');\n assertArgument(!(RelationTargetDXNId in data), 'data', 'Relation target DXN is not allowed in the constructor');\n assertArgument(\n RelationSourceId in data === RelationTargetId in data,\n 'data',\n 'Relation source and target must be provided together',\n );\n\n const obj = { ...data, id: data.id ?? ObjectId.random() };\n const kind = RelationSourceId in data ? EntityKind.Relation : EntityKind.Object;\n defineHiddenProperty(obj, EntityKindId, kind);\n setTypename(obj, getSchemaDXN(schema) ?? failedInvariant('Missing schema DXN'));\n setSchema(obj, schema);\n attachTypedJsonSerializer(obj);\n attachedTypedObjectInspector(obj);\n defineHiddenProperty(obj, MetaId, { keys: [] });\n if (kind === EntityKind.Relation) {\n const sourceDXN = getObjectDXN(data[RelationSourceId]) ?? raise(new Error('Unresolved relation source'));\n const targetDXN = getObjectDXN(data[RelationTargetId]) ?? raise(new Error('Unresolved relation target'));\n defineHiddenProperty(obj, RelationSourceDXNId, sourceDXN);\n defineHiddenProperty(obj, RelationTargetDXNId, targetDXN);\n }\n\n assertObjectModelShape(obj);\n return obj;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type { InspectOptionsStylized, inspect as inspectFn } from 'node:util';\n\nimport { type CustomInspectFunction, inspectCustom } from '@dxos/debug';\n\nimport { type AnyEchoObject } from '../types';\n\nimport { ATTR_META, ATTR_TYPE, MetaId } from './model';\nimport { getType } from './typename';\n\n/*\n * @internal\n */\nexport const attachedTypedObjectInspector = (obj: any) => {\n const descriptor = Object.getOwnPropertyDescriptor(obj, inspectCustom);\n if (descriptor) {\n return;\n }\n\n Object.defineProperty(obj, inspectCustom, {\n value: typedObjectInspectFunction,\n writable: false,\n enumerable: false,\n configurable: true,\n });\n};\n\n// NOTE: KEEP as function.\nconst typedObjectInspectFunction: CustomInspectFunction<AnyEchoObject> = function (\n this: AnyEchoObject,\n depth: number,\n options: InspectOptionsStylized,\n inspect: typeof inspectFn,\n) {\n const { id, ...props } = this;\n return inspect(\n {\n id,\n [ATTR_TYPE]: getType(this),\n ...props,\n [ATTR_META]: (this as any)[MetaId], // TODO(dmaretskyi): Couldn't use getMeta since that throw's if the object has no meta.\n },\n options,\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { raise } from '@dxos/debug';\nimport { type EncodedReference, type ObjectMeta, isEncodedReference } from '@dxos/echo-protocol';\nimport { assertArgument, invariant } from '@dxos/invariant';\nimport { DXN, ObjectId } from '@dxos/keys';\nimport { defineHiddenProperty } from '@dxos/live-object';\nimport { assumeType, deepMapValues, visitValues } from '@dxos/util';\n\nimport { EntityKind } from '../ast';\nimport { Ref, type RefResolver, refFromEncodedReference, setRefResolver } from '../ref';\nimport { type AnyEchoObject } from '../types';\n\nimport { setSchema } from './accessors';\nimport { ObjectMetaSchema } from './meta';\nimport {\n ATTR_DELETED,\n ATTR_META,\n ATTR_RELATION_SOURCE,\n ATTR_RELATION_TARGET,\n ATTR_SELF_DXN,\n ATTR_TYPE,\n EntityKindId,\n MetaId,\n type ObjectJSON,\n RelationSourceDXNId,\n RelationSourceId,\n RelationTargetDXNId,\n RelationTargetId,\n SelfDXNId,\n TypeId,\n assertObjectModelShape,\n} from './model';\nimport { getType, setTypename } from './typename';\n\ntype DeepReplaceRef<T> =\n T extends Ref<any> ? EncodedReference : T extends object ? { [K in keyof T]: DeepReplaceRef<T[K]> } : T;\n\ntype SerializedObject<T extends { id: string }> = { [K in keyof T]: DeepReplaceRef<T[K]> } & ObjectJSON;\n\n/**\n * Converts object to it's JSON representation.\n */\nexport const objectToJSON = <T extends AnyEchoObject>(obj: T): SerializedObject<T> => {\n const typename = getType(obj)?.toString();\n invariant(typename && typeof typename === 'string');\n return typedJsonSerializer.call(obj);\n};\n\n/**\n * Creates an object from it's json representation.\n * Performs schema validation.\n * References and schema will be resolvable if the `refResolver` is provided.\n *\n * The function need to be async to support resolving the schema as well as the relation endpoints.\n */\nexport const objectFromJSON = async (\n jsonData: unknown,\n { refResolver, dxn }: { refResolver?: RefResolver; dxn?: DXN } = {},\n): Promise<AnyEchoObject> => {\n assumeType<ObjectJSON>(jsonData);\n assertArgument(typeof jsonData === 'object' && jsonData !== null, 'jsonData', 'expect object');\n assertArgument(typeof jsonData[ATTR_TYPE] === 'string', 'jsonData[ATTR_TYPE]', 'expected object to have a type');\n assertArgument(typeof jsonData.id === 'string', 'jsonData.id', 'expected object to have an id');\n\n const type = DXN.parse(jsonData[ATTR_TYPE]);\n const schema = await refResolver?.resolveSchema(type);\n invariant(schema === undefined || Schema.isSchema(schema));\n\n let obj: any;\n if (schema != null) {\n obj = await schema.pipe(Schema.decodeUnknownPromise)(jsonData);\n if (refResolver) {\n setRefResolverOnData(obj, refResolver);\n }\n } else {\n obj = decodeGeneric(jsonData, { refResolver });\n }\n\n invariant(ObjectId.isValid(obj.id), 'Invalid object id');\n\n setTypename(obj, type);\n if (schema) {\n setSchema(obj, schema);\n }\n\n const isRelation =\n typeof jsonData[ATTR_RELATION_SOURCE] === 'string' || typeof jsonData[ATTR_RELATION_TARGET] === 'string';\n if (isRelation) {\n const sourceDxn: DXN = DXN.parse(jsonData[ATTR_RELATION_SOURCE] ?? raise(new TypeError('Missing relation source')));\n const targetDxn: DXN = DXN.parse(jsonData[ATTR_RELATION_TARGET] ?? raise(new TypeError('Missing relation target')));\n\n // TODO(dmaretskyi): Async!\n const source = (await refResolver?.resolve(sourceDxn)) as AnyEchoObject | undefined;\n const target = (await refResolver?.resolve(targetDxn)) as AnyEchoObject | undefined;\n\n defineHiddenProperty(obj, EntityKindId, EntityKind.Relation);\n defineHiddenProperty(obj, RelationSourceDXNId, sourceDxn);\n defineHiddenProperty(obj, RelationTargetDXNId, targetDxn);\n defineHiddenProperty(obj, RelationSourceId, source);\n defineHiddenProperty(obj, RelationTargetId, target);\n } else {\n defineHiddenProperty(obj, EntityKindId, EntityKind.Object);\n }\n\n if (typeof jsonData[ATTR_META] === 'object') {\n const meta = await ObjectMetaSchema.pipe(Schema.decodeUnknownPromise)(jsonData[ATTR_META]);\n\n // Defensive programming.\n invariant(Array.isArray(meta.keys));\n\n defineHiddenProperty(obj, MetaId, meta);\n }\n\n if (dxn) {\n defineHiddenProperty(obj, SelfDXNId, dxn);\n }\n\n assertObjectModelShape(obj);\n invariant((obj as any)[ATTR_TYPE] === undefined, 'Invalid object model');\n invariant((obj as any)[ATTR_SELF_DXN] === undefined, 'Invalid object model');\n invariant((obj as any)[ATTR_DELETED] === undefined, 'Invalid object model');\n invariant((obj as any)[ATTR_RELATION_SOURCE] === undefined, 'Invalid object model');\n invariant((obj as any)[ATTR_RELATION_TARGET] === undefined, 'Invalid object model');\n invariant((obj as any)[ATTR_META] === undefined, 'Invalid object model');\n return obj;\n};\n\nconst decodeGeneric = (jsonData: unknown, options: { refResolver?: RefResolver }) => {\n const {\n [ATTR_TYPE]: _type,\n [ATTR_META]: _meta,\n [ATTR_DELETED]: _deleted,\n [ATTR_RELATION_SOURCE]: _relationSource,\n [ATTR_RELATION_TARGET]: _relationTarget,\n [ATTR_SELF_DXN]: _selfDxn,\n ...props\n } = jsonData as any;\n\n return deepMapValues(props, (value, recurse) => {\n if (isEncodedReference(value)) {\n return refFromEncodedReference(value, options.refResolver);\n }\n return recurse(value);\n });\n};\n\nexport const setRefResolverOnData = (obj: AnyEchoObject, refResolver: RefResolver) => {\n const go = (value: unknown) => {\n if (Ref.isRef(value)) {\n setRefResolver(value, refResolver);\n } else {\n visitValues(value, go);\n }\n };\n\n go(obj);\n};\n\nexport const attachTypedJsonSerializer = (obj: any) => {\n const descriptor = Object.getOwnPropertyDescriptor(obj, 'toJSON');\n if (descriptor) {\n return;\n }\n\n Object.defineProperty(obj, 'toJSON', {\n value: typedJsonSerializer,\n writable: false,\n enumerable: false,\n // Setting `configurable` to false breaks proxy invariants, should be fixable.\n configurable: true,\n });\n};\n\n// NOTE: KEEP as function.\nconst typedJsonSerializer = function (this: any) {\n const { id, ...rest } = this;\n const result: any = {\n id,\n };\n\n if (this[TypeId]) {\n result[ATTR_TYPE] = this[TypeId].toString();\n }\n\n if (this[SelfDXNId]) {\n result[ATTR_SELF_DXN] = this[SelfDXNId].toString();\n }\n\n if (this[RelationSourceDXNId]) {\n const sourceDXN = this[RelationSourceDXNId];\n invariant(sourceDXN instanceof DXN);\n result[ATTR_RELATION_SOURCE] = sourceDXN.toString();\n }\n if (this[RelationTargetDXNId]) {\n const targetDXN = this[RelationTargetDXNId];\n invariant(targetDXN instanceof DXN);\n result[ATTR_RELATION_TARGET] = targetDXN.toString();\n }\n\n if (this[MetaId]) {\n result[ATTR_META] = serializeMeta(this[MetaId]);\n }\n\n Object.assign(result, serializeData(rest));\n return result;\n};\n\nconst serializeData = (data: unknown) => {\n return deepMapValues(data, (value, recurse) => {\n if (Ref.isRef(value)) {\n // TODO(dmaretskyi): Should this be configurable?\n return value.noInline().encode();\n }\n return recurse(value);\n });\n};\n\nconst serializeMeta = (meta: ObjectMeta) => {\n return deepMapValues(meta, (value, recurse) => recurse(value));\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\nimport * as ParseResult from 'effect/ParseResult';\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { type EncodedReference, Reference } from '@dxos/echo-protocol';\nimport { compositeRuntime } from '@dxos/echo-signals/runtime';\nimport { assertArgument, invariant } from '@dxos/invariant';\nimport { DXN, ObjectId } from '@dxos/keys';\n\nimport { ReferenceAnnotationId, getSchemaDXN, getTypeAnnotation, getTypeIdentifierAnnotation } from '../ast';\nimport { type JsonSchemaType } from '../json-schema';\nimport type { BaseObject, WithId } from '../types';\n\n/**\n * The `$id` and `$ref` fields for an ECHO reference schema.\n */\nexport const JSON_SCHEMA_ECHO_REF_ID = '/schemas/echo/ref';\n\n// TODO(burdon): Define return type.\nexport const getSchemaReference = (property: JsonSchemaType): { typename: string } | undefined => {\n const { $id, reference: { schema: { $ref } = {} } = {} } = property;\n if ($id === JSON_SCHEMA_ECHO_REF_ID && $ref) {\n return { typename: DXN.parse($ref).typename };\n }\n};\n\nexport const createSchemaReference = (typename: string): JsonSchemaType => {\n return {\n $id: JSON_SCHEMA_ECHO_REF_ID,\n reference: {\n schema: {\n $ref: DXN.fromTypename(typename).toString(),\n },\n },\n };\n};\n\n/**\n * Runtime type-info for a reference extracted from effect AST.\n */\nexport type RefereneAST = {\n /**\n * Typename of linked schema.\n */\n typename: string;\n\n /**\n * Version of linked schema.\n */\n version: string;\n};\n\nexport const getReferenceAst = (ast: SchemaAST.AST): RefereneAST | undefined => {\n if (ast._tag !== 'Declaration' || !ast.annotations[ReferenceAnnotationId]) {\n return undefined;\n }\n return {\n typename: (ast.annotations[ReferenceAnnotationId] as any).typename,\n version: (ast.annotations[ReferenceAnnotationId] as any).version,\n };\n};\n\nexport const RefTypeId: unique symbol = Symbol('@dxos/echo/internal/Ref');\n\n/**\n * Reference Schema.\n */\nexport interface Ref$<T extends WithId> extends Schema.SchemaClass<Ref<T>, EncodedReference> {}\n\n// Type of the `Ref` function and extra methods attached to it.\nexport interface RefFn {\n <S extends Schema.Schema.Any>(schema: S): Ref$<Schema.Schema.Type<S>>;\n\n /**\n * @returns True if the object is a reference.\n */\n isRef: (obj: any) => obj is Ref<any>;\n\n /**\n * @returns True if the reference points to the given object id.\n */\n hasObjectId: (id: ObjectId) => (ref: Ref<any>) => boolean;\n\n /**\n * @returns True if the schema is a reference schema.\n */\n isRefSchema: (schema: Schema.Schema<any, any>) => schema is Ref$<any>;\n\n /**\n * @returns True if the schema AST is a reference schema.\n */\n isRefSchemaAST: (ast: SchemaAST.AST) => boolean;\n\n /**\n * Constructs a reference that points to the given object.\n */\n // TODO(burdon): Tighten type of T?\n make: <T extends WithId>(object: T) => Ref<T>;\n\n /**\n * Constructs a reference that points to the object specified by the provided DXN.\n */\n fromDXN: (dxn: DXN) => Ref<any>;\n}\n/**\n * Schema builder for references.\n */\nexport const Ref: RefFn = <S extends Schema.Schema.Any>(schema: S): Ref$<Schema.Schema.Type<S>> => {\n assertArgument(Schema.isSchema(schema), 'schema', 'Must call with an instance of effect-schema');\n\n const annotation = getTypeAnnotation(schema);\n if (annotation == null) {\n throw new Error('Reference target must be an ECHO schema.');\n }\n\n return createEchoReferenceSchema(\n getTypeIdentifierAnnotation(schema),\n annotation.typename,\n annotation.version,\n getSchemaExpectedName(schema.ast),\n );\n};\n\n/**\n * Represents materialized reference to a target.\n * This is the data type for the fields marked as ref.\n */\nexport interface Ref<T> {\n /**\n * Target object DXN.\n */\n get dxn(): DXN;\n\n /**\n * @returns The reference target.\n * May return `undefined` if the object is not loaded in the working set.\n * Accessing this property, even if it returns `undefined` will trigger the object to be loaded to the working set.\n *\n * @reactive Supports signal subscriptions.\n */\n get target(): T | undefined;\n\n /**\n * @returns Promise that will resolves with the target object.\n * Will load the object from disk if it is not present in the working set.\n * @throws If the object is not available locally.\n */\n load(): Promise<T>;\n\n /**\n * @returns Promise that will resolves with the target object or undefined if the object is not loaded locally.\n */\n tryLoad(): Promise<T | undefined>;\n\n /**\n * Do not inline the target object in the reference.\n * Makes .target unavailable unless the reference is connected to a database context.\n *\n * When serialized with toJSON, the difference is between:\n * `{ \"/\": \"dxn:...\" }`\n * and\n * `{ \"/\": \"dxn:...\", \"target\": { ... } }`\n *\n * Clones the reference object.\n */\n noInline(): Ref<T>;\n\n /**\n * Serializes the reference to a JSON object.\n * The serialization format is compatible with the IPLD-style encoded references.\n * When a reference has a saved target (i.e. the target or object holding the reference is not in the database),\n * the target is included in the serialized object.\n *\n * Examples:\n * `{ \"/\": \"dxn:...\" }`\n * `{ \"/\": \"dxn:...\", \"target\": { ... } }`\n */\n encode(): EncodedReference;\n\n [RefTypeId]: {\n _T: T;\n };\n}\n\nexport declare namespace Ref {\n /**\n * Target of the reference.\n */\n export type Target<R> = R extends Ref<infer U> ? U : never;\n}\n\nRef.isRef = (obj: any): obj is Ref<any> => {\n return obj && typeof obj === 'object' && RefTypeId in obj;\n};\n\nRef.hasObjectId = (id: ObjectId) => (ref: Ref<any>) => ref.dxn.isLocalObjectId() && ref.dxn.parts[1] === id;\n\nRef.isRefSchema = (schema: Schema.Schema<any, any>): schema is Ref$<any> => {\n return Ref.isRefSchemaAST(schema.ast);\n};\n\nRef.isRefSchemaAST = (ast: SchemaAST.AST): boolean => {\n return SchemaAST.getAnnotation(ast, ReferenceAnnotationId).pipe(Option.isSome);\n};\n\nRef.make = <T extends BaseObject>(obj: T): Ref<T> => {\n if (typeof obj !== 'object' || obj === null) {\n throw new TypeError('Expected: ECHO object.');\n }\n\n // TODO(dmaretskyi): Extract to `getObjectDXN` function.\n const id = obj.id;\n invariant(ObjectId.isValid(id), 'Invalid object ID');\n const dxn = Reference.localObjectReference(id).toDXN();\n return new RefImpl(dxn, obj);\n};\n\nRef.fromDXN = (dxn: DXN): Ref<any> => {\n assertArgument(dxn instanceof DXN, 'dxn', 'Expected DXN');\n return new RefImpl(dxn);\n};\n\n/**\n * `reference` field on the schema object.\n */\nexport type JsonSchemaReferenceInfo = {\n schema: { $ref: string };\n schemaVersion?: string;\n};\n\n/**\n * @internal\n */\n// TODO(burdon): Move to json schema and make private?\nexport const createEchoReferenceSchema = (\n echoId: string | undefined,\n typename: string | undefined,\n version: string | undefined,\n schemaName?: string,\n): Schema.SchemaClass<Ref<any>, EncodedReference> => {\n if (!echoId && !typename) {\n throw new TypeError('Either echoId or typename must be provided.');\n }\n\n const referenceInfo: JsonSchemaReferenceInfo = {\n schema: {\n // TODO(dmaretskyi): Include version?\n $ref: echoId ?? DXN.fromTypename(typename!).toString(),\n },\n schemaVersion: version,\n };\n\n // TODO(dmaretskyi): Add name and description.\n const refSchema = Schema.declare<Ref<any>, EncodedReference, []>(\n [],\n {\n encode: () => {\n return (value) => {\n return Effect.succeed({\n '/': (value as Ref<any>).dxn.toString(),\n });\n };\n },\n decode: () => {\n return (value) => {\n // TODO(dmaretskyi): This branch seems to be taken by Schema.is\n if (Ref.isRef(value)) {\n return Effect.succeed(value);\n }\n\n if (typeof value !== 'object' || value == null || typeof (value as any)['/'] !== 'string') {\n return Effect.fail(new ParseResult.Unexpected(value, 'reference'));\n }\n\n return Effect.succeed(Ref.fromDXN(DXN.parse((value as any)['/'])));\n };\n },\n },\n {\n jsonSchema: {\n // TODO(dmaretskyi): We should remove `$id` and keep `$ref` with a fully qualified name.\n $id: JSON_SCHEMA_ECHO_REF_ID,\n $ref: JSON_SCHEMA_ECHO_REF_ID,\n reference: referenceInfo,\n },\n [ReferenceAnnotationId]: {\n typename: typename ?? '',\n version,\n },\n },\n );\n\n return refSchema;\n};\n\nconst getSchemaExpectedName = (ast: SchemaAST.Annotated): string | undefined => {\n return SchemaAST.getIdentifierAnnotation(ast).pipe(\n Option.orElse(() => SchemaAST.getTitleAnnotation(ast)),\n Option.orElse(() => SchemaAST.getDescriptionAnnotation(ast)),\n Option.getOrElse(() => undefined),\n );\n};\n\nexport interface RefResolver {\n /**\n * Resolve ref synchronously from the objects in the working set.\n *\n * @param dxn\n * @param load If true the resolver should attempt to load the object from disk.\n * @param onLoad Callback to call when the object is loaded.\n */\n resolveSync(dxn: DXN, load: boolean, onLoad?: () => void): BaseObject | undefined;\n\n /**\n * Resolver ref asynchronously.\n */\n resolve(dxn: DXN): Promise<BaseObject | undefined>;\n\n // TODO(dmaretskyi): Combine with `resolve`.\n resolveSchema(dxn: DXN): Promise<Schema.Schema.AnyNoContext | undefined>;\n}\n\nexport class RefImpl<T> implements Ref<T> {\n #dxn: DXN;\n #resolver?: RefResolver = undefined;\n #signal = compositeRuntime.createSignal();\n\n /**\n * Target is set when the reference is created from a specific object.\n * In this case, the target might not be in the database.\n */\n #target: T | undefined = undefined;\n\n /**\n * Callback to issue a reactive notification when object is resolved.\n */\n #resolverCallback = () => {\n this.#signal.notifyWrite();\n };\n\n constructor(dxn: DXN, target?: T) {\n this.#dxn = dxn;\n this.#target = target;\n }\n\n /**\n * @inheritdoc\n */\n get dxn(): DXN {\n return this.#dxn;\n }\n\n /**\n * @inheritdoc\n */\n get target(): T | undefined {\n this.#signal.notifyRead();\n if (this.#target) {\n return this.#target;\n }\n\n invariant(this.#resolver, 'Resolver is not set');\n return this.#resolver.resolveSync(this.#dxn, true, this.#resolverCallback) as T | undefined;\n }\n\n /**\n * @inheritdoc\n */\n async load(): Promise<T> {\n if (this.#target) {\n return this.#target;\n }\n invariant(this.#resolver, 'Resolver is not set');\n const obj = await this.#resolver.resolve(this.#dxn);\n if (obj == null) {\n throw new Error('Object not found');\n }\n return obj as T;\n }\n\n /**\n * @inheritdoc\n */\n async tryLoad(): Promise<T | undefined> {\n invariant(this.#resolver, 'Resolver is not set');\n return (await this.#resolver.resolve(this.#dxn)) as T | undefined;\n }\n\n /**\n * Do not inline the target object in the reference.\n * Makes .target unavailable unless the reference is connected to a database context.\n * Clones the reference object.\n */\n noInline(): RefImpl<T> {\n const ref = new RefImpl<T>(this.#dxn, undefined);\n ref.#resolver = this.#resolver;\n return ref;\n }\n\n encode(): EncodedReference {\n return {\n '/': this.#dxn.toString(),\n ...(this.#target ? { target: this.#target } : {}),\n };\n }\n\n /**\n * Serializes the reference to a JSON object.\n * The serialization format is compatible with the IPLD-style encoded references.\n * When a reference has a saved target (i.e. the target or object holding the reference is not in the database),\n * the target is included in the serialized object.\n */\n toJSON(): EncodedReference {\n return this.encode();\n }\n\n toString(): string {\n if (this.#target) {\n return `Ref(${this.#target.toString()})`;\n }\n\n return `Ref(${this.#dxn.toString()})`;\n }\n\n [RefTypeId] = refVariance;\n\n /**\n * Internal method to set the resolver.\n * @internal\n */\n _setResolver(resolver: RefResolver): void {\n this.#resolver = resolver;\n }\n\n /**\n * Internal method to get the saved target.\n * Not the same as `target` which is resolved from the resolver.\n * @internal\n */\n _getSavedTarget(): T | undefined {\n return this.#target;\n }\n}\n\n/**\n * Internal API for setting the reference resolver.\n */\nexport const setRefResolver = (ref: Ref<any>, resolver: RefResolver) => {\n invariant(ref instanceof RefImpl, 'Ref is not an instance of RefImpl');\n ref._setResolver(resolver);\n};\n\n/**\n * Internal API for getting the saved target on a reference.\n */\nexport const getRefSavedTarget = (ref: Ref<any>): BaseObject | undefined => {\n invariant(ref instanceof RefImpl, 'Ref is not an instance of RefImpl');\n return ref._getSavedTarget();\n};\n\n// Used to validate reference target type.\nconst refVariance: Ref<any>[typeof RefTypeId] = {\n _T: null as any,\n};\n\nexport const refFromEncodedReference = (encodedReference: EncodedReference, resolver?: RefResolver): Ref<any> => {\n const dxn = DXN.parse(encodedReference['/']);\n const ref = new RefImpl(dxn);\n\n // TODO(dmaretskyi): Handle inline target in the encoded reference.\n\n if (resolver) {\n setRefResolver(ref, resolver);\n }\n return ref;\n};\n\nexport class StaticRefResolver implements RefResolver {\n public objects = new Map<ObjectId, BaseObject>();\n public schemas = new Map<DXN.String, Schema.Schema.AnyNoContext>();\n\n addObject(obj: BaseObject): this {\n this.objects.set(obj.id, obj);\n return this;\n }\n\n addSchema(schema: Schema.Schema.AnyNoContext): this {\n const dxn = getSchemaDXN(schema);\n invariant(dxn, 'Schema has no DXN');\n this.schemas.set(dxn.toString(), schema);\n return this;\n }\n\n resolveSync(dxn: DXN, _load: boolean, _onLoad?: () => void): BaseObject | undefined {\n const id = dxn?.asEchoDXN()?.echoId;\n if (id == null) {\n return undefined;\n }\n\n return this.objects.get(id);\n }\n\n async resolve(dxn: DXN): Promise<BaseObject | undefined> {\n const id = dxn?.asEchoDXN()?.echoId;\n if (id == null) {\n return undefined;\n }\n\n return this.objects.get(id);\n }\n\n async resolveSchema(dxn: DXN): Promise<Schema.Schema.AnyNoContext | undefined> {\n return this.schemas.get(dxn.toString());\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type ObjectId } from '@dxos/keys';\nimport { isNonNullable } from '@dxos/util';\n\nimport { type AnyEchoObject } from '../types';\n\nimport { Ref } from './ref';\n\n/**\n * Helper functions for working with arrays of refs.\n */\nexport const RefArray = Object.freeze({\n /**\n * @returns all resolved targets.\n */\n targets: <T extends AnyEchoObject>(refs: readonly Ref<T>[]): T[] => {\n return refs.map((ref) => ref.target).filter(isNonNullable);\n },\n\n /**\n * Load all referenced objects.\n */\n loadAll: <T extends AnyEchoObject>(refs: readonly Ref<T>[]): Promise<T[]> => {\n return Promise.all(refs.map((ref) => ref.load()));\n },\n\n /**\n * Removes the ref with the given id.\n */\n removeById: (refs: Ref<AnyEchoObject>[], id: ObjectId) => {\n const index = refs.findIndex(Ref.hasObjectId(id));\n if (index >= 0) {\n refs.splice(index, 1);\n }\n },\n});\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { ForeignKey } from '@dxos/echo-protocol';\nimport { invariant } from '@dxos/invariant';\nimport { type Comparator, intersection } from '@dxos/util';\n\nimport { type BaseObject } from '../types';\n\nimport { MetaId } from './model';\n\n//\n// ObjectMeta\n//\n\n// TODO(dmaretskyi): Rename to ObjectMeta\nexport const ObjectMetaSchema = Schema.mutable(\n Schema.Struct({\n keys: Schema.mutable(Schema.Array(ForeignKey)),\n\n /**\n * A set of tags.\n * Tags are arbitrary application-defined strings.\n * ECHO makes no assumptions about the tag structure.\n */\n // TODO(dmaretskyi): Has to be optional for compatibility with old data.\n // Defaulting to an empty array is possible but requires a bit more work.\n tags: Schema.optional(Schema.mutable(Schema.Array(Schema.String))),\n }),\n);\nexport type ObjectMeta = Schema.Schema.Type<typeof ObjectMetaSchema>;\n\nexport const foreignKey = (source: string, id: string): ForeignKey => ({ source, id });\nexport const foreignKeyEquals = (a: ForeignKey, b: ForeignKey) => a.source === b.source && a.id === b.id;\n\n/**\n * Get metadata from object.\n * Only callable on the object root.\n * @deprecated Use {@link getMeta}.\n */\n// TODO(dmaretskyi): Remove.\nexport const getObjectMeta = (obj: any): ObjectMeta => {\n return getMeta(obj);\n};\n\n/*\n * Get metadata from object.\n * Only callable on the object root.\n */\nexport const getMeta = (obj: BaseObject): ObjectMeta => {\n const metadata = (obj as any)[MetaId];\n invariant(metadata, 'ObjectMeta not found.');\n return metadata;\n};\n\n// TODO(dmaretskyi): Move to echo-schema.\nexport const compareForeignKeys: Comparator<BaseObject> = (a: BaseObject, b: BaseObject) =>\n intersection(getMeta(a).keys, getMeta(b).keys, foreignKeyEquals).length > 0;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\nimport type * as Types from 'effect/Types';\n\nimport { raise } from '@dxos/debug';\nimport { assertArgument, invariant } from '@dxos/invariant';\nimport { DXN } from '@dxos/keys';\n\nimport {\n EntityKind,\n type TypeAnnotation,\n TypeAnnotationId,\n type TypeMeta,\n getEntityKind,\n getSchemaTypename,\n getTypeIdentifierAnnotation,\n} from '../ast';\nimport { type HasId, type ToMutable } from '../types';\n\nimport { type RelationSourceTargetRefs } from './relation';\n\n// TODO(burdon): Define Schema type for `typename` and use consistently for all DXN-like properties.\n\n// type RequiredKeys<T> = { [K in keyof T]-?: {} extends Pick<T, K> ? never : K }[keyof T];\ntype EchoTypeSchemaProps<T, ExtraFields = {}> = Types.Simplify<HasId & ToMutable<T> & ExtraFields>;\n\nexport interface EchoTypeSchema<Self extends Schema.Schema.Any, ExtraFields = {}>\n extends TypeMeta,\n Schema.AnnotableClass<\n EchoTypeSchema<Self, ExtraFields>,\n EchoTypeSchemaProps<Schema.Schema.Type<Self>, ExtraFields>,\n EchoTypeSchemaProps<Schema.Schema.Encoded<Self>, ExtraFields>,\n Schema.Schema.Context<Self>\n > {\n // make(\n // props: RequiredKeys<Schema.TypeLiteral.Constructor<Fields, []>> extends never\n // ? void | Simplify<Schema.TypeLiteral.Constructor<Fields, []>>\n // : Simplify<Schema.TypeLiteral.Constructor<Fields, []>>,\n // options?: MakeOptions,\n // ): Simplify<Schema.TypeLiteral.Type<Fields, []>>;\n\n instanceOf(value: unknown): boolean;\n}\n\n/**\n * Pipeable function to add ECHO object annotations to a schema.\n */\n// TODO(dmaretskyi): Rename EchoObjectSchema.\nexport const EchoObject: {\n // TODO(burdon): Tighten Self type to Schema.TypeLiteral or Schema.Struct to facilitate definition of `make` method.\n // (meta: TypeMeta): <Self extends Schema.Struct<Fields>, Fields extends Schema.Struct.Fields>(self: Self) => EchoObjectSchema<Self, Fields>;\n (meta: TypeMeta): <Self extends Schema.Schema.Any>(self: Self) => EchoTypeSchema<Self>;\n} = ({ typename, version }) => {\n return <Self extends Schema.Schema.Any>(self: Self): EchoTypeSchema<Self> => {\n invariant(typeof TypeAnnotationId === 'symbol', 'Sanity.');\n invariant(SchemaAST.isTypeLiteral(self.ast), 'Schema must be a TypeLiteral.');\n\n // TODO(dmaretskyi): Does `Schema.mutable` work for deep mutability here?\n // TODO(dmaretskyi): Do not do mutable here.\n const schemaWithId = Schema.extend(Schema.mutable(self), Schema.Struct({ id: Schema.String }));\n const ast = SchemaAST.annotations(schemaWithId.ast, {\n // TODO(dmaretskyi): `extend` kills the annotations.\n ...self.ast.annotations,\n [TypeAnnotationId]: { kind: EntityKind.Object, typename, version } satisfies TypeAnnotation,\n // TODO(dmaretskyi): TypeIdentifierAnnotationId?\n [SchemaAST.JSONSchemaAnnotationId]: makeTypeJsonSchemaAnnotation({\n kind: EntityKind.Object,\n typename,\n version,\n }),\n });\n\n return makeEchoObjectSchema<Self>(/* self.fields, */ ast, typename, version);\n };\n};\n\nexport type EchoRelationOptions<\n TSource extends Schema.Schema.AnyNoContext,\n TTarget extends Schema.Schema.AnyNoContext,\n> = TypeMeta & {\n source: TSource;\n target: TTarget;\n};\n\n// TODO(dmaretskyi): Rename EchoRelationSchema.\nexport const EchoRelation = <Source extends Schema.Schema.AnyNoContext, Target extends Schema.Schema.AnyNoContext>(\n options: EchoRelationOptions<Source, Target>,\n) => {\n assertArgument(Schema.isSchema(options.source), 'source');\n assertArgument(Schema.isSchema(options.target), 'target');\n const sourceDXN = getDXNForRelationSchemaRef(options.source);\n const targetDXN = getDXNForRelationSchemaRef(options.target);\n if (getEntityKind(options.source) !== EntityKind.Object) {\n raise(new Error('Source schema must be an echo object schema.'));\n }\n if (getEntityKind(options.target) !== EntityKind.Object) {\n raise(new Error('Target schema must be an echo object schema.'));\n }\n\n return <Self extends Schema.Schema.Any>(\n self: Self,\n ): EchoTypeSchema<Self, RelationSourceTargetRefs<Schema.Schema.Type<Source>, Schema.Schema.Type<Target>>> => {\n invariant(SchemaAST.isTypeLiteral(self.ast), 'Schema must be a TypeLiteral.');\n\n // TODO(dmaretskyi): Does `Schema.mutable` work for deep mutability here?\n // TODO(dmaretskyi): Do not do mutable here.\n const schemaWithId = Schema.extend(Schema.mutable(self), Schema.Struct({ id: Schema.String }));\n const ast = SchemaAST.annotations(schemaWithId.ast, {\n // TODO(dmaretskyi): `extend` kills the annotations.\n ...self.ast.annotations,\n [TypeAnnotationId]: {\n kind: EntityKind.Relation,\n typename: options.typename,\n version: options.version,\n sourceSchema: sourceDXN,\n targetSchema: targetDXN,\n } satisfies TypeAnnotation,\n // TODO(dmaretskyi): TypeIdentifierAnnotationId?\n\n [SchemaAST.JSONSchemaAnnotationId]: makeTypeJsonSchemaAnnotation({\n kind: EntityKind.Relation,\n typename: options.typename,\n version: options.version,\n relationSource: sourceDXN,\n relationTarget: targetDXN,\n }),\n });\n\n return makeEchoObjectSchema<Self>(/* self.fields, */ ast, options.typename, options.version);\n };\n};\n\n/**\n * @returns JSON-schema annotation so that the schema can be serialized with correct parameters.\n */\nexport const makeTypeJsonSchemaAnnotation = (options: {\n identifier?: string;\n kind: EntityKind;\n typename: string;\n version: string;\n relationSource?: string;\n relationTarget?: string;\n}) => {\n assertArgument(!!options.relationSource === (options.kind === EntityKind.Relation), 'relationSource');\n assertArgument(!!options.relationTarget === (options.kind === EntityKind.Relation), 'relationTarget');\n\n const obj = {\n // TODO(dmaretskyi): Should this include the version?\n $id: options.identifier ?? DXN.fromTypename(options.typename).toString(),\n entityKind: options.kind,\n version: options.version,\n typename: options.typename,\n } as any;\n if (options.kind === EntityKind.Relation) {\n obj.relationSource = { $ref: options.relationSource };\n obj.relationTarget = { $ref: options.relationTarget };\n }\n return obj;\n};\n\nconst getDXNForRelationSchemaRef = (schema: Schema.Schema.Any): string => {\n assertArgument(Schema.isSchema(schema), 'schema');\n const identifier = getTypeIdentifierAnnotation(schema);\n if (identifier) {\n return identifier;\n }\n\n const typename = getSchemaTypename(schema);\n if (!typename) {\n throw new Error('Schema must have a typename');\n }\n\n return DXN.fromTypename(typename).toString();\n};\n\n// type MakeOptions =\n// | boolean\n// | {\n// readonly disableValidation?: boolean;\n// };\n\n// NOTE: Utils copied from Effect `Schema.ts`.\n// const _ownKeys = (o: object): Array<PropertyKey> =>\n// (Object.keys(o) as Array<PropertyKey>).concat(Object.getOwnPropertySymbols(o));\n\n// const _lazilyMergeDefaults = (\n// fields: Schema.Struct.Fields,\n// out: Record<PropertyKey, unknown>,\n// ): { [x: string | symbol]: unknown } => {\n// const ownKeys = _ownKeys(fields);\n// for (const key of ownKeys) {\n// const field = fields[key];\n// if (out[key] === undefined && Schema.isPropertySignature(field)) {\n// const ast = field.ast;\n// const defaultValue = ast._tag === 'PropertySignatureDeclaration' ? ast.defaultValue : ast.to.defaultValue;\n// if (defaultValue !== undefined) {\n// out[key] = defaultValue();\n// }\n// }\n// }\n// return out;\n// };\n\n// const _getDisableValidationMakeOption = (options: MakeOptions | undefined): boolean =>\n// Predicate.isBoolean(options) ? options : options?.disableValidation ?? false;\n\nconst makeEchoObjectSchema = <Self extends Schema.Schema.Any>(\n // fields: Fields,\n ast: SchemaAST.AST,\n typename: string,\n version: string,\n): EchoTypeSchema<Self> => {\n return class EchoObjectSchemaClass extends Schema.make<\n EchoTypeSchemaProps<Schema.Schema.Type<Self>>,\n EchoTypeSchemaProps<Schema.Schema.Encoded<Self>>,\n Schema.Schema.Context<Self>\n >(ast) {\n static readonly typename = typename;\n static readonly version = version;\n\n static override annotations(\n annotations: Schema.Annotations.GenericSchema<EchoTypeSchemaProps<Schema.Schema.Type<Self>>>,\n ): EchoTypeSchema<Self> {\n const schema = Schema.make<EchoTypeSchemaProps<Schema.Schema.Type<Self>>>(ast).annotations(annotations);\n return makeEchoObjectSchema<Self>(/* fields, */ schema.ast, typename, version);\n }\n\n // static make(\n // props: RequiredKeys<Schema.TypeLiteral.Constructor<Fields, []>> extends never\n // ? void | Simplify<Schema.TypeLiteral.Constructor<Fields, []>>\n // : Simplify<Schema.TypeLiteral.Constructor<Fields, []>>,\n // options?: MakeOptions,\n // ): Simplify<Schema.TypeLiteral.Type<Fields, []>> {\n // const propsWithDefaults: any = _lazilyMergeDefaults(fields, { ...(props as any) });\n // return _getDisableValidationMakeOption(options)\n // ? propsWithDefaults\n // : ParseResult.validateSync(this)(propsWithDefaults);\n // }\n\n static instanceOf(value: unknown): boolean {\n return Schema.is(this)(value);\n }\n };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { EchoObject } from './entity';\n\nexport const EXPANDO_TYPENAME = 'dxos.org/type/Expando';\n\nconst ExpandoSchema = Schema.Struct({}, { key: Schema.String, value: Schema.Any }).pipe(\n EchoObject({ typename: EXPANDO_TYPENAME, version: '0.1.0' }),\n);\n\n/**\n * Expando object is an object with an arbitrary set of properties.\n */\n// TODO(dmaretskyi): Can we consider expando a top-type, i.e. have a ref to expando potentially be a valid ref to any object?\nexport interface Expando extends Schema.Schema.Type<typeof ExpandoSchema> {}\n\nexport const Expando: Schema.Schema<Expando> = ExpandoSchema;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { DXN, ObjectId, QueueSubspaceTags, SpaceId } from '@dxos/keys';\n\n// TODO(burdon): Move to @dxos/keys once ObjectId is moved there.\n/**\n * @deprecated Use `db.queues.create()`\n */\nexport const createQueueDXN = (spaceId = SpaceId.random(), queueId = ObjectId.random()) =>\n new DXN(DXN.kind.QUEUE, [QueueSubspaceTags.DATA, spaceId, queueId]);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { invariant } from '@dxos/invariant';\n\nimport { EntityKind, SchemaVersion, type TypeAnnotation, TypeAnnotationId, type TypeMeta, Typename } from '../ast';\nimport { type HasId } from '../types';\n\nimport { type TypedObjectFields, type TypedObjectOptions, makeTypedEntityClass } from './common';\nimport { makeTypeJsonSchemaAnnotation } from './entity';\n\n/**\n * Definition for an object type that can be stored in an ECHO database.\n * Implements effect schema to define object properties.\n * Has a typename and version.\n *\n * In contrast to {@link EchoSchema} this definition is not recorded in the database.\n */\nexport interface TypedObject<A = any, I = any> extends TypeMeta, Schema.Schema<A, I> {}\n\n/**\n * Typed object that could be used as a prototype in class definitions.\n * This is an internal API type.\n * Use {@link TypedObject} for the common use-cases.\n */\nexport interface TypedObjectPrototype<A = any, I = any> extends TypedObject<A, I> {\n /** Type constructor. */\n new (): HasId & A;\n}\n\nexport type TypedObjectProps = TypeMeta & {\n // TODO(dmaretskyi): Remove after all legacy types has been removed.\n disableValidation?: boolean;\n};\n\n/**\n * Base class factory for typed objects.\n * @deprecated Use Function.pipe(Type.Obj) instead.\n */\nexport const TypedObject = ({\n typename: typenameParam,\n version: versionParam,\n disableValidation,\n}: TypedObjectProps) => {\n const typename = Typename.make(typenameParam, { disableValidation });\n const version = SchemaVersion.make(versionParam, { disableValidation });\n\n /**\n * Return class definition factory.\n */\n return <SchemaFields extends Schema.Struct.Fields, Options extends TypedObjectOptions>(\n fields: SchemaFields,\n options?: Options,\n ): TypedObjectPrototype<TypedObjectFields<SchemaFields, Options>, Schema.Struct.Encoded<SchemaFields>> => {\n // Create schema from fields.\n const schema: Schema.Schema.All = options?.record\n ? Schema.Struct(fields, { key: Schema.String, value: Schema.Any })\n : Schema.Struct(fields);\n\n // Set ECHO object id property.\n const typeSchema = Schema.extend(\n Schema.mutable(options?.partial ? Schema.partial(schema) : schema),\n Schema.Struct({ id: Schema.String }),\n );\n\n // Set ECHO annotations.\n invariant(typeof EntityKind.Object === 'string');\n const annotatedSchema = typeSchema.annotations({\n [TypeAnnotationId]: { kind: EntityKind.Object, typename, version } satisfies TypeAnnotation,\n [SchemaAST.JSONSchemaAnnotationId]: makeTypeJsonSchemaAnnotation({\n kind: EntityKind.Object,\n typename,\n version,\n }),\n });\n\n /**\n * Return class definition.\n * NOTE: Actual reactive ECHO objects must be created via the `live(Type)` function.\n */\n // TODO(burdon): This is missing fields required by TypedObject (e.g., Type, Encoded, Context)?\n return class TypedObject extends makeTypedEntityClass(typename, version, annotatedSchema as any) {} as any;\n };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type { BaseObject } from '../types';\n\nimport { DeletedId } from './model';\n\n/**\n * @returns `true` if the object has been marked as deleted.\n */\nexport const isDeleted = (obj: BaseObject): boolean => {\n if ((obj as any)[DeletedId] === undefined) {\n // TODO(dmaretskyi): Return to prior behavior of throwing.\n // throw new Error('Object does not support deletion marker');\n return false;\n }\n return (obj as any)[DeletedId] ?? false;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { invariant } from '@dxos/invariant';\n\nimport { SchemaId } from './model';\n\n// TODO(burdon): Reconcile with @dxos/effect visit().\n\nexport class SchemaValidator {\n /**\n * Recursively check that schema specifies constructions we can handle.\n * Validates there are no ambiguous discriminated union types.\n */\n public static validateSchema(schema: Schema.Schema.AnyNoContext): void {\n const visitAll = (nodes: SchemaAST.AST[]) => nodes.forEach((node) => this.validateSchema(Schema.make(node)));\n if (SchemaAST.isUnion(schema.ast)) {\n const typeAstList = schema.ast.types.filter((type) => SchemaAST.isTypeLiteral(type)) as SchemaAST.TypeLiteral[];\n // Check we can handle a discriminated union.\n if (typeAstList.length > 1) {\n getTypeDiscriminators(typeAstList);\n }\n visitAll(typeAstList);\n } else if (SchemaAST.isTupleType(schema.ast)) {\n const positionalTypes = schema.ast.elements.map((t) => t.type);\n const allTypes = positionalTypes.concat(schema.ast.rest.map((t) => t.type));\n visitAll(allTypes);\n } else if (SchemaAST.isTypeLiteral(schema.ast)) {\n visitAll(SchemaAST.getPropertySignatures(schema.ast).map((p) => p.type));\n }\n }\n\n public static hasTypeAnnotation(\n rootObjectSchema: Schema.Schema.AnyNoContext,\n property: string,\n annotation: symbol,\n ): boolean {\n try {\n let type = this.getPropertySchema(rootObjectSchema, [property]);\n if (SchemaAST.isTupleType(type.ast)) {\n type = this.getPropertySchema(rootObjectSchema, [property, '0']);\n }\n\n return type.ast.annotations[annotation] != null;\n } catch (err) {\n return false;\n }\n }\n\n public static getPropertySchema(\n rootObjectSchema: Schema.Schema.AnyNoContext,\n propertyPath: KeyPath,\n getProperty: (path: KeyPath) => any = () => null,\n ): Schema.Schema.AnyNoContext {\n let schema: Schema.Schema.AnyNoContext = rootObjectSchema;\n for (let i = 0; i < propertyPath.length; i++) {\n const propertyName = propertyPath[i];\n const tupleAst = unwrapArray(schema.ast);\n if (tupleAst != null) {\n schema = getArrayElementSchema(tupleAst, propertyName);\n } else {\n const propertyType = getPropertyType(schema.ast, propertyName.toString(), (propertyName) =>\n getProperty([...propertyPath.slice(0, i), propertyName]),\n );\n if (propertyType == null) {\n throw new TypeError(`unknown property: ${String(propertyName)} on object. Path: ${propertyPath}`);\n }\n\n schema = Schema.make(propertyType).annotations(propertyType.annotations);\n }\n }\n\n return schema;\n }\n\n public static getTargetPropertySchema(target: any, prop: string | symbol): Schema.Schema.AnyNoContext {\n const schema: Schema.Schema.AnyNoContext | undefined = (target as any)[SchemaId];\n invariant(schema, 'target has no schema');\n const arrayAst = unwrapArray(schema.ast);\n if (arrayAst != null) {\n return getArrayElementSchema(arrayAst, prop);\n }\n\n const propertyType = getPropertyType(schema.ast, prop.toString(), (prop) => target[prop]);\n if (propertyType == null) {\n return Schema.Any; // TODO(burdon): HACK.\n }\n\n invariant(propertyType, `invalid property: ${prop.toString()}`);\n return Schema.make(propertyType);\n }\n}\n\n/**\n * Tuple AST is used both for:\n * fixed-length tuples ([string, number]) in which case AST will be { elements: [Schema.String, Schema.Number] }\n * variable-length arrays (Array<string | number>) in which case AST will be { rest: [Schema.Union(Schema.String, Schema.Number)] }\n */\nconst getArrayElementSchema = (\n tupleAst: SchemaAST.TupleType,\n property: string | symbol | number,\n): Schema.Schema.AnyNoContext => {\n const elementIndex = typeof property === 'string' ? parseInt(property, 10) : Number.NaN;\n if (Number.isNaN(elementIndex)) {\n invariant(property === 'length', `invalid array property: ${String(property)}`);\n return Schema.Number;\n }\n if (elementIndex < tupleAst.elements.length) {\n const elementType = tupleAst.elements[elementIndex].type;\n return Schema.make(elementType).annotations(elementType.annotations);\n }\n\n const restType = tupleAst.rest;\n return Schema.make(restType[0].type).annotations(restType[0].annotations);\n};\n\nconst flattenUnion = (typeAst: SchemaAST.AST): SchemaAST.AST[] =>\n SchemaAST.isUnion(typeAst) ? typeAst.types.flatMap(flattenUnion) : [typeAst];\n\nconst getProperties = (\n typeAst: SchemaAST.AST,\n getTargetPropertyFn: (propertyName: string) => any,\n): SchemaAST.PropertySignature[] => {\n const astCandidates = flattenUnion(typeAst);\n const typeAstList = astCandidates.filter((type) => SchemaAST.isTypeLiteral(type)) as SchemaAST.TypeLiteral[];\n if (typeAstList.length === 0) {\n return [];\n }\n if (typeAstList.length === 1) {\n return SchemaAST.getPropertySignatures(typeAstList[0]);\n }\n\n const typeDiscriminators = getTypeDiscriminators(typeAstList);\n const targetPropertyValue = getTargetPropertyFn(String(typeDiscriminators[0].name));\n const typeIndex = typeDiscriminators.findIndex((p) => targetPropertyValue === (p.type as SchemaAST.Literal).literal);\n invariant(typeIndex !== -1, 'discriminator field not set on target');\n return SchemaAST.getPropertySignatures(typeAstList[typeIndex]);\n};\n\nconst getPropertyType = (\n ast: SchemaAST.AST,\n propertyName: string,\n getTargetPropertyFn: (propertyName: string) => any,\n): SchemaAST.AST | null => {\n const anyOrObject = unwrapAst(\n ast,\n (candidate) => SchemaAST.isAnyKeyword(candidate) || SchemaAST.isObjectKeyword(candidate),\n );\n if (anyOrObject != null) {\n return ast;\n }\n\n const typeOrDiscriminatedUnion = unwrapAst(ast, (t) => {\n return SchemaAST.isTypeLiteral(t) || (SchemaAST.isUnion(t) && t.types.some((t) => SchemaAST.isTypeLiteral(t)));\n });\n if (typeOrDiscriminatedUnion == null) {\n return null;\n }\n\n const targetProperty = getProperties(typeOrDiscriminatedUnion, getTargetPropertyFn).find(\n (p) => p.name === propertyName,\n );\n if (targetProperty != null) {\n return unwrapAst(targetProperty.type);\n }\n\n const indexSignatureType = unwrapAst(ast, SchemaAST.isTypeLiteral);\n if (\n indexSignatureType &&\n SchemaAST.isTypeLiteral(indexSignatureType) &&\n indexSignatureType.indexSignatures.length > 0\n ) {\n return unwrapAst(indexSignatureType.indexSignatures[0].type);\n }\n\n return null;\n};\n\nconst getTypeDiscriminators = (typeAstList: SchemaAST.TypeLiteral[]): SchemaAST.PropertySignature[] => {\n const discriminatorPropCandidates = typeAstList\n .flatMap(SchemaAST.getPropertySignatures)\n .filter((p) => SchemaAST.isLiteral(p.type));\n const propertyName = discriminatorPropCandidates[0].name;\n const isValidDiscriminator = discriminatorPropCandidates.every((p) => p.name === propertyName && !p.isOptional);\n const everyTypeHasDiscriminator = discriminatorPropCandidates.length === typeAstList.length;\n const isDiscriminatedUnion = isValidDiscriminator && everyTypeHasDiscriminator;\n invariant(isDiscriminatedUnion, 'type ambiguity: every type in a union must have a single unique-literal field');\n return discriminatorPropCandidates;\n};\n\n/**\n * Used to check that rootAst is for a type matching the provided predicate.\n * That's not always straightforward because types of optionality and recursive types.\n * const Task = Schema.Struct({\n * ...,\n * previous?: Schema.optional(Schema.suspend(() => Task)),\n * });\n * Here the AST for `previous` field is going to be Union(Suspend(Type), Undefined).\n * SchemaAST.isTypeLiteral(field) will return false, but unwrapAst(field, (ast) => SchemaAST.isTypeLiteral(ast))\n * will return true.\n */\nconst unwrapAst = (rootAst: SchemaAST.AST, predicate?: (ast: SchemaAST.AST) => boolean): SchemaAST.AST | null => {\n let ast: SchemaAST.AST | undefined = rootAst;\n while (ast != null) {\n if (predicate?.(ast)) {\n return ast;\n }\n\n if (SchemaAST.isUnion(ast)) {\n const next: any = ast.types.find((t) => (predicate != null && predicate(t)) || SchemaAST.isSuspend(t));\n if (next != null) {\n ast = next;\n continue;\n }\n }\n\n if (SchemaAST.isSuspend(ast)) {\n ast = ast.f();\n } else {\n return predicate == null ? ast : null;\n }\n }\n\n return null;\n};\n\nconst unwrapArray = (ast: SchemaAST.AST) => unwrapAst(ast, SchemaAST.isTupleType) as SchemaAST.TupleType | null;\n\nexport const checkIdNotPresentOnSchema = (schema: Schema.Schema<any, any, any>) => {\n invariant(SchemaAST.isTypeLiteral(schema.ast));\n const idProperty = SchemaAST.getPropertySignatures(schema.ast).find((prop) => prop.name === 'id');\n if (idProperty != null) {\n throw new Error('\"id\" property name is reserved');\n }\n};\n\ntype KeyPath = readonly (string | number)[];\n", "//\n// NOTE: Those types must match the ones defined at @dxos/echo. We duplicated them murely due to technical constrains.\n//\n\n/**\n * Getter to get object version.\n */\n//\n// Copyright 2025 DXOS.org\n//\n\nexport const VersionTypeId: unique symbol = Symbol('@dxos/echo/Version');\n\n/**\n * Represent object version.\n * May be backed by Automerge.\n * Objects with no history are not versioned.\n */\nexport interface Version {\n [VersionTypeId]: {};\n automergeHeads?: string[];\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { GeneratorAnnotationId, LabelAnnotationId, PropertyMetaAnnotationId } from '../ast';\nimport { CurrencyAnnotationId, FormatAnnotationId } from '../formats';\nimport { type JsonSchemaEchoAnnotations, type JsonSchemaType } from '../json-schema';\n\n//\n// This file configures annotations for JSON encoding/decoding.\n//\n\n// Go on the root level.\ntype RootJsonSchemaProperty = keyof JsonSchemaType;\n\n// Go on the namespaced `annotations` property.\ntype NamespacedJsonSchemaProperty = keyof JsonSchemaEchoAnnotations;\n\n/**\n * List of annotations for JSON encoding/decoding.\n * Omits default effect-schema annotations since they are encoded with default serializer.\n */\n// TODO(burdon): Reconcile with `EchoAnnotations`.\nexport const CustomAnnotations: Partial<Record<RootJsonSchemaProperty, symbol>> = {\n format: FormatAnnotationId,\n currency: CurrencyAnnotationId,\n};\n\n/**\n * List of annotations for JSON decoding only.\n * Includes default effect annotations.\n */\nexport const DecodedAnnotations: Partial<Record<RootJsonSchemaProperty, symbol>> = {\n title: SchemaAST.TitleAnnotationId,\n description: SchemaAST.DescriptionAnnotationId,\n};\n\n/**\n * Annotations that go into ECHO namespace in json-schema.\n */\n// TODO(dmaretskyi): Consider removing ECHO namespace and putting them at the top level.\n// TODO(dmaretskyi): Move to format.ts when circular imports are solved\nexport const EchoAnnotations: Partial<Record<NamespacedJsonSchemaProperty, symbol>> = {\n // TODO(dmaretskyi): `FieldLookupAnnotationId` might go here, but lets remove it entirely and use LabelAnnotation instead.\n meta: PropertyMetaAnnotationId,\n generator: GeneratorAnnotationId,\n labelProp: LabelAnnotationId,\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { Reference } from '@dxos/echo-protocol';\nimport { type JsonPath, splitJsonPath } from '@dxos/effect';\nimport { DXN, type ObjectId } from '@dxos/keys';\nimport { getDeep, setDeep } from '@dxos/util';\n\nimport { getSchemaDXN } from '../ast';\nimport { type EntityKindId, type ObjectMeta, getType, getTypename } from '../object';\nimport { ATTR_META } from '../object/model';\n\n/**\n * Base type for all data objects (reactive, ECHO, and other raw objects).\n * NOTE: This describes the base type for all database objects.\n * It is stricter than `T extends {}` or `T extends object`.\n */\n// TODO(dmaretskyi): Rename AnyProperties.\n// TODO(dmaretskyi): Prefer `Record<string, unknown>` over `any`.\n/**\n * @deprecated use Obj.Any\n */\nexport type BaseObject = Record<string, any>;\n\n/**\n * Marker interface for object with an `id`.\n */\nexport interface HasId {\n readonly id: ObjectId;\n}\n\n// TODO(dmaretskyi): Remove; this type effectively disables type safety due to `any`.\nexport type WithId<T extends BaseObject = BaseObject> = T & HasId;\n\nexport type ExcludeId<T extends BaseObject> = Omit<T, 'id'>;\n\n/**\n * Properties that are required for object creation.\n */\n// TODO(dmaretskyi): Rename `MakeProps`?\nexport type CreationProps<T extends BaseObject> = Omit<T, 'id' | typeof EntityKindId>;\n\nexport type PropertyKey<T extends BaseObject> = Extract<keyof ExcludeId<T>, string>;\n\n// TODO(dmaretskyi): Remove. This should be using the symbol type.\nexport type WithMeta = { [ATTR_META]?: ObjectMeta };\n\n/**\n * The raw object should not include the ECHO id, but may include metadata.\n */\nexport const RawObject = <S extends Schema.Schema.AnyNoContext>(\n schema: S,\n): Schema.Schema<ExcludeId<Schema.Schema.Type<S>> & WithMeta, Schema.Schema.Encoded<S>> => {\n return Schema.make(SchemaAST.omit(schema.ast, ['id']));\n};\n\n//\n// Utils\n//\n\n/**\n * Utility to split meta property from raw object.\n * @deprecated Bad API.\n */\nexport const splitMeta = <T>(object: T & WithMeta): { object: T; meta?: ObjectMeta } => {\n const meta = object[ATTR_META];\n delete object[ATTR_META];\n return { meta, object };\n};\n\n// TODO(burdon): Move to `@dxos/util`.\nexport const getValue = <T extends object>(obj: T, path: JsonPath): any => {\n return getDeep(\n obj,\n splitJsonPath(path).map((p) => p.replace(/[[\\]]/g, '')),\n );\n};\n\n// TODO(burdon): Move to `@dxos/util`.\nexport const setValue = <T extends object>(obj: T, path: JsonPath, value: any): T => {\n return setDeep(\n obj,\n splitJsonPath(path).map((p) => p.replace(/[[\\]]/g, '')),\n value,\n );\n};\n\n/**\n * Returns a reference that will be used to point to a schema.\n * @deprecated Use {@link getSchemaDXN} instead.\n */\nexport const getTypeReference = (schema: Schema.Schema.All | undefined): Reference | undefined => {\n if (!schema) {\n return undefined;\n }\n\n const schemaDXN = getSchemaDXN(schema);\n if (!schemaDXN) {\n return undefined;\n }\n return Reference.fromDXN(schemaDXN);\n};\n\n/**\n * Returns a reference that will be used to point to a schema.\n * @throws If it is not possible to reference this schema.\n *\n * @deprecated Use {@link getSchemaDXN} instead.\n */\nexport const requireTypeReference = (schema: Schema.Schema.AnyNoContext): Reference => {\n const typeReference = getTypeReference(schema);\n if (typeReference == null) {\n // TODO(burdon): Catalog user-facing errors (this is too verbose).\n throw new Error('Schema must be defined via TypedObject.');\n }\n\n return typeReference;\n};\n\n// TODO(burdon): Can we use `Schema.is`?\n/**\n * Checks if the object is an instance of the schema.\n * Only typename is compared, the schema version is ignored.\n *\n * The following cases are considered to mean that the object is an instance of the schema:\n * - Object was created with this exact schema.\n * - Object was created with a different version of this schema.\n * - Object was created with a different schema (maybe dynamic) that has the same typename.\n */\nexport const isInstanceOf = <Schema extends Schema.Schema.AnyNoContext>(\n schema: Schema,\n object: any,\n): object is Schema.Schema.Type<Schema> => {\n if (object == null) {\n return false;\n }\n\n const schemaDXN = getSchemaDXN(schema);\n if (!schemaDXN) {\n throw new Error('Schema must have an object annotation.');\n }\n\n const type = getType(object);\n if (type && DXN.equals(type, schemaDXN)) {\n return true;\n }\n\n const typename = getTypename(object);\n if (!typename) {\n return false;\n }\n\n const typeDXN = schemaDXN.asTypeDXN();\n if (!typeDXN) {\n return false;\n }\n\n return typeDXN.type === typename;\n};\n\n/**\n * Object that has an associated typename.\n * The typename is retrievable using {@link getTypename}.\n * The object can be used with {@link isInstanceOf} to check if it is an instance of a schema.\n */\nexport type HasTypename = {};\n\n/**\n * Canonical type for all ECHO objects.\n */\n// TODO(burdon): Reconcile with Obj.Any, Relation.Any.\nexport interface AnyEchoObject extends HasId, HasTypename {}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\n\nimport { type JsonSchemaType } from '../json-schema';\nimport { getSnapshot } from '../schema';\n\n/**\n * Creates a composite schema from the source and projection schemas.\n */\n// TODO(burdon): Use effect schema projections.\n// TODO(burdon): Can avoid having to call this every time we modify any property on the view?\nexport const composeSchema = (source: JsonSchemaType, target: JsonSchemaType): JsonSchemaType => {\n const result: JsonSchemaType = getSnapshot(target);\n invariant('type' in result && result.type === 'object', 'source schema must be an object');\n invariant('type' in source && source.type === 'object', 'target schema must be an object');\n\n for (const prop in result.properties) {\n const propSchema = source.properties![prop]; // TODO(dmaretskyi): Find by json-path instead.\n const annotations = (propSchema as JsonSchemaType)?.annotations?.meta;\n if (annotations) {\n (result.properties[prop] as JsonSchemaType).annotations ??= {};\n (result.properties[prop] as JsonSchemaType).annotations!.meta ??= {};\n for (const key in annotations) {\n (result.properties[prop] as JsonSchemaType).annotations!.meta![key] ??= {};\n Object.assign((result.properties[prop] as JsonSchemaType).annotations!.meta![key], annotations[key], {\n ...(result.properties[prop] as JsonSchemaType).annotations!.meta![key],\n });\n }\n }\n }\n\n return result;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { invariant } from '@dxos/invariant';\nimport { type ObjectId } from '@dxos/keys';\n\nimport { type SchemaMeta, SchemaMetaSymbol, type TypeAnnotation, getTypeAnnotation } from '../ast';\nimport { toEffectSchema, toJsonSchema } from '../json';\nimport { type JsonSchemaType } from '../json-schema';\nimport { type TypedObject, type TypedObjectPrototype } from '../object';\n\nimport {\n addFieldsToSchema,\n removeFieldsFromSchema,\n setTypenameInSchema,\n updateFieldNameInSchema,\n updateFieldsInSchema,\n} from './manipulation';\nimport { getSnapshot } from './snapshot';\nimport { StoredSchema } from './stored-schema';\n\n/**\n * Base schema type.\n */\n// TODO(burdon): Merge with ImmutableSchema.\nexport interface BaseSchema<A = any, I = any> extends TypedObject<A, I> {\n get readonly(): boolean;\n // TODO(burdon): Change to external function.\n get mutable(): EchoSchema<A, I>;\n get snapshot(): Schema.Schema<A, I>;\n get jsonSchema(): JsonSchemaType;\n}\n\n/**\n * Immutable schema type.\n * @deprecated Use `Schema.Schema.AnyNoContext` instead.\n */\n// TODO(burdon): Common abstract base class?\nexport class ImmutableSchema<A = any, I = any> implements BaseSchema<A, I> {\n private readonly _objectAnnotation: TypeAnnotation;\n constructor(private readonly _schema: Schema.Schema<A, I>) {\n this._objectAnnotation = getTypeAnnotation(this._schema)!;\n invariant(this._objectAnnotation);\n }\n\n //\n // Effect Schema (push to abstract base class).\n //\n\n public get [Schema.TypeId]() {\n return schemaVariance;\n }\n\n public get Type() {\n return this._schema.Type;\n }\n\n public get Encoded() {\n return this._schema.Encoded;\n }\n\n public get Context() {\n return this._schema.Context;\n }\n\n public get ast(): SchemaAST.AST {\n return this._schema.ast;\n }\n\n public get annotations() {\n return this._schema.annotations;\n }\n\n public get pipe() {\n return this._schema.pipe;\n }\n\n //\n // TypedObject\n //\n\n get typename(): string {\n return this._objectAnnotation.typename;\n }\n\n get version(): string {\n return this._objectAnnotation.version;\n }\n\n //\n // BaseSchema\n //\n\n get readonly(): boolean {\n return true;\n }\n\n get snapshot(): Schema.Schema.AnyNoContext {\n return this._schema;\n }\n\n // TODO(burdon): Change from getter since this is expensive.\n get jsonSchema(): JsonSchemaType {\n return toJsonSchema(this._schema);\n }\n\n get mutable(): EchoSchema {\n throw new Error('Schema is readonly.');\n }\n}\n\n/**\n * Defines an effect-schema for the `EchoSchema` type.\n *\n * This is here so that `EchoSchema` class can be used as a part of another schema definition (e.g., `ref(EchoSchema)`).\n */\nconst EchoSchemaConstructor = (): TypedObjectPrototype => {\n /**\n * Return class definition satisfying Schema.Schema.\n */\n return class {\n private static get _schema() {\n // The field is DynamicEchoSchema in runtime, but is serialized as StoredEchoSchema in automerge.\n return Schema.Union(StoredSchema, Schema.instanceOf(EchoSchema)).annotations(StoredSchema.ast.annotations);\n }\n\n static readonly [Schema.TypeId] = schemaVariance;\n\n static get ast() {\n const schema = this._schema;\n return schema.ast;\n }\n\n static get annotations() {\n const schema = this._schema;\n return schema.annotations.bind(schema);\n }\n\n static get pipe() {\n const schema = this._schema;\n return schema.pipe.bind(schema);\n }\n } as any;\n};\n\nexport const isMutable = (schema: Schema.Schema.AnyNoContext): schema is EchoSchema => {\n return schema instanceof EchoSchema;\n};\n\n// NOTE: Keep in this file.\nconst schemaVariance = {\n _A: (_: any) => _,\n _I: (_: any) => _,\n _R: (_: never) => _,\n};\n\n/**\n * Represents a schema that is stored in the ECHO database.\n * Schema can me mutable or readonly (specified by the {@link EchoSchema.readonly} field).\n *\n * Schema that can be modified at runtime via the API.\n * Is an instance of effect-schema (`Schema.Schema.AnyNoContext`) so it can be used in the same way as a regular schema.\n * IMPORTANT: The schema AST will change reactively when the schema is updated, including synced updates from remote peers.\n *\n * The class constructor is a schema instance itself, and can be used in the echo object definitions:\n *\n * @example\n * ```ts\n * export class TableType extends Schema.Struct({...}).pipe(Type.Obj({ typename: 'example.org/type/Table', version: '0.1.0' })){\n * title: Schema.String,\n * schema: Schema.optional(ref(EchoSchema)),\n * props: Schema.mutable(S.Array(TablePropSchema)),\n * }) {}\n * ```\n *\n * The ECHO API will translate any references to StoredSchema objects to be resolved as EchoSchema objects.\n */\nexport class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implements BaseSchema<A, I> {\n private _schema: Schema.Schema.AnyNoContext | undefined;\n private _isDirty = true;\n\n constructor(private readonly _storedSchema: StoredSchema) {\n super();\n }\n\n //\n // Effect Schema (push to abstract base class).\n //\n\n public get [Schema.TypeId]() {\n return schemaVariance;\n }\n\n public get Type() {\n return this._storedSchema as A;\n }\n\n public get Encoded() {\n return this._storedSchema as I;\n }\n\n public get Context() {\n const schema = this._getSchema();\n return schema.Context;\n }\n\n public get ast() {\n const schema = this._getSchema();\n return schema.ast;\n }\n\n public get annotations() {\n const schema = this._getSchema();\n return schema.annotations.bind(schema);\n }\n\n public get pipe(): Schema.Schema.AnyNoContext['pipe'] {\n const schema = this._getSchema();\n return schema.pipe.bind(schema);\n }\n\n //\n // BaseSchema\n //\n\n public get typename(): string {\n return this._storedSchema.typename;\n }\n\n public get version(): string {\n return this._storedSchema.version;\n }\n\n public get readonly(): boolean {\n return false;\n }\n\n /**\n * Returns an immutable schema snapshot of the current state of the schema.\n */\n public get snapshot(): Schema.Schema.AnyNoContext {\n return this._getSchema();\n }\n\n /**\n * @reactive\n */\n public get jsonSchema(): JsonSchemaType {\n return this._storedSchema.jsonSchema;\n }\n\n /**\n * Returns a mutable schema.\n */\n public get mutable(): EchoSchema {\n invariant(!this.readonly, 'Schema is not mutable');\n return this;\n }\n\n //\n // Mutable Schema\n //\n\n /**\n * Id of the ECHO object containing the schema.\n */\n public get id(): ObjectId {\n return this._storedSchema.id;\n }\n\n /**\n * Short name of the schema.\n */\n public get name(): string | undefined {\n return this._storedSchema.name;\n }\n\n public get [SchemaMetaSymbol](): SchemaMeta {\n return { id: this.id, typename: this.typename, version: this._storedSchema.version };\n }\n\n /**\n * Reference to the underlying stored schema object.\n */\n public get storedSchema(): StoredSchema {\n return this._storedSchema;\n }\n\n public getProperties(): SchemaAST.PropertySignature[] {\n const ast = this._getSchema().ast;\n invariant(SchemaAST.isTypeLiteral(ast));\n return [...ast.propertySignatures].filter((p) => p.name !== 'id').map(unwrapOptionality);\n }\n\n //\n // Mutation methods.\n // TODO(burdon): Create separate interface for dynamic schema.\n // TODO(burdon): Deprecate direct manipulation? Use JSONSchema directly.\n //\n\n /**\n * @throws Error if the schema is readonly.\n */\n public updateTypename(typename: string): void {\n const updated = setTypenameInSchema(this._getSchema(), typename);\n this._storedSchema.typename = typename;\n this._storedSchema.jsonSchema = toJsonSchema(updated);\n }\n\n /**\n * @throws Error if the schema is readonly.\n */\n public addFields(fields: Schema.Struct.Fields): void {\n const extended = addFieldsToSchema(this._getSchema(), fields);\n this._storedSchema.jsonSchema = toJsonSchema(extended);\n }\n\n /**\n * @throws Error if the schema is readonly.\n */\n public updateFields(fields: Schema.Struct.Fields): void {\n const updated = updateFieldsInSchema(this._getSchema(), fields);\n this._storedSchema.jsonSchema = toJsonSchema(updated);\n }\n\n /**\n * @throws Error if the schema is readonly.\n */\n public updateFieldPropertyName({ before, after }: { before: PropertyKey; after: PropertyKey }): void {\n const renamed = updateFieldNameInSchema(this._getSchema(), { before, after });\n this._storedSchema.jsonSchema = toJsonSchema(renamed);\n }\n\n /**\n * @throws Error if the schema is readonly.\n */\n public removeFields(fieldNames: string[]): void {\n const removed = removeFieldsFromSchema(this._getSchema(), fieldNames);\n this._storedSchema.jsonSchema = toJsonSchema(removed);\n }\n\n //\n // Internals\n //\n\n /**\n * Called by EchoSchemaRegistry on update.\n */\n _invalidate(): void {\n this._isDirty = true;\n }\n\n /**\n * Rebuilds this schema if it is dirty.\n */\n _rebuild(): void {\n if (this._isDirty || this._schema == null) {\n this._schema = toEffectSchema(getSnapshot(this._storedSchema.jsonSchema));\n this._isDirty = false;\n }\n }\n\n private _getSchema(): Schema.Schema.AnyNoContext {\n this._rebuild();\n return this._schema!;\n }\n}\n\n// TODO(burdon): Move to effect.\nconst unwrapOptionality = (property: SchemaAST.PropertySignature): SchemaAST.PropertySignature => {\n if (!SchemaAST.isUnion(property.type)) {\n return property;\n }\n\n return {\n ...property,\n type: property.type.types.find((type) => !SchemaAST.isUndefinedKeyword(type))!,\n } as any;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { invariant } from '@dxos/invariant';\nimport { DXN } from '@dxos/keys';\n\nimport { type TypeAnnotation, TypeAnnotationId, TypeIdentifierAnnotationId } from '../ast';\n\n// TODO(ZaymonFC): Do this one at a time. This might be dangerous.\nexport const addFieldsToSchema = (\n schema: Schema.Schema.AnyNoContext,\n fields: Schema.Struct.Fields,\n): Schema.Schema.AnyNoContext => {\n const schemaExtension = Schema.partial(Schema.Struct(fields));\n return Schema.extend(schema, schemaExtension).annotations(\n schema.ast.annotations,\n ) as any as Schema.Schema.AnyNoContext;\n};\n\nexport const updateFieldsInSchema = (\n schema: Schema.Schema.AnyNoContext,\n fields: Schema.Struct.Fields,\n): Schema.Schema.AnyNoContext => {\n const ast = schema.ast as SchemaAST.TypeLiteral;\n invariant(SchemaAST.isTypeLiteral(ast));\n\n const updatedProperties = [...ast.propertySignatures];\n const propertiesToUpdate = (Schema.partial(Schema.Struct(fields)).ast as SchemaAST.TypeLiteral).propertySignatures;\n for (const property of propertiesToUpdate) {\n const index = updatedProperties.findIndex((p) => p.name === property.name);\n if (index !== -1) {\n updatedProperties[index] = property;\n } else {\n updatedProperties.push(property);\n }\n }\n\n return Schema.make(new SchemaAST.TypeLiteral(updatedProperties, ast.indexSignatures, ast.annotations));\n};\n\nexport const removeFieldsFromSchema = (\n schema: Schema.Schema.AnyNoContext,\n fieldNames: string[],\n): Schema.Schema.AnyNoContext => {\n return Schema.make(SchemaAST.omit(schema.ast, fieldNames)).annotations(schema.ast.annotations);\n};\n\nexport const updateFieldNameInSchema = (\n schema: Schema.Schema.AnyNoContext,\n { before, after }: { before: PropertyKey; after: PropertyKey },\n): Schema.Schema.AnyNoContext => {\n const ast = schema.ast as SchemaAST.TypeLiteral;\n invariant(SchemaAST.isTypeLiteral(ast));\n\n return Schema.make(\n new SchemaAST.TypeLiteral(\n ast.propertySignatures.map((p) =>\n p.name === before\n ? new SchemaAST.PropertySignature(after, p.type, p.isOptional, p.isReadonly, p.annotations)\n : p,\n ),\n ast.indexSignatures,\n ast.annotations,\n ),\n );\n};\n\nexport const setTypenameInSchema = (\n schema: Schema.Schema.AnyNoContext,\n typename: string,\n): Schema.Schema.AnyNoContext => {\n const existingAnnotation = schema.ast.annotations[TypeAnnotationId] as TypeAnnotation;\n invariant(existingAnnotation, `Missing ${String(TypeAnnotationId)}`);\n\n return schema.annotations({\n ...schema.ast.annotations,\n [TypeAnnotationId]: {\n kind: existingAnnotation.kind,\n typename,\n version: existingAnnotation.version,\n } satisfies TypeAnnotation,\n [SchemaAST.JSONSchemaAnnotationId]: {\n ...(schema.ast.annotations[SchemaAST.JSONSchemaAnnotationId] ?? {}),\n $id: schema.ast.annotations[TypeIdentifierAnnotationId] ?? DXN.fromTypename(typename).toString(),\n typename,\n },\n });\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\n/**\n * Returns a non-reactive snapshot of the given live object.\n * @deprecated Use `getSnapshot` from `@dxos/live-object` instead.\n */\n// TODO(wittjosiah): Types.\nexport const getSnapshot = (object: any): any => {\n if (typeof object !== 'object') {\n return object;\n }\n\n if (Array.isArray(object)) {\n return object.map(getSnapshot);\n }\n\n const result: any = {};\n for (const key in object) {\n result[key] = getSnapshot(object[key]);\n }\n\n return result;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { SchemaVersion, Typename } from '../ast';\nimport { JsonSchemaType } from '../json-schema';\nimport { EchoObject } from '../object';\n\n/**\n * Persistent representation of a schema.\n */\nexport const StoredSchema = Schema.Struct({\n name: Schema.optional(Schema.String),\n typename: Typename,\n version: SchemaVersion,\n jsonSchema: JsonSchemaType,\n}).pipe(\n EchoObject({\n typename: 'dxos.org/type/Schema',\n version: '0.1.0',\n }),\n);\n\nexport type StoredSchema = Schema.Schema.Type<typeof StoredSchema>;\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport type * as Schema from 'effect/Schema';\n\nimport { raise } from '@dxos/debug';\nimport { invariant } from '@dxos/invariant';\nimport { type DXN } from '@dxos/keys';\nimport { defaultMap } from '@dxos/util';\n\nimport { getSchemaTypename, getSchemaVersion } from '../ast';\n\nimport { StoredSchema } from './stored-schema';\n\n/**\n * Runtime registry of static schema objects (i.e., not Dynamic .\n */\n// TODO(burdon): Reconcile with EchoSchemaRegistry.\nexport class RuntimeSchemaRegistry {\n private readonly _registry = new Map<string, Schema.Schema.AnyNoContext[]>();\n\n constructor() {\n this._registry.set(StoredSchema.typename, [StoredSchema]);\n }\n\n get schemas(): Schema.Schema.AnyNoContext[] {\n return Array.from(this._registry.values()).flat();\n }\n\n hasSchema<S extends Schema.Schema.AnyNoContext>(schema: S): boolean {\n const typename = getSchemaTypename(schema);\n const version = getSchemaVersion(schema);\n invariant(typename, 'Invalid schema');\n\n const schemas = this._registry.get(typename);\n return schemas?.some((schema) => getSchemaVersion(schema) === version) ?? false;\n }\n\n getSchemaByDXN(dxn: DXN): Schema.Schema.AnyNoContext | undefined {\n const components = dxn.asTypeDXN();\n if (!components) {\n return undefined;\n }\n\n const { type, version } = components;\n const allSchemas = this._registry.get(type) ?? [];\n if (version) {\n return allSchemas.find((s) => getSchemaVersion(s) === version);\n } else {\n // If no version is specified, return the earliest version for backwards compatibility.\n // TODO(dmaretskyi): Probably not correct to compare lexicographically, but it's good enough for now.\n return allSchemas.sort((a, b) =>\n (getSchemaVersion(a) ?? '0.0.0').localeCompare(getSchemaVersion(b) ?? '0.0.0'),\n )[0];\n }\n }\n\n /**\n * @deprecated Use getSchemaByDXN.\n */\n getSchema(typename: string): Schema.Schema.AnyNoContext | undefined {\n return this._registry.get(typename)?.[0];\n }\n\n addSchema(types: Schema.Schema.AnyNoContext[]): void {\n types.forEach((schema) => {\n const typename = getSchemaTypename(schema) ?? raise(new TypeError('Schema has no typename'));\n const version = getSchemaVersion(schema) ?? raise(new TypeError('Schema has no version'));\n const versions = defaultMap(this._registry, typename, () => []);\n if (versions.some((schema) => getSchemaVersion(schema) === version)) {\n throw new Error(`Schema version already registered: ${typename}:${version}`);\n }\n\n versions.push(schema);\n });\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport type * as Schema from 'effect/Schema';\n\nimport { ObjectId } from '@dxos/keys';\nimport {\n type Live,\n UntypedReactiveHandler,\n createProxy,\n defineHiddenProperty,\n isValidProxyTarget,\n} from '@dxos/live-object';\n\nimport { getTypeAnnotation } from '../ast';\nimport { EntityKindId, Expando, MetaId, type ObjectMeta, ObjectMetaSchema, attachTypedJsonSerializer } from '../object';\nimport type { BaseObject, CreationProps } from '../types';\n\nimport { TypedReactiveHandler, prepareTypedTarget } from './typed-handler';\n\n/**\n * Creates a reactive object from a plain Javascript object.\n * Optionally provides a TS-effect schema.\n *\n * @depreacted Use `Obj.make`.\n */\n// TODO(dmaretskyi): Deep mutability.\n// TODO(dmaretskyi): Invert generics (generic over schema) to have better error messages.\n// TODO(dmaretskyi): Could mutate original object making it unusable.\n// TODO(burdon): Use Schema.make() to handle defaults?\nexport const live: {\n <T extends BaseObject>(obj: T): Live<T>;\n <T extends BaseObject>(\n schema: Schema.Schema<T, any, never>,\n obj: NoInfer<CreationProps<T>>,\n meta?: ObjectMeta,\n ): Live<T>;\n} = <T extends BaseObject>(\n objOrSchema: Schema.Schema<T, any> | T,\n obj?: CreationProps<T>,\n meta?: ObjectMeta,\n): Live<T> => {\n // TODO(dmaretskyi): Remove Expando special case.\n if (obj && (objOrSchema as any) !== Expando) {\n return createReactiveObject<T>({ ...obj } as T, meta, objOrSchema as Schema.Schema<T, any>);\n } else if (obj && (objOrSchema as any) === Expando) {\n return createReactiveObject<T>({ ...obj } as T, meta, undefined, { expando: true });\n } else {\n return createReactiveObject<T>(objOrSchema as T, meta);\n }\n};\n\nconst createReactiveObject = <T extends BaseObject>(\n obj: T,\n meta?: ObjectMeta,\n schema?: Schema.Schema<T>,\n options?: { expando?: boolean },\n): Live<T> => {\n if (!isValidProxyTarget(obj)) {\n throw new Error('Value cannot be made into a reactive object.');\n }\n\n if (schema) {\n const annotation = getTypeAnnotation(schema);\n const shouldGenerateId = options?.expando || !!annotation;\n if (shouldGenerateId) {\n setIdOnTarget(obj);\n }\n if (annotation) {\n defineHiddenProperty(obj, EntityKindId, annotation.kind);\n }\n initMeta(obj, meta);\n prepareTypedTarget(obj, schema);\n attachTypedJsonSerializer(obj);\n return createProxy<T>(obj, TypedReactiveHandler.instance);\n } else {\n if (options?.expando) {\n setIdOnTarget(obj);\n }\n initMeta(obj, meta);\n return createProxy<T>(obj, UntypedReactiveHandler.instance);\n }\n};\n\n/**\n * Set ID on ECHO object targets during creation.\n * Used for objects with schema and the ones explicitly marked as Expando.\n */\nconst setIdOnTarget = (target: any) => {\n // invariant(!('id' in target), 'Object already has an `id` field, which is reserved.');\n if ('id' in target && target.id !== undefined && target.id !== null) {\n if (!ObjectId.isValid(target.id)) {\n throw new Error('Invalid object id format.');\n }\n } else {\n target.id = ObjectId.random();\n }\n};\n\n/**\n * Set metadata on object.\n */\n// TODO(dmaretskyi): Move to echo-schema.\nconst initMeta = <T>(obj: T, meta: ObjectMeta = { keys: [] }) => {\n prepareTypedTarget(meta, ObjectMetaSchema);\n defineHiddenProperty(obj, MetaId, createProxy(meta, TypedReactiveHandler.instance as any));\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type InspectOptionsStylized } from 'node:util';\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { inspectCustom } from '@dxos/debug';\nimport { type GenericSignal, compositeRuntime } from '@dxos/echo-signals/runtime';\nimport { invariant } from '@dxos/invariant';\nimport {\n ReactiveArray,\n type ReactiveHandler,\n createProxy,\n defineHiddenProperty,\n isValidProxyTarget,\n objectData,\n symbolIsProxy,\n} from '@dxos/live-object';\n\nimport { getSchemaDXN } from '../ast';\nimport { DeletedId, SchemaId, SchemaValidator, TypeId } from '../object';\n\nconst symbolSignal = Symbol('signal');\nconst symbolPropertySignal = Symbol('property-signal');\n\ntype ProxyTarget = {\n /**\n * Typename or type DXN.\n */\n [TypeId]: string;\n\n /**\n * Schema for the root.\n */\n [SchemaId]: Schema.Schema.AnyNoContext;\n\n /**\n * For get and set operations on value properties.\n */\n // TODO(dmaretskyi): Turn into a map of signals per-field.\n [symbolSignal]: GenericSignal;\n\n /**\n * For modifying the structure of the object.\n */\n [symbolPropertySignal]: GenericSignal;\n} & ({ [key: keyof any]: any } | any[]);\n\n/**\n * Typed in-memory reactive store (with Schema).\n */\nexport class TypedReactiveHandler implements ReactiveHandler<ProxyTarget> {\n public static readonly instance: ReactiveHandler<any> = new TypedReactiveHandler();\n\n readonly _proxyMap = new WeakMap<object, any>();\n\n private constructor() {}\n\n init(target: ProxyTarget): void {\n invariant(typeof target === 'object' && target !== null);\n invariant(SchemaId in target, 'Schema is not defined for the target');\n\n if (!(symbolSignal in target)) {\n defineHiddenProperty(target, symbolSignal, compositeRuntime.createSignal());\n defineHiddenProperty(target, symbolPropertySignal, compositeRuntime.createSignal());\n }\n\n defineHiddenProperty(target, DeletedId, false);\n\n for (const key of Object.getOwnPropertyNames(target)) {\n const descriptor = Object.getOwnPropertyDescriptor(target, key)!;\n if (descriptor.get) {\n // Ignore getters.\n continue;\n }\n\n // Array reactivity is already handled by the schema validator.\n }\n\n // Maybe have been set by `create`.\n Object.defineProperty(target, inspectCustom, {\n enumerable: false,\n configurable: true,\n value: this._inspect.bind(target),\n });\n }\n\n get(target: ProxyTarget, prop: string | symbol, receiver: any): any {\n switch (prop) {\n case objectData: {\n target[symbolSignal].notifyRead();\n return toJSON(target);\n }\n }\n\n // Handle getter properties. Will not subscribe the value signal.\n if (Object.getOwnPropertyDescriptor(target, prop)?.get) {\n target[symbolPropertySignal].notifyRead();\n\n // TODO(dmaretskyi): Turn getters into computed fields.\n return Reflect.get(target, prop, receiver);\n }\n\n target[symbolSignal].notifyRead();\n target[symbolPropertySignal].notifyRead();\n\n const value = Reflect.get(target, prop, receiver);\n if (isValidProxyTarget(value)) {\n return createProxy(value, this);\n }\n\n return value;\n }\n\n set(target: ProxyTarget, prop: string | symbol, value: any, receiver: any): boolean {\n // Convert arrays to reactive arrays on write.\n if (Array.isArray(value)) {\n value = ReactiveArray.from(value);\n }\n\n let result: boolean = false;\n compositeRuntime.batch(() => {\n const validatedValue = this._validateValue(target, prop, value);\n result = Reflect.set(target, prop, validatedValue, receiver);\n target[symbolSignal].notifyWrite();\n });\n return result;\n }\n\n ownKeys(target: ProxyTarget): ArrayLike<string | symbol> {\n // Touch both signals since `set` and `delete` operations may create or remove properties.\n target[symbolSignal].notifyRead();\n target[symbolPropertySignal].notifyRead();\n return Reflect.ownKeys(target);\n }\n\n defineProperty(target: ProxyTarget, property: string | symbol, attributes: PropertyDescriptor): boolean {\n const validatedValue = this._validateValue(target, property, attributes.value);\n const result = Reflect.defineProperty(target, property, {\n ...attributes,\n value: validatedValue,\n });\n target[symbolPropertySignal].notifyWrite();\n return result;\n }\n\n private _validateValue(target: any, prop: string | symbol, value: any) {\n const schema = SchemaValidator.getTargetPropertySchema(target, prop);\n const _ = Schema.asserts(schema)(value);\n if (Array.isArray(value)) {\n value = new ReactiveArray(...value);\n }\n if (isValidProxyTarget(value)) {\n setSchemaProperties(value, schema);\n }\n\n return value;\n }\n\n private _inspect(\n _: number,\n options: InspectOptionsStylized,\n inspectFn: (value: any, options?: InspectOptionsStylized) => string,\n ): string {\n const inspected = inspectFn(this, {\n ...options,\n showHidden: false,\n customInspect: false,\n });\n return `Typed ${inspected}`;\n }\n}\n\n/**\n * @deprecated Use `Obj.toJSON` instead.\n */\nconst toJSON = (target: ProxyTarget): any => {\n return { '@type': 'TypedReactiveObject', ...target };\n};\n\n/**\n * Recursively set AST on all potential proxy targets.\n */\nconst setSchemaProperties = (obj: any, schema: Schema.Schema.AnyNoContext) => {\n const schemaType = getSchemaDXN(schema);\n if (schemaType != null) {\n defineHiddenProperty(obj, TypeId, schemaType);\n }\n\n defineHiddenProperty(obj, SchemaId, schema);\n for (const key in obj) {\n if (isValidProxyTarget(obj[key])) {\n const elementSchema = SchemaValidator.getTargetPropertySchema(obj, key);\n if (elementSchema != null) {\n setSchemaProperties(obj[key], elementSchema);\n }\n }\n }\n};\n\nexport const prepareTypedTarget = <T>(target: T, schema: Schema.Schema<T>) => {\n // log.info('prepareTypedTarget', { target, schema });\n if (!SchemaAST.isTypeLiteral(schema.ast)) {\n throw new Error('schema has to describe an object type');\n }\n\n SchemaValidator.validateSchema(schema);\n const _ = Schema.asserts(schema)(target);\n makeArraysReactive(target);\n setSchemaProperties(target, schema);\n};\n\nconst makeArraysReactive = (target: any) => {\n for (const key in target) {\n if (target[symbolIsProxy]) {\n continue;\n }\n if (Array.isArray(target[key])) {\n target[key] = ReactiveArray.from(target[key]);\n }\n if (typeof target[key] === 'object') {\n makeArraysReactive(target[key]);\n }\n }\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["JsonPath", "splitJsonPath", "JsonProp", "ObjectId", "ForeignKey", "Function", "Option", "Schema", "SchemaAST", "assertArgument", "DXN", "SchemaAST", "createAnnotationHelper", "id", "get", "schema", "getAnnotation", "ast", "set", "value", "annotations", "Schema", "EntityKind", "EntityKindSchema", "Enums", "unwrapOptional", "property", "isOptional", "isUnion", "type", "types", "TypeIdentifierAnnotationId", "Symbol", "for", "getTypeIdentifierAnnotation", "schema", "flow", "getAnnotation", "getOrElse", "undefined", "ast", "TypeAnnotationId", "Typename", "String", "pipe", "pattern", "SchemaVersion", "TypeAnnotation", "Struct", "kind", "Enums", "EntityKind", "typename", "version", "sourceSchema", "optional", "DXN", "Schema", "targetSchema", "getTypeAnnotation", "assertArgument", "getEntityKind", "getSchemaTypename", "getSchemaVersion", "PropertyMetaAnnotationId", "PropertyMeta", "name", "value", "self", "existingMeta", "annotations", "getPropertyMetaAnnotation", "prop", "map", "meta", "ReferenceAnnotationId", "getReferenceAnnotation", "SchemaMetaSymbol", "ViewAnnotationId", "ViewAnnotation", "createAnnotationHelper", "LabelAnnotationId", "LabelAnnotation", "DescriptionAnnotationId", "DescriptionAnnotation", "FormAnnotationId", "FormAnnotation", "FieldLookupAnnotationId", "GeneratorAnnotationId", "GeneratorAnnotation", "getSchemaDXN", "isSchema", "id", "parse", "objectAnnotation", "fromTypenameAndVersion", "FIELD_PATH_ANNOTATION", "FieldPath", "path", "PropertyMeta", "Schema", "Function", "Option", "SchemaAST", "TypeEnum", "getTypeEnum", "property", "type", "undefined", "FormatAnnotationId", "Symbol", "for", "FormatAnnotation", "createAnnotationHelper", "getFormatAnnotation", "node", "pipe", "getAnnotation", "getOrUndefined", "FormatEnum", "FormatEnums", "Object", "values", "sort", "PropertyKind", "format", "typeToFormat", "formatToType", "OptionsAnnotationId", "getOptionsAnnotation", "encodeMultipleOf", "divisor", "Math", "pow", "encodeMultiple", "self", "undefined", "pipe", "multipleOf", "DecimalPrecision", "transform", "Number", "strict", "encode", "value", "decode", "log10", "annotations", "title", "CurrencyAnnotationId", "Symbol", "for", "Currency", "decimals", "code", "FormatAnnotation", "set", "FormatEnum", "description", "toUpperCase", "Integer", "int", "Percent", "Timestamp", "Schema", "clamp", "GeoPoint", "Tuple", "Number", "pipe", "annotations", "title", "clamp", "multipleOf", "optionalElement", "FormatAnnotation", "set", "FormatEnum", "description", "GeoLocation", "toGeoPoint", "longitude", "latitude", "height", "clampedLongitude", "clampedLatitude", "undefined", "fromGeoPoint", "geoPoint", "result", "Schema", "Keys", "Schema", "SchemaAST", "SimpleDate", "Struct", "year", "Number", "pipe", "between", "month", "day", "SimpleTime", "Struct", "hours", "Number", "pipe", "between", "minutes", "seconds", "SimpleDateTime", "extend", "SimpleDate", "SimpleTime", "DateOnly", "String", "pipe", "FormatAnnotation", "set", "FormatEnum", "Date", "annotations", "title", "description", "TimeOnly", "Time", "DateTime", "Duration", "ExamplesAnnotationId", "Schema", "SchemaAST", "Email", "String", "pipe", "pattern", "FormatAnnotation", "set", "FormatEnum", "annotations", "title", "description", "Formula", "Hostname", "JSON", "Markdown", "Regex", "URL", "UUID", "ExamplesAnnotationId", "Format", "DXN", "Schema", "Email", "Formula", "Hostname", "JSON", "Markdown", "Regex", "URL", "UUID", "Currency", "Integer", "Percent", "Timestamp", "DateTime", "Date", "DateOnly", "Time", "TimeOnly", "Duration", "GeoPoint", "Schema", "SelectOptionSchema", "Struct", "id", "NonEmptyString", "title", "String", "color", "pipe", "mutable", "Array", "Function", "JSONSchema", "Option", "Schema", "SchemaAST", "raise", "mapAst", "assertArgument", "invariant", "DXN", "ObjectId", "log", "clearUndefined", "orderKeys", "removeProperties", "Schema", "JsonPath", "SimpleTypes", "Literal", "NonNegativeInteger", "Number", "pipe", "greaterThanOrEqualTo", "StringArray", "Array", "String", "mutable", "JsonSchemaOrBoolean", "Union", "suspend", "JsonSchemaType", "Boolean", "JsonSchemaEchoAnnotations", "Struct", "labelProp", "optional", "JsonPath", "generator", "Tuple", "meta", "Record", "key", "value", "Any", "type", "typename", "version", "schemaId", "annotations", "_JsonSchemaType", "$id", "$schema", "$ref", "$comment", "entityKind", "EntityKindSchema", "relationTarget", "relationSource", "title", "description", "readOnly", "writeOnly", "examples", "default", "const", "enum", "multipleOf", "greaterThan", "maximum", "exclusiveMaximum", "minimum", "exclusiveMinimum", "maxLength", "pattern", "FormatAnnotation", "set", "FormatEnum", "Regex", "format", "minLength", "items", "additionalItems", "maxItems", "minItems", "uniqueItems", "contains", "maxProperties", "minProperties", "required", "propertyOrder", "additionalProperties", "properties", "patternProperties", "propertyNames", "definitions", "dependencies", "identifier", "contentMediaType", "contentEncoding", "if", "then", "else", "allOf", "anyOf", "oneOf", "not", "$defs", "currency", "reference", "schema", "schemaVersion", "schemaObject", "echo", "JsonSchemaFields", "Object", "keys", "fields", "getSchemaProperty", "property", "setSchemaProperty", "ECHO_ANNOTATIONS_NS_DEPRECATED_KEY", "ECHO_ANNOTATIONS_NS_KEY", "getNormalizedEchoAnnotations", "obj", "normalizeEchoAnnotations", "undefined", "res", "normalizeSchema", "schema", "copy", "structuredClone", "go", "exclusiveMaximum", "maximum", "exclusiveMinimum", "minimum", "key", "Object", "keys", "JsonSchemaFields", "includes", "properties", "goOnRecord", "patternProperties", "propertyNames", "definitions", "items", "maybeGoOnArray", "additionalItems", "contains", "if", "then", "else", "allOf", "anyOf", "oneOf", "not", "$defs", "reference", "value", "Array", "isArray", "item", "record", "Schema", "invariant", "DXN", "Option", "Schema", "getField", "assertArgument", "invariant", "DXN", "ObjectId", "assumeType", "invariant", "DXN", "ObjectId", "assumeType", "EntityKindId", "Symbol", "for", "SelfDXNId", "ATTR_SELF_DXN", "TypeId", "ATTR_TYPE", "SchemaId", "DeletedId", "ATTR_DELETED", "MetaId", "ATTR_META", "RelationSourceDXNId", "ATTR_RELATION_SOURCE", "RelationTargetDXNId", "ATTR_RELATION_TARGET", "RelationSourceId", "RelationTargetId", "ObjectVersionId", "assertObjectModelShape", "obj", "invariant", "assumeType", "ObjectId", "isValid", "id", "undefined", "DXN", "EntityKind", "Object", "Relation", "getObjectDXN", "object", "invariant", "isSchema", "assertArgument", "assumeType", "SelfDXNId", "DXN", "ObjectId", "isValid", "id", "TypeError", "fromLocalObjectId", "getSchema", "obj", "SchemaId", "setSchema", "schema", "Object", "defineProperty", "value", "writable", "enumerable", "configurable", "getLabelForObject", "getLabel", "annotation", "LabelAnnotation", "get", "pipe", "getOrElse", "accessor", "getField", "toString", "undefined", "setLabel", "label", "map", "field", "getDescription", "DescriptionAnnotation", "setDescription", "description", "getTypename", "obj", "schema", "getSchema", "getSchemaTypename", "type", "getType", "asTypeDXN", "setTypename", "typename", "invariant", "DXN", "Object", "defineProperty", "TypeId", "value", "writable", "enumerable", "configurable", "undefined", "makeTypedEntityClass", "typename", "version", "baseSchema", "TypeId", "schemaVariance", "ast", "annotations", "bind", "pipe", "Symbol", "hasInstance", "obj", "getTypename", "Error", "_A", "_", "_I", "_R", "raise", "assertArgument", "failedInvariant", "ObjectId", "defineHiddenProperty", "inspectCustom", "attachedTypedObjectInspector", "obj", "descriptor", "Object", "getOwnPropertyDescriptor", "inspectCustom", "defineProperty", "value", "typedObjectInspectFunction", "writable", "enumerable", "configurable", "depth", "options", "inspect", "id", "props", "ATTR_TYPE", "getType", "ATTR_META", "MetaId", "Schema", "raise", "isEncodedReference", "assertArgument", "invariant", "DXN", "ObjectId", "defineHiddenProperty", "assumeType", "deepMapValues", "visitValues", "Effect", "Option", "ParseResult", "Schema", "SchemaAST", "Reference", "compositeRuntime", "assertArgument", "invariant", "DXN", "ObjectId", "JSON_SCHEMA_ECHO_REF_ID", "getSchemaReference", "property", "$id", "reference", "schema", "$ref", "typename", "DXN", "parse", "createSchemaReference", "fromTypename", "toString", "getReferenceAst", "ast", "_tag", "annotations", "ReferenceAnnotationId", "undefined", "version", "RefTypeId", "Symbol", "Ref", "assertArgument", "isSchema", "annotation", "getTypeAnnotation", "Error", "createEchoReferenceSchema", "getTypeIdentifierAnnotation", "getSchemaExpectedName", "isRef", "obj", "hasObjectId", "id", "ref", "dxn", "isLocalObjectId", "parts", "isRefSchema", "isRefSchemaAST", "getAnnotation", "pipe", "isSome", "make", "TypeError", "invariant", "ObjectId", "isValid", "Reference", "localObjectReference", "toDXN", "RefImpl", "fromDXN", "echoId", "schemaName", "referenceInfo", "schemaVersion", "refSchema", "declare", "encode", "value", "succeed", "decode", "fail", "Unexpected", "jsonSchema", "getIdentifierAnnotation", "orElse", "getTitleAnnotation", "getDescriptionAnnotation", "getOrElse", "compositeRuntime", "createSignal", "notifyWrite", "target", "notifyRead", "resolveSync", "load", "resolve", "tryLoad", "noInline", "toJSON", "refVariance", "_setResolver", "resolver", "_getSavedTarget", "setRefResolver", "getRefSavedTarget", "_T", "refFromEncodedReference", "encodedReference", "StaticRefResolver", "objects", "Map", "schemas", "addObject", "set", "addSchema", "getSchemaDXN", "_load", "_onLoad", "asEchoDXN", "get", "resolveSchema", "isNonNullable", "RefArray", "Object", "freeze", "targets", "refs", "map", "ref", "target", "filter", "isNonNullable", "loadAll", "Promise", "all", "load", "removeById", "id", "index", "findIndex", "Ref", "hasObjectId", "splice", "Schema", "ForeignKey", "invariant", "intersection", "ObjectMetaSchema", "mutable", "Struct", "keys", "Array", "ForeignKey", "tags", "optional", "String", "foreignKey", "source", "id", "foreignKeyEquals", "a", "b", "getObjectMeta", "obj", "getMeta", "metadata", "MetaId", "invariant", "compareForeignKeys", "intersection", "length", "objectToJSON", "obj", "typename", "getType", "toString", "invariant", "typedJsonSerializer", "call", "objectFromJSON", "jsonData", "refResolver", "dxn", "assumeType", "assertArgument", "ATTR_TYPE", "id", "type", "DXN", "parse", "schema", "resolveSchema", "undefined", "isSchema", "pipe", "decodeUnknownPromise", "setRefResolverOnData", "decodeGeneric", "ObjectId", "isValid", "setTypename", "setSchema", "isRelation", "ATTR_RELATION_SOURCE", "ATTR_RELATION_TARGET", "sourceDxn", "raise", "TypeError", "targetDxn", "source", "resolve", "target", "defineHiddenProperty", "EntityKindId", "EntityKind", "Relation", "RelationSourceDXNId", "RelationTargetDXNId", "RelationSourceId", "RelationTargetId", "Object", "ATTR_META", "meta", "ObjectMetaSchema", "Array", "isArray", "keys", "MetaId", "SelfDXNId", "assertObjectModelShape", "ATTR_SELF_DXN", "ATTR_DELETED", "options", "_type", "_meta", "_deleted", "_relationSource", "_relationTarget", "_selfDxn", "props", "deepMapValues", "value", "recurse", "isEncodedReference", "refFromEncodedReference", "go", "Ref", "isRef", "setRefResolver", "visitValues", "attachTypedJsonSerializer", "descriptor", "getOwnPropertyDescriptor", "defineProperty", "writable", "enumerable", "configurable", "rest", "result", "TypeId", "sourceDXN", "targetDXN", "serializeMeta", "assign", "serializeData", "data", "noInline", "encode", "create", "schema", "data", "annotation", "getTypeAnnotation", "Error", "assertArgument", "RelationSourceDXNId", "RelationTargetDXNId", "RelationSourceId", "RelationTargetId", "obj", "id", "ObjectId", "random", "kind", "EntityKind", "Relation", "Object", "defineHiddenProperty", "EntityKindId", "setTypename", "getSchemaDXN", "failedInvariant", "setSchema", "attachTypedJsonSerializer", "attachedTypedObjectInspector", "MetaId", "keys", "sourceDXN", "getObjectDXN", "raise", "targetDXN", "assertObjectModelShape", "Schema", "SchemaAST", "raise", "assertArgument", "invariant", "DXN", "EchoObject", "typename", "version", "self", "invariant", "TypeAnnotationId", "isTypeLiteral", "ast", "schemaWithId", "extend", "mutable", "Struct", "id", "String", "annotations", "kind", "EntityKind", "Object", "JSONSchemaAnnotationId", "makeTypeJsonSchemaAnnotation", "makeEchoObjectSchema", "EchoRelation", "options", "assertArgument", "isSchema", "source", "target", "sourceDXN", "getDXNForRelationSchemaRef", "targetDXN", "getEntityKind", "raise", "Error", "Relation", "sourceSchema", "targetSchema", "relationSource", "relationTarget", "obj", "$id", "identifier", "DXN", "fromTypename", "toString", "entityKind", "$ref", "schema", "getTypeIdentifierAnnotation", "getSchemaTypename", "EchoObjectSchemaClass", "make", "instanceOf", "value", "is", "Schema", "EXPANDO_TYPENAME", "ExpandoSchema", "Struct", "key", "String", "value", "Any", "pipe", "EchoObject", "typename", "version", "Expando", "DXN", "ObjectId", "QueueSubspaceTags", "SpaceId", "createQueueDXN", "spaceId", "SpaceId", "random", "queueId", "ObjectId", "DXN", "kind", "QUEUE", "QueueSubspaceTags", "DATA", "Schema", "SchemaAST", "invariant", "TypedObject", "typename", "typenameParam", "version", "versionParam", "disableValidation", "Typename", "make", "SchemaVersion", "fields", "options", "schema", "record", "Struct", "key", "String", "value", "Any", "typeSchema", "extend", "mutable", "partial", "id", "invariant", "EntityKind", "Object", "annotatedSchema", "annotations", "TypeAnnotationId", "kind", "JSONSchemaAnnotationId", "makeTypeJsonSchemaAnnotation", "makeTypedEntityClass", "isDeleted", "obj", "DeletedId", "undefined", "Schema", "SchemaAST", "invariant", "SchemaValidator", "validateSchema", "schema", "visitAll", "nodes", "forEach", "node", "make", "isUnion", "ast", "typeAstList", "types", "filter", "type", "isTypeLiteral", "length", "getTypeDiscriminators", "isTupleType", "positionalTypes", "elements", "map", "t", "allTypes", "concat", "rest", "getPropertySignatures", "p", "hasTypeAnnotation", "rootObjectSchema", "property", "annotation", "getPropertySchema", "annotations", "err", "propertyPath", "getProperty", "i", "propertyName", "tupleAst", "unwrapArray", "getArrayElementSchema", "propertyType", "getPropertyType", "toString", "slice", "TypeError", "String", "getTargetPropertySchema", "target", "prop", "SchemaId", "invariant", "arrayAst", "Any", "elementIndex", "parseInt", "Number", "NaN", "isNaN", "elementType", "restType", "flattenUnion", "typeAst", "flatMap", "getProperties", "getTargetPropertyFn", "astCandidates", "typeDiscriminators", "targetPropertyValue", "name", "typeIndex", "findIndex", "literal", "anyOrObject", "unwrapAst", "candidate", "isAnyKeyword", "isObjectKeyword", "typeOrDiscriminatedUnion", "some", "targetProperty", "find", "indexSignatureType", "indexSignatures", "discriminatorPropCandidates", "isLiteral", "isValidDiscriminator", "every", "isOptional", "everyTypeHasDiscriminator", "isDiscriminatedUnion", "rootAst", "predicate", "next", "isSuspend", "f", "checkIdNotPresentOnSchema", "idProperty", "Error", "VersionTypeId", "Symbol", "SchemaAST", "CustomAnnotations", "format", "FormatAnnotationId", "currency", "CurrencyAnnotationId", "DecodedAnnotations", "title", "TitleAnnotationId", "description", "DescriptionAnnotationId", "EchoAnnotations", "meta", "PropertyMetaAnnotationId", "generator", "GeneratorAnnotationId", "labelProp", "LabelAnnotationId", "PropType", "toPropType", "type", "Error", "JSON_SCHEMA_URL", "toJsonSchema", "schema", "options", "assertArgument", "isSchema", "jsonSchema", "_toJsonSchemaAST", "ast", "strict", "removeProperties", "key", "value", "withRefinements", "withEchoRefinements", "fromAST", "definitions", "normalizeJsonSchema", "path", "suspendCache", "Map", "set", "recursiveResult", "isSuspend", "suspendedAst", "f", "cachedPath", "get", "Suspend", "JSONSchemaAnnotationId", "$ref", "isTypeLiteral", "mapAst", "undefined", "addJsonSchemaFields", "propertyOrder", "propertySignatures", "map", "p", "name", "isUndefinedKeyword", "annotationFields", "annotations_toJsonSchemaFields", "annotations", "Object", "keys", "length", "toEffectSchema", "root", "_defs", "defs", "$defs", "objectToEffectSchema", "result", "Unknown", "refToEffectSchema", "$id", "anyToEffectSchema", "Union", "enum", "e", "Literal", "oneOf", "v", "anyOf", "allOf", "log", "warn", "String", "pattern", "pipe", "RegExp", "Number", "int", "Boolean", "isArray", "items", "required", "optional", "splitAt", "minItems", "Tuple", "optionalElement", "invariant", "Array", "Null", "refSegments", "split", "identifier", "jsonSchemaFieldsToAnnotations", "echoRefinement", "ECHO_ANNOTATIONS_NS_DEPRECATED_KEY", "isEchoObject", "startsWith", "fields", "propertyList", "entries", "properties", "immutableIdField", "includes", "orderKeys", "patternProperties", "Record", "additionalProperties", "Struct", "indexValue", "extend", "mutable", "id", "reference", "echoId", "createEchoReferenceSchema", "typename", "version", "Any", "Ref", "Expando", "targetSchemaDXN", "DXN", "parse", "kind", "TYPE", "toString", "parts", "schemaVersion", "schemaFields", "echoAnnotations", "annotationId", "EchoAnnotations", "ECHO_ANNOTATIONS_NS_KEY", "echoIdentifier", "TypeIdentifierAnnotationId", "schemaId", "CustomAnnotations", "decodeTypeIdentifierAnnotation", "echo", "ObjectId", "isValid", "fromLocalObjectId", "decodeTypeAnnotation", "annotation", "entityKind", "decodeSync", "EntityKindSchema", "EntityKind", "Relation", "source", "relationSource", "raise", "target", "relationTarget", "sourceSchema", "targetSchema", "getNormalizedEchoAnnotations", "typeAnnotation", "TypeAnnotationId", "makeTypeJsonSchemaAnnotation", "DecodedAnnotations", "clearUndefined", "makeAnnotatedRefinement", "Refinement", "none", "$schema", "Schema", "SchemaAST", "Reference", "splitJsonPath", "DXN", "getDeep", "setDeep", "RawObject", "schema", "make", "omit", "ast", "splitMeta", "object", "meta", "ATTR_META", "getValue", "obj", "path", "getDeep", "splitJsonPath", "map", "p", "replace", "setValue", "value", "setDeep", "getTypeReference", "undefined", "schemaDXN", "getSchemaDXN", "Reference", "fromDXN", "requireTypeReference", "typeReference", "Error", "isInstanceOf", "type", "getType", "DXN", "equals", "typename", "getTypename", "typeDXN", "asTypeDXN", "defineHiddenProperty", "invariant", "Schema", "SchemaAST", "invariant", "Schema", "SchemaAST", "invariant", "DXN", "addFieldsToSchema", "schema", "fields", "schemaExtension", "partial", "Struct", "extend", "annotations", "ast", "updateFieldsInSchema", "invariant", "isTypeLiteral", "updatedProperties", "propertySignatures", "propertiesToUpdate", "property", "index", "findIndex", "p", "name", "push", "make", "TypeLiteral", "indexSignatures", "removeFieldsFromSchema", "fieldNames", "omit", "updateFieldNameInSchema", "before", "after", "map", "PropertySignature", "type", "isOptional", "isReadonly", "setTypenameInSchema", "typename", "existingAnnotation", "TypeAnnotationId", "String", "kind", "version", "JSONSchemaAnnotationId", "$id", "TypeIdentifierAnnotationId", "DXN", "fromTypename", "toString", "getSnapshot", "object", "Array", "isArray", "map", "result", "key", "Schema", "StoredSchema", "Struct", "name", "optional", "String", "typename", "Typename", "version", "SchemaVersion", "jsonSchema", "JsonSchemaType", "pipe", "EchoObject", "ImmutableSchema", "_objectAnnotation", "_schema", "getTypeAnnotation", "invariant", "TypeId", "schemaVariance", "Type", "Encoded", "Context", "ast", "annotations", "pipe", "typename", "version", "readonly", "snapshot", "jsonSchema", "toJsonSchema", "mutable", "Error", "EchoSchemaConstructor", "Union", "StoredSchema", "instanceOf", "EchoSchema", "schema", "bind", "isMutable", "_A", "_", "_I", "_R", "_isDirty", "_storedSchema", "_getSchema", "id", "name", "SchemaMetaSymbol", "storedSchema", "getProperties", "isTypeLiteral", "propertySignatures", "filter", "p", "map", "unwrapOptionality", "updateTypename", "updated", "setTypenameInSchema", "addFields", "fields", "extended", "addFieldsToSchema", "updateFields", "updateFieldsInSchema", "updateFieldPropertyName", "before", "after", "renamed", "updateFieldNameInSchema", "removeFields", "fieldNames", "removed", "removeFieldsFromSchema", "_invalidate", "_rebuild", "toEffectSchema", "getSnapshot", "property", "isUnion", "type", "types", "find", "isUndefinedKeyword", "raise", "invariant", "defaultMap", "RuntimeSchemaRegistry", "_registry", "Map", "set", "StoredSchema", "typename", "schemas", "Array", "from", "values", "flat", "hasSchema", "schema", "getSchemaTypename", "version", "getSchemaVersion", "invariant", "get", "some", "getSchemaByDXN", "dxn", "components", "asTypeDXN", "undefined", "type", "allSchemas", "find", "s", "sort", "a", "b", "localeCompare", "getSchema", "addSchema", "types", "forEach", "raise", "TypeError", "versions", "defaultMap", "Error", "push", "composeSchema", "source", "target", "result", "getSnapshot", "invariant", "type", "prop", "properties", "propSchema", "annotations", "meta", "key", "Object", "assign", "ObjectId", "UntypedReactiveHandler", "createProxy", "defineHiddenProperty", "isValidProxyTarget", "Schema", "SchemaAST", "inspectCustom", "compositeRuntime", "invariant", "ReactiveArray", "createProxy", "defineHiddenProperty", "isValidProxyTarget", "objectData", "symbolIsProxy", "symbolSignal", "Symbol", "symbolPropertySignal", "TypedReactiveHandler", "instance", "_proxyMap", "WeakMap", "init", "target", "invariant", "SchemaId", "defineHiddenProperty", "compositeRuntime", "createSignal", "DeletedId", "key", "Object", "getOwnPropertyNames", "descriptor", "getOwnPropertyDescriptor", "get", "defineProperty", "inspectCustom", "enumerable", "configurable", "value", "_inspect", "bind", "prop", "receiver", "objectData", "notifyRead", "toJSON", "Reflect", "isValidProxyTarget", "createProxy", "set", "Array", "isArray", "ReactiveArray", "from", "result", "batch", "validatedValue", "_validateValue", "notifyWrite", "ownKeys", "property", "attributes", "schema", "SchemaValidator", "getTargetPropertySchema", "_", "asserts", "setSchemaProperties", "options", "inspectFn", "inspected", "showHidden", "customInspect", "obj", "schemaType", "getSchemaDXN", "TypeId", "elementSchema", "prepareTypedTarget", "isTypeLiteral", "ast", "Error", "validateSchema", "makeArraysReactive", "symbolIsProxy", "live", "objOrSchema", "obj", "meta", "Expando", "createReactiveObject", "undefined", "expando", "schema", "options", "isValidProxyTarget", "Error", "annotation", "getTypeAnnotation", "shouldGenerateId", "setIdOnTarget", "defineHiddenProperty", "EntityKindId", "kind", "initMeta", "prepareTypedTarget", "attachTypedJsonSerializer", "createProxy", "TypedReactiveHandler", "instance", "UntypedReactiveHandler", "target", "id", "ObjectId", "isValid", "random", "keys", "ObjectMetaSchema", "MetaId"]
|
|
7
|
-
}
|