import { ProtectableMap , IProtectableMapParameters } from './ProtectableMap' ; /**
 * 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.
 */ export class ProtectableMapView < K , V > extends Map < K , V > { private readonly _owner : ProtectableMap < K , V > ; private readonly _parameters : IProtectableMapParameters < K , V > ; public constructor ( owner , parameters ) { super ( ) ; this . _owner = owner ; this . _parameters = parameters ; } public clear ( ) { if ( this . _parameters . onClear ) { this . _parameters . onClear ( this . _owner ) ; } super . clear ( ) ; } public delete ( key ) { if ( this . _parameters . onDelete ) { this . _parameters . onDelete ( this . _owner , key ) ; } return super . delete ( key ) ; } public set ( key , value ) { let modifiedValue = value ; if ( this . _parameters . onSet ) { modifiedValue = this . _parameters . onSet ( this . _owner , key , modifiedValue ) ; } super . set ( key , modifiedValue ) ; return this ; } public _clearUnprotected ( ) { super . clear ( ) ; } public _deleteUnprotected ( key ) { return super . delete ( key ) ; } public _setUnprotected ( key , value ) { super . set ( key , value ) ; } }