From 881fded65e920a3e9afb4ea23c6be12edfd12e28 Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Mon, 4 Jul 2022 17:44:51 +0800 Subject: [PATCH 1/4] feat(resolveRef): new function --- packages/contributors.json | 6 ++++- packages/shared/index.ts | 2 ++ packages/shared/resolveRef/index.md | 20 ++++++++++++++++ packages/shared/resolveRef/index.ts | 34 +++++++++++++++++++++++++++ packages/shared/resolveUnref/index.md | 20 ++++++++++++++++ packages/shared/resolveUnref/index.ts | 11 +++++++++ packages/shared/utils/types.ts | 9 ------- 7 files changed, 92 insertions(+), 10 deletions(-) create mode 100644 packages/shared/resolveRef/index.md create mode 100644 packages/shared/resolveRef/index.ts create mode 100644 packages/shared/resolveUnref/index.md create mode 100644 packages/shared/resolveUnref/index.ts diff --git a/packages/contributors.json b/packages/contributors.json index 238831518ee..89847bc52ea 100644 --- a/packages/contributors.json +++ b/packages/contributors.json @@ -166,6 +166,7 @@ "phaust", "marktnoonan", "dm4t2", + "melishev", "mauriciabad", "mxmvshnvsk", "AldeonMoriak", @@ -185,6 +186,7 @@ "a1xon", "octref", "praburangki", + "preeteshjain", "QiroNT", "ramonakira", "Redemption198", @@ -221,12 +223,14 @@ "iGalaxyz", "winter-ice", "monkeywithacupcake", - "katsuyaU", + "kagurazaka-0", "koheing", + "kongmoumou", "laozei6401", "leovoon", "likeswinds", "lxhyl", + "lxnelyclxud", "lzdFeiFei", "meteorlxy", "odex21", diff --git a/packages/shared/index.ts b/packages/shared/index.ts index 0d09adc7198..913b24f2e69 100644 --- a/packages/shared/index.ts +++ b/packages/shared/index.ts @@ -21,6 +21,8 @@ export * from './refDebounced' export * from './refDefault' export * from './refThrottled' export * from './refWithControl' +export * from './resolveRef' +export * from './resolveUnref' export * from './set' export * from './syncRef' export * from './syncRefs' diff --git a/packages/shared/resolveRef/index.md b/packages/shared/resolveRef/index.md new file mode 100644 index 00000000000..da8c66bf71c --- /dev/null +++ b/packages/shared/resolveRef/index.md @@ -0,0 +1,20 @@ +--- +category: Utilities +related: resolveRef +--- + +# resolveRef + +Normalize value/ref/getter to `ref` or `computed`. + +## Usage + +```ts +import { resolveRef } from '@vueuse/core' + +const foo = ref('hi') + +const a = resolveRef(0) // Ref +const b = resolveRef(foo) // Ref +const c = resolveRef(() => 'hi') // ComputedRef +``` diff --git a/packages/shared/resolveRef/index.ts b/packages/shared/resolveRef/index.ts new file mode 100644 index 00000000000..98c8c703794 --- /dev/null +++ b/packages/shared/resolveRef/index.ts @@ -0,0 +1,34 @@ +import type { ComputedRef, Ref } from 'vue-demi' +import { computed, ref } from 'vue-demi' + +/** + * Maybe it's a ref, or a plain value + * + * ```ts + * type MaybeRef = T | Ref + * ``` + */ +export type MaybeRef = T | Ref + +/** + * Maybe it's a ref, or a getter function + * + * ```ts + * type MaybeRef = T | Ref + * ``` + */ +export type MaybeComputedRef = T extends Function + ? never + : (() => T) | MaybeRef + +/** + * Normalize value/ref/getter to `ref` or `computed`. + */ +export function resolveRef(r: MaybeComputedRef): ComputedRef +export function resolveRef(r: MaybeRef): Ref +export function resolveRef(r: MaybeComputedRef) { + return typeof r === 'function' + ? computed(r as any) + : ref(r) +} + diff --git a/packages/shared/resolveUnref/index.md b/packages/shared/resolveUnref/index.md new file mode 100644 index 00000000000..460df92e56f --- /dev/null +++ b/packages/shared/resolveUnref/index.md @@ -0,0 +1,20 @@ +--- +category: Utilities +related: resolveUnref +--- + +# resolveUnref + +Get the value of value/ref/getter. + +## Usage + +```ts +import { resolveUnref } from '@vueuse/core' + +const foo = ref('hi') + +const a = resolveUnref(0) // 0 +const b = resolveUnref(foo) // 'hi' +const c = resolveUnref(() => 'hi') // 'hi' +``` diff --git a/packages/shared/resolveUnref/index.ts b/packages/shared/resolveUnref/index.ts new file mode 100644 index 00000000000..2eb00e5818f --- /dev/null +++ b/packages/shared/resolveUnref/index.ts @@ -0,0 +1,11 @@ +import { unref } from 'vue-demi' +import type { MaybeComputedRef } from '../resolveRef' + +/** + * Normalize value/ref/getter to `ref` or `computed`. + */ +export function resolveUnref(r: MaybeComputedRef): T { + return typeof r === 'function' + ? (r as any)() + : unref(r) +} diff --git a/packages/shared/utils/types.ts b/packages/shared/utils/types.ts index 06a6707ab67..f30225ede80 100644 --- a/packages/shared/utils/types.ts +++ b/packages/shared/utils/types.ts @@ -5,15 +5,6 @@ import type { Ref, WatchOptions, WatchSource } from 'vue-demi' */ export type Fn = () => void -/** - * Maybe it's a ref, or not. - * - * ```ts - * type MaybeRef = T | Ref - * ``` - */ -export type MaybeRef = T | Ref - /** * A ref that allow to set null or undefined */ From 4e82795bbe4d58930ed39f5d172979598fcc24b1 Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Mon, 4 Jul 2022 19:00:21 +0800 Subject: [PATCH 2/4] chore: fix types --- packages/shared/resolveRef/index.ts | 21 +-------------------- packages/shared/resolveUnref/index.ts | 2 +- packages/shared/utils/types.ts | 20 ++++++++++++++++++++ 3 files changed, 22 insertions(+), 21 deletions(-) diff --git a/packages/shared/resolveRef/index.ts b/packages/shared/resolveRef/index.ts index 98c8c703794..6490150a433 100644 --- a/packages/shared/resolveRef/index.ts +++ b/packages/shared/resolveRef/index.ts @@ -1,25 +1,6 @@ import type { ComputedRef, Ref } from 'vue-demi' import { computed, ref } from 'vue-demi' - -/** - * Maybe it's a ref, or a plain value - * - * ```ts - * type MaybeRef = T | Ref - * ``` - */ -export type MaybeRef = T | Ref - -/** - * Maybe it's a ref, or a getter function - * - * ```ts - * type MaybeRef = T | Ref - * ``` - */ -export type MaybeComputedRef = T extends Function - ? never - : (() => T) | MaybeRef +import type { MaybeComputedRef, MaybeRef } from '../utils' /** * Normalize value/ref/getter to `ref` or `computed`. diff --git a/packages/shared/resolveUnref/index.ts b/packages/shared/resolveUnref/index.ts index 2eb00e5818f..2009965d554 100644 --- a/packages/shared/resolveUnref/index.ts +++ b/packages/shared/resolveUnref/index.ts @@ -1,5 +1,5 @@ import { unref } from 'vue-demi' -import type { MaybeComputedRef } from '../resolveRef' +import type { MaybeComputedRef } from '../utils' /** * Normalize value/ref/getter to `ref` or `computed`. diff --git a/packages/shared/utils/types.ts b/packages/shared/utils/types.ts index f30225ede80..fd91e815329 100644 --- a/packages/shared/utils/types.ts +++ b/packages/shared/utils/types.ts @@ -18,6 +18,26 @@ export type RemovableRef = Omit, 'value'> & { */ export type RemoveableRef = RemovableRef +/** + * Maybe it's a ref, or a plain value + * + * ```ts + * type MaybeRef = T | Ref + * ``` + */ +export type MaybeRef = T | Ref + +/** + * Maybe it's a ref, or a getter function + * + * ```ts + * type MaybeRef = T | Ref + * ``` + */ +export type MaybeComputedRef = T extends Function + ? never + : (() => T) | MaybeRef + /** * Make all the nested attributes of an object or array to MaybeRef * From bc2e026770aea251abaae4f1e03573c6256d6727 Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Wed, 6 Jul 2022 10:46:58 +0800 Subject: [PATCH 3/4] Update packages/shared/resolveRef/index.md --- packages/shared/resolveRef/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/shared/resolveRef/index.md b/packages/shared/resolveRef/index.md index da8c66bf71c..070581eaced 100644 --- a/packages/shared/resolveRef/index.md +++ b/packages/shared/resolveRef/index.md @@ -1,6 +1,6 @@ --- category: Utilities -related: resolveRef +related: resolveUnref --- # resolveRef From 59d74466f9dbde860beccde9b7ce2adbb0c9368d Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Wed, 6 Jul 2022 10:47:20 +0800 Subject: [PATCH 4/4] Update packages/shared/resolveUnref/index.md --- packages/shared/resolveUnref/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/shared/resolveUnref/index.md b/packages/shared/resolveUnref/index.md index 460df92e56f..2c83564d9d9 100644 --- a/packages/shared/resolveUnref/index.md +++ b/packages/shared/resolveUnref/index.md @@ -1,6 +1,6 @@ --- category: Utilities -related: resolveUnref +related: resolveRef --- # resolveUnref