utils/node_modules/@rushstack/node-core-library/lib/ProtectableMapView.js
2024-02-07 01:33:07 -05:00

56 lines
1.6 KiB
JavaScript

"use strict";
// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
// See LICENSE in the project root for license information.
Object.defineProperty(exports, "__esModule", { value: true });
exports.ProtectableMapView = void 0;
/**
* The internal wrapper used by ProtectableMap. It extends the real `Map<K, V>` base class,
* but hooks the destructive operations (clear/delete/set) to give the owner a chance
* to block them.
*
* NOTE: This is not a public API.
*/
class ProtectableMapView extends Map {
constructor(owner, parameters) {
super();
this._owner = owner;
this._parameters = parameters;
}
clear() {
// override
if (this._parameters.onClear) {
this._parameters.onClear(this._owner);
}
super.clear();
}
delete(key) {
// override
if (this._parameters.onDelete) {
this._parameters.onDelete(this._owner, key);
}
return super.delete(key);
}
set(key, value) {
// override
let modifiedValue = value;
if (this._parameters.onSet) {
modifiedValue = this._parameters.onSet(this._owner, key, modifiedValue);
}
super.set(key, modifiedValue);
return this;
}
// INTERNAL USAGE ONLY
_clearUnprotected() {
super.clear();
}
// INTERNAL USAGE ONLY
_deleteUnprotected(key) {
return super.delete(key);
}
// INTERNAL USAGE ONLY
_setUnprotected(key, value) {
super.set(key, value);
}
}
exports.ProtectableMapView = ProtectableMapView;
//# sourceMappingURL=ProtectableMapView.js.map