26 lines
691 B
JavaScript
26 lines
691 B
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.once = once;
|
|
/**
|
|
* Wraps a function so it is only executed once. Subsequent calls return the cached result.
|
|
*
|
|
* @param fn - The function to execute at most once
|
|
* @returns A wrapper that lazily evaluates `fn` on first call and caches the result
|
|
*
|
|
* @example
|
|
* ```ts
|
|
* const getConfig = once(() => loadExpensiveConfig())
|
|
* getConfig() // loads config
|
|
* getConfig() // returns cached result
|
|
* ```
|
|
*/
|
|
function once(fn) {
|
|
let result = [];
|
|
return () => {
|
|
if (!result.length) {
|
|
result = [fn()];
|
|
}
|
|
return result[0];
|
|
};
|
|
}
|
|
//# sourceMappingURL=once.js.map
|