seitu
Version:
72 lines • 2.21 kB
text/typescript
import { i as Subscribable, n as Readable } from "../../index-B0IeflOl.mjs";
import { MaybeRefOrGetter, ShallowRef } from "vue";
//#region src/vue/composables/index.d.ts
interface UseSubscriptionOptions<S extends Subscribable<any> & Readable<any>, R = S['~']['output']> {
selector?: (value: S['~']['output']) => R;
isEqual?: (prev: R, next: R) => boolean;
}
/**
* Subscribe to a reactive value. Pass a handle or a ref/getter that returns one.
*
* @example Inline subscription
* ```vue
* <script setup lang="ts">
* import { createWebStorageValue } from 'seitu/web'
* import { useSubscription } from 'seitu/vue'
* import * as z from 'zod'
*
* const value = useSubscription(
* createWebStorageValue({ type: 'sessionStorage', key: 'test', defaultValue: 0, schema: z.number() }),
* )
* </script>
*
* <template>
* <div>{{ value }}</div>
* </template>
* ```
*
* @example Instance outside of the subscription
* ```vue
* <script setup lang="ts">
* import { createWebStorage } from 'seitu/web'
* import { useSubscription } from 'seitu/vue'
* import * as z from 'zod'
*
* const sessionStorage = createWebStorage({
* type: 'sessionStorage',
* schemas: { count: z.number(), name: z.string() },
* defaultValues: { count: 0, name: '' },
* })
*
* const value = useSubscription(sessionStorage)
* </script>
*
* <template>
* <div>{{ value.count }}</div>
* </template>
* ```
*
* @example With selector
* ```vue
* <script setup lang="ts">
* import { createWebStorage } from 'seitu/web'
* import { useSubscription } from 'seitu/vue'
* import * as z from 'zod'
*
* const sessionStorage = createWebStorage({
* type: 'sessionStorage',
* schemas: { count: z.number(), name: z.string() },
* defaultValues: { count: 0, name: '' },
* })
*
* const count = useSubscription(sessionStorage, { selector: v => v.count })
* </script>
*
* <template>
* <div>{{ count }}</div>
* </template>
* ```
*/
declare function useSubscription<S extends Subscribable<any> & Readable<any>, R = S['~']['output']>(source: MaybeRefOrGetter<S>, options?: UseSubscriptionOptions<S, R>): Readonly<ShallowRef<R>>;
//#endregion
export { UseSubscriptionOptions, useSubscription };