ChainMap.js 816 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. export default class ChainMap {
  2. constructor() {
  3. this.weakMap = new WeakMap();
  4. }
  5. get( keys ) {
  6. let map = this.weakMap;
  7. for ( let i = 0; i < keys.length; i ++ ) {
  8. map = map.get( keys[ i ] );
  9. if ( map === undefined ) return undefined;
  10. }
  11. return map.get( keys[ keys.length - 1 ] );
  12. }
  13. set( keys, value ) {
  14. let map = this.weakMap;
  15. for ( let i = 0; i < keys.length; i ++ ) {
  16. const key = keys[ i ];
  17. if ( map.has( key ) === false ) map.set( key, new WeakMap() );
  18. map = map.get( key );
  19. }
  20. return map.set( keys[ keys.length - 1 ], value );
  21. }
  22. delete( keys ) {
  23. let map = this.weakMap;
  24. for ( let i = 0; i < keys.length; i ++ ) {
  25. map = map.get( keys[ i ] );
  26. if ( map === undefined ) return false;
  27. }
  28. return map.delete( keys[ keys.length - 1 ] );
  29. }
  30. }