{"version":3,"file":"atoms.mjs","names":[],"sources":["../../src/atoms.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Equal from 'effect/Equal';\nimport * as Atom from 'effect/reactivity/Atom';\n\nimport { type MulticastObservable } from '@dxos/async';\n\nconst observableFamily = Atom.family((observable: MulticastObservable<any>) => {\n  return Atom.make((get) => {\n    const subscription = observable.subscribe((value) => get.setSelf(value));\n\n    get.addFinalizer(() => subscription.unsubscribe());\n\n    return observable.get();\n  });\n});\n\n/**\n * Creates an Atom.Atom<T> from a MulticastObservable<T>\n * Will return the same atom instance for the same observable.\n */\nexport const fromObservable = <T>(observable: MulticastObservable<T>): Atom.Atom<T> => {\n  // Keyed by reference because the family's default structural key collects every accessor on the\n  // observable's prototype chain and reads each one, throwing on those whose subsystem is absent\n  // (e.g. `Client.shell` on a runtime with no iframe).\n  return observableFamily(Equal.byReferenceUnsafe(observable)) as Atom.Atom<T>;\n};\n"],"mappings":";;;;;AASA,IAAM,mBAAmB,KAAK,QAAQ,eAAyC;CAC7E,OAAO,KAAK,MAAM,QAAQ;EACxB,MAAM,eAAe,WAAW,WAAW,UAAU,IAAI,QAAQ,KAAK,CAAC;EAEvE,IAAI,mBAAmB,aAAa,YAAY,CAAC;EAEjD,OAAO,WAAW,IAAI;CACxB,CAAC;AACH,CAAC;;;;;AAMD,IAAa,kBAAqB,eAAqD;CAIrF,OAAO,iBAAiB,MAAM,kBAAkB,UAAU,CAAC;AAC7D"}