{"version":3,"file":"index.cjs","sources":["../src/useSignal.ts"],"sourcesContent":["import { type Ref, ref, shallowReadonly, onBeforeUnmount } from 'vue';\n\n/**\n * Returns the underlying signal value updating it each time the signal value changes.\n * @param signal - a signal.\n */\nexport function useSignal<T>(signal: {\n  (): T;\n  sub(fn: (v: T) => void): VoidFunction\n}): Readonly<Ref<T>> {\n  /**\n   * We do type cast, otherwise inferred type is Ref<UnwrappedRef<T> | T>.\n   * Another approach is to narrow down: <T extends (string | number | boolean | object | null)>\n   * Like it's done in vueuse: https://github.com/vueuse/vueuse/blob/main/packages/core/useStorage/index.ts#L135\n   */\n  const _value: Ref<T> = ref(signal()) as Ref<T>;\n  const unsub = signal.sub((value) => {\n    _value.value = value;\n  });\n  onBeforeUnmount(unsub);\n\n  return shallowReadonly(_value);\n}\n"],"names":["useSignal","signal","_value","ref","unsub","value","onBeforeUnmount","shallowReadonly"],"mappings":"uIAMO,SAASA,EAAaC,EAGR,CAMb,MAAAC,EAAiBC,MAAIF,GAAQ,EAC7BG,EAAQH,EAAO,IAAKI,GAAU,CAClCH,EAAO,MAAQG,CAAA,CAChB,EACDC,OAAAA,EAAAA,gBAAgBF,CAAK,EAEdG,EAAAA,gBAAgBL,CAAM,CAC/B"}