Home Identifier Source Repository

lib/Config/Loader.js

/**
 * Created by AlexanderC on 3/7/16.
 */

'use strict';

import {KernelDriver} from './Driver/KernelDriver';
import {AsyncConfig} from './Driver/AsyncConfig';

export class Loader {
  /**
   * @param {AbstractDriver|FsDriver|HttpDriver|KernelDriver|ComplexDriver|*} driver
   */
  constructor(driver = null) {
    this._driver = driver;
  }

  /**
   * @param {Kernel|*} kernel
   */
  static asyncConfigLoader(kernel) {
    return new Loader(new AsyncConfig(kernel));
  }

  /**
   * @param {Kernel|*} kernel
   */
  static kernelLoader(kernel) {
    return new Loader(new KernelDriver(kernel));
  }

  /**
   * @returns {AbstractDriver|FsDriver|HttpDriver|KernelDriver|ComplexDriver|*}
   */
  get driver() {
    return this._driver;
  }

  /**
   * @param {AbstractDriver|FsDriver|HttpDriver|KernelDriver|ComplexDriver|*} driver
   * @returns {Loader}
   */
  setDriver(driver) {
    this._driver = driver;

    return this;
  }

  /**
   * @param {Function} onLoaded
   * @param {Function} onFail
   */
  load(onLoaded = () => {}, onFail = () => {}) {
    onLoaded && this._driver.onLoadedCb(onLoaded);
    onFail && this._driver.onFailCb(onFail);

    this._driver.load();
  }
}