@dxos/echo 0.8.4-main.fd6878d → 0.8.4-staging.60fe92afc8
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 +10 -11
- package/dist/lib/neutral/Annotation.mjs +68 -0
- package/dist/lib/neutral/Database.mjs +38 -0
- package/dist/lib/neutral/Entity.mjs +72 -0
- package/dist/lib/neutral/Entity.mjs.map +7 -0
- package/dist/lib/neutral/Err.mjs +12 -0
- package/dist/lib/neutral/Err.mjs.map +7 -0
- package/dist/lib/neutral/Feed.mjs +54 -0
- package/dist/lib/neutral/Feed.mjs.map +7 -0
- package/dist/lib/neutral/Filter.mjs +70 -0
- package/dist/lib/neutral/Filter.mjs.map +7 -0
- package/dist/lib/neutral/Format.mjs +86 -0
- package/dist/lib/neutral/Format.mjs.map +7 -0
- package/dist/lib/neutral/JsonSchema.mjs +18 -0
- package/dist/lib/neutral/JsonSchema.mjs.map +7 -0
- package/dist/lib/neutral/Key.mjs +16 -0
- package/dist/lib/neutral/Key.mjs.map +7 -0
- package/dist/lib/neutral/Migration.mjs +18 -0
- package/dist/lib/neutral/Migration.mjs.map +7 -0
- package/dist/lib/neutral/Obj.mjs +122 -0
- package/dist/lib/neutral/Obj.mjs.map +7 -0
- package/dist/lib/neutral/Order.mjs +16 -0
- package/dist/lib/neutral/Order.mjs.map +7 -0
- package/dist/lib/neutral/Query.mjs +38 -0
- package/dist/lib/neutral/Query.mjs.map +7 -0
- package/dist/lib/neutral/QueryResult.mjs +2 -0
- package/dist/lib/neutral/QueryResult.mjs.map +7 -0
- package/dist/lib/neutral/Ref.mjs +25 -0
- package/dist/lib/neutral/Ref.mjs.map +7 -0
- package/dist/lib/neutral/Registry.mjs +14 -0
- package/dist/lib/neutral/Registry.mjs.map +7 -0
- package/dist/lib/neutral/Relation.mjs +97 -0
- package/dist/lib/neutral/Relation.mjs.map +7 -0
- package/dist/lib/neutral/Scope.mjs +12 -0
- package/dist/lib/neutral/Scope.mjs.map +7 -0
- package/dist/lib/neutral/Tag.mjs +32 -0
- package/dist/lib/neutral/Tag.mjs.map +7 -0
- package/dist/lib/neutral/Type.mjs +65 -0
- package/dist/lib/neutral/Type.mjs.map +7 -0
- package/dist/lib/neutral/chunk-35INCYOE.mjs +7 -0
- 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-5SUJPHAE.mjs +34 -0
- package/dist/lib/neutral/chunk-5SUJPHAE.mjs.map +7 -0
- package/dist/lib/neutral/chunk-6M2Z6WBH.mjs +93 -0
- package/dist/lib/neutral/chunk-6M2Z6WBH.mjs.map +7 -0
- package/dist/lib/neutral/chunk-6YDI3J37.mjs +346 -0
- package/dist/lib/neutral/chunk-6YDI3J37.mjs.map +7 -0
- package/dist/lib/neutral/chunk-7FPIAJIV.mjs +2279 -0
- package/dist/lib/neutral/chunk-7FPIAJIV.mjs.map +7 -0
- package/dist/lib/neutral/chunk-7LOUAPYZ.mjs +25 -0
- package/dist/lib/neutral/chunk-7LOUAPYZ.mjs.map +7 -0
- package/dist/lib/neutral/chunk-7PI7C4EF.mjs +747 -0
- package/dist/lib/neutral/chunk-7PI7C4EF.mjs.map +7 -0
- package/dist/lib/neutral/chunk-BBFJWWAV.mjs +51 -0
- package/dist/lib/neutral/chunk-BBFJWWAV.mjs.map +7 -0
- package/dist/lib/neutral/chunk-EVK6XBXO.mjs +56 -0
- package/dist/lib/neutral/chunk-EVK6XBXO.mjs.map +7 -0
- package/dist/lib/neutral/chunk-IGK6FN65.mjs +27 -0
- package/dist/lib/neutral/chunk-IGK6FN65.mjs.map +7 -0
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +7 -0
- package/dist/lib/neutral/chunk-LWXVKPPW.mjs +281 -0
- package/dist/lib/neutral/chunk-LWXVKPPW.mjs.map +7 -0
- package/dist/lib/neutral/chunk-MZ7K3MLL.mjs +48 -0
- package/dist/lib/neutral/chunk-MZ7K3MLL.mjs.map +7 -0
- package/dist/lib/neutral/chunk-O6BH7EPN.mjs +94 -0
- package/dist/lib/neutral/chunk-O6BH7EPN.mjs.map +7 -0
- package/dist/lib/neutral/chunk-QQIYS74I.mjs +336 -0
- 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-RIVWNMSF.mjs +41 -0
- package/dist/lib/neutral/chunk-RIVWNMSF.mjs.map +7 -0
- package/dist/lib/neutral/chunk-SBVFRTST.mjs +160 -0
- 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-TFEWTY5A.mjs +428 -0
- package/dist/lib/neutral/chunk-TFEWTY5A.mjs.map +7 -0
- package/dist/lib/neutral/chunk-TYGKCRMK.mjs +437 -0
- package/dist/lib/neutral/chunk-TYGKCRMK.mjs.map +7 -0
- package/dist/lib/neutral/chunk-UUP46KUQ.mjs +205 -0
- 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-WTQJHC75.mjs +395 -0
- 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-ZGNNFYHS.mjs +132 -0
- package/dist/lib/neutral/chunk-ZGNNFYHS.mjs.map +7 -0
- package/dist/lib/neutral/index.mjs +111 -0
- package/dist/lib/neutral/index.mjs.map +7 -0
- package/dist/lib/neutral/internal/index.mjs +539 -0
- package/dist/lib/neutral/internal/index.mjs.map +7 -0
- package/dist/lib/neutral/meta.json +1 -0
- package/dist/lib/neutral/testing/index.mjs +458 -0
- package/dist/lib/neutral/testing/index.mjs.map +7 -0
- package/dist/types/src/Annotation.d.ts +128 -0
- package/dist/types/src/Annotation.d.ts.map +1 -0
- 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 +15 -0
- package/dist/types/src/Collection.d.ts.map +1 -0
- package/dist/types/src/Database.d.ts +208 -0
- package/dist/types/src/Database.d.ts.map +1 -0
- package/dist/types/src/Dataset.d.ts +29 -0
- package/dist/types/src/Dataset.d.ts.map +1 -0
- package/dist/types/src/Entity.d.ts +247 -0
- package/dist/types/src/Entity.d.ts.map +1 -0
- package/dist/types/src/Entity.test.d.ts +2 -0
- package/dist/types/src/Entity.test.d.ts.map +1 -0
- package/dist/types/src/Err.d.ts +107 -0
- package/dist/types/src/Err.d.ts.map +1 -0
- package/dist/types/src/Feed.d.ts +229 -0
- package/dist/types/src/Feed.d.ts.map +1 -0
- package/dist/types/src/Filter.d.ts +175 -0
- package/dist/types/src/Filter.d.ts.map +1 -0
- package/dist/types/src/Filter.test.d.ts +2 -0
- package/dist/types/src/Filter.test.d.ts.map +1 -0
- package/dist/types/src/Format.d.ts +2 -0
- package/dist/types/src/Format.d.ts.map +1 -0
- package/dist/types/src/Hypergraph.d.ts +70 -0
- package/dist/types/src/Hypergraph.d.ts.map +1 -0
- 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 +16 -0
- package/dist/types/src/JsonSchema.d.ts.map +1 -0
- package/dist/types/src/Key.d.ts +2 -1
- package/dist/types/src/Key.d.ts.map +1 -1
- package/dist/types/src/Migration.d.ts +72 -0
- package/dist/types/src/Migration.d.ts.map +1 -0
- package/dist/types/src/Obj.d.ts +514 -53
- package/dist/types/src/Obj.d.ts.map +1 -1
- package/dist/types/src/Obj.test.d.ts +2 -0
- package/dist/types/src/Obj.test.d.ts.map +1 -0
- package/dist/types/src/Order.d.ts +26 -0
- package/dist/types/src/Order.d.ts.map +1 -0
- package/dist/types/src/Query.d.ts +231 -0
- package/dist/types/src/Query.d.ts.map +1 -0
- package/dist/types/src/Query.test.d.ts +2 -0
- package/dist/types/src/Query.test.d.ts.map +1 -0
- package/dist/types/src/QueryResult.d.ts +101 -0
- package/dist/types/src/QueryResult.d.ts.map +1 -0
- package/dist/types/src/Ref.d.ts +69 -11
- 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 +323 -24
- package/dist/types/src/Relation.d.ts.map +1 -1
- package/dist/types/src/Relation.test.d.ts +2 -0
- package/dist/types/src/Relation.test.d.ts.map +1 -0
- package/dist/types/src/Scope.d.ts +35 -0
- package/dist/types/src/Scope.d.ts.map +1 -0
- package/dist/types/src/Tag.d.ts +34 -0
- package/dist/types/src/Tag.d.ts.map +1 -0
- package/dist/types/src/Type.d.ts +397 -107
- package/dist/types/src/Type.d.ts.map +1 -1
- package/dist/types/src/Type.test.d.ts +2 -0
- package/dist/types/src/Type.test.d.ts.map +1 -0
- package/dist/types/src/View.d.ts +65 -0
- package/dist/types/src/View.d.ts.map +1 -0
- 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/hierarchy.test.d.ts +2 -0
- package/dist/types/src/hierarchy.test.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +22 -3
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/internal/Annotation/annotations.d.ts +272 -0
- package/dist/types/src/internal/Annotation/annotations.d.ts.map +1 -0
- package/dist/types/src/internal/Annotation/annotations.test.d.ts +2 -0
- package/dist/types/src/internal/Annotation/annotations.test.d.ts.map +1 -0
- 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 +6 -0
- package/dist/types/src/internal/Annotation/index.d.ts.map +1 -0
- package/dist/types/src/internal/Annotation/sorting.d.ts +24 -0
- package/dist/types/src/internal/Annotation/sorting.d.ts.map +1 -0
- package/dist/types/src/internal/Annotation/util.d.ts +48 -0
- package/dist/types/src/internal/Annotation/util.d.ts.map +1 -0
- package/dist/types/src/internal/Entity/api.d.ts +27 -0
- package/dist/types/src/internal/Entity/api.d.ts.map +1 -0
- package/dist/types/src/internal/Entity/entity.d.ts +84 -0
- package/dist/types/src/internal/Entity/entity.d.ts.map +1 -0
- 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 +10 -0
- package/dist/types/src/internal/Entity/index.d.ts.map +1 -0
- package/dist/types/src/internal/Entity/model.d.ts +59 -0
- package/dist/types/src/internal/Entity/model.d.ts.map +1 -0
- package/dist/types/src/internal/Entity/object.d.ts +18 -0
- package/dist/types/src/internal/Entity/object.d.ts.map +1 -0
- package/dist/types/src/internal/Entity/relation.d.ts +58 -0
- package/dist/types/src/internal/Entity/relation.d.ts.map +1 -0
- 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/util.d.ts +2 -0
- package/dist/types/src/internal/Entity/util.d.ts.map +1 -0
- package/dist/types/src/internal/Entity/version.d.ts +42 -0
- package/dist/types/src/internal/Entity/version.d.ts.map +1 -0
- package/dist/types/src/internal/Format/date.d.ts +63 -0
- package/dist/types/src/internal/Format/date.d.ts.map +1 -0
- package/dist/types/src/internal/Format/date.test.d.ts +2 -0
- package/dist/types/src/internal/Format/date.test.d.ts.map +1 -0
- package/dist/types/src/internal/Format/format.d.ts +33 -0
- package/dist/types/src/internal/Format/format.d.ts.map +1 -0
- package/dist/types/src/internal/Format/format.test.d.ts +2 -0
- package/dist/types/src/internal/Format/format.test.d.ts.map +1 -0
- package/dist/types/src/internal/Format/index.d.ts +8 -0
- package/dist/types/src/internal/Format/index.d.ts.map +1 -0
- package/dist/types/src/internal/Format/number.d.ts +31 -0
- package/dist/types/src/internal/Format/number.d.ts.map +1 -0
- package/dist/types/src/internal/Format/object.d.ts +37 -0
- package/dist/types/src/internal/Format/object.d.ts.map +1 -0
- package/dist/types/src/internal/Format/select.d.ts +13 -0
- package/dist/types/src/internal/Format/select.d.ts.map +1 -0
- package/dist/types/src/internal/Format/string.d.ts +42 -0
- package/dist/types/src/internal/Format/string.d.ts.map +1 -0
- package/dist/types/src/internal/Format/types.d.ts +72 -0
- package/dist/types/src/internal/Format/types.d.ts.map +1 -0
- package/dist/types/src/internal/JsonSchema/annotations.d.ts +19 -0
- package/dist/types/src/internal/JsonSchema/annotations.d.ts.map +1 -0
- package/dist/types/src/internal/JsonSchema/effect-schema.test.d.ts +2 -0
- package/dist/types/src/internal/JsonSchema/effect-schema.test.d.ts.map +1 -0
- package/dist/types/src/internal/JsonSchema/index.d.ts +5 -0
- package/dist/types/src/internal/JsonSchema/index.d.ts.map +1 -0
- package/dist/types/src/internal/JsonSchema/json-schema-normalize.d.ts +7 -0
- package/dist/types/src/internal/JsonSchema/json-schema-normalize.d.ts.map +1 -0
- package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts +351 -0
- package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts.map +1 -0
- package/dist/types/src/internal/JsonSchema/json-schema.d.ts +31 -0
- package/dist/types/src/internal/JsonSchema/json-schema.d.ts.map +1 -0
- package/dist/types/src/internal/JsonSchema/json-schema.test.d.ts +2 -0
- package/dist/types/src/internal/JsonSchema/json-schema.test.d.ts.map +1 -0
- 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 +8 -0
- package/dist/types/src/internal/Obj/clone.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/common.d.ts +18 -0
- package/dist/types/src/internal/Obj/common.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/create-object.d.ts +39 -0
- package/dist/types/src/internal/Obj/create-object.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/create-object.test.d.ts +2 -0
- package/dist/types/src/internal/Obj/create-object.test.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/deleted.d.ts +6 -0
- package/dist/types/src/internal/Obj/deleted.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/index.d.ts +11 -0
- package/dist/types/src/internal/Obj/index.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/inspect.d.ts +2 -0
- package/dist/types/src/internal/Obj/inspect.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/json-serializer.d.ts +45 -0
- package/dist/types/src/internal/Obj/json-serializer.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/json-serializer.test.d.ts +2 -0
- package/dist/types/src/internal/Obj/json-serializer.test.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/schema-validator.d.ts +2 -0
- package/dist/types/src/internal/Obj/schema-validator.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/schema-validator.test.d.ts +2 -0
- package/dist/types/src/internal/Obj/schema-validator.test.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/set-value.d.ts +7 -0
- package/dist/types/src/internal/Obj/set-value.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/set-value.test.d.ts +2 -0
- package/dist/types/src/internal/Obj/set-value.test.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/snapshot.d.ts +6 -0
- package/dist/types/src/internal/Obj/snapshot.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/typed-object.d.ts +25 -0
- package/dist/types/src/internal/Obj/typed-object.d.ts.map +1 -0
- package/dist/types/src/internal/Obj/typed-object.test.d.ts +2 -0
- package/dist/types/src/internal/Obj/typed-object.test.d.ts.map +1 -0
- 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/pretty.d.ts +10 -0
- 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/index.d.ts +3 -0
- package/dist/types/src/internal/Ref/index.d.ts.map +1 -0
- package/dist/types/src/internal/Ref/ref-array.d.ts +21 -0
- package/dist/types/src/internal/Ref/ref-array.d.ts.map +1 -0
- package/dist/types/src/internal/Ref/ref.d.ts +262 -0
- package/dist/types/src/internal/Ref/ref.d.ts.map +1 -0
- package/dist/types/src/internal/Ref/ref.test.d.ts +2 -0
- package/dist/types/src/internal/Ref/ref.test.d.ts.map +1 -0
- package/dist/types/src/internal/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 +7 -0
- package/dist/types/src/internal/Type/compose.d.ts.map +1 -0
- package/dist/types/src/internal/Type/compose.test.d.ts +2 -0
- package/dist/types/src/internal/Type/compose.test.d.ts.map +1 -0
- package/dist/types/src/internal/Type/index.d.ts +3 -0
- package/dist/types/src/internal/Type/index.d.ts.map +1 -0
- package/dist/types/src/internal/Type/manipulation.d.ts +9 -0
- package/dist/types/src/internal/Type/manipulation.d.ts.map +1 -0
- 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/index.d.ts +11 -0
- package/dist/types/src/internal/common/api/index.d.ts.map +1 -0
- package/dist/types/src/internal/common/api/meta.d.ts +45 -0
- package/dist/types/src/internal/common/api/meta.d.ts.map +1 -0
- package/dist/types/src/internal/common/index.d.ts +4 -0
- package/dist/types/src/internal/common/index.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/change-context.d.ts +55 -0
- package/dist/types/src/internal/common/proxy/change-context.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/change.test.d.ts +2 -0
- package/dist/types/src/internal/common/proxy/change.test.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts +5 -0
- package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/errors.d.ts +19 -0
- package/dist/types/src/internal/common/proxy/errors.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/event-batch.d.ts +10 -0
- package/dist/types/src/internal/common/proxy/event-batch.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/handler.test.d.ts +2 -0
- package/dist/types/src/internal/common/proxy/handler.test.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/index.d.ts +14 -0
- package/dist/types/src/internal/common/proxy/index.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/json-serializer.d.ts +6 -0
- package/dist/types/src/internal/common/proxy/json-serializer.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/make-object.d.ts +20 -0
- package/dist/types/src/internal/common/proxy/make-object.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/ownership.d.ts +57 -0
- package/dist/types/src/internal/common/proxy/ownership.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/proxy-types.d.ts +18 -0
- package/dist/types/src/internal/common/proxy/proxy-types.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/proxy-utils.d.ts +47 -0
- package/dist/types/src/internal/common/proxy/proxy-utils.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/reactive-array.d.ts +8 -0
- package/dist/types/src/internal/common/proxy/reactive-array.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/reactive.d.ts +39 -0
- package/dist/types/src/internal/common/proxy/reactive.d.ts.map +1 -0
- 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 +15 -0
- package/dist/types/src/internal/common/proxy/schema-validator.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/schema.test.d.ts +2 -0
- package/dist/types/src/internal/common/proxy/schema.test.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/symbols.d.ts +3 -0
- package/dist/types/src/internal/common/proxy/symbols.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/typed-handler.d.ts +64 -0
- package/dist/types/src/internal/common/proxy/typed-handler.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/typed-handler.test.d.ts +2 -0
- package/dist/types/src/internal/common/proxy/typed-handler.test.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/typed-object.test.d.ts +2 -0
- package/dist/types/src/internal/common/proxy/typed-object.test.d.ts.map +1 -0
- package/dist/types/src/internal/common/types/base.d.ts +27 -0
- package/dist/types/src/internal/common/types/base.d.ts.map +1 -0
- package/dist/types/src/internal/common/types/entity.d.ts +94 -0
- package/dist/types/src/internal/common/types/entity.d.ts.map +1 -0
- package/dist/types/src/internal/common/types/index.d.ts +7 -0
- package/dist/types/src/internal/common/types/index.d.ts.map +1 -0
- package/dist/types/src/internal/common/types/meta.d.ts +54 -0
- package/dist/types/src/internal/common/types/meta.d.ts.map +1 -0
- package/dist/types/src/internal/common/types/model-symbols.d.ts +65 -0
- package/dist/types/src/internal/common/types/model-symbols.d.ts.map +1 -0
- package/dist/types/src/internal/common/types/typename.d.ts +28 -0
- package/dist/types/src/internal/common/types/typename.d.ts.map +1 -0
- package/dist/types/src/internal/common/types/version.d.ts +15 -0
- package/dist/types/src/internal/common/types/version.d.ts.map +1 -0
- 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 +11 -0
- package/dist/types/src/internal/index.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 +4 -1
- 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 +18 -0
- package/dist/types/src/testing/test-data.d.ts.map +1 -0
- package/dist/types/src/testing/test-schema.d.ts +298 -0
- package/dist/types/src/testing/test-schema.d.ts.map +1 -0
- package/dist/types/src/testing/util.d.ts +23 -0
- package/dist/types/src/testing/util.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +122 -57
- package/src/Annotation.test.ts +439 -0
- package/src/Annotation.ts +202 -0
- package/src/Collection.ts +33 -0
- package/src/Database.ts +345 -0
- package/src/Dataset.ts +34 -0
- package/src/Entity.test.ts +132 -0
- package/src/Entity.ts +345 -0
- package/src/Err.ts +40 -0
- package/src/Feed.ts +352 -0
- package/src/Filter.test.ts +90 -0
- package/src/Filter.ts +484 -0
- package/src/Format.ts +5 -0
- package/src/Hypergraph.ts +84 -0
- package/src/Json.test.ts +175 -0
- package/src/Json.ts +103 -0
- package/src/JsonSchema.ts +26 -0
- package/src/Key.ts +4 -1
- package/src/Migration.ts +114 -0
- package/src/Obj.test.ts +641 -0
- package/src/Obj.ts +836 -105
- package/src/Order.ts +68 -0
- package/src/Query.test.ts +835 -0
- package/src/Query.ts +634 -0
- package/src/QueryResult.ts +132 -0
- package/src/Ref.ts +97 -10
- package/src/Registry.ts +155 -0
- package/src/Relation.test.ts +88 -0
- package/src/Relation.ts +508 -61
- package/src/Scope.ts +50 -0
- package/src/Tag.md +88 -0
- package/src/Tag.ts +84 -0
- package/src/Type.test.ts +257 -0
- package/src/Type.ts +643 -152
- package/src/View.ts +98 -0
- package/src/exemplars.test.ts +21 -0
- package/src/hierarchy.test.ts +33 -0
- package/src/index.ts +24 -4
- package/src/internal/Annotation/annotations.test.ts +165 -0
- package/src/internal/Annotation/annotations.ts +609 -0
- package/src/internal/Annotation/dictionary.ts +47 -0
- package/src/internal/Annotation/entity-dictionary.ts +74 -0
- package/src/internal/Annotation/index.ts +9 -0
- package/src/internal/Annotation/sorting.ts +51 -0
- package/src/internal/Annotation/util.ts +94 -0
- package/src/internal/Entity/api.ts +77 -0
- package/src/internal/Entity/entity.ts +277 -0
- package/src/internal/Entity/guard.ts +26 -0
- package/src/internal/Entity/index.ts +13 -0
- package/src/internal/Entity/model.ts +119 -0
- package/src/internal/Entity/object.ts +73 -0
- package/src/internal/Entity/relation.ts +188 -0
- package/src/internal/Entity/type-kind.ts +75 -0
- package/src/internal/Entity/type-uri.ts +92 -0
- package/src/internal/Entity/util.ts +33 -0
- package/src/internal/Entity/version.ts +96 -0
- package/src/internal/Format/date.test.ts +55 -0
- package/src/internal/Format/date.ts +213 -0
- package/src/internal/Format/format.test.ts +97 -0
- package/src/internal/Format/format.ts +54 -0
- package/src/internal/Format/index.ts +11 -0
- package/src/internal/Format/number.ts +89 -0
- package/src/internal/Format/object.ts +97 -0
- package/src/internal/Format/select.ts +18 -0
- package/src/internal/Format/string.ts +81 -0
- package/src/internal/Format/types.ts +186 -0
- package/src/internal/JsonSchema/annotations.ts +50 -0
- package/src/internal/JsonSchema/effect-schema.test.ts +143 -0
- package/src/internal/JsonSchema/index.ts +8 -0
- package/src/internal/JsonSchema/json-schema-normalize.ts +111 -0
- package/src/internal/JsonSchema/json-schema-type.ts +403 -0
- package/src/internal/JsonSchema/json-schema.test.ts +786 -0
- package/src/internal/JsonSchema/json-schema.ts +547 -0
- package/src/internal/Obj/atoms.ts +244 -0
- package/src/internal/Obj/clone.ts +53 -0
- package/src/internal/Obj/common.ts +75 -0
- package/src/internal/Obj/create-object.test.ts +116 -0
- package/src/internal/Obj/create-object.ts +140 -0
- package/src/internal/Obj/deleted.ts +19 -0
- package/src/internal/Obj/index.ts +14 -0
- package/src/internal/Obj/inspect.ts +48 -0
- package/src/internal/Obj/json-serializer.test.ts +199 -0
- package/src/internal/Obj/json-serializer.ts +278 -0
- package/src/internal/Obj/schema-validator.test.ts +182 -0
- package/src/internal/Obj/schema-validator.ts +6 -0
- package/src/internal/Obj/set-value.test.ts +258 -0
- package/src/internal/Obj/set-value.ts +158 -0
- package/src/internal/Obj/snapshot.ts +114 -0
- package/src/internal/Obj/typed-object.test.ts +32 -0
- package/src/internal/Obj/typed-object.ts +30 -0
- package/src/{query → internal/Query}/index.ts +1 -1
- package/src/internal/Query/pretty.ts +162 -0
- package/src/internal/Ref/atoms.ts +20 -0
- package/src/internal/Ref/index.ts +6 -0
- package/src/internal/Ref/ref-array.ts +38 -0
- package/src/internal/Ref/ref.test.ts +91 -0
- package/src/internal/Ref/ref.ts +650 -0
- package/src/internal/Ref/utils.ts +45 -0
- package/src/internal/Type/compose.test.ts +43 -0
- package/src/internal/Type/compose.ts +41 -0
- package/src/internal/Type/index.ts +6 -0
- package/src/internal/Type/manipulation.ts +67 -0
- package/src/internal/Type/type-schema.ts +60 -0
- package/src/internal/common/README.md +102 -0
- package/src/internal/common/api/index.ts +15 -0
- package/src/internal/common/api/meta.ts +90 -0
- package/src/internal/common/index.ts +7 -0
- package/src/internal/common/proxy/change-context.ts +138 -0
- package/src/internal/common/proxy/change.test.ts +527 -0
- package/src/internal/common/proxy/define-hidden-property.ts +14 -0
- package/src/internal/common/proxy/errors.ts +42 -0
- package/src/internal/common/proxy/event-batch.ts +44 -0
- package/src/internal/common/proxy/handler.test.ts +121 -0
- package/src/internal/common/proxy/index.ts +17 -0
- package/src/internal/common/proxy/json-serializer.ts +101 -0
- package/src/internal/common/proxy/make-object.ts +129 -0
- package/src/internal/common/proxy/ownership.ts +252 -0
- package/src/internal/common/proxy/proxy-types.ts +23 -0
- package/src/internal/common/proxy/proxy-utils.ts +150 -0
- package/src/internal/common/proxy/reactive-array.ts +71 -0
- package/src/internal/common/proxy/reactive.test.ts +54 -0
- package/src/internal/common/proxy/reactive.ts +77 -0
- package/src/internal/common/proxy/schema-validator.ts +244 -0
- package/src/internal/common/proxy/schema.test.ts +107 -0
- package/src/internal/common/proxy/symbols.ts +7 -0
- package/src/internal/common/proxy/typed-handler.test.ts +314 -0
- package/src/internal/common/proxy/typed-handler.ts +509 -0
- package/src/internal/common/proxy/typed-object.test.ts +103 -0
- package/src/internal/common/types/base.ts +43 -0
- package/src/internal/common/types/entity.ts +133 -0
- package/src/internal/common/types/index.ts +15 -0
- package/src/internal/common/types/meta.ts +109 -0
- package/src/internal/common/types/model-symbols.ts +89 -0
- package/src/internal/common/types/typename.ts +91 -0
- package/src/internal/common/types/version.ts +19 -0
- package/src/internal/common/types/well-known-types.ts +15 -0
- package/src/internal/index.ts +19 -0
- package/src/testing/api.test.ts +131 -0
- package/src/testing/index.ts +4 -1
- package/src/testing/registry.ts +44 -0
- package/src/testing/test-data.ts +189 -0
- package/src/testing/test-schema.ts +204 -0
- package/src/testing/util.ts +88 -0
- package/dist/lib/browser/chunk-NLPBTYZV.mjs +0 -647
- package/dist/lib/browser/chunk-NLPBTYZV.mjs.map +0 -7
- package/dist/lib/browser/index.mjs +0 -22
- package/dist/lib/browser/meta.json +0 -1
- package/dist/lib/browser/testing/index.mjs +0 -70
- package/dist/lib/browser/testing/index.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-BQZZRMFX.mjs +0 -647
- package/dist/lib/node-esm/chunk-BQZZRMFX.mjs.map +0 -7
- package/dist/lib/node-esm/index.mjs +0 -22
- package/dist/lib/node-esm/meta.json +0 -1
- package/dist/lib/node-esm/testing/index.mjs +0 -70
- package/dist/lib/node-esm/testing/index.mjs.map +0 -7
- package/dist/types/src/experimental/database.d.ts +0 -8
- package/dist/types/src/experimental/database.d.ts.map +0 -1
- package/dist/types/src/experimental/index.d.ts +0 -1
- package/dist/types/src/experimental/index.d.ts.map +0 -1
- package/dist/types/src/experimental/queue.d.ts +0 -8
- package/dist/types/src/experimental/queue.d.ts.map +0 -1
- package/dist/types/src/experimental/space.d.ts +0 -8
- package/dist/types/src/experimental/space.d.ts.map +0 -1
- package/dist/types/src/query/dsl.d.ts +0 -218
- package/dist/types/src/query/dsl.d.ts.map +0 -1
- package/dist/types/src/query/dsl.test.d.ts +0 -2
- package/dist/types/src/query/dsl.test.d.ts.map +0 -1
- package/dist/types/src/query/index.d.ts +0 -2
- package/dist/types/src/query/index.d.ts.map +0 -1
- package/dist/types/src/testing/types.d.ts +0 -113
- package/dist/types/src/testing/types.d.ts.map +0 -1
- package/src/experimental/database.ts +0 -11
- package/src/experimental/index.ts +0 -7
- package/src/experimental/queue.ts +0 -11
- package/src/experimental/space.ts +0 -11
- package/src/query/dsl.test.ts +0 -324
- package/src/query/dsl.ts +0 -646
- package/src/test/api.test.ts +0 -173
- package/src/testing/types.ts +0 -91
- /package/dist/lib/{browser/index.mjs.map → neutral/Annotation.mjs.map} +0 -0
- /package/dist/lib/{node-esm/index.mjs.map → neutral/Database.mjs.map} +0 -0
- /package/dist/types/src/{test → testing}/api.test.d.ts +0 -0
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
// @import-as-namespace
|
|
6
|
+
|
|
7
|
+
export {
|
|
8
|
+
DescriptionAnnotation,
|
|
9
|
+
FieldLookupAnnotationId,
|
|
10
|
+
FormInputAnnotation,
|
|
11
|
+
FormInlineAnnotation,
|
|
12
|
+
GeneratorAnnotation,
|
|
13
|
+
GeneratorAnnotationId,
|
|
14
|
+
type GeneratorAnnotationValue,
|
|
15
|
+
LabelAnnotation,
|
|
16
|
+
ReferenceAnnotation,
|
|
17
|
+
ReferenceAnnotationId,
|
|
18
|
+
type ReferenceAnnotationValue,
|
|
19
|
+
HiddenAnnotation,
|
|
20
|
+
TypeAnnotation,
|
|
21
|
+
getDescriptionWithSchema,
|
|
22
|
+
getLabelWithSchema,
|
|
23
|
+
getTypeAnnotation,
|
|
24
|
+
getTypeIdentifierAnnotation,
|
|
25
|
+
setDescriptionWithSchema,
|
|
26
|
+
setLabelWithSchema,
|
|
27
|
+
IconAnnotation,
|
|
28
|
+
IconFromRefAnnotation,
|
|
29
|
+
} from './internal/Annotation';
|
|
30
|
+
|
|
31
|
+
import * as Function from 'effect/Function';
|
|
32
|
+
import * as Option from 'effect/Option';
|
|
33
|
+
import * as Schema from 'effect/Schema';
|
|
34
|
+
import * as SchemaAST from 'effect/SchemaAST';
|
|
35
|
+
import * as Types from 'effect/Types';
|
|
36
|
+
|
|
37
|
+
import * as Entity from './Entity';
|
|
38
|
+
import * as internalAnnotations from './internal/Annotation';
|
|
39
|
+
|
|
40
|
+
export const TypeId = '~@dxos/echo/Annotation' as const;
|
|
41
|
+
export type TypeId = typeof TypeId;
|
|
42
|
+
|
|
43
|
+
// TODO(dmaretskyi): Reconcile different get/set styles: mutate in-place, return.
|
|
44
|
+
// TODO(dmaretskyi): Reconcile Annotation methods vs static functions.
|
|
45
|
+
// TODO(dmaretskyi): Reconcile Annotation.Key vs DXN -- work-out approach to versioning.
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Annotation is a typed property that can be assigned to a schema or an entity instance.
|
|
49
|
+
*/
|
|
50
|
+
export interface Annotation<T> {
|
|
51
|
+
[TypeId]: {
|
|
52
|
+
_Type: T;
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
// TODO(dmaretskyi): Make this a DXN?
|
|
56
|
+
/**
|
|
57
|
+
* Unique fully-qualified identifier for the annotation.
|
|
58
|
+
* @example "org.dxos.annotation.color"
|
|
59
|
+
*/
|
|
60
|
+
readonly key: Key;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Schema of the annotation value.
|
|
64
|
+
*/
|
|
65
|
+
readonly schema: Schema.Schema<T, unknown, never>;
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Get the annotation value from an Effect schema.
|
|
69
|
+
*
|
|
70
|
+
* Only accepts `Schema.Schema.Any` — to read an annotation off a `Type.Type`
|
|
71
|
+
* entity, unwrap it first with `Type.getSchema(entity)`. This keeps the
|
|
72
|
+
* annotation pipeline single-shaped and forces annotations to live on the
|
|
73
|
+
* source schema, not on the post-construction Type entity.
|
|
74
|
+
*/
|
|
75
|
+
get: (schema: Schema.Schema.Any) => Option.Option<T>;
|
|
76
|
+
/**
|
|
77
|
+
* Get the annotation value from the AST.
|
|
78
|
+
*/
|
|
79
|
+
getFromAst: (ast: SchemaAST.AST) => Option.Option<T>;
|
|
80
|
+
/**
|
|
81
|
+
* Set the annotation on an Effect schema.
|
|
82
|
+
*
|
|
83
|
+
* Only accepts `Schema.Schema.Any` — annotations must be applied to the
|
|
84
|
+
* source schema BEFORE wrapping it with `Type.makeObject` / `Type.makeRelation`.
|
|
85
|
+
* In a pipe, place every `Annotation.X.set(...)` before the `Type.make...` step.
|
|
86
|
+
*/
|
|
87
|
+
set: (value: T) => <S extends Schema.Schema.Any>(schema: S) => S;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export const Key = internalAnnotations.Key;
|
|
91
|
+
export type Key = Schema.Schema.Type<typeof Key>;
|
|
92
|
+
|
|
93
|
+
interface MakeProps<T> {
|
|
94
|
+
id: string;
|
|
95
|
+
schema: Schema.Schema<T, any, never>;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Create a new schema annotation.
|
|
100
|
+
* Annotation can be assigned both to fields and to the schema itself.
|
|
101
|
+
* Annotation is serialized with the schema.
|
|
102
|
+
*
|
|
103
|
+
* @example
|
|
104
|
+
* ```ts
|
|
105
|
+
* const ColorAnnotation = Annotation.make({
|
|
106
|
+
* id: 'org.dxos.annotation.color',
|
|
107
|
+
* schema: Schema.String,
|
|
108
|
+
* });
|
|
109
|
+
*
|
|
110
|
+
* const schema = Schema.String.annotations(ColorAnnotation.set('red'));
|
|
111
|
+
* ```
|
|
112
|
+
*/
|
|
113
|
+
export const make: <T>(props: MakeProps<T>) => Annotation<T> = internalAnnotations.makeUserAnnotation;
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Get the value of an annotation from an entity instance or snapshot.
|
|
117
|
+
* For schema-level reads use the annotation instance method (e.g. `ColorAnnotation.get(schema)`).
|
|
118
|
+
* For getting an annotation value from a dictionary, use `getDictionary`.
|
|
119
|
+
*/
|
|
120
|
+
export const get: {
|
|
121
|
+
<T>(annotation: Annotation<T>): (target: Entity.Unknown | Entity.Snapshot) => Option.Option<T>;
|
|
122
|
+
<T>(target: Entity.Unknown | Entity.Snapshot, annotation: Annotation<T>): Option.Option<T>;
|
|
123
|
+
} = Function.dual<
|
|
124
|
+
<T>(annotation: Annotation<T>) => (target: Entity.Unknown | Entity.Snapshot) => Option.Option<T>,
|
|
125
|
+
<T>(target: Entity.Unknown | Entity.Snapshot, annotation: Annotation<T>) => Option.Option<T>
|
|
126
|
+
>(2, (target, annotation) => {
|
|
127
|
+
return internalAnnotations.get(target, annotation);
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Set the value of an annotation on an entity instance.
|
|
132
|
+
* For schema-level writes use the annotation instance method (e.g. `ColorAnnotation.set('red')`).
|
|
133
|
+
* For setting an annotation value on a dictionary, use `setDictionary`.
|
|
134
|
+
*/
|
|
135
|
+
export const set: {
|
|
136
|
+
<T>(annotation: Annotation<T>, value: T): (target: Entity.Mutable<Entity.Unknown>) => void;
|
|
137
|
+
<T>(target: Entity.Mutable<Entity.Unknown>, annotation: Annotation<T>, value: T): void;
|
|
138
|
+
} = Function.dual<
|
|
139
|
+
<T>(annotation: Annotation<T>, value: T) => (target: Entity.Mutable<Entity.Unknown>) => void,
|
|
140
|
+
<T>(target: Entity.Mutable<Entity.Unknown>, annotation: Annotation<T>, value: T) => void
|
|
141
|
+
>(3, (target, annotation, value) => {
|
|
142
|
+
return internalAnnotations.set(target, annotation, value);
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
export const getFromAst: {
|
|
146
|
+
<T>(annotation: Annotation<T>): (ast: SchemaAST.AST) => Option.Option<T>;
|
|
147
|
+
<T>(ast: SchemaAST.AST, annotation: Annotation<T>): Option.Option<T>;
|
|
148
|
+
} = Function.dual<
|
|
149
|
+
<T>(annotation: Annotation<T>) => (ast: SchemaAST.AST) => Option.Option<T>,
|
|
150
|
+
<T>(ast: SchemaAST.AST, annotation: Annotation<T>) => Option.Option<T>
|
|
151
|
+
>(2, (ast, annotation) => {
|
|
152
|
+
return internalAnnotations.getFromAst(ast, annotation);
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Set of annotation values.
|
|
157
|
+
*
|
|
158
|
+
* Can be used inside an object/relation schema:
|
|
159
|
+
*
|
|
160
|
+
* ```ts
|
|
161
|
+
* const Person = Schema.Struct({
|
|
162
|
+
* name: Schema.String,
|
|
163
|
+
* extensions: Annotation.Dictionary,
|
|
164
|
+
* });
|
|
165
|
+
* ```
|
|
166
|
+
*/
|
|
167
|
+
export const Dictionary = internalAnnotations.Dictionary;
|
|
168
|
+
export interface Dictionary extends Schema.Schema.Type<typeof Dictionary> {}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Get the value of an annotation from a Dictionary.
|
|
172
|
+
*/
|
|
173
|
+
export const getDictionary: {
|
|
174
|
+
<T>(annotation: Annotation<T>): (values: Dictionary) => Option.Option<T>;
|
|
175
|
+
<T>(values: Dictionary, annotation: Annotation<T>): Option.Option<T>;
|
|
176
|
+
} = Function.dual<
|
|
177
|
+
<T>(annotation: Annotation<T>) => (values: Dictionary) => Option.Option<T>,
|
|
178
|
+
<T>(values: Dictionary, annotation: Annotation<T>) => Option.Option<T>
|
|
179
|
+
>(2, (values, annotation) => {
|
|
180
|
+
return internalAnnotations.getDictionary(values, annotation);
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Set the value of an annotation in a Dictionary.
|
|
185
|
+
*
|
|
186
|
+
* Can also be used within Obj.update callback:
|
|
187
|
+
*
|
|
188
|
+
* ```ts
|
|
189
|
+
* Obj.update(obj, (obj) => {
|
|
190
|
+
* Annotation.setDictionary(obj.annotations, ColorAnnotation, 'red');
|
|
191
|
+
* });
|
|
192
|
+
* ```
|
|
193
|
+
*/
|
|
194
|
+
export const setDictionary: {
|
|
195
|
+
<T>(annotation: Annotation<T>, value: T): (values: Dictionary) => void;
|
|
196
|
+
<T>(values: Types.Mutable<Dictionary>, annotation: Annotation<T>, value: T): void;
|
|
197
|
+
} = Function.dual<
|
|
198
|
+
<T>(annotation: Annotation<T>, value: T) => (values: Dictionary) => void,
|
|
199
|
+
<T>(values: Types.Mutable<Dictionary>, annotation: Annotation<T>, value: T) => void
|
|
200
|
+
>(3, (values, annotation, value) => {
|
|
201
|
+
return internalAnnotations.setDictionary(values, annotation, value);
|
|
202
|
+
});
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2024 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
// @import-as-namespace
|
|
6
|
+
|
|
7
|
+
import * as Schema from 'effect/Schema';
|
|
8
|
+
|
|
9
|
+
import { DXN } from '@dxos/keys';
|
|
10
|
+
|
|
11
|
+
import * as Annotation from './Annotation';
|
|
12
|
+
import * as internal from './internal';
|
|
13
|
+
import * as Obj from './Obj';
|
|
14
|
+
import * as Ref from './Ref';
|
|
15
|
+
import * as Type from './Type';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* A an ordered set of objects.
|
|
19
|
+
*/
|
|
20
|
+
export const Collection = Schema.Struct({
|
|
21
|
+
name: Schema.String.pipe(Schema.optional),
|
|
22
|
+
objects: Schema.Array(Ref.Ref(Obj.Unknown)).pipe(internal.FormInputAnnotation.set(false)),
|
|
23
|
+
}).pipe(
|
|
24
|
+
Annotation.IconAnnotation.set({ icon: 'ph--folder--regular', hue: 'amber' }),
|
|
25
|
+
Type.makeObject(DXN.make('org.dxos.type.collection', '0.1.0')),
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
export type Collection = Type.InstanceType<typeof Collection>;
|
|
29
|
+
|
|
30
|
+
export const make = (props: Partial<Obj.MakeProps<typeof Collection>> = {}): Collection =>
|
|
31
|
+
Obj.make(Collection, { objects: [], ...props });
|
|
32
|
+
|
|
33
|
+
export const isCollection: (value: unknown) => value is Collection = Obj.instanceOf(Collection);
|
package/src/Database.ts
ADDED
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
// @import-as-namespace
|
|
6
|
+
|
|
7
|
+
import * as Context from 'effect/Context';
|
|
8
|
+
import * as Effect from 'effect/Effect';
|
|
9
|
+
import * as Effectable from 'effect/Effectable';
|
|
10
|
+
import * as Layer from 'effect/Layer';
|
|
11
|
+
import * as Option from 'effect/Option';
|
|
12
|
+
import * as Schema from 'effect/Schema';
|
|
13
|
+
|
|
14
|
+
import { EffectEx } from '@dxos/effect';
|
|
15
|
+
import { invariant } from '@dxos/invariant';
|
|
16
|
+
import { type SpaceId, type URI } from '@dxos/keys';
|
|
17
|
+
|
|
18
|
+
import type * as Entity from './Entity';
|
|
19
|
+
import * as Err from './Err';
|
|
20
|
+
import type * as Filter from './Filter';
|
|
21
|
+
import type * as Hypergraph from './Hypergraph';
|
|
22
|
+
import { type AnyProperties, EntityKind, KindId } from './internal/common/types';
|
|
23
|
+
// Deep import (not the `./internal/Entity` barrel) to avoid a cycle:
|
|
24
|
+
// Database → internal/Entity → entity → JsonSchema → Ref → Database.
|
|
25
|
+
import { isInstanceOf } from './internal/Entity/type-uri';
|
|
26
|
+
import type { Ref } from './internal/Ref/ref';
|
|
27
|
+
import type * as Obj from './Obj';
|
|
28
|
+
import type * as Query from './Query';
|
|
29
|
+
import type * as QueryResult from './QueryResult';
|
|
30
|
+
import type * as Registry from './Registry';
|
|
31
|
+
import type * as Type from './Type';
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* `query` API function declaration.
|
|
35
|
+
*/
|
|
36
|
+
// TODO(burdon): Reconcile Query and Filter (should only have one root type).
|
|
37
|
+
export interface QueryFn {
|
|
38
|
+
<Q extends Query.Any>(query: Q): QueryResult.QueryResult<Query.Type<Q>>;
|
|
39
|
+
<F extends Filter.Any>(filter: F): QueryResult.QueryResult<Filter.Type<F>>;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Common interface for Database, Feed, and Hypergraph.
|
|
44
|
+
*/
|
|
45
|
+
export interface Queryable {
|
|
46
|
+
query: QueryFn;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export type GetObjectByIdOptions = {
|
|
50
|
+
deleted?: boolean;
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
export type ObjectPlacement = 'root-doc' | 'linked-doc';
|
|
54
|
+
|
|
55
|
+
export type AddOptions = {
|
|
56
|
+
/**
|
|
57
|
+
* Where to place the object in the Automerge document tree.
|
|
58
|
+
* Root document is always loaded with the space.
|
|
59
|
+
* Linked documents are loaded lazily.
|
|
60
|
+
* Placing large number of objects in the root document may slow down the initial load.
|
|
61
|
+
*
|
|
62
|
+
* @default 'linked-doc'
|
|
63
|
+
*/
|
|
64
|
+
placeIn?: ObjectPlacement;
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Rejects Type entities from {@link Database.add} at compile time via their `[KindId]` brand. Used
|
|
69
|
+
* as `T & RejectTypeEntity<T>` to preserve inference of `T`. Bounding `add` on
|
|
70
|
+
* `Obj.Unknown | Relation.Unknown` instead would reject broadly-typed instance adds (e.g.
|
|
71
|
+
* `Entity.Any`, `Obj.OfShape<T>`), forcing casts repo-wide.
|
|
72
|
+
*/
|
|
73
|
+
export type RejectTypeEntity<T> = T extends { readonly [KindId]: EntityKind.Type }
|
|
74
|
+
? { __error: 'Type entities must be persisted via db.addType(), not db.add().' }
|
|
75
|
+
: T;
|
|
76
|
+
|
|
77
|
+
export type FlushOptions = {
|
|
78
|
+
/**
|
|
79
|
+
* Write any pending changes to disk.
|
|
80
|
+
* @default true
|
|
81
|
+
*/
|
|
82
|
+
disk?: boolean;
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Wait for pending index updates.
|
|
86
|
+
* @default true
|
|
87
|
+
*/
|
|
88
|
+
indexes?: boolean;
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Flush pending updates to objects and queries.
|
|
92
|
+
* @default false
|
|
93
|
+
*/
|
|
94
|
+
updates?: boolean;
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Identifier denoting an ECHO Database.
|
|
99
|
+
*/
|
|
100
|
+
export const TypeId = Symbol.for('@dxos/echo/Database');
|
|
101
|
+
export type TypeId = typeof TypeId;
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* ECHO Database interface.
|
|
105
|
+
*/
|
|
106
|
+
export interface Database extends Queryable {
|
|
107
|
+
readonly [TypeId]: TypeId;
|
|
108
|
+
|
|
109
|
+
get spaceId(): SpaceId;
|
|
110
|
+
|
|
111
|
+
get graph(): Hypergraph.Hypergraph;
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Registry for this database. Delegates type lookups to the shared hypergraph registry.
|
|
115
|
+
* To persist a schema so it replicates to other clients, add the type entity with
|
|
116
|
+
* {@link addType} (e.g. `await db.addType(Type.makeObjectFromJsonSchema(...))`).
|
|
117
|
+
*/
|
|
118
|
+
readonly registry: Registry.Registry;
|
|
119
|
+
|
|
120
|
+
toJSON(): object;
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Return object by local ID.
|
|
124
|
+
* @deprecated Use `db.query(Filter.id(id)).runSync()[0]` for a working-set lookup, or resolve via a {@link Ref}.
|
|
125
|
+
*/
|
|
126
|
+
getObjectById<T extends Obj.Unknown = Obj.OfShape<AnyProperties>>(
|
|
127
|
+
id: string,
|
|
128
|
+
opts?: GetObjectByIdOptions,
|
|
129
|
+
): T | undefined;
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Query objects.
|
|
133
|
+
*/
|
|
134
|
+
query: QueryFn;
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Creates a reference to an existing object in the database.
|
|
138
|
+
*
|
|
139
|
+
* NOTE: The reference may be dangling if the object is not present in the database.
|
|
140
|
+
* NOTE: Difference from `Ref.fromURI`
|
|
141
|
+
* `Ref.fromURI(dxn)` returns an unhydrated reference. The `.load` and `.target` APIs will not work.
|
|
142
|
+
* `db.makeRef(dxn)` is preferable in cases with access to the database.
|
|
143
|
+
*/
|
|
144
|
+
makeRef<T extends Entity.Unknown = Entity.Unknown>(uri: URI.URI): Ref<T>;
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Adds an object or relation to the database.
|
|
148
|
+
*
|
|
149
|
+
* Only Object and Relation entities are accepted. To persist a Type definition use
|
|
150
|
+
* {@link addType} — passing a Type entity is rejected at compile time (and at runtime).
|
|
151
|
+
*/
|
|
152
|
+
add<T extends Entity.Unknown = Entity.Unknown>(obj: T & RejectTypeEntity<T>, opts?: AddOptions): T;
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Persists a Type definition (clones/forks the entity) so it replicates to other peers.
|
|
156
|
+
*
|
|
157
|
+
* Runs a conflict query first: if a type with the same typename + version already exists in
|
|
158
|
+
* this space, the existing persisted entity is returned and no duplicate is created. This is
|
|
159
|
+
* the only supported way to add Type entities — {@link add} rejects them.
|
|
160
|
+
*/
|
|
161
|
+
addType<T extends Type.AnyEntity>(type: T): Promise<T>;
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Removes object from the database.
|
|
165
|
+
*/
|
|
166
|
+
// TODO(burdon): Return true if removed (currently throws if not present).
|
|
167
|
+
remove(obj: Entity.Unknown): void;
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Wait for all pending changes to be saved to disk.
|
|
171
|
+
* Optionaly waits for changes to be propagated to indexes and event handlers.
|
|
172
|
+
*/
|
|
173
|
+
flush(opts?: FlushOptions): Promise<void>;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
export const isDatabase = (obj: unknown): obj is Database => {
|
|
177
|
+
return obj ? typeof obj === 'object' && TypeId in obj && obj[TypeId] === TypeId : false;
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
export const Database: Schema.Schema<Database> = Schema.Any.pipe(Schema.filter((space) => isDatabase(space)));
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Effect service tag for Database dependency injection.
|
|
184
|
+
*/
|
|
185
|
+
export class Service extends Context.Tag('@dxos/echo/Database/Service')<
|
|
186
|
+
Service,
|
|
187
|
+
{
|
|
188
|
+
readonly db: Database;
|
|
189
|
+
}
|
|
190
|
+
>() {}
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Layer that provides a Database service that throws when accessed.
|
|
194
|
+
* Useful as a default layer when no database is available.
|
|
195
|
+
*/
|
|
196
|
+
export const notAvailable = Layer.succeed(Service, {
|
|
197
|
+
get db(): Database {
|
|
198
|
+
throw new Error('Database not available');
|
|
199
|
+
},
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Creates a Database service instance from a Database.
|
|
204
|
+
*/
|
|
205
|
+
export const makeService = (db: Database): Context.Tag.Service<Service> => {
|
|
206
|
+
return {
|
|
207
|
+
get db() {
|
|
208
|
+
return db;
|
|
209
|
+
},
|
|
210
|
+
};
|
|
211
|
+
};
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* Creates a Layer that provides the Database service.
|
|
215
|
+
*/
|
|
216
|
+
export const layer = (db: Database): Layer.Layer<Service> => {
|
|
217
|
+
return Layer.succeed(Service, makeService(db));
|
|
218
|
+
};
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* Returns the space ID of the database.
|
|
222
|
+
*/
|
|
223
|
+
export const spaceId = Effect.gen(function* () {
|
|
224
|
+
const { db } = yield* Service;
|
|
225
|
+
return db.spaceId;
|
|
226
|
+
});
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* Resolves an object by its DXN.
|
|
230
|
+
*/
|
|
231
|
+
export const resolve: {
|
|
232
|
+
// No type check.
|
|
233
|
+
(ref: URI.URI | Ref<any>): Effect.Effect<Entity.Unknown, never, Service>;
|
|
234
|
+
// Check matches schema.
|
|
235
|
+
<S extends Type.AnyEntity>(
|
|
236
|
+
ref: URI.URI | Ref<any>,
|
|
237
|
+
schema: S,
|
|
238
|
+
): Effect.Effect<Type.InstanceType<S>, Err.EntityNotFoundError, Service>;
|
|
239
|
+
} = (<S extends Type.AnyEntity>(
|
|
240
|
+
ref: URI.URI | Ref<any>,
|
|
241
|
+
schema?: S,
|
|
242
|
+
): Effect.Effect<Type.InstanceType<S>, Err.EntityNotFoundError, Service> =>
|
|
243
|
+
Effect.gen(function* () {
|
|
244
|
+
const { db } = yield* Service;
|
|
245
|
+
const dxn = typeof ref === 'string' ? ref : ref.uri;
|
|
246
|
+
const object = yield* EffectEx.promiseWithCauseCapture(() =>
|
|
247
|
+
db.graph
|
|
248
|
+
.createRefResolver({
|
|
249
|
+
context: {
|
|
250
|
+
space: db.spaceId,
|
|
251
|
+
},
|
|
252
|
+
})
|
|
253
|
+
.resolve(dxn),
|
|
254
|
+
);
|
|
255
|
+
|
|
256
|
+
if (!object) {
|
|
257
|
+
return yield* Effect.fail(new Err.EntityNotFoundError(dxn));
|
|
258
|
+
}
|
|
259
|
+
// `isInstanceOf` uses a conditional generic that TS can't resolve through
|
|
260
|
+
// the local `S extends Type.AnyEntity` parameter — runtime accepts it fine.
|
|
261
|
+
invariant(!schema || isInstanceOf(schema as any, object), 'Object type mismatch.');
|
|
262
|
+
return object as any;
|
|
263
|
+
}).pipe(Effect.withSpan('Database.resolve'))) as any;
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* Loads an object reference.
|
|
267
|
+
*
|
|
268
|
+
* Catching not found error:
|
|
269
|
+
*
|
|
270
|
+
* ```ts
|
|
271
|
+
* yield* load(ref).pipe(Effect.catchTag('EntityNotFoundError', () => Effect.succeed(undefined)));
|
|
272
|
+
* ```
|
|
273
|
+
*
|
|
274
|
+
*/
|
|
275
|
+
export const load: <T>(ref: Ref<T>) => Effect.Effect<T, Err.EntityNotFoundError, never> = Effect.fn('Database.load')(
|
|
276
|
+
function* (ref) {
|
|
277
|
+
const object = yield* EffectEx.promiseWithCauseCapture(() => ref.tryLoad());
|
|
278
|
+
if (!object) {
|
|
279
|
+
return yield* Effect.fail(new Err.EntityNotFoundError(ref.uri));
|
|
280
|
+
}
|
|
281
|
+
return object;
|
|
282
|
+
},
|
|
283
|
+
);
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* Adds an object or relation to the database.
|
|
287
|
+
* @see {@link Database.add}
|
|
288
|
+
*/
|
|
289
|
+
export const add = <T extends Entity.Unknown>(obj: T & RejectTypeEntity<T>): Effect.Effect<T, never, Service> =>
|
|
290
|
+
Service.pipe(Effect.map(({ db }) => db.add<T>(obj))).pipe(Effect.withSpan('Database.add'));
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
* Persists a Type definition to the database.
|
|
294
|
+
* @see {@link Database.addType}
|
|
295
|
+
*/
|
|
296
|
+
export const addType = <T extends Type.AnyEntity>(type: T): Effect.Effect<T, never, Service> =>
|
|
297
|
+
Service.pipe(Effect.flatMap(({ db }) => EffectEx.promiseWithCauseCapture(() => db.addType(type)))).pipe(
|
|
298
|
+
Effect.withSpan('Database.addType'),
|
|
299
|
+
);
|
|
300
|
+
|
|
301
|
+
/**
|
|
302
|
+
* Removes an object from the database.
|
|
303
|
+
* @see {@link Database.remove}
|
|
304
|
+
*/
|
|
305
|
+
export const remove = <T extends Entity.Unknown>(obj: T): Effect.Effect<void, never, Service> =>
|
|
306
|
+
Service.pipe(Effect.map(({ db }) => db.remove(obj))).pipe(Effect.withSpan('Database.remove'));
|
|
307
|
+
|
|
308
|
+
/**
|
|
309
|
+
* Flushes pending changes to disk.
|
|
310
|
+
* @see {@link Database.flush}
|
|
311
|
+
*/
|
|
312
|
+
export const flush = (opts?: FlushOptions) =>
|
|
313
|
+
Service.pipe(Effect.flatMap(({ db }) => EffectEx.promiseWithCauseCapture(() => db.flush(opts)))).pipe(
|
|
314
|
+
Effect.withSpan('Database.flush'),
|
|
315
|
+
);
|
|
316
|
+
|
|
317
|
+
/**
|
|
318
|
+
* Creates a `QueryResult` object that can be subscribed to.
|
|
319
|
+
*/
|
|
320
|
+
export const query: {
|
|
321
|
+
<Q extends Query.Any>(query: Q): QueryResult.QueryResultEffect<Query.Type<Q>, never, Service>;
|
|
322
|
+
<F extends Filter.Any>(filter: F): QueryResult.QueryResultEffect<Filter.Type<F>, never, Service>;
|
|
323
|
+
} = (queryOrFilter: Query.Any | Filter.Any) =>
|
|
324
|
+
Service.pipe(
|
|
325
|
+
Effect.map(({ db }) => db.query(queryOrFilter as any) as QueryResult.QueryResult<any>),
|
|
326
|
+
Effect.withSpan('Database.query'),
|
|
327
|
+
makeQueryResultEffect,
|
|
328
|
+
);
|
|
329
|
+
|
|
330
|
+
const makeQueryResultEffect = <T>(
|
|
331
|
+
eff: Effect.Effect<QueryResult.QueryResult<T>, never, Service>,
|
|
332
|
+
): QueryResult.QueryResultEffect<T, never, Service> => {
|
|
333
|
+
return {
|
|
334
|
+
run: Effect.flatMap(eff, (result) => EffectEx.promiseWithCauseCapture(() => result.run())),
|
|
335
|
+
first: Effect.flatMap(eff, (result) =>
|
|
336
|
+
EffectEx.promiseWithCauseCapture(async () => Option.fromNullable(await result.firstOrUndefined())),
|
|
337
|
+
),
|
|
338
|
+
|
|
339
|
+
// Effect internals
|
|
340
|
+
...Effectable.CommitPrototype,
|
|
341
|
+
commit() {
|
|
342
|
+
return eff;
|
|
343
|
+
},
|
|
344
|
+
} as any;
|
|
345
|
+
};
|
package/src/Dataset.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2026 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
// @import-as-namespace
|
|
6
|
+
|
|
7
|
+
import { pipe } from 'effect/Function';
|
|
8
|
+
import * as Predicate from 'effect/Predicate';
|
|
9
|
+
import * as Schema from 'effect/Schema';
|
|
10
|
+
|
|
11
|
+
import * as Collection from './Collection';
|
|
12
|
+
import * as Feed from './Feed';
|
|
13
|
+
import * as Obj from './Obj';
|
|
14
|
+
import * as Type from './Type';
|
|
15
|
+
import * as View from './View';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Abstract set of objects, represented by a view, feed, or collection.
|
|
19
|
+
* Schema-level union of the underlying type entities (rebuilt via
|
|
20
|
+
* `Type.getSchema`) so this can still be consumed by Schema-side APIs such
|
|
21
|
+
* as `Filter.type(...)` on a union.
|
|
22
|
+
*/
|
|
23
|
+
export type Dataset = Feed.Feed | Collection.Collection | View.View;
|
|
24
|
+
export const Dataset = Schema.Union(
|
|
25
|
+
Type.getSchema(Feed.Feed),
|
|
26
|
+
Type.getSchema(Collection.Collection),
|
|
27
|
+
Type.getSchema(View.View),
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
export const isDataset: (value: unknown) => value is Dataset = pipe(
|
|
31
|
+
Obj.instanceOf(Feed.Feed),
|
|
32
|
+
Predicate.or(Obj.instanceOf(Collection.Collection)),
|
|
33
|
+
Predicate.or(Obj.instanceOf(View.View)),
|
|
34
|
+
);
|