Files
apps.apple.com/node_modules/@jet/environment/util/rewindable-value.js
2025-11-04 05:03:50 +08:00

58 lines
1.6 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.RewindableValue = void 0;
const clone_1 = require("./clone");
/* eslint-disable no-underscore-dangle */
/**
* A lightweight wrapper around a primitive value which allows its state
* to saved and later restored.
*/
class RewindableValue {
/**
* Create a rewindable value.
*
* @param initialValue - The initial value for the new instance.
*/
constructor(initialValue) {
this._values = [initialValue];
}
/**
* Returns the current value of this instance.
*/
get() {
return this._values[this._values.length - 1];
}
/**
* Replace the current value of this instance.
*
* @param newValue - The value to assign this instance.
*/
set(newValue) {
this._values[this._values.length - 1] = newValue;
}
/**
* Save the current state of this value.
*
* Calls to this method should be balanced by calls to `restore`.
*/
save() {
this._values.push(this._values[this._values.length - 1]);
}
/**
* Restore a previously saved value.
*/
restore() {
if (this._values.length === 1) {
throw new RangeError("Calls to restore must balance previous calls to save");
}
this._values.pop();
}
// section Cloneable
clone() {
const copy = (0, clone_1.shallowCloneOf)(this);
copy._values = this._values.slice();
return copy;
}
}
exports.RewindableValue = RewindableValue;
//# sourceMappingURL=rewindable-value.js.map