📄 useMemoize¶
📊 Analysis Summary¶
| Metric | Count |
|---|---|
| 🔧 Functions | 8 |
| 📦 Imports | 1 |
| 📐 Interfaces | 3 |
| 📑 Type Aliases | 1 |
📚 Table of Contents¶
🛠️ File Location:¶
📂 packages/core/useMemoize/index.ts
📦 Imports¶
| Name | Source |
|---|---|
shallowReactive |
vue |
Functions¶
useMemoize(resolver: (...args: Args) => Result, options: UseMemoizeOptions<Result, Args>): UseMemoizeReturn<Result, Args>¶
Reactive function result cache based on arguments
Tags: @__NO_SIDE_EFFECTS__
Calls:
shallowReactive (from vue)initCacheoptions.getKeyJSON.stringifycache.setresolvercache.get_loadDatagenerateKeycache.deletecache.clearcache.has
Internal Comments:
/**
* Generate key from args
*/ (x2)
// Default key: Serialize args
/**
* Load data and save in cache
*/ (x2)
/**
* Delete key from cache
*/ (x2)
/**
* Clear cached data
*/ (x2)
// Get data from cache (x2)
Code
export function useMemoize<Result, Args extends unknown[]>(
resolver: (...args: Args) => Result,
options?: UseMemoizeOptions<Result, Args>,
): UseMemoizeReturn<Result, Args> {
const initCache = (): UseMemoizeCache<CacheKey, Result> => {
if (options?.cache)
return shallowReactive(options.cache)
return shallowReactive(new Map<CacheKey, Result>())
}
const cache = initCache()
/**
* Generate key from args
*/
const generateKey = (...args: Args) => options?.getKey
? options.getKey(...args)
// Default key: Serialize args
: JSON.stringify(args)
/**
* Load data and save in cache
*/
const _loadData = (key: string | number, ...args: Args): Result => {
cache.set(key, resolver(...args))
return cache.get(key) as Result
}
const loadData = (...args: Args): Result => _loadData(generateKey(...args), ...args)
/**
* Delete key from cache
*/
const deleteData = (...args: Args): void => {
cache.delete(generateKey(...args))
}
/**
* Clear cached data
*/
const clearData = () => {
cache.clear()
}
const memoized: Partial<UseMemoizeReturn<Result, Args>> = (...args: Args): Result => {
// Get data from cache
const key = generateKey(...args)
if (cache.has(key))
return cache.get(key) as Result
return _loadData(key, ...args)
}
memoized.load = loadData
memoized.delete = deleteData
memoized.clear = clearData
memoized.generateKey = generateKey
memoized.cache = cache
return memoized as UseMemoizeReturn<Result, Args>
}
Internal helpers¶
Declared inside another function in this file.
initCache(): UseMemoizeCache<CacheKey, Result>¶
Returns: UseMemoizeCache<CacheKey, Result>
Calls:
shallowReactive (from vue)
Code
generateKey(args: Args): string | number¶
Parameters:
argsArgs
Returns: string | number
Code
_loadData(key: string | number, args: Args): Result¶
Parameters:
keystring | numberargsArgs
Returns: Result
Calls:
cache.setresolvercache.get
Code
loadData(args: Args): Result¶
Parameters:
argsArgs
Returns: Result
Calls:
_loadData
deleteData(args: Args): void¶
Parameters:
argsArgs
Returns: void
Calls:
cache.deletegenerateKey
clearData(): void¶
Returns: void
Calls:
cache.clear
memoized(args: Args): Result¶
Parameters:
argsArgs
Returns: Result
Calls:
generateKeycache.hascache.get_loadData
Internal Comments:
Code
Interfaces¶
UseMemoizeCache<Key, Value>¶
Interface Code
export interface UseMemoizeCache<Key, Value> {
/**
* Get value for key
*/
get: (key: Key) => Value | undefined
/**
* Set value for key
*/
set: (key: Key, value: Value) => void
/**
* Return flag if key exists
*/
has: (key: Key) => boolean
/**
* Delete value for key
*/
delete: (key: Key) => void
/**
* Clear cache
*/
clear: () => void
}
Properties¶
| Name | Type | Optional | Description |
|---|---|---|---|
get |
(key: Key) => Value \| undefined |
✗ | not shown |
set |
(key: Key, value: Value) => void |
✗ | not shown |
has |
(key: Key) => boolean |
✗ | not shown |
delete |
(key: Key) => void |
✗ | not shown |
clear |
() => void |
✗ | not shown |
UseMemoizeReturn<Result, Args extends unknown[]>¶
Interface Code
export interface UseMemoizeReturn<Result, Args extends unknown[]> {
/**
* Get result from cache or call memoized function
*/
(...args: Args): Result
/**
* Call memoized function and update cache
*/
load: (...args: Args) => Result
/**
* Delete cache of given arguments
*/
delete: (...args: Args) => void
/**
* Clear cache
*/
clear: () => void
/**
* Generate cache key for given arguments
*/
generateKey: (...args: Args) => CacheKey
/**
* Cache container
*/
cache: UseMemoizeCache<CacheKey, Result>
}
Properties¶
| Name | Type | Optional | Description |
|---|---|---|---|
load |
(...args: Args) => Result |
✗ | not shown |
delete |
(...args: Args) => void |
✗ | not shown |
clear |
() => void |
✗ | not shown |
generateKey |
(...args: Args) => CacheKey |
✗ | not shown |
cache |
UseMemoizeCache<CacheKey, Result> |
✗ | not shown |
UseMemoizeOptions<Result, Args extends unknown[]>¶
Interface Code
Properties¶
| Name | Type | Optional | Description |
|---|---|---|---|
getKey |
(...args: Args) => string \| number |
✓ | not shown |
cache |
UseMemoizeCache<CacheKey, Result> |
✓ | not shown |
Type Aliases¶
CacheKey¶
Generated by Syntax Scribe