Code coverage report for src/route-filters.js

Statements: 86.96% (40 / 46)      Branches: 66.67% (12 / 18)      Functions: 76.92% (10 / 13)      Lines: 86.05% (37 / 43)      Ignored: none     

All files » src/ » route-filters.js
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 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85    1     1 5 5 5 5       3 5         5 5 5 2     5 5     5 5       1       1 1 1       1 2     2       1 1       1 98 1 4 4 4     98       98     1     1 4 4              
import {Container} from 'aurelia-dependency-injection';
 
export class RouteFilterContainer {
  static inject() { return [Container]; }
 
  constructor(container: Container) {
    this.container = container;
    this.lookup = { };
    this.filters = { };
    this.filterCache = { };
  }
 
  register(key: string, aliases: string[]) {
    aliases.forEach((alias) => {
      this.lookup[alias] = key;
    });
  }
 
  addStep(name: string, step: any, index: number = -1): void {
    let key = this.lookup[name];
    let filter = this.filters[key];
    if (!filter) {
      filter = this.filters[key] = [];
    }
 
    Eif (index === -1) {
      index = filter.length;
    }
 
    filter.splice(index, 0, step);
    this.filterCache = {};
  }
 
  getFilterSteps(key: string) {
    Iif (this.filterCache[key]) {
      return this.filterCache[key];
    }
 
    let steps = [];
    let filter = this.filters[key];
    Iif (!filter) {
      return steps;
    }
 
    for (let i = 0, l = filter.length; i < l; i++) {
      Iif (typeof filter[i] === 'string') {
        steps.push(...this.getFilterSteps(this.lookup[filter[i]]));
      } else {
        steps.push(this.container.get(filter[i]));
      }
    }
 
    this.filterCache[key] = steps;
    return steps;
  }
}
 
export function createRouteFilterStep(name: string, options?: any = {}): Function {
  options = Object.assign({}, { aliases: [] }, options);
  function create(routeFilterContainer) {
    let key = name;
    routeFilterContainer.register(key, [name, ...options.aliases]);
    return new RouteFilterStep(key, routeFilterContainer);
  }
 
  create.inject = function() {
    return [RouteFilterContainer];
  };
 
  return create;
}
 
class RouteFilterStep {
  isMultiStep: boolean = true;
 
  constructor(key: string, routeFilterContainer: RouteFilterContainer) {
    this.key = key;
    this.routeFilterContainer = routeFilterContainer;
  }
 
  getSteps() {
    return this.routeFilterContainer.getFilterSteps(this.key);
  }
}