mirror of
https://gitee.com/myxzgzs/boyue_jnpf.git
synced 2025-08-08 15:22:43 +08:00
42 lines
1.5 KiB
JavaScript
42 lines
1.5 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.MemoLazy = void 0;
|
|
class MemoLazy {
|
|
constructor(selector, creator) {
|
|
this.selector = selector;
|
|
this.creator = creator;
|
|
this.selected = undefined;
|
|
this._value = undefined;
|
|
}
|
|
get hasValue() {
|
|
return this._value !== undefined;
|
|
}
|
|
get value() {
|
|
const selected = this.selector();
|
|
if (this._value !== undefined && equals(this.selected, selected)) {
|
|
// value exists and selected hasn't changed, so return the cached value
|
|
return this._value;
|
|
}
|
|
this.selected = selected;
|
|
const result = this.creator(selected);
|
|
this.value = result;
|
|
return result;
|
|
}
|
|
set value(value) {
|
|
this._value = value;
|
|
}
|
|
}
|
|
exports.MemoLazy = MemoLazy;
|
|
function equals(firstValue, secondValue) {
|
|
const isFirstObject = typeof firstValue === "object" && firstValue !== null;
|
|
const isSecondObject = typeof secondValue === "object" && secondValue !== null;
|
|
// do a shallow comparison of objects, arrays etc.
|
|
if (isFirstObject && isSecondObject) {
|
|
const keys1 = Object.keys(firstValue);
|
|
const keys2 = Object.keys(secondValue);
|
|
return keys1.length === keys2.length && keys1.every((key) => equals(firstValue[key], secondValue[key]));
|
|
}
|
|
// otherwise just compare the values directly
|
|
return firstValue === secondValue;
|
|
}
|
|
//# sourceMappingURL=MemoLazy.js.map
|