{"version":3,"file":"setup_subscription.mjs","sources":["../../../../src/setup_subscription.ts"],"sourcesContent":["import { type Effect, type Event, createEffect, createStore, sample } from \"effector\"\n\ntype Subscription = () => void\n\ninterface SetupSubscriptionOptions<Params> {\n  subscribe: Effect<Params, Subscription, unknown>\n\n  setup: Event<Params>\n  teardown?: Event<unknown>\n\n  name?: string\n}\n\nexport function setupSubscription<Params>({\n  subscribe,\n\n  setup,\n  teardown,\n\n  name = \"unknown\",\n}: SetupSubscriptionOptions<Params>) {\n  const $subscription = createStore<Subscription | null>(null, {\n    name: `${name}.subscription`,\n    sid: `apollo.${name}.$subscription`,\n    serialize: \"ignore\",\n    skipVoid: false,\n  })\n\n  const unsubFx = createEffect({\n    name: `${name}.subscriber`,\n    handler: (unsub: Subscription) => unsub(),\n  })\n\n  sample({ clock: setup, target: subscribe })\n  sample({ clock: subscribe.doneData, target: $subscription })\n\n  sample({\n    clock: [setup, teardown].filter(Boolean),\n    source: $subscription,\n    filter: Boolean,\n    target: unsubFx,\n  })\n}\n"],"names":[],"mappings":";AAaO,SAAS,kBAA0B;AAAA,EACxC;AAAA,EAEA;AAAA,EACA;AAAA,EAEA,OAAO;AACT,GAAqC;AAC7B,QAAA,gBAAgB,YAAiC,MAAM;AAAA,IAC3D,MAAM,GAAG,IAAI;AAAA,IACb,KAAK,UAAU,IAAI;AAAA,IACnB,WAAW;AAAA,IACX,UAAU;AAAA,EAAA,CACX;AAED,QAAM,UAAU,aAAa;AAAA,IAC3B,MAAM,GAAG,IAAI;AAAA,IACb,SAAS,CAAC,UAAwB,MAAM;AAAA,EAAA,CACzC;AAED,SAAO,EAAE,OAAO,OAAO,QAAQ,WAAW;AAC1C,SAAO,EAAE,OAAO,UAAU,UAAU,QAAQ,eAAe;AAEpD,SAAA;AAAA,IACL,OAAO,CAAC,OAAO,QAAQ,EAAE,OAAO,OAAO;AAAA,IACvC,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EAAA,CACT;AACH;"}