{
  "version": 3,
  "sources": ["../../../src/internal/common/types/base.ts", "../../../src/internal/common/types/version.ts", "../../../src/internal/Annotation/sorting.ts", "../../../src/internal/common/proxy/symbols.ts", "../../../src/internal/common/proxy/event-batch.ts", "../../../src/internal/common/proxy/change-context.ts", "../../../src/internal/common/proxy/define-hidden-property.ts", "../../../src/internal/common/proxy/errors.ts", "../../../src/internal/common/proxy/json-serializer.ts", "../../../src/internal/common/proxy/make-object.ts", "../../../src/internal/common/proxy/proxy-utils.ts", "../../../src/internal/common/proxy/typed-handler.ts", "../../../src/internal/common/proxy/ownership.ts", "../../../src/internal/common/proxy/proxy-types.ts", "../../../src/internal/common/proxy/reactive-array.ts", "../../../src/internal/common/proxy/schema-validator.ts", "../../../src/internal/common/proxy/reactive.ts", "../../../src/internal/Entity/entity.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/Obj/common.ts", "../../../src/internal/Obj/create-object.ts", "../../../src/internal/Obj/inspect.ts", "../../../src/internal/Obj/json-serializer.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/Query/pretty.ts", "../../../src/internal/Type/manipulation.ts", "../../../src/internal/Type/type-schema.ts"],
  "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\n// TODO(dmaretskyi): Rename all symbols that are props to end with *Key.\nexport const EventId = Symbol.for('@dxos/live-object/EventId');\nexport const ChangeId = Symbol.for('@dxos/live-object/ChangeId');\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { EventId } from './symbols';\n\n/**\n * Simple batching mechanism for EventId emissions.\n * When batch depth > 0, events are collected instead of emitted immediately.\n * When batch depth returns to 0, pending events are emitted.\n */\nlet eventBatchDepth = 0;\nconst pendingEventTargets = new Set<object>();\n\n/**\n * Run a callback in a batched context for EventId emissions.\n * Multiple mutations within the batch will only emit one event per target.\n */\nexport const batchEvents = (callback: () => void): void => {\n  eventBatchDepth++;\n  try {\n    callback();\n  } finally {\n    eventBatchDepth--;\n    if (eventBatchDepth === 0) {\n      // Emit pending events.\n      for (const target of pendingEventTargets) {\n        (target as any)[EventId]?.emit();\n      }\n      pendingEventTargets.clear();\n    }\n  }\n};\n\n/**\n * Emit an event on a target, respecting batching.\n */\nexport const emitEvent = (target: object): void => {\n  if (eventBatchDepth > 0) {\n    pendingEventTargets.add(target);\n  } else {\n    (target as any)[EventId]?.emit();\n  }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { batchEvents } from './event-batch';\nimport { EventId } from './symbols';\n\n/**\n * Generic change context tracking.\n * Only one object can be in a change context at a time (synchronous changes).\n *\n * This module provides a unified change context mechanism used by both:\n * - TypedReactiveHandler (for non-database objects, using target as key)\n * - EchoReactiveHandler (for database objects, using ObjectCore as key)\n */\n\n/**\n * The object currently in a change context.\n * Can be a target object (for typed reactive) or ObjectCore (for database objects).\n */\nlet currentChangeContext: object | null = null;\n\n/**\n * The primary object that has pending notifications, if any.\n * This uses the contextKey (target or ObjectCore).\n */\nlet pendingNotificationKey: object | null = null;\n\n/**\n * Additional objects (owner chain) that need notifications.\n * These are separate from the primary notification because they use EventId directly.\n */\nconst pendingOwnerNotifications = new Set<object>();\n\n/**\n * Enter a change context for the given key.\n * While in a change context, mutations are allowed on the associated object.\n * Nested Obj.update calls are not supported.\n *\n * @param key - The key to enter the change context for (target object or ObjectCore).\n * @returns A cleanup function that exits the change context.\n */\nexport const enterChangeContext = (key: object): (() => void) => {\n  currentChangeContext = key;\n  return () => {\n    currentChangeContext = null;\n  };\n};\n\n/**\n * Check if the given key is currently in a change context.\n *\n * @param key - The key to check (target object or ObjectCore).\n * @returns True if the key is in a change context, false otherwise.\n */\nexport const isInChangeContext = (key: object): boolean => {\n  return currentChangeContext === key;\n};\n\n/**\n * Queue a notification for the given key to be fired when the change context exits.\n *\n * @param key - The key to queue a notification for.\n */\nexport const queueNotification = (key: object): void => {\n  if (currentChangeContext === key) {\n    pendingNotificationKey = key;\n  }\n};\n\n/**\n * Queue an owner notification. Owner notifications are for objects in the ownership\n * chain that should be notified when a nested object changes.\n * These objects have EventId and emit directly.\n * Skip if the target is already the current change context (to avoid duplicate notifications).\n *\n * @param target - The owner target that has EventId.\n */\nexport const queueOwnerNotification = (target: object): void => {\n  // Skip if this is the object already being changed (primary notification handles it).\n  if (currentChangeContext !== null && target !== currentChangeContext) {\n    pendingOwnerNotifications.add(target);\n  }\n};\n\n/**\n * Check if there are any pending notifications for the given key.\n *\n * @param key - The key to check.\n * @returns True if there are pending notifications, false otherwise.\n */\nexport const hasPendingNotifications = (key: object): boolean => {\n  return pendingNotificationKey === key;\n};\n\n/**\n * Clear any pending notifications for the given key.\n *\n * @param key - The key to clear notifications for.\n */\nexport const clearPendingNotifications = (key: object): void => {\n  if (pendingNotificationKey === key) {\n    pendingNotificationKey = null;\n  }\n};\n\n/**\n * Execute a callback within a change context.\n * This is the shared implementation used by both TypedReactiveHandler and EchoReactiveHandler.\n *\n * @param contextKey - The key for the change context (target for typed, ObjectCore for db).\n * @param eventTarget - The object that has the EventId for notifications.\n * @param proxy - The proxy object to pass to the callback.\n * @param callback - The callback to execute with mutations allowed.\n */\nexport const executeChange = (\n  contextKey: object,\n  eventTarget: object,\n  proxy: any,\n  callback: (proxy: any) => void,\n): void => {\n  const exitContext = enterChangeContext(contextKey);\n  try {\n    batchEvents(() => callback(proxy));\n  } finally {\n    exitContext();\n    // Fire primary notification.\n    if (hasPendingNotifications(contextKey)) {\n      clearPendingNotifications(contextKey);\n      (eventTarget as any)[EventId]?.emit();\n    }\n    // Fire owner chain notifications.\n    for (const ownerTarget of pendingOwnerNotifications) {\n      (ownerTarget as any)[EventId]?.emit();\n    }\n    pendingOwnerNotifications.clear();\n  }\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\n/**\n * Define a non-enumerable property on an object.\n */\nexport const defineHiddenProperty = (object: any, key: string | symbol, value: any) => {\n  Object.defineProperty(object, key, {\n    enumerable: false,\n    configurable: true,\n    value,\n  });\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\n/**\n * Error thrown when attempting to mutate an object outside of an Obj.update() context.\n */\nexport class MutationOutsideChangeContextError extends Error {\n  constructor(operation: string, suggestion: string) {\n    super(\n      `Cannot ${operation} outside of Obj.update(). Use Obj.update(obj, (mutableObj) => { ${suggestion} }) instead.`,\n    );\n    this.name = 'MutationOutsideChangeContextError';\n  }\n}\n\n/**\n * Create an error for attempting to set a property outside of a change context.\n */\nexport const createPropertySetError = (prop: string | symbol): MutationOutsideChangeContextError => {\n  return new MutationOutsideChangeContextError(\n    `modify object property \"${String(prop)}\"`,\n    `mutableObj.${String(prop)} = value;`,\n  );\n};\n\n/**\n * Create an error for attempting to delete a property outside of a change context.\n */\nexport const createPropertyDeleteError = (prop: string | symbol): MutationOutsideChangeContextError => {\n  return new MutationOutsideChangeContextError(\n    `delete object property \"${String(prop)}\"`,\n    `delete mutableObj.${String(prop)};`,\n  );\n};\n\n/**\n * Create an error for attempting to call an array method outside of a change context.\n */\nexport const createArrayMethodError = (method: string): MutationOutsideChangeContextError => {\n  return new MutationOutsideChangeContextError(`call array.${method}()`, `mutableObj.array.${method}(...);`);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\nimport { EID } from '@dxos/keys';\nimport { deepMapValues, encodeUint8ArrayToJson } from '@dxos/util';\n\nimport { Ref } from '../../Ref';\nimport {\n  ATTR_RELATION_SOURCE,\n  ATTR_RELATION_TARGET,\n  ATTR_SELF_URI,\n  ATTR_TYPE,\n  RelationSourceDXNId,\n  RelationTargetDXNId,\n  SelfURIId,\n  TypeId,\n} from '../types';\nimport { ATTR_META, type EntityMeta } from '../types/meta';\nimport { MetaId } from '../types/model-symbols';\n\n/**\n * Attaches a toJSON method to the object for typed serialization.\n */\nexport const attachTypedJsonSerializer = (obj: any) => {\n  const descriptor = Object.getOwnPropertyDescriptor(obj, 'toJSON');\n  if (descriptor) {\n    return;\n  }\n\n  Object.defineProperty(obj, 'toJSON', {\n    value: typedJsonSerializer,\n    writable: false,\n    enumerable: false,\n    // Setting `configurable` to false breaks proxy invariants, should be fixable.\n    configurable: true,\n  });\n};\n\n// NOTE: KEEP as function.\n// Exported for use in objectToJSON.\nexport const typedJsonSerializer = function (this: any) {\n  const { id, ...rest } = this;\n  const result: any = {\n    id,\n  };\n\n  if (this[TypeId]) {\n    result[ATTR_TYPE] = this[TypeId];\n  }\n\n  if (this[MetaId]) {\n    result[ATTR_META] = serializeMeta(this[MetaId]);\n  }\n\n  if (this[SelfURIId]) {\n    result[ATTR_SELF_URI] = this[SelfURIId];\n  }\n\n  if (this[RelationSourceDXNId]) {\n    const sourceDXN = this[RelationSourceDXNId];\n    invariant(EID.isEID(sourceDXN));\n    result[ATTR_RELATION_SOURCE] = sourceDXN;\n  }\n  if (this[RelationTargetDXNId]) {\n    const targetDXN = this[RelationTargetDXNId];\n    invariant(EID.isEID(targetDXN));\n    result[ATTR_RELATION_TARGET] = targetDXN;\n  }\n\n  Object.assign(result, serializeData(rest));\n  return result;\n};\n\nconst serializeData = (data: unknown) => {\n  return deepMapValues(data, (value, recurse) => {\n    if (Ref.isRef(value)) {\n      // TODO(dmaretskyi): Should this be configurable?\n      return value.noInline().encode();\n    }\n    if (value instanceof Uint8Array) {\n      return encodeUint8ArrayToJson(value);\n    }\n\n    return recurse(value);\n  });\n};\n\nconst serializeMeta = (meta: EntityMeta) => {\n  // Omit empty `tags`/`annotations` to keep serialized output minimal; `objectFromJSON` backfills\n  // the required defaults on read.\n  const { tags, annotations, ...rest } = meta;\n  const compact = {\n    ...rest,\n    ...(tags != null && tags.length > 0 ? { tags } : {}),\n    ...(annotations != null && Object.keys(annotations).length > 0 ? { annotations } : {}),\n  };\n  // Use `serializeData` so `meta.tags` `Ref<Tag>` values encode to the on-wire reference form.\n  return serializeData(compact);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport type * as Schema from 'effect/Schema';\n\nimport { EntityId } from '@dxos/keys';\n\nimport { getTypeAnnotation } from '../../Annotation/annotations';\nimport { type AnyProperties, KindId, ParentId, SchemaKindId, StaticTypeSchemaSlot } from '../types';\nimport { type EntityMeta, EntityMetaSchema } from '../types/meta';\nimport { MetaId } from '../types/model-symbols';\nimport { defineHiddenProperty } from './define-hidden-property';\nimport { attachTypedJsonSerializer } from './json-serializer';\nimport { createProxy, getProxyTarget, isValidProxyTarget } from './proxy-utils';\nimport { TypeSource, TypedReactiveHandler, prepareTypedTarget, setMetaOwner } from './typed-handler';\n\n/**\n *\n */\n// TODO(burdon): Make internal\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.\nexport type MakeObjectProps<T extends AnyProperties> = Omit<T, 'id' | KindId | SchemaKindId | StaticTypeSchemaSlot>;\n\n/**\n * Creates a reactive object from a plain Javascript object.\n * Requires a TS-effect schema.\n *\n * Callers that have a `Type.Type` entity (not a raw schema) must unwrap it\n * themselves — `Obj.make` / `Relation.make` do this via `Type.getSchema(...)`\n * and pass the entity through as `typeSource` so the instance carries a\n * back-reference for `Obj.getType` and resolves the live source schema\n * uniformly via the entity's `[StaticTypeSchemaSlot]`.\n */\n// TODO(burdon): Make internal\n// TODO(dmaretskyi): Deep mutability.\n// TODO(dmaretskyi): Invert generics (generic over schema) to have better error messages.\n// TODO(dmaretskyi): Could mutate original object making it unusable.\nexport const makeObject = <T extends AnyProperties>(\n  schema: Schema.Schema<T, any, never>,\n  obj: NoInfer<MakeObjectProps<T>>,\n  meta?: Partial<EntityMeta>,\n  typeSource?: TypeSource,\n): T => {\n  // Use Object.assign to copy symbol properties (like ParentId) that spread operator doesn't copy.\n  return createReactiveObject<T>(Object.assign({}, obj) as T, meta, schema as Schema.Schema<T, any>, typeSource);\n};\n\nconst createReactiveObject = <T extends AnyProperties>(\n  obj: T,\n  meta?: Partial<EntityMeta>,\n  schema?: Schema.Schema<T>,\n  typeSource?: TypeSource,\n): T => {\n  if (!isValidProxyTarget(obj)) {\n    throw new Error('Value cannot be made into a reactive object.');\n  }\n\n  if (!schema) {\n    throw new Error('Schema is required for reactive objects. Use Atom for untyped reactive state.');\n  }\n\n  // Extract parent from props (can be set via [Obj.Parent]).\n  const parent = (obj as any)[ParentId];\n  if (parent !== undefined) {\n    delete (obj as any)[ParentId];\n  }\n\n  const annotation = getTypeAnnotation(schema);\n  if (annotation) {\n    setIdOnTarget(obj);\n    defineHiddenProperty(obj, KindId, annotation.kind);\n  }\n  initMeta(obj, meta);\n  if (parent !== undefined) {\n    defineHiddenProperty(obj, ParentId, parent);\n  }\n  prepareTypedTarget(obj, schema, typeSource);\n  attachTypedJsonSerializer(obj);\n  const proxy = createProxy<T>(obj, TypedReactiveHandler.instance);\n\n  // Set meta's owner to the main object so meta mutations respect the parent's change context.\n  // For non-database objects using TypedReactiveHandler, this links the meta to the main object's\n  // change context. For database objects, meta is handled by EchoReactiveHandler.getMeta().\n  const metaProxy = (obj as any)[MetaId];\n  if (metaProxy) {\n    const metaTarget = getProxyTarget(metaProxy);\n    if (metaTarget) {\n      setMetaOwner(metaTarget, obj);\n    }\n  }\n\n  return proxy;\n};\n\n/**\n * Set ID on ECHO object targets during creation.\n * Used for objects with schema and the ones explicitly marked as Expando.\n */\nconst setIdOnTarget = (target: any) => {\n  // invariant(!('id' in target), 'Object already has an `id` field, which is reserved.');\n  if ('id' in target && target.id !== undefined && target.id !== null) {\n    if (!EntityId.isValid(target.id)) {\n      throw new Error('Invalid object id format.');\n    }\n  } else {\n    target.id = EntityId.random();\n  }\n};\n\n/**\n * Set metadata on object.\n */\n// TODO(dmaretskyi): Move to echo-schema.\nconst initMeta = <T>(obj: T, meta?: Partial<EntityMeta>) => {\n  // Backfill required fields so callers may pass a partial meta, or one whose `keys`/`tags`/\n  // `annotations` are explicitly `undefined` (coalesce, don't let a spread reintroduce undefined).\n  const fullMeta: EntityMeta = {\n    ...meta,\n    keys: meta?.keys ?? [],\n    tags: meta?.tags ?? [],\n    annotations: meta?.annotations ?? {},\n  };\n  prepareTypedTarget(fullMeta, EntityMetaSchema);\n  defineHiddenProperty(obj, MetaId, createProxy(fullMeta, TypedReactiveHandler.instance as any));\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\n\nimport { type ReactiveHandler } from './proxy-types';\n\nexport const symbolIsProxy = Symbol.for('@dxos/schema/Proxy');\n\n/**\n * Internal api.\n */\nexport const isProxy = (value: unknown) => !!(value as any)?.[symbolIsProxy];\n\nexport const isValidProxyTarget = (value: any): value is object => {\n  if (value == null || value[symbolIsProxy]) {\n    return false;\n  }\n  if (Array.isArray(value)) {\n    return true;\n  }\n\n  return typeof value === 'object' && Object.getPrototypeOf(value) === Object.prototype;\n};\n\n/**\n * @deprecated\n */\nexport const getProxySlot = <T extends object>(proxy: any): ProxyHandlerSlot<T> => {\n  const value = (proxy as any)[symbolIsProxy];\n  invariant(value instanceof ProxyHandlerSlot);\n  return value;\n};\n\nexport const getProxyTarget = <T extends object>(proxy: any): T => {\n  return getProxySlot<T>(proxy).target;\n};\n\nexport const getProxyHandler = <T extends object>(proxy: any): ReactiveHandler<T> => {\n  return getProxySlot<T>(proxy).handler;\n};\n\n/**\n * Unsafe method to override id for debugging/testing and migration purposes.\n * @deprecated\n */\nexport const dangerouslySetProxyId = <T>(obj: T, id: string) => {\n  (getProxySlot(obj).target as any).id = id;\n};\n\n/**\n * Create a reactive proxy object.\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy\n *\n * @param target Object or array. Passing in array will enable array methods.\n * @param handler ReactiveHandler instance.\n */\n// TODO(burdon): Document.\n// TODO(burdon): Tests for low-level functions.\nexport const createProxy = <T extends object>(target: T, handler: ReactiveHandler<T>): T => {\n  const existingProxy = handler._proxyMap.get(target);\n  if (existingProxy) {\n    return existingProxy;\n  }\n\n  // TODO(dmaretskyi): In the future this should be mutable to allow replacing the handler on-the-fly while maintaining the proxy identity.\n  const proxy = new Proxy(target, new ProxyHandlerSlot<T>(target, handler));\n  handler.init(target);\n\n  // TODO(dmaretskyi): Check if this will actually work; maybe a global WeakMap is better?\n  handler._proxyMap.set(target, proxy);\n  return proxy;\n};\n\n/**\n * Passed as the handler to the Proxy constructor.\n * Maintains a mutable slot for the actual handler.\n */\nclass ProxyHandlerSlot<T extends object> implements ProxyHandler<T> {\n  /**\n   * @param target Original object.\n   * @param _handler Handles intercepted operations.\n   */\n  constructor(\n    readonly target: T,\n    private _handler: ReactiveHandler<T>,\n  ) {}\n\n  get handler() {\n    invariant(this._handler);\n    return this._handler;\n  }\n\n  // TODO(burdon): Requires comment.\n  setHandler(handler: ReactiveHandler<T>): void {\n    this._handler = handler;\n  }\n\n  /**\n   * Get value.\n   */\n  get(target: T, prop: string | symbol, receiver: any): any {\n    if (prop === symbolIsProxy) {\n      return this;\n    }\n\n    if (!this._handler || !this._handler.get) {\n      return Reflect.get(target, prop, receiver);\n    }\n\n    return this._handler.get(target, prop, receiver);\n  }\n\n  static {\n    const TRAPS: (keyof ProxyHandler<any>)[] = [\n      'apply',\n      'construct',\n      'defineProperty',\n      'deleteProperty',\n      'get',\n      'getOwnPropertyDescriptor',\n      'getPrototypeOf',\n      'has',\n      'isExtensible',\n      'ownKeys',\n      'preventExtensions',\n      'set',\n      'setPrototypeOf',\n    ];\n\n    for (const trap of TRAPS) {\n      if (trap === 'get') {\n        continue;\n      }\n\n      Object.defineProperty(this.prototype, trap, {\n        enumerable: false,\n        value: function (this: ProxyHandlerSlot<any>, ...args: any[]) {\n          // log.info('trap', { trap, args });\n          if (!this._handler || !this._handler[trap]) {\n            return (Reflect[trap] as Function)(...args);\n          }\n\n          return (this._handler[trap] as Function).apply(this._handler, args);\n        },\n      });\n    }\n  }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\nimport { type InspectOptionsStylized } from 'node:util';\n\nimport { Event } from '@dxos/async';\nimport { inspectCustom } from '@dxos/debug';\nimport { assertArgument, invariant } from '@dxos/invariant';\n\nimport { getSchemaURI } from '../../Annotation/annotations';\nimport { toEffectSchema } from '../../JsonSchema/json-schema';\nimport { ObjectDeletedId, ParentId, SchemaId, StaticTypeSchemaSlot, TypeEntityId, TypeId } from '../types';\nimport { executeChange, isInChangeContext, queueNotification } from './change-context';\nimport { defineHiddenProperty } from './define-hidden-property';\nimport { createPropertyDeleteError } from './errors';\nimport { batchEvents } from './event-batch';\nimport {\n  getEchoRoot,\n  getOwner,\n  getRawTarget,\n  hasForeignOwner,\n  notifyOwnerChain,\n  setOwnerRecursive,\n  wouldCreateCycle,\n} from './ownership';\nimport { type ReactiveHandler, objectData } from './proxy-types';\nimport { createProxy, isProxy, isValidProxyTarget, symbolIsProxy } from './proxy-utils';\nimport { ReactiveArray } from './reactive-array';\nimport { SchemaValidator } from './schema-validator';\nimport { ChangeId, EventId } from './symbols';\n\n// Re-export for external consumers.\nexport { getEchoRoot, setMetaOwner } from './ownership';\n\ntype ProxyTarget = {\n  /**\n   * Typename or type DXN.\n   */\n  [TypeId]: string;\n\n  /**\n   * Schema for the root.\n   */\n  [SchemaId]: Schema.Schema.AnyNoContext;\n  [ParentId]?: any;\n\n  /**\n   * For modifications.\n   */\n  [EventId]: Event<void>;\n} & ({ [key: keyof any]: any } | any[]);\n\n/**\n * Deep copy a value, handling arrays and nested objects.\n * Preserves ReactiveArray type and hidden properties (SchemaId, TypeId).\n * Does not copy class instances or functions (except ReactiveArray).\n *\n * Note: Cannot use structuredClone because we need to:\n * - Unwrap proxies\n * - Preserve ReactiveArray instances\n * - Copy Symbol-keyed hidden properties (SchemaId, TypeId)\n * - Convert plain arrays to ReactiveArray\n *\n * Performance: O(n) where n is the total number of nested objects/arrays.\n * For large structures, consider using Refs for frequently reassigned subtrees.\n */\nconst deepCopy = <T>(value: T, visited = new Map<object, object>()): T => {\n  if (value == null || typeof value !== 'object') {\n    return value;\n  }\n\n  // Handle proxies - get the underlying target.\n  const actualValue = getRawTarget(value);\n\n  // Check for circular references in the copy.\n  if (visited.has(actualValue)) {\n    return visited.get(actualValue) as T;\n  }\n\n  // Handle ReactiveArray specially to preserve reactivity.\n  if (actualValue instanceof ReactiveArray) {\n    const copy = new ReactiveArray<any>();\n    visited.set(actualValue, copy);\n    for (const item of actualValue) {\n      copy.push(deepCopy(item, visited));\n    }\n    // Copy hidden properties.\n    copyHiddenProperties(actualValue, copy);\n    return copy as T;\n  }\n\n  // Don't copy other class instances (objects with non-Object prototype).\n  const proto = Object.getPrototypeOf(actualValue);\n  if (proto !== Object.prototype && proto !== Array.prototype && proto !== null) {\n    return value; // Return as-is, don't copy class instances.\n  }\n\n  if (Array.isArray(actualValue)) {\n    // Plain arrays become ReactiveArrays.\n    const copy = new ReactiveArray<any>();\n    visited.set(actualValue, copy);\n    for (const item of actualValue) {\n      copy.push(deepCopy(item, visited));\n    }\n    return copy as T;\n  }\n\n  const copy: Record<string, any> = {};\n  visited.set(actualValue, copy);\n  for (const key of Object.keys(actualValue)) {\n    copy[key] = deepCopy((actualValue as any)[key], visited);\n  }\n  // Copy hidden properties (SchemaId, TypeId).\n  copyHiddenProperties(actualValue, copy);\n  return copy as T;\n};\n\n/**\n * Copy hidden properties (SchemaId, TypeId) from source to target.\n */\nconst copyHiddenProperties = (source: any, target: any): void => {\n  if (SchemaId in source) {\n    defineHiddenProperty(target, SchemaId, source[SchemaId]);\n  }\n  if (TypeId in source) {\n    defineHiddenProperty(target, TypeId, source[TypeId]);\n  }\n};\n\n/**\n * Typed in-memory reactive store (with Schema).\n * Reactivity is based on Event subscriptions, not signals.\n */\nexport class TypedReactiveHandler implements ReactiveHandler<ProxyTarget> {\n  public static readonly instance: ReactiveHandler<any> = new TypedReactiveHandler();\n\n  readonly _proxyMap = new WeakMap<object, any>();\n  private _inSet = false;\n\n  private constructor() {}\n\n  init(target: ProxyTarget): void {\n    assertArgument(typeof target === 'object' && target !== null, 'target');\n    invariant(SchemaId in target, 'Schema is not defined for the target');\n\n    // Only set EventId on root objects (those without an owner).\n    // Nested objects share their root's EventId for centralized reactivity.\n    const hasOwner = !!getOwner(target);\n    if (!(EventId in target) && !hasOwner) {\n      defineHiddenProperty(target, EventId, new Event());\n    }\n\n    defineHiddenProperty(target, ObjectDeletedId, false);\n\n    // Mark root objects as having a change handler.\n    // The actual handler is returned dynamically in get() to have access to the proxy.\n    if (!hasOwner && !(ChangeId in target)) {\n      defineHiddenProperty(target, ChangeId, true);\n    }\n\n    // Only set owners if this is a root object (no existing owner).\n    // Nested objects already have owners set by their root's initialization.\n    // If we re-set owners here for nested objects, we'd incorrectly point\n    // array elements to the array instead of the true root ECHO object.\n    if (!hasOwner) {\n      // Set owner on all nested objects to this root ECHO object.\n      // All nested records point directly to this root for centralized reactivity.\n      for (const key in target) {\n        if ((target as any)[symbolIsProxy]) {\n          continue;\n        }\n        let value = (target as any)[key];\n        if (isValidProxyTarget(value) || isProxy(value)) {\n          // Deep copy values that have foreign owners (owned by a different object,\n          // or are root ECHO objects whose nested structures would be owned by them).\n          // This recursively checks all nested objects.\n          if (hasForeignOwner(value, target)) {\n            value = deepCopy(value);\n            (target as any)[key] = value;\n          }\n          setOwnerRecursive(value, target);\n        }\n      }\n    }\n\n    // Maybe have been set by `create`.\n    Object.defineProperty(target, inspectCustom, {\n      enumerable: false,\n      configurable: true,\n      value: this._inspect.bind(target),\n    });\n  }\n\n  get(target: ProxyTarget, prop: string | symbol, receiver: any): any {\n    switch (prop) {\n      // TODO(burdon): Remove?\n      case objectData: {\n        return toJSON(target);\n      }\n      case ChangeId: {\n        // Return change handler only for root objects that have been marked with ChangeId.\n        if ((target as any)[ChangeId] !== true) {\n          return undefined;\n        }\n        // Return a function that allows mutations within a controlled context.\n        // Uses target as both the context key and event target for non-database objects.\n        return (callback: (obj: any) => void) => executeChange(target, target, receiver, callback);\n      }\n      case TypeEntityId: {\n        // The back-reference to the type entity is metadata — return the raw\n        // value so we don't re-wrap an already-reactive `Type.Type` entity in\n        // another proxy (which would fail the SchemaId-in-target invariant).\n        return Reflect.get(target, prop, receiver);\n      }\n      case StaticTypeSchemaSlot: {\n        // Lazily rebuild the source Effect Schema from `jsonSchema` and cache it on\n        // the slot; the set-trap invalidates the cache when `jsonSchema` is mutated.\n        const existing = Reflect.get(target, prop, receiver);\n        if (existing !== undefined) {\n          return existing;\n        }\n        const jsonSchema = (target as any).jsonSchema;\n        if (jsonSchema == null) {\n          return undefined;\n        }\n        const rebuilt = toEffectSchema(jsonSchema);\n        defineHiddenProperty(target, StaticTypeSchemaSlot, rebuilt);\n        return rebuilt;\n      }\n    }\n\n    // Handle getter properties.\n    if (Object.getOwnPropertyDescriptor(target, prop)?.get) {\n      return Reflect.get(target, prop, receiver);\n    }\n\n    const value = Reflect.get(target, prop, receiver);\n    if (isValidProxyTarget(value)) {\n      return createProxy(value, this);\n    }\n\n    return value;\n  }\n\n  set(target: ProxyTarget, prop: string | symbol, value: any, receiver: any): boolean {\n    const echoRoot = getEchoRoot(target);\n\n    // Check readonly enforcement - mutations only allowed within Obj.update().\n    // Skip check if the object is still being initialized (no ChangeId handler yet).\n    // Also skip for non-initialized root objects (those without EventId).\n    // Skip for symbol properties (internal infrastructure, not user data).\n    const isInitialized = ChangeId in echoRoot || EventId in echoRoot;\n    const isSymbolProp = typeof prop === 'symbol';\n    if (isInitialized && !isSymbolProp && !isInChangeContext(echoRoot)) {\n      throw new Error(\n        `Cannot modify object property \"${String(prop)}\" outside of Obj.update(). ` +\n          'Use Obj.update(obj, (mutableObj) => { mutableObj.property = value; }) instead.',\n      );\n    }\n\n    let result: boolean = false;\n    this._inSet = true;\n    try {\n      batchEvents(() => {\n        const { echoRoot: _, preparedValue } = this._prepareValueForAssignment(target, prop, value);\n        result = Reflect.set(target, prop, preparedValue, receiver);\n        // Invalidate the cached source Effect Schema when `jsonSchema` changes\n        // (e.g. `Type.addFields`) so `Type.getSchema` rebuilds from the new shape.\n        if (prop === 'jsonSchema') {\n          Reflect.deleteProperty(target, StaticTypeSchemaSlot);\n        }\n        // Queue notification instead of emitting immediately (batched).\n        if (isInitialized) {\n          queueNotification(echoRoot);\n          // Also notify the owner chain so parent objects are updated when nested objects change.\n          notifyOwnerChain(target);\n        }\n      });\n    } finally {\n      this._inSet = false;\n    }\n    return result;\n  }\n\n  ownKeys(target: ProxyTarget): ArrayLike<string | symbol> {\n    return Reflect.ownKeys(target);\n  }\n\n  deleteProperty(target: ProxyTarget, property: string | symbol): boolean {\n    const echoRoot = getEchoRoot(target);\n\n    // Check readonly enforcement - mutations only allowed within Obj.update().\n    // Skip for symbol properties (internal infrastructure, not user data).\n    const isInitialized = (echoRoot as any)[ChangeId] === true || EventId in echoRoot;\n    const isSymbolProp = typeof property === 'symbol';\n    if (isInitialized && !isSymbolProp && !isInChangeContext(echoRoot)) {\n      throw createPropertyDeleteError(property);\n    }\n\n    const result = Reflect.deleteProperty(target, property);\n    if (isInitialized) {\n      queueNotification(echoRoot);\n    }\n    return result;\n  }\n\n  defineProperty(target: ProxyTarget, property: string | symbol, attributes: PropertyDescriptor): boolean {\n    const echoRoot = getEchoRoot(target);\n\n    // Check readonly enforcement - mutations only allowed within Obj.update().\n    // Skip check if the object is still being initialized (no ChangeId handler yet).\n    // Skip for symbol properties (internal infrastructure, not user data).\n    const isInitialized = ChangeId in echoRoot || EventId in echoRoot;\n    const isSymbolProp = typeof property === 'symbol';\n    if (isInitialized && !isSymbolProp && !isInChangeContext(echoRoot)) {\n      throw new Error(\n        `Cannot modify object property \"${String(property)}\" outside of Obj.update(). ` +\n          'Use Obj.update(obj, (mutableObj) => { mutableObj.property = value; }) instead.',\n      );\n    }\n\n    const { echoRoot: _, preparedValue } = this._prepareValueForAssignment(target, property, attributes.value);\n    const result = Reflect.defineProperty(target, property, {\n      ...attributes,\n      value: preparedValue,\n    });\n    if (!this._inSet && isInitialized) {\n      // Queue notification instead of emitting immediately (batched).\n      queueNotification(echoRoot);\n    }\n    return result;\n  }\n\n  /**\n   * Prepare a value for assignment to a typed object property.\n   * Handles cycle detection, copy-on-assign, array conversion, validation, and ownership.\n   */\n  private _prepareValueForAssignment(\n    target: ProxyTarget,\n    prop: string | symbol,\n    value: any,\n  ): { echoRoot: object; preparedValue: any } {\n    const echoRoot = getEchoRoot(target);\n\n    if (prop === ParentId) {\n      return { echoRoot, preparedValue: value }; // Short-circuit for parent assignment.\n    }\n\n    // Check for cycles before assignment.\n    if (isValidProxyTarget(value) || isProxy(value)) {\n      if (wouldCreateCycle(echoRoot, value)) {\n        throw new Error('Cannot create cycles in typed object graph. Consider using Ref for circular references.');\n      }\n    }\n\n    // Prevent direct assignment of root ECHO objects (those created with Obj.make/Relation.make).\n    // These must be wrapped with Ref.make for proper reference handling.\n    // This matches database object behavior for consistency.\n    if (isValidProxyTarget(value) || isProxy(value)) {\n      const actualValue = getRawTarget(value);\n      const isRootEchoObject = EventId in actualValue;\n      if (isRootEchoObject) {\n        throw new Error('Object references must be wrapped with `Ref.make`');\n      }\n    }\n\n    // Copy-on-assign: If the value is a nested record owned by a different ECHO object, deep copy it.\n    if (isValidProxyTarget(value) || isProxy(value)) {\n      const actualValue = getRawTarget(value);\n      const existingOwner = getOwner(actualValue);\n      if (existingOwner != null && existingOwner !== echoRoot) {\n        value = deepCopy(value);\n      }\n    }\n\n    // Convert arrays to reactive arrays.\n    if (Array.isArray(value) && !(value instanceof ReactiveArray)) {\n      value = ReactiveArray.from(value);\n    }\n\n    const validatedValue = this._validateValue(target, prop, value);\n\n    // Set owner on new value to the root ECHO object.\n    if (isValidProxyTarget(validatedValue) || isProxy(validatedValue)) {\n      setOwnerRecursive(validatedValue, echoRoot);\n    }\n\n    return { echoRoot, preparedValue: validatedValue };\n  }\n\n  private _validateValue(target: any, prop: string | symbol, value: any) {\n    if (prop === ParentId) {\n      return value;\n    }\n    const schema = SchemaValidator.getTargetPropertySchema(target, prop);\n    const _ = Schema.asserts(schema)(value);\n    if (isValidProxyTarget(value)) {\n      setSchemaProperties(value, schema);\n    }\n\n    return value;\n  }\n\n  private _inspect(\n    _: number,\n    options: InspectOptionsStylized,\n    inspectFn: (value: any, options?: InspectOptionsStylized) => string,\n  ): string {\n    const inspected = inspectFn(this, {\n      ...options,\n      showHidden: false,\n      customInspect: false,\n    });\n\n    return `Typed ${inspected}`;\n  }\n}\n\n/**\n * @deprecated Use `Obj.toJSON` instead.\n */\n// TODO(burdon): Remove?\nconst toJSON = (target: ProxyTarget): any => {\n  return { '@type': 'TypedReactiveObject', ...target };\n};\n\n/**\n * Pointer to a `Type.Type` entity, stamped as the back-reference (`TypeEntityId`)\n * on instances and read by the `SchemaId` getter installed below.\n *\n * Structural shape (not `Type.AnyEntity`) because `internal/common/proxy/`\n * can't import the top-level `Type` module without a cycle. Every kind of\n * `Type.Type` entity satisfies this shape:\n *   - Static (`Type.makeObject(dxn)` pipe) — slot set directly on the object.\n *   - Persisted (echo-handler-wrapped) — slot exposed via that handler's\n *     `get` trap (rebuilds from `data.jsonSchema`).\n *   - In-memory pre-persist (`Type.makeObjectFromJsonSchema`) — slot exposed\n *     via the `case StaticTypeSchemaSlot:` arm in this file's `get` trap.\n */\nexport type TypeSource = { readonly [StaticTypeSchemaSlot]?: Schema.Schema.AnyNoContext };\n\n/**\n * Recursively set AST on all potential proxy targets.\n */\nconst setSchemaProperties = (obj: any, schema: Schema.Schema.AnyNoContext, typeSource?: TypeSource) => {\n  const schemaType = getSchemaURI(schema);\n  if (schemaType != null) {\n    defineHiddenProperty(obj, TypeId, schemaType);\n  }\n\n  if (typeSource != null) {\n    // Keep a back-reference to the type entity so `Obj.getType` /\n    // `Relation.getType` / `Entity.getType` can return it.\n    defineHiddenProperty(obj, TypeEntityId, typeSource);\n\n    // Install `SchemaId` as a getter that reads through the entity's static\n    // schema slot. The three entity shapes (static / persisted / in-memory\n    // pre-persist) each populate the slot via their own get-trap path, so\n    // `Type.update` / `Type.addFields` mutations propagate into validation\n    // for objects created via `Obj.make(typeEntity, ...)` without this file\n    // having to rebuild from `jsonSchema` itself.\n    Object.defineProperty(obj, SchemaId, {\n      get: () => typeSource[StaticTypeSchemaSlot] ?? schema,\n      enumerable: false,\n      configurable: true,\n    });\n  } else {\n    defineHiddenProperty(obj, SchemaId, schema);\n  }\n  for (const key in obj) {\n    if (isValidProxyTarget(obj[key])) {\n      const elementSchema = SchemaValidator.getTargetPropertySchema(obj, key);\n      if (elementSchema != null) {\n        setSchemaProperties(obj[key], elementSchema);\n      }\n    }\n  }\n};\n\n// Accepts any encoded type: the typed handler operates on the decoded representation, so schemas\n// whose encoded form differs (e.g. refs encode as `{ '/': uri }`) are valid here.\nexport const prepareTypedTarget = <T>(target: T, schema: Schema.Schema<T, any>, typeSource?: TypeSource) => {\n  // log.info('prepareTypedTarget', { target, schema });\n  if (!SchemaAST.isTypeLiteral(schema.ast)) {\n    throw new Error('schema has to describe an object type');\n  }\n\n  SchemaValidator.validateSchema(schema);\n  const _ = Schema.asserts(schema)(target);\n  makeArraysReactive(target);\n  setSchemaProperties(target, schema, typeSource);\n};\n\nconst makeArraysReactive = (target: any) => {\n  for (const key in target) {\n    if (target[symbolIsProxy]) {\n      continue;\n    }\n    if (Array.isArray(target[key])) {\n      target[key] = ReactiveArray.from(target[key]);\n    }\n    if (typeof target[key] === 'object') {\n      makeArraysReactive(target[key]);\n    }\n  }\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\n\nimport { KindId } from '../types';\nimport { queueOwnerNotification } from './change-context';\nimport { defineHiddenProperty } from './define-hidden-property';\nimport { getProxyTarget, isProxy, isValidProxyTarget } from './proxy-utils';\nimport { EventId } from './symbols';\n\n/**\n * Symbol to store the owning ECHO object reference on nested JS objects (records).\n * Every nested record is attributed to exactly one ECHO object.\n * This achieves:\n * - No cycles in the object graph (cyclical Refs are still allowed).\n * - No multiple inbound pointers to one record.\n * - Centralized reactivity for entire ECHO object.\n */\nconst EchoOwner = Symbol.for('@dxos/echo/Owner');\n\n/**\n * Get the raw target from a value, unwrapping proxy if needed.\n */\nexport const getRawTarget = (value: any): any => {\n  return isProxy(value) ? getProxyTarget(value) : value;\n};\n\n/**\n * Get the ECHO object that owns this nested record.\n *\n * The owner is always the raw target object (not a proxy) of the root ECHO object.\n * For example, if you have `echoObject.nested.deep`, both `nested` and `deep`\n * will have their owner set to the raw target of `echoObject`.\n *\n * @param value - The nested record to check (can be a proxy or raw target).\n * @returns The raw target of the owning root ECHO object, or undefined if not owned.\n */\nexport const getOwner = (value: object | null | undefined): object | undefined => {\n  return (value as any)?.[EchoOwner];\n};\n\n/**\n * Set the owner of a meta object to its parent.\n * This allows meta mutations to respect the parent's change context.\n * @internal\n */\nexport const setMetaOwner = (metaTarget: object, parent: object): void => {\n  defineHiddenProperty(metaTarget, EchoOwner, parent);\n};\n\n/**\n * Set the ECHO object owner on a value and all its nested records.\n * All nested JS objects point directly to the root ECHO object.\n *\n * @param value - The value to set ownership on (can be a proxy or raw target).\n * @param owner - The raw target of the root ECHO object that will own this value.\n * @param options.visited - Set of already-visited objects to avoid infinite loops.\n * @param options.depth - Current recursion depth (unused, kept for debugging).\n * @param options.allowedPreviousOwner - When reassigning a root ECHO object, its nested structures\n *   are allowed to have this as their previous owner without triggering the invariant.\n */\nexport const setOwnerRecursive = (\n  value: any,\n  owner: object,\n  options: {\n    visited?: Set<object>;\n    depth?: number;\n    allowedPreviousOwner?: object;\n  } = {},\n): void => {\n  const { visited = new Set<object>(), depth = 0, allowedPreviousOwner } = options;\n  if (value == null || typeof value !== 'object') {\n    return;\n  }\n\n  const actualValue = getRawTarget(value);\n  if (visited.has(actualValue)) {\n    return;\n  }\n  visited.add(actualValue);\n\n  // Check that we're not stealing a nested record owned by a different ECHO object.\n  // Root ECHO objects (those with EventId) can be reassigned - they maintain their own\n  // identity and choosing to embed them in another object is a valid operation.\n  // When reassigning a root, its nested records (owned by that root) are also allowed.\n  const existingOwner = getOwner(actualValue);\n  const isRootEchoObject = EventId in actualValue;\n\n  // Track if this is a root being assigned - its nested structures are allowed to transfer.\n  let newAllowedPreviousOwner = allowedPreviousOwner;\n  if (isRootEchoObject && depth === 0) {\n    // This is the top-level root being assigned; allow its nested structures to transfer.\n    newAllowedPreviousOwner = actualValue;\n  }\n\n  if (!isRootEchoObject) {\n    const ownershipAllowed =\n      existingOwner == null || existingOwner === owner || existingOwner === newAllowedPreviousOwner;\n    invariant(\n      ownershipAllowed,\n      'Cannot reassign ownership of a nested record to a different ECHO object. Use deep copy first.',\n    );\n  }\n\n  // Set owner directly to the root ECHO object.\n  defineHiddenProperty(actualValue, EchoOwner, owner);\n\n  // Recursively set owner on nested objects and array elements.\n  const recursiveOptions = {\n    visited,\n    depth: depth + 1,\n    allowedPreviousOwner: newAllowedPreviousOwner,\n  };\n  if (Array.isArray(actualValue)) {\n    for (const item of actualValue) {\n      if (isValidProxyTarget(item) || isProxy(item)) {\n        setOwnerRecursive(item, owner, recursiveOptions);\n      }\n    }\n  } else {\n    for (const key in actualValue) {\n      if (Object.prototype.hasOwnProperty.call(actualValue, key)) {\n        const nested = actualValue[key];\n        if (isValidProxyTarget(nested) || isProxy(nested)) {\n          setOwnerRecursive(nested, owner, recursiveOptions);\n        }\n      }\n    }\n  }\n};\n\n/**\n * Traverse an object graph, calling the visitor on each object.\n * Handles proxy unwrapping and cycle detection.\n *\n * @param value - The value to traverse (can be a proxy or raw target).\n * @param visitor - Called for each object. Return true to stop traversal (early exit).\n * @returns true if the visitor returns true for any object.\n */\nexport const traverseObjectGraph = (\n  value: any,\n  visitor: (actualValue: any) => boolean,\n  visited = new Set<object>(),\n): boolean => {\n  if (value == null || typeof value !== 'object') {\n    return false;\n  }\n\n  const actualValue = getRawTarget(value);\n\n  if (visited.has(actualValue)) {\n    return false;\n  }\n  visited.add(actualValue);\n\n  if (visitor(actualValue)) {\n    return true;\n  }\n\n  if (Array.isArray(actualValue)) {\n    for (const item of actualValue) {\n      if (traverseObjectGraph(item, visitor, visited)) {\n        return true;\n      }\n    }\n  } else {\n    for (const key in actualValue) {\n      if (Object.prototype.hasOwnProperty.call(actualValue, key)) {\n        if (traverseObjectGraph(actualValue[key], visitor, visited)) {\n          return true;\n        }\n      }\n    }\n  }\n\n  return false;\n};\n\n/**\n * Check if a value would create a cycle when assigned to a target ECHO object.\n * Returns true if the value (or any nested object) IS the target root.\n */\nexport const wouldCreateCycle = (targetRoot: object, value: any): boolean =>\n  traverseObjectGraph(value, (v) => v === targetRoot);\n\n/**\n * Check if a value or any of its nested objects has an owner different from the target.\n * Used to determine if deep copy is needed during init.\n */\nexport const hasForeignOwner = (value: any, target: object): boolean =>\n  traverseObjectGraph(value, (v) => {\n    const owner = getOwner(v);\n    if (owner != null && owner !== target) {\n      return true;\n    }\n    // Root ECHO objects (with EventId) have their nested structures owned by them.\n    if (EventId in v && v !== target) {\n      return true;\n    }\n    return false;\n  });\n\n/**\n * Maximum depth for owner chain traversal.\n * This is a defensive measure against malformed circular ownership.\n * Primary cycle detection is handled by wouldCreateCycle() before assignment.\n */\nconst MAX_OWNER_DEPTH = 100;\n\n/**\n * Get the root ECHO object for a target.\n * Follows the owner chain to find the ultimate root.\n * An object may have EventId (from being created standalone) but if it now\n * has an owner, it's nested and we should use its owner's root instead.\n * @internal\n */\nexport const getEchoRoot = (target: object, depth = 0): object => {\n  invariant(depth < MAX_OWNER_DEPTH, 'Owner chain too deep - possible circular ownership');\n\n  // Root ECHO objects (those created with Obj.make or Relation.make) have KindId set.\n  // They maintain their own change context identity even when nested inside another object.\n  // Nested helper objects like EntityMeta don't have KindId and should follow their owner.\n  if (KindId in target) {\n    return target;\n  }\n\n  // For non-root objects (nested records, EntityMeta, etc.), follow the owner chain.\n  const owner = getOwner(target);\n  if (owner) {\n    return getEchoRoot(owner, depth + 1);\n  }\n\n  // No owner means this is an unowned object (e.g., during initialization).\n  return target;\n};\n\n/**\n * Notify all owners in the ownership chain.\n * When a nested object changes, its parent should also be notified.\n * This handles the case where a root ECHO object is nested inside another object.\n */\nexport const notifyOwnerChain = (target: object): void => {\n  const owner = getOwner(target);\n  if (owner) {\n    // Queue notification for the owner's root (which has EventId).\n    queueOwnerNotification(getEchoRoot(owner));\n    // Continue up the chain (owner might also be nested).\n    notifyOwnerChain(owner);\n  }\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\n/**\n * Reactive object proxy.\n */\nexport interface ReactiveHandler<T extends object> extends ProxyHandler<T> {\n  /**\n   * Target to Proxy mapping.\n   */\n  readonly _proxyMap: WeakMap<object, any>;\n\n  /**\n   * Called when a proxy is created for this target.\n   */\n  init(target: T): void;\n}\n\n/**\n * For debug-dumping the data of the object.\n */\nexport const objectData = Symbol.for('@dxos/live-object/objectData');\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { isInChangeContext } from './change-context';\nimport { createArrayMethodError } from './errors';\nimport { batchEvents } from './event-batch';\nimport { getEchoRoot } from './ownership';\nimport { getProxyTarget, isProxy } from './proxy-utils';\nimport { ChangeId, EventId } from './symbols';\n\n/**\n * Check if array mutation is allowed (inside a change context).\n * Throws a descriptive error if not.\n */\nconst checkArrayMutationAllowed = (arr: any, method: string): void => {\n  // Get the raw target - if arr is a proxy, get its underlying target.\n  const target = isProxy(arr) ? getProxyTarget(arr) : arr;\n\n  // Find the root ECHO object.\n  const echoRoot = getEchoRoot(target);\n\n  // Check if initialized (has ChangeId marker or EventId).\n  const isInitialized = (echoRoot as any)[ChangeId] === true || EventId in echoRoot;\n  if (!isInitialized) {\n    // Array is still being initialized, allow mutations.\n    return;\n  }\n\n  if (!isInChangeContext(echoRoot)) {\n    throw createArrayMethodError(method);\n  }\n};\n\n/**\n * Extends the native array to make sure that arrays methods are correctly reactive.\n * Enforces that mutations only happen within Obj.update() context.\n */\nexport class ReactiveArray<T> extends Array<T> {\n  static override get [Symbol.species]() {\n    return Array;\n  }\n\n  static {\n    /**\n     * These methods will trigger proxy traps like `set` and `defineProperty` and emit event notifications.\n     * We wrap them in a batch to avoid unnecessary event notifications.\n     * Change context is checked before allowing mutations.\n     *\n     * Note: When called on a proxy, `this` will be the proxy, so array mutations\n     * go through the proxy's set trap which handles event emission.\n     */\n    const BATCHED_METHODS = ['push', 'pop', 'shift', 'unshift', 'splice', 'sort', 'reverse'] as const;\n\n    for (const method of BATCHED_METHODS) {\n      Object.defineProperty(this.prototype, method, {\n        enumerable: false,\n        value: function (this: ReactiveArray<any>, ...args: any[]) {\n          // Check change context before allowing mutation.\n          checkArrayMutationAllowed(this, method);\n\n          let result!: any;\n          batchEvents(() => {\n            result = Array.prototype[method].apply(this, args);\n          });\n          return result;\n        },\n      });\n    }\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 { log } from '@dxos/log';\n\nimport { SchemaId } from '../types';\n\n// TODO(burdon): Reconcile with @dxos/effect visit().\n\nexport class SchemaValidator {\n  /**\n   * Recursively check that schema specifies constructions we can handle.\n   * Validates there are no ambiguous discriminated union types.\n   */\n  public static validateSchema(schema: Schema.Schema.AnyNoContext): void {\n    const visitAll = (nodes: SchemaAST.AST[]) => nodes.forEach((node) => this.validateSchema(Schema.make(node)));\n    if (SchemaAST.isUnion(schema.ast)) {\n      const typeAstList = schema.ast.types.filter((type) => SchemaAST.isTypeLiteral(type)) as SchemaAST.TypeLiteral[];\n      // Check we can handle a discriminated union.\n      if (typeAstList.length > 1) {\n        getTypeDiscriminators(typeAstList);\n      }\n      visitAll(typeAstList);\n    } else if (SchemaAST.isTupleType(schema.ast)) {\n      const positionalTypes = schema.ast.elements.map((t) => t.type);\n      const allTypes = positionalTypes.concat(schema.ast.rest.map((t) => t.type));\n      visitAll(allTypes);\n    } else if (SchemaAST.isTypeLiteral(schema.ast)) {\n      visitAll(SchemaAST.getPropertySignatures(schema.ast).map((p) => p.type));\n    }\n  }\n\n  public static hasTypeAnnotation(\n    rootObjectSchema: Schema.Schema.AnyNoContext,\n    property: string,\n    annotation: symbol,\n  ): boolean {\n    try {\n      let type = this.getPropertySchema(rootObjectSchema, [property]);\n      if (SchemaAST.isTupleType(type.ast)) {\n        type = this.getPropertySchema(rootObjectSchema, [property, '0']);\n      }\n\n      return type.ast.annotations[annotation] != null;\n    } catch {\n      return false;\n    }\n  }\n\n  public static getPropertySchema(\n    rootObjectSchema: Schema.Schema.AnyNoContext,\n    propertyPath: KeyPath,\n    getProperty: (path: KeyPath) => any = () => null,\n  ): Schema.Schema.AnyNoContext {\n    let schema: Schema.Schema.AnyNoContext = rootObjectSchema;\n    for (let i = 0; i < propertyPath.length; i++) {\n      const propertyName = propertyPath[i];\n      const tupleAst = unwrapArray(schema.ast);\n      if (tupleAst != null) {\n        schema = getArrayElementSchema(tupleAst, propertyName);\n      } else {\n        const propertyType = getPropertyType(schema.ast, propertyName.toString(), (propertyName) =>\n          getProperty([...propertyPath.slice(0, i), propertyName]),\n        );\n        if (propertyType == null) {\n          log.warn('unknown property', { path: propertyPath, property: propertyName });\n          continue;\n        }\n\n        schema = Schema.make(propertyType).annotations(propertyType.annotations);\n      }\n    }\n\n    return schema;\n  }\n\n  public static getTargetPropertySchema(target: any, prop: string | symbol): Schema.Schema.AnyNoContext {\n    const schema: Schema.Schema.AnyNoContext | undefined = (target as any)[SchemaId];\n    invariant(schema, 'target has no schema');\n    const arrayAst = unwrapArray(schema.ast);\n    if (arrayAst != null) {\n      return getArrayElementSchema(arrayAst, prop);\n    }\n\n    const propertyType = getPropertyType(schema.ast, prop.toString(), (prop) => target[prop]);\n    if (propertyType == null) {\n      return Schema.Any; // TODO(burdon): HACK.\n    }\n\n    invariant(propertyType, `invalid property: ${prop.toString()}`);\n    return Schema.make(propertyType);\n  }\n}\n\n/**\n * Tuple AST is used both for:\n * fixed-length tuples ([string, number]) in which case AST will be { elements: [Schema.String, Schema.Number] }\n * variable-length arrays (Array<string | number>) in which case AST will be { rest: [Schema.Union(Schema.String, Schema.Number)] }\n */\nconst getArrayElementSchema = (\n  tupleAst: SchemaAST.TupleType,\n  property: string | symbol | number,\n): Schema.Schema.AnyNoContext => {\n  const elementIndex = typeof property === 'string' ? parseInt(property, 10) : Number.NaN;\n  if (Number.isNaN(elementIndex)) {\n    invariant(property === 'length', `invalid array property: ${String(property)}`);\n    return Schema.Number;\n  }\n  if (elementIndex < tupleAst.elements.length) {\n    const elementType = tupleAst.elements[elementIndex].type;\n    return Schema.make(elementType).annotations(elementType.annotations);\n  }\n\n  const restType = tupleAst.rest;\n  return Schema.make(restType[0].type).annotations(restType[0].annotations);\n};\n\nconst flattenUnion = (typeAst: SchemaAST.AST): SchemaAST.AST[] =>\n  SchemaAST.isUnion(typeAst) ? typeAst.types.flatMap(flattenUnion) : [typeAst];\n\nconst getProperties = (\n  typeAst: SchemaAST.AST,\n  getTargetPropertyFn: (propertyName: string) => any,\n): SchemaAST.PropertySignature[] => {\n  const astCandidates = flattenUnion(typeAst);\n  const typeAstList = astCandidates.filter((type) => SchemaAST.isTypeLiteral(type)) as SchemaAST.TypeLiteral[];\n  if (typeAstList.length === 0) {\n    return [];\n  }\n  if (typeAstList.length === 1) {\n    return SchemaAST.getPropertySignatures(typeAstList[0]);\n  }\n\n  const typeDiscriminators = getTypeDiscriminators(typeAstList);\n  const targetPropertyValue = getTargetPropertyFn(String(typeDiscriminators[0].name));\n  const typeIndex = typeDiscriminators.findIndex((p) => targetPropertyValue === (p.type as SchemaAST.Literal).literal);\n  invariant(typeIndex !== -1, 'discriminator field not set on target');\n  return SchemaAST.getPropertySignatures(typeAstList[typeIndex]);\n};\n\nconst getPropertyType = (\n  ast: SchemaAST.AST,\n  propertyName: string,\n  getTargetPropertyFn: (propertyName: string) => any,\n): SchemaAST.AST | null => {\n  const anyOrObject = unwrapAst(\n    ast,\n    (candidate) => SchemaAST.isAnyKeyword(candidate) || SchemaAST.isObjectKeyword(candidate),\n  );\n  if (anyOrObject != null) {\n    return ast;\n  }\n\n  const typeOrDiscriminatedUnion = unwrapAst(ast, (t) => {\n    return SchemaAST.isTypeLiteral(t) || (SchemaAST.isUnion(t) && t.types.some((t) => SchemaAST.isTypeLiteral(t)));\n  });\n  if (typeOrDiscriminatedUnion == null) {\n    return null;\n  }\n\n  const targetProperty = getProperties(typeOrDiscriminatedUnion, getTargetPropertyFn).find(\n    (p) => p.name === propertyName,\n  );\n  if (targetProperty != null) {\n    return unwrapAst(targetProperty.type);\n  }\n\n  const indexSignatureType = unwrapAst(ast, SchemaAST.isTypeLiteral);\n  if (\n    indexSignatureType &&\n    SchemaAST.isTypeLiteral(indexSignatureType) &&\n    indexSignatureType.indexSignatures.length > 0\n  ) {\n    return unwrapAst(indexSignatureType.indexSignatures[0].type);\n  }\n\n  return null;\n};\n\nconst getTypeDiscriminators = (typeAstList: SchemaAST.TypeLiteral[]): SchemaAST.PropertySignature[] => {\n  const discriminatorPropCandidates = typeAstList\n    .flatMap(SchemaAST.getPropertySignatures)\n    .filter((p) => SchemaAST.isLiteral(p.type));\n  const propertyName = discriminatorPropCandidates[0].name;\n  const isValidDiscriminator = discriminatorPropCandidates.every((p) => p.name === propertyName && !p.isOptional);\n  const everyTypeHasDiscriminator = discriminatorPropCandidates.length === typeAstList.length;\n  const isDiscriminatedUnion = isValidDiscriminator && everyTypeHasDiscriminator;\n  invariant(isDiscriminatedUnion, 'type ambiguity: every type in a union must have a single unique-literal field');\n  return discriminatorPropCandidates;\n};\n\n/**\n * Used to check that rootAst is for a type matching the provided predicate.\n * That's not always straightforward because types of optionality and recursive types.\n * const Task = Schema.Struct({\n *   ...,\n *   previous?: Schema.optional(Schema.suspend(() => Task)),\n * });\n * Here the AST for `previous` field is going to be Union(Suspend(Type), Undefined).\n * SchemaAST.isTypeLiteral(field) will return false, but unwrapAst(field, (ast) => SchemaAST.isTypeLiteral(ast))\n * will return true.\n */\nconst unwrapAst = (rootAst: SchemaAST.AST, predicate?: (ast: SchemaAST.AST) => boolean): SchemaAST.AST | null => {\n  let ast: SchemaAST.AST | undefined = rootAst;\n  while (ast != null) {\n    if (predicate?.(ast)) {\n      return ast;\n    }\n\n    if (SchemaAST.isUnion(ast)) {\n      const next: any = ast.types.find((t) => (predicate != null && predicate(t)) || SchemaAST.isSuspend(t));\n      if (next != null) {\n        ast = next;\n        continue;\n      }\n    }\n\n    if (SchemaAST.isSuspend(ast)) {\n      ast = ast.f();\n    } else {\n      return predicate == null ? ast : null;\n    }\n  }\n\n  return null;\n};\n\nconst unwrapArray = (ast: SchemaAST.AST) => unwrapAst(ast, SchemaAST.isTupleType) as SchemaAST.TupleType | null;\n\nexport const checkIdNotPresentOnSchema = (schema: Schema.Schema<any, any, any>) => {\n  invariant(SchemaAST.isTypeLiteral(schema.ast));\n  const idProperty = SchemaAST.getPropertySignatures(schema.ast).find((prop) => prop.name === 'id');\n  if (idProperty != null) {\n    throw new Error('\"id\" property name is reserved');\n  }\n};\n\n// TODO(burdon): Reconcile with JsonPath.\ntype KeyPath = readonly (string | number)[];\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type RefTypeId } from '../../Ref/ref';\nimport { getProxyTarget, isProxy } from './proxy-utils';\nimport { ChangeId, EventId } from './symbols';\n\n/**\n * Subscribe to changes on a reactive object.\n * @param obj - The reactive object to subscribe to.\n * @param callback - Called when the object changes.\n * @returns Unsubscribe function.\n */\n// TODO(wittjosiah): Consider throwing if obj doesn't have EventId instead of returning no-op.\nexport const subscribe = (obj: unknown, callback: () => void): (() => void) => {\n  // Guard against non-reactive inputs (queue-stored typed objects, snapshots, plain shapes\n  // with branded symbols) before `getProxyTarget`'s `ProxyHandlerSlot` invariant kicks in.\n  // `Obj.isObject` (KindId-based) is satisfied by these inputs, so callers like\n  // `Atom.family((obj) => Atom.make((get) => Obj.subscribe(obj, ...)))` legitimately reach\n  // here with a non-proxy. Falling back to a no-op preserves the documented contract that\n  // values without subscription support get a no-op unsubscribe.\n  if (!isProxy(obj)) {\n    return () => {};\n  }\n  const target = getProxyTarget(obj as any);\n  if (target && EventId in target) {\n    return (target as any)[EventId].on(callback);\n  }\n  return () => {};\n};\n\n/**\n * Deeply removes readonly modifiers from all properties of T.\n * Inside Obj.update, all properties are fully mutable regardless of schema definition.\n * Ref types are preserved as-is since they are value-like objects that are replaced, not mutated.\n * Primitive types (including branded primitives) are preserved as-is.\n */\nexport type Mutable<T> = T extends string | number | boolean | bigint | symbol | null | undefined\n  ? T // Primitives (including branded primitives like JsonPath) stay as-is.\n  : T extends { [RefTypeId]: any }\n    ? T // Keep Ref types as-is (they're value-like, not mutated in place).\n    : T extends object\n      ? T extends readonly (infer U)[]\n        ? Mutable<U>[]\n        : { -readonly [K in keyof T]: Mutable<T[K]> }\n      : T;\n\n/**\n * Callback type for the change function.\n */\nexport type ChangeCallback<T> = (mutableObj: Mutable<T>) => void;\n\n/**\n * Perform mutations on a reactive object within a change context.\n *\n * If the object has a change handler (via ChangeId), it will be called with the callback.\n * This allows handlers to implement features like:\n * - Readonly enforcement (mutations only allowed within change context)\n * - Batched notifications (single notification for all mutations in the callback)\n * - Transaction semantics\n *\n * If the object doesn't have a change handler, the callback is called directly.\n *\n * @param obj - The reactive object to mutate.\n * @param callback - Callback that receives a mutable view of the object.\n */\nexport const change = <T>(obj: T, callback: ChangeCallback<T>): void => {\n  // Check proxy first (allows handler to intercept), then fall back to target.\n  // This order is important for EchoReactiveHandler which handles ChangeId in the proxy trap.\n  const changeFn = (obj as any)[ChangeId];\n  if (changeFn) {\n    changeFn(callback);\n  } else {\n    callback(obj as Mutable<T>);\n  }\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\nimport type * as Types from 'effect/Types';\n\nimport { DXN, EntityId } from '@dxos/keys';\nimport { type ToMutable } from '@dxos/util';\n\nimport { type TypeAnnotation, TypeAnnotationId } from '../Annotation/annotations';\nimport { makeTypeJsonSchemaAnnotation } from '../Annotation/util';\nimport { defineHiddenProperty } from '../common/proxy/define-hidden-property';\nimport { makeObject } from '../common/proxy/make-object';\nimport { getProxyTarget } from '../common/proxy/proxy-utils';\nimport {\n  type AnyEntity,\n  EntityKind,\n  InstancePhantomId,\n  KindId,\n  SchemaKindId,\n  StaticTypeSchemaSlot,\n} from '../common/types';\nimport { type EntityMeta } from '../common/types/meta';\nimport { JsonSchemaType } from '../JsonSchema/json-schema-type';\n\n// TODO(burdon): Define Schema type for `typename` and use consistently for all DXN-like properties.\n\n// type RequiredKeys<T> = { [K in keyof T]-?: {} extends Pick<T, K> ? never : K }[keyof T];\nexport type EchoTypeSchemaProps<T, ExtraFields = {}> = Types.Simplify<AnyEntity & ToMutable<T> & ExtraFields>;\n\n/**\n * Options accepted by every `Type.makeObject` / `Type.makeRelation` / type-kind\n * factory. Defaults are derived from `(typename, version)` so callers normally\n * pass nothing.\n */\nexport type EchoTypeOptions = {\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   * Pass an explicit id (typically `EntityId.random()`) to opt out of the\n   * deterministic default.\n   */\n  id?: EntityId;\n};\n\n/**\n * In-memory `Type.Type` entity shape produced by `Type.makeObject(dxn)` /\n * `Type.makeRelation({...})`. A live reactive `TypeSchema` instance —\n * identical to a persisted `Type.Type` except for database attachment.\n *\n * NOT a `Schema.Schema`. The underlying Effect Schema is cached on the hidden\n * `StaticTypeSchemaSlot` slot — retrieve it via `Type.getSchema(...)`.\n */\n// TODO(burdon): Rename EchoEntitySchema.\nexport interface EchoTypeSchema<\n  Self extends Schema.Schema.Any,\n  ExtraFields = {},\n  K extends EntityKind = EntityKind,\n  Fields extends Schema.Struct.Fields = Schema.Struct.Fields,\n> {\n  /**\n   * Entity-kind brand. Type entities are their own kind (`Type`) regardless of\n   * the kind of instance they describe — `[SchemaKindId]` carries the latter.\n   * This lets predicates like `Obj.isObject` / `Relation.isRelation` cleanly\n   * reject type entities without also having to inspect `[SchemaKindId]`.\n   */\n  readonly [KindId]: EntityKind.Type;\n\n  /** Schema-kind brand indicating what kind of instance this type describes. */\n  readonly [SchemaKindId]: K;\n\n  /**\n   * Entity id. Always present — stamped at construction — but NOT the type's\n   * identity while in-memory: an unattached type resolves its URI to the typename\n   * DXN, switching to `echo:/<id>` only once attached to a database (see\n   * `getTypeURIFromSpecifier`, which discriminates by database attachment).\n   */\n  readonly id: EntityId;\n\n  /** Source Effect Schema (kept on a hidden slot for `Type.getSchema`). */\n  readonly [StaticTypeSchemaSlot]: Schema.Schema.AnyNoContext;\n\n  // NOTE: `typename` / `version` are intentionally NOT fields. They live in\n  // `EntityMeta` (`key` / `version`); read via `Type.getTypename(self)` /\n  // `Type.getVersion(self)`.\n  readonly jsonSchema: JsonSchemaType;\n\n  /** Struct fields for introspection. */\n  readonly fields: Fields;\n\n  /** Phantom — instance type produced by `Obj.make(self, ...)`. */\n  readonly _instance?: EchoTypeSchemaProps<Schema.Schema.Type<Self>, ExtraFields>;\n\n  /**\n   * Phantom slot mirroring `Type<A>` so internal helpers (`makeObject`,\n   * `createObject`, `Ref.make`) infer the instance type uniformly whether\n   * the caller passes an `EchoTypeSchema` or a top-level `Type.Type` entity.\n   *\n   * Includes the instance-kind brand (`[KindId]`) so the phantom is assignable\n   * to the matching public-side interface in `Type.ts` (`Type.Obj` /\n   * `Type.Relation` / `Type.Type`). Each kind projects identity: instances of\n   * an object-kind schema are object-kind entities, type-kind schemas produce\n   * type-kind (persisted Type.Type) entities — the latter additionally carry\n   * the `[SchemaKindId]` / `[StaticTypeSchemaSlot]` brands the echo-handler\n   * proxy exposes on persisted Type entities.\n   */\n  readonly [InstancePhantomId]?: EchoTypeSchemaProps<Schema.Schema.Type<Self>, ExtraFields> & {\n    readonly [KindId]: K;\n  } & (K extends EntityKind.Type\n      ? {\n          readonly [SchemaKindId]: EntityKind.Type;\n          readonly [StaticTypeSchemaSlot]: Schema.Schema.AnyNoContext;\n        }\n      : {});\n}\n\n// type MakeProps =\n//   | boolean\n//   | {\n//       readonly disableValidation?: boolean;\n//     };\n\n// NOTE: Utils copied from Effect `Schema.ts`.\n// const _ownKeys = (o: object): Array<PropertyKey> =>\n//   (Object.keys(o) as Array<PropertyKey>).concat(Object.getOwnPropertySymbols(o));\n\n// const _lazilyMergeDefaults = (\n//   fields: Schema.Struct.Fields,\n//   out: Record<PropertyKey, unknown>,\n// ): { [x: string | symbol]: unknown } => {\n//   const ownKeys = _ownKeys(fields);\n//   for (const key of ownKeys) {\n//     const field = fields[key];\n//     if (out[key] === undefined && Schema.isPropertySignature(field)) {\n//       const ast = field.ast;\n//       const defaultValue = ast._tag === 'PropertySignatureDeclaration' ? ast.defaultValue : ast.to.defaultValue;\n//       if (defaultValue !== undefined) {\n//         out[key] = defaultValue();\n//       }\n//     }\n//   }\n//   return out;\n// };\n\n// const _getDisableValidationMakeOption = (options: MakeProps | undefined): boolean =>\n//   Predicate.isBoolean(options) ? options : options?.disableValidation ?? false;\n\n/**\n * Identity (typename + version) of the type meta-schema — the `Type.Type` that\n * every ECHO type entity is itself an instance of. Shared by the materialisation\n * vehicle ({@link persistentEntitySchema}) and `TypeSchema` so the two cannot\n * drift on identity.\n */\nexport const TypeMetaSchemaDXN = DXN.make('org.dxos.type.schema', '0.1.0');\n\n/**\n * Effect Schema that every `Type.Type` entity is an instance of: the meta-schema\n * struct `{ name?, jsonSchema, id }` branded as a type-kind ECHO entity. This is\n * the materialisation vehicle for `makeObject` below — the canonical user-facing\n * entity is `Type/type-schema.ts`'s `TypeSchema`, which carries the same shape\n * plus UI annotations.\n *\n * Kept self-contained (no import of `TypeSchema`) to avoid a bootstrap cycle:\n * `TypeSchema` is itself produced via `makeEchoTypeSchema`, so this builder must\n * not depend on it. `jsonSchema` is declared optional here (only on the\n * materialisation vehicle — the canonical `TypeSchema` keeps it required) so the\n * construction-time `Schema.asserts` does not force the field before it is\n * attached; it is populated immediately after via a lazy accessor (see\n * `makeEchoTypeSchema`).\n */\n// TODO(wittjosiah): Reconcile with `TypeSchema` (`Type/type-schema.ts`).\n//   Both describe the same `org.dxos.type.schema` shape.\nconst persistentEntitySchema: Schema.Schema.AnyNoContext = (() => {\n  const typename = DXN.getName(TypeMetaSchemaDXN);\n  const version = DXN.getVersion(TypeMetaSchemaDXN)!;\n  const struct = Schema.Struct({\n    name: Schema.optional(Schema.String),\n    jsonSchema: JsonSchemaType.pipe(Schema.optional),\n    id: EntityId,\n  });\n  const ast = SchemaAST.annotations(struct.ast, {\n    [TypeAnnotationId]: { kind: EntityKind.Type, typename, version } satisfies TypeAnnotation,\n    [SchemaAST.JSONSchemaAnnotationId]: makeTypeJsonSchemaAnnotation({ kind: EntityKind.Type, typename, version }),\n  });\n  return Schema.make(ast);\n})();\n\n/**\n * @internal\n *\n * Build an in-memory `Type.Type` entity (the value returned by `Type.makeObject`\n * / `Type.makeRelation`). The result is a LIVE reactive `TypeSchema`\n * instance — identical in every respect to a persisted `Type.Type` except that\n * it is not yet attached to a database. It is mutable via `Type.update`, can be\n * passed to `db.add(...)` (which keeps the same proxy and swaps the handler),\n * and round-trips through `jsonSchema`.\n *\n * The source Effect Schema describing the user's type is cached on\n * `[StaticTypeSchemaSlot]` so `Type.getSchema(...)` returns it without a\n * jsonSchema round-trip; the cache is invalidated by the proxy set-trap when\n * `jsonSchema` is mutated (see `typed-handler.ts`).\n */\nexport const makeEchoTypeSchema = <\n  Self extends Schema.Schema.Any,\n  K extends EntityKind = EntityKind,\n  // TODO(wittjosiah): Can this be inferred from the schema?\n  Fields extends Schema.Struct.Fields = Schema.Struct.Fields,\n>(\n  fields: Fields,\n  ast: SchemaAST.AST,\n  typename: string,\n  version: string,\n  kind: K,\n  computeJsonSchema: () => JsonSchemaType,\n  explicitId?: EntityId,\n): EchoTypeSchema<Self, {}, K, Fields> => {\n  // Source Effect Schema describing the user's type — cached for `Type.getSchema`.\n  const sourceSchema = Schema.make<\n    EchoTypeSchemaProps<Schema.Schema.Type<Self>>,\n    EchoTypeSchemaProps<Schema.Schema.Encoded<Self>>,\n    Schema.Schema.Context<Self>\n  >(ast);\n\n  // `typename` / `version` route through `EntityMeta` (`key` / `version`) — the\n  // canonical registry-provenance pair — not data fields. `keys` is empty for\n  // in-memory declarations until persisted.\n  const meta: Partial<EntityMeta> = { keys: [], key: typename, version };\n\n  // Default to a deterministic id derived from `(typename, version)` so that\n  // constructing a `Type.Type` entity never reaches `crypto.getRandomValues()`.\n  // Cloudflare workerd forbids RNG calls in global scope, and the ~hundreds of\n  // `Type.makeObject(...)` call sites across the monorepo execute at module top.\n  // `setIdOnTarget` (see `proxy/make-object.ts`) short-circuits on a pre-supplied\n  // valid id, so this also bypasses the `EntityId.random()` path inside `makeObject`.\n  // Callers can override via `Type.makeObject(dxn, { id })` when they want a fresh\n  // random id (e.g. inside a request handler where workerd does allow RNG).\n  const id = explicitId ?? EntityId.deterministic(typename, version);\n\n  // Materialise as a live reactive meta-schema instance. `jsonSchema` is attached\n  // below as a getter (not passed here as data) for two reasons; see that accessor.\n  const entity = makeObject(persistentEntitySchema, { id } as any, meta);\n\n  const target = getProxyTarget(entity)!;\n  // `jsonSchema` is always available, but computed once on first read rather than at\n  // construction: serializing the AST walks `Schema.suspend(...)` thunks, and for a\n  // self-referential type (`Schema.suspend(() => Self)`) that thunk hits `Self`'s TDZ\n  // while we're still inside its `const` initializer. A getter also lets reads return\n  // the raw object instead of a child reactive proxy.\n  let memoizedJsonSchema: JsonSchemaType | undefined;\n  Object.defineProperty(target, 'jsonSchema', {\n    configurable: true,\n    enumerable: true,\n    get() {\n      return (memoizedJsonSchema ??= computeJsonSchema());\n    },\n    set(value: JsonSchemaType) {\n      memoizedJsonSchema = value;\n    },\n  });\n  // Cache the source Effect Schema (read by `Type.getSchema` via the proxy's\n  // `[StaticTypeSchemaSlot]` get-trap; invalidated on `jsonSchema` mutation).\n  defineHiddenProperty(target, StaticTypeSchemaSlot, sourceSchema);\n  // Schema-kind brand: what kind of instance this type describes. There is no\n  // database handler to derive it for in-memory entities, so stamp it directly.\n  defineHiddenProperty(target, SchemaKindId, kind);\n  // Struct fields for introspection. A getter (not a data property) so reads return\n  // the raw fields object rather than a child reactive proxy.\n  Object.defineProperty(target, 'fields', { configurable: true, enumerable: false, get: () => fields });\n\n  return entity as unknown as EchoTypeSchema<Self, {}, K, Fields>;\n};\n\nexport { isEntity } from './guard';\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { invariant } from '@dxos/invariant';\nimport { DXN } from '@dxos/keys';\n\nimport { type TypeAnnotation, TypeAnnotationId } 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", "//\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", "//\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 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 * const Contact = Schema.Struct({\n *   name: Schema.String,\n *   email: Schema.String,\n * }).pipe(Type.makeObject(DXN.make('com.example.type.person', '0.1.0')))\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 { ATTR_TYPE, type AnyEntity } 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 * 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  ATTR_PARENT,\n  ATTR_TYPE,\n  type AnyEntity,\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?.resolve(sourceDxn)) as AnyEntity | undefined;\n    const target = (await refResolver?.resolve(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?.resolve(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 { 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 { subscribe } from '../common/proxy/reactive';\nimport { isEntity, getDatabase } from '../Entity';\nimport { RefTypeId } from '../Ref/ref';\nimport { loadRefTarget } from '../Ref/utils';\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        // getSnapshot adds SnapshotKindId brand at runtime; cast bridges static types.\n        get.setSelf(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 * Snapshot a value to create a new reference for comparison and React dependency tracking.\n */\nconst snapshotForComparison = <V>(value: V): V => {\n  if (Array.isArray(value)) {\n    return [...value] as V;\n  }\n  if (value !== null && typeof value === 'object') {\n    return { ...value } as V;\n  }\n  return value;\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 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.\n * Only fires updates when the property value actually changes.\n */\nexport const makeProperty = <T extends Obj.Unknown, K extends keyof T>(obj: T, key: K): Atom.Atom<T[K]> => {\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// Copyright 2026 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\nimport { deepMapValues } from '@dxos/util';\n\nimport type * as Obj from '../../Obj';\nimport { makeObject } from '../common/proxy';\nimport { getSchema, getStaticTypeSchema, getType } from '../common/types';\nimport { getMeta } from '../common/types/meta';\nimport { Ref } from '../Ref';\n\n/**\n * Clones an object or relation.\n * This does not clone referenced objects, only the properties in the object.\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  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  const props: any = deepMapValues(data, (value, recurse) => {\n    if (Ref.isRef(value)) {\n      if (opts?.deep) {\n        // TODO(dmaretskyi): Will break on circular references.\n        return Ref.make(clone(value.target!, opts));\n      }\n      return value;\n    }\n    return recurse(value);\n  });\n\n  if (opts?.retainId) {\n    props.id = id;\n  }\n  const meta = deepMapValues(getMeta(obj), (value, recurse) => {\n    if (Ref.isRef(value)) {\n      if (opts?.deep) {\n        // TODO(dmaretskyi): Will break on circular references.\n        return Ref.make(clone(value.target!, opts));\n      }\n      return value;\n    }\n    return recurse(value);\n  });\n\n  return makeObject(schema, props, meta, typeEntity as object | undefined);\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 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"],
  "mappings": "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",
  "names": ["Schema", "SchemaAST", "RawObject", "schema", "make", "omit", "ast", "VersionTypeId", "compare", "a", "b", "localeCompare", "sortByLabel", "getLabel", "sortByTypename", "getTypename", "sort", "comparators", "comparator", "result", "EventId", "Symbol", "for", "ChangeId", "eventBatchDepth", "pendingEventTargets", "Set", "batchEvents", "callback", "target", "EventId", "emit", "clear", "emitEvent", "add", "currentChangeContext", "pendingNotificationKey", "pendingOwnerNotifications", "Set", "enterChangeContext", "key", "isInChangeContext", "queueNotification", "queueOwnerNotification", "target", "add", "hasPendingNotifications", "clearPendingNotifications", "executeChange", "contextKey", "eventTarget", "proxy", "callback", "exitContext", "batchEvents", "EventId", "emit", "ownerTarget", "clear", "defineHiddenProperty", "object", "key", "value", "Object", "defineProperty", "enumerable", "configurable", "MutationOutsideChangeContextError", "Error", "operation", "suggestion", "name", "createPropertySetError", "prop", "String", "createPropertyDeleteError", "createArrayMethodError", "method", "invariant", "EID", "deepMapValues", "encodeUint8ArrayToJson", "descriptor", "Object", "writable", "enumerable", "configurable", "result", "id", "MetaId", "SelfURIId", "RelationSourceDXNId", "invariant", "sourceDXN", "ATTR_RELATION_SOURCE", "RelationTargetDXNId", "targetDXN", "ATTR_RELATION_TARGET", "assign", "serializeData", "value", "noInline", "Uint8Array", "recurse", "rest", "annotations", "EntityId", "invariant", "__dxlog_file", "symbolIsProxy", "value", "Array", "isArray", "ProxyHandlerSlot", "getProxyHandler", "existingProxy", "handler", "_proxyMap", "set", "_handler", "setHandler", "get", "target", "prop", "receiver", "Object", "trap", "apply", "Schema", "SchemaAST", "Event", "inspectCustom", "assertArgument", "invariant", "invariant", "__dxlog_file", "value", "visited", "newAllowedPreviousOwner", "allowedPreviousOwner", "actualValue", "invariant", "ownershipAllowed", "defineHiddenProperty", "recursiveOptions", "depth", "Array", "isValidProxyTarget", "item", "setOwnerRecursive", "nested", "isProxy", "owner", "isArray", "traverseObjectGraph", "target", "getEchoRoot", "queueOwnerNotification", "notifyOwnerChain", "objectData", "Symbol", "for", "checkArrayMutationAllowed", "arr", "method", "target", "isProxy", "getProxyTarget", "echoRoot", "getEchoRoot", "isInitialized", "ChangeId", "EventId", "isInChangeContext", "createArrayMethodError", "ReactiveArray", "Array", "Symbol", "species", "BATCHED_METHODS", "Object", "defineProperty", "prototype", "enumerable", "value", "args", "result", "batchEvents", "apply", "Schema", "SchemaAST", "invariant", "log", "__dxlog_file", "SchemaAST", "isUnion", "schema", "typeAstList", "ast", "filter", "type", "isTypeLiteral", "length", "visitAll", "positionalTypes", "concat", "allTypes", "getPropertySchema", "rootObjectSchema", "property", "propertyPath", "propertyName", "tupleAst", "unwrapArray", "getArrayElementSchema", "propertyType", "getPropertyType", "log", "getTargetPropertySchema", "invariant", "arrayAst", "prop", "Number", "elementIndex", "Schema", "make", "elementType", "annotations", "flattenUnion", "typeAst", "flatMap", "getProperties", "astCandidates", "typeDiscriminators", "getTypeDiscriminators", "typeIndex", "p", "targetPropertyValue", "getPropertySignatures", "getTargetPropertyFn", "typeOrDiscriminatedUnion", "t", "targetProperty", "indexSignatureType", "unwrapAst", "indexSignatures", "discriminatorPropCandidates", "isValidDiscriminator", "everyTypeHasDiscriminator", "isDiscriminatedUnion", "predicate", "next", "idProperty", "__dxlog_file", "value", "visited", "actualValue", "copy", "item", "push", "copyHiddenProperties", "Array", "isArray", "ReactiveArray", "key", "defineHiddenProperty", "target", "SchemaId", "source", "TypeId", "_proxyMap", "_inSet", "init", "assertArgument", "invariant", "EventId", "ObjectDeletedId", "setOwnerRecursive", "Object", "configurable", "_inspect", "objectData", "ChangeId", "TypeEntityId", "StaticTypeSchemaSlot", "existing", "jsonSchema", "undefined", "rebuilt", "Reflect", "get", "prop", "receiver", "createProxy", "isInitialized", "isSymbolProp", "isInChangeContext", "echoRoot", "result", "batchEvents", "notifyOwnerChain", "ownKeys", "deleteProperty", "property", "createPropertyDeleteError", "queueNotification", "defineProperty", "_prepareValueForAssignment", "attributes", "preparedValue", "Error", "isRootEchoObject", "existingOwner", "getOwner", "validatedValue", "_validateValue", "isValidProxyTarget", "isProxy", "schema", "setSchemaProperties", "options", "showHidden", "customInspect", "inspected", "schemaType", "typeSource", "enumerable", "elementSchema", "SchemaAST", "SchemaValidator", "validateSchema", "makeArraysReactive", "symbolIsProxy", "makeObject", "schema", "obj", "meta", "typeSource", "createReactiveObject", "Object", "assign", "isValidProxyTarget", "Error", "parent", "ParentId", "undefined", "annotation", "getTypeAnnotation", "setIdOnTarget", "defineHiddenProperty", "KindId", "kind", "initMeta", "prepareTypedTarget", "attachTypedJsonSerializer", "proxy", "createProxy", "TypedReactiveHandler", "instance", "metaProxy", "MetaId", "metaTarget", "getProxyTarget", "setMetaOwner", "target", "id", "EntityId", "isValid", "random", "fullMeta", "keys", "tags", "annotations", "EntityMetaSchema", "subscribe", "obj", "callback", "isProxy", "target", "getProxyTarget", "EventId", "on", "change", "changeFn", "ChangeId", "Schema", "SchemaAST", "DXN", "EntityId", "TypeMetaSchemaDXN", "DXN", "make", "persistentEntitySchema", "typename", "getName", "version", "getVersion", "struct", "Struct", "name", "optional", "String", "jsonSchema", "JsonSchemaType", "pipe", "id", "EntityId", "ast", "annotations", "TypeAnnotationId", "kind", "EntityKind", "Type", "JSONSchemaAnnotationId", "makeTypeJsonSchemaAnnotation", "makeEchoTypeSchema", "fields", "computeJsonSchema", "explicitId", "sourceSchema", "meta", "keys", "key", "deterministic", "entity", "makeObject", "target", "getProxyTarget", "memoizedJsonSchema", "Object", "defineProperty", "configurable", "enumerable", "get", "set", "value", "defineHiddenProperty", "StaticTypeSchemaSlot", "SchemaKindId", "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", "__dxlog_file", "version", "dxn", "invariant", "self", "SchemaAST", "fields", "id", "String", "annotations", "kind", "EntityKind", "typename", "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", "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", "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", "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", "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", "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", "loadRefTarget", "snapshotForComparison", "value", "Array", "isArray", "propertyFamily", "key", "previousSnapshot", "unsubscribe2", "newValue", "newSnapshot", "objectWithReactiveFamily", "refWithReactiveFamily", "effect", "makeAtom", "undefined", "option", "getOrElse", "map", "result", "entityFamily", "entity", "relationFamily", "relation", "objOrRef", "assertArgument", "isEntity", "makeProperty", "makeWithReactive", "makeEntity", "makeRelation", "invariant", "deepMapValues", "__dxlog_file", "invariant", "schema", "props", "deepMapValues", "data", "value", "recurse", "Ref", "opts", "make", "retainId", "meta", "makeObject", "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", "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"]
}
