( fn: (...args: Args) => T, )
| 196 | * the result. |
| 197 | */ |
| 198 | export function once<T, Args extends unknown[]>( |
| 199 | fn: (...args: Args) => T, |
| 200 | ): ((...args: Args) => T) & { value?: T; forget(): void } { |
| 201 | let value: T | typeof unset = unset; |
| 202 | const onced = (...args: Args) => { |
| 203 | if (value === unset) { |
| 204 | onced.value = value = fn(...args); |
| 205 | } |
| 206 | |
| 207 | return value; |
| 208 | }; |
| 209 | |
| 210 | onced.forget = () => { |
| 211 | value = unset; |
| 212 | onced.value = undefined; |
| 213 | }; |
| 214 | |
| 215 | onced.value = undefined as T | undefined; |
| 216 | |
| 217 | return onced; |
| 218 | } |
| 219 | |
| 220 | /** |
| 221 | * Memoizes the single-parameter function. |
no outgoing calls
no test coverage detected