@dxos/echo 0.9.1-main.c7dcc2e112 → 0.9.1-staging.ee54ba693a
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/neutral/Annotation.mjs +22 -8
- package/dist/lib/neutral/Database.mjs +3 -3
- package/dist/lib/neutral/Entity.mjs +11 -11
- package/dist/lib/neutral/Err.mjs +7 -3
- package/dist/lib/neutral/Feed.mjs +15 -19
- package/dist/lib/neutral/Filter.mjs +13 -11
- package/dist/lib/neutral/Format.mjs +3 -7
- package/dist/lib/neutral/JsonSchema.mjs +7 -7
- package/dist/lib/neutral/Migration.mjs +11 -11
- package/dist/lib/neutral/Obj.mjs +15 -13
- package/dist/lib/neutral/Order.mjs +1 -1
- package/dist/lib/neutral/Query.mjs +17 -17
- package/dist/lib/neutral/QueryResult.mjs +1 -1
- package/dist/lib/neutral/Ref.mjs +6 -6
- package/dist/lib/neutral/Registry.mjs +1 -1
- package/dist/lib/neutral/Relation.mjs +12 -12
- package/dist/lib/neutral/Tag.mjs +15 -15
- package/dist/lib/neutral/Text.mjs +25 -0
- package/dist/lib/neutral/Text.mjs.map +7 -0
- package/dist/lib/neutral/Type.mjs +10 -10
- package/dist/lib/neutral/chunk-2HKGAQM4.mjs +1394 -0
- package/dist/lib/neutral/chunk-2HKGAQM4.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-O6BH7EPN.mjs → chunk-2ZHECXUR.mjs} +5 -4
- package/dist/lib/neutral/chunk-2ZHECXUR.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-AFANXSGV.mjs → chunk-3KTE2Y7Q.mjs} +20 -20
- package/dist/lib/neutral/chunk-3KTE2Y7Q.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-WZ32BF53.mjs → chunk-3TN2VMI4.mjs} +49 -37
- package/dist/lib/neutral/chunk-3TN2VMI4.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-E7IOTOZD.mjs → chunk-42L4HJ3Z.mjs} +11 -15
- package/dist/lib/neutral/chunk-42L4HJ3Z.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-K3S7D5PR.mjs → chunk-4A2NWKRJ.mjs} +5 -5
- package/dist/lib/neutral/chunk-ACFAOTKJ.mjs +1531 -0
- package/dist/lib/neutral/chunk-ACFAOTKJ.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-Z3WMRRAZ.mjs → chunk-BEFR7LEA.mjs} +11 -9
- package/dist/lib/neutral/{chunk-Z3WMRRAZ.mjs.map → chunk-BEFR7LEA.mjs.map} +1 -1
- package/dist/lib/neutral/{chunk-6M2Z6WBH.mjs → chunk-BXIKXT7Q.mjs} +2 -6
- package/dist/lib/neutral/{chunk-6M2Z6WBH.mjs.map → chunk-BXIKXT7Q.mjs.map} +1 -1
- package/dist/lib/neutral/{chunk-3JXQUMUI.mjs → chunk-C57XMMBY.mjs} +21 -20
- package/dist/lib/neutral/chunk-C57XMMBY.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-JZ6LFQU5.mjs → chunk-C62JYFAD.mjs} +82 -8
- package/dist/lib/neutral/chunk-C62JYFAD.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-TF5BSLF6.mjs → chunk-FSGX2R62.mjs} +3 -3
- package/dist/lib/neutral/chunk-FSGX2R62.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-6CEISA3V.mjs → chunk-HBXT3GSB.mjs} +29 -15
- package/dist/lib/neutral/chunk-HBXT3GSB.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-WU3GIANS.mjs → chunk-IQR45HAD.mjs} +1 -1
- package/dist/lib/neutral/chunk-IQR45HAD.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-TFEWTY5A.mjs → chunk-KCBW4BR6.mjs} +4 -8
- package/dist/lib/neutral/chunk-KCBW4BR6.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-4TPQZPLY.mjs → chunk-L3E5IXAE.mjs} +198 -30
- package/dist/lib/neutral/chunk-L3E5IXAE.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-EVK6XBXO.mjs → chunk-PRC4FEKJ.mjs} +2 -2
- package/dist/lib/neutral/chunk-PRC4FEKJ.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-NOL7O3BL.mjs → chunk-SCT6FFCR.mjs} +9 -4
- package/dist/lib/neutral/chunk-SCT6FFCR.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-BBFJWWAV.mjs → chunk-TOCVVFK2.mjs} +26 -2
- package/dist/lib/neutral/chunk-TOCVVFK2.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-A53NTBHE.mjs → chunk-U53LSQQA.mjs} +3 -3
- package/dist/lib/neutral/{chunk-A53NTBHE.mjs.map → chunk-U53LSQQA.mjs.map} +1 -1
- package/dist/lib/neutral/{chunk-PLDMJJJC.mjs → chunk-UGFFV2FR.mjs} +2 -2
- package/dist/lib/neutral/{chunk-35INCYOE.mjs → chunk-UWLP4RFM.mjs} +1 -1
- package/dist/lib/neutral/chunk-UWLP4RFM.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-SZ5WB6HF.mjs → chunk-UZHCQ6NI.mjs} +13 -11
- package/dist/lib/neutral/{chunk-SZ5WB6HF.mjs.map → chunk-UZHCQ6NI.mjs.map} +3 -3
- package/dist/lib/neutral/{chunk-L3OBWBV2.mjs → chunk-WKIT2YY5.mjs} +2 -2
- package/dist/lib/neutral/{chunk-HGWQR5KH.mjs → chunk-XB6ISRAO.mjs} +27 -15
- package/dist/lib/neutral/chunk-XB6ISRAO.mjs.map +7 -0
- package/dist/lib/neutral/chunk-XXL42WCB.mjs +84 -0
- package/dist/lib/neutral/chunk-XXL42WCB.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-5GAIWRQB.mjs → chunk-XXWK4J53.mjs} +27 -42
- package/dist/lib/neutral/chunk-XXWK4J53.mjs.map +7 -0
- package/dist/lib/neutral/index.mjs +30 -26
- package/dist/lib/neutral/internal/index.mjs +91 -69
- package/dist/lib/neutral/meta.json +1 -1
- package/dist/lib/neutral/testing/index.mjs +79 -60
- package/dist/lib/neutral/testing/index.mjs.map +3 -3
- package/dist/types/src/Annotation.d.ts +35 -1
- package/dist/types/src/Annotation.d.ts.map +1 -1
- package/dist/types/src/Collection.d.ts +9 -8
- package/dist/types/src/Collection.d.ts.map +1 -1
- package/dist/types/src/Database.d.ts +16 -0
- package/dist/types/src/Database.d.ts.map +1 -1
- package/dist/types/src/Dataset.d.ts +1 -16
- package/dist/types/src/Dataset.d.ts.map +1 -1
- package/dist/types/src/Err.d.ts +67 -0
- package/dist/types/src/Err.d.ts.map +1 -1
- package/dist/types/src/Feed.d.ts +56 -80
- package/dist/types/src/Feed.d.ts.map +1 -1
- package/dist/types/src/Filter.d.ts +9 -1
- package/dist/types/src/Filter.d.ts.map +1 -1
- package/dist/types/src/Hypergraph.d.ts +2 -9
- package/dist/types/src/Hypergraph.d.ts.map +1 -1
- package/dist/types/src/Migration.d.ts +1 -1
- package/dist/types/src/Migration.d.ts.map +1 -1
- package/dist/types/src/Obj.d.ts +31 -6
- package/dist/types/src/Obj.d.ts.map +1 -1
- package/dist/types/src/Order.d.ts +1 -1
- package/dist/types/src/Order.d.ts.map +1 -1
- package/dist/types/src/Query.d.ts +1 -1
- package/dist/types/src/Query.d.ts.map +1 -1
- package/dist/types/src/QueryResult.d.ts +2 -2
- package/dist/types/src/QueryResult.d.ts.map +1 -1
- package/dist/types/src/Ref.d.ts +8 -4
- package/dist/types/src/Ref.d.ts.map +1 -1
- package/dist/types/src/Registry.d.ts +1 -1
- package/dist/types/src/Relation.d.ts.map +1 -1
- package/dist/types/src/Tag.d.ts +11 -13
- package/dist/types/src/Tag.d.ts.map +1 -1
- package/dist/types/src/Text.d.ts +41 -0
- package/dist/types/src/Text.d.ts.map +1 -0
- package/dist/types/src/Text.test.d.ts +2 -0
- package/dist/types/src/Text.test.d.ts.map +1 -0
- package/dist/types/src/Type.d.ts +33 -20
- package/dist/types/src/Type.d.ts.map +1 -1
- package/dist/types/src/View.d.ts +8 -9
- package/dist/types/src/View.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +1 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/internal/Annotation/annotations.d.ts +9 -0
- package/dist/types/src/internal/Annotation/annotations.d.ts.map +1 -1
- package/dist/types/src/internal/Annotation/atoms.d.ts +14 -0
- package/dist/types/src/internal/Annotation/atoms.d.ts.map +1 -0
- package/dist/types/src/internal/Annotation/entity-dictionary.d.ts +13 -0
- package/dist/types/src/internal/Annotation/entity-dictionary.d.ts.map +1 -1
- package/dist/types/src/internal/Entity/api.d.ts.map +1 -1
- package/dist/types/src/internal/Entity/guard.d.ts.map +1 -1
- package/dist/types/src/internal/Entity/model.d.ts +1 -1
- package/dist/types/src/internal/Entity/model.d.ts.map +1 -1
- package/dist/types/src/internal/Entity/object.d.ts +5 -1
- package/dist/types/src/internal/Entity/object.d.ts.map +1 -1
- package/dist/types/src/internal/Entity/relation.d.ts +7 -0
- package/dist/types/src/internal/Entity/relation.d.ts.map +1 -1
- package/dist/types/src/internal/Entity/type-uri.d.ts.map +1 -1
- package/dist/types/src/internal/Filter/index.d.ts +2 -0
- package/dist/types/src/internal/Filter/index.d.ts.map +1 -0
- package/dist/types/src/internal/Filter/match.d.ts +22 -0
- package/dist/types/src/internal/Filter/match.d.ts.map +1 -0
- package/dist/types/src/internal/Format/format.d.ts +0 -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/string.d.ts +0 -8
- package/dist/types/src/internal/Format/string.d.ts.map +1 -1
- package/dist/types/src/internal/Format/types.d.ts +2 -1
- package/dist/types/src/internal/Format/types.d.ts.map +1 -1
- package/dist/types/src/internal/Obj/atoms.d.ts +7 -3
- package/dist/types/src/internal/Obj/atoms.d.ts.map +1 -1
- package/dist/types/src/internal/Obj/clone.d.ts +2 -1
- package/dist/types/src/internal/Obj/clone.d.ts.map +1 -1
- package/dist/types/src/internal/Obj/create-object.d.ts +3 -4
- package/dist/types/src/internal/Obj/create-object.d.ts.map +1 -1
- package/dist/types/src/internal/Obj/json-serializer.d.ts.map +1 -1
- package/dist/types/src/internal/Query/index.d.ts +1 -0
- package/dist/types/src/internal/Query/index.d.ts.map +1 -1
- package/dist/types/src/internal/Query/query-result-effect.d.ts +9 -0
- package/dist/types/src/internal/Query/query-result-effect.d.ts.map +1 -0
- package/dist/types/src/internal/Ref/atoms.d.ts +1 -2
- package/dist/types/src/internal/Ref/atoms.d.ts.map +1 -1
- package/dist/types/src/internal/Ref/ref.d.ts +13 -6
- package/dist/types/src/internal/Ref/ref.d.ts.map +1 -1
- package/dist/types/src/internal/common/atom-snapshot.d.ts +8 -0
- package/dist/types/src/internal/common/atom-snapshot.d.ts.map +1 -0
- package/dist/types/src/internal/common/proxy/make-object.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/proxy-types.d.ts +12 -0
- package/dist/types/src/internal/common/proxy/proxy-types.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/proxy-utils.d.ts +25 -0
- package/dist/types/src/internal/common/proxy/proxy-utils.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/schema-validator.d.ts +5 -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 +17 -0
- package/dist/types/src/internal/common/proxy/typed-handler.d.ts.map +1 -1
- package/dist/types/src/internal/common/types/entity.d.ts +4 -4
- package/dist/types/src/internal/common/types/entity.d.ts.map +1 -1
- package/dist/types/src/internal/common/types/meta.d.ts +2 -4
- package/dist/types/src/internal/common/types/meta.d.ts.map +1 -1
- package/dist/types/src/internal/index.d.ts +1 -0
- package/dist/types/src/internal/index.d.ts.map +1 -1
- package/dist/types/src/testing/test-schema.d.ts +42 -171
- package/dist/types/src/testing/test-schema.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +20 -13
- package/src/Annotation.test.ts +257 -10
- package/src/Annotation.ts +55 -6
- package/src/Collection.ts +10 -12
- package/src/Database.ts +22 -20
- package/src/Err.ts +22 -0
- package/src/Feed.ts +114 -141
- package/src/Filter.test.ts +38 -0
- package/src/Filter.ts +17 -3
- package/src/Hypergraph.ts +2 -11
- package/src/Migration.ts +1 -1
- package/src/Obj.test.ts +92 -12
- package/src/Obj.ts +36 -5
- package/src/Order.ts +3 -3
- package/src/Query.test.ts +2 -2
- package/src/Query.ts +16 -16
- package/src/QueryResult.ts +2 -2
- package/src/Ref.ts +12 -4
- package/src/Registry.ts +1 -1
- package/src/Relation.ts +1 -1
- package/src/Tag.ts +12 -16
- package/src/Text.test.ts +186 -0
- package/src/Text.ts +116 -0
- package/src/Type.test.ts +52 -24
- package/src/Type.ts +69 -31
- package/src/View.ts +22 -30
- package/src/index.ts +1 -1
- package/src/internal/Annotation/annotations.ts +15 -2
- package/src/internal/Annotation/atoms.ts +107 -0
- package/src/internal/Annotation/entity-dictionary.ts +40 -37
- package/src/internal/Entity/api.ts +1 -1
- package/src/internal/Entity/guard.ts +2 -1
- package/src/internal/Entity/model.ts +2 -2
- package/src/internal/Entity/object.ts +14 -1
- package/src/internal/Entity/relation.ts +19 -0
- package/src/internal/Entity/type-uri.ts +3 -1
- package/src/internal/Filter/index.ts +5 -0
- package/src/internal/Filter/match.ts +284 -0
- package/src/internal/Format/format.ts +0 -2
- package/src/internal/Format/index.ts +2 -2
- package/src/internal/Format/string.ts +0 -12
- package/src/internal/Format/types.ts +4 -2
- package/src/internal/JsonSchema/json-schema.test.ts +82 -54
- package/src/internal/Obj/atoms.ts +31 -18
- package/src/internal/Obj/clone.ts +61 -20
- package/src/internal/Obj/create-object.test.ts +3 -3
- package/src/internal/Obj/create-object.ts +3 -4
- package/src/internal/Obj/inspect.ts +1 -1
- package/src/internal/Obj/json-serializer.test.ts +7 -5
- package/src/internal/Obj/json-serializer.ts +1 -1
- package/src/internal/Obj/schema-validator.test.ts +53 -0
- package/src/internal/Obj/set-value.test.ts +29 -19
- package/src/internal/Query/index.ts +1 -0
- package/src/internal/Query/query-result-effect.ts +35 -0
- package/src/internal/Ref/atoms.ts +23 -3
- package/src/internal/Ref/ref.test.ts +8 -8
- package/src/internal/Ref/ref.ts +26 -20
- package/src/internal/common/atom-snapshot.ts +19 -0
- package/src/internal/common/proxy/make-object.ts +1 -1
- package/src/internal/common/proxy/proxy-types.ts +20 -0
- package/src/internal/common/proxy/proxy-utils.ts +37 -1
- package/src/internal/common/proxy/reactive-array.ts +3 -3
- package/src/internal/common/proxy/reactive.test.ts +1 -1
- package/src/internal/common/proxy/schema-validator.ts +181 -8
- package/src/internal/common/proxy/typed-handler.ts +254 -76
- package/src/internal/common/types/entity.ts +15 -7
- package/src/internal/index.ts +1 -0
- package/src/testing/test-schema.ts +75 -90
- package/dist/lib/neutral/chunk-35INCYOE.mjs.map +0 -7
- package/dist/lib/neutral/chunk-3JXQUMUI.mjs.map +0 -7
- package/dist/lib/neutral/chunk-4TPQZPLY.mjs.map +0 -7
- package/dist/lib/neutral/chunk-5GAIWRQB.mjs.map +0 -7
- package/dist/lib/neutral/chunk-6CEISA3V.mjs.map +0 -7
- package/dist/lib/neutral/chunk-AFANXSGV.mjs.map +0 -7
- package/dist/lib/neutral/chunk-BBFJWWAV.mjs.map +0 -7
- package/dist/lib/neutral/chunk-E7IOTOZD.mjs.map +0 -7
- package/dist/lib/neutral/chunk-EVK6XBXO.mjs.map +0 -7
- package/dist/lib/neutral/chunk-HGWQR5KH.mjs.map +0 -7
- package/dist/lib/neutral/chunk-JZ6LFQU5.mjs.map +0 -7
- package/dist/lib/neutral/chunk-NOL7O3BL.mjs.map +0 -7
- package/dist/lib/neutral/chunk-O6BH7EPN.mjs.map +0 -7
- package/dist/lib/neutral/chunk-TF5BSLF6.mjs.map +0 -7
- package/dist/lib/neutral/chunk-TFEWTY5A.mjs.map +0 -7
- package/dist/lib/neutral/chunk-VQYL2OQF.mjs +0 -2353
- package/dist/lib/neutral/chunk-VQYL2OQF.mjs.map +0 -7
- package/dist/lib/neutral/chunk-WU3GIANS.mjs.map +0 -7
- package/dist/lib/neutral/chunk-WZ32BF53.mjs.map +0 -7
- package/dist/lib/neutral/chunk-X3NUUON4.mjs +0 -184
- package/dist/lib/neutral/chunk-X3NUUON4.mjs.map +0 -7
- package/dist/types/src/exemplars.test.d.ts +0 -2
- package/dist/types/src/exemplars.test.d.ts.map +0 -1
- package/dist/types/src/hierarchy.test.d.ts +0 -2
- package/dist/types/src/hierarchy.test.d.ts.map +0 -1
- package/src/exemplars.test.ts +0 -21
- package/src/hierarchy.test.ts +0 -33
- /package/dist/lib/neutral/{chunk-K3S7D5PR.mjs.map → chunk-4A2NWKRJ.mjs.map} +0 -0
- /package/dist/lib/neutral/{chunk-PLDMJJJC.mjs.map → chunk-UGFFV2FR.mjs.map} +0 -0
- /package/dist/lib/neutral/{chunk-L3OBWBV2.mjs.map → chunk-WKIT2YY5.mjs.map} +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/internal/common/types/base.ts", "../../../src/internal/common/types/version.ts", "../../../src/internal/Annotation/sorting.ts", "../../../src/internal/Query/pretty.ts", "../../../src/internal/Ref/strong-deps.ts", "../../../src/internal/Entity/object.ts", "../../../src/internal/JsonSchema/json-schema-normalize.ts", "../../../src/internal/Entity/relation.ts", "../../../src/internal/Entity/type-kind.ts", "../../../src/internal/Entity/version.ts", "../../../src/internal/Filter/match.ts", "../../../src/internal/Obj/json-serializer.ts", "../../../src/internal/Obj/common.ts", "../../../src/internal/Obj/create-object.ts", "../../../src/internal/Obj/inspect.ts", "../../../src/internal/Obj/deleted.ts", "../../../src/internal/Obj/set-value.ts", "../../../src/internal/Obj/snapshot.ts", "../../../src/internal/Obj/atoms.ts", "../../../src/internal/Obj/clone.ts", "../../../src/internal/Type/manipulation.ts", "../../../src/internal/Type/type-schema.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { type EntityId } from '@dxos/keys';\n\nimport { type ATTR_META, type EntityMeta } from './meta';\n\n/**\n * Base type for all data objects (reactive, ECHO, and other raw objects).\n * NOTE: This describes the base type for all database objects.\n * It is stricter than `T extends {}` or `T extends object`.\n */\n// TODO(burdon): Prefer Record<string, unknown>.\nexport type AnyProperties = Record<string, any>;\n\n/**\n * Canonical type for all ECHO entities (objects and relations).\n * @depreacted Remove, use Entity.Unknown instead.\n */\n// TODO(wittjosiah): Remove. Prefer higher level types (e.g. Entity.Unknown).\nexport interface AnyEntity {\n readonly id: EntityId;\n}\n\nexport type ExcludeId<T extends AnyProperties> = Omit<T, 'id'>;\n\nexport type PropertyKey<T extends AnyProperties> = Extract<keyof ExcludeId<T>, string>;\n\n// TODO(dmaretskyi): Remove. This should be using the symbol type.\ntype WithMeta = { [ATTR_META]?: EntityMeta };\n\n/**\n * The raw object should not include the ECHO id, but may include metadata.\n */\nexport const RawObject = <S extends Schema.Schema.AnyNoContext>(\n schema: S,\n): Schema.Schema<ExcludeId<Schema.Schema.Type<S>> & WithMeta, Schema.Schema.Encoded<S>> => {\n return Schema.make(SchemaAST.omit(schema.ast, ['id']));\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\n/**\n * Version type identifier.\n */\nexport const VersionTypeId = '~@dxos/echo/VersionTypeId' as const;\nexport type VersionTypeId = typeof VersionTypeId;\n\n/**\n * Represents the object version.\n * May be backed by Automerge.\n * Objects with no history are not versioned.\n */\nexport interface Version {\n [VersionTypeId]: {};\n automergeHeads?: string[];\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type { AnyEntity } from '../common/types';\nimport { getLabel, getTypename } from './annotations';\n\n/**\n * String comparison helper for sorting.\n */\nexport const compare = (a?: string, b?: string): number => {\n if (a == null) {\n return b == null ? 0 : 1;\n }\n if (b == null) {\n return -1;\n }\n return a.localeCompare(b);\n};\n\n/**\n * Comparator function type for sorting entities.\n * Accepts both reactive entities and snapshots.\n */\nexport type Comparator<T extends AnyEntity = AnyEntity> = (a: T, b: T) => number;\n\n/**\n * Sort entities by label.\n */\nexport const sortByLabel: Comparator = (a: AnyEntity, b: AnyEntity) => compare(getLabel(a), getLabel(b));\n\n/**\n * Sort entities by typename.\n */\nexport const sortByTypename: Comparator = (a: AnyEntity, b: AnyEntity) => compare(getTypename(a), getTypename(b));\n\n/**\n * Compose multiple comparators into one.\n * Applies comparators in order until one returns non-zero.\n */\nexport const sort = <T extends AnyEntity>(...comparators: Comparator<T>[]): Comparator<T> => {\n return (a: T, b: T) => {\n for (const comparator of comparators) {\n const result = comparator(a, b);\n if (result !== 0) {\n return result;\n }\n }\n return 0;\n };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type QueryAST } from '@dxos/echo-protocol';\n\n/**\n * Returns a human-readable string representation of a Filter AST.\n */\nexport const prettyFilter = (filter: QueryAST.Filter): string => {\n switch (filter.type) {\n case 'object': {\n // A type-less object filter with only a meta-key constraint is `Filter.key(...)`.\n if (\n filter.typename === null &&\n (filter.id === undefined || filter.id.length === 0) &&\n Object.keys(filter.props).length === 0 &&\n (filter.foreignKeys === undefined || filter.foreignKeys.length === 0) &&\n filter.metaKey !== undefined\n ) {\n return filter.metaVersion !== undefined\n ? `Filter.key(${JSON.stringify(filter.metaKey)}, { version: ${JSON.stringify(filter.metaVersion)} })`\n : `Filter.key(${JSON.stringify(filter.metaKey)})`;\n }\n const parts: string[] = [];\n if (filter.typename !== null) {\n parts.push(String(filter.typename));\n }\n if (filter.id !== undefined && filter.id.length > 0) {\n parts.push(`id: [${filter.id.join(', ')}]`);\n }\n const propEntries = Object.entries(filter.props);\n if (propEntries.length > 0) {\n const propsStr = propEntries.map(([k, v]) => `${k}: ${prettyFilter(v)}`).join(', ');\n parts.push(`{ ${propsStr} }`);\n }\n if (filter.foreignKeys !== undefined && filter.foreignKeys.length > 0) {\n parts.push(`foreignKeys: [${filter.foreignKeys.map((fk) => JSON.stringify(fk)).join(', ')}]`);\n }\n if (filter.metaKey !== undefined) {\n parts.push(\n filter.metaVersion !== undefined\n ? `metaKey: ${JSON.stringify(filter.metaKey)} (${filter.metaVersion})`\n : `metaKey: ${JSON.stringify(filter.metaKey)}`,\n );\n }\n return parts.length > 0 ? `Filter.type(${parts.join(', ')})` : 'Filter.everything()';\n }\n case 'compare':\n return `Filter.${filter.operator}(${JSON.stringify(filter.value)})`;\n case 'in':\n return `Filter.in([${filter.values.map((v) => JSON.stringify(v)).join(', ')}])`;\n case 'contains':\n return `Filter.contains(${JSON.stringify(filter.value)})`;\n case 'tag':\n return `Filter.tag(${JSON.stringify(filter.tag)})`;\n case 'range':\n return `Filter.range(${JSON.stringify(filter.from)}, ${JSON.stringify(filter.to)})`;\n case 'text-search':\n return filter.searchKind\n ? `Filter.textSearch(${JSON.stringify(filter.text)}, ${JSON.stringify(filter.searchKind)})`\n : `Filter.textSearch(${JSON.stringify(filter.text)})`;\n case 'timestamp':\n return `Filter.${filter.field}.${filter.operator}(${filter.value})`;\n case 'child-of':\n return `Filter.childOf([${filter.parents.map((p) => JSON.stringify(p)).join(', ')}], { transitive: ${filter.transitive} })`;\n case 'not':\n return `Filter.not(${prettyFilter(filter.filter)})`;\n case 'and':\n return `Filter.and(${filter.filters.map(prettyFilter).join(', ')})`;\n case 'or':\n return `Filter.or(${filter.filters.map(prettyFilter).join(', ')})`;\n }\n};\n\n/**\n * Returns a human-readable string representation of a Query AST.\n */\nexport const prettyQuery = (query: QueryAST.Query): string => {\n switch (query.type) {\n case 'select':\n return `Query.select(${prettyFilter(query.filter)})`;\n case 'filter':\n return `${prettyQuery(query.selection)}.select(${prettyFilter(query.filter)})`;\n case 'reference-traversal':\n return `${prettyQuery(query.anchor)}.reference(${JSON.stringify(query.property)})`;\n case 'incoming-references': {\n const args: string[] = [];\n if (query.typename !== null) {\n args.push(String(query.typename));\n }\n if (query.property !== null) {\n args.push(JSON.stringify(query.property));\n }\n return `${prettyQuery(query.anchor)}.referencedBy(${args.join(', ')})`;\n }\n case 'relation': {\n const method =\n query.direction === 'outgoing' ? 'sourceOf' : query.direction === 'incoming' ? 'targetOf' : 'relationOf';\n const filterStr = query.filter !== undefined ? prettyFilter(query.filter) : '';\n return `${prettyQuery(query.anchor)}.${method}(${filterStr})`;\n }\n case 'relation-traversal':\n return `${prettyQuery(query.anchor)}.${query.direction}()`;\n case 'hierarchy-traversal':\n return query.direction === 'to-parent'\n ? `${prettyQuery(query.anchor)}.parent()`\n : `${prettyQuery(query.anchor)}.children()`;\n case 'union':\n return `Query.all(${query.queries.map(prettyQuery).join(', ')})`;\n case 'set-difference':\n return `Query.without(${prettyQuery(query.source)}, ${prettyQuery(query.exclude)})`;\n case 'order': {\n const orders = query.order.map((o) => {\n if (o.kind === 'natural') {\n return 'Order.natural()';\n } else if (o.kind === 'rank') {\n return `Order.rank(${JSON.stringify(o.direction)})`;\n } else if (o.kind === 'timestamp') {\n const fn = o.field === 'updatedAt' ? 'updated' : 'created';\n return `Order.${fn}(${JSON.stringify(o.direction)})`;\n } else {\n return `Order.property(${JSON.stringify(o.property)}, ${JSON.stringify(o.direction)})`;\n }\n });\n return `${prettyQuery(query.query)}.orderBy(${orders.join(', ')})`;\n }\n case 'options': {\n const opts = query.options;\n const parts: string[] = [];\n if (opts.deleted !== undefined) {\n parts.push(`deleted: ${JSON.stringify(opts.deleted)}`);\n }\n if (opts.debugLabel !== undefined) {\n parts.push(`debugLabel: ${JSON.stringify(opts.debugLabel)}`);\n }\n return `${prettyQuery(query.query)}.options({ ${parts.join(', ')} })`;\n }\n case 'from': {\n if (query.from._tag === 'scope') {\n if (query.from.scopes.length === 0) {\n return `${prettyQuery(query.query)}.from('all-accessible-spaces')`;\n }\n const scopeStrs = query.from.scopes.map((scope) => {\n if (scope._tag === 'space') {\n return scope.includeAllFeeds\n ? `{ space: ${JSON.stringify(scope.spaceId)}, includeAllFeeds: true }`\n : `{ space: ${JSON.stringify(scope.spaceId)} }`;\n }\n if (scope._tag === 'feed') {\n return `{ feed: ${JSON.stringify(String(scope.feedUri))} }`;\n }\n return `{ registry: ${JSON.stringify(scope.location)} }`;\n });\n return `${prettyQuery(query.query)}.from([${scopeStrs.join(', ')}])`;\n }\n return `${prettyQuery(query.query)}.from(${prettyQuery(query.from.query)})`;\n }\n case 'limit':\n return `${prettyQuery(query.query)}.limit(${query.limit})`;\n }\n};\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport { EID, type SpaceId, type URI } from '@dxos/keys';\n\nimport { EntityKind } from '../common/types/entity';\nimport { RelationSourceDXNId, RelationTargetDXNId } from '../common/types/model-symbols';\nimport { ParentId, TypeId } from '../common/types/typename';\nimport { getObjectEchoUri } from '../Entity/util';\n\n/**\n * Normalized view of the references that make up an entity's strong-dependency set, store-agnostic\n * so it can be filled from an {@link ObjectCore} (db) or a decoded entity (queue item / snapshot).\n */\nexport interface StrongDepRefs {\n /** Entity kind — relations additionally depend on their source/target. */\n kind: EntityKind;\n /** Type reference URI (`echo:` for a persisted stored schema, `dxn:` for a static/registry type). */\n type?: URI.URI;\n /** Relation source reference URI. */\n source?: URI.URI;\n /** Relation target reference URI. */\n target?: URI.URI;\n /** Parent reference URI. */\n parent?: URI.URI;\n}\n\n/**\n * Direct strong-dependency URIs of an entity: the schema (only when stored as an object), the\n * relation source/target, and the parent. Returns URIs (cross-space `echo:` EIDs and queue-item\n * EIDs included); a persisted schema is an `echo:` URI, a static/registry type is a `dxn:` URI.\n *\n * A static/registry type (`dxn:`) is intentionally NOT a strong dep: it is always synchronously\n * available through the registry, so gating on it would needlessly delay surfacing. Only a\n * persisted (db-backed) schema, addressed by an `echo:` URI, must load before its instances.\n */\nexport const getStrongDependencyUris = (refs: StrongDepRefs, owningSpaceId?: SpaceId): URI.URI[] => {\n const res: URI.URI[] = [];\n\n if (refs.type != null && EID.tryParse(refs.type) != null) {\n res.push(qualifyToSpace(refs.type, owningSpaceId));\n }\n\n if (refs.kind === EntityKind.Relation) {\n if (refs.source != null) {\n res.push(qualifyToSpace(refs.source, owningSpaceId));\n }\n if (refs.target != null) {\n res.push(qualifyToSpace(refs.target, owningSpaceId));\n }\n }\n\n if (refs.parent != null) {\n res.push(qualifyToSpace(refs.parent, owningSpaceId));\n }\n\n return res;\n};\n\n/**\n * Qualifies a space-less (relative) `echo:` dependency URI with the space of the entity that owns it.\n * Same-space references are persisted relative; resolution needs them absolute to route to a single\n * space. Already-qualified URIs (cross-space) and non-`echo:` URIs (registry `dxn:`) pass through.\n */\nconst qualifyToSpace = (uri: URI.URI, owningSpaceId: SpaceId | undefined): URI.URI => {\n if (owningSpaceId == null) {\n return uri;\n }\n const eid = EID.tryParse(uri);\n if (eid == null || !EID.isLocal(eid)) {\n return uri;\n }\n const entityId = EID.getEntityId(eid);\n return entityId != null ? EID.make({ spaceId: owningSpaceId, entityId }) : uri;\n};\n\n/**\n * Direct strong-dependency URIs of a live (decoded) entity — a queue item, cross-space proxy, or\n * snapshot. Reads the reference URIs off the entity's hidden model symbols. ECHO db cores compute\n * the same set from their raw encoded references via {@link getStrongDependencyUris}.\n */\nexport const getStrongDependencies = (entity: unknown): URI.URI[] => {\n if (entity == null || typeof entity !== 'object') {\n return [];\n }\n const props = entity as Record<symbol, unknown>;\n const kind =\n props[RelationSourceDXNId] != null || props[RelationTargetDXNId] != null ? EntityKind.Relation : EntityKind.Object;\n const parent = props[ParentId];\n\n // The entity's own space qualifies any relative dependency URIs it carries.\n const selfUri = getObjectEchoUri(entity);\n const owningSpaceId = selfUri != null ? EID.getSpaceId(selfUri) : undefined;\n\n return getStrongDependencyUris(\n {\n kind,\n type: typeof props[TypeId] === 'string' ? (props[TypeId] as URI.URI) : undefined,\n source: props[RelationSourceDXNId] as URI.URI | undefined,\n target: props[RelationTargetDXNId] as URI.URI | undefined,\n // A parent is held as the resolved entity; derive its absolute URI for the dependency edge.\n parent: parent != null ? getObjectEchoUri(parent) : undefined,\n },\n owningSpaceId,\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { invariant } from '@dxos/invariant';\nimport { DXN, type EntityId } from '@dxos/keys';\n\nimport type * as Type from '../../Type';\nimport { type TypeAnnotation, TypeAnnotationId } from '../Annotation/annotations';\nimport { makeTypeJsonSchemaAnnotation } from '../Annotation/util';\nimport { EntityKind } from '../common/types';\nimport { toJsonSchema } from '../JsonSchema';\nimport { type EchoTypeOptions, type EchoTypeSchema, makeEchoTypeSchema } from './entity';\n\n/**\n * Object schema type with kind marker.\n */\nexport type EchoObjectSchema<\n Self extends Schema.Schema.Any,\n Fields extends Schema.Struct.Fields = Schema.Struct.Fields,\n> = EchoTypeSchema<Self, {}, EntityKind.Object, Fields>;\n\n/**\n * Schema for Obj entity types.\n * Pipeable function to add ECHO object annotations to a schema.\n */\nexport const EchoObjectSchema: {\n (\n dxn: DXN.DXN,\n options?: EchoTypeOptions,\n ): <Self extends Schema.Schema.Any, Fields extends Schema.Struct.Fields = Schema.Struct.Fields>(\n self: Self & { fields?: Fields },\n ) => EchoObjectSchema<Self, Fields>;\n} = (dxn, options) => {\n const typename = DXN.getName(dxn);\n const version = DXN.getVersion(dxn);\n invariant(version, `Type.makeObject requires a versioned DXN: ${dxn}`);\n\n return <Self extends Schema.Schema.Any, Fields extends Schema.Struct.Fields = Schema.Struct.Fields>(\n self: Self & { fields?: Fields },\n ): EchoObjectSchema<Self, Fields> => {\n invariant(typeof TypeAnnotationId === 'symbol', 'Sanity.');\n invariant(SchemaAST.isTypeLiteral(self.ast), 'Schema must be a TypeLiteral.');\n\n // Extract fields from the schema if available (Struct schemas have .fields).\n const fields = ((self as any).fields ?? {}) as Fields;\n\n const schemaWithId = Schema.extend(self, Schema.Struct({ id: Schema.String }));\n const ast = SchemaAST.annotations(schemaWithId.ast, {\n // TODO(dmaretskyi): `extend` kills the annotations.\n ...self.ast.annotations,\n [TypeAnnotationId]: { kind: EntityKind.Object, typename, version } satisfies TypeAnnotation,\n // TODO(dmaretskyi): TypeIdentifierAnnotationId?\n [SchemaAST.JSONSchemaAnnotationId]: makeTypeJsonSchemaAnnotation({\n kind: EntityKind.Object,\n typename,\n version,\n }),\n });\n\n return makeEchoTypeSchema<Self, EntityKind.Object, Fields>(\n fields,\n ast,\n typename,\n version,\n EntityKind.Object,\n () => toJsonSchema(Schema.make(ast)),\n options?.id,\n );\n };\n};\n\nexport const makeObjectType = <Self, _Schema extends Schema.Schema.Any>(\n dxn: DXN.DXN,\n schema: _Schema,\n options?: { id?: EntityId },\n): Type.ObjClass<Self, Schema.Schema.Type<_Schema>, {}> => {\n const type = EchoObjectSchema(dxn, options)(schema);\n const constructor = function ObjectType() {};\n Object.setPrototypeOf(constructor, type);\n // Boundary cast: constructor/prototype wiring cannot be expressed in TypeScript's type system.\n return constructor as unknown as Type.ObjClass<Self, Schema.Schema.Type<_Schema>, {}>;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as Types from 'effect/Types';\n\nimport { JsonSchemaFields, type JsonSchemaType } from './json-schema-type';\n\n/**\n * Normalize schema to to draft-07 format.\n * Note: the input type does not necessarily match the {@link JsonSchemaType} type.\n */\nexport const normalizeSchema = (schema: JsonSchemaType): JsonSchemaType => {\n const copy = structuredClone(schema) as Types.DeepMutable<JsonSchemaType>;\n go(copy);\n return copy;\n};\n\nconst go = (schema: Types.DeepMutable<JsonSchemaType>) => {\n if (typeof schema !== 'object' || schema === null) {\n return;\n }\n\n if ((schema as any).exclusiveMaximum === true) {\n schema.exclusiveMaximum = schema.maximum;\n delete (schema as any).exclusiveMaximum;\n } else if ((schema as any).exclusiveMaximum === false) {\n delete (schema as any).exclusiveMaximum;\n }\n\n if ((schema as any).exclusiveMinimum === true) {\n schema.exclusiveMinimum = schema.minimum;\n delete (schema as any).exclusiveMinimum;\n } else if ((schema as any).exclusiveMinimum === false) {\n delete (schema as any).exclusiveMinimum;\n }\n\n // Delete all properties that are not in the JsonSchemaFields.\n for (const key of Object.keys(schema)) {\n if (!JsonSchemaFields.includes(key)) {\n delete (schema as any)[key];\n }\n }\n\n // Recursively normalize the schema.\n // Recursively normalize the schema.\n if (schema.properties) {\n goOnRecord(schema.properties);\n }\n if (schema.patternProperties) {\n goOnRecord(schema.patternProperties);\n }\n if (schema.propertyNames) {\n go(schema.propertyNames);\n }\n if (schema.definitions) {\n goOnRecord(schema.definitions);\n }\n if (schema.items) {\n maybeGoOnArray(schema.items);\n }\n if (schema.additionalItems) {\n maybeGoOnArray(schema.additionalItems);\n }\n if (schema.contains) {\n go(schema.contains);\n }\n if (schema.if) {\n go(schema.if);\n }\n if (schema.then) {\n go(schema.then);\n }\n if (schema.else) {\n go(schema.else);\n }\n if (schema.allOf) {\n maybeGoOnArray(schema.allOf);\n }\n if (schema.anyOf) {\n maybeGoOnArray(schema.anyOf);\n }\n if (schema.oneOf) {\n maybeGoOnArray(schema.oneOf);\n }\n if (schema.not) {\n go(schema.not);\n }\n if (schema.$defs) {\n goOnRecord(schema.$defs);\n }\n if (schema.reference) {\n go(schema.reference.schema);\n }\n};\n\nconst maybeGoOnArray = (value: any) => {\n if (Array.isArray(value)) {\n for (const item of value) {\n go(item);\n }\n } else if (typeof value === 'object' && value !== null) {\n go(value);\n }\n};\n\nconst goOnRecord = (record: Record<string, any>) => {\n for (const key of Object.keys(record)) {\n go(record[key]);\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { raise } from '@dxos/debug';\nimport { assertArgument, invariant } from '@dxos/invariant';\nimport { DXN, type EntityId } from '@dxos/keys';\n\n// Type-only imports (erased at runtime — no import cycle); `internal` may depend\n// on the top-level `Obj` / `Type` API at the type level only.\nimport type * as Obj from '../../Obj';\nimport type * as Type from '../../Type';\nimport {\n type TypeAnnotation,\n TypeAnnotationId,\n getEntityKind,\n getSchemaTypename,\n getTypeIdentifierAnnotation,\n} from '../Annotation/annotations';\nimport { makeTypeJsonSchemaAnnotation } from '../Annotation/util';\nimport {\n ATTR_RELATION_SOURCE,\n ATTR_RELATION_TARGET,\n EntityKind,\n RelationSourceDXNId,\n RelationSourceId,\n RelationTargetDXNId,\n RelationTargetId,\n type UnknownTypeSchema,\n getStaticTypeSchema,\n} from '../common/types';\n\nexport {\n ATTR_RELATION_SOURCE,\n ATTR_RELATION_TARGET,\n RelationSourceDXNId,\n RelationSourceId,\n RelationTargetDXNId,\n RelationTargetId,\n};\n\nimport { toJsonSchema } from '../JsonSchema';\nimport { type EchoTypeSchema, makeEchoTypeSchema } from './entity';\n\n/**\n * Source and target props on relations.\n */\n// TODO(burdon): any?\nexport type RelationSourceTargetRefs<Source = any, Target = any> = {\n /**\n * Source ECHO live object.\n */\n [RelationSourceId]: Source;\n\n /**\n * Target ECHO live object.\n */\n [RelationTargetId]: Target;\n};\n\nexport type RelationSource<R> = R extends RelationSourceTargetRefs<infer Source, infer _Target> ? Source : never;\nexport type RelationTarget<R> = R extends RelationSourceTargetRefs<infer _Source, infer Target> ? Target : never;\n\n/**\n * Accepted relation endpoint: an object-kind `Type.Type` entity (slot-backed)\n * or the branded `Obj.Unknown` schema. Source/target are constrained to these\n * — relations only connect object-kind entities.\n */\nexport type RelationEndpoint = Type.AnyObj | UnknownTypeSchema<any, EntityKind.Object>;\n\n/**\n * Resolves a relation endpoint to the instance type it describes — the source /\n * target instance recorded on the relation's `RelationSourceTargetRefs`.\n */\nexport type RelationEndpointInstance<S> =\n S extends UnknownTypeSchema<infer A, any> ? A : S extends Type.AnyObj ? Type.InstanceType<S> : unknown;\n\nexport type EchoRelationSchemaOptions<TSource extends RelationEndpoint, TTarget extends RelationEndpoint> = {\n dxn: DXN.DXN;\n source: TSource;\n target: TTarget;\n /**\n * Override the entity id stamped on the in-memory `Type.Type` value.\n *\n * Defaults to `EntityId.deterministic(typename, version)` — stable across processes\n * and workerd-safe (no `crypto.getRandomValues()` at module-evaluation time).\n */\n id?: EntityId;\n};\n\n/**\n * Relation schema type with kind marker. `SourceInstance` / `TargetInstance`\n * are the resolved endpoint instance types (see {@link RelationEndpointInstance}).\n */\nexport type EchoRelationSchema<\n Self extends Schema.Schema.Any,\n SourceInstance extends Obj.Unknown,\n TargetInstance extends Obj.Unknown,\n Fields extends Schema.Struct.Fields = Schema.Struct.Fields,\n> = EchoTypeSchema<Self, RelationSourceTargetRefs<SourceInstance, TargetInstance>, EntityKind.Relation, Fields>;\n\n/**\n * Schema for Relation entity types.\n */\nexport const EchoRelationSchema = <Source extends RelationEndpoint, Target extends RelationEndpoint>({\n dxn,\n source,\n target,\n id: explicitId,\n}: EchoRelationSchemaOptions<Source, Target>) => {\n // `source` / `target` are `Type.Type` entities (slot-backed) or the branded\n // `Obj.Unknown` schema (used directly); resolve each to its Effect Schema for\n // the schema-side machinery (DXN ref + entity-kind checks).\n const sourceSchema = source != null ? (getStaticTypeSchema(source) ?? source) : source;\n const targetSchema = target != null ? (getStaticTypeSchema(target) ?? target) : target;\n assertArgument(Schema.isSchema(sourceSchema), 'source');\n assertArgument(Schema.isSchema(targetSchema), 'target');\n const typename = DXN.getName(dxn);\n const version = DXN.getVersion(dxn);\n invariant(version, `Type.makeRelation requires a versioned DXN: ${dxn}`);\n const sourceDXN = getDXNForRelationSchemaRef(sourceSchema);\n const targetDXN = getDXNForRelationSchemaRef(targetSchema);\n if (getEntityKind(sourceSchema) !== EntityKind.Object) {\n raise(new Error('Source schema must be an echo object schema.'));\n }\n if (getEntityKind(targetSchema) !== EntityKind.Object) {\n raise(new Error('Target schema must be an echo object schema.'));\n }\n\n return <Self extends Schema.Schema.Any, Fields extends Schema.Struct.Fields = Schema.Struct.Fields>(\n self: Self & { fields?: Fields },\n ): EchoRelationSchema<Self, RelationEndpointInstance<Source>, RelationEndpointInstance<Target>, Fields> => {\n invariant(SchemaAST.isTypeLiteral(self.ast), 'Schema must be a TypeLiteral.');\n\n // Extract fields from the schema if available (Struct schemas have .fields).\n const fields = ((self as any).fields ?? {}) as Fields;\n\n const schemaWithId = Schema.extend(self, Schema.Struct({ id: Schema.String }));\n const ast = SchemaAST.annotations(schemaWithId.ast, {\n // TODO(dmaretskyi): `extend` kills the annotations.\n ...self.ast.annotations,\n [TypeAnnotationId]: {\n kind: EntityKind.Relation,\n typename,\n version,\n sourceSchema: sourceDXN,\n targetSchema: targetDXN,\n } satisfies TypeAnnotation,\n // TODO(dmaretskyi): TypeIdentifierAnnotationId?\n\n [SchemaAST.JSONSchemaAnnotationId]: makeTypeJsonSchemaAnnotation({\n kind: EntityKind.Relation,\n typename,\n version,\n relationSource: sourceDXN,\n relationTarget: targetDXN,\n }),\n });\n\n return makeEchoTypeSchema<Self, EntityKind.Relation, Fields>(\n fields,\n ast,\n typename,\n version,\n EntityKind.Relation,\n () => toJsonSchema(Schema.make(ast)),\n explicitId,\n );\n };\n};\n\nexport const getDXNForRelationSchemaRef = (schema: Schema.Schema.Any): DXN.DXN => {\n assertArgument(Schema.isSchema(schema), 'schema');\n const identifier = getTypeIdentifierAnnotation(schema);\n if (identifier) {\n return DXN.tryMake(identifier) ?? raise(new Error(`Invalid schema identifier: ${identifier}`));\n }\n\n const typename = getSchemaTypename(schema);\n if (!typename) {\n throw new Error('Schema must have a typename');\n }\n\n return DXN.make(typename);\n};\n\nexport const makeRelationType = (options: {\n dxn: DXN.DXN;\n source: RelationEndpoint;\n target: RelationEndpoint;\n schema: Schema.Schema.Any;\n id?: EntityId;\n}): Type.RelationClass<unknown, unknown, unknown, unknown, {}> => {\n const type = EchoRelationSchema({\n dxn: options.dxn,\n source: options.source,\n target: options.target,\n id: options.id,\n })(options.schema);\n const constructor = function RelationType() {};\n Object.setPrototypeOf(constructor, type);\n // Boundary cast: constructor/prototype wiring cannot be expressed in TypeScript's type system.\n return constructor as unknown as Type.RelationClass<unknown, unknown, unknown, unknown, {}>;\n};\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { invariant } from '@dxos/invariant';\nimport { DXN } from '@dxos/keys';\n\nimport { type TypeAnnotation, TypeAnnotationId } from '../Annotation/annotations';\nimport { makeTypeJsonSchemaAnnotation } from '../Annotation/util';\nimport { EntityKind } from '../common/types';\nimport { toJsonSchema } from '../JsonSchema';\nimport { type EchoTypeOptions, type EchoTypeSchema, makeEchoTypeSchema } from './entity';\n\n/**\n * Type-kind schema marker — produced by {@link EchoTypeKindSchema}.\n *\n * Distinguishes meta-schemas (entities of `EntityKind.Type`, such as the\n * built-in `Type.Type` TypeSchema) from object and relation types.\n */\nexport type EchoTypeKindSchema<\n Self extends Schema.Schema.Any,\n Fields extends Schema.Struct.Fields = Schema.Struct.Fields,\n> = EchoTypeSchema<Self, {}, EntityKind.Type, Fields>;\n\n/**\n * Pipeable that brands a schema as a type-kind ECHO entity. Mirrors\n * {@link EchoObjectSchema} / {@link EchoRelationSchema}, but stamps the\n * resulting entity with `[SchemaKindId]: EntityKind.Type` and a matching\n * `TypeAnnotation.kind = 'type'` so meta-schemas surface uniformly through\n * `Type.isTypeKind`, `Filter.type`, etc.\n */\nexport const EchoTypeKindSchema: {\n (\n dxn: DXN.DXN,\n options?: EchoTypeOptions,\n ): <Self extends Schema.Schema.Any, Fields extends Schema.Struct.Fields = Schema.Struct.Fields>(\n self: Self & { fields?: Fields },\n ) => EchoTypeKindSchema<Self, Fields>;\n} = (dxn, options) => {\n const typename = DXN.getName(dxn);\n const version = DXN.getVersion(dxn);\n invariant(version, `Type-kind schemas require a versioned DXN: ${dxn}`);\n\n return <Self extends Schema.Schema.Any, Fields extends Schema.Struct.Fields = Schema.Struct.Fields>(\n self: Self & { fields?: Fields },\n ): EchoTypeKindSchema<Self, Fields> => {\n invariant(SchemaAST.isTypeLiteral(self.ast), 'Schema must be a TypeLiteral.');\n\n const fields = ((self as any).fields ?? {}) as Fields;\n\n const schemaWithId = Schema.extend(self, Schema.Struct({ id: Schema.String }));\n const ast = SchemaAST.annotations(schemaWithId.ast, {\n ...self.ast.annotations,\n [TypeAnnotationId]: { kind: EntityKind.Type, typename, version } satisfies TypeAnnotation,\n [SchemaAST.JSONSchemaAnnotationId]: makeTypeJsonSchemaAnnotation({\n kind: EntityKind.Type,\n typename,\n version,\n }),\n });\n\n return makeEchoTypeSchema<Self, EntityKind.Type, Fields>(\n fields,\n ast,\n typename,\n version,\n EntityKind.Type,\n () => toJsonSchema(Schema.make(ast)),\n options?.id,\n );\n };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { assertArgument } from '@dxos/invariant';\n\nimport { type AnyEntity, VersionTypeId } from '../common/types';\nimport { ObjectVersionId } from './model';\n\n/**\n * Represent entity version.\n * May be backed by Automerge.\n * Entities with no history are not versioned.\n * Named EntityVersion to avoid conflict with types/version.ts.\n */\nexport interface EntityVersion {\n [VersionTypeId]: {};\n\n /**\n * Whether the entity is versioned.\n */\n versioned: boolean;\n\n /**\n * Automerge heads.\n */\n automergeHeads?: string[];\n}\n\nconst unversioned: EntityVersion = {\n [VersionTypeId]: {},\n versioned: false,\n};\n\n/**\n * Checks that `obj` is a version object.\n */\nexport const isVersion = (entity: unknown): entity is EntityVersion => {\n return entity != null && typeof entity === 'object' && VersionTypeId in entity;\n};\n\n/**\n * Returns the version of an entity.\n * Accepts both reactive entities and snapshots.\n */\nexport const version = (entity: AnyEntity): EntityVersion => {\n const ver = (entity as any)[ObjectVersionId];\n if (ver === undefined) {\n return unversioned;\n }\n return ver;\n};\n\n/**\n * Checks that `version` is a valid version object.\n */\nexport const versionValid = (ver: EntityVersion): boolean => {\n assertArgument(isVersion(ver), 'version', 'Invalid version object');\n return !!ver.versioned;\n};\n\nexport type VersionCompareResult = 'unversioned' | 'equal' | 'different';\n\n/**\n * Compares two versions.\n * @param version1\n * @param version2\n * @returns 'unversioned' if either entity is unversioned, 'equal' if the versions are equal, 'different' if the versions are different.\n */\nexport const compareVersions = (version1: EntityVersion, version2: EntityVersion): VersionCompareResult => {\n assertArgument(isVersion(version1), 'version1', 'Invalid version object');\n assertArgument(isVersion(version2), 'version2', 'Invalid version object');\n\n if (!versionValid(version1) || !versionValid(version2)) {\n return 'unversioned';\n }\n\n if (version1.automergeHeads?.length !== version2.automergeHeads?.length) {\n return 'different';\n }\n if (version1.automergeHeads?.some((head) => !version2.automergeHeads?.includes(head))) {\n return 'different';\n }\n\n return 'equal';\n};\n\nexport const encodeVersion = (ver: EntityVersion): string => {\n return JSON.stringify(ver);\n};\n\nexport const decodeVersion = (ver: string): EntityVersion => {\n const parsed = JSON.parse(ver);\n parsed[VersionTypeId] = {};\n return parsed;\n};\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport * as semver from 'semver';\n\nimport { EncodedReference, type QueryAST, isEncodedReference } from '@dxos/echo-protocol';\nimport { DXN, EID } from '@dxos/keys';\n\nimport { getTypeURI } from '../Annotation/annotations';\nimport { getMetaChecked } from '../common/api/meta';\nimport { type AnyEntity } from '../common/types';\nimport { objectToJSON } from '../Obj/json-serializer';\n\n/**\n * Matches a tag filter against an object's stored tags. Tags may be stored as encoded references or\n * (in legacy data) bare URI strings, and those URIs may be in legacy DXN form. Both sides are\n * normalized to the canonical EID before comparing.\n */\nexport const matchesTag = (tags: readonly unknown[], filterTag: string): boolean => {\n const canonical = (uri: string): string => {\n const eid = EID.tryParse(uri);\n return (eid && EID.getEntityId(eid)) || uri;\n };\n const normalize = (tag: unknown): string =>\n canonical(isEncodedReference(tag) ? EncodedReference.toURI(tag) : (tag as string));\n const target = canonical(filterTag);\n return tags.some((tag) => normalize(tag) === target);\n};\n\n/**\n * Matches a meta `key` / `version` constraint against an object's meta `key` and `version`.\n */\nexport const matchMetaKey = (\n key: string,\n versionRange: string | undefined,\n objKey: string | undefined,\n objVersion: string | undefined,\n): boolean => {\n if (objKey !== key) {\n return false;\n }\n if (versionRange === undefined) {\n return true;\n }\n if (objVersion === undefined || semver.valid(objVersion) === null) {\n return false;\n }\n if (semver.validRange(versionRange) === null) {\n return false;\n }\n return semver.satisfies(objVersion, versionRange, { includePrerelease: true });\n};\n\n/**\n * Compares a filter's type discriminator against the value stored on an object's `system.type`.\n */\nexport const compareTypenameStrings = (expectedStr: string, actualStr: string): boolean => {\n const expectedEid = EID.tryParse(expectedStr);\n if (expectedEid) {\n const actualEid = EID.tryParse(actualStr);\n if (!actualEid) {\n return false;\n }\n if (EID.getEntityId(expectedEid) !== EID.getEntityId(actualEid)) {\n return false;\n }\n const expectedSpaceId = EID.getSpaceId(expectedEid);\n const actualSpaceId = EID.getSpaceId(actualEid);\n return expectedSpaceId === undefined || actualSpaceId === undefined || expectedSpaceId === actualSpaceId;\n }\n\n const expectedDxn = DXN.tryMake(expectedStr);\n if (expectedDxn) {\n const actualDxn = DXN.tryMake(actualStr);\n if (!actualDxn) {\n return false;\n }\n if (DXN.getName(expectedDxn) !== DXN.getName(actualDxn)) {\n return false;\n }\n const expectedVersion = DXN.getVersion(expectedDxn);\n const actualVersion = DXN.getVersion(actualDxn);\n return expectedVersion === undefined || actualVersion === undefined || expectedVersion === actualVersion;\n }\n\n return expectedStr === actualStr;\n};\n\nconst structuralMatch = (filterObj: any, targetObj: any, strict = true): boolean => {\n if (typeof filterObj !== 'object' || filterObj === null) {\n return filterObj === targetObj;\n }\n\n if (typeof targetObj !== 'object' || targetObj === null) {\n return false;\n }\n\n const filterKeys = Object.keys(filterObj);\n const targetKeys = Object.keys(targetObj);\n if (strict && filterKeys.length !== targetKeys.length) {\n return false;\n }\n\n return filterKeys.every((key) => {\n if (!(key in targetObj)) {\n return false;\n }\n const filterValue = filterObj[key];\n const targetValue = targetObj[key];\n\n if (typeof filterValue === 'object' && filterValue !== null) {\n return structuralMatch(filterValue, targetValue);\n }\n\n return filterValue === targetValue;\n });\n};\n\nexport const filterMatchValue = (filter: QueryAST.Filter, value: unknown): boolean => {\n switch (filter.type) {\n case 'compare': {\n const compareValue = filter.value as any;\n switch (filter.operator) {\n case 'eq':\n if (isEncodedReference(compareValue)) {\n if (!isEncodedReference(value)) {\n return false;\n }\n return EncodedReference.toURI(value) === EncodedReference.toURI(compareValue);\n }\n return value === compareValue;\n case 'neq':\n return value !== compareValue;\n case 'gt':\n return (value as any) > compareValue;\n case 'gte':\n return (value as any) >= compareValue;\n case 'lt':\n return (value as any) < compareValue;\n case 'lte':\n return (value as any) <= compareValue;\n default:\n return false;\n }\n }\n case 'object': {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n\n if (filter.props) {\n for (const [key, valueFilter] of Object.entries(filter.props)) {\n const nestedValue = (value as any)[key];\n if (!filterMatchValue(valueFilter, nestedValue)) {\n return false;\n }\n }\n }\n\n return true;\n }\n case 'in': {\n return filter.values.includes(value);\n }\n case 'contains': {\n if (!Array.isArray(value)) {\n return false;\n }\n\n return value.some((element) => {\n if (typeof filter.value === 'object' && filter.value !== null && !Array.isArray(filter.value)) {\n return structuralMatch(filter.value, element);\n }\n\n return element === filter.value;\n });\n }\n case 'range': {\n return (value as any) >= filter.from && (value as any) <= filter.to;\n }\n case 'not': {\n return !filterMatchValue(filter.filter, value);\n }\n case 'and': {\n return filter.filters.every((f) => filterMatchValue(f, value));\n }\n case 'or': {\n return filter.filters.some((f) => filterMatchValue(f, value));\n }\n default:\n return false;\n }\n};\n\n/**\n * Matches a filter against an entity proxy without full JSON serialization when possible.\n */\nexport const filterMatchEntity = (filter: QueryAST.Filter, entity: AnyEntity): boolean => {\n switch (filter.type) {\n case 'object': {\n if (filter.typename !== null) {\n const typeURI = getTypeURI(entity);\n if (!typeURI || !compareTypenameStrings(filter.typename, typeURI)) {\n return false;\n }\n }\n\n if (filter.id && filter.id.length > 0 && !filter.id.includes(entity.id)) {\n return false;\n }\n\n if (filter.props) {\n let json: ReturnType<typeof objectToJSON> | null = null;\n try {\n json = objectToJSON(entity);\n } catch {\n // Serialization of complex static-type entities may throw.\n }\n if (json === null) {\n return false;\n }\n for (const [key, valueFilter] of Object.entries(filter.props)) {\n if (key.startsWith('@')) {\n continue;\n }\n if (!filterMatchValue(valueFilter, (json as any)[key])) {\n return false;\n }\n }\n }\n\n const meta = getMetaChecked(entity);\n\n if (filter.foreignKeys && filter.foreignKeys.length > 0) {\n const hasKey = filter.foreignKeys.some((fk) => meta.keys.some((k) => k.source === fk.source && k.id === fk.id));\n if (!hasKey) {\n return false;\n }\n }\n\n if (filter.metaKey !== undefined) {\n if (!matchMetaKey(filter.metaKey, filter.metaVersion, meta.key, meta.version)) {\n return false;\n }\n }\n\n return true;\n }\n\n case 'tag': {\n const rawTags = getMetaChecked(entity).tags;\n const tags = rawTags.map((tag: any) => (typeof tag?.encode === 'function' ? tag.encode() : tag));\n return matchesTag(tags, filter.tag);\n }\n\n case 'text-search': {\n return false;\n }\n\n case 'timestamp': {\n throw new Error('Timestamp filters must be handled at the index level, not in-memory matching.');\n }\n\n case 'child-of': {\n throw new Error('child-of filters must be handled at the executor level, not in-memory matching.');\n }\n\n case 'not': {\n return !filterMatchEntity(filter.filter, entity);\n }\n\n case 'and': {\n return filter.filters.every((f) => filterMatchEntity(f, entity));\n }\n\n case 'or': {\n return filter.filters.some((f) => filterMatchEntity(f, entity));\n }\n\n default:\n return false;\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { raise } from '@dxos/debug';\nimport { type EncodedReference, EntityStructure, isEncodedReference } from '@dxos/echo-protocol';\nimport { assertArgument, invariant } from '@dxos/invariant';\nimport { EID, EntityId, URI } from '@dxos/keys';\nimport { assumeType, decodeUint8ArrayFromJson, deepMapValues, isEncodedUint8Array, visitValues } from '@dxos/util';\n\nimport type * as Database from '../../Database';\nimport type * as Obj from '../../Obj';\nimport { getTypeAnnotation, getTypeURI, setTypename } from '../Annotation';\nimport { attachTypedJsonSerializer, defineHiddenProperty, typedJsonSerializer } from '../common/proxy';\nimport {\n type AnyEntity,\n ATTR_PARENT,\n ATTR_TYPE,\n EntityKind,\n KindId,\n ParentId,\n setSchema,\n setType,\n} from '../common/types';\nimport { ATTR_META, EntityMetaSchema } from '../common/types/meta';\nimport { MetaId } from '../common/types/model-symbols';\nimport {\n ATTR_DELETED,\n ATTR_RELATION_SOURCE,\n ATTR_RELATION_TARGET,\n ATTR_SELF_URI,\n ATTR_SELF_URI_LEGACY,\n ObjectDatabaseId,\n type ObjectJSON,\n RelationSourceDXNId,\n RelationSourceId,\n RelationTargetDXNId,\n RelationTargetId,\n SelfURIId,\n assertObjectModel,\n} from '../Entity';\nimport { Ref, type RefResolver, refFromEncodedReference, setRefResolver } from '../Ref';\n\n// Re-export for backward compatibility.\nexport { attachTypedJsonSerializer };\n\ntype DeepReplaceRef<T> =\n T extends Ref<any>\n ? EncodedReference\n : T extends object\n ? {\n [K in keyof T]: DeepReplaceRef<T[K]>;\n }\n : T;\n\ntype SerializedObject<T extends { id: string }> = {\n [K in keyof T]: DeepReplaceRef<T[K]>;\n} & ObjectJSON;\n\n/**\n * Converts object to it's JSON representation.\n */\nexport const objectToJSON = <T extends AnyEntity>(obj: T): SerializedObject<T> => {\n const typename = getTypeURI(obj);\n invariant(typename && typeof typename === 'string');\n return typedJsonSerializer.call(obj);\n};\n\n/**\n * Creates an object from it's json representation.\n * Performs schema validation.\n * References and schema will be resolvable if the `refResolver` is provided.\n * The function need to be async to support resolving the schema as well as the relation endpoints.\n *\n * @param jsonData - JSON representation of the object.\n * @param options.refResolver - Resolver for references.\n * @param options.uri - Override object URI.\n * @param options.database - Database to associate with the object.\n */\nexport const objectFromJSON = async (\n jsonData: unknown,\n {\n refResolver,\n uri,\n database,\n parent,\n }: { refResolver?: RefResolver; uri?: URI.URI; database?: Database.Database; parent?: Obj.Unknown } = {},\n): Promise<AnyEntity> => {\n assumeType<ObjectJSON>(jsonData);\n assertArgument(typeof jsonData === 'object' && jsonData !== null, 'jsonData', 'expect object');\n assertArgument(typeof jsonData[ATTR_TYPE] === 'string', 'jsonData[ATTR_TYPE]', 'expected object to have a type');\n assertArgument(typeof jsonData.id === 'string', 'jsonData.id', 'expected object to have an id');\n\n const type = URI.make(jsonData[ATTR_TYPE]);\n const schema = await refResolver?.resolveSchema(type);\n invariant(schema === undefined || Schema.isSchema(schema));\n const decodedInput = restoreUint8Arrays(stripInternalJsonKeys(jsonData));\n\n let obj: any;\n if (schema != null) {\n obj = await schema.pipe(Schema.decodeUnknownPromise)(decodedInput);\n if (refResolver) {\n setRefResolverOnData(obj, refResolver);\n }\n } else {\n obj = decodeGeneric(decodedInput, { refResolver });\n }\n\n invariant(EntityId.isValid(obj.id), 'Invalid object id');\n setTypename(obj, type);\n if (schema) {\n setSchema(obj, schema);\n }\n // Resolve and stamp the source type entity, if the resolver provides one.\n // Lets `Obj.getType` / `Entity.getType` return a stable entity for objects\n // loaded via `Obj.fromJSON` (serializer / queue paths).\n if (refResolver?.resolveType) {\n const typeEntity = await refResolver.resolveType(type);\n if (typeEntity != null) {\n setType(obj, typeEntity);\n }\n }\n\n const isRelation =\n typeof jsonData[ATTR_RELATION_SOURCE] === 'string' || typeof jsonData[ATTR_RELATION_TARGET] === 'string';\n if (isRelation) {\n const sourceDxn = jsonData[ATTR_RELATION_SOURCE] ?? raise(new TypeError('Missing relation source'));\n const targetDxn = jsonData[ATTR_RELATION_TARGET] ?? raise(new TypeError('Missing relation target'));\n\n const source = (await refResolver?.resolveLegacy(sourceDxn)) as AnyEntity | undefined;\n const target = (await refResolver?.resolveLegacy(targetDxn)) as AnyEntity | undefined;\n\n defineHiddenProperty(obj, KindId, EntityKind.Relation);\n defineHiddenProperty(obj, RelationSourceDXNId, sourceDxn);\n defineHiddenProperty(obj, RelationTargetDXNId, targetDxn);\n defineHiddenProperty(obj, RelationSourceId, source);\n defineHiddenProperty(obj, RelationTargetId, target);\n } else {\n // Honour the schema's TypeAnnotation kind — persisted `Type.Type` entities\n // (e.g. dynamic schemas loaded from a snapshot import) must brand as\n // `KindId = Type`, not Object, otherwise `Filter.type(Type.Type)` /\n // `Type.isType` skip them and the schema registry never picks them up.\n // Mirrors the kind resolution in `createObject` (the in-memory path).\n const annotationKind = schema != null ? getTypeAnnotation(schema)?.kind : undefined;\n defineHiddenProperty(obj, KindId, annotationKind === EntityKind.Type ? EntityKind.Type : EntityKind.Object);\n }\n\n if (typeof jsonData[ATTR_META] === 'object') {\n const meta = await EntityMetaSchema.pipe(Schema.decodeUnknownPromise)(normalizeMeta(jsonData[ATTR_META]));\n invariant(Array.isArray(meta.keys));\n defineHiddenProperty(obj, MetaId, meta);\n } else {\n defineHiddenProperty(obj, MetaId, {\n keys: [],\n tags: [],\n annotations: {},\n });\n }\n\n if (jsonData[ATTR_PARENT]) {\n const parentDxn = jsonData[ATTR_PARENT];\n const resolvedParent = (await refResolver?.resolveLegacy(parentDxn)) as Obj.Unknown | undefined;\n defineHiddenProperty(obj, ParentId, resolvedParent);\n } else if (parent) {\n defineHiddenProperty(obj, ParentId, parent);\n }\n\n if (uri) {\n defineHiddenProperty(obj, SelfURIId, uri);\n }\n\n if (database) {\n defineHiddenProperty(obj, ObjectDatabaseId, database);\n }\n\n assertObjectModel(obj);\n invariant((obj as any)[ATTR_TYPE] === undefined, 'Invalid object model');\n invariant((obj as any)[ATTR_META] === undefined, 'Invalid object model');\n invariant((obj as any)[ATTR_DELETED] === undefined, 'Invalid object model');\n invariant((obj as any)[ATTR_SELF_URI] === undefined, 'Invalid object model');\n invariant((obj as any)[ATTR_SELF_URI_LEGACY] === undefined, 'Invalid object model');\n invariant((obj as any)[ATTR_RELATION_SOURCE] === undefined, 'Invalid object model');\n invariant((obj as any)[ATTR_RELATION_TARGET] === undefined, 'Invalid object model');\n return obj;\n};\n\n/**\n * Backfills required meta fields and upgrades legacy `tags` (bare URI strings) to encoded references\n * so serialized data produced before the tags-as-refs migration still decodes.\n */\nconst normalizeMeta = (meta: any): any => {\n const tags = Array.isArray(meta?.tags)\n ? meta.tags.map((tag: unknown) => (typeof tag === 'string' ? { '/': URI.make(tag) } : tag))\n : [];\n // Coalesce required fields so explicit `undefined` in legacy input doesn't override the defaults.\n return {\n ...meta,\n keys: Array.isArray(meta?.keys) ? meta.keys : [],\n tags,\n annotations: meta?.annotations ?? {},\n };\n};\n\nconst decodeGeneric = (jsonData: unknown, options: { refResolver?: RefResolver }) => {\n const props = stripInternalJsonKeys(jsonData);\n\n return deepMapValues(props, (value, visitor) => {\n if (isEncodedReference(value)) {\n return refFromEncodedReference(value, options.refResolver);\n }\n if (isEncodedUint8Array(value)) {\n return decodeUint8ArrayFromJson(value);\n }\n\n return visitor(value);\n });\n};\n\n/**\n * Recursively replaces encoded `Uint8Array` JSON markers with actual `Uint8Array` instances.\n * Runs before schema decoding so `Schema.Uint8ArrayFromSelf` sees real bytes.\n */\nconst restoreUint8Arrays = (data: unknown): any =>\n deepMapValues(data, (value, recurse) => {\n if (isEncodedUint8Array(value)) {\n return decodeUint8ArrayFromJson(value);\n }\n return recurse(value);\n });\n\nconst stripInternalJsonKeys = (jsonData: unknown) => {\n const {\n [ATTR_TYPE]: _type,\n [ATTR_META]: _meta,\n [ATTR_DELETED]: _deleted,\n [ATTR_SELF_URI]: _selfUri,\n [ATTR_SELF_URI_LEGACY]: _legacySelfUri,\n [ATTR_RELATION_SOURCE]: _relationSource,\n [ATTR_RELATION_TARGET]: _relationTarget,\n ...props\n } = jsonData as any;\n\n return props;\n};\n\nexport const setRefResolverOnData = (obj: AnyEntity, refResolver: RefResolver) => {\n const visitor = (value: unknown) => {\n if (Ref.isRef(value)) {\n setRefResolver(value, refResolver);\n } else {\n visitValues(value, visitor);\n }\n };\n\n visitor(obj);\n};\n\n/**\n * Convert EntityStructure to JSON data for indexing.\n * Different from {@link objectToJSON} as it takes the internal {@link EntityStructure} representation directly\n */\nexport const objectStructureToJson = (objectId: EntityId, structure: EntityStructure): Obj.JSON => {\n const typeRef = EntityStructure.getTypeReference(structure)?.['/'];\n const parent = EntityStructure.getParent(structure)?.['/'];\n const source = EntityStructure.getRelationSource(structure)?.['/'];\n const target = EntityStructure.getRelationTarget(structure)?.['/'];\n return {\n ...structure.data,\n id: objectId,\n [ATTR_TYPE]: typeRef ? URI.make(typeRef) : undefined,\n [ATTR_DELETED]: EntityStructure.isDeleted(structure),\n [ATTR_PARENT]: parent !== undefined ? EID.tryParse(parent) : undefined,\n [ATTR_RELATION_SOURCE]: source !== undefined ? EID.tryParse(source) : undefined,\n [ATTR_RELATION_TARGET]: target !== undefined ? EID.tryParse(target) : undefined,\n };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { getTypename } from '../Annotation';\nimport { type AnyProperties } from '../common/types';\n\n// TODO(dmaretskyi): Rename to represent commonality between objects and relations (e.g. `entity`).\nexport type TypedObjectOptions = {\n // TODO(burdon): Document.\n partial?: true;\n // TODO(burdon): Document.\n record?: true;\n};\n\n/**\n *\n */\n// TODO(burdon): Comment required.\n// TODO(dmaretskyi): Rename to represent commonality between objects and relations (e.g. `entity`).\ntype SimplifiedSchemaFields<\n SchemaFields extends Schema.Struct.Fields,\n Options extends TypedObjectOptions,\n> = Options['partial'] extends boolean\n ? Schema.SimplifyMutable<Partial<Schema.Struct.Type<SchemaFields>>>\n : Schema.SimplifyMutable<Schema.Struct.Type<SchemaFields>>;\n\n/**\n *\n */\n// TODO(burdon): Comment required.\n// TODO(dmaretskyi): Rename to represent commonality between objects and relations (e.g. `entity`).\nexport type TypedObjectFields<\n SchemaFields extends Schema.Struct.Fields,\n Options extends TypedObjectOptions,\n> = SimplifiedSchemaFields<SchemaFields, Options> & { id: string } & (Options['record'] extends boolean\n ? Schema.SimplifyMutable<Schema.IndexSignature.Type<Schema.IndexSignature.Records>>\n : {});\n\nexport const makeTypedEntityClass = (\n typename: string,\n version: string,\n baseSchema: Schema.Schema.AnyNoContext,\n): Schema.SchemaClass<any> => {\n return class {\n // Implement TypedObject properties.\n static readonly typename = typename;\n static readonly version = version;\n\n // Implement Schema.Schema properties.\n // TODO(burdon): Comment required.\n static readonly [Schema.TypeId] = schemaVariance;\n static readonly ast = baseSchema.ast;\n static readonly annotations = baseSchema.annotations.bind(baseSchema);\n static readonly pipe = baseSchema.pipe.bind(baseSchema);\n\n // TODO(burdon): Comment required.\n static [Symbol.hasInstance](obj: AnyProperties) {\n return obj != null && getTypename(obj) === typename;\n }\n\n // TODO(burdon): Throw APIError.\n private constructor() {\n throw new Error('Use live(Typename, { ...fields }) to instantiate an object.');\n }\n } as any;\n};\n\nconst schemaVariance = {\n _A: (_: any) => _,\n _I: (_: any) => _,\n _R: (_: never) => _,\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { raise } from '@dxos/debug';\nimport { assertArgument, failedInvariant } from '@dxos/invariant';\nimport { EntityId } from '@dxos/keys';\n\nimport type * as Type from '../../Type';\nimport { getSchemaURI, getTypeAnnotation, setTypename } from '../Annotation';\nimport { defineHiddenProperty } from '../common/proxy';\nimport {\n EntityKind,\n KindId,\n SchemaKindId,\n StaticTypeSchemaSlot,\n getStaticTypeSchema,\n setSchema,\n setType,\n} from '../common/types';\nimport { type EntityMeta } from '../common/types/meta';\nimport { MetaId } from '../common/types/model-symbols';\nimport {\n RelationSourceDXNId,\n RelationSourceId,\n RelationTargetDXNId,\n RelationTargetId,\n assertObjectModel,\n getObjectEchoUri,\n} from '../Entity';\nimport { attachedTypedObjectInspector } from './inspect';\nimport { attachTypedJsonSerializer } from './json-serializer';\n\n// Omits the brand slots — those get stamped on the instance by the entity\n// handler (KindId via setKind, SchemaKindId derived in the proxy `get` trap\n// from kind + jsonSchema.entityKind, StaticTypeSchemaSlot lazily via the\n// proxy), not supplied by the caller. Allows `[Obj.Meta]` (MetaId symbol) for\n// seeding registry-provenance meta at construction (mirrors `Obj.make`).\nexport type CreateObjectProps<T> = (T extends { id: string }\n ? Omit<T, 'id' | KindId | SchemaKindId | StaticTypeSchemaSlot> & { id?: string }\n : Omit<T, KindId | SchemaKindId | StaticTypeSchemaSlot>) & {\n readonly [MetaId]?: Partial<EntityMeta>;\n};\n\n/**\n * Creates a new object instance from a schema and data, without signal reactivity.\n * This static version creates plain JavaScript objects that are not reactive/observable.\n * For reactive objects that automatically update UI when changed, use the regular live() function.\n *\n * @param schema - The Effect schema that defines the object's structure and type, piped into EchoObjectSchema\n * @param data - The data to initialize the object with. The id and @type fields are handled automatically.\n * @returns A new non-reactive object instance conforming to the schema\n * @throws {Error} If the schema is not an object schema\n * @throws {TypeError} If data contains an @type field\n *\n * @example\n * ```ts\n * class Contact extends Type.makeObject<Contact>(DXN.make('com.example.type.person', '0.1.0'))(\n * Schema.Struct({ name: Schema.String, email: Schema.String }),\n * ) {}\n *\n * const contact = createObject(Contact, {\n * name: \"John\",\n * email: \"john@example.com\",\n * })\n * ```\n */\n// TODO(burdon): Make internal.\nexport const createObject: {\n <T extends Type.AnyEntity>(input: T, props: NoInfer<CreateObjectProps<Type.InstanceType<T>>>): Type.InstanceType<T>;\n} = (input: any, props: any): any => {\n // `Type.Type` entities aren't `Schema.Schema` themselves; read the source\n // schema off the hidden slot (persisted entities synthesize it lazily via\n // the proxy `get` trap).\n const schema = getStaticTypeSchema(input) ?? failedInvariant('Type entity is missing its source schema');\n const annotation = getTypeAnnotation(schema);\n if (!annotation) {\n throw new Error('Schema is not an ECHO schema');\n }\n assertArgument(!('@type' in props), 'data', '@type is not allowed');\n assertArgument(!(RelationSourceDXNId in props), 'data', 'Relation source DXN is not allowed in the constructor');\n assertArgument(!(RelationTargetDXNId in props), 'data', 'Relation target DXN is not allowed in the constructor');\n assertArgument(\n RelationSourceId in props === RelationTargetId in props,\n 'data',\n 'Relation source and target must be provided together',\n );\n\n // Pull `[Obj.Meta]` (MetaId-symbol) off props before spreading so it doesn't\n // leak into data. Callers use this to seed registry-provenance meta fields\n // (`key`, `version`) and foreign keys / tags at construction time, mirroring\n // `Obj.make`'s symbol-keyed meta convention.\n const metaOverride = props[MetaId];\n if (metaOverride !== undefined) {\n delete props[MetaId];\n }\n\n // Raw object.\n const obj = { ...props, id: props.id ?? EntityId.random() };\n\n // Metadata. Instance-kind is read from the schema's TypeAnnotation (set by\n // EchoObjectSchema / EchoRelationSchema / EchoTypeKindSchema): instances of\n // a type-kind meta-schema are themselves type-kind entities, etc. The\n // RelationSourceId-in-props check covers the legacy path where the schema\n // annotation isn't authoritative.\n const kind =\n annotation.kind === EntityKind.Type\n ? EntityKind.Type\n : annotation.kind === EntityKind.Relation || RelationSourceId in props\n ? EntityKind.Relation\n : EntityKind.Object;\n defineHiddenProperty(obj, KindId, kind);\n defineHiddenProperty(obj, MetaId, {\n ...metaOverride,\n keys: metaOverride?.keys ?? [],\n tags: metaOverride?.tags ?? [],\n annotations: metaOverride?.annotations ?? {},\n });\n setSchema(obj, schema);\n // If the caller passed a type entity (recognised via the schema slot), keep\n // a reference to it on the instance for `Obj.getType` / `Relation.getType`.\n if (input !== schema) {\n setType(obj, input);\n }\n setTypename(obj, getSchemaURI(schema) ?? failedInvariant('Missing schema URI'));\n attachTypedJsonSerializer(obj);\n attachedTypedObjectInspector(obj);\n\n // Relation.\n if (kind === EntityKind.Relation) {\n const sourceDXN = getObjectEchoUri(props[RelationSourceId]) ?? raise(new Error('Unresolved relation source'));\n const targetDXN = getObjectEchoUri(props[RelationTargetId]) ?? raise(new Error('Unresolved relation target'));\n defineHiddenProperty(obj, RelationSourceDXNId, sourceDXN);\n defineHiddenProperty(obj, RelationTargetDXNId, targetDXN);\n }\n\n assertObjectModel(obj);\n return obj;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type { InspectOptionsStylized, inspect as inspectFn } from 'node:util';\n\nimport { type CustomInspectFunction, inspectCustom } from '@dxos/debug';\n\nimport { getTypeURI } from '../Annotation';\nimport { type AnyEntity, ATTR_TYPE } from '../common/types';\nimport { ATTR_META } from '../common/types/meta';\nimport { MetaId } from '../common/types/model-symbols';\n\n/*\n * @internal\n */\nexport const attachedTypedObjectInspector = (obj: any) => {\n const descriptor = Object.getOwnPropertyDescriptor(obj, inspectCustom);\n if (descriptor) {\n return;\n }\n\n Object.defineProperty(obj, inspectCustom, {\n value: typedObjectInspectFunction,\n writable: false,\n enumerable: false,\n configurable: true,\n });\n};\n\n// NOTE: KEEP as function.\nconst typedObjectInspectFunction: CustomInspectFunction<AnyEntity> = function (\n this: AnyEntity,\n depth: number,\n options: InspectOptionsStylized,\n inspect: typeof inspectFn,\n) {\n const { id, ...props } = this;\n return inspect(\n {\n id,\n [ATTR_TYPE]: getTypeURI(this),\n ...props,\n [ATTR_META]: (this as any)[MetaId], // TODO(dmaretskyi): Couldn't use getMeta since that throw's if the object has no meta.\n },\n options,\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type AnyProperties } from '../common/types';\nimport { ObjectDeletedId } from '../Entity';\n\n/**\n * @returns `true` if the object has been marked as deleted.\n */\nexport const isDeleted = (obj: AnyProperties): boolean => {\n if ((obj as any)[ObjectDeletedId] === undefined) {\n // TODO(dmaretskyi): Return to prior behavior of throwing.\n // throw new Error('Object does not support deletion marker');\n return false;\n }\n\n return (obj as any)[ObjectDeletedId] ?? false;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Match from 'effect/Match';\nimport * as Option from 'effect/Option';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { SchemaEx } from '@dxos/effect';\nimport { invariant } from '@dxos/invariant';\n\nimport { type Mutable } from '../common/proxy';\nimport { getSchema } from '../common/types';\n\n/**\n * Set a deeply nested property on an object.\n * Must be called within an Obj.update or Relation.update callback.\n */\nexport const setValue = (obj: Mutable<any>, path: readonly (string | number)[], value: any): void => {\n invariant(path.length > 0, 'Path must not be empty');\n\n const schema = getSchema(obj);\n invariant(schema != null, 'Object must have a schema');\n\n let parent = obj;\n let currentAST: SchemaAST.AST | undefined = schema.ast;\n\n // Navigate to the parent of the target property.\n for (let i = 0; i < path.length - 1; i++) {\n const part = path[i];\n const key = typeof part === 'number' ? part : String(part);\n if (parent[key] === undefined) {\n const propertyAST = getPropertyAST(currentAST, String(part));\n const shouldBeArray = propertyAST ? SchemaEx.isArrayType(propertyAST) : false;\n\n if (shouldBeArray) {\n // Create array.\n parent[key] = [];\n } else {\n // TODO(wittjosiah): Is there a better way to handle this than creating an object with defaults?\n // Perhaps properties on objects should be optional by default?\n // Create object with defaults for required fields.\n const objWithDefaults = createObjectWithDefaults(propertyAST);\n parent[key] = objWithDefaults;\n }\n }\n\n parent = parent[key];\n currentAST = getPropertyAST(currentAST, String(part));\n }\n\n const finalKey = path[path.length - 1];\n parent[finalKey] = value;\n\n return value;\n};\n\n/**\n * Helper to get the AST of a nested property.\n * @param ast - Current schema AST.\n * @param propertyName - Name of the property to get.\n * @returns The AST of the nested property, or undefined if not found.\n */\nconst getPropertyAST = (ast: SchemaAST.AST | undefined, propertyName: string): SchemaAST.AST | undefined => {\n if (!ast) {\n return undefined;\n }\n\n if (SchemaEx.isNestedType(ast)) {\n const properties = SchemaEx.getProperties(ast);\n const property = properties.find((p) => p.name.toString() === propertyName);\n if (property) {\n return SchemaEx.getBaseType(property).type;\n }\n }\n\n if (SchemaEx.isArrayType(ast)) {\n const elementType = SchemaEx.getArrayElementType(ast);\n return elementType;\n }\n\n return undefined;\n};\n\n/**\n * Get all required properties from a schema AST.\n * A property is required if it's not optional.\n *\n * @param ast - Schema AST to inspect.\n * @returns Array of required properties with their types.\n */\nconst getRequiredProperties = (ast: SchemaAST.AST | undefined): SchemaEx.SchemaProperty[] => {\n if (!ast) {\n return [];\n }\n\n // Only objects/structs have properties with optional/required distinction.\n if (!SchemaEx.isNestedType(ast)) {\n return [];\n }\n\n const properties = SchemaEx.getProperties(ast);\n\n // Filter to only required properties (where isOptional === false).\n return properties.filter((p) => !p.isOptional);\n};\n\n/**\n * Get the default value for a primitive type.\n * Returns undefined for non-primitive or unsupported types.\n *\n * @param ast - Type AST.\n * @returns Default value for the type, or undefined.\n */\nconst getDefaultValueForType = (ast: SchemaAST.AST | undefined): any => {\n if (!ast) {\n return undefined;\n }\n\n const defaultValue = SchemaAST.getDefaultAnnotation(ast);\n if (Option.isSome(defaultValue)) {\n return defaultValue.value;\n }\n\n return Match.value(ast).pipe(\n Match.when({ _tag: 'StringKeyword' }, () => ''),\n Match.when({ _tag: 'NumberKeyword' }, () => 0),\n Match.when({ _tag: 'BooleanKeyword' }, () => false),\n Match.orElse(() => undefined),\n );\n};\n\n/**\n * Create an object with default values for all required properties.\n * Handles primitive types (String, Number, Boolean) and recursively initializes required nested objects.\n *\n * @param ast - Schema AST describing the object structure.\n * @returns Object with required fields populated with defaults.\n */\nconst createObjectWithDefaults = (ast: SchemaAST.AST | undefined): any => {\n if (!ast) {\n return {};\n }\n\n const requiredProps = getRequiredProperties(ast);\n const obj: any = {};\n\n for (const prop of requiredProps) {\n const defaultValue = getDefaultValueForType(prop.type);\n if (defaultValue !== undefined) {\n obj[prop.name] = defaultValue;\n } else if (SchemaEx.isNestedType(prop.type)) {\n obj[prop.name] = createObjectWithDefaults(prop.type);\n }\n }\n\n return obj;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { assertArgument } from '@dxos/invariant';\nimport { deepMapValues } from '@dxos/util';\n\nimport {\n KindId,\n ObjectDatabaseId,\n ObjectDeletedId,\n ParentId,\n RelationSourceDXNId,\n RelationSourceId,\n RelationTargetDXNId,\n RelationTargetId,\n SchemaId,\n SelfURIId,\n SnapshotKindId,\n TypeEntityId,\n TypeId,\n} from '../common/types';\nimport { MetaId } from '../common/types/model-symbols';\n\n/**\n * Copy a Symbol-keyed property from source to target if it has a defined value.\n * Handles both plain objects (symbol in source) and proxies where get returns a value\n * but has/in returns false (e.g. ObjectDatabaseId on echo-db proxies).\n * Optional transform clones or mutates the value before assignment (e.g. for MetaId).\n */\nconst copySymbolProperty = (\n source: any,\n target: any,\n symbol: symbol,\n transform?: (value: unknown) => unknown,\n): void => {\n let value: unknown;\n // Echo-db proxy getters (e.g. RelationSourceId, RelationTargetId) can throw in certain states.\n try {\n value = source[symbol];\n } catch {\n return;\n }\n if (value !== undefined) {\n const finalValue = transform ? transform(value) : value;\n Object.defineProperty(target, symbol, {\n value: finalValue,\n writable: false,\n enumerable: false,\n configurable: false,\n });\n }\n};\n\n/**\n * Returns an immutable snapshot of the reactive object.\n * The snapshot is branded with SnapshotKindId (not KindId).\n */\nexport const getSnapshot = <T extends object>(obj: T): T => {\n assertArgument(typeof obj === 'object' && obj !== null && KindId in obj, 'obj', 'must be an entity');\n\n const snapshot = deepMapValues(obj, (value, recurse) => {\n // Do not recurse on references (but do recurse on arrays).\n if (\n typeof value === 'object' &&\n value !== null &&\n Object.getPrototypeOf(value) !== Object.prototype &&\n !Array.isArray(value)\n ) {\n return value;\n }\n\n return recurse(value);\n }) as any;\n\n // Add SnapshotKindId brand based on original KindId.\n if (obj != null && typeof obj === 'object' && KindId in obj) {\n snapshot[SnapshotKindId] = (obj as any)[KindId];\n }\n\n // Preserve Symbol-keyed properties that are important for type introspection.\n // These are not copied by deepMapValues since Object.keys() doesn't include symbols.\n const source = obj as any;\n\n // Type introspection symbols.\n copySymbolProperty(source, snapshot, TypeId);\n copySymbolProperty(source, snapshot, SchemaId);\n copySymbolProperty(source, snapshot, TypeEntityId);\n copySymbolProperty(source, snapshot, SelfURIId);\n\n // Database reference (required for Obj.getDatabase to work on snapshots).\n copySymbolProperty(source, snapshot, ObjectDatabaseId);\n copySymbolProperty(source, snapshot, ObjectDeletedId);\n\n // Parent reference (required for Obj.getParent to work on snapshots).\n copySymbolProperty(source, snapshot, ParentId);\n\n // Metadata symbol. Copy arrays/objects so the snapshot is not affected by mutations to the live meta.\n copySymbolProperty(source, snapshot, MetaId, (meta: any) => ({\n keys: [...(meta?.keys ?? [])],\n tags: [...(meta?.tags ?? [])],\n ...(meta?.key != null ? { key: meta.key } : {}),\n ...(meta?.version != null ? { version: meta.version } : {}),\n ...(meta?.annotations ? { annotations: { ...meta.annotations } } : {}),\n }));\n\n // Relation endpoint symbols.\n copySymbolProperty(source, snapshot, RelationSourceDXNId);\n copySymbolProperty(source, snapshot, RelationTargetDXNId);\n copySymbolProperty(source, snapshot, RelationSourceId);\n copySymbolProperty(source, snapshot, RelationTargetId);\n\n return Object.freeze(snapshot) as T;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Atom from '@effect-atom/atom/Atom';\nimport * as Result from '@effect-atom/atom/Result';\nimport * as Effect from 'effect/Effect';\nimport * as Function from 'effect/Function';\nimport * as Option from 'effect/Option';\n\nimport { assertArgument } from '@dxos/invariant';\n\nimport type * as Entity from '../../Entity';\nimport type * as Obj from '../../Obj';\nimport type * as Ref from '../../Ref';\nimport type * as Relation from '../../Relation';\nimport { getLabel } from '../Annotation';\nimport { snapshotForComparison } from '../common/atom-snapshot';\nimport { subscribe } from '../common/proxy/reactive';\nimport { getDatabase, isEntity } from '../Entity';\nimport { RefTypeId } from '../Ref/ref';\nimport { loadRefTarget } from '../Ref/utils';\nimport { isDeleted } from './deleted';\nimport { getSnapshot } from './snapshot';\n\nconst isRef = (obj: unknown): obj is Ref.Ref<any> =>\n obj != null && typeof obj === 'object' && RefTypeId in (obj as object);\n\nconst getReactiveOption = <T extends Obj.Unknown>(snapshot: Obj.Snapshot<T>): Effect.Effect<Option.Option<T>, never> =>\n Effect.gen(function* () {\n const db = getDatabase(snapshot as any);\n if (!db) {\n return Option.none();\n }\n const obj = db.getObjectById((snapshot as any).id);\n return obj ? Option.some(obj as T) : Option.none();\n });\n\n/**\n * Atom family for ECHO objects.\n * Uses object reference as key — same object returns same atom.\n */\nconst objectFamily = Atom.family(<T extends Obj.Unknown>(obj: T): Atom.Atom<Obj.Snapshot<T>> => {\n return Atom.make<Obj.Snapshot<T>>((get) => {\n const unsubscribe = subscribe(obj, () => {\n // getSnapshot adds SnapshotKindId brand at runtime; cast bridges static types.\n get.setSelf(getSnapshot(obj) as unknown as Obj.Snapshot<T>);\n });\n\n get.addFinalizer(() => unsubscribe());\n\n return getSnapshot(obj) as unknown as Obj.Snapshot<T>;\n }).pipe(Atom.keepAlive);\n});\n\n/**\n * Atom family for ECHO refs (snapshot version).\n * Uses ref as key — same ref returns same atom.\n * Subscribes to target object changes after loading.\n */\nconst refFamily = Atom.family(<T extends Obj.Unknown>(ref: Ref.Ref<T>): Atom.Atom<Obj.Snapshot<T> | undefined> => {\n return Atom.make<Obj.Snapshot<T> | undefined>((get) => {\n let unsubscribeTarget: (() => void) | undefined;\n\n const setupTargetSubscription = (target: T): Obj.Snapshot<T> => {\n unsubscribeTarget?.();\n unsubscribeTarget = subscribe(target, () => {\n // Deleted objects resolve to undefined so callers don't need to inspect isDeleted.\n // getSnapshot adds SnapshotKindId brand at runtime; cast bridges static types.\n get.setSelf(isDeleted(target) ? undefined : (getSnapshot(target) as unknown as Obj.Snapshot<T>));\n });\n return getSnapshot(target) as unknown as Obj.Snapshot<T>;\n };\n\n get.addFinalizer(() => {\n unsubscribeTarget?.();\n });\n\n return loadRefTarget(ref, get, setupTargetSubscription);\n }).pipe(Atom.keepAlive);\n});\n\n/**\n * Atom family for ECHO object properties.\n * Uses nested families: outer keyed by object, inner keyed by property key.\n */\nconst propertyFamily = Atom.family(<T extends Obj.Unknown>(obj: T) =>\n Atom.family(<K extends keyof T>(key: K): Atom.Atom<T[K]> => {\n return Atom.make<T[K]>((get) => {\n let previousSnapshot = snapshotForComparison(obj[key]);\n\n const unsubscribe2 = subscribe(obj, () => {\n const newValue = obj[key];\n const newSnapshot = snapshotForComparison(newValue);\n if (newSnapshot !== previousSnapshot) {\n previousSnapshot = newSnapshot;\n get.setSelf(newSnapshot);\n }\n });\n\n get.addFinalizer(() => unsubscribe2());\n\n return snapshotForComparison(obj[key]);\n }).pipe(Atom.keepAlive);\n }),\n);\n\n/**\n * Atom family for ECHO objects — returns the live object, not a snapshot.\n */\nconst objectWithReactiveFamily = Atom.family(<T extends Obj.Unknown>(obj: T): Atom.Atom<T> => {\n return Atom.make<T>((get) => {\n const unsubscribe = subscribe(obj, () => {\n get.setSelf(obj);\n });\n\n get.addFinalizer(() => unsubscribe());\n\n return obj;\n }).pipe(Atom.keepAlive);\n});\n\n/**\n * Atom family for ECHO refs — returns the live reactive object, not a snapshot.\n */\nconst refWithReactiveFamily = Atom.family(<T extends Obj.Unknown>(ref: Ref.Ref<T>): Atom.Atom<T | undefined> => {\n const effect = (get: Atom.Context) =>\n Effect.gen(function* () {\n const snapshot = get(makeAtom(ref));\n if (snapshot == null) {\n return undefined;\n }\n const option = yield* getReactiveOption(snapshot);\n return Option.getOrElse(option, () => undefined);\n });\n\n return Function.pipe(\n Atom.make(effect),\n Atom.map((result) => Result.getOrElse(result, () => undefined)),\n );\n});\n\n/**\n * Atom family for a property of a ref's target object.\n * Resolves the ref (reactively) then projects the property atom, so it fires when the ref resolves or when\n * that property changes. Yields `undefined` while the target is unresolved.\n */\nconst refPropertyFamily = Atom.family(<T extends Obj.Unknown>(ref: Ref.Ref<T>) =>\n Atom.family(<K extends keyof T>(key: K): Atom.Atom<T[K] | undefined> => {\n return Atom.make<T[K] | undefined>((get) => {\n const target = get(refWithReactiveFamily(ref));\n return target ? get(propertyFamily(target)(key)) : undefined;\n }).pipe(Atom.keepAlive);\n }),\n);\n\n/**\n * Atom family for any ECHO entity (obj or relation) — returns a snapshot.\n */\nconst entityFamily = Atom.family(<T extends Entity.Unknown>(entity: T): Atom.Atom<Entity.Snapshot> => {\n return Atom.make<Entity.Snapshot>((get) => {\n const unsubscribe = subscribe(entity, () => {\n // getSnapshot adds SnapshotKindId brand at runtime; cast bridges static types.\n get.setSelf(getSnapshot(entity) as unknown as Entity.Snapshot);\n });\n\n get.addFinalizer(() => unsubscribe());\n\n return getSnapshot(entity) as unknown as Entity.Snapshot;\n }).pipe(Atom.keepAlive);\n});\n\n/**\n * Atom family for ECHO relations — returns a typed relation snapshot.\n */\nconst relationFamily = Atom.family(<T extends Relation.Unknown>(relation: T): Atom.Atom<Relation.Snapshot<T>> => {\n return Atom.make<Relation.Snapshot<T>>((get) => {\n const unsubscribe = subscribe(relation, () => {\n // getSnapshot adds SnapshotKindId brand at runtime; cast bridges static types.\n get.setSelf(getSnapshot(relation) as unknown as Relation.Snapshot<T>);\n });\n\n get.addFinalizer(() => unsubscribe());\n\n return getSnapshot(relation) as unknown as Relation.Snapshot<T>;\n }).pipe(Atom.keepAlive);\n});\n\n/**\n * Create a read-only snapshot atom for a reactive object or ref.\n * Updates automatically when the object is mutated.\n * For refs, subscribes to target object changes after loading.\n */\nexport const makeAtom: {\n <T extends Obj.Unknown>(obj: T): Atom.Atom<Obj.Snapshot<T>>;\n <T extends Obj.Unknown>(ref: Ref.Ref<T>): Atom.Atom<Obj.Snapshot<T> | undefined>;\n} = (objOrRef: Obj.Unknown | Ref.Ref<any>): Atom.Atom<any> => {\n if (isRef(objOrRef)) {\n return refFamily(objOrRef as any);\n }\n\n const obj = objOrRef as Obj.Unknown;\n assertArgument(isEntity(obj), 'obj', 'Object must be a reactive object');\n return objectFamily(obj as any);\n};\n\n/**\n * Create a read-only atom for a specific property of a reactive object, or of a ref's target.\n * Only fires updates when the property value actually changes. Given a ref, the atom resolves the target\n * first and yields `undefined` until it loads.\n */\nexport const makeProperty: {\n <T extends Obj.Unknown, K extends keyof T>(obj: T, key: K): Atom.Atom<T[K]>;\n <T extends Obj.Unknown, K extends keyof T>(ref: Ref.Ref<T>, key: K): Atom.Atom<T[K] | undefined>;\n} = (objOrRef: Obj.Unknown | Ref.Ref<any>, key: any): Atom.Atom<any> => {\n if (isRef(objOrRef)) {\n return refPropertyFamily(objOrRef as Ref.Ref<any>)(key);\n }\n\n const obj = objOrRef as Obj.Unknown;\n assertArgument(isEntity(obj), 'obj', 'Object must be a reactive object');\n return propertyFamily(obj)(key);\n};\n\n/**\n * Like `makeAtom` but returns the live reactive object instead of a snapshot.\n * Prefer `makeAtom` (snapshot) unless you need the live Obj for generic mutations.\n */\nexport const makeWithReactive: {\n <T extends Obj.Unknown>(obj: T): Atom.Atom<T>;\n <T extends Obj.Unknown>(ref: Ref.Ref<T>): Atom.Atom<T | undefined>;\n} = (objOrRef: Obj.Unknown | Ref.Ref<any>): Atom.Atom<any> => {\n if (isRef(objOrRef)) {\n return refWithReactiveFamily(objOrRef as Ref.Ref<any>);\n }\n\n const obj = objOrRef as Obj.Unknown;\n assertArgument(isEntity(obj), 'obj', 'Object must be a reactive object');\n return objectWithReactiveFamily(obj);\n};\n\n/**\n * Create a read-only snapshot atom for any ECHO entity (obj or relation).\n * Updates automatically when the entity is mutated.\n */\nexport const makeEntity = <T extends Entity.Unknown>(entity: T): Atom.Atom<Entity.Snapshot> => {\n assertArgument(isEntity(entity), 'entity', 'Must be a reactive ECHO entity');\n return entityFamily(entity);\n};\n\n/**\n * Create a read-only snapshot atom for a reactive relation.\n * Updates automatically when the relation is mutated.\n */\nexport const makeRelation = <T extends Relation.Unknown>(relation: T): Atom.Atom<Relation.Snapshot<T>> => {\n assertArgument(isEntity(relation), 'relation', 'Must be a reactive ECHO relation');\n return relationFamily(relation);\n};\n\n/**\n * Atom family for an entity's label string.\n * Fires only when the computed label actually changes, not on every entity mutation.\n */\nconst labelAtomFamily = Atom.family(<T extends Entity.Unknown>(entity: T): Atom.Atom<string | undefined> => {\n return Atom.make<string | undefined>((get) => {\n let previous = getLabel(entity);\n\n const unsubscribe = subscribe(entity, () => {\n const next = getLabel(entity);\n if (next !== previous) {\n previous = next;\n get.setSelf(next);\n }\n });\n\n get.addFinalizer(() => unsubscribe());\n return previous;\n }).pipe(Atom.keepAlive);\n});\n\n/**\n * Create a read-only atom for the label of a reactive ECHO entity.\n * Re-evaluates on entity mutation; only propagates when the label string changes.\n */\nexport const makeLabelAtom = <T extends Entity.Unknown>(entity: T): Atom.Atom<string | undefined> => {\n assertArgument(isEntity(entity), 'entity', 'Must be a reactive ECHO entity');\n return labelAtomFamily(entity);\n};\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\nimport { assumeType, deepMapValues } from '@dxos/util';\n\nimport type * as Obj from '../../Obj';\nimport { makeObject } from '../common/proxy';\nimport { ParentId, getSchema, getStaticTypeSchema, getType } from '../common/types';\nimport { getMeta } from '../common/types/meta';\nimport { type InternalObjectProps } from '../Entity/model';\nimport { Ref } from '../Ref';\n\n/**\n * Clones an object or relation.\n * By default this does not clone referenced objects, only the properties in the object; pass `opts.deep`\n * to recurse into refs (see {@link Obj.CloneOptions}).\n * @returns A new object with the same schema and properties.\n */\nexport const clone = <T extends Obj.Any>(obj: T, opts?: Obj.CloneOptions): T =>\n cloneInner(obj, opts, obj, new Map(), new Set());\n\n/**\n * Recursive clone worker threaded with two cycle-guard structures:\n * - `cache`: id → already-finished clone; reused when the same object appears more than once in a DAG.\n * - `inProgress`: ids of objects whose clone is currently being computed; a ref back into this set means\n * a true cycle — the original ref is kept rather than recursing forever.\n */\nconst cloneInner = <T extends Obj.Any>(\n obj: T,\n opts: Obj.CloneOptions | undefined,\n root: Obj.Any,\n cache: Map<string, Obj.Any>,\n inProgress: Set<string>,\n): T => {\n if (cache.has(obj.id)) {\n return cache.get(obj.id) as T;\n }\n inProgress.add(obj.id);\n\n const { id, ...data } = obj;\n // Prefer cloning through the type entity so the cloned instance preserves\n // `Obj.getType` identity. Falls back to the raw schema for older instances\n // that don't have a type-entity back-reference set (e.g. deserialized).\n const typeEntity = getType(obj);\n const schema = typeEntity != null ? getStaticTypeSchema(typeEntity) : getSchema(obj);\n invariant(schema != null, 'Object should have a type or schema');\n\n const mapRef = (value: unknown, recurse: (value: unknown) => unknown): unknown => {\n if (Ref.isRef(value)) {\n const target = value.target;\n // A ref back to an in-progress object means a cycle — keep the original ref to break it.\n if (\n target != null &&\n !inProgress.has(target.id) &&\n (opts?.deep === 'all' || (opts?.deep === 'parent' && isChildOf(target, root)))\n ) {\n return Ref.make(cloneInner(target, opts, root, cache, inProgress));\n }\n return value;\n }\n return recurse(value);\n };\n\n const props: any = deepMapValues(data, mapRef);\n if (opts?.retainId) {\n props.id = id;\n }\n const meta = deepMapValues(getMeta(obj), mapRef);\n const result = makeObject(schema, props, meta, typeEntity as object | undefined);\n\n inProgress.delete(obj.id);\n cache.set(obj.id, result);\n return result;\n};\n\n/**\n * Whether `entity`'s parent chain reaches `root` — i.e. it is an owned descendant that cascade-deletes with\n * the root. Walks the `ParentId` back-links (a finite tree); guarded against cycles defensively.\n */\nconst isChildOf = (entity: unknown, root: Obj.Any): boolean => {\n const seen = new Set<InternalObjectProps>();\n assumeType<InternalObjectProps>(entity);\n let parent = entity[ParentId];\n while (parent != null && !seen.has(parent)) {\n if (parent.id === root.id) {\n return true;\n }\n seen.add(parent);\n parent = parent[ParentId];\n }\n return false;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { invariant } from '@dxos/invariant';\n\n// TODO(ZaymonFC): Do this one at a time. This might be dangerous.\nexport const addFieldsToSchema = (\n schema: Schema.Schema.AnyNoContext,\n fields: Schema.Struct.Fields,\n): Schema.Schema.AnyNoContext => {\n const schemaExtension = Schema.partial(Schema.Struct(fields));\n return Schema.extend(schema, schemaExtension).annotations(\n schema.ast.annotations,\n ) as any as Schema.Schema.AnyNoContext;\n};\n\nexport const updateFieldsInSchema = (\n schema: Schema.Schema.AnyNoContext,\n fields: Schema.Struct.Fields,\n): Schema.Schema.AnyNoContext => {\n const ast = schema.ast as SchemaAST.TypeLiteral;\n invariant(SchemaAST.isTypeLiteral(ast));\n\n const updatedProperties = [...ast.propertySignatures];\n const propertiesToUpdate = (Schema.partial(Schema.Struct(fields)).ast as SchemaAST.TypeLiteral).propertySignatures;\n for (const property of propertiesToUpdate) {\n const index = updatedProperties.findIndex((p) => p.name === property.name);\n if (index !== -1) {\n updatedProperties[index] = property;\n } else {\n updatedProperties.push(property);\n }\n }\n\n return Schema.make(new SchemaAST.TypeLiteral(updatedProperties, ast.indexSignatures, ast.annotations));\n};\n\nexport const removeFieldsFromSchema = (\n schema: Schema.Schema.AnyNoContext,\n fieldNames: string[],\n): Schema.Schema.AnyNoContext => {\n return Schema.make(SchemaAST.omit(schema.ast, fieldNames)).annotations(schema.ast.annotations);\n};\n\nexport const updateFieldNameInSchema = (\n schema: Schema.Schema.AnyNoContext,\n { before, after }: { before: PropertyKey; after: PropertyKey },\n): Schema.Schema.AnyNoContext => {\n const ast = schema.ast as SchemaAST.TypeLiteral;\n invariant(SchemaAST.isTypeLiteral(ast));\n\n return Schema.make(\n new SchemaAST.TypeLiteral(\n ast.propertySignatures.map((p) =>\n p.name === before\n ? new SchemaAST.PropertySignature(after, p.type, p.isOptional, p.isReadonly, p.annotations)\n : p,\n ),\n ast.indexSignatures,\n ast.annotations,\n ),\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { IconAnnotation, LabelAnnotation } from '../Annotation';\nimport { EntityKind, KindId, SchemaKindId, StaticTypeSchemaSlot } from '../common/types';\nimport { EchoTypeKindSchema, TypeMetaSchemaDXN } from '../Entity';\nimport { JsonSchemaType } from '../JsonSchema';\n\n/**\n * Raw struct backing {@link TypeSchema}. Exposed only so `TypeSchema`\n * (the TS type) can derive its data fields via `Schema.Schema.Type<typeof ...>`;\n * runtime callers should use {@link TypeSchema} (the piped, branded entity).\n *\n * `typename` and `version` are NOT data fields — they live in `EntityMeta.key` /\n * `EntityMeta.version` (the canonical registry-provenance pair, queryable via\n * `Filter.key(...)`). The same `jsonSchema` payload also embeds them so a\n * standalone JSON-Schema export remains self-describing, but the schema-registry\n * reads/writes them through meta.\n */\nconst TypeSchemaStruct = Schema.Struct({\n name: Schema.optional(Schema.String),\n jsonSchema: JsonSchemaType,\n});\n\n/**\n * Persistent representation of a schema.\n */\nexport const TypeSchema = TypeSchemaStruct.pipe(\n LabelAnnotation.set(['name']),\n IconAnnotation.set({\n icon: 'ph--database--regular',\n hue: 'green',\n }),\n EchoTypeKindSchema(TypeMetaSchemaDXN),\n);\n\n/**\n * Persistent representation of a schema — the runtime shape that\n * `db.addType(Type.makeObjectFromJsonSchema(...))` produces\n * and `Filter.type(Type.Type).run()` returns.\n *\n * Structurally identical to a static `Type.Type` entity: the entity-handler's\n * `get` trap exposes `[SchemaKindId]` (derived from `system.kind` and\n * `data.jsonSchema.entityKind`) and rebuilds `[StaticTypeSchemaSlot]` lazily\n * from `jsonSchema`, so a persisted instance satisfies the public `Type<A>`\n * interface without casting.\n */\nexport type TypeSchema = Schema.Schema.Type<typeof TypeSchemaStruct> & {\n /** Object identifier — injected by `EchoTypeKindSchema` and stamped at construction. */\n readonly id: string;\n /** Entity-kind discriminator (object/relation/type) carried on every entity instance. */\n readonly [KindId]: EntityKind.Type;\n /** Kind of schema described by this meta-instance — always `EntityKind.Type` for `Type.Type` itself. */\n readonly [SchemaKindId]: EntityKind.Type;\n /** Effect Schema rebuilt lazily from `jsonSchema`; satisfies `Type.getSchema(...)` without an extra cast. */\n readonly [StaticTypeSchemaSlot]: Schema.Schema.AnyNoContext;\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Schema", "SchemaAST", "RawObject", "schema", "make", "omit", "ast", "VersionTypeId", "compare", "a", "b", "localeCompare", "sortByLabel", "getLabel", "sortByTypename", "getTypename", "sort", "comparators", "comparator", "result", "prettyFilter", "filter", "type", "typename", "id", "undefined", "length", "Object", "keys", "props", "foreignKeys", "metaKey", "metaVersion", "JSON", "stringify", "parts", "push", "String", "join", "propEntries", "entries", "propsStr", "map", "k", "v", "fk", "operator", "value", "values", "tag", "from", "to", "searchKind", "text", "field", "parents", "p", "transitive", "filters", "prettyQuery", "query", "selection", "anchor", "property", "args", "method", "direction", "filterStr", "queries", "source", "exclude", "orders", "order", "o", "kind", "fn", "opts", "options", "deleted", "debugLabel", "_tag", "scopes", "scopeStrs", "scope", "includeAllFeeds", "spaceId", "feedUri", "location", "limit", "EID", "getStrongDependencyUris", "refs", "owningSpaceId", "res", "type", "EID", "tryParse", "push", "qualifyToSpace", "kind", "EntityKind", "Relation", "source", "target", "parent", "uri", "eid", "isLocal", "entityId", "getEntityId", "make", "spaceId", "getStrongDependencies", "entity", "props", "RelationSourceDXNId", "RelationTargetDXNId", "Object", "ParentId", "selfUri", "getObjectEchoUri", "getSpaceId", "undefined", "TypeId", "Schema", "SchemaAST", "invariant", "DXN", "normalizeSchema", "schema", "copy", "structuredClone", "go", "exclusiveMaximum", "maximum", "exclusiveMinimum", "minimum", "key", "Object", "keys", "JsonSchemaFields", "includes", "properties", "goOnRecord", "patternProperties", "propertyNames", "definitions", "items", "maybeGoOnArray", "additionalItems", "contains", "if", "then", "else", "allOf", "anyOf", "oneOf", "not", "$defs", "reference", "value", "Array", "isArray", "item", "record", "version", "dxn", "invariant", "self", "SchemaAST", "fields", "id", "String", "annotations", "kind", "EntityKind", "typename", "constructor", "ObjectType", "Object", "setPrototypeOf", "type", "Schema", "SchemaAST", "raise", "assertArgument", "invariant", "DXN", "__dxlog_file", "ATTR_RELATION_SOURCE", "assertArgument", "Schema", "sourceSchema", "targetSchema", "getName", "dxn", "getVersion", "invariant", "version", "sourceDXN", "getDXNForRelationSchemaRef", "targetDXN", "getEntityKind", "EntityKind", "raise", "Error", "self", "fields", "__dxlog_file", "id", "String", "SchemaAST", "annotations", "kind", "typename", "relationSource", "relationTarget", "identifier", "getTypeIdentifierAnnotation", "schema", "tryMake", "getSchemaTypename", "DXN", "make", "makeRelationType", "options", "source", "target", "constructor", "Object", "setPrototypeOf", "Schema", "SchemaAST", "invariant", "DXN", "__dxlog_file", "version", "dxn", "invariant", "self", "SchemaAST", "fields", "schemaWithId", "Schema", "id", "String", "TypeAnnotationId", "kind", "EntityKind", "typename", "assertArgument", "unversioned", "VersionTypeId", "versioned", "isVersion", "entity", "version", "ver", "ObjectVersionId", "undefined", "versionValid", "assertArgument", "compareVersions", "version1", "version2", "automergeHeads", "length", "some", "head", "includes", "encodeVersion", "JSON", "stringify", "decodeVersion", "parsed", "parse", "semver", "EncodedReference", "isEncodedReference", "DXN", "EID", "Schema", "raise", "EntityStructure", "isEncodedReference", "assertArgument", "invariant", "EID", "EntityId", "URI", "assumeType", "decodeUint8ArrayFromJson", "deepMapValues", "isEncodedUint8Array", "visitValues", "__dxlog_file", "invariant", "typename", "typedJsonSerializer", "call", "__dxlog_file", "assertArgument", "jsonData", "URI", "ATTR_TYPE", "refResolver", "resolveSchema", "type", "schema", "undefined", "Schema", "isSchema", "decodedInput", "restoreUint8Arrays", "stripInternalJsonKeys", "obj", "setRefResolverOnData", "setTypename", "setSchema", "typeEntity", "setType", "sourceDxn", "ATTR_RELATION_SOURCE", "raise", "TypeError", "targetDxn", "source", "resolveLegacy", "target", "defineHiddenProperty", "EntityKind", "Relation", "RelationSourceDXNId", "RelationTargetDXNId", "RelationSourceId", "RelationTargetId", "ATTR_META", "isArray", "meta", "keys", "MetaId", "annotations", "resolvedParent", "ParentId", "parent", "uri", "database", "assertObjectModel", "ATTR_DELETED", "ATTR_SELF_URI", "ATTR_SELF_URI_LEGACY", "ATTR_RELATION_TARGET", "tag", "tags", "deepMapValues", "value", "visitor", "isEncodedReference", "refFromEncodedReference", "options", "isEncodedUint8Array", "decodeUint8ArrayFromJson", "recurse", "props", "Ref", "setRefResolver", "visitValues", "getParent", "structure", "EntityStructure", "getRelationSource", "getRelationTarget", "id", "typeRef", "ATTR_PARENT", "EID", "tryParse", "matchesTag", "tags", "filterTag", "canonical", "uri", "eid", "EID", "tryParse", "getEntityId", "normalize", "tag", "isEncodedReference", "EncodedReference", "toURI", "target", "some", "matchMetaKey", "key", "versionRange", "objKey", "objVersion", "undefined", "valid", "validRange", "satisfies", "includePrerelease", "compareTypenameStrings", "expectedStr", "actualStr", "expectedEid", "actualEid", "expectedSpaceId", "getSpaceId", "actualSpaceId", "expectedDxn", "DXN", "tryMake", "actualDxn", "getName", "expectedVersion", "getVersion", "actualVersion", "structuralMatch", "filterObj", "targetObj", "strict", "filterKeys", "Object", "keys", "targetKeys", "length", "every", "filterValue", "targetValue", "filterMatchValue", "filter", "value", "type", "compareValue", "operator", "props", "valueFilter", "entries", "nestedValue", "values", "includes", "Array", "isArray", "element", "from", "to", "filters", "f", "filterMatchEntity", "entity", "typename", "typeURI", "getTypeURI", "id", "json", "objectToJSON", "startsWith", "meta", "getMetaChecked", "foreignKeys", "hasKey", "fk", "k", "source", "metaKey", "metaVersion", "version", "rawTags", "map", "encode", "Error", "Schema", "makeTypedEntityClass", "typename", "version", "baseSchema", "TypeId", "schemaVariance", "ast", "annotations", "bind", "pipe", "Symbol", "hasInstance", "obj", "getTypename", "Error", "_A", "_", "_I", "_R", "raise", "assertArgument", "failedInvariant", "EntityId", "inspectCustom", "attachedTypedObjectInspector", "obj", "descriptor", "Object", "getOwnPropertyDescriptor", "inspectCustom", "defineProperty", "value", "typedObjectInspectFunction", "writable", "enumerable", "configurable", "depth", "options", "inspect", "id", "props", "ATTR_TYPE", "getTypeURI", "ATTR_META", "MetaId", "createObject", "input", "props", "schema", "getStaticTypeSchema", "failedInvariant", "annotation", "getTypeAnnotation", "Error", "assertArgument", "RelationSourceDXNId", "RelationTargetDXNId", "RelationSourceId", "RelationTargetId", "metaOverride", "MetaId", "undefined", "obj", "id", "EntityId", "random", "kind", "EntityKind", "Type", "Relation", "Object", "defineHiddenProperty", "KindId", "keys", "tags", "annotations", "setSchema", "setType", "setTypename", "getSchemaURI", "attachTypedJsonSerializer", "attachedTypedObjectInspector", "sourceDXN", "getObjectEchoUri", "raise", "targetDXN", "assertObjectModel", "isDeleted", "obj", "ObjectDeletedId", "undefined", "Match", "Option", "SchemaAST", "SchemaEx", "invariant", "__dxlog_file", "schema", "getSchema", "obj", "invariant", "parent", "currentAST", "ast", "i", "length", "key", "part", "propertyAST", "getPropertyAST", "String", "shouldBeArray", "path", "value", "undefined", "SchemaEx", "property", "properties", "find", "getBaseType", "type", "elementType", "filter", "p", "isOptional", "defaultValue", "Match", "pipe", "when", "_tag", "orElse", "requiredProps", "isNestedType", "prop", "name", "createObjectWithDefaults", "assertArgument", "deepMapValues", "copySymbolProperty", "source", "target", "symbol", "transform", "value", "undefined", "finalValue", "Object", "defineProperty", "writable", "enumerable", "configurable", "getSnapshot", "obj", "assertArgument", "KindId", "snapshot", "deepMapValues", "recurse", "getPrototypeOf", "prototype", "Array", "isArray", "SnapshotKindId", "TypeId", "SchemaId", "TypeEntityId", "SelfURIId", "ObjectDatabaseId", "ObjectDeletedId", "ParentId", "MetaId", "meta", "keys", "tags", "key", "version", "annotations", "RelationSourceDXNId", "RelationTargetDXNId", "RelationSourceId", "RelationTargetId", "freeze", "Atom", "Result", "Effect", "Function", "Option", "assertArgument", "isRef", "obj", "RefTypeId", "getReactiveOption", "snapshot", "gen", "db", "getDatabase", "none", "getObjectById", "id", "some", "objectFamily", "family", "make", "get", "unsubscribe", "subscribe", "setSelf", "getSnapshot", "addFinalizer", "pipe", "keepAlive", "refFamily", "ref", "unsubscribeTarget", "setupTargetSubscription", "target", "isDeleted", "undefined", "loadRefTarget", "propertyFamily", "key", "previousSnapshot", "snapshotForComparison", "unsubscribe2", "newValue", "newSnapshot", "objectWithReactiveFamily", "refWithReactiveFamily", "effect", "makeAtom", "option", "getOrElse", "map", "result", "refPropertyFamily", "entityFamily", "entity", "relationFamily", "relation", "objOrRef", "assertArgument", "isEntity", "makeProperty", "makeWithReactive", "makeEntity", "makeRelation", "labelAtomFamily", "previous", "getLabel", "next", "makeLabelAtom", "invariant", "assumeType", "deepMapValues", "__dxlog_file", "get", "id", "inProgress", "add", "obj", "invariant", "schema", "mapRef", "recurse", "Ref", "value", "target", "props", "deepMapValues", "meta", "delete", "cache", "set", "result", "assumeType", "entity", "parent", "ParentId", "seen", "Schema", "SchemaAST", "invariant", "__dxlog_file", "schemaExtension", "annotations", "updateFieldsInSchema", "fields", "isTypeLiteral", "ast", "updatedProperties", "propertySignatures", "propertiesToUpdate", "p", "name", "property", "index", "push", "removeFieldsFromSchema", "fieldNames", "updateFieldNameInSchema", "schema", "before", "after", "Schema", "TypeSchemaStruct", "Struct", "name", "optional", "String", "jsonSchema", "JsonSchemaType", "TypeSchema", "pipe", "LabelAnnotation", "set", "IconAnnotation", "icon", "hue", "EchoTypeKindSchema", "TypeMetaSchemaDXN"]
|
|
7
|
+
}
|
|
@@ -2,22 +2,24 @@ import {
|
|
|
2
2
|
Type,
|
|
3
3
|
getTypename as getTypename2,
|
|
4
4
|
getURI
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-XB6ISRAO.mjs";
|
|
6
6
|
import {
|
|
7
|
-
change,
|
|
8
7
|
isDeleted,
|
|
9
8
|
makeEntity,
|
|
10
9
|
makeLabelAtom,
|
|
11
|
-
objectToJSON
|
|
12
|
-
|
|
13
|
-
} from "./chunk-VQYL2OQF.mjs";
|
|
10
|
+
objectToJSON
|
|
11
|
+
} from "./chunk-ACFAOTKJ.mjs";
|
|
14
12
|
import {
|
|
15
13
|
addTag,
|
|
16
14
|
getKeys,
|
|
17
15
|
getMetaChecked,
|
|
18
16
|
isEntity,
|
|
19
17
|
removeTag
|
|
20
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-2HKGAQM4.mjs";
|
|
19
|
+
import {
|
|
20
|
+
change,
|
|
21
|
+
subscribe
|
|
22
|
+
} from "./chunk-L3E5IXAE.mjs";
|
|
21
23
|
import {
|
|
22
24
|
MetaId,
|
|
23
25
|
getDatabase,
|
|
@@ -32,14 +34,14 @@ import {
|
|
|
32
34
|
getUri,
|
|
33
35
|
isInstanceOf,
|
|
34
36
|
setLabel
|
|
35
|
-
} from "./chunk-
|
|
37
|
+
} from "./chunk-3TN2VMI4.mjs";
|
|
36
38
|
import {
|
|
37
39
|
EntityKind,
|
|
38
40
|
EntityKindSchema,
|
|
39
41
|
KindId,
|
|
40
42
|
SnapshotKindId,
|
|
41
43
|
getEntityKindBrand
|
|
42
|
-
} from "./chunk-
|
|
44
|
+
} from "./chunk-2ZHECXUR.mjs";
|
|
43
45
|
import {
|
|
44
46
|
__export
|
|
45
47
|
} from "./chunk-J5LGTIGS.mjs";
|
|
@@ -165,4 +167,4 @@ export {
|
|
|
165
167
|
labelProperty,
|
|
166
168
|
Entity_exports
|
|
167
169
|
};
|
|
168
|
-
//# sourceMappingURL=chunk-
|
|
170
|
+
//# sourceMappingURL=chunk-BEFR7LEA.mjs.map
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/Entity.ts"],
|
|
4
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';\nimport type { EntityId, URI } from '@dxos/keys';\n\nimport * as internal from './internal';\nimport * as objInternal from './internal/Obj';\nimport type * as Ref from './Ref';\nimport type * as Relation from './Relation';\nimport type * as Tag from './Tag';\nimport * as Type from './Type';\n\n// Re-export KindId and SnapshotKindId from internal.\nexport const KindId = internal.KindId;\nexport type KindId = typeof internal.KindId;\nexport const SnapshotKindId = internal.SnapshotKindId;\nexport type SnapshotKindId = typeof internal.SnapshotKindId;\n\n// NOTE: Relation does not extend Obj so that, for example, we can prevent Relations from being used as source and target objects.\n// However, we generally refer to Obj and Relation instances as \"objects\",\n// and many API methods accept both Obj.Unknown and Relation.Unknown (i.e., Entity.Unknown) instances.\n\nexport const Kind = internal.EntityKind;\nexport type Kind = internal.EntityKind;\nexport const KindSchema = internal.EntityKindSchema;\n\n/**\n * Assigns a kind to an Object or Relation instance.\n * NOTE: Needed to make `isRelation` and `isObject` checks work.\n */\nexport interface OfKind<K extends Kind> {\n readonly [KindId]: K;\n readonly id: EntityId;\n}\n\n/**\n * Assigns a snapshot kind to an Object or Relation snapshot.\n */\nexport interface SnapshotOfKind<K extends Kind> {\n readonly [SnapshotKindId]: K;\n readonly id: EntityId;\n}\n\n/**\n * Obj or Relation with a specific set of properties.\n */\nexport type Entity<Props> = OfKind<Kind> & Props;\n\n/**\n * Unknown Obj or Relation (reactive).\n */\nexport interface Unknown extends OfKind<Kind> {}\n\n/**\n * Effect Schema for any ECHO entity (object or relation).\n *\n * Kind-agnostic counterpart to `Obj.Unknown` / `Relation.Unknown` — validates\n * the structural shape (id + properties) without constraining `[KindId]`. Used\n * in operation input schemas that accept any entity flavour (e.g.\n * `Schema.Array(Entity.Unknown)`).\n *\n * The cast bridges the runtime structural schema to the branded `Unknown` type:\n * `[KindId]` is a symbol brand that can't be expressed in a runtime `Struct`,\n * so the entity guarantee is carried at the type level only (same approach as\n * `Obj.Unknown` / `Relation.Unknown`). Unlike those, this is kind-agnostic so it\n * isn't an `UnknownTypeSchema<_, K>` (there's no single `K`) and carries no\n * `TypeAnnotation`.\n */\nexport const Unknown: Schema.Schema<Unknown> = Schema.Struct({\n id: Schema.String,\n}).pipe(\n Schema.extend(Schema.Record({ key: Schema.String, value: Schema.Unknown })),\n) as unknown as Schema.Schema<Unknown>;\n\n/**\n * Snapshot of an Obj or Relation.\n * Branded with SnapshotKindId instead of KindId.\n */\nexport interface Snapshot extends SnapshotOfKind<Kind> {}\n\n/**\n * Object with arbitrary properties.\n *\n * NOTE: Due to how typescript works, this type is not assignable to a specific schema type.\n * In that case, use `Obj.instanceOf` to check if an object is of a specific type.\n *\n * This type is very permissive and allows accessing any property on the object.\n * We should move to Obj.Unknown that is not permissive and requires explicit instanceof checks..\n */\nexport interface Any extends OfKind<Kind> {\n [key: string]: unknown;\n}\n\n/**\n * Returns all properties of an object or relation except for the id and kind.\n */\nexport type Properties<T> = Omit<T, 'id' | KindId | Relation.Source | Relation.Target>;\n\n/**\n * Check if a value is an ECHO entity (object or relation).\n * Returns `false` for snapshots.\n */\nexport const isEntity: (value: unknown) => value is Unknown = internal.isEntity;\n\n/**\n * Test if a value is an instance of a given object or relation type.\n *\n * Kind-agnostic counterpart to `Obj.instanceOf` / `Relation.instanceOf` —\n * use this when the caller's input type is `Type.AnyObj | Type.AnyRelation`.\n *\n * @example\n * ```ts\n * // Caller doesn't know whether `type` is object- or relation-kind.\n * const matches = <T extends Type.AnyObj | Type.AnyRelation>(type: T, value: unknown) =>\n * Entity.instanceOf(type, value);\n * ```\n */\nexport const instanceOf: {\n <S extends Type.AnyEntity>(schema: S): (value: unknown) => value is Type.InstanceType<S>;\n <S extends Type.AnyEntity>(schema: S, value: unknown): value is Type.InstanceType<S>;\n} = ((...args: [schema: Type.AnyEntity, value?: unknown]) => {\n if (args.length === 1) {\n return (entity: unknown) => internal.isInstanceOf(args[0], entity);\n }\n return internal.isInstanceOf(args[0], args[1]);\n}) as any;\n\n/**\n * Check if a value is an ECHO entity snapshot.\n * Returns `false` for entities.\n */\nexport const isSnapshot = (value: unknown): value is Snapshot => {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n return (value as any)[SnapshotKindId] !== undefined;\n};\n\n// TODO(dmaretskyi): Type introspection -- move to kind.\nexport const getKind = internal.getEntityKind;\n\n/**\n * Property that accesses metadata for an entity.\n */\nexport const Meta: unique symbol = internal.MetaId as any;\n\n/**\n * Property that accesses metadata for an entity.\n */\nexport type Meta = typeof Meta;\n\n//\n// Entity-level functions that work on any entity (object or relation).\n// Use these when you don't know or care about the specific entity kind.\n// For kind-specific functions, use Obj.* or Relation.*.\n//\n\n/**\n * JSON representation of an entity.\n */\nexport type JSON = internal.ObjectJSON;\n\n/**\n * Whether the entity is a type-kind entity (a `Type.Type` produced by\n * `Type.makeObject` / `Type.makeRelation`, or a persisted schema). Type entities\n * carry their identity (typename/version) on themselves rather than referencing a\n * separate type, so the accessors below route them through the `Type.*` module.\n */\nconst isTypeEntity = (entity: unknown): boolean => internal.getEntityKindBrand(entity) === internal.EntityKind.Type;\n\n/**\n * Any value the read accessors operate on: a reactive entity or a snapshot.\n * Type entities (`Type.AnyEntity`) are also accepted — they're first-class\n * entities, and `Unknown`'s kind-agnostic brand already subsumes them.\n */\nexport type AnyInput = Unknown | Snapshot;\n\n/**\n * Get the canonical URI of an entity (object, relation, or type). Returns `URI.URI` —\n * an `EID` for object/relation instances and persisted types, or a typename\n * `DXN` for static type entities; narrow with `EID.parse(uri)` or\n * `DXN.tryMake(uri)` at the point of use.\n *\n * @param options.prefer - Controls the URI form (see {@link internal.GetURIOptions}).\n */\nexport const getURI = (entity: AnyInput, options?: internal.GetURIOptions): URI.URI =>\n isTypeEntity(entity) ? Type.getURI(entity as Type.AnyEntity, options) : internal.getUri(entity as Unknown, options);\n\n/**\n * Get the DXN of an entity's type. For object/relation instances this is the URI\n * of the type they were created from; for a type entity it is the URI of the\n * meta-type ({@link Type.Type}, `dxn:org.dxos.type.schema:0.1.0`).\n */\nexport const getTypeURI = (entity: AnyInput): URI.URI | undefined =>\n isTypeEntity(entity) ? Type.getURI(Type.Type) : internal.getTypeURI(entity as Unknown);\n\n/**\n * Get the type entity (`Type.AnyEntity`) the instance was created from.\n *\n * Returns `undefined` when the entity's type isn't registered in this runtime\n * (e.g. a freshly deserialized snapshot whose type entity hasn't been wired\n * up yet, or an entity loaded from storage before its schema is known). To\n * get the Effect Schema from the returned entity, use `Type.getSchema(...)`.\n *\n * For a type entity, returns the meta-type {@link Type.Type} (a type entity's\n * type is \"Type\").\n */\nexport const getType = (entity: AnyInput): Type.AnyEntity | undefined =>\n isTypeEntity(entity) ? Type.Type : (internal.getType(entity) as Type.AnyEntity | undefined);\n\n/**\n * Get the typename of an entity's type. For object/relation instances this is the\n * typename of the type they were created from; for a type entity it is the type's\n * own typename (e.g. `com.example.type.person`).\n */\nexport const getTypename = (entity: AnyInput): string | undefined =>\n isTypeEntity(entity) ? Type.getTypename(entity as Type.AnyEntity) : internal.getTypename(entity as Unknown);\n\n/**\n * Get the database an entity belongs to.\n */\nexport const getDatabase = (entity: Unknown | Snapshot): any | undefined => internal.getDatabase(entity);\n\n/**\n * Get the metadata for an entity.\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(wittjosiah): When passed a Snapshot, should return a snapshot of meta, not the live meta proxy.\nexport function getMeta(entity: Mutable<Unknown>): internal.EntityMeta;\nexport function getMeta(entity: Unknown | Snapshot): internal.ReadonlyMeta;\nexport function getMeta(entity: Unknown | Snapshot | Mutable<Unknown>): internal.EntityMeta | internal.ReadonlyMeta {\n return internal.getMetaChecked(entity);\n}\n\n/**\n * Get foreign keys for an entity from the specified source.\n */\nexport const getKeys = (entity: Unknown | Snapshot, source: string): ForeignKey[] => internal.getKeys(entity, source);\n\n/**\n * Check if an entity is deleted.\n */\nexport const isDeleted = (entity: Unknown | Snapshot): boolean => internal.isDeleted(entity);\n\n/**\n * Get the label of an entity.\n *\n * @param options.fallback `'typename'` returns the entity's typename when no\n * label is set (e.g. `org.dxos.type.table`).\n */\nexport const getLabel = (entity: Unknown | Snapshot, options?: internal.GetLabelOptions): string | undefined =>\n internal.getLabel(entity, options);\n\n/**\n * Set the label of an entity.\n * Must be called within an `Entity.update` / `Obj.update` / `Relation.update` callback.\n */\nexport const setLabel = (entity: Mutable<Unknown>, label: string): void => internal.setLabel(entity, label);\n\n/**\n * Get the description of an entity.\n */\nexport const getDescription = (entity: Unknown | Snapshot): string | undefined => internal.getDescription(entity);\n\n/**\n * Get the icon annotation for an entity (object or relation), resolved via its type-level\n * `IconAnnotation`. Returns the full `{ icon, hue }` annotation so callers can use both\n * the phosphor icon name and the suggested colour.\n */\nexport const getIcon = (entity: Unknown | Snapshot): internal.IconAnnotation | undefined => internal.getIcon(entity);\n\n/**\n * Convert an entity to its JSON representation.\n */\nexport const toJSON = (entity: Unknown | Snapshot): JSON => internal.objectToJSON(entity);\n\n/**\n * Subscribe to changes on an entity (object or relation).\n * @returns Unsubscribe function.\n */\nexport const subscribe = (entity: Unknown, callback: () => void): (() => void) => {\n return internal.subscribe(entity, callback);\n};\n\n//\n// Change\n//\n\n/**\n * Used to provide a mutable view of an entity within `Entity.update`.\n */\nexport type Mutable<T> = internal.Mutable<T>;\n\n/**\n * Perform mutations on an entity (object or relation) within a change context.\n *\n * Entities are read-only by default. Mutations are batched and notifications fire\n * when the callback completes. Direct mutations outside of `Entity.update` will throw\n * at runtime.\n *\n * @param entity - The echo entity (object or relation) to mutate.\n * @param callback - Receives a mutable view of the entity. All mutations must occur here.\n *\n * @example\n * ```typescript\n * // Mutate within Entity.update\n * Entity.update(entity, (obj) => {\n * obj.name = 'Updated';\n * obj.count = 42;\n * });\n *\n * // Direct mutation throws\n * entity.name = 'Bob'; // Error: Cannot modify outside Entity.update()\n * ```\n *\n * Note: For type-specific operations, prefer `Obj.update` or `Relation.update`.\n */\nexport const update = <T extends Unknown>(entity: T, callback: internal.ChangeCallback<T>): void => {\n internal.change(entity, callback);\n};\n\n/**\n * Add a tag to an entity.\n * Must be called within an `Entity.update`, `Obj.update`, or `Relation.update` callback.\n */\nexport const addTag = (entity: Mutable<Unknown>, tag: Ref.Ref<Tag.Tag>): void => internal.addTag(entity, tag);\n\n/**\n * Remove a tag from an entity.\n * Must be called within an `Entity.update`, `Obj.update`, or `Relation.update` callback.\n */\nexport const removeTag = (entity: Mutable<Unknown>, tag: Ref.Ref<Tag.Tag>): void => internal.removeTag(entity, tag);\n\n//\n// Atoms\n//\n\nexport const atom = objInternal.makeEntity;\nexport const labelAtom = objInternal.makeLabelAtom;\nexport const labelProperty = internal.getLabelProperty;\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["KindId", "SnapshotKindId", "Unknown", "addTag", "getDatabase", "getDescription", "getIcon", "getKeys", "getLabel", "getType", "getTypeURI", "getTypename", "getURI", "isDeleted", "isEntity", "removeTag", "setLabel", "subscribe", "Schema", "KindId", "SnapshotKindId", "Kind", "EntityKind", "KindSchema", "EntityKindSchema", "Unknown", "Struct", "id", "String", "pipe", "extend", "Record", "key", "value", "isEntity", "instanceOf", "args", "length", "entity", "isInstanceOf", "isSnapshot", "undefined", "getKind", "getEntityKind", "Meta", "MetaId", "isTypeEntity", "getEntityKindBrand", "Type", "getURI", "options", "getUri", "getTypeURI", "getType", "getTypename", "getDatabase", "getMeta", "getMetaChecked", "getKeys", "source", "isDeleted", "getLabel", "setLabel", "label", "getDescription", "getIcon", "toJSON", "objectToJSON", "subscribe", "callback", "update", "internal", "change", "addTag", "tag", "removeTag", "atom", "makeEntity", "labelAtom", "makeLabelAtom", "labelProperty", "getLabelProperty"]
|
|
7
7
|
}
|
|
@@ -14,8 +14,6 @@ import {
|
|
|
14
14
|
GeoLocation,
|
|
15
15
|
GeoPoint,
|
|
16
16
|
Hostname,
|
|
17
|
-
JSON,
|
|
18
|
-
Markdown,
|
|
19
17
|
OptionsAnnotation,
|
|
20
18
|
OptionsAnnotationId,
|
|
21
19
|
PropertyKind,
|
|
@@ -38,7 +36,7 @@ import {
|
|
|
38
36
|
toSimpleDateTime,
|
|
39
37
|
toSimpleTime,
|
|
40
38
|
typeToFormat
|
|
41
|
-
} from "./chunk-
|
|
39
|
+
} from "./chunk-KCBW4BR6.mjs";
|
|
42
40
|
import {
|
|
43
41
|
__export
|
|
44
42
|
} from "./chunk-J5LGTIGS.mjs";
|
|
@@ -61,8 +59,6 @@ __export(Format_exports, {
|
|
|
61
59
|
GeoLocation: () => GeoLocation,
|
|
62
60
|
GeoPoint: () => GeoPoint,
|
|
63
61
|
Hostname: () => Hostname,
|
|
64
|
-
JSON: () => JSON,
|
|
65
|
-
Markdown: () => Markdown,
|
|
66
62
|
OptionsAnnotation: () => OptionsAnnotation,
|
|
67
63
|
OptionsAnnotationId: () => OptionsAnnotationId,
|
|
68
64
|
PropertyKind: () => PropertyKind,
|
|
@@ -90,4 +86,4 @@ __export(Format_exports, {
|
|
|
90
86
|
export {
|
|
91
87
|
Format_exports
|
|
92
88
|
};
|
|
93
|
-
//# sourceMappingURL=chunk-
|
|
89
|
+
//# sourceMappingURL=chunk-BXIKXT7Q.mjs.map
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/Format.ts"],
|
|
4
4
|
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nexport * from './internal/Format';\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,32 +1,32 @@
|
|
|
1
1
|
import {
|
|
2
2
|
select
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-3KTE2Y7Q.mjs";
|
|
4
4
|
import {
|
|
5
5
|
Feed
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-XXWK4J53.mjs";
|
|
7
7
|
import {
|
|
8
8
|
nothing
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-SCT6FFCR.mjs";
|
|
10
10
|
import {
|
|
11
11
|
Unknown,
|
|
12
12
|
instanceOf,
|
|
13
13
|
make
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-HBXT3GSB.mjs";
|
|
15
15
|
import {
|
|
16
16
|
Ref
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-FSGX2R62.mjs";
|
|
18
18
|
import {
|
|
19
19
|
getSchema,
|
|
20
20
|
makeObject
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-XB6ISRAO.mjs";
|
|
22
22
|
import {
|
|
23
23
|
JsonSchemaType
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-4A2NWKRJ.mjs";
|
|
25
25
|
import {
|
|
26
26
|
FormInputAnnotation,
|
|
27
27
|
HiddenAnnotation,
|
|
28
28
|
IconAnnotation
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-3TN2VMI4.mjs";
|
|
30
30
|
import {
|
|
31
31
|
__export
|
|
32
32
|
} from "./chunk-J5LGTIGS.mjs";
|
|
@@ -94,13 +94,14 @@ __export(Collection_exports, {
|
|
|
94
94
|
});
|
|
95
95
|
import * as Schema from "effect/Schema";
|
|
96
96
|
import { DXN } from "@dxos/keys";
|
|
97
|
-
var Collection = Schema.Struct({
|
|
97
|
+
var Collection = class extends makeObject(DXN.make("org.dxos.type.collection", "0.1.0"))(Schema.Struct({
|
|
98
98
|
name: Schema.String.pipe(Schema.optional),
|
|
99
99
|
objects: Schema.Array(Ref(Unknown)).pipe(FormInputAnnotation.set(false))
|
|
100
100
|
}).pipe(IconAnnotation.set({
|
|
101
101
|
icon: "ph--folder--regular",
|
|
102
|
-
hue: "
|
|
103
|
-
})
|
|
102
|
+
hue: "indigo"
|
|
103
|
+
}))) {
|
|
104
|
+
};
|
|
104
105
|
var make2 = (props = {}) => make(Collection, {
|
|
105
106
|
objects: [],
|
|
106
107
|
...props
|
|
@@ -149,24 +150,24 @@ var Projection = Schema2.Struct({
|
|
|
149
150
|
*/
|
|
150
151
|
pivotFieldId: Schema2.String.pipe(Schema2.optional)
|
|
151
152
|
});
|
|
152
|
-
var
|
|
153
|
+
var View = class extends makeObject(DXN2.make("org.dxos.type.view", "0.1.0"))(Schema2.Struct({
|
|
153
154
|
/**
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
155
|
+
* Query used to retrieve data.
|
|
156
|
+
* Can be a user-provided query grammar string or a query AST.
|
|
157
|
+
*/
|
|
157
158
|
query: Schema2.Struct({
|
|
158
159
|
raw: Schema2.optional(Schema2.String),
|
|
159
160
|
ast: QueryAST.Query
|
|
160
161
|
}),
|
|
161
162
|
/**
|
|
162
|
-
|
|
163
|
-
|
|
163
|
+
* Projection of the data returned from the query.
|
|
164
|
+
*/
|
|
164
165
|
projection: Projection
|
|
165
166
|
}).pipe(HiddenAnnotation.set(true), IconAnnotation.set({
|
|
166
167
|
icon: "ph--funnel--regular",
|
|
167
168
|
hue: "green"
|
|
168
|
-
})
|
|
169
|
-
|
|
169
|
+
}))) {
|
|
170
|
+
};
|
|
170
171
|
var make3 = (props) => {
|
|
171
172
|
return make(View, {
|
|
172
173
|
query: {
|
|
@@ -202,4 +203,4 @@ export {
|
|
|
202
203
|
EID2 as EID,
|
|
203
204
|
URI
|
|
204
205
|
};
|
|
205
|
-
//# sourceMappingURL=chunk-
|
|
206
|
+
//# sourceMappingURL=chunk-C57XMMBY.mjs.map
|