All files / src/implementation requestmap.ts

89.47% Statements 17/19
0% Branches 0/2
83.33% Functions 5/6
88.89% Lines 16/18
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61                              4x     4x         4x 38x       38x               4x 23x 23x 23x 23x     10x   23x           4x 3x         3x   4x  
/**
 * Copyright 2017 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import * as object from './object';
import * as RequestExports from './request';
import { Request } from './request';
import * as constants from './constants';
 
/**
 * @struct
 */
export class RequestMap {
  private map_: { [key: number]: Request<any> } = {};
  private id_: number;
 
  constructor() {
    this.id_ = constants.minSafeInteger;
  }
 
  /**
   * Registers the given request with this map.
   * The request is unregistered when it completes.
   * @param r The request to register.
   */
  addRequest(r: Request<any>) {
    let id = this.id_;
    this.id_++;
    this.map_[id] = r;
    let self = this;
 
    function unmap() {
      delete self.map_[id];
    }
    r.getPromise().then(unmap, unmap);
  }
 
  /**
   * Cancels all registered requests.
   */
  clear() {
    object.forEach(this.map_, (key: string, val: Request<any>) => {
      if (val) {
        val.cancel(true);
      }
    });
    this.map_ = {};
  }
}