MitocGroup/run-jst

View on GitHub
docs/api/dump.json

Summary

Maintainability
Test Coverage
[
  {
    "__docId__": 0,
    "kind": "file",
    "name": "src/component/abstract-component.js",
    "content": "'use strict';\n\nconst events = require('../events');\n\n/**\n * Abstract component\n */\nclass AbstractComponent {\n  constructor() {\n    this._logger = console;\n    this._active = false;\n    this._processing = 0;\n  }\n  \n  /**\n   * @returns {number}\n   */\n  get processing() {\n    return this._processing;\n  }\n  \n  /**\n   * @param {number} interval\n   *\n   * @returns {Promise}\n   */\n  waitProcessing(interval = 200) {\n    return new Promise(resolve => {\n      if (!this.isProcessing) {\n        return process.nextTick(() => resolve());\n      }\n      \n      const id = setInterval(() => {\n        if (!this.isProcessing) {\n          clearInterval(id);\n          process.nextTick(() => resolve());\n        }\n      }, interval);\n    });\n  }\n  \n  /**\n   * @returns {AbstractComponent}\n   */\n  removeProcessing() {\n    this._processing--;\n    \n    return this;\n  }\n  \n  /**\n   * @returns {AbstractComponent}\n   */\n  addProcessing() {\n    this._processing++;\n    \n    return this;\n  }\n  \n  /**\n   * @returns {boolean}\n   */\n  get isProcessing() {\n    return this.processing > 0;\n  }\n  \n  /**\n   * @returns {*}\n   */\n  get logger() {\n    return this._logger;\n  }\n  \n  /**\n   * @param {*} logger\n   *\n   * @returns {AbstractComponent}\n   */\n  setLogger(logger) {\n    this._logger = logger;\n    \n    return this;\n  }\n  \n  /**\n   * @param {boolean} state\n   *\n   * @returns {AbstractComponent}\n   */\n  setActive(state) {\n    this._active = !!state;\n    \n    return this;\n  }\n  \n  /**\n   * @returns {boolean}\n   */\n  get isActive() {\n    return !!this._active;\n  }\n  \n  /**\n   * @throws {Error}\n   */\n  get name() {\n    throw new Error(`${ this.constructor.name }.name not implemented!`);\n  }\n  \n  /**\n   * @returns {*}\n   */\n  get events() {\n    return events;\n  }\n\n  /**\n   * @param {Emitter} emitter\n   * \n   * @returns {Promise}\n   */\n  init(emitter) {\n    return Promise.resolve();\n  }\n\n  /**\n   * @param {Emitter} emitter\n   * \n   * @returns {Promise}\n   */\n  run(emitter) {\n    return Promise.resolve();\n  }\n  \n  /**\n   * @param {Emitter} emitter\n   * \n   * @returns {Promise}\n   */\n  teardown(emitter) {\n    return Promise.resolve();\n  }\n  \n  /**\n   * @param {Emitter} emitter\n   * \n   * @returns {Promise}\n   */\n  subscribe(emitter) {\n    return Promise.resolve();\n  }\n  \n  /**\n   * @returns {Promise}\n   */\n  ready() {\n    return Promise.resolve();\n  }\n}\n\nmodule.exports = AbstractComponent;\n",
    "static": true,
    "longname": "src/component/abstract-component.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 1,
    "kind": "class",
    "name": "AbstractComponent",
    "memberof": "src/component/abstract-component.js",
    "static": true,
    "longname": "src/component/abstract-component.js~AbstractComponent",
    "access": null,
    "export": true,
    "importPath": "recink/src/component/abstract-component.js",
    "importStyle": "AbstractComponent",
    "description": "Abstract component",
    "lineNumber": 8,
    "interface": false
  },
  {
    "__docId__": 2,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/component/abstract-component.js~AbstractComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/abstract-component.js~AbstractComponent#constructor",
    "access": null,
    "description": null,
    "lineNumber": 9,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "params": []
  },
  {
    "__docId__": 3,
    "kind": "member",
    "name": "_logger",
    "memberof": "src/component/abstract-component.js~AbstractComponent",
    "static": false,
    "longname": "src/component/abstract-component.js~AbstractComponent#_logger",
    "access": null,
    "description": null,
    "lineNumber": 10,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 4,
    "kind": "member",
    "name": "_active",
    "memberof": "src/component/abstract-component.js~AbstractComponent",
    "static": false,
    "longname": "src/component/abstract-component.js~AbstractComponent#_active",
    "access": null,
    "description": null,
    "lineNumber": 11,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 5,
    "kind": "member",
    "name": "_processing",
    "memberof": "src/component/abstract-component.js~AbstractComponent",
    "static": false,
    "longname": "src/component/abstract-component.js~AbstractComponent#_processing",
    "access": null,
    "description": null,
    "lineNumber": 12,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "number"
      ]
    }
  },
  {
    "__docId__": 6,
    "kind": "get",
    "name": "processing",
    "memberof": "src/component/abstract-component.js~AbstractComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/abstract-component.js~AbstractComponent#processing",
    "access": null,
    "description": "",
    "lineNumber": 18,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{number}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "number"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 7,
    "kind": "method",
    "name": "waitProcessing",
    "memberof": "src/component/abstract-component.js~AbstractComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/abstract-component.js~AbstractComponent#waitProcessing",
    "access": null,
    "description": "",
    "lineNumber": 27,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "number"
        ],
        "spread": false,
        "optional": false,
        "name": "interval",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 8,
    "kind": "method",
    "name": "removeProcessing",
    "memberof": "src/component/abstract-component.js~AbstractComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/abstract-component.js~AbstractComponent#removeProcessing",
    "access": null,
    "description": "",
    "lineNumber": 45,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{AbstractComponent}"
      }
    ],
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "AbstractComponent"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 9,
    "kind": "method",
    "name": "addProcessing",
    "memberof": "src/component/abstract-component.js~AbstractComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/abstract-component.js~AbstractComponent#addProcessing",
    "access": null,
    "description": "",
    "lineNumber": 54,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{AbstractComponent}"
      }
    ],
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "AbstractComponent"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 10,
    "kind": "get",
    "name": "isProcessing",
    "memberof": "src/component/abstract-component.js~AbstractComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/abstract-component.js~AbstractComponent#isProcessing",
    "access": null,
    "description": "",
    "lineNumber": 63,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{boolean}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "boolean"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 11,
    "kind": "get",
    "name": "logger",
    "memberof": "src/component/abstract-component.js~AbstractComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/abstract-component.js~AbstractComponent#logger",
    "access": null,
    "description": "",
    "lineNumber": 70,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{*}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "*"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 12,
    "kind": "method",
    "name": "setLogger",
    "memberof": "src/component/abstract-component.js~AbstractComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/abstract-component.js~AbstractComponent#setLogger",
    "access": null,
    "description": "",
    "lineNumber": 79,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{AbstractComponent}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "logger",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "AbstractComponent"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 13,
    "kind": "member",
    "name": "_logger",
    "memberof": "src/component/abstract-component.js~AbstractComponent",
    "static": false,
    "longname": "src/component/abstract-component.js~AbstractComponent#_logger",
    "access": null,
    "description": null,
    "lineNumber": 80,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 14,
    "kind": "method",
    "name": "setActive",
    "memberof": "src/component/abstract-component.js~AbstractComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/abstract-component.js~AbstractComponent#setActive",
    "access": null,
    "description": "",
    "lineNumber": 90,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{AbstractComponent}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "boolean"
        ],
        "spread": false,
        "optional": false,
        "name": "state",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "AbstractComponent"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 15,
    "kind": "member",
    "name": "_active",
    "memberof": "src/component/abstract-component.js~AbstractComponent",
    "static": false,
    "longname": "src/component/abstract-component.js~AbstractComponent#_active",
    "access": null,
    "description": null,
    "lineNumber": 91,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 16,
    "kind": "get",
    "name": "isActive",
    "memberof": "src/component/abstract-component.js~AbstractComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/abstract-component.js~AbstractComponent#isActive",
    "access": null,
    "description": "",
    "lineNumber": 99,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{boolean}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "boolean"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 17,
    "kind": "get",
    "name": "name",
    "memberof": "src/component/abstract-component.js~AbstractComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/abstract-component.js~AbstractComponent#name",
    "access": null,
    "description": "",
    "lineNumber": 106,
    "throws": [
      {
        "types": [
          "Error"
        ],
        "description": ""
      }
    ]
  },
  {
    "__docId__": 18,
    "kind": "get",
    "name": "events",
    "memberof": "src/component/abstract-component.js~AbstractComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/abstract-component.js~AbstractComponent#events",
    "access": null,
    "description": "",
    "lineNumber": 113,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{*}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "*"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 19,
    "kind": "method",
    "name": "init",
    "memberof": "src/component/abstract-component.js~AbstractComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/abstract-component.js~AbstractComponent#init",
    "access": null,
    "description": "",
    "lineNumber": 122,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Emitter"
        ],
        "spread": false,
        "optional": false,
        "name": "emitter",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 20,
    "kind": "method",
    "name": "run",
    "memberof": "src/component/abstract-component.js~AbstractComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/abstract-component.js~AbstractComponent#run",
    "access": null,
    "description": "",
    "lineNumber": 131,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Emitter"
        ],
        "spread": false,
        "optional": false,
        "name": "emitter",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 21,
    "kind": "method",
    "name": "teardown",
    "memberof": "src/component/abstract-component.js~AbstractComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/abstract-component.js~AbstractComponent#teardown",
    "access": null,
    "description": "",
    "lineNumber": 140,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Emitter"
        ],
        "spread": false,
        "optional": false,
        "name": "emitter",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 22,
    "kind": "method",
    "name": "subscribe",
    "memberof": "src/component/abstract-component.js~AbstractComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/abstract-component.js~AbstractComponent#subscribe",
    "access": null,
    "description": "",
    "lineNumber": 149,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Emitter"
        ],
        "spread": false,
        "optional": false,
        "name": "emitter",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 23,
    "kind": "method",
    "name": "ready",
    "memberof": "src/component/abstract-component.js~AbstractComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/abstract-component.js~AbstractComponent#ready",
    "access": null,
    "description": "",
    "lineNumber": 156,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 24,
    "kind": "file",
    "name": "src/component/cache/abstract-driver.js",
    "content": "'use strict';\n\nconst fs = require('fs');\nconst jag = require('jag');\nconst fse = require('fs-extra');\nconst path = require('path');\nconst pify = require('pify');\nconst events = require('./events');\nconst EventEmitter = require('events');\n\n/**\n * Abstract cache driver\n */\nclass AbstractDriver extends EventEmitter {\n  /**\n   * @param {String} cacheDir\n   */\n  constructor(cacheDir) {\n    super();\n    \n    this._cacheDir = cacheDir;\n    this._progressType = null;\n  }\n  \n  /**\n   * @returns {string}\n   */\n  get cacheDir() {\n    return this._cacheDir;\n  }\n  \n  /**\n   * @returns {Promise}\n   */\n  upload() {\n    return this._switchProgressType('upload')\n      ._removePackageFile()\n      .then(() => this._pack())\n      .then(() => this._upload())\n      .then(() => this._resetOperation());\n  }\n  \n  /**\n   * @returns {Promise}\n   */\n  download() {\n    return this._switchProgressType('download')\n      ._removePackageFile()\n      .then(() => this._download())\n      .then(() => this._unpack())\n      .then(() => this._resetOperation());\n  }\n  \n  /**\n   * @param {string} type\n   *\n   * @returns {AbstractDriver}\n   *\n   * @private\n   */\n  _switchProgressType(type) {\n    this._progressType = type;\n    \n    return this;\n  }\n  \n  /**\n   * @param {number} total\n   * @param {number} amount\n   *\n   * @returns {AbstractDriver}\n   *\n   * @private\n   */\n  _progress(total, amount) {\n    const payload = {\n      amount, total, remaining: total - amount,\n    };\n    \n    this.emit(events.cache.progress, payload);\n    this.emit(events.cache[this._progressType].progress, payload);\n    \n    return this;\n  }\n  \n  /**\n   * @returns {Promise}\n   * \n   * @private\n   */\n  _resetOperation() {\n    this._progressType = null;\n    \n    return this._removePackageFile();\n  }\n  \n  /**\n   * @returns {Promise}\n   * \n   * @private\n   */\n  _removePackageFile() {\n    return fse.remove(this._packagePath);\n  }\n  \n  /**\n   * @returns {string}\n   *\n   * @private\n   */\n  get _packagePath() {\n    return path.join(\n      path.dirname(this.cacheDir),\n      (path.basename(this.cacheDir) || AbstractDriver.DEFAULT_NS) + '.tar.gz'\n    );\n  }\n  \n  /**\n   * @returns {Promise}\n   * @private\n   */\n  _pack() {\n    return fse.pathExists(this.cacheDir).then(result => {\n      if (!result) {\n        return Promise.resolve();\n      }\n\n      return pify(jag.pack)(this.cacheDir, this._packagePath).then(() => {\n        // @todo remove when fixed\n        // @see https://github.com/coderaiser/node-jag/blob/master/lib/jag.js#L53\n        const tmpPackagePath = path.join(\n          path.dirname(this._packagePath),\n          path.basename(this._packagePath, '.tar.gz')\n        ) + '.tar.tar.gz';\n\n        return fse.move(tmpPackagePath, this._packagePath, { overwrite: true });\n      });\n    });\n  }\n  \n  /**\n   * @returns {Promise}\n   * @private\n   */\n  _unpack() {\n    return fse.pathExists(this._packagePath).then(result => {\n      if (!result) {\n        return Promise.resolve();\n      }\n\n      return this._packageSize.then(packageSize => {\n        if (packageSize <= 0) {\n          return Promise.resolve();\n        }\n\n        return fse.ensureDir(this.cacheDir).then(() => pify(jag.unpack)(this._packagePath, this.cacheDir));\n      });\n    });\n  }\n\n  /**\n   * @returns {Promise}\n   *\n   * @private\n   */\n  get _packageSize() {\n    return pify(fs.stat)(this._packagePath)\n      .then(stat => Promise.resolve(stat.size));\n  }\n  \n  /**\n   * @returns {Promise}\n   *\n   * @private\n   */\n  _upload() {\n    return Promise.reject(new Error(\n      `${ this.constructor.name }._upload() not implemented!`\n    ));\n  }\n  \n  /**\n   * @throws {Error}\n   */\n  get name() {\n    throw new Error(\n      `${ this.constructor.name }.name not implemented!`\n    );\n  }\n\n  /**\n   * @returns {Promise}\n   *\n   * @private\n   */\n  _download() {\n    return Promise.reject(new Error(\n      `${ this.constructor.name }._download() not implemented!`\n    ));\n  }\n  \n  /**\n   * @returns {string}\n   */\n  static get DEFAULT_NS() {\n    return 'recink_package';\n  }\n}\n\nmodule.exports = AbstractDriver;\n",
    "static": true,
    "longname": "src/component/cache/abstract-driver.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 25,
    "kind": "class",
    "name": "AbstractDriver",
    "memberof": "src/component/cache/abstract-driver.js",
    "static": true,
    "longname": "src/component/cache/abstract-driver.js~AbstractDriver",
    "access": null,
    "export": true,
    "importPath": "recink/src/component/cache/abstract-driver.js",
    "importStyle": "AbstractDriver",
    "description": "Abstract cache driver",
    "lineNumber": 14,
    "interface": false,
    "extends": [
      "events~EventEmitter"
    ]
  },
  {
    "__docId__": 26,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/component/cache/abstract-driver.js~AbstractDriver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache/abstract-driver.js~AbstractDriver#constructor",
    "access": null,
    "description": "",
    "lineNumber": 18,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "cacheDir",
        "description": ""
      }
    ]
  },
  {
    "__docId__": 27,
    "kind": "member",
    "name": "_cacheDir",
    "memberof": "src/component/cache/abstract-driver.js~AbstractDriver",
    "static": false,
    "longname": "src/component/cache/abstract-driver.js~AbstractDriver#_cacheDir",
    "access": null,
    "description": null,
    "lineNumber": 21,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 28,
    "kind": "member",
    "name": "_progressType",
    "memberof": "src/component/cache/abstract-driver.js~AbstractDriver",
    "static": false,
    "longname": "src/component/cache/abstract-driver.js~AbstractDriver#_progressType",
    "access": null,
    "description": null,
    "lineNumber": 22,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 29,
    "kind": "get",
    "name": "cacheDir",
    "memberof": "src/component/cache/abstract-driver.js~AbstractDriver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache/abstract-driver.js~AbstractDriver#cacheDir",
    "access": null,
    "description": "",
    "lineNumber": 28,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 30,
    "kind": "method",
    "name": "upload",
    "memberof": "src/component/cache/abstract-driver.js~AbstractDriver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache/abstract-driver.js~AbstractDriver#upload",
    "access": null,
    "description": "",
    "lineNumber": 35,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 31,
    "kind": "method",
    "name": "download",
    "memberof": "src/component/cache/abstract-driver.js~AbstractDriver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache/abstract-driver.js~AbstractDriver#download",
    "access": null,
    "description": "",
    "lineNumber": 46,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 32,
    "kind": "method",
    "name": "_switchProgressType",
    "memberof": "src/component/cache/abstract-driver.js~AbstractDriver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache/abstract-driver.js~AbstractDriver#_switchProgressType",
    "access": "private",
    "description": "",
    "lineNumber": 61,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{AbstractDriver}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "type",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "AbstractDriver"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 33,
    "kind": "member",
    "name": "_progressType",
    "memberof": "src/component/cache/abstract-driver.js~AbstractDriver",
    "static": false,
    "longname": "src/component/cache/abstract-driver.js~AbstractDriver#_progressType",
    "access": null,
    "description": null,
    "lineNumber": 62,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 34,
    "kind": "method",
    "name": "_progress",
    "memberof": "src/component/cache/abstract-driver.js~AbstractDriver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache/abstract-driver.js~AbstractDriver#_progress",
    "access": "private",
    "description": "",
    "lineNumber": 75,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{AbstractDriver}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "number"
        ],
        "spread": false,
        "optional": false,
        "name": "total",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "number"
        ],
        "spread": false,
        "optional": false,
        "name": "amount",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "AbstractDriver"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 35,
    "kind": "method",
    "name": "_resetOperation",
    "memberof": "src/component/cache/abstract-driver.js~AbstractDriver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache/abstract-driver.js~AbstractDriver#_resetOperation",
    "access": "private",
    "description": "",
    "lineNumber": 91,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 36,
    "kind": "member",
    "name": "_progressType",
    "memberof": "src/component/cache/abstract-driver.js~AbstractDriver",
    "static": false,
    "longname": "src/component/cache/abstract-driver.js~AbstractDriver#_progressType",
    "access": null,
    "description": null,
    "lineNumber": 92,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 37,
    "kind": "method",
    "name": "_removePackageFile",
    "memberof": "src/component/cache/abstract-driver.js~AbstractDriver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache/abstract-driver.js~AbstractDriver#_removePackageFile",
    "access": "private",
    "description": "",
    "lineNumber": 102,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 38,
    "kind": "get",
    "name": "_packagePath",
    "memberof": "src/component/cache/abstract-driver.js~AbstractDriver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache/abstract-driver.js~AbstractDriver#_packagePath",
    "access": "private",
    "description": "",
    "lineNumber": 111,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 39,
    "kind": "method",
    "name": "_pack",
    "memberof": "src/component/cache/abstract-driver.js~AbstractDriver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache/abstract-driver.js~AbstractDriver#_pack",
    "access": "private",
    "description": "",
    "lineNumber": 122,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 40,
    "kind": "method",
    "name": "_unpack",
    "memberof": "src/component/cache/abstract-driver.js~AbstractDriver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache/abstract-driver.js~AbstractDriver#_unpack",
    "access": "private",
    "description": "",
    "lineNumber": 145,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 41,
    "kind": "get",
    "name": "_packageSize",
    "memberof": "src/component/cache/abstract-driver.js~AbstractDriver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache/abstract-driver.js~AbstractDriver#_packageSize",
    "access": "private",
    "description": "",
    "lineNumber": 166,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 42,
    "kind": "method",
    "name": "_upload",
    "memberof": "src/component/cache/abstract-driver.js~AbstractDriver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache/abstract-driver.js~AbstractDriver#_upload",
    "access": "private",
    "description": "",
    "lineNumber": 176,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 43,
    "kind": "get",
    "name": "name",
    "memberof": "src/component/cache/abstract-driver.js~AbstractDriver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache/abstract-driver.js~AbstractDriver#name",
    "access": null,
    "description": "",
    "lineNumber": 185,
    "throws": [
      {
        "types": [
          "Error"
        ],
        "description": ""
      }
    ]
  },
  {
    "__docId__": 44,
    "kind": "method",
    "name": "_download",
    "memberof": "src/component/cache/abstract-driver.js~AbstractDriver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache/abstract-driver.js~AbstractDriver#_download",
    "access": "private",
    "description": "",
    "lineNumber": 196,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 45,
    "kind": "get",
    "name": "DEFAULT_NS",
    "memberof": "src/component/cache/abstract-driver.js~AbstractDriver",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/component/cache/abstract-driver.js~AbstractDriver.DEFAULT_NS",
    "access": null,
    "description": "",
    "lineNumber": 205,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 46,
    "kind": "file",
    "name": "src/component/cache/events.js",
    "content": "'use strict';\n\nconst dot = require('dot-object');\n\n/**\n * Cache component events\n */\nconst events = {};\n\nevents.$ = [\n  'cache.progress',\n  'cache.upload.progress',\n  'cache.download.progress',\n].map(eventPath => {\n  dot.str(eventPath, eventPath, events);\n  \n  return eventPath;\n});\n\nmodule.exports = events;\n",
    "static": true,
    "longname": "src/component/cache/events.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 47,
    "kind": "variable",
    "name": "events",
    "memberof": "src/component/cache/events.js",
    "static": true,
    "longname": "src/component/cache/events.js~events",
    "access": null,
    "export": true,
    "importPath": "recink/src/component/cache/events.js",
    "importStyle": "events",
    "description": "Cache component events",
    "lineNumber": 8,
    "type": {
      "types": [
        "{}"
      ]
    }
  },
  {
    "__docId__": 48,
    "kind": "file",
    "name": "src/component/cache/factory.js",
    "content": "'use strict';\n\nconst AbstractDriver = require('./abstract-driver');\n\n/**\n * Cache factory\n */\nclass Factory {  \n  /**\n   * @param {string} name\n   * @param {*} args\n   *\n   * @returns {AbstractDriver}\n   */\n  static create(name, ...args) {\n    const DriverImplementation = require(`./${ name }-driver`);\n    const driver = new DriverImplementation(...args);\n    \n    if (!(driver instanceof AbstractDriver)) {\n      throw new Error(`${ name } driver should be an implementation of AbstractDriver`);\n    }\n    \n    return driver;\n  }\n  \n  /**\n   * @param {*} args\n   *\n   * @returns {VoidDriver}\n   */\n  static s3(...args) {\n    return this.create('s3', ...args);\n  }\n  \n  /**\n   * @param {*} args\n   *\n   * @returns {VoidDriver}\n   */\n  static void(...args) {\n    return this.create('void', ...args);\n  }\n}\n\nmodule.exports = Factory;\n",
    "static": true,
    "longname": "src/component/cache/factory.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 49,
    "kind": "class",
    "name": "Factory",
    "memberof": "src/component/cache/factory.js",
    "static": true,
    "longname": "src/component/cache/factory.js~Factory",
    "access": null,
    "export": true,
    "importPath": "recink/src/component/cache/factory.js",
    "importStyle": "Factory",
    "description": "Cache factory",
    "lineNumber": 8,
    "interface": false
  },
  {
    "__docId__": 50,
    "kind": "method",
    "name": "create",
    "memberof": "src/component/cache/factory.js~Factory",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/component/cache/factory.js~Factory.create",
    "access": null,
    "description": "",
    "lineNumber": 15,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{AbstractDriver}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "name",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "args",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "AbstractDriver"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 51,
    "kind": "method",
    "name": "s3",
    "memberof": "src/component/cache/factory.js~Factory",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/component/cache/factory.js~Factory.s3",
    "access": null,
    "description": "",
    "lineNumber": 31,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{VoidDriver}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "args",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "VoidDriver"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 52,
    "kind": "method",
    "name": "void",
    "memberof": "src/component/cache/factory.js~Factory",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/component/cache/factory.js~Factory.void",
    "access": null,
    "description": "",
    "lineNumber": 40,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{VoidDriver}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "args",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "VoidDriver"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 53,
    "kind": "file",
    "name": "src/component/cache/s3-driver.js",
    "content": "'use strict';\n\nconst fs = require('fs');\nconst path = require('path');\nconst pify = require('pify');\nconst md5File = require('md5-file');\nconst progress = require('progress-stream');\nconst AbstractDriver = require('./abstract-driver');\nconst AwsCredentials = require('../helper/aws-credentials');\n\n/**\n * AWS S3 cache driver\n */\nclass S3Driver extends AbstractDriver {\n  /**\n   * @param {String} cacheDir\n   * @param {String} path\n   * @param {*} options\n   * @param {Boolean} includeNodeVersion\n   */\n  constructor(cacheDir, path, options, includeNodeVersion = true) {\n    super(cacheDir);\n    \n    this._path = path;\n    this._options = options;\n    this._includeNodeVersion = includeNodeVersion;\n    this._awsCredentials = new AwsCredentials(this.options);\n    this._client = false;\n  }\n\n  /**\n   * @returns {string}\n   */\n  get name() {\n    return 's3';\n  }\n  \n  /**\n   * @returns {boolean}\n   */\n  get includeNodeVersion() {\n    return this._includeNodeVersion;\n  }\n  \n  /**\n   * @returns {string}\n   */\n  get path() {\n    return this._path;\n  }\n\n  /**\n   * Get AWS.S3 client promise\n   * @return {Promise}\n   */\n  get client() {\n    if (this._client) {\n      return Promise.resolve(this._client);\n    }\n\n    return this._awsCredentials.getConfig().then(AWS => {\n      this._client = new AWS.S3();\n      return Promise.resolve(this._client);\n    });\n  }\n  \n  /**\n   * @returns {*}\n   */\n  get options() {\n    return this._options;\n  }\n  \n  /**\n   * @returns {Promise}\n   * @private\n   */\n  _upload() {\n    return this._packageSize.then(contentLength => {\n      if (contentLength <= 0) {\n        return Promise.resolve();\n      }\n\n      return this._hasChanged.then(hasChanged => {\n        return new Promise((resolve, reject) => {\n          if (!hasChanged) {\n            return resolve();\n          }\n\n          const { Bucket, Key } = this._s3Location(this.path);\n          const packageStream = fs.createReadStream(this._packagePath);\n\n          packageStream.on('error', error => reject(error));\n\n          const Body = this._track(packageStream, contentLength);\n\n          this.client\n            .then(S3 => S3.upload({ Bucket, Key, Body }).promise())\n            .then(() => resolve())\n            .catch(error => reject(error));\n        });\n      });\n    });\n  }\n\n  /**\n   * @returns {Promise}\n   * @private\n   */\n  get _hasChanged() {\n    return pify(md5File)(this._packagePath).then(packageHash => {\n      const { Bucket, Key } = this._s3Location(this.path);\n\n      return this.client\n        .then(S3 => S3.headObject({ Bucket, Key }).promise())\n        .then(data => {\n          const remoteHash = data.ETag.replace(/\"/g, '');\n\n          return Promise.resolve(packageHash !== remoteHash);\n        })\n        .catch(error => {\n          if (this._isMissingObject(error)) {\n            return Promise.resolve(true);\n          }\n\n          return Promise.reject(error);\n        });\n    });\n  }\n\n  /**\n   * @returns {Promise}\n   * @private\n   */\n  _download() {\n    return new Promise((resolve, reject) => {\n      this.client.then(S3 => {\n        const { Bucket, Key } = this._s3Location(this.path);\n        const packageStream = fs.createWriteStream(this._packagePath);\n        const remoteStream = S3.getObject({ Bucket, Key }).createReadStream();\n\n        remoteStream.on('end', () => resolve());\n        remoteStream.on('error', error => {\n          if (this._isMissingObject(error)) {\n            return resolve();\n          }\n\n          reject(error);\n        });\n        packageStream.on('error', error => reject(error));\n\n        this._track(remoteStream).pipe(packageStream);\n      });\n    });\n  }\n  \n  /**\n   * @param {*} error\n   *\n   * @returns {boolean}\n   * \n   * @private\n   */\n  _isMissingObject(error) {\n    return [ 'NoSuchKey', 'NotFound' ].indexOf(error.code) !== -1;\n  }\n  \n  /**\n   * @param {ReadableStream} stream\n   * @param {number} length\n   * @param {number} time\n   *\n   * @returns {ReadableStream}\n   * \n   * @private\n   */\n  _track(stream, length = null, time = 50) {\n    const tracker = progress({ length, time, });\n    \n    tracker.on('progress', progress => {\n      this._progress(progress.length, progress.transferred);\n    });\n        \n    return stream.pipe(tracker);\n  }\n  \n  /**\n   * @param {String} s3Path\n   * @returns {*}\n   * @private\n   */\n  _s3Location(s3Path) {\n    if (!s3Path) {\n      throw new Error('S3 path is required!');\n    }\n\n    const matches = s3Path.match(\n      /^(?:s3:\\/\\/|\\/)?([^\\/]+)(?:\\/(.*))?$/i\n    );\n    \n    if (matches.length === 2) {\n      matches.push('');\n    }\n    \n    const [ , Bucket, keyPrefix ] = matches;\n    \n    const Key = path.join(\n      keyPrefix || '',\n      this.includeNodeVersion ? process.version : '',\n      path.basename(this._packagePath)\n    ).replace(/\\\\+/g, '/'); // ensure path delimiter set to slash\n    \n    return { Bucket, Key };\n  }\n}\n\nmodule.exports = S3Driver;\n",
    "static": true,
    "longname": "src/component/cache/s3-driver.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 54,
    "kind": "class",
    "name": "S3Driver",
    "memberof": "src/component/cache/s3-driver.js",
    "static": true,
    "longname": "src/component/cache/s3-driver.js~S3Driver",
    "access": null,
    "export": true,
    "importPath": "recink/src/component/cache/s3-driver.js",
    "importStyle": "S3Driver",
    "description": "AWS S3 cache driver",
    "lineNumber": 14,
    "interface": false,
    "extends": [
      "src/component/cache/abstract-driver.js~AbstractDriver"
    ]
  },
  {
    "__docId__": 55,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/component/cache/s3-driver.js~S3Driver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache/s3-driver.js~S3Driver#constructor",
    "access": null,
    "description": "",
    "lineNumber": 21,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "cacheDir",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "path",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "options",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": false,
        "name": "includeNodeVersion",
        "description": ""
      }
    ]
  },
  {
    "__docId__": 56,
    "kind": "member",
    "name": "_path",
    "memberof": "src/component/cache/s3-driver.js~S3Driver",
    "static": false,
    "longname": "src/component/cache/s3-driver.js~S3Driver#_path",
    "access": null,
    "description": null,
    "lineNumber": 24,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 57,
    "kind": "member",
    "name": "_options",
    "memberof": "src/component/cache/s3-driver.js~S3Driver",
    "static": false,
    "longname": "src/component/cache/s3-driver.js~S3Driver#_options",
    "access": null,
    "description": null,
    "lineNumber": 25,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 58,
    "kind": "member",
    "name": "_includeNodeVersion",
    "memberof": "src/component/cache/s3-driver.js~S3Driver",
    "static": false,
    "longname": "src/component/cache/s3-driver.js~S3Driver#_includeNodeVersion",
    "access": null,
    "description": null,
    "lineNumber": 26,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 59,
    "kind": "member",
    "name": "_awsCredentials",
    "memberof": "src/component/cache/s3-driver.js~S3Driver",
    "static": false,
    "longname": "src/component/cache/s3-driver.js~S3Driver#_awsCredentials",
    "access": null,
    "description": null,
    "lineNumber": 27,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 60,
    "kind": "member",
    "name": "_client",
    "memberof": "src/component/cache/s3-driver.js~S3Driver",
    "static": false,
    "longname": "src/component/cache/s3-driver.js~S3Driver#_client",
    "access": null,
    "description": null,
    "lineNumber": 28,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 61,
    "kind": "get",
    "name": "name",
    "memberof": "src/component/cache/s3-driver.js~S3Driver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache/s3-driver.js~S3Driver#name",
    "access": null,
    "description": "",
    "lineNumber": 34,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 62,
    "kind": "get",
    "name": "includeNodeVersion",
    "memberof": "src/component/cache/s3-driver.js~S3Driver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache/s3-driver.js~S3Driver#includeNodeVersion",
    "access": null,
    "description": "",
    "lineNumber": 41,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{boolean}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "boolean"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 63,
    "kind": "get",
    "name": "path",
    "memberof": "src/component/cache/s3-driver.js~S3Driver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache/s3-driver.js~S3Driver#path",
    "access": null,
    "description": "",
    "lineNumber": 48,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 64,
    "kind": "get",
    "name": "client",
    "memberof": "src/component/cache/s3-driver.js~S3Driver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache/s3-driver.js~S3Driver#client",
    "access": null,
    "description": "Get AWS.S3 client promise",
    "lineNumber": 56,
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 65,
    "kind": "member",
    "name": "_client",
    "memberof": "src/component/cache/s3-driver.js~S3Driver",
    "static": false,
    "longname": "src/component/cache/s3-driver.js~S3Driver#_client",
    "access": null,
    "description": null,
    "lineNumber": 62,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 66,
    "kind": "get",
    "name": "options",
    "memberof": "src/component/cache/s3-driver.js~S3Driver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache/s3-driver.js~S3Driver#options",
    "access": null,
    "description": "",
    "lineNumber": 70,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{*}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "*"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 67,
    "kind": "method",
    "name": "_upload",
    "memberof": "src/component/cache/s3-driver.js~S3Driver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache/s3-driver.js~S3Driver#_upload",
    "access": "private",
    "description": "",
    "lineNumber": 78,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 68,
    "kind": "get",
    "name": "_hasChanged",
    "memberof": "src/component/cache/s3-driver.js~S3Driver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache/s3-driver.js~S3Driver#_hasChanged",
    "access": "private",
    "description": "",
    "lineNumber": 110,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 69,
    "kind": "method",
    "name": "_download",
    "memberof": "src/component/cache/s3-driver.js~S3Driver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache/s3-driver.js~S3Driver#_download",
    "access": "private",
    "description": "",
    "lineNumber": 135,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 70,
    "kind": "method",
    "name": "_isMissingObject",
    "memberof": "src/component/cache/s3-driver.js~S3Driver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache/s3-driver.js~S3Driver#_isMissingObject",
    "access": "private",
    "description": "",
    "lineNumber": 164,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{boolean}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "error",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "boolean"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 71,
    "kind": "method",
    "name": "_track",
    "memberof": "src/component/cache/s3-driver.js~S3Driver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache/s3-driver.js~S3Driver#_track",
    "access": "private",
    "description": "",
    "lineNumber": 177,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{ReadableStream}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "ReadableStream"
        ],
        "spread": false,
        "optional": false,
        "name": "stream",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "number"
        ],
        "spread": false,
        "optional": false,
        "name": "length",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "number"
        ],
        "spread": false,
        "optional": false,
        "name": "time",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "ReadableStream"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 72,
    "kind": "method",
    "name": "_s3Location",
    "memberof": "src/component/cache/s3-driver.js~S3Driver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache/s3-driver.js~S3Driver#_s3Location",
    "access": "private",
    "description": "",
    "lineNumber": 192,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{*}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "s3Path",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "*"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 73,
    "kind": "file",
    "name": "src/component/cache/s3-unpacked-driver.js",
    "content": "'use strict';\n\nconst fs = require('fs-extra');\nconst path = require('path');\nconst S3Driver = require('./s3-driver');\nconst { findFilesByPattern } = require('../../helper/util');\n\n/**\n * AWS S3 (unpacked) cache driver\n */\nclass S3UnpackedDriver extends S3Driver {\n  /**\n   * @param {String} cacheDir\n   * @param {String} baseDir\n   * @param {String} s3path\n   * @param {Object} s3options\n   */\n  constructor(cacheDir, baseDir, s3path, s3options) {\n    super(cacheDir, s3path, s3options, false);\n\n    this._baseDir = baseDir;\n  }\n\n  /**\n   * @returns {String}\n   */\n  get name() {\n    return 's3-unpacked';\n  }\n\n  /**\n   * @returns {String}\n   * @private\n   */\n  get _packagePath() {\n    return this.cacheDir;\n  }\n\n  /**\n   * @returns {Promise}\n   * @private\n   */\n  _download() {\n    const { Bucket, Key } = this._s3Location(this.path);\n\n    return this.client.then(S3 => {\n      return S3.listObjectsV2({ Bucket: Bucket, Prefix: Key }).promise();\n    }).then(listRes => {\n      let keys = listRes.Contents.filter(item => item.Size).map(item => item.Key);\n\n      return Promise.all(keys.map(key => {\n        return this._getAndSaveS3Object(key, key.replace(Key, this.cacheDir));\n      }));\n    });\n  }\n\n  /**\n   * @returns {Promise}\n   * @private\n   */\n  _unpack() {\n    return Promise.resolve();\n  }\n\n  /**\n   * @returns {Promise}\n   * @private\n   */\n  _pack() {\n    return Promise.resolve();\n  }\n\n  /**\n   * @returns {Promise}\n   * @private\n   */\n  _removePackageFile() {\n    return Promise.resolve();\n  }\n\n  /**\n   * @returns {Promise}\n   * @private\n   */\n  _upload() {\n    const { Bucket, Key } = this._s3Location(this.path);\n    const list = findFilesByPattern(this.cacheDir, /.*/);\n\n    return Promise.all(\n      list.map(filePath => {\n        const stream = fs.createReadStream(filePath);\n        const tfResource = Key.split('/').pop();\n        const additionalKey = filePath.substring(filePath.lastIndexOf(tfResource) + tfResource.length);\n        const fullS3Key = path.normalize(`${Key}/${additionalKey}`);\n\n        return this.client.then(S3 => {\n          return S3.upload({ Bucket: Bucket, Key: fullS3Key, Body: stream }).promise();\n        });\n      })\n    );\n  }\n\n  /**\n   * Get S3 object and save it to local path\n   * @param {String} objectKey\n   * @param {String} pathToSave\n   * @returns {Promise}\n   */\n  _getAndSaveS3Object(objectKey, pathToSave) {\n    return this.client.then(S3 => {\n      const { Bucket } = this._s3Location(this.path);\n\n      return S3.getObject({ Bucket: Bucket, Key: objectKey }).promise().then(content => {\n        return fs.outputFile(pathToSave, content.Body);\n      });\n    });\n  }\n}\n\nmodule.exports = S3UnpackedDriver;\n",
    "static": true,
    "longname": "src/component/cache/s3-unpacked-driver.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 74,
    "kind": "class",
    "name": "S3UnpackedDriver",
    "memberof": "src/component/cache/s3-unpacked-driver.js",
    "static": true,
    "longname": "src/component/cache/s3-unpacked-driver.js~S3UnpackedDriver",
    "access": null,
    "export": true,
    "importPath": "recink/src/component/cache/s3-unpacked-driver.js",
    "importStyle": "S3UnpackedDriver",
    "description": "AWS S3 (unpacked) cache driver",
    "lineNumber": 11,
    "interface": false,
    "extends": [
      "src/component/cache/s3-driver.js~S3Driver"
    ]
  },
  {
    "__docId__": 75,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/component/cache/s3-unpacked-driver.js~S3UnpackedDriver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache/s3-unpacked-driver.js~S3UnpackedDriver#constructor",
    "access": null,
    "description": "",
    "lineNumber": 18,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "cacheDir",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "baseDir",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "s3path",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Object"
        ],
        "spread": false,
        "optional": false,
        "name": "s3options",
        "description": ""
      }
    ]
  },
  {
    "__docId__": 76,
    "kind": "member",
    "name": "_baseDir",
    "memberof": "src/component/cache/s3-unpacked-driver.js~S3UnpackedDriver",
    "static": false,
    "longname": "src/component/cache/s3-unpacked-driver.js~S3UnpackedDriver#_baseDir",
    "access": null,
    "description": null,
    "lineNumber": 21,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 77,
    "kind": "get",
    "name": "name",
    "memberof": "src/component/cache/s3-unpacked-driver.js~S3UnpackedDriver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache/s3-unpacked-driver.js~S3UnpackedDriver#name",
    "access": null,
    "description": "",
    "lineNumber": 27,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{String}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 78,
    "kind": "get",
    "name": "_packagePath",
    "memberof": "src/component/cache/s3-unpacked-driver.js~S3UnpackedDriver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache/s3-unpacked-driver.js~S3UnpackedDriver#_packagePath",
    "access": "private",
    "description": "",
    "lineNumber": 35,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{String}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 79,
    "kind": "method",
    "name": "_download",
    "memberof": "src/component/cache/s3-unpacked-driver.js~S3UnpackedDriver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache/s3-unpacked-driver.js~S3UnpackedDriver#_download",
    "access": "private",
    "description": "",
    "lineNumber": 43,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 80,
    "kind": "method",
    "name": "_unpack",
    "memberof": "src/component/cache/s3-unpacked-driver.js~S3UnpackedDriver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache/s3-unpacked-driver.js~S3UnpackedDriver#_unpack",
    "access": "private",
    "description": "",
    "lineNumber": 61,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 81,
    "kind": "method",
    "name": "_pack",
    "memberof": "src/component/cache/s3-unpacked-driver.js~S3UnpackedDriver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache/s3-unpacked-driver.js~S3UnpackedDriver#_pack",
    "access": "private",
    "description": "",
    "lineNumber": 69,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 82,
    "kind": "method",
    "name": "_removePackageFile",
    "memberof": "src/component/cache/s3-unpacked-driver.js~S3UnpackedDriver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache/s3-unpacked-driver.js~S3UnpackedDriver#_removePackageFile",
    "access": "private",
    "description": "",
    "lineNumber": 77,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 83,
    "kind": "method",
    "name": "_upload",
    "memberof": "src/component/cache/s3-unpacked-driver.js~S3UnpackedDriver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache/s3-unpacked-driver.js~S3UnpackedDriver#_upload",
    "access": "private",
    "description": "",
    "lineNumber": 85,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 84,
    "kind": "method",
    "name": "_getAndSaveS3Object",
    "memberof": "src/component/cache/s3-unpacked-driver.js~S3UnpackedDriver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache/s3-unpacked-driver.js~S3UnpackedDriver#_getAndSaveS3Object",
    "access": null,
    "description": "Get S3 object and save it to local path",
    "lineNumber": 109,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "objectKey",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "pathToSave",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 85,
    "kind": "file",
    "name": "src/component/cache/void-driver.js",
    "content": "'use strict';\n\nconst AbstractDriver = require('./abstract-driver');\n\n/**\n * Void cache driver\n */\nclass VoidDriver extends AbstractDriver {\n  /**\n   * @returns {string}\n   */\n  get name() {\n    return 'void';\n  }\n\n  /**\n   * @returns {Promise}\n   *\n   * @private\n   */\n  _upload() {\n    return Promise.resolve();\n  }\n  \n  /**\n   * @returns {Promise}\n   *\n   * @private\n   */\n  _download() {\n    return Promise.resolve();\n  }\n}\n\nmodule.exports = VoidDriver;\n",
    "static": true,
    "longname": "src/component/cache/void-driver.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 86,
    "kind": "class",
    "name": "VoidDriver",
    "memberof": "src/component/cache/void-driver.js",
    "static": true,
    "longname": "src/component/cache/void-driver.js~VoidDriver",
    "access": null,
    "export": true,
    "importPath": "recink/src/component/cache/void-driver.js",
    "importStyle": "VoidDriver",
    "description": "Void cache driver",
    "lineNumber": 8,
    "interface": false,
    "extends": [
      "src/component/cache/abstract-driver.js~AbstractDriver"
    ]
  },
  {
    "__docId__": 87,
    "kind": "get",
    "name": "name",
    "memberof": "src/component/cache/void-driver.js~VoidDriver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache/void-driver.js~VoidDriver#name",
    "access": null,
    "description": "",
    "lineNumber": 12,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 88,
    "kind": "method",
    "name": "_upload",
    "memberof": "src/component/cache/void-driver.js~VoidDriver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache/void-driver.js~VoidDriver#_upload",
    "access": "private",
    "description": "",
    "lineNumber": 21,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 89,
    "kind": "method",
    "name": "_download",
    "memberof": "src/component/cache/void-driver.js~VoidDriver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache/void-driver.js~VoidDriver#_download",
    "access": "private",
    "description": "",
    "lineNumber": 30,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 90,
    "kind": "file",
    "name": "src/component/cache-component.js",
    "content": "'use strict';\n\nconst npmEvents = require('./npm/events');\nconst CacheFactory = require('./cache/factory');\nconst DependencyBasedComponent = require('./dependency-based-component');\nconst Spinner = require('./helper/spinner');\nconst cacheEvents = require('./cache/events');\nconst prettyBytes = require('pretty-bytes');\nconst SequentialPromise = require('./helper/sequential-promise');\n\n/**\n * Cache component\n */\nclass CacheComponent extends DependencyBasedComponent {\n  /**\n   * @param {*} args\n   */\n  constructor(...args) {\n    super(...args);\n    \n    this._caches = [];\n  }\n  \n  /**\n   * @returns {string}\n   */\n  get name() {\n    return 'cache';\n  }\n  \n  /**\n   * @returns {string[]}\n   */\n  get dependencies() {\n    return [];\n  }\n\n  /**\n   * @returns {AbstractDriver[]}\n   */\n  get caches() {\n    return this._caches;\n  }\n\n  /**\n   * @param {Emitter} emitter\n   * \n   * @returns {Promise}\n   */\n  init(emitter) {\n    return Promise.all([\n      this._initCaches(emitter),\n      this._initNpmCache(emitter)\n    ]);\n  }\n\n  /**\n   * @param {Emitter} emitter\n   * \n   * @returns {Promise}\n   */\n  teardown(emitter) {\n    if (this.caches.length <= 0) {\n      return Promise.resolve();\n    }\n\n    return SequentialPromise.all(this.caches.map(cache => {\n      return () => this._uploadCache(cache);\n    }));\n  }\n\n  /**\n   * @param {Emitter} emitter\n   * \n   * @returns {Promise}\n   * \n   * @private\n   */\n  _initCaches(emitter) {\n    const cachePaths = this.container.get('paths', []);\n\n    if (cachePaths.length <= 0) {\n      return Promise.resolve();\n    }\n\n    return SequentialPromise.all(cachePaths.map(cacheDir => {\n      return () => {\n        const cache = this._createCache(cacheDir);\n\n        this.caches.push(cache);\n\n        return this._downloadCache(cache);\n      };\n    }));\n  }\n\n  /**\n   * @param {Emitter} emitter\n   * \n   * @returns {Promise}\n   * \n   * @private\n   */\n  _initNpmCache(emitter) {\n    const enabled = this.container.get('npm', true);\n\n    if (!enabled || !emitter.component('npm')) {\n      return Promise.resolve();\n    }\n\n    emitter.onBlocking(npmEvents.npm.cache.init, cacheDir => {\n      const npmCache = this._createCache(cacheDir);\n\n      this.caches.push(npmCache);\n\n      return this._downloadCache(npmCache);\n    });\n\n    return Promise.resolve();\n  }\n\n  /**\n   * @param {string} cacheDir\n   *\n   * @returns {AbstractDriver}\n   *\n   * @private\n   */\n  _createCache(cacheDir) {\n    return CacheFactory.create(\n      this.container.get('driver'),\n      cacheDir,\n      ...this.container.get('options', [])\n    );\n  }\n\n  /**\n   * @param {AbstractDriver} cache \n   * \n   * @returns {Promise}\n   * \n   * @private\n   */\n  _downloadCache(cache) {\n    const spinner = new Spinner(`Downloading caches from #${ cache.name }`);\n      \n    return spinner.then(\n      `Caches downloaded to ${ cache.cacheDir }`\n    ).catch(\n      `Failed to download caches to ${ cache.cacheDir }`\n    ).promise(\n      this._trackProgress(cache, spinner).download()\n    );\n  }\n\n  /**\n   * @param {AbstractDriver} cache \n   * \n   * @returns {Promise}\n   * \n   * @private\n   */\n  _uploadCache(cache) {\n    const spinner = new Spinner(`Uploading caches to #${ cache.name }`);\n      \n    return spinner.then(\n      `Caches uploaded from ${ cache.cacheDir }`\n    ).catch(\n      `Failed to upload caches from ${ cache.cacheDir }`\n    ).promise(\n      this._trackProgress(cache, spinner).upload()\n    );\n  }\n  \n  /**\n   * @param {EventEmitter} emitter\n   * @param {ora} spinner\n   *\n   * @returns {EventEmitter}\n   *\n   * @private\n   */\n  _trackProgress(emitter, spinner) {\n    emitter.on(cacheEvents.cache.upload.progress, payload => {\n      const { amount, total } = payload;\n      \n      spinner.prepend(`[${ prettyBytes(amount) }/${ prettyBytes(total) }]`);\n    });\n    \n    spinner.prepend(`[0/0]`);\n    \n    return emitter;\n  }\n}\n\nmodule.exports = CacheComponent;\n",
    "static": true,
    "longname": "src/component/cache-component.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 91,
    "kind": "class",
    "name": "CacheComponent",
    "memberof": "src/component/cache-component.js",
    "static": true,
    "longname": "src/component/cache-component.js~CacheComponent",
    "access": null,
    "export": true,
    "importPath": "recink/src/component/cache-component.js",
    "importStyle": "CacheComponent",
    "description": "Cache component",
    "lineNumber": 14,
    "interface": false,
    "extends": [
      "src/component/dependency-based-component.js~DependencyBasedComponent"
    ]
  },
  {
    "__docId__": 92,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/component/cache-component.js~CacheComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache-component.js~CacheComponent#constructor",
    "access": null,
    "description": "",
    "lineNumber": 18,
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "args",
        "description": ""
      }
    ]
  },
  {
    "__docId__": 93,
    "kind": "member",
    "name": "_caches",
    "memberof": "src/component/cache-component.js~CacheComponent",
    "static": false,
    "longname": "src/component/cache-component.js~CacheComponent#_caches",
    "access": null,
    "description": null,
    "lineNumber": 21,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*[]"
      ]
    }
  },
  {
    "__docId__": 94,
    "kind": "get",
    "name": "name",
    "memberof": "src/component/cache-component.js~CacheComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache-component.js~CacheComponent#name",
    "access": null,
    "description": "",
    "lineNumber": 27,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 95,
    "kind": "get",
    "name": "dependencies",
    "memberof": "src/component/cache-component.js~CacheComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache-component.js~CacheComponent#dependencies",
    "access": null,
    "description": "",
    "lineNumber": 34,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string[]}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string[]"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*[]"
      ]
    }
  },
  {
    "__docId__": 96,
    "kind": "get",
    "name": "caches",
    "memberof": "src/component/cache-component.js~CacheComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache-component.js~CacheComponent#caches",
    "access": null,
    "description": "",
    "lineNumber": 41,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{AbstractDriver[]}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "AbstractDriver[]"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 97,
    "kind": "method",
    "name": "init",
    "memberof": "src/component/cache-component.js~CacheComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache-component.js~CacheComponent#init",
    "access": null,
    "description": "",
    "lineNumber": 50,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Emitter"
        ],
        "spread": false,
        "optional": false,
        "name": "emitter",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 98,
    "kind": "method",
    "name": "teardown",
    "memberof": "src/component/cache-component.js~CacheComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache-component.js~CacheComponent#teardown",
    "access": null,
    "description": "",
    "lineNumber": 62,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Emitter"
        ],
        "spread": false,
        "optional": false,
        "name": "emitter",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 99,
    "kind": "method",
    "name": "_initCaches",
    "memberof": "src/component/cache-component.js~CacheComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache-component.js~CacheComponent#_initCaches",
    "access": "private",
    "description": "",
    "lineNumber": 79,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Emitter"
        ],
        "spread": false,
        "optional": false,
        "name": "emitter",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 100,
    "kind": "method",
    "name": "_initNpmCache",
    "memberof": "src/component/cache-component.js~CacheComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache-component.js~CacheComponent#_initNpmCache",
    "access": "private",
    "description": "",
    "lineNumber": 104,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Emitter"
        ],
        "spread": false,
        "optional": false,
        "name": "emitter",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 101,
    "kind": "method",
    "name": "_createCache",
    "memberof": "src/component/cache-component.js~CacheComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache-component.js~CacheComponent#_createCache",
    "access": "private",
    "description": "",
    "lineNumber": 129,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{AbstractDriver}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "cacheDir",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "AbstractDriver"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 102,
    "kind": "method",
    "name": "_downloadCache",
    "memberof": "src/component/cache-component.js~CacheComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache-component.js~CacheComponent#_downloadCache",
    "access": "private",
    "description": "",
    "lineNumber": 144,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "AbstractDriver"
        ],
        "spread": false,
        "optional": false,
        "name": "cache",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 103,
    "kind": "method",
    "name": "_uploadCache",
    "memberof": "src/component/cache-component.js~CacheComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache-component.js~CacheComponent#_uploadCache",
    "access": "private",
    "description": "",
    "lineNumber": 163,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "AbstractDriver"
        ],
        "spread": false,
        "optional": false,
        "name": "cache",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 104,
    "kind": "method",
    "name": "_trackProgress",
    "memberof": "src/component/cache-component.js~CacheComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/cache-component.js~CacheComponent#_trackProgress",
    "access": "private",
    "description": "",
    "lineNumber": 183,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{EventEmitter}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "EventEmitter"
        ],
        "spread": false,
        "optional": false,
        "name": "emitter",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "ora"
        ],
        "spread": false,
        "optional": false,
        "name": "spinner",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "EventEmitter"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 105,
    "kind": "file",
    "name": "src/component/config-based-component.js",
    "content": "'use strict';\n\nconst path = require('path');\nconst Container = require('../container');\nconst AbstractComponent = require('./abstract-component');\n\n/**\n * Abstract configuration aware component\n */\nclass ConfigBasedComponent extends AbstractComponent {\n  /**\n   * @param {String} configPath\n   */\n  constructor(configPath = null) {\n    super();\n    \n    this._container = null;\n    this._readyPromise = Promise.resolve();\n    this._configPath = configPath || `${ ConfigBasedComponent.MAIN_CONFIG_KEY }.${ this.name }`;\n    this._configFileRealPath = null;\n  }\n\n  /**\n   * @returns {*}\n   */\n  get container() {\n    return this._container;\n  }\n  \n  /**\n   * @returns {String}\n   */\n  get configPath() {\n    return this._configPath;\n  }\n\n  /**\n   * @returns {String}\n   */\n  get configFileRealPath() {\n    return this._configFileRealPath;\n  }\n\n  /**\n   * @param {Emitter} emitter\n   *\n   * @returns {Promise}\n   */\n  subscribe(emitter) {\n    this._readyPromise = this.waitConfig(emitter)\n      .then(container => {\n        this._container = container;\n      });\n      \n    return Promise.resolve();\n  }\n  \n  /**\n   * @returns {Promise}\n   */\n  ready() {\n    return this._readyPromise;\n  }\n  \n  /**\n   * @param {Emitter} emitter\n   *\n   * @returns {Promise}\n   */\n  waitConfig(emitter) {\n    return new Promise((resolve, reject) => {\n      emitter.on(this.events.config.load, (container, configFile) => {\n        if (container.has(this.configPath)) {\n          return this.prepareConfig(\n            container.get(this.configPath, {}),\n            configFile\n          ).then(container => {\n            this.setActive(true);\n            \n            resolve(container);\n          }).catch(error => reject(error));\n        }\n        \n        resolve(null);\n      });\n    });\n  }\n  \n  /**\n   * @param {*} config\n   * @param {String} configFile\n   * @returns {Container}\n   */\n  prepareConfig(config, configFile) {\n    this._configFileRealPath = path.resolve(configFile);\n    \n    return Promise.resolve(this.createContainer(\n      Object.assign({\n        __file: this._configFileRealPath,\n        __dir: path.dirname(this._configFileRealPath),\n      }, config)\n    ));\n  }\n  \n  /**\n   * @param {*} config\n   * @returns {Container}\n   */\n  createContainer(config) {\n    return new Container(config);\n  }\n  \n  /**\n   * @returns {string}\n   */\n  static get MAIN_CONFIG_KEY() {\n    return '$';\n  }\n}\n\nmodule.exports = ConfigBasedComponent;\n",
    "static": true,
    "longname": "src/component/config-based-component.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 106,
    "kind": "class",
    "name": "ConfigBasedComponent",
    "memberof": "src/component/config-based-component.js",
    "static": true,
    "longname": "src/component/config-based-component.js~ConfigBasedComponent",
    "access": null,
    "export": true,
    "importPath": "recink/src/component/config-based-component.js",
    "importStyle": "ConfigBasedComponent",
    "description": "Abstract configuration aware component",
    "lineNumber": 10,
    "interface": false,
    "extends": [
      "src/component/abstract-component.js~AbstractComponent"
    ]
  },
  {
    "__docId__": 107,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/component/config-based-component.js~ConfigBasedComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/config-based-component.js~ConfigBasedComponent#constructor",
    "access": null,
    "description": "",
    "lineNumber": 14,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "configPath",
        "description": ""
      }
    ]
  },
  {
    "__docId__": 108,
    "kind": "member",
    "name": "_container",
    "memberof": "src/component/config-based-component.js~ConfigBasedComponent",
    "static": false,
    "longname": "src/component/config-based-component.js~ConfigBasedComponent#_container",
    "access": null,
    "description": null,
    "lineNumber": 17,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 109,
    "kind": "member",
    "name": "_readyPromise",
    "memberof": "src/component/config-based-component.js~ConfigBasedComponent",
    "static": false,
    "longname": "src/component/config-based-component.js~ConfigBasedComponent#_readyPromise",
    "access": null,
    "description": null,
    "lineNumber": 18,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 110,
    "kind": "member",
    "name": "_configPath",
    "memberof": "src/component/config-based-component.js~ConfigBasedComponent",
    "static": false,
    "longname": "src/component/config-based-component.js~ConfigBasedComponent#_configPath",
    "access": null,
    "description": null,
    "lineNumber": 19,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 111,
    "kind": "member",
    "name": "_configFileRealPath",
    "memberof": "src/component/config-based-component.js~ConfigBasedComponent",
    "static": false,
    "longname": "src/component/config-based-component.js~ConfigBasedComponent#_configFileRealPath",
    "access": null,
    "description": null,
    "lineNumber": 20,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 112,
    "kind": "get",
    "name": "container",
    "memberof": "src/component/config-based-component.js~ConfigBasedComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/config-based-component.js~ConfigBasedComponent#container",
    "access": null,
    "description": "",
    "lineNumber": 26,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{*}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "*"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 113,
    "kind": "get",
    "name": "configPath",
    "memberof": "src/component/config-based-component.js~ConfigBasedComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/config-based-component.js~ConfigBasedComponent#configPath",
    "access": null,
    "description": "",
    "lineNumber": 33,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{String}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 114,
    "kind": "get",
    "name": "configFileRealPath",
    "memberof": "src/component/config-based-component.js~ConfigBasedComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/config-based-component.js~ConfigBasedComponent#configFileRealPath",
    "access": null,
    "description": "",
    "lineNumber": 40,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{String}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 115,
    "kind": "method",
    "name": "subscribe",
    "memberof": "src/component/config-based-component.js~ConfigBasedComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/config-based-component.js~ConfigBasedComponent#subscribe",
    "access": null,
    "description": "",
    "lineNumber": 49,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Emitter"
        ],
        "spread": false,
        "optional": false,
        "name": "emitter",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 116,
    "kind": "member",
    "name": "_readyPromise",
    "memberof": "src/component/config-based-component.js~ConfigBasedComponent",
    "static": false,
    "longname": "src/component/config-based-component.js~ConfigBasedComponent#_readyPromise",
    "access": null,
    "description": null,
    "lineNumber": 50,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 117,
    "kind": "member",
    "name": "_container",
    "memberof": "src/component/config-based-component.js~ConfigBasedComponent",
    "static": false,
    "longname": "src/component/config-based-component.js~ConfigBasedComponent#_container",
    "access": null,
    "description": null,
    "lineNumber": 52,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 118,
    "kind": "method",
    "name": "ready",
    "memberof": "src/component/config-based-component.js~ConfigBasedComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/config-based-component.js~ConfigBasedComponent#ready",
    "access": null,
    "description": "",
    "lineNumber": 61,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 119,
    "kind": "method",
    "name": "waitConfig",
    "memberof": "src/component/config-based-component.js~ConfigBasedComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/config-based-component.js~ConfigBasedComponent#waitConfig",
    "access": null,
    "description": "",
    "lineNumber": 70,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Emitter"
        ],
        "spread": false,
        "optional": false,
        "name": "emitter",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 120,
    "kind": "method",
    "name": "prepareConfig",
    "memberof": "src/component/config-based-component.js~ConfigBasedComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/config-based-component.js~ConfigBasedComponent#prepareConfig",
    "access": null,
    "description": "",
    "lineNumber": 94,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Container}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "config",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "configFile",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Container"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 121,
    "kind": "member",
    "name": "_configFileRealPath",
    "memberof": "src/component/config-based-component.js~ConfigBasedComponent",
    "static": false,
    "longname": "src/component/config-based-component.js~ConfigBasedComponent#_configFileRealPath",
    "access": null,
    "description": null,
    "lineNumber": 95,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 122,
    "kind": "method",
    "name": "createContainer",
    "memberof": "src/component/config-based-component.js~ConfigBasedComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/config-based-component.js~ConfigBasedComponent#createContainer",
    "access": null,
    "description": "",
    "lineNumber": 109,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Container}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "config",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Container"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 123,
    "kind": "get",
    "name": "MAIN_CONFIG_KEY",
    "memberof": "src/component/config-based-component.js~ConfigBasedComponent",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/component/config-based-component.js~ConfigBasedComponent.MAIN_CONFIG_KEY",
    "access": null,
    "description": "",
    "lineNumber": 116,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 124,
    "kind": "file",
    "name": "src/component/coverage/abstract-driver.js",
    "content": "'use strict';\n\n/**\n * Abstract coverage storage driver\n */\nclass AbstractDriver {\n  /**\n   * @param {string} name\n   *\n   * @returns {Promise}\n   */\n  read(name) {\n    return this._read(name)\n      .then(content => {\n        if (!content) {\n          return Promise.resolve(null);\n        }\n        \n        return Promise.resolve(JSON.parse(content));\n      });\n  }\n  \n  /**\n   * @param {string} name\n   * @param {*} coverage\n   *\n   * @returns {Promise}\n   */\n  write(name, coverage) {\n    return this._write(name, JSON.stringify(coverage));\n  }\n\n  /**\n   * @param {string} name\n   * \n   * @returns {Promise}\n   *\n   * @private\n   */\n  _read(name) {\n    return Promise.reject(new Error(\n      `${ this.constructor.name }._read(name) not implemented!`\n    ));\n  }\n  \n  /**\n   * @param {string} name\n   * @param {string} content\n   * \n   * @returns {Promise}\n   *\n   * @private\n   */\n  _write(name, content) {\n    return Promise.reject(new Error(\n      `${ this.constructor.name }._write(name, content) not implemented!`\n    ));\n  }\n}\n\nmodule.exports = AbstractDriver;\n",
    "static": true,
    "longname": "src/component/coverage/abstract-driver.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 125,
    "kind": "class",
    "name": "AbstractDriver",
    "memberof": "src/component/coverage/abstract-driver.js",
    "static": true,
    "longname": "src/component/coverage/abstract-driver.js~AbstractDriver",
    "access": null,
    "export": true,
    "importPath": "recink/src/component/coverage/abstract-driver.js",
    "importStyle": "AbstractDriver",
    "description": "Abstract coverage storage driver",
    "lineNumber": 6,
    "interface": false
  },
  {
    "__docId__": 126,
    "kind": "method",
    "name": "read",
    "memberof": "src/component/coverage/abstract-driver.js~AbstractDriver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/coverage/abstract-driver.js~AbstractDriver#read",
    "access": null,
    "description": "",
    "lineNumber": 12,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "name",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 127,
    "kind": "method",
    "name": "write",
    "memberof": "src/component/coverage/abstract-driver.js~AbstractDriver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/coverage/abstract-driver.js~AbstractDriver#write",
    "access": null,
    "description": "",
    "lineNumber": 29,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "name",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "coverage",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 128,
    "kind": "method",
    "name": "_read",
    "memberof": "src/component/coverage/abstract-driver.js~AbstractDriver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/coverage/abstract-driver.js~AbstractDriver#_read",
    "access": "private",
    "description": "",
    "lineNumber": 40,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "name",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 129,
    "kind": "method",
    "name": "_write",
    "memberof": "src/component/coverage/abstract-driver.js~AbstractDriver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/coverage/abstract-driver.js~AbstractDriver#_write",
    "access": "private",
    "description": "",
    "lineNumber": 54,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "name",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "content",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 130,
    "kind": "file",
    "name": "src/component/coverage/events.js",
    "content": "'use strict';\n\nconst dot = require('dot-object');\n\n/**\n * Coverage component events\n */\nconst events = {};\n\nevents.$ = [\n  'coverage.report.create',\n  'coverage.report.compare',\n].map(eventPath => {\n  dot.str(eventPath, eventPath, events);\n  \n  return eventPath;\n});\n\nmodule.exports = events;\n",
    "static": true,
    "longname": "src/component/coverage/events.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 131,
    "kind": "variable",
    "name": "events",
    "memberof": "src/component/coverage/events.js",
    "static": true,
    "longname": "src/component/coverage/events.js~events",
    "access": null,
    "export": true,
    "importPath": "recink/src/component/coverage/events.js",
    "importStyle": "events",
    "description": "Coverage component events",
    "lineNumber": 8,
    "type": {
      "types": [
        "{}"
      ]
    }
  },
  {
    "__docId__": 132,
    "kind": "file",
    "name": "src/component/coverage/factory.js",
    "content": "'use strict';\n\nconst AbstractDriver = require('./abstract-driver');\n\n/**\n * Coverage storage factory\n */\nclass Factory {  \n  /**\n   * @param {string} name\n   * @param {*} args\n   *\n   * @returns {AbstractDriver}\n   */\n  static create(name, ...args) {\n    const DriverImplementation = require(`./${ name }-driver`);\n    const driver = new DriverImplementation(...args);\n    \n    if (!(driver instanceof AbstractDriver)) {\n      throw new Error(`${ name } driver should be an implementation of AbstractDriver`);\n    }\n    \n    return driver;\n  }\n  \n  /**\n   * @param {*} args\n   *\n   * @returns {VoidDriver}\n   */\n  static s3(...args) {\n    return this.create('s3', ...args);\n  }\n  \n  /**\n   * @param {*} args\n   *\n   * @returns {VolatileDriver}\n   */\n  static volatile(...args) {\n    return this.create('volatile', ...args);\n  }\n}\n\nmodule.exports = Factory;\n",
    "static": true,
    "longname": "src/component/coverage/factory.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 133,
    "kind": "class",
    "name": "Factory",
    "memberof": "src/component/coverage/factory.js",
    "static": true,
    "longname": "src/component/coverage/factory.js~Factory",
    "access": null,
    "export": true,
    "importPath": "recink/src/component/coverage/factory.js",
    "importStyle": "Factory",
    "description": "Coverage storage factory",
    "lineNumber": 8,
    "interface": false
  },
  {
    "__docId__": 134,
    "kind": "method",
    "name": "create",
    "memberof": "src/component/coverage/factory.js~Factory",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/component/coverage/factory.js~Factory.create",
    "access": null,
    "description": "",
    "lineNumber": 15,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{AbstractDriver}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "name",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "args",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "AbstractDriver"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 135,
    "kind": "method",
    "name": "s3",
    "memberof": "src/component/coverage/factory.js~Factory",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/component/coverage/factory.js~Factory.s3",
    "access": null,
    "description": "",
    "lineNumber": 31,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{VoidDriver}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "args",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "VoidDriver"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 136,
    "kind": "method",
    "name": "volatile",
    "memberof": "src/component/coverage/factory.js~Factory",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/component/coverage/factory.js~Factory.volatile",
    "access": null,
    "description": "",
    "lineNumber": 40,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{VolatileDriver}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "args",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "VolatileDriver"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 137,
    "kind": "file",
    "name": "src/component/coverage/s3-driver.js",
    "content": "'use strict';\n\nconst path = require('path');\nconst AbstractDriver = require('./abstract-driver');\nconst AwsCredentials = require('../helper/aws-credentials');\n\n/**\n * AWS S3 coverage storage driver\n */\nclass S3Driver extends AbstractDriver {\n  /**\n   * @param {string} path\n   * @param {*} options\n   * @param {boolean} includeNodeVersion\n   */\n  constructor(path, options, includeNodeVersion = true) {\n    super();\n    \n    this._path = path;\n    this._options = options;\n    this._includeNodeVersion = includeNodeVersion;\n    this._awsCredentials = new AwsCredentials(this.options);\n    this._client = false;\n  }\n\n  /**\n   * @returns {boolean}\n   */\n  get includeNodeVersion() {\n    return this._includeNodeVersion;\n  }\n\n  /**\n   * @returns {string}\n   */\n  get path() {\n    return this._path;\n  }\n\n  /**\n   * Get AWS.S3 client promise\n   * @return {Promise}\n   */\n  get client() {\n    if (this._client) {\n      return Promise.resolve(this._client);\n    }\n\n    return this._awsCredentials.getConfig().then(AWS => Promise.resolve(new AWS.S3()));\n  }\n\n  /**\n   * @returns {*}\n   */\n  get options() {\n    return this._options;\n  }\n\n  /**\n   * @param {string} name\n   * @returns {Promise}\n   * @private\n   */\n  _read(name) {\n    const { Bucket, Key } = this._s3Payload(name);\n\n    return this.client\n      .then(S3 => S3.getObject({ Bucket, Key }).promise())\n      .then(data => Promise.resolve(data.Body.toString()))\n      .catch(error => {\n        if (this._isMissingObject(error)) {\n          return Promise.resolve(null);\n        }\n\n        return Promise.reject(error);\n      });\n  }\n\n  /**\n   * @param {string} name\n   * @param {string} content\n   * @returns {Promise}\n   * @private\n   */\n  _write(name, content) {\n    const Body = content;\n    const { Bucket, Key } = this._s3Payload(name);\n    \n    return this.client\n      .then(S3 => S3.upload({ Bucket, Key, Body }).promise())\n      .then(data => Promise.resolve());\n  }\n\n  /**\n   * @param {*} error\n   *\n   * @returns {boolean}\n   * \n   * @private\n   */\n  _isMissingObject(error) {\n    return [ 'NoSuchKey', 'NotFound' ].indexOf(error.code) !== -1;\n  }\n  \n  /**\n   * @param {string} name\n   *\n   * @returns {*}\n   *\n   * @private\n   */\n  _s3Payload(name) {\n    const matches = this.path.match(\n      /^(?:s3:\\/\\/|\\/)?([^\\/]+)(?:\\/(.*))?$/i\n    );\n    \n    if (matches.length === 2) {\n      matches.push('');\n    }\n    \n    const [ , Bucket, keyPrefix ] = matches;\n    \n    const Key = path.join(\n      keyPrefix || '',\n      this.includeNodeVersion ? process.version : '',\n      name\n    ).replace(/\\\\+/g, '/'); // ensure path delimiter set to slash\n    \n    return { Bucket, Key };\n  }\n}\n\nmodule.exports = S3Driver;\n",
    "static": true,
    "longname": "src/component/coverage/s3-driver.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 138,
    "kind": "class",
    "name": "S3Driver",
    "memberof": "src/component/coverage/s3-driver.js",
    "static": true,
    "longname": "src/component/coverage/s3-driver.js~S3Driver",
    "access": null,
    "export": true,
    "importPath": "recink/src/component/coverage/s3-driver.js",
    "importStyle": "S3Driver",
    "description": "AWS S3 coverage storage driver",
    "lineNumber": 10,
    "interface": false,
    "extends": [
      "src/component/coverage/abstract-driver.js~AbstractDriver"
    ]
  },
  {
    "__docId__": 139,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/component/coverage/s3-driver.js~S3Driver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/coverage/s3-driver.js~S3Driver#constructor",
    "access": null,
    "description": "",
    "lineNumber": 16,
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "path",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "options",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "boolean"
        ],
        "spread": false,
        "optional": false,
        "name": "includeNodeVersion",
        "description": ""
      }
    ]
  },
  {
    "__docId__": 140,
    "kind": "member",
    "name": "_path",
    "memberof": "src/component/coverage/s3-driver.js~S3Driver",
    "static": false,
    "longname": "src/component/coverage/s3-driver.js~S3Driver#_path",
    "access": null,
    "description": null,
    "lineNumber": 19,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 141,
    "kind": "member",
    "name": "_options",
    "memberof": "src/component/coverage/s3-driver.js~S3Driver",
    "static": false,
    "longname": "src/component/coverage/s3-driver.js~S3Driver#_options",
    "access": null,
    "description": null,
    "lineNumber": 20,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 142,
    "kind": "member",
    "name": "_includeNodeVersion",
    "memberof": "src/component/coverage/s3-driver.js~S3Driver",
    "static": false,
    "longname": "src/component/coverage/s3-driver.js~S3Driver#_includeNodeVersion",
    "access": null,
    "description": null,
    "lineNumber": 21,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 143,
    "kind": "member",
    "name": "_awsCredentials",
    "memberof": "src/component/coverage/s3-driver.js~S3Driver",
    "static": false,
    "longname": "src/component/coverage/s3-driver.js~S3Driver#_awsCredentials",
    "access": null,
    "description": null,
    "lineNumber": 22,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 144,
    "kind": "member",
    "name": "_client",
    "memberof": "src/component/coverage/s3-driver.js~S3Driver",
    "static": false,
    "longname": "src/component/coverage/s3-driver.js~S3Driver#_client",
    "access": null,
    "description": null,
    "lineNumber": 23,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 145,
    "kind": "get",
    "name": "includeNodeVersion",
    "memberof": "src/component/coverage/s3-driver.js~S3Driver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/coverage/s3-driver.js~S3Driver#includeNodeVersion",
    "access": null,
    "description": "",
    "lineNumber": 29,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{boolean}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "boolean"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 146,
    "kind": "get",
    "name": "path",
    "memberof": "src/component/coverage/s3-driver.js~S3Driver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/coverage/s3-driver.js~S3Driver#path",
    "access": null,
    "description": "",
    "lineNumber": 36,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 147,
    "kind": "get",
    "name": "client",
    "memberof": "src/component/coverage/s3-driver.js~S3Driver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/coverage/s3-driver.js~S3Driver#client",
    "access": null,
    "description": "Get AWS.S3 client promise",
    "lineNumber": 44,
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 148,
    "kind": "get",
    "name": "options",
    "memberof": "src/component/coverage/s3-driver.js~S3Driver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/coverage/s3-driver.js~S3Driver#options",
    "access": null,
    "description": "",
    "lineNumber": 55,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{*}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "*"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 149,
    "kind": "method",
    "name": "_read",
    "memberof": "src/component/coverage/s3-driver.js~S3Driver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/coverage/s3-driver.js~S3Driver#_read",
    "access": "private",
    "description": "",
    "lineNumber": 64,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "name",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 150,
    "kind": "method",
    "name": "_write",
    "memberof": "src/component/coverage/s3-driver.js~S3Driver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/coverage/s3-driver.js~S3Driver#_write",
    "access": "private",
    "description": "",
    "lineNumber": 85,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "name",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "content",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 151,
    "kind": "method",
    "name": "_isMissingObject",
    "memberof": "src/component/coverage/s3-driver.js~S3Driver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/coverage/s3-driver.js~S3Driver#_isMissingObject",
    "access": "private",
    "description": "",
    "lineNumber": 101,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{boolean}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "error",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "boolean"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 152,
    "kind": "method",
    "name": "_s3Payload",
    "memberof": "src/component/coverage/s3-driver.js~S3Driver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/coverage/s3-driver.js~S3Driver#_s3Payload",
    "access": "private",
    "description": "",
    "lineNumber": 112,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{*}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "name",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "*"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 153,
    "kind": "file",
    "name": "src/component/coverage/volatile-driver.js",
    "content": "'use strict';\n\nconst AbstractDriver = require('./abstract-driver');\nconst path = require('path');\nconst fse = require('fs-extra');\nconst os = require('os');\nconst fs = require('fs');\nconst pify = require('pify');\n\n/**\n * Volatile coverage storage driver\n */\nclass VolatileDriver extends AbstractDriver {\n  /**\n   * @param {string} name\n   * \n   * @returns {Promise}\n   *\n   * @private\n   */\n  _read(name) {\n    const file = this._storageFile(name);\n    \n    return fse.pathExists(file)\n      .then(exists => {\n        if (!exists) {\n          return Promise.resolve(null);\n        }\n        \n        return pify(fs.readFile)(file);\n      });\n  }\n  \n  /**\n   * @param {string} name\n   * @param {string} content\n   * \n   * @returns {Promise}\n   *\n   * @private\n   */\n  _write(name, content) {\n    return fse.outputFile(this._storageFile(name), content);\n  }\n  \n  /**\n   * @param {string} name\n   * \n   * @returns {string}\n   *\n   * @private\n   */\n  _storageFile(name) {\n    return path.join(os.tmpDir(), '__recink_coverage_volatile__', name);\n  }\n}\n\nmodule.exports = VolatileDriver;\n",
    "static": true,
    "longname": "src/component/coverage/volatile-driver.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 154,
    "kind": "class",
    "name": "VolatileDriver",
    "memberof": "src/component/coverage/volatile-driver.js",
    "static": true,
    "longname": "src/component/coverage/volatile-driver.js~VolatileDriver",
    "access": null,
    "export": true,
    "importPath": "recink/src/component/coverage/volatile-driver.js",
    "importStyle": "VolatileDriver",
    "description": "Volatile coverage storage driver",
    "lineNumber": 13,
    "interface": false,
    "extends": [
      "src/component/coverage/abstract-driver.js~AbstractDriver"
    ]
  },
  {
    "__docId__": 155,
    "kind": "method",
    "name": "_read",
    "memberof": "src/component/coverage/volatile-driver.js~VolatileDriver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/coverage/volatile-driver.js~VolatileDriver#_read",
    "access": "private",
    "description": "",
    "lineNumber": 21,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "name",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 156,
    "kind": "method",
    "name": "_write",
    "memberof": "src/component/coverage/volatile-driver.js~VolatileDriver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/coverage/volatile-driver.js~VolatileDriver#_write",
    "access": "private",
    "description": "",
    "lineNumber": 42,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "name",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "content",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 157,
    "kind": "method",
    "name": "_storageFile",
    "memberof": "src/component/coverage/volatile-driver.js~VolatileDriver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/coverage/volatile-driver.js~VolatileDriver#_storageFile",
    "access": "private",
    "description": "",
    "lineNumber": 53,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "name",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 158,
    "kind": "file",
    "name": "src/component/coverage-component.js",
    "content": "'use strict';\n\n/* eslint no-useless-call: 0 */\n\nconst DependencyBasedComponent = require('./dependency-based-component');\nconst istanbul = require('istanbul');\nconst testEvents = require('./test/events');\nconst events = require('./coverage/events');\nconst ContainerTransformer = require('./helper/container-transformer');\nconst path = require('path');\nconst fs = require('fs');\nconst pify = require('pify');\nconst StorageFactory = require('./coverage/factory');\nconst ModuleCompile = require('./helper/module-compile');\n\n/**\n * Coverage component\n */\nclass CoverageComponent extends DependencyBasedComponent {\n  /**\n   * @param {*} args\n   */\n  constructor(...args) {\n    super(...args);\n    \n    this._storage = null;\n  }\n  \n  /**\n   * @returns {string}\n   */\n  get name() {\n    return 'coverage';\n  }\n  \n  /**\n   * @returns {string[]}\n   */\n  get dependencies() {\n    return [ 'test' ];\n  }\n  \n  /**\n   * @returns {AbstractDriver}\n   *\n   * @private\n   */\n  get _comparatorStorage() {\n    if (this._storage) {\n      return this._storage;\n    }\n    \n    const driver = this.container.get('compare.storage.driver', 'volatile');\n    const options = this.container.get('compare.storage.options', []);\n    \n    this._storage = StorageFactory.create(driver, ...options);\n    \n    return this._storage;\n  }\n  \n  /**\n   * @param {istanbul.Collector} collector\n   *\n   * @returns {Promise}\n   * \n   * @private\n   */\n  _doCompare(collector) {\n    const allowedDelta = Math.abs(parseFloat(\n      this.container.get('compare.negative-delta', 100)\n    ));\n    \n    if (!allowedDelta || allowedDelta >= 100) {\n      return Promise.resolve();\n    }\n    \n    const storage = this._comparatorStorage;\n    \n    if (storage.constructor.name === 'VolatileDriver') {\n      this.logger.debug(\n        `Coverage stored in ${ storage._storageFile(CoverageComponent.COVERAGE_FILE) }`\n      );\n    }\n    \n    return storage.read(CoverageComponent.COVERAGE_FILE)\n      .then(coverage => {\n        const newCoverage = collector.getFinalCoverage();\n        \n        if (!coverage) {\n          this.logger.info(\n            this.logger.emoji.bicycle,\n            'No previous coverage info saved...'\n          );\n          \n          return storage.write(\n            CoverageComponent.COVERAGE_FILE, \n            newCoverage\n          );\n        }\n        \n        const delta = this._calculateDelta(coverage, newCoverage);\n        \n        if (delta > allowedDelta) {          \n          return Promise.reject(new Error(\n            `Coverage delta decreased ${ delta.toFixed(2) } > ${ allowedDelta.toFixed(2) }`\n          ));\n        }\n        \n        this.logger.info(\n          this.logger.emoji.bicycle,\n          `Coverage delta checked ${ delta.toFixed(2) } >= ${ allowedDelta.toFixed(2) }`\n        );\n        \n        return storage.write(\n          CoverageComponent.COVERAGE_FILE, \n          newCoverage\n        );\n      });\n  }\n  \n  /**\n   * @param {*} coverage\n   * @param {*} newCoverage\n   *\n   * @returns {number}\n   *\n   * @private\n   */\n  _calculateDelta(coverage, newCoverage) {\n    const summary = this._summarizeCoverage(coverage);\n    const newSummary = this._summarizeCoverage(newCoverage);\n    \n    return CoverageComponent.COVERAGE_KEYS\n      .reduce((accumulator, key) => {\n        return accumulator + \n          parseFloat(summary[key]) - \n          parseFloat((newSummary[key] || 0));\n      }, 0) / CoverageComponent.COVERAGE_KEYS.length;\n  }\n  \n  /**\n   * @param {*} coverage\n   *\n   * @returns {*}\n   *\n   * @private\n   */\n  _summarizeCoverage(coverage) {\n    const summary = {};\n    \n    const summaries = Object.keys(coverage)\n      .map(file => {\n        return istanbul.utils\n          .summarizeFileCoverage(coverage[file]);\n      });\n    \n    const summaryObj = istanbul.utils\n      .mergeSummaryObjects\n      .apply(null, summaries);\n    \n    Object.keys(summaryObj)\n      .map(key => {\n        summary[key] = summaryObj[key].pct;\n      });\n      \n    return summary;\n  }\n  \n  /**\n   * @param {*} assetsToInstrument\n   * @param {*} dispatchedAssets\n   * @param {EmitModule} module\n   *\n   * @returns {Promise}\n   * \n   * @private\n   */\n  _persistModuleBlankCoverage(assetsToInstrument, dispatchedAssets, module) {\n    if (!assetsToInstrument[module.name]) {\n      return Promise.resolve();\n    }\n    \n    const coverageVariable = this._coverageVariable(module);\n    \n    return Promise.all(\n      assetsToInstrument[module.name]\n        .filter(asset => {\n          return (dispatchedAssets[module.name] || []).indexOf(asset) === -1;\n        })\n        .map(asset => {\n          return pify(fs.readFile)(asset)\n            .then(content => {\n              const instrumenter = new istanbul.Instrumenter({ coverageVariable });\n\n              instrumenter.instrumentSync(\n                content.toString(), \n                asset\n              );\n              \n              global[coverageVariable] = global[coverageVariable] || {};\n              global[coverageVariable][asset] = instrumenter.lastFileCoverage();\n\n              return Promise.resolve();  \n            });\n        })\n    );\n  }\n  \n  /**\n   * @param {Emitter} emitter\n   * @returns {Promise}\n   * @todo split into several abstractions\n   */\n  run(emitter) {\n    return new Promise((resolve, reject) => {\n      const collector = new istanbul.Collector();\n      const reporter = new istanbul.Reporter();\n      const reporters = this.container.get('reporters', {});\n      const coverageVariables = [];\n      const assetsToInstrument = {};\n      const dispatchedAssets = {};\n      \n      Object.keys(reporters).map(reporterName => {\n        reporter.reports[reporterName] = istanbul.Report.create(reporterName, reporters[reporterName] || {});\n      });\n      \n      emitter.onBlocking(testEvents.asset.test.skip, payload => {\n        if (!this._match(payload.file)) {\n          return Promise.resolve();\n        }\n        \n        const { module, fileAbs } = payload;\n        \n        assetsToInstrument[module.name] = assetsToInstrument[module.name] || [];\n        assetsToInstrument[module.name].push(fileAbs);\n        \n        return Promise.resolve();\n      });\n      \n      emitter.onBlocking(testEvents.asset.tests.end, (mocha, module) => {\n        return this._persistModuleBlankCoverage(assetsToInstrument, dispatchedAssets, module).then(() => {\n          delete assetsToInstrument[module.name];\n          delete dispatchedAssets[module.name];\n          \n          return Promise.resolve();\n        });\n      });\n      \n      emitter.onBlocking(testEvents.asset.tests.start, (mocha, module) => {\n        return new Promise(resolve => {\n          const instrumenterCache = {};\n          const coverageVariable = this._coverageVariable(module);\n          const instrumenter = new istanbul.Instrumenter({ coverageVariable });\n          \n          coverageVariables.push(coverageVariable);\n          \n          if (mocha) {\n            mocha.loadFiles = (fn => {\n              const self = this;\n              const moduleRoot = module.container.get('root');\n              const coverableAssets = assetsToInstrument[module.name] || [];\n\n              const preprocessor = (source, filename) => {\n                if (coverableAssets.indexOf(filename) !== -1\n                  && self._match(path.relative(moduleRoot, filename))) {\n\n                  if (instrumenterCache.hasOwnProperty(filename)) {\n                    return instrumenterCache[filename];\n                  }\n                  \n                  instrumenterCache[filename] = instrumenter.instrumentSync.call(instrumenter, source, filename);\n                  dispatchedAssets[module.name] = dispatchedAssets[module.name] || [];\n                  dispatchedAssets[module.name].push(filename);\n                  \n                  return instrumenterCache[filename];\n                }\n                \n                return source;\n              };\n              \n              mocha.files.map(file => {\n                file = path.resolve(file);\n                \n                mocha.suite.emit('pre-require', global, file, mocha);\n                mocha.suite.emit('require', ModuleCompile.require(file, {}, preprocessor), file, mocha);\n                mocha.suite.emit('post-require', global, file, mocha);\n              });\n              \n              fn && fn();\n            });\n          }\n          \n          resolve();\n        });\n      });\n      \n      emitter.onBlocking(testEvents.assets.test.end, () => {        \n        coverageVariables.map(coverageVariable => {\n          collector.add(global[coverageVariable] || {});\n        });\n        \n        return emitter.emitBlocking(events.coverage.report.create, istanbul, reporter, collector)\n          .then(() => this._dumpCoverageStats(collector, reporter))\n          .then(() => emitter.emitBlocking(events.coverage.report.compare, istanbul, reporter, collector))\n          .then(() => this._doCompare(collector));\n      });\n      \n      emitter.on(testEvents.assets.test.end, () => resolve());\n    });\n  }\n  \n  /**\n   * @param {istanbul.Collector} collector\n   * @param {istanbul.Reporter} reporter\n   *\n   * @returns {Promise}\n   * \n   * @private\n   */\n  _dumpCoverageStats(collector, reporter) {\n    return new Promise(resolve => {\n      reporter.write(collector, false, () => {\n        \n        // @todo find a smarter way to indent the output (buffer it?)\n        process.stdout.write('\\n\\n');\n        \n        resolve();\n      });\n    });\n  }\n  \n  /**\n   * @param {EmitModule} module\n   *\n   * @returns {string}\n   *\n   * @private\n   */\n  _coverageVariable(module) {\n    const cleanModuleName = module.name.replace(/[^a-z0-9]/g, '_');\n    \n    return `__recink_coverage__${ cleanModuleName }__`;\n  }\n  \n  /**\n   * @param {string} file\n   *\n   * @returns {boolean}\n   * \n   * @private\n   */\n  _match(file) {\n    const pattern = this.container.get('pattern', []);\n    const ignore = this.container.get('ignore', []);\n\n    const result = pattern.filter(p => this._test(p, file)).length > 0\n      && ignore.filter(i => this._test(i, file)).length <= 0;\n      \n    return result;\n  }\n  \n  /**\n   * @param {string|RegExp} pattern\n   * @param {string} value\n   *\n   * @returns {boolean}\n   *\n   * @private\n   */\n  _test(pattern, value) {\n    if (!(pattern instanceof RegExp)) {\n      return value.indexOf(pattern.toString()) !== -1;\n    }\n    \n    return pattern.test(value);\n  }\n  \n  /**\n   * @param {*} config\n   * @param {string} configFile\n   *\n   * @returns {Container}\n   */\n  prepareConfig(config, configFile) {\n    return super.prepareConfig(config, configFile)\n      .then(container => {\n        return (new ContainerTransformer(container))\n          .addPattern('pattern')\n          .addPattern('ignore')\n          .transform();\n      });\n  }\n  \n  /**\n   * @returns {Array}\n   */\n  static get COVERAGE_KEYS() {\n    return [ 'lines', 'statements', 'functions', 'branches' ];\n  }\n  \n  /**\n   * @returns {string}\n   */\n  static get COVERAGE_FILE() {\n    return 'coverage.json';\n  }\n}\n\nmodule.exports = CoverageComponent;\n",
    "static": true,
    "longname": "src/component/coverage-component.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 159,
    "kind": "class",
    "name": "CoverageComponent",
    "memberof": "src/component/coverage-component.js",
    "static": true,
    "longname": "src/component/coverage-component.js~CoverageComponent",
    "access": null,
    "export": true,
    "importPath": "recink/src/component/coverage-component.js",
    "importStyle": "CoverageComponent",
    "description": "Coverage component",
    "lineNumber": 19,
    "interface": false,
    "extends": [
      "src/component/dependency-based-component.js~DependencyBasedComponent"
    ]
  },
  {
    "__docId__": 160,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/component/coverage-component.js~CoverageComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/coverage-component.js~CoverageComponent#constructor",
    "access": null,
    "description": "",
    "lineNumber": 23,
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "args",
        "description": ""
      }
    ]
  },
  {
    "__docId__": 161,
    "kind": "member",
    "name": "_storage",
    "memberof": "src/component/coverage-component.js~CoverageComponent",
    "static": false,
    "longname": "src/component/coverage-component.js~CoverageComponent#_storage",
    "access": null,
    "description": null,
    "lineNumber": 26,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 162,
    "kind": "get",
    "name": "name",
    "memberof": "src/component/coverage-component.js~CoverageComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/coverage-component.js~CoverageComponent#name",
    "access": null,
    "description": "",
    "lineNumber": 32,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 163,
    "kind": "get",
    "name": "dependencies",
    "memberof": "src/component/coverage-component.js~CoverageComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/coverage-component.js~CoverageComponent#dependencies",
    "access": null,
    "description": "",
    "lineNumber": 39,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string[]}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string[]"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "string[]"
      ]
    }
  },
  {
    "__docId__": 164,
    "kind": "get",
    "name": "_comparatorStorage",
    "memberof": "src/component/coverage-component.js~CoverageComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/coverage-component.js~CoverageComponent#_comparatorStorage",
    "access": "private",
    "description": "",
    "lineNumber": 48,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{AbstractDriver}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "AbstractDriver"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 165,
    "kind": "member",
    "name": "_storage",
    "memberof": "src/component/coverage-component.js~CoverageComponent",
    "static": false,
    "longname": "src/component/coverage-component.js~CoverageComponent#_storage",
    "access": null,
    "description": null,
    "lineNumber": 56,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 166,
    "kind": "method",
    "name": "_doCompare",
    "memberof": "src/component/coverage-component.js~CoverageComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/coverage-component.js~CoverageComponent#_doCompare",
    "access": "private",
    "description": "",
    "lineNumber": 68,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "istanbul.Collector"
        ],
        "spread": false,
        "optional": false,
        "name": "collector",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 167,
    "kind": "method",
    "name": "_calculateDelta",
    "memberof": "src/component/coverage-component.js~CoverageComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/coverage-component.js~CoverageComponent#_calculateDelta",
    "access": "private",
    "description": "",
    "lineNumber": 129,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{number}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "coverage",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "newCoverage",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "number"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 168,
    "kind": "method",
    "name": "_summarizeCoverage",
    "memberof": "src/component/coverage-component.js~CoverageComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/coverage-component.js~CoverageComponent#_summarizeCoverage",
    "access": "private",
    "description": "",
    "lineNumber": 148,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{*}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "coverage",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "*"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 169,
    "kind": "method",
    "name": "_persistModuleBlankCoverage",
    "memberof": "src/component/coverage-component.js~CoverageComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/coverage-component.js~CoverageComponent#_persistModuleBlankCoverage",
    "access": "private",
    "description": "",
    "lineNumber": 178,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "assetsToInstrument",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "dispatchedAssets",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "EmitModule"
        ],
        "spread": false,
        "optional": false,
        "name": "module",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 170,
    "kind": "method",
    "name": "run",
    "memberof": "src/component/coverage-component.js~CoverageComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/coverage-component.js~CoverageComponent#run",
    "access": null,
    "description": "",
    "lineNumber": 214,
    "todo": [
      "split into several abstractions"
    ],
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Emitter"
        ],
        "spread": false,
        "optional": false,
        "name": "emitter",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 171,
    "kind": "method",
    "name": "_dumpCoverageStats",
    "memberof": "src/component/coverage-component.js~CoverageComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/coverage-component.js~CoverageComponent#_dumpCoverageStats",
    "access": "private",
    "description": "",
    "lineNumber": 320,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "istanbul.Collector"
        ],
        "spread": false,
        "optional": false,
        "name": "collector",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "istanbul.Reporter"
        ],
        "spread": false,
        "optional": false,
        "name": "reporter",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 172,
    "kind": "method",
    "name": "_coverageVariable",
    "memberof": "src/component/coverage-component.js~CoverageComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/coverage-component.js~CoverageComponent#_coverageVariable",
    "access": "private",
    "description": "",
    "lineNumber": 339,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "EmitModule"
        ],
        "spread": false,
        "optional": false,
        "name": "module",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 173,
    "kind": "method",
    "name": "_match",
    "memberof": "src/component/coverage-component.js~CoverageComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/coverage-component.js~CoverageComponent#_match",
    "access": "private",
    "description": "",
    "lineNumber": 352,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{boolean}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "file",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "boolean"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 174,
    "kind": "method",
    "name": "_test",
    "memberof": "src/component/coverage-component.js~CoverageComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/coverage-component.js~CoverageComponent#_test",
    "access": "private",
    "description": "",
    "lineNumber": 370,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{boolean}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string",
          "RegExp"
        ],
        "spread": false,
        "optional": false,
        "name": "pattern",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "value",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "boolean"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 175,
    "kind": "method",
    "name": "prepareConfig",
    "memberof": "src/component/coverage-component.js~CoverageComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/coverage-component.js~CoverageComponent#prepareConfig",
    "access": null,
    "description": "",
    "lineNumber": 384,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Container}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "config",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "configFile",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Container"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 176,
    "kind": "get",
    "name": "COVERAGE_KEYS",
    "memberof": "src/component/coverage-component.js~CoverageComponent",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/component/coverage-component.js~CoverageComponent.COVERAGE_KEYS",
    "access": null,
    "description": "",
    "lineNumber": 397,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Array}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "string[]"
      ]
    }
  },
  {
    "__docId__": 177,
    "kind": "get",
    "name": "COVERAGE_FILE",
    "memberof": "src/component/coverage-component.js~CoverageComponent",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/component/coverage-component.js~CoverageComponent.COVERAGE_FILE",
    "access": null,
    "description": "",
    "lineNumber": 404,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 178,
    "kind": "file",
    "name": "src/component/dependency-based-component.js",
    "content": "'use strict';\n\nconst chalk = require('chalk');\nconst ConfigBasedComponent = require('./config-based-component');\n\n/**\n * Abstract dependency aware component\n */\nclass DependencyBasedComponent extends ConfigBasedComponent {\n  /**\n   * @param {*} args\n   */\n  constructor(...args) {\n    super(...args);\n  }\n  \n  /**\n   * @returns {string[]}\n   */\n  get dependencies() {\n    return [];\n  }\n  \n  /**\n   * @param {Emitter} emitter\n   * @returns {Promise}\n   */\n  waitConfig(emitter) {\n    return super.waitConfig(emitter).then(container => {\n      if (container) {\n        if (this.dependencies.length <= 0) {\n          return Promise.resolve(container);\n        }\n\n        const waitComponents = this.dependencies.map(name => {\n          const component = emitter.component(name);\n\n          if (!component) {\n            return Promise.resolve({ name, isActive: false });\n          }\n\n          return component.ready().then(() => Promise.resolve(component));\n        });\n\n        return Promise.all(waitComponents).then(components => {\n          let failedComponents = [];\n\n          components.map(component => {\n            if (!component.isActive) {\n              failedComponents.push(component.name);\n            }\n          });\n\n          if (failedComponents.length > 0) {\n            const failedInfo = failedComponents.map(c => chalk.red(c)).join(', ');\n\n            this.setActive(false);\n            this.logger.info(`${ this.logger.emoji.fire } ${ this.name } ~ ${ failedInfo }`);\n          }\n\n          return Promise.resolve(failedComponents.length <= 0 ? container : null);\n        });\n      }\n\n      return Promise.resolve(null);\n    });\n  }\n}\n\nmodule.exports = DependencyBasedComponent;\n",
    "static": true,
    "longname": "src/component/dependency-based-component.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 179,
    "kind": "class",
    "name": "DependencyBasedComponent",
    "memberof": "src/component/dependency-based-component.js",
    "static": true,
    "longname": "src/component/dependency-based-component.js~DependencyBasedComponent",
    "access": null,
    "export": true,
    "importPath": "recink/src/component/dependency-based-component.js",
    "importStyle": "DependencyBasedComponent",
    "description": "Abstract dependency aware component",
    "lineNumber": 9,
    "interface": false,
    "extends": [
      "src/component/config-based-component.js~ConfigBasedComponent"
    ]
  },
  {
    "__docId__": 180,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/component/dependency-based-component.js~DependencyBasedComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/dependency-based-component.js~DependencyBasedComponent#constructor",
    "access": null,
    "description": "",
    "lineNumber": 13,
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "args",
        "description": ""
      }
    ]
  },
  {
    "__docId__": 181,
    "kind": "get",
    "name": "dependencies",
    "memberof": "src/component/dependency-based-component.js~DependencyBasedComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/dependency-based-component.js~DependencyBasedComponent#dependencies",
    "access": null,
    "description": "",
    "lineNumber": 20,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string[]}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string[]"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*[]"
      ]
    }
  },
  {
    "__docId__": 182,
    "kind": "method",
    "name": "waitConfig",
    "memberof": "src/component/dependency-based-component.js~DependencyBasedComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/dependency-based-component.js~DependencyBasedComponent#waitConfig",
    "access": null,
    "description": "",
    "lineNumber": 28,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Emitter"
        ],
        "spread": false,
        "optional": false,
        "name": "emitter",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 183,
    "kind": "file",
    "name": "src/component/emit/emit-module.js",
    "content": "'use strict';\n\nconst print = require('print');\nconst path = require('path');\nconst fse = require('fs-extra');\nconst readdir = require('readdir-enhanced');\nconst events = require('./events');\n\n/**\n * Class representing emited test module\n */\nclass EmitModule {\n  /**\n   * @param {string} name\n   * @param {Container} container\n   * @param {Emitter} emitter\n   * @param {*} logger\n   */\n  constructor(name, container, emitter, logger) {\n    this._emitter = emitter;\n    this._logger = logger;\n    this._name = name;\n    this._container = container;\n    this._stats = {\n      total: 0,\n      emitted: 0,\n      ignored: 0,\n      dirs: 0,\n    };\n  }\n  \n  /**\n   * @returns {Promise}\n   */\n  check() {\n    const moduleRoot = this.container.get('root', null);\n    \n    if (!moduleRoot) {\n      return Promise.reject(new Error(`Missing root for module ${ this.name }`));\n    }\n    \n    return fse.pathExists(moduleRoot)\n      .then(hasModuleRoot => {\n        if (!hasModuleRoot) {\n          return Promise.reject(new Error(\n            `Module ${ this.name } root ${ moduleRoot } does not exists or wrong permissions set`\n          ));\n        }\n        \n        return Promise.resolve();\n      })\n  }\n  \n  /**\n   * @param {*} container\n   * \n   * @returns {Promise}\n   */\n  process(container) {\n    return new Promise((resolve, reject) => {\n      const moduleRoot = this.container.get('root');\n      \n      const options = {\n        deep: this._deepFilter(container).bind(this),\n        filter: this._filter(container).bind(this),\n      };\n      \n      let ended = false;\n      let processing = 0;\n      \n      readdir.stream(moduleRoot, options)\n        .on('data', filePath => {\n          filePath = filePath.toString();\n          \n          processing++;\n          \n          const payload = {\n            file: filePath,\n            fileAbs: path.join(moduleRoot, filePath),\n            module: this,\n          };\n          \n          this.logger.debug('Emit asset', JSON.stringify(\n            Object.assign({}, payload, { module: this.name })\n          ));\n          \n          this.emitter\n            .maxParallel(events.module.emit.asset, EmitModule.MAX_PARALLEL_ASSETS_EMIT)\n            .emitBlocking(events.module.emit.asset, payload)\n            .then(() => {\n              processing--;\n              \n              if (processing <= 0 && ended) {\n                resolve();\n              }\n            })\n            .catch(error => {\n              this.logger.warn(this.logger.emoji.poop, `failed dispatching asset ${ filePath }`);\n              reject(error);\n            });\n        })\n        .on('end', () => {\n          ended = true;\n          \n          if (processing <= 0) {\n            resolve();\n          }\n        })\n        .on('error', error => reject(error));\n    });\n  }\n  \n  /**\n   * @param {Container} container\n   *\n   * @returns {function}\n   *\n   * @private\n   */\n  _filter(container) {\n    const pattern = container.get('pattern', []);\n    const ignore = container.get('ignore', []);\n    \n    return stats => {\n      const result = stats.isFile() \n        && pattern.filter(p => this._test(p, stats.path)).length > 0\n        && ignore.filter(i => this._test(i, stats.path)).length <= 0;\n      \n      if (stats.isFile()) {\n        if (result) {\n          this.stats.emitted++;\n        } else {\n          this.stats.ignored++;\n        }\n        \n        this.stats.total++;\n      } else if(stats.isDirectory()) {\n        this.stats.dirs++;\n      }\n        \n      return result;  \n    };\n  }\n  \n  /**\n   * @param {Container} container\n   *\n   * @returns {function}\n   *\n   * @private\n   */\n  _deepFilter(container) {\n    const ignore = container.get('ignore', []);\n    \n    return stats => {\n      return ignore.filter(i => this._test(i, stats.path)).length <= 0;\n    };\n  }\n  \n  /**\n   * @param {string|RegExp} pattern\n   * @param {string} value\n   *\n   * @returns {boolean}\n   *\n   * @private\n   */\n  _test(pattern, value) {\n    if (!(pattern instanceof RegExp)) {\n      return value.indexOf(pattern.toString()) !== -1;\n    }\n    \n    return pattern.test(value);\n  }\n  \n  /**\n   * @returns {*}\n   */\n  get logger() {\n    return this._logger;\n  }\n  \n  /**\n   * @returns {Emitter}\n   */\n  get emitter() {\n    return this._emitter;\n  }\n  \n  /**\n   * @returns {string}\n   */\n  get name() {\n    return this._name;\n  }\n  \n  /**\n   * @returns {Container}\n   */\n  get container() {\n    return this._container;\n  }\n  \n  /**\n   * @returns {*}\n   */\n  get stats() {\n    return this._stats;\n  }\n  \n  /**\n   * @returns {string}\n   */\n  dumpStats() {\n    return print(this.stats, {\n      showArrayIndices: true,\n      showArrayLength: true,\n      sortProps: false,\n    }).replace(/\\t/g, '   ')\n  }\n  \n  /**\n   * @returns {number}\n   *\n   * @todo make it configurable for specific use cases\n   */\n  static get MAX_PARALLEL_ASSETS_EMIT() {\n    return 1;\n  }\n}\n\nmodule.exports = EmitModule;\n",
    "static": true,
    "longname": "src/component/emit/emit-module.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 184,
    "kind": "class",
    "name": "EmitModule",
    "memberof": "src/component/emit/emit-module.js",
    "static": true,
    "longname": "src/component/emit/emit-module.js~EmitModule",
    "access": null,
    "export": true,
    "importPath": "recink/src/component/emit/emit-module.js",
    "importStyle": "EmitModule",
    "description": "Class representing emited test module",
    "lineNumber": 12,
    "interface": false
  },
  {
    "__docId__": 185,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/component/emit/emit-module.js~EmitModule",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/emit/emit-module.js~EmitModule#constructor",
    "access": null,
    "description": "",
    "lineNumber": 19,
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "name",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Container"
        ],
        "spread": false,
        "optional": false,
        "name": "container",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Emitter"
        ],
        "spread": false,
        "optional": false,
        "name": "emitter",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "logger",
        "description": ""
      }
    ]
  },
  {
    "__docId__": 186,
    "kind": "member",
    "name": "_emitter",
    "memberof": "src/component/emit/emit-module.js~EmitModule",
    "static": false,
    "longname": "src/component/emit/emit-module.js~EmitModule#_emitter",
    "access": null,
    "description": null,
    "lineNumber": 20,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 187,
    "kind": "member",
    "name": "_logger",
    "memberof": "src/component/emit/emit-module.js~EmitModule",
    "static": false,
    "longname": "src/component/emit/emit-module.js~EmitModule#_logger",
    "access": null,
    "description": null,
    "lineNumber": 21,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 188,
    "kind": "member",
    "name": "_name",
    "memberof": "src/component/emit/emit-module.js~EmitModule",
    "static": false,
    "longname": "src/component/emit/emit-module.js~EmitModule#_name",
    "access": null,
    "description": null,
    "lineNumber": 22,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 189,
    "kind": "member",
    "name": "_container",
    "memberof": "src/component/emit/emit-module.js~EmitModule",
    "static": false,
    "longname": "src/component/emit/emit-module.js~EmitModule#_container",
    "access": null,
    "description": null,
    "lineNumber": 23,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 190,
    "kind": "member",
    "name": "_stats",
    "memberof": "src/component/emit/emit-module.js~EmitModule",
    "static": false,
    "longname": "src/component/emit/emit-module.js~EmitModule#_stats",
    "access": null,
    "description": null,
    "lineNumber": 24,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "{\"total\": *, \"emitted\": *, \"ignored\": *, \"dirs\": *}"
      ]
    }
  },
  {
    "__docId__": 191,
    "kind": "method",
    "name": "check",
    "memberof": "src/component/emit/emit-module.js~EmitModule",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/emit/emit-module.js~EmitModule#check",
    "access": null,
    "description": "",
    "lineNumber": 35,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 192,
    "kind": "method",
    "name": "process",
    "memberof": "src/component/emit/emit-module.js~EmitModule",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/emit/emit-module.js~EmitModule#process",
    "access": null,
    "description": "",
    "lineNumber": 59,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "container",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 193,
    "kind": "method",
    "name": "_filter",
    "memberof": "src/component/emit/emit-module.js~EmitModule",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/emit/emit-module.js~EmitModule#_filter",
    "access": "private",
    "description": "",
    "lineNumber": 120,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{function}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Container"
        ],
        "spread": false,
        "optional": false,
        "name": "container",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "function"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 194,
    "kind": "method",
    "name": "_deepFilter",
    "memberof": "src/component/emit/emit-module.js~EmitModule",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/emit/emit-module.js~EmitModule#_deepFilter",
    "access": "private",
    "description": "",
    "lineNumber": 152,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{function}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Container"
        ],
        "spread": false,
        "optional": false,
        "name": "container",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "function"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 195,
    "kind": "method",
    "name": "_test",
    "memberof": "src/component/emit/emit-module.js~EmitModule",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/emit/emit-module.js~EmitModule#_test",
    "access": "private",
    "description": "",
    "lineNumber": 168,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{boolean}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string",
          "RegExp"
        ],
        "spread": false,
        "optional": false,
        "name": "pattern",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "value",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "boolean"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 196,
    "kind": "get",
    "name": "logger",
    "memberof": "src/component/emit/emit-module.js~EmitModule",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/emit/emit-module.js~EmitModule#logger",
    "access": null,
    "description": "",
    "lineNumber": 179,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{*}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "*"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 197,
    "kind": "get",
    "name": "emitter",
    "memberof": "src/component/emit/emit-module.js~EmitModule",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/emit/emit-module.js~EmitModule#emitter",
    "access": null,
    "description": "",
    "lineNumber": 186,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Emitter}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Emitter"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 198,
    "kind": "get",
    "name": "name",
    "memberof": "src/component/emit/emit-module.js~EmitModule",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/emit/emit-module.js~EmitModule#name",
    "access": null,
    "description": "",
    "lineNumber": 193,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 199,
    "kind": "get",
    "name": "container",
    "memberof": "src/component/emit/emit-module.js~EmitModule",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/emit/emit-module.js~EmitModule#container",
    "access": null,
    "description": "",
    "lineNumber": 200,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Container}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Container"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 200,
    "kind": "get",
    "name": "stats",
    "memberof": "src/component/emit/emit-module.js~EmitModule",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/emit/emit-module.js~EmitModule#stats",
    "access": null,
    "description": "",
    "lineNumber": 207,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{*}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "*"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 201,
    "kind": "method",
    "name": "dumpStats",
    "memberof": "src/component/emit/emit-module.js~EmitModule",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/emit/emit-module.js~EmitModule#dumpStats",
    "access": null,
    "description": "",
    "lineNumber": 214,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string}"
      }
    ],
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 202,
    "kind": "get",
    "name": "MAX_PARALLEL_ASSETS_EMIT",
    "memberof": "src/component/emit/emit-module.js~EmitModule",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/component/emit/emit-module.js~EmitModule.MAX_PARALLEL_ASSETS_EMIT",
    "access": null,
    "description": "",
    "lineNumber": 227,
    "todo": [
      "make it configurable for specific use cases"
    ],
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{number}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "number"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "number"
      ]
    }
  },
  {
    "__docId__": 203,
    "kind": "file",
    "name": "src/component/emit/events.js",
    "content": "'use strict';\n\nconst dot = require('dot-object');\n\n/**\n * Emit component events\n */\nconst events = {};\n\nevents.$ = [\n  'modules.process.start',\n  'modules.process.end',\n  'module.process.start',\n  'module.process.end',\n  'module.emit.asset',\n].map(eventPath => {\n  dot.str(eventPath, eventPath, events);\n  \n  return eventPath;\n});\n\nmodule.exports = events;\n",
    "static": true,
    "longname": "src/component/emit/events.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 204,
    "kind": "variable",
    "name": "events",
    "memberof": "src/component/emit/events.js",
    "static": true,
    "longname": "src/component/emit/events.js~events",
    "access": null,
    "export": true,
    "importPath": "recink/src/component/emit/events.js",
    "importStyle": "events",
    "description": "Emit component events",
    "lineNumber": 8,
    "type": {
      "types": [
        "{}"
      ]
    }
  },
  {
    "__docId__": 205,
    "kind": "file",
    "name": "src/component/emit-component.js",
    "content": "'use strict';\n\nconst path = require('path');\nconst events = require('./emit/events');\nconst EmitModule = require('./emit/emit-module');\nconst SequentialPromise = require('./helper/sequential-promise');\nconst ConfigBasedComponent = require('./config-based-component');\nconst ContainerTransformer = require('./helper/container-transformer');\n\n/**\n * Emit component\n */\nclass EmitComponent extends ConfigBasedComponent {\n  /**\n   * @param {*} args\n   */\n  constructor(...args) {\n    super(...args);\n    \n    this._modules = [];\n  }\n  \n  /**\n   * @returns {String}\n   */\n  get name() {\n    return 'emit';\n  }\n  \n  /**\n   * @param {Emitter} emitter\n   * @returns {Promise}\n   */\n  run(emitter) {\n    this._registerDebugers(emitter);\n    \n    emitter.emit(events.modules.process.start, this._modules, this.container);\n\n    return SequentialPromise.all(this._modules.map(module => {\n      return () => {\n        return module.check()\n          .then(() => emitter.emitBlocking(events.module.process.start, module, this.container))\n          .then(() => module.process(this.container))\n          .then(() => emitter.emitBlocking(events.module.process.end, module));\n      };\n    })).then(() => {\n      emitter.emit(events.modules.process.end, this._modules, this.container);\n    });\n  }\n  \n  /**\n   * @param {Emitter} emitter\n   * @returns {Promise}\n   */\n  waitConfig(emitter) {\n    return super.waitConfig(emitter)\n      .then(container => {\n        const moduleKeys = emitter.container.listKeys()\n          .filter(key => key !== ConfigBasedComponent.MAIN_CONFIG_KEY);\n\n        if (moduleKeys.length <= 0 || !container) {\n          return Promise.resolve(container);\n        }\n        \n        return Promise.all(moduleKeys.map(moduleKey => {\n          return this.prepareModuleConfig(\n            emitter.container.get(moduleKey),\n            container\n          ).then(moduleContainer => {\n            const emitModule = new EmitModule(\n              moduleKey, \n              moduleContainer,\n              emitter,\n              this.logger\n            );\n            \n            this._modules.push(emitModule);\n          });\n        })).then(() => {\n          this.logger.info(\n            this.logger.emoji.gift,\n            `Modules to emit - ${ moduleKeys.join(', ') }`\n          );\n          \n          return Promise.resolve(container);\n        });\n      });\n  }\n  \n  /**\n   * @param {*} config\n   * @param {String} configFile\n   * @returns {Container}\n   */\n  prepareConfig(config, configFile) {\n    return super.prepareConfig(config, configFile)\n      .then(container => {\n        return (new ContainerTransformer(container))\n          .addPattern('pattern')\n          .addPattern('ignore')\n          .transform();\n      });\n  }\n  \n  /**\n   * @param {*} moduleConfig\n   * @param {Container} mainContainer\n   * @returns {Container}\n   */\n  prepareModuleConfig(moduleConfig, mainContainer) {\n    const container = this.createContainer(moduleConfig);\n    \n    return (new ContainerTransformer(container))\n      .add({\n        path: 'root',\n        transformer: value => {\n          if (path.isAbsolute(value)) {\n            return Promise.resolve(value);\n          }\n          \n          return Promise.resolve(\n            path.join(mainContainer.get('__dir'), value)\n          );\n        },\n      })\n      .transform();\n  }\n  \n  /**\n   * @param {Emitter} emitter\n   * @private\n   */\n  _registerDebugers(emitter) {\n    emitter.on(events.modules.process.start, (modules, container) => {\n      const modulesStr = modules.map(m => m.name).join(', ');\n\n      this.logger.info(\n        this.logger.emoji.diamond,\n        `Start processing modules ${ modules.length ? '- ' + modulesStr : '' }`\n      );\n\n      this.logger.debug(container.dump());\n    });\n    \n    emitter.on(events.modules.process.end, modules => {\n      const modulesStr = modules.map(m => m.name).join(', ');\n\n      this.logger.info(\n        this.logger.emoji.magic,\n        `Finish processing modules ${ modules.length ? '- ' + modulesStr : '' }`\n      );\n    });\n    \n    emitter.on(events.module.process.start, module => {\n      this.logger.debug(`Start processing module ${ module.name }`);\n      this.logger.debug(module.container.dump());\n    });\n    \n    emitter.on(events.module.process.end, module => {\n      this.logger.debug(`Finish processing module ${ module.name }`);\n      this.logger.debug(module.dumpStats());\n    });\n  }\n}\n\nmodule.exports = EmitComponent;\n",
    "static": true,
    "longname": "src/component/emit-component.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 206,
    "kind": "class",
    "name": "EmitComponent",
    "memberof": "src/component/emit-component.js",
    "static": true,
    "longname": "src/component/emit-component.js~EmitComponent",
    "access": null,
    "export": true,
    "importPath": "recink/src/component/emit-component.js",
    "importStyle": "EmitComponent",
    "description": "Emit component",
    "lineNumber": 13,
    "interface": false,
    "extends": [
      "src/component/config-based-component.js~ConfigBasedComponent"
    ]
  },
  {
    "__docId__": 207,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/component/emit-component.js~EmitComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/emit-component.js~EmitComponent#constructor",
    "access": null,
    "description": "",
    "lineNumber": 17,
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "args",
        "description": ""
      }
    ]
  },
  {
    "__docId__": 208,
    "kind": "member",
    "name": "_modules",
    "memberof": "src/component/emit-component.js~EmitComponent",
    "static": false,
    "longname": "src/component/emit-component.js~EmitComponent#_modules",
    "access": null,
    "description": null,
    "lineNumber": 20,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*[]"
      ]
    }
  },
  {
    "__docId__": 209,
    "kind": "get",
    "name": "name",
    "memberof": "src/component/emit-component.js~EmitComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/emit-component.js~EmitComponent#name",
    "access": null,
    "description": "",
    "lineNumber": 26,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{String}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 210,
    "kind": "method",
    "name": "run",
    "memberof": "src/component/emit-component.js~EmitComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/emit-component.js~EmitComponent#run",
    "access": null,
    "description": "",
    "lineNumber": 34,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Emitter"
        ],
        "spread": false,
        "optional": false,
        "name": "emitter",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 211,
    "kind": "method",
    "name": "waitConfig",
    "memberof": "src/component/emit-component.js~EmitComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/emit-component.js~EmitComponent#waitConfig",
    "access": null,
    "description": "",
    "lineNumber": 55,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Emitter"
        ],
        "spread": false,
        "optional": false,
        "name": "emitter",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 212,
    "kind": "method",
    "name": "prepareConfig",
    "memberof": "src/component/emit-component.js~EmitComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/emit-component.js~EmitComponent#prepareConfig",
    "access": null,
    "description": "",
    "lineNumber": 95,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Container}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "config",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "configFile",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Container"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 213,
    "kind": "method",
    "name": "prepareModuleConfig",
    "memberof": "src/component/emit-component.js~EmitComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/emit-component.js~EmitComponent#prepareModuleConfig",
    "access": null,
    "description": "",
    "lineNumber": 110,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Container}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "moduleConfig",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Container"
        ],
        "spread": false,
        "optional": false,
        "name": "mainContainer",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Container"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 214,
    "kind": "method",
    "name": "_registerDebugers",
    "memberof": "src/component/emit-component.js~EmitComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/emit-component.js~EmitComponent#_registerDebugers",
    "access": "private",
    "description": "",
    "lineNumber": 133,
    "params": [
      {
        "nullable": null,
        "types": [
          "Emitter"
        ],
        "spread": false,
        "optional": false,
        "name": "emitter",
        "description": ""
      }
    ]
  },
  {
    "__docId__": 215,
    "kind": "file",
    "name": "src/component/factory.js",
    "content": "'use strict';\n\nconst AbstractComponent = require('./abstract-component');\n\n/**\n * Component factory\n */\nclass Factory {  \n  /**\n   * @param {string} name\n   * @param {*} args\n   *\n   * @returns {AbstractComponent}\n   */\n  static create(name, ...args) {\n    const ComponentImplementation = require(`./${ name }-component`);\n    const component = new ComponentImplementation(...args);\n    \n    if (!(component instanceof AbstractComponent)) {\n      throw new Error(`${ name } component should be an implementation of AbstractComponent`);\n    }\n    \n    return component;\n  }\n  \n  /**\n   * @param {*} args\n   *\n   * @returns {EmitComponent}\n   */\n  static emit(...args) {\n    return this.create('emit', ...args);\n  }\n  \n  /**\n   * @param {*} args\n   *\n   * @returns {CacheComponent}\n   */\n  static cache(...args) {\n    return this.create('cache', ...args);\n  }\n  \n  /**\n   * @param {*} args\n   *\n   * @returns {CoverageComponent}\n   */\n  static coverage(...args) {\n    return this.create('coverage', ...args);\n  }\n  \n  /**\n   * @param {*} args\n   *\n   * @returns {TestComponent}\n   */\n  static test(...args) {\n    return this.create('test', ...args);\n  }\n  \n  /**\n   * @param {*} args\n   *\n   * @returns {E2EComponent}\n   */\n  static e2e(...args) {\n    return this.create('e2e', ...args);\n  }\n  \n  /**\n   * @param {*} args\n   *\n   * @returns {NpmComponent}\n   */\n  static npm(...args) {\n    return this.create('npm', ...args);\n  }\n  \n  /**\n   * @param {*} args\n   *\n   * @returns {PreprocessComponent}\n   */\n  static preprocess(...args) {\n    return this.create('preprocess', ...args);\n  }\n}\n\nmodule.exports = Factory;\n",
    "static": true,
    "longname": "src/component/factory.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 216,
    "kind": "class",
    "name": "Factory",
    "memberof": "src/component/factory.js",
    "static": true,
    "longname": "src/component/factory.js~Factory",
    "access": null,
    "export": true,
    "importPath": "recink/src/component/factory.js",
    "importStyle": "Factory",
    "description": "Component factory",
    "lineNumber": 8,
    "interface": false
  },
  {
    "__docId__": 217,
    "kind": "method",
    "name": "create",
    "memberof": "src/component/factory.js~Factory",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/component/factory.js~Factory.create",
    "access": null,
    "description": "",
    "lineNumber": 15,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{AbstractComponent}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "name",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "args",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "AbstractComponent"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 218,
    "kind": "method",
    "name": "emit",
    "memberof": "src/component/factory.js~Factory",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/component/factory.js~Factory.emit",
    "access": null,
    "description": "",
    "lineNumber": 31,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{EmitComponent}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "args",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "EmitComponent"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 219,
    "kind": "method",
    "name": "cache",
    "memberof": "src/component/factory.js~Factory",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/component/factory.js~Factory.cache",
    "access": null,
    "description": "",
    "lineNumber": 40,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{CacheComponent}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "args",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "CacheComponent"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 220,
    "kind": "method",
    "name": "coverage",
    "memberof": "src/component/factory.js~Factory",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/component/factory.js~Factory.coverage",
    "access": null,
    "description": "",
    "lineNumber": 49,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{CoverageComponent}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "args",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "CoverageComponent"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 221,
    "kind": "method",
    "name": "test",
    "memberof": "src/component/factory.js~Factory",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/component/factory.js~Factory.test",
    "access": null,
    "description": "",
    "lineNumber": 58,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{TestComponent}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "args",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "TestComponent"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 222,
    "kind": "method",
    "name": "e2e",
    "memberof": "src/component/factory.js~Factory",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/component/factory.js~Factory.e2e",
    "access": null,
    "description": "",
    "lineNumber": 67,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{E2EComponent}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "args",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "E2EComponent"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 223,
    "kind": "method",
    "name": "npm",
    "memberof": "src/component/factory.js~Factory",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/component/factory.js~Factory.npm",
    "access": null,
    "description": "",
    "lineNumber": 76,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{NpmComponent}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "args",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "NpmComponent"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 224,
    "kind": "method",
    "name": "preprocess",
    "memberof": "src/component/factory.js~Factory",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/component/factory.js~Factory.preprocess",
    "access": null,
    "description": "",
    "lineNumber": 85,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{PreprocessComponent}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "args",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "PreprocessComponent"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 225,
    "kind": "file",
    "name": "src/component/helper/aws-credentials.js",
    "content": "'use strict';\n\nconst AWS = require('aws-sdk');\n\n/**\n * AWS security credentials\n */\nclass AwsCredentials {\n  /**\n   * @param {Object} options\n   */\n  constructor(options = {}) {\n    this._options = options;\n    this._providers = [\n      new AWS.EnvironmentCredentials(\n        this._options.hasOwnProperty('envPrefix') ? this._options.envPrefix : 'AWS'\n      ),\n      new AWS.SharedIniFileCredentials({\n        profile: this._options.hasOwnProperty('profile') ? this._options.profile : 'default'\n      }),\n      AWS.ECSCredentials.prototype.isConfiguredForEcsCredentials()\n        ? new AWS.ECSCredentials() : new AWS.EC2MetadataCredentials()\n    ];\n\n    if (this._options.hasOwnProperty('accessKeyId') && this._options.hasOwnProperty('secretAccessKey')) {\n      this._providers.push(\n        new AWS.Credentials({\n          accessKeyId: this._options.accessKeyId,\n          secretAccessKey: this._options.secretAccessKey\n        })\n      );\n    }\n  }\n\n  /**\n   * Get AWS Configuration\n   * @return {Promise}\n   */\n  getConfig() {\n    return new AWS.CredentialProviderChain(this._providers).resolvePromise().then(credentials => {\n      let roleArn = this._getRoleArn();\n\n      AWS.config.credentials = roleArn\n        ? new AWS.TemporaryCredentials({ RoleArn: roleArn }, credentials)\n        : credentials;\n\n      if (this._options.hasOwnProperty('region')) {\n        AWS.config.update({ region: this._options.region });\n      }\n\n      return Promise.resolve(AWS);\n    });\n  }\n\n  /**\n   * Compose and validate Role ARN\n   * @return {boolean}\n   * @private\n   */\n  _getRoleArn() {\n    let roleArn = this._options.roleArn;\n\n    if (this._options.hasOwnProperty('accountId') && this._options.hasOwnProperty('roleName')) {\n      roleArn = `arn:aws:iam::${this._options.accountId}:role/${this._options.roleName}`\n    }\n\n    return /^arn:aws:iam::[0-9]{12}:role\\/[a-zA-Z0-9+=,.@\\-_]*$/.test(roleArn) ? roleArn : false;\n  }\n}\n\nmodule.exports = AwsCredentials;\n",
    "static": true,
    "longname": "src/component/helper/aws-credentials.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 226,
    "kind": "class",
    "name": "AwsCredentials",
    "memberof": "src/component/helper/aws-credentials.js",
    "static": true,
    "longname": "src/component/helper/aws-credentials.js~AwsCredentials",
    "access": null,
    "export": true,
    "importPath": "recink/src/component/helper/aws-credentials.js",
    "importStyle": "AwsCredentials",
    "description": "AWS security credentials",
    "lineNumber": 8,
    "interface": false
  },
  {
    "__docId__": 227,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/component/helper/aws-credentials.js~AwsCredentials",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/helper/aws-credentials.js~AwsCredentials#constructor",
    "access": null,
    "description": "",
    "lineNumber": 12,
    "params": [
      {
        "nullable": null,
        "types": [
          "Object"
        ],
        "spread": false,
        "optional": false,
        "name": "options",
        "description": ""
      }
    ]
  },
  {
    "__docId__": 228,
    "kind": "member",
    "name": "_options",
    "memberof": "src/component/helper/aws-credentials.js~AwsCredentials",
    "static": false,
    "longname": "src/component/helper/aws-credentials.js~AwsCredentials#_options",
    "access": null,
    "description": null,
    "lineNumber": 13,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 229,
    "kind": "member",
    "name": "_providers",
    "memberof": "src/component/helper/aws-credentials.js~AwsCredentials",
    "static": false,
    "longname": "src/component/helper/aws-credentials.js~AwsCredentials#_providers",
    "access": null,
    "description": null,
    "lineNumber": 14,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "undefined[]"
      ]
    }
  },
  {
    "__docId__": 230,
    "kind": "method",
    "name": "getConfig",
    "memberof": "src/component/helper/aws-credentials.js~AwsCredentials",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/helper/aws-credentials.js~AwsCredentials#getConfig",
    "access": null,
    "description": "Get AWS Configuration",
    "lineNumber": 39,
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 231,
    "kind": "method",
    "name": "_getRoleArn",
    "memberof": "src/component/helper/aws-credentials.js~AwsCredentials",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/helper/aws-credentials.js~AwsCredentials#_getRoleArn",
    "access": "private",
    "description": "Compose and validate Role ARN",
    "lineNumber": 60,
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "boolean"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 232,
    "kind": "file",
    "name": "src/component/helper/container-transformer.js",
    "content": "'use strict';\n\nconst Transformer = require('./transformer');\nconst patternTransformer = require('./pattern-transformer');\n\n/**\n * Apply transformations to an configuration container\n */\nclass ContainerTransformer {\n  /**\n   * @param {Container} container\n   */\n  constructor(container) {\n    this._container = container;\n    this._transformers = [];\n  }\n  \n  /**\n   * @param {string} path\n   *\n   * @returns {ContainerTransformer}\n   */\n  addPattern(path) {\n    return this.add({ path, transformer: patternTransformer });\n  }\n  \n  /**\n   * @param {string} path\n   * @param {function} transformer\n   *\n   * @returns {Transformer}\n   */\n  create(path, transformer) {\n    return new Transformer(path, transformer);\n  }\n  \n  /**\n   * @param {Transformer} transformerInstance\n   *\n   * @returns {ContainerTransformer}\n   */\n  add(transformerInstance) {\n    if (!(transformerInstance instanceof Transformer)) {\n      const { path, transformer } = transformerInstance;\n      \n      transformerInstance = this.create(path, transformer);\n    }\n\n    this._transformers.push(transformerInstance);\n    \n    return this;\n  }\n  \n  /**\n   * @returns {Transformer[]}\n   */\n  get transformers() {\n    return this._transformers;\n  }\n  \n  /**\n   * @returns {Promise}\n   */\n  transform() {\n    return Promise.all(this.transformers.map(transformer => {\n      if (this.container.has(transformer.path)) {\n        return transformer.transform(this.container.get(transformer.path))\n          .then(value => {\n            this.container.set(transformer.path, value);\n            \n            return Promise.resolve();\n          });\n      }\n      \n      return Promise.resolve();\n    })).then(() => Promise.resolve(this.container));\n  }\n  \n  /**\n   * @returns {Container}\n   */\n  get container() {\n    return this._container;\n  }\n}\n\nmodule.exports = ContainerTransformer;\n",
    "static": true,
    "longname": "src/component/helper/container-transformer.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 233,
    "kind": "class",
    "name": "ContainerTransformer",
    "memberof": "src/component/helper/container-transformer.js",
    "static": true,
    "longname": "src/component/helper/container-transformer.js~ContainerTransformer",
    "access": null,
    "export": true,
    "importPath": "recink/src/component/helper/container-transformer.js",
    "importStyle": "ContainerTransformer",
    "description": "Apply transformations to an configuration container",
    "lineNumber": 9,
    "interface": false
  },
  {
    "__docId__": 234,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/component/helper/container-transformer.js~ContainerTransformer",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/helper/container-transformer.js~ContainerTransformer#constructor",
    "access": null,
    "description": "",
    "lineNumber": 13,
    "params": [
      {
        "nullable": null,
        "types": [
          "Container"
        ],
        "spread": false,
        "optional": false,
        "name": "container",
        "description": ""
      }
    ]
  },
  {
    "__docId__": 235,
    "kind": "member",
    "name": "_container",
    "memberof": "src/component/helper/container-transformer.js~ContainerTransformer",
    "static": false,
    "longname": "src/component/helper/container-transformer.js~ContainerTransformer#_container",
    "access": null,
    "description": null,
    "lineNumber": 14,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 236,
    "kind": "member",
    "name": "_transformers",
    "memberof": "src/component/helper/container-transformer.js~ContainerTransformer",
    "static": false,
    "longname": "src/component/helper/container-transformer.js~ContainerTransformer#_transformers",
    "access": null,
    "description": null,
    "lineNumber": 15,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*[]"
      ]
    }
  },
  {
    "__docId__": 237,
    "kind": "method",
    "name": "addPattern",
    "memberof": "src/component/helper/container-transformer.js~ContainerTransformer",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/helper/container-transformer.js~ContainerTransformer#addPattern",
    "access": null,
    "description": "",
    "lineNumber": 23,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{ContainerTransformer}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "path",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "ContainerTransformer"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 238,
    "kind": "method",
    "name": "create",
    "memberof": "src/component/helper/container-transformer.js~ContainerTransformer",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/helper/container-transformer.js~ContainerTransformer#create",
    "access": null,
    "description": "",
    "lineNumber": 33,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Transformer}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "path",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "function"
        ],
        "spread": false,
        "optional": false,
        "name": "transformer",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Transformer"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 239,
    "kind": "method",
    "name": "add",
    "memberof": "src/component/helper/container-transformer.js~ContainerTransformer",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/helper/container-transformer.js~ContainerTransformer#add",
    "access": null,
    "description": "",
    "lineNumber": 42,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{ContainerTransformer}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Transformer"
        ],
        "spread": false,
        "optional": false,
        "name": "transformerInstance",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "ContainerTransformer"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 240,
    "kind": "get",
    "name": "transformers",
    "memberof": "src/component/helper/container-transformer.js~ContainerTransformer",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/helper/container-transformer.js~ContainerTransformer#transformers",
    "access": null,
    "description": "",
    "lineNumber": 57,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Transformer[]}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Transformer[]"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 241,
    "kind": "method",
    "name": "transform",
    "memberof": "src/component/helper/container-transformer.js~ContainerTransformer",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/helper/container-transformer.js~ContainerTransformer#transform",
    "access": null,
    "description": "",
    "lineNumber": 64,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 242,
    "kind": "get",
    "name": "container",
    "memberof": "src/component/helper/container-transformer.js~ContainerTransformer",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/helper/container-transformer.js~ContainerTransformer#container",
    "access": null,
    "description": "",
    "lineNumber": 82,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Container}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Container"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 243,
    "kind": "file",
    "name": "src/component/helper/module-compile.js",
    "content": "'use strict';\n\nconst SandboxedModule = require('sandboxed-module');\n\n/**\n * Overwrites original Module to apply compilers\n */\nclass ModuleCompile {\n  /**\n   * @param {string} moduleId\n   * @param {*} stubs\n   * @param {Function[]} compilers\n   *\n   * @returns {*}\n   */\n  static require(moduleId, stubs = {}, ...compilers) {\n    return SandboxedModule.require(moduleId, {\n      requires: stubs,\n      sourceTransformers: compilers.map(compiler => {\n        return function (source) {\n          const { filename } = this;\n\n          return compiler(source, filename);\n        };\n      }),\n    });\n  }\n}\n\nmodule.exports = ModuleCompile;\n",
    "static": true,
    "longname": "src/component/helper/module-compile.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 244,
    "kind": "class",
    "name": "ModuleCompile",
    "memberof": "src/component/helper/module-compile.js",
    "static": true,
    "longname": "src/component/helper/module-compile.js~ModuleCompile",
    "access": null,
    "export": true,
    "importPath": "recink/src/component/helper/module-compile.js",
    "importStyle": "ModuleCompile",
    "description": "Overwrites original Module to apply compilers",
    "lineNumber": 8,
    "interface": false
  },
  {
    "__docId__": 245,
    "kind": "method",
    "name": "require",
    "memberof": "src/component/helper/module-compile.js~ModuleCompile",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/component/helper/module-compile.js~ModuleCompile.require",
    "access": null,
    "description": "",
    "lineNumber": 16,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{*}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "moduleId",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "stubs",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Function[]"
        ],
        "spread": false,
        "optional": false,
        "name": "compilers",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "*"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 246,
    "kind": "file",
    "name": "src/component/helper/pattern-transformer.js",
    "content": "'use strict';\n\n/**\n * @param {string} value\n *\n * @returns {RegExp}\n */\nfunction toRegexp(value) {\n  const matches = value.match(/^\\/(.+)\\/([gmiyu])*$/);\n  \n  const [ , regex, modifiers ] = matches;\n  \n  return new RegExp(regex, modifiers);\n}\n\n/**\n * @param {string} value\n *\n * @returns {boolean}\n */\nfunction isRegexp(value) {\n  return /\\/.+\\/[a-z]*/i.test(value);\n}\n\n/**\n * @param {*} value\n *\n * @returns {Promise}\n */\nmodule.exports = (value => {  \n  return Promise.resolve((Array.isArray(value) ? value : [ value ])\n    .filter(pattern => !!((pattern || '').trim()))\n    .map(pattern => {\n      if (isRegexp(pattern)) {\n        return toRegexp(pattern);\n      }\n      \n      return pattern;\n    }));\n});\n",
    "static": true,
    "longname": "src/component/helper/pattern-transformer.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 247,
    "kind": "function",
    "name": "toRegexp",
    "memberof": "src/component/helper/pattern-transformer.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/component/helper/pattern-transformer.js~toRegexp",
    "access": null,
    "export": false,
    "importPath": "recink/src/component/helper/pattern-transformer.js",
    "importStyle": null,
    "description": "",
    "lineNumber": 8,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{RegExp}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "value",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "RegExp"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 248,
    "kind": "function",
    "name": "isRegexp",
    "memberof": "src/component/helper/pattern-transformer.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/component/helper/pattern-transformer.js~isRegexp",
    "access": null,
    "export": false,
    "importPath": "recink/src/component/helper/pattern-transformer.js",
    "importStyle": null,
    "description": "",
    "lineNumber": 21,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{boolean}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "value",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "boolean"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 249,
    "kind": "function",
    "name": "patterntransformer",
    "memberof": "src/component/helper/pattern-transformer.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/component/helper/pattern-transformer.js~patterntransformer",
    "access": null,
    "export": true,
    "importPath": "recink/src/component/helper/pattern-transformer.js",
    "importStyle": "patterntransformer",
    "description": "",
    "lineNumber": 30,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "value",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 250,
    "kind": "file",
    "name": "src/component/helper/sequential-promise.js",
    "content": "'use strict';\n\n/**\n * Implements Promise.all() but sequential execution\n */\nclass SequentialPromise {\n  /**\n   * @param {function[]} promises\n   * @param {*} value\n   * \n   * @returns {Promise}\n   */\n  static all(promises, value = null) {\n    const promisesCloned = [].concat(promises);\n    \n    return this._sequential(promisesCloned, value);\n  }\n  \n  /**\n   * @param {function[]} promises\n   * @param {*} result\n   * \n   * @returns {Promise}\n   *\n   * @private\n   */\n  static _sequential(promises, result) {\n    if (promises.length <= 0) {\n      return Promise.resolve(result);\n    }\n    \n    return promises.shift()(result)\n      .then(result => SequentialPromise._sequential(promises, result));\n  }\n}\n\nmodule.exports = SequentialPromise;\n",
    "static": true,
    "longname": "src/component/helper/sequential-promise.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 251,
    "kind": "class",
    "name": "SequentialPromise",
    "memberof": "src/component/helper/sequential-promise.js",
    "static": true,
    "longname": "src/component/helper/sequential-promise.js~SequentialPromise",
    "access": null,
    "export": true,
    "importPath": "recink/src/component/helper/sequential-promise.js",
    "importStyle": "SequentialPromise",
    "description": "Implements Promise.all() but sequential execution",
    "lineNumber": 6,
    "interface": false
  },
  {
    "__docId__": 252,
    "kind": "method",
    "name": "all",
    "memberof": "src/component/helper/sequential-promise.js~SequentialPromise",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/component/helper/sequential-promise.js~SequentialPromise.all",
    "access": null,
    "description": "",
    "lineNumber": 13,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "function[]"
        ],
        "spread": false,
        "optional": false,
        "name": "promises",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "value",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 253,
    "kind": "method",
    "name": "_sequential",
    "memberof": "src/component/helper/sequential-promise.js~SequentialPromise",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/component/helper/sequential-promise.js~SequentialPromise._sequential",
    "access": "private",
    "description": "",
    "lineNumber": 27,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "function[]"
        ],
        "spread": false,
        "optional": false,
        "name": "promises",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "result",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 254,
    "kind": "file",
    "name": "src/component/helper/spinner.js",
    "content": "'use strict';\n\nconst ora = require('ora');\n\n/**\n * Terminal spinner implementation\n */\nclass Spinner {\n  /**\n   * @param {String} msg\n   */\n  constructor(msg) {\n    this._main = msg;\n    this._then = msg;\n    this._catch = msg;\n    this._spinner = null;\n  }\n  \n  /**\n   * @param {String} text\n   * @returns {ora}\n   */\n  prepend(text) {\n    this.spinner.text = `${ text } ${ this._main }`;\n    \n    return this;\n  }\n  \n  /**\n   * @param {String} text\n   * @returns {ora}\n   */\n  append(text) {\n    this.spinner.text = `${ this._main } ${ text }`;\n    \n    return this;\n  }\n  \n  /**\n   * @returns {ora}\n   */\n  get spinner() {\n    if (!this._spinner) {\n      this._spinner = ora(this._main);\n    }\n    \n    return this._spinner;\n  }\n  \n  /**\n   * @param {Promise} promiseToWrap\n   *\n   * @returns {Promise}\n   */\n  promise(promiseToWrap) {\n    this.spinner.start();\n    \n    return promiseToWrap\n      .then(result => {\n        this.spinner.succeed(this.thenText);\n        \n        return Promise.resolve(result);\n      })\n      .catch(error => {\n        this.spinner.fail(this.catchText);\n        \n        return Promise.reject(error);\n      });\n  }\n  \n  /**\n   * @param {String} msg\n   * @returns {Spinner}\n   */\n  then(msg) {\n    this._then = msg;\n    \n    return this;\n  }\n  \n  /**\n   * @param {String} msg\n   * @returns {Spinner}\n   */\n  catch(msg) {\n    this._catch = msg;\n    \n    return this;\n  }\n  \n  /**\n   * @returns {String}\n   */\n  get catchText() {\n    return this._catch;\n  }\n  \n  /**\n   * @returns {String}\n   */\n  get thenText() {\n    return this._then;\n  }\n  \n  /**\n   * @returns {String}\n   */\n  get mainText() {\n    return this._main;\n  }\n}\n\nmodule.exports = Spinner;\n",
    "static": true,
    "longname": "src/component/helper/spinner.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 255,
    "kind": "class",
    "name": "Spinner",
    "memberof": "src/component/helper/spinner.js",
    "static": true,
    "longname": "src/component/helper/spinner.js~Spinner",
    "access": null,
    "export": true,
    "importPath": "recink/src/component/helper/spinner.js",
    "importStyle": "Spinner",
    "description": "Terminal spinner implementation",
    "lineNumber": 8,
    "interface": false
  },
  {
    "__docId__": 256,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/component/helper/spinner.js~Spinner",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/helper/spinner.js~Spinner#constructor",
    "access": null,
    "description": "",
    "lineNumber": 12,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "msg",
        "description": ""
      }
    ]
  },
  {
    "__docId__": 257,
    "kind": "member",
    "name": "_main",
    "memberof": "src/component/helper/spinner.js~Spinner",
    "static": false,
    "longname": "src/component/helper/spinner.js~Spinner#_main",
    "access": null,
    "description": null,
    "lineNumber": 13,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 258,
    "kind": "member",
    "name": "_then",
    "memberof": "src/component/helper/spinner.js~Spinner",
    "static": false,
    "longname": "src/component/helper/spinner.js~Spinner#_then",
    "access": null,
    "description": null,
    "lineNumber": 14,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 259,
    "kind": "member",
    "name": "_catch",
    "memberof": "src/component/helper/spinner.js~Spinner",
    "static": false,
    "longname": "src/component/helper/spinner.js~Spinner#_catch",
    "access": null,
    "description": null,
    "lineNumber": 15,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 260,
    "kind": "member",
    "name": "_spinner",
    "memberof": "src/component/helper/spinner.js~Spinner",
    "static": false,
    "longname": "src/component/helper/spinner.js~Spinner#_spinner",
    "access": null,
    "description": null,
    "lineNumber": 16,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 261,
    "kind": "method",
    "name": "prepend",
    "memberof": "src/component/helper/spinner.js~Spinner",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/helper/spinner.js~Spinner#prepend",
    "access": null,
    "description": "",
    "lineNumber": 23,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{ora}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "text",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "ora"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 262,
    "kind": "method",
    "name": "append",
    "memberof": "src/component/helper/spinner.js~Spinner",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/helper/spinner.js~Spinner#append",
    "access": null,
    "description": "",
    "lineNumber": 33,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{ora}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "text",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "ora"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 263,
    "kind": "get",
    "name": "spinner",
    "memberof": "src/component/helper/spinner.js~Spinner",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/helper/spinner.js~Spinner#spinner",
    "access": null,
    "description": "",
    "lineNumber": 42,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{ora}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "ora"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 264,
    "kind": "member",
    "name": "_spinner",
    "memberof": "src/component/helper/spinner.js~Spinner",
    "static": false,
    "longname": "src/component/helper/spinner.js~Spinner#_spinner",
    "access": null,
    "description": null,
    "lineNumber": 44,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 265,
    "kind": "method",
    "name": "promise",
    "memberof": "src/component/helper/spinner.js~Spinner",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/helper/spinner.js~Spinner#promise",
    "access": null,
    "description": "",
    "lineNumber": 55,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Promise"
        ],
        "spread": false,
        "optional": false,
        "name": "promiseToWrap",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 266,
    "kind": "method",
    "name": "then",
    "memberof": "src/component/helper/spinner.js~Spinner",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/helper/spinner.js~Spinner#then",
    "access": null,
    "description": "",
    "lineNumber": 75,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Spinner}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "msg",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Spinner"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 267,
    "kind": "member",
    "name": "_then",
    "memberof": "src/component/helper/spinner.js~Spinner",
    "static": false,
    "longname": "src/component/helper/spinner.js~Spinner#_then",
    "access": null,
    "description": null,
    "lineNumber": 76,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 268,
    "kind": "method",
    "name": "catch",
    "memberof": "src/component/helper/spinner.js~Spinner",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/helper/spinner.js~Spinner#catch",
    "access": null,
    "description": "",
    "lineNumber": 85,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Spinner}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "msg",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Spinner"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 269,
    "kind": "member",
    "name": "_catch",
    "memberof": "src/component/helper/spinner.js~Spinner",
    "static": false,
    "longname": "src/component/helper/spinner.js~Spinner#_catch",
    "access": null,
    "description": null,
    "lineNumber": 86,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 270,
    "kind": "get",
    "name": "catchText",
    "memberof": "src/component/helper/spinner.js~Spinner",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/helper/spinner.js~Spinner#catchText",
    "access": null,
    "description": "",
    "lineNumber": 94,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{String}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 271,
    "kind": "get",
    "name": "thenText",
    "memberof": "src/component/helper/spinner.js~Spinner",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/helper/spinner.js~Spinner#thenText",
    "access": null,
    "description": "",
    "lineNumber": 101,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{String}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 272,
    "kind": "get",
    "name": "mainText",
    "memberof": "src/component/helper/spinner.js~Spinner",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/helper/spinner.js~Spinner#mainText",
    "access": null,
    "description": "",
    "lineNumber": 108,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{String}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 273,
    "kind": "file",
    "name": "src/component/helper/transformer.js",
    "content": "'use strict';\n\n/**\n * Apply transformer over a value\n */\nclass Transformer {\n  /**\n   * @param {string} path\n   * @param {function} transformer\n   */\n  constructor(path, transformer) {\n    this._path = path;\n    this._transformer = transformer;\n  }\n  \n  /**\n   * @param {*} value\n   *\n   * @returns {Promise}\n   */\n  transform(value) {\n    return this.transformer(value);\n  }\n  \n  /**\n   * @returns {function}\n   */\n  get transformer() {\n    return this._transformer;\n  }\n  \n  /**\n   * @returns {string}\n   */\n  get path() {\n    return this._path;\n  }\n}\n\nmodule.exports = Transformer;\n",
    "static": true,
    "longname": "src/component/helper/transformer.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 274,
    "kind": "class",
    "name": "Transformer",
    "memberof": "src/component/helper/transformer.js",
    "static": true,
    "longname": "src/component/helper/transformer.js~Transformer",
    "access": null,
    "export": true,
    "importPath": "recink/src/component/helper/transformer.js",
    "importStyle": "Transformer",
    "description": "Apply transformer over a value",
    "lineNumber": 6,
    "interface": false
  },
  {
    "__docId__": 275,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/component/helper/transformer.js~Transformer",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/helper/transformer.js~Transformer#constructor",
    "access": null,
    "description": "",
    "lineNumber": 11,
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "path",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "function"
        ],
        "spread": false,
        "optional": false,
        "name": "transformer",
        "description": ""
      }
    ]
  },
  {
    "__docId__": 276,
    "kind": "member",
    "name": "_path",
    "memberof": "src/component/helper/transformer.js~Transformer",
    "static": false,
    "longname": "src/component/helper/transformer.js~Transformer#_path",
    "access": null,
    "description": null,
    "lineNumber": 12,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 277,
    "kind": "member",
    "name": "_transformer",
    "memberof": "src/component/helper/transformer.js~Transformer",
    "static": false,
    "longname": "src/component/helper/transformer.js~Transformer#_transformer",
    "access": null,
    "description": null,
    "lineNumber": 13,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 278,
    "kind": "method",
    "name": "transform",
    "memberof": "src/component/helper/transformer.js~Transformer",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/helper/transformer.js~Transformer#transform",
    "access": null,
    "description": "",
    "lineNumber": 21,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "value",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 279,
    "kind": "get",
    "name": "transformer",
    "memberof": "src/component/helper/transformer.js~Transformer",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/helper/transformer.js~Transformer#transformer",
    "access": null,
    "description": "",
    "lineNumber": 28,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{function}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "function"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 280,
    "kind": "get",
    "name": "path",
    "memberof": "src/component/helper/transformer.js~Transformer",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/helper/transformer.js~Transformer#path",
    "access": null,
    "description": "",
    "lineNumber": 35,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 281,
    "kind": "file",
    "name": "src/component/npm/cache.js",
    "content": "'use strict';\n\nconst fse = require('fs-extra');\nconst path = require('path');\n\n/**\n * File system cache implementation\n */\nclass Cache {\n  /**\n   * @param {string} cacheDir\n   * @param {string} prefix\n   */\n  constructor(cacheDir, prefix) {\n    this._cacheDir = cacheDir;\n    this._prefix = prefix;\n  }\n  \n  /**\n   * @returns {string}\n   */\n  get prefix() {\n    return this._prefix;\n  }\n  \n  /**\n   * @returns {string}\n   */\n  get cacheDir() {\n    return this._cacheDir;\n  }\n  \n  /**\n   * @param {string} key\n   *\n   * @returns {Promise}\n   */\n  has(key) {\n    return fse.pathExists(this._cacheKey(key));\n  }\n  \n  /**\n   * @param {string} key\n   * @param {string} src\n   *\n   * @returns {Promise}\n   */\n  save(key, src) {\n    return fse.copy(src, this._cacheKey(key));\n  }\n  \n  /**\n   * @param {string} key\n   * @param {string} dest\n   *\n   * @returns {Promise}\n   */\n  restore(key, dest) {\n    return fse.copy(this._cacheKey(key), dest);\n  }\n  \n  /**\n   * @param {string} key\n   *\n   * @returns {Promise}\n   */\n  invalidate(key) {\n    return fse.remove(this._cacheKey(key));\n  }\n  \n  /**\n   * @returns {Promise}\n   */\n  flush() {\n    return fse.remove(this._base);\n  }\n  \n  /**\n   * @returns {string}\n   *\n   * @private\n   */\n  get _base() {\n    return path.join(this.cacheDir, this.prefix);\n  }\n  \n  /**\n   * @param {string} key\n   *\n   * @returns {string}\n   *\n   * @private\n   */\n  _cacheKey(key) {\n    return path.join(this._base, key);\n  }\n}\n\nmodule.exports = Cache;\n",
    "static": true,
    "longname": "src/component/npm/cache.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 282,
    "kind": "class",
    "name": "Cache",
    "memberof": "src/component/npm/cache.js",
    "static": true,
    "longname": "src/component/npm/cache.js~Cache",
    "access": null,
    "export": true,
    "importPath": "recink/src/component/npm/cache.js",
    "importStyle": "Cache",
    "description": "File system cache implementation",
    "lineNumber": 9,
    "interface": false
  },
  {
    "__docId__": 283,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/component/npm/cache.js~Cache",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/npm/cache.js~Cache#constructor",
    "access": null,
    "description": "",
    "lineNumber": 14,
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "cacheDir",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "prefix",
        "description": ""
      }
    ]
  },
  {
    "__docId__": 284,
    "kind": "member",
    "name": "_cacheDir",
    "memberof": "src/component/npm/cache.js~Cache",
    "static": false,
    "longname": "src/component/npm/cache.js~Cache#_cacheDir",
    "access": null,
    "description": null,
    "lineNumber": 15,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 285,
    "kind": "member",
    "name": "_prefix",
    "memberof": "src/component/npm/cache.js~Cache",
    "static": false,
    "longname": "src/component/npm/cache.js~Cache#_prefix",
    "access": null,
    "description": null,
    "lineNumber": 16,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 286,
    "kind": "get",
    "name": "prefix",
    "memberof": "src/component/npm/cache.js~Cache",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/npm/cache.js~Cache#prefix",
    "access": null,
    "description": "",
    "lineNumber": 22,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 287,
    "kind": "get",
    "name": "cacheDir",
    "memberof": "src/component/npm/cache.js~Cache",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/npm/cache.js~Cache#cacheDir",
    "access": null,
    "description": "",
    "lineNumber": 29,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 288,
    "kind": "method",
    "name": "has",
    "memberof": "src/component/npm/cache.js~Cache",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/npm/cache.js~Cache#has",
    "access": null,
    "description": "",
    "lineNumber": 38,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "key",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 289,
    "kind": "method",
    "name": "save",
    "memberof": "src/component/npm/cache.js~Cache",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/npm/cache.js~Cache#save",
    "access": null,
    "description": "",
    "lineNumber": 48,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "key",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "src",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 290,
    "kind": "method",
    "name": "restore",
    "memberof": "src/component/npm/cache.js~Cache",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/npm/cache.js~Cache#restore",
    "access": null,
    "description": "",
    "lineNumber": 58,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "key",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "dest",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 291,
    "kind": "method",
    "name": "invalidate",
    "memberof": "src/component/npm/cache.js~Cache",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/npm/cache.js~Cache#invalidate",
    "access": null,
    "description": "",
    "lineNumber": 67,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "key",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 292,
    "kind": "method",
    "name": "flush",
    "memberof": "src/component/npm/cache.js~Cache",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/npm/cache.js~Cache#flush",
    "access": null,
    "description": "",
    "lineNumber": 74,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 293,
    "kind": "get",
    "name": "_base",
    "memberof": "src/component/npm/cache.js~Cache",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/npm/cache.js~Cache#_base",
    "access": "private",
    "description": "",
    "lineNumber": 83,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 294,
    "kind": "method",
    "name": "_cacheKey",
    "memberof": "src/component/npm/cache.js~Cache",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/npm/cache.js~Cache#_cacheKey",
    "access": "private",
    "description": "",
    "lineNumber": 94,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "key",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 295,
    "kind": "file",
    "name": "src/component/npm/events.js",
    "content": "'use strict';\n\nconst dot = require('dot-object');\n\n/**\n * NPM component events\n */\nconst events = {};\n\nevents.$ = [\n  'npm.dependencies.install',\n  'npm.dependencies.postinstall',\n  'npm.cache.init',\n].map(eventPath => {\n  dot.str(eventPath, eventPath, events);\n  \n  return eventPath;\n});\n\nmodule.exports = events;\n",
    "static": true,
    "longname": "src/component/npm/events.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 296,
    "kind": "variable",
    "name": "events",
    "memberof": "src/component/npm/events.js",
    "static": true,
    "longname": "src/component/npm/events.js~events",
    "access": null,
    "export": true,
    "importPath": "recink/src/component/npm/events.js",
    "importStyle": "events",
    "description": "NPM component events",
    "lineNumber": 8,
    "type": {
      "types": [
        "{}"
      ]
    }
  },
  {
    "__docId__": 297,
    "kind": "file",
    "name": "src/component/npm/npm-module.js",
    "content": "'use strict';\n\nconst packageHash = require('package-hash');\nconst path = require('path');\nconst fse = require('fs-extra');\nconst Spinner = require('../helper/spinner');\nconst { spawn } = require('child_process');\nconst md5Hex = require('md5-hex');\nconst SequentialPromise = require('../helper/sequential-promise');\n\n/**\n * Abstraction over an NPM module\n */\nclass NpmModule {\n  /**\n   * @param {string} rootDir\n   * @param {Cache} cache\n   * @param {*} logger\n   */\n  constructor(rootDir, cache, logger) {\n    this._rootDir = rootDir;\n    this._cache = cache;\n    this._logger = logger;\n  }\n  \n  /**\n   * @returns {*}\n   */\n  get logger() {\n    return this._logger;\n  }\n  \n  /**\n   * @returns {string}\n   */\n  get rootDir() {\n    return this._rootDir;\n  }\n  \n  /**\n   * @param {Cache} cache\n   */\n  get cache() {\n    return this._cache;\n  }\n  \n  /**\n   * @returns {string}\n   */\n  get packageFileRelative() {\n    return path.relative(process.cwd(), this.packageFile);\n  }\n  \n  /**\n   * @returns {string}\n   */\n  get packageFile() {\n    return path.join(this.rootDir, NpmModule.PACKAGE_FILE);\n  }\n  \n  /**\n   * @returns {string}\n   */\n  get modulesDir() {\n    return path.join(this.rootDir, NpmModule.MODULES_DIR);\n  }\n  \n  /**\n   * @returns {string}\n   */\n  get debugFile() {\n    return path.join(this.rootDir, NpmModule.NPM_DEBUG_FILE);\n  }\n  \n  /**\n   * @param {*} deps\n   * @param {array} scripts\n   *\n   * @returns {Promise}\n   */\n  install(deps = {}, scripts = []) {\n    let cacheKey;\n    const packageFile = this.packageFile;\n    const modulesDir = this.modulesDir;\n    \n    return fse.ensureDir(modulesDir)\n      .then(() => this._packageHash(packageFile, deps))\n      .then(hash => {\n        cacheKey = hash;\n        \n        return this.cache.has(hash);\n      })\n      .then(inCache => {\n        if (inCache) {\n          this.logger.debug(`Restore ${ this.rootDir } cache from #${ cacheKey }`);\n          \n          return this.cache.restore(cacheKey, modulesDir)\n            .then(() => this._runScripts(scripts));\n        }\n        \n        this.logger.debug(`Install dependencies in ${ this.rootDir }`);\n        \n        return this._install(packageFile, deps)\n          .then(() => this._runScripts(scripts))\n          .then(() => {\n            this.logger.debug(`Save ${ this.rootDir } cache to #${ cacheKey }`);\n            \n            return this.cache.flush()\n              .then(() => this.cache.save(cacheKey, modulesDir));\n          });\n      });\n  }\n  \n  /**\n   * @param {array} scripts\n   * \n   * @returns {Promise}\n   *\n   * @private\n   */\n  _runScripts(scripts) {\n    if (scripts.length <= 0) {\n      return Promise.resolve();\n    }\n    \n    return SequentialPromise.all(scripts.map(script => {\n      return () => this._runScript(script);\n    }));\n  }\n  \n  /**\n   * @param {string} script\n   * \n   * @returns {Promise}\n   *\n   * @private\n   */\n  _runScript(script) {\n    return (new Spinner(\n      `Running ${ script } script in ${ this.rootDir }`\n    )).then(\n      `Script ${ script } execution succeed in ${ this.rootDir }`\n    ).catch(\n      `Script ${ script } execution failed in ${ this.rootDir }`\n    ).promise(new Promise((resolve, reject) => {\n      const options = {\n        cwd: this.rootDir, \n        stdio: 'ignore',\n      };\n\n      const npmRunScript = spawn('npm', [ 'run', script ], options);\n      \n      npmRunScript.on('close', code => {\n        if (code !== 0) {          \n          return reject(new Error(\n            `Failed to run script ${ script } in ${ this.rootDir }.\\n` +\n            `To open logs type: 'open ${ this.debugFile }'`\n          ));\n        }\n        \n        resolve();\n      });\n    }));\n  }\n  \n  /**\n   * @param {string} packageFile\n   * @param {*} additionalDeps\n   *\n   * @returns {Promise}\n   *\n   * @private\n   */\n  _install(packageFile, additionalDeps) {\n    return fse.pathExists(packageFile)\n      .then(hasPackageFile => {\n        return hasPackageFile ? this._doInstall() : Promise.resolve();\n      })\n      .then(() => {\n        const depsVector = Object.keys(additionalDeps)\n          .map(depName => {\n            return `${ depName }@${ additionalDeps[depName] }`;\n          });\n\n        return depsVector.length > 0 \n          ? this._doInstall(depsVector) \n          : Promise.resolve();\n      });\n  }\n  \n  /**\n   * @param {string} depsDebug\n   *\n   * @returns {string}\n   * \n   * @private\n   */\n  _trimDepsDebugInfo(depsDebug) {\n    if (depsDebug.length > 25) {\n      return depsDebug.substr(0, 25) + '...';\n    }\n    \n    return depsDebug;\n  }\n  \n  /**\n   * @param {array} deps\n   *\n   * @returns {Promise}\n   *\n   * @private\n   */\n  _doInstall(deps = []) {\n    const depsDebug = this._trimDepsDebugInfo(deps.length > 0 ? deps.join(', ') : 'MAIN');\n    \n    return (new Spinner(\n      `Installing dependencies in ${ this.rootDir } (${ depsDebug })`\n    )).then(\n      `Dependencies installation succeed in ${ this.rootDir } (${ depsDebug })`\n    ).catch(\n      `Dependencies installation failed in ${ this.rootDir } (${ depsDebug })`\n    ).promise(new Promise((resolve, reject) => {\n      const options = {\n        cwd: this.rootDir, \n        stdio: 'ignore',\n      };\n      \n      // ignore running 'npm install' scripts\n      if (deps.length <= 0) {\n        deps = [ '--ignore-scripts' ];\n      }\n\n      const npmInstall = spawn('npm', [ 'install', '--no-shrinkwrap' ].concat(deps), options);\n      \n      npmInstall.on('close', code => {\n        if (code !== 0) {          \n          return reject(new Error(\n            `Failed to install dependencies in ${ this.rootDir }.\\n` +\n            `To open logs type: 'open ${ this.debugFile }'`\n          ));\n        }\n        \n        resolve();\n      });\n    }));\n  }\n  \n  /**\n   * @param {string} packageFile\n   * @param {*} deps\n   *\n   * @returns {Promise}\n   *\n   * @private\n   */\n  _packageHash(packageFile, deps) {\n    return fse.pathExists(packageFile)\n      .then(hasPackageFile => {\n        const depsHash = this._depsHash(deps);\n        const packageDebug = hasPackageFile ? 'exists' : 'missing';\n        \n        this.logger.debug(\n          `File ${ NpmModule.PACKAGE_FILE } ${ packageDebug } in ${ this.rootDir }`\n        );\n        \n        if (!hasPackageFile) {\n          return Promise.resolve(`${ depsHash }-${ NpmModule.DEFAULT_HASH }`);\n        }\n        \n        return packageHash(packageFile)\n          .then(hash => {\n            return Promise.resolve(`${ depsHash }-${ hash }`);\n          });\n      });\n  }\n  \n  /**\n   * @param {*} deps\n   *\n   * @returns {string}\n   *\n   * @private\n   */\n  _depsHash(deps) {\n    const normalizedDeps = {};\n    \n    Object.keys(deps).sort().map(key => {\n      normalizedDeps[key] = deps[key];\n    });\n    \n    return md5Hex(JSON.stringify(normalizedDeps));\n  }\n  \n  /**\n   * @returns {string}\n   */\n  static get DEFAULT_HASH() {\n    return 'x'.repeat(32);\n  }\n  \n  /**\n   * @returns {string}\n   */\n  static get NPM_DEBUG_FILE() {\n    return 'npm-debug.log';\n  }\n  \n  /**\n   * @returns {string}\n   */\n  static get PACKAGE_FILE() {\n    return 'package.json';\n  }\n  \n  /**\n   * @returns {string}\n   */\n  static get MODULES_DIR() {\n    return 'node_modules';\n  }\n}\n\nmodule.exports = NpmModule;\n",
    "static": true,
    "longname": "src/component/npm/npm-module.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 298,
    "kind": "class",
    "name": "NpmModule",
    "memberof": "src/component/npm/npm-module.js",
    "static": true,
    "longname": "src/component/npm/npm-module.js~NpmModule",
    "access": null,
    "export": true,
    "importPath": "recink/src/component/npm/npm-module.js",
    "importStyle": "NpmModule",
    "description": "Abstraction over an NPM module",
    "lineNumber": 14,
    "interface": false
  },
  {
    "__docId__": 299,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/component/npm/npm-module.js~NpmModule",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/npm/npm-module.js~NpmModule#constructor",
    "access": null,
    "description": "",
    "lineNumber": 20,
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "rootDir",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Cache"
        ],
        "spread": false,
        "optional": false,
        "name": "cache",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "logger",
        "description": ""
      }
    ]
  },
  {
    "__docId__": 300,
    "kind": "member",
    "name": "_rootDir",
    "memberof": "src/component/npm/npm-module.js~NpmModule",
    "static": false,
    "longname": "src/component/npm/npm-module.js~NpmModule#_rootDir",
    "access": null,
    "description": null,
    "lineNumber": 21,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 301,
    "kind": "member",
    "name": "_cache",
    "memberof": "src/component/npm/npm-module.js~NpmModule",
    "static": false,
    "longname": "src/component/npm/npm-module.js~NpmModule#_cache",
    "access": null,
    "description": null,
    "lineNumber": 22,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 302,
    "kind": "member",
    "name": "_logger",
    "memberof": "src/component/npm/npm-module.js~NpmModule",
    "static": false,
    "longname": "src/component/npm/npm-module.js~NpmModule#_logger",
    "access": null,
    "description": null,
    "lineNumber": 23,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 303,
    "kind": "get",
    "name": "logger",
    "memberof": "src/component/npm/npm-module.js~NpmModule",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/npm/npm-module.js~NpmModule#logger",
    "access": null,
    "description": "",
    "lineNumber": 29,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{*}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "*"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 304,
    "kind": "get",
    "name": "rootDir",
    "memberof": "src/component/npm/npm-module.js~NpmModule",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/npm/npm-module.js~NpmModule#rootDir",
    "access": null,
    "description": "",
    "lineNumber": 36,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 305,
    "kind": "get",
    "name": "cache",
    "memberof": "src/component/npm/npm-module.js~NpmModule",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/npm/npm-module.js~NpmModule#cache",
    "access": null,
    "description": "",
    "lineNumber": 43,
    "params": [
      {
        "nullable": null,
        "types": [
          "Cache"
        ],
        "spread": false,
        "optional": false,
        "name": "cache",
        "description": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 306,
    "kind": "get",
    "name": "packageFileRelative",
    "memberof": "src/component/npm/npm-module.js~NpmModule",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/npm/npm-module.js~NpmModule#packageFileRelative",
    "access": null,
    "description": "",
    "lineNumber": 50,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 307,
    "kind": "get",
    "name": "packageFile",
    "memberof": "src/component/npm/npm-module.js~NpmModule",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/npm/npm-module.js~NpmModule#packageFile",
    "access": null,
    "description": "",
    "lineNumber": 57,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 308,
    "kind": "get",
    "name": "modulesDir",
    "memberof": "src/component/npm/npm-module.js~NpmModule",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/npm/npm-module.js~NpmModule#modulesDir",
    "access": null,
    "description": "",
    "lineNumber": 64,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 309,
    "kind": "get",
    "name": "debugFile",
    "memberof": "src/component/npm/npm-module.js~NpmModule",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/npm/npm-module.js~NpmModule#debugFile",
    "access": null,
    "description": "",
    "lineNumber": 71,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 310,
    "kind": "method",
    "name": "install",
    "memberof": "src/component/npm/npm-module.js~NpmModule",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/npm/npm-module.js~NpmModule#install",
    "access": null,
    "description": "",
    "lineNumber": 81,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "deps",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "array"
        ],
        "spread": false,
        "optional": false,
        "name": "scripts",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 311,
    "kind": "method",
    "name": "_runScripts",
    "memberof": "src/component/npm/npm-module.js~NpmModule",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/npm/npm-module.js~NpmModule#_runScripts",
    "access": "private",
    "description": "",
    "lineNumber": 121,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "array"
        ],
        "spread": false,
        "optional": false,
        "name": "scripts",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 312,
    "kind": "method",
    "name": "_runScript",
    "memberof": "src/component/npm/npm-module.js~NpmModule",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/npm/npm-module.js~NpmModule#_runScript",
    "access": "private",
    "description": "",
    "lineNumber": 138,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "script",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 313,
    "kind": "method",
    "name": "_install",
    "memberof": "src/component/npm/npm-module.js~NpmModule",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/npm/npm-module.js~NpmModule#_install",
    "access": "private",
    "description": "",
    "lineNumber": 174,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "packageFile",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "additionalDeps",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 314,
    "kind": "method",
    "name": "_trimDepsDebugInfo",
    "memberof": "src/component/npm/npm-module.js~NpmModule",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/npm/npm-module.js~NpmModule#_trimDepsDebugInfo",
    "access": "private",
    "description": "",
    "lineNumber": 198,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "depsDebug",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 315,
    "kind": "method",
    "name": "_doInstall",
    "memberof": "src/component/npm/npm-module.js~NpmModule",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/npm/npm-module.js~NpmModule#_doInstall",
    "access": "private",
    "description": "",
    "lineNumber": 213,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "array"
        ],
        "spread": false,
        "optional": false,
        "name": "deps",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 316,
    "kind": "method",
    "name": "_packageHash",
    "memberof": "src/component/npm/npm-module.js~NpmModule",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/npm/npm-module.js~NpmModule#_packageHash",
    "access": "private",
    "description": "",
    "lineNumber": 256,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "packageFile",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "deps",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 317,
    "kind": "method",
    "name": "_depsHash",
    "memberof": "src/component/npm/npm-module.js~NpmModule",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/npm/npm-module.js~NpmModule#_depsHash",
    "access": "private",
    "description": "",
    "lineNumber": 284,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "deps",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 318,
    "kind": "get",
    "name": "DEFAULT_HASH",
    "memberof": "src/component/npm/npm-module.js~NpmModule",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/component/npm/npm-module.js~NpmModule.DEFAULT_HASH",
    "access": null,
    "description": "",
    "lineNumber": 297,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 319,
    "kind": "get",
    "name": "NPM_DEBUG_FILE",
    "memberof": "src/component/npm/npm-module.js~NpmModule",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/component/npm/npm-module.js~NpmModule.NPM_DEBUG_FILE",
    "access": null,
    "description": "",
    "lineNumber": 304,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 320,
    "kind": "get",
    "name": "PACKAGE_FILE",
    "memberof": "src/component/npm/npm-module.js~NpmModule",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/component/npm/npm-module.js~NpmModule.PACKAGE_FILE",
    "access": null,
    "description": "",
    "lineNumber": 311,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 321,
    "kind": "get",
    "name": "MODULES_DIR",
    "memberof": "src/component/npm/npm-module.js~NpmModule",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/component/npm/npm-module.js~NpmModule.MODULES_DIR",
    "access": null,
    "description": "",
    "lineNumber": 318,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 322,
    "kind": "file",
    "name": "src/component/npm-component.js",
    "content": "'use strict';\n\nconst DependencyBasedComponent = require('./dependency-based-component');\nconst emitEvents = require('./emit/events');\nconst events = require('./npm/events');\nconst os = require('os');\nconst fse = require('fs-extra');\nconst NpmModule = require('./npm/npm-module');\nconst Cache = require('./npm/cache');\nconst path = require('path');\n\n/**\n * NPM component\n */\nclass NpmComponent extends DependencyBasedComponent {\n  /**\n   * @param {*} args\n   */\n  constructor(...args) {\n    super(...args);\n    \n    this._cacheDir = null;\n    this._cache = {};\n  }\n  \n  /**\n   * @returns {string}\n   */\n  get name() {\n    return 'npm';\n  }\n  \n  /**\n   * @returns {string[]}\n   */\n  get dependencies() {\n    return [ 'emit' ];\n  }\n  \n  /**\n   * @param {Emitter} emitter\n   * \n   * @returns {Promise}\n   */\n  cacheDir(emitter) {\n    if (this._cacheDir) {\n      return Promise.resolve(this._cacheDir);\n    }\n    \n    this._cacheDir = path.join(os.tmpdir(), '_recink_npm_cache_');\n    \n    return fse.ensureDir(this._cacheDir)\n      .then(() => {\n        this.logger.debug('Npm cache', this._cacheDir);\n        \n        return emitter.emitBlocking(events.npm.cache.init, this._cacheDir)\n          .then(() => Promise.resolve(this._cacheDir));\n      });\n  }\n  \n  /**\n   * @param {Emitter} emitter\n   * @param {string} name\n   * \n   * @returns {Promise}\n   */\n  cache(emitter, name) {\n    if (this._cache.hasOwnProperty(name)) {\n      return Promise.resolve(this._cache[name]);\n    }\n    \n    return this.cacheDir(emitter)\n      .then(cacheDir => {\n        this._cache[name] = new Cache(cacheDir, name);\n        \n        return Promise.resolve(this._cache[name]);\n      });\n  }\n  \n  /**\n   * @param {Emitter} emitter\n   * \n   * @returns {Promise}\n   */\n  run(emitter) {\n    return new Promise(resolve => {\n      emitter.onBlocking(emitEvents.module.process.start, emitModule => {\n        return this.cache(emitter, emitModule.name)\n          .then(cache => {\n            const npmModule = new NpmModule(\n              emitModule.container.get('root'),\n              cache,\n              this.logger\n            );\n            \n            this.logger.info(\n              this.logger.emoji.hat, \n              `Ensure dependencies in place for ${ emitModule.name }`\n            );\n            \n            emitter.emit(events.npm.dependencies.install, npmModule, emitModule);\n            \n            return npmModule.install(\n              Object.assign(\n                {}, \n                this.container.get('dependencies', {}), \n                emitModule.container.get('dependencies', {})\n              ),\n              [].concat(\n                this.container.get('scripts', []),\n                emitModule.container.get('scripts', [])\n              )\n            ).then(() => {              \n              emitter.emit(events.npm.dependencies.postinstall, npmModule, emitModule);\n            });\n          });\n      });\n      \n      emitter.on(emitEvents.modules.process.end, () => {\n        process.nextTick(() => resolve());\n      });\n    });\n  }\n}\n\nmodule.exports = NpmComponent;\n",
    "static": true,
    "longname": "src/component/npm-component.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 323,
    "kind": "class",
    "name": "NpmComponent",
    "memberof": "src/component/npm-component.js",
    "static": true,
    "longname": "src/component/npm-component.js~NpmComponent",
    "access": null,
    "export": true,
    "importPath": "recink/src/component/npm-component.js",
    "importStyle": "NpmComponent",
    "description": "NPM component",
    "lineNumber": 15,
    "interface": false,
    "extends": [
      "src/component/dependency-based-component.js~DependencyBasedComponent"
    ]
  },
  {
    "__docId__": 324,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/component/npm-component.js~NpmComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/npm-component.js~NpmComponent#constructor",
    "access": null,
    "description": "",
    "lineNumber": 19,
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "args",
        "description": ""
      }
    ]
  },
  {
    "__docId__": 325,
    "kind": "member",
    "name": "_cacheDir",
    "memberof": "src/component/npm-component.js~NpmComponent",
    "static": false,
    "longname": "src/component/npm-component.js~NpmComponent#_cacheDir",
    "access": null,
    "description": null,
    "lineNumber": 22,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 326,
    "kind": "member",
    "name": "_cache",
    "memberof": "src/component/npm-component.js~NpmComponent",
    "static": false,
    "longname": "src/component/npm-component.js~NpmComponent#_cache",
    "access": null,
    "description": null,
    "lineNumber": 23,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "{}"
      ]
    }
  },
  {
    "__docId__": 327,
    "kind": "get",
    "name": "name",
    "memberof": "src/component/npm-component.js~NpmComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/npm-component.js~NpmComponent#name",
    "access": null,
    "description": "",
    "lineNumber": 29,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 328,
    "kind": "get",
    "name": "dependencies",
    "memberof": "src/component/npm-component.js~NpmComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/npm-component.js~NpmComponent#dependencies",
    "access": null,
    "description": "",
    "lineNumber": 36,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string[]}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string[]"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "string[]"
      ]
    }
  },
  {
    "__docId__": 329,
    "kind": "method",
    "name": "cacheDir",
    "memberof": "src/component/npm-component.js~NpmComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/npm-component.js~NpmComponent#cacheDir",
    "access": null,
    "description": "",
    "lineNumber": 45,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Emitter"
        ],
        "spread": false,
        "optional": false,
        "name": "emitter",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 330,
    "kind": "member",
    "name": "_cacheDir",
    "memberof": "src/component/npm-component.js~NpmComponent",
    "static": false,
    "longname": "src/component/npm-component.js~NpmComponent#_cacheDir",
    "access": null,
    "description": null,
    "lineNumber": 50,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 331,
    "kind": "method",
    "name": "cache",
    "memberof": "src/component/npm-component.js~NpmComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/npm-component.js~NpmComponent#cache",
    "access": null,
    "description": "",
    "lineNumber": 67,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Emitter"
        ],
        "spread": false,
        "optional": false,
        "name": "emitter",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "name",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 332,
    "kind": "method",
    "name": "run",
    "memberof": "src/component/npm-component.js~NpmComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/npm-component.js~NpmComponent#run",
    "access": null,
    "description": "",
    "lineNumber": 85,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Emitter"
        ],
        "spread": false,
        "optional": false,
        "name": "emitter",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 333,
    "kind": "file",
    "name": "src/component/preprocess/abstract-transformer.js",
    "content": "'use strict';\n\n/**\n * Transformer interface\n */\nclass AbstractTransformer {\n  /**\n   * @param {*} value\n   *\n   * @throws {Error}\n   */\n  transform(value) {\n    throw new Error(\n      `${ this.constructor.name }.transform(value) not implemented!`\n    );\n  }\n}\n\nmodule.exports = AbstractTransformer;\n",
    "static": true,
    "longname": "src/component/preprocess/abstract-transformer.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 334,
    "kind": "class",
    "name": "AbstractTransformer",
    "memberof": "src/component/preprocess/abstract-transformer.js",
    "static": true,
    "longname": "src/component/preprocess/abstract-transformer.js~AbstractTransformer",
    "access": null,
    "export": true,
    "importPath": "recink/src/component/preprocess/abstract-transformer.js",
    "importStyle": "AbstractTransformer",
    "description": "Transformer interface",
    "lineNumber": 6,
    "interface": false
  },
  {
    "__docId__": 335,
    "kind": "method",
    "name": "transform",
    "memberof": "src/component/preprocess/abstract-transformer.js~AbstractTransformer",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/preprocess/abstract-transformer.js~AbstractTransformer#transform",
    "access": null,
    "description": "",
    "lineNumber": 12,
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "value",
        "description": ""
      }
    ],
    "throws": [
      {
        "types": [
          "Error"
        ],
        "description": ""
      }
    ]
  },
  {
    "__docId__": 336,
    "kind": "file",
    "name": "src/component/preprocess/eval-transformer.js",
    "content": "'use strict';\n\n/* eslint no-eval: 0 */\n\nconst AbstractTransformer = require('./abstract-transformer');\nconst Logger = require('../../../src/logger');\n\n/**\n * Transformer implementation of 'eval'\n */\nclass EvalTransformer extends AbstractTransformer {\n  /**\n   * @param {*} value\n   * \n   * @returns {*}\n   */\n  transform(value) {\n    try {\n      return eval(value);\n    } catch (err) {\n      Logger.debug(Logger.emoji.bulb, `Is not possible to evaluate ${value} variable, leaving as is`);\n      return value;\n    }\n  }\n}\n\nmodule.exports = EvalTransformer;\n",
    "static": true,
    "longname": "src/component/preprocess/eval-transformer.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 337,
    "kind": "class",
    "name": "EvalTransformer",
    "memberof": "src/component/preprocess/eval-transformer.js",
    "static": true,
    "longname": "src/component/preprocess/eval-transformer.js~EvalTransformer",
    "access": null,
    "export": true,
    "importPath": "recink/src/component/preprocess/eval-transformer.js",
    "importStyle": "EvalTransformer",
    "description": "Transformer implementation of 'eval'",
    "lineNumber": 11,
    "interface": false,
    "extends": [
      "src/component/preprocess/abstract-transformer.js~AbstractTransformer"
    ]
  },
  {
    "__docId__": 338,
    "kind": "method",
    "name": "transform",
    "memberof": "src/component/preprocess/eval-transformer.js~EvalTransformer",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/preprocess/eval-transformer.js~EvalTransformer#transform",
    "access": null,
    "description": "",
    "lineNumber": 17,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{*}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "value",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "*"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 339,
    "kind": "file",
    "name": "src/component/preprocess/factory.js",
    "content": "'use strict';\n\nconst AbstractTransformer = require('./abstract-transformer');\n\n/**\n * Transformer factory\n */\nclass Factory {  \n  /**\n   * @param {string} name\n   * @param {*} args\n   *\n   * @returns {AbstractTransformer}\n   */\n  static create(name, ...args) {\n    const TransformerImplementation = require(`./${ name }-transformer`);\n    const transformer = new TransformerImplementation(...args);\n    \n    if (!(transformer instanceof AbstractTransformer)) {\n      throw new Error(`${ name } transformer should be an implementation of AbstractTransformer`);\n    }\n    \n    return transformer;\n  }\n  \n  /**\n   * @param {*} args\n   *\n   * @returns {VoidDriver}\n   */\n  static eval(...args) {\n    return this.create('eval', ...args);\n  }\n}\n\nmodule.exports = Factory;\n",
    "static": true,
    "longname": "src/component/preprocess/factory.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 340,
    "kind": "class",
    "name": "Factory",
    "memberof": "src/component/preprocess/factory.js",
    "static": true,
    "longname": "src/component/preprocess/factory.js~Factory",
    "access": null,
    "export": true,
    "importPath": "recink/src/component/preprocess/factory.js",
    "importStyle": "Factory",
    "description": "Transformer factory",
    "lineNumber": 8,
    "interface": false
  },
  {
    "__docId__": 341,
    "kind": "method",
    "name": "create",
    "memberof": "src/component/preprocess/factory.js~Factory",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/component/preprocess/factory.js~Factory.create",
    "access": null,
    "description": "",
    "lineNumber": 15,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{AbstractTransformer}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "name",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "args",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "AbstractTransformer"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 342,
    "kind": "method",
    "name": "eval",
    "memberof": "src/component/preprocess/factory.js~Factory",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/component/preprocess/factory.js~Factory.eval",
    "access": null,
    "description": "",
    "lineNumber": 31,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{VoidDriver}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "args",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "VoidDriver"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 343,
    "kind": "file",
    "name": "src/component/preprocess-component.js",
    "content": "'use strict';\n\nconst AbstractComponent = require('./abstract-component');\nconst ConfigBasedComponent = require('./config-based-component');\nconst factory = require('./preprocess/factory');\nconst Container = require('../container');\n\n/**\n * Preprocess component\n */\nclass PreprocessComponent extends AbstractComponent {\n  /**\n   * @param {string} configPath\n   */\n  constructor(configPath = null) {\n    super();\n    \n    this._configPath = configPath \n      || `${ ConfigBasedComponent.MAIN_CONFIG_KEY }.${ this.name }`;\n  }\n  \n  /**\n   * @returns {string}\n   */\n  get name() {\n    return 'preprocess';\n  }\n  /**\n   * @returns {string}\n   */\n  get configPath() {\n    return this._configPath;\n  }\n  \n  /**\n   * @param {Emitter} emitter\n   *\n   * @returns {Promise}\n   */\n  subscribe(emitter) {\n    emitter.onBlocking(this.events.config.preprocess, config => {\n      const container = new Container(config);\n      \n      if (container.has(this.configPath)) {\n        this.setActive(true);\n        \n        const preprocessObj = container.get(this.configPath, {});\n        \n        Object.keys(preprocessObj).map(configPath => {\n          let preprocessors = preprocessObj[configPath];\n          preprocessors = Array.isArray(preprocessors) \n            ? preprocessors : [ preprocessors.toString() ];\n            \n          this.logger.debug(\n            `Preprocess ${ configPath } using - ${preprocessors.join(', ')  }`\n          );\n          \n          const value = preprocessors.map(p => factory[p]()).reduce(\n            (value, preprocessor) => preprocessor.transform(value),\n            container.get(configPath)\n          );\n          \n          container.set(configPath, value);\n        });\n      }\n      \n      return Promise.resolve();\n    }, PreprocessComponent.DEFAULT_PRIORITY);\n    \n    return Promise.resolve();\n  }\n  \n  /**\n   * @returns {number}\n   */\n  static get DEFAULT_PRIORITY() {\n    return 10;\n  }\n}\n\nmodule.exports = PreprocessComponent;\n",
    "static": true,
    "longname": "src/component/preprocess-component.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 344,
    "kind": "class",
    "name": "PreprocessComponent",
    "memberof": "src/component/preprocess-component.js",
    "static": true,
    "longname": "src/component/preprocess-component.js~PreprocessComponent",
    "access": null,
    "export": true,
    "importPath": "recink/src/component/preprocess-component.js",
    "importStyle": "PreprocessComponent",
    "description": "Preprocess component",
    "lineNumber": 11,
    "interface": false,
    "extends": [
      "src/component/abstract-component.js~AbstractComponent"
    ]
  },
  {
    "__docId__": 345,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/component/preprocess-component.js~PreprocessComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/preprocess-component.js~PreprocessComponent#constructor",
    "access": null,
    "description": "",
    "lineNumber": 15,
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "configPath",
        "description": ""
      }
    ]
  },
  {
    "__docId__": 346,
    "kind": "member",
    "name": "_configPath",
    "memberof": "src/component/preprocess-component.js~PreprocessComponent",
    "static": false,
    "longname": "src/component/preprocess-component.js~PreprocessComponent#_configPath",
    "access": null,
    "description": null,
    "lineNumber": 18,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 347,
    "kind": "get",
    "name": "name",
    "memberof": "src/component/preprocess-component.js~PreprocessComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/preprocess-component.js~PreprocessComponent#name",
    "access": null,
    "description": "",
    "lineNumber": 25,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 348,
    "kind": "get",
    "name": "configPath",
    "memberof": "src/component/preprocess-component.js~PreprocessComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/preprocess-component.js~PreprocessComponent#configPath",
    "access": null,
    "description": "",
    "lineNumber": 31,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 349,
    "kind": "method",
    "name": "subscribe",
    "memberof": "src/component/preprocess-component.js~PreprocessComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/preprocess-component.js~PreprocessComponent#subscribe",
    "access": null,
    "description": "",
    "lineNumber": 40,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Emitter"
        ],
        "spread": false,
        "optional": false,
        "name": "emitter",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 350,
    "kind": "get",
    "name": "DEFAULT_PRIORITY",
    "memberof": "src/component/preprocess-component.js~PreprocessComponent",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/component/preprocess-component.js~PreprocessComponent.DEFAULT_PRIORITY",
    "access": null,
    "description": "",
    "lineNumber": 76,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{number}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "number"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "number"
      ]
    }
  },
  {
    "__docId__": 351,
    "kind": "file",
    "name": "src/component/test/events.js",
    "content": "'use strict';\n\nconst dot = require('dot-object');\n\n/**\n * Test component events\n */\nconst events = {};\n\nevents.$ = [\n  'assets.test.end',\n  'asset.test.skip',\n  'asset.test.add',\n  'asset.tests.start',\n  'asset.tests.end',\n].map(eventPath => {\n  dot.str(eventPath, eventPath, events);\n  \n  return eventPath;\n});\n\nmodule.exports = events;\n",
    "static": true,
    "longname": "src/component/test/events.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 352,
    "kind": "variable",
    "name": "events",
    "memberof": "src/component/test/events.js",
    "static": true,
    "longname": "src/component/test/events.js~events",
    "access": null,
    "export": true,
    "importPath": "recink/src/component/test/events.js",
    "importStyle": "events",
    "description": "Test component events",
    "lineNumber": 8,
    "type": {
      "types": [
        "{}"
      ]
    }
  },
  {
    "__docId__": 353,
    "kind": "file",
    "name": "src/component/test/unit-runner.js",
    "content": "'use strict';\n\nconst fs = require('fs');\nconst path = require('path');\nconst Mocha = require('mocha');\nconst uuidv1 = require('uuid/v1');\nconst Logger = require('../../../src/logger');\n\n/**\n * Unit test runner\n */\nclass UnitRunner {\n  /**\n   * @param {Object} options\n   */\n  constructor(options = {}) {\n    this._tmps = [];\n    this._mocha = new Mocha(options);\n  }\n\n  /**\n   * Run tests\n   * @param {Array} tests\n   * @returns {Promise}\n   */\n  run(tests) {\n    return new Promise((resolve, reject) => {\n      tests.forEach(test => {\n        const testDir = path.dirname(test);\n        const tmpTest = path.join(testDir, `${uuidv1()}.spec.js`);\n\n        fs.writeFileSync(tmpTest, fs.readFileSync(test));\n        this._tmps.push(tmpTest);\n        this._mocha.addFile(tmpTest);\n      });\n\n      this._mocha.run(err => {\n        if (err) {\n          this._removeTmpFiles();\n          return reject(err);\n        }\n\n        return resolve();\n      });\n    });\n  }\n\n  /**\n   * Get mocha instance\n   * @returns {Mocha}\n   */\n  getMocha() {\n    return this._mocha;\n  }\n\n  /**\n   * Cleanup action\n   * @returns {Promise}\n   */\n  cleanup() {\n    this._removeTmpFiles();\n\n    return Promise.resolve();\n  }\n\n  /**\n   * Remove tmp test files\n   * @private\n   */\n  _removeTmpFiles() {\n    this._tmps.forEach(tmpTest => {\n      try {\n        fs.unlinkSync(tmpTest);\n      } catch (err) {\n        if (err.code !== 'ENOENT') {\n          Logger.warn(Logger.emoji.bulb, err.message);\n        }\n      }\n    });\n  }\n}\n\nmodule.exports = UnitRunner;\n",
    "static": true,
    "longname": "src/component/test/unit-runner.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 354,
    "kind": "class",
    "name": "UnitRunner",
    "memberof": "src/component/test/unit-runner.js",
    "static": true,
    "longname": "src/component/test/unit-runner.js~UnitRunner",
    "access": null,
    "export": true,
    "importPath": "recink/src/component/test/unit-runner.js",
    "importStyle": "UnitRunner",
    "description": "Unit test runner",
    "lineNumber": 12,
    "interface": false
  },
  {
    "__docId__": 355,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/component/test/unit-runner.js~UnitRunner",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/test/unit-runner.js~UnitRunner#constructor",
    "access": null,
    "description": "",
    "lineNumber": 16,
    "params": [
      {
        "nullable": null,
        "types": [
          "Object"
        ],
        "spread": false,
        "optional": false,
        "name": "options",
        "description": ""
      }
    ]
  },
  {
    "__docId__": 356,
    "kind": "member",
    "name": "_tmps",
    "memberof": "src/component/test/unit-runner.js~UnitRunner",
    "static": false,
    "longname": "src/component/test/unit-runner.js~UnitRunner#_tmps",
    "access": null,
    "description": null,
    "lineNumber": 17,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*[]"
      ]
    }
  },
  {
    "__docId__": 357,
    "kind": "member",
    "name": "_mocha",
    "memberof": "src/component/test/unit-runner.js~UnitRunner",
    "static": false,
    "longname": "src/component/test/unit-runner.js~UnitRunner#_mocha",
    "access": null,
    "description": null,
    "lineNumber": 18,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 358,
    "kind": "method",
    "name": "run",
    "memberof": "src/component/test/unit-runner.js~UnitRunner",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/test/unit-runner.js~UnitRunner#run",
    "access": null,
    "description": "Run tests",
    "lineNumber": 26,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Array"
        ],
        "spread": false,
        "optional": false,
        "name": "tests",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 359,
    "kind": "method",
    "name": "getMocha",
    "memberof": "src/component/test/unit-runner.js~UnitRunner",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/test/unit-runner.js~UnitRunner#getMocha",
    "access": null,
    "description": "Get mocha instance",
    "lineNumber": 52,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Mocha}"
      }
    ],
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "Mocha"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 360,
    "kind": "method",
    "name": "cleanup",
    "memberof": "src/component/test/unit-runner.js~UnitRunner",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/test/unit-runner.js~UnitRunner#cleanup",
    "access": null,
    "description": "Cleanup action",
    "lineNumber": 60,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 361,
    "kind": "method",
    "name": "_removeTmpFiles",
    "memberof": "src/component/test/unit-runner.js~UnitRunner",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/test/unit-runner.js~UnitRunner#_removeTmpFiles",
    "access": "private",
    "description": "Remove tmp test files",
    "lineNumber": 70,
    "params": []
  },
  {
    "__docId__": 362,
    "kind": "file",
    "name": "src/component/test-component.js",
    "content": "'use strict';\n\nconst print = require('print');\nconst unitEvents = require('./test/events');\nconst emitEvents = require('./emit/events');\nconst UnitRunner = require('./test/unit-runner');\nconst ContainerTransformer = require('./helper/container-transformer');\nconst DependencyBasedComponent = require('./dependency-based-component');\n\n/**\n * Test component\n */\nclass TestComponent extends DependencyBasedComponent {\n  /**\n   * @param {*} args\n   */\n  constructor(...args) {\n    super(...args);\n\n    /**\n     * _units format\n     * @type {{\n     *  moduleName: {\n     *    assets: [],\n     *    runner: UnitRunner\n     *  }\n     * }}\n     */\n    this._units = {};\n    this._stats = {\n      total: 0,\n      processed: 0,\n      ignored: 0,\n    };\n  }\n  \n  /**\n   * @returns {string}\n   */\n  get name() {\n    return 'test';\n  }\n  \n  /**\n   * @returns {string[]}\n   */\n  get dependencies() {\n    return [ 'emit' ];\n  }\n\n  /**\n   * @param {Emitter} emitter\n   * @returns {Promise}\n   */\n  run(emitter) {\n    return new Promise((resolve, reject) => {\n      const mochaOptions = this.container.get('mocha.options', {});\n\n      emitter.onBlocking(emitEvents.module.emit.asset, payload => {\n        if (!this._match(payload)) {\n          return emitter.emitBlocking(unitEvents.asset.test.skip, payload);\n        }\n\n        return emitter.emitBlocking(unitEvents.asset.test.add, {}).then(() => {\n          const { fileAbs, module } = payload;\n          this.logger.info(this.logger.emoji.fist, `New test registered: ${ fileAbs }`);\n\n          if (!this._units.hasOwnProperty(module.name)) {\n            this._units[module.name] = {\n              assets: [],\n              runner: new UnitRunner(mochaOptions)\n            };\n          }\n\n          this._units[module.name].assets.push(fileAbs);\n\n          return Promise.resolve();\n        });\n      }, TestComponent.DEFAULT_PRIORITY);\n\n      emitter.onBlocking(emitEvents.module.process.end, module => {\n        if (!this._units.hasOwnProperty(module.name)) {\n          return Promise.resolve();\n        }\n\n        const unitModule = this._units[module.name];\n        const unitRunner = unitModule.runner;\n        const mocha = unitRunner.getMocha();\n\n        return emitter.emitBlocking(unitEvents.asset.tests.start, mocha, module).then(() => {\n          if (unitModule.assets.length <= 0) {\n            return Promise.resolve();\n          }\n\n          return unitRunner.run(unitModule.assets).then(failures => {\n            if (failures > 0) {\n              return Promise.reject(\n                new Error(`Tests failed in module ${ module.name } with ${ failures } failures`)\n              );\n            }\n\n            return unitRunner.cleanup();\n          });\n        }).then(() => emitter.emitBlocking(unitEvents.asset.tests.end, mocha, module));\n      }, TestComponent.DEFAULT_PRIORITY);\n      \n      emitter.on(emitEvents.modules.process.end, () => {\n        this.waitProcessing()\n          .then(() => emitter.emitBlocking(unitEvents.assets.test.end, this))\n          .then(() => {\n            this.logger.info(this.logger.emoji.beer, `Finished processing ${ this.stats.processed } test assets`);\n            this.logger.debug(this.dumpStats());\n\n            resolve();\n          })\n          .catch(error => reject(error));\n      });\n    });\n  }\n  \n  /**\n   * @param {*} config\n   * @param {string} configFile\n   * @returns {Container}\n   */\n  prepareConfig(config, configFile) {\n    return super.prepareConfig(config, configFile)\n      .then(container => {\n        return (new ContainerTransformer(container))\n          .addPattern('pattern')\n          .addPattern('ignore')\n          .transform();\n      });\n  }\n  \n  /**\n   * @param {*} payload\n   *\n   * @returns {boolean}\n   * \n   * @private\n   */\n  _match(payload) {\n    const pattern = this.container.get('pattern', []);\n    const ignore = this.container.get('ignore', []);\n\n    const result = pattern.filter(p => this._test(p, payload.file)).length > 0\n      && ignore.filter(i => this._test(i, payload.file)).length <= 0;\n    \n    if (result) {\n      this.stats.processed++;\n    } else {\n      this.stats.ignored++;\n    }\n    \n    this.stats.total++;\n      \n    return result;\n  }\n  \n  /**\n   * @param {string|RegExp} pattern\n   * @param {string} value\n   *\n   * @returns {boolean}\n   *\n   * @private\n   */\n  _test(pattern, value) {\n    if (!(pattern instanceof RegExp)) {\n      return value.indexOf(pattern.toString()) !== -1;\n    }\n    \n    return pattern.test(value);\n  }\n  \n  /**\n   * @returns {*}\n   */\n  get stats() {\n    return this._stats;\n  }\n  \n  /**\n   * @returns {string}\n   */\n  dumpStats() {\n    return print(this.stats, {\n      showArrayIndices: true,\n      showArrayLength: true,\n      sortProps: false,\n    }).replace(/\\t/g, '   ');\n  }\n  \n  /**\n   * @returns {number}\n   */\n  static get DEFAULT_PRIORITY() {\n    return 10;\n  }\n}\n\nmodule.exports = TestComponent;\n",
    "static": true,
    "longname": "src/component/test-component.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 363,
    "kind": "class",
    "name": "TestComponent",
    "memberof": "src/component/test-component.js",
    "static": true,
    "longname": "src/component/test-component.js~TestComponent",
    "access": null,
    "export": true,
    "importPath": "recink/src/component/test-component.js",
    "importStyle": "TestComponent",
    "description": "Test component",
    "lineNumber": 13,
    "interface": false,
    "extends": [
      "src/component/dependency-based-component.js~DependencyBasedComponent"
    ]
  },
  {
    "__docId__": 364,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/component/test-component.js~TestComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/test-component.js~TestComponent#constructor",
    "access": null,
    "description": "",
    "lineNumber": 17,
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "args",
        "description": ""
      }
    ]
  },
  {
    "__docId__": 365,
    "kind": "member",
    "name": "_units",
    "memberof": "src/component/test-component.js~TestComponent",
    "static": false,
    "longname": "src/component/test-component.js~TestComponent#_units",
    "access": null,
    "description": "_units format",
    "lineNumber": 29,
    "type": {
      "nullable": null,
      "types": [
        "{\n moduleName: {\n   assets: [],\n   runner: UnitRunner\n "
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 366,
    "kind": "member",
    "name": "_stats",
    "memberof": "src/component/test-component.js~TestComponent",
    "static": false,
    "longname": "src/component/test-component.js~TestComponent#_stats",
    "access": null,
    "description": null,
    "lineNumber": 30,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "{\"total\": *, \"processed\": *, \"ignored\": *}"
      ]
    }
  },
  {
    "__docId__": 367,
    "kind": "get",
    "name": "name",
    "memberof": "src/component/test-component.js~TestComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/test-component.js~TestComponent#name",
    "access": null,
    "description": "",
    "lineNumber": 40,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 368,
    "kind": "get",
    "name": "dependencies",
    "memberof": "src/component/test-component.js~TestComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/test-component.js~TestComponent#dependencies",
    "access": null,
    "description": "",
    "lineNumber": 47,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string[]}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string[]"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "string[]"
      ]
    }
  },
  {
    "__docId__": 369,
    "kind": "method",
    "name": "run",
    "memberof": "src/component/test-component.js~TestComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/test-component.js~TestComponent#run",
    "access": null,
    "description": "",
    "lineNumber": 55,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Emitter"
        ],
        "spread": false,
        "optional": false,
        "name": "emitter",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 370,
    "kind": "method",
    "name": "prepareConfig",
    "memberof": "src/component/test-component.js~TestComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/test-component.js~TestComponent#prepareConfig",
    "access": null,
    "description": "",
    "lineNumber": 126,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Container}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "config",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "configFile",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Container"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 371,
    "kind": "method",
    "name": "_match",
    "memberof": "src/component/test-component.js~TestComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/test-component.js~TestComponent#_match",
    "access": "private",
    "description": "",
    "lineNumber": 143,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{boolean}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "payload",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "boolean"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 372,
    "kind": "method",
    "name": "_test",
    "memberof": "src/component/test-component.js~TestComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/test-component.js~TestComponent#_test",
    "access": "private",
    "description": "",
    "lineNumber": 169,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{boolean}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string",
          "RegExp"
        ],
        "spread": false,
        "optional": false,
        "name": "pattern",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "value",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "boolean"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 373,
    "kind": "get",
    "name": "stats",
    "memberof": "src/component/test-component.js~TestComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/test-component.js~TestComponent#stats",
    "access": null,
    "description": "",
    "lineNumber": 180,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{*}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "*"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 374,
    "kind": "method",
    "name": "dumpStats",
    "memberof": "src/component/test-component.js~TestComponent",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/component/test-component.js~TestComponent#dumpStats",
    "access": null,
    "description": "",
    "lineNumber": 187,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string}"
      }
    ],
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 375,
    "kind": "get",
    "name": "DEFAULT_PRIORITY",
    "memberof": "src/component/test-component.js~TestComponent",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/component/test-component.js~TestComponent.DEFAULT_PRIORITY",
    "access": null,
    "description": "",
    "lineNumber": 198,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{number}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "number"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "number"
      ]
    }
  },
  {
    "__docId__": 376,
    "kind": "file",
    "name": "src/config/abstract-config.js",
    "content": "'use strict';\n\nconst fs = require('fs');\nconst pify = require('pify');\nconst fse = require('fs-extra');\n\n/**\n * Abstract configuration manager\n */\nclass AbstractConfig {\n  /**\n   * @param {string} file\n   */\n  constructor(file = null) {\n    this._file = file;\n  }\n  \n  /**\n   * @returns {string}\n   */\n  get file() {\n    return this._file;\n  }\n  \n  /**\n   * @param {string} file\n   *\n   * @returns {Promise}\n   */\n  load(file = null) {\n    const configFile = file || this.file;\n    \n    return fse.pathExists(configFile)\n      .then(exists => {\n        if (!exists) {\n          return Promise.reject(new Error(\n            `Missing configuration file ${ configFile }`\n          ));\n        }\n        \n        return pify(fs.readFile)(configFile)\n          .then(rawConfig => this.decode(rawConfig));\n      });\n  }\n  \n  /**\n   * @param {*} config\n   * @param {string} file\n   *\n   * @returns {Promise}\n   */\n  dump(config, file = null) {\n    return this.encode(config)\n      .then(rawConfig => pify(fs.writeFile)(file || this.file, rawConfig));\n  }\n  \n  /**\n   * @param {string} rawConfig\n   *\n   * @returns {Promise}\n   */\n  decode(rawConfig) {\n    return Promise.reject(new Error(`${ this.constructor.name }.decode(rawConfig) not implemented!`));\n  }\n  \n  /**\n   * @param {*} config\n   *\n   * @returns {Promise}\n   */\n  encode(config) {\n    return Promise.reject(new Error(`${ this.constructor.name }.encode(config) not implemented!`));\n  }\n}\n\nmodule.exports = AbstractConfig;\n",
    "static": true,
    "longname": "src/config/abstract-config.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 377,
    "kind": "class",
    "name": "AbstractConfig",
    "memberof": "src/config/abstract-config.js",
    "static": true,
    "longname": "src/config/abstract-config.js~AbstractConfig",
    "access": null,
    "export": true,
    "importPath": "recink/src/config/abstract-config.js",
    "importStyle": "AbstractConfig",
    "description": "Abstract configuration manager",
    "lineNumber": 10,
    "interface": false
  },
  {
    "__docId__": 378,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/config/abstract-config.js~AbstractConfig",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/config/abstract-config.js~AbstractConfig#constructor",
    "access": null,
    "description": "",
    "lineNumber": 14,
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "file",
        "description": ""
      }
    ]
  },
  {
    "__docId__": 379,
    "kind": "member",
    "name": "_file",
    "memberof": "src/config/abstract-config.js~AbstractConfig",
    "static": false,
    "longname": "src/config/abstract-config.js~AbstractConfig#_file",
    "access": null,
    "description": null,
    "lineNumber": 15,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 380,
    "kind": "get",
    "name": "file",
    "memberof": "src/config/abstract-config.js~AbstractConfig",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/config/abstract-config.js~AbstractConfig#file",
    "access": null,
    "description": "",
    "lineNumber": 21,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 381,
    "kind": "method",
    "name": "load",
    "memberof": "src/config/abstract-config.js~AbstractConfig",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/config/abstract-config.js~AbstractConfig#load",
    "access": null,
    "description": "",
    "lineNumber": 30,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "file",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 382,
    "kind": "method",
    "name": "dump",
    "memberof": "src/config/abstract-config.js~AbstractConfig",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/config/abstract-config.js~AbstractConfig#dump",
    "access": null,
    "description": "",
    "lineNumber": 52,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "config",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "file",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 383,
    "kind": "method",
    "name": "decode",
    "memberof": "src/config/abstract-config.js~AbstractConfig",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/config/abstract-config.js~AbstractConfig#decode",
    "access": null,
    "description": "",
    "lineNumber": 62,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "rawConfig",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 384,
    "kind": "method",
    "name": "encode",
    "memberof": "src/config/abstract-config.js~AbstractConfig",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/config/abstract-config.js~AbstractConfig#encode",
    "access": null,
    "description": "",
    "lineNumber": 71,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "config",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 385,
    "kind": "file",
    "name": "src/config/factory.js",
    "content": "'use strict';\n\nconst AbstractConfig = require('./abstract-config');\n\n/**\n * Configuration factory\n */\nclass Factory {\n  /**\n   * @param {string} file\n   *\n   * @returns {YamlConfig}\n   */\n  static guess(file) {\n    if (/\\.ya?ml$/i.test(file)) {\n      return this.yaml(file);\n    }\n    \n    throw new Error(`Unknown config format in ${ file }`);\n  }\n  \n  /**\n   * @param {string} name\n   * @param {*} args\n   *\n   * @returns {AbstractConfig}\n   */\n  static create(name, ...args) {\n    const ConfigImplementation = require(`./${ name }-config`);\n    const config = new ConfigImplementation(...args);\n    \n    if (!(config instanceof AbstractConfig)) {\n      throw new Error(`${ name } config should be an implementation of AbstractConfig`);\n    }\n    \n    return config;\n  }\n  \n  /**\n   * @param {*} args\n   *\n   * @returns {YamlConfig}\n   */\n  static yaml(...args) {\n    return this.create('yaml', ...args);\n  }\n}\n\nmodule.exports = Factory;\n",
    "static": true,
    "longname": "src/config/factory.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 386,
    "kind": "class",
    "name": "Factory",
    "memberof": "src/config/factory.js",
    "static": true,
    "longname": "src/config/factory.js~Factory",
    "access": null,
    "export": true,
    "importPath": "recink/src/config/factory.js",
    "importStyle": "Factory",
    "description": "Configuration factory",
    "lineNumber": 8,
    "interface": false
  },
  {
    "__docId__": 387,
    "kind": "method",
    "name": "guess",
    "memberof": "src/config/factory.js~Factory",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/config/factory.js~Factory.guess",
    "access": null,
    "description": "",
    "lineNumber": 14,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{YamlConfig}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "file",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "YamlConfig"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 388,
    "kind": "method",
    "name": "create",
    "memberof": "src/config/factory.js~Factory",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/config/factory.js~Factory.create",
    "access": null,
    "description": "",
    "lineNumber": 28,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{AbstractConfig}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "name",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "args",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "AbstractConfig"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 389,
    "kind": "method",
    "name": "yaml",
    "memberof": "src/config/factory.js~Factory",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/config/factory.js~Factory.yaml",
    "access": null,
    "description": "",
    "lineNumber": 44,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{YamlConfig}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "args",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "YamlConfig"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 390,
    "kind": "file",
    "name": "src/config/yaml-config.js",
    "content": "'use strict';\n\nconst AbstractConfig = require('./abstract-config');\nconst yamlReader = require('yaml-js');\nconst yamlWriter = require('yamljs');\n\n/**\n * YAML configuration manager\n */\nclass YamlConfig extends AbstractConfig {\n  /**\n   * @param {string} rawConfig\n   *\n   * @returns {Promise}\n   */\n  decode(rawConfig) {\n    try {\n      return Promise.resolve(yamlReader.load(rawConfig));\n    } catch (error) {\n      return Promise.reject(error);\n    }\n  }\n  \n  /**\n   * @param {*} config\n   *\n   * @returns {Promise}\n   */\n  encode(config) {\n    try {\n      return Promise.resolve(yamlWriter.stringify(\n        config, \n        YamlConfig.INLINE_DEPTH, \n        YamlConfig.INDENTATION\n      ));\n    } catch (error) {\n      return Promise.reject(error);\n    }\n  }\n  \n  /**\n   * @returns {number}\n   */\n  static get INLINE_DEPTH() {\n    return 8;\n  }\n  \n  /**\n   * @returns {number}\n   */\n  static get INDENTATION() {\n    return 2;\n  }\n}\n\nmodule.exports = YamlConfig;\n",
    "static": true,
    "longname": "src/config/yaml-config.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 391,
    "kind": "class",
    "name": "YamlConfig",
    "memberof": "src/config/yaml-config.js",
    "static": true,
    "longname": "src/config/yaml-config.js~YamlConfig",
    "access": null,
    "export": true,
    "importPath": "recink/src/config/yaml-config.js",
    "importStyle": "YamlConfig",
    "description": "YAML configuration manager",
    "lineNumber": 10,
    "interface": false,
    "extends": [
      "src/config/abstract-config.js~AbstractConfig"
    ]
  },
  {
    "__docId__": 392,
    "kind": "method",
    "name": "decode",
    "memberof": "src/config/yaml-config.js~YamlConfig",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/config/yaml-config.js~YamlConfig#decode",
    "access": null,
    "description": "",
    "lineNumber": 16,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "rawConfig",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 393,
    "kind": "method",
    "name": "encode",
    "memberof": "src/config/yaml-config.js~YamlConfig",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/config/yaml-config.js~YamlConfig#encode",
    "access": null,
    "description": "",
    "lineNumber": 29,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "config",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 394,
    "kind": "get",
    "name": "INLINE_DEPTH",
    "memberof": "src/config/yaml-config.js~YamlConfig",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/config/yaml-config.js~YamlConfig.INLINE_DEPTH",
    "access": null,
    "description": "",
    "lineNumber": 44,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{number}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "number"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "number"
      ]
    }
  },
  {
    "__docId__": 395,
    "kind": "get",
    "name": "INDENTATION",
    "memberof": "src/config/yaml-config.js~YamlConfig",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/config/yaml-config.js~YamlConfig.INDENTATION",
    "access": null,
    "description": "",
    "lineNumber": 51,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{number}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "number"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "number"
      ]
    }
  },
  {
    "__docId__": 396,
    "kind": "file",
    "name": "src/container.js",
    "content": "'use strict';\n\nconst print = require('print');\nconst dot = require('dot-object');\ndot.overwrite = true;\n\n/**\n * Configuration container\n */\nclass Container {\n  /**\n   * @param {*} config\n   */\n  constructor(config = {}) {\n    this._config = config;\n  }\n  \n  /**\n   * @param {*} config\n   *\n   * @returns {Container}\n   */\n  reload(config) {\n    this._config = config;\n    \n    return this;\n  }\n  \n  /**\n   * @returns {Array}\n   */\n  listKeys() {\n    return Object.keys(this._config);\n  }\n  \n  /**\n   * @param {string} path\n   * @param {*} value\n   *\n   * @returns {Container}\n   */\n  set(path, value) {\n    dot.str(path, value, this._config);\n    \n    return this;\n  }\n  \n  /**\n   * @param {string} path\n   * @param {*} defaultValue\n   *\n   * @returns {*}\n   */\n  get(path, defaultValue = null) {\n    if (!this.has(path)) {\n      return defaultValue;\n    }\n    \n    return dot.pick(path, this._config);\n  }\n  \n  /**\n   * @param {string} path\n   *\n   * @returns {boolean}\n   */\n  has(path) {\n    return typeof dot.pick(path, this._config) !== 'undefined';\n  }\n\n  /**\n   * Remove the value\n   * @param {String} path\n   * @return {Container}\n   */\n  del(path) {\n    dot.del(path, this._config);\n\n    return this;\n  }\n  \n  /**\n   * @returns {string}\n   */\n  dump() {\n    return print(this.raw, {\n      showArrayIndices: true,\n      showArrayLength: true,\n      sortProps: false,\n    }).replace(/\\t/g, '   ');\n  }\n  \n  /**\n   * @returns {*}\n   */\n  get raw() {\n    return this._config;\n  }\n}\n\nmodule.exports = Container;\n",
    "static": true,
    "longname": "src/container.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 397,
    "kind": "class",
    "name": "Container",
    "memberof": "src/container.js",
    "static": true,
    "longname": "src/container.js~Container",
    "access": null,
    "export": true,
    "importPath": "recink/src/container.js",
    "importStyle": "Container",
    "description": "Configuration container",
    "lineNumber": 10,
    "interface": false
  },
  {
    "__docId__": 398,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/container.js~Container",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/container.js~Container#constructor",
    "access": null,
    "description": "",
    "lineNumber": 14,
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "config",
        "description": ""
      }
    ]
  },
  {
    "__docId__": 399,
    "kind": "member",
    "name": "_config",
    "memberof": "src/container.js~Container",
    "static": false,
    "longname": "src/container.js~Container#_config",
    "access": null,
    "description": null,
    "lineNumber": 15,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 400,
    "kind": "method",
    "name": "reload",
    "memberof": "src/container.js~Container",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/container.js~Container#reload",
    "access": null,
    "description": "",
    "lineNumber": 23,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Container}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "config",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Container"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 401,
    "kind": "member",
    "name": "_config",
    "memberof": "src/container.js~Container",
    "static": false,
    "longname": "src/container.js~Container#_config",
    "access": null,
    "description": null,
    "lineNumber": 24,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 402,
    "kind": "method",
    "name": "listKeys",
    "memberof": "src/container.js~Container",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/container.js~Container#listKeys",
    "access": null,
    "description": "",
    "lineNumber": 32,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Array}"
      }
    ],
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 403,
    "kind": "method",
    "name": "set",
    "memberof": "src/container.js~Container",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/container.js~Container#set",
    "access": null,
    "description": "",
    "lineNumber": 42,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Container}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "path",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "value",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Container"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 404,
    "kind": "method",
    "name": "get",
    "memberof": "src/container.js~Container",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/container.js~Container#get",
    "access": null,
    "description": "",
    "lineNumber": 54,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{*}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "path",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "defaultValue",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "*"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 405,
    "kind": "method",
    "name": "has",
    "memberof": "src/container.js~Container",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/container.js~Container#has",
    "access": null,
    "description": "",
    "lineNumber": 67,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{boolean}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "path",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "boolean"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 406,
    "kind": "method",
    "name": "del",
    "memberof": "src/container.js~Container",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/container.js~Container#del",
    "access": null,
    "description": "Remove the value",
    "lineNumber": 76,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "path",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Container"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 407,
    "kind": "method",
    "name": "dump",
    "memberof": "src/container.js~Container",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/container.js~Container#dump",
    "access": null,
    "description": "",
    "lineNumber": 85,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string}"
      }
    ],
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 408,
    "kind": "get",
    "name": "raw",
    "memberof": "src/container.js~Container",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/container.js~Container#raw",
    "access": null,
    "description": "",
    "lineNumber": 96,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{*}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "*"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 409,
    "kind": "file",
    "name": "src/emitter.js",
    "content": "'use strict';\n\nconst EventEmitter = require('events');\n\n/**\n * Extended Emitter implementation\n */\nclass Emitter extends EventEmitter {\n  /**\n   * @param {*} args\n   */\n  constructor(...args) {\n    super(...args);\n    \n    this._blockingListeners = {};\n    this._processing = {};\n    this._parallel = {};\n  }\n  \n  /**\n   * @param {string} event\n   * @param {number} count\n   *\n   * @returns {Emitter}\n   */\n  maxParallel(event, count) {\n    this._parallel[event] = count;\n    \n    return this;\n  }\n  \n  /**\n   * @param {string} event\n   * @param {*} args\n   *\n   * @returns {Promise}\n   */\n  emitBlocking(event, ...args) {\n    return this._waitAllowParallel(event)\n      .then(() => this._dispatch(event, args))\n      .then(() => {\n        this\n          ._cleanupListeners(event)\n          ._removeParallel(event)\n          .emit(event, ...args);\n        \n        return Promise.resolve();\n      })\n      .catch(error => {\n        this\n          ._cleanupListeners(event)\n          ._removeParallel(event);\n        \n        return Promise.reject(error);\n      });\n  }\n  \n  /**\n   * @param {string} event\n   * @param {function} listener\n   * @param {number} priority\n   *\n   * @returns {Emitter}\n   */\n  onBlocking(event, listener, priority = Emitter.DEFAULT_PRIORITY) {\n    return this._pushListener(event, listener, priority, 'on');\n  }\n  \n  /**\n   * @param {string} event\n   * @param {function} listener\n   * @param {number} priority\n   *\n   * @returns {Emitter}\n   */\n  onceBlocking(event, listener, priority = Emitter.DEFAULT_PRIORITY) {\n    return this._pushListener(event, listener, priority, 'once');\n  }\n  \n  /**\n   * @param {string} event\n   *\n   * @returns {Emitter}\n   *\n   * @private\n   */\n  _removeParallel(event) {\n    if (!this._processing.hasOwnProperty(event)) {\n      return this;\n    }\n    \n    this._processing[event]--;\n    \n    return this;\n  }\n  \n  /**\n   * @param {string} event\n   *\n   * @returns {Emitter}\n   *\n   * @private\n   */\n  _addParallel(event) {\n    this._processing[event] = this._processing[event] || 0;\n    this._processing[event]++;\n    \n    return this;\n  }\n  \n  /**\n   * @param {string} event\n   *\n   * @returns {boolean}\n   *\n   * @private\n   */\n  _allowParallel(event) {\n    return !this._parallel.hasOwnProperty(event)\n      || !this._processing.hasOwnProperty(event)\n      || this._processing[event] < this._parallel[event];\n  }\n  \n  /**\n   * @param {string} event\n   * @param {number} interval\n   *\n   * @returns {Promise}\n   *\n   * @private\n   */\n  _waitAllowParallel(event, interval = 100) {\n    if (this._allowParallel(event)) {\n      this._addParallel(event);\n      return Promise.resolve();\n    }\n    \n    return new Promise(resolve => {\n      const id = setInterval(() => {\n        if (this._allowParallel(event)) {\n          this._addParallel(event);\n          clearInterval(id);\n          process.nextTick(() => resolve());\n        }\n      }, interval);\n    });\n  }\n  \n  /**\n   * @param {string} event\n   * @param {function} listener\n   * @param {number} priority\n   * @param {string} method\n   *\n   * @returns {Emitter}\n   *\n   * @private\n   */\n  _pushListener(event, listener, priority, method) {\n    this._blockingListeners[event] = this._blockingListeners[event] || [];\n    this._blockingListeners[event].push({ listener, priority, method });\n    this._blockingListeners[event].sort((a, b) => {\n      return b.priority - a.priority;\n    });\n    \n    return this;\n  }\n  \n  /**\n   * @param {string} event\n   *\n   * @returns {Emitter}\n   * \n   * @private\n   */\n  _cleanupListeners(event) {\n    if (!this._blockingListeners.hasOwnProperty(event) ) {\n      return this;\n    }\n    \n    this._blockingListeners[event] = this._blockingListeners[event].filter(l => !!l);\n    \n    return this;\n  }\n  \n  /**\n   * @param {string} event\n   * @param {*} args\n   * @param {number} _i\n   * \n   * @returns {Promise}\n   * \n   * @private\n   */\n  _dispatch(event, args, _i = 0) {    \n    if (!this._blockingListeners.hasOwnProperty(event) \n      || this._blockingListeners[event].length < _i + 1) {\n      return Promise.resolve();\n    }\n    \n    const dispatcher = this._blockingListeners[event][_i];\n    const result = dispatcher.listener(...args);\n    \n    if (dispatcher.method === 'once') {\n      delete this._blockingListeners[event][_i];\n    }\n    \n    if (!result || typeof result !== 'object' || !(result instanceof Promise)) {\n      return this._dispatch(event, args, _i + 1);\n    }\n    \n    return result.then(() => this._dispatch(event, args, _i + 1));\n  }\n  \n  /**\n   * @returns {number}\n   */\n  static get DEFAULT_PRIORITY() {\n    return 0;\n  }\n}\n\nmodule.exports = Emitter;\n",
    "static": true,
    "longname": "src/emitter.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 410,
    "kind": "class",
    "name": "Emitter",
    "memberof": "src/emitter.js",
    "static": true,
    "longname": "src/emitter.js~Emitter",
    "access": null,
    "export": true,
    "importPath": "recink/src/emitter.js",
    "importStyle": "Emitter",
    "description": "Extended Emitter implementation",
    "lineNumber": 8,
    "interface": false,
    "extends": [
      "events~EventEmitter"
    ]
  },
  {
    "__docId__": 411,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/emitter.js~Emitter",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/emitter.js~Emitter#constructor",
    "access": null,
    "description": "",
    "lineNumber": 12,
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "args",
        "description": ""
      }
    ]
  },
  {
    "__docId__": 412,
    "kind": "member",
    "name": "_blockingListeners",
    "memberof": "src/emitter.js~Emitter",
    "static": false,
    "longname": "src/emitter.js~Emitter#_blockingListeners",
    "access": null,
    "description": null,
    "lineNumber": 15,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "{}"
      ]
    }
  },
  {
    "__docId__": 413,
    "kind": "member",
    "name": "_processing",
    "memberof": "src/emitter.js~Emitter",
    "static": false,
    "longname": "src/emitter.js~Emitter#_processing",
    "access": null,
    "description": null,
    "lineNumber": 16,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "{}"
      ]
    }
  },
  {
    "__docId__": 414,
    "kind": "member",
    "name": "_parallel",
    "memberof": "src/emitter.js~Emitter",
    "static": false,
    "longname": "src/emitter.js~Emitter#_parallel",
    "access": null,
    "description": null,
    "lineNumber": 17,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "{}"
      ]
    }
  },
  {
    "__docId__": 415,
    "kind": "method",
    "name": "maxParallel",
    "memberof": "src/emitter.js~Emitter",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/emitter.js~Emitter#maxParallel",
    "access": null,
    "description": "",
    "lineNumber": 26,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Emitter}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "event",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "number"
        ],
        "spread": false,
        "optional": false,
        "name": "count",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Emitter"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 416,
    "kind": "method",
    "name": "emitBlocking",
    "memberof": "src/emitter.js~Emitter",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/emitter.js~Emitter#emitBlocking",
    "access": null,
    "description": "",
    "lineNumber": 38,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "event",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "args",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 417,
    "kind": "method",
    "name": "onBlocking",
    "memberof": "src/emitter.js~Emitter",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/emitter.js~Emitter#onBlocking",
    "access": null,
    "description": "",
    "lineNumber": 65,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Emitter}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "event",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "function"
        ],
        "spread": false,
        "optional": false,
        "name": "listener",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "number"
        ],
        "spread": false,
        "optional": false,
        "name": "priority",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Emitter"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 418,
    "kind": "method",
    "name": "onceBlocking",
    "memberof": "src/emitter.js~Emitter",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/emitter.js~Emitter#onceBlocking",
    "access": null,
    "description": "",
    "lineNumber": 76,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Emitter}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "event",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "function"
        ],
        "spread": false,
        "optional": false,
        "name": "listener",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "number"
        ],
        "spread": false,
        "optional": false,
        "name": "priority",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Emitter"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 419,
    "kind": "method",
    "name": "_removeParallel",
    "memberof": "src/emitter.js~Emitter",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/emitter.js~Emitter#_removeParallel",
    "access": "private",
    "description": "",
    "lineNumber": 87,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Emitter}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "event",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Emitter"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 420,
    "kind": "method",
    "name": "_addParallel",
    "memberof": "src/emitter.js~Emitter",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/emitter.js~Emitter#_addParallel",
    "access": "private",
    "description": "",
    "lineNumber": 104,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Emitter}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "event",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Emitter"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 421,
    "kind": "method",
    "name": "_allowParallel",
    "memberof": "src/emitter.js~Emitter",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/emitter.js~Emitter#_allowParallel",
    "access": "private",
    "description": "",
    "lineNumber": 118,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{boolean}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "event",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "boolean"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 422,
    "kind": "method",
    "name": "_waitAllowParallel",
    "memberof": "src/emitter.js~Emitter",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/emitter.js~Emitter#_waitAllowParallel",
    "access": "private",
    "description": "",
    "lineNumber": 132,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "event",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "number"
        ],
        "spread": false,
        "optional": false,
        "name": "interval",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 423,
    "kind": "method",
    "name": "_pushListener",
    "memberof": "src/emitter.js~Emitter",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/emitter.js~Emitter#_pushListener",
    "access": "private",
    "description": "",
    "lineNumber": 159,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Emitter}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "event",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "function"
        ],
        "spread": false,
        "optional": false,
        "name": "listener",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "number"
        ],
        "spread": false,
        "optional": false,
        "name": "priority",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "method",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Emitter"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 424,
    "kind": "method",
    "name": "_cleanupListeners",
    "memberof": "src/emitter.js~Emitter",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/emitter.js~Emitter#_cleanupListeners",
    "access": "private",
    "description": "",
    "lineNumber": 176,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Emitter}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "event",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Emitter"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 425,
    "kind": "method",
    "name": "_dispatch",
    "memberof": "src/emitter.js~Emitter",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/emitter.js~Emitter#_dispatch",
    "access": "private",
    "description": "",
    "lineNumber": 195,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "event",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "args",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "number"
        ],
        "spread": false,
        "optional": false,
        "name": "_i",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 426,
    "kind": "get",
    "name": "DEFAULT_PRIORITY",
    "memberof": "src/emitter.js~Emitter",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/emitter.js~Emitter.DEFAULT_PRIORITY",
    "access": null,
    "description": "",
    "lineNumber": 218,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{number}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "number"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "number"
      ]
    }
  },
  {
    "__docId__": 427,
    "kind": "file",
    "name": "src/events.js",
    "content": "'use strict';\n\nconst dot = require('dot-object');\n\n/**\n * REciNK main events\n */\nconst events = {};\n\nevents.$ = [\n  'config.preprocess',\n  'config.load',\n  'components.load',\n  'components.run',\n  'component.load',\n  'component.init',\n  'component.run',\n  'component.teardown',\n  'component.ready',\n  'component.subscribe',\n].map(eventPath => {\n  dot.str(eventPath, eventPath, events);\n  \n  return eventPath;\n});\n\nmodule.exports = events;\n",
    "static": true,
    "longname": "src/events.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 428,
    "kind": "variable",
    "name": "events",
    "memberof": "src/events.js",
    "static": true,
    "longname": "src/events.js~events",
    "access": null,
    "export": true,
    "importPath": "recink/src/events.js",
    "importStyle": "events",
    "description": "REciNK main events",
    "lineNumber": 8,
    "type": {
      "types": [
        "{}"
      ]
    }
  },
  {
    "__docId__": 429,
    "kind": "file",
    "name": "src/helper/env.js",
    "content": "'use strict';\n\n/**\n * Environment helpers\n */\nclass Env {\n  /**\n   * @returns {boolean}\n   */\n  static get isCI() {\n    return Env.isTravis;\n  }\n  \n  /**\n   * @returns {boolean}\n   */\n  static get isTravis() {\n    const isCI = !!(Env.read('CI', false) || Env.read('CONTINUOUS_INTEGRATION', false));\n    \n    return !!(isCI && Env.read('TRAVIS', false));\n  }\n  \n  /**\n   * @returns {boolean}\n   */\n  static get isGlobalInstallation() {\n    return !!Env.read('npm_config_global', false);\n  }\n  \n  /**\n   * @param {string} name\n   * \n   * @returns {*}\n   */\n  static exists(name) {\n    return process.env.hasOwnProperty(name);\n  }\n  \n  /**\n   * @param {string} name\n   * @param {*} defaultValue\n   * \n   * @returns {*}\n   */\n  static read(name, defaultValue = null) {\n    if (!Env.exists(name)) {\n      return defaultValue;\n    }\n    \n    return process.env[name];\n  }\n}\n\nmodule.exports = Env;\n",
    "static": true,
    "longname": "src/helper/env.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 430,
    "kind": "class",
    "name": "Env",
    "memberof": "src/helper/env.js",
    "static": true,
    "longname": "src/helper/env.js~Env",
    "access": null,
    "export": true,
    "importPath": "recink/src/helper/env.js",
    "importStyle": "Env",
    "description": "Environment helpers",
    "lineNumber": 6,
    "interface": false
  },
  {
    "__docId__": 431,
    "kind": "get",
    "name": "isCI",
    "memberof": "src/helper/env.js~Env",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/helper/env.js~Env.isCI",
    "access": null,
    "description": "",
    "lineNumber": 10,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{boolean}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "boolean"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 432,
    "kind": "get",
    "name": "isTravis",
    "memberof": "src/helper/env.js~Env",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/helper/env.js~Env.isTravis",
    "access": null,
    "description": "",
    "lineNumber": 17,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{boolean}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "boolean"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 433,
    "kind": "get",
    "name": "isGlobalInstallation",
    "memberof": "src/helper/env.js~Env",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/helper/env.js~Env.isGlobalInstallation",
    "access": null,
    "description": "",
    "lineNumber": 26,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{boolean}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "boolean"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 434,
    "kind": "method",
    "name": "exists",
    "memberof": "src/helper/env.js~Env",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/helper/env.js~Env.exists",
    "access": null,
    "description": "",
    "lineNumber": 35,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{*}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "name",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "*"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 435,
    "kind": "method",
    "name": "read",
    "memberof": "src/helper/env.js~Env",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/helper/env.js~Env.read",
    "access": null,
    "description": "",
    "lineNumber": 45,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{*}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "name",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "defaultValue",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "*"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 436,
    "kind": "file",
    "name": "src/helper/util.js",
    "content": "'use strict';\n\nconst fs = require('fs');\nconst path = require('path');\n\n/**\n * Read directory recursively\n * @param {String} dir Directory path\n * @param {RegExp} include Pattern to include files\n * @param {RegExp} exclude Pattern to exclude directories\n * @param {Function} callback\n * @private\n */\nfunction _walkDir(dir, include, exclude, callback) {\n  if (!fs.existsSync(dir)) {\n    return;\n  }\n\n  let files = fs.readdirSync(dir);\n\n  for (let i = 0; i < files.length; i++) {\n    let filename = path.join(dir, files[i]);\n    let stat = fs.lstatSync(filename);\n\n    if (stat.isDirectory()) {\n      let dirName = path.basename(filename);\n\n      if (exclude.test(dirName)) {\n        continue;\n      }\n\n      _walkDir(filename, include, exclude, callback);\n    } else if (include.test(filename)) {\n      callback(filename);\n    }\n  }\n}\n\n/**\n * Find files by RegExp pattern except dirs\n * @param {String} dir Directory to search\n * @param {RegExp} include Pattern to filter\n * @param {RegExp} exclude Pattern to exclude directories\n * @return {Array}\n */\nfunction findFilesByPattern(dir, include = /.*/, exclude = /^$/) {\n  let fileNames = [];\n  _walkDir(dir, include, exclude, (fileName) => fileNames.push(fileName));\n\n  return fileNames;\n}\n\nexports.findFilesByPattern = findFilesByPattern;\n\n/**\n * Remove all prefixes or suffixes from the given string\n * @param {String} string\n * @param {String} symbol\n * @returns {String}\n */\nfunction trimBoth(string, symbol = '\\s') {\n  const leading = new RegExp(`^${symbol}`);\n  const trailing = new RegExp(`${symbol}$`);\n\n  return string.replace(leading, '').replace(trailing, '');\n}\n\nexports.trimBoth = trimBoth;\n\n/**\n * Fill string with symbols\n * @param {String} str\n * @param {Number} length\n * @param {String} symbol\n * @returns {String}\n */\nfunction fillString(str, length, symbol = 'x') {\n  let result = str;\n\n  while (result.length < length) {\n    result += symbol;\n  }\n\n  return result;\n}\n\nexports.fillString = fillString;\n\n/**\n * Compare two software version\n *  v1 == v2 => 0\n *  v1 < v2 => -1\n *  v1 > v2 => 1\n * @param {String} v1\n * @param {String} v2\n * @returns {Number}\n */\nfunction versionCompare(v1, v2) {\n  const fillTo = 10;\n  let ver1 = v1.split('.').map(x => fillString(x.trim().toLowerCase(), fillTo, '#')).join('');\n  let ver2 = v2.split('.').map(x => fillString(x.trim().toLowerCase(), fillTo, '#')).join('');\n  let maxLength = Math.max(ver1.length, ver2.length);\n\n  ver1 = fillString(ver1, maxLength, '#');\n  ver2 = fillString(ver2, maxLength, '#');\n\n  for (let i = 0; i < maxLength; i++) {\n    let char1 = ver1.charCodeAt(i);\n    let char2 = ver2.charCodeAt(i);\n\n    if (char1 > 96) {\n      char1 -= 60;\n    }\n\n    if (char2 > 96) {\n      char2 -= 60;\n    }\n\n    if (char1 !== char2) {\n      return (char1 > char2) ? 1 : -1;\n    }\n  }\n\n  return 0;\n}\n\nexports.versionCompare = versionCompare;\n",
    "static": true,
    "longname": "src/helper/util.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 437,
    "kind": "function",
    "name": "_walkDir",
    "memberof": "src/helper/util.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/helper/util.js~_walkDir",
    "access": "private",
    "export": false,
    "importPath": "recink/src/helper/util.js",
    "importStyle": null,
    "description": "Read directory recursively",
    "lineNumber": 14,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "dir",
        "description": "Directory path"
      },
      {
        "nullable": null,
        "types": [
          "RegExp"
        ],
        "spread": false,
        "optional": false,
        "name": "include",
        "description": "Pattern to include files"
      },
      {
        "nullable": null,
        "types": [
          "RegExp"
        ],
        "spread": false,
        "optional": false,
        "name": "exclude",
        "description": "Pattern to exclude directories"
      },
      {
        "nullable": null,
        "types": [
          "Function"
        ],
        "spread": false,
        "optional": false,
        "name": "callback",
        "description": ""
      }
    ]
  },
  {
    "__docId__": 438,
    "kind": "function",
    "name": "findFilesByPattern",
    "memberof": "src/helper/util.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/helper/util.js~findFilesByPattern",
    "access": null,
    "export": true,
    "importPath": "recink/src/helper/util.js",
    "importStyle": "{findFilesByPattern}",
    "description": "Find files by RegExp pattern except dirs",
    "lineNumber": 46,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "dir",
        "description": "Directory to search"
      },
      {
        "nullable": null,
        "types": [
          "RegExp"
        ],
        "spread": false,
        "optional": false,
        "name": "include",
        "description": "Pattern to filter"
      },
      {
        "nullable": null,
        "types": [
          "RegExp"
        ],
        "spread": false,
        "optional": false,
        "name": "exclude",
        "description": "Pattern to exclude directories"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 439,
    "kind": "function",
    "name": "trimBoth",
    "memberof": "src/helper/util.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/helper/util.js~trimBoth",
    "access": null,
    "export": true,
    "importPath": "recink/src/helper/util.js",
    "importStyle": "{trimBoth}",
    "description": "Remove all prefixes or suffixes from the given string",
    "lineNumber": 61,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{String}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "string",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "symbol",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 440,
    "kind": "function",
    "name": "fillString",
    "memberof": "src/helper/util.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/helper/util.js~fillString",
    "access": null,
    "export": true,
    "importPath": "recink/src/helper/util.js",
    "importStyle": "{fillString}",
    "description": "Fill string with symbols",
    "lineNumber": 77,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{String}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "str",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "length",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "symbol",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 441,
    "kind": "function",
    "name": "versionCompare",
    "memberof": "src/helper/util.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/helper/util.js~versionCompare",
    "access": null,
    "export": true,
    "importPath": "recink/src/helper/util.js",
    "importStyle": "{versionCompare}",
    "description": "Compare two software version\n v1 == v2 => 0\n v1 < v2 => -1\n v1 > v2 => 1",
    "lineNumber": 98,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Number}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "v1",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "v2",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 442,
    "kind": "file",
    "name": "src/logger.js",
    "content": "'use strict';\n\nconst chalk = require('chalk');\n\n/**\n * Logger abstraction\n */\nclass Logger {\n  /**\n   * @returns {chalk} chalk\n   */\n  static get chalk() {\n    return chalk;\n  }\n  \n  /**\n   * @param {*} logger\n   *\n   * @returns {Logger}\n   */\n  static customLogger(logger) {\n    this._customLogger = logger;\n    \n    return this;\n  }\n  \n  /**\n   * @param {number} level\n   *\n   * @returns {Logger}\n   */\n  static level(level) {\n    this._dbgLevel = level;\n    \n    return this;\n  }\n  \n  /**\n   * @param {number} level\n   *\n   * @returns {Logger}\n   */\n  static addLevel(level) {\n    this._dbgLevel = this._level | level;\n    \n    return this;\n  }\n  \n  /**\n   * @param {*} args\n   * @returns {Logger}\n   */\n  static debug(...args) {\n    return this._exec('debug', ...args);\n  }\n  \n  /**\n   * @param {*} args\n   * @returns {Logger}\n   */\n  static log(...args) {\n    return this._exec('log', ...args);\n  }\n  \n  /**\n   * @param {*} args\n   * @returns {Logger}\n   */\n  static info(...args) {\n    return this._exec('info', ...args);\n  }\n  \n  /**\n   * @param {*} args\n   * \n   * @returns {Logger}\n   */\n  static warn(...args) {\n    return this._exec('warn', ...args);\n  }\n  \n  /**\n   * @param {*} args\n   * \n   * @returns {Logger}\n   */\n  static error(...args) {\n    return this._exec('error', ...args);\n  }\n  \n  /**\n   * @returns {*}\n   *\n   * @private\n   */\n  static get _logger() {\n    return this._customLogger || console;\n  }\n  \n  /**\n   * @returns {number}\n   *\n   * @private\n   */\n  static get _level() {\n    return this._dbgLevel || (this.WARN | this.ERROR);\n  }\n  \n  /**\n   * @param {string} method\n   * @param {*} args\n   *\n   * @returns {Logger}\n   * \n   * @private\n   */\n  static _exec(method, ...args) {\n    if (this._logger instanceof console.constructor) {\n      if (this._level & this[method.toUpperCase()]) {\n        if (method === 'debug') {\n          method = 'log';\n        }\n        \n        this._logger[method](\n          this._color(method).open,\n          ...args,\n          this._color(method).close\n        );\n      }\n    } else { // rely on winston compatible logger\n      this._logger[method](...args);\n    }\n    \n    return this;\n  }\n  \n  /**\n   * @param {string} method\n   * \n   * @returns {string}\n   *\n   * @private\n   */\n  static _color(method) {\n    let color;\n    \n    switch (method) {\n      case 'info':\n        color = 'green';\n        break;  \n      case 'warn':\n        color = 'yellow';\n        break;   \n      case 'error':\n        color = 'red';\n        break;    \n      case 'log':\n      default:\n        color = 'white';\n        break;\n    }\n    \n    return chalk.styles[color];\n  }\n  \n  /**\n   * @returns {*}\n   */\n  static get emoji() {\n    return {\n      bulb: '💡 ',\n      rocket: '🚀 ',\n      cross: '❌ ',\n      check: '✅ ',\n      banana: '🍌 ',\n      smiley: '😃 ',\n      fire: '🔥 ',\n      diamond: '💎 ',\n      gift: '🎁 ',\n      poop: '💩 ',\n      magic: '✨ ',\n      hat: '🎩 ',\n      new: '🆕 ',\n      fist: '👊 ',\n      beer: '🍺 ',\n      bicycle: '🚲 ',\n      star: '⭐️ ',\n      moon_full: '🌔 ',\n      moon_half: '🌓 ',\n      moon_empty: '🌘 ',\n    };\n  }\n  \n  /**\n   * @returns {number}\n   */\n  static get ALL() {\n    return this.LOG | this.DEBUG | this.INFO | this.WARN | this.ERROR;\n  }\n  \n  /**\n   * @returns {number}\n   */\n  static get LOG() {\n    return 1;\n  }\n  \n  /**\n   * @returns {number}\n   */\n  static get DEBUG() {\n    return 2;\n  }\n  \n  /**\n   * @returns {number}\n   */\n  static get INFO() {\n    return 4;\n  }\n  \n  /**\n   * @returns {number}\n   */\n  static get WARN() {\n    return 8;\n  }\n  \n  /**\n   * @returns {number}\n   */\n  static get ERROR() {\n    return 16;\n  }\n}\n\nmodule.exports = Logger;\n",
    "static": true,
    "longname": "src/logger.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 443,
    "kind": "class",
    "name": "Logger",
    "memberof": "src/logger.js",
    "static": true,
    "longname": "src/logger.js~Logger",
    "access": null,
    "export": true,
    "importPath": "recink/src/logger.js",
    "importStyle": "Logger",
    "description": "Logger abstraction",
    "lineNumber": 8,
    "interface": false
  },
  {
    "__docId__": 444,
    "kind": "get",
    "name": "chalk",
    "memberof": "src/logger.js~Logger",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/logger.js~Logger.chalk",
    "access": null,
    "description": "",
    "lineNumber": 12,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{chalk} chalk"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "chalk"
      ],
      "spread": false,
      "description": "chalk"
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 445,
    "kind": "method",
    "name": "customLogger",
    "memberof": "src/logger.js~Logger",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/logger.js~Logger.customLogger",
    "access": null,
    "description": "",
    "lineNumber": 21,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Logger}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "logger",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Logger"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 446,
    "kind": "member",
    "name": "_customLogger",
    "memberof": "src/logger.js~Logger",
    "static": true,
    "longname": "src/logger.js~Logger._customLogger",
    "access": null,
    "description": null,
    "lineNumber": 22,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 447,
    "kind": "method",
    "name": "level",
    "memberof": "src/logger.js~Logger",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/logger.js~Logger.level",
    "access": null,
    "description": "",
    "lineNumber": 32,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Logger}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "number"
        ],
        "spread": false,
        "optional": false,
        "name": "level",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Logger"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 448,
    "kind": "member",
    "name": "_dbgLevel",
    "memberof": "src/logger.js~Logger",
    "static": true,
    "longname": "src/logger.js~Logger._dbgLevel",
    "access": null,
    "description": null,
    "lineNumber": 33,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 449,
    "kind": "method",
    "name": "addLevel",
    "memberof": "src/logger.js~Logger",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/logger.js~Logger.addLevel",
    "access": null,
    "description": "",
    "lineNumber": 43,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Logger}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "number"
        ],
        "spread": false,
        "optional": false,
        "name": "level",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Logger"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 450,
    "kind": "member",
    "name": "_dbgLevel",
    "memberof": "src/logger.js~Logger",
    "static": true,
    "longname": "src/logger.js~Logger._dbgLevel",
    "access": null,
    "description": null,
    "lineNumber": 44,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 451,
    "kind": "method",
    "name": "debug",
    "memberof": "src/logger.js~Logger",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/logger.js~Logger.debug",
    "access": null,
    "description": "",
    "lineNumber": 53,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Logger}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "args",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Logger"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 452,
    "kind": "method",
    "name": "log",
    "memberof": "src/logger.js~Logger",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/logger.js~Logger.log",
    "access": null,
    "description": "",
    "lineNumber": 61,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Logger}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "args",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Logger"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 453,
    "kind": "method",
    "name": "info",
    "memberof": "src/logger.js~Logger",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/logger.js~Logger.info",
    "access": null,
    "description": "",
    "lineNumber": 69,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Logger}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "args",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Logger"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 454,
    "kind": "method",
    "name": "warn",
    "memberof": "src/logger.js~Logger",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/logger.js~Logger.warn",
    "access": null,
    "description": "",
    "lineNumber": 78,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Logger}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "args",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Logger"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 455,
    "kind": "method",
    "name": "error",
    "memberof": "src/logger.js~Logger",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/logger.js~Logger.error",
    "access": null,
    "description": "",
    "lineNumber": 87,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Logger}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "args",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Logger"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 456,
    "kind": "get",
    "name": "_logger",
    "memberof": "src/logger.js~Logger",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/logger.js~Logger._logger",
    "access": "private",
    "description": "",
    "lineNumber": 96,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{*}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "*"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 457,
    "kind": "get",
    "name": "_level",
    "memberof": "src/logger.js~Logger",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/logger.js~Logger._level",
    "access": "private",
    "description": "",
    "lineNumber": 105,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{number}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "number"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 458,
    "kind": "method",
    "name": "_exec",
    "memberof": "src/logger.js~Logger",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/logger.js~Logger._exec",
    "access": "private",
    "description": "",
    "lineNumber": 117,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Logger}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "method",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "args",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Logger"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 459,
    "kind": "method",
    "name": "_color",
    "memberof": "src/logger.js~Logger",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/logger.js~Logger._color",
    "access": "private",
    "description": "",
    "lineNumber": 144,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "method",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 460,
    "kind": "get",
    "name": "emoji",
    "memberof": "src/logger.js~Logger",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/logger.js~Logger.emoji",
    "access": null,
    "description": "",
    "lineNumber": 169,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{*}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "*"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "{\"bulb\": string, \"rocket\": string, \"cross\": string, \"check\": string, \"banana\": string, \"smiley\": string, \"fire\": string, \"diamond\": string, \"gift\": string, \"poop\": string, \"magic\": string, \"hat\": string, \"new\": string, \"fist\": string, \"beer\": string, \"bicycle\": string, \"star\": string, \"moon_full\": string, \"moon_half\": string, \"moon_empty\": string}"
      ]
    }
  },
  {
    "__docId__": 461,
    "kind": "get",
    "name": "ALL",
    "memberof": "src/logger.js~Logger",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/logger.js~Logger.ALL",
    "access": null,
    "description": "",
    "lineNumber": 197,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{number}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "number"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 462,
    "kind": "get",
    "name": "LOG",
    "memberof": "src/logger.js~Logger",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/logger.js~Logger.LOG",
    "access": null,
    "description": "",
    "lineNumber": 204,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{number}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "number"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "number"
      ]
    }
  },
  {
    "__docId__": 463,
    "kind": "get",
    "name": "DEBUG",
    "memberof": "src/logger.js~Logger",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/logger.js~Logger.DEBUG",
    "access": null,
    "description": "",
    "lineNumber": 211,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{number}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "number"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "number"
      ]
    }
  },
  {
    "__docId__": 464,
    "kind": "get",
    "name": "INFO",
    "memberof": "src/logger.js~Logger",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/logger.js~Logger.INFO",
    "access": null,
    "description": "",
    "lineNumber": 218,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{number}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "number"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "number"
      ]
    }
  },
  {
    "__docId__": 465,
    "kind": "get",
    "name": "WARN",
    "memberof": "src/logger.js~Logger",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/logger.js~Logger.WARN",
    "access": null,
    "description": "",
    "lineNumber": 225,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{number}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "number"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "number"
      ]
    }
  },
  {
    "__docId__": 466,
    "kind": "get",
    "name": "ERROR",
    "memberof": "src/logger.js~Logger",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/logger.js~Logger.ERROR",
    "access": null,
    "description": "",
    "lineNumber": 232,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{number}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "number"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "number"
      ]
    }
  },
  {
    "__docId__": 467,
    "kind": "file",
    "name": "src/recink.js",
    "content": "'use strict';\n\nconst path = require('path');\nconst merge = require('merge');\nconst Emitter = require('./emitter');\nconst events = require('./events');\nconst logger = require('./logger');\nconst Container = require('./container');\nconst configFactory = require('./config/factory');\nconst AbstractComponent = require('./component/abstract-component');\n\n/**\n * Recink entry point\n */\nclass Recink extends Emitter {\n  constructor() {\n    super();\n    \n    this._config = {};\n    this._components = [];\n    this._container = new Container();\n    this._registerDebugers();\n  }\n  \n  /**\n   * @private\n   */\n  _registerDebugers() {\n    this.on(events.config.load, (container, configFile) => {\n      logger.info(logger.emoji.smiley, `Load config from ${ configFile }`);\n      logger.debug(container.dump());\n    });\n    \n    this.on(events.components.load, (...components) => {\n      logger.debug(\n        'Loading components -', components.map(c => c.name).join(', ') || 'None'\n      );\n    });\n    \n    this.on(events.component.load, component => {\n      logger.debug(`Load component ${ component.name }`);\n    });\n    \n    this.on(events.component.subscribe, component => {\n      logger.debug(`Component ${ component.name } is subscribed`);\n    });\n    \n    this.on(events.component.ready, component => {\n      logger.debug(`Component ${ component.name } is ready`);\n    });\n    \n    this.on(events.components.run, (...components) => {\n      components.map(component => {\n        logger.info(\n          component.isActive ? logger.emoji.check : logger.emoji.cross,\n          `${ component.name.toUpperCase() } component`\n        );\n      });\n    });\n  }\n  \n  /**\n   * @returns {Promise}\n   */\n  run() {\n    this.emit(events.components.run, ...this._components);\n    \n    const activeComponents = this._components.filter(component => component.isActive);\n\n    if (activeComponents.length <= 0) {\n      return Promise.resolve();\n    }\n\n    return Promise.all(activeComponents.map(component => {\n      this.emit(events.component.init, component);\n      \n      return component.init(this);\n    }))\n      .then(() => {\n        return Promise.all(activeComponents.map(component => {\n          this.emit(events.component.run, component);\n        \n          return component.run(this);\n        }));\n      })\n      .then(() => {\n        return Promise.all(this._components.map(component => {\n          this.emit(events.component.teardown, component);\n        \n          return component.teardown(this);\n        }));\n      });\n  }\n  \n  /**\n   * @param {Function} targetClass\n   * @returns {string|null}\n   * @private\n   */\n  _getBaseClass(targetClass) {\n    if (targetClass instanceof Function) {\n      let baseClass = targetClass;\n\n      while (baseClass) {\n        const newBaseClass = Object.getPrototypeOf(baseClass);\n\n        if (newBaseClass && newBaseClass !== Object && newBaseClass.name) {\n          baseClass = newBaseClass;\n        } else {\n          break;\n        }\n      }\n\n      return baseClass.name;\n    }\n    \n    return null;\n  }\n  \n  /**\n   * @param {AbstractComponent} components\n   * @returns {Promise}\n   */\n  components(...components) {\n    this.emit(events.components.load, ...components);\n\n    if (components.length <= 0) {\n      return Promise.resolve();\n    }\n\n    return Promise.all(components.map(component => {\n      if (!(component instanceof AbstractComponent)\n        && [ 'ConfigBasedComponent', 'AbstractComponent' ]\n          .indexOf(this._getBaseClass(component.constructor)) === -1) {\n        \n        return Promise.reject(new Error(\n          `Component ${ component.constructor.name } should be an instance of AbstractComponent`\n        ));\n      }\n\n      component.setLogger(logger);\n      this._components.push(component);\n      this.emit(events.component.load, component);\n\n      return component.subscribe(this)\n        .then(() => {\n          return this.emit(events.component.subscribe, component, this);\n        })\n        .then(() => component.ready())\n        .then(() => {\n          this.emit(events.component.ready, component);\n          return Promise.resolve(component);\n        });\n    }));\n  }\n  \n  /**\n   * @param {string} configFile\n   * @param {*} extendConfigs\n   * @returns {Promise}\n   */\n  configureExtend(configFile, ...extendConfigs) {\n    if (extendConfigs.length <= 0) {\n      return this.configure(configFile);\n    }\n    \n    const promises = extendConfigs\n      .concat([ configFile ])\n      .map(cfgFile => configFactory.guess(cfgFile).load());\n\n    return Promise.all(promises).then(configVectors => {\n      return Promise.resolve(merge.recursive(true, ...configVectors));\n    });\n  }\n\n  /**\n   * @param {string} configFile\n   * @returns {Promise}\n   */\n  configure(configFile = Recink.CONFIG_FILE) {\n    return configFactory.guess(configFile).load().then(config => Promise.resolve(config));\n  }\n\n  /**\n   * @param {Object} config\n   * @param {String} configFile\n   * @returns {Promise}\n   */\n  configLoad(config, configFile) {\n    return this.emitBlocking(events.config.preprocess, config).then(() => {\n      this._config = config;\n      this._container.reload(this._config);\n      this.emit(events.config.load, this.container, configFile);\n\n      return Promise.resolve(this._config);\n    });\n  }\n\n  /**\n   * @param {string} name\n   *\n   * @returns {AbstractComponent}\n   */\n  component(name) {\n    return this._components.filter(c => c.name === name)[0] || null;\n  }\n  \n  /**\n   * @returns {AbstractComponent[]}\n   */\n  listComponents() {\n    return this._components;\n  }\n\n  /**\n   * @returns {Container}\n   */\n  get container() {\n    return this._container;\n  }\n\n  /**\n   * @returns {AbstractConfig}\n   */\n  get config() {\n    return this._config;\n  }\n\n  /**\n   * @returns {string}\n   */\n  static get CONFIG_FILE() {\n    return path.resolve(process.cwd(), this.CONFIG_FILE_NAME);\n  }\n\n  /**\n   * @returns {string}\n   */\n  static get CONFIG_FILE_NAME() {\n    return '.recink.yml';\n  }\n}\n\nmodule.exports = Recink;\n",
    "static": true,
    "longname": "src/recink.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 468,
    "kind": "class",
    "name": "Recink",
    "memberof": "src/recink.js",
    "static": true,
    "longname": "src/recink.js~Recink",
    "access": null,
    "export": true,
    "importPath": "recink",
    "importStyle": "Recink",
    "description": "Recink entry point",
    "lineNumber": 15,
    "interface": false,
    "extends": [
      "src/emitter.js~Emitter"
    ]
  },
  {
    "__docId__": 469,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/recink.js~Recink",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/recink.js~Recink#constructor",
    "access": null,
    "description": null,
    "lineNumber": 16,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "params": []
  },
  {
    "__docId__": 470,
    "kind": "member",
    "name": "_config",
    "memberof": "src/recink.js~Recink",
    "static": false,
    "longname": "src/recink.js~Recink#_config",
    "access": null,
    "description": null,
    "lineNumber": 19,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "{}"
      ]
    }
  },
  {
    "__docId__": 471,
    "kind": "member",
    "name": "_components",
    "memberof": "src/recink.js~Recink",
    "static": false,
    "longname": "src/recink.js~Recink#_components",
    "access": null,
    "description": null,
    "lineNumber": 20,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*[]"
      ]
    }
  },
  {
    "__docId__": 472,
    "kind": "member",
    "name": "_container",
    "memberof": "src/recink.js~Recink",
    "static": false,
    "longname": "src/recink.js~Recink#_container",
    "access": null,
    "description": null,
    "lineNumber": 21,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 473,
    "kind": "method",
    "name": "_registerDebugers",
    "memberof": "src/recink.js~Recink",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/recink.js~Recink#_registerDebugers",
    "access": "private",
    "description": "",
    "lineNumber": 28,
    "params": []
  },
  {
    "__docId__": 474,
    "kind": "method",
    "name": "run",
    "memberof": "src/recink.js~Recink",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/recink.js~Recink#run",
    "access": null,
    "description": "",
    "lineNumber": 65,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 475,
    "kind": "method",
    "name": "_getBaseClass",
    "memberof": "src/recink.js~Recink",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/recink.js~Recink#_getBaseClass",
    "access": "private",
    "description": "",
    "lineNumber": 100,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string|null}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Function"
        ],
        "spread": false,
        "optional": false,
        "name": "targetClass",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string",
        "null"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 476,
    "kind": "method",
    "name": "components",
    "memberof": "src/recink.js~Recink",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/recink.js~Recink#components",
    "access": null,
    "description": "",
    "lineNumber": 124,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "AbstractComponent"
        ],
        "spread": false,
        "optional": false,
        "name": "components",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 477,
    "kind": "method",
    "name": "configureExtend",
    "memberof": "src/recink.js~Recink",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/recink.js~Recink#configureExtend",
    "access": null,
    "description": "",
    "lineNumber": 162,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "configFile",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "extendConfigs",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 478,
    "kind": "method",
    "name": "configure",
    "memberof": "src/recink.js~Recink",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/recink.js~Recink#configure",
    "access": null,
    "description": "",
    "lineNumber": 180,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "configFile",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 479,
    "kind": "method",
    "name": "configLoad",
    "memberof": "src/recink.js~Recink",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/recink.js~Recink#configLoad",
    "access": null,
    "description": "",
    "lineNumber": 189,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Object"
        ],
        "spread": false,
        "optional": false,
        "name": "config",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "configFile",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 480,
    "kind": "member",
    "name": "_config",
    "memberof": "src/recink.js~Recink",
    "static": false,
    "longname": "src/recink.js~Recink#_config",
    "access": null,
    "description": null,
    "lineNumber": 191,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 481,
    "kind": "method",
    "name": "component",
    "memberof": "src/recink.js~Recink",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/recink.js~Recink#component",
    "access": null,
    "description": "",
    "lineNumber": 204,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{AbstractComponent}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "name",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "AbstractComponent"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 482,
    "kind": "method",
    "name": "listComponents",
    "memberof": "src/recink.js~Recink",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/recink.js~Recink#listComponents",
    "access": null,
    "description": "",
    "lineNumber": 211,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{AbstractComponent[]}"
      }
    ],
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "AbstractComponent[]"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 483,
    "kind": "get",
    "name": "container",
    "memberof": "src/recink.js~Recink",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/recink.js~Recink#container",
    "access": null,
    "description": "",
    "lineNumber": 218,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Container}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Container"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 484,
    "kind": "get",
    "name": "config",
    "memberof": "src/recink.js~Recink",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/recink.js~Recink#config",
    "access": null,
    "description": "",
    "lineNumber": 225,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{AbstractConfig}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "AbstractConfig"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 485,
    "kind": "get",
    "name": "CONFIG_FILE",
    "memberof": "src/recink.js~Recink",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/recink.js~Recink.CONFIG_FILE",
    "access": null,
    "description": "",
    "lineNumber": 232,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 486,
    "kind": "get",
    "name": "CONFIG_FILE_NAME",
    "memberof": "src/recink.js~Recink",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/recink.js~Recink.CONFIG_FILE_NAME",
    "access": null,
    "description": "",
    "lineNumber": 239,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{string}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 488,
    "kind": "external",
    "name": "Infinity",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Infinity",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Infinity",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 489,
    "kind": "external",
    "name": "NaN",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~NaN",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 490,
    "kind": "external",
    "name": "undefined",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~undefined",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 491,
    "kind": "external",
    "name": "null",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~null",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 492,
    "kind": "external",
    "name": "Object",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Object",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 493,
    "kind": "external",
    "name": "object",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~object",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 494,
    "kind": "external",
    "name": "Function",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Function",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 495,
    "kind": "external",
    "name": "function",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~function",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 496,
    "kind": "external",
    "name": "Boolean",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Boolean",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 497,
    "kind": "external",
    "name": "boolean",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~boolean",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 498,
    "kind": "external",
    "name": "Symbol",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Symbol",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 499,
    "kind": "external",
    "name": "Error",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Error",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 500,
    "kind": "external",
    "name": "EvalError",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/EvalError",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~EvalError",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 501,
    "kind": "external",
    "name": "InternalError",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/InternalError",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~InternalError",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 502,
    "kind": "external",
    "name": "RangeError",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RangeError",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~RangeError",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 503,
    "kind": "external",
    "name": "ReferenceError",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ReferenceError",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~ReferenceError",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 504,
    "kind": "external",
    "name": "SyntaxError",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SyntaxError",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~SyntaxError",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 505,
    "kind": "external",
    "name": "TypeError",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypeError",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~TypeError",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 506,
    "kind": "external",
    "name": "URIError",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/URIError",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~URIError",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 507,
    "kind": "external",
    "name": "Number",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Number",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 508,
    "kind": "external",
    "name": "number",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~number",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 509,
    "kind": "external",
    "name": "Date",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Date",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 510,
    "kind": "external",
    "name": "String",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~String",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 511,
    "kind": "external",
    "name": "string",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~string",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 512,
    "kind": "external",
    "name": "RegExp",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~RegExp",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 513,
    "kind": "external",
    "name": "Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 514,
    "kind": "external",
    "name": "Int8Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int8Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Int8Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 515,
    "kind": "external",
    "name": "Uint8Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Uint8Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 516,
    "kind": "external",
    "name": "Uint8ClampedArray",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8ClampedArray",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Uint8ClampedArray",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 517,
    "kind": "external",
    "name": "Int16Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int16Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Int16Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 518,
    "kind": "external",
    "name": "Uint16Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint16Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Uint16Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 519,
    "kind": "external",
    "name": "Int32Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int32Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Int32Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 520,
    "kind": "external",
    "name": "Uint32Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint32Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Uint32Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 521,
    "kind": "external",
    "name": "Float32Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Float32Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 522,
    "kind": "external",
    "name": "Float64Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float64Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Float64Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 523,
    "kind": "external",
    "name": "Map",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Map",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 524,
    "kind": "external",
    "name": "Set",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Set",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 525,
    "kind": "external",
    "name": "WeakMap",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~WeakMap",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 526,
    "kind": "external",
    "name": "WeakSet",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~WeakSet",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 527,
    "kind": "external",
    "name": "ArrayBuffer",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~ArrayBuffer",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 528,
    "kind": "external",
    "name": "DataView",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~DataView",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 529,
    "kind": "external",
    "name": "JSON",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~JSON",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 530,
    "kind": "external",
    "name": "Promise",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Promise",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 531,
    "kind": "external",
    "name": "Generator",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Generator",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 532,
    "kind": "external",
    "name": "GeneratorFunction",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/GeneratorFunction",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~GeneratorFunction",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 533,
    "kind": "external",
    "name": "Reflect",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Reflect",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 534,
    "kind": "external",
    "name": "Proxy",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Proxy",
    "access": null,
    "description": "",
    "lineNumber": 193,
    "builtinExternal": true
  },
  {
    "__docId__": 536,
    "kind": "external",
    "name": "CanvasRenderingContext2D",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D",
    "memberof": "BuiltinExternal/WebAPIExternal.js",
    "static": true,
    "longname": "BuiltinExternal/WebAPIExternal.js~CanvasRenderingContext2D",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 537,
    "kind": "external",
    "name": "DocumentFragment",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/API/DocumentFragment",
    "memberof": "BuiltinExternal/WebAPIExternal.js",
    "static": true,
    "longname": "BuiltinExternal/WebAPIExternal.js~DocumentFragment",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 538,
    "kind": "external",
    "name": "Element",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/API/Element",
    "memberof": "BuiltinExternal/WebAPIExternal.js",
    "static": true,
    "longname": "BuiltinExternal/WebAPIExternal.js~Element",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 539,
    "kind": "external",
    "name": "Event",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/API/Event",
    "memberof": "BuiltinExternal/WebAPIExternal.js",
    "static": true,
    "longname": "BuiltinExternal/WebAPIExternal.js~Event",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 540,
    "kind": "external",
    "name": "Node",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/API/Node",
    "memberof": "BuiltinExternal/WebAPIExternal.js",
    "static": true,
    "longname": "BuiltinExternal/WebAPIExternal.js~Node",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 541,
    "kind": "external",
    "name": "NodeList",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/API/NodeList",
    "memberof": "BuiltinExternal/WebAPIExternal.js",
    "static": true,
    "longname": "BuiltinExternal/WebAPIExternal.js~NodeList",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 542,
    "kind": "external",
    "name": "XMLHttpRequest",
    "externalLink": "https://developer.mozilla.org/en/docs/Web/API/XMLHttpRequest",
    "memberof": "BuiltinExternal/WebAPIExternal.js",
    "static": true,
    "longname": "BuiltinExternal/WebAPIExternal.js~XMLHttpRequest",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 543,
    "kind": "external",
    "name": "AudioContext",
    "externalLink": "https://developer.mozilla.org/en/docs/Web/API/AudioContext",
    "memberof": "BuiltinExternal/WebAPIExternal.js",
    "static": true,
    "longname": "BuiltinExternal/WebAPIExternal.js~AudioContext",
    "access": null,
    "description": "",
    "lineNumber": 34,
    "builtinExternal": true
  }
]