From d608e4d5e3bb40c95d4a341838571d98e5198e67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B3=BD=ED=9D=AC=EB=82=98?= Date: Tue, 17 Sep 2019 19:15:54 +0900 Subject: [PATCH] Chore: update (#48) * docs: update README.md * chore: apply eslint, prettier * chore: exclude IE9 --- .eslintrc.js | 40 +- .prettierrc | 4 + README.md | 62 +- karma.conf.js | 286 +- package-lock.json | 9584 ++++++++++++++++++----------- package.json | 25 +- src/js/consts/ajaxCommand.js | 12 +- src/js/consts/defaultOption.js | 80 +- src/js/consts/messages.js | 12 +- src/js/consts/outerTemplate.js | 13 +- src/js/consts/states.js | 16 +- src/js/features/ajax.js | 353 +- src/js/features/checkbox.js | 608 +- src/js/features/contextMenu.js | 230 +- src/js/features/draggable.js | 740 +-- src/js/features/editable.js | 493 +- src/js/features/selectable.js | 251 +- src/js/tree.js | 1482 ++--- src/js/treeModel.js | 490 +- src/js/treeNode.js | 238 +- src/js/util.js | 824 +-- test/.eslintrc.js | 6 +- test/features/ajax.spec.js | 774 ++- test/features/checkbox.spec.js | 484 +- test/features/contextMenu.spec.js | 203 +- test/features/draggable.spec.js | 432 +- test/features/editable.spec.js | 201 +- test/features/selectable.spec.js | 318 +- test/tree.spec.js | 752 ++- test/treeModel.spec.js | 309 +- test/treeNode.spec.js | 173 +- test/util.spec.js | 154 +- webpack.config.js | 109 +- 33 files changed, 11187 insertions(+), 8571 deletions(-) create mode 100644 .prettierrc diff --git a/.eslintrc.js b/.eslintrc.js index fdbced3f..1f2fb0fd 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,21 +1,21 @@ module.exports = { - "extends": "tui", - "parserOptions": { - "ecmaVersion": 3, - "sourceType": "module" - }, - "env": { - "commonjs": true, - "jasmine": true, - "amd": true, - "node": true, - "jquery": true - }, - "globals": { - "loadFixtures": true - }, - "rules": { - "lines-around-directive": 0, - "object-property-newline": ["error", { "allowMultiplePropertiesPerLine": true }] - } -} + extends: 'tui', + parserOptions: { + ecmaVersion: 3, + sourceType: 'module' + }, + env: { + commonjs: true, + jasmine: true, + amd: true, + node: true, + jquery: true + }, + globals: { + loadFixtures: true + }, + rules: { + 'lines-around-directive': 0, + 'object-property-newline': ['error', { allowMultiplePropertiesPerLine: true }] + } +}; diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 00000000..dbaa4642 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,4 @@ +{ + "printWidth" : 100, + "singleQuote" : true +} \ No newline at end of file diff --git a/README.md b/README.md index 9eb092bc..5e758316 100644 --- a/README.md +++ b/README.md @@ -8,27 +8,24 @@ [![code with hearth by NHN](https://img.shields.io/badge/%3C%2F%3E%20with%20%E2%99%A5%20by-NHN-ff1414.svg)](https://github.com/nhn) +

+ + ## 🚩 Table of Contents * [Collect statistics on the use of open source](#Collect-statistics-on-the-use-of-open-source) -* [Browser Support](#-browser-support) +* [Documents](#-documents) * [Features](#-features) * [Examples](#-examples) * [Install](#-install) - * [Via Package Manager](#via-package-manager) - * [Via Contents Delivery Network (CDN)](#via-contents-delivery-network-cdn) - * [Download Source Files](#download-source-files) * [Usage](#-usage) - * [HTML](#html) - * [JavaScript](#javascript) +* [Dependency](#-dependency) +* [Browser Support](#-browser-support) * [Pull Request Steps](#-pull-request-steps) - * [Setup](#setup) - * [Develop](#develop) - * [Pull Request Steps](#pull-request) -* [Documents](#-documents) * [Contributing](#-contributing) -* [Dependency](#-dependency) +* [TOAST UI Family](#-toast-ui-family) * [License](#-license) + ## Collect statistics on the use of open source TOAST UI Tree applies Google Analytics (GA) to collect statistics on the use of open source, in order to identify how widely TOAST UI Tree is used throughout the world. It also serves as important index to determine the future course of projects. @@ -48,10 +45,13 @@ Or, include [`tui-code-snippet`](https://github.com/nhn/tui.code-snippet)(**v1.5 tui.usageStatistics = false; ``` -## 🌏 Browser Support -| Chrome Chrome | IE Internet Explorer | Edge Edge | Safari Safari | Firefox Firefox | -| :---------: | :---------: | :---------: | :---------: | :---------: | -| Yes | 8+ | Yes | Yes | Yes | + +## πŸ“™ Documents +* [Getting Started](https://github.com/nhn/tui.tree/blob/production/docs/getting-started.md) +* [Tutorials](https://github.com/nhn/tui.tree/tree/production/docs) +* [APIs](https://nhn.github.io/tui.tree/latest) + +You can also see the older versions of API page on the [releases page](https://github.com/nhn/tui.tree/releases). ## 🎨 Features @@ -172,6 +172,18 @@ instance.add( ... ); For more information about the API, please see [here](https://nhn.github.io/tui.tree/latest/Tree). +## πŸ”© Dependency +* [tui-code-snippet](https://github.com/nhn/tui.code-snippet) >=1.5.0 +* [tui-context-menu](https://github.com/nhn/tui.context-menu) >=2.1.1 (Optional, needs forusing `ContextMenu` feature) +* [jQuery](https://github.com/jquery/jquery/tree/1.12-stable) >=1.11.0 (Optional, needs for using `Ajax` feature) + + +## 🌏 Browser Support +| Chrome Chrome | IE Internet Explorer | Edge Edge | Safari Safari | Firefox Firefox | +| :---------: | :---------: | :---------: | :---------: | :---------: | +| Yes | 8+ | Yes | Yes | Yes | + + ## πŸ”§ Pull Request Steps TOAST UI products are open source, so you can create a pull request(PR) after you fix issues. @@ -217,14 +229,6 @@ If it has no error, commit and then push it! For more information on PR's step, please see links of Contributing section. -## πŸ“™ Documents -* [Getting Started](https://github.com/nhn/tui.tree/blob/production/docs/getting-started.md) -* [Tutorials](https://github.com/nhn/tui.tree/tree/production/docs) -* [APIs](https://nhn.github.io/tui.tree/latest) - -You can also see the older versions of API page on the [releases page](https://github.com/nhn/tui.tree/releases). - - ## πŸ’¬ Contributing * [Code of Conduct](https://github.com/nhn/tui.tree/blob/production/CODE_OF_CONDUCT.md) * [Contributing guideline](https://github.com/nhn/tui.tree/blob/production/CONTRIBUTING.md) @@ -232,10 +236,14 @@ You can also see the older versions of API page on the [releases page](https://g * [Commit convention](https://github.com/nhn/tui.tree/blob/production/docs/COMMIT_MESSAGE_CONVENTION.md) -## πŸ”© Dependency -* [tui-code-snippet](https://github.com/nhn/tui.code-snippet) >=1.5.0 -* [tui-context-menu](https://github.com/nhn/tui.context-menu) >=2.1.1 (Optional, needs forusing `ContextMenu` feature) -* [jQuery](https://github.com/jquery/jquery/tree/1.12-stable) >=1.11.0 (Optional, needs for using `Ajax` feature) +## 🍞 TOAST UI Family + +* [TOAST UI Editor](https://github.com/nhn/tui.editor) +* [TOAST UIΒ Calendar](https://github.com/nhn/tui.calendar) +* [TOAST UI Chart](https://github.com/nhn/tui.chart) +* [TOAST UI Image-Editor](https://github.com/nhn/tui.image-editor) +* [TOAST UI Grid](https://github.com/nhn/tui.grid) +* [TOAST UI Components](https://github.com/nhn) ## πŸ“œ License diff --git a/karma.conf.js b/karma.conf.js index 24f39244..d3f0d805 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -1,7 +1,7 @@ var webdriverConfig = { - hostname: 'fe.nhnent.com', - port: 4444, - remoteHost: true + hostname: 'fe.nhnent.com', + port: 4444, + remoteHost: true }; /** @@ -10,150 +10,146 @@ var webdriverConfig = { * @param {string} server - server type ('ne' or local) */ function setConfig(defaultConfig, server) { - if (server === 'ne') { - defaultConfig.customLaunchers = { - 'IE8': { - base: 'WebDriver', - config: webdriverConfig, - browserName: 'internet explorer', - version: '8' - }, - 'IE9': { - base: 'WebDriver', - config: webdriverConfig, - browserName: 'internet explorer', - version: '9' - }, - 'IE10': { - base: 'WebDriver', - config: webdriverConfig, - browserName: 'internet explorer', - version: '10' - }, - 'IE11': { - base: 'WebDriver', - config: webdriverConfig, - browserName: 'internet explorer', - version: '11' - }, - 'Edge': { - base: 'WebDriver', - config: webdriverConfig, - browserName: 'MicrosoftEdge' - }, - 'Chrome-WebDriver': { - base: 'WebDriver', - config: webdriverConfig, - browserName: 'chrome' - }, - 'Firefox-WebDriver': { - base: 'WebDriver', - config: webdriverConfig, - browserName: 'firefox' - }, - 'Safari-WebDriver': { - base: 'WebDriver', - config: webdriverConfig, - browserName: 'safari' - } - }; - defaultConfig.browsers = [ - 'IE8', - 'IE9', - 'IE10', - 'IE11', - 'Edge', - 'Chrome-WebDriver', - 'Firefox-WebDriver' - // 'Safari-WebDriver' - ]; - defaultConfig.reporters.push('coverage'); - defaultConfig.reporters.push('junit'); - defaultConfig.coverageReporter = { - dir: 'report/coverage/', - reporters: [ - { - type: 'html', - subdir: function(browser) { - return 'report-html/' + browser; - } - }, - { - type: 'cobertura', - subdir: function(browser) { - return 'report-cobertura/' + browser; - }, - file: 'cobertura.txt' - } - ] - }; - defaultConfig.junitReporter = { - outputDir: 'report/junit', - suite: '' - }; - } else { - defaultConfig.browsers = [ - 'ChromeHeadless' - ]; - } + if (server === 'ne') { + defaultConfig.customLaunchers = { + IE8: { + base: 'WebDriver', + config: webdriverConfig, + browserName: 'internet explorer', + version: '8' + }, + IE9: { + base: 'WebDriver', + config: webdriverConfig, + browserName: 'internet explorer', + version: '9' + }, + IE10: { + base: 'WebDriver', + config: webdriverConfig, + browserName: 'internet explorer', + version: '10' + }, + IE11: { + base: 'WebDriver', + config: webdriverConfig, + browserName: 'internet explorer', + version: '11', + platformName: 'windows' + }, + Edge: { + base: 'WebDriver', + config: webdriverConfig, + browserName: 'MicrosoftEdge' + }, + 'Chrome-WebDriver': { + base: 'WebDriver', + config: webdriverConfig, + browserName: 'chrome' + }, + 'Firefox-WebDriver': { + base: 'WebDriver', + config: webdriverConfig, + browserName: 'firefox' + }, + 'Safari-WebDriver': { + base: 'WebDriver', + config: webdriverConfig, + browserName: 'safari' + } + }; + defaultConfig.browsers = [ + 'IE8', + // 'IE9', + 'IE10', + 'IE11', + 'Edge', + 'Chrome-WebDriver', + 'Firefox-WebDriver' + // 'Safari-WebDriver' + ]; + defaultConfig.reporters.push('coverage'); + defaultConfig.reporters.push('junit'); + defaultConfig.coverageReporter = { + dir: 'report/coverage/', + reporters: [ + { + type: 'html', + subdir: function(browser) { + return 'report-html/' + browser; + } + }, + { + type: 'cobertura', + subdir: function(browser) { + return 'report-cobertura/' + browser; + }, + file: 'cobertura.txt' + } + ] + }; + defaultConfig.junitReporter = { + outputDir: 'report/junit', + suite: '' + }; + } else { + defaultConfig.browsers = ['ChromeHeadless']; + } } module.exports = function(config) { - var defaultConfig = { - basePath: './', - frameworks: [ - 'jquery-1.11.0', - 'jasmine', - 'es5-shim' - ], - files: [ - { - pattern: 'node_modules/jasmine-jquery/lib/jasmine-jquery.js', - watched: false - }, - { - pattern: 'node_modules/jasmine-ajax/lib/mock-ajax.js', - watched: false - }, - 'test/index.js', - 'test/preparation.js', - { - pattern: 'test/fixtures/*.html', - watched: false, - included: false, - served: true - } - ], - preprocessors: { - 'test/index.js': ['webpack', 'sourcemap'] - }, - reporters: ['dots'], - webpack: { - devtool: 'inline-source-map', - module: { - preLoaders: [ - { - test: /\.js$/, - exclude: /(test|bower_components|node_modules)/, - loader: 'istanbul-instrumenter' - }, - { - test: /\.js$/, - exclude: /(dist|bower_components|node_modules)/, - loader: 'eslint-loader' - } - ] - } - - }, - port: 9876, - colors: true, - logLevel: config.LOG_INFO, - autoWatch: true, - singleRun: true - }; + var defaultConfig = { + basePath: './', + frameworks: ['jquery-1.11.0', 'jasmine', 'es5-shim'], + files: [ + { + pattern: 'node_modules/jasmine-jquery/lib/jasmine-jquery.js', + watched: false + }, + { + pattern: 'node_modules/jasmine-ajax/lib/mock-ajax.js', + watched: false + }, + 'test/index.js', + 'test/preparation.js', + { + pattern: 'test/fixtures/*.html', + watched: false, + included: false, + served: true + } + ], + preprocessors: { + 'test/index.js': ['webpack', 'sourcemap'] + }, + reporters: ['dots'], + webpack: { + mode: 'development', + devtool: 'inline-source-map', + module: { + rules: [ + { + test: /\.js$/, + exclude: /(test|bower_components|node_modules)/, + loader: 'istanbul-instrumenter-loader' + }, + { + test: /\.js$/, + exclude: /(dist|bower_components|node_modules)/, + loader: 'eslint-loader', + enforce: 'pre' + } + ] + } + }, + port: 9876, + colors: true, + logLevel: config.LOG_INFO, + autoWatch: true, + singleRun: true + }; - /* eslint-disable */ - setConfig(defaultConfig, process.env.KARMA_SERVER); - config.set(defaultConfig); + /* eslint-disable */ + setConfig(defaultConfig, process.env.KARMA_SERVER); + config.set(defaultConfig); }; diff --git a/package-lock.json b/package-lock.json index 4a78b0e5..b8e19aeb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,6 +4,286 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@babel/code-frame": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", + "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/highlight": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", + "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@types/events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", + "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", + "dev": true + }, + "@types/glob": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", + "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", + "dev": true, + "requires": { + "@types/events": "*", + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "dev": true + }, + "@types/node": { + "version": "12.7.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.4.tgz", + "integrity": "sha512-W0+n1Y+gK/8G2P/piTkBBN38Qc5Q1ZSO6B5H3QmPCUewaiXOo2GCAWZ4ElZCcNhjJuBSUSLGFUJnmlCn5+nxOQ==", + "dev": true + }, + "@webassemblyjs/ast": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", + "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", + "dev": true, + "requires": { + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/wast-parser": "1.8.5" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", + "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", + "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", + "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==", + "dev": true + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", + "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.8.5" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", + "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==", + "dev": true + }, + "@webassemblyjs/helper-module-context": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", + "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "mamacro": "^0.0.3" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", + "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", + "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", + "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", + "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", + "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", + "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/helper-wasm-section": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5", + "@webassemblyjs/wasm-opt": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", + "@webassemblyjs/wast-printer": "1.8.5" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", + "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/ieee754": "1.8.5", + "@webassemblyjs/leb128": "1.8.5", + "@webassemblyjs/utf8": "1.8.5" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", + "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", + "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-api-error": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/ieee754": "1.8.5", + "@webassemblyjs/leb128": "1.8.5", + "@webassemblyjs/utf8": "1.8.5" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", + "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/floating-point-hex-parser": "1.8.5", + "@webassemblyjs/helper-api-error": "1.8.5", + "@webassemblyjs/helper-code-frame": "1.8.5", + "@webassemblyjs/helper-fsm": "1.8.5", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", + "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/wast-parser": "1.8.5", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, "abbrev": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", @@ -11,89 +291,73 @@ "dev": true }, "accepts": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.1.4.tgz", - "integrity": "sha1-1xyW99QdD+2iw4zRToonwEFY30o=", + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", "dev": true, "requires": { - "mime-types": "~2.0.4", - "negotiator": "0.4.9" + "mime-types": "~2.1.24", + "negotiator": "0.6.2" }, "dependencies": { "mime-db": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.12.0.tgz", - "integrity": "sha1-PQxjGA9FjrENMlqqN9fFiuMS6dc=", + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", "dev": true }, "mime-types": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.14.tgz", - "integrity": "sha1-MQ4VnbI+B3+Lsit0jav6SVcUCqY=", + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", "dev": true, "requires": { - "mime-db": "~1.12.0" + "mime-db": "1.40.0" } } } }, "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", + "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==", "dev": true }, "acorn-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", - "dev": true, - "requires": { - "acorn": "^3.0.4" - }, - "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "dev": true - } - } + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.2.tgz", + "integrity": "sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw==", + "dev": true }, "after": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.1.tgz", - "integrity": "sha1-q11PuIP1loFtNRX495HAr0ht1ic=", + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", "dev": true }, "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", "dev": true, "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", + "fast-deep-equal": "^2.0.1", "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, - "ajv-keywords": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", - "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", "dev": true }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "dev": true, - "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" - } + "ajv-keywords": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", + "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", + "dev": true }, "alphanum-sort": { "version": "1.0.2", @@ -105,7 +369,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true + "dev": true, + "optional": true }, "ansi-colors": { "version": "1.1.0", @@ -131,6 +396,12 @@ "ansi-wrap": "0.1.0" } }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true + }, "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", @@ -150,15 +421,21 @@ "dev": true }, "anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.0.tgz", + "integrity": "sha512-Ozz7l4ixzI7Oxj2+cw+p0tVUt27BpaJ+1+q1TCeANWxHpvyn2+Un+YamBdfKu0uh8xLodGhoa1v7595NhKDAuA==", "dev": true, "requires": { - "micromatch": "^2.1.5", - "normalize-path": "^2.0.0" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" } }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, "archiver": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/archiver/-/archiver-3.1.1.tgz", @@ -272,13 +549,10 @@ } }, "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1" - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true }, "arr-flatten": { "version": "1.1.0", @@ -299,27 +573,36 @@ "dev": true }, "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", "dev": true }, - "array-slice": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", "dev": true }, "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, "arraybuffer.slice": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", - "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=", + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", "dev": true }, "asn1": { @@ -331,12 +614,24 @@ "safer-buffer": "~2.1.0" } }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", "dev": true, "requires": { + "object-assign": "^4.1.1", "util": "0.10.3" }, "dependencies": { @@ -369,6 +664,12 @@ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, "async": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", @@ -376,9 +677,15 @@ "dev": true }, "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "async-limiter": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", "dev": true }, "asynckit": { @@ -608,25 +915,13 @@ "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true } } }, "base64-arraybuffer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.2.tgz", - "integrity": "sha1-R030qfLaJOBd8xWMOx2zw81GoVQ=", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", "dev": true }, "base64-js": { @@ -636,9 +931,9 @@ "dev": true }, "base64id": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-0.1.0.tgz", - "integrity": "sha1-As4P3u4M709ACA4ec+g08LG/zj8=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", "dev": true }, "batch": { @@ -656,12 +951,6 @@ "tweetnacl": "^0.14.3" } }, - "benchmark": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-1.0.0.tgz", - "integrity": "sha1-Lx4vpMNZ8REiqhgwgiGOlX45DHM=", - "dev": true - }, "better-assert": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", @@ -678,9 +967,9 @@ "dev": true }, "binary-extensions": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.0.tgz", - "integrity": "sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", + "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", "dev": true }, "bl": { @@ -706,33 +995,39 @@ } }, "blob": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", - "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", "dev": true }, "bluebird": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", - "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", + "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==", + "dev": true + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", "dev": true }, "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", "dev": true, "requires": { - "bytes": "3.0.0", + "bytes": "3.1.0", "content-type": "~1.0.4", "debug": "2.6.9", "depd": "~1.1.2", - "http-errors": "~1.6.3", - "iconv-lite": "0.4.23", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", "on-finished": "~2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "~1.6.16" + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" }, "dependencies": { "debug": { @@ -744,23 +1039,34 @@ "ms": "2.0.0" } }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true } } }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -780,16 +1086,20 @@ } }, "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" + "fill-range": "^7.0.1" } }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, "browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", @@ -797,21 +1107,74 @@ "dev": true }, "browserify-aes": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-0.4.0.tgz", - "integrity": "sha1-BnFJtmjfMcS1hTPgLQHoBthgjiw=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { - "inherits": "^2.0.1" + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "browserify-zlib": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", - "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "requires": { - "pako": "~0.2.0" + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true, + "requires": { + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "~1.0.5" } }, "browserslist": { @@ -869,6 +1232,18 @@ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, "builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", @@ -876,11 +1251,51 @@ "dev": true }, "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", "dev": true }, + "cacache": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", + "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "dev": true + } + } + }, "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", @@ -896,23 +1311,6 @@ "to-object-path": "^0.3.0", "union-value": "^1.0.0", "unset-value": "^1.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true, - "requires": { - "callsites": "^0.2.0" } }, "callsite": { @@ -922,9 +1320,9 @@ "dev": true }, "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, "camelcase": { @@ -967,16 +1365,6 @@ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "dev": true, - "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" - } - }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", @@ -991,34 +1379,52 @@ } }, "chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.0.2.tgz", + "integrity": "sha512-c4PR2egjNjI1um6bamCQ6bUNPDiyofNQruHvKgHQ4gDUP/ITSVSzNsiI5OWtHOsX323i5ha/kk4YmOZ1Ktg7KA==", "dev": true, "requires": { - "anymatch": "^1.3.0", - "async-each": "^1.0.0", - "fsevents": "^1.0.0", - "glob-parent": "^2.0.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^2.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0" + "anymatch": "^3.0.1", + "braces": "^3.0.2", + "fsevents": "^2.0.6", + "glob-parent": "^5.0.0", + "is-binary-path": "^2.1.0", + "is-glob": "^4.0.1", + "normalize-path": "^3.0.0", + "readdirp": "^3.1.1" } }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "chownr": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.2.tgz", + "integrity": "sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==", "dev": true }, + "chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, "clap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", @@ -1048,12 +1454,6 @@ "requires": { "is-descriptor": "^0.1.0" } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true } } }, @@ -1073,21 +1473,41 @@ "dev": true }, "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dev": true, "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" }, "dependencies": { - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } } } }, @@ -1097,11 +1517,16 @@ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", "dev": true }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } }, "coa": { "version": "1.0.4", @@ -1112,6 +1537,12 @@ "q": "^1.1.2" } }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, "collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", @@ -1180,15 +1611,6 @@ "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", "dev": true }, - "combine-lists": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz", - "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", - "dev": true, - "requires": { - "lodash": "^4.5.0" - } - }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -1250,38 +1672,42 @@ } }, "compressible": { - "version": "2.0.15", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.15.tgz", - "integrity": "sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw==", + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz", + "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==", "dev": true, "requires": { - "mime-db": ">= 1.36.0 < 2" + "mime-db": ">= 1.40.0 < 2" + }, + "dependencies": { + "mime-db": { + "version": "1.41.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.41.0.tgz", + "integrity": "sha512-B5gxBI+2K431XW8C2rcc/lhppbuji67nf9v39eH8pkWoZDxnAL0PxdpH32KYRScniF8qDHBDlI+ipgg5WrCUYw==", + "dev": true + } } }, "compression": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz", - "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dev": true, "requires": { "accepts": "~1.3.5", "bytes": "3.0.0", - "compressible": "~2.0.14", + "compressible": "~2.0.16", "debug": "2.6.9", - "on-headers": "~1.0.1", + "on-headers": "~1.0.2", "safe-buffer": "5.1.2", "vary": "~1.1.2" }, "dependencies": { - "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", - "dev": true, - "requires": { - "mime-types": "~2.1.18", - "negotiator": "0.6.1" - } + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true }, "debug": { "version": "2.6.9", @@ -1297,12 +1723,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true - }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", - "dev": true } } }, @@ -1325,14 +1745,14 @@ } }, "connect": { - "version": "3.6.6", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", - "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "dev": true, "requires": { "debug": "2.6.9", - "finalhandler": "1.1.0", - "parseurl": "~1.3.2", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", "utils-merge": "1.0.1" }, "dependencies": { @@ -1375,10 +1795,13 @@ "dev": true }, "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", - "dev": true + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } }, "content-type": { "version": "1.0.4", @@ -1407,6 +1830,20 @@ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", "dev": true }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, "copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", @@ -1469,27 +1906,73 @@ } } }, + "create-ecdh": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "lru-cache": "^4.0.1", + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" } }, "crypto-browserify": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.3.0.tgz", - "integrity": "sha1-ufx1u0oO1h3PHNXa6W6zDJw+UGw=", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, "requires": { - "browserify-aes": "0.4.0", - "pbkdf2-compat": "2.0.1", - "ripemd160": "0.2.0", - "sha.js": "2.2.6" + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" } }, "css-color-names": { @@ -1600,6 +2083,12 @@ "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", "dev": true }, + "cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", + "dev": true + }, "dargs": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/dargs/-/dargs-5.1.0.tgz", @@ -1615,6 +2104,12 @@ "assert-plus": "^1.0.0" } }, + "date-format": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", + "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==", + "dev": true + }, "date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", @@ -1632,9 +2127,9 @@ } }, "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { "ms": "^2.1.1" @@ -1652,12 +2147,71 @@ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, + "deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.0.tgz", + "integrity": "sha512-ZbfWJq/wN1Z273o7mUSjILYqehAktR2NVoSrOukDkU9kg2v/Uv89yU4Cvz8seJeAmtN5oqiefKq8FPuXOboqLw==", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, + "default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + }, + "dependencies": { + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + } + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, "define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", @@ -1696,18 +2250,6 @@ "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true } } }, @@ -1717,6 +2259,29 @@ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", "dev": true }, + "del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + } + } + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -1729,12 +2294,28 @@ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, "destroy": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", "dev": true }, + "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "dev": true + }, "detect-indent": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", @@ -1744,6 +2325,12 @@ "repeating": "^2.0.0" } }, + "detect-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", + "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", + "dev": true + }, "di": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", @@ -1756,10 +2343,54 @@ "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", + "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "dev": true, + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + }, + "dependencies": { + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + } + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "requires": { + "buffer-indexof": "^1.0.0" + } + }, "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "requires": { "esutils": "^2.0.2" @@ -1783,6 +2414,18 @@ "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -1805,6 +2448,27 @@ "integrity": "sha512-De+lPAxEcpxvqPTyZAXELNpRZXABRxf+uL/rSykstQhzj/B0l1150G/ExIIxKc16lI89Hgz81J0BHAcbTqK49g==", "dev": true }, + "elliptic": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.1.tgz", + "integrity": "sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg==", + "dev": true, + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, "emojis-list": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", @@ -1827,126 +2491,94 @@ } }, "engine.io": { - "version": "1.6.10", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.6.10.tgz", - "integrity": "sha1-+H2E4b0h0aLsf43u8MYgVKzfsno=", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz", + "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==", "dev": true, "requires": { - "accepts": "1.1.4", - "base64id": "0.1.0", - "debug": "2.2.0", - "engine.io-parser": "1.2.4", - "ws": "1.0.1" + "accepts": "~1.3.4", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.0", + "ws": "~3.3.1" }, "dependencies": { "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { - "ms": "0.7.1" + "ms": "2.0.0" } }, "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } } }, "engine.io-client": { - "version": "1.6.9", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.6.9.tgz", - "integrity": "sha1-HWrUgEilCDyVCWlDsp0279shJAE=", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", + "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", "dev": true, "requires": { - "component-emitter": "1.1.2", + "component-emitter": "1.2.1", "component-inherit": "0.0.3", - "debug": "2.2.0", - "engine.io-parser": "1.2.4", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.1", "has-cors": "1.1.0", "indexof": "0.0.1", - "parsejson": "0.0.1", - "parseqs": "0.0.2", - "parseuri": "0.0.4", - "ws": "1.0.1", - "xmlhttprequest-ssl": "1.5.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "~3.3.1", + "xmlhttprequest-ssl": "~1.5.4", "yeast": "0.1.2" }, "dependencies": { - "component-emitter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", - "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=", - "dev": true - }, "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { - "ms": "0.7.1" + "ms": "2.0.0" } }, "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } } }, "engine.io-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.2.4.tgz", - "integrity": "sha1-4Il7C/FOeS1M0qWVBVORnFaUjEI=", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", + "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", "dev": true, "requires": { - "after": "0.8.1", - "arraybuffer.slice": "0.0.6", - "base64-arraybuffer": "0.1.2", - "blob": "0.0.4", - "has-binary": "0.1.6", - "utf8": "2.1.0" - }, - "dependencies": { - "has-binary": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.6.tgz", - "integrity": "sha1-JTJvOc+k9hath4eJTjryz7x7bhA=", - "dev": true, - "requires": { - "isarray": "0.0.1" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - } + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.5", + "has-binary2": "~1.0.2" } }, "enhanced-resolve": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz", - "integrity": "sha1-TW5omzcl+GCQknzMhs2fFjW4ni4=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", + "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", "dev": true, "requires": { "graceful-fs": "^4.1.2", - "memory-fs": "^0.2.0", - "tapable": "^0.1.8" - }, - "dependencies": { - "memory-fs": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.2.0.tgz", - "integrity": "sha1-8rslNovBIeORwlIN6Slpyu4KApA=", - "dev": true - } + "memory-fs": "^0.4.0", + "tapable": "^1.0.0" } }, "ent": { @@ -2023,49 +2655,47 @@ } }, "eslint": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", - "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", + "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", "dev": true, "requires": { - "ajv": "^5.3.0", - "babel-code-frame": "^6.22.0", + "@babel/code-frame": "^7.0.0", + "ajv": "^6.9.1", "chalk": "^2.1.0", - "concat-stream": "^1.6.0", - "cross-spawn": "^5.1.0", - "debug": "^3.1.0", - "doctrine": "^2.1.0", - "eslint-scope": "^3.7.1", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^4.0.3", + "eslint-utils": "^1.3.1", "eslint-visitor-keys": "^1.0.0", - "espree": "^3.5.4", - "esquery": "^1.0.0", + "espree": "^5.0.1", + "esquery": "^1.0.1", "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", + "file-entry-cache": "^5.0.1", "functional-red-black-tree": "^1.0.1", "glob": "^7.1.2", - "globals": "^11.0.1", - "ignore": "^3.3.3", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^3.0.6", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.9.1", + "inquirer": "^6.2.2", + "js-yaml": "^3.13.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.3.0", - "lodash": "^4.17.4", - "minimatch": "^3.0.2", + "lodash": "^4.17.11", + "minimatch": "^3.0.4", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", "optionator": "^0.8.2", "path-is-inside": "^1.0.2", - "pluralize": "^7.0.0", "progress": "^2.0.0", - "regexpp": "^1.0.1", - "require-uncached": "^1.0.3", - "semver": "^5.3.0", + "regexpp": "^2.0.1", + "semver": "^5.5.1", "strip-ansi": "^4.0.0", - "strip-json-comments": "~2.0.1", - "table": "4.0.2", - "text-table": "~0.2.0" + "strip-json-comments": "^2.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0" }, "dependencies": { "ansi-regex": { @@ -2107,9 +2737,9 @@ "dev": true }, "js-yaml": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz", - "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -2136,49 +2766,75 @@ } } }, + "eslint-config-prettier": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.2.0.tgz", + "integrity": "sha512-VLsgK/D+S/FEsda7Um1+N8FThec6LqE3vhcMyp8mlmto97y3fGf3DX7byJexGuOb1QY0Z/zz222U5t+xSfcZDQ==", + "dev": true, + "requires": { + "get-stdin": "^6.0.0" + }, + "dependencies": { + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "dev": true + } + } + }, "eslint-config-tui": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/eslint-config-tui/-/eslint-config-tui-1.0.3.tgz", - "integrity": "sha512-81DMKKSVccvkG9YobCBBCIJT+ewYNINo2mIdfeYMvtA/P3g0XEfEFlDix5xN3HP57rVM30Z/Wnzt7q2Z7M4xQw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/eslint-config-tui/-/eslint-config-tui-2.2.0.tgz", + "integrity": "sha512-0ePXGG7OpELZw+ulE1O6/RFlaEJg/nnGx0X74GjcqusU/RuwGXM41cVAFfCTWHUvMNxso+WP6n1GCgh8V9D/Eg==", "dev": true }, "eslint-loader": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-1.9.0.tgz", - "integrity": "sha512-40aN976qSNPyb9ejTqjEthZITpls1SVKtwguahmH1dzGCwQU/vySE+xX33VZmD8csU0ahVNCtFlsPgKqRBiqgg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-3.0.0.tgz", + "integrity": "sha512-rdxyQ0i9VlhwVlR6oEzrIft8WNKYSD2/cOAJ1YVH/F76gAta7Zv1Dr5xJOUyx0fAsHB5cKNz9hwlUVLMFsQlPA==", "dev": true, "requires": { - "loader-fs-cache": "^1.0.0", - "loader-utils": "^1.0.2", - "object-assign": "^4.0.1", - "object-hash": "^1.1.4", - "rimraf": "^2.6.1" + "loader-fs-cache": "^1.0.2", + "loader-utils": "^1.2.3", + "object-hash": "^1.3.1", + "schema-utils": "^2.1.0" } }, "eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", "dev": true, "requires": { "esrecurse": "^4.1.0", "estraverse": "^4.1.1" } }, + "eslint-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.2.tgz", + "integrity": "sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.0.0" + } + }, "eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", "dev": true }, "espree": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", - "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", + "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", "dev": true, "requires": { - "acorn": "^5.5.0", - "acorn-jsx": "^3.0.0" + "acorn": "^6.0.7", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" } }, "esprima": { @@ -2206,9 +2862,9 @@ } }, "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, "esutils": { @@ -2224,15 +2880,15 @@ "dev": true }, "eventemitter3": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", - "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", "dev": true }, "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", + "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==", "dev": true }, "eventsource": { @@ -2244,6 +2900,16 @@ "original": "^1.0.0" } }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, "execa": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", @@ -2274,115 +2940,114 @@ } } }, - "expand-braces": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", - "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "array-slice": "^0.2.3", - "array-unique": "^0.2.1", - "braces": "^0.1.2" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { - "braces": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", - "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "expand-range": "^0.1.0" + "ms": "2.0.0" } }, - "expand-range": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", - "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-number": "^0.1.1", - "repeat-string": "^0.2.2" + "is-descriptor": "^0.1.0" } }, - "is-number": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", - "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=", - "dev": true + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } }, - "repeat-string": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz", - "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=", + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } } }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "^0.1.0" - } - }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", "dev": true, "requires": { - "fill-range": "^2.1.0" + "homedir-polyfill": "^1.0.1" } }, "express": { - "version": "4.16.4", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", - "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", "dev": true, "requires": { - "accepts": "~1.3.5", + "accepts": "~1.3.7", "array-flatten": "1.1.1", - "body-parser": "1.18.3", - "content-disposition": "0.5.2", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", "content-type": "~1.0.4", - "cookie": "0.3.1", + "cookie": "0.4.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "~1.1.2", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.1.1", + "finalhandler": "~1.1.2", "fresh": "0.5.2", "merge-descriptors": "1.0.1", "methods": "~1.1.2", "on-finished": "~2.3.0", - "parseurl": "~1.3.2", + "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.4", - "qs": "6.5.2", - "range-parser": "~1.2.0", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", "safe-buffer": "5.1.2", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" }, "dependencies": { - "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", - "dev": true, - "requires": { - "mime-types": "~2.1.18", - "negotiator": "0.6.1" - } + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "dev": true }, "debug": { "version": "2.6.9", @@ -2393,37 +3058,16 @@ "ms": "2.0.0" } }, - "finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", - "unpipe": "~1.0.0" - } - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", - "dev": true - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", "dev": true } } @@ -2456,58 +3100,77 @@ } }, "external-editor": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", - "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, "requires": { - "chardet": "^0.4.0", - "iconv-lite": "^0.4.17", + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", "tmp": "^0.0.33" } }, "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "extract-text-webpack-plugin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-1.0.1.tgz", - "integrity": "sha1-yVvzy6rEnclvHcbgclSfu2VMzSw=", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "async": "^1.5.0", - "loader-utils": "^0.2.3", - "webpack-sources": "^0.1.0" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { - "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", - "dev": true + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } }, - "loader-utils": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", - "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0", - "object-assign": "^4.0.1" + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -2539,9 +3202,9 @@ } }, "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", "dev": true }, "fast-json-stable-stringify": { @@ -2571,6 +3234,12 @@ "websocket-driver": ">=0.5.1" } }, + "figgy-pudding": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", + "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", + "dev": true + }, "figures": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", @@ -2581,13 +3250,12 @@ } }, "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", "dev": true, "requires": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" + "flat-cache": "^2.0.1" } }, "file-loader": { @@ -2599,37 +3267,27 @@ "loader-utils": "^1.0.2" } }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true - }, "fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" + "to-regex-range": "^5.0.1" } }, "finalhandler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", - "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dev": true, "requires": { "debug": "2.6.9", - "encodeurl": "~1.0.1", + "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.3.1", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", "unpipe": "~1.0.0" }, "dependencies": { @@ -2647,12 +3305,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true - }, - "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", - "dev": true } } }, @@ -2677,47 +3329,68 @@ "pinkie-promise": "^2.0.0" } }, + "findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "dev": true, + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + } + }, "flat-cache": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", - "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", "dev": true, "requires": { - "circular-json": "^0.3.1", - "graceful-fs": "^4.1.2", - "rimraf": "~2.6.2", - "write": "^0.2.1" + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" } }, + "flatted": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", + "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", + "dev": true + }, "flatten": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=", "dev": true }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, "follow-redirects": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.6.1.tgz", - "integrity": "sha512-t2JCjbzxQpWvbhts3l6SH1DKzSrx8a+SsaVf4h6bG4kOXUuPYS/kg2Lr4gQSb7eemaHqJkOThF1BGyjlUkO1GQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.9.0.tgz", + "integrity": "sha512-CRcPzsSIbXyVDl0QI01muNDu69S8trU4jArW9LpOt2WtC6LyUJetcIrmfHsRBx7/Jb6GHJUiuqyYxPooFfNt6A==", "dev": true, "requires": { - "debug": "=3.1.0" + "debug": "^3.0.0" }, "dependencies": { "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true } } }, @@ -2727,15 +3400,6 @@ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } - }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -2774,6 +3438,16 @@ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", "dev": true }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, "fs-access": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", @@ -2789,6 +3463,29 @@ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -2796,2228 +3493,2147 @@ "dev": true }, "fsevents": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", - "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.0.7.tgz", + "integrity": "sha512-a7YT0SV3RB+DjYcppwVDLtn13UQnmg0SWZS7ezZD0UjnLwXmy8Zm21GMVGLaFGimIqcvyMQaOJBrop8MyOp1kQ==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.0.0.tgz", + "integrity": "sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "dev": true, - "optional": true, "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" + "global-prefix": "^3.0.0" }, "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "dev": true, - "optional": true, "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" } + } + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "dev": true + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, + "gulp-mocha": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gulp-mocha/-/gulp-mocha-6.0.0.tgz", + "integrity": "sha512-FfBldW5ttnDpKf4Sg6/BLOOKCCbr5mbixDGK1t02/8oSrTCwNhgN/mdszG3cuQuYNzuouUdw4EH/mlYtgUscPg==", + "dev": true, + "requires": { + "dargs": "^5.1.0", + "execa": "^0.10.0", + "mocha": "^5.2.0", + "npm-run-path": "^2.0.2", + "plugin-error": "^1.0.1", + "supports-color": "^5.4.0", + "through2": "^2.0.3" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "optional": true, "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "has-flag": "^3.0.0" } - }, - "chownr": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "2.6.9", - "bundled": true, + } + } + }, + "handle-thing": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", + "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==", + "dev": true + }, + "handlebars": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.0.tgz", + "integrity": "sha512-l2jRuU1NAWK6AW5qqcTATWQJvNPEwkM7NEKSiv/gqOsoSQbVoWyqVEY5GS+XPQ88zLNmqASRpzfdm8d79hJS+w==", + "dev": true, + "requires": { + "async": "^2.5.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" + }, + "dependencies": { + "async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", + "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", "dev": true, - "optional": true, "requires": { - "ms": "2.0.0" + "lodash": "^4.17.10" } }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "dev": true, + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + }, + "dependencies": { + "ajv": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", "dev": true, - "optional": true + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + } + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "dev": true, + "requires": { + "isarray": "2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + } + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "dev": true + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, - "optional": true, "requires": { - "minipass": "^2.2.1" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, - "optional": true, "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" + "is-buffer": "^1.1.5" } - }, - "glob": { - "version": "7.1.3", - "bundled": true, + } + } + }, + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "requires": { + "parse-passwd": "^1.0.0" + } + }, + "hosted-git-info": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "dev": true + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "html-comment-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", + "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", + "dev": true + }, + "html-entities": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", + "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", + "dev": true + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "http-parser-js": { + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz", + "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=", + "dev": true + }, + "http-proxy": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", + "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", + "dev": true, + "requires": { + "eventemitter3": "^3.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "dev": true, + "requires": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", + "dev": true + }, + "ieee754": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", + "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz", + "integrity": "sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, - "optional": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "locate-path": "^3.0.0" } }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, - "optional": true, "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true, - "optional": true - }, - "minipass": { - "version": "2.3.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" + "find-up": "^3.0.0" } + } + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "inquirer": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", + "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", + "dev": true, + "requires": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.12", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true }, - "minizlib": { - "version": "1.2.1", - "bundled": true, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "optional": true, "requires": { - "minipass": "^2.2.1" + "color-convert": "^1.9.0" } }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "optional": true, "requires": { - "minimist": "0.0.8" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true }, - "needle": { - "version": "2.2.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true }, - "node-pre-gyp": { - "version": "0.10.3", - "bundled": true, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, - "optional": true, "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" + "ansi-regex": "^4.1.0" } }, - "nopt": { - "version": "4.0.1", - "bundled": true, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "optional": true, "requires": { - "abbrev": "1", - "osenv": "^0.1.4" + "has-flag": "^3.0.0" } - }, - "npm-bundled": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.2.0", - "bundled": true, + } + } + }, + "internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "dev": true, + "requires": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + } + }, + "interpret": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", + "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", + "dev": true + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true + }, + "ip": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/ip/-/ip-0.3.3.tgz", + "integrity": "sha1-jugwnpLwsEDSh/cu+soaIXAtP7Q=", + "dev": true + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true + }, + "ipaddr.js": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", + "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==", + "dev": true + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, - "optional": true, "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" + "is-buffer": "^1.1.5" } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, + } + } + }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, - "optional": true, "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "is-buffer": "^1.1.5" } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "optional": true } } }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "functional-red-black-tree": { + "is-date-object": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", "dev": true }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "dev": true }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { - "assert-plus": "^1.0.0" + "number-is-nan": "^1.0.0" } }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "is-extglob": "^2.1.1" } }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true + }, + "is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", "dev": true, "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" + "is-path-inside": "^2.1.0" } }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", "dev": true, "requires": { - "is-glob": "^2.0.0" + "path-is-inside": "^1.0.2" } }, - "globals": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz", - "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==", - "dev": true - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", "dev": true }, - "gulp-mocha": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gulp-mocha/-/gulp-mocha-6.0.0.tgz", - "integrity": "sha512-FfBldW5ttnDpKf4Sg6/BLOOKCCbr5mbixDGK1t02/8oSrTCwNhgN/mdszG3cuQuYNzuouUdw4EH/mlYtgUscPg==", + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { - "dargs": "^5.1.0", - "execa": "^0.10.0", - "mocha": "^5.2.0", - "npm-run-path": "^2.0.2", - "plugin-error": "^1.0.1", - "supports-color": "^5.4.0", - "through2": "^2.0.3" + "isobject": "^3.0.1" }, "dependencies": { - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, - "handlebars": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.0.tgz", - "integrity": "sha512-l2jRuU1NAWK6AW5qqcTATWQJvNPEwkM7NEKSiv/gqOsoSQbVoWyqVEY5GS+XPQ88zLNmqASRpzfdm8d79hJS+w==", + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", "dev": true, "requires": { - "async": "^2.5.0", - "optimist": "^0.6.1", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4" - }, - "dependencies": { - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", - "dev": true, - "requires": { - "lodash": "^4.17.10" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "has": "^1.0.1" } }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "is-svg": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", + "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", "dev": true, "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - }, - "dependencies": { - "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - } + "html-comment-regex": "^1.1.0" } }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true }, - "has-binary": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", - "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", - "dev": true, - "requires": { - "isarray": "0.0.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - } - } + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true }, - "has-cors": { + "is-wsl": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", "dev": true }, - "has-flag": { + "isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "isbinaryfile": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", + "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", "dev": true, "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } + "buffer-alloc": "^1.2.0" } }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", + "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", "dev": true, "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" }, "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "dev": true, "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "has-flag": "^1.0.0" } } } }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true - }, - "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", - "dev": true - }, - "html-comment-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", - "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", - "dev": true - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "istanbul-instrumenter-loader": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-1.2.0.tgz", + "integrity": "sha1-vvRpBJuBsjWB0NTbN6JxIGAzzFI=", "dev": true, "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "http-parser-js": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.0.tgz", - "integrity": "sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w==", - "dev": true - }, - "http-proxy": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", - "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", - "dev": true, - "requires": { - "eventemitter3": "^3.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-middleware": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz", - "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=", - "dev": true, - "requires": { - "http-proxy": "^1.16.2", - "is-glob": "^3.1.0", - "lodash": "^4.17.2", - "micromatch": "^2.3.11" + "convert-source-map": "^1.3.0", + "istanbul-lib-instrument": "^1.1.3", + "loader-utils": "^0.2.16", + "object-assign": "^4.1.0" }, "dependencies": { - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", "dev": true }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", "dev": true, "requires": { - "is-extglob": "^2.1.0" + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" } } } }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "istanbul-lib-coverage": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz", + "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz", + "integrity": "sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==", "dev": true, "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "babel-generator": "^6.18.0", + "babel-template": "^6.16.0", + "babel-traverse": "^6.18.0", + "babel-types": "^6.18.0", + "babylon": "^6.18.0", + "istanbul-lib-coverage": "^1.2.1", + "semver": "^5.3.0" } }, - "https-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", - "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=", + "jasmine-ajax": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/jasmine-ajax/-/jasmine-ajax-3.4.0.tgz", + "integrity": "sha512-LIVNVCmx5ou+IG6wgX7j73YYzvE2e3aqFWMjOhvAHWTnLICOYSobIH+PG/gOwtP20X0u2SkD3NXT/j5X8rMGOA==", "dev": true }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "jasmine-core": { + "version": "2.99.1", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.99.1.tgz", + "integrity": "sha1-5kAN8ea1bhMLYcS80JPap/boyhU=", + "dev": true + }, + "jasmine-jquery": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/jasmine-jquery/-/jasmine-jquery-2.1.1.tgz", + "integrity": "sha1-1AleZGlEomdjI1dpqwGNnzDw1Hs=", + "dev": true + }, + "js-base64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz", + "integrity": "sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==", + "dev": true + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "js-yaml": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", + "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", "dev": true, "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "argparse": "^1.0.7", + "esprima": "^2.6.0" } }, - "icss-replace-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", - "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", "dev": true }, - "ieee754": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", "dev": true }, - "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", "dev": true }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, - "requires": { - "repeating": "^2.0.0" - } + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, - "indexes-of": { + "json-stable-stringify-without-jsonify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", "dev": true }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "json3": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", "dev": true }, - "inquirer": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", - "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^2.0.4", - "figures": "^2.0.0", - "lodash": "^4.3.0", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rx-lite": "^4.0.8", - "rx-lite-aggregates": "^4.0.8", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" + "minimist": "^1.2.0" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, - "interpret": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-0.6.6.tgz", - "integrity": "sha1-/s16GOfOXKar+5U+H4YhOknxYls=", - "dev": true + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", "dev": true, "requires": { - "loose-envify": "^1.0.0" + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" } }, - "ip": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/ip/-/ip-0.3.3.tgz", - "integrity": "sha1-jugwnpLwsEDSh/cu+soaIXAtP7Q=", + "karma": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/karma/-/karma-4.3.0.tgz", + "integrity": "sha512-NSPViHOt+RW38oJklvYxQC4BSQsv737oQlr/r06pCM+slDOr4myuI1ivkRmp+3dVpJDfZt2DmaPJ2wkx+ZZuMQ==", + "dev": true, + "requires": { + "bluebird": "^3.3.0", + "body-parser": "^1.16.1", + "braces": "^3.0.2", + "chokidar": "^3.0.0", + "colors": "^1.1.0", + "connect": "^3.6.0", + "core-js": "^3.1.3", + "di": "^0.0.1", + "dom-serialize": "^2.2.0", + "flatted": "^2.0.0", + "glob": "^7.1.1", + "graceful-fs": "^4.1.2", + "http-proxy": "^1.13.0", + "isbinaryfile": "^3.0.0", + "lodash": "^4.17.14", + "log4js": "^4.0.0", + "mime": "^2.3.1", + "minimatch": "^3.0.2", + "optimist": "^0.6.1", + "qjobs": "^1.1.4", + "range-parser": "^1.2.0", + "rimraf": "^2.6.0", + "safe-buffer": "^5.0.1", + "socket.io": "2.1.1", + "source-map": "^0.6.1", + "tmp": "0.0.33", + "useragent": "2.3.0" + }, + "dependencies": { + "core-js": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.2.1.tgz", + "integrity": "sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw==", + "dev": true + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "karma-chrome-launcher": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz", + "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==", + "dev": true, + "requires": { + "fs-access": "^1.0.0", + "which": "^1.2.1" + } + }, + "karma-coverage": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-1.1.2.tgz", + "integrity": "sha512-eQawj4Cl3z/CjxslYy9ariU4uDh7cCNFZHNWXWRpl0pNeblY/4wHR7M7boTYXWrn9bY0z2pZmr11eKje/S/hIw==", + "dev": true, + "requires": { + "dateformat": "^1.0.6", + "istanbul": "^0.4.0", + "lodash": "^4.17.0", + "minimatch": "^3.0.0", + "source-map": "^0.5.1" + } + }, + "karma-es5-shim": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/karma-es5-shim/-/karma-es5-shim-0.0.4.tgz", + "integrity": "sha1-zdADM8znfC5M4D46yT8vjs0fuVI=", + "dev": true, + "requires": { + "es5-shim": "^4.0.5" + } + }, + "karma-firefox-launcher": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-1.1.0.tgz", + "integrity": "sha512-LbZ5/XlIXLeQ3cqnCbYLn+rOVhuMIK9aZwlP6eOLGzWdo1UVp7t6CN3DP4SafiRLjexKwHeKHDm0c38Mtd3VxA==", "dev": true }, - "ipaddr.js": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", - "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=", + "karma-jasmine": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-1.1.2.tgz", + "integrity": "sha1-OU8rJf+0pkS5rabyLUQ+L9CIhsM=", "dev": true }, - "is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "karma-jquery": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/karma-jquery/-/karma-jquery-0.2.3.tgz", + "integrity": "sha1-5nEHk00LQEfCBrqlIOQ8eNfoQR8=", "dev": true }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "karma-junit-reporter": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/karma-junit-reporter/-/karma-junit-reporter-1.2.0.tgz", + "integrity": "sha1-T5xAzt+xo5X4rvh2q/lhiZF8Y5Y=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "path-is-absolute": "^1.0.0", + "xmlbuilder": "8.2.2" } }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "karma-safari-launcher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/karma-safari-launcher/-/karma-safari-launcher-1.0.0.tgz", + "integrity": "sha1-lpgqLMR9BmquccVTursoMZEVos4=", "dev": true }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "karma-sourcemap-loader": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz", + "integrity": "sha1-kTIsd/jxPUb+0GKwQuEAnUxFBdg=", "dev": true, "requires": { - "binary-extensions": "^1.0.0" + "graceful-fs": "^4.1.2" } }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "karma-webdriver-launcher": { + "version": "git+https://github.com/nhn/karma-webdriver-launcher.git#9dda6755e8fe9d22414df69a78375d8c5774ad6c", + "from": "git+https://github.com/nhn/karma-webdriver-launcher.git#v1.2.0", "dev": true, "requires": { - "kind-of": "^3.0.2" + "ip": "^0.3.2", + "wd": "^1.11.0" } }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "karma-webpack": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/karma-webpack/-/karma-webpack-4.0.2.tgz", + "integrity": "sha512-970/okAsdUOmiMOCY8sb17A2I8neS25Ad9uhyK3GHgmRSIFJbDcNEFE8dqqUhNe9OHiCC9k3DMrSmtd/0ymP1A==", "dev": true, "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "clone-deep": "^4.0.1", + "loader-utils": "^1.1.0", + "neo-async": "^2.6.1", + "schema-utils": "^1.0.0", + "source-map": "^0.7.3", + "webpack-dev-middleware": "^3.7.0" }, "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "dev": true } } }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", "dev": true }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true, - "requires": { - "is-primitive": "^2.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", "dev": true }, - "is-extglob": { + "lazystream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "readable-stream": "^2.0.5" } }, - "is-fullwidth-code-point": { + "lcid": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", "dev": true, "requires": { - "is-extglob": "^1.0.0" + "invert-kv": "^2.0.0" } }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" } }, - "is-plain-obj": { + "load-json-file": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "loader-fs-cache": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.2.tgz", + "integrity": "sha512-70IzT/0/L+M20jUlEqZhZyArTU6VKLRTYRDAYN26g4jfzpJqjipLL3/hgYpySqI9PwsVRHHFja0LfEmsx9X2Cw==", + "dev": true, + "requires": { + "find-cache-dir": "^0.1.1", + "mkdirp": "0.5.1" + } + }, + "loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", "dev": true }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", "dev": true, "requires": { - "isobject": "^3.0.1" + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" }, "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true } } }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", "dev": true }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", "dev": true }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", "dev": true }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", "dev": true }, - "is-svg": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", - "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", - "dev": true, - "requires": { - "html-comment-regex": "^1.1.0" - } + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", + "dev": true }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", "dev": true }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", "dev": true }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=", "dev": true }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", "dev": true }, - "isbinaryfile": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", - "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", + "log4js": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-4.5.1.tgz", + "integrity": "sha512-EEEgFcE9bLgaYUKuozyFfytQM2wDHtXn4tAN41pkaxpNjAykv11GVdeI4tHtmPWW4Xrgh9R/2d7XYghDVjbKKw==", "dev": true, "requires": { - "buffer-alloc": "^1.2.0" + "date-format": "^2.0.0", + "debug": "^4.1.1", + "flatted": "^2.0.0", + "rfdc": "^1.1.4", + "streamroller": "^1.0.6" } }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "loglevel": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.4.tgz", + "integrity": "sha512-p0b6mOGKcGa+7nnmKbpzR6qloPbrgLcnio++E+14Vo/XffOGwZtRpUhr8dTH/x2oCMmEoIU0Zwm3ZauhvYD17g==", "dev": true }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "requires": { - "isarray": "1.0.0" + "js-tokens": "^3.0.0 || ^4.0.0" } }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } }, - "istanbul": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", - "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, "requires": { - "abbrev": "1.0.x", - "async": "1.x", - "escodegen": "1.8.x", - "esprima": "2.7.x", - "glob": "^5.0.15", - "handlebars": "^4.0.1", - "js-yaml": "3.x", - "mkdirp": "0.5.x", - "nopt": "3.x", - "once": "1.x", - "resolve": "1.1.x", - "supports-color": "^3.1.0", - "which": "^1.1.1", - "wordwrap": "^1.0.0" - }, - "dependencies": { - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } - } + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, - "istanbul-instrumenter-loader": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-1.2.0.tgz", - "integrity": "sha1-vvRpBJuBsjWB0NTbN6JxIGAzzFI=", + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "requires": { - "convert-source-map": "^1.3.0", - "istanbul-lib-instrument": "^1.1.3", - "loader-utils": "^0.2.16", - "object-assign": "^4.1.0" + "pify": "^4.0.1", + "semver": "^5.6.0" }, "dependencies": { - "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", - "dev": true - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true - }, - "loader-utils": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", - "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", - "dev": true, - "requires": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0", - "object-assign": "^4.0.1" - } } } }, - "istanbul-lib-coverage": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz", - "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==", + "mamacro": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", + "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==", "dev": true }, - "istanbul-lib-instrument": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz", - "integrity": "sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==", + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", "dev": true, "requires": { - "babel-generator": "^6.18.0", - "babel-template": "^6.16.0", - "babel-traverse": "^6.18.0", - "babel-types": "^6.18.0", - "babylon": "^6.18.0", - "istanbul-lib-coverage": "^1.2.1", - "semver": "^5.3.0" + "p-defer": "^1.0.0" } }, - "jasmine-ajax": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/jasmine-ajax/-/jasmine-ajax-3.4.0.tgz", - "integrity": "sha512-LIVNVCmx5ou+IG6wgX7j73YYzvE2e3aqFWMjOhvAHWTnLICOYSobIH+PG/gOwtP20X0u2SkD3NXT/j5X8rMGOA==", - "dev": true - }, - "jasmine-core": { - "version": "2.99.1", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.99.1.tgz", - "integrity": "sha1-5kAN8ea1bhMLYcS80JPap/boyhU=", + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", "dev": true }, - "jasmine-jquery": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/jasmine-jquery/-/jasmine-jquery-2.1.1.tgz", - "integrity": "sha1-1AleZGlEomdjI1dpqwGNnzDw1Hs=", + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", "dev": true }, - "js-base64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz", - "integrity": "sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==", - "dev": true + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "math-expression-evaluator": { + "version": "1.2.17", + "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", + "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=", "dev": true }, - "js-yaml": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", - "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^2.6.0" + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json3": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.2.6.tgz", - "integrity": "sha1-9u/JPAagTemuxTBT3yVZuxniA4s=", - "dev": true - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", "dev": true, "requires": { - "minimist": "^1.2.0" + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" }, "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true } } }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "dev": true, "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" + "errno": "^0.1.3", + "readable-stream": "^2.0.1" } }, - "karma": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/karma/-/karma-1.3.0.tgz", - "integrity": "sha1-srlOj0mfrdAGnVT5rvSk1I7FzB8=", + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "dev": true, "requires": { - "bluebird": "^3.3.0", - "body-parser": "^1.12.4", - "chokidar": "^1.4.1", - "colors": "^1.1.0", - "combine-lists": "^1.0.0", - "connect": "^3.3.5", - "core-js": "^2.2.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.0", - "expand-braces": "^0.1.1", - "glob": "^7.0.3", - "graceful-fs": "^4.1.2", - "http-proxy": "^1.13.0", - "isbinaryfile": "^3.0.0", - "lodash": "^3.8.0", - "log4js": "^0.6.31", - "mime": "^1.3.4", - "minimatch": "^3.0.0", - "optimist": "^0.6.1", - "qjobs": "^1.1.4", - "range-parser": "^1.2.0", - "rimraf": "^2.3.3", - "socket.io": "1.4.7", - "source-map": "^0.5.3", - "tmp": "0.0.28", - "useragent": "^2.1.9" + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" }, "dependencies": { - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true - }, - "tmp": { - "version": "0.0.28", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.28.tgz", - "integrity": "sha1-Fyc1t/YU6nrzlmT6hM8N5OUV0SA=", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.1" - } } } }, - "karma-chrome-launcher": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz", - "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==", - "dev": true, - "requires": { - "fs-access": "^1.0.0", - "which": "^1.2.1" - } + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true }, - "karma-coverage": { + "methods": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-1.1.2.tgz", - "integrity": "sha512-eQawj4Cl3z/CjxslYy9ariU4uDh7cCNFZHNWXWRpl0pNeblY/4wHR7M7boTYXWrn9bY0z2pZmr11eKje/S/hIw==", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { - "dateformat": "^1.0.6", - "istanbul": "^0.4.0", - "lodash": "^4.17.0", - "minimatch": "^3.0.0", - "source-map": "^0.5.1" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } } }, - "karma-es5-shim": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/karma-es5-shim/-/karma-es5-shim-0.0.4.tgz", - "integrity": "sha1-zdADM8znfC5M4D46yT8vjs0fuVI=", + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "requires": { - "es5-shim": "^4.0.5" + "bn.js": "^4.0.0", + "brorand": "^1.0.1" } }, - "karma-firefox-launcher": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-1.1.0.tgz", - "integrity": "sha512-LbZ5/XlIXLeQ3cqnCbYLn+rOVhuMIK9aZwlP6eOLGzWdo1UVp7t6CN3DP4SafiRLjexKwHeKHDm0c38Mtd3VxA==", - "dev": true - }, - "karma-jasmine": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-1.1.2.tgz", - "integrity": "sha1-OU8rJf+0pkS5rabyLUQ+L9CIhsM=", + "mime": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", + "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", "dev": true }, - "karma-jquery": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/karma-jquery/-/karma-jquery-0.2.3.tgz", - "integrity": "sha1-5nEHk00LQEfCBrqlIOQ8eNfoQR8=", + "mime-db": { + "version": "1.37.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", + "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==", "dev": true }, - "karma-junit-reporter": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/karma-junit-reporter/-/karma-junit-reporter-1.2.0.tgz", - "integrity": "sha1-T5xAzt+xo5X4rvh2q/lhiZF8Y5Y=", + "mime-types": { + "version": "2.1.21", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", + "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", "dev": true, "requires": { - "path-is-absolute": "^1.0.0", - "xmlbuilder": "8.2.2" + "mime-db": "~1.37.0" } }, - "karma-safari-launcher": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/karma-safari-launcher/-/karma-safari-launcher-1.0.0.tgz", - "integrity": "sha1-lpgqLMR9BmquccVTursoMZEVos4=", + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true }, - "karma-sourcemap-loader": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz", - "integrity": "sha1-kTIsd/jxPUb+0GKwQuEAnUxFBdg=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2" - } - }, - "karma-webdriver-launcher": { - "version": "git+https://github.com/nhn/karma-webdriver-launcher.git#9dda6755e8fe9d22414df69a78375d8c5774ad6c", - "from": "git+https://github.com/nhn/karma-webdriver-launcher.git#v1.2.0", + "mini-css-extract-plugin": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.0.tgz", + "integrity": "sha512-MNpRGbNA52q6U92i0qbVpQNsgk7LExy41MdAlG84FeytfDOtRIf/mCHdEgG8rpTKOaNKiqUnZdlptF469hxqOw==", "dev": true, "requires": { - "ip": "^0.3.2", - "wd": "^1.11.0" - } - }, - "karma-webpack": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/karma-webpack/-/karma-webpack-1.8.1.tgz", - "integrity": "sha1-OdX9Lt7qPMPvW0BZibN9Ww5qO04=", - "dev": true, - "requires": { - "async": "~0.9.0", - "loader-utils": "^0.2.5", - "lodash": "^3.8.0", - "source-map": "^0.1.41", - "webpack-dev-middleware": "^1.0.11" + "loader-utils": "^1.1.0", + "normalize-url": "1.9.1", + "schema-utils": "^1.0.0", + "webpack-sources": "^1.1.0" }, "dependencies": { - "async": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", - "dev": true - }, - "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", - "dev": true - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "loader-utils": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", - "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0", - "object-assign": "^4.0.1" + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" } }, - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", "dev": true }, "source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", "dev": true, "requires": { - "amdefine": ">=0.0.4" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" } } } }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", "dev": true }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "readable-stream": "^2.0.5" + "brace-expansion": "^1.1.7" } }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" } }, - "loader-fs-cache": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.1.tgz", - "integrity": "sha1-VuC/CL2XCLJqdltoUJhAyN7J/bw=", + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "dev": true, "requires": { - "find-cache-dir": "^0.1.1", - "mkdirp": "0.5.1" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } } }, - "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" + "minimist": "0.0.8" } }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true - }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", - "dev": true - }, - "lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", - "dev": true - }, - "lodash.difference": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", - "dev": true - }, - "lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", - "dev": true - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", - "dev": true - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true - }, - "lodash.union": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", - "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=", - "dev": true - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true - }, - "log4js": { - "version": "0.6.38", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz", - "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=", + "mocha": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", + "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", "dev": true, "requires": { - "readable-stream": "~1.0.2", - "semver": "~4.3.3" + "browser-stdout": "1.3.1", + "commander": "2.15.1", + "debug": "3.1.0", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.5", + "he": "1.1.1", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "supports-color": "5.4.0" }, "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", "dev": true }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "semver": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, - "longest": { + "move-concurrently": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", "dev": true, "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" } }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true, - "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" - } + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", "dev": true, "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" } }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "math-expression-evaluator": { - "version": "1.2.17", - "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", - "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=", - "dev": true - }, - "math-random": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", - "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", - "dev": true - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "mime-db": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", - "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==", - "dev": true - }, - "mime-types": { - "version": "2.1.21", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", - "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", - "dev": true, - "requires": { - "mime-db": "~1.37.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", - "dev": true, - "requires": { - "browser-stdout": "1.3.1", - "commander": "2.15.1", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.5", - "he": "1.1.1", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "5.4.0" - }, - "dependencies": { - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", "dev": true }, "mute-stream": { @@ -5027,9 +5643,9 @@ "dev": true }, "nan": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", - "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==", + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", "dev": true, "optional": true }, @@ -5050,26 +5666,6 @@ "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.1" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } } }, "natural-compare": { @@ -5079,9 +5675,15 @@ "dev": true }, "negotiator": { - "version": "0.4.9", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.4.9.tgz", - "integrity": "sha1-kuRrbbU8fkIe1koryU8IvnYw3z8=", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", "dev": true }, "nice-try": { @@ -5090,35 +5692,41 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, + "node-forge": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.8.2.tgz", + "integrity": "sha512-mXQ9GBq1N3uDCyV1pdSzgIguwgtVpM7f5/5J4ipz12PKWElmPpVWLDuWl8iXmhysr21+WmX/OJ5UKx82wjomgg==", + "dev": true + }, "node-libs-browser": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-0.7.0.tgz", - "integrity": "sha1-PicsCBnjCJNeJmdECNevDhSRuDs=", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", "dev": true, "requires": { "assert": "^1.1.1", - "browserify-zlib": "^0.1.4", - "buffer": "^4.9.0", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", "console-browserify": "^1.1.0", "constants-browserify": "^1.0.0", - "crypto-browserify": "3.3.0", + "crypto-browserify": "^3.11.0", "domain-browser": "^1.1.1", - "events": "^1.0.0", - "https-browserify": "0.0.1", - "os-browserify": "^0.2.0", - "path-browserify": "0.0.0", - "process": "^0.11.0", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", "punycode": "^1.2.4", "querystring-es3": "^0.2.0", - "readable-stream": "^2.0.5", + "readable-stream": "^2.3.3", "stream-browserify": "^2.0.1", - "stream-http": "^2.3.1", - "string_decoder": "^0.10.25", - "timers-browserify": "^2.0.2", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", "tty-browserify": "0.0.0", "url": "^0.11.0", - "util": "^0.10.3", - "vm-browserify": "0.0.4" + "util": "^0.11.0", + "vm-browserify": "^1.0.1" }, "dependencies": { "punycode": { @@ -5126,12 +5734,6 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true } } }, @@ -5157,13 +5759,10 @@ } }, "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true }, "normalize-range": { "version": "0.1.2", @@ -5247,15 +5846,36 @@ "requires": { "is-descriptor": "^0.1.0" } - } - } - }, - "object-hash": { + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-hash": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz", "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==", "dev": true }, + "object-is": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz", + "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, "object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", @@ -5263,24 +5883,6 @@ "dev": true, "requires": { "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true, - "requires": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" } }, "object.pick": { @@ -5290,16 +5892,14 @@ "dev": true, "requires": { "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } } }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -5310,9 +5910,9 @@ } }, "on-headers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", - "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", "dev": true }, "once": { @@ -5333,11 +5933,14 @@ "mimic-fn": "^1.0.0" } }, - "open": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/open/-/open-0.0.5.tgz", - "integrity": "sha1-QsPhjslUZra/DcQvOilFw/DK2Pw=", - "dev": true + "opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } }, "optimist": { "version": "0.6.1", @@ -5371,12 +5974,6 @@ "wordwrap": "~1.0.0" } }, - "options": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", - "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", - "dev": true - }, "original": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", @@ -5387,39 +5984,149 @@ } }, "os-browserify": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.2.1.tgz", - "integrity": "sha1-Y/xMzuXS13Y9Jrv4YBB45sLgBE8=", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", "dev": true }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + }, + "dependencies": { + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + } + } + }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true + }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "dev": true }, + "p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "dev": true + }, + "p-limit": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true + }, + "p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "dev": true, + "requires": { + "retry": "^0.12.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, "pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", + "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", "dev": true }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "dev": true, + "requires": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-asn1": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", + "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==", "dev": true, "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" } }, "parse-json": { @@ -5437,37 +6144,34 @@ "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", "dev": true }, - "parsejson": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.1.tgz", - "integrity": "sha1-mxDGwNglq1ieaFFTgm3go7oni8w=", - "dev": true, - "requires": { - "better-assert": "~1.0.0" - } + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true }, "parseqs": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.2.tgz", - "integrity": "sha1-nf5wss3aw4i95PNbHyQPpYrb5sc=", + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", "dev": true, "requires": { "better-assert": "~1.0.0" } }, "parseuri": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.4.tgz", - "integrity": "sha1-gGWCo5iH4eoY3V4v4OAZAiaOk1A=", + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", "dev": true, "requires": { "better-assert": "~1.0.0" } }, "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true }, "pascalcase": { @@ -5477,9 +6181,15 @@ "dev": true }, "path-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", - "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", "dev": true }, "path-exists": { @@ -5532,11 +6242,18 @@ "pinkie-promise": "^2.0.0" } }, - "pbkdf2-compat": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pbkdf2-compat/-/pbkdf2-compat-2.0.1.tgz", - "integrity": "sha1-tuDI+plJTZTgURV1gCpZpcFC8og=", - "dev": true + "pbkdf2": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", + "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } }, "performance-now": { "version": "2.1.0", @@ -5544,6 +6261,12 @@ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", "dev": true }, + "picomatch": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.0.7.tgz", + "integrity": "sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA==", + "dev": true + }, "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", @@ -5594,11 +6317,33 @@ } } }, - "pluralize": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", - "dev": true + "portfinder": { + "version": "1.0.24", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.24.tgz", + "integrity": "sha512-ekRl7zD2qxYndYflwiryJwMioBI7LI7rVXg3EnLK3sjkouT5eOuhS3gS255XxBksa30VG8UPZYZCdgfGOfkSUg==", + "dev": true, + "requires": { + "async": "^1.5.2", + "debug": "^2.2.0", + "mkdirp": "0.5.x" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } }, "posix-character-classes": { "version": "0.1.1", @@ -6179,10 +6924,10 @@ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", "dev": true }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "prettier": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.18.2.tgz", + "integrity": "sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==", "dev": true }, "process": { @@ -6203,14 +6948,20 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, "proxy-addr": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", - "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", + "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", "dev": true, "requires": { "forwarded": "~0.1.2", - "ipaddr.js": "1.8.0" + "ipaddr.js": "1.9.0" } }, "prr": { @@ -6231,6 +6982,53 @@ "integrity": "sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag==", "dev": true }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -6278,63 +7076,46 @@ "dev": true }, "querystringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.0.tgz", - "integrity": "sha512-sluvZZ1YiTLD5jsqZcDmFyV2EwToyXZBfpoVOmktMmW+VEnhgakFHnasVph65fOjGPTWN0Nw3+XQaSeMayr0kg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", + "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", "dev": true }, - "randomatic": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", - "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "requires": { - "is-number": "^4.0.0", - "kind-of": "^6.0.0", - "math-random": "^1.0.1" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true }, "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", "dev": true, "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", "unpipe": "1.0.0" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } } }, "read-pkg": { @@ -6374,305 +7155,12 @@ } }, "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.1.2.tgz", + "integrity": "sha512-8rhl0xs2cxfVsqzreYCvs8EwBfn/DhVdqtoLmw19uI3SC5avYX9teCurlErfpPXGmYtMHReGaP2RsLnFvz/lnw==", "dev": true, "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } + "picomatch": "^2.0.4" } }, "redent": { @@ -6717,15 +7205,6 @@ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", "dev": true }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "dev": true, - "requires": { - "is-equal-shallow": "^0.1.3" - } - }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", @@ -6736,10 +7215,19 @@ "safe-regex": "^1.1.0" } }, + "regexp.prototype.flags": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz", + "integrity": "sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2" + } + }, "regexpp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", - "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", "dev": true }, "regexpu-core": { @@ -6823,15 +7311,17 @@ "uuid": "^3.3.2" } }, - "require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true, - "requires": { - "caller-path": "^0.1.0", - "resolve-from": "^1.0.0" - } + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true }, "requires-port": { "version": "1.0.0", @@ -6848,10 +7338,50 @@ "path-parse": "^1.0.6" } }, - "resolve-from": { + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + } + } + }, + "resolve-dir": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "dependencies": { + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + } + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, "resolve-url": { @@ -6876,14 +7406,17 @@ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "dev": true, - "requires": { - "align-text": "^0.1.1" - } + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true + }, + "rfdc": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.4.tgz", + "integrity": "sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug==", + "dev": true }, "rimraf": { "version": "2.6.3", @@ -6895,10 +7428,14 @@ } }, "ripemd160": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-0.2.0.tgz", - "integrity": "sha1-K/GYveFnys+lHAqSjoS2i74XH84=", - "dev": true + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } }, "run-async": { "version": "2.3.0", @@ -6909,19 +7446,22 @@ "is-promise": "^2.1.0" } }, - "rx-lite": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", - "dev": true + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "^1.1.1" + } }, - "rx-lite-aggregates": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "rxjs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz", + "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==", "dev": true, "requires": { - "rx-lite": "*" + "tslib": "^1.9.0" } }, "safe-buffer": { @@ -6939,15 +7479,6 @@ "ret": "~0.1.10" } }, - "safe-umd-webpack-plugin": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/safe-umd-webpack-plugin/-/safe-umd-webpack-plugin-0.0.2.tgz", - "integrity": "sha512-DqukDpy05ov+d3uVIqSXIsyqc4dPB4pUxlezEdEWT5RgE3CDpcwouTUOns0u/QyvdugIrtodngMp+VYWXrxA9A==", - "dev": true, - "requires": { - "webpack-core": "^0.6.9" - } - }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -6960,6 +7491,31 @@ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true }, + "schema-utils": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.2.0.tgz", + "integrity": "sha512-5EwsCNhfFTZvUreQhx/4vVQpJ/lnCAkgoIHLhSpp4ZirE+4hzFvdJi0FMub6hxbFVBJYSpeVVmon+2e7uEGRrA==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1" + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "selfsigned": { + "version": "1.10.6", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.6.tgz", + "integrity": "sha512-i3+CeqxL7DpAazgVpAGdKMwHuL63B5nhJMh9NQ7xmChGkA3jNFflq6Jyo1LLJYcr3idWiNOPWHCrm4zMayLG4w==", + "dev": true, + "requires": { + "node-forge": "0.8.2" + } + }, "semver": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", @@ -6967,9 +7523,9 @@ "dev": true }, "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", "dev": true, "requires": { "debug": "2.6.9", @@ -6979,12 +7535,12 @@ "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" + "range-parser": "~1.2.1", + "statuses": "~1.5.0" }, "dependencies": { "debug": { @@ -6994,28 +7550,36 @@ "dev": true, "requires": { "ms": "2.0.0" - } - }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", - "dev": true + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true } } }, + "serialize-javascript": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz", + "integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==", + "dev": true + }, "serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", @@ -7031,16 +7595,6 @@ "parseurl": "~1.3.2" }, "dependencies": { - "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", - "dev": true, - "requires": { - "mime-types": "~2.1.18", - "negotiator": "0.6.1" - } - }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -7050,36 +7604,54 @@ "ms": "2.0.0" } }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", "dev": true } } }, "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", "dev": true, "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" + "parseurl": "~1.3.3", + "send": "0.17.1" } }, - "set-value": { + "set-blocking": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "dev": true, "requires": { "extend-shallow": "^2.0.1", @@ -7106,16 +7678,29 @@ "dev": true }, "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", "dev": true }, "sha.js": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.2.6.tgz", - "integrity": "sha1-F93t3F9yL7ZlAWWIlUYZd4ZzFbo=", - "dev": true + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } }, "shebang-command": { "version": "1.2.0", @@ -7139,12 +7724,25 @@ "dev": true }, "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", "dev": true, "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + } } }, "snapdragon": { @@ -7246,18 +7844,6 @@ "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true } } }, @@ -7268,185 +7854,125 @@ "dev": true, "requires": { "kind-of": "^3.2.0" - } - }, - "socket.io": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.4.7.tgz", - "integrity": "sha1-krf3y4jFeX1NruJ5/oB12+bT+hw=", - "dev": true, - "requires": { - "debug": "2.2.0", - "engine.io": "1.6.10", - "has-binary": "0.1.7", - "socket.io-adapter": "0.4.0", - "socket.io-client": "1.4.6", - "socket.io-parser": "2.2.6" }, "dependencies": { - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "ms": "0.7.1" + "is-buffer": "^1.1.5" } - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", - "dev": true } } }, - "socket.io-adapter": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.4.0.tgz", - "integrity": "sha1-+5+CqxqmUpC/csNleVW5MKmRok8=", + "socket.io": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", + "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", "dev": true, "requires": { - "debug": "2.2.0", - "socket.io-parser": "2.2.2" + "debug": "~3.1.0", + "engine.io": "~3.2.0", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.1.1", + "socket.io-parser": "~3.2.0" }, "dependencies": { - "component-emitter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", - "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=", - "dev": true - }, "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { - "ms": "0.7.1" + "ms": "2.0.0" } }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true - }, - "socket.io-parser": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.2.2.tgz", - "integrity": "sha1-PXr2tkSX6Va32f53X5mXFgJ/lBc=", - "dev": true, - "requires": { - "benchmark": "1.0.0", - "component-emitter": "1.1.2", - "debug": "0.7.4", - "isarray": "0.0.1", - "json3": "3.2.6" - }, - "dependencies": { - "debug": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz", - "integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=", - "dev": true - } - } } } }, + "socket.io-adapter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", + "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=", + "dev": true + }, "socket.io-client": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.4.6.tgz", - "integrity": "sha1-SbC6U379FbgpfIQBbmQuHHx1LD0=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", + "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==", "dev": true, "requires": { "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", "component-bind": "1.0.0", - "component-emitter": "1.2.0", - "debug": "2.2.0", - "engine.io-client": "1.6.9", - "has-binary": "0.1.7", + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "engine.io-client": "~3.2.0", + "has-binary2": "~1.0.2", + "has-cors": "1.1.0", "indexof": "0.0.1", "object-component": "0.0.3", - "parseuri": "0.0.4", - "socket.io-parser": "2.2.6", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "~3.2.0", "to-array": "0.1.4" }, "dependencies": { - "component-emitter": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.0.tgz", - "integrity": "sha1-zNETqGOI0GSC0D3j/H35hSa6jv4=", - "dev": true - }, "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { - "ms": "0.7.1" + "ms": "2.0.0" } }, "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } } }, "socket.io-parser": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.2.6.tgz", - "integrity": "sha1-ON/WHfUNz4qx2eIJEyK/kCuii5k=", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", + "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", "dev": true, "requires": { - "benchmark": "1.0.0", - "component-emitter": "1.1.2", - "debug": "2.2.0", - "isarray": "0.0.1", - "json3": "3.3.2" + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "isarray": "2.0.1" }, "dependencies": { - "component-emitter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", - "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=", - "dev": true - }, "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { - "ms": "0.7.1" + "ms": "2.0.0" } }, "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "json3": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", - "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", "dev": true }, "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } } @@ -7459,14 +7985,6 @@ "requires": { "faye-websocket": "^0.10.0", "uuid": "^3.0.1" - }, - "dependencies": { - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true - } } }, "sockjs-client": { @@ -7483,20 +8001,23 @@ "url-parse": "^1.4.3" }, "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, "faye-websocket": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", - "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", "dev": true, "requires": { "websocket-driver": ">=0.5.1" } - }, - "json3": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", - "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", - "dev": true } } }, @@ -7534,6 +8055,24 @@ "urix": "^0.1.0" } }, + "source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, "source-map-url": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", @@ -7572,6 +8111,46 @@ "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==", "dev": true }, + "spdy": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz", + "integrity": "sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + }, + "dependencies": { + "readable-stream": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, "split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", @@ -7604,6 +8183,15 @@ "tweetnacl": "~0.14.0" } }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -7641,11 +8229,15 @@ "readable-stream": "^2.0.2" } }, - "stream-cache": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/stream-cache/-/stream-cache-0.0.2.tgz", - "integrity": "sha1-GsWtaDJCjKVWZ9ve45Xa1ObbEY8=", - "dev": true + "stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } }, "stream-http": { "version": "2.8.3", @@ -7660,6 +8252,51 @@ "xtend": "^4.0.0" } }, + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "dev": true + }, + "streamroller": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-1.0.6.tgz", + "integrity": "sha512-3QC47Mhv3/aZNFpDDVO44qQb9gwB9QggMEE0sQmkTAwBVYdBRWISdsywlkfm5II1Q5y/pmrHflti/IgmIzdDBg==", + "dev": true, + "requires": { + "async": "^2.6.2", + "date-format": "^2.0.0", + "debug": "^3.2.6", + "fs-extra": "^7.0.1", + "lodash": "^4.17.14" + }, + "dependencies": { + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + } + } + }, "strict-uri-encode": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", @@ -7741,15 +8378,6 @@ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true }, - "style-loader": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.13.2.tgz", - "integrity": "sha1-dFMzhM9pjHEEx5URULSXF63C87s=", - "dev": true, - "requires": { - "loader-utils": "^1.0.2" - } - }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", @@ -7772,60 +8400,55 @@ } }, "table": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", - "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", "dev": true, "requires": { - "ajv": "^5.2.3", - "ajv-keywords": "^2.1.0", - "chalk": "^2.1.0", - "lodash": "^4.17.4", - "slice-ansi": "1.0.0", - "string-width": "^2.1.1" + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" } }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" + "ansi-regex": "^4.1.0" } } } }, "tapable": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.1.10.tgz", - "integrity": "sha1-KcNXB8K3DlDQdIK10gLo7URtr9Q=", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", "dev": true }, "tar-stream": { @@ -7854,6 +8477,112 @@ } } }, + "terser": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.3.0.tgz", + "integrity": "sha512-w5CzrvQOwYAH54aG22IrUJI4yX1w62XQmMdEOM6H4w0ii6rc3HJ89fmcOGN5mRwBWfUgaqO7RJTp4aoY/uE+qQ==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "commander": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz", + "integrity": "sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg==", + "dev": true, + "requires": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^1.7.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + }, + "dependencies": { + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + } + } + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -7876,16 +8605,16 @@ "xtend": "~4.0.1" } }, - "time-stamp": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.2.0.tgz", - "integrity": "sha512-zxke8goJQpBeEgD82CXABeMh0LSJcj7CXEd0OHOg45HgcofF7pxNwZm9+RknpxpDhwN4gFpySkApKfFYfRQnUA==", + "thunky": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.3.tgz", + "integrity": "sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow==", "dev": true }, "timers-browserify": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", - "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", + "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", "dev": true, "requires": { "setimmediate": "^1.0.4" @@ -7925,6 +8654,17 @@ "dev": true, "requires": { "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, "to-regex": { @@ -7940,26 +8680,20 @@ } }, "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - } + "is-number": "^7.0.0" } }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, "tough-cookie": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", @@ -7990,6 +8724,12 @@ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", "dev": true }, + "tslib": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", + "dev": true + }, "tty-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", @@ -8043,13 +8783,30 @@ } }, "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, "requires": { "media-typer": "0.3.0", - "mime-types": "~2.1.18" + "mime-types": "~2.1.24" + }, + "dependencies": { + "mime-db": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", + "dev": true + }, + "mime-types": { + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "dev": true, + "requires": { + "mime-db": "1.40.0" + } + } } }, "typedarray": { @@ -8078,51 +8835,22 @@ } } }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "dev": true - }, "ultron": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", - "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", "dev": true }, "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", "dev": true, "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } + "set-value": "^2.0.1" } }, "uniq": { @@ -8137,6 +8865,30 @@ "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", "dev": true }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -8180,15 +8932,15 @@ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true } } }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true + }, "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", @@ -8241,12 +8993,12 @@ } }, "url-parse": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.4.tgz", - "integrity": "sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg==", + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", + "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", "dev": true, "requires": { - "querystringify": "^2.0.0", + "querystringify": "^2.1.1", "requires-port": "^1.0.0" } }, @@ -8266,16 +9018,10 @@ "tmp": "0.0.x" } }, - "utf8": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.0.tgz", - "integrity": "sha1-DP7FyAUtRKI+OqqQgQToB1+V39U=", - "dev": true - }, "util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", "dev": true, "requires": { "inherits": "2.0.3" @@ -8299,6 +9045,12 @@ "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", "dev": true }, + "v8-compile-cache": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz", + "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==", + "dev": true + }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -8339,13 +9091,10 @@ } }, "vm-browserify": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", - "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", - "dev": true, - "requires": { - "indexof": "0.0.1" - } + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz", + "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==", + "dev": true }, "void-elements": { "version": "2.0.1", @@ -8354,237 +9103,1854 @@ "dev": true }, "watchpack": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-0.2.9.tgz", - "integrity": "sha1-Yuqkq15bo1/fwBgnVibjwPXj+ws=", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", + "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", "dev": true, "requires": { - "async": "^0.9.0", - "chokidar": "^1.0.0", - "graceful-fs": "^4.1.2" + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" }, "dependencies": { - "async": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "fsevents": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true, + "optional": true + }, + "minipass": { + "version": "2.3.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.3.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^4.1.0", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.12.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.7.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "wd": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/wd/-/wd-1.11.3.tgz", + "integrity": "sha512-doB7E6DDhis6sSCfWps9Uz0UBBPAySv1x96KH6klfHp8y89HvhqEq3c0O8LPZhG37egJULN0m7+M9t16xUTG0g==", + "dev": true, + "requires": { + "archiver": "^3.0.0", + "async": "^2.0.0", + "fancy-log": "^1.3.3", + "gulp-mocha": "^6.0.0", + "lodash": "^4.0.0", + "mkdirp": "^0.5.1", + "q": "^1.5.1", + "request": "2.88.0", + "vargs": "^0.1.0" + }, + "dependencies": { + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + }, + "dependencies": { + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + } + } + } + } + }, + "webpack": { + "version": "4.39.3", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.39.3.tgz", + "integrity": "sha512-BXSI9M211JyCVc3JxHWDpze85CvjC842EvpRsVTc/d15YJGlox7GIDd38kJgWrb3ZluyvIjgenbLDMBQPDcxYQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/wasm-edit": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", + "acorn": "^6.2.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.1", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.1", + "watchpack": "^1.6.0", + "webpack-sources": "^1.4.1" + }, + "dependencies": { + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + } + } + }, + "webpack-cli": { + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.8.tgz", + "integrity": "sha512-RANYSXwikSWINjHMd/mtesblNSpjpDLoYTBtP99n1RhXqVI/wxN40Auqy42I7y4xrbmRBoA5Zy5E0JSBD5XRhw==", + "dev": true, + "requires": { + "chalk": "2.4.2", + "cross-spawn": "6.0.5", + "enhanced-resolve": "4.1.0", + "findup-sync": "3.0.0", + "global-modules": "2.0.0", + "import-local": "2.0.0", + "interpret": "1.2.0", + "loader-utils": "1.2.3", + "supports-color": "6.1.0", + "v8-compile-cache": "2.0.3", + "yargs": "13.2.4" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "webpack-dev-middleware": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.1.tgz", + "integrity": "sha512-5MWu9SH1z3hY7oHOV6Kbkz5x7hXbxK56mGHNqHTe6d+ewxOwKUxoUJBs7QIaJb33lPjl9bJZ3X0vCoooUzC36A==", + "dev": true, + "requires": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + } + }, + "webpack-dev-server": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.8.0.tgz", + "integrity": "sha512-Hs8K9yI6pyMvGkaPTeTonhD6JXVsigXDApYk9JLW4M7viVBspQvb1WdAcWxqtmttxNW4zf2UFLsLNe0y87pIGQ==", + "dev": true, + "requires": { + "ansi-html": "0.0.7", + "bonjour": "^3.5.0", + "chokidar": "^2.1.6", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.2.1", + "http-proxy-middleware": "^0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.3.0", + "ip": "^1.1.5", + "is-absolute-url": "^3.0.0", + "killable": "^1.0.1", + "loglevel": "^1.6.3", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.21", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.4", + "semver": "^6.3.0", + "serve-index": "^1.9.1", + "sockjs": "0.3.19", + "sockjs-client": "1.3.0", + "spdy": "^4.0.1", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.0", + "webpack-log": "^2.0.0", + "ws": "^6.2.1", + "yargs": "12.0.5" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "fsevents": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true, + "optional": true + }, + "minipass": { + "version": "2.3.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.3.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^4.1.0", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.12.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.7.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", "dev": true - } - } - }, - "wd": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/wd/-/wd-1.11.3.tgz", - "integrity": "sha512-doB7E6DDhis6sSCfWps9Uz0UBBPAySv1x96KH6klfHp8y89HvhqEq3c0O8LPZhG37egJULN0m7+M9t16xUTG0g==", - "dev": true, - "requires": { - "archiver": "^3.0.0", - "async": "^2.0.0", - "fancy-log": "^1.3.3", - "gulp-mocha": "^6.0.0", - "lodash": "^4.0.0", - "mkdirp": "^0.5.1", - "q": "^1.5.1", - "request": "2.88.0", - "vargs": "^0.1.0" - }, - "dependencies": { - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { - "lodash": "^4.17.14" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" }, "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } } } - } - } - }, - "webpack": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-1.15.0.tgz", - "integrity": "sha1-T/MfU9sDM55VFkqdRo7gMklo/pg=", - "dev": true, - "requires": { - "acorn": "^3.0.0", - "async": "^1.3.0", - "clone": "^1.0.2", - "enhanced-resolve": "~0.9.0", - "interpret": "^0.6.4", - "loader-utils": "^0.2.11", - "memory-fs": "~0.3.0", - "mkdirp": "~0.5.0", - "node-libs-browser": "^0.7.0", - "optimist": "~0.6.0", - "supports-color": "^3.1.0", - "tapable": "~0.1.8", - "uglify-js": "~2.7.3", - "watchpack": "^0.2.1", - "webpack-core": "~0.6.9" - }, - "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", "dev": true }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "is-absolute-url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.1.tgz", + "integrity": "sha512-c2QjUwuMxLsld90sj3xYzpFYWJtuxkIn1f5ua9RTEYJt/vV2IsM+Py00/6qjV7qExgifUvt7qfyBGBBKm+2iBg==", "dev": true }, - "loader-utils": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", - "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "requires": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0", - "object-assign": "^4.0.1" + "binary-extensions": "^1.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" } }, - "memory-fs": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.3.0.tgz", - "integrity": "sha1-e8xrYp46Q+hx1+Kaymrop/FcuyA=", + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" } }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, "requires": { - "has-flag": "^1.0.0" + "has-flag": "^3.0.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } }, - "uglify-js": { - "version": "2.7.5", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.7.5.tgz", - "integrity": "sha1-RhLAx7qu4rp8SH3kkErhIgefLKg=", + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { - "async": "~0.2.6", - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" }, "dependencies": { - "async": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", - "dev": true + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } } } - } - } - }, - "webpack-core": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/webpack-core/-/webpack-core-0.6.9.tgz", - "integrity": "sha1-/FcViMhVjad76e+23r3Fo7FyvcI=", - "dev": true, - "requires": { - "source-list-map": "~0.1.7", - "source-map": "~0.4.1" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + }, + "ws": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", "dev": true, "requires": { - "amdefine": ">=0.0.4" + "async-limiter": "~1.0.0" } - } - } - }, - "webpack-dev-middleware": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz", - "integrity": "sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A==", - "dev": true, - "requires": { - "memory-fs": "~0.4.1", - "mime": "^1.5.0", - "path-is-absolute": "^1.0.0", - "range-parser": "^1.0.3", - "time-stamp": "^2.0.0" - } - }, - "webpack-dev-server": { - "version": "1.16.5", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-1.16.5.tgz", - "integrity": "sha1-DL1fLSrI1OWTqs1clwLnu9XlmJI=", - "dev": true, - "requires": { - "compression": "^1.5.2", - "connect-history-api-fallback": "^1.3.0", - "express": "^4.13.3", - "http-proxy-middleware": "~0.17.1", - "open": "0.0.5", - "optimist": "~0.6.1", - "serve-index": "^1.7.2", - "sockjs": "^0.3.15", - "sockjs-client": "^1.0.3", - "stream-cache": "~0.0.1", - "strip-ansi": "^3.0.0", - "supports-color": "^3.1.1", - "webpack-dev-middleware": "^1.10.2" - }, - "dependencies": { - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + }, + "yargs": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", "dev": true, "requires": { - "has-flag": "^1.0.0" + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" + } + }, + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } }, - "webpack-sources": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-0.1.5.tgz", - "integrity": "sha1-qh86vw8NdNtxEcQOUAuE+WZkB1A=", + "webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", "dev": true, "requires": { - "source-list-map": "~0.1.7", - "source-map": "~0.5.3" + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "dev": true + } } }, "websocket-driver": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", - "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz", + "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==", "dev": true, "requires": { - "http-parser-js": ">=0.4.0", + "http-parser-js": ">=0.4.0 <0.4.11", + "safe-buffer": ">=5.1.0", "websocket-extensions": ">=0.1.1" } }, @@ -8609,10 +10975,10 @@ "isexe": "^2.0.0" } }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, "wordwrap": { @@ -8621,6 +10987,63 @@ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", "dev": true }, + "worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "dev": true, + "requires": { + "errno": "~0.1.7" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -8628,22 +11051,23 @@ "dev": true }, "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", "dev": true, "requires": { "mkdirp": "^0.5.1" } }, "ws": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.0.1.tgz", - "integrity": "sha1-fQsqLljN3YGQOcKcneZQReGzEOk=", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", "dev": true, "requires": { - "options": ">=0.0.5", - "ultron": "1.0.x" + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" } }, "xmlbuilder": { @@ -8653,9 +11077,9 @@ "dev": true }, "xmlhttprequest-ssl": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.1.tgz", - "integrity": "sha1-O3dB/qSoZnWXbpCNKW1ERZYfqmc=", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", "dev": true }, "xtend": { @@ -8664,6 +11088,12 @@ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", "dev": true }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, "yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", @@ -8671,21 +11101,75 @@ "dev": true }, "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", + "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "os-locale": "^3.1.0", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "yargs-parser": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", "dev": true, "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" }, "dependencies": { "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true } } diff --git a/package.json b/package.json index 6a848fda..64025376 100644 --- a/package.json +++ b/package.json @@ -11,8 +11,8 @@ "bundle": "webpack && webpack -p", "serve": "webpack-dev-server --inline --hot -d", "serve:ie8": "webpack-dev-server -d", - "doc:serve" : "tuidoc --serv", - "doc" : "tuidoc" + "doc:serve": "tuidoc --serv", + "doc": "tuidoc" }, "description": "TOAST UI Component: Tree", "repository": "https://github.com/nhn/tui.tree.git", @@ -26,16 +26,16 @@ "license": "MIT", "devDependencies": { "css-loader": "^0.26.1", - "eslint": "^4.5.0", - "eslint-config-tui": "^1.0.1", - "eslint-loader": "^1.6.1", - "extract-text-webpack-plugin": "^1.0.1", + "eslint": "^5.12.0", + "eslint-config-prettier": "^6.2.0", + "eslint-config-tui": "^2.2.0", + "eslint-loader": "^3.0.0", "file-loader": "^0.11.2", "istanbul-instrumenter-loader": "^1.0.0", "jasmine-ajax": "^3.2.0", "jasmine-core": "^2.3.4", "jasmine-jquery": "^2.0.5", - "karma": "1.3.0", + "karma": "^4.3.0", "karma-chrome-launcher": "^2.0.0", "karma-coverage": "^1.1.1", "karma-es5-shim": "^0.0.4", @@ -46,12 +46,13 @@ "karma-safari-launcher": "^1.0.0", "karma-sourcemap-loader": "^0.3.7", "karma-webdriver-launcher": "git+https://github.com/nhn/karma-webdriver-launcher.git#v1.2.0", - "karma-webpack": "^1.8.0", - "safe-umd-webpack-plugin": "0.0.2", - "style-loader": "^0.13.1", + "karma-webpack": "^4.0.2", + "mini-css-extract-plugin": "^0.8.0", + "prettier": "^1.18.2", "url-loader": "^0.5.7", - "webpack": "^1.13.3", - "webpack-dev-server": "^1.11.0" + "webpack": "^4.39.3", + "webpack-cli": "^3.3.7", + "webpack-dev-server": "^3.8.0" }, "dependencies": { "tui-code-snippet": "^1.5.0", diff --git a/src/js/consts/ajaxCommand.js b/src/js/consts/ajaxCommand.js index bf99a716..ebd3cb9f 100644 --- a/src/js/consts/ajaxCommand.js +++ b/src/js/consts/ajaxCommand.js @@ -8,10 +8,10 @@ * @type {Object.} */ module.exports = { - READ: 'read', - CREATE: 'create', - UPDATE: 'update', - DELETE: 'remove', - DELETE_ALL_CHILDREN: 'removeAllChildren', - MOVE: 'move' + READ: 'read', + CREATE: 'create', + UPDATE: 'update', + DELETE: 'remove', + DELETE_ALL_CHILDREN: 'removeAllChildren', + MOVE: 'move' }; diff --git a/src/js/consts/defaultOption.js b/src/js/consts/defaultOption.js index 09e78ee2..5766f1c4 100644 --- a/src/js/consts/defaultOption.js +++ b/src/js/consts/defaultOption.js @@ -26,44 +26,44 @@ * @property {string} textClass - Class name for text element in a node */ module.exports = { - data: [], - nodeDefaultState: 'closed', - stateLabels: { - opened: '-', - closed: '+' - }, - nodeIdPrefix: 'tui-tree-node-', - classNames: { - nodeClass: 'tui-tree-node', - leafClass: 'tui-tree-leaf', - openedClass: 'tui-tree-opened', - closedClass: 'tui-tree-closed', - subtreeClass: 'tui-js-tree-subtree', - toggleBtnClass: 'tui-js-tree-toggle-btn', - textClass: 'tui-js-tree-text', - btnClass: 'tui-tree-content-wrapper' - }, - template: { - internalNode: - '
' + - '' + - '' + - '' + - '{{text}}' + - '' + - '
' + - '', - leafNode: - '
' + - '' + - '' + - '{{text}}' + - '' + - '
' - }, - indent: 23, // value of default css, - usageStatistics: true + data: [], + nodeDefaultState: 'closed', + stateLabels: { + opened: '-', + closed: '+' + }, + nodeIdPrefix: 'tui-tree-node-', + classNames: { + nodeClass: 'tui-tree-node', + leafClass: 'tui-tree-leaf', + openedClass: 'tui-tree-opened', + closedClass: 'tui-tree-closed', + subtreeClass: 'tui-js-tree-subtree', + toggleBtnClass: 'tui-js-tree-toggle-btn', + textClass: 'tui-js-tree-text', + btnClass: 'tui-tree-content-wrapper' + }, + template: { + internalNode: + '
' + + '' + + '' + + '' + + '{{text}}' + + '' + + '
' + + '', + leafNode: + '
' + + '' + + '' + + '{{text}}' + + '' + + '
' + }, + indent: 23, // value of default css, + usageStatistics: true }; diff --git a/src/js/consts/messages.js b/src/js/consts/messages.js index b62b9e99..8ead1fe7 100644 --- a/src/js/consts/messages.js +++ b/src/js/consts/messages.js @@ -8,10 +8,10 @@ * @type {Object.} */ module.exports = { - INVALID_CONTAINER_ELEMENT: '"tui-tree": The container element is invalid.', - INVALID_API: '"tui-tree": INVALID_API', - INVALID_API_SELECTABLE: '"tui-tree": The feature-"Selectable" is not enabled.', - INVALID_API_EDITABLE: '"tui-tree": The feature-"Editable" is not enabled.', - INVALID_API_DRAGGABLE: '"tui-tree": The feature-"Draggable" is not enabled.', - INVALID_API_CHECKBOX: '"tui-tree": The feature-"Checkbox" is not enabled.' + INVALID_CONTAINER_ELEMENT: '"tui-tree": The container element is invalid.', + INVALID_API: '"tui-tree": INVALID_API', + INVALID_API_SELECTABLE: '"tui-tree": The feature-"Selectable" is not enabled.', + INVALID_API_EDITABLE: '"tui-tree": The feature-"Editable" is not enabled.', + INVALID_API_DRAGGABLE: '"tui-tree": The feature-"Draggable" is not enabled.', + INVALID_API_CHECKBOX: '"tui-tree": The feature-"Checkbox" is not enabled.' }; diff --git a/src/js/consts/outerTemplate.js b/src/js/consts/outerTemplate.js index 7462c439..f4319746 100644 --- a/src/js/consts/outerTemplate.js +++ b/src/js/consts/outerTemplate.js @@ -1,3 +1,4 @@ +/* eslint-disable no-useless-concat */ /** * @fileoverview Set outer template * @author NHN. FE dev Lab @@ -8,13 +9,7 @@ * @type {{internalNode: string, leafNode: string}} */ module.exports = { - ROOT: '
    ', - INTERNAL_NODE: - '
  • ' + - '{{innerTemplate}}' + - '
  • ', - LEAF_NODE: - '
  • ' + - '{{innerTemplate}}' + - '
  • ' + ROOT: '
      ', + INTERNAL_NODE: '
    • ' + '{{innerTemplate}}' + '
    • ', + LEAF_NODE: '
    • ' + '{{innerTemplate}}' + '
    • ' }; diff --git a/src/js/consts/states.js b/src/js/consts/states.js index ad28f919..86f7ef7c 100644 --- a/src/js/consts/states.js +++ b/src/js/consts/states.js @@ -8,12 +8,12 @@ * @type {Object.} */ module.exports = { - /** - * States of node - * @type {{OPENED: string, CLOSED: string}} - */ - node: { - OPENED: 'opened', - CLOSED: 'closed' - } + /** + * States of node + * @type {{OPENED: string, CLOSED: string}} + */ + node: { + OPENED: 'opened', + CLOSED: 'closed' + } }; diff --git a/src/js/features/ajax.js b/src/js/features/ajax.js index 50420ebb..9a623087 100644 --- a/src/js/features/ajax.js +++ b/src/js/features/ajax.js @@ -17,82 +17,83 @@ var LOADER_CLASSNAME = 'tui-tree-loader'; * @param {boolean} [options.isLoadRoot] - Whether load data from root node or not * @ignore */ -var Ajax = snippet.defineClass(/** @lends Ajax.prototype */{ +var Ajax = snippet.defineClass( + /** @lends Ajax.prototype */ { static: { - /** - * @static - * @memberof Ajax - * @returns {Array.} API list of Ajax - */ - getAPIList: function() { - return API_LIST.slice(); - } + /** + * @static + * @memberof Ajax + * @returns {Array.} API list of Ajax + */ + getAPIList: function() { + return API_LIST.slice(); + } }, init: function(tree, options) { - options = snippet.extend({}, options); - - /** - * Tree - * @type {Tree} - */ - this.tree = tree; - - /** - * Option for each request command - * @type {Object} - */ - this.command = options.command; - - /** - * Callback for parsing the response data - * @type {?Function} - */ - this.parseData = options.parseData || null; - - /** - * Classname of loader element - * @type {string} - */ - this.loaderClassName = options.loaderClassName || LOADER_CLASSNAME; - - /** - * State of loading root data or not - * @type {boolean} - */ - this.isLoadRoot = !snippet.isUndefined(options.isLoadRoot) ? options.isLoadRoot : true; - - /** - * Loader element - * @type {HTMLElement} - */ - this.loader = null; - - this._createLoader(); - - tree.on('initFeature', snippet.bind(this._onInitFeature, this)); + options = snippet.extend({}, options); + + /** + * Tree + * @type {Tree} + */ + this.tree = tree; + + /** + * Option for each request command + * @type {Object} + */ + this.command = options.command; + + /** + * Callback for parsing the response data + * @type {?Function} + */ + this.parseData = options.parseData || null; + + /** + * Classname of loader element + * @type {string} + */ + this.loaderClassName = options.loaderClassName || LOADER_CLASSNAME; + + /** + * State of loading root data or not + * @type {boolean} + */ + this.isLoadRoot = !snippet.isUndefined(options.isLoadRoot) ? options.isLoadRoot : true; + + /** + * Loader element + * @type {HTMLElement} + */ + this.loader = null; + + this._createLoader(); + + tree.on('initFeature', snippet.bind(this._onInitFeature, this)); }, /** - * Custom event handler "initFeature" + * Custom event handler "initFeature" * @private */ _onInitFeature: function() { - if (!this.isLoadRoot) { - return; - } + if (!this.isLoadRoot) { + return; + } - this.tree.resetAllData(); + this.tree.resetAllData(); }, /** * Disable this module */ destroy: function() { - var tree = this.tree; + var tree = this.tree; - this._removeLoader(); + this._removeLoader(); - tree.off(this); + tree.off(this); }, /** @@ -102,46 +103,47 @@ var Ajax = snippet.defineClass(/** @lends Ajax.prototype */{ * @param {Object} [params] - Values to make "data" property using request */ loadData: function(type, callback, params) { - var self = this; - var options; - - if (!this.command || !this.command[type] || - !this.command[type].url) { - return; - } - - options = this._getDefaultRequestOptions(type, params); - - /** - * @event Tree#beforeAjaxRequest - * @type {object} evt - Event data - * @property {string} command - Command type - * @property {object} [data] - Request data - * @example - * tree.on('beforeAjaxRequest', function(evt) { - * console.log('before ' + evt.command + ' request!'); - * return false; // It cancels request - * // return true; // It fires request - * }); - */ - if (!this.tree.invoke('beforeAjaxRequest', { - type: type, - params: params - })) { - return; - } - - this._showLoader(); - - options.success = function(response) { - self._responseSuccess(type, callback, response); - }; - - options.error = function() { - self._responseError(type); - }; - - $.ajax(options); + var self = this; + var options; + + if (!this.command || !this.command[type] || !this.command[type].url) { + return; + } + + options = this._getDefaultRequestOptions(type, params); + + /** + * @event Tree#beforeAjaxRequest + * @type {object} evt - Event data + * @property {string} command - Command type + * @property {object} [data] - Request data + * @example + * tree.on('beforeAjaxRequest', function(evt) { + * console.log('before ' + evt.command + ' request!'); + * return false; // It cancels request + * // return true; // It fires request + * }); + */ + if ( + !this.tree.invoke('beforeAjaxRequest', { + type: type, + params: params + }) + ) { + return; + } + + this._showLoader(); + + options.success = function(response) { + self._responseSuccess(type, callback, response); + }; + + options.error = function() { + self._responseError(type); + }; + + $.ajax(options); }, /** @@ -152,67 +154,67 @@ var Ajax = snippet.defineClass(/** @lends Ajax.prototype */{ * @private */ _responseSuccess: function(type, callback, response) { - var tree = this.tree; - var data; - - this._hideLoader(); - - if (this.parseData) { - response = this.parseData(type, response); - } - - if (response) { - data = callback(response); - - /** - * @event Tree#successAjaxResponse - * @type {object} evt - Event data - * @property {string} command - Command type - * @property {object} [data] - Return value of executed command callback - * @example - * tree.on('successAjaxResponse', function(evt) { - * console.log(evt.command + ' response is success!'); - * if (data) { - * console.log('data:' + evt.data); - * } - * }); - */ - tree.fire('successAjaxResponse', { - type: type, - data: data - }); - } else { - /** - * @event Tree#failAjaxResponse - * @type {object} evt - Event data - * @property {string} command - Command type - * @example - * tree.on('failAjaxResponse', function(evt) { - * console.log(evt.command + ' response is fail!'); - * }); - */ - tree.fire('failAjaxResponse', {type: type}); - } - }, + var tree = this.tree; + var data; - /** - * Processing when response is error - * @param {string} type - Command type - * @private - */ - _responseError: function(type) { - this._hideLoader(); + this._hideLoader(); + + if (this.parseData) { + response = this.parseData(type, response); + } + + if (response) { + data = callback(response); /** - * @event Tree#errorAjaxResponse + * @event Tree#successAjaxResponse * @type {object} evt - Event data * @property {string} command - Command type + * @property {object} [data] - Return value of executed command callback * @example - * tree.on('errorAjaxResponse', function(evt) { - * console.log(evt.command + ' response is error!'); + * tree.on('successAjaxResponse', function(evt) { + * console.log(evt.command + ' response is success!'); + * if (data) { + * console.log('data:' + evt.data); + * } * }); */ - this.tree.fire('errorAjaxResponse', {type: type}); + tree.fire('successAjaxResponse', { + type: type, + data: data + }); + } else { + /** + * @event Tree#failAjaxResponse + * @type {object} evt - Event data + * @property {string} command - Command type + * @example + * tree.on('failAjaxResponse', function(evt) { + * console.log(evt.command + ' response is fail!'); + * }); + */ + tree.fire('failAjaxResponse', {type: type}); + } + }, + + /** + * Processing when response is error + * @param {string} type - Command type + * @private + */ + _responseError: function(type) { + this._hideLoader(); + + /** + * @event Tree#errorAjaxResponse + * @type {object} evt - Event data + * @property {string} command - Command type + * @example + * tree.on('errorAjaxResponse', function(evt) { + * console.log(evt.command + ' response is error!'); + * }); + */ + this.tree.fire('errorAjaxResponse', {type: type}); }, /** @@ -223,20 +225,22 @@ var Ajax = snippet.defineClass(/** @lends Ajax.prototype */{ * @private */ _getDefaultRequestOptions: function(type, params) { - var options = this.command[type]; + var options = this.command[type]; - if (snippet.isFunction(options.url)) { // for restful API url - options.url = options.url(params); - } + if (snippet.isFunction(options.url)) { + // for restful API url + options.url = options.url(params); + } - if (snippet.isFunction(options.data)) { // for custom request data - options.data = options.data(params); - } + if (snippet.isFunction(options.data)) { + // for custom request data + options.data = options.data(params); + } - options.type = (options.type) ? options.type.toLowerCase() : 'get'; - options.dataType = options.dataType || 'json'; + options.type = options.type ? options.type.toLowerCase() : 'get'; + options.dataType = options.dataType || 'json'; - return options; + return options; }, /** @@ -244,15 +248,15 @@ var Ajax = snippet.defineClass(/** @lends Ajax.prototype */{ * @private */ _createLoader: function() { - var tree = this.tree; - var loader = document.createElement('span'); + var tree = this.tree; + var loader = document.createElement('span'); - loader.className = this.loaderClassName; - loader.style.display = 'none'; + loader.className = this.loaderClassName; + loader.style.display = 'none'; - tree.rootElement.parentNode.appendChild(loader); + tree.rootElement.parentNode.appendChild(loader); - this.loader = loader; + this.loader = loader; }, /** @@ -260,12 +264,12 @@ var Ajax = snippet.defineClass(/** @lends Ajax.prototype */{ * @private */ _removeLoader: function() { - var tree = this.tree; - var loader = this.loader; + var tree = this.tree; + var loader = this.loader; - tree.rootElement.parentNode.removeChild(loader); + tree.rootElement.parentNode.removeChild(loader); - this.loader = null; + this.loader = null; }, /** @@ -273,7 +277,7 @@ var Ajax = snippet.defineClass(/** @lends Ajax.prototype */{ * @private */ _showLoader: function() { - this.loader.style.display = 'block'; + this.loader.style.display = 'block'; }, /** @@ -281,8 +285,9 @@ var Ajax = snippet.defineClass(/** @lends Ajax.prototype */{ * @private */ _hideLoader: function() { - this.loader.style.display = 'none'; + this.loader.style.display = 'none'; } -}); + } +); module.exports = Ajax; diff --git a/src/js/features/checkbox.js b/src/js/features/checkbox.js index 693a470b..d20c5645 100644 --- a/src/js/features/checkbox.js +++ b/src/js/features/checkbox.js @@ -6,35 +6,35 @@ var util = require('../util.js'); var snippet = require('tui-code-snippet'); var API_LIST = [ - 'check', - 'uncheck', - 'toggleCheck', - 'isChecked', - 'isIndeterminate', - 'isUnchecked', - 'getCheckedList', - 'getTopCheckedList', - 'getBottomCheckedList' + 'check', + 'uncheck', + 'toggleCheck', + 'isChecked', + 'isIndeterminate', + 'isUnchecked', + 'getCheckedList', + 'getTopCheckedList', + 'getBottomCheckedList' ]; /* Checkbox tri-states */ var STATE_CHECKED = 1, - STATE_UNCHECKED = 2, - STATE_INDETERMINATE = 3, - DATA_KEY_FOR_CHECKBOX_STATE = '__CheckBoxState__', - DATA = {}, - CHECKED_CLASSNAME = 'tui-is-checked', - INDETERMINATE_CLASSNAME = 'tui-checkbox-root'; + STATE_UNCHECKED = 2, + STATE_INDETERMINATE = 3, + DATA_KEY_FOR_CHECKBOX_STATE = '__CheckBoxState__', + DATA = {}, + CHECKED_CLASSNAME = 'tui-is-checked', + INDETERMINATE_CLASSNAME = 'tui-checkbox-root'; /* Checkbox cascade-states */ var CASCADE_UP = 'up', - CASCADE_DOWN = 'down', - CASCADE_BOTH = 'both', - CASCADE_NONE = false; + CASCADE_DOWN = 'down', + CASCADE_BOTH = 'both', + CASCADE_NONE = false; var filter = snippet.filter, - forEach = snippet.forEach, - inArray = snippet.inArray; + forEach = snippet.forEach, + inArray = snippet.inArray; /** * Set the checkbox-api * @class Checkbox @@ -44,41 +44,42 @@ var filter = snippet.filter, * @param {string|boolean} [option.checkboxCascade='both'] - 'up', 'down', 'both', false * @ignore */ -var Checkbox = snippet.defineClass(/** @lends Checkbox.prototype */{ +var Checkbox = snippet.defineClass( + /** @lends Checkbox.prototype */ { static: { - /** - * @static - * @memberof Checkbox - * @returns {Array.} API list of checkbox - */ - getAPIList: function() { - return API_LIST.slice(); - } + /** + * @static + * @memberof Checkbox + * @returns {Array.} API list of checkbox + */ + getAPIList: function() { + return API_LIST.slice(); + } }, init: function(tree, option) { - option = snippet.extend({}, option); + option = snippet.extend({}, option); - this.tree = tree; - this.checkboxClassName = option.checkboxClassName; - this.checkboxCascade = this._initCascadeOption(option.checkboxCascade); - this.checkedList = []; - this.rootCheckbox = document.createElement('INPUT'); - this.rootCheckbox.type = 'checkbox'; + this.tree = tree; + this.checkboxClassName = option.checkboxClassName; + this.checkboxCascade = this._initCascadeOption(option.checkboxCascade); + this.checkedList = []; + this.rootCheckbox = document.createElement('INPUT'); + this.rootCheckbox.type = 'checkbox'; - this._setAPIs(); - this._attachEvents(); + this._setAPIs(); + this._attachEvents(); }, /** * Disable this module */ destroy: function() { - var tree = this.tree; + var tree = this.tree; - tree.off(this); - forEach(API_LIST, function(apiName) { - delete tree[apiName]; - }); + tree.off(this); + forEach(API_LIST, function(apiName) { + delete tree[apiName]; + }); }, /** @@ -87,12 +88,12 @@ var Checkbox = snippet.defineClass(/** @lends Checkbox.prototype */{ * @private */ _initCascadeOption: function(cascadeOption) { - var cascadeOptions = [CASCADE_UP, CASCADE_DOWN, CASCADE_BOTH, CASCADE_NONE]; - if (inArray(cascadeOption, cascadeOptions) === -1) { - cascadeOption = CASCADE_BOTH; - } + var cascadeOptions = [CASCADE_UP, CASCADE_DOWN, CASCADE_BOTH, CASCADE_NONE]; + if (inArray(cascadeOption, cascadeOptions) === -1) { + cascadeOption = CASCADE_BOTH; + } - return cascadeOption; + return cascadeOption; }, /** @@ -100,12 +101,16 @@ var Checkbox = snippet.defineClass(/** @lends Checkbox.prototype */{ * @private */ _setAPIs: function() { - var tree = this.tree, - bind = snippet.bind; - - forEach(API_LIST, function(apiName) { - tree[apiName] = bind(this[apiName], this); - }, this); + var tree = this.tree, + bind = snippet.bind; + + forEach( + API_LIST, + function(apiName) { + tree[apiName] = bind(this[apiName], this); + }, + this + ); }, /** @@ -113,26 +118,29 @@ var Checkbox = snippet.defineClass(/** @lends Checkbox.prototype */{ * @private */ _attachEvents: function() { - this.tree.on({ - singleClick: function(event) { - var target = util.getTarget(event); - - if (util.getElementsByClassName(target, this.checkboxClassName)) { - this._changeCustomCheckbox(target); - } - }, - afterDraw: function(ev) { - if (this.tree.isMovingNode) { - return; - } - this._reflectChanges(ev.nodeId); - }, - move: function(data) { - // @TODO - Optimization - this._reflectChanges(data.originalParentId); - this._reflectChanges(data.newParentId); + this.tree.on( + { + singleClick: function(event) { + var target = util.getTarget(event); + + if (util.getElementsByClassName(target, this.checkboxClassName)) { + this._changeCustomCheckbox(target); } - }, this); + }, + afterDraw: function(ev) { + if (this.tree.isMovingNode) { + return; + } + this._reflectChanges(ev.nodeId); + }, + move: function(data) { + // @TODO - Optimization + this._reflectChanges(data.originalParentId); + this._reflectChanges(data.newParentId); + } + }, + this + ); }, /** @@ -140,22 +148,22 @@ var Checkbox = snippet.defineClass(/** @lends Checkbox.prototype */{ * @param {HTMLElement} target - Label element */ _changeCustomCheckbox: function(target) { - var self = this; - var nodeId = this.tree.getNodeIdFromElement(target); - var inputElement = target.getElementsByTagName('input')[0]; - var eventType = util.getChangeEventName(); - var state; - - /** - * Change event handler - */ - function onChange() { - state = self._getStateFromCheckbox(inputElement); - util.removeEventListener(inputElement, eventType, onChange); - self._continuePostprocessing(nodeId, state); - } - - util.addEventListener(inputElement, eventType, onChange); + var self = this; + var nodeId = this.tree.getNodeIdFromElement(target); + var inputElement = target.getElementsByTagName('input')[0]; + var eventType = util.getChangeEventName(); + var state; + + /** + * Change event handler + */ + function onChange() { + state = self._getStateFromCheckbox(inputElement); + util.removeEventListener(inputElement, eventType, onChange); + self._continuePostprocessing(nodeId, state); + } + + util.addEventListener(inputElement, eventType, onChange); }, /** @@ -164,11 +172,15 @@ var Checkbox = snippet.defineClass(/** @lends Checkbox.prototype */{ * @private */ _reflectChanges: function(nodeId) { - this.tree.each(function(descendant, descendantId) { - this._setState(descendantId, this._getState(descendantId), true); - }, nodeId, this); - this._judgeOwnState(nodeId); - this._updateAllAncestorsState(nodeId); + this.tree.each( + function(descendant, descendantId) { + this._setState(descendantId, this._getState(descendantId), true); + }, + nodeId, + this + ); + this._judgeOwnState(nodeId); + this._updateAllAncestorsState(nodeId); }, /** @@ -179,8 +191,8 @@ var Checkbox = snippet.defineClass(/** @lends Checkbox.prototype */{ * @private */ _setCheckboxAttr: function(checkbox, isChecked, isIndeterminate) { - checkbox.indeterminate = isIndeterminate; - checkbox.checked = isChecked; + checkbox.indeterminate = isIndeterminate; + checkbox.checked = isChecked; }, /** @@ -191,27 +203,28 @@ var Checkbox = snippet.defineClass(/** @lends Checkbox.prototype */{ * @private */ _setState: function(nodeId, state, stopPropagation) { - var checkbox = this._getCheckboxElement(nodeId); - - if (!checkbox) { - return; - } - - switch (state) { - case STATE_CHECKED: - this._setCheckboxAttr(checkbox, true, false); - break; - case STATE_UNCHECKED: - this._setCheckboxAttr(checkbox, false, false); - break; - case STATE_INDETERMINATE: - this._setCheckboxAttr(checkbox, false, true); - break; - default: // no more process if the state is invalid - return; - } - - this._continuePostprocessing(nodeId, state, stopPropagation); + var checkbox = this._getCheckboxElement(nodeId); + + if (!checkbox) { + return; + } + + switch (state) { + case STATE_CHECKED: + this._setCheckboxAttr(checkbox, true, false); + break; + case STATE_UNCHECKED: + this._setCheckboxAttr(checkbox, false, false); + break; + case STATE_INDETERMINATE: + this._setCheckboxAttr(checkbox, false, true); + break; + default: + // no more process if the state is invalid + return; + } + + this._continuePostprocessing(nodeId, state, stopPropagation); }, /** @@ -221,16 +234,16 @@ var Checkbox = snippet.defineClass(/** @lends Checkbox.prototype */{ * @private */ _getState: function(nodeId) { - var tree = this.tree, - state = tree.getNodeData(nodeId)[DATA_KEY_FOR_CHECKBOX_STATE], - checkbox; + var tree = this.tree, + state = tree.getNodeData(nodeId)[DATA_KEY_FOR_CHECKBOX_STATE], + checkbox; - if (!state) { - checkbox = this._getCheckboxElement(nodeId); - state = this._getStateFromCheckbox(checkbox); - } + if (!state) { + checkbox = this._getCheckboxElement(nodeId); + state = this._getStateFromCheckbox(checkbox); + } - return state; + return state; }, /** @@ -240,21 +253,21 @@ var Checkbox = snippet.defineClass(/** @lends Checkbox.prototype */{ * @returns {?number} Checking state */ _getStateFromCheckbox: function(checkbox) { - var state; + var state; - if (!checkbox) { - return null; - } + if (!checkbox) { + return null; + } - if (checkbox.checked) { - state = STATE_CHECKED; - } else if (checkbox.indeterminate) { - state = STATE_INDETERMINATE; - } else { - state = STATE_UNCHECKED; - } + if (checkbox.checked) { + state = STATE_CHECKED; + } else if (checkbox.indeterminate) { + state = STATE_INDETERMINATE; + } else { + state = STATE_UNCHECKED; + } - return state; + return state; }, /** @@ -265,49 +278,49 @@ var Checkbox = snippet.defineClass(/** @lends Checkbox.prototype */{ * @private */ _continuePostprocessing: function(nodeId, state, stopPropagation) { - var tree = this.tree, - checkedList = this.checkedList, - eventName; - - /* Prevent duplicated node id */ - util.removeItemFromArray(nodeId, checkedList); - - if (state === STATE_CHECKED) { - checkedList.push(nodeId); - /** - * @event Tree#check - * @type {object} evt - Event data - * @property {string} nodeId - Checked node id - * @example - * tree.on('check', function(evt) { - * console.log('checked: ' + evt.nodeId); - * }); - */ - eventName = 'check'; - } else if (state === STATE_UNCHECKED) { - /** - * @event Tree#uncheck - * @type {object} evt - Event data - * @property {string} nodeId - Unchecked node id - * @example - * tree.on('uncheck', function(evt) { - * console.log('unchecked: ' + evt.nodeId); - * }); - */ - eventName = 'uncheck'; - } - DATA[DATA_KEY_FOR_CHECKBOX_STATE] = state; + var tree = this.tree, + checkedList = this.checkedList, + eventName; - tree.setNodeData(nodeId, DATA, { - isSilent: true - }); + /* Prevent duplicated node id */ + util.removeItemFromArray(nodeId, checkedList); - this._setClassName(nodeId, state); + if (state === STATE_CHECKED) { + checkedList.push(nodeId); + /** + * @event Tree#check + * @type {object} evt - Event data + * @property {string} nodeId - Checked node id + * @example + * tree.on('check', function(evt) { + * console.log('checked: ' + evt.nodeId); + * }); + */ + eventName = 'check'; + } else if (state === STATE_UNCHECKED) { + /** + * @event Tree#uncheck + * @type {object} evt - Event data + * @property {string} nodeId - Unchecked node id + * @example + * tree.on('uncheck', function(evt) { + * console.log('unchecked: ' + evt.nodeId); + * }); + */ + eventName = 'uncheck'; + } + DATA[DATA_KEY_FOR_CHECKBOX_STATE] = state; - if (!stopPropagation) { - this._propagateState(nodeId, state); - tree.fire(eventName, {nodeId: nodeId}); - } + tree.setNodeData(nodeId, DATA, { + isSilent: true + }); + + this._setClassName(nodeId, state); + + if (!stopPropagation) { + this._propagateState(nodeId, state); + tree.fire(eventName, {nodeId: nodeId}); + } }, /** @@ -316,22 +329,22 @@ var Checkbox = snippet.defineClass(/** @lends Checkbox.prototype */{ * @param {number} state - Checked state number */ _setClassName: function(nodeId, state) { - var parentElement = this._getCheckboxElement(nodeId).parentNode; - var labelElement; + var parentElement = this._getCheckboxElement(nodeId).parentNode; + var labelElement; - if (parentElement && parentElement.parentNode) { - labelElement = parentElement.parentNode; + if (parentElement && parentElement.parentNode) { + labelElement = parentElement.parentNode; - util.removeClass(labelElement, INDETERMINATE_CLASSNAME); - util.removeClass(labelElement, CHECKED_CLASSNAME); + util.removeClass(labelElement, INDETERMINATE_CLASSNAME); + util.removeClass(labelElement, CHECKED_CLASSNAME); - if (state === 1) { - util.addClass(labelElement, CHECKED_CLASSNAME); - } else if (state === 3) { - util.addClass(labelElement, INDETERMINATE_CLASSNAME); - util.addClass(labelElement, CHECKED_CLASSNAME); - } + if (state === 1) { + util.addClass(labelElement, CHECKED_CLASSNAME); + } else if (state === 3) { + util.addClass(labelElement, INDETERMINATE_CLASSNAME); + util.addClass(labelElement, CHECKED_CLASSNAME); } + } }, /** @@ -341,15 +354,15 @@ var Checkbox = snippet.defineClass(/** @lends Checkbox.prototype */{ * @private */ _propagateState: function(nodeId, state) { - if (state === STATE_INDETERMINATE) { - return; - } - if (inArray(this.checkboxCascade, [CASCADE_DOWN, CASCADE_BOTH]) > -1) { - this._updateAllDescendantsState(nodeId, state); - } - if (inArray(this.checkboxCascade, [CASCADE_UP, CASCADE_BOTH]) > -1) { - this._updateAllAncestorsState(nodeId); - } + if (state === STATE_INDETERMINATE) { + return; + } + if (inArray(this.checkboxCascade, [CASCADE_DOWN, CASCADE_BOTH]) > -1) { + this._updateAllDescendantsState(nodeId, state); + } + if (inArray(this.checkboxCascade, [CASCADE_UP, CASCADE_BOTH]) > -1) { + this._updateAllAncestorsState(nodeId); + } }, /** @@ -359,9 +372,13 @@ var Checkbox = snippet.defineClass(/** @lends Checkbox.prototype */{ * @private */ _updateAllDescendantsState: function(nodeId, state) { - this.tree.each(function(descendant, descendantId) { - this._setState(descendantId, state, true); - }, nodeId, this); + this.tree.each( + function(descendant, descendantId) { + this._setState(descendantId, state, true); + }, + nodeId, + this + ); }, /** @@ -370,13 +387,13 @@ var Checkbox = snippet.defineClass(/** @lends Checkbox.prototype */{ * @private */ _updateAllAncestorsState: function(nodeId) { - var tree = this.tree, - parentId = tree.getParentId(nodeId); + var tree = this.tree, + parentId = tree.getParentId(nodeId); - while (parentId) { - this._judgeOwnState(parentId); - parentId = tree.getParentId(parentId); - } + while (parentId) { + this._judgeOwnState(parentId); + parentId = tree.getParentId(parentId); + } }, /** @@ -385,30 +402,34 @@ var Checkbox = snippet.defineClass(/** @lends Checkbox.prototype */{ * @private */ _judgeOwnState: function(nodeId) { - var tree = this.tree, - childIds = tree.getChildIds(nodeId), - checked = true, - unchecked = true; - - if (!childIds.length) { - checked = this.isChecked(nodeId); - } else { - forEach(childIds, function(childId) { - var state = this._getState(childId); - checked = (checked && state === STATE_CHECKED); - unchecked = (unchecked && state === STATE_UNCHECKED); - - return checked || unchecked; - }, this); - } - - if (checked) { - this._setState(nodeId, STATE_CHECKED, true); - } else if (unchecked) { - this._setState(nodeId, STATE_UNCHECKED, true); - } else { - this._setState(nodeId, STATE_INDETERMINATE, true); - } + var tree = this.tree, + childIds = tree.getChildIds(nodeId), + checked = true, + unchecked = true; + + if (!childIds.length) { + checked = this.isChecked(nodeId); + } else { + forEach( + childIds, + function(childId) { + var state = this._getState(childId); + checked = checked && state === STATE_CHECKED; + unchecked = unchecked && state === STATE_UNCHECKED; + + return checked || unchecked; + }, + this + ); + } + + if (checked) { + this._setState(nodeId, STATE_CHECKED, true); + } else if (unchecked) { + this._setState(nodeId, STATE_UNCHECKED, true); + } else { + this._setState(nodeId, STATE_INDETERMINATE, true); + } }, /** @@ -418,23 +439,21 @@ var Checkbox = snippet.defineClass(/** @lends Checkbox.prototype */{ * @private */ _getCheckboxElement: function(nodeId) { - var tree = this.tree, - el, nodeEl; - - if (nodeId === tree.getRootNodeId()) { - el = this.rootCheckbox; - } else { - nodeEl = document.getElementById(nodeId); - if (!nodeEl) { - return null; - } - el = util.getElementsByClassName( - nodeEl, - this.checkboxClassName - )[0]; + var tree = this.tree, + el, + nodeEl; + + if (nodeId === tree.getRootNodeId()) { + el = this.rootCheckbox; + } else { + nodeEl = document.getElementById(nodeId); + if (!nodeEl) { + return null; } + el = util.getElementsByClassName(nodeEl, this.checkboxClassName)[0]; + } - return el; + return el; }, /** @@ -446,9 +465,9 @@ var Checkbox = snippet.defineClass(/** @lends Checkbox.prototype */{ * tree.check(nodeId); */ check: function(nodeId) { - if (!this.isChecked(nodeId)) { - this._setState(nodeId, STATE_CHECKED); - } + if (!this.isChecked(nodeId)) { + this._setState(nodeId, STATE_CHECKED); + } }, /** @@ -460,9 +479,9 @@ var Checkbox = snippet.defineClass(/** @lends Checkbox.prototype */{ * tree.uncheck(nodeId); */ uncheck: function(nodeId) { - if (!this.isUnchecked(nodeId)) { - this._setState(nodeId, STATE_UNCHECKED); - } + if (!this.isUnchecked(nodeId)) { + this._setState(nodeId, STATE_UNCHECKED); + } }, /** @@ -474,11 +493,11 @@ var Checkbox = snippet.defineClass(/** @lends Checkbox.prototype */{ * tree.toggleCheck(nodeId); */ toggleCheck: function(nodeId) { - if (!this.isChecked(nodeId)) { - this.check(nodeId); - } else { - this.uncheck(nodeId); - } + if (!this.isChecked(nodeId)) { + this.check(nodeId); + } else { + this.uncheck(nodeId); + } }, /** @@ -492,7 +511,7 @@ var Checkbox = snippet.defineClass(/** @lends Checkbox.prototype */{ * console.log(tree.isChecked(nodeId)); // true */ isChecked: function(nodeId) { - return STATE_CHECKED === this._getState(nodeId); + return STATE_CHECKED === this._getState(nodeId); }, /** @@ -506,7 +525,7 @@ var Checkbox = snippet.defineClass(/** @lends Checkbox.prototype */{ * console.log(tree.isIndeterminate(nodeId)); // false */ isIndeterminate: function(nodeId) { - return STATE_INDETERMINATE === this._getState(nodeId); + return STATE_INDETERMINATE === this._getState(nodeId); }, /** @@ -520,7 +539,7 @@ var Checkbox = snippet.defineClass(/** @lends Checkbox.prototype */{ * console.log(tree.isUnchecked(nodeId)); // true */ isUnchecked: function(nodeId) { - return STATE_UNCHECKED === this._getState(nodeId); + return STATE_UNCHECKED === this._getState(nodeId); }, /** @@ -544,16 +563,16 @@ var Checkbox = snippet.defineClass(/** @lends Checkbox.prototype */{ * var descendantsCheckedList = tree.getCheekedList('node6'); // ['node7', 'node8'] */ getCheckedList: function(parentId) { - var tree = this.tree, - checkedList = this.checkedList; + var tree = this.tree, + checkedList = this.checkedList; - if (!parentId) { - return checkedList.slice(); - } + if (!parentId) { + return checkedList.slice(); + } - return filter(checkedList, function(nodeId) { - return tree.contains(parentId, nodeId); - }); + return filter(checkedList, function(nodeId) { + return tree.contains(parentId, nodeId); + }); }, /** @@ -577,22 +596,26 @@ var Checkbox = snippet.defineClass(/** @lends Checkbox.prototype */{ * var descendantsTopCheckedList = tree.getTopCheekedList('node6'); // ['node7'] */ getTopCheckedList: function(parentId) { - var tree = this.tree, - checkedList = [], - state; - - parentId = parentId || tree.getRootNodeId(); - state = this._getState(parentId); - if (state === STATE_CHECKED) { - checkedList = tree.getChildIds(parentId); - } else if (state === STATE_INDETERMINATE) { - checkedList = this.getCheckedList(parentId); - checkedList = filter(checkedList, function(nodeId) { - return !this.isChecked(tree.getParentId(nodeId)); - }, this); - } - - return checkedList; + var tree = this.tree, + checkedList = [], + state; + + parentId = parentId || tree.getRootNodeId(); + state = this._getState(parentId); + if (state === STATE_CHECKED) { + checkedList = tree.getChildIds(parentId); + } else if (state === STATE_INDETERMINATE) { + checkedList = this.getCheckedList(parentId); + checkedList = filter( + checkedList, + function(nodeId) { + return !this.isChecked(tree.getParentId(nodeId)); + }, + this + ); + } + + return checkedList; }, /** @@ -616,17 +639,18 @@ var Checkbox = snippet.defineClass(/** @lends Checkbox.prototype */{ * var descendantsBottomCheckedList = tree.getBottomCheekedList('node6'); // ['node8'] */ getBottomCheckedList: function(parentId) { - var tree = this.tree, - checkedList; + var tree = this.tree, + checkedList; - parentId = parentId || tree.getRootNodeId(); - checkedList = this.getCheckedList(parentId); + parentId = parentId || tree.getRootNodeId(); + checkedList = this.getCheckedList(parentId); - return filter(checkedList, function(nodeId) { - return tree.isLeaf(nodeId); - }); + return filter(checkedList, function(nodeId) { + return tree.isLeaf(nodeId); + }); } -}); + } +); snippet.CustomEvents.mixin(Checkbox); module.exports = Checkbox; diff --git a/src/js/features/contextMenu.js b/src/js/features/contextMenu.js index 507a982e..9cc89c3f 100644 --- a/src/js/features/contextMenu.js +++ b/src/js/features/contextMenu.js @@ -5,9 +5,7 @@ var util = require('./../util'); var snippet = require('tui-code-snippet'); var TuiContextMenu = require('tui-context-menu'); -var API_LIST = [ - 'changeContextMenu' -]; +var API_LIST = ['changeContextMenu']; var styleKeys = ['userSelect', 'WebkitUserSelect', 'OUserSelect', 'MozUserSelect', 'msUserSelect']; var enableProp = util.testProp(styleKeys); var bind = snippet.bind; @@ -21,64 +19,65 @@ var bind = snippet.bind; * @param {boolean} options.usageStatistics - Whether to send the hostname to GA * @ignore */ -var ContextMenu = snippet.defineClass(/** @lends ContextMenu.prototype */{ +var ContextMenu = snippet.defineClass( + /** @lends ContextMenu.prototype */ { static: { - /** - * @static - * @memberof ContextMenu - * @returns {Array.} API list of ContextMenu - */ - getAPIList: function() { - return API_LIST.slice(); - } + /** + * @static + * @memberof ContextMenu + * @returns {Array.} API list of ContextMenu + */ + getAPIList: function() { + return API_LIST.slice(); + } }, init: function(tree, options) { - var containerId = tree.rootElement.parentNode.id; + var containerId = tree.rootElement.parentNode.id; - options = options || {}; + options = options || {}; - /** - * Tree data - * @type {Tree} - */ - this.tree = tree; + /** + * Tree data + * @type {Tree} + */ + this.tree = tree; - /** - * Tree selector for context menu - */ - this.treeSelector = '#' + containerId; + /** + * Tree selector for context menu + */ + this.treeSelector = '#' + containerId; - /** - * Id of floating layer in tree - * @type {string} - */ - this.flId = containerId + '-fl'; + /** + * Id of floating layer in tree + * @type {string} + */ + this.flId = containerId + '-fl'; - /** - * Info of context menu in tree - * @type {Object} - */ - this.menu = this._generateContextMenu(options.usageStatistics); + /** + * Info of context menu in tree + * @type {Object} + */ + this.menu = this._generateContextMenu(options.usageStatistics); - /** - * Floating layer element - * @type {HTMLElement} - */ - this.flElement = document.getElementById(this.flId); + /** + * Floating layer element + * @type {HTMLElement} + */ + this.flElement = document.getElementById(this.flId); - /** - * Id of selected tree item - * @type {string} - */ - this.selectedNodeId = null; + /** + * Id of selected tree item + * @type {string} + */ + this.selectedNodeId = null; - this.menu.register(this.treeSelector, bind(this._onSelect, this), options.menuData); + this.menu.register(this.treeSelector, bind(this._onSelect, this), options.menuData); - this.tree.on('contextmenu', this._onContextMenu, this); + this.tree.on('contextmenu', this._onContextMenu, this); - this._preventTextSelection(); + this._preventTextSelection(); - this._setAPIs(); + this._setAPIs(); }, /** @@ -97,26 +96,26 @@ var ContextMenu = snippet.defineClass(/** @lends ContextMenu.prototype */{ * ]); */ changeContextMenu: function(newMenuData) { - this.menu.unregister(this.treeSelector); - this.menu.register(this.treeSelector, bind(this._onSelect, this), newMenuData); + this.menu.unregister(this.treeSelector); + this.menu.register(this.treeSelector, bind(this._onSelect, this), newMenuData); }, /** * Disable ContextMenu feature */ destroy: function() { - var tree = this.tree; + var tree = this.tree; - this.menu.destroy(); + this.menu.destroy(); - this._restoreTextSelection(); - this._removeFloatingLayer(); + this._restoreTextSelection(); + this._removeFloatingLayer(); - tree.off(this); + tree.off(this); - snippet.forEach(API_LIST, function(apiName) { - delete tree[apiName]; - }); + snippet.forEach(API_LIST, function(apiName) { + delete tree[apiName]; + }); }, /** @@ -124,10 +123,10 @@ var ContextMenu = snippet.defineClass(/** @lends ContextMenu.prototype */{ * @private */ _createFloatingLayer: function() { - this.flElement = document.createElement('div'); - this.flElement.id = this.flId; + this.flElement = document.createElement('div'); + this.flElement.id = this.flId; - document.body.appendChild(this.flElement); + document.body.appendChild(this.flElement); }, /** @@ -135,8 +134,8 @@ var ContextMenu = snippet.defineClass(/** @lends ContextMenu.prototype */{ * @private */ _removeFloatingLayer: function() { - document.body.removeChild(this.flElement); - this.flElement = null; + document.body.removeChild(this.flElement); + this.flElement = null; }, /** @@ -146,13 +145,13 @@ var ContextMenu = snippet.defineClass(/** @lends ContextMenu.prototype */{ * @private */ _generateContextMenu: function(usageStatistics) { - if (!this.flElement) { - this._createFloatingLayer(); - } + if (!this.flElement) { + this._createFloatingLayer(); + } - return new TuiContextMenu(this.flElement, { - usageStatistics: usageStatistics - }); + return new TuiContextMenu(this.flElement, { + usageStatistics: usageStatistics + }); }, /** @@ -160,9 +159,9 @@ var ContextMenu = snippet.defineClass(/** @lends ContextMenu.prototype */{ * @private */ _preventTextSelection: function() { - if (enableProp) { - this.tree.rootElement.style[enableProp] = 'none'; - } + if (enableProp) { + this.tree.rootElement.style[enableProp] = 'none'; + } }, /** @@ -170,9 +169,9 @@ var ContextMenu = snippet.defineClass(/** @lends ContextMenu.prototype */{ * @private */ _restoreTextSelection: function() { - if (enableProp) { - this.tree.rootElement.style[enableProp] = ''; - } + if (enableProp) { + this.tree.rootElement.style[enableProp] = ''; + } }, /** @@ -181,22 +180,22 @@ var ContextMenu = snippet.defineClass(/** @lends ContextMenu.prototype */{ * @private */ _onContextMenu: function(e) { - var target = util.getTarget(e); - - this.selectedNodeId = this.tree.getNodeIdFromElement(target); - - /** - * @event Tree#beforeOpenContextMenu - * @type {object} evt - Event data - * @property {string} nodeId - Current selected node id - * @example - * tree.on('beforeOpenContextMenu', function(evt) { - * console.log('nodeId: ' + evt.nodeId); - * }); - */ - this.tree.fire('beforeOpenContextMenu', { - nodeId: this.selectedNodeId - }); + var target = util.getTarget(e); + + this.selectedNodeId = this.tree.getNodeIdFromElement(target); + + /** + * @event Tree#beforeOpenContextMenu + * @type {object} evt - Event data + * @property {string} nodeId - Current selected node id + * @example + * tree.on('beforeOpenContextMenu', function(evt) { + * console.log('nodeId: ' + evt.nodeId); + * }); + */ + this.tree.fire('beforeOpenContextMenu', { + nodeId: this.selectedNodeId + }); }, /** @@ -206,23 +205,23 @@ var ContextMenu = snippet.defineClass(/** @lends ContextMenu.prototype */{ * @private */ _onSelect: function(e, cmd) { - /** - * @event Tree#selectContextMenu - * @type {object} evt - Event data - * @property {string} cmd - Command type - * @property {string} nodeId - Node id - * @example - * tree.on('selectContextMenu', function(evt) { - * var cmd = treeEvent.cmd; // key of context menu's data - * var nodeId = treeEvent.nodeId; - * - * console.log(evt.cmd, evt.nodeId); - * }); - */ - this.tree.fire('selectContextMenu', { - cmd: cmd, - nodeId: this.selectedNodeId - }); + /** + * @event Tree#selectContextMenu + * @type {object} evt - Event data + * @property {string} cmd - Command type + * @property {string} nodeId - Node id + * @example + * tree.on('selectContextMenu', function(evt) { + * var cmd = treeEvent.cmd; // key of context menu's data + * var nodeId = treeEvent.nodeId; + * + * console.log(evt.cmd, evt.nodeId); + * }); + */ + this.tree.fire('selectContextMenu', { + cmd: cmd, + nodeId: this.selectedNodeId + }); }, /** @@ -230,12 +229,17 @@ var ContextMenu = snippet.defineClass(/** @lends ContextMenu.prototype */{ * @private */ _setAPIs: function() { - var tree = this.tree; - - snippet.forEach(API_LIST, function(apiName) { - tree[apiName] = bind(this[apiName], this); - }, this); + var tree = this.tree; + + snippet.forEach( + API_LIST, + function(apiName) { + tree[apiName] = bind(this[apiName], this); + }, + this + ); } -}); + } +); module.exports = ContextMenu; diff --git a/src/js/features/draggable.js b/src/js/features/draggable.js index 6a824cab..cd18be6d 100644 --- a/src/js/features/draggable.js +++ b/src/js/features/draggable.js @@ -6,30 +6,30 @@ var util = require('./../util'); var snippet = require('tui-code-snippet'); var defaultOptions = { - useHelper: true, - helperPos: { - y: 2, - x: 5 - }, - helperClassName: 'tui-tree-drop', - dragItemClassName: 'tui-tree-drag', - hoverClassName: 'tui-tree-hover', - lineClassName: 'tui-tree-line', - lineBoundary: { - top: 4, - bottom: 4 - }, - autoOpenDelay: 1500, - isSortable: false + useHelper: true, + helperPos: { + y: 2, + x: 5 + }, + helperClassName: 'tui-tree-drop', + dragItemClassName: 'tui-tree-drag', + hoverClassName: 'tui-tree-hover', + lineClassName: 'tui-tree-line', + lineBoundary: { + top: 4, + bottom: 4 + }, + autoOpenDelay: 1500, + isSortable: false }; -var rejectedTagNames = [ - 'INPUT', - 'BUTTON', - 'UL' -]; -var selectKey = util.testProp( - ['userSelect', 'WebkitUserSelect', 'OUserSelect', 'MozUserSelect', 'msUserSelect'] -); +var rejectedTagNames = ['INPUT', 'BUTTON', 'UL']; +var selectKey = util.testProp([ + 'userSelect', + 'WebkitUserSelect', + 'OUserSelect', + 'MozUserSelect', + 'msUserSelect' +]); var inArray = snippet.inArray; var forEach = snippet.forEach; var API_LIST = []; @@ -52,147 +52,148 @@ var API_LIST = []; * @param {{top: number, bottom: number}} options.lineBoundary - Boundary value for visible moving line * @ignore */ -var Draggable = snippet.defineClass(/** @lends Draggable.prototype */{ +var Draggable = snippet.defineClass( + /** @lends Draggable.prototype */ { static: { - /** - * @static - * @memberof Draggable - * @returns {Array.} API list of Draggable - */ - getAPIList: function() { - return API_LIST.slice(); - } + /** + * @static + * @memberof Draggable + * @returns {Array.} API list of Draggable + */ + getAPIList: function() { + return API_LIST.slice(); + } }, init: function(tree, options) { - options = snippet.extend({}, defaultOptions, options); - - /** - * Tree data - * @type {Tree} - */ - this.tree = tree; - - /** - * Drag helper element - * @type {HTMLElement} - */ - this.helperElement = null; - - /** - * Selectable element's property - * @type {string} - */ - this.userSelectPropertyKey = null; - - /** - * Selectable element's property value - * @type {string} - */ - this.userSelectPropertyValue = null; - - /** - * Dragging element's node id - * @type {string} - */ - this.currentNodeId = null; - - /** - * Current mouse overed element - * @type {HTMLElement} - */ - this.hoveredElement = null; - - /** - * Moving line type ("top" or "bottom") - * @type {string} - */ - this.movingLineType = null; - - /** - * Invoking time for setTimeout() - * @type {number} - */ - this.timer = null; - - /** - * Tag list for rejecting to drag - * @param {Array.} - */ - this.rejectedTagNames = rejectedTagNames.concat(options.rejectedTagNames); - - /** - * Class name list for rejecting to drag - * @param {Array.} - */ - this.rejectedClassNames = [].concat(options.rejectedClassNames); - - /** - * Using helper flag - * @type {boolean} - */ - this.useHelper = options.useHelper; - - /** - * Helper position - * @type {Object} - */ - this.helperPos = options.helperPos; - - /** - * Delay time while dragging to be opened - * @type {number} - */ - this.autoOpenDelay = options.autoOpenDelay; - - /** - * Flag of whether using sortable dragging - * @type {boolean} - */ - this.isSortable = options.isSortable; - - /** - * Class name for mouse overed node - * @type {string} - */ - this.hoverClassName = options.hoverClassName; - - /** - * Class name for moving position line - * @type {string} - */ - this.lineClassName = options.lineClassName; - - /** - * Boundary value for visible moving line - * @type {Object} - */ - this.lineBoundary = options.lineBoundary; - - /** - * Helper's outer element class name - * @type {string} - */ - this.helperClassName = options.helperClassName; - - this._initHelper(); - - if (this.isSortable) { - this._initMovingLine(); - } - - this._attachMousedown(); + options = snippet.extend({}, defaultOptions, options); + + /** + * Tree data + * @type {Tree} + */ + this.tree = tree; + + /** + * Drag helper element + * @type {HTMLElement} + */ + this.helperElement = null; + + /** + * Selectable element's property + * @type {string} + */ + this.userSelectPropertyKey = null; + + /** + * Selectable element's property value + * @type {string} + */ + this.userSelectPropertyValue = null; + + /** + * Dragging element's node id + * @type {string} + */ + this.currentNodeId = null; + + /** + * Current mouse overed element + * @type {HTMLElement} + */ + this.hoveredElement = null; + + /** + * Moving line type ("top" or "bottom") + * @type {string} + */ + this.movingLineType = null; + + /** + * Invoking time for setTimeout() + * @type {number} + */ + this.timer = null; + + /** + * Tag list for rejecting to drag + * @param {Array.} + */ + this.rejectedTagNames = rejectedTagNames.concat(options.rejectedTagNames); + + /** + * Class name list for rejecting to drag + * @param {Array.} + */ + this.rejectedClassNames = [].concat(options.rejectedClassNames); + + /** + * Using helper flag + * @type {boolean} + */ + this.useHelper = options.useHelper; + + /** + * Helper position + * @type {Object} + */ + this.helperPos = options.helperPos; + + /** + * Delay time while dragging to be opened + * @type {number} + */ + this.autoOpenDelay = options.autoOpenDelay; + + /** + * Flag of whether using sortable dragging + * @type {boolean} + */ + this.isSortable = options.isSortable; + + /** + * Class name for mouse overed node + * @type {string} + */ + this.hoverClassName = options.hoverClassName; + + /** + * Class name for moving position line + * @type {string} + */ + this.lineClassName = options.lineClassName; + + /** + * Boundary value for visible moving line + * @type {Object} + */ + this.lineBoundary = options.lineBoundary; + + /** + * Helper's outer element class name + * @type {string} + */ + this.helperClassName = options.helperClassName; + + this._initHelper(); + + if (this.isSortable) { + this._initMovingLine(); + } + + this._attachMousedown(); }, /** * Disable this module (remove attached elements and unbind event) */ destroy: function() { - util.removeElement(this.helperElement); - util.removeElement(this.lineElement); + util.removeElement(this.helperElement); + util.removeElement(this.lineElement); - this._restoreTextSelection(); - this._detachMousedown(); + this._restoreTextSelection(); + this._detachMousedown(); }, /** @@ -201,12 +202,12 @@ var Draggable = snippet.defineClass(/** @lends Draggable.prototype */{ * @private */ _changeHelperPosition: function(mousePos) { - var helperStyle = this.helperElement.style; - var pos = this.tree.rootElement.getBoundingClientRect(); + var helperStyle = this.helperElement.style; + var pos = this.tree.rootElement.getBoundingClientRect(); - helperStyle.top = (mousePos.y - pos.top + this.helperPos.y) + 'px'; - helperStyle.left = (mousePos.x - pos.left + this.helperPos.x) + 'px'; - helperStyle.display = ''; + helperStyle.top = mousePos.y - pos.top + this.helperPos.y + 'px'; + helperStyle.left = mousePos.x - pos.left + this.helperPos.x + 'px'; + helperStyle.display = ''; }, /** @@ -214,17 +215,17 @@ var Draggable = snippet.defineClass(/** @lends Draggable.prototype */{ * @private */ _initHelper: function() { - var helperElement = document.createElement('span'); - var helperStyle = helperElement.style; + var helperElement = document.createElement('span'); + var helperStyle = helperElement.style; - helperStyle.position = 'absolute'; - helperStyle.display = 'none'; + helperStyle.position = 'absolute'; + helperStyle.display = 'none'; - util.addClass(helperElement, this.helperClassName); + util.addClass(helperElement, this.helperClassName); - this.tree.rootElement.parentNode.appendChild(helperElement); + this.tree.rootElement.parentNode.appendChild(helperElement); - this.helperElement = helperElement; + this.helperElement = helperElement; }, /** @@ -232,17 +233,17 @@ var Draggable = snippet.defineClass(/** @lends Draggable.prototype */{ * @private */ _initMovingLine: function() { - var lineElement = document.createElement('div'); - var lineStyle = lineElement.style; + var lineElement = document.createElement('div'); + var lineStyle = lineElement.style; - lineStyle.position = 'absolute'; - lineStyle.display = 'none'; + lineStyle.position = 'absolute'; + lineStyle.display = 'none'; - util.addClass(lineElement, this.lineClassName); + util.addClass(lineElement, this.lineClassName); - this.tree.rootElement.parentNode.appendChild(lineElement); + this.tree.rootElement.parentNode.appendChild(lineElement); - this.lineElement = lineElement; + this.lineElement = lineElement; }, /** @@ -251,8 +252,8 @@ var Draggable = snippet.defineClass(/** @lends Draggable.prototype */{ * @private */ _setHelper: function(contents) { - this.helperElement.innerHTML = contents; - util.removeElement(this.helperElement.getElementsByTagName('label')[0]); + this.helperElement.innerHTML = contents; + util.removeElement(this.helperElement.getElementsByTagName('label')[0]); }, /** @@ -260,8 +261,8 @@ var Draggable = snippet.defineClass(/** @lends Draggable.prototype */{ * @private */ _attachMousedown: function() { - this._preventTextSelection(); - this.tree.on('mousedown', this._onMousedown, this); + this._preventTextSelection(); + this.tree.on('mousedown', this._onMousedown, this); }, /** @@ -269,7 +270,7 @@ var Draggable = snippet.defineClass(/** @lends Draggable.prototype */{ * @private */ _detachMousedown: function() { - this.tree.off(this); + this.tree.off(this); }, /** @@ -277,14 +278,14 @@ var Draggable = snippet.defineClass(/** @lends Draggable.prototype */{ * @private */ _preventTextSelection: function() { - var style = this.tree.rootElement.style; + var style = this.tree.rootElement.style; - util.addEventListener(this.tree.rootElement, 'selectstart', util.preventDefault); + util.addEventListener(this.tree.rootElement, 'selectstart', util.preventDefault); - this.userSelectPropertyKey = selectKey; - this.userSelectPropertyValue = style[selectKey]; + this.userSelectPropertyKey = selectKey; + this.userSelectPropertyValue = style[selectKey]; - style[selectKey] = 'none'; + style[selectKey] = 'none'; }, /** @@ -292,11 +293,11 @@ var Draggable = snippet.defineClass(/** @lends Draggable.prototype */{ * @private */ _restoreTextSelection: function() { - util.removeEventListener(this.tree.rootElement, 'selectstart', util.preventDefault); + util.removeEventListener(this.tree.rootElement, 'selectstart', util.preventDefault); - if (this.userSelectPropertyKey) { - this.tree.rootElement.style[this.userSelectPropertyKey] = this.userSelectPropertyValue; - } + if (this.userSelectPropertyKey) { + this.tree.rootElement.style[this.userSelectPropertyKey] = this.userSelectPropertyValue; + } }, /** @@ -306,21 +307,25 @@ var Draggable = snippet.defineClass(/** @lends Draggable.prototype */{ * @private */ _isNotDraggable: function(target) { - var tagName = target.tagName.toUpperCase(); - var classNames = util.getClass(target).split(/\s+/); - var result; + var tagName = target.tagName.toUpperCase(); + var classNames = util.getClass(target).split(/\s+/); + var result; - if (inArray(tagName, this.rejectedTagNames) !== -1) { - return true; - } + if (inArray(tagName, this.rejectedTagNames) !== -1) { + return true; + } - forEach(classNames, function(className) { - result = inArray(className, this.rejectedClassNames) !== -1; + forEach( + classNames, + function(className) { + result = inArray(className, this.rejectedClassNames) !== -1; - return !result; - }, this); + return !result; + }, + this + ); - return result; + return result; }, /** @@ -329,31 +334,34 @@ var Draggable = snippet.defineClass(/** @lends Draggable.prototype */{ * @private */ _onMousedown: function(event) { - var tree = this.tree; - var target = util.getTarget(event); - var isEditing = (tree.enabledFeatures.Editable && tree.enabledFeatures.Editable.inputElement); - var nodeElement; - - if (util.isRightButton(event) || this._isNotDraggable(target) || isEditing) { - return; - } - - util.preventDefault(event); - - this.currentNodeId = tree.getNodeIdFromElement(target); - - if (this.useHelper) { - nodeElement = util.getElementsByClassName( - document.getElementById(this.currentNodeId), - tree.classNames.textClass - )[0]; - this._setHelper(nodeElement.innerHTML); - } - - tree.on({ - mousemove: this._onMousemove, - mouseup: this._onMouseup - }, this); + var tree = this.tree; + var target = util.getTarget(event); + var isEditing = tree.enabledFeatures.Editable && tree.enabledFeatures.Editable.inputElement; + var nodeElement; + + if (util.isRightButton(event) || this._isNotDraggable(target) || isEditing) { + return; + } + + util.preventDefault(event); + + this.currentNodeId = tree.getNodeIdFromElement(target); + + if (this.useHelper) { + nodeElement = util.getElementsByClassName( + document.getElementById(this.currentNodeId), + tree.classNames.textClass + )[0]; + this._setHelper(nodeElement.innerHTML); + } + + tree.on( + { + mousemove: this._onMousemove, + mouseup: this._onMouseup + }, + this + ); }, /** @@ -362,22 +370,22 @@ var Draggable = snippet.defineClass(/** @lends Draggable.prototype */{ * @private */ _onMousemove: function(event) { - var mousePos = util.getMousePos(event); - var target = util.getTarget(event); - var nodeId; + var mousePos = util.getMousePos(event); + var target = util.getTarget(event); + var nodeId; - if (!this.useHelper) { - return; - } + if (!this.useHelper) { + return; + } - this._setClassNameOnDragItem('add'); - this._changeHelperPosition(mousePos); + this._setClassNameOnDragItem('add'); + this._changeHelperPosition(mousePos); - nodeId = this.tree.getNodeIdFromElement(target); + nodeId = this.tree.getNodeIdFromElement(target); - if (nodeId) { - this._applyMoveAction(nodeId, mousePos); - } + if (nodeId) { + this._applyMoveAction(nodeId, mousePos); + } }, /** @@ -386,24 +394,26 @@ var Draggable = snippet.defineClass(/** @lends Draggable.prototype */{ * @private */ _onMouseup: function(event) { - var tree = this.tree; - var nodeId = this.currentNodeId; - var target = util.getTarget(event); - var targetId = this._getTargetNodeId(target); - var index = this._getIndexToInsert(targetId); - var newParentId; - - if (index === -1) { // When the node is created as a child after moving - newParentId = targetId; - } else { - newParentId = tree.getParentId(targetId); - } - - if (nodeId !== newParentId) { // Don't fire beforeMove event - tree.move(nodeId, newParentId, index); - } - - this._reset(); + var tree = this.tree; + var nodeId = this.currentNodeId; + var target = util.getTarget(event); + var targetId = this._getTargetNodeId(target); + var index = this._getIndexToInsert(targetId); + var newParentId; + + if (index === -1) { + // When the node is created as a child after moving + newParentId = targetId; + } else { + newParentId = tree.getParentId(targetId); + } + + if (nodeId !== newParentId) { + // Don't fire beforeMove event + tree.move(nodeId, newParentId, index); + } + + this._reset(); }, /** @@ -413,24 +423,24 @@ var Draggable = snippet.defineClass(/** @lends Draggable.prototype */{ * @private */ _getTargetNodeId: function(target) { - var tree = this.tree; - var movingType = this.movingLineType; - var nodeId = tree.getNodeIdFromElement(target); - var childIds; + var tree = this.tree; + var movingType = this.movingLineType; + var nodeId = tree.getNodeIdFromElement(target); + var childIds; - if (nodeId) { - return nodeId; - } + if (nodeId) { + return nodeId; + } - childIds = tree.getChildIds(tree.getRootNodeId()); + childIds = tree.getChildIds(tree.getRootNodeId()); - if (movingType === 'top') { - nodeId = childIds[0]; - } else { - nodeId = childIds[childIds.length - 1]; - } + if (movingType === 'top') { + nodeId = childIds[0]; + } else { + nodeId = childIds[childIds.length - 1]; + } - return nodeId; + return nodeId; }, /** @@ -440,20 +450,20 @@ var Draggable = snippet.defineClass(/** @lends Draggable.prototype */{ * @private */ _getIndexToInsert: function(nodeId) { - var movingType = this.movingLineType; - var index; + var movingType = this.movingLineType; + var index; - if (!movingType) { - return -1; - } + if (!movingType) { + return -1; + } - index = this.tree.getNodeIndex(nodeId); + index = this.tree.getNodeIndex(nodeId); - if (movingType === 'bottom') { - index += 1; - } + if (movingType === 'bottom') { + index += 1; + } - return index; + return index; }, /** @@ -463,25 +473,25 @@ var Draggable = snippet.defineClass(/** @lends Draggable.prototype */{ * @private */ _applyMoveAction: function(nodeId, mousePos) { - var currentElement = document.getElementById(nodeId); - var targetPos = currentElement.getBoundingClientRect(); - var hasClass = util.hasClass(currentElement, this.hoverClassName); - var isContain = this._isContain(targetPos, mousePos); - var boundaryType; - - if (!this.hoveredElement && isContain) { - this.hoveredElement = currentElement; - this._hover(nodeId); - } else if (!hasClass) { - this._unhover(); - } else if (!isContain) { - this._unhover(); - } - - if (this.isSortable) { - boundaryType = this._getBoundaryType(targetPos, mousePos); - this._drawBoundaryLine(targetPos, boundaryType); - } + var currentElement = document.getElementById(nodeId); + var targetPos = currentElement.getBoundingClientRect(); + var hasClass = util.hasClass(currentElement, this.hoverClassName); + var isContain = this._isContain(targetPos, mousePos); + var boundaryType; + + if (!this.hoveredElement && isContain) { + this.hoveredElement = currentElement; + this._hover(nodeId); + } else if (!hasClass) { + this._unhover(); + } else if (!isContain) { + this._unhover(); + } + + if (this.isSortable) { + boundaryType = this._getBoundaryType(targetPos, mousePos); + this._drawBoundaryLine(targetPos, boundaryType); + } }, /** @@ -490,17 +500,17 @@ var Draggable = snippet.defineClass(/** @lends Draggable.prototype */{ * @private */ _hover: function(nodeId) { - var tree = this.tree; + var tree = this.tree; - util.addClass(this.hoveredElement, this.hoverClassName); + util.addClass(this.hoveredElement, this.hoverClassName); - if (tree.isLeaf(nodeId)) { - return; - } + if (tree.isLeaf(nodeId)) { + return; + } - this.timer = setTimeout(function() { - tree.open(nodeId); - }, this.autoOpenDelay); + this.timer = setTimeout(function() { + tree.open(nodeId); + }, this.autoOpenDelay); }, /** @@ -508,12 +518,12 @@ var Draggable = snippet.defineClass(/** @lends Draggable.prototype */{ * @private */ _unhover: function() { - clearTimeout(this.timer); + clearTimeout(this.timer); - util.removeClass(this.hoveredElement, this.hoverClassName); + util.removeClass(this.hoveredElement, this.hoverClassName); - this.hoveredElement = null; - this.timer = null; + this.hoveredElement = null; + this.timer = null; }, /** @@ -524,21 +534,24 @@ var Draggable = snippet.defineClass(/** @lends Draggable.prototype */{ * @private */ _isContain: function(targetPos, mousePos) { - var top = targetPos.top; - var bottom = targetPos.bottom; - - if (this.isSortable) { - top += this.lineBoundary.top; - bottom -= this.lineBoundary.bottom; - } - - if (targetPos.left < mousePos.x && - targetPos.right > mousePos.x && - top < mousePos.y && bottom > mousePos.y) { - return true; - } - - return false; + var top = targetPos.top; + var bottom = targetPos.bottom; + + if (this.isSortable) { + top += this.lineBoundary.top; + bottom -= this.lineBoundary.bottom; + } + + if ( + targetPos.left < mousePos.x && + targetPos.right > mousePos.x && + top < mousePos.y && + bottom > mousePos.y + ) { + return true; + } + + return false; }, /** @@ -549,15 +562,15 @@ var Draggable = snippet.defineClass(/** @lends Draggable.prototype */{ * @private */ _getBoundaryType: function(targetPos, mousePos) { - var type; + var type; - if (mousePos.y < targetPos.top + this.lineBoundary.top) { - type = 'top'; - } else if (mousePos.y > targetPos.bottom - this.lineBoundary.bottom) { - type = 'bottom'; - } + if (mousePos.y < targetPos.top + this.lineBoundary.top) { + type = 'top'; + } else if (mousePos.y > targetPos.bottom - this.lineBoundary.bottom) { + type = 'bottom'; + } - return type; + return type; }, /** @@ -567,18 +580,18 @@ var Draggable = snippet.defineClass(/** @lends Draggable.prototype */{ * @private */ _drawBoundaryLine: function(targetPos, boundaryType) { - var style = this.lineElement.style; - var scrollTop; - - if (boundaryType) { - scrollTop = util.getElementTop(this.tree.rootElement.parentNode); - style.top = targetPos[boundaryType] - scrollTop + 'px'; - style.display = 'block'; - this.movingLineType = boundaryType; - } else { - style.display = 'none'; - this.movingLineType = null; - } + var style = this.lineElement.style; + var scrollTop; + + if (boundaryType) { + scrollTop = util.getElementTop(this.tree.rootElement.parentNode); + style.top = targetPos[boundaryType] - scrollTop + 'px'; + style.display = 'block'; + this.movingLineType = boundaryType; + } else { + style.display = 'none'; + this.movingLineType = null; + } }, /** @@ -586,24 +599,24 @@ var Draggable = snippet.defineClass(/** @lends Draggable.prototype */{ * @private */ _reset: function() { - if (this.isSortable) { - this.lineElement.style.display = 'none'; - } + if (this.isSortable) { + this.lineElement.style.display = 'none'; + } - if (this.hoveredElement) { - util.removeClass(this.hoveredElement, this.hoverClassName); - this.hoveredElement = null; - } + if (this.hoveredElement) { + util.removeClass(this.hoveredElement, this.hoverClassName); + this.hoveredElement = null; + } - this._setClassNameOnDragItem('remove'); + this._setClassNameOnDragItem('remove'); - this.helperElement.style.display = 'none'; + this.helperElement.style.display = 'none'; - this.currentNodeId = null; - this.movingLineType = null; + this.currentNodeId = null; + this.movingLineType = null; - this.tree.off(this, 'mousemove'); - this.tree.off(this, 'mouseup'); + this.tree.off(this, 'mousemove'); + this.tree.off(this, 'mouseup'); }, /** @@ -611,15 +624,16 @@ var Draggable = snippet.defineClass(/** @lends Draggable.prototype */{ * @param {string} type - Set type ('add' or 'remove') */ _setClassNameOnDragItem: function(type) { - var dragItemElement = document.getElementById(this.currentNodeId); - var dragItemClassName = defaultOptions.dragItemClassName; - - if (type === 'add') { - util.addClass(dragItemElement, dragItemClassName); - } else { - util.removeClass(dragItemElement, dragItemClassName); - } + var dragItemElement = document.getElementById(this.currentNodeId); + var dragItemClassName = defaultOptions.dragItemClassName; + + if (type === 'add') { + util.addClass(dragItemElement, dragItemClassName); + } else { + util.removeClass(dragItemElement, dragItemClassName); + } } -}); + } +); module.exports = Draggable; diff --git a/src/js/features/editable.js b/src/js/features/editable.js index 22f984d3..d78a3cb0 100644 --- a/src/js/features/editable.js +++ b/src/js/features/editable.js @@ -7,14 +7,10 @@ var ajaxCommand = require('./../consts/ajaxCommand'); var states = require('./../consts/states'); var snippet = require('tui-code-snippet'); -var API_LIST = [ - 'createChildNode', - 'editNode', - 'finishEditing' -]; +var API_LIST = ['createChildNode', 'editNode', 'finishEditing']; var EDIT_TYPE = { - CREATE: 'create', - UPDATE: 'update' + CREATE: 'create', + UPDATE: 'update' }; var WRAPPER_CLASSNAME = 'tui-input-wrap'; var INPUT_CLASSNAME = 'tui-tree-input'; @@ -30,90 +26,91 @@ var INPUT_CLASSNAME = 'tui-tree-input'; * @param {string} [options.inputClassName] - Classname of input element * @ignore */ -var Editable = snippet.defineClass(/** @lends Editable.prototype */{ +var Editable = snippet.defineClass( + /** @lends Editable.prototype */ { static: { - /** - * @static - * @memberof Selectable - * @returns {Array.} API list of Editable - */ - getAPIList: function() { - return API_LIST.slice(); - } + /** + * @static + * @memberof Selectable + * @returns {Array.} API list of Editable + */ + getAPIList: function() { + return API_LIST.slice(); + } }, init: function(tree, options) { - options = snippet.extend({}, options); - - /** - * Tree - * @type {Tree} - */ - this.tree = tree; - - /** - * Classname of editable element - * @type {string} - */ - this.editableClassName = options.editableClassName || tree.classNames.textClass; - - /** - * Key of node data to set value - * @type {string} - */ - this.dataKey = options.dataKey; - - /** - * Default value for creating node - * @type {string} - */ - this.defaultValue = options.defaultValue || ''; - - /** - * Input element for create or edit - * @type {HTMLElement} - */ - this.inputElement = null; - - /** - * Action mode - create or edit - * @type {string} - */ - this.mode = null; - - /** - * For block blur when unintentional blur event occur when alert popup - * @type {Boolean} - */ - this._blockBlur = false; - - /** - * Keyup event handler - * @type {Function} - */ - this.boundOnKeyup = snippet.bind(this._onKeyup, this); - - /** - * Blur event handler - * @type {Function} - */ - this.boundOnBlur = snippet.bind(this._onBlur, this); - - tree.on('doubleClick', this._onDoubleClick, this); - - this._setAPIs(); + options = snippet.extend({}, options); + + /** + * Tree + * @type {Tree} + */ + this.tree = tree; + + /** + * Classname of editable element + * @type {string} + */ + this.editableClassName = options.editableClassName || tree.classNames.textClass; + + /** + * Key of node data to set value + * @type {string} + */ + this.dataKey = options.dataKey; + + /** + * Default value for creating node + * @type {string} + */ + this.defaultValue = options.defaultValue || ''; + + /** + * Input element for create or edit + * @type {HTMLElement} + */ + this.inputElement = null; + + /** + * Action mode - create or edit + * @type {string} + */ + this.mode = null; + + /** + * For block blur when unintentional blur event occur when alert popup + * @type {Boolean} + */ + this._blockBlur = false; + + /** + * Keyup event handler + * @type {Function} + */ + this.boundOnKeyup = snippet.bind(this._onKeyup, this); + + /** + * Blur event handler + * @type {Function} + */ + this.boundOnBlur = snippet.bind(this._onBlur, this); + + tree.on('doubleClick', this._onDoubleClick, this); + + this._setAPIs(); }, /** * Disable this module */ destroy: function() { - var tree = this.tree; + var tree = this.tree; - this._detachInputElement(); - tree.off(this); - snippet.forEach(API_LIST, function(apiName) { - delete tree[apiName]; - }); + this._detachInputElement(); + tree.off(this); + snippet.forEach(API_LIST, function(apiName) { + delete tree[apiName]; + }); }, /** @@ -125,23 +122,22 @@ var Editable = snippet.defineClass(/** @lends Editable.prototype */{ * tree.createChildNode('tui-tree-node-1'); */ createChildNode: function(parentId) { - var tree = this.tree; - var useAjax = tree.enabledFeatures.Ajax; - var nodeId; + var tree = this.tree; + var useAjax = tree.enabledFeatures.Ajax; + var nodeId; - this.mode = EDIT_TYPE.CREATE; + this.mode = EDIT_TYPE.CREATE; - if (useAjax) { - tree.on('successAjaxResponse', this._onSuccessResponse, this); - } + if (useAjax) { + tree.on('successAjaxResponse', this._onSuccessResponse, this); + } - if (!tree.isLeaf(parentId) && - tree.getState(parentId) === states.node.CLOSED) { - tree.open(parentId); - } else { - nodeId = tree._add({}, parentId)[0]; - this._attachInputElement(nodeId); - } + if (!tree.isLeaf(parentId) && tree.getState(parentId) === states.node.CLOSED) { + tree.open(parentId); + } else { + nodeId = tree._add({}, parentId)[0]; + this._attachInputElement(nodeId); + } }, /** @@ -153,8 +149,8 @@ var Editable = snippet.defineClass(/** @lends Editable.prototype */{ * tree.editNode('tui-tree-node-1'); */ editNode: function(nodeId) { - this.mode = EDIT_TYPE.UPDATE; - this._attachInputElement(nodeId); + this.mode = EDIT_TYPE.UPDATE; + this._attachInputElement(nodeId); }, /** @@ -165,9 +161,9 @@ var Editable = snippet.defineClass(/** @lends Editable.prototype */{ * tree.finishEditing(); */ finishEditing: function() { - if (this.inputElement) { - this._detachInputElement(); - } + if (this.inputElement) { + this._detachInputElement(); + } }, /** @@ -177,14 +173,14 @@ var Editable = snippet.defineClass(/** @lends Editable.prototype */{ * @private */ _onSuccessResponse: function(type, nodeIds) { - var tree = this.tree; - var parentId, nodeId; + var tree = this.tree; + var parentId, nodeId; - if (type === ajaxCommand.READ && nodeIds) { - parentId = tree.getParentId(nodeIds[0]); - nodeId = tree._add({}, parentId)[0]; - this._attachInputElement(nodeId); - } + if (type === ajaxCommand.READ && nodeIds) { + parentId = tree.getParentId(nodeIds[0]); + nodeId = tree._add({}, parentId)[0]; + this._attachInputElement(nodeId); + } }, /** @@ -193,13 +189,13 @@ var Editable = snippet.defineClass(/** @lends Editable.prototype */{ * @private */ _onDoubleClick: function(event) { - var target = util.getTarget(event); - var nodeId; + var target = util.getTarget(event); + var nodeId; - if (util.hasClass(target, this.editableClassName)) { - nodeId = this.tree.getNodeIdFromElement(target); - this.editNode(nodeId); - } + if (util.hasClass(target, this.editableClassName)) { + nodeId = this.tree.getNodeIdFromElement(target); + this.editNode(nodeId); + } }, /** @@ -207,9 +203,9 @@ var Editable = snippet.defineClass(/** @lends Editable.prototype */{ * @private */ _keepEdit: function() { - if (this.inputElement) { - this.inputElement.focus(); - } + if (this.inputElement) { + this.inputElement.focus(); + } }, /** @@ -219,24 +215,24 @@ var Editable = snippet.defineClass(/** @lends Editable.prototype */{ * @private */ _invokeBeforeCreateChildNode: function(event) { - /** - * @event Tree#beforeCreateChildNode - * @type {object} evt - Event data - * @property {string} value - Return value of creating input element - * @property {string} nodeId - Return id of creating node - * @property {string} cause - Return 'blur' or 'enter' according cause of the event - * @example - * tree - * .enableFeature('Editable') - * .on('beforeCreateChildNode', function(evt) { - * console.log(evt.value); - * console.log(evt.nodeId); - * console.log(evt.cause); - * return false; // It cancels - * // return true; // It execute next - * }); - */ - return this.tree.invoke('beforeCreateChildNode', event); + /** + * @event Tree#beforeCreateChildNode + * @type {object} evt - Event data + * @property {string} value - Return value of creating input element + * @property {string} nodeId - Return id of creating node + * @property {string} cause - Return 'blur' or 'enter' according cause of the event + * @example + * tree + * .enableFeature('Editable') + * .on('beforeCreateChildNode', function(evt) { + * console.log(evt.value); + * console.log(evt.nodeId); + * console.log(evt.cause); + * return false; // It cancels + * // return true; // It execute next + * }); + */ + return this.tree.invoke('beforeCreateChildNode', event); }, /** @@ -246,24 +242,24 @@ var Editable = snippet.defineClass(/** @lends Editable.prototype */{ * @private */ _invokeBeforeEditNode: function(event) { - /** - * @event Tree#beforeEditNode - * @type {object} evt - Event data - * @property {string} value - Return value of creating input element - * @property {string} nodeId - Return id of editing node - * @property {string} cause - Return 'blur' or 'enter' according cause of the event - * @example - * tree - * .enableFeature('Editable') - * .on('beforeEditNode', function(evt) { - * console.log(evt.value); - * console.log(evt.nodeId); - * console.log(evt.cause); - * return false; // It cancels - * // return true; // It execute next - * }); - */ - return this.tree.invoke('beforeEditNode', event); + /** + * @event Tree#beforeEditNode + * @type {object} evt - Event data + * @property {string} value - Return value of creating input element + * @property {string} nodeId - Return id of editing node + * @property {string} cause - Return 'blur' or 'enter' according cause of the event + * @example + * tree + * .enableFeature('Editable') + * .on('beforeEditNode', function(evt) { + * console.log(evt.value); + * console.log(evt.nodeId); + * console.log(evt.cause); + * return false; // It cancels + * // return true; // It execute next + * }); + */ + return this.tree.invoke('beforeEditNode', event); }, /** @@ -273,33 +269,33 @@ var Editable = snippet.defineClass(/** @lends Editable.prototype */{ * @private */ _submitInputResult: function(cause) { - var tree = this.tree; - var nodeId = tree.getNodeIdFromElement(this.inputElement); - var value = this.inputElement.value; - var event = { - value: value, - nodeId: nodeId, - cause: cause - }; - - if (this.mode === EDIT_TYPE.CREATE) { - if (!this._invokeBeforeCreateChildNode(event)) { - this._keepEdit(); - - return false; - } - this._addData(nodeId, value); - } else { - if (!this._invokeBeforeEditNode(event)) { - this._keepEdit(); - - return false; - } - this._setData(nodeId, value); + var tree = this.tree; + var nodeId = tree.getNodeIdFromElement(this.inputElement); + var value = this.inputElement.value; + var event = { + value: value, + nodeId: nodeId, + cause: cause + }; + + if (this.mode === EDIT_TYPE.CREATE) { + if (!this._invokeBeforeCreateChildNode(event)) { + this._keepEdit(); + + return false; } - this._detachInputElement(); + this._addData(nodeId, value); + } else { + if (!this._invokeBeforeEditNode(event)) { + this._keepEdit(); - return true; + return false; + } + this._setData(nodeId, value); + } + this._detachInputElement(); + + return true; }, /** @@ -308,10 +304,10 @@ var Editable = snippet.defineClass(/** @lends Editable.prototype */{ * @private */ _onKeyup: function(event) { - if (util.getKeyCode(event) === 13) { - this._blockBlur = true; - this._submitInputResult('enter'); - } + if (util.getKeyCode(event) === 13) { + this._blockBlur = true; + this._submitInputResult('enter'); + } }, /** @@ -319,11 +315,11 @@ var Editable = snippet.defineClass(/** @lends Editable.prototype */{ * @private */ _onBlur: function() { - if (this._blockBlur) { - this._blockBlur = false; - } else { - this._blockBlur = !this._submitInputResult('blur'); - } + if (this._blockBlur) { + this._blockBlur = false; + } else { + this._blockBlur = !this._submitInputResult('blur'); + } }, /** @@ -332,11 +328,11 @@ var Editable = snippet.defineClass(/** @lends Editable.prototype */{ * @private */ _createInputElement: function() { - var element = document.createElement('INPUT'); - element.setAttribute('type', 'text'); - util.addClass(element, INPUT_CLASSNAME); + var element = document.createElement('INPUT'); + element.setAttribute('type', 'text'); + util.addClass(element, INPUT_CLASSNAME); - return element; + return element; }, /** @@ -345,40 +341,40 @@ var Editable = snippet.defineClass(/** @lends Editable.prototype */{ * @private */ _attachInputElement: function(nodeId) { - var tree = this.tree; - var target = document.getElementById(nodeId); - var wrapperElement = document.createElement('DIV'); - var inputElement = this._createInputElement(); + var tree = this.tree; + var target = document.getElementById(nodeId); + var wrapperElement = document.createElement('DIV'); + var inputElement = this._createInputElement(); - if (!target) { - return; - } + if (!target) { + return; + } - wrapperElement = util.getChildElementByClassName(target, WRAPPER_CLASSNAME); + wrapperElement = util.getChildElementByClassName(target, WRAPPER_CLASSNAME); - if (!wrapperElement) { - wrapperElement = document.createElement('DIV'); - inputElement = this._createInputElement(); + if (!wrapperElement) { + wrapperElement = document.createElement('DIV'); + inputElement = this._createInputElement(); - util.addClass(wrapperElement, WRAPPER_CLASSNAME); - wrapperElement.style.paddingLeft = tree.getIndentWidth(nodeId) + 'px'; + util.addClass(wrapperElement, WRAPPER_CLASSNAME); + wrapperElement.style.paddingLeft = tree.getIndentWidth(nodeId) + 'px'; - inputElement.value = tree.getNodeData(nodeId)[this.dataKey] || ''; + inputElement.value = tree.getNodeData(nodeId)[this.dataKey] || ''; - wrapperElement.appendChild(inputElement); - target.appendChild(wrapperElement); + wrapperElement.appendChild(inputElement); + target.appendChild(wrapperElement); - util.addEventListener(inputElement, 'keyup', this.boundOnKeyup); - util.addEventListener(inputElement, 'blur', this.boundOnBlur); + util.addEventListener(inputElement, 'keyup', this.boundOnKeyup); + util.addEventListener(inputElement, 'blur', this.boundOnBlur); - if (this.inputElement) { - this.inputElement.blur(); - } - this.inputElement = inputElement; + if (this.inputElement) { + this.inputElement.blur(); } + this.inputElement = inputElement; + } - this._blockBlur = false; - this.inputElement.focus(); + this._blockBlur = false; + this.inputElement.focus(); }, /** @@ -386,20 +382,20 @@ var Editable = snippet.defineClass(/** @lends Editable.prototype */{ * @private */ _detachInputElement: function() { - var tree = this.tree; - var inputElement = this.inputElement; - var wrapperElement = this.inputElement.parentNode; + var tree = this.tree; + var inputElement = this.inputElement; + var wrapperElement = this.inputElement.parentNode; - util.removeEventListener(inputElement, 'keyup', this.boundOnKeyup); - util.removeEventListener(inputElement, 'blur', this.boundOnBlur); + util.removeEventListener(inputElement, 'keyup', this.boundOnKeyup); + util.removeEventListener(inputElement, 'blur', this.boundOnBlur); - util.removeElement(wrapperElement); + util.removeElement(wrapperElement); - if (tree.enabledFeatures.Ajax) { - tree.off(this, 'successAjaxResponse'); - } + if (tree.enabledFeatures.Ajax) { + tree.off(this, 'successAjaxResponse'); + } - this.inputElement = null; + this.inputElement = null; }, /** @@ -409,15 +405,15 @@ var Editable = snippet.defineClass(/** @lends Editable.prototype */{ * @private */ _addData: function(nodeId, value) { - var tree = this.tree; - var parentId = tree.getParentId(nodeId); - var data = {}; - - if (nodeId) { - data[this.dataKey] = value || this.defaultValue; - tree._remove(nodeId); - tree.add(data, parentId); - } + var tree = this.tree; + var parentId = tree.getParentId(nodeId); + var data = {}; + + if (nodeId) { + data[this.dataKey] = value || this.defaultValue; + tree._remove(nodeId); + tree.add(data, parentId); + } }, /** @@ -427,13 +423,13 @@ var Editable = snippet.defineClass(/** @lends Editable.prototype */{ * @private */ _setData: function(nodeId, value) { - var tree = this.tree; - var data = {}; + var tree = this.tree; + var data = {}; - if (nodeId) { - data[this.dataKey] = value; - tree.setNodeData(nodeId, data); - } + if (nodeId) { + data[this.dataKey] = value; + tree.setNodeData(nodeId, data); + } }, /** @@ -441,13 +437,18 @@ var Editable = snippet.defineClass(/** @lends Editable.prototype */{ * @private */ _setAPIs: function() { - var tree = this.tree; - var bind = snippet.bind; - - snippet.forEach(API_LIST, function(apiName) { - tree[apiName] = bind(this[apiName], this); - }, this); + var tree = this.tree; + var bind = snippet.bind; + + snippet.forEach( + API_LIST, + function(apiName) { + tree[apiName] = bind(this[apiName], this); + }, + this + ); } -}); + } +); module.exports = Editable; diff --git a/src/js/features/selectable.js b/src/js/features/selectable.js index b6fee7e6..809d6163 100644 --- a/src/js/features/selectable.js +++ b/src/js/features/selectable.js @@ -5,14 +5,10 @@ var util = require('./../util'); var snippet = require('tui-code-snippet'); -var API_LIST = [ - 'select', - 'getSelectedNodeId', - 'deselect' - ], - defaults = { - selectedClassName: 'tui-tree-selected' - }; +var API_LIST = ['select', 'getSelectedNodeId', 'deselect'], + defaults = { + selectedClassName: 'tui-tree-selected' + }; /** * Set the tree selectable @@ -22,29 +18,33 @@ var API_LIST = [ * @param {string} options.selectedClassName - Classname for selected node. * @ignore */ -var Selectable = snippet.defineClass(/** @lends Selectable.prototype */{ +var Selectable = snippet.defineClass( + /** @lends Selectable.prototype */ { static: { - /** - * @static - * @memberof Selectable - * @returns {Array.} API list of Selectable - */ - getAPIList: function() { - return API_LIST.slice(); - } + /** + * @static + * @memberof Selectable + * @returns {Array.} API list of Selectable + */ + getAPIList: function() { + return API_LIST.slice(); + } }, init: function(tree, options) { - options = snippet.extend({}, defaults, options); - - this.tree = tree; - this.selectedClassName = options.selectedClassName; - this.selectedNodeId = null; - - tree.on({ - singleClick: this.onSingleClick, - afterDraw: this.onAfterDraw - }, this); - this._setAPIs(); + options = snippet.extend({}, defaults, options); + + this.tree = tree; + this.selectedClassName = options.selectedClassName; + this.selectedNodeId = null; + + tree.on( + { + singleClick: this.onSingleClick, + afterDraw: this.onAfterDraw + }, + this + ); + this._setAPIs(); }, /** @@ -52,26 +52,30 @@ var Selectable = snippet.defineClass(/** @lends Selectable.prototype */{ * @private */ _setAPIs: function() { - var tree = this.tree, - bind = snippet.bind; - - snippet.forEach(API_LIST, function(apiName) { - tree[apiName] = bind(this[apiName], this); - }, this); + var tree = this.tree, + bind = snippet.bind; + + snippet.forEach( + API_LIST, + function(apiName) { + tree[apiName] = bind(this[apiName], this); + }, + this + ); }, /** * Disable this module */ destroy: function() { - var tree = this.tree, - nodeElement = this.getPrevElement(); - - util.removeClass(nodeElement, this.selectedClassName); - tree.off(this); - snippet.forEach(API_LIST, function(apiName) { - delete tree[apiName]; - }); + var tree = this.tree, + nodeElement = this.getPrevElement(); + + util.removeClass(nodeElement, this.selectedClassName); + tree.off(this); + snippet.forEach(API_LIST, function(apiName) { + delete tree[apiName]; + }); }, /** @@ -79,10 +83,10 @@ var Selectable = snippet.defineClass(/** @lends Selectable.prototype */{ * @param {MouseEvent} event - Mouse event */ onSingleClick: function(event) { - var target = util.getTarget(event), - nodeId = this.tree.getNodeIdFromElement(target); + var target = util.getTarget(event), + nodeId = this.tree.getNodeIdFromElement(target); - this.select(nodeId, target); + this.select(nodeId, target); }, /* eslint-disable valid-jsdoc */ @@ -98,22 +102,49 @@ var Selectable = snippet.defineClass(/** @lends Selectable.prototype */{ * @example * tree.select('tui-tree-node-3'); */ - select: function(nodeId, target) {/* eslint-enable valid-jsdoc */ - var tree, prevElement, nodeElement, - selectedClassName, prevNodeId; - - if (!nodeId) { - return; - } - - tree = this.tree; - prevElement = this.getPrevElement(); - nodeElement = document.getElementById(nodeId); - selectedClassName = this.selectedClassName; - prevNodeId = this.selectedNodeId; + select: function(nodeId, target) { + /* eslint-enable valid-jsdoc */ + var tree, prevElement, nodeElement, selectedClassName, prevNodeId; + + if (!nodeId) { + return; + } + + tree = this.tree; + prevElement = this.getPrevElement(); + nodeElement = document.getElementById(nodeId); + selectedClassName = this.selectedClassName; + prevNodeId = this.selectedNodeId; + + /** + * @event Tree#beforeSelect + * @type {object} evt - Event data + * @property {string} nodeId - Selected node id + * @property {string} prevNodeId - Previous selected node id + * @property {HTMLElement|undefined} target - Target element + * @example + * tree + * .enableFeature('Selectable') + * .on('beforeSelect', function(evt) { + * console.log('selected node: ' + evt.nodeId); + * console.log('previous selected node: ' + evt.prevNodeId); + * console.log('target element: ' + evt.target); + * return false; // It cancels "select" + * // return true; // It fires "select" + * }); + */ + if ( + tree.invoke('beforeSelect', { + nodeId: nodeId, + prevNodeId: prevNodeId, + target: target + }) + ) { + util.removeClass(prevElement, selectedClassName); + util.addClass(nodeElement, selectedClassName); /** - * @event Tree#beforeSelect + * @event Tree#select * @type {object} evt - Event data * @property {string} nodeId - Selected node id * @property {string} prevNodeId - Previous selected node id @@ -121,44 +152,19 @@ var Selectable = snippet.defineClass(/** @lends Selectable.prototype */{ * @example * tree * .enableFeature('Selectable') - * .on('beforeSelect', function(evt) { + * .on('select', function(evt) { * console.log('selected node: ' + evt.nodeId); * console.log('previous selected node: ' + evt.prevNodeId); * console.log('target element: ' + evt.target); - * return false; // It cancels "select" - * // return true; // It fires "select" * }); */ - if (tree.invoke('beforeSelect', { - nodeId: nodeId, - prevNodeId: prevNodeId, - target: target - })) { - util.removeClass(prevElement, selectedClassName); - util.addClass(nodeElement, selectedClassName); - - /** - * @event Tree#select - * @type {object} evt - Event data - * @property {string} nodeId - Selected node id - * @property {string} prevNodeId - Previous selected node id - * @property {HTMLElement|undefined} target - Target element - * @example - * tree - * .enableFeature('Selectable') - * .on('select', function(evt) { - * console.log('selected node: ' + evt.nodeId); - * console.log('previous selected node: ' + evt.prevNodeId); - * console.log('target element: ' + evt.target); - * }); - */ - tree.fire('select', { - nodeId: nodeId, - prevNodeId: prevNodeId, - target: target - }); - this.selectedNodeId = nodeId; - } + tree.fire('select', { + nodeId: nodeId, + prevNodeId: prevNodeId, + target: target + }); + this.selectedNodeId = nodeId; + } }, /** @@ -166,7 +172,7 @@ var Selectable = snippet.defineClass(/** @lends Selectable.prototype */{ * @returns {HTMLElement} Node element */ getPrevElement: function() { - return document.getElementById(this.selectedNodeId); + return document.getElementById(this.selectedNodeId); }, /** @@ -175,7 +181,7 @@ var Selectable = snippet.defineClass(/** @lends Selectable.prototype */{ * @returns {string} selected node id */ getSelectedNodeId: function() { - return this.selectedNodeId; + return this.selectedNodeId; }, /** @@ -187,41 +193,42 @@ var Selectable = snippet.defineClass(/** @lends Selectable.prototype */{ * tree.deselect('tui-tree-node-3'); */ deselect: function() { - var nodeId = this.selectedNodeId; - var nodeElement = document.getElementById(nodeId); - var tree = this.tree; - - if (!nodeElement) { - return; - } - - util.removeClass(nodeElement, this.selectedClassName); - this.selectedNodeId = null; - - /** - * @event Tree#deselect - * @type {object} evt - Event data - * @property {string} nodeId - Deselected node id - * @example - * tree - * .enableFeature('Selectable') - * .on('deselect', function(evt) { - * console.log('deselected node: ' + evt.nodeId); - * }); - */ - tree.fire('deselect', {nodeId: nodeId}); + var nodeId = this.selectedNodeId; + var nodeElement = document.getElementById(nodeId); + var tree = this.tree; + + if (!nodeElement) { + return; + } + + util.removeClass(nodeElement, this.selectedClassName); + this.selectedNodeId = null; + + /** + * @event Tree#deselect + * @type {object} evt - Event data + * @property {string} nodeId - Deselected node id + * @example + * tree + * .enableFeature('Selectable') + * .on('deselect', function(evt) { + * console.log('deselected node: ' + evt.nodeId); + * }); + */ + tree.fire('deselect', {nodeId: nodeId}); }, /** * Custom event handler - "afterDraw" */ onAfterDraw: function() { - var nodeElement = this.getPrevElement(); + var nodeElement = this.getPrevElement(); - if (nodeElement) { - util.addClass(nodeElement, this.selectedClassName); - } + if (nodeElement) { + util.addClass(nodeElement, this.selectedClassName); + } } -}); + } +); module.exports = Selectable; diff --git a/src/js/tree.js b/src/js/tree.js index 2b3b5343..a4820d1e 100644 --- a/src/js/tree.js +++ b/src/js/tree.js @@ -19,12 +19,12 @@ var Ajax = require('./features/ajax'); var nodeStates = states.node; var features = { - Selectable: Selectable, - Draggable: Draggable, - Editable: Editable, - Checkbox: Checkbox, - ContextMenu: ContextMenu, - Ajax: Ajax + Selectable: Selectable, + Draggable: Draggable, + Editable: Editable, + Checkbox: Checkbox, + ContextMenu: ContextMenu, + Ajax: Ajax }; var snippet = require('tui-code-snippet'); var extend = snippet.extend; @@ -156,109 +156,110 @@ var MOUSE_MOVING_THRESHOLD = 5; * } * }); */ -var Tree = snippet.defineClass(/** @lends Tree.prototype */ { +var Tree = snippet.defineClass( + /** @lends Tree.prototype */ { init: function(container, options) { - options = extend({}, defaultOption, options); - - /** - * Default class names - * @type {object.} - */ - this.classNames = extend({}, defaultOption.classNames, options.classNames); - - /** - * Default template - * @type {{internalNode: string, leafNode: string}} - */ - this.template = extend({}, defaultOption.template, options.template); - - /** - * Root element - * @type {HTMLElement} - */ - this.rootElement = null; - - /** - * Toggle button state label - * @type {{opened: string, closed: string}} - */ - this.stateLabels = options.stateLabels; - - /** - * Make tree model - * @type {TreeModel} - * @private - */ - this.model = new TreeModel(options); - - /** - * Enabled features - * @type {Object.} - * @private - */ - this.enabledFeatures = {}; - - /** - * Click timer to prevent click-duplication with double click - * @type {number} - * @private - */ - this.clickTimer = null; - - /** - * To prevent click event if mouse moved before mouseup. - * @type {number} - * @private - */ - this._mouseMovingFlag = false; - - /** - * Render template - * It can be overrode by user's template engine. - * @type {Function} - * @private - */ - this._renderTemplate = options.renderTemplate || util.renderTemplate; - - /** - * Send the hostname to google analytics. - * If you do not want to send the hostname, this option set to false. - * @type {boolean} - * @private - */ - this.usageStatistics = options.usageStatistics; - - /** - * True when a node is moving - * @type {boolean} - * @example - * tree.on({ - * beforeDraw: function(nodeId) { - * if (tree.isMovingNode) { - * return; - * } - * //.. - * }, - * //.... - * }); - * tree.move('tui-tree-node-1', 'tui-tree-node-2'); - */ - this.isMovingNode = false; - - /** - * Indentation value - * @type {number} - * @private - */ - this._indent = options.indent; - - this._setRoot(container); - this._draw(this.getRootNodeId()); - this._setEvents(); - - if (this.usageStatistics) { - util.sendHostName(); - } + options = extend({}, defaultOption, options); + + /** + * Default class names + * @type {object.} + */ + this.classNames = extend({}, defaultOption.classNames, options.classNames); + + /** + * Default template + * @type {{internalNode: string, leafNode: string}} + */ + this.template = extend({}, defaultOption.template, options.template); + + /** + * Root element + * @type {HTMLElement} + */ + this.rootElement = null; + + /** + * Toggle button state label + * @type {{opened: string, closed: string}} + */ + this.stateLabels = options.stateLabels; + + /** + * Make tree model + * @type {TreeModel} + * @private + */ + this.model = new TreeModel(options); + + /** + * Enabled features + * @type {Object.} + * @private + */ + this.enabledFeatures = {}; + + /** + * Click timer to prevent click-duplication with double click + * @type {number} + * @private + */ + this.clickTimer = null; + + /** + * To prevent click event if mouse moved before mouseup. + * @type {number} + * @private + */ + this._mouseMovingFlag = false; + + /** + * Render template + * It can be overrode by user's template engine. + * @type {Function} + * @private + */ + this._renderTemplate = options.renderTemplate || util.renderTemplate; + + /** + * Send the hostname to google analytics. + * If you do not want to send the hostname, this option set to false. + * @type {boolean} + * @private + */ + this.usageStatistics = options.usageStatistics; + + /** + * True when a node is moving + * @type {boolean} + * @example + * tree.on({ + * beforeDraw: function(nodeId) { + * if (tree.isMovingNode) { + * return; + * } + * //.. + * }, + * //.... + * }); + * tree.move('tui-tree-node-1', 'tui-tree-node-2'); + */ + this.isMovingNode = false; + + /** + * Indentation value + * @type {number} + * @private + */ + this._indent = options.indent; + + this._setRoot(container); + this._draw(this.getRootNodeId()); + this._setEvents(); + + if (this.usageStatistics) { + util.sendHostName(); + } }, /** @@ -267,20 +268,20 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @private */ _setRoot: function(container) { - var rootElement = outerTemplate.ROOT; + var rootElement = outerTemplate.ROOT; - if (snippet.isString(container)) { - container = document.getElementById(container); - } else if (container.jquery) { - container = container[0]; - } + if (snippet.isString(container)) { + container = document.getElementById(container); + } else if (container.jquery) { + container = container[0]; + } - if (!snippet.isHTMLNode(container)) { - throw new Error(messages.INVALID_CONTAINER_ELEMENT); - } + if (!snippet.isHTMLNode(container)) { + throw new Error(messages.INVALID_CONTAINER_ELEMENT); + } - container.innerHTML = rootElement; - this.rootElement = container.firstChild; + container.innerHTML = rootElement; + this.rootElement = container.firstChild; }, /** @@ -292,32 +293,32 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @private */ _onMove: function(nodeId, originalParentId, newParentId, index) { - this._draw(originalParentId); - this._draw(newParentId); - - /** - * @event Tree#move - * @type {object} evt - Event data - * @property {string} nodeId - Current node id to move - * @property {string} originalParentId - Original parent node id of moved node - * @property {string} newParentId - New parent node id of moved node - * @property {number} index - Moved index number - * @example - * tree.on('move', function(evt) { - * var nodeId = evt.nodeId; - * var originalParentId = evt.originalParentId; - * var newParentId = evt.newParentId; - * var index = evt.index; - * - * console.log(nodeId, originalParentId, newParentId, index); - * }); - */ - this.fire('move', { - nodeId: nodeId, - originalParentId: originalParentId, - newParentId: newParentId, - index: index - }); + this._draw(originalParentId); + this._draw(newParentId); + + /** + * @event Tree#move + * @type {object} evt - Event data + * @property {string} nodeId - Current node id to move + * @property {string} originalParentId - Original parent node id of moved node + * @property {string} newParentId - New parent node id of moved node + * @property {number} index - Moved index number + * @example + * tree.on('move', function(evt) { + * var nodeId = evt.nodeId; + * var originalParentId = evt.originalParentId; + * var newParentId = evt.newParentId; + * var index = evt.index; + * + * console.log(nodeId, originalParentId, newParentId, index); + * }); + */ + this.fire('move', { + nodeId: nodeId, + originalParentId: originalParentId, + newParentId: newParentId, + index: index + }); }, /** @@ -325,14 +326,21 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @private */ _setEvents: function() { - this.model.on({ - update: this._draw, - move: this._onMove - }, this); - util.addEventListener(this.rootElement, 'click', snippet.bind(this._onClick, this)); - util.addEventListener(this.rootElement, 'mousedown', snippet.bind(this._onMousedown, this)); - util.addEventListener(this.rootElement, 'dblclick', snippet.bind(this._onDoubleClick, this)); - util.addEventListener(this.rootElement, 'contextmenu', snippet.bind(this._onContextMenu, this)); + this.model.on( + { + update: this._draw, + move: this._onMove + }, + this + ); + util.addEventListener(this.rootElement, 'click', snippet.bind(this._onClick, this)); + util.addEventListener(this.rootElement, 'mousedown', snippet.bind(this._onMousedown, this)); + util.addEventListener(this.rootElement, 'dblclick', snippet.bind(this._onDoubleClick, this)); + util.addEventListener( + this.rootElement, + 'contextmenu', + snippet.bind(this._onContextMenu, this) + ); }, /** @@ -341,7 +349,7 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @private */ _onContextMenu: function(mouseEvent) { - this.fire('contextmenu', mouseEvent); + this.fire('contextmenu', mouseEvent); }, /** @@ -350,41 +358,41 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @private */ _onMousedown: function(downEvent) { - var self = this, - clientX = downEvent.clientX, - clientY = downEvent.clientY, - abs = Math.abs; - - /* eslint-disable require-jsdoc */ - function onMouseMove(moveEvent) { - var newClientX = moveEvent.clientX, - newClientY = moveEvent.clientY; - - if (abs(newClientX - clientX) + abs(newClientY - clientY) > MOUSE_MOVING_THRESHOLD) { - self.fire('mousemove', moveEvent); - self._mouseMovingFlag = true; - } + var self = this, + clientX = downEvent.clientX, + clientY = downEvent.clientY, + abs = Math.abs; + + /* eslint-disable require-jsdoc */ + function onMouseMove(moveEvent) { + var newClientX = moveEvent.clientX, + newClientY = moveEvent.clientY; + + if (abs(newClientX - clientX) + abs(newClientY - clientY) > MOUSE_MOVING_THRESHOLD) { + self.fire('mousemove', moveEvent); + self._mouseMovingFlag = true; } - - function onMouseUp(upEvent) { - self.fire('mouseup', upEvent); - util.removeEventListener(document, 'mousemove', onMouseMove); - util.removeEventListener(document, 'mouseup', onMouseUp); - util.removeEventListener(document, 'mouseout', onMouseOut); - } - - function onMouseOut(event) { - if (event.toElement === null) { - self.fire('mouseup', event); - } + } + + function onMouseUp(upEvent) { + self.fire('mouseup', upEvent); + util.removeEventListener(document, 'mousemove', onMouseMove); + util.removeEventListener(document, 'mouseup', onMouseUp); + util.removeEventListener(document, 'mouseout', onMouseOut); + } + + function onMouseOut(event) { + if (event.toElement === null) { + self.fire('mouseup', event); } - /* eslint-enable require-jsdoc */ - - this._mouseMovingFlag = false; - this.fire('mousedown', downEvent); - util.addEventListener(document, 'mousemove', onMouseMove); - util.addEventListener(document, 'mouseup', onMouseUp); - util.addEventListener(document, 'mouseout', onMouseOut); + } + /* eslint-enable require-jsdoc */ + + this._mouseMovingFlag = false; + this.fire('mousedown', downEvent); + util.addEventListener(document, 'mousemove', onMouseMove); + util.addEventListener(document, 'mouseup', onMouseUp); + util.addEventListener(document, 'mouseout', onMouseOut); }, /** @@ -393,45 +401,45 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @private */ _onClick: function(event) { - var target = util.getTarget(event); - var self = this; - var nodeId; + var target = util.getTarget(event); + var self = this; + var nodeId; - if (util.isRightButton(event)) { - this.clickTimer = null; + if (util.isRightButton(event)) { + this.clickTimer = null; - return; - } + return; + } - if (this._isClickedToggleButton(target)) { - nodeId = this.getNodeIdFromElement(target); - - this.toggle(nodeId); - - /** - * @event Tree#clickToggleBtn - * @type {object} evt - Event data - * @property {string} nodeId - Node id - * @property {HTMLElement} target - Element of toggle button - * @example - * tree.on('clickToggleBtn', function(evt) { - * console.log(evt.target); - * }); - */ - this.fire('clickToggleBtn', { - nodeId: nodeId, - target: target - }); + if (this._isClickedToggleButton(target)) { + nodeId = this.getNodeIdFromElement(target); - return; - } + this.toggle(nodeId); - if (!this.clickTimer && !this._mouseMovingFlag) { - this.fire('singleClick', event); - this.clickTimer = setTimeout(function() { - self.resetClickTimer(); - }, TIMEOUT_TO_DIFFERENTIATE_CLICK_AND_DBLCLICK); - } + /** + * @event Tree#clickToggleBtn + * @type {object} evt - Event data + * @property {string} nodeId - Node id + * @property {HTMLElement} target - Element of toggle button + * @example + * tree.on('clickToggleBtn', function(evt) { + * console.log(evt.target); + * }); + */ + this.fire('clickToggleBtn', { + nodeId: nodeId, + target: target + }); + + return; + } + + if (!this.clickTimer && !this._mouseMovingFlag) { + this.fire('singleClick', event); + this.clickTimer = setTimeout(function() { + self.resetClickTimer(); + }, TIMEOUT_TO_DIFFERENTIATE_CLICK_AND_DBLCLICK); + } }, /** @@ -440,8 +448,8 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @private */ _onDoubleClick: function(event) { - this.fire('doubleClick', event); - this.resetClickTimer(); + this.fire('doubleClick', event); + this.resetClickTimer(); }, /** @@ -451,19 +459,19 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @private */ _isClickedToggleButton: function(target) { - var nodeId = this.getNodeIdFromElement(target); - var nodeElement; + var nodeId = this.getNodeIdFromElement(target); + var nodeElement; - if (!nodeId) { - return false; - } + if (!nodeId) { + return false; + } - nodeElement = util.getElementsByClassName( - document.getElementById(nodeId), - this.classNames.toggleBtnClass - )[0]; + nodeElement = util.getElementsByClassName( + document.getElementById(nodeId), + this.classNames.toggleBtnClass + )[0]; - return (nodeElement && nodeElement.contains(target)); + return nodeElement && nodeElement.contains(target); }, /** @@ -473,31 +481,31 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @private */ _setDisplayFromNodeState: function(nodeId, state) { - var subtreeElement = this._getSubtreeElement(nodeId), - label, btnElement, nodeElement, firstTextNode; - - if (!subtreeElement || subtreeElement === this.rootElement) { - return; - } - label = this.stateLabels[state]; - nodeElement = document.getElementById(nodeId); - - btnElement = util.getElementsByClassName( - nodeElement, - this.classNames.toggleBtnClass - )[0]; - - if (state === nodeStates.OPENED) { - subtreeElement.style.display = ''; - } else { - subtreeElement.style.display = 'none'; - } - this._setNodeClassNameFromState(nodeElement, state); - - if (btnElement) { - firstTextNode = util.getFirstTextNode(btnElement); - firstTextNode.nodeValue = label; - } + var subtreeElement = this._getSubtreeElement(nodeId), + label, + btnElement, + nodeElement, + firstTextNode; + + if (!subtreeElement || subtreeElement === this.rootElement) { + return; + } + label = this.stateLabels[state]; + nodeElement = document.getElementById(nodeId); + + btnElement = util.getElementsByClassName(nodeElement, this.classNames.toggleBtnClass)[0]; + + if (state === nodeStates.OPENED) { + subtreeElement.style.display = ''; + } else { + subtreeElement.style.display = 'none'; + } + this._setNodeClassNameFromState(nodeElement, state); + + if (btnElement) { + firstTextNode = util.getFirstTextNode(btnElement); + firstTextNode.nodeValue = label; + } }, /** @@ -507,13 +515,13 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @private */ _setNodeClassNameFromState: function(nodeElement, state) { - var classNames = this.classNames, - openedClassName = classNames[nodeStates.OPENED + 'Class'], - closedClassName = classNames[nodeStates.CLOSED + 'Class']; + var classNames = this.classNames, + openedClassName = classNames[nodeStates.OPENED + 'Class'], + closedClassName = classNames[nodeStates.CLOSED + 'Class']; - util.removeClass(nodeElement, openedClassName); - util.removeClass(nodeElement, closedClassName); - util.addClass(nodeElement, classNames[state + 'Class']); + util.removeClass(nodeElement, openedClassName); + util.removeClass(nodeElement, closedClassName); + util.addClass(nodeElement, classNames[state + 'Class']); }, /** @@ -524,27 +532,32 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @see outerTemplate uses "util.renderTemplate" */ _makeHtml: function(nodeIds) { - var model = this.model, - html = ''; - - snippet.forEach(nodeIds, function(nodeId) { - var node = model.getNode(nodeId), - sources, props; - - if (!node) { - return; - } + var model = this.model, + html = ''; - sources = this._getTemplate(node); - props = this._makeTemplateProps(node); - props.innerTemplate = this._makeInnerHTML(node, { - source: sources.inner, - props: props - }); - html += util.renderTemplate(sources.outer, props); - }, this); + snippet.forEach( + nodeIds, + function(nodeId) { + var node = model.getNode(nodeId), + sources, + props; - return html; + if (!node) { + return; + } + + sources = this._getTemplate(node); + props = this._makeTemplateProps(node); + props.innerTemplate = this._makeInnerHTML(node, { + source: sources.inner, + props: props + }); + html += util.renderTemplate(sources.outer, props); + }, + this + ); + + return html; }, /** @@ -556,13 +569,13 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @see innerTemplate uses "this._renderTemplate" */ _makeInnerHTML: function(node, cached) { - var source, props; + var source, props; - cached = cached || {}; - source = cached.source || this._getTemplate(node).inner; - props = cached.props || this._makeTemplateProps(node); + cached = cached || {}; + source = cached.source || this._getTemplate(node).inner; + props = cached.props || this._makeTemplateProps(node); - return this._renderTemplate(source, props); + return this._renderTemplate(source, props); }, /** @@ -572,21 +585,21 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @private */ _getTemplate: function(node) { - var source; - - if (node.isLeaf()) { - source = { - inner: this.template.leafNode, - outer: outerTemplate.LEAF_NODE - }; - } else { - source = { - inner: this.template.internalNode, - outer: outerTemplate.INTERNAL_NODE - }; - } + var source; - return source; + if (node.isLeaf()) { + source = { + inner: this.template.leafNode, + outer: outerTemplate.LEAF_NODE + }; + } else { + source = { + inner: this.template.internalNode, + outer: outerTemplate.INTERNAL_NODE + }; + } + + return source; }, /** @@ -596,27 +609,28 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @private */ _makeTemplateProps: function(node) { - var classNames = this.classNames, - id = node.getId(), - props = { - id: id, - indent: this.getIndentWidth(id) - }, state; - - if (node.isLeaf()) { - extend(props, { - isLeaf: true // for custom template method - }); - } else { - state = node.getState(); - extend(props, { - stateClass: classNames[state + 'Class'], - stateLabel: this.stateLabels[state], - children: this._makeHtml(node.getChildIds()) - }); - } + var classNames = this.classNames, + id = node.getId(), + props = { + id: id, + indent: this.getIndentWidth(id) + }, + state; + + if (node.isLeaf()) { + extend(props, { + isLeaf: true // for custom template method + }); + } else { + state = node.getState(); + extend(props, { + stateClass: classNames[state + 'Class'], + stateLabel: this.stateLabels[state], + children: this._makeHtml(node.getChildIds()) + }); + } - return extend(props, classNames, node.getAllData()); + return extend(props, classNames, node.getAllData()); }, /** @@ -625,7 +639,7 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @returns {number} - padding left of tree node division */ getIndentWidth: function(nodeId) { - return this.getDepth(nodeId) * this._indent; + return this.getDepth(nodeId) * this._indent; }, /** @@ -634,50 +648,51 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @private */ _draw: function(nodeId) { - var node = this.model.getNode(nodeId), - element, html; - - if (!node) { - return; - } - - /** - * @event Tree#beforeDraw - * @type {object} evt - Event data - * @property {string} nodeId - Node id - * @example - * tree.on('beforeDraw', function(evt) { - * if (tree.isMovingNode) { - * console.log('isMovingNode'); - * } - * console.log('beforeDraw: ' + evt.nodeId); - * }); - */ - this.fire('beforeDraw', {nodeId: nodeId}); - - if (node.isRoot()) { - html = this._makeHtml(node.getChildIds()); - element = this.rootElement; - } else { - html = this._makeInnerHTML(node); - element = document.getElementById(nodeId); - } - element.innerHTML = html; - this._setClassNameAndVisibilityByFeature(node); - - /** - * @event Tree#afterDraw - * @type {object} evt - Event data - * @property {string} nodeId - Node id - * @example - * tree.on('afterDraw', function(evt) { - * if (tree.isMovingNode) { - * console.log('isMovingNode'); - * } - * console.log('afterDraw: ' + evt.nodeId); - * }); - */ - this.fire('afterDraw', {nodeId: nodeId}); + var node = this.model.getNode(nodeId), + element, + html; + + if (!node) { + return; + } + + /** + * @event Tree#beforeDraw + * @type {object} evt - Event data + * @property {string} nodeId - Node id + * @example + * tree.on('beforeDraw', function(evt) { + * if (tree.isMovingNode) { + * console.log('isMovingNode'); + * } + * console.log('beforeDraw: ' + evt.nodeId); + * }); + */ + this.fire('beforeDraw', {nodeId: nodeId}); + + if (node.isRoot()) { + html = this._makeHtml(node.getChildIds()); + element = this.rootElement; + } else { + html = this._makeInnerHTML(node); + element = document.getElementById(nodeId); + } + element.innerHTML = html; + this._setClassNameAndVisibilityByFeature(node); + + /** + * @event Tree#afterDraw + * @type {object} evt - Event data + * @property {string} nodeId - Node id + * @example + * tree.on('afterDraw', function(evt) { + * if (tree.isMovingNode) { + * console.log('isMovingNode'); + * } + * console.log('afterDraw: ' + evt.nodeId); + * }); + */ + this.fire('afterDraw', {nodeId: nodeId}); }, /** @@ -689,21 +704,25 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @private */ _setClassNameAndVisibilityByFeature: function(node) { - var nodeId = node.getId(), - element = document.getElementById(nodeId), - classNames = this.classNames; - - if (node.isLeaf()) { - util.removeClass(element, classNames.openedClass); - util.removeClass(element, classNames.closedClass); - util.addClass(element, classNames.leafClass); - } else { - util.removeClass(element, classNames.leafClass); - this._setDisplayFromNodeState(nodeId, node.getState()); - this.each(function(child) { - this._setClassNameAndVisibilityByFeature(child); - }, nodeId, this); - } + var nodeId = node.getId(), + element = document.getElementById(nodeId), + classNames = this.classNames; + + if (node.isLeaf()) { + util.removeClass(element, classNames.openedClass); + util.removeClass(element, classNames.closedClass); + util.addClass(element, classNames.leafClass); + } else { + util.removeClass(element, classNames.leafClass); + this._setDisplayFromNodeState(nodeId, node.getState()); + this.each( + function(child) { + this._setClassNameAndVisibilityByFeature(child); + }, + nodeId, + this + ); + } }, /** @@ -713,21 +732,21 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @private */ _getSubtreeElement: function(nodeId) { - var node = this.model.getNode(nodeId), - subtreeElement; - - if (!node || node.isLeaf()) { - subtreeElement = null; - } else if (node.isRoot()) { - subtreeElement = this.rootElement; - } else { - subtreeElement = util.getElementsByClassName( - document.getElementById(nodeId), - this.classNames.subtreeClass - )[0]; - } + var node = this.model.getNode(nodeId), + subtreeElement; + + if (!node || node.isLeaf()) { + subtreeElement = null; + } else if (node.isRoot()) { + subtreeElement = this.rootElement; + } else { + subtreeElement = util.getElementsByClassName( + document.getElementById(nodeId), + this.classNames.subtreeClass + )[0]; + } - return subtreeElement; + return subtreeElement; }, /** @@ -736,7 +755,7 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @returns {number|undefined} Depth */ getDepth: function(nodeId) { - return this.model.getDepth(nodeId); + return this.model.getDepth(nodeId); }, /** @@ -744,7 +763,7 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @returns {number} Last depth */ getLastDepth: function() { - return this.model.getLastDepth(); + return this.model.getLastDepth(); }, /** @@ -752,7 +771,7 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @returns {string} Root node id */ getRootNodeId: function() { - return this.model.rootNode.getId(); + return this.model.rootNode.getId(); }, /** @@ -761,7 +780,7 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @returns {Array.|undefined} Child ids */ getChildIds: function(nodeId) { - return this.model.getChildIds(nodeId); + return this.model.getChildIds(nodeId); }, /** @@ -770,15 +789,15 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @returns {string|undefined} Parent id */ getParentId: function(nodeId) { - return this.model.getParentId(nodeId); + return this.model.getParentId(nodeId); }, /** * Reset click timer */ resetClickTimer: function() { - window.clearTimeout(this.clickTimer); - this.clickTimer = null; + window.clearTimeout(this.clickTimer); + this.clickTimer = null; }, /** @@ -789,13 +808,13 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * tree.getNodeIdFromElement(elementInNode); // 'tui-tree-node-3' */ getNodeIdFromElement: function(element) { - var idPrefix = this.getNodeIdPrefix(); + var idPrefix = this.getNodeIdPrefix(); - while (element && element.id.indexOf(idPrefix) === -1) { - element = element.parentElement; - } + while (element && element.id.indexOf(idPrefix) === -1) { + element = element.parentElement; + } - return element ? element.id : ''; + return element ? element.id : ''; }, /** @@ -805,7 +824,7 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * tree.getNodeIdPrefix(); // 'tui-tree-node-' */ getNodeIdPrefix: function() { - return this.model.getNodeIdPrefix(); + return this.model.getNodeIdPrefix(); }, /** @@ -814,7 +833,7 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @returns {object|undefined} Node data */ getNodeData: function(nodeId) { - return this.model.getNodeData(nodeId); + return this.model.getNodeData(nodeId); }, /** @@ -829,22 +848,26 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * tree.setNodeData(nodeId, {foo: 'bar'}, true); // not refresh */ setNodeData: function(nodeId, data, options) { - var self = this; - var treeAjax = this.enabledFeatures.Ajax; - var useAjax = options ? options.useAjax : !!treeAjax; - var isSilent = options ? options.isSilent : false; - - if (useAjax) { - treeAjax.loadData(ajaxCommand.UPDATE, function() { - self._setNodeData(nodeId, data); - }, { - nodeId: nodeId, - data: data, - type: 'set' - }); - } else { - this._setNodeData(nodeId, data, isSilent); - } + var self = this; + var treeAjax = this.enabledFeatures.Ajax; + var useAjax = options ? options.useAjax : !!treeAjax; + var isSilent = options ? options.isSilent : false; + + if (useAjax) { + treeAjax.loadData( + ajaxCommand.UPDATE, + function() { + self._setNodeData(nodeId, data); + }, + { + nodeId: nodeId, + data: data, + type: 'set' + } + ); + } else { + this._setNodeData(nodeId, data, isSilent); + } }, /** @@ -855,7 +878,7 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @private */ _setNodeData: function(nodeId, data, isSilent) { - this.model.setNodeData(nodeId, data, isSilent); + this.model.setNodeData(nodeId, data, isSilent); }, /** @@ -870,22 +893,26 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * tree.setNodeData(nodeId, 'foo', true); // not refresh */ removeNodeData: function(nodeId, names, options) { - var self = this; - var treeAjax = this.enabledFeatures.Ajax; - var useAjax = options ? options.useAjax : !!treeAjax; - var isSilent = options ? options.isSilent : false; - - if (useAjax) { - treeAjax.loadData(ajaxCommand.UPDATE, function() { - self._removeNodeData(nodeId, names); - }, { - nodeId: nodeId, - names: names, - type: 'remove' - }); - } else { - this._removeNodeData(nodeId, names, isSilent); - } + var self = this; + var treeAjax = this.enabledFeatures.Ajax; + var useAjax = options ? options.useAjax : !!treeAjax; + var isSilent = options ? options.isSilent : false; + + if (useAjax) { + treeAjax.loadData( + ajaxCommand.UPDATE, + function() { + self._removeNodeData(nodeId, names); + }, + { + nodeId: nodeId, + names: names, + type: 'remove' + } + ); + } else { + this._removeNodeData(nodeId, names, isSilent); + } }, /** @@ -896,7 +923,7 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @private */ _removeNodeData: function(nodeId, names, isSilent) { - this.model.removeNodeData(nodeId, names, isSilent); + this.model.removeNodeData(nodeId, names, isSilent); }, /** @@ -908,13 +935,13 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * // undefined if the node is nonexistent */ getState: function(nodeId) { - var node = this.model.getNode(nodeId); + var node = this.model.getNode(nodeId); - if (!node) { - return null; - } + if (!node) { + return null; + } - return node.getState(); + return node.getState(); }, /** * Open node @@ -924,11 +951,11 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * tree.open(nodeId ,true); */ open: function(nodeId, recursive) { - if (recursive) { - this._openRecursiveNode(nodeId); - } else { - this._openNode(nodeId); - } + if (recursive) { + this._openRecursiveNode(nodeId); + } else { + this._openNode(nodeId); + } }, /** * Open all parent node @@ -936,11 +963,15 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @private */ _openRecursiveNode: function(nodeId) { - var parentIds = this.model.getParentIds(nodeId); - parentIds.push(nodeId); - snippet.forEach(parentIds, function(parentId) { - this._openNode(parentId); - }, this); + var parentIds = this.model.getParentIds(nodeId); + parentIds.push(nodeId); + snippet.forEach( + parentIds, + function(parentId) { + this._openNode(parentId); + }, + this + ); }, /** * Open one target node @@ -948,22 +979,18 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @private */ _openNode: function(nodeId) { - var node = this.model.getNode(nodeId); - var state = nodeStates.OPENED; - var isAllowStateChange = ( - node && - !node.isRoot() && - node.getState() === nodeStates.CLOSED - ); + var node = this.model.getNode(nodeId); + var state = nodeStates.OPENED; + var isAllowStateChange = node && !node.isRoot() && node.getState() === nodeStates.CLOSED; - if (isAllowStateChange) { - node.setState(state); - this._setDisplayFromNodeState(nodeId, state); - } + if (isAllowStateChange) { + node.setState(state); + this._setDisplayFromNodeState(nodeId, state); + } - if (this.enabledFeatures.Ajax) { - this._reload(nodeId); - } + if (this.enabledFeatures.Ajax) { + this._reload(nodeId); + } }, /** @@ -974,11 +1001,11 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * tree.close(nodeId, true); */ close: function(nodeId, recursive) { - if (recursive) { - this._closeRecursiveNode(nodeId); - } else { - this._closeNode(nodeId); - } + if (recursive) { + this._closeRecursiveNode(nodeId); + } else { + this._closeNode(nodeId); + } }, /** @@ -987,12 +1014,16 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @private */ _closeRecursiveNode: function(nodeId) { - this._closeNode(nodeId); - this.model.each(function(searchNode, searchNodeId) { - if (!searchNode.isLeaf()) { - this._closeNode(searchNodeId); - } - }, nodeId, this); + this._closeNode(nodeId); + this.model.each( + function(searchNode, searchNodeId) { + if (!searchNode.isLeaf()) { + this._closeNode(searchNodeId); + } + }, + nodeId, + this + ); }, /** @@ -1001,17 +1032,13 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @private */ _closeNode: function(nodeId) { - var node = this.model.getNode(nodeId); - var state = nodeStates.CLOSED; - var isAllowStateChange = ( - node && - !node.isRoot() && - node.getState() === nodeStates.OPENED - ); - if (isAllowStateChange) { - node.setState(state); - this._setDisplayFromNodeState(nodeId, state); - } + var node = this.model.getNode(nodeId); + var state = nodeStates.CLOSED; + var isAllowStateChange = node && !node.isRoot() && node.getState() === nodeStates.OPENED; + if (isAllowStateChange) { + node.setState(state); + this._setDisplayFromNodeState(nodeId, state); + } }, /** @@ -1019,20 +1046,20 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @param {string} nodeId - Node id */ toggle: function(nodeId) { - var node = this.model.getNode(nodeId); - var state; + var node = this.model.getNode(nodeId); + var state; - if (!node || node.isRoot()) { - return; - } + if (!node || node.isRoot()) { + return; + } - node.toggleState(); - state = node.getState(); - this._setDisplayFromNodeState(nodeId, state); + node.toggleState(); + state = node.getState(); + this._setDisplayFromNodeState(nodeId, state); - if (this.enabledFeatures.Ajax) { - this._reload(nodeId); - } + if (this.enabledFeatures.Ajax) { + this._reload(nodeId); + } }, /** @@ -1041,23 +1068,28 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @private */ _reload: function(nodeId) { - var node = this.model.getNode(nodeId); - var state = node.getState(); - var isReload = snippet.isUndefined(node.getData('reload')) || - node.getData('reload'); - - if (state === nodeStates.CLOSED) { // open -> close action - this._setNodeData(nodeId, { - reload: false - }, true); - } + var node = this.model.getNode(nodeId); + var state = node.getState(); + var isReload = snippet.isUndefined(node.getData('reload')) || node.getData('reload'); + + if (state === nodeStates.CLOSED) { + // open -> close action + this._setNodeData( + nodeId, + { + reload: false + }, + true + ); + } - if (state === nodeStates.OPENED && isReload) { // close -> open action - this.resetAllData(null, { - nodeId: nodeId, - useAjax: true - }); - } + if (state === nodeStates.OPENED && isReload) { + // close -> open action + this.resetAllData(null, { + nodeId: nodeId, + useAjax: true + }); + } }, /** @@ -1086,11 +1118,11 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * tree.sort(comparator, false, parentId) */ sort: function(comparator, isSilent, parentId) { - this.model.sort(comparator, parentId); + this.model.sort(comparator, parentId); - if (!isSilent) { - this.refresh(parentId); - } + if (!isSilent) { + this.refresh(parentId); + } }, /** @@ -1098,8 +1130,8 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @param {string} [nodeId] - TreeNode id to refresh */ refresh: function(nodeId) { - nodeId = nodeId || this.getRootNodeId(); - this._draw(nodeId); + nodeId = nodeId || this.getRootNodeId(); + this._draw(nodeId); }, /** @@ -1112,7 +1144,7 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * }); */ eachAll: function(iteratee, context) { - this.model.eachAll(iteratee, context); + this.model.eachAll(iteratee, context); }, /** @@ -1127,7 +1159,7 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * */ each: function(iteratee, parentId, context) { - this.model.each(iteratee, parentId, context); + this.model.each(iteratee, parentId, context); }, /** @@ -1153,24 +1185,28 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * console.log(secondAddedIds); // ["tui-tree-node-11", "tui-tree-node-12"] */ add: function(data, parentId, options) { - var self = this; - var treeAjax = this.enabledFeatures.Ajax; - var useAjax = options ? options.useAjax : !!treeAjax; - var isSilent = options ? options.isSilent : false; - var newChildIds; - - if (useAjax) { - treeAjax.loadData(ajaxCommand.CREATE, function() { - return self._add(data, parentId); - }, { - parentId: parentId, - data: data - }); - } else { - newChildIds = this._add(data, parentId, isSilent); - } + var self = this; + var treeAjax = this.enabledFeatures.Ajax; + var useAjax = options ? options.useAjax : !!treeAjax; + var isSilent = options ? options.isSilent : false; + var newChildIds; + + if (useAjax) { + treeAjax.loadData( + ajaxCommand.CREATE, + function() { + return self._add(data, parentId); + }, + { + parentId: parentId, + data: data + } + ); + } else { + newChildIds = this._add(data, parentId, isSilent); + } - return newChildIds; + return newChildIds; }, /** @@ -1184,7 +1220,7 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @private */ _add: function(data, parentId, isSilent) { - return this.model.add(data, parentId, isSilent); + return this.model.add(data, parentId, isSilent); }, /** @@ -1210,23 +1246,27 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * }); */ resetAllData: function(data, options) { - var self = this; - var treeAjax = this.enabledFeatures.Ajax; - var nodeId = options ? options.nodeId : this.getRootNodeId(); - var useAjax = options ? options.useAjax : !!treeAjax; - var newChildIds; - - if (useAjax) { - treeAjax.loadData(ajaxCommand.READ, function(response) { - return self._resetAllData(response, nodeId); - }, { - nodeId: nodeId - }); - } else { - newChildIds = this._resetAllData(data, nodeId); - } + var self = this; + var treeAjax = this.enabledFeatures.Ajax; + var nodeId = options ? options.nodeId : this.getRootNodeId(); + var useAjax = options ? options.useAjax : !!treeAjax; + var newChildIds; + + if (useAjax) { + treeAjax.loadData( + ajaxCommand.READ, + function(response) { + return self._resetAllData(response, nodeId); + }, + { + nodeId: nodeId + } + ); + } else { + newChildIds = this._resetAllData(data, nodeId); + } - return newChildIds; + return newChildIds; }, /** @@ -1237,11 +1277,11 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @private */ _resetAllData: function(data, nodeId) { - this._removeAllChildren(nodeId, { - isSilent: true - }); + this._removeAllChildren(nodeId, { + isSilent: true + }); - return this._add(data, nodeId); + return this._add(data, nodeId); }, /** @@ -1255,20 +1295,24 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * tree.removeAllChildren(nodId, true); // Doesn't redraw the node */ removeAllChildren: function(nodeId, options) { - var self = this; - var treeAjax = this.enabledFeatures.Ajax; - var useAjax = options ? options.useAjax : !!treeAjax; - var isSilent = options ? options.isSilent : false; - - if (useAjax) { - treeAjax.loadData(ajaxCommand.DELETE_ALL_CHILDREN, function() { - self._removeAllChildren(nodeId); - }, { - parentId: nodeId - }); - } else { - this._removeAllChildren(nodeId, isSilent); - } + var self = this; + var treeAjax = this.enabledFeatures.Ajax; + var useAjax = options ? options.useAjax : !!treeAjax; + var isSilent = options ? options.isSilent : false; + + if (useAjax) { + treeAjax.loadData( + ajaxCommand.DELETE_ALL_CHILDREN, + function() { + self._removeAllChildren(nodeId); + }, + { + parentId: nodeId + } + ); + } else { + this._removeAllChildren(nodeId, isSilent); + } }, /** @@ -1278,15 +1322,19 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @private */ _removeAllChildren: function(nodeId, isSilent) { - var children = this.getChildIds(nodeId); + var children = this.getChildIds(nodeId); - snippet.forEach(children, function(childId) { - this._remove(childId, true); - }, this); + snippet.forEach( + children, + function(childId) { + this._remove(childId, true); + }, + this + ); - if (!isSilent) { - this._draw(nodeId); - } + if (!isSilent) { + this._draw(nodeId); + } }, /** @@ -1301,20 +1349,24 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * tree.remove(myNodeId, true); // remove node without redrawing */ remove: function(nodeId, options) { - var self = this; - var treeAjax = this.enabledFeatures.Ajax; - var useAjax = options ? options.useAjax : !!treeAjax; - var isSilent = options ? options.isSilent : false; - - if (useAjax) { - treeAjax.loadData(ajaxCommand.DELETE, function() { - self._remove(nodeId); - }, { - nodeId: nodeId - }); - } else { - this._remove(nodeId, isSilent); - } + var self = this; + var treeAjax = this.enabledFeatures.Ajax; + var useAjax = options ? options.useAjax : !!treeAjax; + var isSilent = options ? options.isSilent : false; + + if (useAjax) { + treeAjax.loadData( + ajaxCommand.DELETE, + function() { + self._remove(nodeId); + }, + { + nodeId: nodeId + } + ); + } else { + this._remove(nodeId, isSilent); + } }, /** @@ -1325,7 +1377,7 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @private */ _remove: function(nodeId, isSilent) { - this.model.remove(nodeId, isSilent); + this.model.remove(nodeId, isSilent); }, /** @@ -1342,27 +1394,36 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * tree.move(myNodeId, newParentId, true); // move node without redrawing */ move: function(nodeId, newParentId, index, options) { - var self = this; - var treeAjax = this.enabledFeatures.Ajax; - var useAjax = options ? options.useAjax : !!treeAjax; - var isSilent = options ? options.isSilent : false; - - if (useAjax) { - treeAjax.loadData(ajaxCommand.MOVE, function() { - if (self.getParentId(nodeId) !== newParentId) { // just move, not sort! - self.setNodeData(newParentId, { - reload: true - }, true); - } - self._move(nodeId, newParentId, index); - }, { - nodeId: nodeId, - newParentId: newParentId, - index: index - }); - } else { - this._move(nodeId, newParentId, index, isSilent); - } + var self = this; + var treeAjax = this.enabledFeatures.Ajax; + var useAjax = options ? options.useAjax : !!treeAjax; + var isSilent = options ? options.isSilent : false; + + if (useAjax) { + treeAjax.loadData( + ajaxCommand.MOVE, + function() { + if (self.getParentId(nodeId) !== newParentId) { + // just move, not sort! + self.setNodeData( + newParentId, + { + reload: true + }, + true + ); + } + self._move(nodeId, newParentId, index); + }, + { + nodeId: nodeId, + newParentId: newParentId, + index: index + } + ); + } else { + this._move(nodeId, newParentId, index, isSilent); + } }, /** @@ -1375,31 +1436,33 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @private */ _move: function(nodeId, newParentId, index, isSilent) { - /** - * @event Tree#beforeMove - * @type {object} evt - Event data - * @property {string} nodeId - Current dragging node id - * @property {string} newParentId - New parent id - * @example - * tree.on('beforeMove', function(evt) { - * console.log('dragging node: ' + evt.nodeId); - * console.log('new parent node: ' + evt.newParentId); - * console.log('original parent node: ' + tree.getParentId(evt.nodeId)); - * - * return false; // Cancel "move" event - * // return true; // Fire "move" event - * }); - */ - if (!this.invoke('beforeMove', { - nodeId: nodeId, - newParentId: newParentId - })) { - return; - } - - this.isMovingNode = true; - this.model.move(nodeId, newParentId, index, isSilent); - this.isMovingNode = false; + /** + * @event Tree#beforeMove + * @type {object} evt - Event data + * @property {string} nodeId - Current dragging node id + * @property {string} newParentId - New parent id + * @example + * tree.on('beforeMove', function(evt) { + * console.log('dragging node: ' + evt.nodeId); + * console.log('new parent node: ' + evt.newParentId); + * console.log('original parent node: ' + tree.getParentId(evt.nodeId)); + * + * return false; // Cancel "move" event + * // return true; // Fire "move" event + * }); + */ + if ( + !this.invoke('beforeMove', { + nodeId: nodeId, + newParentId: newParentId + }) + ) { + return; + } + + this.isMovingNode = true; + this.model.move(nodeId, newParentId, index, isSilent); + this.isMovingNode = false; }, /** @@ -1424,15 +1487,15 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * console.log(tree.getNodeData('tui-tree-node-5').foo); // 'bar' */ search: function(predicate, context) { - if (!snippet.isObject(predicate)) { - return []; - } + if (!snippet.isObject(predicate)) { + return []; + } - if (snippet.isFunction(predicate)) { - return this._filter(predicate, context); - } + if (snippet.isFunction(predicate)) { + return this._filter(predicate, context); + } - return this._where(predicate); + return this._where(predicate); }, /** @@ -1442,18 +1505,18 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @private */ _where: function(props) { - return this._filter(function(node) { - var result = true, - data = node.getAllData(); - - snippet.forEach(props, function(value, key) { - result = (key in data) && (data[key] === value); + return this._filter(function(node) { + var result = true, + data = node.getAllData(); - return result; - }); + snippet.forEach(props, function(value, key) { + result = key in data && data[key] === value; - return result; + return result; }); + + return result; + }); }, /** @@ -1464,15 +1527,15 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @private */ _filter: function(predicate, context) { - var filtered = []; + var filtered = []; - this.eachAll(function(node, nodeId) { - if (predicate(node, nodeId)) { - filtered.push(nodeId); - } - }, context); + this.eachAll(function(node, nodeId) { + if (predicate(node, nodeId)) { + filtered.push(nodeId); + } + }, context); - return filtered; + return filtered; }, /** @@ -1481,9 +1544,9 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @returns {boolean} True if the node is leaf. */ isLeaf: function(nodeId) { - var node = this.model.getNode(nodeId); + var node = this.model.getNode(nodeId); - return node && node.isLeaf(); + return node && node.isLeaf(); }, /** @@ -1493,7 +1556,7 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @returns {boolean} Whether a node contains another node */ contains: function(containerNodeId, containedNodeId) { - return this.model.contains(containerNodeId, containedNodeId); + return this.model.contains(containerNodeId, containedNodeId); }, /** @@ -1598,26 +1661,26 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * }); */ enableFeature: function(featureName, options) { - var Feature = features[featureName]; + var Feature = features[featureName]; - if (!Feature) { - return this; - } + if (!Feature) { + return this; + } - this.disableFeature(featureName); + this.disableFeature(featureName); - if (snippet.isObject(options)) { - options.usageStatistics = this.usageStatistics; - } else { - options = { - usageStatistics: this.usageStatistics - }; - } + if (snippet.isObject(options)) { + options.usageStatistics = this.usageStatistics; + } else { + options = { + usageStatistics: this.usageStatistics + }; + } - this.enabledFeatures[featureName] = new Feature(this, options); - this.fire('initFeature'); + this.enabledFeatures[featureName] = new Feature(this, options); + this.fire('initFeature'); - return this; + return this; }, /** @@ -1634,14 +1697,14 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * .disableFeature('Ajax'); */ disableFeature: function(featureName) { - var feature = this.enabledFeatures[featureName]; + var feature = this.enabledFeatures[featureName]; - if (feature) { - feature.destroy(); - delete this.enabledFeatures[featureName]; - } + if (feature) { + feature.destroy(); + delete this.enabledFeatures[featureName]; + } - return this; + return this; }, /** @@ -1650,11 +1713,12 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @returns {number} Index number of attached node */ getNodeIndex: function(nodeId) { - var parentId = this.model.getParentId(nodeId); + var parentId = this.model.getParentId(nodeId); - return this.model.getNode(parentId).getChildIndex(nodeId); + return this.model.getNode(parentId).getChildIndex(nodeId); } -}); + } +); /** * Set abstract apis to tree prototype @@ -1663,17 +1727,17 @@ var Tree = snippet.defineClass(/** @lends Tree.prototype */ { * @ignore */ function setAbstractAPIs(featureName, feature) { - var messageName = 'INVALID_API_' + featureName.toUpperCase(), - apiList = feature.getAPIList ? feature.getAPIList() : []; - - snippet.forEach(apiList, function(api) { - Tree.prototype[api] = function() { - throw new Error(messages[messageName] || messages.INVALID_API); - }; - }); + var messageName = 'INVALID_API_' + featureName.toUpperCase(), + apiList = feature.getAPIList ? feature.getAPIList() : []; + + snippet.forEach(apiList, function(api) { + Tree.prototype[api] = function() { + throw new Error(messages[messageName] || messages.INVALID_API); + }; + }); } snippet.forEach(features, function(Feature, name) { - setAbstractAPIs(name, Feature); + setAbstractAPIs(name, Feature); }); snippet.CustomEvents.mixin(Tree); diff --git a/src/js/treeModel.js b/src/js/treeModel.js index ff8e7eda..70e72aa2 100644 --- a/src/js/treeModel.js +++ b/src/js/treeModel.js @@ -6,9 +6,9 @@ var TreeNode = require('./treeNode'); var snippet = require('tui-code-snippet'); var extend = snippet.extend, - keys = snippet.keys, - forEach = snippet.forEach, - map = snippet.map; + keys = snippet.keys, + forEach = snippet.forEach, + map = snippet.map; /** * Tree model @@ -17,31 +17,35 @@ var extend = snippet.extend, * @param {Object} options - Options for defaultState and nodeIdPrefix * @ignore */ -var TreeModel = snippet.defineClass(/** @lends TreeModel.prototype */{ +var TreeModel = snippet.defineClass( + /** @lends TreeModel.prototype */ { init: function(options) { - TreeNode.setIdPrefix(options.nodeIdPrefix); - - /** - * Default state of node - * @type {String} - */ - this.nodeDefaultState = options.nodeDefaultState; - - /** - * Root node - * @type {TreeNode} - */ - this.rootNode = new TreeNode({ - state: 'opened' - }, null); - - /** - * Tree hash having all nodes - * @type {object.} - */ - this.treeHash = {}; - - this._setData(options.data); + TreeNode.setIdPrefix(options.nodeIdPrefix); + + /** + * Default state of node + * @type {String} + */ + this.nodeDefaultState = options.nodeDefaultState; + + /** + * Root node + * @type {TreeNode} + */ + this.rootNode = new TreeNode( + { + state: 'opened' + }, + null + ); + + /** + * Tree hash having all nodes + * @type {object.} + */ + this.treeHash = {}; + + this._setData(options.data); }, /** @@ -49,7 +53,7 @@ var TreeModel = snippet.defineClass(/** @lends TreeModel.prototype */{ * @returns {string} Prefix */ getNodeIdPrefix: function() { - return TreeNode.idPrefix; + return TreeNode.idPrefix; }, /** @@ -57,11 +61,11 @@ var TreeModel = snippet.defineClass(/** @lends TreeModel.prototype */{ * @param {Array} data - Tree data */ _setData: function(data) { - var root = this.rootNode, - rootId = root.getId(); + var root = this.rootNode, + rootId = root.getId(); - this.treeHash[rootId] = root; - this._makeTreeHash(data, root); + this.treeHash[rootId] = root; + this._makeTreeHash(data, root); }, /** @@ -72,21 +76,25 @@ var TreeModel = snippet.defineClass(/** @lends TreeModel.prototype */{ * @private */ _makeTreeHash: function(data, parent) { - var parentId = parent.getId(), - ids = []; - - forEach(data, function(datum) { - var childrenData = datum.children, - node = this._createNode(datum, parentId), - nodeId = node.getId(); - - ids.push(nodeId); - this.treeHash[nodeId] = node; - parent.addChildId(nodeId); - this._makeTreeHash(childrenData, node); - }, this); - - return ids; + var parentId = parent.getId(), + ids = []; + + forEach( + data, + function(datum) { + var childrenData = datum.children, + node = this._createNode(datum, parentId), + nodeId = node.getId(); + + ids.push(nodeId); + this.treeHash[nodeId] = node; + parent.addChildId(nodeId); + this._makeTreeHash(childrenData, node); + }, + this + ); + + return ids; }, /** @@ -96,11 +104,14 @@ var TreeModel = snippet.defineClass(/** @lends TreeModel.prototype */{ * @returns {TreeNode} TreeNode */ _createNode: function(nodeData, parentId) { - nodeData = extend({ - state: this.nodeDefaultState - }, nodeData); - - return new TreeNode(nodeData, parentId); + nodeData = extend( + { + state: this.nodeDefaultState + }, + nodeData + ); + + return new TreeNode(nodeData, parentId); }, /** @@ -109,15 +120,19 @@ var TreeModel = snippet.defineClass(/** @lends TreeModel.prototype */{ * @returns {?Array.} children */ getChildren: function(nodeId) { - var childIds = this.getChildIds(nodeId); - - if (!childIds) { - return null; - } - - return map(childIds, function(childId) { - return this.getNode(childId); - }, this); + var childIds = this.getChildIds(nodeId); + + if (!childIds) { + return null; + } + + return map( + childIds, + function(childId) { + return this.getNode(childId); + }, + this + ); }, /** @@ -126,13 +141,13 @@ var TreeModel = snippet.defineClass(/** @lends TreeModel.prototype */{ * @returns {?Array.} Child ids */ getChildIds: function(nodeId) { - var node = this.getNode(nodeId); + var node = this.getNode(nodeId); - if (!node) { - return null; - } + if (!node) { + return null; + } - return node.getChildIds(); + return node.getChildIds(); }, /** @@ -140,7 +155,7 @@ var TreeModel = snippet.defineClass(/** @lends TreeModel.prototype */{ * @returns {number} The number of nodes */ getCount: function() { - return keys(this.treeHash).length; + return keys(this.treeHash).length; }, /** @@ -148,11 +163,15 @@ var TreeModel = snippet.defineClass(/** @lends TreeModel.prototype */{ * @returns {number} The last depth */ getLastDepth: function() { - var depths = map(this.treeHash, function(node) { - return this.getDepth(node.getId()); - }, this); - - return Math.max.apply(null, depths); + var depths = map( + this.treeHash, + function(node) { + return this.getDepth(node.getId()); + }, + this + ); + + return Math.max.apply(null, depths); }, /** @@ -161,7 +180,7 @@ var TreeModel = snippet.defineClass(/** @lends TreeModel.prototype */{ * @returns {?TreeNode} Node */ getNode: function(id) { - return this.treeHash[id]; + return this.treeHash[id]; }, /** @@ -170,21 +189,21 @@ var TreeModel = snippet.defineClass(/** @lends TreeModel.prototype */{ * @returns {?number} Depth */ getDepth: function(id) { - var node = this.getNode(id), - depth = 0, - parent; + var node = this.getNode(id), + depth = 0, + parent; - if (!node) { - return null; - } + if (!node) { + return null; + } - parent = this.getNode(node.getParentId()); - while (parent) { - depth += 1; - parent = this.getNode(parent.getParentId()); - } + parent = this.getNode(node.getParentId()); + while (parent) { + depth += 1; + parent = this.getNode(parent.getParentId()); + } - return depth; + return depth; }, /** @@ -193,13 +212,13 @@ var TreeModel = snippet.defineClass(/** @lends TreeModel.prototype */{ * @returns {?string} Parent id */ getParentId: function(id) { - var node = this.getNode(id); + var node = this.getNode(id); - if (!node) { - return null; - } + if (!node) { + return null; + } - return node.getParentId(); + return node.getParentId(); }, /** * Return parents ids of node @@ -207,19 +226,19 @@ var TreeModel = snippet.defineClass(/** @lends TreeModel.prototype */{ * @returns {Array.} Parents node ids */ getParentIds: function(id) { - var parentsNodeList = []; - var node = this.getNode(id); - var parentNodeId = node.getParentId(); - - while (parentNodeId) { - node = this.getNode(parentNodeId); - parentNodeId = node.getParentId(); - parentsNodeList.push(node); - } - - return map(parentsNodeList, function(parentsNode) { - return parentsNode.getId(); - }); + var parentsNodeList = []; + var node = this.getNode(id); + var parentNodeId = node.getParentId(); + + while (parentNodeId) { + node = this.getNode(parentNodeId); + parentNodeId = node.getParentId(); + parentsNodeList.push(node); + } + + return map(parentsNodeList, function(parentsNode) { + return parentsNode.getId(); + }); }, /** * Remove a node with children. @@ -228,25 +247,29 @@ var TreeModel = snippet.defineClass(/** @lends TreeModel.prototype */{ * @param {boolean} [isSilent] - If true, it doesn't trigger the 'update' event */ remove: function(id, isSilent) { - var node = this.getNode(id), - parent; + var node = this.getNode(id), + parent; - if (!node) { - return; - } + if (!node) { + return; + } - parent = this.getNode(node.getParentId()); + parent = this.getNode(node.getParentId()); - forEach(node.getChildIds(), function(childId) { - this.remove(childId, true); - }, this); + forEach( + node.getChildIds(), + function(childId) { + this.remove(childId, true); + }, + this + ); - parent.removeChildId(id); - delete this.treeHash[id]; + parent.removeChildId(id); + delete this.treeHash[id]; - if (!isSilent) { - this.fire('update', parent.getId()); - } + if (!isSilent) { + this.fire('update', parent.getId()); + } }, /** @@ -259,17 +282,17 @@ var TreeModel = snippet.defineClass(/** @lends TreeModel.prototype */{ * @returns {Array.} New added node ids */ add: function(data, parentId, isSilent) { - var parent = this.getNode(parentId) || this.rootNode, - ids; + var parent = this.getNode(parentId) || this.rootNode, + ids; - data = [].concat(data); - ids = this._makeTreeHash(data, parent); + data = [].concat(data); + ids = this._makeTreeHash(data, parent); - if (!isSilent) { - this.fire('update', parent.getId()); - } + if (!isSilent) { + this.fire('update', parent.getId()); + } - return ids; + return ids; }, /** @@ -279,17 +302,17 @@ var TreeModel = snippet.defineClass(/** @lends TreeModel.prototype */{ * @param {boolean} [isSilent] - If true, it doesn't trigger the 'update' event */ setNodeData: function(id, props, isSilent) { - var node = this.getNode(id); + var node = this.getNode(id); - if (!node || !props) { - return; - } + if (!node || !props) { + return; + } - node.setData(props); + node.setData(props); - if (!isSilent) { - this.fire('update', id); - } + if (!isSilent) { + this.fire('update', id); + } }, /** @@ -299,21 +322,21 @@ var TreeModel = snippet.defineClass(/** @lends TreeModel.prototype */{ * @param {boolean} [isSilent] - If true, it doesn't trigger the 'update' event */ removeNodeData: function(id, names, isSilent) { - var node = this.getNode(id); + var node = this.getNode(id); - if (!node || !names) { - return; - } + if (!node || !names) { + return; + } - if (snippet.isArray(names)) { - node.removeData.apply(node, names); - } else { - node.removeData(names); - } + if (snippet.isArray(names)) { + node.removeData.apply(node, names); + } else { + node.removeData(names); + } - if (!isSilent) { - this.fire('update', id); - } + if (!isSilent) { + this.fire('update', id); + } }, /** @@ -325,29 +348,28 @@ var TreeModel = snippet.defineClass(/** @lends TreeModel.prototype */{ */ /* eslint-disable complexity*/ move: function(nodeId, newParentId, index, isSilent) { - var node = this.getNode(nodeId); - var originalParentId, newParent, sameParent; + var node = this.getNode(nodeId); + var originalParentId, newParent, sameParent; - if (!node) { - return; - } + if (!node) { + return; + } - newParent = this.getNode(newParentId) || this.rootNode; - newParentId = newParent.getId(); - originalParentId = node.getParentId(); - sameParent = (index === -1) && (originalParentId === newParentId); + newParent = this.getNode(newParentId) || this.rootNode; + newParentId = newParent.getId(); + originalParentId = node.getParentId(); + sameParent = index === -1 && originalParentId === newParentId; - if (nodeId === newParentId || sameParent || - this.contains(nodeId, newParentId)) { - return; - } + if (nodeId === newParentId || sameParent || this.contains(nodeId, newParentId)) { + return; + } - this._changeOrderOfIds(nodeId, newParentId, originalParentId, index); + this._changeOrderOfIds(nodeId, newParentId, originalParentId, index); - if (!isSilent) { - this.fire('move', nodeId, originalParentId, newParentId, index); - } - }, /* eslint-enable complexity*/ + if (!isSilent) { + this.fire('move', nodeId, originalParentId, newParentId, index); + } + } /* eslint-enable complexity*/, /** * Change order of ids @@ -358,24 +380,24 @@ var TreeModel = snippet.defineClass(/** @lends TreeModel.prototype */{ * @private */ _changeOrderOfIds: function(nodeId, newParentId, originalParentId, index) { - var node = this.getNode(nodeId); - var newParent = this.getNode(newParentId) || this.rootNode; - var originalParent = this.getNode(originalParentId); - var isSameParentIds = (newParentId === originalParentId); - - if (index !== -1) { - if (isSameParentIds) { - newParent.moveChildId(nodeId, index); - } else { - newParent.insertChildId(nodeId, index); - originalParent.removeChildId(nodeId); - } - } else if (!isSameParentIds) { - newParent.addChildId(nodeId); - originalParent.removeChildId(nodeId); + var node = this.getNode(nodeId); + var newParent = this.getNode(newParentId) || this.rootNode; + var originalParent = this.getNode(originalParentId); + var isSameParentIds = newParentId === originalParentId; + + if (index !== -1) { + if (isSameParentIds) { + newParent.moveChildId(nodeId, index); + } else { + newParent.insertChildId(nodeId, index); + originalParent.removeChildId(nodeId); } + } else if (!isSameParentIds) { + newParent.addChildId(nodeId); + originalParent.removeChildId(nodeId); + } - node.setParentId(newParentId); + node.setParentId(newParentId); }, /** @@ -385,15 +407,15 @@ var TreeModel = snippet.defineClass(/** @lends TreeModel.prototype */{ * @returns {boolean} Whether a node contains another node */ contains: function(containerId, containedId) { - var parentId = this.getParentId(containedId), - isContained = false; + var parentId = this.getParentId(containedId), + isContained = false; - while (!isContained && parentId) { - isContained = (containerId === parentId); - parentId = this.getParentId(parentId); - } + while (!isContained && parentId) { + isContained = containerId === parentId; + parentId = this.getParentId(parentId); + } - return isContained; + return isContained; }, /** @@ -402,27 +424,27 @@ var TreeModel = snippet.defineClass(/** @lends TreeModel.prototype */{ * @param {string} [parentId] - Id of a node to sort partially */ sort: function(comparator, parentId) { - var iteratee = function(node, nodeId) { - var children = this.getChildren(nodeId); - var childIds; - - if (children.length > 1) { - children.sort(comparator); - - childIds = map(children, function(child) { - return child.getId(); - }); - node.replaceChildIds(childIds); - } - }; - var node; - - if (parentId) { - node = this.getNode(parentId); - iteratee.call(this, node, parentId); - } else { - this.eachAll(iteratee, this); + var iteratee = function(node, nodeId) { + var children = this.getChildren(nodeId); + var childIds; + + if (children.length > 1) { + children.sort(comparator); + + childIds = map(children, function(child) { + return child.getId(); + }); + node.replaceChildIds(childIds); } + }; + var node; + + if (parentId) { + node = this.getNode(parentId); + iteratee.call(this, node, parentId); + } else { + this.eachAll(iteratee, this); + } }, /** @@ -431,13 +453,13 @@ var TreeModel = snippet.defineClass(/** @lends TreeModel.prototype */{ * @returns {?object} Node data */ getNodeData: function(nodeId) { - var node = this.getNode(nodeId); + var node = this.getNode(nodeId); - if (!node) { - return null; - } + if (!node) { + return null; + } - return node.getAllData(); + return node.getAllData(); }, /** @@ -446,11 +468,11 @@ var TreeModel = snippet.defineClass(/** @lends TreeModel.prototype */{ * @param {object} [context] - Context of iteratee */ eachAll: function(iteratee, context) { - context = context || this; + context = context || this; - forEach(this.treeHash, function() { - iteratee.apply(context, arguments); - }); + forEach(this.treeHash, function() { + iteratee.apply(context, arguments); + }); }, /** @@ -459,25 +481,27 @@ var TreeModel = snippet.defineClass(/** @lends TreeModel.prototype */{ * @param {string} parentId - Parent node id * @param {object} [context] - Context of iteratee */ - each: function(iteratee, parentId, context) { // depth-first - var stack, nodeId, node; - - node = this.getNode(parentId); - if (!node) { - return; - } - stack = node.getChildIds(); - - context = context || this; - while (stack.length) { - nodeId = stack.pop(); - node = this.getNode(nodeId); - iteratee.call(context, node, nodeId); - - stack = stack.concat(node.getChildIds()); - } + each: function(iteratee, parentId, context) { + // depth-first + var stack, nodeId, node; + + node = this.getNode(parentId); + if (!node) { + return; + } + stack = node.getChildIds(); + + context = context || this; + while (stack.length) { + nodeId = stack.pop(); + node = this.getNode(nodeId); + iteratee.call(context, node, nodeId); + + stack = stack.concat(node.getChildIds()); + } } -}); + } +); snippet.CustomEvents.mixin(TreeModel); module.exports = TreeModel; diff --git a/src/js/treeNode.js b/src/js/treeNode.js index 0b1a126d..15e7014c 100644 --- a/src/js/treeNode.js +++ b/src/js/treeNode.js @@ -4,21 +4,21 @@ */ var snippet = require('tui-code-snippet'); var states = require('./consts/states').node, - util = require('./util'); + util = require('./util'); var lastIndex = 0, - getNextIndex = function() { - var index = lastIndex; - lastIndex += 1; - - return index; - }, - RESERVED_PROPERTIES = { - id: '', - state: 'setState', - children: '' - }, - inArray = snippet.inArray; + getNextIndex = function() { + var index = lastIndex; + lastIndex += 1; + + return index; + }, + RESERVED_PROPERTIES = { + id: '', + state: 'setState', + children: '' + }, + inArray = snippet.inArray; /** * TreeNode @@ -27,59 +27,60 @@ var lastIndex = 0, * @param {string} [parentId] - Parent node id * @ignore */ -var TreeNode = snippet.defineClass(/** @lends TreeNode.prototype */{ +var TreeNode = snippet.defineClass( + /** @lends TreeNode.prototype */ { static: { - /** - * Set prefix of id - * @param {string} prefix - Prefix of id - */ - setIdPrefix: function(prefix) { - this.idPrefix = prefix || this.idPrefix; - }, - - /** - * Prefix of id - * @type {string} - */ - idPrefix: '' + /** + * Set prefix of id + * @param {string} prefix - Prefix of id + */ + setIdPrefix: function(prefix) { + this.idPrefix = prefix || this.idPrefix; + }, + + /** + * Prefix of id + * @type {string} + */ + idPrefix: '' }, init: function(nodeData, parentId) { - /** - * Node id - * @type {string} - * @private - */ - this._id = this.constructor.idPrefix + getNextIndex(); - - /** - * Parent node id - * @type {string} - * @private - */ - this._parentId = parentId; - - /** - * Id list of children - * @type {Array.} - * @private - */ - this._childIds = []; - - /** - * Node data - * @type {object} - * @private - */ - this._data = {}; - - /** - * Node state - * @type {string} - * @private - */ - this._state = states.CLOSED; - - this.setData(nodeData); + /** + * Node id + * @type {string} + * @private + */ + this._id = this.constructor.idPrefix + getNextIndex(); + + /** + * Parent node id + * @type {string} + * @private + */ + this._parentId = parentId; + + /** + * Id list of children + * @type {Array.} + * @private + */ + this._childIds = []; + + /** + * Node data + * @type {object} + * @private + */ + this._data = {}; + + /** + * Node state + * @type {string} + * @private + */ + this._state = states.CLOSED; + + this.setData(nodeData); }, /** @@ -89,27 +90,31 @@ var TreeNode = snippet.defineClass(/** @lends TreeNode.prototype */{ * @private */ _setReservedProperties: function(data) { - snippet.forEachOwnProperties(RESERVED_PROPERTIES, function(setter, name) { - var value = data[name]; - - if (value && setter) { - this[setter](value); - } - delete data[name]; - }, this); + snippet.forEachOwnProperties( + RESERVED_PROPERTIES, + function(setter, name) { + var value = data[name]; + + if (value && setter) { + this[setter](value); + } + delete data[name]; + }, + this + ); - return data; + return data; }, /** * Toggle state */ toggleState: function() { - if (this._state === states.CLOSED) { - this._state = states.OPENED; - } else { - this._state = states.CLOSED; - } + if (this._state === states.CLOSED) { + this._state = states.OPENED; + } else { + this._state = states.CLOSED; + } }, /** @@ -117,8 +122,8 @@ var TreeNode = snippet.defineClass(/** @lends TreeNode.prototype */{ * @param {string} state - State of node ('closed', 'opened') */ setState: function(state) { - state = String(state); - this._state = states[state.toUpperCase()] || this._state; + state = String(state); + this._state = states[state.toUpperCase()] || this._state; }, /** @@ -126,7 +131,7 @@ var TreeNode = snippet.defineClass(/** @lends TreeNode.prototype */{ * @returns {string} state ('opened' or 'closed') */ getState: function() { - return this._state; + return this._state; }, /** @@ -134,7 +139,7 @@ var TreeNode = snippet.defineClass(/** @lends TreeNode.prototype */{ * @returns {string} Node id */ getId: function() { - return this._id; + return this._id; }, /** @@ -142,7 +147,7 @@ var TreeNode = snippet.defineClass(/** @lends TreeNode.prototype */{ * @returns {string} Parent node id */ getParentId: function() { - return this._parentId; + return this._parentId; }, /** @@ -150,7 +155,7 @@ var TreeNode = snippet.defineClass(/** @lends TreeNode.prototype */{ * @param {string} parentId - Parent node id */ setParentId: function(parentId) { - this._parentId = parentId; + this._parentId = parentId; }, /** @@ -158,7 +163,7 @@ var TreeNode = snippet.defineClass(/** @lends TreeNode.prototype */{ * @param {Array.} childIds - Id list of children */ replaceChildIds: function(childIds) { - this._childIds = childIds; + this._childIds = childIds; }, /** @@ -166,7 +171,7 @@ var TreeNode = snippet.defineClass(/** @lends TreeNode.prototype */{ * @returns {Array.} Id list of children */ getChildIds: function() { - return this._childIds.slice(); + return this._childIds.slice(); }, /** @@ -174,11 +179,11 @@ var TreeNode = snippet.defineClass(/** @lends TreeNode.prototype */{ * @param {string} id - Child node id */ addChildId: function(id) { - var childIds = this._childIds; + var childIds = this._childIds; - if (snippet.inArray(childIds, id) === -1) { - childIds.push(id); - } + if (snippet.inArray(childIds, id) === -1) { + childIds.push(id); + } }, /** @@ -186,7 +191,7 @@ var TreeNode = snippet.defineClass(/** @lends TreeNode.prototype */{ * @param {string} id - Child node id */ removeChildId: function(id) { - util.removeItemFromArray(id, this._childIds); + util.removeItemFromArray(id, this._childIds); }, /** @@ -195,7 +200,7 @@ var TreeNode = snippet.defineClass(/** @lends TreeNode.prototype */{ * @returns {*} Data */ getData: function(name) { - return this._data[name]; + return this._data[name]; }, /** @@ -203,7 +208,7 @@ var TreeNode = snippet.defineClass(/** @lends TreeNode.prototype */{ * @returns {Object} Data */ getAllData: function() { - return snippet.extend({}, this._data); + return snippet.extend({}, this._data); }, /** @@ -211,8 +216,8 @@ var TreeNode = snippet.defineClass(/** @lends TreeNode.prototype */{ * @param {Object} data - Data for adding */ setData: function(data) { - data = this._setReservedProperties(data); - snippet.extend(this._data, data); + data = this._setReservedProperties(data); + snippet.extend(this._data, data); }, /** @@ -220,9 +225,13 @@ var TreeNode = snippet.defineClass(/** @lends TreeNode.prototype */{ * @param {...string} names - Names of data */ removeData: function() { - snippet.forEachArray(arguments, function(name) { - delete this._data[name]; - }, this); + snippet.forEachArray( + arguments, + function(name) { + delete this._data[name]; + }, + this + ); }, /** @@ -231,7 +240,7 @@ var TreeNode = snippet.defineClass(/** @lends TreeNode.prototype */{ * @returns {boolean} - Whether this node has a provided child id. */ hasChild: function(id) { - return inArray(id, this._childIds) !== -1; + return inArray(id, this._childIds) !== -1; }, /** @@ -239,7 +248,7 @@ var TreeNode = snippet.defineClass(/** @lends TreeNode.prototype */{ * @returns {boolean} Node is leaf or not. */ isLeaf: function() { - return !this._childIds.length && !this.getData('hasChild'); + return !this._childIds.length && !this.getData('hasChild'); }, /** @@ -247,7 +256,7 @@ var TreeNode = snippet.defineClass(/** @lends TreeNode.prototype */{ * @returns {boolean} Node is root or not. */ isRoot: function() { - return snippet.isFalsy(this._parentId); + return snippet.isFalsy(this._parentId); }, /** @@ -256,7 +265,7 @@ var TreeNode = snippet.defineClass(/** @lends TreeNode.prototype */{ * @returns {number} Index of child in children list */ getChildIndex: function(id) { - return inArray(id, this._childIds); + return inArray(id, this._childIds); }, /** @@ -265,11 +274,11 @@ var TreeNode = snippet.defineClass(/** @lends TreeNode.prototype */{ * @param {number} index - Index number of insert position */ insertChildId: function(id, index) { - var childIds = this._childIds; + var childIds = this._childIds; - if (inArray(id, childIds) === -1) { - childIds.splice(index, 0, id); - } + if (inArray(id, childIds) === -1) { + childIds.splice(index, 0, id); + } }, /** @@ -278,16 +287,17 @@ var TreeNode = snippet.defineClass(/** @lends TreeNode.prototype */{ * @param {number} index - Index number of insert position */ moveChildId: function(id, index) { - var childIds = this._childIds; - var originIdx = this.getChildIndex(id); + var childIds = this._childIds; + var originIdx = this.getChildIndex(id); - if (inArray(id, childIds) !== -1) { - if (originIdx < index) { - index -= 1; - } - - childIds.splice(index, 0, childIds.splice(originIdx, 1)[0]); + if (inArray(id, childIds) !== -1) { + if (originIdx < index) { + index -= 1; } + + childIds.splice(index, 0, childIds.splice(originIdx, 1)[0]); + } } -}); + } +); module.exports = TreeNode; diff --git a/src/js/util.js b/src/js/util.js index d3007a15..7f39d9cb 100644 --- a/src/js/util.js +++ b/src/js/util.js @@ -4,422 +4,426 @@ */ var snippet = require('tui-code-snippet'); var isUndefined = snippet.isUndefined, - pick = snippet.pick, - templateMaskRe = /\{\{(.+?)}}/gi, - isValidDotNotationRe = /^\w+(?:\.\w+)*$/, - isValidDotNotation = function(str) { - return isValidDotNotationRe.test(str); - }, - isArray = snippet.isArraySafe, - forEach = snippet.forEach, - browser = snippet.browser, - isSupportPageOffset = typeof window.pageXOffset !== 'undefined', - isCSS1Compat = document.compatMode === 'CSS1Compat', - isOlderIE = (browser.msie && browser.version < 9), - hostnameSent = false; + pick = snippet.pick, + templateMaskRe = /\{\{(.+?)}}/gi, + isValidDotNotationRe = /^\w+(?:\.\w+)*$/, + isValidDotNotation = function(str) { + return isValidDotNotationRe.test(str); + }, + isArray = snippet.isArraySafe, + forEach = snippet.forEach, + browser = snippet.browser, + isSupportPageOffset = typeof window.pageXOffset !== 'undefined', + isCSS1Compat = document.compatMode === 'CSS1Compat', + isOlderIE = browser.msie && browser.version < 9, + hostnameSent = false; /** * @ignore */ var util = { - /** - * Remove first specified item from array, if it exists - * @param {*} item Item to look for - * @param {Array} arr Array to query - */ - removeItemFromArray: function(item, arr) { - var index = arr.length - 1; - - while (index > -1) { - if (item === arr[index]) { - arr.splice(index, 1); - } - index -= 1; - } - }, - - /** - * Add classname - * @param {HTMLElement} element - Target element - * @param {string} className - Classname - */ - addClass: function(element, className) { - if (!element) { - return; - } - - if (element.className === '') { - element.className = className; - } else if (!util.hasClass(element, className)) { - element.className += ' ' + className; - } - }, - - /** - * Remove classname - * @param {HTMLElement} element - Target element - * @param {string} className - Classname - */ - removeClass: function(element, className) { - var originalClassName = util.getClass(element), - arr, index; - - if (!originalClassName) { - return; - } - - arr = originalClassName.split(' '); - index = snippet.inArray(className, arr); - if (index !== -1) { - arr.splice(index, 1); - element.className = arr.join(' '); - } - }, - - /** - * Add event to element - * @param {Object} element A target element - * @param {String} eventName A name of event - * @param {Function} handler A callback function to add - */ - addEventListener: function(element, eventName, handler) { - if (element.addEventListener) { - element.addEventListener(eventName, handler, false); - } else { - element.attachEvent('on' + eventName, handler); - } - }, - - /** - * Remove event from element - * @param {Object} element A target element - * @param {String} eventName A name of event - * @param {Function} handler A callback function to remove - */ - removeEventListener: function(element, eventName, handler) { - if (element.removeEventListener) { - element.removeEventListener(eventName, handler, false); - } else { - element.detachEvent('on' + eventName, handler); - } - }, - - /** - * Get target element - * @param {Event} e Event object - * @returns {HTMLElement} Event target - */ - getTarget: function(e) { - var target; - e = e || window.event; - target = e.target || e.srcElement; - - return target; - }, - - /** - * Get key code from event object - * @param {Event} e Event object - * @returns {Number} KeyCode - */ - getKeyCode: function(e) { - e = e || window.event; - - return e.which || e.keyCode; - }, - - /** - * Get class name - * @param {HTMLElement} element HTMLElement - * @returns {string} Class name - */ - getClass: function(element) { - return element && element.getAttribute && - (element.getAttribute('class') || element.getAttribute('className') || ''); - }, - - /** - * Check the element has specific class or not - * @param {HTMLElement} element A target element - * @param {string} className A name of class to find - * @returns {boolean} Whether the element has the class - */ - hasClass: function(element, className) { - var elClassName = util.getClass(element); - - return elClassName.indexOf(className) > -1; - }, - - /** - * Find element by class name - * @param {HTMLElement} target A target element - * @param {string} className A name of class - * @returns {Array.} Elements - */ - getElementsByClassName: function(target, className) { - var all, filtered; - - if (target.querySelectorAll) { - filtered = target.querySelectorAll('.' + className); - } else { - all = snippet.toArray(target.getElementsByTagName('*')); - filtered = snippet.filter(all, function(el) { - var classNames = el.className || ''; - - return (classNames.indexOf(className) !== -1); - }); - } - - if (!filtered) { - filtered = []; - } - - return filtered; - }, - - /** - * Find element by class name among child nodes - * @param {HTMLElement} target A target element - * @param {string} className A name of class - * @returns {Array.} Elements - */ - getChildElementByClassName: function(target, className) { - var children = target.childNodes; - var i = 0; - var length = children.length; - var child; - - for (; i < length; i += 1) { - child = children[i]; - if (util.hasClass(child, className)) { - return child; - } - } - - return null; - }, - - /** - * Check whether the click event by right button - * @param {MouseEvent} event Event object - * @returns {boolean} Whether the click event by right button - */ - isRightButton: function(event) { - return util._getButton(event) === 2; - }, - - /** - * Whether the property exist or not - * @param {Array} props A property - * @returns {string|boolean} Property name or false - * @example - * var userSelectProperty = util.testProp([ - * 'userSelect', - * 'WebkitUserSelect', - * 'OUserSelect', - * 'MozUserSelect', - * 'msUserSelect' - * ]); - */ - testProp: function(props) { - var style = document.documentElement.style, - propertyName = false; - - /* eslint-disable consistent-return */ - snippet.forEach(props, function(prop) { - if (prop in style) { - propertyName = prop; - - return false; - } - }); - /* eslint-enable consistent-return */ - - return propertyName; - }, - - /** - * Prevent default event - * @param {Event} event Event object - */ - preventDefault: function(event) { - if (event.preventDefault) { - event.preventDefault(); - } else { - event.returnValue = false; - } - }, - - /** - * Make html from template - * @param {string} source - Template html - * @param {Object} props - Template data - * @returns {string} html - */ - renderTemplate: function(source, props) { - /* eslint-disable require-jsdoc */ - function pickValue(names) { - return pick.apply(null, [props].concat(names)); - } - /* eslint-enable require-jsdoc */ - - return source.replace(templateMaskRe, function(match, name) { - var value; - - if (isValidDotNotation(name)) { - value = pickValue(name.split('.')); - } - - if (isArray(value)) { - value = value.join(' '); - } else if (isUndefined(value)) { - value = ''; - } - - return value; - }); - }, - - /** - * Normalization for event button property - * 0: First mouse button, 2: Second mouse button, 1: Center button - * @param {MouseEvent} event Event object - * @returns {?number} button type - * @private - */ - _getButton: function(event) { - var primary = '0,1,3,5,7'; - var secondary = '2,6'; - var wheel = '4'; - var result = null; - var button; - - if (document.implementation.hasFeature('MouseEvents', '2.0')) { - return event.button; - } - - button = String(event.button); - if (primary.indexOf(button) > -1) { - result = 0; - } else if (secondary.indexOf(button) > -1) { - result = 2; - } else if (wheel.indexOf(button) > -1) { - result = 1; - } - - return result; - }, - - /** - * Get mouse position - * @param {MouseEvet} event - Event object - * @returns {object} X, Y position of mouse - */ - getMousePos: function(event) { - return { - x: event.clientX, - y: event.clientY - }; - }, - - /** - * Get value of scroll top on document.body (cross browsing) - * @returns {number} Value of scroll top - */ - getWindowScrollTop: function() { - var scrollTop; - - if (isSupportPageOffset) { - scrollTop = window.pageYOffset; - } else { - scrollTop = isCSS1Compat ? document.documentElement.scrollTop : document.body.scrollTop; - } - - return scrollTop; - }, - - /** - * Get top position value of element - * @param {HTMLElement} element - Target element - * @returns {number} Top position value - */ - getElementTop: function(element) { - var actualTop = 0; - var scrollTop; - - while (element) { - if (element.tagName.toLowerCase === 'body') { - scrollTop = util.getWindowScrollTop(); - } else { - scrollTop = element.scrollTop; - } - - actualTop += element.offsetTop - scrollTop + element.clientTop; - element = element.offsetParent; - } - - return actualTop; - }, - - /** - * Get first text node in target element - * @param {HTMLElement} element - Target element to find - * @returns {HTMLElement} Text node - */ - getFirstTextNode: function(element) { - var childElements = snippet.toArray(element.childNodes); - var firstTextNode = ''; - - forEach(childElements, function(childElement) { - if (childElement.nodeName === '#text') { - firstTextNode = childElement; - - return false; - } - - return true; - }); - - return firstTextNode; - }, - - /** - * Remove element from parent element - * @param {HTMLElement} element - Target element to remove - */ - removeElement: function(element) { - if (element && element.parentNode) { - element.parentNode.removeChild(element); - } - }, - - /** - * Get change event name as browser - * @returns {string} Event name - */ - getChangeEventName: function() { - var changeEventName; - - if (isOlderIE) { - changeEventName = 'propertychange'; - } else { - changeEventName = 'change'; - } - - return changeEventName; - }, - - /** - * send hostname - */ - sendHostName: function() { - if (hostnameSent) { - return; - } - hostnameSent = true; - - snippet.sendHostname('tree', 'UA-129987462-1'); + /** + * Remove first specified item from array, if it exists + * @param {*} item Item to look for + * @param {Array} arr Array to query + */ + removeItemFromArray: function(item, arr) { + var index = arr.length - 1; + + while (index > -1) { + if (item === arr[index]) { + arr.splice(index, 1); + } + index -= 1; } + }, + + /** + * Add classname + * @param {HTMLElement} element - Target element + * @param {string} className - Classname + */ + addClass: function(element, className) { + if (!element) { + return; + } + + if (element.className === '') { + element.className = className; + } else if (!util.hasClass(element, className)) { + element.className += ' ' + className; + } + }, + + /** + * Remove classname + * @param {HTMLElement} element - Target element + * @param {string} className - Classname + */ + removeClass: function(element, className) { + var originalClassName = util.getClass(element), + arr, + index; + + if (!originalClassName) { + return; + } + + arr = originalClassName.split(' '); + index = snippet.inArray(className, arr); + if (index !== -1) { + arr.splice(index, 1); + element.className = arr.join(' '); + } + }, + + /** + * Add event to element + * @param {Object} element A target element + * @param {String} eventName A name of event + * @param {Function} handler A callback function to add + */ + addEventListener: function(element, eventName, handler) { + if (element.addEventListener) { + element.addEventListener(eventName, handler, false); + } else { + element.attachEvent('on' + eventName, handler); + } + }, + + /** + * Remove event from element + * @param {Object} element A target element + * @param {String} eventName A name of event + * @param {Function} handler A callback function to remove + */ + removeEventListener: function(element, eventName, handler) { + if (element.removeEventListener) { + element.removeEventListener(eventName, handler, false); + } else { + element.detachEvent('on' + eventName, handler); + } + }, + + /** + * Get target element + * @param {Event} e Event object + * @returns {HTMLElement} Event target + */ + getTarget: function(e) { + var target; + e = e || window.event; + target = e.target || e.srcElement; + + return target; + }, + + /** + * Get key code from event object + * @param {Event} e Event object + * @returns {Number} KeyCode + */ + getKeyCode: function(e) { + e = e || window.event; + + return e.which || e.keyCode; + }, + + /** + * Get class name + * @param {HTMLElement} element HTMLElement + * @returns {string} Class name + */ + getClass: function(element) { + return ( + element && + element.getAttribute && + (element.getAttribute('class') || element.getAttribute('className') || '') + ); + }, + + /** + * Check the element has specific class or not + * @param {HTMLElement} element A target element + * @param {string} className A name of class to find + * @returns {boolean} Whether the element has the class + */ + hasClass: function(element, className) { + var elClassName = util.getClass(element); + + return elClassName.indexOf(className) > -1; + }, + + /** + * Find element by class name + * @param {HTMLElement} target A target element + * @param {string} className A name of class + * @returns {Array.} Elements + */ + getElementsByClassName: function(target, className) { + var all, filtered; + + if (target.querySelectorAll) { + filtered = target.querySelectorAll('.' + className); + } else { + all = snippet.toArray(target.getElementsByTagName('*')); + filtered = snippet.filter(all, function(el) { + var classNames = el.className || ''; + + return classNames.indexOf(className) !== -1; + }); + } + + if (!filtered) { + filtered = []; + } + + return filtered; + }, + + /** + * Find element by class name among child nodes + * @param {HTMLElement} target A target element + * @param {string} className A name of class + * @returns {Array.} Elements + */ + getChildElementByClassName: function(target, className) { + var children = target.childNodes; + var i = 0; + var length = children.length; + var child; + + for (; i < length; i += 1) { + child = children[i]; + if (util.hasClass(child, className)) { + return child; + } + } + + return null; + }, + + /** + * Check whether the click event by right button + * @param {MouseEvent} event Event object + * @returns {boolean} Whether the click event by right button + */ + isRightButton: function(event) { + return util._getButton(event) === 2; + }, + + /** + * Whether the property exist or not + * @param {Array} props A property + * @returns {string|boolean} Property name or false + * @example + * var userSelectProperty = util.testProp([ + * 'userSelect', + * 'WebkitUserSelect', + * 'OUserSelect', + * 'MozUserSelect', + * 'msUserSelect' + * ]); + */ + testProp: function(props) { + var style = document.documentElement.style, + propertyName = false; + + /* eslint-disable consistent-return */ + snippet.forEach(props, function(prop) { + if (prop in style) { + propertyName = prop; + + return false; + } + }); + /* eslint-enable consistent-return */ + + return propertyName; + }, + + /** + * Prevent default event + * @param {Event} event Event object + */ + preventDefault: function(event) { + if (event.preventDefault) { + event.preventDefault(); + } else { + event.returnValue = false; + } + }, + + /** + * Make html from template + * @param {string} source - Template html + * @param {Object} props - Template data + * @returns {string} html + */ + renderTemplate: function(source, props) { + /* eslint-disable require-jsdoc */ + function pickValue(names) { + return pick.apply(null, [props].concat(names)); + } + /* eslint-enable require-jsdoc */ + + return source.replace(templateMaskRe, function(match, name) { + var value; + + if (isValidDotNotation(name)) { + value = pickValue(name.split('.')); + } + + if (isArray(value)) { + value = value.join(' '); + } else if (isUndefined(value)) { + value = ''; + } + + return value; + }); + }, + + /** + * Normalization for event button property + * 0: First mouse button, 2: Second mouse button, 1: Center button + * @param {MouseEvent} event Event object + * @returns {?number} button type + * @private + */ + _getButton: function(event) { + var primary = '0,1,3,5,7'; + var secondary = '2,6'; + var wheel = '4'; + var result = null; + var button; + + if (document.implementation.hasFeature('MouseEvents', '2.0')) { + return event.button; + } + + button = String(event.button); + if (primary.indexOf(button) > -1) { + result = 0; + } else if (secondary.indexOf(button) > -1) { + result = 2; + } else if (wheel.indexOf(button) > -1) { + result = 1; + } + + return result; + }, + + /** + * Get mouse position + * @param {MouseEvet} event - Event object + * @returns {object} X, Y position of mouse + */ + getMousePos: function(event) { + return { + x: event.clientX, + y: event.clientY + }; + }, + + /** + * Get value of scroll top on document.body (cross browsing) + * @returns {number} Value of scroll top + */ + getWindowScrollTop: function() { + var scrollTop; + + if (isSupportPageOffset) { + scrollTop = window.pageYOffset; + } else { + scrollTop = isCSS1Compat ? document.documentElement.scrollTop : document.body.scrollTop; + } + + return scrollTop; + }, + + /** + * Get top position value of element + * @param {HTMLElement} element - Target element + * @returns {number} Top position value + */ + getElementTop: function(element) { + var actualTop = 0; + var scrollTop; + + while (element) { + if (element.tagName.toLowerCase === 'body') { + scrollTop = util.getWindowScrollTop(); + } else { + scrollTop = element.scrollTop; + } + + actualTop += element.offsetTop - scrollTop + element.clientTop; + element = element.offsetParent; + } + + return actualTop; + }, + + /** + * Get first text node in target element + * @param {HTMLElement} element - Target element to find + * @returns {HTMLElement} Text node + */ + getFirstTextNode: function(element) { + var childElements = snippet.toArray(element.childNodes); + var firstTextNode = ''; + + forEach(childElements, function(childElement) { + if (childElement.nodeName === '#text') { + firstTextNode = childElement; + + return false; + } + + return true; + }); + + return firstTextNode; + }, + + /** + * Remove element from parent element + * @param {HTMLElement} element - Target element to remove + */ + removeElement: function(element) { + if (element && element.parentNode) { + element.parentNode.removeChild(element); + } + }, + + /** + * Get change event name as browser + * @returns {string} Event name + */ + getChangeEventName: function() { + var changeEventName; + + if (isOlderIE) { + changeEventName = 'propertychange'; + } else { + changeEventName = 'change'; + } + + return changeEventName; + }, + + /** + * send hostname + */ + sendHostName: function() { + if (hostnameSent) { + return; + } + hostnameSent = true; + + snippet.sendHostname('tree', 'UA-129987462-1'); + } }; module.exports = util; diff --git a/test/.eslintrc.js b/test/.eslintrc.js index 650274b0..70e2c0d4 100644 --- a/test/.eslintrc.js +++ b/test/.eslintrc.js @@ -1,5 +1,5 @@ module.exports = { - 'rules': { - 'max-nested-callbacks': 0 - } + rules: { + 'max-nested-callbacks': 0 + } }; diff --git a/test/features/ajax.spec.js b/test/features/ajax.spec.js index 13fd670b..ba31a973 100644 --- a/test/features/ajax.spec.js +++ b/test/features/ajax.spec.js @@ -1,510 +1,504 @@ var Tree = require('../../src/js/tree'); describe('Tree', function() { - var tree; + var tree; - beforeEach(function() { - loadFixtures('basicFixture.html'); - - jasmine.Ajax.install(); + beforeEach(function() { + loadFixtures('basicFixture.html'); - tree = new Tree('tree', { - rootElement: 'treeRoot' - }); - }); + jasmine.Ajax.install(); - afterEach(function() { - jasmine.Ajax.uninstall(); + tree = new Tree('tree', { + rootElement: 'treeRoot' }); + }); - it('When Ajax feature is enabled, the loader is created in tree.', function() { - var className; - - tree.enableFeature('Ajax'); - - className = tree.enabledFeatures.Ajax.loaderClassName; + afterEach(function() { + jasmine.Ajax.uninstall(); + }); - expect($('.' + className).length).toBe(1); - }); - - it('When Ajax feature is disabled, the loader is removed in tree.', function() { - var className; + it('When Ajax feature is enabled, the loader is created in tree.', function() { + var className; - tree.enableFeature('Ajax'); + tree.enableFeature('Ajax'); - className = tree.enabledFeatures.Ajax.loaderClassName; + className = tree.enabledFeatures.Ajax.loaderClassName; - tree.disableFeature('Ajax'); + expect($('.' + className).length).toBe(1); + }); - expect($('.' + className).length).toBe(0); - }); + it('When Ajax feature is disabled, the loader is removed in tree.', function() { + var className; - describe('Options test', function() { - var treeAjax, urlMock, dataMock; + tree.enableFeature('Ajax'); - beforeEach(function() { - urlMock = jasmine.createSpy('urlMockSpy').and.returnValue('api/id'); - dataMock = jasmine.createSpy('dataMockSpy').and.returnValue({ - param1: 'a', - param2: 'b' - }); + className = tree.enabledFeatures.Ajax.loaderClassName; - tree.enableFeature('Ajax', { - command: { - read: { - url: urlMock, - data: dataMock - } - }, - isLoadRoot: false - }); + tree.disableFeature('Ajax'); - treeAjax = tree.enabledFeatures.Ajax; - }); + expect($('.' + className).length).toBe(0); + }); - it('When default command option have not "type" property, default value set to "get".', function() { - treeAjax._getDefaultRequestOptions('read'); - expect(treeAjax.command.read.type).toBe('get'); - }); + describe('Options test', function() { + var treeAjax, urlMock, dataMock; - it('When default command option have not "dataType" property, default value set to "json".', function() { - treeAjax._getDefaultRequestOptions('read'); - expect(treeAjax.command.read.dataType).toBe('json'); - }); - - it('When default command option have "url" property and it is function, ' + - '"url" value set to return value.', function() { - treeAjax._getDefaultRequestOptions('read'); - expect(treeAjax.command.read.url).toBe('api/id'); - }); - - it('When default command option have "data" property and it is function, ' + - '"data" value set to return value.', function() { - treeAjax._getDefaultRequestOptions('read'); - expect(treeAjax.command.read.data).toEqual({ - param1: 'a', - param2: 'b' - }); - }); - - it('When "isLoadRoot" option value is false, it is not request server on init.', function() { - spyOn(tree, 'resetAllData'); + beforeEach(function() { + urlMock = jasmine.createSpy('urlMockSpy').and.returnValue('api/id'); + dataMock = jasmine.createSpy('dataMockSpy').and.returnValue({ + param1: 'a', + param2: 'b' + }); + + tree.enableFeature('Ajax', { + command: { + read: { + url: urlMock, + data: dataMock + } + }, + isLoadRoot: false + }); + + treeAjax = tree.enabledFeatures.Ajax; + }); - tree.on('initFeature'); + it('When default command option have not "type" property, default value set to "get".', function() { + treeAjax._getDefaultRequestOptions('read'); + expect(treeAjax.command.read.type).toBe('get'); + }); - expect(tree.resetAllData).not.toHaveBeenCalled(); - }); + it('When default command option have not "dataType" property, default value set to "json".', function() { + treeAjax._getDefaultRequestOptions('read'); + expect(treeAjax.command.read.dataType).toBe('json'); }); - describe('loadData() Ajax request - ', function() { - var request, treeAjax; + it( + 'When default command option have "url" property and it is function, ' + + '"url" value set to return value.', + function() { + treeAjax._getDefaultRequestOptions('read'); + expect(treeAjax.command.read.url).toBe('api/id'); + } + ); + + it( + 'When default command option have "data" property and it is function, ' + + '"data" value set to return value.', + function() { + treeAjax._getDefaultRequestOptions('read'); + expect(treeAjax.command.read.data).toEqual({ + param1: 'a', + param2: 'b' + }); + } + ); + + it('When "isLoadRoot" option value is false, it is not request server on init.', function() { + spyOn(tree, 'resetAllData'); + + tree.on('initFeature'); + + expect(tree.resetAllData).not.toHaveBeenCalled(); + }); + }); - beforeEach(function() { - tree.enableFeature('Ajax', { - command: { - remove: { - url: 'api/test' - } - } - }); + describe('loadData() Ajax request - ', function() { + var request, treeAjax; - treeAjax = tree.enabledFeatures.Ajax; - }); + beforeEach(function() { + tree.enableFeature('Ajax', { + command: { + remove: { + url: 'api/test' + } + } + }); + + treeAjax = tree.enabledFeatures.Ajax; + }); - it('When request url is empty, request is not executed.', function() { - treeAjax.loadData('read'); + it('When request url is empty, request is not executed.', function() { + treeAjax.loadData('read'); - request = jasmine.Ajax.requests.mostRecent(); + request = jasmine.Ajax.requests.mostRecent(); - expect(request).toBeUndefined(); - }); + expect(request).toBeUndefined(); + }); - it('When request options are valid, request is executed.', function() { - treeAjax.loadData('remove'); + it('When request options are valid, request is executed.', function() { + treeAjax.loadData('remove'); - request = jasmine.Ajax.requests.mostRecent(); + request = jasmine.Ajax.requests.mostRecent(); - expect(request.url).toBe('api/test'); - expect(request.method).toBe('GET'); - }); + expect(request.url).toBe('api/test'); + expect(request.method).toBe('GET'); + }); - it('When request is "GET" with parameters, request url include query string.', function() { - var expected = 'api/test?param1=a¶m2=b'; + it('When request is "GET" with parameters, request url include query string.', function() { + var expected = 'api/test?param1=a¶m2=b'; - spyOn(treeAjax, '_getDefaultRequestOptions').and.returnValue({ - url: 'api/test', - type: 'get', - dataType: 'json', - data: { - param1: 'a', - param2: 'b' - } - }); + spyOn(treeAjax, '_getDefaultRequestOptions').and.returnValue({ + url: 'api/test', + type: 'get', + dataType: 'json', + data: { + param1: 'a', + param2: 'b' + } + }); - treeAjax.loadData('remove'); + treeAjax.loadData('remove'); - request = jasmine.Ajax.requests.mostRecent(); + request = jasmine.Ajax.requests.mostRecent(); - expect(request.url).toBe(expected); - }); + expect(request.url).toBe(expected); + }); - it('When request is "POST" with parameters, request property is not null.', function() { - spyOn(treeAjax, '_getDefaultRequestOptions').and.returnValue({ - url: 'api/test', - type: 'post', - dataType: 'json', - data: { - param1: 'a', - param2: 'b' - } - }); + it('When request is "POST" with parameters, request property is not null.', function() { + spyOn(treeAjax, '_getDefaultRequestOptions').and.returnValue({ + url: 'api/test', + type: 'post', + dataType: 'json', + data: { + param1: 'a', + param2: 'b' + } + }); - treeAjax.loadData('remove'); + treeAjax.loadData('remove'); - request = jasmine.Ajax.requests.mostRecent(); + request = jasmine.Ajax.requests.mostRecent(); - expect(request.params).not.toBeNull(); - }); + expect(request.params).not.toBeNull(); }); + }); - describe('loadData() Ajax response - ', function() { - var callback, treeAjax; + describe('loadData() Ajax response - ', function() { + var callback, treeAjax; - beforeEach(function() { - tree.enableFeature('Ajax', { - command: { - read: { - url: 'api/test' - } - } - }); - - treeAjax = tree.enabledFeatures.Ajax; - callback = jasmine.createSpy('callback function'); - }); + beforeEach(function() { + tree.enableFeature('Ajax', { + command: { + read: { + url: 'api/test' + } + } + }); + + treeAjax = tree.enabledFeatures.Ajax; + callback = jasmine.createSpy('callback function'); + }); - it('When response is success, callback function is executed.', function() { - spyOn($, 'ajax').and.callFake(function(e) { - e.success({}); - }); + it('When response is success, callback function is executed.', function() { + spyOn($, 'ajax').and.callFake(function(e) { + e.success({}); + }); - treeAjax.loadData('read', callback); + treeAjax.loadData('read', callback); - expect(callback).toHaveBeenCalled(); - }); + expect(callback).toHaveBeenCalled(); + }); - it('When response is success, the loader is hidden.', function() { - var className = treeAjax.loaderClassName; + it('When response is success, the loader is hidden.', function() { + var className = treeAjax.loaderClassName; - spyOn($, 'ajax').and.callFake(function(e) { - e.success({}); - }); + spyOn($, 'ajax').and.callFake(function(e) { + e.success({}); + }); - treeAjax._showLoader(); - treeAjax.loadData('read', callback); + treeAjax._showLoader(); + treeAjax.loadData('read', callback); - expect($('.' + className).css('display')).toBe('none'); - }); + expect($('.' + className).css('display')).toBe('none'); + }); - it('When response is failed, the Ajax loader is hidden.', function() { - var className = treeAjax.loaderClassName; + it('When response is failed, the Ajax loader is hidden.', function() { + var className = treeAjax.loaderClassName; - spyOn($, 'ajax').and.callFake(function(e) { - e.error({}); - }); + spyOn($, 'ajax').and.callFake(function(e) { + e.error({}); + }); - treeAjax._showLoader(); - treeAjax.loadData('read', callback); + treeAjax._showLoader(); + treeAjax.loadData('read', callback); - expect($('.' + className).css('display')).toBe('none'); - }); + expect($('.' + className).css('display')).toBe('none'); + }); - it('When response is failed, the "errorAjaxResponse" custom event is fired.', function() { - var handler = jasmine.createSpy('error event handler'); + it('When response is failed, the "errorAjaxResponse" custom event is fired.', function() { + var handler = jasmine.createSpy('error event handler'); - spyOn($, 'ajax').and.callFake(function(e) { - e.error({}); - }); + spyOn($, 'ajax').and.callFake(function(e) { + e.error({}); + }); - tree.on('errorAjaxResponse', handler); + tree.on('errorAjaxResponse', handler); - treeAjax.loadData('read', callback); + treeAjax.loadData('read', callback); - expect(handler).toHaveBeenCalled(); - }); + expect(handler).toHaveBeenCalled(); }); + }); - describe('READ command - ', function() { - var response, rootNodeId, newChildIds; - - beforeEach(function() { - rootNodeId = tree.getRootNodeId(); - response = [ - {text: 'A', state: 'opened', hasChild: true}, - {text: 'B'} - ]; - - spyOn($, 'ajax').and.callFake(function(e) { - e.success(response); - }); - - tree.enableFeature('Ajax', { - command: { - read: { - url: 'api/test' - } - } - }); + describe('READ command - ', function() { + var response, rootNodeId, newChildIds; - tree.on('successAjaxResponse', function(evt) { - newChildIds = evt.data; - }); - }); + beforeEach(function() { + rootNodeId = tree.getRootNodeId(); + response = [{text: 'A', state: 'opened', hasChild: true}, {text: 'B'}]; + + spyOn($, 'ajax').and.callFake(function(e) { + e.success(response); + }); + + tree.enableFeature('Ajax', { + command: { + read: { + url: 'api/test' + } + } + }); + + tree.on('successAjaxResponse', function(evt) { + newChildIds = evt.data; + }); + }); - it('When Ajax feature is enabled, 1 depth nodes are added.', function() { - expect(tree.getChildIds(rootNodeId).length).toBe(2); - }); + it('When Ajax feature is enabled, 1 depth nodes are added.', function() { + expect(tree.getChildIds(rootNodeId).length).toBe(2); + }); - it('When state label is opened, children nodes are added.', function() { - var nodeId = tree.getChildIds(rootNodeId)[0]; + it('When state label is opened, children nodes are added.', function() { + var nodeId = tree.getChildIds(rootNodeId)[0]; - tree.close(nodeId); - tree.toggle(nodeId); + tree.close(nodeId); + tree.toggle(nodeId); - expect(tree.getChildIds(nodeId)).toEqual(newChildIds); - }); + expect(tree.getChildIds(nodeId)).toEqual(newChildIds); }); + }); - describe('CREATE command - ', function() { - var parentId, newChildIds; + describe('CREATE command - ', function() { + var parentId, newChildIds; - beforeEach(function() { - tree.enableFeature('Ajax', { - command: { - create: { - url: 'api/test' - } - } - }); - - parentId = tree.getRootNodeId(); - }); + beforeEach(function() { + tree.enableFeature('Ajax', { + command: { + create: { + url: 'api/test' + } + } + }); + + parentId = tree.getRootNodeId(); + }); - it('When response data is success, new node is created.', function() { - spyOn($, 'ajax').and.callFake(function(e) { - e.success(true); - }); + it('When response data is success, new node is created.', function() { + spyOn($, 'ajax').and.callFake(function(e) { + e.success(true); + }); - tree.on('successAjaxResponse', function(evt) { - newChildIds = evt.data; - }); + tree.on('successAjaxResponse', function(evt) { + newChildIds = evt.data; + }); - tree.add({text: 'C'}, parentId); + tree.add({text: 'C'}, parentId); - expect(tree.getChildIds(parentId)).toEqual(newChildIds); - }); + expect(tree.getChildIds(parentId)).toEqual(newChildIds); + }); - it('When response data is error, new node is not created.', function() { - spyOn($, 'ajax').and.callFake(function(e) { - e.success(false); - }); + it('When response data is error, new node is not created.', function() { + spyOn($, 'ajax').and.callFake(function(e) { + e.success(false); + }); - tree.add({text: 'C'}, parentId); + tree.add({text: 'C'}, parentId); - expect(tree.getChildIds(parentId).length).toBe(0); - }); + expect(tree.getChildIds(parentId).length).toBe(0); }); + }); - describe('REMOVE command - ', function() { - var children, parentId, nodeId; - - beforeEach(function() { - children = [ - {text: 'A'}, - {text: 'B'} - ]; - - tree.add(children); - tree.enableFeature('Ajax', { - command: { - remove: { - url: 'api/test' - } - } - }); + describe('REMOVE command - ', function() { + var children, parentId, nodeId; - parentId = tree.getRootNodeId(); - nodeId = tree.getChildIds(parentId)[0]; - }); + beforeEach(function() { + children = [{text: 'A'}, {text: 'B'}]; + + tree.add(children); + tree.enableFeature('Ajax', { + command: { + remove: { + url: 'api/test' + } + } + }); + + parentId = tree.getRootNodeId(); + nodeId = tree.getChildIds(parentId)[0]; + }); - it('When response data is success, selected node is removed.', function() { - spyOn($, 'ajax').and.callFake(function(e) { - e.success(true); - }); + it('When response data is success, selected node is removed.', function() { + spyOn($, 'ajax').and.callFake(function(e) { + e.success(true); + }); - tree.remove(nodeId); + tree.remove(nodeId); - expect(tree.getChildIds(parentId).length).toBe(children.length - 1); - }); + expect(tree.getChildIds(parentId).length).toBe(children.length - 1); + }); - it('When response data is error, selected node is not removed.', function() { - spyOn($, 'ajax').and.callFake(function(e) { - e.success(false); - }); + it('When response data is error, selected node is not removed.', function() { + spyOn($, 'ajax').and.callFake(function(e) { + e.success(false); + }); - tree.remove(nodeId); + tree.remove(nodeId); - expect(tree.getChildIds(parentId).length).toBe(children.length); - }); + expect(tree.getChildIds(parentId).length).toBe(children.length); }); + }); - describe('UPDATE command - ', function() { - var children, nodeId, changedData; - - beforeEach(function() { - children = [ - {text: 'A', propA: 'aa', propB: 'bb'} - ]; - - tree.add(children); - tree.enableFeature('Ajax', { - command: { - update: { - url: 'api/test' - } - } - }); + describe('UPDATE command - ', function() { + var children, nodeId, changedData; - nodeId = tree.getChildIds(tree.getRootNodeId())[0]; - changedData = {text: 'B'}; - }); + beforeEach(function() { + children = [{text: 'A', propA: 'aa', propB: 'bb'}]; + + tree.add(children); + tree.enableFeature('Ajax', { + command: { + update: { + url: 'api/test' + } + } + }); + + nodeId = tree.getChildIds(tree.getRootNodeId())[0]; + changedData = {text: 'B'}; + }); - it('When response data is success, selected node data is updated.', function() { - spyOn($, 'ajax').and.callFake(function(e) { - e.success(true); - }); + it('When response data is success, selected node data is updated.', function() { + spyOn($, 'ajax').and.callFake(function(e) { + e.success(true); + }); - tree.setNodeData(nodeId, changedData); + tree.setNodeData(nodeId, changedData); - expect(tree.getNodeData(nodeId).text).toBe(changedData.text); - }); + expect(tree.getNodeData(nodeId).text).toBe(changedData.text); + }); - it('When response data is error, selected node data is not updated.', function() { - spyOn($, 'ajax').and.callFake(function(e) { - e.success(false); - }); + it('When response data is error, selected node data is not updated.', function() { + spyOn($, 'ajax').and.callFake(function(e) { + e.success(false); + }); - tree.setNodeData(nodeId, changedData); + tree.setNodeData(nodeId, changedData); - expect(tree.getNodeData(nodeId).text).not.toBe(changedData.text); - }); + expect(tree.getNodeData(nodeId).text).not.toBe(changedData.text); + }); - it('When response data is success, deleted node data is updated.', function() { - spyOn($, 'ajax').and.callFake(function(e) { - e.success(true); - }); + it('When response data is success, deleted node data is updated.', function() { + spyOn($, 'ajax').and.callFake(function(e) { + e.success(true); + }); - tree.removeNodeData(nodeId, 'propA'); + tree.removeNodeData(nodeId, 'propA'); - expect(tree.getNodeData(nodeId).propA).toBeUndefined(); - }); + expect(tree.getNodeData(nodeId).propA).toBeUndefined(); + }); - it('When response data is error, deleted node data is not updated.', function() { - spyOn($, 'ajax').and.callFake(function(e) { - e.success(false); - }); + it('When response data is error, deleted node data is not updated.', function() { + spyOn($, 'ajax').and.callFake(function(e) { + e.success(false); + }); - tree.removeNodeData(nodeId, 'propA'); + tree.removeNodeData(nodeId, 'propA'); - expect(tree.getNodeData(nodeId).propA).toBe('aa'); - }); + expect(tree.getNodeData(nodeId).propA).toBe('aa'); }); + }); - describe('REMOVE_ALL_CHILDREN command - ', function() { - var children, nodeId; + describe('REMOVE_ALL_CHILDREN command - ', function() { + var children, nodeId; - beforeEach(function() { - children = [ - {text: 'A'}, - {text: 'B'}, - {text: 'C'} - ]; + beforeEach(function() { + children = [{text: 'A'}, {text: 'B'}, {text: 'C'}]; + + tree.add(children); + tree.enableFeature('Ajax', { + command: { + removeAllChildren: { + url: 'api/test' + } + } + }); + + nodeId = tree.getRootNodeId(); + }); - tree.add(children); - tree.enableFeature('Ajax', { - command: { - removeAllChildren: { - url: 'api/test' - } - } - }); + it('When response data is success, all children nodes are removed.', function() { + spyOn($, 'ajax').and.callFake(function(e) { + e.success(true); + }); - nodeId = tree.getRootNodeId(); - }); + tree.removeAllChildren(nodeId); - it('When response data is success, all children nodes are removed.', function() { - spyOn($, 'ajax').and.callFake(function(e) { - e.success(true); - }); + expect(tree.getChildIds(nodeId).length).toBe(0); + }); - tree.removeAllChildren(nodeId); + it('When response data is faild, all children nodes are not removed.', function() { + spyOn($, 'ajax').and.callFake(function(e) { + e.success(false); + }); - expect(tree.getChildIds(nodeId).length).toBe(0); - }); + tree.removeAllChildren(nodeId); - it('When response data is faild, all children nodes are not removed.', function() { - spyOn($, 'ajax').and.callFake(function(e) { - e.success(false); - }); + expect(tree.getChildIds(nodeId).length).toBe(children.length); + }); + }); - tree.removeAllChildren(nodeId); + describe('MOVE command - ', function() { + var children, rootNodeId, nodeId, newParentId; - expect(tree.getChildIds(nodeId).length).toBe(children.length); - }); + beforeEach(function() { + children = [ + {text: 'A', children: [{text: 'aa'}, {text: 'bb'}]}, + {text: 'B'}, + {text: 'C'} + ]; + + tree.add(children); + tree.enableFeature('Ajax', { + command: { + move: { + url: 'api/test' + } + } + }); + + rootNodeId = tree.getRootNodeId(); + nodeId = tree.getChildIds(rootNodeId)[0]; + newParentId = tree.getChildIds(rootNodeId)[1]; }); - describe('MOVE command - ', function() { - var children, rootNodeId, nodeId, newParentId; - - beforeEach(function() { - children = [ - {text: 'A', children: [{text: 'aa'}, {text: 'bb'}]}, - {text: 'B'}, - {text: 'C'} - ]; - - tree.add(children); - tree.enableFeature('Ajax', { - command: { - move: { - url: 'api/test' - } - } - }); - - rootNodeId = tree.getRootNodeId(); - nodeId = tree.getChildIds(rootNodeId)[0]; - newParentId = tree.getChildIds(rootNodeId)[1]; - }); - - it('When response data is success, node is moved.', function() { - spyOn($, 'ajax').and.callFake(function(e) { - e.success(true); - }); + it('When response data is success, node is moved.', function() { + spyOn($, 'ajax').and.callFake(function(e) { + e.success(true); + }); - tree.move(nodeId, newParentId); + tree.move(nodeId, newParentId); - expect(tree.getParentId(nodeId)).toBe(newParentId); - }); + expect(tree.getParentId(nodeId)).toBe(newParentId); + }); - it('When response data is error, node is not moved.', function() { - spyOn($, 'ajax').and.callFake(function(e) { - e.success(false); - }); + it('When response data is error, node is not moved.', function() { + spyOn($, 'ajax').and.callFake(function(e) { + e.success(false); + }); - tree.move(nodeId, newParentId); + tree.move(nodeId, newParentId); - expect(tree.getParentId(nodeId)).toBe(rootNodeId); - }); + expect(tree.getParentId(nodeId)).toBe(rootNodeId); }); + }); }); diff --git a/test/features/checkbox.spec.js b/test/features/checkbox.spec.js index f7b3690b..7d186efa 100644 --- a/test/features/checkbox.spec.js +++ b/test/features/checkbox.spec.js @@ -1,286 +1,284 @@ var snippet = require('tui-code-snippet'); var Tree = require('../../src/js/tree'), - messages = require('../../src/js/consts/messages'), - Checkbox = require('../../src/js/features/checkbox'); + messages = require('../../src/js/consts/messages'), + Checkbox = require('../../src/js/features/checkbox'); describe('Tree', function() { - var data = [ + var data = [ + { + title: 'A', + children: [ + {title: '1'}, + {title: '2'}, + {title: '3'}, + {title: '4'}, { - title: 'A', - children: [ - {title: '1'}, - {title: '2'}, - {title: '3'}, - {title: '4'}, - { - title: '5', - children: [ - {title: 'κ°€', children: [{title: '*'}]}, - {title: 'λ‚˜'} - ] - }, - {title: '6'}, - {title: '7'}, - {title: '8'}, - {title: '9', children: [{title: 'κ°€'}, {title: 'λ‚˜'}]}, - {title: '10'}, - {title: '11'}, - {title: '12'} - ] + title: '5', + children: [{title: 'κ°€', children: [{title: '*'}]}, {title: 'λ‚˜'}] }, - { - title: 'B', children: [{title: '1'}, {title: '2'}, {title: '3'}] - } - ]; - var tree; + {title: '6'}, + {title: '7'}, + {title: '8'}, + {title: '9', children: [{title: 'κ°€'}, {title: 'λ‚˜'}]}, + {title: '10'}, + {title: '11'}, + {title: '12'} + ] + }, + { + title: 'B', + children: [{title: '1'}, {title: '2'}, {title: '3'}] + } + ]; + var tree; + + beforeEach(function() { + loadFixtures('basicFixture.html'); + tree = new Tree('tree', { + rootElement: 'treeRoot', + data: data, + template: { + internalNode: + '' + + '' + + '{{text}}' + + '
        {{children}}
      ', + leafNode: + '' + + '{{text}}' + } + }); - beforeEach(function() { - loadFixtures('basicFixture.html'); - tree = new Tree('tree', { - rootElement: 'treeRoot', - data: data, - template: { - internalNode: - '' + - '' + - '{{text}}' + - '
        {{children}}
      ', - leafNode: - '' + - '{{text}}' - } - }); - - tree.enableFeature('Checkbox', { - checkboxClassName: 'tui-tree-checkbox' - }); + tree.enableFeature('Checkbox', { + checkboxClassName: 'tui-tree-checkbox' }); + }); - it('should have implemented apis about checkbox if enabled', function() { - var apiList = Checkbox.getAPIList(); + it('should have implemented apis about checkbox if enabled', function() { + var apiList = Checkbox.getAPIList(); - snippet.forEach(apiList, function(name) { - expect(tree[name]).not.toThrowError(messages.INVALID_API_CHECKBOX); - }); + snippet.forEach(apiList, function(name) { + expect(tree[name]).not.toThrowError(messages.INVALID_API_CHECKBOX); + }); - tree.disableFeature('Checkbox'); - snippet.forEach(apiList, function(name) { - expect(tree[name]).toThrowError(messages.INVALID_API_CHECKBOX); - }); + tree.disableFeature('Checkbox'); + snippet.forEach(apiList, function(name) { + expect(tree[name]).toThrowError(messages.INVALID_API_CHECKBOX); }); + }); - it('should fire "check"-event when a node is checked', function() { - var firstChildId = tree.getChildIds(tree.getRootNodeId())[0], - spy = jasmine.createSpy(); + it('should fire "check"-event when a node is checked', function() { + var firstChildId = tree.getChildIds(tree.getRootNodeId())[0], + spy = jasmine.createSpy(); - tree.on('check', spy); - tree.check(firstChildId); + tree.on('check', spy); + tree.check(firstChildId); - expect(spy).toHaveBeenCalledWith({ - nodeId: firstChildId - }); + expect(spy).toHaveBeenCalledWith({ + nodeId: firstChildId }); + }); - it('should fire "uncheck"-event when a node is unchecked', function() { - var firstChildId = tree.getChildIds(tree.getRootNodeId())[0], - spy = jasmine.createSpy(); - tree.on('uncheck', spy); + it('should fire "uncheck"-event when a node is unchecked', function() { + var firstChildId = tree.getChildIds(tree.getRootNodeId())[0], + spy = jasmine.createSpy(); + tree.on('uncheck', spy); - tree.uncheck(firstChildId); - expect(spy).not.toHaveBeenCalled(); + tree.uncheck(firstChildId); + expect(spy).not.toHaveBeenCalled(); - tree.check(firstChildId); - tree.uncheck(firstChildId); - expect(spy).toHaveBeenCalledWith({ - nodeId: firstChildId - }); + tree.check(firstChildId); + tree.uncheck(firstChildId); + expect(spy).toHaveBeenCalledWith({ + nodeId: firstChildId + }); + }); + + it('should check with all descendants', function() { + var firstChildId = tree.getChildIds(tree.getRootNodeId())[0]; + + tree.check(firstChildId); + tree.each(function(node, nodeId) { + expect(tree.isChecked(nodeId)).toBe(true); + }, firstChildId); + }); + + it('should uncheck with all descendants', function() { + var firstChildId = tree.getChildIds(tree.getRootNodeId())[0]; + + tree.check(firstChildId); + tree.uncheck(firstChildId); + tree.each(function(node, nodeId) { + expect(tree.isUnchecked(nodeId)).toBe(true); + }, firstChildId); + }); + + it('should toggle with all descendants', function() { + var firstChildId = tree.getChildIds(tree.getRootNodeId())[0]; + + tree.check(firstChildId); + tree.toggleCheck(firstChildId); + expect(tree.isUnchecked(firstChildId)).toBe(true); + tree.each(function(node, nodeId) { + expect(tree.isUnchecked(nodeId)).toBe(true); + }, firstChildId); + }); + + it('should be indeterminate if some children are checked', function() { + var baseNodeId = tree.getChildIds(tree.getRootNodeId())[0], + childIds = tree.getChildIds(baseNodeId); + + tree.check(childIds[0]); + expect(tree.isIndeterminate(baseNodeId)).toBe(true); + }); + + it('should be checked if all descendants are checked', function() { + var baseNodeId = tree.getChildIds(tree.getRootNodeId())[0]; + + tree.each(function(node, nodeId) { + tree.check(nodeId); + }, baseNodeId); + + expect(tree.isChecked(baseNodeId)).toBe(true); + }); + + it('should be indeterminate if some children are unchecked from all checked', function() { + var baseNodeId = tree.getChildIds(tree.getRootNodeId())[0], + childIds = tree.getChildIds(baseNodeId); + + tree.each(function(node, nodeId) { + tree.check(nodeId); + }, baseNodeId); + tree.uncheck(childIds[0]); + + expect(tree.isIndeterminate(baseNodeId)).toBe(true); + }); + + it('should reflect states when a node is changed with children', function() { + var rootChildIds = tree.getChildIds(tree.getRootNodeId()); + + /** + * ======== Set node states ======== + * a-1(v) + * a-1-1(v) + * a-1-2(v) + * a-1-3(v) + * .... + * a-2(-) + * a-2-1(v) + * a-2-2( ) + * a-2-3(v) + */ + tree.check(rootChildIds[0]); + tree.check(rootChildIds[1]); + tree.uncheck(tree.getChildIds(rootChildIds[1])[1]); + + /** + * ======== Reflect the changes ======== + * a-1(-) + * a-1-1(v) + * a-1-2(v) + * a-1-3(v) + * .... + * a-2-2( ) <-- moved to "a-1" from "a-2" + * a-2(v) + * a-2-1(v) + * a-2-3(v) + */ + tree.move(tree.getChildIds(rootChildIds[1])[1], rootChildIds[0]); + + expect(tree.isIndeterminate(rootChildIds[0])).toBe(true); + expect(tree.isChecked(rootChildIds[1])).toBe(true); + }); + + describe('When cascade option is both', function() { + beforeEach(function() { + tree.enableFeature('Checkbox', { + checkboxClassName: 'tui-tree-checkbox', + checkboxCascade: 'both' + }); + this.firstChildId = tree.getChildIds(tree.getRootNodeId())[0]; + this.childIds = tree.getChildIds(this.firstChildId); }); - it('should check with all descendants', function() { - var firstChildId = tree.getChildIds(tree.getRootNodeId())[0]; - - tree.check(firstChildId); - tree.each(function(node, nodeId) { - expect(tree.isChecked(nodeId)).toBe(true); - }, firstChildId); + tree.check(this.firstChildId); + tree.each(function(node, nodeId) { + expect(tree.isChecked(nodeId)).toBe(true); + }, this.firstChildId); }); - - it('should uncheck with all descendants', function() { - var firstChildId = tree.getChildIds(tree.getRootNodeId())[0]; - - tree.check(firstChildId); - tree.uncheck(firstChildId); - tree.each(function(node, nodeId) { - expect(tree.isUnchecked(nodeId)).toBe(true); - }, firstChildId); + it('should be indeterminate if some children are checked', function() { + tree.check(this.childIds[0]); + expect(tree.isIndeterminate(this.firstChildId)).toBe(true); }); + }); - it('should toggle with all descendants', function() { - var firstChildId = tree.getChildIds(tree.getRootNodeId())[0]; - - tree.check(firstChildId); - tree.toggleCheck(firstChildId); - expect(tree.isUnchecked(firstChildId)).toBe(true); - tree.each(function(node, nodeId) { - expect(tree.isUnchecked(nodeId)).toBe(true); - }, firstChildId); + describe('When cascade option is false', function() { + beforeEach(function() { + tree.enableFeature('Checkbox', { + checkboxClassName: 'tui-tree-checkbox', + checkboxCascade: false + }); + this.firstChildId = tree.getChildIds(tree.getRootNodeId())[0]; + this.childIds = tree.getChildIds(this.firstChildId); }); - it('should be indeterminate if some children are checked', function() { - var baseNodeId = tree.getChildIds(tree.getRootNodeId())[0], - childIds = tree.getChildIds(baseNodeId); - - tree.check(childIds[0]); - expect(tree.isIndeterminate(baseNodeId)).toBe(true); + it('should children remain unchecked even if parents are checked.', function() { + tree.check(this.firstChildId); + tree.each(function(node, nodeId) { + expect(tree.isChecked(nodeId)).toBe(false); + }, this.firstChildId); }); - it('should be checked if all descendants are checked', function() { - var baseNodeId = tree.getChildIds(tree.getRootNodeId())[0]; - - tree.each(function(node, nodeId) { - tree.check(nodeId); - }, baseNodeId); - - expect(tree.isChecked(baseNodeId)).toBe(true); + it('should be not indeterminate even if some children are checked', function() { + tree.check(this.childIds[0]); + expect(tree.isIndeterminate(this.firstChildId)).toBe(false); }); + }); - it('should be indeterminate if some children are unchecked from all checked', function() { - var baseNodeId = tree.getChildIds(tree.getRootNodeId())[0], - childIds = tree.getChildIds(baseNodeId); - - tree.each(function(node, nodeId) { - tree.check(nodeId); - }, baseNodeId); - tree.uncheck(childIds[0]); - - expect(tree.isIndeterminate(baseNodeId)).toBe(true); + describe('When cascade option is up', function() { + beforeEach(function() { + tree.enableFeature('Checkbox', { + checkboxClassName: 'tui-tree-checkbox', + checkboxCascade: 'up' + }); + this.firstChildId = tree.getChildIds(tree.getRootNodeId())[0]; + this.childIds = tree.getChildIds(this.firstChildId); }); - it('should reflect states when a node is changed with children', function() { - var rootChildIds = tree.getChildIds(tree.getRootNodeId()); - - /** - * ======== Set node states ======== - * a-1(v) - * a-1-1(v) - * a-1-2(v) - * a-1-3(v) - * .... - * a-2(-) - * a-2-1(v) - * a-2-2( ) - * a-2-3(v) - */ - tree.check(rootChildIds[0]); - tree.check(rootChildIds[1]); - tree.uncheck(tree.getChildIds(rootChildIds[1])[1]); - - /** - * ======== Reflect the changes ======== - * a-1(-) - * a-1-1(v) - * a-1-2(v) - * a-1-3(v) - * .... - * a-2-2( ) <-- moved to "a-1" from "a-2" - * a-2(v) - * a-2-1(v) - * a-2-3(v) - */ - tree.move(tree.getChildIds(rootChildIds[1])[1], rootChildIds[0]); - - expect(tree.isIndeterminate(rootChildIds[0])).toBe(true); - expect(tree.isChecked(rootChildIds[1])).toBe(true); + it('should children remain unchecked even if parents are checked.', function() { + tree.check(this.firstChildId); + tree.each(function(node, nodeId) { + expect(tree.isChecked(nodeId)).toBe(false); + }, this.firstChildId); }); - describe('When cascade option is both', function() { - beforeEach(function() { - tree.enableFeature('Checkbox', { - checkboxClassName: 'tui-tree-checkbox', - checkboxCascade: 'both' - }); - this.firstChildId = tree.getChildIds(tree.getRootNodeId())[0]; - this.childIds = tree.getChildIds(this.firstChildId); - }); - it('should check with all descendants', function() { - tree.check(this.firstChildId); - tree.each(function(node, nodeId) { - expect(tree.isChecked(nodeId)).toBe(true); - }, this.firstChildId); - }); - it('should be indeterminate if some children are checked', function() { - tree.check(this.childIds[0]); - expect(tree.isIndeterminate(this.firstChildId)).toBe(true); - }); + it('should be indeterminate if some children are checked', function() { + tree.check(this.childIds[0]); + expect(tree.isIndeterminate(this.firstChildId)).toBe(true); }); + }); - describe('When cascade option is false', function() { - beforeEach(function() { - tree.enableFeature('Checkbox', { - checkboxClassName: 'tui-tree-checkbox', - checkboxCascade: false - }); - this.firstChildId = tree.getChildIds(tree.getRootNodeId())[0]; - this.childIds = tree.getChildIds(this.firstChildId); - }); - - it('should children remain unchecked even if parents are checked.', function() { - tree.check(this.firstChildId); - tree.each(function(node, nodeId) { - expect(tree.isChecked(nodeId)).toBe(false); - }, this.firstChildId); - }); - - it('should be not indeterminate even if some children are checked', function() { - tree.check(this.childIds[0]); - expect(tree.isIndeterminate(this.firstChildId)).toBe(false); - }); + describe('When cascade option is down', function() { + beforeEach(function() { + tree.enableFeature('Checkbox', { + checkboxClassName: 'tui-tree-checkbox', + checkboxCascade: 'down' + }); + this.firstChildId = tree.getChildIds(tree.getRootNodeId())[0]; + this.childIds = tree.getChildIds(this.firstChildId); }); - describe('When cascade option is up', function() { - beforeEach(function() { - tree.enableFeature('Checkbox', { - checkboxClassName: 'tui-tree-checkbox', - checkboxCascade: 'up' - }); - this.firstChildId = tree.getChildIds(tree.getRootNodeId())[0]; - this.childIds = tree.getChildIds(this.firstChildId); - }); - - it('should children remain unchecked even if parents are checked.', function() { - tree.check(this.firstChildId); - tree.each(function(node, nodeId) { - expect(tree.isChecked(nodeId)).toBe(false); - }, this.firstChildId); - }); - - it('should be indeterminate if some children are checked', function() { - tree.check(this.childIds[0]); - expect(tree.isIndeterminate(this.firstChildId)).toBe(true); - }); + it('should check with all descendants', function() { + tree.check(this.firstChildId); + tree.each(function(node, nodeId) { + expect(tree.isChecked(nodeId)).toBe(true); + }, this.firstChildId); }); - describe('When cascade option is down', function() { - beforeEach(function() { - tree.enableFeature('Checkbox', { - checkboxClassName: 'tui-tree-checkbox', - checkboxCascade: 'down' - }); - this.firstChildId = tree.getChildIds(tree.getRootNodeId())[0]; - this.childIds = tree.getChildIds(this.firstChildId); - }); - - it('should check with all descendants', function() { - tree.check(this.firstChildId); - tree.each(function(node, nodeId) { - expect(tree.isChecked(nodeId)).toBe(true); - }, this.firstChildId); - }); - - it('should be not indeterminate even if some children are checked', function() { - tree.check(this.childIds[0]); - expect(tree.isIndeterminate(this.firstChildId)).toBe(false); - }); + it('should be not indeterminate even if some children are checked', function() { + tree.check(this.childIds[0]); + expect(tree.isIndeterminate(this.firstChildId)).toBe(false); }); + }); }); diff --git a/test/features/contextMenu.spec.js b/test/features/contextMenu.spec.js index 3f3f5852..fa4401ad 100644 --- a/test/features/contextMenu.spec.js +++ b/test/features/contextMenu.spec.js @@ -5,138 +5,133 @@ var styleKeys = ['userSelect', 'WebkitUserSelect', 'OUserSelect', 'MozUserSelect var enableProp = util.testProp(styleKeys); describe('contextMenu.js', function() { - var $rootElement, tree, contextMenu, menuData; - var data = [ + var $rootElement, tree, contextMenu, menuData; + var data = [ + { + text: 'A', + children: [ + {text: '1'}, + {text: '2'}, + {text: '3'}, + {text: '4'}, { - text: 'A', - children: [ - {text: '1'}, - {text: '2'}, - {text: '3'}, - {text: '4'}, - { - text: '5', - children: [ - {text: 'κ°€', children: [{text: '*'}]}, - {text: 'λ‚˜'} - ] - }, - {text: '6'}, - {text: '7'}, - {text: '8'}, - {text: '9', children: [{text: 'κ°€'}, {text: 'λ‚˜'}]}, - {text: '10'}, - {text: '11'}, - {text: '12'} - ] + text: '5', + children: [{text: 'κ°€', children: [{text: '*'}]}, {text: 'λ‚˜'}] }, - { - text: 'B', children: [{text: '1'}, {text: '2'}, {text: '3'}, {text: '4'}, {text: '5'}] - } + {text: '6'}, + {text: '7'}, + {text: '8'}, + {text: '9', children: [{text: 'κ°€'}, {text: 'λ‚˜'}]}, + {text: '10'}, + {text: '11'}, + {text: '12'} + ] + }, + { + text: 'B', + children: [{text: '1'}, {text: '2'}, {text: '3'}, {text: '4'}, {text: '5'}] + } + ]; + + beforeEach(function() { + loadFixtures('basicFixture.html'); + + tree = new Tree('tree', { + rootElement: 'treeRoot', + data: data + }); + + menuData = [ + {title: 'menu1'}, + {title: 'menu2'}, + { + title: 'menu3', + menu: [{title: 'submenu1'}, {title: 'submenu2'}] + } ]; - beforeEach(function() { - loadFixtures('basicFixture.html'); - - tree = new Tree('tree', { - rootElement: 'treeRoot', - data: data - }); - - menuData = [ - {title: 'menu1'}, - {title: 'menu2'}, - { - title: 'menu3', - menu: [ - {title: 'submenu1'}, - {title: 'submenu2'} - ] - } - ]; - - tree.enableFeature('ContextMenu', { - menuData: menuData - }); - - $rootElement = $(tree.rootElement); - - contextMenu = tree.enabledFeatures.ContextMenu; + tree.enableFeature('ContextMenu', { + menuData: menuData }); - it('When context-menu feature is enabled, element is not selected by style.', function() { - tree.disableFeature('ContextMenu'); + $rootElement = $(tree.rootElement); + + contextMenu = tree.enabledFeatures.ContextMenu; + }); - tree.enableFeature('ContextMenu', { - menuData: menuData - }); + it('When context-menu feature is enabled, element is not selected by style.', function() { + tree.disableFeature('ContextMenu'); - if (enableProp) { - expect($rootElement[0].style[enableProp]).toEqual('none'); - } + tree.enableFeature('ContextMenu', { + menuData: menuData }); - describe('When _generateContextMenu() is called,', function() { - it('new floating layer is generarated.', function() { - contextMenu.flElement = null; + if (enableProp) { + expect($rootElement[0].style[enableProp]).toEqual('none'); + } + }); + + describe('When _generateContextMenu() is called,', function() { + it('new floating layer is generarated.', function() { + contextMenu.flElement = null; - spyOn(contextMenu, '_createFloatingLayer'); + spyOn(contextMenu, '_createFloatingLayer'); - contextMenu._generateContextMenu(); + contextMenu._generateContextMenu(); - expect(contextMenu._createFloatingLayer).toHaveBeenCalled(); - }); + expect(contextMenu._createFloatingLayer).toHaveBeenCalled(); + }); - it('generates and returns instance of ContextMenu.', function() { - var menu = contextMenu._generateContextMenu(); + it('generates and returns instance of ContextMenu.', function() { + var menu = contextMenu._generateContextMenu(); - expect(menu instanceof TuiContextMenu).toEqual(true); - }); + expect(menu instanceof TuiContextMenu).toEqual(true); }); + }); - it('When "contextmenu" event is fired, id of selected tree item set value.', function() { - var target = $rootElement.find('li').eq(0); - var nodeId = target.attr('id'); + it('When "contextmenu" event is fired, id of selected tree item set value.', function() { + var target = $rootElement.find('li').eq(0); + var nodeId = target.attr('id'); - spyOn(util, 'getTarget').and.returnValue(target); - spyOn(tree, 'getNodeIdFromElement').and.returnValue(nodeId); + spyOn(util, 'getTarget').and.returnValue(target); + spyOn(tree, 'getNodeIdFromElement').and.returnValue(nodeId); - tree._onContextMenu(); + tree._onContextMenu(); - expect(contextMenu.selectedNodeId).toEqual(nodeId); - }); + expect(contextMenu.selectedNodeId).toEqual(nodeId); + }); - it('When the context menu is selected, custom event as "selectContextMenu" is fired.', function() { - var spyListener = jasmine.createSpy(); - var mock = { - cmd: 'test', - nodeId: null - }; + it('When the context menu is selected, custom event as "selectContextMenu" is fired.', function() { + var spyListener = jasmine.createSpy(); + var mock = { + cmd: 'test', + nodeId: null + }; - tree.on('selectContextMenu', spyListener); + tree.on('selectContextMenu', spyListener); - contextMenu._onSelect({}, 'test'); // select context menu + contextMenu._onSelect({}, 'test'); // select context menu - expect(spyListener).toHaveBeenCalledWith(mock); - }); + expect(spyListener).toHaveBeenCalledWith(mock); + }); - describe('When context-menu feature is disabled,', function() { - beforeEach(function() { - tree.disableFeature('ContextMenu'); - }); + describe('When context-menu feature is disabled,', function() { + beforeEach(function() { + tree.disableFeature('ContextMenu'); + }); - it('events are removed.', function() { - var spyListener = jasmine.createSpy(); + it('events are removed.', function() { + var spyListener = jasmine.createSpy(); - tree.on('selectContextMenu', spyListener); + tree.on('selectContextMenu', spyListener); - expect(spyListener).not.toHaveBeenCalled(); - }); + expect(spyListener).not.toHaveBeenCalled(); + }); - it('text selection property restore.', function() { - if (enableProp) { - expect($rootElement[0].style[enableProp]).not.toEqual('none'); - } - }); + it('text selection property restore.', function() { + if (enableProp) { + expect($rootElement[0].style[enableProp]).not.toEqual('none'); + } }); + }); }); diff --git a/test/features/draggable.spec.js b/test/features/draggable.spec.js index 09f38c96..1bf5bd10 100644 --- a/test/features/draggable.spec.js +++ b/test/features/draggable.spec.js @@ -4,297 +4,297 @@ var util = require('../../src/js/util'); jasmine.getFixtures().fixturesPath = 'base/test/fixtures'; describe('Tree', function() { - var $rootElement, tree, treeDraggable; - var data = [ + var $rootElement, tree, treeDraggable; + var data = [ + { + title: 'A', + children: [ + {title: '1'}, + {title: '2'}, + {title: '3'}, + {title: '4'}, { - title: 'A', - children: [ - {title: '1'}, - {title: '2'}, - {title: '3'}, - {title: '4'}, - { - title: '5', - children: [ - {title: 'κ°€', children: [{title: '*'}]}, - {title: 'λ‚˜'} - ] - }, - {title: '6'}, - {title: '7'}, - {title: '8'}, - {title: '9', children: [{title: 'κ°€'}, {title: 'λ‚˜'}]}, - {title: '10'}, - {title: '11'}, - {title: '12'} - ] + title: '5', + children: [{title: 'κ°€', children: [{title: '*'}]}, {title: 'λ‚˜'}] }, - { - title: 'B', - children: [{title: '1'}, {title: '2'}, {title: '3'}] - } - ]; + {title: '6'}, + {title: '7'}, + {title: '8'}, + {title: '9', children: [{title: 'κ°€'}, {title: 'λ‚˜'}]}, + {title: '10'}, + {title: '11'}, + {title: '12'} + ] + }, + { + title: 'B', + children: [{title: '1'}, {title: '2'}, {title: '3'}] + } + ]; + + beforeEach(function() { + loadFixtures('basicFixture.html'); + + tree = new Tree('tree', { + rootElement: 'treeRoot', + data: data + }); - beforeEach(function() { - loadFixtures('basicFixture.html'); + $rootElement = $(tree.rootElement); - tree = new Tree('tree', { - rootElement: 'treeRoot', - data: data - }); + tree.enableFeature('Draggable', { + isSortable: true, + lineBoundary: { + top: 5, + bottom: 5 + } + }); - $rootElement = $(tree.rootElement); + treeDraggable = tree.enabledFeatures.Draggable; + }); - tree.enableFeature('Draggable', { - isSortable: true, - lineBoundary: { - top: 5, - bottom: 5 - } - }); + describe('when _applyMoveAction() is called,', function() { + var currentElement, nodeId, mousePos; - treeDraggable = tree.enabledFeatures.Draggable; + beforeEach(function() { + currentElement = $rootElement.find('li').eq(0)[0]; + nodeId = tree.getNodeIdFromElement(currentElement); + mousePos = { + x: 10, + y: 20 + }; }); - describe('when _applyMoveAction() is called,', function() { - var currentElement, nodeId, mousePos; + it('mouse overed tree item is changed to hover style.', function() { + spyOn(treeDraggable, '_isContain').and.returnValue(true); + spyOn(treeDraggable, '_hover'); - beforeEach(function() { - currentElement = $rootElement.find('li').eq(0)[0]; - nodeId = tree.getNodeIdFromElement(currentElement); - mousePos = { - x: 10, - y: 20 - }; - }); + treeDraggable._applyMoveAction(nodeId, mousePos); - it('mouse overed tree item is changed to hover style.', function() { - spyOn(treeDraggable, '_isContain').and.returnValue(true); - spyOn(treeDraggable, '_hover'); + expect(treeDraggable._hover).toHaveBeenCalledWith(nodeId); + }); - treeDraggable._applyMoveAction(nodeId, mousePos); + it('mouse overed tree item is changed to unhover style.', function() { + spyOn(treeDraggable, '_isContain').and.returnValue(false); + spyOn(treeDraggable, '_unhover'); - expect(treeDraggable._hover).toHaveBeenCalledWith(nodeId); - }); + treeDraggable._applyMoveAction(nodeId, mousePos); - it('mouse overed tree item is changed to unhover style.', function() { - spyOn(treeDraggable, '_isContain').and.returnValue(false); - spyOn(treeDraggable, '_unhover'); + expect(treeDraggable._unhover).toHaveBeenCalled(); + }); - treeDraggable._applyMoveAction(nodeId, mousePos); + it('when drag type is sortable, drawing boundary line on tree items.', function() { + spyOn(treeDraggable, '_getBoundaryType').and.returnValue('top'); + spyOn(treeDraggable, '_drawBoundaryLine'); - expect(treeDraggable._unhover).toHaveBeenCalled(); - }); + treeDraggable.isSortable = true; - it('when drag type is sortable, drawing boundary line on tree items.', function() { - spyOn(treeDraggable, '_getBoundaryType').and.returnValue('top'); - spyOn(treeDraggable, '_drawBoundaryLine'); + treeDraggable._applyMoveAction(nodeId, mousePos); - treeDraggable.isSortable = true; + expect(treeDraggable._drawBoundaryLine).toHaveBeenCalled(); + }); + }); - treeDraggable._applyMoveAction(nodeId, mousePos); + it('Mouse position is contained tree item, _hover() add hover style.', function() { + var currentElement = $rootElement.find('li').eq(0)[0]; + var nodeId = tree.getNodeIdFromElement(currentElement); + var hasClass; - expect(treeDraggable._drawBoundaryLine).toHaveBeenCalled(); - }); - }); + spyOn(tree, 'isLeaf').and.returnValue(true); - it('Mouse position is contained tree item, _hover() add hover style.', function() { - var currentElement = $rootElement.find('li').eq(0)[0]; - var nodeId = tree.getNodeIdFromElement(currentElement); - var hasClass; + treeDraggable.hoveredElement = currentElement; + treeDraggable._hover(nodeId); - spyOn(tree, 'isLeaf').and.returnValue(true); + hasClass = $(currentElement).hasClass(treeDraggable.hoverClassName); - treeDraggable.hoveredElement = currentElement; - treeDraggable._hover(nodeId); + expect(hasClass).toEqual(true); + }); - hasClass = $(currentElement).hasClass(treeDraggable.hoverClassName); + it('Mouse position is out of tree item, _unhover() remove hover style.', function() { + var currentElement = $rootElement.find('li').eq(0)[0]; + var nodeId = tree.getNodeIdFromElement(currentElement); + var hasClass; - expect(hasClass).toEqual(true); - }); + treeDraggable._unhover(nodeId); - it('Mouse position is out of tree item, _unhover() remove hover style.', function() { - var currentElement = $rootElement.find('li').eq(0)[0]; - var nodeId = tree.getNodeIdFromElement(currentElement); - var hasClass; + hasClass = $(currentElement).hasClass(treeDraggable.hoverClassName); - treeDraggable._unhover(nodeId); + expect(hasClass).toEqual(false); + }); - hasClass = $(currentElement).hasClass(treeDraggable.hoverClassName); + describe('_isContain method is called,', function() { + var targetPos, mousePos, state; - expect(hasClass).toEqual(false); + beforeEach(function() { + targetPos = { + left: 0, + top: 0, + right: 100, + bottom: 100 + }; }); - describe('_isContain method is called,', function() { - var targetPos, mousePos, state; + it('when mouse position is in enable touched area, return true state.', function() { + mousePos = { + x: 10, + y: 20 + }; - beforeEach(function() { - targetPos = { - left: 0, - top: 0, - right: 100, - bottom: 100 - }; - }); + state = treeDraggable._isContain(targetPos, mousePos); - it('when mouse position is in enable touched area, return true state.', function() { - mousePos = { - x: 10, - y: 20 - }; + expect(state).toEqual(true); + }); - state = treeDraggable._isContain(targetPos, mousePos); + it('when mouse position is not in enable touched area, return false state.', function() { + mousePos = { + x: 2, + y: 3 + }; - expect(state).toEqual(true); - }); + state = treeDraggable._isContain(targetPos, mousePos); - it('when mouse position is not in enable touched area, return false state.', function() { - mousePos = { - x: 2, - y: 3 - }; + expect(state).toEqual(false); + }); + }); - state = treeDraggable._isContain(targetPos, mousePos); + describe('_getBoundaryType method is called,', function() { + var targetPos, mousePos, type; - expect(state).toEqual(false); - }); + beforeEach(function() { + targetPos = { + left: 0, + top: 0, + right: 100, + bottom: 100 + }; }); - describe('_getBoundaryType method is called,', function() { - var targetPos, mousePos, type; + it('when mouse postion is above selected tree item, boundary type is "top".', function() { + mousePos = { + x: 3, + y: 3 + }; - beforeEach(function() { - targetPos = { - left: 0, - top: 0, - right: 100, - bottom: 100 - }; - }); + type = treeDraggable._getBoundaryType(targetPos, mousePos); - it('when mouse postion is above selected tree item, boundary type is "top".', function() { - mousePos = { - x: 3, - y: 3 - }; + expect(type).toEqual('top'); + }); - type = treeDraggable._getBoundaryType(targetPos, mousePos); + it('when mouse postion is above selected tree item, boundary type is "bottom".', function() { + mousePos = { + x: 97, + y: 97 + }; - expect(type).toEqual('top'); - }); + type = treeDraggable._getBoundaryType(targetPos, mousePos); - it('when mouse postion is above selected tree item, boundary type is "bottom".', function() { - mousePos = { - x: 97, - y: 97 - }; + expect(type).toEqual('bottom'); + }); + }); - type = treeDraggable._getBoundaryType(targetPos, mousePos); + it('when boundary type has value, _drawBoundaryLine() draw boundary line on tree.', function() { + var targetPos = { + left: 10, + top: 10, + right: 10, + bottom: 10 + }; + var boundaryType = 'top'; - expect(type).toEqual('bottom'); - }); - }); + treeDraggable._initMovingLine(); - it('when boundary type has value, _drawBoundaryLine() draw boundary line on tree.', function() { - var targetPos = { - left: 10, - top: 10, - right: 10, - bottom: 10 - }; - var boundaryType = 'top'; + treeDraggable._drawBoundaryLine(targetPos, boundaryType); - treeDraggable._initMovingLine(); + expect(treeDraggable.lineElement.style.display).toEqual('block'); + }); - treeDraggable._drawBoundaryLine(targetPos, boundaryType); + describe('_getIndexForInserting() is called,', function() { + var $currentElement, helperId, nodeId, index; - expect(treeDraggable.lineElement.style.display).toEqual('block'); + beforeEach(function() { + $currentElement = $rootElement.find('li'); }); - describe('_getIndexForInserting() is called,', function() { - var $currentElement, helperId, nodeId, index; + it('when drag item is moving from bottom to top, index number is same.', function() { + helperId = tree.getNodeIdFromElement($currentElement.eq(1)[0]); + nodeId = tree.getNodeIdFromElement($currentElement.eq(3)[0]); - beforeEach(function() { - $currentElement = $rootElement.find('li'); - }); + treeDraggable.currentNodeId = helperId; + treeDraggable.movingLineType = 'top'; - it('when drag item is moving from bottom to top, index number is same.', function() { - helperId = tree.getNodeIdFromElement($currentElement.eq(1)[0]); - nodeId = tree.getNodeIdFromElement($currentElement.eq(3)[0]); + index = treeDraggable._getIndexToInsert(nodeId); - treeDraggable.currentNodeId = helperId; - treeDraggable.movingLineType = 'top'; + expect(index).toEqual(2); + }); + + it('when drag item is moving from top to bottom, index number increase.', function() { + helperId = tree.getNodeIdFromElement($currentElement.eq(3)[0]); // index: 2 + nodeId = tree.getNodeIdFromElement($currentElement.eq(1)[0]); // index: 0 - index = treeDraggable._getIndexToInsert(nodeId); + treeDraggable.currentNodeId = helperId; + treeDraggable.movingLineType = 'bottom'; - expect(index).toEqual(2); - }); + index = treeDraggable._getIndexToInsert(nodeId); - it('when drag item is moving from top to bottom, index number increase.', function() { - helperId = tree.getNodeIdFromElement($currentElement.eq(3)[0]); // index: 2 - nodeId = tree.getNodeIdFromElement($currentElement.eq(1)[0]); // index: 0 + expect(index).toEqual(1); + }); + }); - treeDraggable.currentNodeId = helperId; - treeDraggable.movingLineType = 'bottom'; + it('When invoking "beforeMove", dragging action is cancel.', function() { + var eventMock = { + target: null + }; - index = treeDraggable._getIndexToInsert(nodeId); + spyOn(tree.model, 'move'); - expect(index).toEqual(1); - }); + tree.on('beforeMove', function() { + return false; }); - it('When invoking "beforeMove", dragging action is cancel.', function() { - var eventMock = { - target: null - }; + treeDraggable._onMouseup(eventMock); - spyOn(tree.model, 'move'); + expect(tree.model.move).not.toHaveBeenCalled(); + }); - tree.on('beforeMove', function() { - return false; - }); + describe('"_setClassNameOnDragItem" should', function() { + var firstChildId, firstChildElement, eventMock; + var className = 'tui-tree-drag'; - treeDraggable._onMouseup(eventMock); + beforeEach(function() { + firstChildId = tree.model.rootNode.getChildIds()[0]; + firstChildElement = document.getElementById(firstChildId); - expect(tree.model.move).not.toHaveBeenCalled(); + eventMock = { + target: firstChildElement + }; + spyOn(util, 'getMousePos').and.returnValue({x: 10, y: 10}); }); - describe('"_setClassNameOnDragItem" should', function() { - var firstChildId, firstChildElement, eventMock; - var className = 'tui-tree-drag'; - - beforeEach(function() { - firstChildId = tree.model.rootNode.getChildIds()[0]; - firstChildElement = document.getElementById(firstChildId); - - eventMock = { - target: firstChildElement - }; - spyOn(util, 'getMousePos').and.returnValue({x: 10, y: 10}); - }); - - it('add class name on dragging item element while dragging.', function() { - treeDraggable._onMousedown(eventMock); - treeDraggable._onMousemove(eventMock); - expect(util.hasClass(firstChildElement, className)).toBe(true); - }); + it('add class name on dragging item element while dragging.', function() { + treeDraggable._onMousedown(eventMock); + treeDraggable._onMousemove(eventMock); + expect(util.hasClass(firstChildElement, className)).toBe(true); }); + }); - it('When the node is dragging,' + - 'the contents of the helper element same as the contents of the dragging node.', function() { - var firstChildId, selectedElement, dragItemElement, eventMock; + it( + 'When the node is dragging,' + + 'the contents of the helper element same as the contents of the dragging node.', + function() { + var firstChildId, selectedElement, dragItemElement, eventMock; - firstChildId = tree.model.rootNode.getChildIds()[0]; - selectedElement = document.getElementById(firstChildId); + firstChildId = tree.model.rootNode.getChildIds()[0]; + selectedElement = document.getElementById(firstChildId); - eventMock = { - target: selectedElement - }; + eventMock = { + target: selectedElement + }; - treeDraggable._onMousedown(eventMock); + treeDraggable._onMousedown(eventMock); - dragItemElement = util.getElementsByClassName(selectedElement, tree.classNames.textClass)[0]; + dragItemElement = util.getElementsByClassName(selectedElement, tree.classNames.textClass)[0]; - expect(treeDraggable.helperElement.innerHTML).toBe(dragItemElement.innerHTML); - }); + expect(treeDraggable.helperElement.innerHTML).toBe(dragItemElement.innerHTML); + } + ); }); diff --git a/test/features/editable.spec.js b/test/features/editable.spec.js index 4d90d4ef..a24e09ed 100644 --- a/test/features/editable.spec.js +++ b/test/features/editable.spec.js @@ -2,133 +2,132 @@ var Tree = require('../../src/js/tree'); var util = require('../../src/js/util'); describe('Tree', function() { - var tree, treeEditable, rootNodeId; - var firstChildId, lastChildId; - var firstChildElement, lastChildElement; - var data = [ - {title: 'A', state: 'closed', children: [{title: '1'}, {title: '2'}, {title: '3'}]}, - {title: 'B'} - ]; - var WRAPPER_CLASSNAME = 'tui-input-wrap'; - - beforeEach(function() { - loadFixtures('basicFixture.html'); - - tree = new Tree('tree', { - rootElement: 'treeRoot', - data: data, - template: { - internalNode: - '' + - '{{title}}' + - '
        {{children}}
      ', - leafNode: - '{{title}}' - } - }); - - rootNodeId = tree.getRootNodeId(); - firstChildId = tree.getChildIds(rootNodeId)[0]; - lastChildId = tree.getChildIds(rootNodeId)[1]; - - firstChildElement = document.getElementById(firstChildId); - lastChildElement = document.getElementById(lastChildId); - - tree.enableFeature('Editable', { - dataKey: 'text' - }); - - treeEditable = tree.enabledFeatures.Editable; + var tree, treeEditable, rootNodeId; + var firstChildId, lastChildId; + var firstChildElement, lastChildElement; + var data = [ + {title: 'A', state: 'closed', children: [{title: '1'}, {title: '2'}, {title: '3'}]}, + {title: 'B'} + ]; + var WRAPPER_CLASSNAME = 'tui-input-wrap'; + + beforeEach(function() { + loadFixtures('basicFixture.html'); + + tree = new Tree('tree', { + rootElement: 'treeRoot', + data: data, + template: { + internalNode: + '' + + '{{title}}' + + '
        {{children}}
      ', + leafNode: '{{title}}' + } }); - describe('createChildNode()', function() { - it('should show children nodes when parent node is not leaf node.', function() { - var stateLabel; - var toggleBtnClass = tree.classNames.toggleBtnClass; - var expected = tree.stateLabels.closed; + rootNodeId = tree.getRootNodeId(); + firstChildId = tree.getChildIds(rootNodeId)[0]; + lastChildId = tree.getChildIds(rootNodeId)[1]; - tree.createChildNode(firstChildId); + firstChildElement = document.getElementById(firstChildId); + lastChildElement = document.getElementById(lastChildId); - stateLabel = util.getElementsByClassName(firstChildElement, toggleBtnClass)[0]; - - expect(stateLabel.innerHTML).toBe(expected); - }); + tree.enableFeature('Editable', { + dataKey: 'text' + }); - it('should add toggle button when parent node is leaf node.', function() { - var stateLabels; - var toggleBtnClass = tree.classNames.toggleBtnClass; - var expected = tree.stateLabels.closed; + treeEditable = tree.enabledFeatures.Editable; + }); - tree.createChildNode(lastChildId); + describe('createChildNode()', function() { + it('should show children nodes when parent node is not leaf node.', function() { + var stateLabel; + var toggleBtnClass = tree.classNames.toggleBtnClass; + var expected = tree.stateLabels.closed; - stateLabels = util.getElementsByClassName(lastChildElement, toggleBtnClass); + tree.createChildNode(firstChildId); - expect(stateLabels.length).toBe(1); - expect(stateLabels[0].innerHTML).toBe(expected); - }); + stateLabel = util.getElementsByClassName(firstChildElement, toggleBtnClass)[0]; - it('should fire "successResponse" when Ajax feature is enabled.', function() { - jasmine.Ajax.install(); + expect(stateLabel.innerHTML).toBe(expected); + }); - spyOn(treeEditable, '_onSuccessResponse'); + it('should add toggle button when parent node is leaf node.', function() { + var stateLabels; + var toggleBtnClass = tree.classNames.toggleBtnClass; + var expected = tree.stateLabels.closed; - tree.enableFeature('Ajax', { - command: { - read: { - url: 'api/test' - } - } - }); - tree.createChildNode(lastChildId); - tree.fire('successAjaxResponse'); + tree.createChildNode(lastChildId); - expect(treeEditable._onSuccessResponse).toHaveBeenCalled(); + stateLabels = util.getElementsByClassName(lastChildElement, toggleBtnClass); - jasmine.Ajax.uninstall(); - }); + expect(stateLabels.length).toBe(1); + expect(stateLabels[0].innerHTML).toBe(expected); }); - it('"editNode()" should create input element in selected node.', function() { - var inputElements = firstChildElement.getElementsByTagName('input'); + it('should fire "successResponse" when Ajax feature is enabled.', function() { + jasmine.Ajax.install(); - tree.editNode(firstChildId); - expect(inputElements.length).toBe(1); - }); + spyOn(treeEditable, '_onSuccessResponse'); + + tree.enableFeature('Ajax', { + command: { + read: { + url: 'api/test' + } + } + }); + tree.createChildNode(lastChildId); + tree.fire('successAjaxResponse'); - it('"_attachInputElement" should attach the input element to selected node.', function() { - treeEditable._attachInputElement(firstChildId); + expect(treeEditable._onSuccessResponse).toHaveBeenCalled(); - expect(util.getElementsByClassName(firstChildElement, WRAPPER_CLASSNAME).length).toBe(1); + jasmine.Ajax.uninstall(); }); + }); - it('should calculate input element\'s paddingLeft by it\'s depth when editable feature is enabled.', function() { - /* expected padding-left: 23 */ + it('"editNode()" should create input element in selected node.', function() { + var inputElements = firstChildElement.getElementsByTagName('input'); - var nodeElements = util.getElementsByClassName(tree.rootElement, 'tui-tree-node'); - var inputWrapper, result; + tree.editNode(firstChildId); + expect(inputElements.length).toBe(1); + }); - tree.editNode(nodeElements[0].id); // depth 1 - inputWrapper = util.getChildElementByClassName(nodeElements[0], WRAPPER_CLASSNAME); - result = tree.getIndentWidth(nodeElements[0].id); + it('"_attachInputElement" should attach the input element to selected node.', function() { + treeEditable._attachInputElement(firstChildId); - expect(inputWrapper.style.paddingLeft).toBe(result + 'px'); + expect(util.getElementsByClassName(firstChildElement, WRAPPER_CLASSNAME).length).toBe(1); + }); - tree.editNode(nodeElements[1].id); // depth 2 - inputWrapper = util.getChildElementByClassName(nodeElements[1], WRAPPER_CLASSNAME); - result = tree.getIndentWidth(nodeElements[1].id); + it("should calculate input element's paddingLeft by it's depth when editable feature is enabled.", function() { + /* expected padding-left: 23 */ - expect(inputWrapper.style.paddingLeft).toBe(result + 'px'); - }); + var nodeElements = util.getElementsByClassName(tree.rootElement, 'tui-tree-node'); + var inputWrapper, result; - it('"finishEditing()" should remove input element of editing node', function() { - var inputElements; + tree.editNode(nodeElements[0].id); // depth 1 + inputWrapper = util.getChildElementByClassName(nodeElements[0], WRAPPER_CLASSNAME); + result = tree.getIndentWidth(nodeElements[0].id); - tree.editNode(firstChildId); - inputElements = firstChildElement.getElementsByTagName('input'); - expect(inputElements.length).toBe(1); + expect(inputWrapper.style.paddingLeft).toBe(result + 'px'); - tree.finishEditing(); - inputElements = firstChildElement.getElementsByTagName('input'); - expect(inputElements.length).toBe(0); - }); + tree.editNode(nodeElements[1].id); // depth 2 + inputWrapper = util.getChildElementByClassName(nodeElements[1], WRAPPER_CLASSNAME); + result = tree.getIndentWidth(nodeElements[1].id); + + expect(inputWrapper.style.paddingLeft).toBe(result + 'px'); + }); + + it('"finishEditing()" should remove input element of editing node', function() { + var inputElements; + + tree.editNode(firstChildId); + inputElements = firstChildElement.getElementsByTagName('input'); + expect(inputElements.length).toBe(1); + + tree.finishEditing(); + inputElements = firstChildElement.getElementsByTagName('input'); + expect(inputElements.length).toBe(0); + }); }); diff --git a/test/features/selectable.spec.js b/test/features/selectable.spec.js index f31402f3..0c74c179 100644 --- a/test/features/selectable.spec.js +++ b/test/features/selectable.spec.js @@ -1,192 +1,188 @@ var Tree = require('../../src/js/tree'), - messages = require('../../src/js/consts/messages'); + messages = require('../../src/js/consts/messages'); describe('Tree', function() { - var data = [ + var data = [ + { + title: 'A', + children: [ + {title: '1'}, + {title: '2'}, + {title: '3'}, + {title: '4'}, { - title: 'A', - children: [ - {title: '1'}, - {title: '2'}, - {title: '3'}, - {title: '4'}, - { - title: '5', - children: [ - {title: 'κ°€', children: [{title: '*'}]}, - {title: 'λ‚˜'} - ] - }, - {title: '6'}, - {title: '7'}, - {title: '8'}, - {title: '9', children: [{title: 'κ°€'}, {title: 'λ‚˜'}]}, - {title: '10'}, - {title: '11'}, - {title: '12'} - ] + title: '5', + children: [{title: 'κ°€', children: [{title: '*'}]}, {title: 'λ‚˜'}] }, - {title: 'B', children: [{title: '1'}, {title: '2'}, {title: '3'}]} - ]; - var $rootElement, tree, treeSelection; + {title: '6'}, + {title: '7'}, + {title: '8'}, + {title: '9', children: [{title: 'κ°€'}, {title: 'λ‚˜'}]}, + {title: '10'}, + {title: '11'}, + {title: '12'} + ] + }, + {title: 'B', children: [{title: '1'}, {title: '2'}, {title: '3'}]} + ]; + var $rootElement, tree, treeSelection; + + beforeEach(function() { + loadFixtures('basicFixture.html'); + + tree = new Tree('tree', { + rootElement: 'treeRoot', + data: data + }); + + $rootElement = $(tree.rootElement); + tree.enableFeature('Selectable'); + + // "tree.enabledFeatures.Selectable" is not constructor but instance. + treeSelection = tree.enabledFeatures.Selectable; + }); + + describe('events', function() { + var eventMock, target; beforeEach(function() { - loadFixtures('basicFixture.html'); + target = $rootElement.find('.tui-tree-node')[2]; + eventMock = { + target: target + }; + }); + + it('should not invoke "beforeSelect" if the selected node does not exist', function() { + var spyListener = jasmine.createSpy(); + eventMock = { + target: null + }; + + tree.on('beforeSelect', spyListener); + tree.fire('singleClick', eventMock); + + expect(spyListener).not.toHaveBeenCalled(); + }); + + it('should invoke "beforeSelect" if the selected node exists', function() { + var beforeSelectListenerSpy = jasmine.createSpy(); + + tree.on('beforeSelect', beforeSelectListenerSpy); + treeSelection.onSingleClick(eventMock); - tree = new Tree('tree', { - rootElement: 'treeRoot', - data: data - }); + expect(beforeSelectListenerSpy).toHaveBeenCalled(); + }); + + it('should fire "select" event if the "beforeSelect"-listener does not return false', function() { + var selectListenerSpy = jasmine.createSpy(); - $rootElement = $(tree.rootElement); - tree.enableFeature('Selectable'); + tree.on('beforeSelect', function() { + return ''; + }); + tree.on('select', selectListenerSpy); + treeSelection.onSingleClick(eventMock); - // "tree.enabledFeatures.Selectable" is not constructor but instance. - treeSelection = tree.enabledFeatures.Selectable; + expect(selectListenerSpy).toHaveBeenCalled(); }); - describe('events', function() { - var eventMock, - target; - - beforeEach(function() { - target = $rootElement.find('.tui-tree-node')[2]; - eventMock = { - target: target - }; - }); - - it('should not invoke "beforeSelect" if the selected node does not exist', function() { - var spyListener = jasmine.createSpy(); - eventMock = { - target: null - }; - - tree.on('beforeSelect', spyListener); - tree.fire('singleClick', eventMock); - - expect(spyListener).not.toHaveBeenCalled(); - }); - - it('should invoke "beforeSelect" if the selected node exists', function() { - var beforeSelectListenerSpy = jasmine.createSpy(); - - tree.on('beforeSelect', beforeSelectListenerSpy); - treeSelection.onSingleClick(eventMock); - - expect(beforeSelectListenerSpy).toHaveBeenCalled(); - }); - - it('should fire "select" event if the "beforeSelect"-listener does not return false', function() { - var selectListenerSpy = jasmine.createSpy(); - - tree.on('beforeSelect', function() { - return ''; - }); - tree.on('select', selectListenerSpy); - treeSelection.onSingleClick(eventMock); - - expect(selectListenerSpy).toHaveBeenCalled(); - }); - - it('should not fire "select" event if the "beforeSelect"-listener returns false', function() { - var selectListenerSpy = jasmine.createSpy(); - - tree.on('beforeSelect', function() { - return false; - }); - tree.on('select', selectListenerSpy); - treeSelection.onSingleClick(eventMock); - - expect(selectListenerSpy).not.toHaveBeenCalled(); - }); - - it('should fire custom events with args containing "nodeId" and "prevNodeId"', function() { - var beforeSelectListenerSpy = jasmine.createSpy(), - selectListenerSpy = jasmine.createSpy(), - curNodeId = target.id, - prevNodeId = 'previousNodeId', - expected; - - treeSelection.selectedNodeId = prevNodeId; - tree.on('beforeSelect', beforeSelectListenerSpy); - tree.on('select', selectListenerSpy); - treeSelection.onSingleClick(eventMock); - - expected = { - nodeId: curNodeId, - prevNodeId: prevNodeId, - target: target - }; - - expect(beforeSelectListenerSpy).toHaveBeenCalledWith(expected); - expect(selectListenerSpy).toHaveBeenCalledWith(expected); - }); + it('should not fire "select" event if the "beforeSelect"-listener returns false', function() { + var selectListenerSpy = jasmine.createSpy(); + + tree.on('beforeSelect', function() { + return false; + }); + tree.on('select', selectListenerSpy); + treeSelection.onSingleClick(eventMock); + + expect(selectListenerSpy).not.toHaveBeenCalled(); }); - describe('API', function() { - it('should throw error when the feature-"Selectable" is not enabled', function() { - tree.disableFeature('Selectable'); - expect(tree.select).toThrowError(messages.INVALID_API_SELECTABLE); - expect(tree.getSelectedNodeId).toThrowError(messages.INVALID_API_SELECTABLE); - }); + it('should fire custom events with args containing "nodeId" and "prevNodeId"', function() { + var beforeSelectListenerSpy = jasmine.createSpy(), + selectListenerSpy = jasmine.createSpy(), + curNodeId = target.id, + prevNodeId = 'previousNodeId', + expected; + + treeSelection.selectedNodeId = prevNodeId; + tree.on('beforeSelect', beforeSelectListenerSpy); + tree.on('select', selectListenerSpy); + treeSelection.onSingleClick(eventMock); + + expected = { + nodeId: curNodeId, + prevNodeId: prevNodeId, + target: target + }; + + expect(beforeSelectListenerSpy).toHaveBeenCalledWith(expected); + expect(selectListenerSpy).toHaveBeenCalledWith(expected); + }); + }); - it('should invoke "beforeSelect" and fire "select"', function() { - var beforeSelectListenerSpy = jasmine.createSpy(), - selectListenerSpy = jasmine.createSpy(), - targetId = $rootElement.find('.tui-tree-node')[2].id; + describe('API', function() { + it('should throw error when the feature-"Selectable" is not enabled', function() { + tree.disableFeature('Selectable'); + expect(tree.select).toThrowError(messages.INVALID_API_SELECTABLE); + expect(tree.getSelectedNodeId).toThrowError(messages.INVALID_API_SELECTABLE); + }); - tree.on({ - beforeSelect: beforeSelectListenerSpy, - select: selectListenerSpy - }); - tree.select(targetId); + it('should invoke "beforeSelect" and fire "select"', function() { + var beforeSelectListenerSpy = jasmine.createSpy(), + selectListenerSpy = jasmine.createSpy(), + targetId = $rootElement.find('.tui-tree-node')[2].id; - expect(beforeSelectListenerSpy).toHaveBeenCalled(); - expect(selectListenerSpy).toHaveBeenCalled(); - }); + tree.on({ + beforeSelect: beforeSelectListenerSpy, + select: selectListenerSpy + }); + tree.select(targetId); - it('should have "getSelectedNodeId" api', function() { - var targetId = $rootElement.find('.tui-tree-node')[2].id; + expect(beforeSelectListenerSpy).toHaveBeenCalled(); + expect(selectListenerSpy).toHaveBeenCalled(); + }); - tree.select(targetId); - expect(tree.getSelectedNodeId()).toEqual(targetId); - }); + it('should have "getSelectedNodeId" api', function() { + var targetId = $rootElement.find('.tui-tree-node')[2].id; - it('deselect() should reset node state after selecting.', function() { - var nodeId = $rootElement.find('.tui-tree-node')[0].id; - var className = treeSelection.selectedClassName; - var selectedNode; + tree.select(targetId); + expect(tree.getSelectedNodeId()).toEqual(targetId); + }); - tree.select(nodeId); - tree.deselect(); + it('deselect() should reset node state after selecting.', function() { + var nodeId = $rootElement.find('.tui-tree-node')[0].id; + var className = treeSelection.selectedClassName; + var selectedNode; - selectedNode = $rootElement.find('#' + nodeId); + tree.select(nodeId); + tree.deselect(); - expect(selectedNode.hasClass(className)).toBe(false); - }); + selectedNode = $rootElement.find('#' + nodeId); - it('deselect() should invoke "deselect" event.', function() { - var nodeId = $rootElement.find('.tui-tree-node')[0].id; - var handler = jasmine.createSpy(); + expect(selectedNode.hasClass(className)).toBe(false); + }); - tree.select(nodeId); - tree.on('deselect', handler); - tree.deselect(); + it('deselect() should invoke "deselect" event.', function() { + var nodeId = $rootElement.find('.tui-tree-node')[0].id; + var handler = jasmine.createSpy(); - expect(handler).toHaveBeenCalled(); - }); + tree.select(nodeId); + tree.on('deselect', handler); + tree.deselect(); + + expect(handler).toHaveBeenCalled(); + }); - it('deselect() should not invoke "deselect" event when node is removed.', function() { - var nodeId = $rootElement.find('.tui-tree-node')[0].id; - var handler = jasmine.createSpy(); + it('deselect() should not invoke "deselect" event when node is removed.', function() { + var nodeId = $rootElement.find('.tui-tree-node')[0].id; + var handler = jasmine.createSpy(); - tree.select(nodeId); - tree.remove(nodeId); - tree.on('deselect', handler); - tree.deselect(); + tree.select(nodeId); + tree.remove(nodeId); + tree.on('deselect', handler); + tree.deselect(); - expect(handler).not.toHaveBeenCalled(); - }); + expect(handler).not.toHaveBeenCalled(); }); + }); }); diff --git a/test/tree.spec.js b/test/tree.spec.js index 1925bbc9..d2038c03 100644 --- a/test/tree.spec.js +++ b/test/tree.spec.js @@ -1,394 +1,380 @@ var snippet = require('tui-code-snippet'); var Tree = require('../src/js/tree'), - util = require('../src/js/util'), - messages = require('../src/js/consts/messages'); + util = require('../src/js/util'), + messages = require('../src/js/consts/messages'); describe('Tree', function() { - var data = [ - { - text: 'A', - children: [ - {text: '1'}, - {text: '2'}, - {text: '3'}, - {text: '4'}, - {text: '5', children: [{text: 'κ°€', children: [{text: '*'}]}, {text: 'λ‚˜'}]}, - {text: '6'}, - {text: '7'}, - {text: '8'}, - {text: '9', children: [{text: 'κ°€'}, {text: 'λ‚˜'}]}, - {text: '10'}, - {text: '11'}, - {text: '12'} - ] + var data = [ + { + text: 'A', + children: [ + {text: '1'}, + {text: '2'}, + {text: '3'}, + {text: '4'}, + {text: '5', children: [{text: 'κ°€', children: [{text: '*'}]}, {text: 'λ‚˜'}]}, + {text: '6'}, + {text: '7'}, + {text: '8'}, + {text: '9', children: [{text: 'κ°€'}, {text: 'λ‚˜'}]}, + {text: '10'}, + {text: '11'}, + {text: '12'} + ] + }, + { + text: 'B', + children: [{text: '1'}, {text: '2'}, {text: '3'}, {text: '4'}, {text: '5'}] + } + ]; + var $rootElement, tree, firstChildId, lastChildId, grandChildId, firstChild, container; + + describe('function', function() { + beforeEach(function() { + loadFixtures('basicFixture.html'); + + container = 'tree'; + + tree = new Tree(container, { + rootElement: 'treeRoot', + data: data, + template: { + leafNode: + '' + + '{{text}}' + } + }); + $rootElement = $(tree.rootElement); + firstChildId = tree.model.rootNode.getChildIds()[0]; + firstChild = tree.model.getNode(firstChildId); + lastChildId = tree.model.rootNode.getChildIds().slice(-1)[0]; // slice(-1) returns a value of last index + grandChildId = tree.model.getNode(firstChildId).getChildIds()[0]; + }); + + it('should throw an error if has invalid root element', function() { + expect(function() { + return new Tree('tree2'); + }).toThrowError(messages.INVALID_CONTAINER_ELEMENT); + }); + + it('should have a root element', function() { + // Node.ELEMENT_NODE === 1 + // in IE8, + // element instanceof HTMLElement --> error + // element.nodeType === Node.ELEMENT_NODE --> error + expect(tree.rootElement.nodeType).toEqual(1); + }); + + it('should make correct DOM', function() { + var textElement = $rootElement.find('.tui-tree-node .tui-tree-text')[0]; + var textNode = util.getFirstTextNode(textElement); + + expect(textNode.nodeValue).toEqual('A'); + }); + + it('should make DOM from optional-template', function() { + var $leafNodes = $rootElement.find('.tui-tree-leaf'), + $leafLabels = $leafNodes.find('.tui-tree-leaf-label'); + + expect($leafLabels.length).toEqual($leafNodes.length); + }); + + it('"open()" should change state of a node to "opened"', function() { + tree.open(firstChildId); + expect(firstChild.getState()).toEqual('opened'); + }); + + it('"close()" should change state of a node to "closed"', function() { + tree.close(firstChildId); + expect(firstChild.getState()).toEqual('closed'); + }); + + it('"toggle()" should toggle state of a node', function() { + tree.open(firstChildId); + tree.toggle(firstChildId); + expect(firstChild.getState()).toEqual('closed'); + + tree.toggle(firstChildId); + expect(firstChild.getState()).toEqual('opened'); + }); + + it('should fire singleClick event', function() { + var handler = jasmine.createSpy('singleClick handler'), + eventMock = { + target: document.createElement('DIV') + }; + + jasmine.clock().uninstall(); + jasmine.clock().install(); + + tree.on('singleClick', handler); + tree.clickTimer = null; // No clicked + tree._onClick(eventMock); // Single click + + jasmine.clock().tick(401); + + expect(handler).toHaveBeenCalled(); + jasmine.clock().uninstall(); + }); + + it('"open(), close()" should change button label', function() { + var firstChildElement = document.getElementById(firstChildId), + btnElement = $(firstChildElement).find('.' + tree.classNames.toggleBtnClass)[0], + textNode = util.getFirstTextNode(btnElement); + + tree.close(firstChildId); + expect(textNode.nodeValue).toEqual(tree.stateLabels.closed); + + tree.open(firstChildId); + expect(textNode.nodeValue).toEqual(tree.stateLabels.opened); + }); + + describe('"open(), close()" recursive action', function() { + var oneDepthId; + var twoDepthId; + var lastDepthId; + var oneDepthNode; + var twoDepthNode; + var lastDepthNode; + + beforeEach(function() { + oneDepthId = tree.model.rootNode.getChildIds()[0]; + oneDepthNode = tree.model.getNode(oneDepthId); + twoDepthId = oneDepthNode.getChildIds()[4]; + twoDepthNode = tree.model.getNode(twoDepthId); + lastDepthId = twoDepthNode.getChildIds()[0]; + lastDepthNode = tree.model.getNode(lastDepthId); + }); + + it('"open()" use recursive option should change the state of all parent nodes to "open"', function() { + tree.open(lastDepthId, true); + + expect(oneDepthNode.getState()).toBe('opened'); + expect(twoDepthNode.getState()).toBe('opened'); + expect(lastDepthNode.getState()).toBe('opened'); + }); + + it('"close()" use recursive option should change the state of all children nodes to "close"', function() { + tree.open(tree.model.rootNode.getChildIds()[0]); + tree.open(oneDepthNode.getChildIds()[4]); + tree.open(twoDepthNode.getChildIds()[0]); + + tree.close(tree.model.rootNode.getChildIds()[0], true); + + expect(oneDepthNode.getState()).toBe('closed'); + expect(twoDepthNode.getState()).toBe('closed'); + expect(lastDepthNode.getState()).toBe('closed'); + }); + }); + + it('should fire doubleClick event', function() { + var handler = jasmine.createSpy('doubleClick handler'), + eventMock = { + target: document.createElement('DIV') + }; + + tree.on('doubleClick', handler); + tree._onDoubleClick(eventMock); + + expect(handler).toHaveBeenCalled(); + }); + + it('"add() with no "isSilent" flag" should redraw nodes', function() { + var childCount = firstChild.getChildIds().length; + var subtreeElement; + var testData = [{text: 'hello world'}, {text: 'new world'}]; + + spyOn(tree, '_draw').and.callThrough(); + + tree.add(testData, firstChildId); + subtreeElement = document.getElementById(firstChildId).lastChild; + + expect(firstChild.getChildIds().length).toEqual(childCount + 2); + expect(subtreeElement.childNodes.length).toEqual(childCount + 2); + }); + + it('"add()" should return node ids of new added nodes', function() { + var testData = [ + {text: 'hello world', children: [{text: 'foo'}, {text: 'bar'}]}, + {text: 'new world'} + ]; + var ids = tree.add(testData, firstChildId, false, false); + + expect(ids).toEqual(jasmine.any(Array)); + expect(ids.length).toEqual(2); + }); + + it('"remove()" should redraw nodes without removed node(s)', function() { + var childCount = firstChild.getChildIds().length, + idForRemoving = firstChild.getChildIds()[0], + subtreeElement; + + tree.remove(idForRemoving); + subtreeElement = document.getElementById(firstChildId).lastChild; + + expect(document.getElementById(idForRemoving)).toBeFalsy(); + expect(firstChild.getChildIds().length).toEqual(childCount - 1); + expect(subtreeElement.childNodes.length).toEqual(childCount - 1); + }); + + it('"move()" should redraw nodes with a moved node', function() { + var firstChildElement, lastChildElement, grandChildElement; + + tree.move(grandChildId, lastChildId); + firstChildElement = document.getElementById(firstChildId); + lastChildElement = document.getElementById(lastChildId); + grandChildElement = document.getElementById(grandChildId); + + expect(firstChildElement.contains(grandChildElement)).toBe(false); + expect(lastChildElement.contains(grandChildElement)).toBe(true); + }); + + it('"move()" should fire "move" event with some related ids', function() { + var mock = jasmine.createSpy('move event handler'); + var index = -1; + + tree.on('move', mock); + tree.move(grandChildId, lastChildId, index); + + expect(mock).toHaveBeenCalledWith({ + nodeId: grandChildId, + originalParentId: firstChildId, + newParentId: lastChildId, + index: index + }); + }); + + it('"search()" should return array of node ids', function() { + var result = tree.search({ + text: '5' + }); + expect(result).toEqual(jasmine.any(Array)); + expect(result.length).toEqual(2); + + result = tree.search(function(node) { + var text = node.getData('text'); + + return text === 'κ°€' || text === 'λ‚˜'; + }); + expect(result).toEqual(jasmine.any(Array)); + expect(result.length).toEqual(4); + }); + + it('option:"renderTemplate" should override template renderer', function() { + var templateRenderer = jasmine.createSpy().and.callFake(function(source, props) { + return util.renderTemplate(source, props); + }); + + tree = new Tree(container, { + rootElement: 'treeRoot', + data: data, + template: { + leafNode: + '' + + '{{text}}' }, + renderTemplate: templateRenderer + }); + expect(templateRenderer).toHaveBeenCalled(); + }); + + it('"removeAllChildren()" should remove all child nodes', function() { + var rootNodeId = tree.getRootNodeId(); + + tree.removeAllChildren(firstChildId); + expect(tree.getChildIds(firstChildId).length).toBe(0); + expect(tree.getChildIds(rootNodeId).length).toBe(2); + + tree.removeAllChildren(rootNodeId); + expect(tree.getChildIds(rootNodeId).length).toBe(0); + }); + + it('"resetAllData()" should reset all nodes from new data', function() { + var testData = [{text: 'hello'}, {text: 'wolrd'}]; + var newChildIds = tree.resetAllData(testData); + var rootNodeId = tree.getRootNodeId(); + + expect(newChildIds.length).toBe(2); + expect(tree.getChildIds(rootNodeId)).toEqual(newChildIds); + expect($rootElement.children().length).toBe(2); + }); + + it('"getNodeIndex()" should return index number of selected node in children list', function() { + var testData = [{text: 'child1'}, {text: 'child2'}]; + var newChildIds = tree.resetAllData(testData); + var prevNodeIdx = tree.getNodeIndex(newChildIds[1]); + + expect(prevNodeIdx).toEqual(1); + }); + + it('When "resetAllData()" have nodeId parameter, it should reset children data of nodeId', function() { + var testData = [{text: 'A'}, {text: 'B'}]; + var nodeId = tree.getChildIds(tree.getRootNodeId())[0]; + var newChildIds = tree.resetAllData(testData, nodeId); + + expect(tree.getNodeData(newChildIds[0])).toEqual({text: 'A'}); + expect(tree.getNodeData(newChildIds[1])).toEqual({text: 'B'}); + }); + + it('"getIndentWidth()" should return padding left by element\'s depth', function() { + var treeData = [ { - text: 'B', - children: [{text: '1'}, {text: '2'}, {text: '3'}, {text: '4'}, {text: '5'}] - } - ]; - var $rootElement, - tree, - firstChildId, lastChildId, grandChildId, - firstChild, - container; - - describe('function', function() { - beforeEach(function() { - loadFixtures('basicFixture.html'); - - container = 'tree'; - - tree = new Tree(container, { - rootElement: 'treeRoot', - data: data, - template: { - leafNode: - '' + - '{{text}}' + text: 'A', + children: [ + { + text: '1', + children: [ + { + text: 'κ°€', + children: [{text: '*'}, {text: '#', children: [{text: 'a'}]}, {text: '@'}] } - }); - $rootElement = $(tree.rootElement); - firstChildId = tree.model.rootNode.getChildIds()[0]; - firstChild = tree.model.getNode(firstChildId); - lastChildId = tree.model.rootNode.getChildIds().slice(-1)[0]; // slice(-1) returns a value of last index - grandChildId = tree.model.getNode(firstChildId).getChildIds()[0]; - }); - - it('should throw an error if has invalid root element', function() { - expect(function() { - return new Tree('tree2'); - }).toThrowError(messages.INVALID_CONTAINER_ELEMENT); - }); - - it('should have a root element', function() { - // Node.ELEMENT_NODE === 1 - // in IE8, - // element instanceof HTMLElement --> error - // element.nodeType === Node.ELEMENT_NODE --> error - expect(tree.rootElement.nodeType).toEqual(1); - }); - - it('should make correct DOM', function() { - var textElement = $rootElement.find('.tui-tree-node .tui-tree-text')[0]; - var textNode = util.getFirstTextNode(textElement); - - expect(textNode.nodeValue).toEqual('A'); - }); - - it('should make DOM from optional-template', function() { - var $leafNodes = $rootElement.find('.tui-tree-leaf'), - $leafLabels = $leafNodes.find('.tui-tree-leaf-label'); - - expect($leafLabels.length).toEqual($leafNodes.length); - }); - - it('"open()" should change state of a node to "opened"', function() { - tree.open(firstChildId); - expect(firstChild.getState()).toEqual('opened'); - }); - - it('"close()" should change state of a node to "closed"', function() { - tree.close(firstChildId); - expect(firstChild.getState()).toEqual('closed'); - }); - - it('"toggle()" should toggle state of a node', function() { - tree.open(firstChildId); - tree.toggle(firstChildId); - expect(firstChild.getState()).toEqual('closed'); - - tree.toggle(firstChildId); - expect(firstChild.getState()).toEqual('opened'); - }); - - it('should fire singleClick event', function() { - var handler = jasmine.createSpy('singleClick handler'), - eventMock = { - target: document.createElement('DIV') - }; - - jasmine.clock().uninstall(); - jasmine.clock().install(); - - tree.on('singleClick', handler); - tree.clickTimer = null; // No clicked - tree._onClick(eventMock); // Single click - - jasmine.clock().tick(401); - - expect(handler).toHaveBeenCalled(); - jasmine.clock().uninstall(); - }); - - it('"open(), close()" should change button label', function() { - var firstChildElement = document.getElementById(firstChildId), - btnElement = $(firstChildElement).find('.' + tree.classNames.toggleBtnClass)[0], - textNode = util.getFirstTextNode(btnElement); - - tree.close(firstChildId); - expect(textNode.nodeValue).toEqual(tree.stateLabels.closed); - - tree.open(firstChildId); - expect(textNode.nodeValue).toEqual(tree.stateLabels.opened); - }); - - describe('"open(), close()" recursive action', function() { - var oneDepthId; - var twoDepthId; - var lastDepthId; - var oneDepthNode; - var twoDepthNode; - var lastDepthNode; - - beforeEach(function() { - oneDepthId = tree.model.rootNode.getChildIds()[0]; - oneDepthNode = tree.model.getNode(oneDepthId); - twoDepthId = oneDepthNode.getChildIds()[4]; - twoDepthNode = tree.model.getNode(twoDepthId); - lastDepthId = twoDepthNode.getChildIds()[0]; - lastDepthNode = tree.model.getNode(lastDepthId); - }); - - it('"open()" use recursive option should change the state of all parent nodes to "open"', function() { - tree.open(lastDepthId, true); - - expect(oneDepthNode.getState()).toBe('opened'); - expect(twoDepthNode.getState()).toBe('opened'); - expect(lastDepthNode.getState()).toBe('opened'); - }); - - it('"close()" use recursive option should change the state of all children nodes to "close"', function() { - tree.open(tree.model.rootNode.getChildIds()[0]); - tree.open(oneDepthNode.getChildIds()[4]); - tree.open(twoDepthNode.getChildIds()[0]); - - tree.close(tree.model.rootNode.getChildIds()[0], true); - - expect(oneDepthNode.getState()).toBe('closed'); - expect(twoDepthNode.getState()).toBe('closed'); - expect(lastDepthNode.getState()).toBe('closed'); - }); - }); - - it('should fire doubleClick event', function() { - var handler = jasmine.createSpy('doubleClick handler'), - eventMock = { - target: document.createElement('DIV') - }; - - tree.on('doubleClick', handler); - tree._onDoubleClick(eventMock); - - expect(handler).toHaveBeenCalled(); - }); - - it('"add() with no "isSilent" flag" should redraw nodes', function() { - var childCount = firstChild.getChildIds().length; - var subtreeElement; - var testData = [ - {text: 'hello world'}, - {text: 'new world'} - ]; - - spyOn(tree, '_draw').and.callThrough(); - - tree.add(testData, firstChildId); - subtreeElement = document.getElementById(firstChildId).lastChild; - - expect(firstChild.getChildIds().length).toEqual(childCount + 2); - expect(subtreeElement.childNodes.length).toEqual(childCount + 2); - }); - - it('"add()" should return node ids of new added nodes', function() { - var testData = [ - {text: 'hello world', children: [{text: 'foo'}, {text: 'bar'}]}, - {text: 'new world'} - ]; - var ids = tree.add(testData, firstChildId, false, false); - - expect(ids).toEqual(jasmine.any(Array)); - expect(ids.length).toEqual(2); - }); - - it('"remove()" should redraw nodes without removed node(s)', function() { - var childCount = firstChild.getChildIds().length, - idForRemoving = firstChild.getChildIds()[0], - subtreeElement; - - tree.remove(idForRemoving); - subtreeElement = document.getElementById(firstChildId).lastChild; - - expect(document.getElementById(idForRemoving)).toBeFalsy(); - expect(firstChild.getChildIds().length).toEqual(childCount - 1); - expect(subtreeElement.childNodes.length).toEqual(childCount - 1); - }); - - it('"move()" should redraw nodes with a moved node', function() { - var firstChildElement, lastChildElement, grandChildElement; - - tree.move(grandChildId, lastChildId); - firstChildElement = document.getElementById(firstChildId); - lastChildElement = document.getElementById(lastChildId); - grandChildElement = document.getElementById(grandChildId); - - expect(firstChildElement.contains(grandChildElement)).toBe(false); - expect(lastChildElement.contains(grandChildElement)).toBe(true); - }); - - it('"move()" should fire "move" event with some related ids', function() { - var mock = jasmine.createSpy('move event handler'); - var index = -1; - - tree.on('move', mock); - tree.move(grandChildId, lastChildId, index); - - expect(mock).toHaveBeenCalledWith({ - nodeId: grandChildId, - originalParentId: firstChildId, - newParentId: lastChildId, - index: index - }); - }); - - it('"search()" should return array of node ids', function() { - var result = tree.search({ - text: '5' - }); - expect(result).toEqual(jasmine.any(Array)); - expect(result.length).toEqual(2); - - result = tree.search(function(node) { - var text = node.getData('text'); - - return text === 'κ°€' || text === 'λ‚˜'; - }); - expect(result).toEqual(jasmine.any(Array)); - expect(result.length).toEqual(4); - }); - - it('option:"renderTemplate" should override template renderer', function() { - var templateRenderer = jasmine.createSpy().and.callFake(function(source, props) { - return util.renderTemplate(source, props); - }); - - tree = new Tree(container, { - rootElement: 'treeRoot', - data: data, - template: { - leafNode: - '' + - '{{text}}' - }, - renderTemplate: templateRenderer - }); - expect(templateRenderer).toHaveBeenCalled(); - }); - - it('"removeAllChildren()" should remove all child nodes', function() { - var rootNodeId = tree.getRootNodeId(); - - tree.removeAllChildren(firstChildId); - expect(tree.getChildIds(firstChildId).length).toBe(0); - expect(tree.getChildIds(rootNodeId).length).toBe(2); - - tree.removeAllChildren(rootNodeId); - expect(tree.getChildIds(rootNodeId).length).toBe(0); - }); - - it('"resetAllData()" should reset all nodes from new data', function() { - var testData = [ - {text: 'hello'}, - {text: 'wolrd'} - ]; - var newChildIds = tree.resetAllData(testData); - var rootNodeId = tree.getRootNodeId(); - - expect(newChildIds.length).toBe(2); - expect(tree.getChildIds(rootNodeId)).toEqual(newChildIds); - expect($rootElement.children().length).toBe(2); - }); - - it('"getNodeIndex()" should return index number of selected node in children list', function() { - var testData = [ - {text: 'child1'}, - {text: 'child2'} - ]; - var newChildIds = tree.resetAllData(testData); - var prevNodeIdx = tree.getNodeIndex(newChildIds[1]); - - expect(prevNodeIdx).toEqual(1); - }); - - it('When "resetAllData()" have nodeId parameter, it should reset children data of nodeId', function() { - var testData = [ - {text: 'A'}, - {text: 'B'} - ]; - var nodeId = tree.getChildIds(tree.getRootNodeId())[0]; - var newChildIds = tree.resetAllData(testData, nodeId); - - expect(tree.getNodeData(newChildIds[0])).toEqual({text: 'A'}); - expect(tree.getNodeData(newChildIds[1])).toEqual({text: 'B'}); - }); - - it('"getIndentWidth()" should return padding left by element\'s depth', function() { - var treeData = [{ - text: 'A', - children: [{ - text: '1', - children: [{ - text: 'κ°€', - children: [ - {text: '*'}, - {text: '#', children: [{text: 'a'}]}, - {text: '@'} - ] - }] - }] - }]; - var treeNodes; - tree.resetAllData([]); - tree = new Tree(container, { - rootElement: 'treeRoot', - data: treeData - }); - - treeNodes = $(tree.rootElement).find('.tui-tree-node'); - - snippet.forEach(function(treeNode) { - var id = treeNode.id; - expect(treeNode.childNodes[0].style.paddingLeft).toBe(tree.getIndentWidth(id) + 'px'); - }, treeNodes); - }); + ] + } + ] + } + ]; + var treeNodes; + tree.resetAllData([]); + tree = new Tree(container, { + rootElement: 'treeRoot', + data: treeData + }); + + treeNodes = $(tree.rootElement).find('.tui-tree-node'); + + snippet.forEach(function(treeNode) { + var id = treeNode.id; + expect(treeNode.childNodes[0].style.paddingLeft).toBe(tree.getIndentWidth(id) + 'px'); + }, treeNodes); }); + }); + + describe('option', function() { + // hostnameSent module scope variable can not be reset. + // maintain cases with xit as it always fail, if you want to test these cases, change xit to fit one by one + beforeEach(function() { + spyOn(snippet, 'sendHostname'); + loadFixtures('basicFixture.html'); + container = 'tree'; + }); + + xit('should send hostname by default', function() { + tree = new Tree(container, { + rootElement: 'treeRoot', + data: data + }); + + expect(snippet.sendHostname).toHaveBeenCalled(); + }); + + xit('should not send hostname on usageStatistics option false', function() { + tree = new Tree(container, { + rootElement: 'treeRoot', + data: data, + usageStatistics: false + }); - describe('option', function() { - // hostnameSent module scope variable can not be reset. - // maintain cases with xit as it always fail, if you want to test these cases, change xit to fit one by one - beforeEach(function() { - spyOn(snippet, 'sendHostname'); - loadFixtures('basicFixture.html'); - container = 'tree'; - }); - - xit('should send hostname by default', function() { - tree = new Tree(container, { - rootElement: 'treeRoot', - data: data - }); - - expect(snippet.sendHostname).toHaveBeenCalled(); - }); - - xit('should not send hostname on usageStatistics option false', function() { - tree = new Tree(container, { - rootElement: 'treeRoot', - data: data, - usageStatistics: false - }); - - expect(snippet.sendHostname).not.toHaveBeenCalled(); - }); + expect(snippet.sendHostname).not.toHaveBeenCalled(); }); + }); }); diff --git a/test/treeModel.spec.js b/test/treeModel.spec.js index b09bd6f6..32a48bad 100644 --- a/test/treeModel.spec.js +++ b/test/treeModel.spec.js @@ -1,203 +1,200 @@ var TreeModel = require('../src/js/treeModel'); describe('TreeModel', function() { - var treeModel, - data = [ - { - text: 'A', - hiddenValue: 'Child of root', - children: [ - {text: '1'}, - {text: '2'}, - {text: '3'}, - {text: '4'}, - { - text: '5', - children: [ - {text: 'κ°€', children: [{text: '*'}]}, - {text: 'λ‚˜'} - ] - }, - {text: '6'}, - {text: '7'}, - {text: '8'}, - {text: '9', children: [{text: 'κ°€'}, {text: 'λ‚˜'}]}, - {text: '10'}, - {text: '11'}, - {text: '12'} - ] - }, - { - text: 'B', - state: 'opened', - children: [{text: '1'}, {text: '2'}, {text: '3'}] - }, - {text: 'C', children: [{text: '1'}]} - ]; - - beforeEach(function() { - treeModel = new TreeModel({ - data: data, - defaultState: 'closed', - nodeIdPrefix: 'tree-node-' - }); + var treeModel, + data = [ + { + text: 'A', + hiddenValue: 'Child of root', + children: [ + {text: '1'}, + {text: '2'}, + {text: '3'}, + {text: '4'}, + { + text: '5', + children: [{text: 'κ°€', children: [{text: '*'}]}, {text: 'λ‚˜'}] + }, + {text: '6'}, + {text: '7'}, + {text: '8'}, + {text: '9', children: [{text: 'κ°€'}, {text: 'λ‚˜'}]}, + {text: '10'}, + {text: '11'}, + {text: '12'} + ] + }, + { + text: 'B', + state: 'opened', + children: [{text: '1'}, {text: '2'}, {text: '3'}] + }, + {text: 'C', children: [{text: '1'}]} + ]; + + beforeEach(function() { + treeModel = new TreeModel({ + data: data, + defaultState: 'closed', + nodeIdPrefix: 'tree-node-' }); + }); - it('should have the rootNode', function() { - expect(treeModel.rootNode).toBeDefined(); - }); + it('should have the rootNode', function() { + expect(treeModel.rootNode).toBeDefined(); + }); - it('should have the length of all nodes within rootNode', function() { - expect(treeModel.getCount()).toEqual(25); - }); + it('should have the length of all nodes within rootNode', function() { + expect(treeModel.getCount()).toEqual(25); + }); - it('Find method should return a node', function() { - var id = treeModel.rootNode.getChildIds()[0], - node = treeModel.getNode(id); + it('Find method should return a node', function() { + var id = treeModel.rootNode.getChildIds()[0], + node = treeModel.getNode(id); - expect(node.getData('hiddenValue')).toEqual('Child of root'); - expect(node.getData('text')).toEqual('A'); - expect(node.getAllData()).toEqual({ - text: 'A', - hiddenValue: 'Child of root' - }); + expect(node.getData('hiddenValue')).toEqual('Child of root'); + expect(node.getData('text')).toEqual('A'); + expect(node.getAllData()).toEqual({ + text: 'A', + hiddenValue: 'Child of root' }); + }); - it('- Add method should append a node to a specific parent node', function() { - var parentId = treeModel.rootNode.getChildIds()[0]; - var parentNode = treeModel.getNode(parentId); - var testData = { - text: 'This node will be added to the first node' - }; - var id, node; + it('- Add method should append a node to a specific parent node', function() { + var parentId = treeModel.rootNode.getChildIds()[0]; + var parentNode = treeModel.getNode(parentId); + var testData = { + text: 'This node will be added to the first node' + }; + var id, node; - treeModel.add(testData, parentId); - id = parentNode.getChildIds()[12]; - node = treeModel.getNode(id); + treeModel.add(testData, parentId); + id = parentNode.getChildIds()[12]; + node = treeModel.getNode(id); - expect(node.getData('text')).toEqual('This node will be added to the first node'); - expect(node.getParentId()).toEqual(parentId); - }); + expect(node.getData('text')).toEqual('This node will be added to the first node'); + expect(node.getParentId()).toEqual(parentId); + }); - it('- Remove method should remove a node in treeModel', function() { - var id = treeModel.rootNode.getChildIds()[0], - childIds = treeModel.getNode(id).getChildIds(), - searched; + it('- Remove method should remove a node in treeModel', function() { + var id = treeModel.rootNode.getChildIds()[0], + childIds = treeModel.getNode(id).getChildIds(), + searched; - treeModel.remove(id); + treeModel.remove(id); - expect(treeModel.rootNode.getChildIds()).not.toContain(id); + expect(treeModel.rootNode.getChildIds()).not.toContain(id); - searched = treeModel.getNode(childIds[0]); - expect(searched).toBeFalsy(); + searched = treeModel.getNode(childIds[0]); + expect(searched).toBeFalsy(); - searched = treeModel.getNode(childIds[11]); - expect(searched).toBeFalsy(); - }); + searched = treeModel.getNode(childIds[11]); + expect(searched).toBeFalsy(); + }); - it('- Each(all) method should iterate over all descendants of a (root or specific)node', function() { - var iteratee = jasmine.createSpy(), - firstChildIdOfRoot = treeModel.rootNode.getChildIds()[0]; + it('- Each(all) method should iterate over all descendants of a (root or specific)node', function() { + var iteratee = jasmine.createSpy(), + firstChildIdOfRoot = treeModel.rootNode.getChildIds()[0]; - treeModel.eachAll(iteratee); - expect(iteratee.calls.count()).toEqual(25); + treeModel.eachAll(iteratee); + expect(iteratee.calls.count()).toEqual(25); - iteratee.calls.reset(); - treeModel.each(iteratee, firstChildIdOfRoot); - expect(iteratee.calls.count()).toEqual(17); - }); + iteratee.calls.reset(); + treeModel.each(iteratee, firstChildIdOfRoot); + expect(iteratee.calls.count()).toEqual(17); + }); - describe('- Sort method', function() { - var comparator; + describe('- Sort method', function() { + var comparator; - beforeEach(function() { - comparator = function(nodeA, nodeB) { - var aValue = nodeA.getData('text'), - bValue = nodeB.getData('text'); + beforeEach(function() { + comparator = function(nodeA, nodeB) { + var aValue = nodeA.getData('text'), + bValue = nodeB.getData('text'); - if (!bValue.localeCompare) { - return 0; - } + if (!bValue.localeCompare) { + return 0; + } - return bValue.localeCompare(aValue); - }; - }); + return bValue.localeCompare(aValue); + }; + }); - it('called basically', function() { - var childIds = treeModel.rootNode.getChildIds(); + it('called basically', function() { + var childIds = treeModel.rootNode.getChildIds(); - treeModel.sort(comparator); - expect(childIds.reverse()).toEqual(treeModel.rootNode.getChildIds()); - }); + treeModel.sort(comparator); + expect(childIds.reverse()).toEqual(treeModel.rootNode.getChildIds()); + }); - it('called with id of a node to sort partially', function() { - var parentId = treeModel.rootNode.getChildIds()[1]; - var childIds = treeModel.getNode(parentId).getChildIds(); + it('called with id of a node to sort partially', function() { + var parentId = treeModel.rootNode.getChildIds()[1]; + var childIds = treeModel.getNode(parentId).getChildIds(); - treeModel.sort(comparator, false, parentId); + treeModel.sort(comparator, false, parentId); - expect(childIds.reverse()).toEqual(treeModel.getNode(parentId).getChildIds()); - }); + expect(childIds.reverse()).toEqual(treeModel.getNode(parentId).getChildIds()); }); + }); - it('should support initial state for each node', function() { - var openedNodeId = treeModel.rootNode.getChildIds()[1], - node = treeModel.getNode(openedNodeId); + it('should support initial state for each node', function() { + var openedNodeId = treeModel.rootNode.getChildIds()[1], + node = treeModel.getNode(openedNodeId); - expect(node.getState()).toEqual('opened'); - }); + expect(node.getState()).toEqual('opened'); + }); - it('should fire update event when a node added', function() { - var handler = jasmine.createSpy('updateHandler'), - rootId = treeModel.rootNode.getId(); + it('should fire update event when a node added', function() { + var handler = jasmine.createSpy('updateHandler'), + rootId = treeModel.rootNode.getId(); - treeModel.on('update', handler); - treeModel.add({title: 'new node'}, rootId); + treeModel.on('update', handler); + treeModel.add({title: 'new node'}, rootId); - expect(handler).toHaveBeenCalledWith(rootId); - }); + expect(handler).toHaveBeenCalledWith(rootId); + }); - it('should fire update event when a node removed', function() { - var handler = jasmine.createSpy('updateHandler'), - rootId = treeModel.rootNode.getId(), - firstChildId = treeModel.rootNode.getChildIds()[0]; + it('should fire update event when a node removed', function() { + var handler = jasmine.createSpy('updateHandler'), + rootId = treeModel.rootNode.getId(), + firstChildId = treeModel.rootNode.getChildIds()[0]; - treeModel.on('update', handler); - treeModel.remove(firstChildId); + treeModel.on('update', handler); + treeModel.remove(firstChildId); - expect(handler).toHaveBeenCalledWith(rootId); - }); + expect(handler).toHaveBeenCalledWith(rootId); + }); - it('should fire update event when node data changed', function() { - var handler = jasmine.createSpy('updateHandler'), - firstChildId = treeModel.rootNode.getChildIds()[0]; + it('should fire update event when node data changed', function() { + var handler = jasmine.createSpy('updateHandler'), + firstChildId = treeModel.rootNode.getChildIds()[0]; - treeModel.on('update', handler); - treeModel.setNodeData(firstChildId, {hiddenValue: 'new hidden'}); + treeModel.on('update', handler); + treeModel.setNodeData(firstChildId, {hiddenValue: 'new hidden'}); - expect(handler).toHaveBeenCalledWith(firstChildId); - expect(treeModel.getNode(firstChildId).getData('hiddenValue')).toEqual('new hidden'); - }); + expect(handler).toHaveBeenCalledWith(firstChildId); + expect(treeModel.getNode(firstChildId).getData('hiddenValue')).toEqual('new hidden'); + }); - it('should fire move event when a node moved', function() { - var handler = jasmine.createSpy('moveHandler'), - rootId = treeModel.rootNode.getId(), - firstChildId = treeModel.rootNode.getChildIds()[0], - grandChildId = treeModel.getNode(firstChildId).getChildIds()[0]; + it('should fire move event when a node moved', function() { + var handler = jasmine.createSpy('moveHandler'), + rootId = treeModel.rootNode.getId(), + firstChildId = treeModel.rootNode.getChildIds()[0], + grandChildId = treeModel.getNode(firstChildId).getChildIds()[0]; - treeModel.on('move', handler); - treeModel.move(grandChildId, rootId, -1); + treeModel.on('move', handler); + treeModel.move(grandChildId, rootId, -1); - expect(handler).toHaveBeenCalledWith(grandChildId, firstChildId, rootId, -1); - expect(treeModel.getNode(grandChildId).getParentId()).toEqual(rootId); - }); + expect(handler).toHaveBeenCalledWith(grandChildId, firstChildId, rootId, -1); + expect(treeModel.getNode(grandChildId).getParentId()).toEqual(rootId); + }); - it('getParentIds should return an array of parent nodes of that node.', function() { - var rootNodeId = treeModel.rootNode.getId(); - var oneDepthId = treeModel.rootNode.getChildIds()[0]; - var twoDepthId = treeModel.getNode(oneDepthId).getChildIds()[4]; - var lastDepthId = treeModel.getNode(twoDepthId).getChildIds()[1]; + it('getParentIds should return an array of parent nodes of that node.', function() { + var rootNodeId = treeModel.rootNode.getId(); + var oneDepthId = treeModel.rootNode.getChildIds()[0]; + var twoDepthId = treeModel.getNode(oneDepthId).getChildIds()[4]; + var lastDepthId = treeModel.getNode(twoDepthId).getChildIds()[1]; - expect(treeModel.getParentIds(lastDepthId)).toEqual([twoDepthId, oneDepthId, rootNodeId]); - }); + expect(treeModel.getParentIds(lastDepthId)).toEqual([twoDepthId, oneDepthId, rootNodeId]); + }); }); diff --git a/test/treeNode.spec.js b/test/treeNode.spec.js index fc42b386..79fc7724 100644 --- a/test/treeNode.spec.js +++ b/test/treeNode.spec.js @@ -1,121 +1,124 @@ - var TreeNode = require('../src/js/treeNode'); describe('TreeNode', function() { - var node, - parentId = 0, - data = { - title: 'My node', - state: 'closed' - }; + var node, + parentId = 0, + data = { + title: 'My node', + state: 'closed' + }; - beforeEach(function() { - node = new TreeNode(data, parentId); - }); + beforeEach(function() { + node = new TreeNode(data, parentId); + }); - it('Set/Get/Toggle state', function() { - expect(node.getState()).toEqual('closed'); + it('Set/Get/Toggle state', function() { + expect(node.getState()).toEqual('closed'); - node.setState('opened'); - expect(node.getState()).toEqual('opened'); + node.setState('opened'); + expect(node.getState()).toEqual('opened'); - node.setState('asdf'); - expect(node.getState()).toEqual('opened'); + node.setState('asdf'); + expect(node.getState()).toEqual('opened'); - node.toggleState(); - expect(node.getState()).toEqual('closed'); - }); + node.toggleState(); + expect(node.getState()).toEqual('closed'); + }); - it('Add/Remove/Replace childId(s)', function() { - node.addChildId(4); - expect(node.getChildIds()).toContain(4); + it('Add/Remove/Replace childId(s)', function() { + node.addChildId(4); + expect(node.getChildIds()).toContain(4); - node.removeChildId(4); - expect(node.getChildIds()).not.toContain(4); + node.removeChildId(4); + expect(node.getChildIds()).not.toContain(4); - node.replaceChildIds([4, 5, 6]); - expect(node.getChildIds()).toEqual([4, 5, 6]); - }); + node.replaceChildIds([4, 5, 6]); + expect(node.getChildIds()).toEqual([4, 5, 6]); + }); - it('Add/Remove node data', function() { - expect(node.getAllData()).toEqual(jasmine.objectContaining({ - title: 'My node' - })); + it('Add/Remove node data', function() { + expect(node.getAllData()).toEqual( + jasmine.objectContaining({ + title: 'My node' + }) + ); - node.setData({newData: 'data2'}); - expect(node.getAllData()).toEqual(jasmine.objectContaining({ - title: 'My node', - newData: 'data2' - })); + node.setData({newData: 'data2'}); + expect(node.getAllData()).toEqual( + jasmine.objectContaining({ + title: 'My node', + newData: 'data2' + }) + ); - node.removeData('title', 'newData'); - expect(node.getAllData().title).toBeUndefined(); - expect(node.getAllData().newData).toBeUndefined(); - }); + node.removeData('title', 'newData'); + expect(node.getAllData().title).toBeUndefined(); + expect(node.getAllData().newData).toBeUndefined(); + }); - it('"isLeaf" should return true if a node is leaf', function() { - expect(node.isLeaf()).toBe(true); + it('"isLeaf" should return true if a node is leaf', function() { + expect(node.isLeaf()).toBe(true); - node.addChildId(4); - expect(node.isLeaf()).toBe(false); - }); + node.addChildId(4); + expect(node.isLeaf()).toBe(false); + }); - it('"isRoot" should return true if a node is root', function() { - expect(node.isRoot()).toBe(false); + it('"isRoot" should return true if a node is root', function() { + expect(node.isRoot()).toBe(false); - node.setParentId(null); - expect(node.isRoot()).toBe(true); - }); + node.setParentId(null); + expect(node.isRoot()).toBe(true); + }); - it('"constructor.setIdPrefix and _stampId" should set node id', function() { - TreeNode.setIdPrefix('new-tree-node-'); - node = new TreeNode(data, parentId); + it('"constructor.setIdPrefix and _stampId" should set node id', function() { + TreeNode.setIdPrefix('new-tree-node-'); + node = new TreeNode(data, parentId); - expect(node.getId()).toContain('new-tree-node-'); - }); + expect(node.getId()).toContain('new-tree-node-'); + }); - it('children property in "setData" will be ignored', function() { - node.setData({children: []}); + it('children property in "setData" will be ignored', function() { + node.setData({children: []}); - expect(node.getData('children')).toBeUndefined(); - }); + expect(node.getData('children')).toBeUndefined(); + }); - it('"getChildIndex()" should return index number of child node.', function() { - var index; + it('"getChildIndex()" should return index number of child node.', function() { + var index; - node.replaceChildIds(['1', '2', '3']); + node.replaceChildIds(['1', '2', '3']); - index = node.getChildIndex('2'); + index = node.getChildIndex('2'); - expect(index).toEqual(1); - }); + expect(index).toEqual(1); + }); - it('"insertChildId()" add the node id in the position corresponding to the index .', function() { - var ids; + it('"insertChildId()" add the node id in the position corresponding to the index .', function() { + var ids; - node.replaceChildIds(['node-a', 'node-b', 'node-c']); - node.insertChildId('node-d', 1); + node.replaceChildIds(['node-a', 'node-b', 'node-c']); + node.insertChildId('node-d', 1); - ids = node.getChildIds(); + ids = node.getChildIds(); - expect(ids).toEqual(['node-a', 'node-d', 'node-b', 'node-c']); - }); + expect(ids).toEqual(['node-a', 'node-d', 'node-b', 'node-c']); + }); - it('"moveChildId()" changes the node id position.', function() { - var ids; + it('"moveChildId()" changes the node id position.', function() { + var ids; - node.replaceChildIds(['node-a', 'node-b', 'node-c', 'node-d']); + node.replaceChildIds(['node-a', 'node-b', 'node-c', 'node-d']); - node.moveChildId('node-d', 1); - ids = node.getChildIds(); - expect(ids).toEqual(['node-a', 'node-d', 'node-b', 'node-c']); + node.moveChildId('node-d', 1); + ids = node.getChildIds(); + expect(ids).toEqual(['node-a', 'node-d', 'node-b', 'node-c']); - node.moveChildId('node-a', 3); - ids = node.getChildIds(); - expect(ids).toEqual(['node-d', 'node-b', 'node-a', 'node-c']); + node.moveChildId('node-a', 3); + ids = node.getChildIds(); + expect(ids).toEqual(['node-d', 'node-b', 'node-a', 'node-c']); - node.moveChildId('node-c', 0); - ids = node.getChildIds(); - expect(ids).toEqual(['node-c', 'node-d', 'node-b', 'node-a']); - }); + node.moveChildId('node-c', 0); + ids = node.getChildIds(); + expect(ids).toEqual(['node-c', 'node-d', 'node-b', 'node-a']); + }); }); diff --git a/test/util.spec.js b/test/util.spec.js index 87d9be53..65aaba3d 100644 --- a/test/util.spec.js +++ b/test/util.spec.js @@ -1,100 +1,98 @@ +/* eslint-disable no-useless-concat */ var util = require('../src/js/util.js'); describe('Util', function() { - it('"removeItemFromArray" should remove element if in array', function() { - var arr = [1, 3, 5]; + it('"removeItemFromArray" should remove element if in array', function() { + var arr = [1, 3, 5]; - util.removeItemFromArray(3, arr); - expect(arr).toEqual([1, 5]); + util.removeItemFromArray(3, arr); + expect(arr).toEqual([1, 5]); - arr = [1, 2, 5]; - util.removeItemFromArray(3, arr); - expect(arr).toEqual([1, 2, 5]); - }); + arr = [1, 2, 5]; + util.removeItemFromArray(3, arr); + expect(arr).toEqual([1, 2, 5]); + }); - it('"template" should return the result string having replaced value', function() { - var source = 'hello {{name}}!', - prop = { - name: 'NHN ENT', - dummy: 'dummy' - }; + it('"template" should return the result string having replaced value', function() { + var source = 'hello {{name}}!', + prop = { + name: 'NHN ENT', + dummy: 'dummy' + }; - expect(util.renderTemplate(source, prop)).toEqual('hello NHN ENT!'); - }); + expect(util.renderTemplate(source, prop)).toEqual('hello NHN ENT!'); + }); - it('"template" supports dot notation and array value', function() { - var source = '{{..INVALID dot notation}}{{dummy}} {{obj.foo.a}}, {{obj.bar}}!', - prop = { - obj: { - foo: { - a: 'foo-a' - }, - bar: ['bar-1', 'bar-2'] // it will be converted to 'bar-1 bar-2' - }, - dummy: 'dummy' - }; - - expect(util.renderTemplate(source, prop)).toEqual('dummy foo-a, bar-1 bar-2!'); - }); + it('"template" supports dot notation and array value', function() { + var source = '{{..INVALID dot notation}}{{dummy}} {{obj.foo.a}}, {{obj.bar}}!', + prop = { + obj: { + foo: { + a: 'foo-a' + }, + bar: ['bar-1', 'bar-2'] // it will be converted to 'bar-1 bar-2' + }, + dummy: 'dummy' + }; - it('"getClass" should return classname of element', function() { - var element = document.createElement('div'), - className = 'asdfasdf'; - util.addClass(element, className); + expect(util.renderTemplate(source, prop)).toEqual('dummy foo-a, bar-1 bar-2!'); + }); - expect(util.getClass(element)).toEqual(className); - }); + it('"getClass" should return classname of element', function() { + var element = document.createElement('div'), + className = 'asdfasdf'; + util.addClass(element, className); - it('"getFirstText" should return first text of element.', function() { - var element = document.createElement('div'); - var firstTextNode; + expect(util.getClass(element)).toEqual(className); + }); - element.innerHTML = 'firstText'; + it('"getFirstText" should return first text of element.', function() { + var element = document.createElement('div'); + var firstTextNode; - firstTextNode = util.getFirstTextNode(element); + element.innerHTML = 'firstText'; - expect(firstTextNode.nodeValue).toBe('firstText'); - }); + firstTextNode = util.getFirstTextNode(element); + + expect(firstTextNode.nodeValue).toBe('firstText'); + }); + + it('"removeElement" should remove target element.', function() { + var element = document.createElement('div'); - it('"removeElement" should remove target element.', function() { - var element = document.createElement('div'); + element.id = 'test'; + document.body.appendChild(element); - element.id = 'test'; - document.body.appendChild(element); + util.removeElement(element); - util.removeElement(element); + expect(document.getElementById('test')).toBe(null); + }); - expect(document.getElementById('test')).toBe(null); + describe('.prototype.getChildElementByClassName()', function() { + var element; + beforeEach(function() { + element = document.createElement('div'); + document.body.appendChild(element); }); - describe('.prototype.getChildElementByClassName()', function() { - var element; - beforeEach(function() { - element = document.createElement('div'); - document.body.appendChild(element); - }); - - afterEach(function() { - util.removeElement(element); - }); - - it('should find first element by classname', function() { - var child; - element.innerHTML = '
      ' + - '
      '; - child = util.getChildElementByClassName(element, 'b'); - - expect(child.id).toBe('1'); - }); - - it('should return null when child elements don\'t contain same class', function() { - var child; - element.innerHTML = '
      ' + - '
      ' + - '
      '; - child = util.getChildElementByClassName(element, 'b'); - - expect(child).toBeNull(); - }); + afterEach(function() { + util.removeElement(element); + }); + + it('should find first element by classname', function() { + var child; + element.innerHTML = '
      ' + '
      '; + child = util.getChildElementByClassName(element, 'b'); + + expect(child.id).toBe('1'); + }); + + it("should return null when child elements don't contain same class", function() { + var child; + element.innerHTML = '
      ' + '
      ' + '
      '; + child = util.getChildElementByClassName(element, 'b'); + + expect(child).toBeNull(); }); + }); }); diff --git a/webpack.config.js b/webpack.config.js index 6bea1464..f71ffb17 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -2,74 +2,79 @@ * Configs file for bundling * @author NHN. FE Development Lab */ + +var path = require('path'); var pkg = require('./package.json'); var webpack = require('webpack'); +var MiniCssExtractPlugin = require('mini-css-extract-plugin'); -var ExtractTextPlugin = require('extract-text-webpack-plugin'); -var SafeUmdPlugin = require('safe-umd-webpack-plugin'); - -var isProduction = process.argv.indexOf('-p') > -1; - -var FILENAME = pkg.name + (isProduction ? '.min.js' : '.js'); -var BANNER = [ - FILENAME, +module.exports = function(env, argv) { + var isProduction = argv.mode === 'production'; + var FILENAME = pkg.name + (isProduction ? '.min.js' : '.js'); + var BANNER = [ + 'TOAST UI Tree', '@version ' + pkg.version, '@author ' + pkg.author, '@license ' + pkg.license -].join('\n'); + ].join('\n'); -module.exports = { - eslint: { - failOnError: isProduction - }, + return { + mode: 'development', entry: './src/js/index.js', output: { - library: ['tui', 'Tree'], - libraryTarget: 'umd', - path: 'dist', - publicPath: 'dist/', - filename: FILENAME + library: ['tui', 'Tree'], + libraryTarget: 'umd', + path: path.resolve(__dirname, 'dist'), + publicPath: 'dist/', + filename: FILENAME }, externals: { - 'tui-code-snippet': { - 'commonjs': 'tui-code-snippet', - 'commonjs2': 'tui-code-snippet', - 'amd': 'tui-code-snippet', - 'root': ['tui', 'util'] - }, - 'tui-context-menu': { - 'commonjs': 'tui-context-menu', - 'commonjs2': 'tui-context-menu', - 'amd': 'tui-context-menu', - 'root': ['tui', 'ContextMenu'] - } + 'tui-code-snippet': { + commonjs: 'tui-code-snippet', + commonjs2: 'tui-code-snippet', + amd: 'tui-code-snippet', + root: ['tui', 'util'] + }, + 'tui-context-menu': { + commonjs: 'tui-context-menu', + commonjs2: 'tui-context-menu', + amd: 'tui-context-menu', + root: ['tui', 'ContextMenu'] + } }, module: { - preLoaders: [ - { - test: /\.js$/, - exclude: /(dist|node_modules|bower_components)/, - loader: 'eslint-loader' - }, - { - test: /\.css$/, - loader: ExtractTextPlugin.extract('style-loader', 'css-loader') - }, - { - test: /[.png|.gif]$/, - loader: 'url-loader' - } - ] + rules: [ + { + test: /\.js$/, + exclude: /(dist|node_modules|bower_components)/, + loader: 'eslint-loader', + enforce: 'pre', + options: { + failOnError: isProduction + } + }, + { + test: /\.css$/, + use: [ + MiniCssExtractPlugin.loader, + 'css-loader' + ] + }, + { + test: /[.png|.gif]$/, + loader: 'url-loader' + } + ] }, plugins: [ - new SafeUmdPlugin(), - new ExtractTextPlugin(pkg.name + '.css'), - new webpack.BannerPlugin(BANNER) + new MiniCssExtractPlugin({filename: pkg.name + '.css'}), + new webpack.BannerPlugin(BANNER) ], devServer: { - historyApiFallback: false, - progress: true, - host: '0.0.0.0', - disableHostCheck: true + historyApiFallback: false, + progress: true, + host: '0.0.0.0', + disableHostCheck: true } + }; };