@dxos/echo 0.8.4-staging.ac66bdf99f → 0.9.0
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/LICENSE +102 -5
- package/README.md +7 -7
- package/dist/lib/neutral/Annotation.mjs +37 -6
- package/dist/lib/neutral/Database.mjs +6 -17
- package/dist/lib/neutral/Entity.mjs +31 -20
- package/dist/lib/neutral/Err.mjs +3 -3
- package/dist/lib/neutral/Feed.mjs +23 -19
- package/dist/lib/neutral/Filter.mjs +13 -15
- package/dist/lib/neutral/Format.mjs +23 -3
- package/dist/lib/neutral/JsonSchema.mjs +7 -8
- package/dist/lib/neutral/Key.mjs +9 -5
- package/dist/lib/neutral/Migration.mjs +11 -10
- package/dist/lib/neutral/Obj.mjs +29 -20
- package/dist/lib/neutral/Order.mjs +7 -3
- package/dist/lib/neutral/Query.mjs +17 -17
- package/dist/lib/neutral/QueryResult.mjs +1 -1
- package/dist/lib/neutral/Ref.mjs +10 -9
- package/dist/lib/neutral/Registry.mjs +14 -0
- package/dist/lib/neutral/Relation.mjs +28 -25
- package/dist/lib/neutral/Scope.mjs +12 -0
- package/dist/lib/neutral/Tag.mjs +17 -14
- package/dist/lib/neutral/Type.mjs +54 -26
- package/dist/lib/neutral/{chunk-OMUPQMLR.mjs → chunk-35INCYOE.mjs} +1 -1
- package/dist/lib/neutral/chunk-35INCYOE.mjs.map +7 -0
- package/dist/lib/neutral/chunk-3PBP4V4O.mjs +101 -0
- package/dist/lib/neutral/chunk-3PBP4V4O.mjs.map +7 -0
- package/dist/lib/neutral/chunk-4ZUHOTCG.mjs +184 -0
- package/dist/lib/neutral/chunk-4ZUHOTCG.mjs.map +7 -0
- package/dist/lib/neutral/chunk-5SMDBFVB.mjs +108 -0
- package/dist/lib/neutral/chunk-5SMDBFVB.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-OS35K56T.mjs → chunk-5SUJPHAE.mjs} +3 -3
- package/dist/lib/neutral/{chunk-OS35K56T.mjs.map → chunk-5SUJPHAE.mjs.map} +2 -2
- package/dist/lib/neutral/{chunk-GZQTCRJB.mjs → chunk-6M2Z6WBH.mjs} +22 -2
- package/dist/lib/neutral/chunk-6M2Z6WBH.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-V36VO5SS.mjs → chunk-6YDI3J37.mjs} +32 -40
- package/dist/lib/neutral/chunk-6YDI3J37.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-MOR5ERFM.mjs → chunk-7FPIAJIV.mjs} +701 -1256
- package/dist/lib/neutral/chunk-7FPIAJIV.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-ANHVGJI4.mjs → chunk-7LOUAPYZ.mjs} +9 -5
- package/dist/lib/neutral/chunk-7LOUAPYZ.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-JUXPFOEI.mjs → chunk-7PI7C4EF.mjs} +48 -88
- package/dist/lib/neutral/chunk-7PI7C4EF.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-UBEZSGXY.mjs → chunk-BBFJWWAV.mjs} +6 -6
- package/dist/lib/neutral/chunk-BBFJWWAV.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-UI6MWK5W.mjs → chunk-EVK6XBXO.mjs} +16 -2
- package/dist/lib/neutral/chunk-EVK6XBXO.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-7RO7CPBZ.mjs → chunk-IGK6FN65.mjs} +2 -2
- package/dist/lib/neutral/{chunk-HBUZJNZO.mjs → chunk-LWXVKPPW.mjs} +94 -99
- package/dist/lib/neutral/chunk-LWXVKPPW.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-BVOFLCVF.mjs → chunk-MZ7K3MLL.mjs} +9 -6
- package/dist/lib/neutral/chunk-MZ7K3MLL.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-TBKX6JQO.mjs → chunk-O6BH7EPN.mjs} +30 -3
- package/dist/lib/neutral/chunk-O6BH7EPN.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-EAMSSLZC.mjs → chunk-QQIYS74I.mjs} +83 -46
- package/dist/lib/neutral/chunk-QQIYS74I.mjs.map +7 -0
- package/dist/lib/neutral/chunk-R5W6DXR4.mjs +678 -0
- package/dist/lib/neutral/chunk-R5W6DXR4.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-WAK4DMFV.mjs → chunk-RIVWNMSF.mjs} +12 -7
- package/dist/lib/neutral/chunk-RIVWNMSF.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-T6W2LEZU.mjs → chunk-SBVFRTST.mjs} +73 -38
- package/dist/lib/neutral/chunk-SBVFRTST.mjs.map +7 -0
- package/dist/lib/neutral/chunk-T6E37YIP.mjs +251 -0
- package/dist/lib/neutral/chunk-T6E37YIP.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-DQYLD2RB.mjs → chunk-TFEWTY5A.mjs} +155 -129
- package/dist/lib/neutral/chunk-TFEWTY5A.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-B4BASU6W.mjs → chunk-TYGKCRMK.mjs} +85 -76
- package/dist/lib/neutral/chunk-TYGKCRMK.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-4OIBYSXE.mjs → chunk-UUP46KUQ.mjs} +78 -32
- package/dist/lib/neutral/chunk-UUP46KUQ.mjs.map +7 -0
- package/dist/lib/neutral/chunk-WISOH2XH.mjs +36 -0
- package/dist/lib/neutral/chunk-WISOH2XH.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-G3IQMKF7.mjs → chunk-WTQJHC75.mjs} +111 -112
- package/dist/lib/neutral/chunk-WTQJHC75.mjs.map +7 -0
- package/dist/lib/neutral/chunk-WU3GIANS.mjs +31 -0
- package/dist/lib/neutral/chunk-WU3GIANS.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-TU3GW67D.mjs → chunk-ZGNNFYHS.mjs} +40 -40
- package/dist/lib/neutral/chunk-ZGNNFYHS.mjs.map +7 -0
- package/dist/lib/neutral/index.mjs +47 -41
- package/dist/lib/neutral/internal/index.mjs +137 -72
- package/dist/lib/neutral/meta.json +1 -1
- package/dist/lib/neutral/testing/index.mjs +261 -178
- package/dist/lib/neutral/testing/index.mjs.map +4 -4
- package/dist/types/src/Annotation.d.ts +108 -4
- package/dist/types/src/Annotation.d.ts.map +1 -1
- package/dist/types/src/Annotation.test.d.ts +2 -0
- package/dist/types/src/Annotation.test.d.ts.map +1 -0
- package/dist/types/src/Collection.d.ts +2 -3
- package/dist/types/src/Collection.d.ts.map +1 -1
- package/dist/types/src/Database.d.ts +56 -49
- package/dist/types/src/Database.d.ts.map +1 -1
- package/dist/types/src/Dataset.d.ts +16 -6
- package/dist/types/src/Dataset.d.ts.map +1 -1
- package/dist/types/src/Entity.d.ts +101 -28
- package/dist/types/src/Entity.d.ts.map +1 -1
- package/dist/types/src/Err.d.ts +27 -27
- package/dist/types/src/Err.d.ts.map +1 -1
- package/dist/types/src/Feed.d.ts +66 -19
- package/dist/types/src/Feed.d.ts.map +1 -1
- package/dist/types/src/Filter.d.ts +38 -12
- package/dist/types/src/Filter.d.ts.map +1 -1
- package/dist/types/src/Format.d.ts +0 -2
- package/dist/types/src/Format.d.ts.map +1 -1
- package/dist/types/src/Hypergraph.d.ts +14 -9
- package/dist/types/src/Hypergraph.d.ts.map +1 -1
- package/dist/types/src/Json.d.ts +33 -0
- package/dist/types/src/Json.d.ts.map +1 -0
- package/dist/types/src/Json.test.d.ts +2 -0
- package/dist/types/src/Json.test.d.ts.map +1 -0
- package/dist/types/src/JsonSchema.d.ts +2 -2
- package/dist/types/src/JsonSchema.d.ts.map +1 -1
- package/dist/types/src/Key.d.ts +1 -1
- package/dist/types/src/Key.d.ts.map +1 -1
- package/dist/types/src/Migration.d.ts +26 -11
- package/dist/types/src/Migration.d.ts.map +1 -1
- package/dist/types/src/Obj.d.ts +104 -61
- package/dist/types/src/Obj.d.ts.map +1 -1
- package/dist/types/src/Order.d.ts +10 -0
- package/dist/types/src/Order.d.ts.map +1 -1
- package/dist/types/src/Query.d.ts +34 -12
- package/dist/types/src/Query.d.ts.map +1 -1
- package/dist/types/src/QueryResult.d.ts +21 -0
- package/dist/types/src/QueryResult.d.ts.map +1 -1
- package/dist/types/src/Ref.d.ts +15 -7
- package/dist/types/src/Ref.d.ts.map +1 -1
- package/dist/types/src/Registry.d.ts +131 -0
- package/dist/types/src/Registry.d.ts.map +1 -0
- package/dist/types/src/Relation.d.ts +73 -41
- package/dist/types/src/Relation.d.ts.map +1 -1
- package/dist/types/src/Scope.d.ts +35 -0
- package/dist/types/src/Scope.d.ts.map +1 -0
- package/dist/types/src/Tag.d.ts +21 -5
- package/dist/types/src/Tag.d.ts.map +1 -1
- package/dist/types/src/Type.d.ts +362 -95
- package/dist/types/src/Type.d.ts.map +1 -1
- package/dist/types/src/View.d.ts +9 -12
- package/dist/types/src/View.d.ts.map +1 -1
- package/dist/types/src/exemplars.test.d.ts +2 -0
- package/dist/types/src/exemplars.test.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +4 -3
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/internal/Annotation/annotations.d.ts +79 -38
- package/dist/types/src/internal/Annotation/annotations.d.ts.map +1 -1
- package/dist/types/src/internal/Annotation/dictionary.d.ts +24 -0
- package/dist/types/src/internal/Annotation/dictionary.d.ts.map +1 -0
- package/dist/types/src/internal/Annotation/entity-dictionary.d.ts +14 -0
- package/dist/types/src/internal/Annotation/entity-dictionary.d.ts.map +1 -0
- package/dist/types/src/internal/Annotation/index.d.ts +4 -2
- package/dist/types/src/internal/Annotation/index.d.ts.map +1 -1
- package/dist/types/src/internal/Annotation/sorting.d.ts.map +1 -1
- package/dist/types/src/internal/Annotation/util.d.ts +14 -5
- package/dist/types/src/internal/Annotation/util.d.ts.map +1 -1
- package/dist/types/src/internal/Entity/api.d.ts +17 -3
- package/dist/types/src/internal/Entity/api.d.ts.map +1 -1
- package/dist/types/src/internal/Entity/entity.d.ts +72 -8
- package/dist/types/src/internal/Entity/entity.d.ts.map +1 -1
- package/dist/types/src/internal/Entity/guard.d.ts +10 -0
- package/dist/types/src/internal/Entity/guard.d.ts.map +1 -0
- package/dist/types/src/internal/Entity/index.d.ts +2 -0
- package/dist/types/src/internal/Entity/index.d.ts.map +1 -1
- package/dist/types/src/internal/Entity/model.d.ts +21 -17
- package/dist/types/src/internal/Entity/model.d.ts.map +1 -1
- package/dist/types/src/internal/Entity/object.d.ts +3 -3
- package/dist/types/src/internal/Entity/object.d.ts.map +1 -1
- package/dist/types/src/internal/Entity/relation.d.ts +30 -7
- package/dist/types/src/internal/Entity/relation.d.ts.map +1 -1
- package/dist/types/src/internal/Entity/type-kind.d.ts +24 -0
- package/dist/types/src/internal/Entity/type-kind.d.ts.map +1 -0
- package/dist/types/src/internal/Entity/type-uri.d.ts +24 -0
- package/dist/types/src/internal/Entity/type-uri.d.ts.map +1 -0
- package/dist/types/src/internal/Entity/version.d.ts.map +1 -1
- package/dist/types/src/internal/Format/date.d.ts.map +1 -1
- package/dist/types/src/internal/Format/format.d.ts +3 -2
- package/dist/types/src/internal/Format/format.d.ts.map +1 -1
- package/dist/types/src/internal/Format/index.d.ts +2 -2
- package/dist/types/src/internal/Format/index.d.ts.map +1 -1
- package/dist/types/src/internal/Format/number.d.ts.map +1 -1
- package/dist/types/src/internal/Format/object.d.ts +3 -1
- package/dist/types/src/internal/Format/object.d.ts.map +1 -1
- package/dist/types/src/internal/Format/types.d.ts.map +1 -1
- package/dist/types/src/internal/JsonSchema/json-schema-normalize.d.ts.map +1 -1
- package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts +34 -34
- package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts.map +1 -1
- package/dist/types/src/internal/JsonSchema/json-schema.d.ts +3 -2
- package/dist/types/src/internal/JsonSchema/json-schema.d.ts.map +1 -1
- package/dist/types/src/internal/Obj/atoms.d.ts +38 -0
- package/dist/types/src/internal/Obj/atoms.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/clone.d.ts.map +1 -1
- package/dist/types/src/internal/Obj/common.d.ts.map +1 -1
- package/dist/types/src/internal/Obj/create-object.d.ts +12 -12
- package/dist/types/src/internal/Obj/create-object.d.ts.map +1 -1
- package/dist/types/src/internal/Obj/deleted.d.ts.map +1 -1
- package/dist/types/src/internal/Obj/index.d.ts +1 -1
- package/dist/types/src/internal/Obj/index.d.ts.map +1 -1
- package/dist/types/src/internal/Obj/json-serializer.d.ts +8 -8
- package/dist/types/src/internal/Obj/json-serializer.d.ts.map +1 -1
- package/dist/types/src/internal/Obj/set-value.d.ts +1 -1
- package/dist/types/src/internal/Obj/set-value.d.ts.map +1 -1
- package/dist/types/src/internal/Obj/snapshot.d.ts.map +1 -1
- package/dist/types/src/internal/Obj/typed-object.d.ts +1 -1
- package/dist/types/src/internal/Query/index.d.ts +2 -0
- package/dist/types/src/internal/Query/index.d.ts.map +1 -0
- package/dist/types/src/internal/{Query.d.ts → Query/pretty.d.ts} +1 -1
- package/dist/types/src/internal/Query/pretty.d.ts.map +1 -0
- package/dist/types/src/internal/Ref/atoms.d.ts +10 -0
- package/dist/types/src/internal/Ref/atoms.d.ts.map +1 -0
- package/dist/types/src/internal/Ref/ref-array.d.ts +2 -2
- package/dist/types/src/internal/Ref/ref.d.ts +50 -19
- package/dist/types/src/internal/Ref/ref.d.ts.map +1 -1
- package/dist/types/src/internal/Ref/utils.d.ts +8 -0
- package/dist/types/src/internal/Ref/utils.d.ts.map +1 -0
- package/dist/types/src/internal/Type/compose.d.ts.map +1 -1
- package/dist/types/src/internal/Type/index.d.ts +1 -2
- package/dist/types/src/internal/Type/index.d.ts.map +1 -1
- package/dist/types/src/internal/Type/manipulation.d.ts +0 -1
- package/dist/types/src/internal/Type/manipulation.d.ts.map +1 -1
- package/dist/types/src/internal/Type/type-schema.d.ts +52 -0
- package/dist/types/src/internal/Type/type-schema.d.ts.map +1 -0
- package/dist/types/src/internal/common/api/meta.d.ts +14 -11
- package/dist/types/src/internal/common/api/meta.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/change-context.d.ts +1 -1
- package/dist/types/src/internal/common/proxy/change-context.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/errors.d.ts +1 -1
- package/dist/types/src/internal/common/proxy/errors.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/event-batch.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/json-serializer.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/make-object.d.ts +11 -5
- package/dist/types/src/internal/common/proxy/make-object.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/ownership.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/proxy-utils.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/reactive-array.d.ts +1 -1
- package/dist/types/src/internal/common/proxy/reactive.d.ts +1 -1
- package/dist/types/src/internal/common/proxy/reactive.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/reactive.test.d.ts +2 -0
- package/dist/types/src/internal/common/proxy/reactive.test.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/schema-validator.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/typed-handler.d.ts +18 -2
- package/dist/types/src/internal/common/proxy/typed-handler.d.ts.map +1 -1
- package/dist/types/src/internal/common/types/base.d.ts +4 -4
- package/dist/types/src/internal/common/types/base.d.ts.map +1 -1
- package/dist/types/src/internal/common/types/entity.d.ts +62 -5
- package/dist/types/src/internal/common/types/entity.d.ts.map +1 -1
- package/dist/types/src/internal/common/types/index.d.ts +1 -1
- package/dist/types/src/internal/common/types/index.d.ts.map +1 -1
- package/dist/types/src/internal/common/types/meta.d.ts +33 -12
- package/dist/types/src/internal/common/types/meta.d.ts.map +1 -1
- package/dist/types/src/internal/common/types/model-symbols.d.ts +15 -4
- package/dist/types/src/internal/common/types/model-symbols.d.ts.map +1 -1
- package/dist/types/src/internal/common/types/typename.d.ts +7 -0
- package/dist/types/src/internal/common/types/typename.d.ts.map +1 -1
- package/dist/types/src/internal/common/types/version.d.ts +1 -1
- package/dist/types/src/internal/common/types/well-known-types.d.ts +11 -0
- package/dist/types/src/internal/common/types/well-known-types.d.ts.map +1 -0
- package/dist/types/src/internal/index.d.ts +2 -2
- package/dist/types/src/internal/index.d.ts.map +1 -1
- package/dist/types/src/testing/index.d.ts +1 -0
- package/dist/types/src/testing/index.d.ts.map +1 -1
- package/dist/types/src/testing/registry.d.ts +9 -0
- package/dist/types/src/testing/registry.d.ts.map +1 -0
- package/dist/types/src/testing/test-data.d.ts +8 -8
- package/dist/types/src/testing/test-data.d.ts.map +1 -1
- package/dist/types/src/testing/test-schema.d.ts +83 -89
- package/dist/types/src/testing/test-schema.d.ts.map +1 -1
- package/dist/types/src/testing/util.d.ts +5 -3
- package/dist/types/src/testing/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +26 -24
- package/src/Annotation.test.ts +439 -0
- package/src/Annotation.ts +158 -4
- package/src/Collection.ts +5 -9
- package/src/Database.ts +93 -100
- package/src/Dataset.ts +10 -2
- package/src/Entity.test.ts +116 -6
- package/src/Entity.ts +134 -32
- package/src/Err.ts +4 -4
- package/src/Feed.ts +92 -44
- package/src/Filter.ts +70 -40
- package/src/Format.ts +0 -4
- package/src/Hypergraph.ts +14 -9
- package/src/Json.test.ts +175 -0
- package/src/Json.ts +103 -0
- package/src/Key.ts +1 -1
- package/src/Migration.ts +39 -19
- package/src/Obj.test.ts +122 -20
- package/src/Obj.ts +168 -91
- package/src/Order.ts +22 -0
- package/src/Query.test.ts +183 -154
- package/src/Query.ts +172 -85
- package/src/QueryResult.ts +26 -0
- package/src/Ref.ts +22 -4
- package/src/Registry.ts +155 -0
- package/src/Relation.test.ts +10 -10
- package/src/Relation.ts +116 -69
- package/src/Scope.ts +50 -0
- package/src/Tag.md +88 -0
- package/src/Tag.ts +49 -6
- package/src/Type.test.ts +223 -18
- package/src/Type.ts +609 -131
- package/src/View.ts +14 -23
- package/src/exemplars.test.ts +21 -0
- package/src/index.ts +4 -4
- package/src/internal/Annotation/annotations.test.ts +31 -11
- package/src/internal/Annotation/annotations.ts +143 -111
- package/src/internal/Annotation/dictionary.ts +47 -0
- package/src/internal/Annotation/entity-dictionary.ts +74 -0
- package/src/internal/Annotation/index.ts +4 -2
- package/src/internal/Annotation/util.ts +17 -8
- package/src/internal/Entity/api.ts +54 -7
- package/src/internal/Entity/entity.ts +196 -47
- package/src/internal/Entity/guard.ts +26 -0
- package/src/internal/Entity/index.ts +2 -0
- package/src/internal/Entity/model.ts +38 -28
- package/src/internal/Entity/object.ts +21 -5
- package/src/internal/Entity/relation.ts +68 -34
- package/src/internal/Entity/type-kind.ts +75 -0
- package/src/internal/Entity/type-uri.ts +92 -0
- package/src/internal/Entity/util.ts +9 -9
- package/src/internal/Format/date.ts +0 -4
- package/src/internal/Format/format.test.ts +21 -0
- package/src/internal/Format/index.ts +2 -3
- package/src/internal/Format/object.ts +21 -4
- package/src/internal/Format/types.ts +1 -1
- package/src/internal/JsonSchema/annotations.ts +1 -1
- package/src/internal/JsonSchema/json-schema-type.ts +4 -4
- package/src/internal/JsonSchema/json-schema.test.ts +71 -145
- package/src/internal/JsonSchema/json-schema.ts +49 -35
- package/src/internal/Obj/atoms.ts +244 -0
- package/src/internal/Obj/clone.ts +9 -4
- package/src/internal/Obj/create-object.test.ts +12 -10
- package/src/internal/Obj/create-object.ts +68 -22
- package/src/internal/Obj/index.ts +1 -1
- package/src/internal/Obj/inspect.ts +5 -3
- package/src/internal/Obj/json-serializer.test.ts +101 -22
- package/src/internal/Obj/json-serializer.ts +89 -33
- package/src/internal/Obj/set-value.test.ts +22 -45
- package/src/internal/Obj/set-value.ts +12 -19
- package/src/internal/Obj/snapshot.ts +13 -4
- package/src/internal/Obj/typed-object.test.ts +9 -11
- package/src/internal/Obj/typed-object.ts +1 -1
- package/src/internal/Query/index.ts +5 -0
- package/src/internal/{Query.ts → Query/pretty.ts} +40 -12
- package/src/internal/Ref/atoms.ts +20 -0
- package/src/internal/Ref/ref-array.ts +3 -3
- package/src/internal/Ref/ref.test.ts +18 -27
- package/src/internal/Ref/ref.ts +137 -59
- package/src/internal/Ref/utils.ts +45 -0
- package/src/internal/Type/compose.test.ts +3 -1
- package/src/internal/Type/index.ts +1 -2
- package/src/internal/Type/manipulation.ts +0 -25
- package/src/internal/Type/type-schema.ts +60 -0
- package/src/internal/common/README.md +2 -2
- package/src/internal/common/api/meta.ts +19 -17
- package/src/internal/common/proxy/change-context.ts +1 -1
- package/src/internal/common/proxy/change.test.ts +91 -83
- package/src/internal/common/proxy/errors.ts +2 -2
- package/src/internal/common/proxy/handler.test.ts +1 -1
- package/src/internal/common/proxy/json-serializer.ts +27 -16
- package/src/internal/common/proxy/make-object.ts +44 -20
- package/src/internal/common/proxy/ownership.ts +2 -2
- package/src/internal/common/proxy/reactive-array.ts +1 -1
- package/src/internal/common/proxy/reactive.test.ts +54 -0
- package/src/internal/common/proxy/reactive.ts +11 -2
- package/src/internal/common/proxy/schema.test.ts +48 -86
- package/src/internal/common/proxy/typed-handler.test.ts +12 -11
- package/src/internal/common/proxy/typed-handler.ts +78 -16
- package/src/internal/common/proxy/typed-object.test.ts +16 -28
- package/src/internal/common/types/base.ts +4 -4
- package/src/internal/common/types/entity.ts +80 -1
- package/src/internal/common/types/index.ts +6 -1
- package/src/internal/common/types/meta.ts +62 -20
- package/src/internal/common/types/model-symbols.ts +24 -4
- package/src/internal/common/types/typename.ts +39 -3
- package/src/internal/common/types/well-known-types.ts +15 -0
- package/src/internal/index.ts +6 -4
- package/src/testing/api.test.ts +15 -9
- package/src/testing/index.ts +1 -0
- package/src/testing/registry.ts +44 -0
- package/src/testing/test-data.ts +159 -99
- package/src/testing/test-schema.ts +22 -58
- package/src/testing/util.ts +14 -11
- package/dist/lib/neutral/Extension.mjs +0 -18
- package/dist/lib/neutral/SchemaRegistry.mjs +0 -2
- package/dist/lib/neutral/chunk-2KHZ36F5.mjs +0 -361
- package/dist/lib/neutral/chunk-2KHZ36F5.mjs.map +0 -7
- package/dist/lib/neutral/chunk-4OIBYSXE.mjs.map +0 -7
- package/dist/lib/neutral/chunk-4P3IXBLT.mjs +0 -45
- package/dist/lib/neutral/chunk-4P3IXBLT.mjs.map +0 -7
- package/dist/lib/neutral/chunk-ANHVGJI4.mjs.map +0 -7
- package/dist/lib/neutral/chunk-B4BASU6W.mjs.map +0 -7
- package/dist/lib/neutral/chunk-BNCCGLJN.mjs +0 -7
- package/dist/lib/neutral/chunk-BNCCGLJN.mjs.map +0 -7
- package/dist/lib/neutral/chunk-BVOFLCVF.mjs.map +0 -7
- package/dist/lib/neutral/chunk-DQYLD2RB.mjs.map +0 -7
- package/dist/lib/neutral/chunk-EAMSSLZC.mjs.map +0 -7
- package/dist/lib/neutral/chunk-G3IQMKF7.mjs.map +0 -7
- package/dist/lib/neutral/chunk-GZQTCRJB.mjs.map +0 -7
- package/dist/lib/neutral/chunk-HBUZJNZO.mjs.map +0 -7
- package/dist/lib/neutral/chunk-JUXPFOEI.mjs.map +0 -7
- package/dist/lib/neutral/chunk-MOR5ERFM.mjs.map +0 -7
- package/dist/lib/neutral/chunk-OMUPQMLR.mjs.map +0 -7
- package/dist/lib/neutral/chunk-PHU22NLC.mjs +0 -136
- package/dist/lib/neutral/chunk-PHU22NLC.mjs.map +0 -7
- package/dist/lib/neutral/chunk-ROG4RXXL.mjs +0 -97
- package/dist/lib/neutral/chunk-ROG4RXXL.mjs.map +0 -7
- package/dist/lib/neutral/chunk-T6W2LEZU.mjs.map +0 -7
- package/dist/lib/neutral/chunk-TBKX6JQO.mjs.map +0 -7
- package/dist/lib/neutral/chunk-TU3GW67D.mjs.map +0 -7
- package/dist/lib/neutral/chunk-UBEZSGXY.mjs.map +0 -7
- package/dist/lib/neutral/chunk-UI6MWK5W.mjs.map +0 -7
- package/dist/lib/neutral/chunk-V36VO5SS.mjs.map +0 -7
- package/dist/lib/neutral/chunk-WAK4DMFV.mjs.map +0 -7
- package/dist/lib/neutral/chunk-YAHXAYOW.mjs +0 -56
- package/dist/lib/neutral/chunk-YAHXAYOW.mjs.map +0 -7
- package/dist/lib/neutral/chunk-YS6Q3XAD.mjs +0 -50
- package/dist/lib/neutral/chunk-YS6Q3XAD.mjs.map +0 -7
- package/dist/types/src/Extension.d.ts +0 -80
- package/dist/types/src/Extension.d.ts.map +0 -1
- package/dist/types/src/Extension.test.d.ts +0 -2
- package/dist/types/src/Extension.test.d.ts.map +0 -1
- package/dist/types/src/SchemaRegistry.d.ts +0 -84
- package/dist/types/src/SchemaRegistry.d.ts.map +0 -1
- package/dist/types/src/internal/Obj/ids.d.ts +0 -6
- package/dist/types/src/internal/Obj/ids.d.ts.map +0 -1
- package/dist/types/src/internal/Query.d.ts.map +0 -1
- package/dist/types/src/internal/Type/echo-schema.d.ts +0 -181
- package/dist/types/src/internal/Type/echo-schema.d.ts.map +0 -1
- package/dist/types/src/internal/Type/persistent-schema.d.ts +0 -20
- package/dist/types/src/internal/Type/persistent-schema.d.ts.map +0 -1
- package/src/Extension.test.ts +0 -235
- package/src/Extension.ts +0 -122
- package/src/SchemaRegistry.ts +0 -106
- package/src/internal/Obj/ids.ts +0 -12
- package/src/internal/Type/echo-schema.ts +0 -423
- package/src/internal/Type/persistent-schema.ts +0 -33
- /package/dist/lib/neutral/{Extension.mjs.map → Registry.mjs.map} +0 -0
- /package/dist/lib/neutral/{SchemaRegistry.mjs.map → Scope.mjs.map} +0 -0
- /package/dist/lib/neutral/{chunk-7RO7CPBZ.mjs.map → chunk-IGK6FN65.mjs.map} +0 -0
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Ref,
|
|
3
|
+
createEchoReferenceSchema,
|
|
4
|
+
getRefSavedTarget
|
|
5
|
+
} from "./chunk-WTQJHC75.mjs";
|
|
6
|
+
import {
|
|
7
|
+
Dictionary,
|
|
8
|
+
MetaId,
|
|
9
|
+
getDatabase,
|
|
10
|
+
getDictionary,
|
|
11
|
+
setDictionary
|
|
12
|
+
} from "./chunk-R5W6DXR4.mjs";
|
|
13
|
+
import {
|
|
14
|
+
KindId,
|
|
15
|
+
SnapshotKindId
|
|
16
|
+
} from "./chunk-O6BH7EPN.mjs";
|
|
17
|
+
|
|
18
|
+
// src/internal/common/types/well-known-types.ts
|
|
19
|
+
import { DXN } from "@dxos/keys";
|
|
20
|
+
var TagTypeDXN = DXN.make("org.dxos.type.tag", "0.1.0");
|
|
21
|
+
|
|
22
|
+
// src/internal/common/types/meta.ts
|
|
23
|
+
import * as Schema from "effect/Schema";
|
|
24
|
+
import { ForeignKey } from "@dxos/echo-protocol";
|
|
25
|
+
import { invariant } from "@dxos/invariant";
|
|
26
|
+
import { DXN as DXN2 } from "@dxos/keys";
|
|
27
|
+
import { intersection } from "@dxos/util";
|
|
28
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/common/types/meta.ts";
|
|
29
|
+
var ATTR_META = "@meta";
|
|
30
|
+
var TagRefSchema = Schema.suspend(() => (
|
|
31
|
+
// The factory yields a loosely-typed `Ref<any>` schema; narrow it to the Tag-typed ref.
|
|
32
|
+
createEchoReferenceSchema(void 0, DXN2.getName(TagTypeDXN), DXN2.getVersion(TagTypeDXN))
|
|
33
|
+
));
|
|
34
|
+
var EntityMetaSchema = Schema.Struct({
|
|
35
|
+
keys: Schema.Array(ForeignKey),
|
|
36
|
+
/**
|
|
37
|
+
* Tags applied to this entity, as references to {@link Tag} objects.
|
|
38
|
+
*/
|
|
39
|
+
tags: Schema.Array(TagRefSchema),
|
|
40
|
+
/**
|
|
41
|
+
* Fully-qualified registry key for the object (FQN format, e.g. `org.example.type.foo`).
|
|
42
|
+
* Identifies the canonical registry entry the object instance was created from.
|
|
43
|
+
*/
|
|
44
|
+
key: Schema.optional(Schema.String),
|
|
45
|
+
/**
|
|
46
|
+
* Semantic version of the registry entry the object was created from.
|
|
47
|
+
* Must be a valid semver string (e.g. `1.2.3`).
|
|
48
|
+
*/
|
|
49
|
+
version: Schema.optional(Schema.String),
|
|
50
|
+
/**
|
|
51
|
+
* Dictionary of annotations to this entity.
|
|
52
|
+
*/
|
|
53
|
+
annotations: Dictionary,
|
|
54
|
+
/**
|
|
55
|
+
* Unix ms timestamp when this entity was created.
|
|
56
|
+
* Read-only; sourced from the system section of the automerge document — not stored in meta.
|
|
57
|
+
*/
|
|
58
|
+
createdAt: Schema.optional(Schema.Number),
|
|
59
|
+
/**
|
|
60
|
+
* Unix ms timestamp of the last automerge change on this entity's document.
|
|
61
|
+
* Read-only; derived from the automerge change graph — not stored in meta.
|
|
62
|
+
*/
|
|
63
|
+
updatedAt: Schema.optional(Schema.Number)
|
|
64
|
+
});
|
|
65
|
+
var getMeta = (obj) => {
|
|
66
|
+
const metadata = obj[MetaId];
|
|
67
|
+
invariant(metadata, "EntityMeta not found.", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 63, S: void 0, A: ["metadata", "'EntityMeta not found.'"] });
|
|
68
|
+
return metadata;
|
|
69
|
+
};
|
|
70
|
+
var foreignKey = (source, id) => ({
|
|
71
|
+
source,
|
|
72
|
+
id
|
|
73
|
+
});
|
|
74
|
+
var foreignKeyEquals = (a, b) => a.source === b.source && a.id === b.id;
|
|
75
|
+
var compareForeignKeys = (a, b) => intersection(getMeta(a).keys, getMeta(b).keys, foreignKeyEquals).length > 0;
|
|
76
|
+
|
|
77
|
+
// src/internal/common/api/meta.ts
|
|
78
|
+
import { assertArgument, invariant as invariant2 } from "@dxos/invariant";
|
|
79
|
+
var __dxlog_file2 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/common/api/meta.ts";
|
|
80
|
+
function getMetaChecked(entity) {
|
|
81
|
+
assertArgument(entity, "entity", "Should be an entity.");
|
|
82
|
+
const meta = getMeta(entity);
|
|
83
|
+
invariant2(meta != null, "Invalid entity.", { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 9, S: this, A: ["meta != null", "'Invalid entity.'"] });
|
|
84
|
+
return meta;
|
|
85
|
+
}
|
|
86
|
+
var getKeys = (entity, source) => {
|
|
87
|
+
assertArgument(entity, "entity", "Should be an entity.");
|
|
88
|
+
const meta = getMetaChecked(entity);
|
|
89
|
+
invariant2(meta != null, "Invalid entity.", { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 18, S: void 0, A: ["meta != null", "'Invalid entity.'"] });
|
|
90
|
+
return meta.keys.filter((key) => key.source === source);
|
|
91
|
+
};
|
|
92
|
+
var deleteKeys = (entity, source) => {
|
|
93
|
+
const meta = getMetaChecked(entity);
|
|
94
|
+
for (let i = 0; i < meta.keys.length; i++) {
|
|
95
|
+
if (meta.keys[i].source === source) {
|
|
96
|
+
meta.keys.splice(i, 1);
|
|
97
|
+
i--;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
var addTag = (entity, tag) => {
|
|
102
|
+
const meta = getMetaChecked(entity);
|
|
103
|
+
if (!meta.tags.some((existing) => existing.uri === tag.uri)) {
|
|
104
|
+
meta.tags.push(tag);
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
var removeTag = (entity, tag) => {
|
|
108
|
+
const meta = getMetaChecked(entity);
|
|
109
|
+
for (let i = 0; i < meta.tags.length; i++) {
|
|
110
|
+
if (meta.tags[i].uri === tag.uri) {
|
|
111
|
+
meta.tags.splice(i, 1);
|
|
112
|
+
i--;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
// src/internal/Entity/guard.ts
|
|
118
|
+
var isEntity = (value) => {
|
|
119
|
+
if (typeof value !== "object" || value === null) {
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
return value[KindId] !== void 0;
|
|
123
|
+
};
|
|
124
|
+
var isSnapshot = (value) => {
|
|
125
|
+
if (typeof value !== "object" || value === null) {
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
return value[SnapshotKindId] !== void 0;
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
// src/internal/Annotation/entity-dictionary.ts
|
|
132
|
+
import { deepMapValues } from "@dxos/util";
|
|
133
|
+
var get = (target, annotation) => {
|
|
134
|
+
if (isEntity(target) || isSnapshot(target)) {
|
|
135
|
+
const meta = getMetaChecked(target);
|
|
136
|
+
return getDictionary(meta.annotations, annotation);
|
|
137
|
+
} else {
|
|
138
|
+
throw new TypeError("Target is not an annotation target.");
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
var set = (target, annotation, value) => {
|
|
142
|
+
if (isEntity(target)) {
|
|
143
|
+
const meta = getMetaChecked(target);
|
|
144
|
+
persistRefTargets(target, value);
|
|
145
|
+
setDictionary(meta.annotations, annotation, value);
|
|
146
|
+
} else {
|
|
147
|
+
throw new TypeError("Target is not an annotation target.");
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
var persistRefTargets = (host, value) => {
|
|
151
|
+
const database = getDatabase(host);
|
|
152
|
+
if (database == null) {
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
deepMapValues(value, (current, recurse) => {
|
|
156
|
+
if (Ref.isRef(current)) {
|
|
157
|
+
const refTarget = getRefSavedTarget(current);
|
|
158
|
+
if (refTarget != null && isEntity(refTarget) && getDatabase(refTarget) == null) {
|
|
159
|
+
database.add(refTarget);
|
|
160
|
+
}
|
|
161
|
+
return current;
|
|
162
|
+
}
|
|
163
|
+
return recurse(current);
|
|
164
|
+
});
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
export {
|
|
168
|
+
TagTypeDXN,
|
|
169
|
+
ATTR_META,
|
|
170
|
+
EntityMetaSchema,
|
|
171
|
+
getMeta,
|
|
172
|
+
foreignKey,
|
|
173
|
+
foreignKeyEquals,
|
|
174
|
+
compareForeignKeys,
|
|
175
|
+
getMetaChecked,
|
|
176
|
+
getKeys,
|
|
177
|
+
deleteKeys,
|
|
178
|
+
addTag,
|
|
179
|
+
removeTag,
|
|
180
|
+
isEntity,
|
|
181
|
+
get,
|
|
182
|
+
set
|
|
183
|
+
};
|
|
184
|
+
//# sourceMappingURL=chunk-4ZUHOTCG.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/internal/common/types/well-known-types.ts", "../../../src/internal/common/types/meta.ts", "../../../src/internal/common/api/meta.ts", "../../../src/internal/Entity/guard.ts", "../../../src/internal/Annotation/entity-dictionary.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2026 DXOS.org\n//\n\nimport { DXN } from '@dxos/keys';\n\n/**\n * DXN identity of the system {@link Tag} type.\n *\n * Defined in this low-level leaf so it can be shared by the public `Tag` type (which brands the\n * schema with this DXN) and by `EntityMetaSchema.tags` (which builds a `Ref<Tag>` schema from it)\n * without either importing the other — `Tag` is top-level and `meta` is deep-internal, so a direct\n * dependency between them would form an eval-order cycle.\n */\nexport const TagTypeDXN = DXN.make('org.dxos.type.tag', '0.1.0');\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { type EncodedReference, ForeignKey } from '@dxos/echo-protocol';\nimport { invariant } from '@dxos/invariant';\nimport { DXN } from '@dxos/keys';\nimport { type Comparator, intersection } from '@dxos/util';\n\nimport type * as Tag from '../../../Tag';\nimport { Dictionary } from '../../Annotation/dictionary';\n// `meta` is no longer re-exported from the `common/types` barrel (see ./index.ts), so importing the\n// Ref schema builder here no longer forms an eval-order cycle with `Annotation`/`Database`.\nimport { type Ref, createEchoReferenceSchema } from '../../Ref/ref';\nimport { type AnyProperties } from './base';\nimport { MetaId } from './model-symbols';\nimport { TagTypeDXN } from './well-known-types';\n\n/**\n * Property name for meta when object is serialized to JSON.\n */\nexport const ATTR_META = '@meta';\n\n//\n// EntityMeta\n//\n\n/**\n * Schema for references to {@link Tag} objects stored in {@link EntityMetaSchema.tags}.\n *\n * Built from the shared {@link createEchoReferenceSchema} (the same builder `Ref.Ref` uses) via\n * `Schema.suspend`, so it reuses the canonical ref codec rather than duplicating it. The Tag type\n * identity comes from the shared {@link TagTypeDXN} constant; `suspend` defers construction until\n * first use, and `Tag` is referenced type-only, so no `Tag` value import is needed.\n */\nconst TagRefSchema = Schema.suspend(\n (): Schema.Schema<Ref<Tag.Tag>, EncodedReference> =>\n // The factory yields a loosely-typed `Ref<any>` schema; narrow it to the Tag-typed ref.\n createEchoReferenceSchema(undefined, DXN.getName(TagTypeDXN), DXN.getVersion(TagTypeDXN)) as Schema.Schema<\n Ref<Tag.Tag>,\n EncodedReference\n >,\n);\n\nexport const EntityMetaSchema = Schema.Struct({\n keys: Schema.Array(ForeignKey),\n\n /**\n * Tags applied to this entity, as references to {@link Tag} objects.\n */\n tags: Schema.Array(TagRefSchema),\n\n /**\n * Fully-qualified registry key for the object (FQN format, e.g. `org.example.type.foo`).\n * Identifies the canonical registry entry the object instance was created from.\n */\n key: Schema.optional(Schema.String),\n\n /**\n * Semantic version of the registry entry the object was created from.\n * Must be a valid semver string (e.g. `1.2.3`).\n */\n version: Schema.optional(Schema.String),\n\n /**\n * Dictionary of annotations to this entity.\n */\n annotations: Dictionary,\n\n /**\n * Unix ms timestamp when this entity was created.\n * Read-only; sourced from the system section of the automerge document — not stored in meta.\n */\n createdAt: Schema.optional(Schema.Number),\n\n /**\n * Unix ms timestamp of the last automerge change on this entity's document.\n * Read-only; derived from the automerge change graph — not stored in meta.\n */\n updatedAt: Schema.optional(Schema.Number),\n});\n\nexport type EntityMeta = Schema.Schema.Type<typeof EntityMetaSchema>;\n\n/*\n * Get metadata from object.\n * Only callable on the object root.\n *\n * @internal (use Obj.getMeta or Relation.getMeta)\n */\n// TODO(burdon): Refine type to BaseObj.\nexport const getMeta = (obj: AnyProperties): EntityMeta => {\n const metadata = (obj as any)[MetaId];\n invariant(metadata, 'EntityMeta not found.');\n return metadata;\n};\n\n//\n// Foreign keys\n//\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// TODO(dmaretskyi): Move to echo-schema.\nexport const compareForeignKeys: Comparator<AnyProperties> = (a: AnyProperties, b: AnyProperties) =>\n intersection(getMeta(a).keys, getMeta(b).keys, foreignKeyEquals).length > 0;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type { ForeignKey } from '@dxos/echo-protocol';\nimport { assertArgument, invariant } from '@dxos/invariant';\nimport type { DeepReadonly } from '@dxos/util';\n\nimport type * as Tag from '../../../Tag';\nimport type { Ref } from '../../Ref/ref';\nimport { type Mutable } from '../proxy';\nimport { type AnyProperties } from '../types';\nimport { type EntityMeta, getMeta as getMeta$ } from '../types/meta';\n\n/**\n * Deeply read-only version of EntityMeta.\n */\nexport type ReadonlyMeta = DeepReadonly<EntityMeta>;\n\n/**\n * Mutable meta type received in meta mutation callbacks.\n */\nexport type Meta = Mutable<EntityMeta>;\n\n/**\n * Get the metadata for an entity with validation.\n * Returns mutable meta when passed a mutable entity (inside change callback).\n * Returns read-only meta when passed a regular entity or snapshot.\n *\n * TODO(burdon): When passed a Snapshot, should return a snapshot of meta, not the live meta proxy.\n */\nexport function getMetaChecked(entity: Mutable<AnyProperties>): Meta;\nexport function getMetaChecked(entity: AnyProperties): ReadonlyMeta;\nexport function getMetaChecked(entity: AnyProperties): Meta | ReadonlyMeta {\n assertArgument(entity, 'entity', 'Should be an entity.');\n const meta = getMeta$(entity);\n invariant(meta != null, 'Invalid entity.');\n return meta;\n}\n\n/**\n * @returns Foreign keys for the entity from the specified source.\n * Accepts both reactive entities and snapshots.\n */\nexport const getKeys = (entity: AnyProperties, source: string): ForeignKey[] => {\n assertArgument(entity, 'entity', 'Should be an entity.');\n const meta = getMetaChecked(entity);\n invariant(meta != null, 'Invalid entity.');\n return meta.keys.filter((key) => key.source === source);\n};\n\n/**\n * Delete all keys from the entity for the specified source.\n * Must be called within an Obj.update or Relation.update callback.\n */\nexport const deleteKeys = (entity: Mutable<AnyProperties>, source: string) => {\n const meta = getMetaChecked(entity);\n for (let i = 0; i < meta.keys.length; i++) {\n if (meta.keys[i].source === source) {\n meta.keys.splice(i, 1);\n i--;\n }\n }\n};\n\n/**\n * Add a tag (a reference to a {@link Tag} object) to the entity. Idempotent.\n * Must be called within an Obj.update or Relation.update callback.\n */\nexport const addTag = (entity: Mutable<AnyProperties>, tag: Ref<Tag.Tag>) => {\n const meta = getMetaChecked(entity);\n // Two refs to the same target are not `===`; dedupe by URI.\n if (!meta.tags.some((existing) => existing.uri === tag.uri)) {\n meta.tags.push(tag);\n }\n};\n\n/**\n * Remove a tag (a reference to a {@link Tag} object) from the entity. No-op when not present.\n * Must be called within an Obj.update or Relation.update callback.\n */\nexport const removeTag = (entity: Mutable<AnyProperties>, tag: Ref<Tag.Tag>) => {\n const meta = getMetaChecked(entity);\n for (let i = 0; i < meta.tags.length; i++) {\n if (meta.tags[i].uri === tag.uri) {\n meta.tags.splice(i, 1);\n i--;\n }\n }\n};\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport type * as Entity from '../../Entity';\nimport { KindId, SnapshotKindId } from '../common/types';\n\n/**\n * Returns true if the value is an ECHO entity instance (object or relation).\n */\nexport const isEntity = (value: unknown): value is Entity.Unknown => {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n return (value as any)[KindId] !== undefined;\n};\n\n/**\n * Returns true if the value is an ECHO entity snapshot.\n */\nexport const isSnapshot = (value: unknown): value is Entity.Snapshot => {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n return (value as any)[SnapshotKindId] !== undefined;\n};\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Option from 'effect/Option';\n\nimport { deepMapValues } from '@dxos/util';\n\nimport type * as Annotation from '../../Annotation';\nimport type * as Entity from '../../Entity';\nimport { getMetaChecked } from '../common/api/meta';\nimport { type Mutable } from '../common/proxy/reactive';\nimport { getDatabase } from '../Entity/api';\nimport { isEntity, isSnapshot } from '../Entity/guard';\nimport { Ref, getRefSavedTarget } from '../Ref';\nimport { getDictionary, setDictionary } from './dictionary';\n\n/**\n * Get the value of an annotation from an entity instance or snapshot.\n */\nexport const get = <T>(\n target: Entity.Unknown | Entity.Snapshot,\n annotation: Annotation.Annotation<T>,\n): Option.Option<T> => {\n if (isEntity(target) || isSnapshot(target)) {\n const meta = getMetaChecked(target);\n return getDictionary(meta.annotations, annotation);\n } else {\n throw new TypeError('Target is not an annotation target.');\n }\n};\n\n/**\n * Set the value of an annotation on an entity instance.\n * Must be called with a mutable entity — i.e. inside an `Obj.update` callback.\n */\nexport const set = <T>(target: Mutable<Entity.Unknown>, annotation: Annotation.Annotation<T>, value: T): void => {\n if (isEntity(target)) {\n const meta = getMetaChecked(target);\n // Persist any unsaved Ref targets in the value into the entity's database so\n // the encoded DXN resolves on read. This mirrors normal property assignment,\n // where the reactive proxy links unsaved ref targets via `createRef` →\n // `database.add`. `setDictionary` pre-encodes the value (`Schema.encodeSync`),\n // so the live Ref never reaches the proxy's link handling and would otherwise\n // be stored as a dangling reference.\n persistRefTargets(target, value);\n setDictionary(meta.annotations, annotation, value);\n } else {\n throw new TypeError('Target is not an annotation target.');\n }\n};\n\n/**\n * Add any unsaved Ref targets found in `value` to the host entity's database, matching the\n * auto-persistence applied to refs assigned to ordinary entity properties. Refs whose target\n * already lives in a database (the host's or a foreign one) are left untouched.\n */\nconst persistRefTargets = (host: Entity.Unknown, value: unknown): void => {\n const database = getDatabase(host);\n if (database == null) {\n return;\n }\n\n deepMapValues(value, (current, recurse) => {\n if (Ref.isRef(current)) {\n const refTarget = getRefSavedTarget(current);\n if (refTarget != null && isEntity(refTarget) && getDatabase(refTarget) == null) {\n database.add(refTarget);\n }\n return current;\n }\n return recurse(current);\n });\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["DXN", "TagTypeDXN", "make", "Schema", "ForeignKey", "invariant", "DXN", "intersection", "Schema", "Struct", "keys", "ForeignKey", "invariant", "metadata", "id", "compareForeignKeys", "a", "b", "intersection", "getMeta", "assertArgument", "invariant", "__dxlog_file", "getMetaChecked", "meta", "entity", "invariant", "keys", "key", "source", "splice", "i", "tags", "existing", "length", "uri", "isEntity", "value", "KindId", "undefined", "isSnapshot", "SnapshotKindId", "deepMapValues", "get", "target", "annotation", "isEntity", "isSnapshot", "meta", "getMetaChecked", "getDictionary", "annotations", "TypeError", "set", "value", "persistRefTargets", "setDictionary", "host", "database", "getDatabase", "deepMapValues", "current", "recurse", "Ref", "isRef", "refTarget", "getRefSavedTarget", "add"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import {
|
|
2
|
+
foreignKeys,
|
|
3
|
+
type
|
|
4
|
+
} from "./chunk-6YDI3J37.mjs";
|
|
5
|
+
import {
|
|
6
|
+
Meta,
|
|
7
|
+
getMeta,
|
|
8
|
+
make,
|
|
9
|
+
update
|
|
10
|
+
} from "./chunk-TYGKCRMK.mjs";
|
|
11
|
+
import {
|
|
12
|
+
makeObject
|
|
13
|
+
} from "./chunk-T6E37YIP.mjs";
|
|
14
|
+
import {
|
|
15
|
+
TagTypeDXN
|
|
16
|
+
} from "./chunk-4ZUHOTCG.mjs";
|
|
17
|
+
import {
|
|
18
|
+
HiddenAnnotation,
|
|
19
|
+
LabelAnnotation
|
|
20
|
+
} from "./chunk-R5W6DXR4.mjs";
|
|
21
|
+
import {
|
|
22
|
+
__export
|
|
23
|
+
} from "./chunk-J5LGTIGS.mjs";
|
|
24
|
+
|
|
25
|
+
// src/Tag.ts
|
|
26
|
+
var Tag_exports = {};
|
|
27
|
+
__export(Tag_exports, {
|
|
28
|
+
Tag: () => Tag,
|
|
29
|
+
createTagList: () => createTagList,
|
|
30
|
+
findOrCreate: () => findOrCreate,
|
|
31
|
+
findTagByLabel: () => findTagByLabel,
|
|
32
|
+
make: () => make2,
|
|
33
|
+
sortTags: () => sortTags
|
|
34
|
+
});
|
|
35
|
+
import * as Schema from "effect/Schema";
|
|
36
|
+
var Tag = Schema.Struct({
|
|
37
|
+
label: Schema.String,
|
|
38
|
+
hue: Schema.optional(Schema.String)
|
|
39
|
+
}).pipe(
|
|
40
|
+
LabelAnnotation.set([
|
|
41
|
+
"label"
|
|
42
|
+
]),
|
|
43
|
+
HiddenAnnotation.set(true),
|
|
44
|
+
// Shared DXN so `meta.tags` (the `Ref<Tag>` schema) and this type stay in sync.
|
|
45
|
+
makeObject(TagTypeDXN)
|
|
46
|
+
);
|
|
47
|
+
var make2 = (props) => make(Tag, props);
|
|
48
|
+
var sortTags = ({ label: a }, { label: b }) => a.localeCompare(b);
|
|
49
|
+
var createTagList = (tags) => Object.entries(tags).map(([id, tag]) => ({
|
|
50
|
+
...tag,
|
|
51
|
+
id
|
|
52
|
+
})).sort(sortTags);
|
|
53
|
+
var findTagByLabel = (tags, name) => {
|
|
54
|
+
const entry = Object.entries(tags ?? {}).find(([_, tag]) => tag.label.toLowerCase() === name.toLowerCase());
|
|
55
|
+
return entry ? {
|
|
56
|
+
...entry[1],
|
|
57
|
+
id: entry[0]
|
|
58
|
+
} : void 0;
|
|
59
|
+
};
|
|
60
|
+
var findOrCreate = async (db, options) => {
|
|
61
|
+
const { label, hue, key } = options;
|
|
62
|
+
const withHue = hue ? {
|
|
63
|
+
hue
|
|
64
|
+
} : {};
|
|
65
|
+
if (key) {
|
|
66
|
+
const [existing2] = await db.query(foreignKeys(Tag, [
|
|
67
|
+
key
|
|
68
|
+
])).run();
|
|
69
|
+
if (existing2) {
|
|
70
|
+
if (existing2.label !== label || hue !== void 0 && existing2.hue !== hue) {
|
|
71
|
+
update(existing2, (existing3) => {
|
|
72
|
+
existing3.label = label;
|
|
73
|
+
if (hue !== void 0) {
|
|
74
|
+
existing3.hue = hue;
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
return existing2;
|
|
79
|
+
}
|
|
80
|
+
return db.add(make(Tag, {
|
|
81
|
+
[Meta]: {
|
|
82
|
+
keys: [
|
|
83
|
+
key
|
|
84
|
+
]
|
|
85
|
+
},
|
|
86
|
+
label,
|
|
87
|
+
...withHue
|
|
88
|
+
}));
|
|
89
|
+
}
|
|
90
|
+
const lowered = label.toLowerCase();
|
|
91
|
+
const candidates = await db.query(type(Tag)).run();
|
|
92
|
+
const existing = candidates.find((tag) => tag.label.toLowerCase() === lowered && (getMeta(tag).keys ?? []).length === 0);
|
|
93
|
+
return existing ?? db.add(make2({
|
|
94
|
+
label,
|
|
95
|
+
...withHue
|
|
96
|
+
}));
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
export {
|
|
100
|
+
Tag,
|
|
101
|
+
make2 as make,
|
|
102
|
+
sortTags,
|
|
103
|
+
createTagList,
|
|
104
|
+
findTagByLabel,
|
|
105
|
+
findOrCreate,
|
|
106
|
+
Tag_exports
|
|
107
|
+
};
|
|
108
|
+
//# sourceMappingURL=chunk-5SMDBFVB.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/Tag.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport * as Schema from 'effect/Schema';\n\nimport type { ForeignKey } from '@dxos/echo-protocol';\n\nimport type * as Database from './Database';\nimport * as Filter from './Filter';\nimport * as internal from './internal';\nimport * as Obj from './Obj';\nimport * as Type from './Type';\n\nexport const Tag = Schema.Struct({\n label: Schema.String,\n hue: Schema.optional(Schema.String), // TODO(burdon): Color name?\n}).pipe(\n internal.LabelAnnotation.set(['label']),\n internal.HiddenAnnotation.set(true),\n // Shared DXN so `meta.tags` (the `Ref<Tag>` schema) and this type stay in sync.\n Type.makeObject(internal.TagTypeDXN),\n);\n\nexport type Tag = Type.InstanceType<typeof Tag>;\n\nexport const make = (props: Obj.MakeProps<typeof Tag>) => Obj.make(Tag, props);\n\nexport type Map = Record<string, Tag>;\n\nexport const sortTags = ({ label: a }: Tag, { label: b }: Tag) => a.localeCompare(b);\n\nexport const createTagList = (tags: Map): Tag[] =>\n Object.entries(tags)\n .map(([id, tag]) => ({ ...tag, id }))\n .sort(sortTags);\n\nexport const findTagByLabel = (tags: Map | undefined, name: string): Tag | undefined => {\n const entry = Object.entries(tags ?? {}).find(([_, tag]) => tag.label.toLowerCase() === name.toLowerCase());\n return entry ? { ...entry[1], id: entry[0] } : undefined;\n};\n\n/**\n * Finds or creates a {@link Tag} object in the database.\n *\n * - With a foreign `key` (system/provider tags): matched by that key; the label is kept current on\n * re-sync. Use a stable key (e.g. `{ source: 'google.com/gmail/label', id }`) for tags whose\n * identity is external or well-known.\n * - Without a key (user tags): matched by case-insensitive label among tags that carry **no**\n * foreign key, so it never collides with a keyed system/provider tag of the same label.\n */\nexport const findOrCreate = async (\n db: Pick<Database.Database, 'query' | 'add'>,\n options: { label: string; hue?: string; key?: ForeignKey },\n): Promise<Tag> => {\n const { label, hue, key } = options;\n const withHue = hue ? { hue } : {};\n if (key) {\n const [existing] = await db.query(Filter.foreignKeys(Tag, [key])).run();\n if (existing) {\n // Keep label (and hue, when provided) current on re-sync. `hue` is only touched when supplied,\n // so a label-only re-sync (e.g. Gmail) doesn't wipe a user-set colour.\n if (existing.label !== label || (hue !== undefined && existing.hue !== hue)) {\n Obj.update(existing, (existing) => {\n existing.label = label;\n if (hue !== undefined) {\n existing.hue = hue;\n }\n });\n }\n return existing;\n }\n return db.add(Obj.make(Tag, { [Obj.Meta]: { keys: [key] }, label, ...withHue }));\n }\n\n const lowered = label.toLowerCase();\n const candidates = await db.query(Filter.type(Tag)).run();\n const existing = candidates.find(\n (tag) => tag.label.toLowerCase() === lowered && (Obj.getMeta(tag).keys ?? []).length === 0,\n );\n return existing ?? db.add(make({ label, ...withHue }));\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;cAAAA;EAAA;;AAMA,YAAYC,YAAY;AAUjB,IAAMC,MAAaC,cAAO;EAC/BC,OAAcC;EACdC,KAAYC,gBAAgBF,aAAM;AACpC,CAAA,EAAGG;EACQC,gBAAgBC,IAAI;IAAC;GAAQ;EAC7BC,iBAAiBD,IAAI,IAAA;;EAEzBE,WAAoBC,UAAU;AAAA;AAK9B,IAAMC,QAAO,CAACC,UAAyCD,KAAKZ,KAAKa,KAAAA;AAIjE,IAAMC,WAAW,CAAC,EAAEZ,OAAOa,EAAC,GAAS,EAAEb,OAAOc,EAAC,MAAYD,EAAEE,cAAcD,CAAAA;AAE3E,IAAME,gBAAgB,CAACC,SAC5BC,OAAOC,QAAQF,IAAAA,EACZG,IAAI,CAAC,CAACC,IAAIC,GAAAA,OAAU;EAAE,GAAGA;EAAKD;AAAG,EAAA,EACjCE,KAAKX,QAAAA;AAEH,IAAMY,iBAAiB,CAACP,MAAuBQ,SAAAA;AACpD,QAAMC,QAAQR,OAAOC,QAAQF,QAAQ,CAAC,CAAA,EAAGU,KAAK,CAAC,CAACC,GAAGN,GAAAA,MAASA,IAAItB,MAAM6B,YAAW,MAAOJ,KAAKI,YAAW,CAAA;AACxG,SAAOH,QAAQ;IAAE,GAAGA,MAAM,CAAA;IAAIL,IAAIK,MAAM,CAAA;EAAG,IAAII;AACjD;AAWO,IAAMC,eAAe,OAC1BC,IACAC,YAAAA;AAEA,QAAM,EAAEjC,OAAOE,KAAKgC,IAAG,IAAKD;AAC5B,QAAME,UAAUjC,MAAM;IAAEA;EAAI,IAAI,CAAC;AACjC,MAAIgC,KAAK;AACP,UAAM,CAACE,SAAAA,IAAY,MAAMJ,GAAGK,MAAaC,YAAYxC,KAAK;MAACoC;KAAI,CAAA,EAAGK,IAAG;AACrE,QAAIH,WAAU;AAGZ,UAAIA,UAASpC,UAAUA,SAAUE,QAAQ4B,UAAaM,UAASlC,QAAQA,KAAM;AAC3EsC,QAAIC,OAAOL,WAAU,CAACA,cAAAA;AACpBA,UAAAA,UAASpC,QAAQA;AACjB,cAAIE,QAAQ4B,QAAW;AACrBM,YAAAA,UAASlC,MAAMA;UACjB;QACF,CAAA;MACF;AACA,aAAOkC;IACT;AACA,WAAOJ,GAAGU,IAAQhC,KAAKZ,KAAK;MAAE,CAAK6C,IAAI,GAAG;QAAEC,MAAM;UAACV;;MAAK;MAAGlC;MAAO,GAAGmC;IAAQ,CAAA,CAAA;EAC/E;AAEA,QAAMU,UAAU7C,MAAM6B,YAAW;AACjC,QAAMiB,aAAa,MAAMd,GAAGK,MAAaU,KAAKjD,GAAAA,CAAAA,EAAMyC,IAAG;AACvD,QAAMH,WAAWU,WAAWnB,KAC1B,CAACL,QAAQA,IAAItB,MAAM6B,YAAW,MAAOgB,YAAgBG,QAAQ1B,GAAAA,EAAKsB,QAAQ,CAAA,GAAIK,WAAW,CAAA;AAE3F,SAAOb,YAAYJ,GAAGU,IAAIhC,MAAK;IAAEV;IAAO,GAAGmC;EAAQ,CAAA,CAAA;AACrD;",
|
|
6
|
+
"names": ["make", "Schema", "Tag", "Struct", "label", "String", "hue", "optional", "pipe", "LabelAnnotation", "set", "HiddenAnnotation", "makeObject", "TagTypeDXN", "make", "props", "sortTags", "a", "b", "localeCompare", "createTagList", "tags", "Object", "entries", "map", "id", "tag", "sort", "findTagByLabel", "name", "entry", "find", "_", "toLowerCase", "undefined", "findOrCreate", "db", "options", "key", "withHue", "existing", "query", "foreignKeys", "run", "Obj", "update", "add", "Meta", "keys", "lowered", "candidates", "type", "getMeta", "length"]
|
|
7
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Ref
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-WTQJHC75.mjs";
|
|
4
4
|
|
|
5
5
|
// src/internal/Ref/ref-array.ts
|
|
6
6
|
import { isNonNullable } from "@dxos/util";
|
|
@@ -21,7 +21,7 @@ var RefArray = Object.freeze({
|
|
|
21
21
|
* Removes the ref with the given id.
|
|
22
22
|
*/
|
|
23
23
|
removeById: (refs, id) => {
|
|
24
|
-
const index = refs.findIndex(Ref.
|
|
24
|
+
const index = refs.findIndex(Ref.hasEntityId(id));
|
|
25
25
|
if (index >= 0) {
|
|
26
26
|
refs.splice(index, 1);
|
|
27
27
|
}
|
|
@@ -31,4 +31,4 @@ var RefArray = Object.freeze({
|
|
|
31
31
|
export {
|
|
32
32
|
RefArray
|
|
33
33
|
};
|
|
34
|
-
//# sourceMappingURL=chunk-
|
|
34
|
+
//# sourceMappingURL=chunk-5SUJPHAE.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/internal/Ref/ref-array.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { type
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { type EntityId } from '@dxos/keys';\nimport { isNonNullable } from '@dxos/util';\n\nimport { type AnyEntity } from '../common/types';\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 AnyEntity>(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 AnyEntity>(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<AnyEntity>[], id: EntityId) => {\n const index = refs.findIndex(Ref.hasEntityId(id));\n if (index >= 0) {\n refs.splice(index, 1);\n }\n },\n});\n"],
|
|
5
5
|
"mappings": ";;;;;AAKA,SAASA,qBAAqB;AAQvB,IAAMC,WAAWC,OAAOC,OAAO;;;;EAIpCC,SAAS,CAAsBC,SAAAA;AAC7B,WAAOA,KAAKC,IAAI,CAACC,QAAQA,IAAIC,MAAM,EAAEC,OAAOC,aAAAA;EAC9C;;;;EAKAC,SAAS,CAAsBN,SAAAA;AAC7B,WAAOO,QAAQC,IAAIR,KAAKC,IAAI,CAACC,QAAQA,IAAIO,KAAI,CAAA,CAAA;EAC/C;;;;EAKAC,YAAY,CAACV,MAAwBW,OAAAA;AACnC,UAAMC,QAAQZ,KAAKa,UAAUC,IAAIC,YAAYJ,EAAAA,CAAAA;AAC7C,QAAIC,SAAS,GAAG;AACdZ,WAAKgB,OAAOJ,OAAO,CAAA;IACrB;EACF;AACF,CAAA;",
|
|
6
|
-
"names": ["isNonNullable", "RefArray", "Object", "freeze", "targets", "refs", "map", "ref", "target", "filter", "isNonNullable", "loadAll", "Promise", "all", "load", "removeById", "id", "index", "findIndex", "Ref", "
|
|
6
|
+
"names": ["isNonNullable", "RefArray", "Object", "freeze", "targets", "refs", "map", "ref", "target", "filter", "isNonNullable", "loadAll", "Promise", "all", "load", "removeById", "id", "index", "findIndex", "Ref", "hasEntityId", "splice"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Currency,
|
|
3
3
|
CurrencyAnnotationId,
|
|
4
|
+
DateOnly,
|
|
5
|
+
DateTime,
|
|
4
6
|
DecimalPrecision,
|
|
7
|
+
Duration,
|
|
5
8
|
Email,
|
|
6
9
|
Format,
|
|
7
10
|
FormatAnnotation,
|
|
@@ -18,7 +21,11 @@ import {
|
|
|
18
21
|
PropertyKind,
|
|
19
22
|
Regex,
|
|
20
23
|
SelectOption,
|
|
24
|
+
SimpleDate,
|
|
25
|
+
SimpleDateTime,
|
|
26
|
+
SimpleTime,
|
|
21
27
|
Text,
|
|
28
|
+
TimeOnly,
|
|
22
29
|
TypeEnum,
|
|
23
30
|
TypeFormat,
|
|
24
31
|
URL,
|
|
@@ -27,8 +34,11 @@ import {
|
|
|
27
34
|
getFormatAnnotation,
|
|
28
35
|
getOptionsAnnotation,
|
|
29
36
|
getTypeEnum,
|
|
37
|
+
toSimpleDate,
|
|
38
|
+
toSimpleDateTime,
|
|
39
|
+
toSimpleTime,
|
|
30
40
|
typeToFormat
|
|
31
|
-
} from "./chunk-
|
|
41
|
+
} from "./chunk-TFEWTY5A.mjs";
|
|
32
42
|
import {
|
|
33
43
|
__export
|
|
34
44
|
} from "./chunk-J5LGTIGS.mjs";
|
|
@@ -38,7 +48,10 @@ var Format_exports = {};
|
|
|
38
48
|
__export(Format_exports, {
|
|
39
49
|
Currency: () => Currency,
|
|
40
50
|
CurrencyAnnotationId: () => CurrencyAnnotationId,
|
|
51
|
+
DateOnly: () => DateOnly,
|
|
52
|
+
DateTime: () => DateTime,
|
|
41
53
|
DecimalPrecision: () => DecimalPrecision,
|
|
54
|
+
Duration: () => Duration,
|
|
42
55
|
Email: () => Email,
|
|
43
56
|
Format: () => Format,
|
|
44
57
|
FormatAnnotation: () => FormatAnnotation,
|
|
@@ -55,7 +68,11 @@ __export(Format_exports, {
|
|
|
55
68
|
PropertyKind: () => PropertyKind,
|
|
56
69
|
Regex: () => Regex,
|
|
57
70
|
SelectOption: () => SelectOption,
|
|
71
|
+
SimpleDate: () => SimpleDate,
|
|
72
|
+
SimpleDateTime: () => SimpleDateTime,
|
|
73
|
+
SimpleTime: () => SimpleTime,
|
|
58
74
|
Text: () => Text,
|
|
75
|
+
TimeOnly: () => TimeOnly,
|
|
59
76
|
TypeEnum: () => TypeEnum,
|
|
60
77
|
TypeFormat: () => TypeFormat,
|
|
61
78
|
URL: () => URL,
|
|
@@ -64,10 +81,13 @@ __export(Format_exports, {
|
|
|
64
81
|
getFormatAnnotation: () => getFormatAnnotation,
|
|
65
82
|
getOptionsAnnotation: () => getOptionsAnnotation,
|
|
66
83
|
getTypeEnum: () => getTypeEnum,
|
|
84
|
+
toSimpleDate: () => toSimpleDate,
|
|
85
|
+
toSimpleDateTime: () => toSimpleDateTime,
|
|
86
|
+
toSimpleTime: () => toSimpleTime,
|
|
67
87
|
typeToFormat: () => typeToFormat
|
|
68
88
|
});
|
|
69
89
|
|
|
70
90
|
export {
|
|
71
91
|
Format_exports
|
|
72
92
|
};
|
|
73
|
-
//# sourceMappingURL=chunk-
|
|
93
|
+
//# sourceMappingURL=chunk-6M2Z6WBH.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/Format.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nexport * from './internal/Format';\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
isRef
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-MZ7K3MLL.mjs";
|
|
4
4
|
import {
|
|
5
|
-
getDXN,
|
|
6
5
|
prettyFilter
|
|
7
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-7FPIAJIV.mjs";
|
|
8
7
|
import {
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
getTypeURIFromSpecifier,
|
|
9
|
+
getUri
|
|
10
|
+
} from "./chunk-R5W6DXR4.mjs";
|
|
11
11
|
import {
|
|
12
12
|
__export
|
|
13
13
|
} from "./chunk-J5LGTIGS.mjs";
|
|
@@ -29,6 +29,7 @@ __export(Filter_exports, {
|
|
|
29
29
|
id: () => id,
|
|
30
30
|
in: () => in$,
|
|
31
31
|
is: () => is,
|
|
32
|
+
key: () => key,
|
|
32
33
|
lt: () => lt,
|
|
33
34
|
lte: () => lte,
|
|
34
35
|
neq: () => neq,
|
|
@@ -40,15 +41,13 @@ __export(Filter_exports, {
|
|
|
40
41
|
tag: () => tag,
|
|
41
42
|
text: () => text,
|
|
42
43
|
type: () => type,
|
|
43
|
-
typeDXN: () => typeDXN,
|
|
44
|
-
typename: () => typename,
|
|
45
44
|
updated: () => updated
|
|
46
45
|
});
|
|
47
46
|
import * as Match from "effect/Match";
|
|
48
47
|
import * as Schema from "effect/Schema";
|
|
49
48
|
import * as SchemaAST from "effect/SchemaAST";
|
|
50
49
|
import { assertArgument } from "@dxos/invariant";
|
|
51
|
-
import {
|
|
50
|
+
import { EID, EntityId } from "@dxos/keys";
|
|
52
51
|
var FilterClass = class _FilterClass {
|
|
53
52
|
ast;
|
|
54
53
|
static "variance" = {};
|
|
@@ -81,7 +80,7 @@ var nothing = () => {
|
|
|
81
80
|
});
|
|
82
81
|
};
|
|
83
82
|
var id = (...ids) => {
|
|
84
|
-
assertArgument(ids.every((id2) =>
|
|
83
|
+
assertArgument(ids.every((id2) => EntityId.isValid(id2)), "ids", "ids must be valid");
|
|
85
84
|
if (ids.length === 0) {
|
|
86
85
|
return nothing();
|
|
87
86
|
}
|
|
@@ -92,44 +91,38 @@ var id = (...ids) => {
|
|
|
92
91
|
props: {}
|
|
93
92
|
});
|
|
94
93
|
};
|
|
95
|
-
var type = (
|
|
96
|
-
if (Schema.isSchema(
|
|
97
|
-
const typenames =
|
|
94
|
+
var type = (input, props2) => {
|
|
95
|
+
if (Schema.isSchema(input) && SchemaAST.isUnion(input.ast)) {
|
|
96
|
+
const typenames = input.ast.types.map((t) => getTypeURIFromSpecifier(Schema.make(t)));
|
|
98
97
|
return new FilterClass({
|
|
99
98
|
type: "or",
|
|
100
|
-
filters: typenames.map((
|
|
99
|
+
filters: typenames.map((typename) => ({
|
|
101
100
|
type: "object",
|
|
102
|
-
typename
|
|
101
|
+
typename,
|
|
103
102
|
props: {}
|
|
104
103
|
}))
|
|
105
104
|
});
|
|
106
105
|
}
|
|
107
|
-
const
|
|
106
|
+
const uri = getTypeURIFromSpecifier(input);
|
|
108
107
|
return new FilterClass({
|
|
109
108
|
type: "object",
|
|
110
|
-
typename:
|
|
109
|
+
typename: uri,
|
|
111
110
|
...propsFilterToAst(props2 ?? {})
|
|
112
111
|
});
|
|
113
112
|
};
|
|
114
|
-
var
|
|
115
|
-
assertArgument(!typename2.startsWith("dxn:"), "typename", "Typename must no be qualified");
|
|
113
|
+
var tag = (tag2) => {
|
|
116
114
|
return new FilterClass({
|
|
117
|
-
type: "
|
|
118
|
-
|
|
119
|
-
props: {}
|
|
115
|
+
type: "tag",
|
|
116
|
+
tag: tag2
|
|
120
117
|
});
|
|
121
118
|
};
|
|
122
|
-
var
|
|
119
|
+
var key = (key2, options) => {
|
|
123
120
|
return new FilterClass({
|
|
124
121
|
type: "object",
|
|
125
|
-
typename:
|
|
126
|
-
props: {}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
var tag = (tag2) => {
|
|
130
|
-
return new FilterClass({
|
|
131
|
-
type: "tag",
|
|
132
|
-
tag: tag2
|
|
122
|
+
typename: null,
|
|
123
|
+
props: {},
|
|
124
|
+
metaKey: key2,
|
|
125
|
+
metaVersion: options?.version
|
|
133
126
|
});
|
|
134
127
|
};
|
|
135
128
|
var props = (props2) => {
|
|
@@ -147,10 +140,10 @@ var text = (text2, options) => {
|
|
|
147
140
|
});
|
|
148
141
|
};
|
|
149
142
|
var foreignKeys = (schema, keys) => {
|
|
150
|
-
const
|
|
143
|
+
const uri = getTypeURIFromSpecifier(schema);
|
|
151
144
|
return new FilterClass({
|
|
152
145
|
type: "object",
|
|
153
|
-
typename:
|
|
146
|
+
typename: uri,
|
|
154
147
|
props: {},
|
|
155
148
|
foreignKeys: keys
|
|
156
149
|
});
|
|
@@ -251,9 +244,9 @@ var childOf = (parents, options) => {
|
|
|
251
244
|
];
|
|
252
245
|
const dxns = items.map((item) => {
|
|
253
246
|
if (isRef(item)) {
|
|
254
|
-
return item.
|
|
247
|
+
return EID.parse(item.uri);
|
|
255
248
|
}
|
|
256
|
-
return
|
|
249
|
+
return EID.parse(getUri(item));
|
|
257
250
|
});
|
|
258
251
|
return new FilterClass({
|
|
259
252
|
type: "child-of",
|
|
@@ -286,7 +279,7 @@ var propsFilterToAst = (predicates) => {
|
|
|
286
279
|
idFilter = typeof predicates.id === "string" ? [
|
|
287
280
|
predicates.id
|
|
288
281
|
] : predicates.id;
|
|
289
|
-
Schema.Array(
|
|
282
|
+
Schema.Array(EntityId).pipe(Schema.validateSync)(idFilter);
|
|
290
283
|
}
|
|
291
284
|
return {
|
|
292
285
|
id: idFilter,
|
|
@@ -305,8 +298,8 @@ var processPredicate = (predicate) => {
|
|
|
305
298
|
throw new Error("Array predicates are not yet supported.");
|
|
306
299
|
}),
|
|
307
300
|
Match.when((predicate2) => !isRef(predicate2) && typeof predicate2 === "object" && predicate2 !== null, (predicate2) => {
|
|
308
|
-
const nestedProps = Object.fromEntries(Object.entries(predicate2).map(([
|
|
309
|
-
|
|
301
|
+
const nestedProps = Object.fromEntries(Object.entries(predicate2).map(([key2, value2]) => [
|
|
302
|
+
key2,
|
|
310
303
|
processPredicate(value2)
|
|
311
304
|
]));
|
|
312
305
|
return {
|
|
@@ -327,9 +320,8 @@ export {
|
|
|
327
320
|
nothing,
|
|
328
321
|
id,
|
|
329
322
|
type,
|
|
330
|
-
typename,
|
|
331
|
-
typeDXN,
|
|
332
323
|
tag,
|
|
324
|
+
key,
|
|
333
325
|
props,
|
|
334
326
|
text,
|
|
335
327
|
foreignKeys,
|
|
@@ -351,4 +343,4 @@ export {
|
|
|
351
343
|
pretty,
|
|
352
344
|
Filter_exports
|
|
353
345
|
};
|
|
354
|
-
//# sourceMappingURL=chunk-
|
|
346
|
+
//# sourceMappingURL=chunk-6YDI3J37.mjs.map
|