diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..511001a --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +01.web/node_modules +01.web/node_modules/* +01.web/dist +01.web/dist/* +01.web/index.html +01.web/index_prod.html +02.php/.vscode +02.php/.vscode/* \ No newline at end of file diff --git a/00.static/01.images/002.png b/00.static/01.images/002.png deleted file mode 100644 index 41dbf7e..0000000 Binary files a/00.static/01.images/002.png and /dev/null differ diff --git a/00.static/01.images/003.png b/00.static/01.images/003.png deleted file mode 100644 index 5c8f641..0000000 Binary files a/00.static/01.images/003.png and /dev/null differ diff --git a/00.static/01.images/01.jpg b/00.static/01.images/01.jpg new file mode 100644 index 0000000..a90fa11 Binary files /dev/null and b/00.static/01.images/01.jpg differ diff --git a/00.static/01.images/02.jpg b/00.static/01.images/02.jpg new file mode 100644 index 0000000..34751b2 Binary files /dev/null and b/00.static/01.images/02.jpg differ diff --git a/00.static/01.images/021.jpg b/00.static/01.images/021.jpg deleted file mode 100644 index de4b4de..0000000 Binary files a/00.static/01.images/021.jpg and /dev/null differ diff --git a/00.static/01.images/022.jpg b/00.static/01.images/022.jpg deleted file mode 100644 index 3ba7dbb..0000000 Binary files a/00.static/01.images/022.jpg and /dev/null differ diff --git a/00.static/01.images/023.jpg b/00.static/01.images/023.jpg deleted file mode 100644 index c6bd96b..0000000 Binary files a/00.static/01.images/023.jpg and /dev/null differ diff --git a/00.static/01.images/024.jpg b/00.static/01.images/024.jpg deleted file mode 100644 index 9309578..0000000 Binary files a/00.static/01.images/024.jpg and /dev/null differ diff --git a/00.static/01.images/025.jpg b/00.static/01.images/025.jpg deleted file mode 100644 index 76ffccc..0000000 Binary files a/00.static/01.images/025.jpg and /dev/null differ diff --git a/00.static/01.images/03.jpg b/00.static/01.images/03.jpg new file mode 100644 index 0000000..0f88b6c Binary files /dev/null and b/00.static/01.images/03.jpg differ diff --git a/00.static/01.images/04.jpg b/00.static/01.images/04.jpg new file mode 100644 index 0000000..f0b86ca Binary files /dev/null and b/00.static/01.images/04.jpg differ diff --git a/00.static/01.images/05.jpg b/00.static/01.images/05.jpg new file mode 100644 index 0000000..40d6b72 Binary files /dev/null and b/00.static/01.images/05.jpg differ diff --git a/00.static/01.images/06.jpg b/00.static/01.images/06.jpg new file mode 100644 index 0000000..09b0520 Binary files /dev/null and b/00.static/01.images/06.jpg differ diff --git a/00.static/01.images/07.jpg b/00.static/01.images/07.jpg new file mode 100644 index 0000000..c4740cb Binary files /dev/null and b/00.static/01.images/07.jpg differ diff --git a/00.static/01.images/08.jpg b/00.static/01.images/08.jpg new file mode 100644 index 0000000..8c328b9 Binary files /dev/null and b/00.static/01.images/08.jpg differ diff --git a/00.static/01.images/09.jpg b/00.static/01.images/09.jpg new file mode 100644 index 0000000..62bfc77 Binary files /dev/null and b/00.static/01.images/09.jpg differ diff --git a/00.static/01.images/10.jpg b/00.static/01.images/10.jpg new file mode 100644 index 0000000..8b4d579 Binary files /dev/null and b/00.static/01.images/10.jpg differ diff --git a/00.static/01.images/11.jpg b/00.static/01.images/11.jpg new file mode 100644 index 0000000..65fee94 Binary files /dev/null and b/00.static/01.images/11.jpg differ diff --git a/00.static/01.images/12.jpg b/00.static/01.images/12.jpg new file mode 100644 index 0000000..ce39be8 Binary files /dev/null and b/00.static/01.images/12.jpg differ diff --git a/00.static/01.images/13.jpg b/00.static/01.images/13.jpg new file mode 100644 index 0000000..e4e44cb Binary files /dev/null and b/00.static/01.images/13.jpg differ diff --git a/00.static/01.images/14.jpg b/00.static/01.images/14.jpg new file mode 100644 index 0000000..7eceac1 Binary files /dev/null and b/00.static/01.images/14.jpg differ diff --git a/00.static/01.images/15.jpg b/00.static/01.images/15.jpg new file mode 100644 index 0000000..0c00b23 Binary files /dev/null and b/00.static/01.images/15.jpg differ diff --git a/00.static/01.images/16.jpg b/00.static/01.images/16.jpg new file mode 100644 index 0000000..ac485ab Binary files /dev/null and b/00.static/01.images/16.jpg differ diff --git a/00.static/01.images/17.jpg b/00.static/01.images/17.jpg new file mode 100644 index 0000000..c55551a Binary files /dev/null and b/00.static/01.images/17.jpg differ diff --git a/00.static/01.images/18.jpg b/00.static/01.images/18.jpg new file mode 100644 index 0000000..ea8b26d Binary files /dev/null and b/00.static/01.images/18.jpg differ diff --git a/00.static/01.images/19.jpg b/00.static/01.images/19.jpg new file mode 100644 index 0000000..10bb993 Binary files /dev/null and b/00.static/01.images/19.jpg differ diff --git a/00.static/01.images/20.jpg b/00.static/01.images/20.jpg new file mode 100644 index 0000000..12207ab Binary files /dev/null and b/00.static/01.images/20.jpg differ diff --git a/00.static/01.images/21.jpg b/00.static/01.images/21.jpg new file mode 100644 index 0000000..74045d0 Binary files /dev/null and b/00.static/01.images/21.jpg differ diff --git a/00.static/01.images/22.jpg b/00.static/01.images/22.jpg new file mode 100644 index 0000000..14d0cb0 Binary files /dev/null and b/00.static/01.images/22.jpg differ diff --git a/00.static/01.images/23.jpg b/00.static/01.images/23.jpg new file mode 100644 index 0000000..b428568 Binary files /dev/null and b/00.static/01.images/23.jpg differ diff --git a/00.static/01.images/24.jpg b/00.static/01.images/24.jpg new file mode 100644 index 0000000..a8e8e53 Binary files /dev/null and b/00.static/01.images/24.jpg differ diff --git a/00.static/01.images/25.jpg b/00.static/01.images/25.jpg new file mode 100644 index 0000000..196b9b0 Binary files /dev/null and b/00.static/01.images/25.jpg differ diff --git a/00.static/01.images/26.jpg b/00.static/01.images/26.jpg new file mode 100644 index 0000000..1824158 Binary files /dev/null and b/00.static/01.images/26.jpg differ diff --git a/00.static/01.images/27.jpg b/00.static/01.images/27.jpg new file mode 100644 index 0000000..5435da3 Binary files /dev/null and b/00.static/01.images/27.jpg differ diff --git a/00.static/01.images/28.jpg b/00.static/01.images/28.jpg new file mode 100644 index 0000000..af4aa59 Binary files /dev/null and b/00.static/01.images/28.jpg differ diff --git a/00.static/01.images/29.jpg b/00.static/01.images/29.jpg new file mode 100644 index 0000000..cb72e29 Binary files /dev/null and b/00.static/01.images/29.jpg differ diff --git a/01.web/01.web.zip b/01.web/01.web.zip new file mode 100644 index 0000000..8a36413 Binary files /dev/null and b/01.web/01.web.zip differ diff --git a/01.web/jsconfig.json b/01.web/jsconfig.json deleted file mode 100644 index 2670831..0000000 --- a/01.web/jsconfig.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "include": [ - "./src/*" - ] -} \ No newline at end of file diff --git a/01.web/package-lock.json b/01.web/package-lock.json index 577c85b..ca5c8f9 100644 --- a/01.web/package-lock.json +++ b/01.web/package-lock.json @@ -1,570 +1,410 @@ { "name": "view-ui-project", "version": "4.0.0", - "lockfileVersion": 2, + "lockfileVersion": 1, "requires": true, - "packages": { - "": { - "name": "view-ui-project", - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "axios": "^0.19.2", - "echarts": "^4.9.0", - "moment": "^2.24.0", - "view-design": "^4.0.0", - "vue": "^2.5.16", - "vue-clipboard2": "^0.3.1", - "vue-jsonp": "^0.1.8", - "vue-monoplasty-slide-verify": "^1.1.3", - "vue-router": "^2.8.1", - "vuex": "^3.1.2" - }, - "devDependencies": { - "autoprefixer-loader": "^2.0.0", - "babel": "^6.23.0", - "babel-core": "^6.23.1", - "babel-loader": "^6.2.4", - "babel-plugin-transform-runtime": "^6.12.0", - "babel-preset-es2015": "^6.9.0", - "babel-runtime": "^6.11.6", - "css-loader": "^0.23.1", - "extract-text-webpack-plugin": "^2.0.0", - "file-loader": "^0.8.5", - "html-loader": "^0.5.5", - "html-webpack-plugin": "^2.28.0", - "iview-loader": "^1.2.1", - "less": "^2.7.1", - "less-loader": "^2.2.3", - "style-loader": "^0.13.1", - "url-loader": "^0.5.7", - "vue-hot-reload-api": "^1.3.3", - "vue-html-loader": "^1.2.3", - "vue-loader": "^11.0.0", - "vue-style-loader": "^1.0.0", - "vue-template-compiler": "^2.2.1", - "webpack": "^2.2.1", - "webpack-dev-server": "^2.11.5", - "webpack-merge": "^3.0.0" - } - }, - "node_modules/abbrev": { + "dependencies": { + "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, - "node_modules/accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dev": true, - "dependencies": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/mime-db": { - "version": "1.42.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", - "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/mime-types": { - "version": "2.1.25", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz", - "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==", + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", "dev": true, - "dependencies": { - "mime-db": "1.42.0" - }, - "engines": { - "node": ">= 0.6" + "requires": { + "mime-types": "~2.1.18", + "negotiator": "0.6.1" } }, - "node_modules/acorn": { + "acorn": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz", "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } + "dev": true }, - "node_modules/acorn-dynamic-import": { + "acorn-dynamic-import": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", "dev": true, - "dependencies": { + "requires": { "acorn": "^4.0.3" - } - }, - "node_modules/acorn-dynamic-import/node_modules/acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", - "dev": true, - "bin": { - "acorn": "bin/acorn" }, - "engines": { - "node": ">=0.4.0" + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", + "dev": true + } } }, - "node_modules/ajv": { + "adler-32": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/adler-32/-/adler-32-1.3.1.tgz", + "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==" + }, + "ajv": { "version": "5.5.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "dev": true, - "dependencies": { + "requires": { "co": "^4.6.0", "fast-deep-equal": "^1.0.0", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.3.0" } }, - "node_modules/ajv-keywords": { + "ajv-keywords": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", "dev": true }, - "node_modules/align-text": { + "align-text": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "dev": true, - "dependencies": { + "requires": { "kind-of": "^3.0.2", "longest": "^1.0.1", "repeat-string": "^1.5.2" - }, - "engines": { - "node": ">=0.10.0" } }, - "node_modules/alphanum-sort": { + "alphanum-sort": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", "dev": true }, - "node_modules/amdefine": { + "amdefine": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true, - "engines": { - "node": ">=0.4.2" - } + "dev": true }, - "node_modules/ansi-html": { + "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, - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" - } + "dev": true }, - "node_modules/ansi-regex": { + "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "dev": true }, - "node_modules/ansi-styles": { + "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "dev": true }, - "node_modules/anymatch": { + "anymatch": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, - "dependencies": { + "requires": { "micromatch": "^3.1.4", "normalize-path": "^2.1.1" } }, - "node_modules/anymatch/node_modules/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, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/argparse": { + "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, - "dependencies": { + "requires": { "sprintf-js": "~1.0.2" } }, - "node_modules/arr-diff": { + "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, - "engines": { - "node": ">=0.10.0" - } + "dev": true }, - "node_modules/arr-flatten": { + "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "dev": true }, - "node_modules/arr-union": { + "arr-union": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "dev": true }, - "node_modules/array-find-index": { + "array-find-index": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "dev": true }, - "node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "array-flatten": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.1.tgz", + "integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=", "dev": true }, - "node_modules/array-includes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", - "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", + "array-includes": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", + "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", "dev": true, - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0", - "is-string": "^1.0.5" - }, - "engines": { - "node": ">= 0.4" + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.7.0" } }, - "node_modules/array-union": { + "array-union": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, - "dependencies": { + "requires": { "array-uniq": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" } }, - "node_modules/array-uniq": { + "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, - "engines": { - "node": ">=0.10.0" - } + "dev": true }, - "node_modules/array-unique": { + "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, - "engines": { - "node": ">=0.10.0" - } + "dev": true }, - "node_modules/asap": { + "asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", "dev": true, "optional": true }, - "node_modules/asn1": { + "asn1": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", "dev": true, "optional": true }, - "node_modules/asn1.js": { + "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, - "dependencies": { + "requires": { "bn.js": "^4.0.0", "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" } }, - "node_modules/assert": { + "assert": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", "dev": true, - "dependencies": { + "requires": { "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } } }, - "node_modules/assert-plus": { + "assert-plus": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", "dev": true, - "optional": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/assert/node_modules/inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "node_modules/assert/node_modules/util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "dependencies": { - "inherits": "2.0.1" - } + "optional": true }, - "node_modules/assign-symbols": { + "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "dev": true }, - "node_modules/ast-types": { + "ast-types": { "version": "0.9.6", "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz", "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=", - "dev": true, - "engines": { - "node": ">= 0.8" - } + "dev": true }, - "node_modules/async": { + "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, - "dependencies": { + "requires": { "lodash": "^4.17.10" } }, - "node_modules/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==", + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", "dev": true }, - "node_modules/async-validator": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-1.12.2.tgz", - "integrity": "sha512-57EETfCPFiB7M4QscvQzWSGNsmtkjjzZv318SK1CBlstk+hycV72ocjriMOOM48HjvmoAoJGpJNjC7Z76RlnZA==" + "async-validator": { + "version": "3.5.2", + "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-3.5.2.tgz", + "integrity": "sha512-8eLCg00W9pIRZSB781UUX/H6Oskmm8xloZfr09lz5bikRpBVDlJ3hRVuxxP1SxcwsEYfJ4IU8Q19Y8/893r3rQ==" }, - "node_modules/asynckit": { + "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true, "optional": true }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true, - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } + "atob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", + "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=", + "dev": true }, - "node_modules/autoprefixer": { + "autoprefixer": { "version": "6.7.7", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", "dev": true, - "dependencies": { + "requires": { "browserslist": "^1.7.6", "caniuse-db": "^1.0.30000634", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", "postcss": "^5.2.16", "postcss-value-parser": "^3.2.3" + }, + "dependencies": { + "browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true, + "requires": { + "caniuse-db": "^1.0.30000639", + "electron-to-chromium": "^1.2.7" + } + } } }, - "node_modules/autoprefixer-core": { + "autoprefixer-core": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/autoprefixer-core/-/autoprefixer-core-5.2.1.tgz", "integrity": "sha1-5kDEFK5Bmq4hwa1DyOoPPbgqVm0=", "dev": true, - "dependencies": { + "requires": { "browserslist": "~0.4.0", "caniuse-db": "^1.0.30000214", "num2fraction": "^1.1.0", "postcss": "~4.1.12" - } - }, - "node_modules/autoprefixer-core/node_modules/postcss": { - "version": "4.1.16", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-4.1.16.tgz", - "integrity": "sha1-TESbTIr53zyvbTf44eV10DYXWNw=", - "dev": true, + }, "dependencies": { - "es6-promise": "~2.3.0", - "js-base64": "~2.1.8", - "source-map": "~0.4.2" + "postcss": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-4.1.16.tgz", + "integrity": "sha1-TESbTIr53zyvbTf44eV10DYXWNw=", + "dev": true, + "requires": { + "es6-promise": "~2.3.0", + "js-base64": "~2.1.8", + "source-map": "~0.4.2" + } + } } }, - "node_modules/autoprefixer-loader": { + "autoprefixer-loader": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/autoprefixer-loader/-/autoprefixer-loader-2.1.0.tgz", "integrity": "sha1-lXcoXJvo0iFi4ln3VD7N5BORHGg=", "dev": true, - "dependencies": { + "requires": { "autoprefixer-core": "^5.2.0", "loader-utils": "^0.2.5", "postcss": "^5.0.3", "postcss-safe-parser": "^1.0.1" } }, - "node_modules/autoprefixer/node_modules/browserslist": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "dev": true, - "dependencies": { - "caniuse-db": "^1.0.30000639", - "electron-to-chromium": "^1.2.7" - }, - "bin": { - "browserslist": "cli.js" - } - }, - "node_modules/aws-sign2": { + "aws-sign2": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", "dev": true, - "optional": true, - "engines": { - "node": "*" - } + "optional": true }, - "node_modules/aws4": { + "aws4": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==", "dev": true, "optional": true }, - "node_modules/axios": { - "version": "0.19.2", - "resolved": "https://registry.npm.taobao.org/axios/download/axios-0.19.2.tgz?cache=0&sync_timestamp=1597979608919&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faxios%2Fdownload%2Faxios-0.19.2.tgz", - "integrity": "sha1-PqNsXYgY0NX4qKl6bTa4bNwAyyc=", - "dependencies": { - "follow-redirects": "1.5.10" - } - }, - "node_modules/axios/node_modules/debug": { - "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz?cache=0&sync_timestamp=1600502827907&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.1.0.tgz", - "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/axios/node_modules/follow-redirects": { - "version": "1.5.10", - "resolved": "https://registry.npm.taobao.org/follow-redirects/download/follow-redirects-1.5.10.tgz", - "integrity": "sha1-e3qfmuov3/NnhqlP9kPtB/T/Xio=", - "dependencies": { - "debug": "=3.1.0" + "axios": { + "version": "0.25.0", + "resolved": "https://registry.npmmirror.com/axios/-/axios-0.25.0.tgz", + "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", + "requires": { + "follow-redirects": "^1.14.7" }, - "engines": { - "node": ">=4.0" + "dependencies": { + "follow-redirects": { + "version": "1.14.7", + "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.14.7.tgz", + "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==" + } } }, - "node_modules/babel": { + "babel": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel/-/babel-6.23.0.tgz", "integrity": "sha1-0NHn2APpdHZb7qMjLU4VPA77kPQ=", - "dev": true, - "bin": { - "babel": "lib/cli.js", - "babel-external-helpers": "lib/cli.js", - "babel-node": "lib/cli.js" - } + "dev": true }, - "node_modules/babel-code-frame": { + "babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, - "dependencies": { + "requires": { "chalk": "^1.1.3", "esutils": "^2.0.2", "js-tokens": "^3.0.2" } }, - "node_modules/babel-core": { + "babel-core": { "version": "6.26.3", "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", "dev": true, - "dependencies": { + "requires": { "babel-code-frame": "^6.26.0", "babel-generator": "^6.26.0", "babel-helpers": "^6.24.1", @@ -584,32 +424,28 @@ "private": "^0.1.8", "slash": "^1.0.0", "source-map": "^0.5.7" - } - }, - "node_modules/babel-core/node_modules/json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/babel-core/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-generator": { + }, + "dependencies": { + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "babel-generator": { "version": "6.26.1", "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", "dev": true, - "dependencies": { + "requires": { "babel-messages": "^6.23.0", "babel-runtime": "^6.26.0", "babel-types": "^6.26.0", @@ -618,47 +454,46 @@ "lodash": "^4.17.4", "source-map": "^0.5.7", "trim-right": "^1.0.1" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } } }, - "node_modules/babel-generator/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-helper-call-delegate": { + "babel-helper-call-delegate": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", "dev": true, - "dependencies": { + "requires": { "babel-helper-hoist-variables": "^6.24.1", "babel-runtime": "^6.22.0", "babel-traverse": "^6.24.1", "babel-types": "^6.24.1" } }, - "node_modules/babel-helper-define-map": { + "babel-helper-define-map": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", "dev": true, - "dependencies": { + "requires": { "babel-helper-function-name": "^6.24.1", "babel-runtime": "^6.26.0", "babel-types": "^6.26.0", "lodash": "^4.17.4" } }, - "node_modules/babel-helper-function-name": { + "babel-helper-function-name": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", "dev": true, - "dependencies": { + "requires": { "babel-helper-get-function-arity": "^6.24.1", "babel-runtime": "^6.22.0", "babel-template": "^6.24.1", @@ -666,53 +501,53 @@ "babel-types": "^6.24.1" } }, - "node_modules/babel-helper-get-function-arity": { + "babel-helper-get-function-arity": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", "dev": true, - "dependencies": { + "requires": { "babel-runtime": "^6.22.0", "babel-types": "^6.24.1" } }, - "node_modules/babel-helper-hoist-variables": { + "babel-helper-hoist-variables": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", "dev": true, - "dependencies": { + "requires": { "babel-runtime": "^6.22.0", "babel-types": "^6.24.1" } }, - "node_modules/babel-helper-optimise-call-expression": { + "babel-helper-optimise-call-expression": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", "dev": true, - "dependencies": { + "requires": { "babel-runtime": "^6.22.0", "babel-types": "^6.24.1" } }, - "node_modules/babel-helper-regex": { + "babel-helper-regex": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", "dev": true, - "dependencies": { + "requires": { "babel-runtime": "^6.26.0", "babel-types": "^6.26.0", "lodash": "^4.17.4" } }, - "node_modules/babel-helper-replace-supers": { + "babel-helper-replace-supers": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", "dev": true, - "dependencies": { + "requires": { "babel-helper-optimise-call-expression": "^6.24.1", "babel-messages": "^6.23.0", "babel-runtime": "^6.22.0", @@ -721,70 +556,70 @@ "babel-types": "^6.24.1" } }, - "node_modules/babel-helpers": { + "babel-helpers": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", "dev": true, - "dependencies": { + "requires": { "babel-runtime": "^6.22.0", "babel-template": "^6.24.1" } }, - "node_modules/babel-loader": { + "babel-loader": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-6.4.1.tgz", "integrity": "sha1-CzQRLVsHSKjc2/Uaz2+b1C1QuMo=", "dev": true, - "dependencies": { + "requires": { "find-cache-dir": "^0.1.1", "loader-utils": "^0.2.16", "mkdirp": "^0.5.1", "object-assign": "^4.0.1" } }, - "node_modules/babel-messages": { + "babel-messages": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", "dev": true, - "dependencies": { + "requires": { "babel-runtime": "^6.22.0" } }, - "node_modules/babel-plugin-check-es2015-constants": { + "babel-plugin-check-es2015-constants": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", "dev": true, - "dependencies": { + "requires": { "babel-runtime": "^6.22.0" } }, - "node_modules/babel-plugin-transform-es2015-arrow-functions": { + "babel-plugin-transform-es2015-arrow-functions": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", "dev": true, - "dependencies": { + "requires": { "babel-runtime": "^6.22.0" } }, - "node_modules/babel-plugin-transform-es2015-block-scoped-functions": { + "babel-plugin-transform-es2015-block-scoped-functions": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", "dev": true, - "dependencies": { + "requires": { "babel-runtime": "^6.22.0" } }, - "node_modules/babel-plugin-transform-es2015-block-scoping": { + "babel-plugin-transform-es2015-block-scoping": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", "dev": true, - "dependencies": { + "requires": { "babel-runtime": "^6.26.0", "babel-template": "^6.26.0", "babel-traverse": "^6.26.0", @@ -792,12 +627,12 @@ "lodash": "^4.17.4" } }, - "node_modules/babel-plugin-transform-es2015-classes": { + "babel-plugin-transform-es2015-classes": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", "dev": true, - "dependencies": { + "requires": { "babel-helper-define-map": "^6.24.1", "babel-helper-function-name": "^6.24.1", "babel-helper-optimise-call-expression": "^6.24.1", @@ -809,125 +644,125 @@ "babel-types": "^6.24.1" } }, - "node_modules/babel-plugin-transform-es2015-computed-properties": { + "babel-plugin-transform-es2015-computed-properties": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", "dev": true, - "dependencies": { + "requires": { "babel-runtime": "^6.22.0", "babel-template": "^6.24.1" } }, - "node_modules/babel-plugin-transform-es2015-destructuring": { + "babel-plugin-transform-es2015-destructuring": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", "dev": true, - "dependencies": { + "requires": { "babel-runtime": "^6.22.0" } }, - "node_modules/babel-plugin-transform-es2015-duplicate-keys": { + "babel-plugin-transform-es2015-duplicate-keys": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", "dev": true, - "dependencies": { + "requires": { "babel-runtime": "^6.22.0", "babel-types": "^6.24.1" } }, - "node_modules/babel-plugin-transform-es2015-for-of": { + "babel-plugin-transform-es2015-for-of": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", "dev": true, - "dependencies": { + "requires": { "babel-runtime": "^6.22.0" } }, - "node_modules/babel-plugin-transform-es2015-function-name": { + "babel-plugin-transform-es2015-function-name": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", "dev": true, - "dependencies": { + "requires": { "babel-helper-function-name": "^6.24.1", "babel-runtime": "^6.22.0", "babel-types": "^6.24.1" } }, - "node_modules/babel-plugin-transform-es2015-literals": { + "babel-plugin-transform-es2015-literals": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", "dev": true, - "dependencies": { + "requires": { "babel-runtime": "^6.22.0" } }, - "node_modules/babel-plugin-transform-es2015-modules-amd": { + "babel-plugin-transform-es2015-modules-amd": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", "dev": true, - "dependencies": { + "requires": { "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", "babel-runtime": "^6.22.0", "babel-template": "^6.24.1" } }, - "node_modules/babel-plugin-transform-es2015-modules-commonjs": { + "babel-plugin-transform-es2015-modules-commonjs": { "version": "6.26.2", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", "dev": true, - "dependencies": { + "requires": { "babel-plugin-transform-strict-mode": "^6.24.1", "babel-runtime": "^6.26.0", "babel-template": "^6.26.0", "babel-types": "^6.26.0" } }, - "node_modules/babel-plugin-transform-es2015-modules-systemjs": { + "babel-plugin-transform-es2015-modules-systemjs": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", "dev": true, - "dependencies": { + "requires": { "babel-helper-hoist-variables": "^6.24.1", "babel-runtime": "^6.22.0", "babel-template": "^6.24.1" } }, - "node_modules/babel-plugin-transform-es2015-modules-umd": { + "babel-plugin-transform-es2015-modules-umd": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", "dev": true, - "dependencies": { + "requires": { "babel-plugin-transform-es2015-modules-amd": "^6.24.1", "babel-runtime": "^6.22.0", "babel-template": "^6.24.1" } }, - "node_modules/babel-plugin-transform-es2015-object-super": { + "babel-plugin-transform-es2015-object-super": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", "dev": true, - "dependencies": { + "requires": { "babel-helper-replace-supers": "^6.24.1", "babel-runtime": "^6.22.0" } }, - "node_modules/babel-plugin-transform-es2015-parameters": { + "babel-plugin-transform-es2015-parameters": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", "dev": true, - "dependencies": { + "requires": { "babel-helper-call-delegate": "^6.24.1", "babel-helper-get-function-arity": "^6.24.1", "babel-runtime": "^6.22.0", @@ -936,99 +771,99 @@ "babel-types": "^6.24.1" } }, - "node_modules/babel-plugin-transform-es2015-shorthand-properties": { + "babel-plugin-transform-es2015-shorthand-properties": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", "dev": true, - "dependencies": { + "requires": { "babel-runtime": "^6.22.0", "babel-types": "^6.24.1" } }, - "node_modules/babel-plugin-transform-es2015-spread": { + "babel-plugin-transform-es2015-spread": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", "dev": true, - "dependencies": { + "requires": { "babel-runtime": "^6.22.0" } }, - "node_modules/babel-plugin-transform-es2015-sticky-regex": { + "babel-plugin-transform-es2015-sticky-regex": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", "dev": true, - "dependencies": { + "requires": { "babel-helper-regex": "^6.24.1", "babel-runtime": "^6.22.0", "babel-types": "^6.24.1" } }, - "node_modules/babel-plugin-transform-es2015-template-literals": { + "babel-plugin-transform-es2015-template-literals": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", "dev": true, - "dependencies": { + "requires": { "babel-runtime": "^6.22.0" } }, - "node_modules/babel-plugin-transform-es2015-typeof-symbol": { + "babel-plugin-transform-es2015-typeof-symbol": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", "dev": true, - "dependencies": { + "requires": { "babel-runtime": "^6.22.0" } }, - "node_modules/babel-plugin-transform-es2015-unicode-regex": { + "babel-plugin-transform-es2015-unicode-regex": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", "dev": true, - "dependencies": { + "requires": { "babel-helper-regex": "^6.24.1", "babel-runtime": "^6.22.0", "regexpu-core": "^2.0.0" } }, - "node_modules/babel-plugin-transform-regenerator": { + "babel-plugin-transform-regenerator": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", "dev": true, - "dependencies": { + "requires": { "regenerator-transform": "^0.10.0" } }, - "node_modules/babel-plugin-transform-runtime": { + "babel-plugin-transform-runtime": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz", "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=", "dev": true, - "dependencies": { + "requires": { "babel-runtime": "^6.22.0" } }, - "node_modules/babel-plugin-transform-strict-mode": { + "babel-plugin-transform-strict-mode": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", "dev": true, - "dependencies": { + "requires": { "babel-runtime": "^6.22.0", "babel-types": "^6.24.1" } }, - "node_modules/babel-preset-es2015": { + "babel-preset-es2015": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", "dev": true, - "dependencies": { + "requires": { "babel-plugin-check-es2015-constants": "^6.22.0", "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", @@ -1055,12 +890,12 @@ "babel-plugin-transform-regenerator": "^6.24.1" } }, - "node_modules/babel-register": { + "babel-register": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", "dev": true, - "dependencies": { + "requires": { "babel-core": "^6.26.0", "babel-runtime": "^6.26.0", "core-js": "^2.5.0", @@ -1070,22 +905,22 @@ "source-map-support": "^0.4.15" } }, - "node_modules/babel-runtime": { + "babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, - "dependencies": { + "requires": { "core-js": "^2.4.0", "regenerator-runtime": "^0.11.0" } }, - "node_modules/babel-template": { + "babel-template": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", "dev": true, - "dependencies": { + "requires": { "babel-runtime": "^6.26.0", "babel-traverse": "^6.26.0", "babel-types": "^6.26.0", @@ -1093,12 +928,12 @@ "lodash": "^4.17.4" } }, - "node_modules/babel-traverse": { + "babel-traverse": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", "dev": true, - "dependencies": { + "requires": { "babel-code-frame": "^6.26.0", "babel-messages": "^6.23.0", "babel-runtime": "^6.26.0", @@ -1110,39 +945,36 @@ "lodash": "^4.17.4" } }, - "node_modules/babel-types": { + "babel-types": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", "dev": true, - "dependencies": { + "requires": { "babel-runtime": "^6.26.0", "esutils": "^2.0.2", "lodash": "^4.17.4", "to-fast-properties": "^1.0.3" } }, - "node_modules/babylon": { + "babylon": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true, - "bin": { - "babylon": "bin/babylon.js" - } + "dev": true }, - "node_modules/balanced-match": { + "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, - "node_modules/base": { + "base": { "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, - "dependencies": { + "requires": { "cache-base": "^1.0.1", "class-utils": "^0.3.5", "component-emitter": "^1.2.1", @@ -1151,180 +983,130 @@ "mixin-deep": "^1.2.0", "pascalcase": "^0.1.1" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/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, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/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, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/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, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/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, "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/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, - "engines": { - "node": ">=0.10.0" + "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" + } + }, + "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" + } + }, + "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 + } } }, - "node_modules/base64-js": { + "base64-js": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", "dev": true }, - "node_modules/batch": { + "batch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", "dev": true }, - "node_modules/batch-processor": { + "batch-processor": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/batch-processor/-/batch-processor-1.0.0.tgz", - "integrity": "sha1-dclcMrdI4IUNEMKxaPa9vpiRrOg=" + "resolved": "https://registry.npmmirror.com/batch-processor/-/batch-processor-1.0.0.tgz", + "integrity": "sha512-xoLQD8gmmR32MeuBHgH0Tzd5PuSZx71ZsbhVxOCRbgktZEPe4SQy7s9Z50uPp0F/f7iw2XmkHN2xkgbMfckMDA==" }, - "node_modules/bcrypt-pbkdf": { + "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "dev": true, "optional": true, - "dependencies": { + "requires": { "tweetnacl": "^0.14.3" } }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, - "engines": { - "node": "*" - } + "binary-extensions": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", + "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", + "dev": true }, - "node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", + "dev": true }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", - "dev": true - }, - "node_modules/bn.js": { + "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 }, - "node_modules/body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "body-parser": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", "dev": true, - "dependencies": { - "bytes": "3.1.0", + "requires": { + "bytes": "3.0.0", "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", + "depd": "~1.1.1", + "http-errors": "~1.6.2", + "iconv-lite": "0.4.19", "on-finished": "~2.3.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "~1.6.15" }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true, - "engines": { - "node": ">=0.6" + "dependencies": { + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", + "dev": true + } } }, - "node_modules/bonjour": { + "bonjour": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", "dev": true, - "dependencies": { + "requires": { "array-flatten": "^2.1.0", "deep-equal": "^1.0.1", "dns-equal": "^1.0.0", @@ -1333,41 +1115,38 @@ "multicast-dns-service-types": "^1.1.0" } }, - "node_modules/boolbase": { + "boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", "dev": true }, - "node_modules/boom": { + "boom": { "version": "2.10.1", "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", "dev": true, "optional": true, - "dependencies": { + "requires": { "hoek": "2.x.x" - }, - "engines": { - "node": ">=0.10.40" } }, - "node_modules/brace-expansion": { + "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "dependencies": { + "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "node_modules/braces": { + "braces": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, - "dependencies": { + "requires": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", "extend-shallow": "^2.0.1", @@ -1379,34 +1158,30 @@ "split-string": "^3.0.2", "to-regex": "^3.0.1" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.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" + } + } } }, - "node_modules/brorand": { + "brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", "dev": true }, - "node_modules/browserify-aes": { + "browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, - "dependencies": { + "requires": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", "create-hash": "^1.1.0", @@ -1415,45 +1190,45 @@ "safe-buffer": "^5.0.1" } }, - "node_modules/browserify-cipher": { + "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, - "dependencies": { + "requires": { "browserify-aes": "^1.0.4", "browserify-des": "^1.0.0", "evp_bytestokey": "^1.0.0" } }, - "node_modules/browserify-des": { + "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, - "dependencies": { + "requires": { "cipher-base": "^1.0.1", "des.js": "^1.0.0", "inherits": "^2.0.1", "safe-buffer": "^5.1.2" } }, - "node_modules/browserify-rsa": { + "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, - "dependencies": { + "requires": { "bn.js": "^4.1.0", "randombytes": "^2.0.1" } }, - "node_modules/browserify-sign": { + "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, - "dependencies": { + "requires": { "bn.js": "^4.1.1", "browserify-rsa": "^4.0.0", "create-hash": "^1.1.0", @@ -1463,83 +1238,79 @@ "parse-asn1": "^5.0.0" } }, - "node_modules/browserify-zlib": { + "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, - "dependencies": { + "requires": { "pako": "~1.0.5" } }, - "node_modules/browserslist": { + "browserslist": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-0.4.0.tgz", "integrity": "sha1-O9SrkZncG5FQ1NbbpNnTqrvIbdQ=", "dev": true, - "dependencies": { + "requires": { "caniuse-db": "^1.0.30000153" } }, - "node_modules/buffer": { + "buffer": { "version": "4.9.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "dev": true, - "dependencies": { + "requires": { "base64-js": "^1.0.2", "ieee754": "^1.1.4", "isarray": "^1.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + } } }, - "node_modules/buffer-indexof": { + "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 }, - "node_modules/buffer-xor": { + "buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true }, - "node_modules/buffer/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/builtin-modules": { + "builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "dev": true }, - "node_modules/builtin-status-codes": { + "builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", "dev": true }, - "node_modules/bytes": { + "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true, - "engines": { - "node": ">= 0.8" - } + "dev": true }, - "node_modules/cache-base": { + "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, - "dependencies": { + "requires": { "collection-visit": "^1.0.0", "component-emitter": "^1.2.1", "get-value": "^2.0.6", @@ -1549,13114 +1320,2314 @@ "to-object-path": "^0.3.0", "union-value": "^1.0.0", "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" } }, - "node_modules/camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "camel-case": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-1.2.2.tgz", + "integrity": "sha1-Gsp8TRlTWaLOmVV5NDPG5VQlEfI=", "dev": true, - "dependencies": { - "no-case": "^2.2.0", + "requires": { + "sentence-case": "^1.1.1", "upper-case": "^1.1.1" } }, - "node_modules/camelcase": { + "camelcase": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "dev": true }, - "node_modules/camelcase-keys": { + "camelcase-keys": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "dev": true, - "dependencies": { + "requires": { "camelcase": "^2.0.0", "map-obj": "^1.0.0" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/camelcase-keys/node_modules/camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + } } }, - "node_modules/caniuse-api": { + "caniuse-api": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", "dev": true, - "dependencies": { + "requires": { "browserslist": "^1.3.6", "caniuse-db": "^1.0.30000529", "lodash.memoize": "^4.1.2", "lodash.uniq": "^4.5.0" - } - }, - "node_modules/caniuse-api/node_modules/browserslist": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "dev": true, - "dependencies": { - "caniuse-db": "^1.0.30000639", - "electron-to-chromium": "^1.2.7" }, - "bin": { - "browserslist": "cli.js" + "dependencies": { + "browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true, + "requires": { + "caniuse-db": "^1.0.30000639", + "electron-to-chromium": "^1.2.7" + } + } } }, - "node_modules/caniuse-db": { + "caniuse-db": { "version": "1.0.30000872", "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000872.tgz", "integrity": "sha1-P25Ttj03N2i/meiWEz1m74nEmZk=", "dev": true }, - "node_modules/caseless": { + "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true, "optional": true }, - "node_modules/center-align": { + "center-align": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", "dev": true, - "dependencies": { + "requires": { "align-text": "^0.1.3", "lazy-cache": "^1.0.3" - }, - "engines": { - "node": ">=0.10.0" } }, - "node_modules/chalk": { + "cfb": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/cfb/-/cfb-1.2.2.tgz", + "integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==", + "requires": { + "adler-32": "~1.3.0", + "crc-32": "~1.2.0" + } + }, + "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, - "dependencies": { + "requires": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", "has-ansi": "^2.0.0", "strip-ansi": "^3.0.0", "supports-color": "^2.0.0" }, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } } }, - "node_modules/chalk/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "change-case": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-2.3.1.tgz", + "integrity": "sha1-LE/ePwY7tB0AzWjg1aCdthy+iU8=", "dev": true, - "engines": { - "node": ">=0.8.0" + "requires": { + "camel-case": "^1.1.1", + "constant-case": "^1.1.0", + "dot-case": "^1.1.0", + "is-lower-case": "^1.1.0", + "is-upper-case": "^1.1.0", + "lower-case": "^1.1.1", + "lower-case-first": "^1.0.0", + "param-case": "^1.1.0", + "pascal-case": "^1.1.0", + "path-case": "^1.1.0", + "sentence-case": "^1.1.1", + "snake-case": "^1.1.0", + "swap-case": "^1.1.0", + "title-case": "^1.1.0", + "upper-case": "^1.1.1", + "upper-case-first": "^1.1.0" } }, - "node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "chokidar": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", + "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", "dev": true, - "dependencies": { + "requires": { "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", + "async-each": "^1.0.0", + "braces": "^2.3.0", + "fsevents": "^1.2.2", "glob-parent": "^3.1.0", - "inherits": "^2.0.3", + "inherits": "^2.0.1", "is-binary-path": "^1.0.0", "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", + "lodash.debounce": "^4.0.8", + "normalize-path": "^2.1.1", "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "optionalDependencies": { - "fsevents": "^1.2.7" - } - }, - "node_modules/chokidar/node_modules/fsevents": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.11.tgz", - "integrity": "sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw==", - "bundleDependencies": [ - "abbrev", - "ansi-regex", - "aproba", - "are-we-there-yet", - "balanced-match", - "brace-expansion", - "chownr", - "code-point-at", - "concat-map", - "console-control-strings", - "core-util-is", - "debug", - "deep-extend", - "delegates", - "detect-libc", - "fs-minipass", - "fs.realpath", - "gauge", - "glob", - "has-unicode", - "iconv-lite", - "ignore-walk", - "inflight", - "inherits", - "ini", - "is-fullwidth-code-point", - "isarray", - "minimatch", - "minimist", - "minipass", - "minizlib", - "mkdirp", - "ms", - "needle", - "node-pre-gyp", - "nopt", - "npm-bundled", - "npm-normalize-package-bin", - "npm-packlist", - "npmlog", - "number-is-nan", - "object-assign", - "once", - "os-homedir", - "os-tmpdir", - "osenv", - "path-is-absolute", - "process-nextick-args", - "rc", - "readable-stream", - "rimraf", - "safe-buffer", - "safer-buffer", - "sax", - "semver", - "set-blocking", - "signal-exit", - "string-width", - "string_decoder", - "strip-ansi", - "strip-json-comments", - "tar", - "util-deprecate", - "wide-align", - "wrappy", - "yallist" - ], - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1", - "node-pre-gyp": "*" - }, - "engines": { - "node": ">=4.0" + "readdirp": "^2.0.0", + "upath": "^1.0.5" } }, - "node_modules/chokidar/node_modules/fsevents/node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true - }, - "node_modules/chokidar/node_modules/fsevents/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "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, - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "node_modules/chokidar/node_modules/fsevents/node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "clap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", + "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true + "requires": { + "chalk": "^1.1.3" + } }, - "node_modules/chokidar/node_modules/fsevents/node_modules/are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "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" + } + } } }, - "node_modules/chokidar/node_modules/fsevents/node_modules/balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true - }, - "node_modules/chokidar/node_modules/fsevents/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "clean-css": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.1.9.tgz", + "integrity": "sha1-29BaFIvklDuzfOBnnmdsvJ9YAmY=", "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, + "requires": { + "commander": "2.6.x", + "source-map": ">=0.1.43 <0.2" + }, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } + } } }, - "node_modules/chokidar/node_modules/fsevents/node_modules/chownr": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz", - "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==", + "cli": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/cli/-/cli-0.6.6.tgz", + "integrity": "sha1-Aq1Eo4Cr8nraxebwzdewQ9dMU+M=", "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true + "requires": { + "exit": "0.1.2", + "glob": "~ 3.2.1" + } }, - "node_modules/chokidar/node_modules/fsevents/node_modules/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, - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" + "clipboard": { + "version": "2.0.10", + "resolved": "https://registry.npmmirror.com/clipboard/-/clipboard-2.0.10.tgz", + "integrity": "sha512-cz3m2YVwFz95qSEbCDi2fzLN/epEN9zXBvfgAoGkvGOJZATMl9gtTDVOtBYkx2ODUJl2kvmud7n32sV2BpYR4g==", + "requires": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" } }, - "node_modules/chokidar/node_modules/fsevents/node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true + "requires": { + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" + } }, - "node_modules/chokidar/node_modules/fsevents/node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true }, - "node_modules/chokidar/node_modules/fsevents/node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true }, - "node_modules/chokidar/node_modules/fsevents/node_modules/debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "coa": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", + "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "ms": "^2.1.1" + "requires": { + "q": "^1.1.2" } }, - "node_modules/chokidar/node_modules/fsevents/node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=4.0.0" - } + "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 + }, + "codepage": { + "version": "1.15.0", + "resolved": "https://registry.npmmirror.com/codepage/-/codepage-1.15.0.tgz", + "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==" }, - "node_modules/chokidar/node_modules/fsevents/node_modules/delegates": { + "collection-visit": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } }, - "node_modules/chokidar/node_modules/fsevents/node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "color": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", + "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", "dev": true, - "inBundle": true, - "license": "Apache-2.0", - "optional": true, - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" + "requires": { + "clone": "^1.0.2", + "color-convert": "^1.3.0", + "color-string": "^0.3.0" } }, - "node_modules/chokidar/node_modules/fsevents/node_modules/fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "color-convert": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz", + "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==", "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "minipass": "^2.6.0" + "requires": { + "color-name": "1.1.1" } }, - "node_modules/chokidar/node_modules/fsevents/node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true + "color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=", + "dev": true }, - "node_modules/chokidar/node_modules/fsevents/node_modules/gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "color-string": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", + "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "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" + "requires": { + "color-name": "^1.0.0" } }, - "node_modules/chokidar/node_modules/fsevents/node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "colormin": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", + "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "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" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "requires": { + "color": "^0.11.0", + "css-color-names": "0.0.4", + "has": "^1.0.1" } }, - "node_modules/chokidar/node_modules/fsevents/node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true }, - "node_modules/chokidar/node_modules/fsevents/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "combined-stream": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "dev": true, - "inBundle": true, - "license": "MIT", "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "delayed-stream": "~1.0.0" } }, - "node_modules/chokidar/node_modules/fsevents/node_modules/ignore-walk": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", - "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "minimatch": "^3.0.4" - } + "commander": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz", + "integrity": "sha1-nfflL7Kgyw+4kFjugMMQQiXzfh0=", + "dev": true }, - "node_modules/chokidar/node_modules/fsevents/node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true }, - "node_modules/chokidar/node_modules/fsevents/node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true }, - "node_modules/chokidar/node_modules/fsevents/node_modules/ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "compressible": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.14.tgz", + "integrity": "sha1-MmxfUH+7BV9UEWeCuWmoG2einac=", "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true, - "engines": { - "node": "*" + "requires": { + "mime-db": ">= 1.34.0 < 2" } }, - "node_modules/chokidar/node_modules/fsevents/node_modules/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=", + "compression": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz", + "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==", "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.14", + "debug": "2.6.9", + "on-headers": "~1.0.1", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" } }, - "node_modules/chokidar/node_modules/fsevents/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, - "node_modules/chokidar/node_modules/fsevents/node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "concat-stream": { + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.4.11.tgz", + "integrity": "sha512-X3JMh8+4je3U1cQpG87+f9lXHDrqcb2MVLg9L7o8b1UZ0DzhRrUpdn65ttzu10PpJPPI3MQNkis+oha6TSA9Mw==", "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "requires": { + "inherits": "~2.0.1", + "readable-stream": "~1.1.9", + "typedarray": "~0.0.5" } }, - "node_modules/chokidar/node_modules/fsevents/node_modules/minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true - }, - "node_modules/chokidar/node_modules/fsevents/node_modules/minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "config-chain": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.11.tgz", + "integrity": "sha1-q6CXR9++TD5w52am5BWG4YWfxvI=", "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" } }, - "node_modules/chokidar/node_modules/fsevents/node_modules/minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "connect-history-api-fallback": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", + "integrity": "sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=", + "dev": true + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "minipass": "^2.9.0" + "requires": { + "date-now": "^0.1.4" } }, - "node_modules/chokidar/node_modules/fsevents/node_modules/mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "consolidate": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.14.5.tgz", + "integrity": "sha1-WiUEe8dvcwcmZ8jLUsmJiI9JTGM=", "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "minimist": "0.0.8" - }, - "bin": { - "mkdirp": "bin/cmd.js" + "requires": { + "bluebird": "^3.1.1" } }, - "node_modules/chokidar/node_modules/fsevents/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "constant-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-1.1.2.tgz", + "integrity": "sha1-jsLKW6ND4Aqjjb9OIA/VrJB+/WM=", "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true + "requires": { + "snake-case": "^1.1.0", + "upper-case": "^1.1.1" + } }, - "node_modules/chokidar/node_modules/fsevents/node_modules/needle": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz", - "integrity": "sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - }, - "bin": { - "needle": "bin/needle" - }, - "engines": { - "node": ">= 4.4.x" - } + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true }, - "node_modules/chokidar/node_modules/fsevents/node_modules/node-pre-gyp": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz", - "integrity": "sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA==", - "dev": true, - "inBundle": true, - "license": "BSD-3-Clause", - "optional": true, - "dependencies": { - "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.4.2" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" - } + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", + "dev": true }, - "node_modules/chokidar/node_modules/fsevents/node_modules/nopt": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", - "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "abbrev": "1", - "osenv": "^0.1.4" - }, - "bin": { - "nopt": "bin/nopt.js" - } + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true }, - "node_modules/chokidar/node_modules/fsevents/node_modules/npm-bundled": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", - "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "npm-normalize-package-bin": "^1.0.1" - } + "convert-source-map": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", + "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", + "dev": true }, - "node_modules/chokidar/node_modules/fsevents/node_modules/npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true }, - "node_modules/chokidar/node_modules/fsevents/node_modules/npm-packlist": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.7.tgz", - "integrity": "sha512-vAj7dIkp5NhieaGZxBJB8fF4R0078rqsmhJcAfXZ6O7JJhjhPK96n5Ry1oZcfLXgfun0GWTZPOxaEyqv8GBykQ==", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true }, - "node_modules/chokidar/node_modules/fsevents/node_modules/npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true }, - "node_modules/chokidar/node_modules/fsevents/node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" - } + "core-js": { + "version": "2.5.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", + "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==", + "dev": true }, - "node_modules/chokidar/node_modules/fsevents/node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" - } + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true }, - "node_modules/chokidar/node_modules/fsevents/node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "cosmiconfig": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", + "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true, + "requires": { + "is-directory": "^0.3.1", + "js-yaml": "^3.4.3", + "minimist": "^1.2.0", + "object-assign": "^4.1.0", + "os-homedir": "^1.0.1", + "parse-json": "^2.2.0", + "require-from-string": "^1.1.0" + }, "dependencies": { - "wrappy": "1" + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } } }, - "node_modules/chokidar/node_modules/fsevents/node_modules/os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==" + }, + "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, - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" } }, - "node_modules/chokidar/node_modules/fsevents/node_modules/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=", + "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, - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, - "node_modules/chokidar/node_modules/fsevents/node_modules/osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "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, - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" + "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" } }, - "node_modules/chokidar/node_modules/fsevents/node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", "dev": true, - "inBundle": true, - "license": "MIT", "optional": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "boom": "2.x.x" } }, - "node_modules/chokidar/node_modules/fsevents/node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "crypto-browserify": { + "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, - "inBundle": true, - "license": "MIT", - "optional": true + "requires": { + "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": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true }, - "node_modules/chokidar/node_modules/fsevents/node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "css-loader": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.23.1.tgz", + "integrity": "sha1-n6I/K1wJZSNZEK1ezvO4o2OQ/lA=", "dev": true, - "inBundle": true, - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "optional": true, - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" + "requires": { + "css-selector-tokenizer": "^0.5.1", + "cssnano": ">=2.6.1 <4", + "loader-utils": "~0.2.2", + "lodash.camelcase": "^3.0.1", + "object-assign": "^4.0.1", + "postcss": "^5.0.6", + "postcss-modules-extract-imports": "^1.0.0", + "postcss-modules-local-by-default": "^1.0.1", + "postcss-modules-scope": "^1.0.0", + "postcss-modules-values": "^1.1.0", + "source-list-map": "^0.1.4" } }, - "node_modules/chokidar/node_modules/fsevents/node_modules/rc/node_modules/minimist": { + "css-select": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true - }, - "node_modules/chokidar/node_modules/fsevents/node_modules/readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "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" + "requires": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" } }, - "node_modules/chokidar/node_modules/fsevents/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "css-selector-tokenizer": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.5.4.tgz", + "integrity": "sha1-E5uv00o1/QwUKEhwSeBpnm9qLCE=", "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "requires": { + "cssesc": "^0.1.0", + "fastparse": "^1.1.1" } }, - "node_modules/chokidar/node_modules/fsevents/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true + "css-what": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", + "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", + "dev": true }, - "node_modules/chokidar/node_modules/fsevents/node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true + "cssesc": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", + "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", + "dev": true }, - "node_modules/chokidar/node_modules/fsevents/node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true - }, - "node_modules/chokidar/node_modules/fsevents/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/chokidar/node_modules/fsevents/node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true - }, - "node_modules/chokidar/node_modules/fsevents/node_modules/signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true - }, - "node_modules/chokidar/node_modules/fsevents/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "cssnano": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", + "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "safe-buffer": "~5.1.0" + "requires": { + "autoprefixer": "^6.3.1", + "decamelize": "^1.1.2", + "defined": "^1.0.0", + "has": "^1.0.1", + "object-assign": "^4.0.1", + "postcss": "^5.0.14", + "postcss-calc": "^5.2.0", + "postcss-colormin": "^2.1.8", + "postcss-convert-values": "^2.3.4", + "postcss-discard-comments": "^2.0.4", + "postcss-discard-duplicates": "^2.0.1", + "postcss-discard-empty": "^2.0.1", + "postcss-discard-overridden": "^0.1.1", + "postcss-discard-unused": "^2.2.1", + "postcss-filter-plugins": "^2.0.0", + "postcss-merge-idents": "^2.1.5", + "postcss-merge-longhand": "^2.0.1", + "postcss-merge-rules": "^2.0.3", + "postcss-minify-font-values": "^1.0.2", + "postcss-minify-gradients": "^1.0.1", + "postcss-minify-params": "^1.0.4", + "postcss-minify-selectors": "^2.0.4", + "postcss-normalize-charset": "^1.1.0", + "postcss-normalize-url": "^3.0.7", + "postcss-ordered-values": "^2.1.0", + "postcss-reduce-idents": "^2.2.2", + "postcss-reduce-initial": "^1.0.0", + "postcss-reduce-transforms": "^1.0.3", + "postcss-svgo": "^2.1.1", + "postcss-unique-selectors": "^2.0.2", + "postcss-value-parser": "^3.2.3", + "postcss-zindex": "^2.0.1" } }, - "node_modules/chokidar/node_modules/fsevents/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "csso": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", + "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "requires": { + "clap": "^1.0.9", + "source-map": "^0.5.3" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/chokidar/node_modules/fsevents/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } } }, - "node_modules/chokidar/node_modules/fsevents/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "array-find-index": "^1.0.1" } }, - "node_modules/chokidar/node_modules/fsevents/node_modules/tar": { - "version": "4.4.13", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", - "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, - "inBundle": true, - "license": "ISC", "optional": true, - "dependencies": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" + "requires": { + "assert-plus": "^1.0.0" }, - "engines": { - "node": ">=4.5" + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "optional": true + } } }, - "node_modules/chokidar/node_modules/fsevents/node_modules/util-deprecate": { + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true + }, + "de-indent": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", + "dev": true }, - "node_modules/chokidar/node_modules/fsevents/node_modules/wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "string-width": "^1.0.2 || 2" + "requires": { + "ms": "2.0.0" } }, - "node_modules/chokidar/node_modules/fsevents/node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true }, - "node_modules/chokidar/node_modules/fsevents/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true }, - "node_modules/chokidar/node_modules/nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", - "dev": true, - "optional": true + "deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", + "dev": true }, - "node_modules/chokidar/node_modules/readdirp": { + "deepmerge": { "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, - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" - } + "resolved": "https://registry.npmmirror.com/deepmerge/-/deepmerge-2.2.1.tgz", + "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==" }, - "node_modules/chokidar/node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "define-properties": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", + "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", "dev": true, - "engines": { - "node": ">=4", - "yarn": "*" + "requires": { + "foreach": "^2.0.5", + "object-keys": "^1.0.8" } }, - "node_modules/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==", + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "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" + } + }, + "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 + } } }, - "node_modules/clap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", - "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "del": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", + "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", "dev": true, - "dependencies": { - "chalk": "^1.1.3" + "requires": { + "globby": "^6.1.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "p-map": "^1.1.1", + "pify": "^3.0.0", + "rimraf": "^2.2.8" }, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } } }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } + "optional": true }, - "node_modules/class-utils/node_modules/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, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } + "delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" }, - "node_modules/clean-css": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", - "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", - "dev": true, - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 4.0" - } + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true }, - "node_modules/clean-css/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, - "node_modules/clipboard": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.6.tgz", - "integrity": "sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg==", - "dependencies": { - "good-listener": "^1.2.2", - "select": "^1.1.2", - "tiny-emitter": "^2.0.0" - } + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true }, - "node_modules/cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", "dev": true, - "dependencies": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" + "requires": { + "repeating": "^2.0.0" } }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true, - "engines": { - "node": ">=0.8" - } + "detect-node": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.3.tgz", + "integrity": "sha1-ogM8CcyOFY03dI+951B4Mr1s4Sc=", + "dev": true }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "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, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" } }, - "node_modules/coa": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", - "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", - "dev": true, - "dependencies": { - "q": "^1.1.2" - }, - "engines": { - "node": ">= 0.8.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 }, - "node_modules/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=", + "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, - "engines": { - "node": ">=0.10.0" + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" } }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "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, - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "buffer-indexof": "^1.0.0" } }, - "node_modules/color": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", - "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", + "dom-converter": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.1.4.tgz", + "integrity": "sha1-pF71cnuJDJv/5tfIduexnLDhfzs=", "dev": true, + "requires": { + "utila": "~0.3" + }, "dependencies": { - "clone": "^1.0.2", - "color-convert": "^1.3.0", - "color-string": "^0.3.0" + "utila": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", + "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", + "dev": true + } } }, - "node_modules/color-convert": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz", - "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==", + "dom-serializer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", "dev": true, + "requires": { + "domelementtype": "~1.1.1", + "entities": "~1.1.1" + }, "dependencies": { - "color-name": "1.1.1" + "domelementtype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", + "dev": true + } } }, - "node_modules/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=", + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true }, - "node_modules/color-string": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", - "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", + "domelementtype": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", + "dev": true + }, + "domhandler": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz", + "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", "dev": true, - "dependencies": { - "color-name": "^1.0.0" + "requires": { + "domelementtype": "1" } }, - "node_modules/colormin": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", - "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", "dev": true, - "dependencies": { - "color": "^0.11.0", - "css-color-names": "0.0.4", - "has": "^1.0.1" + "requires": { + "dom-serializer": "0", + "domelementtype": "1" } }, - "node_modules/colors": { + "dot-case": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-1.1.2.tgz", + "integrity": "sha1-HnOCaQDeKNbeVIC8HeMdCEKwa+w=", "dev": true, - "engines": { - "node": ">=0.1.90" + "requires": { + "sentence-case": "^1.1.2" } }, - "node_modules/combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "dev": true, "optional": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" } }, - "node_modules/commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "dev": true + "editorconfig": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.13.3.tgz", + "integrity": "sha512-WkjsUNVCu+ITKDj73QDvi0trvpdDWdkDyHybDGSXPfekLCqwmpD7CP7iPbvBgosNuLcI96XTDwNa75JyFl7tEQ==", + "dev": true, + "requires": { + "bluebird": "^3.0.5", + "commander": "^2.9.0", + "lru-cache": "^3.2.0", + "semver": "^5.1.0", + "sigmund": "^1.0.1" + }, + "dependencies": { + "commander": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.16.0.tgz", + "integrity": "sha512-sVXqklSaotK9at437sFlFpyOcJonxe0yST/AG9DkQKUdIE6IqGIMv4SfAQSKaJbSdVEJYItASCrBiVQHq1HQew==", + "dev": true + }, + "lru-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-3.2.0.tgz", + "integrity": "sha1-cXibO39Tmb7IVl3aOKow0qCX7+4=", + "dev": true, + "requires": { + "pseudomap": "^1.0.1" + } + } + } }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", "dev": true }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "electron-to-chromium": { + "version": "1.3.52", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.52.tgz", + "integrity": "sha1-0tnxJwuko7lnuDHEDvcftNmrXOA=", "dev": true }, - "node_modules/compressible": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz", - "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==", - "dev": true, - "dependencies": { - "mime-db": ">= 1.40.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compressible/node_modules/mime-db": { - "version": "1.42.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", - "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==", - "dev": true, - "engines": { - "node": ">= 0.6" + "element-resize-detector": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/element-resize-detector/-/element-resize-detector-1.2.4.tgz", + "integrity": "sha512-Fl5Ftk6WwXE0wqCgNoseKWndjzZlDCwuPTcoVZfCP9R3EHQF8qUtr3YUPNETegRBOKqQKPW3n4kiIWngGi8tKg==", + "requires": { + "batch-processor": "1.0.0" } }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "elliptic": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", + "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", "dev": true, - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" + "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" } }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", "dev": true }, - "node_modules/config-chain": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.11.tgz", - "integrity": "sha1-q6CXR9++TD5w52am5BWG4YWfxvI=", + "enhanced-resolve": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", + "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", "dev": true, - "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "object-assign": "^4.0.1", + "tapable": "^0.2.7" } }, - "node_modules/connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "dev": true, - "engines": { - "node": ">=0.8" - } + "entities": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", + "dev": true }, - "node_modules/console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", "dev": true, - "dependencies": { - "date-now": "^0.1.4" + "requires": { + "prr": "~1.0.1" } }, - "node_modules/consolidate": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.14.5.tgz", - "integrity": "sha1-WiUEe8dvcwcmZ8jLUsmJiI9JTGM=", + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, - "dependencies": { - "bluebird": "^3.1.1" + "requires": { + "is-arrayish": "^0.2.1" } }, - "node_modules/constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "node_modules/content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "es-abstract": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", + "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", "dev": true, - "dependencies": { - "safe-buffer": "5.1.2" - }, - "engines": { - "node": ">= 0.6" + "requires": { + "es-to-primitive": "^1.1.1", + "function-bind": "^1.1.1", + "has": "^1.0.1", + "is-callable": "^1.1.3", + "is-regex": "^1.0.4" } }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "es-to-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", + "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", "dev": true, - "engines": { - "node": ">= 0.6" + "requires": { + "is-callable": "^1.1.1", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.1" } }, - "node_modules/convert-source-map": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", - "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", + "es6-promise": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-2.3.0.tgz", + "integrity": "sha1-lu258v2wGZWCKyY92KratnSBgbw=", "dev": true }, - "node_modules/cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "es6-templates": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/es6-templates/-/es6-templates-0.2.3.tgz", + "integrity": "sha1-XLmsn7He1usSOTQrgdeSu7QHjuQ=", "dev": true, - "engines": { - "node": ">= 0.6" + "requires": { + "recast": "~0.11.12", + "through": "~2.3.6" } }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", "dev": true }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true }, - "node_modules/core-js": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", - "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==", + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", "dev": true }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", "dev": true }, - "node_modules/cosmiconfig": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", - "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", - "dev": true, - "dependencies": { - "is-directory": "^0.3.1", - "js-yaml": "^3.4.3", - "minimist": "^1.2.0", - "object-assign": "^4.1.0", - "os-homedir": "^1.0.1", - "parse-json": "^2.2.0", - "require-from-string": "^1.1.0" - }, - "engines": { - "node": ">=0.12" - } + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true }, - "node_modules/cosmiconfig/node_modules/minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "eventemitter3": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", + "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==", "dev": true }, - "node_modules/create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "dev": true + }, + "eventsource": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", + "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" + "requires": { + "original": ">=0.0.5" } }, - "node_modules/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==", + "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, - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", + "requires": { "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" + "safe-buffer": "^5.1.1" } }, - "node_modules/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==", + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "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": { - "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" + "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" + } + } } }, - "node_modules/cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "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=", "dev": true, - "optional": true, - "dependencies": { - "boom": "2.x.x" + "requires": { + "fill-range": "^2.1.0" }, - "engines": { - "node": ">=0.10.40" + "dependencies": { + "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==", + "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" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } } }, - "node_modules/crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "express": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", + "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", "dev": true, - "dependencies": { - "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" + "requires": { + "accepts": "~1.3.5", + "array-flatten": "1.1.1", + "body-parser": "1.18.2", + "content-disposition": "0.5.2", + "content-type": "~1.0.4", + "cookie": "0.3.1", + "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", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.3", + "qs": "6.5.1", + "range-parser": "~1.2.0", + "safe-buffer": "5.1.1", + "send": "0.16.2", + "serve-static": "1.13.2", + "setprototypeof": "1.1.0", + "statuses": "~1.4.0", + "type-is": "~1.6.16", + "utils-merge": "1.0.1", + "vary": "~1.1.2" }, - "engines": { - "node": "*" + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", + "dev": true + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true + } } }, - "node_modules/css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true, - "engines": { - "node": "*" - } + "optional": true }, - "node_modules/css-loader": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.23.1.tgz", - "integrity": "sha1-n6I/K1wJZSNZEK1ezvO4o2OQ/lA=", + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, "dependencies": { - "css-selector-tokenizer": "^0.5.1", - "cssnano": ">=2.6.1 <4", - "loader-utils": "~0.2.2", - "lodash.camelcase": "^3.0.1", - "object-assign": "^4.0.1", - "postcss": "^5.0.6", - "postcss-modules-extract-imports": "^1.0.0", - "postcss-modules-local-by-default": "^1.0.1", - "postcss-modules-scope": "^1.0.0", - "postcss-modules-values": "^1.1.0", - "source-list-map": "^0.1.4" + "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" + } + } } }, - "node_modules/css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "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": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" + "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" + } + }, + "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" + } + }, + "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 + } } }, - "node_modules/css-selector-tokenizer": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.5.4.tgz", - "integrity": "sha1-E5uv00o1/QwUKEhwSeBpnm9qLCE=", + "extract-text-webpack-plugin": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-2.1.2.tgz", + "integrity": "sha1-dW7076gVXDaBgz+8NNpTuUF0bWw=", "dev": true, + "requires": { + "async": "^2.1.2", + "loader-utils": "^1.0.2", + "schema-utils": "^0.3.0", + "webpack-sources": "^1.0.1" + }, "dependencies": { - "cssesc": "^0.1.0", - "fastparse": "^1.1.1" + "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 + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "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": "1.1.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0" + } + } } }, - "node_modules/css-what": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", - "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", "dev": true, - "engines": { - "node": "*" - } + "optional": true }, - "node_modules/cssesc": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", - "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", + "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=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fastparse": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz", + "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=", + "dev": true + }, + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", "dev": true, - "bin": { - "cssesc": "bin/cssesc" + "requires": { + "websocket-driver": ">=0.5.1" } }, - "node_modules/cssnano": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", - "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", + "file-loader": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-0.8.5.tgz", + "integrity": "sha1-knXQMf54DyfUf19K8CvUNxPMFRs=", "dev": true, - "dependencies": { - "autoprefixer": "^6.3.1", - "decamelize": "^1.1.2", - "defined": "^1.0.0", - "has": "^1.0.1", - "object-assign": "^4.0.1", - "postcss": "^5.0.14", - "postcss-calc": "^5.2.0", - "postcss-colormin": "^2.1.8", - "postcss-convert-values": "^2.3.4", - "postcss-discard-comments": "^2.0.4", - "postcss-discard-duplicates": "^2.0.1", - "postcss-discard-empty": "^2.0.1", - "postcss-discard-overridden": "^0.1.1", - "postcss-discard-unused": "^2.2.1", - "postcss-filter-plugins": "^2.0.0", - "postcss-merge-idents": "^2.1.5", - "postcss-merge-longhand": "^2.0.1", - "postcss-merge-rules": "^2.0.3", - "postcss-minify-font-values": "^1.0.2", - "postcss-minify-gradients": "^1.0.1", - "postcss-minify-params": "^1.0.4", - "postcss-minify-selectors": "^2.0.4", - "postcss-normalize-charset": "^1.1.0", - "postcss-normalize-url": "^3.0.7", - "postcss-ordered-values": "^2.1.0", - "postcss-reduce-idents": "^2.2.2", - "postcss-reduce-initial": "^1.0.0", - "postcss-reduce-transforms": "^1.0.3", - "postcss-svgo": "^2.1.1", - "postcss-unique-selectors": "^2.0.2", - "postcss-value-parser": "^3.2.3", - "postcss-zindex": "^2.0.1" - } - }, - "node_modules/csso": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", - "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", - "dev": true, - "dependencies": { - "clap": "^1.0.9", - "source-map": "^0.5.3" - }, - "bin": { - "csso": "bin/csso" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/csso/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true, - "dependencies": { - "array-find-index": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "optional": true, - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/dashdash/node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.8" + "requires": { + "loader-utils": "~0.2.5" } }, - "node_modules/date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", - "dev": true + "file-saver": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/file-saver/-/file-saver-2.0.5.tgz", + "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" }, - "node_modules/de-indent": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", - "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", + "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 }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "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": { - "ms": "2.0.0" - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true, - "engines": { - "node": ">=0.10" + "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" + } + } } }, - "node_modules/deep-equal": { + "finalhandler": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", "dev": true, - "dependencies": { - "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" - } - }, - "node_modules/deepmerge": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", - "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==", - "engines": { - "node": ">=0.10.0" + "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" } }, - "node_modules/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==", + "find-cache-dir": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", + "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", "dev": true, - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" + "requires": { + "commondir": "^1.0.1", + "mkdirp": "^0.5.1", + "pkg-dir": "^1.0.0" } }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, - "node_modules/define-property/node_modules/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, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } + "flatten": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", + "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=", + "dev": true }, - "node_modules/define-property/node_modules/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==", + "follow-redirects": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.1.tgz", + "integrity": "sha512-v9GI1hpaqq1ZZR6pBD1+kI7O24PhDvNGNodjS3MdcEqyrahCp8zbtpv+2B/krUnSmUH80lbAS7MrdeK5IylgKg==", "dev": true, - "dependencies": { - "kind-of": "^6.0.0" + "requires": { + "debug": "^3.1.0" }, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "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" + } + } } }, - "node_modules/define-property/node_modules/is-descriptor": { + "for-in": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true }, - "node_modules/define-property/node_modules/kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "for-in": "^1.0.1" } }, - "node_modules/defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", "dev": true }, - "node_modules/del": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", - "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", - "dev": true, - "dependencies": { - "globby": "^6.1.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "p-map": "^1.1.1", - "pify": "^3.0.0", - "rimraf": "^2.2.8" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/del/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", "dev": true, - "engines": { - "node": ">=4" - } + "optional": true }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", "dev": true, "optional": true, - "engines": { - "node": ">=0.4.0" + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" } }, - "node_modules/delegate": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", - "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true }, - "node_modules/depd": { + "frac": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true, - "engines": { - "node": ">= 0.6" - } + "resolved": "https://registry.npmmirror.com/frac/-/frac-1.1.2.tgz", + "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==" }, - "node_modules/des.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "requires": { + "map-cache": "^0.2.2" } }, - "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", "dev": true }, - "node_modules/detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true, - "dependencies": { - "repeating": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/detect-node": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", - "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", - "dev": true - }, - "node_modules/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, - "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "node_modules/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 - }, - "node_modules/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, - "dependencies": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/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, - "dependencies": { - "buffer-indexof": "^1.0.0" - } - }, - "node_modules/dom-converter": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.1.4.tgz", - "integrity": "sha1-pF71cnuJDJv/5tfIduexnLDhfzs=", - "dev": true, - "dependencies": { - "utila": "~0.3" - } - }, - "node_modules/dom-converter/node_modules/utila": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", - "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", - "dev": true - }, - "node_modules/dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", - "dev": true, - "dependencies": { - "domelementtype": "~1.1.1", - "entities": "~1.1.1" - } - }, - "node_modules/dom-serializer/node_modules/domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", - "dev": true - }, - "node_modules/domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true, - "engines": { - "node": ">=0.4", - "npm": ">=1.2" - } - }, - "node_modules/domelementtype": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", - "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", - "dev": true - }, - "node_modules/domhandler": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz", - "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", - "dev": true, - "dependencies": { - "domelementtype": "1" - } - }, - "node_modules/domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "optional": true, - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/echarts": { - "version": "4.9.0", - "resolved": "https://registry.npm.taobao.org/echarts/download/echarts-4.9.0.tgz?cache=0&sync_timestamp=1605024840505&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fecharts%2Fdownload%2Fecharts-4.9.0.tgz", - "integrity": "sha1-qbm6oD8Doqcx5jQMVb77V6nhNH0=", - "dependencies": { - "zrender": "4.3.2" - } - }, - "node_modules/editorconfig": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.13.3.tgz", - "integrity": "sha512-WkjsUNVCu+ITKDj73QDvi0trvpdDWdkDyHybDGSXPfekLCqwmpD7CP7iPbvBgosNuLcI96XTDwNa75JyFl7tEQ==", - "dev": true, - "dependencies": { - "bluebird": "^3.0.5", - "commander": "^2.9.0", - "lru-cache": "^3.2.0", - "semver": "^5.1.0", - "sigmund": "^1.0.1" - }, - "bin": { - "editorconfig": "bin/editorconfig" - } - }, - "node_modules/editorconfig/node_modules/commander": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.16.0.tgz", - "integrity": "sha512-sVXqklSaotK9at437sFlFpyOcJonxe0yST/AG9DkQKUdIE6IqGIMv4SfAQSKaJbSdVEJYItASCrBiVQHq1HQew==", - "dev": true - }, - "node_modules/editorconfig/node_modules/lru-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-3.2.0.tgz", - "integrity": "sha1-cXibO39Tmb7IVl3aOKow0qCX7+4=", - "dev": true, - "dependencies": { - "pseudomap": "^1.0.1" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "node_modules/electron-to-chromium": { - "version": "1.3.52", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.52.tgz", - "integrity": "sha1-0tnxJwuko7lnuDHEDvcftNmrXOA=", - "dev": true - }, - "node_modules/elliptic": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", - "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", - "dev": true, - "dependencies": { - "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" - } - }, - "node_modules/emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/enhanced-resolve": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", - "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.4.0", - "object-assign": "^4.0.1", - "tapable": "^0.2.7" - }, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } - }, - "node_modules/entities": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", - "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", - "dev": true - }, - "node_modules/errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "dev": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz", - "integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==", - "dev": true, - "dependencies": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es6-promise": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-2.3.0.tgz", - "integrity": "sha1-lu258v2wGZWCKyY92KratnSBgbw=", - "dev": true - }, - "node_modules/es6-templates": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/es6-templates/-/es6-templates-0.2.3.tgz", - "integrity": "sha1-XLmsn7He1usSOTQrgdeSu7QHjuQ=", - "dev": true, - "dependencies": { - "recast": "~0.11.12", - "through": "~2.3.6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz", - "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==", - "dev": true - }, - "node_modules/events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/eventsource": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", - "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", - "dev": true, - "dependencies": { - "original": ">=0.0.5" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/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, - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/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, - "dependencies": { - "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" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/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, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "dev": true, - "dependencies": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "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.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "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" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "node_modules/express/node_modules/qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true, - "optional": true - }, - "node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extend-shallow/node_modules/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, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "dependencies": { - "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" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/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, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/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, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/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, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/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, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extract-text-webpack-plugin": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-2.1.2.tgz", - "integrity": "sha1-dW7076gVXDaBgz+8NNpTuUF0bWw=", - "dev": true, - "dependencies": { - "async": "^2.1.2", - "loader-utils": "^1.0.2", - "schema-utils": "^0.3.0", - "webpack-sources": "^1.0.1" - }, - "engines": { - "node": ">=4.3.0 < 5.0.0 || >= 5.10" - } - }, - "node_modules/extract-text-webpack-plugin/node_modules/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, - "engines": { - "node": "*" - } - }, - "node_modules/extract-text-webpack-plugin/node_modules/emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/extract-text-webpack-plugin/node_modules/json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/extract-text-webpack-plugin/node_modules/loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", - "dev": true, - "dependencies": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "optional": true - }, - "node_modules/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=", - "dev": true - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true - }, - "node_modules/fastparse": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz", - "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=", - "dev": true - }, - "node_modules/faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", - "dev": true, - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/file-loader": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-0.8.5.tgz", - "integrity": "sha1-knXQMf54DyfUf19K8CvUNxPMFRs=", - "dev": true, - "dependencies": { - "loader-utils": "~0.2.5" - } - }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, - "node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/find-cache-dir": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", - "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "mkdirp": "^0.5.1", - "pkg-dir": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "dependencies": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/flatten": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", - "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/follow-redirects": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.9.0.tgz", - "integrity": "sha512-CRcPzsSIbXyVDl0QI01muNDu69S8trU4jArW9LpOt2WtC6LyUJetcIrmfHsRBx7/Jb6GHJUiuqyYxPooFfNt6A==", - "dev": true, - "dependencies": { - "debug": "^3.0.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/follow-redirects/node_modules/debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/follow-redirects/node_modules/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 - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true, - "optional": true, - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "dev": true, - "optional": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.5", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/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 - }, - "node_modules/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "optional": true, - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/getpass/node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "dependencies": { - "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" - }, - "engines": { - "node": "*" - } - }, - "node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "dependencies": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/good-listener": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", - "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", - "dependencies": { - "delegate": "^3.1.2" - } - }, - "node_modules/graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", - "dev": true - }, - "node_modules/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 - }, - "node_modules/har-schema": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", - "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", - "dev": true, - "optional": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", - "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", - "dev": true, - "optional": true, - "dependencies": { - "ajv": "^4.9.1", - "har-schema": "^1.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator/node_modules/ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "dev": true, - "optional": true, - "dependencies": { - "co": "^4.6.0", - "json-stable-stringify": "^1.0.1" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/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, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/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, - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/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, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash-sum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", - "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", - "dev": true - }, - "node_modules/hash.js": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.5.tgz", - "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "dev": true, - "optional": true, - "dependencies": { - "boom": "2.x.x", - "cryptiles": "2.x.x", - "hoek": "2.x.x", - "sntp": "1.x.x" - }, - "engines": { - "node": ">=0.10.32" - } - }, - "node_modules/he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/header-case": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/header-case/-/header-case-1.0.1.tgz", - "integrity": "sha1-lTWXMZfBRLCWE81l0xfvGZY70C0=", - "dev": true, - "dependencies": { - "no-case": "^2.2.0", - "upper-case": "^1.1.3" - } - }, - "node_modules/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, - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.40" - } - }, - "node_modules/home-or-tmp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", - "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "dev": true, - "dependencies": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/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 - }, - "node_modules/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, - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/html-comment-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz", - "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=", - "dev": true - }, - "node_modules/html-entities": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", - "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", - "dev": true, - "engines": [ - "node >= 0.4.0" - ] - }, - "node_modules/html-loader": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-0.5.5.tgz", - "integrity": "sha512-7hIW7YinOYUpo//kSYcPB6dCKoceKLmOwjEMmhIobHuWGDVl0Nwe4l68mdG/Ru0wcUxQjVMEoZpkalZ/SE7zog==", - "dev": true, - "dependencies": { - "es6-templates": "^0.2.3", - "fastparse": "^1.1.1", - "html-minifier": "^3.5.8", - "loader-utils": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "node_modules/html-loader/node_modules/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, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/html-minifier": { - "version": "3.5.21", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", - "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", - "dev": true, - "dependencies": { - "camel-case": "3.0.x", - "clean-css": "4.2.x", - "commander": "2.17.x", - "he": "1.2.x", - "param-case": "2.1.x", - "relateurl": "0.2.x", - "uglify-js": "3.4.x" - }, - "bin": { - "html-minifier": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/html-minifier/node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/html-webpack-plugin": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-2.30.1.tgz", - "integrity": "sha1-f5xCG36pHsRg9WUn1430hO51N9U=", - "dev": true, - "dependencies": { - "bluebird": "^3.4.7", - "html-minifier": "^3.2.3", - "loader-utils": "^0.2.16", - "lodash": "^4.17.3", - "pretty-error": "^2.0.2", - "toposort": "^1.0.0" - } - }, - "node_modules/html-webpack-plugin/node_modules/camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", - "dev": true, - "dependencies": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" - } - }, - "node_modules/html-webpack-plugin/node_modules/clean-css": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.11.tgz", - "integrity": "sha1-Ls3xRaujj1R0DybO/Q/z4D4SXWo=", - "dev": true, - "dependencies": { - "source-map": "0.5.x" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/html-webpack-plugin/node_modules/commander": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.16.0.tgz", - "integrity": "sha512-sVXqklSaotK9at437sFlFpyOcJonxe0yST/AG9DkQKUdIE6IqGIMv4SfAQSKaJbSdVEJYItASCrBiVQHq1HQew==", - "dev": true - }, - "node_modules/html-webpack-plugin/node_modules/html-minifier": { - "version": "3.5.19", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.19.tgz", - "integrity": "sha512-Qr2JC9nsjK8oCrEmuB430ZIA8YWbF3D5LSjywD75FTuXmeqacwHgIM8wp3vHYzzPbklSjp53RdmDuzR4ub2HzA==", - "dev": true, - "dependencies": { - "camel-case": "3.0.x", - "clean-css": "4.1.x", - "commander": "2.16.x", - "he": "1.1.x", - "param-case": "2.1.x", - "relateurl": "0.2.x", - "uglify-js": "3.4.x" - }, - "bin": { - "html-minifier": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/html-webpack-plugin/node_modules/param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", - "dev": true, - "dependencies": { - "no-case": "^2.2.0" - } - }, - "node_modules/html-webpack-plugin/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/html-webpack-plugin/node_modules/uglify-js": { - "version": "3.4.6", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.6.tgz", - "integrity": "sha512-O1D7L6WcOzS1qW2ehopEm4cWm5yA6bQBozlks8jO8ODxYCy4zv+bR/la4Lwp01tpkYGNonnpXvUpYtrvSu8Yzg==", - "dev": true, - "dependencies": { - "commander": "~2.16.0", - "source-map": "~0.6.1" - }, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/html-webpack-plugin/node_modules/uglify-js/node_modules/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/htmlparser2": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz", - "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", - "dev": true, - "dependencies": { - "domelementtype": "1", - "domhandler": "2.1", - "domutils": "1.1", - "readable-stream": "1.0" - } - }, - "node_modules/htmlparser2/node_modules/domutils": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.1.6.tgz", - "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", - "dev": true, - "dependencies": { - "domelementtype": "1" - } - }, - "node_modules/htmlparser2/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", - "dev": true - }, - "node_modules/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, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/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 - }, - "node_modules/http-proxy": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.0.tgz", - "integrity": "sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==", - "dev": true, - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/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, - "dependencies": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "dev": true, - "optional": true, - "dependencies": { - "assert-plus": "^0.2.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, - "node_modules/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 - }, - "node_modules/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, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/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 - }, - "node_modules/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 - }, - "node_modules/image-size": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", - "dev": true, - "optional": true, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/import-local": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz", - "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==", - "dev": true, - "dependencies": { - "pkg-dir": "^2.0.0", - "resolve-cwd": "^2.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/import-local/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/import-local/node_modules/pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "dependencies": { - "find-up": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, - "dependencies": { - "repeating": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", - "dev": true - }, - "node_modules/indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "dev": true - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "node_modules/ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/internal-ip": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-1.2.0.tgz", - "integrity": "sha1-rp+/k7mEh4eF1QqN4bNWlWBYz1w=", - "dev": true, - "dependencies": { - "meow": "^3.3.0" - }, - "bin": { - "internal-ip": "cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/interpret": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", - "dev": true - }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "node_modules/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, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/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, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-arguments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", - "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "node_modules/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, - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/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 - }, - "node_modules/is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "dependencies": { - "builtin-modules": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-callable": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", - "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/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, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/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, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor/node_modules/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/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, - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/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, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-lower-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz", - "integrity": "sha1-fhR75HaNxGbbO/shzGCzHmrWk5M=", - "dev": true, - "dependencies": { - "lower-case": "^1.1.0" - } - }, - "node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", - "dev": true, - "dependencies": { - "is-path-inside": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dev": true, - "dependencies": { - "path-is-inside": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/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, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-svg": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", - "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", - "dev": true, - "dependencies": { - "html-comment-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true, - "optional": true - }, - "node_modules/is-upper-case": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz", - "integrity": "sha1-jQsfp+eTOh5YSDYA7H2WYcuvdW8=", - "dev": true, - "dependencies": { - "upper-case": "^1.1.0" - } - }, - "node_modules/is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "node_modules/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/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, - "optional": true - }, - "node_modules/iview-loader": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/iview-loader/-/iview-loader-1.3.0.tgz", - "integrity": "sha512-Tfv2lvSx+fAAqJo77oRo2j49tkbv4SiALLTsZ4iZH1nRCBmrH1uOdgERTkDGK1SuJJX5w3aGkQa6iGdXzNAytQ==", - "dev": true, - "dependencies": { - "loader-utils": "^1.1.0" - } - }, - "node_modules/iview-loader/node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/iview-loader/node_modules/emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/iview-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/iview-loader/node_modules/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, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/iview-loader/node_modules/minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "node_modules/js-base64": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.1.9.tgz", - "integrity": "sha1-8OgK4DmkvWVLXygfyT8EqRSn/M4=", - "dev": true - }, - "node_modules/js-beautify": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.7.5.tgz", - "integrity": "sha512-9OhfAqGOrD7hoQBLJMTA+BKuKmoEtTJXzZ7WDF/9gvjtey1koVLuZqIY6c51aPDjbNdNtIXAkiWKVhziawE9Og==", - "dev": true, - "dependencies": { - "config-chain": "~1.1.5", - "editorconfig": "^0.13.2", - "mkdirp": "~0.5.0", - "nopt": "~3.0.1" - }, - "bin": { - "css-beautify": "js/bin/css-beautify.js", - "html-beautify": "js/bin/html-beautify.js", - "js-beautify": "js/bin/js-beautify.js" - } - }, - "node_modules/js-calendar": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/js-calendar/-/js-calendar-1.2.3.tgz", - "integrity": "sha512-dAA1/Zbp4+c5E+ARCVTIuKepXsNLzSYfzvOimiYD4S5eeP9QuplSHLcdhfqFSwyM1o1u6ku6RRRCyaZ0YAjiBw==" - }, - "node_modules/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 - }, - "node_modules/js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/js-yaml/node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "optional": true - }, - "node_modules/jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/json-loader": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", - "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", - "dev": true - }, - "node_modules/json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true, - "optional": true - }, - "node_modules/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 - }, - "node_modules/json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "dependencies": { - "jsonify": "~0.0.0" - } - }, - "node_modules/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, - "optional": true - }, - "node_modules/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 - }, - "node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/json5/node_modules/minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "node_modules/jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, - "node_modules/jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "optional": true, - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "node_modules/jsprim/node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", - "dev": true - }, - "node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "dependencies": { - "invert-kv": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/less": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/less/-/less-2.7.3.tgz", - "integrity": "sha512-KPdIJKWcEAb02TuJtaLrhue0krtRLoRoo7x6BNJIBelO00t/CCdJQUnHW5V34OnHMWzIktSalJxRO+FvytQlCQ==", - "dev": true, - "dependencies": { - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "mime": "^1.2.11", - "mkdirp": "^0.5.0" - }, - "bin": { - "lessc": "bin/lessc" - }, - "engines": { - "node": ">=0.12" - }, - "optionalDependencies": { - "image-size": "~0.5.0", - "promise": "^7.1.1", - "request": "2.81.0", - "source-map": "^0.5.3" - } - }, - "node_modules/less-loader": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-2.2.3.tgz", - "integrity": "sha1-ttj4E5yEk98J2ZKpOgBzSwj4RSg=", - "dev": true, - "dependencies": { - "loader-utils": "^0.2.5" - } - }, - "node_modules/less/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/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=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/loader-runner": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz", - "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=", - "dev": true, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } - }, - "node_modules/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, - "dependencies": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0", - "object-assign": "^4.0.1" - } - }, - "node_modules/loader-utils/node_modules/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, - "engines": { - "node": "*" - } - }, - "node_modules/loader-utils/node_modules/emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/loader-utils/node_modules/json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/locate-path/node_modules/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, - "engines": { - "node": ">=4" - } - }, - "node_modules/lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "node_modules/lodash._createcompounder": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._createcompounder/-/lodash._createcompounder-3.0.0.tgz", - "integrity": "sha1-XdLLVTctbnDg4jkvsjBNZjEJEHU=", - "dev": true, - "dependencies": { - "lodash.deburr": "^3.0.0", - "lodash.words": "^3.0.0" - } - }, - "node_modules/lodash._root": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", - "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", - "dev": true - }, - "node_modules/lodash.camelcase": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-3.0.1.tgz", - "integrity": "sha1-kyyLh/ikN3iXxnGXUzKC+Xrqwpg=", - "dev": true, - "dependencies": { - "lodash._createcompounder": "^3.0.0" - } - }, - "node_modules/lodash.deburr": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash.deburr/-/lodash.deburr-3.2.0.tgz", - "integrity": "sha1-baj1QzSjZqfPTEx2742Aqhs2XtU=", - "dev": true, - "dependencies": { - "lodash._root": "^3.0.0" - } - }, - "node_modules/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 - }, - "node_modules/lodash.throttle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", - "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=" - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true - }, - "node_modules/lodash.words": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash.words/-/lodash.words-3.2.0.tgz", - "integrity": "sha1-TiqGSbwIdFsXxpWxo86P7llmI7M=", - "dev": true, - "dependencies": { - "lodash._root": "^3.0.0" - } - }, - "node_modules/loglevel": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.6.tgz", - "integrity": "sha512-Sgr5lbboAUBo3eXCSPL4/KoVz3ROKquOjcctxmHIt+vol2DrqTQe3SwkKKuYhEiWB5kYa13YyopJ69deJ1irzQ==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/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, - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true, - "dependencies": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", - "dev": true - }, - "node_modules/lower-case-first": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-1.0.2.tgz", - "integrity": "sha1-5dp8JvKacHO+AtUrrJmA5ZIq36E=", - "dev": true, - "dependencies": { - "lower-case": "^1.1.2" - } - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/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, - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/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 - }, - "node_modules/md5.js": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", - "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/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, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/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, - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "node_modules/memory-fs/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/memory-fs/node_modules/readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "dependencies": { - "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" - } - }, - "node_modules/memory-fs/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "dependencies": { - "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" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/meow/node_modules/minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "node_modules/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 - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "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" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/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, - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.35.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", - "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.19", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz", - "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", - "dev": true, - "dependencies": { - "mime-db": "~1.35.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/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 - }, - "node_modules/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 - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "node_modules/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, - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep/node_modules/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, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "dependencies": { - "minimist": "0.0.8" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==", - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", - "dev": true, - "dependencies": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/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 - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ncname": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz", - "integrity": "sha1-W1etGLHKCShk72Kwse2BlPODtxw=", - "dev": true, - "dependencies": { - "xml-char-classes": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.5.1.tgz", - "integrity": "sha512-3KL3fvuRkZ7s4IFOMfztb7zJp3QaVWnBeGoJlgB38XnCRPj/0tLzzLG5IB8NYOHbJ8g8UGrgZv44GLDk6CxTxA==", - "dev": true - }, - "node_modules/no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", - "dev": true, - "dependencies": { - "lower-case": "^1.1.1" - } - }, - "node_modules/node-forge": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz", - "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==", - "dev": true, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/node-libs-browser": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", - "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", - "dev": true, - "dependencies": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^1.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.0", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "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" - } - }, - "node_modules/node-libs-browser/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/node-libs-browser/node_modules/readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "dependencies": { - "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" - } - }, - "node_modules/node-libs-browser/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - } - }, - "node_modules/normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", - "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", - "dev": true, - "dependencies": { - "object-assign": "^4.0.1", - "prepend-http": "^1.0.0", - "query-string": "^4.1.0", - "sort-keys": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/nth-check": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", - "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", - "dev": true, - "dependencies": { - "boolbase": "~1.0.0" - } - }, - "node_modules/num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", - "dev": true - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true, - "optional": true, - "engines": { - "node": "*" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/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, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", - "dev": true - }, - "node_modules/object-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.2.tgz", - "integrity": "sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/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, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "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, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/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, - "dependencies": { - "is-wsl": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", - "dev": true, - "dependencies": { - "url-parse": "^1.4.3" - } - }, - "node_modules/os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true - }, - "node_modules/os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "dependencies": { - "lcid": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/pako": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", - "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", - "dev": true - }, - "node_modules/param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", - "dev": true, - "dependencies": { - "no-case": "^2.2.0" - } - }, - "node_modules/parse-asn1": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", - "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", - "dev": true, - "dependencies": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3" - } - }, - "node_modules/parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "dependencies": { - "error-ex": "^1.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", - "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", - "dev": true - }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "node_modules/path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "dependencies": { - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true - }, - "node_modules/path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pbkdf2": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz", - "integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==", - "dev": true, - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", - "dev": true, - "optional": true - }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "dependencies": { - "pinkie": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", - "dev": true, - "dependencies": { - "find-up": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/popper.js": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.15.0.tgz", - "integrity": "sha512-w010cY1oCUmI+9KwwlWki+r5jxKfTFDVoadl7MSrIujHU5MJ5OR6HTDj6Xo8aoR/QsA56x8jKjA59qGH4ELtrA==" - }, - "node_modules/portfinder": { - "version": "1.0.25", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.25.tgz", - "integrity": "sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg==", - "dev": true, - "dependencies": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.1" - }, - "engines": { - "node": ">= 0.12.0" - } - }, - "node_modules/portfinder/node_modules/async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/portfinder/node_modules/debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/portfinder/node_modules/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 - }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "dependencies": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/postcss-calc": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", - "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", - "dev": true, - "dependencies": { - "postcss": "^5.0.2", - "postcss-message-helpers": "^2.0.0", - "reduce-css-calc": "^1.2.6" - } - }, - "node_modules/postcss-colormin": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz", - "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", - "dev": true, - "dependencies": { - "colormin": "^1.0.5", - "postcss": "^5.0.13", - "postcss-value-parser": "^3.2.3" - } - }, - "node_modules/postcss-convert-values": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz", - "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", - "dev": true, - "dependencies": { - "postcss": "^5.0.11", - "postcss-value-parser": "^3.1.2" - } - }, - "node_modules/postcss-discard-comments": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", - "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", - "dev": true, - "dependencies": { - "postcss": "^5.0.14" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz", - "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", - "dev": true, - "dependencies": { - "postcss": "^5.0.4" - } - }, - "node_modules/postcss-discard-empty": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", - "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", - "dev": true, - "dependencies": { - "postcss": "^5.0.14" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", - "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", - "dev": true, - "dependencies": { - "postcss": "^5.0.16" - } - }, - "node_modules/postcss-discard-unused": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", - "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", - "dev": true, - "dependencies": { - "postcss": "^5.0.14", - "uniqs": "^2.0.0" - } - }, - "node_modules/postcss-filter-plugins": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz", - "integrity": "sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==", - "dev": true, - "dependencies": { - "postcss": "^5.0.4" - } - }, - "node_modules/postcss-load-config": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-1.2.0.tgz", - "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=", - "dev": true, - "dependencies": { - "cosmiconfig": "^2.1.0", - "object-assign": "^4.1.0", - "postcss-load-options": "^1.2.0", - "postcss-load-plugins": "^2.3.0" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/postcss-load-options": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-load-options/-/postcss-load-options-1.2.0.tgz", - "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=", - "dev": true, - "dependencies": { - "cosmiconfig": "^2.1.0", - "object-assign": "^4.1.0" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/postcss-load-plugins": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz", - "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=", - "dev": true, - "dependencies": { - "cosmiconfig": "^2.1.1", - "object-assign": "^4.1.0" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/postcss-merge-idents": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", - "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", - "dev": true, - "dependencies": { - "has": "^1.0.1", - "postcss": "^5.0.10", - "postcss-value-parser": "^3.1.1" - } - }, - "node_modules/postcss-merge-longhand": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz", - "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", - "dev": true, - "dependencies": { - "postcss": "^5.0.4" - } - }, - "node_modules/postcss-merge-rules": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz", - "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", - "dev": true, - "dependencies": { - "browserslist": "^1.5.2", - "caniuse-api": "^1.5.2", - "postcss": "^5.0.4", - "postcss-selector-parser": "^2.2.2", - "vendors": "^1.0.0" - } - }, - "node_modules/postcss-merge-rules/node_modules/browserslist": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "dev": true, - "dependencies": { - "caniuse-db": "^1.0.30000639", - "electron-to-chromium": "^1.2.7" - }, - "bin": { - "browserslist": "cli.js" - } - }, - "node_modules/postcss-message-helpers": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz", - "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=", - "dev": true - }, - "node_modules/postcss-minify-font-values": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", - "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", - "dev": true, - "dependencies": { - "object-assign": "^4.0.1", - "postcss": "^5.0.4", - "postcss-value-parser": "^3.0.2" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", - "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", - "dev": true, - "dependencies": { - "postcss": "^5.0.12", - "postcss-value-parser": "^3.3.0" - } - }, - "node_modules/postcss-minify-params": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", - "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", - "dev": true, - "dependencies": { - "alphanum-sort": "^1.0.1", - "postcss": "^5.0.2", - "postcss-value-parser": "^3.0.2", - "uniqs": "^2.0.0" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", - "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", - "dev": true, - "dependencies": { - "alphanum-sort": "^1.0.2", - "has": "^1.0.1", - "postcss": "^5.0.14", - "postcss-selector-parser": "^2.0.0" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz", - "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=", - "dev": true, - "dependencies": { - "postcss": "^6.0.1" - } - }, - "node_modules/postcss-modules-extract-imports/node_modules/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, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-modules-extract-imports/node_modules/chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-modules-extract-imports/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-modules-extract-imports/node_modules/postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "dependencies": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/postcss-modules-extract-imports/node_modules/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-modules-extract-imports/node_modules/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, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", - "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", - "dev": true, - "dependencies": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" - } - }, - "node_modules/postcss-modules-local-by-default/node_modules/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, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-modules-local-by-default/node_modules/chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-modules-local-by-default/node_modules/css-selector-tokenizer": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz", - "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", - "dev": true, - "dependencies": { - "cssesc": "^0.1.0", - "fastparse": "^1.1.1", - "regexpu-core": "^1.0.0" - } - }, - "node_modules/postcss-modules-local-by-default/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-modules-local-by-default/node_modules/postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "dependencies": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/postcss-modules-local-by-default/node_modules/regexpu-core": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", - "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", - "dev": true, - "dependencies": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" - } - }, - "node_modules/postcss-modules-local-by-default/node_modules/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-modules-local-by-default/node_modules/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, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-modules-scope": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", - "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", - "dev": true, - "dependencies": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" - } - }, - "node_modules/postcss-modules-scope/node_modules/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, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-modules-scope/node_modules/chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-modules-scope/node_modules/css-selector-tokenizer": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz", - "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", - "dev": true, - "dependencies": { - "cssesc": "^0.1.0", - "fastparse": "^1.1.1", - "regexpu-core": "^1.0.0" - } - }, - "node_modules/postcss-modules-scope/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-modules-scope/node_modules/postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "dependencies": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/postcss-modules-scope/node_modules/regexpu-core": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", - "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", - "dev": true, - "dependencies": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" - } - }, - "node_modules/postcss-modules-scope/node_modules/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-modules-scope/node_modules/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, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-modules-values": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", - "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", - "dev": true, - "dependencies": { - "icss-replace-symbols": "^1.1.0", - "postcss": "^6.0.1" - } - }, - "node_modules/postcss-modules-values/node_modules/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, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-modules-values/node_modules/chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-modules-values/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-modules-values/node_modules/postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "dependencies": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/postcss-modules-values/node_modules/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-modules-values/node_modules/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, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", - "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", - "dev": true, - "dependencies": { - "postcss": "^5.0.5" - } - }, - "node_modules/postcss-normalize-url": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", - "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", - "dev": true, - "dependencies": { - "is-absolute-url": "^2.0.0", - "normalize-url": "^1.4.0", - "postcss": "^5.0.14", - "postcss-value-parser": "^3.2.3" - } - }, - "node_modules/postcss-ordered-values": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz", - "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", - "dev": true, - "dependencies": { - "postcss": "^5.0.4", - "postcss-value-parser": "^3.0.1" - } - }, - "node_modules/postcss-reduce-idents": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", - "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", - "dev": true, - "dependencies": { - "postcss": "^5.0.4", - "postcss-value-parser": "^3.0.2" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", - "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", - "dev": true, - "dependencies": { - "postcss": "^5.0.4" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", - "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", - "dev": true, - "dependencies": { - "has": "^1.0.1", - "postcss": "^5.0.8", - "postcss-value-parser": "^3.0.1" - } - }, - "node_modules/postcss-safe-parser": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-1.0.7.tgz", - "integrity": "sha1-Q70MjITV99hHTeglxpnk2ryscqg=", - "dev": true, - "dependencies": { - "postcss": "^5.0.18" - } - }, - "node_modules/postcss-selector-parser": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", - "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", - "dev": true, - "dependencies": { - "flatten": "^1.0.2", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "node_modules/postcss-svgo": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", - "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", - "dev": true, - "dependencies": { - "is-svg": "^2.0.0", - "postcss": "^5.0.14", - "postcss-value-parser": "^3.2.3", - "svgo": "^0.7.0" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", - "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", - "dev": true, - "dependencies": { - "alphanum-sort": "^1.0.1", - "postcss": "^5.0.4", - "uniqs": "^2.0.0" - } - }, - "node_modules/postcss-value-parser": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", - "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=", - "dev": true - }, - "node_modules/postcss-zindex": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz", - "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", - "dev": true, - "dependencies": { - "has": "^1.0.1", - "postcss": "^5.0.4", - "uniqs": "^2.0.0" - } - }, - "node_modules/postcss/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pretty-error": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", - "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", - "dev": true, - "dependencies": { - "renderkid": "^2.0.1", - "utila": "~0.4" - } - }, - "node_modules/private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "optional": true, - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", - "dev": true - }, - "node_modules/proxy-addr": { - "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, - "dependencies": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, - "node_modules/pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "node_modules/public-encrypt": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz", - "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true, - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/query-string": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", - "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", - "dev": true, - "dependencies": { - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/querystringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", - "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", - "dev": true - }, - "node_modules/randombytes": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", - "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/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, - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "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, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "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, - "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "dependencies": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "dependencies": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "dependencies": { - "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" - } - }, - "node_modules/readable-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/readable-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/recast": { - "version": "0.11.23", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz", - "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=", - "dev": true, - "dependencies": { - "ast-types": "0.9.6", - "esprima": "~3.1.0", - "private": "~0.1.5", - "source-map": "~0.5.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/recast/node_modules/esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/recast/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, - "dependencies": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/reduce-css-calc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", - "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", - "dev": true, - "dependencies": { - "balanced-match": "^0.4.2", - "math-expression-evaluator": "^1.2.14", - "reduce-function-call": "^1.0.1" - } - }, - "node_modules/reduce-css-calc/node_modules/balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", - "dev": true - }, - "node_modules/reduce-function-call": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz", - "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", - "dev": true, - "dependencies": { - "balanced-match": "^0.4.2" - } - }, - "node_modules/reduce-function-call/node_modules/balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", - "dev": true - }, - "node_modules/regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", - "dev": true - }, - "node_modules/regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true - }, - "node_modules/regenerator-transform": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", - "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", - "dev": true, - "dependencies": { - "babel-runtime": "^6.18.0", - "babel-types": "^6.19.0", - "private": "^0.1.6" - } - }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", - "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/regexpu-core": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", - "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", - "dev": true, - "dependencies": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" - } - }, - "node_modules/regjsgen": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", - "dev": true - }, - "node_modules/regjsparser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", - "dev": true, - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "node_modules/renderkid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.1.tgz", - "integrity": "sha1-iYyr/Ivt5Le5ETWj/9Mj5YwNsxk=", - "dev": true, - "dependencies": { - "css-select": "^1.1.0", - "dom-converter": "~0.1", - "htmlparser2": "~3.3.0", - "strip-ansi": "^3.0.0", - "utila": "~0.3" - } - }, - "node_modules/renderkid/node_modules/utila": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", - "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", - "dev": true - }, - "node_modules/repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "dependencies": { - "is-finite": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/request": { - "version": "2.81.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", - "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", - "dev": true, - "optional": true, - "dependencies": { - "aws-sign2": "~0.6.0", - "aws4": "^1.2.1", - "caseless": "~0.12.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.0", - "forever-agent": "~0.6.1", - "form-data": "~2.1.1", - "har-validator": "~4.2.1", - "hawk": "~3.1.3", - "http-signature": "~1.1.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.7", - "oauth-sign": "~0.8.1", - "performance-now": "^0.2.0", - "safe-buffer": "^5.0.1", - "stringstream": "~0.0.4", - "tough-cookie": "~2.3.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.0.0" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/request/node_modules/qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", - "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/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 - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "node_modules/resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dev": true, - "dependencies": { - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/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, - "dependencies": { - "align-text": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "dependencies": { - "ret": "~0.1.10" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "node_modules/schema-utils": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", - "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", - "dev": true, - "dependencies": { - "ajv": "^5.0.0" - }, - "engines": { - "node": ">= 4.3 < 5.0.0 || >= 5.10" - } - }, - "node_modules/select": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", - "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=" - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", - "dev": true - }, - "node_modules/selfsigned": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz", - "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==", - "dev": true, - "dependencies": { - "node-forge": "0.9.0" - } - }, - "node_modules/semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/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 - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", - "dev": true, - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/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, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - }, - "node_modules/serve-static": { - "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, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "node_modules/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, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/sigmund": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", - "dev": true - }, - "node_modules/signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "node_modules/slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/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, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/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, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/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, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/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, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/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, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "dev": true, - "optional": true, - "dependencies": { - "hoek": "2.x.x" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/sockjs": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", - "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", - "dev": true, - "dependencies": { - "faye-websocket": "^0.10.0", - "uuid": "^3.0.1" - } - }, - "node_modules/sockjs-client": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.5.tgz", - "integrity": "sha1-G7fA9yIsQPQq3xT0RCy9Eml3GoM=", - "dev": true, - "dependencies": { - "debug": "^2.6.6", - "eventsource": "0.1.6", - "faye-websocket": "~0.11.0", - "inherits": "^2.0.1", - "json3": "^3.3.2", - "url-parse": "^1.1.8" - } - }, - "node_modules/sockjs-client/node_modules/faye-websocket": { - "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, - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", - "dev": true, - "dependencies": { - "is-plain-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-list-map": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-0.1.8.tgz", - "integrity": "sha1-xVCyq1Qn9rPyH1r+rYjE9Vh7IQY=", - "dev": true - }, - "node_modules/source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "dependencies": { - "amdefine": ">=0.0.4" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "node_modules/source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "dev": true, - "dependencies": { - "source-map": "^0.5.6" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "node_modules/spdx-correct": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", - "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", - "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", - "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", - "dev": true - }, - "node_modules/spdy": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz", - "integrity": "sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/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, - "dependencies": { - "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" - } - }, - "node_modules/spdy-transport/node_modules/debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/spdy-transport/node_modules/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 - }, - "node_modules/spdy-transport/node_modules/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, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/spdy-transport/node_modules/safe-buffer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", - "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", - "dev": true - }, - "node_modules/spdy-transport/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/spdy/node_modules/debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/spdy/node_modules/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 - }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "node_modules/sshpk": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", - "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", - "dev": true, - "optional": true, - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sshpk/node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/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, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/stream-browserify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", - "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", - "dev": true, - "dependencies": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "node_modules/stream-browserify/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/stream-browserify/node_modules/readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "dependencies": { - "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" - } - }, - "node_modules/stream-browserify/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, - "dependencies": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/stream-http/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/stream-http/node_modules/readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "dependencies": { - "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" - } - }, - "node_modules/stream-http/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/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 - }, - "node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string.prototype.trimleft": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", - "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/string.prototype.trimright": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", - "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/stringstream": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", - "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", - "dev": true, - "optional": true - }, - "node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "dependencies": { - "is-utf8": "^0.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, - "dependencies": { - "get-stdin": "^4.0.1" - }, - "bin": { - "strip-indent": "cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/style-loader": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.13.2.tgz", - "integrity": "sha1-dFMzhM9pjHEEx5URULSXF63C87s=", - "dev": true, - "dependencies": { - "loader-utils": "^1.0.2" - } - }, - "node_modules/style-loader/node_modules/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, - "engines": { - "node": "*" - } - }, - "node_modules/style-loader/node_modules/emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/style-loader/node_modules/json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/style-loader/node_modules/loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", - "dev": true, - "dependencies": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "dependencies": { - "has-flag": "^1.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/svgo": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", - "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", - "dev": true, - "dependencies": { - "coa": "~1.0.1", - "colors": "~1.1.2", - "csso": "~2.3.1", - "js-yaml": "~3.7.0", - "mkdirp": "~0.5.1", - "sax": "~1.2.1", - "whet.extend": "~0.9.9" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/svgo/node_modules/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, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^2.6.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/swap-case": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz", - "integrity": "sha1-w5IDpFhzhfrTyFCgvRvK+ggZdOM=", - "dev": true, - "dependencies": { - "lower-case": "^1.1.1", - "upper-case": "^1.1.1" - } - }, - "node_modules/tapable": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", - "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "node_modules/time-stamp": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.2.0.tgz", - "integrity": "sha512-zxke8goJQpBeEgD82CXABeMh0LSJcj7CXEd0OHOg45HgcofF7pxNwZm9+RknpxpDhwN4gFpySkApKfFYfRQnUA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/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==", - "dev": true, - "dependencies": { - "setimmediate": "^1.0.4" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/tiny-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", - "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" - }, - "node_modules/tinycolor2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.1.tgz", - "integrity": "sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=", - "engines": { - "node": "*" - } - }, - "node_modules/to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/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, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/toposort": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz", - "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=", - "dev": true - }, - "node_modules/tough-cookie": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", - "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", - "dev": true, - "optional": true, - "dependencies": { - "punycode": "^1.4.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", - "dev": true - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "optional": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, - "optional": true - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/type-is/node_modules/mime-db": { - "version": "1.42.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", - "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/type-is/node_modules/mime-types": { - "version": "2.1.25", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz", - "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==", - "dev": true, - "dependencies": { - "mime-db": "1.42.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/uglify-js": { - "version": "3.4.10", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", - "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", - "dev": true, - "dependencies": { - "commander": "~2.19.0", - "source-map": "~0.6.1" - }, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/uglify-js/node_modules/commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", - "dev": true - }, - "node_modules/uglify-js/node_modules/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/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 - }, - "node_modules/union-value": { - "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, - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true - }, - "node_modules/uniqs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", - "dev": true - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", - "dev": true - }, - "node_modules/upper-case-first": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz", - "integrity": "sha1-XXm+3P8UQZUY/S7bCgUHybaFkRU=", - "dev": true, - "dependencies": { - "upper-case": "^1.1.1" - } - }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "node_modules/url-loader": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-0.5.9.tgz", - "integrity": "sha512-B7QYFyvv+fOBqBVeefsxv6koWWtjmHaMFT6KZWti4KRw8YUD/hOU+3AECvXuzyVawIBx3z7zQRejXCDSO5kk1Q==", - "dev": true, - "dependencies": { - "loader-utils": "^1.0.2", - "mime": "1.3.x" - } - }, - "node_modules/url-loader/node_modules/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, - "engines": { - "node": "*" - } - }, - "node_modules/url-loader/node_modules/emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/url-loader/node_modules/json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/url-loader/node_modules/loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", - "dev": true, - "dependencies": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/url-loader/node_modules/mime": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.6.tgz", - "integrity": "sha1-WR2E02U6awtKO5343lqoEI5y5eA=", - "dev": true, - "bin": { - "mime": "cli.js" - } - }, - "node_modules/url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", - "dev": true, - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", - "dev": true, - "dependencies": { - "inherits": "2.0.3" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", - "dev": true - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", - "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vendors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.2.tgz", - "integrity": "sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ==", - "dev": true - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "optional": true, - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/verror/node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/view-design": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/view-design/-/view-design-4.0.0.tgz", - "integrity": "sha512-gdVOsO7X4Pcz6dG0J9aUAI9PQ7HnmyFORg3CX9AgFGa4e1X5+TldNpyQa5v5bFZTWAbNLNLTFWn+fuAlQqINWQ==", - "dependencies": { - "async-validator": "^1.10.0", - "deepmerge": "^2.2.1", - "element-resize-detector": "^1.2.0", - "js-calendar": "^1.2.3", - "lodash.throttle": "^4.1.1", - "popper.js": "^1.14.6", - "tinycolor2": "^1.4.1", - "v-click-outside-x": "^3.7.1" - }, - "engines": { - "node": ">=8.9.1", - "npm": ">=5.5.1", - "yarn": ">=1.3.2" - } - }, - "node_modules/view-design/node_modules/element-resize-detector": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/element-resize-detector/-/element-resize-detector-1.2.0.tgz", - "integrity": "sha512-UmhNB8sIJVZeg56gEjgmMd6p37sCg8j8trVW0LZM7Wzv+kxQ5CnRHcgRKBTB/kFUSn3e7UP59kl2V2U8Du1hmg==", - "dependencies": { - "batch-processor": "1.0.0" - } - }, - "node_modules/view-design/node_modules/v-click-outside-x": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/v-click-outside-x/-/v-click-outside-x-3.7.1.tgz", - "integrity": "sha512-WmUgmcIXr9clVpm1AYS/FgHtcDicfnfoxgQCNg4O6vfk9GVnxA0vSqO321ogUo0b7czYTidj7fQENvWFMWOkUg==", - "engines": { - "node": ">=8.11.4", - "npm": "6.4.1" - } - }, - "node_modules/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, - "dependencies": { - "indexof": "0.0.1" - } - }, - "node_modules/vue": { - "version": "2.5.16", - "resolved": "https://registry.npmjs.org/vue/-/vue-2.5.16.tgz", - "integrity": "sha512-/ffmsiVuPC8PsWcFkZngdpas19ABm5mh2wA7iDqcltyCTwlgZjHGeJYOXkBMo422iPwIcviOtrTCUpSfXmToLQ==" - }, - "node_modules/vue-clipboard2": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/vue-clipboard2/-/vue-clipboard2-0.3.1.tgz", - "integrity": "sha512-H5S/agEDj0kXjUb5GP2c0hCzIXWRBygaWLN3NEFsaI9I3uWin778SFEMt8QRXiPG+7anyjqWiw2lqcxWUSfkYg==", - "dependencies": { - "clipboard": "^2.0.0" - } - }, - "node_modules/vue-hot-reload-api": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-1.3.3.tgz", - "integrity": "sha1-VNItg3hqh4ST9jnMdrynmSojvkY=", - "dev": true - }, - "node_modules/vue-html-loader": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/vue-html-loader/-/vue-html-loader-1.2.4.tgz", - "integrity": "sha1-VM5Im+BgZckdwqEXMSLz4ATgolM=", - "dev": true, - "dependencies": { - "es6-templates": "^0.2.2", - "fastparse": "^1.0.0", - "html-minifier": "^2.1.5", - "loader-utils": "^1.0.2", - "object-assign": "^4.1.0" - } - }, - "node_modules/vue-html-loader/node_modules/async": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", - "dev": true - }, - "node_modules/vue-html-loader/node_modules/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, - "engines": { - "node": "*" - } - }, - "node_modules/vue-html-loader/node_modules/camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", - "dev": true, - "dependencies": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" - } - }, - "node_modules/vue-html-loader/node_modules/change-case": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/change-case/-/change-case-3.0.2.tgz", - "integrity": "sha512-Mww+SLF6MZ0U6kdg11algyKd5BARbyM4TbFBepwowYSR5ClfQGCGtxNXgykpN0uF/bstWeaGDT4JWaDh8zWAHA==", - "dev": true, - "dependencies": { - "camel-case": "^3.0.0", - "constant-case": "^2.0.0", - "dot-case": "^2.1.0", - "header-case": "^1.0.0", - "is-lower-case": "^1.1.0", - "is-upper-case": "^1.1.0", - "lower-case": "^1.1.1", - "lower-case-first": "^1.0.0", - "no-case": "^2.3.2", - "param-case": "^2.1.0", - "pascal-case": "^2.0.0", - "path-case": "^2.1.0", - "sentence-case": "^2.1.0", - "snake-case": "^2.1.0", - "swap-case": "^1.1.0", - "title-case": "^2.1.0", - "upper-case": "^1.1.1", - "upper-case-first": "^1.1.0" - } - }, - "node_modules/vue-html-loader/node_modules/clean-css": { - "version": "3.4.28", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz", - "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=", - "dev": true, - "dependencies": { - "commander": "2.8.x", - "source-map": "0.4.x" - }, - "bin": { - "cleancss": "bin/cleancss" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/vue-html-loader/node_modules/clean-css/node_modules/commander": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", - "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", - "dev": true, - "dependencies": { - "graceful-readlink": ">= 1.0.0" - }, - "engines": { - "node": ">= 0.6.x" - } - }, - "node_modules/vue-html-loader/node_modules/commander": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "dev": true, - "dependencies": { - "graceful-readlink": ">= 1.0.0" - }, - "engines": { - "node": ">= 0.6.x" - } - }, - "node_modules/vue-html-loader/node_modules/constant-case": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-2.0.0.tgz", - "integrity": "sha1-QXV2TTidP6nI7NKRhu1gBSQ7akY=", - "dev": true, - "dependencies": { - "snake-case": "^2.1.0", - "upper-case": "^1.1.1" - } - }, - "node_modules/vue-html-loader/node_modules/dot-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-2.1.1.tgz", - "integrity": "sha1-NNzzf1Co6TwrO8qLt/uRVcfaO+4=", - "dev": true, - "dependencies": { - "no-case": "^2.2.0" - } - }, - "node_modules/vue-html-loader/node_modules/emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vue-html-loader/node_modules/html-minifier": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-2.1.7.tgz", - "integrity": "sha1-kFHW/LvPIU7TB+GtdPQyu5rWVcw=", - "dev": true, - "dependencies": { - "change-case": "3.0.x", - "clean-css": "3.4.x", - "commander": "2.9.x", - "he": "1.1.x", - "ncname": "1.0.x", - "relateurl": "0.2.x", - "uglify-js": "2.6.x" - }, - "bin": { - "html-minifier": "cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/vue-html-loader/node_modules/json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/vue-html-loader/node_modules/loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", - "dev": true, - "dependencies": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/vue-html-loader/node_modules/param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", - "dev": true, - "dependencies": { - "no-case": "^2.2.0" - } - }, - "node_modules/vue-html-loader/node_modules/pascal-case": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-2.0.1.tgz", - "integrity": "sha1-LVeNNFX2YNpl7KGO+VtODekSdh4=", - "dev": true, - "dependencies": { - "camel-case": "^3.0.0", - "upper-case-first": "^1.1.0" - } - }, - "node_modules/vue-html-loader/node_modules/path-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/path-case/-/path-case-2.1.1.tgz", - "integrity": "sha1-lLgDfDctP+KQbkZbtF4l0ibo7qU=", - "dev": true, - "dependencies": { - "no-case": "^2.2.0" - } - }, - "node_modules/vue-html-loader/node_modules/sentence-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-2.1.1.tgz", - "integrity": "sha1-H24t2jnBaL+S0T+G1KkYkz9mftQ=", - "dev": true, - "dependencies": { - "no-case": "^2.2.0", - "upper-case-first": "^1.1.2" - } - }, - "node_modules/vue-html-loader/node_modules/snake-case": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz", - "integrity": "sha1-Qb2xtz8w7GagTU4srRt2OH1NbZ8=", - "dev": true, - "dependencies": { - "no-case": "^2.2.0" - } - }, - "node_modules/vue-html-loader/node_modules/title-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz", - "integrity": "sha1-PhJyFtpY0rxb7PE3q5Ha46fNj6o=", - "dev": true, - "dependencies": { - "no-case": "^2.2.0", - "upper-case": "^1.0.3" - } - }, - "node_modules/vue-html-loader/node_modules/uglify-js": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.6.4.tgz", - "integrity": "sha1-ZeovswWck5RpLxX+2HwrNsFrmt8=", - "dev": true, - "dependencies": { - "async": "~0.2.6", - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" - }, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/vue-html-loader/node_modules/uglify-js/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/vue-html-loader/node_modules/yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, - "dependencies": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" - } - }, - "node_modules/vue-jsonp": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/vue-jsonp/-/vue-jsonp-0.1.8.tgz", - "integrity": "sha512-ebxvjHl5D7bv5Z7SeRzZUAPOSRMx+RiAeej7h6dPpbtk8MVz/b3n9fOZ8AAVmakb1pe36e+qG0J+K49a3LfpKA==" - }, - "node_modules/vue-loader": { - "version": "11.3.4", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-11.3.4.tgz", - "integrity": "sha1-ZeEKRM4JLZBuFLvHKYHeyZ6wkNI=", - "dev": true, - "dependencies": { - "consolidate": "^0.14.0", - "hash-sum": "^1.0.2", - "js-beautify": "^1.6.3", - "loader-utils": "^1.1.0", - "lru-cache": "^4.0.1", - "postcss": "^5.0.21", - "postcss-load-config": "^1.1.0", - "postcss-selector-parser": "^2.0.0", - "source-map": "^0.5.6", - "vue-hot-reload-api": "^2.0.11", - "vue-style-loader": "^2.0.0", - "vue-template-es2015-compiler": "^1.2.2" - } - }, - "node_modules/vue-loader/node_modules/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, - "engines": { - "node": "*" - } - }, - "node_modules/vue-loader/node_modules/emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vue-loader/node_modules/json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/vue-loader/node_modules/loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", - "dev": true, - "dependencies": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/vue-loader/node_modules/lru-cache": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", - "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", - "dev": true, - "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "node_modules/vue-loader/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/vue-loader/node_modules/vue-hot-reload-api": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.0.tgz", - "integrity": "sha512-2j/t+wIbyVMP5NvctQoSUvLkYKoWAAk2QlQiilrM2a6/ulzFgdcLUJfTvs4XQ/3eZhHiBmmEojbjmM4AzZj8JA==", - "dev": true - }, - "node_modules/vue-loader/node_modules/vue-style-loader": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-2.0.5.tgz", - "integrity": "sha1-8O+smS/r4/EuST4zTtsTzSNaPSI=", - "dev": true, - "dependencies": { - "hash-sum": "^1.0.2", - "loader-utils": "^1.0.2" - } - }, - "node_modules/vue-monoplasty-slide-verify": { - "version": "1.1.3", - "resolved": "https://registry.npm.taobao.org/vue-monoplasty-slide-verify/download/vue-monoplasty-slide-verify-1.1.3.tgz", - "integrity": "sha1-cKOlaeMuwO2VthHWdUv1I8JJmjw=", - "dependencies": { - "vue": "^2.5.11" - }, - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/vue-router": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-2.8.1.tgz", - "integrity": "sha512-MC4jacHBhTPKtmcfzvaj2N7g6jgJ/Z/eIjZdt+yUaUOM1iKC0OUIlO/xCtz6OZFFTNUJs/1YNro2GN/lE+nOXA==" - }, - "node_modules/vue-style-loader": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-1.0.0.tgz", - "integrity": "sha1-q+t70PRjEwg3QSRNMHnU8URJ4Ek=", - "dev": true, - "dependencies": { - "loader-utils": "^0.2.7" - } - }, - "node_modules/vue-template-compiler": { - "version": "2.5.16", - "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.5.16.tgz", - "integrity": "sha512-ZbuhCcF/hTYmldoUOVcu2fcbeSAZnfzwDskGduOrnjBiIWHgELAd+R8nAtX80aZkceWDKGQ6N9/0/EUpt+l22A==", - "dev": true, - "dependencies": { - "de-indent": "^1.0.2", - "he": "^1.1.0" - } - }, - "node_modules/vue-template-es2015-compiler": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.6.0.tgz", - "integrity": "sha512-x3LV3wdmmERhVCYy3quqA57NJW7F3i6faas++pJQWtknWT+n7k30F4TVdHvCLn48peTJFRvCpxs3UuFPqgeELg==", - "dev": true - }, - "node_modules/vuex": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.1.2.tgz", - "integrity": "sha512-ha3jNLJqNhhrAemDXcmMJMKf1Zu4sybMPr9KxJIuOpVcsDQlTBYLLladav2U+g1AvdYDG5Gs0xBTb0M5pXXYFQ==" - }, - "node_modules/watchpack": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", - "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", - "dev": true, - "dependencies": { - "chokidar": "^2.0.2", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/webpack": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-2.7.0.tgz", - "integrity": "sha512-MjAA0ZqO1ba7ZQJRnoCdbM56mmFpipOPUv/vQpwwfSI42p5PVDdoiuK2AL2FwFUVgT859Jr43bFZXRg/LNsqvg==", - "dev": true, - "dependencies": { - "acorn": "^5.0.0", - "acorn-dynamic-import": "^2.0.0", - "ajv": "^4.7.0", - "ajv-keywords": "^1.1.1", - "async": "^2.1.2", - "enhanced-resolve": "^3.3.0", - "interpret": "^1.0.0", - "json-loader": "^0.5.4", - "json5": "^0.5.1", - "loader-runner": "^2.3.0", - "loader-utils": "^0.2.16", - "memory-fs": "~0.4.1", - "mkdirp": "~0.5.0", - "node-libs-browser": "^2.0.0", - "source-map": "^0.5.3", - "supports-color": "^3.1.0", - "tapable": "~0.2.5", - "uglify-js": "^2.8.27", - "watchpack": "^1.3.1", - "webpack-sources": "^1.0.1", - "yargs": "^6.0.0" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } - }, - "node_modules/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, - "dependencies": { - "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" - }, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/webpack-dev-server": { - "version": "2.11.5", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.11.5.tgz", - "integrity": "sha512-7TdOKKt7G3sWEhPKV0zP+nD0c4V9YKUJ3wDdBwQsZNo58oZIRoVIu66pg7PYkBW8A74msP9C2kLwmxGHndz/pw==", - "dev": true, - "dependencies": { - "ansi-html": "0.0.7", - "array-includes": "^3.0.3", - "bonjour": "^3.5.0", - "chokidar": "^2.1.2", - "compression": "^1.7.3", - "connect-history-api-fallback": "^1.3.0", - "debug": "^3.1.0", - "del": "^3.0.0", - "express": "^4.16.2", - "html-entities": "^1.2.0", - "http-proxy-middleware": "^0.19.1", - "import-local": "^1.0.0", - "internal-ip": "1.2.0", - "ip": "^1.1.5", - "killable": "^1.0.0", - "loglevel": "^1.4.1", - "opn": "^5.1.0", - "portfinder": "^1.0.9", - "selfsigned": "^1.9.1", - "serve-index": "^1.9.1", - "sockjs": "0.3.19", - "sockjs-client": "1.1.5", - "spdy": "^4.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^5.1.0", - "webpack-dev-middleware": "1.12.2", - "yargs": "6.6.0" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">=4.7" - } - }, - "node_modules/webpack-dev-server/node_modules/debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/webpack-dev-server/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-dev-server/node_modules/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 - }, - "node_modules/webpack-dev-server/node_modules/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, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-merge": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-3.0.0.tgz", - "integrity": "sha1-8snChpG8RP2xJHRcuEqPq3QSVwE=", - "dev": true, - "dependencies": { - "lodash": "^4.17.4" - } - }, - "node_modules/webpack-sources": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz", - "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==", - "dev": true, - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "node_modules/webpack-sources/node_modules/source-list-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", - "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==", - "dev": true - }, - "node_modules/webpack-sources/node_modules/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "dev": true, - "dependencies": { - "co": "^4.6.0", - "json-stable-stringify": "^1.0.1" - } - }, - "node_modules/webpack/node_modules/json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/webpack/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "dev": true, - "dependencies": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" - }, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/webpack/node_modules/uglify-js/node_modules/yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, - "dependencies": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" - } - }, - "node_modules/webpack/node_modules/yargs": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", - "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", - "dev": true, - "dependencies": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^4.2.0" - } - }, - "node_modules/webpack/node_modules/yargs/node_modules/camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/yargs/node_modules/cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz", - "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==", - "dev": true, - "dependencies": { - "http-parser-js": ">=0.4.0 <0.4.11", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", - "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/whet.extend": { - "version": "0.9.9", - "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", - "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=", - "dev": true, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "dev": true - }, - "node_modules/window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/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, - "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "node_modules/xml-char-classes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/xml-char-classes/-/xml-char-classes-1.0.0.tgz", - "integrity": "sha1-ZGV4SKIP/F31g6Qq2KJ3tFErvE0=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true - }, - "node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "node_modules/yargs": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", - "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", - "dev": true, - "dependencies": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^4.2.0" - } - }, - "node_modules/yargs-parser": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", - "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", - "dev": true, - "dependencies": { - "camelcase": "^3.0.0" - } - }, - "node_modules/yargs-parser/node_modules/camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yargs/node_modules/camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yargs/node_modules/cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "node_modules/zrender": { - "version": "4.3.2", - "resolved": "https://registry.npm.taobao.org/zrender/download/zrender-4.3.2.tgz", - "integrity": "sha1-7HQy+UFcgsc1hLa3uMR+GwFiCcY=" - } - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "accepts": { - "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.1.24", - "negotiator": "0.6.2" - }, - "dependencies": { - "mime-db": { - "version": "1.42.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", - "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==", - "dev": true - }, - "mime-types": { - "version": "2.1.25", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz", - "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==", - "dev": true, - "requires": { - "mime-db": "1.42.0" - } - } - } - }, - "acorn": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz", - "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==", - "dev": true - }, - "acorn-dynamic-import": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", - "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", - "dev": true, - "requires": { - "acorn": "^4.0.3" - }, - "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", - "dev": true - } - } - }, - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, - "ajv-keywords": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", - "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", - "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" - } - }, - "alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", - "dev": true - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true - }, - "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", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "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" - } - } - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "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 - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true - }, - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - }, - "array-includes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", - "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0", - "is-string": "^1.0.5" - } - }, - "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.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", - "dev": true, - "optional": true - }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true, - "optional": true - }, - "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=", - "dev": true, - "requires": { - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - } - } - } - }, - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", - "dev": true, - "optional": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "ast-types": { - "version": "0.9.6", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz", - "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=", - "dev": true - }, - "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" - } - }, - "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-validator": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-1.12.2.tgz", - "integrity": "sha512-57EETfCPFiB7M4QscvQzWSGNsmtkjjzZv318SK1CBlstk+hycV72ocjriMOOM48HjvmoAoJGpJNjC7Z76RlnZA==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true, - "optional": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "autoprefixer": { - "version": "6.7.7", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", - "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", - "dev": true, - "requires": { - "browserslist": "^1.7.6", - "caniuse-db": "^1.0.30000634", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^5.2.16", - "postcss-value-parser": "^3.2.3" - }, - "dependencies": { - "browserslist": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "dev": true, - "requires": { - "caniuse-db": "^1.0.30000639", - "electron-to-chromium": "^1.2.7" - } - } - } - }, - "autoprefixer-core": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/autoprefixer-core/-/autoprefixer-core-5.2.1.tgz", - "integrity": "sha1-5kDEFK5Bmq4hwa1DyOoPPbgqVm0=", - "dev": true, - "requires": { - "browserslist": "~0.4.0", - "caniuse-db": "^1.0.30000214", - "num2fraction": "^1.1.0", - "postcss": "~4.1.12" - }, - "dependencies": { - "postcss": { - "version": "4.1.16", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-4.1.16.tgz", - "integrity": "sha1-TESbTIr53zyvbTf44eV10DYXWNw=", - "dev": true, - "requires": { - "es6-promise": "~2.3.0", - "js-base64": "~2.1.8", - "source-map": "~0.4.2" - } - } - } - }, - "autoprefixer-loader": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/autoprefixer-loader/-/autoprefixer-loader-2.1.0.tgz", - "integrity": "sha1-lXcoXJvo0iFi4ln3VD7N5BORHGg=", - "dev": true, - "requires": { - "autoprefixer-core": "^5.2.0", - "loader-utils": "^0.2.5", - "postcss": "^5.0.3", - "postcss-safe-parser": "^1.0.1" - } - }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", - "dev": true, - "optional": true - }, - "aws4": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", - "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==", - "dev": true, - "optional": true - }, - "axios": { - "version": "0.19.2", - "resolved": "https://registry.npm.taobao.org/axios/download/axios-0.19.2.tgz?cache=0&sync_timestamp=1597979608919&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faxios%2Fdownload%2Faxios-0.19.2.tgz", - "integrity": "sha1-PqNsXYgY0NX4qKl6bTa4bNwAyyc=", - "requires": { - "follow-redirects": "1.5.10" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz?cache=0&sync_timestamp=1600502827907&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.1.0.tgz", - "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", - "requires": { - "ms": "2.0.0" - } - }, - "follow-redirects": { - "version": "1.5.10", - "resolved": "https://registry.npm.taobao.org/follow-redirects/download/follow-redirects-1.5.10.tgz", - "integrity": "sha1-e3qfmuov3/NnhqlP9kPtB/T/Xio=", - "requires": { - "debug": "=3.1.0" - } - } - } - }, - "babel": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel/-/babel-6.23.0.tgz", - "integrity": "sha1-0NHn2APpdHZb7qMjLU4VPA77kPQ=", - "dev": true - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - } - }, - "babel-core": { - "version": "6.26.3", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", - "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", - "dev": true, - "requires": { - "babel-code-frame": "^6.26.0", - "babel-generator": "^6.26.0", - "babel-helpers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "convert-source-map": "^1.5.1", - "debug": "^2.6.9", - "json5": "^0.5.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.4", - "path-is-absolute": "^1.0.1", - "private": "^0.1.8", - "slash": "^1.0.0", - "source-map": "^0.5.7" - }, - "dependencies": { - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "babel-generator": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", - "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", - "dev": true, - "requires": { - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.17.4", - "source-map": "^0.5.7", - "trim-right": "^1.0.1" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "babel-helper-call-delegate": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", - "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", - "dev": true, - "requires": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-define-map": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", - "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", - "dev": true, - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "babel-helper-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", - "dev": true, - "requires": { - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-get-function-arity": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-hoist-variables": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", - "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-optimise-call-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", - "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-regex": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", - "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "babel-helper-replace-supers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", - "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", - "dev": true, - "requires": { - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helpers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", - "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-loader": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-6.4.1.tgz", - "integrity": "sha1-CzQRLVsHSKjc2/Uaz2+b1C1QuMo=", - "dev": true, - "requires": { - "find-cache-dir": "^0.1.1", - "loader-utils": "^0.2.16", - "mkdirp": "^0.5.1", - "object-assign": "^4.0.1" - } - }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-check-es2015-constants": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", - "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-arrow-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", - "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-block-scoped-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", - "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-block-scoping": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", - "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "babel-plugin-transform-es2015-classes": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", - "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", - "dev": true, - "requires": { - "babel-helper-define-map": "^6.24.1", - "babel-helper-function-name": "^6.24.1", - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-helper-replace-supers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-computed-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", - "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-destructuring": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", - "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-duplicate-keys": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", - "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-for-of": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", - "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", - "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", - "dev": true, - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", - "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-modules-amd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", - "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", - "dev": true, - "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.26.2", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", - "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", - "dev": true, - "requires": { - "babel-plugin-transform-strict-mode": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-types": "^6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-systemjs": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", - "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", - "dev": true, - "requires": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-modules-umd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", - "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", - "dev": true, - "requires": { - "babel-plugin-transform-es2015-modules-amd": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-object-super": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", - "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", - "dev": true, - "requires": { - "babel-helper-replace-supers": "^6.24.1", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-parameters": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", - "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", - "dev": true, - "requires": { - "babel-helper-call-delegate": "^6.24.1", - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-shorthand-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", - "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-spread": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", - "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-sticky-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", - "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", - "dev": true, - "requires": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-template-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", - "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-typeof-symbol": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", - "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-unicode-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", - "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", - "dev": true, - "requires": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "regexpu-core": "^2.0.0" - } - }, - "babel-plugin-transform-regenerator": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", - "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", - "dev": true, - "requires": { - "regenerator-transform": "^0.10.0" - } - }, - "babel-plugin-transform-runtime": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz", - "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-strict-mode": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", - "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-preset-es2015": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", - "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", - "dev": true, - "requires": { - "babel-plugin-check-es2015-constants": "^6.22.0", - "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoping": "^6.24.1", - "babel-plugin-transform-es2015-classes": "^6.24.1", - "babel-plugin-transform-es2015-computed-properties": "^6.24.1", - "babel-plugin-transform-es2015-destructuring": "^6.22.0", - "babel-plugin-transform-es2015-duplicate-keys": "^6.24.1", - "babel-plugin-transform-es2015-for-of": "^6.22.0", - "babel-plugin-transform-es2015-function-name": "^6.24.1", - "babel-plugin-transform-es2015-literals": "^6.22.0", - "babel-plugin-transform-es2015-modules-amd": "^6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", - "babel-plugin-transform-es2015-modules-systemjs": "^6.24.1", - "babel-plugin-transform-es2015-modules-umd": "^6.24.1", - "babel-plugin-transform-es2015-object-super": "^6.24.1", - "babel-plugin-transform-es2015-parameters": "^6.24.1", - "babel-plugin-transform-es2015-shorthand-properties": "^6.24.1", - "babel-plugin-transform-es2015-spread": "^6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "^6.24.1", - "babel-plugin-transform-es2015-template-literals": "^6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "^6.22.0", - "babel-plugin-transform-es2015-unicode-regex": "^6.24.1", - "babel-plugin-transform-regenerator": "^6.24.1" - } - }, - "babel-register": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", - "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", - "dev": true, - "requires": { - "babel-core": "^6.26.0", - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "home-or-tmp": "^2.0.0", - "lodash": "^4.17.4", - "mkdirp": "^0.5.1", - "source-map-support": "^0.4.15" - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" - } - }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dev": true, - "requires": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.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" - } - }, - "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" - } - }, - "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-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", - "dev": true - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true - }, - "batch-processor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/batch-processor/-/batch-processor-1.0.0.tgz", - "integrity": "sha1-dclcMrdI4IUNEMKxaPa9vpiRrOg=" - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", - "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.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.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "dependencies": { - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "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" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "dev": true, - "optional": true, - "requires": { - "hoek": "2.x.x" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "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" - } - } - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, - "browserify-aes": { - "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": { - "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-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": { - "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": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-0.4.0.tgz", - "integrity": "sha1-O9SrkZncG5FQ1NbbpNnTqrvIbdQ=", - "dev": true, - "requires": { - "caniuse-db": "^1.0.30000153" - } - }, - "buffer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "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-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", - "dev": true, - "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" - } - }, - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true - }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "dev": true, - "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - } - } - }, - "caniuse-api": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", - "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", - "dev": true, - "requires": { - "browserslist": "^1.3.6", - "caniuse-db": "^1.0.30000529", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - }, - "dependencies": { - "browserslist": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "dev": true, - "requires": { - "caniuse-db": "^1.0.30000639", - "electron-to-chromium": "^1.2.7" - } - } - } - }, - "caniuse-db": { - "version": "1.0.30000872", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000872.tgz", - "integrity": "sha1-P25Ttj03N2i/meiWEz1m74nEmZk=", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true, - "optional": 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", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "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" - }, - "dependencies": { - "fsevents": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.11.tgz", - "integrity": "sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1", - "node-pre-gyp": "*" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "bundled": true, - "dev": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "bundled": true, - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz", - "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==", - "bundled": true, - "dev": true, - "optional": true - }, - "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=", - "bundled": true, - "dev": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "bundled": true, - "dev": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "bundled": true, - "dev": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.6.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "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.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "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", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", - "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "bundled": true, - "dev": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "bundled": true, - "dev": true, - "optional": true - }, - "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=", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "bundled": true, - "dev": true, - "optional": 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=", - "bundled": true, - "dev": true, - "optional": true - }, - "minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.9.0" - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz", - "integrity": "sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz", - "integrity": "sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA==", - "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.4.2" - } - }, - "nopt": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", - "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", - "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.7.tgz", - "integrity": "sha512-vAj7dIkp5NhieaGZxBJB8fF4R0078rqsmhJcAfXZ6O7JJhjhPK96n5Ry1oZcfLXgfun0GWTZPOxaEyqv8GBykQ==", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "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", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "bundled": true, - "dev": true, - "optional": true - }, - "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=", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "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", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "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.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "bundled": true, - "dev": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "bundled": true, - "dev": true, - "optional": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "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" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.13", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", - "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "bundled": true, - "dev": true, - "optional": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", - "dev": true, - "optional": true - }, - "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" - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true - } - } - }, - "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", - "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", - "dev": true, - "requires": { - "chalk": "^1.1.3" - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.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" - } - } - } - }, - "clean-css": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", - "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", - "dev": true, - "requires": { - "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 - } - } - }, - "clipboard": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.6.tgz", - "integrity": "sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg==", - "requires": { - "good-listener": "^1.2.2", - "select": "^1.1.2", - "tiny-emitter": "^2.0.0" - } - }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" - } - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "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 - }, - "coa": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", - "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", - "dev": true, - "requires": { - "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", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", - "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", - "dev": true, - "requires": { - "clone": "^1.0.2", - "color-convert": "^1.3.0", - "color-string": "^0.3.0" - } - }, - "color-convert": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz", - "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==", - "dev": true, - "requires": { - "color-name": "1.1.1" - } - }, - "color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=", - "dev": true - }, - "color-string": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", - "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", - "dev": true, - "requires": { - "color-name": "^1.0.0" - } - }, - "colormin": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", - "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", - "dev": true, - "requires": { - "color": "^0.11.0", - "css-color-names": "0.0.4", - "has": "^1.0.1" - } - }, - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", - "dev": true - }, - "combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", - "dev": true, - "optional": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "compressible": { - "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.40.0 < 2" - }, - "dependencies": { - "mime-db": { - "version": "1.42.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", - "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==", - "dev": true - } - } - }, - "compression": { - "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.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "config-chain": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.11.tgz", - "integrity": "sha1-q6CXR9++TD5w52am5BWG4YWfxvI=", - "dev": true, - "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "dev": true - }, - "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "dev": true, - "requires": { - "date-now": "^0.1.4" - } - }, - "consolidate": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.14.5.tgz", - "integrity": "sha1-WiUEe8dvcwcmZ8jLUsmJiI9JTGM=", - "dev": true, - "requires": { - "bluebird": "^3.1.1" - } - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "content-disposition": { - "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", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true - }, - "convert-source-map": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", - "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", - "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 - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "core-js": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", - "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cosmiconfig": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", - "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", - "dev": true, - "requires": { - "is-directory": "^0.3.1", - "js-yaml": "^3.4.3", - "minimist": "^1.2.0", - "object-assign": "^4.1.0", - "os-homedir": "^1.0.1", - "parse-json": "^2.2.0", - "require-from-string": "^1.1.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "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" - } - }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "dev": true, - "optional": true, - "requires": { - "boom": "2.x.x" - } - }, - "crypto-browserify": { - "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-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": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", - "dev": true - }, - "css-loader": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.23.1.tgz", - "integrity": "sha1-n6I/K1wJZSNZEK1ezvO4o2OQ/lA=", - "dev": true, - "requires": { - "css-selector-tokenizer": "^0.5.1", - "cssnano": ">=2.6.1 <4", - "loader-utils": "~0.2.2", - "lodash.camelcase": "^3.0.1", - "object-assign": "^4.0.1", - "postcss": "^5.0.6", - "postcss-modules-extract-imports": "^1.0.0", - "postcss-modules-local-by-default": "^1.0.1", - "postcss-modules-scope": "^1.0.0", - "postcss-modules-values": "^1.1.0", - "source-list-map": "^0.1.4" - } - }, - "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dev": true, - "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, - "css-selector-tokenizer": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.5.4.tgz", - "integrity": "sha1-E5uv00o1/QwUKEhwSeBpnm9qLCE=", - "dev": true, - "requires": { - "cssesc": "^0.1.0", - "fastparse": "^1.1.1" - } - }, - "css-what": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", - "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", - "dev": true - }, - "cssesc": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", - "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", - "dev": true - }, - "cssnano": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", - "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", - "dev": true, - "requires": { - "autoprefixer": "^6.3.1", - "decamelize": "^1.1.2", - "defined": "^1.0.0", - "has": "^1.0.1", - "object-assign": "^4.0.1", - "postcss": "^5.0.14", - "postcss-calc": "^5.2.0", - "postcss-colormin": "^2.1.8", - "postcss-convert-values": "^2.3.4", - "postcss-discard-comments": "^2.0.4", - "postcss-discard-duplicates": "^2.0.1", - "postcss-discard-empty": "^2.0.1", - "postcss-discard-overridden": "^0.1.1", - "postcss-discard-unused": "^2.2.1", - "postcss-filter-plugins": "^2.0.0", - "postcss-merge-idents": "^2.1.5", - "postcss-merge-longhand": "^2.0.1", - "postcss-merge-rules": "^2.0.3", - "postcss-minify-font-values": "^1.0.2", - "postcss-minify-gradients": "^1.0.1", - "postcss-minify-params": "^1.0.4", - "postcss-minify-selectors": "^2.0.4", - "postcss-normalize-charset": "^1.1.0", - "postcss-normalize-url": "^3.0.7", - "postcss-ordered-values": "^2.1.0", - "postcss-reduce-idents": "^2.2.2", - "postcss-reduce-initial": "^1.0.0", - "postcss-reduce-transforms": "^1.0.3", - "postcss-svgo": "^2.1.1", - "postcss-unique-selectors": "^2.0.2", - "postcss-value-parser": "^3.2.3", - "postcss-zindex": "^2.0.1" - } - }, - "csso": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", - "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", - "dev": true, - "requires": { - "clap": "^1.0.9", - "source-map": "^0.5.3" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true, - "requires": { - "array-find-index": "^1.0.1" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "^1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true - } - } - }, - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", - "dev": true - }, - "de-indent": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", - "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", - "dev": true - }, - "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" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "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" - } - }, - "deepmerge": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", - "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==" - }, - "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", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "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" - } - }, - "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 - } - } - }, - "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", - "dev": true - }, - "del": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", - "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", - "dev": true, - "requires": { - "globby": "^6.1.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "p-map": "^1.1.1", - "pify": "^3.0.0", - "rimraf": "^2.2.8" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true, - "optional": true - }, - "delegate": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", - "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "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-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true, - "requires": { - "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 - }, - "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" - } - }, - "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" - } - }, - "dom-converter": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.1.4.tgz", - "integrity": "sha1-pF71cnuJDJv/5tfIduexnLDhfzs=", - "dev": true, - "requires": { - "utila": "~0.3" - }, - "dependencies": { - "utila": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", - "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", - "dev": true - } - } - }, - "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", - "dev": true, - "requires": { - "domelementtype": "~1.1.1", - "entities": "~1.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", - "dev": true - } - } - }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true - }, - "domelementtype": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", - "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", - "dev": true - }, - "domhandler": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz", - "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "optional": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "echarts": { - "version": "4.9.0", - "resolved": "https://registry.npm.taobao.org/echarts/download/echarts-4.9.0.tgz?cache=0&sync_timestamp=1605024840505&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fecharts%2Fdownload%2Fecharts-4.9.0.tgz", - "integrity": "sha1-qbm6oD8Doqcx5jQMVb77V6nhNH0=", - "requires": { - "zrender": "4.3.2" - } - }, - "editorconfig": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.13.3.tgz", - "integrity": "sha512-WkjsUNVCu+ITKDj73QDvi0trvpdDWdkDyHybDGSXPfekLCqwmpD7CP7iPbvBgosNuLcI96XTDwNa75JyFl7tEQ==", - "dev": true, - "requires": { - "bluebird": "^3.0.5", - "commander": "^2.9.0", - "lru-cache": "^3.2.0", - "semver": "^5.1.0", - "sigmund": "^1.0.1" - }, - "dependencies": { - "commander": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.16.0.tgz", - "integrity": "sha512-sVXqklSaotK9at437sFlFpyOcJonxe0yST/AG9DkQKUdIE6IqGIMv4SfAQSKaJbSdVEJYItASCrBiVQHq1HQew==", - "dev": true - }, - "lru-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-3.2.0.tgz", - "integrity": "sha1-cXibO39Tmb7IVl3aOKow0qCX7+4=", - "dev": true, - "requires": { - "pseudomap": "^1.0.1" - } - } - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.52", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.52.tgz", - "integrity": "sha1-0tnxJwuko7lnuDHEDvcftNmrXOA=", - "dev": true - }, - "elliptic": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", - "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", - "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" - } - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true - }, - "enhanced-resolve": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", - "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.4.0", - "object-assign": "^4.0.1", - "tapable": "^0.2.7" - } - }, - "entities": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", - "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", - "dev": true - }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz", - "integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es6-promise": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-2.3.0.tgz", - "integrity": "sha1-lu258v2wGZWCKyY92KratnSBgbw=", - "dev": true - }, - "es6-templates": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/es6-templates/-/es6-templates-0.2.3.tgz", - "integrity": "sha1-XLmsn7He1usSOTQrgdeSu7QHjuQ=", - "dev": true, - "requires": { - "recast": "~0.11.12", - "through": "~2.3.6" - } - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true - }, - "eventemitter3": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz", - "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==", - "dev": true - }, - "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", - "dev": true - }, - "eventsource": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", - "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", - "dev": true, - "requires": { - "original": ">=0.0.5" - } - }, - "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" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", + "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", "dev": true, + "optional": 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" + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" }, "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=", + "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.4", + "bundled": true, "dev": true, + "optional": true, "requires": { - "is-descriptor": "^0.1.0" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "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": { - "is-extendable": "^0.1.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } - } - } - }, - "express": { - "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.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "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.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "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": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true, - "optional": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { + }, + "chownr": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "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, + "dev": true, + "optional": true, "requires": { - "is-plain-object": "^2.0.4" + "ms": "2.0.0" } - } - } - }, - "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": { + }, + "deep-extend": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "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": { - "is-descriptor": "^1.0.0" + "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.2", + "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.21", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": "^2.1.0" + } + }, + "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.2.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.1", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.1.0", + "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.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.2.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.10.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.1.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" } }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "npm-bundled": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.1.10", + "bundled": true, "dev": true, + "optional": true, "requires": { - "is-extendable": "^0.1.0" + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" } }, - "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==", + "npmlog": { + "version": "4.1.2", + "bundled": true, "dev": true, + "optional": true, "requires": { - "kind-of": "^6.0.0" + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.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==", + "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": { - "kind-of": "^6.0.0" + "wrappy": "1" } }, - "is-descriptor": { + "os-homedir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "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": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, - "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 - } - } - }, - "extract-text-webpack-plugin": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-2.1.2.tgz", - "integrity": "sha1-dW7076gVXDaBgz+8NNpTuUF0bWw=", - "dev": true, - "requires": { - "async": "^2.1.2", - "loader-utils": "^1.0.2", - "schema-utils": "^0.3.0", - "webpack-sources": "^1.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 + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true + "rc": { + "version": "1.2.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.5.1", + "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 + } + } }, - "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "readable-stream": { + "version": "2.3.6", + "bundled": true, "dev": true, + "optional": true, "requires": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0" + "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" } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true, - "optional": true - }, - "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=", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true - }, - "fastparse": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz", - "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=", - "dev": true - }, - "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "file-loader": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-0.8.5.tgz", - "integrity": "sha1-knXQMf54DyfUf19K8CvUNxPMFRs=", - "dev": true, - "requires": { - "loader-utils": "~0.2.5" - } - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, - "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=", + }, + "rimraf": { + "version": "2.6.2", + "bundled": true, "dev": true, + "optional": true, "requires": { - "is-extendable": "^0.1.0" + "glob": "^7.0.5" } - } - } - }, - "finalhandler": { - "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.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - } - }, - "find-cache-dir": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", - "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "mkdirp": "^0.5.1", - "pkg-dir": "^1.0.0" - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "flatten": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", - "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=", - "dev": true - }, - "follow-redirects": { - "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.0.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + }, + "safe-buffer": { + "version": "5.1.1", + "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.5.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": { - "ms": "^2.1.1" + "safe-buffer": "~5.1.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 + "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.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.2.4", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.1", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "yallist": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true } } }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true, - "optional": true - }, - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "dev": true, - "optional": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.5", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "dev": true - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -14701,17 +3672,61 @@ } }, "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", + "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", "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" + "minimatch": "0.3" + }, + "dependencies": { + "minimatch": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", + "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", + "dev": true, + "requires": { + "lru-cache": "2", + "sigmund": "~1.0.0" + } + } + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "^2.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "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=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } } }, "glob-parent": { @@ -14752,12 +3767,28 @@ "object-assign": "^4.0.1", "pify": "^2.0.0", "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "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" + } + } } }, "good-listener": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", - "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", + "resolved": "https://registry.npmmirror.com/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==", "requires": { "delegate": "^3.1.2" } @@ -14775,9 +3806,9 @@ "dev": 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==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz", + "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=", "dev": true }, "har-schema": { @@ -14835,12 +3866,6 @@ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", "dev": true }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -14972,6 +3997,38 @@ "obuf": "^1.0.0", "readable-stream": "^2.0.1", "wbuf": "^1.1.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": 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" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "html-comment-regex": { @@ -14987,52 +4044,40 @@ "dev": true }, "html-loader": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-0.5.5.tgz", - "integrity": "sha512-7hIW7YinOYUpo//kSYcPB6dCKoceKLmOwjEMmhIobHuWGDVl0Nwe4l68mdG/Ru0wcUxQjVMEoZpkalZ/SE7zog==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-0.3.0.tgz", + "integrity": "sha1-l5pCfKOo5vx8W8t8L1qz6UDVKRc=", "dev": true, "requires": { - "es6-templates": "^0.2.3", - "fastparse": "^1.1.1", - "html-minifier": "^3.5.8", - "loader-utils": "^1.1.0", - "object-assign": "^4.1.1" + "fastparse": "^1.0.0", + "html-minifier": "^0.7.2", + "loader-utils": "~0.2.2", + "source-map": "0.1.x" }, "dependencies": { - "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", "dev": true, "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" + "amdefine": ">=0.0.4" } } } }, "html-minifier": { - "version": "3.5.21", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", - "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-0.7.2.tgz", + "integrity": "sha1-K3lZsQUaSB5xzXxuWaZCcq+JXP0=", "dev": true, "requires": { - "camel-case": "3.0.x", - "clean-css": "4.2.x", - "commander": "2.17.x", - "he": "1.2.x", - "param-case": "2.1.x", + "change-case": "2.3.x", + "clean-css": "3.1.x", + "cli": "0.6.x", + "concat-stream": "1.4.x", "relateurl": "0.2.x", - "uglify-js": "3.4.x" - }, - "dependencies": { - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - } + "uglify-js": "2.4.x" } }, "html-webpack-plugin": { @@ -15166,45 +4211,145 @@ "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==", + "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.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" } }, "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=", + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.13.tgz", + "integrity": "sha1-O9bW/ebjFyyTNMOzO2wZPYD+ETc=", "dev": true }, "http-proxy": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.0.tgz", - "integrity": "sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==", + "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": "^4.0.0", + "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==", + "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.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" + "http-proxy": "^1.16.2", + "is-glob": "^3.1.0", + "lodash": "^4.17.2", + "micromatch": "^2.3.11" + }, + "dependencies": { + "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" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "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" + } + }, + "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" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "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" + } + }, + "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" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "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=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + } } }, "http-signature": { @@ -15226,13 +4371,10 @@ "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" - } + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", + "dev": true }, "icss-replace-symbols": { "version": "1.1.0", @@ -15363,9 +4505,9 @@ "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==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", + "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=", "dev": true }, "is-absolute-url": { @@ -15383,12 +4525,6 @@ "kind-of": "^3.0.2" } }, - "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", @@ -15420,9 +4556,9 @@ } }, "is-callable": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", - "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", "dev": true }, "is-data-descriptor": { @@ -15435,9 +4571,9 @@ } }, "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", "dev": true }, "is-descriptor": { @@ -15465,6 +4601,21 @@ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", "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=", + "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", @@ -15496,9 +4647,9 @@ } }, "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==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "dev": true, "requires": { "is-extglob": "^2.1.1" @@ -15561,21 +4712,27 @@ "isobject": "^3.0.1" } }, + "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=", + "dev": true + }, "is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", "dev": true, "requires": { - "has": "^1.0.3" + "has": "^1.0.1" } }, - "is-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", - "dev": true - }, "is-svg": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", @@ -15586,13 +4743,10 @@ } }, "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", + "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", + "dev": true }, "is-typedarray": { "version": "1.0.0", @@ -15716,7 +4870,7 @@ }, "js-calendar": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/js-calendar/-/js-calendar-1.2.3.tgz", + "resolved": "https://registry.npmmirror.com/js-calendar/-/js-calendar-1.2.3.tgz", "integrity": "sha512-dAA1/Zbp4+c5E+ARCVTIuKepXsNLzSYfzvOimiYD4S5eeP9QuplSHLcdhfqFSwyM1o1u6ku6RRRCyaZ0YAjiBw==" }, "js-tokens": { @@ -15726,21 +4880,13 @@ "dev": true }, "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", + "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", "dev": true, "requires": { "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "dependencies": { - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - } + "esprima": "^2.6.0" } }, "jsbn": { @@ -15792,28 +4938,11 @@ "optional": true }, "json3": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", - "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", "dev": true }, - "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": { - "minimist": "^1.2.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, "jsonify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", @@ -15843,9 +4972,9 @@ } }, "killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.0.tgz", + "integrity": "sha1-2ouEvUfeU5WHj5XWTQLyRJ/gXms=", "dev": true }, "kind-of": { @@ -15976,9 +5105,9 @@ } }, "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", "dev": true }, "lodash._createcompounder": { @@ -16006,6 +5135,12 @@ "lodash._createcompounder": "^3.0.0" } }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, "lodash.deburr": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/lodash.deburr/-/lodash.deburr-3.2.0.tgz", @@ -16023,8 +5158,8 @@ }, "lodash.throttle": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", - "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=" + "resolved": "https://registry.npmmirror.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==" }, "lodash.uniq": { "version": "4.5.0", @@ -16042,9 +5177,9 @@ } }, "loglevel": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.6.tgz", - "integrity": "sha512-Sgr5lbboAUBo3eXCSPL4/KoVz3ROKquOjcctxmHIt+vol2DrqTQe3SwkKKuYhEiWB5kYa13YyopJ69deJ1irzQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz", + "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=", "dev": true }, "longest": { @@ -16087,6 +5222,12 @@ "lower-case": "^1.1.2" } }, + "lru-cache": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", + "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", + "dev": true + }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -16114,6 +5255,12 @@ "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=", "dev": true }, + "math-random": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", + "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", + "dev": true + }, "md5.js": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", @@ -16298,9 +5445,9 @@ "dev": true }, "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "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", @@ -16327,15 +5474,11 @@ "minimist": "0.0.8" } }, - "moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true }, "multicast-dns": { "version": "6.2.3", @@ -16353,6 +5496,13 @@ "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", "dev": true }, + "nan": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", + "dev": true, + "optional": true + }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -16390,9 +5540,9 @@ } }, "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", "dev": true }, "neo-async": { @@ -16411,9 +5561,9 @@ } }, "node-forge": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz", - "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==", + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz", + "integrity": "sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ==", "dev": true }, "node-libs-browser": { @@ -16501,10 +5651,13 @@ } }, "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true + "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" + } }, "normalize-range": { "version": "0.1.2", @@ -16580,22 +5733,10 @@ } } }, - "object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", - "dev": true - }, - "object-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.2.tgz", - "integrity": "sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ==", - "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==", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", + "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", "dev": true }, "object-visit": { @@ -16607,16 +5748,14 @@ "isobject": "^3.0.0" } }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "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": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" } }, "object.pick": { @@ -16644,9 +5783,9 @@ } }, "on-headers": { - "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==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", "dev": true }, "once": { @@ -16659,21 +5798,21 @@ } }, "opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", + "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", "dev": true, "requires": { "is-wsl": "^1.1.0" } }, "original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.1.tgz", + "integrity": "sha512-IEvtB5vM5ULvwnqMxWBLxkS13JIEXbakizMSo3yoPNPCIWzg8TG3Usn/UhXoZFM/m+FuEA20KdzPSFq/0rS+UA==", "dev": true, "requires": { - "url-parse": "^1.4.3" + "url-parse": "~1.4.0" } }, "os-browserify": { @@ -16740,12 +5879,12 @@ "dev": true }, "param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-1.1.2.tgz", + "integrity": "sha1-3LCRpDwlm5Io8cNB57akTqC/l0M=", "dev": true, "requires": { - "no-case": "^2.2.0" + "sentence-case": "^1.1.2" } }, "parse-asn1": { @@ -16761,6 +5900,35 @@ "pbkdf2": "^3.0.3" } }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "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=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", @@ -16771,11 +5939,21 @@ } }, "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", "dev": true }, + "pascal-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-1.1.2.tgz", + "integrity": "sha1-Pl1kogBDgwp8STRMLXS0G+DJyZs=", + "dev": true, + "requires": { + "camel-case": "^1.1.1", + "upper-case-first": "^1.1.0" + } + }, "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", @@ -16788,6 +5966,15 @@ "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", "dev": true }, + "path-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/path-case/-/path-case-1.1.2.tgz", + "integrity": "sha1-UM5roNO+090LXCqcRVNpdDRAlRQ=", + "dev": true, + "requires": { + "sentence-case": "^1.1.2" + } + }, "path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", @@ -16883,43 +6070,25 @@ } }, "popper.js": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.15.0.tgz", - "integrity": "sha512-w010cY1oCUmI+9KwwlWki+r5jxKfTFDVoadl7MSrIujHU5MJ5OR6HTDj6Xo8aoR/QsA56x8jKjA59qGH4ELtrA==" + "version": "1.16.1", + "resolved": "https://registry.npmmirror.com/popper.js/-/popper.js-1.16.1.tgz", + "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==" }, "portfinder": { - "version": "1.0.25", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.25.tgz", - "integrity": "sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz", + "integrity": "sha1-uzLs2HwnEErm7kS1o8y/Drsa7ek=", "dev": true, "requires": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.1" + "async": "^1.5.2", + "debug": "^2.2.0", + "mkdirp": "0.5.x" }, "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" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", "dev": true } } @@ -17591,6 +6760,12 @@ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", "dev": true }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, "pretty-error": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", @@ -17636,13 +6811,13 @@ "dev": true }, "proxy-addr": { - "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==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", + "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", "dev": true, "requires": { "forwarded": "~0.1.2", - "ipaddr.js": "1.9.0" + "ipaddr.js": "1.8.0" } }, "prr": { @@ -17682,6 +6857,13 @@ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", "dev": true }, + "qs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "dev": true, + "optional": true + }, "query-string": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", @@ -17705,11 +6887,36 @@ "dev": true }, "querystringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", - "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.0.0.tgz", + "integrity": "sha512-eTPo5t/4bgaMNZxyjWx6N2a6AuE0mq51KWvpc7nU/MAqixcI6v6KrGUKES0HaomdnolQBBXU/++X6/QQ9KL4tw==", "dev": true }, + "randomatic": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz", + "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==", + "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 + } + } + }, "randombytes": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", @@ -17730,31 +6937,55 @@ } }, "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", "dev": true }, "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", "dev": true, "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", "unpipe": "1.0.0" }, "dependencies": { - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", + "dev": true + }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "dev": true, + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": ">= 1.3.1 < 2" + } + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", "dev": true } } }, + "raw-loader": { + "version": "0.5.1", + "resolved": "https://registry.npmmirror.com/raw-loader/-/raw-loader-0.5.1.tgz", + "integrity": "sha512-sf7oGoLuaYAScB4VGr0tzetsYlS8EJH6qnTCfQ/WVEa89hALQ4RQfCKt5xCyPQKPDUbVUAIP1QsxAwfAjlDp7Q==", + "dev": true + }, "read-pkg": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", @@ -17777,18 +7008,27 @@ } }, "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": 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" + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "readdirp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "minimatch": "^3.0.2", + "readable-stream": "^2.0.2", + "set-immediate-shim": "^1.0.1" }, "dependencies": { "isarray": { @@ -17797,6 +7037,21 @@ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": 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" + } + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -17903,6 +7158,15 @@ "private": "^0.1.6" } }, + "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", @@ -17913,16 +7177,6 @@ "safe-regex": "^1.1.0" } }, - "regexp.prototype.flags": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", - "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - } - }, "regexpu-core": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", @@ -17991,9 +7245,9 @@ } }, "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", "dev": true }, "repeat-string": { @@ -18034,6 +7288,7 @@ "mime-types": "~2.1.7", "oauth-sign": "~0.8.1", "performance-now": "^0.2.0", + "qs": "~6.4.0", "safe-buffer": "^5.0.1", "stringstream": "~0.0.4", "tough-cookie": "~2.3.0", @@ -18102,12 +7357,28 @@ } }, "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "requires": { - "glob": "^7.1.3" + "glob": "^7.0.5" + }, + "dependencies": { + "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" + } + } } }, "ripemd160": { @@ -18139,7 +7410,8 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "dev": true, + "optional": true }, "sax": { "version": "1.2.4", @@ -18156,10 +7428,19 @@ "ajv": "^5.0.0" } }, + "script-loader": { + "version": "0.7.2", + "resolved": "https://registry.npmmirror.com/script-loader/-/script-loader-0.7.2.tgz", + "integrity": "sha512-UMNLEvgOAQuzK8ji8qIscM3GIrRCWN6MmMXGD4SD5l6cSycgGsCo0tX5xRnfQcoghqct0tjHjcykgI1PyBE2aA==", + "dev": true, + "requires": { + "raw-loader": "~0.5.1" + } + }, "select": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", - "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=" + "resolved": "https://registry.npmmirror.com/select/-/select-1.1.2.tgz", + "integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==" }, "select-hose": { "version": "2.0.0", @@ -18168,12 +7449,12 @@ "dev": true }, "selfsigned": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz", - "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.3.tgz", + "integrity": "sha512-vmZenZ+8Al3NLHkWnhBQ0x6BkML1eCP2xEi3JE+f3D9wW9fipD9NNJHYtE9XJM4TsPaHGZJIamrSI6MTg1dU2Q==", "dev": true, "requires": { - "node-forge": "0.9.0" + "node-forge": "0.7.5" } }, "semver": { @@ -18183,9 +7464,9 @@ "dev": true }, "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", "dev": true, "requires": { "debug": "2.6.9", @@ -18195,22 +7476,31 @@ "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" + "range-parser": "~1.2.0", + "statuses": "~1.4.0" }, "dependencies": { - "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==", + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", "dev": true } } }, + "sentence-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-1.1.3.tgz", + "integrity": "sha1-gDSq/CFFdy06vhUJqkLJ4QQtwTk=", + "dev": true, + "requires": { + "lower-case": "^1.1.1" + } + }, "serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", @@ -18224,38 +7514,18 @@ "http-errors": "~1.6.2", "mime-types": "~2.1.17", "parseurl": "~1.3.2" - }, - "dependencies": { - "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" - } - }, - "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.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", "dev": true, "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" + "parseurl": "~1.3.2", + "send": "0.16.2" } }, "set-blocking": { @@ -18264,10 +7534,16 @@ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "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==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", "dev": true, "requires": { "extend-shallow": "^2.0.1", @@ -18294,9 +7570,9 @@ "dev": true }, "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", "dev": true }, "sha.js": { @@ -18327,6 +7603,15 @@ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", "dev": true }, + "snake-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-1.1.2.tgz", + "integrity": "sha1-DC8l4wUVjZoY09l3BmGH/vilpmo=", + "dev": true, + "requires": { + "sentence-case": "^1.1.2" + } + }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -18456,9 +7741,9 @@ } }, "sockjs-client": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.5.tgz", - "integrity": "sha1-G7fA9yIsQPQq3xT0RCy9Eml3GoM=", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.4.tgz", + "integrity": "sha1-W6vjhrd15M8U51IJEUUmVAFsixI=", "dev": true, "requires": { "debug": "^2.6.6", @@ -18470,9 +7755,9 @@ }, "dependencies": { "faye-websocket": { - "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==", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", + "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", "dev": true, "requires": { "websocket-driver": ">=0.5.1" @@ -18505,12 +7790,12 @@ } }, "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", "dev": true, "requires": { - "atob": "^2.1.2", + "atob": "^2.1.1", "decode-uri-component": "^0.2.0", "resolve-url": "^0.2.1", "source-map-url": "^0.4.0", @@ -18573,88 +7858,62 @@ "dev": true }, "spdy": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz", - "integrity": "sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==", + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz", + "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", "dev": true, "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", + "debug": "^2.6.8", + "handle-thing": "^1.2.5", "http-deceiver": "^1.2.7", + "safe-buffer": "^5.0.1", "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "dependencies": { - "debug": { - "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" - } - }, - "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 - } + "spdy-transport": "^2.0.18" } }, "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==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.1.0.tgz", + "integrity": "sha512-bpUeGpZcmZ692rrTiqf9/2EUakI6/kXX1Rpe0ib/DyOzbiexVfXkw6GnvI9hVGvIwVaUhkaBojjCZwLNRGQg1g==", "dev": true, "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", + "debug": "^2.6.8", + "detect-node": "^2.0.3", "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" + "obuf": "^1.1.1", + "readable-stream": "^2.2.9", + "safe-buffer": "^5.0.1", + "wbuf": "^1.7.2" }, "dependencies": { - "debug": { - "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" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "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==", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "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" } }, - "safe-buffer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", - "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", - "dev": true - }, "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "~5.2.0" + "safe-buffer": "~5.1.0" } } } @@ -18674,6 +7933,14 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, + "ssf": { + "version": "0.11.2", + "resolved": "https://registry.npmmirror.com/ssf/-/ssf-0.11.2.tgz", + "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==", + "requires": { + "frac": "~1.1.2" + } + }, "sshpk": { "version": "1.14.2", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", @@ -18723,9 +7990,9 @@ } }, "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", "dev": true }, "stream-browserify": { @@ -18815,18 +8082,17 @@ } } }, + "streamsaver": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/streamsaver/-/streamsaver-2.0.6.tgz", + "integrity": "sha512-LK4e7TfCV8HzuM0PKXuVUfKyCB1FtT9L0EGxsFk5Up8njj0bXK8pJM9+Wq2Nya7/jslmCQwRK39LFm55h7NBTw==" + }, "strict-uri-encode": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", "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 - }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -18838,25 +8104,11 @@ "strip-ansi": "^3.0.0" } }, - "string.prototype.trimleft": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", - "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" - } - }, - "string.prototype.trimright": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", - "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" - } + "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 }, "stringstream": { "version": "0.0.6", @@ -18954,18 +8206,6 @@ "mkdirp": "~0.5.1", "sax": "~1.2.1", "whet.extend": "~0.9.9" - }, - "dependencies": { - "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": { - "argparse": "^1.0.7", - "esprima": "^2.6.0" - } - } } }, "swap-case": { @@ -18991,15 +8231,15 @@ "dev": true }, "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.2.tgz", + "integrity": "sha1-qGLgGOP7HqLsP85dVWBc9X8kc3E=", "dev": true }, "time-stamp": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.2.0.tgz", - "integrity": "sha512-zxke8goJQpBeEgD82CXABeMh0LSJcj7CXEd0OHOg45HgcofF7pxNwZm9+RknpxpDhwN4gFpySkApKfFYfRQnUA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.0.1.tgz", + "integrity": "sha512-KUnkvOWC3C+pEbwE/0u3CcmNpGCDqkYGYZOphe1QFxApYQkJ5g195TDBjgZch/zG6chU1NcabLwnM7BCpWAzTQ==", "dev": true }, "timers-browserify": { @@ -19013,13 +8253,23 @@ }, "tiny-emitter": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "resolved": "https://registry.npmmirror.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz", "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" }, "tinycolor2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.1.tgz", - "integrity": "sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=" + "version": "1.4.2", + "resolved": "https://registry.npmmirror.com/tinycolor2/-/tinycolor2-1.4.2.tgz", + "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==" + }, + "title-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/title-case/-/title-case-1.1.2.tgz", + "integrity": "sha1-+uSmrlRr+iLQg6DuqRCkDRLtT1o=", + "dev": true, + "requires": { + "sentence-case": "^1.1.1", + "upper-case": "^1.0.3" + } }, "to-arraybuffer": { "version": "1.0.1", @@ -19064,12 +8314,6 @@ "repeat-string": "^1.6.1" } }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "dev": true - }, "toposort": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz", @@ -19122,53 +8366,47 @@ "optional": true }, "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", "dev": true, "requires": { "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "dependencies": { - "mime-db": { - "version": "1.42.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", - "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==", - "dev": true - }, - "mime-types": { - "version": "2.1.25", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz", - "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==", - "dev": true, - "requires": { - "mime-db": "1.42.0" - } - } + "mime-types": "~2.1.18" } }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, "uglify-js": { - "version": "3.4.10", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", - "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", + "version": "2.4.24", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.4.24.tgz", + "integrity": "sha1-+tV1XB4Vd2WLsG/5q25UjJW+vW4=", "dev": true, "requires": { - "commander": "~2.19.0", - "source-map": "~0.6.1" + "async": "~0.2.6", + "source-map": "0.1.34", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.5.4" }, "dependencies": { - "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", "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 + "version": "0.1.34", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.34.tgz", + "integrity": "sha1-p8/omux7FoLDsZjQrPtH19CQVms=", + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } } } }, @@ -19179,15 +8417,38 @@ "dev": true }, "union-value": { - "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==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "dev": true, "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", "is-extendable": "^0.1.1", - "set-value": "^2.0.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" + } + } } }, "uniq": { @@ -19254,6 +8515,12 @@ } } }, + "upath": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", + "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", + "dev": true + }, "upper-case": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", @@ -19341,12 +8608,12 @@ } }, "url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.3.tgz", + "integrity": "sha512-rh+KuAW36YKo0vClhQzLLveoj8FwPJNu65xLb7Mrt+eZht0IPT0IXgSv8gcMegZ6NvjJUALf6Mf25POlMwD1Fw==", "dev": true, "requires": { - "querystringify": "^2.1.1", + "querystringify": "^2.0.0", "requires-port": "^1.0.0" } }, @@ -19389,6 +8656,11 @@ "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", "dev": true }, + "v-click-outside-x": { + "version": "3.7.1", + "resolved": "https://registry.npmmirror.com/v-click-outside-x/-/v-click-outside-x-3.7.1.tgz", + "integrity": "sha512-WmUgmcIXr9clVpm1AYS/FgHtcDicfnfoxgQCNg4O6vfk9GVnxA0vSqO321ogUo0b7czYTidj7fQENvWFMWOkUg==" + }, "validate-npm-package-license": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", @@ -19433,11 +8705,11 @@ } }, "view-design": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/view-design/-/view-design-4.0.0.tgz", - "integrity": "sha512-gdVOsO7X4Pcz6dG0J9aUAI9PQ7HnmyFORg3CX9AgFGa4e1X5+TldNpyQa5v5bFZTWAbNLNLTFWn+fuAlQqINWQ==", + "version": "4.7.0", + "resolved": "https://registry.npmmirror.com/view-design/-/view-design-4.7.0.tgz", + "integrity": "sha512-WRvVRfsZciN0aJYlz+6b1zxs5G8tLFb4OUKOu+PiN0QyIGmdgWVziEyEmioYtJahQpueWiQpRYGzyxrpz3UkWQ==", "requires": { - "async-validator": "^1.10.0", + "async-validator": "^3.3.0", "deepmerge": "^2.2.1", "element-resize-detector": "^1.2.0", "js-calendar": "^1.2.3", @@ -19445,21 +8717,6 @@ "popper.js": "^1.14.6", "tinycolor2": "^1.4.1", "v-click-outside-x": "^3.7.1" - }, - "dependencies": { - "element-resize-detector": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/element-resize-detector/-/element-resize-detector-1.2.0.tgz", - "integrity": "sha512-UmhNB8sIJVZeg56gEjgmMd6p37sCg8j8trVW0LZM7Wzv+kxQ5CnRHcgRKBTB/kFUSn3e7UP59kl2V2U8Du1hmg==", - "requires": { - "batch-processor": "1.0.0" - } - }, - "v-click-outside-x": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/v-click-outside-x/-/v-click-outside-x-3.7.1.tgz", - "integrity": "sha512-WmUgmcIXr9clVpm1AYS/FgHtcDicfnfoxgQCNg4O6vfk9GVnxA0vSqO321ogUo0b7czYTidj7fQENvWFMWOkUg==" - } } }, "vm-browserify": { @@ -19477,9 +8734,9 @@ "integrity": "sha512-/ffmsiVuPC8PsWcFkZngdpas19ABm5mh2wA7iDqcltyCTwlgZjHGeJYOXkBMo422iPwIcviOtrTCUpSfXmToLQ==" }, "vue-clipboard2": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/vue-clipboard2/-/vue-clipboard2-0.3.1.tgz", - "integrity": "sha512-H5S/agEDj0kXjUb5GP2c0hCzIXWRBygaWLN3NEFsaI9I3uWin778SFEMt8QRXiPG+7anyjqWiw2lqcxWUSfkYg==", + "version": "0.3.3", + "resolved": "https://registry.npmmirror.com/vue-clipboard2/-/vue-clipboard2-0.3.3.tgz", + "integrity": "sha512-aNWXIL2DKgJyY/1OOeITwAQz1fHaCIGvUFHf9h8UcoQBG5a74MkdhS/xqoYe7DNZdQmZRL+TAdIbtUs9OyVjbw==", "requires": { "clipboard": "^2.0.0" } @@ -19729,11 +8986,6 @@ } } }, - "vue-jsonp": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/vue-jsonp/-/vue-jsonp-0.1.8.tgz", - "integrity": "sha512-ebxvjHl5D7bv5Z7SeRzZUAPOSRMx+RiAeej7h6dPpbtk8MVz/b3n9fOZ8AAVmakb1pe36e+qG0J+K49a3LfpKA==" - }, "vue-loader": { "version": "11.3.4", "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-11.3.4.tgz", @@ -19817,14 +9069,6 @@ } } }, - "vue-monoplasty-slide-verify": { - "version": "1.1.3", - "resolved": "https://registry.npm.taobao.org/vue-monoplasty-slide-verify/download/vue-monoplasty-slide-verify-1.1.3.tgz", - "integrity": "sha1-cKOlaeMuwO2VthHWdUv1I8JJmjw=", - "requires": { - "vue": "^2.5.11" - } - }, "vue-router": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-2.8.1.tgz", @@ -19855,11 +9099,6 @@ "integrity": "sha512-x3LV3wdmmERhVCYy3quqA57NJW7F3i6faas++pJQWtknWT+n7k30F4TVdHvCLn48peTJFRvCpxs3UuFPqgeELg==", "dev": true }, - "vuex": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.1.2.tgz", - "integrity": "sha512-ha3jNLJqNhhrAemDXcmMJMKf1Zu4sybMPr9KxJIuOpVcsDQlTBYLLladav2U+g1AvdYDG5Gs0xBTb0M5pXXYFQ==" - }, "watchpack": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", @@ -20012,22 +9251,22 @@ } }, "webpack-dev-server": { - "version": "2.11.5", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.11.5.tgz", - "integrity": "sha512-7TdOKKt7G3sWEhPKV0zP+nD0c4V9YKUJ3wDdBwQsZNo58oZIRoVIu66pg7PYkBW8A74msP9C2kLwmxGHndz/pw==", + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.11.2.tgz", + "integrity": "sha512-zrPoX97bx47vZiAXfDrkw8pe9QjJ+lunQl3dypojyWwWr1M5I2h0VSrMPfTjopHQPRNn+NqfjcMmhoLcUJe2gA==", "dev": true, "requires": { "ansi-html": "0.0.7", "array-includes": "^3.0.3", "bonjour": "^3.5.0", - "chokidar": "^2.1.2", - "compression": "^1.7.3", + "chokidar": "^2.0.0", + "compression": "^1.5.2", "connect-history-api-fallback": "^1.3.0", "debug": "^3.1.0", "del": "^3.0.0", "express": "^4.16.2", "html-entities": "^1.2.0", - "http-proxy-middleware": "^0.19.1", + "http-proxy-middleware": "~0.17.4", "import-local": "^1.0.0", "internal-ip": "1.2.0", "ip": "^1.1.5", @@ -20036,23 +9275,40 @@ "opn": "^5.1.0", "portfinder": "^1.0.9", "selfsigned": "^1.9.1", - "serve-index": "^1.9.1", + "serve-index": "^1.7.2", "sockjs": "0.3.19", - "sockjs-client": "1.1.5", - "spdy": "^4.0.0", + "sockjs-client": "1.1.4", + "spdy": "^3.4.1", "strip-ansi": "^3.0.0", "supports-color": "^5.1.0", "webpack-dev-middleware": "1.12.2", "yargs": "6.6.0" }, "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "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.1.1" + "ms": "2.0.0" } }, "has-flag": { @@ -20061,20 +9317,35 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "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 - }, "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "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" } + }, + "yargs": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", + "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^4.2.0" + } } } }, @@ -20112,13 +9383,12 @@ } }, "websocket-driver": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz", - "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", + "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", "dev": true, "requires": { - "http-parser-js": ">=0.4.0 <0.4.11", - "safe-buffer": ">=5.1.0", + "http-parser-js": ">=0.4.0", "websocket-extensions": ">=0.1.1" } }, @@ -20146,6 +9416,16 @@ "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", "dev": true }, + "wmf": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/wmf/-/wmf-1.0.2.tgz", + "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==" + }, + "word": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/word/-/word-0.3.0.tgz", + "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==" + }, "wordwrap": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", @@ -20168,6 +9448,20 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, + "xlsx": { + "version": "0.18.5", + "resolved": "https://registry.npmmirror.com/xlsx/-/xlsx-0.18.5.tgz", + "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==", + "requires": { + "adler-32": "~1.3.0", + "cfb": "~1.2.1", + "codepage": "~1.15.0", + "crc-32": "~1.2.1", + "ssf": "~0.11.2", + "wmf": "~1.0.1", + "word": "~0.3.0" + } + }, "xml-char-classes": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/xml-char-classes/-/xml-char-classes-1.0.0.tgz", @@ -20193,43 +9487,15 @@ "dev": true }, "yargs": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", - "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.5.4.tgz", + "integrity": "sha1-2K/49mXpTDS9JZvevRv68N3TU2E=", "dev": true, "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^4.2.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - } + "camelcase": "^1.0.2", + "decamelize": "^1.0.0", + "window-size": "0.1.0", + "wordwrap": "0.0.2" } }, "yargs-parser": { @@ -20248,11 +9514,6 @@ "dev": true } } - }, - "zrender": { - "version": "4.3.2", - "resolved": "https://registry.npm.taobao.org/zrender/download/zrender-4.3.2.tgz", - "integrity": "sha1-7HQy+UFcgsc1hLa3uMR+GwFiCcY=" } } } diff --git a/01.web/package.json b/01.web/package.json index 19c180a..df6617c 100644 --- a/01.web/package.json +++ b/01.web/package.json @@ -15,16 +15,14 @@ "author": "Aresn", "license": "MIT", "dependencies": { - "axios": "^0.19.2", - "echarts": "^4.9.0", - "moment": "^2.24.0", - "view-design": "^4.0.0", + "axios": "^0.25.0", + "file-saver": "^2.0.5", + "streamsaver": "^2.0.6", + "view-design": "^4.7.0", "vue": "^2.5.16", - "vue-clipboard2": "^0.3.1", - "vue-jsonp": "^0.1.8", - "vue-monoplasty-slide-verify": "^1.1.3", + "vue-clipboard2": "^0.3.3", "vue-router": "^2.8.1", - "vuex": "^3.1.2" + "xlsx": "^0.18.5" }, "devDependencies": { "autoprefixer-loader": "^2.0.0", @@ -37,11 +35,12 @@ "css-loader": "^0.23.1", "extract-text-webpack-plugin": "^2.0.0", "file-loader": "^0.8.5", - "html-loader": "^0.5.5", + "html-loader": "^0.3.0", "html-webpack-plugin": "^2.28.0", "iview-loader": "^1.2.1", "less": "^2.7.1", "less-loader": "^2.2.3", + "script-loader": "^0.7.2", "style-loader": "^0.13.1", "url-loader": "^0.5.7", "vue-hot-reload-api": "^1.3.3", @@ -50,7 +49,7 @@ "vue-style-loader": "^1.0.0", "vue-template-compiler": "^2.2.1", "webpack": "^2.2.1", - "webpack-dev-server": "^2.11.5", + "webpack-dev-server": "^2.4.1", "webpack-merge": "^3.0.0" }, "bugs": { diff --git a/01.web/src/app.vue b/01.web/src/app.vue index 4aa63ce..000023c 100644 --- a/01.web/src/app.vue +++ b/01.web/src/app.vue @@ -2,7 +2,7 @@ @import "styles/common.css"; @@ -13,6 +13,24 @@ export default { }, mounted() {}, beforeDestroy() {}, - methods: {} + methods: {}, }; + + diff --git a/01.web/src/static/images/login.png b/01.web/src/assets/images/login.png similarity index 100% rename from 01.web/src/static/images/login.png rename to 01.web/src/assets/images/login.png diff --git a/01.web/src/assets/images/logo.png b/01.web/src/assets/images/logo.png new file mode 100644 index 0000000..33d950d Binary files /dev/null and b/01.web/src/assets/images/logo.png differ diff --git a/01.web/src/components/login-form/index.js b/01.web/src/components/login-form/index.js deleted file mode 100644 index d480c28..0000000 --- a/01.web/src/components/login-form/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import LoginForm from './login-form.vue' -export default LoginForm diff --git a/01.web/src/components/login-form/login-form.vue b/01.web/src/components/login-form/login-form.vue deleted file mode 100644 index 9829ea7..0000000 --- a/01.web/src/components/login-form/login-form.vue +++ /dev/null @@ -1,73 +0,0 @@ - - diff --git a/01.web/src/libs/export/Blob.js b/01.web/src/libs/export/Blob.js new file mode 100644 index 0000000..2d54755 --- /dev/null +++ b/01.web/src/libs/export/Blob.js @@ -0,0 +1,205 @@ +/* eslint-disable */ +/* Blob.js*/ + +/*global self, unescape */ +/*jslint bitwise: true, regexp: true, confusion: true, es5: true, vars: true, white: true, + plusplus: true */ + +/*! @source http://purl.eligrey.com/github/Blob.js/blob/master/Blob.js */ + +(function (view) { + "use strict"; + + view.URL = view.URL || view.webkitURL; + + if (view.Blob && view.URL) { + try { + new Blob; + return; + } catch (e) {} + } + + // Internally we use a BlobBuilder implementation to base Blob off of + // in order to support older browsers that only have BlobBuilder + var BlobBuilder = view.BlobBuilder || view.WebKitBlobBuilder || view.MozBlobBuilder || (function (view) { + var + get_class = function (object) { + return Object.prototype.toString.call(object).match(/^\[object\s(.*)\]$/)[1]; + }, + FakeBlobBuilder = function BlobBuilder() { + this.data = []; + }, + FakeBlob = function Blob(data, type, encoding) { + this.data = data; + this.size = data.length; + this.type = type; + this.encoding = encoding; + }, + FBB_proto = FakeBlobBuilder.prototype, + FB_proto = FakeBlob.prototype, + FileReaderSync = view.FileReaderSync, + FileException = function (type) { + this.code = this[this.name = type]; + }, + file_ex_codes = ( + "NOT_FOUND_ERR SECURITY_ERR ABORT_ERR NOT_READABLE_ERR ENCODING_ERR " + + "NO_MODIFICATION_ALLOWED_ERR INVALID_STATE_ERR SYNTAX_ERR" + ).split(" "), + file_ex_code = file_ex_codes.length, + real_URL = view.URL || view.webkitURL || view, + real_create_object_URL = real_URL.createObjectURL, + real_revoke_object_URL = real_URL.revokeObjectURL, + URL = real_URL, + btoa = view.btoa, + atob = view.atob + + , + ArrayBuffer = view.ArrayBuffer, + Uint8Array = view.Uint8Array + + , + origin = /^[\w-]+:\/*\[?[\w\.:-]+\]?(?::[0-9]+)?/; + FakeBlob.fake = FB_proto.fake = true; + while (file_ex_code--) { + FileException.prototype[file_ex_codes[file_ex_code]] = file_ex_code + 1; + } + // Polyfill URL + if (!real_URL.createObjectURL) { + URL = view.URL = function (uri) { + var + uri_info = document.createElementNS("http://www.w3.org/1999/xhtml", "a"), + uri_origin; + uri_info.href = uri; + if (!("origin" in uri_info)) { + if (uri_info.protocol.toLowerCase() === "data:") { + uri_info.origin = null; + } else { + uri_origin = uri.match(origin); + uri_info.origin = uri_origin && uri_origin[1]; + } + } + return uri_info; + }; + } + URL.createObjectURL = function (blob) { + var + type = blob.type, + data_URI_header; + if (type === null) { + type = "application/octet-stream"; + } + if (blob instanceof FakeBlob) { + data_URI_header = "data:" + type; + if (blob.encoding === "base64") { + return data_URI_header + ";base64," + blob.data; + } else if (blob.encoding === "URI") { + return data_URI_header + "," + decodeURIComponent(blob.data); + } + if (btoa) { + return data_URI_header + ";base64," + btoa(blob.data); + } else { + return data_URI_header + "," + encodeURIComponent(blob.data); + } + } else if (real_create_object_URL) { + return real_create_object_URL.call(real_URL, blob); + } + }; + URL.revokeObjectURL = function (object_URL) { + if (object_URL.substring(0, 5) !== "data:" && real_revoke_object_URL) { + real_revoke_object_URL.call(real_URL, object_URL); + } + }; + FBB_proto.append = function (data /*, endings*/ ) { + var bb = this.data; + // decode data to a binary string + if (Uint8Array && (data instanceof ArrayBuffer || data instanceof Uint8Array)) { + var + str = "", + buf = new Uint8Array(data), + i = 0, + buf_len = buf.length; + for (; i < buf_len; i++) { + str += String.fromCharCode(buf[i]); + } + bb.push(str); + } else if (get_class(data) === "Blob" || get_class(data) === "File") { + if (FileReaderSync) { + var fr = new FileReaderSync; + bb.push(fr.readAsBinaryString(data)); + } else { + // async FileReader won't work as BlobBuilder is sync + throw new FileException("NOT_READABLE_ERR"); + } + } else if (data instanceof FakeBlob) { + if (data.encoding === "base64" && atob) { + bb.push(atob(data.data)); + } else if (data.encoding === "URI") { + bb.push(decodeURIComponent(data.data)); + } else if (data.encoding === "raw") { + bb.push(data.data); + } + } else { + if (typeof data !== "string") { + data += ""; // convert unsupported types to strings + } + // decode UTF-16 to binary string + bb.push(unescape(encodeURIComponent(data))); + } + }; + FBB_proto.getBlob = function (type) { + if (!arguments.length) { + type = null; + } + return new FakeBlob(this.data.join(""), type, "raw"); + }; + FBB_proto.toString = function () { + return "[object BlobBuilder]"; + }; + FB_proto.slice = function (start, end, type) { + var args = arguments.length; + if (args < 3) { + type = null; + } + return new FakeBlob( + this.data.slice(start, args > 1 ? end : this.data.length), type, this.encoding + ); + }; + FB_proto.toString = function () { + return "[object Blob]"; + }; + FB_proto.close = function () { + this.size = 0; + delete this.data; + }; + return FakeBlobBuilder; + }(view)); + + view.Blob = function (blobParts, options) { + var type = options ? (options.type || "") : ""; + var builder = new BlobBuilder(); + if (blobParts) { + for (var i = 0, len = blobParts.length; i < len; i++) { + if (Uint8Array && blobParts[i] instanceof Uint8Array) { + builder.append(blobParts[i].buffer); + } else { + builder.append(blobParts[i]); + } + } + } + var blob = builder.getBlob(type); + if (!blob.slice && blob.webkitSlice) { + blob.slice = blob.webkitSlice; + } + return blob; + }; + + var getPrototypeOf = Object.getPrototypeOf || function (object) { + return object.__proto__; + }; + view.Blob.prototype = getPrototypeOf(new view.Blob()); + }( + typeof self !== "undefined" && self || + typeof window !== "undefined" && window || + this + )); + \ No newline at end of file diff --git a/01.web/src/libs/export/Export2Excel.js b/01.web/src/libs/export/Export2Excel.js new file mode 100644 index 0000000..b240867 --- /dev/null +++ b/01.web/src/libs/export/Export2Excel.js @@ -0,0 +1,141 @@ +/* eslint-disable */ +require('script-loader!file-saver'); +require('script-loader!./Blob'); +require('script-loader!xlsx/dist/xlsx.core.min'); +function generateArray(table) { + var out = []; + var rows = table.querySelectorAll('tr'); + var ranges = []; + for (var R = 0; R < rows.length; ++R) { + var outRow = []; + var row = rows[R]; + var columns = row.querySelectorAll('td'); + for (var C = 0; C < columns.length; ++C) { + var cell = columns[C]; + var colspan = cell.getAttribute('colspan'); + var rowspan = cell.getAttribute('rowspan'); + var cellValue = cell.innerText; + if (cellValue !== "" && cellValue == +cellValue) cellValue = +cellValue; + + //Skip ranges + ranges.forEach(function (range) { + if (R >= range.s.r && R <= range.e.r && outRow.length >= range.s.c && outRow.length <= range.e.c) { + for (var i = 0; i <= range.e.c - range.s.c; ++i) outRow.push(null); + } + }); + + //Handle Row Span + if (rowspan || colspan) { + rowspan = rowspan || 1; + colspan = colspan || 1; + ranges.push({s: {r: R, c: outRow.length}, e: {r: R + rowspan - 1, c: outRow.length + colspan - 1}}); + } + ; + + //Handle Value + outRow.push(cellValue !== "" ? cellValue : null); + + //Handle Colspan + if (colspan) for (var k = 0; k < colspan - 1; ++k) outRow.push(null); + } + out.push(outRow); + } + return [out, ranges]; +}; + +function datenum(v, date1904) { + if (date1904) v += 1462; + var epoch = Date.parse(v); + return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000); +} + +function sheet_from_array_of_arrays(data, opts) { + var ws = {}; + var range = {s: {c: 10000000, r: 10000000}, e: {c: 0, r: 0}}; + for (var R = 0; R != data.length; ++R) { + for (var C = 0; C != data[R].length; ++C) { + if (range.s.r > R) range.s.r = R; + if (range.s.c > C) range.s.c = C; + if (range.e.r < R) range.e.r = R; + if (range.e.c < C) range.e.c = C; + var cell = {v: data[R][C]}; + if (cell.v == null) continue; + var cell_ref = XLSX.utils.encode_cell({c: C, r: R}); + if (typeof cell.v === 'number') cell.t = 'n'; + else if (typeof cell.v === 'boolean') cell.t = 'b'; + else if (cell.v instanceof Date) { + cell.t = 'n'; + cell.z = XLSX.SSF._table[14]; + cell.v = datenum(cell.v); + } + else cell.t = 's'; + + ws[cell_ref] = cell; + } + } + if (range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range); + return ws; +} + +function Workbook() { + if (!(this instanceof Workbook)) return new Workbook(); + this.SheetNames = []; + this.Sheets = {}; +} + +function s2ab(s) { + var buf = new ArrayBuffer(s.length); + var view = new Uint8Array(buf); + for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF; + return buf; +} + +export function export_table_to_excel(id) { + var theTable = document.getElementById(id); + console.log('a') + var oo = generateArray(theTable); + var ranges = oo[1]; + + /* original data */ + var data = oo[0]; + var ws_name = "SheetJS"; + console.log(data); + + var wb = new Workbook(), ws = sheet_from_array_of_arrays(data); + + /* add ranges to worksheet */ + // ws['!cols'] = ['apple', 'banan']; + ws['!merges'] = ranges; + + /* add worksheet to workbook */ + wb.SheetNames.push(ws_name); + wb.Sheets[ws_name] = ws; + + var wbout = XLSX.write(wb, {bookType: 'xlsx', bookSST: false, type: 'binary'}); + + saveAs(new Blob([s2ab(wbout)], {type: "application/octet-stream"}), "test.xlsx") +} + +function formatJson(jsonData) { + console.log(jsonData) +} +export function export_json_to_excel(th, jsonData, defaultTitle) { + + /* original data */ + + var data = jsonData; + data.unshift(th); + var ws_name = "SheetJS"; + + var wb = new Workbook(), ws = sheet_from_array_of_arrays(data); + + + /* add worksheet to workbook */ + wb.SheetNames.push(ws_name); + wb.Sheets[ws_name] = ws; + + var wbout = XLSX.write(wb, {bookType: 'xlsx', bookSST: false, type: 'binary'}); + var title = defaultTitle || '列表' + saveAs(new Blob([s2ab(wbout)], {type: "application/octet-stream"}), title + ".xlsx") +} + diff --git a/01.web/src/libs/util.js b/01.web/src/libs/util.js index ec7e770..5fefec8 100644 --- a/01.web/src/libs/util.js +++ b/01.web/src/libs/util.js @@ -1,7 +1,8 @@ -let util = {}; +let util = { +}; util.title = function (title) { - title = title ? title + ' - Svn Admin' : 'Svn Admin'; + title = title ? title + ' - SVNAdmin' : 'SVNAdmin'; window.document.title = title; }; diff --git a/01.web/src/main.js b/01.web/src/main.js index c869da6..70eaf21 100644 --- a/01.web/src/main.js +++ b/01.web/src/main.js @@ -1,116 +1,97 @@ import Vue from 'vue'; -import App from './app.vue'; -import Routers from './router'; -import Vuex from 'vuex'; -import store from './vuex/store'; import ViewUI from 'view-design'; -Vue.use(ViewUI); - -import SlideVerify from 'vue-monoplasty-slide-verify'; -Vue.use(SlideVerify); - import VueRouter from 'vue-router'; -Vue.use(VueRouter); - +import Routers from './router'; import Util from './libs/util'; -Vue.prototype.$util = Util; +import App from './app.vue'; +import 'view-design/dist/styles/iview.css'; +/** + * 以下为手动安装配置的依赖 + * 通过 Vue.prototype.$name 的方式 使$name在所有的Vue实例中可用 + */ +//http请求 -> axios import axios from 'axios'; Vue.prototype.$axios = axios; -import echarts from 'echarts' -Vue.prototype.$echarts = echarts +import VueClipboard from 'vue-clipboard2' +Vue.use(VueClipboard) -import 'view-design/dist/styles/iview.css'; +Vue.use(VueRouter); +Vue.use(ViewUI); -/** - * 路由配置 - */ +// import streamSaver from 'streamsaver' + +// 路由配置 const RouterConfig = { mode: 'hash', routes: Routers }; - const router = new VueRouter(RouterConfig); +//路由拦截器 beforeEach router.beforeEach((to, from, next) => { ViewUI.LoadingBar.start(); Util.title(to.meta.title); - if (to.matched.some(m => m.meta.requireAuth)) { - if (window.sessionStorage.token) { - if (to.meta.roles.indexOf(Number(window.sessionStorage.roleid)) == -1) { - // console.log("要访问的页面需要登录->本地存在token->要访问的页面不在允许范围内->跳转到首页"); - next('/repository'); - }else if (to.path == '/login') { - // console.log("要访问的页面需要登录->本地存在token->要访问的页面为登录页,则跳转到首页"); - next({ path: '/repository' }) - } else { - // console.log("要访问的页面需要登录->本地存在token->要访问的页面不为登录页,则放行"); - next(); - } - } else { - // console.log("要访问的页面需要登录->本地不存在token->跳转到登录页"); - next({ path: '/login' }) - } - } else if (to.path == '/login' && window.sessionStorage.token) { - // console.log("要访问的页面不需要登录->要访问的页面为登录页且存在token->跳转到首页"); - next({ path: '/repository' }) - } - else { - // console.log("要访问的页面不需要登录,则放行"); - next(); - } + //页面跳转逻辑 + next(); + // if (to.matched.some(m => m.meta.requireAuth)) { + // if (window.sessionStorage.token) { + // if (to.path == '/login') { + // next({ path: '/residentManage' }) + // } else { + // next(); + // } + // } else { + // next({ path: '/login' }) + // } + // } else if (to.path == '/login' && window.sessionStorage.token) { + // next({ path: '/residentManage' }) + // } + // else { + // next(); + // } }); +//路由拦截器 afterEach router.afterEach((to, from, next) => { ViewUI.LoadingBar.finish(); window.scrollTo(0, 0); }); /** - * 配置请求拦截器 + * 请求拦截器 */ -axios.defaults.baseURL = "/"; //公共url - -axios.interceptors.request.use(config => { +axios.interceptors.request.use(function (config) { if (window.sessionStorage.token) { - config.headers.common['token'] = window.sessionStorage.token; //将token加入到请求头 - } else { + //将token加入到请求头 + config.headers.common['token'] = window.sessionStorage.token; } return config -}, error => { - // 异常 - if (error.response) { - // switch (error.response.status) { - // case 401: - // sessionStorage.removeItem('token'); - // router.replace({ - // path: '/', - // query: { redirect: router.currentRoute.fullPath }//登录成功后跳入浏览的当前页面 - // }) - // } - } -}) +}, function (error) { + return Promise.reject(error); +}); /** - * 配置响应拦截器 + * 响应拦截器 */ -axios.interceptors.response.use(response => { +axios.interceptors.response.use(function (response) { if (response.data.code != undefined && response.data.code != '') { if (response.data.code != 200) { - window.sessionStorage.removeItem('token');//清除本地token + sessionStorage.removeItem('token'); + sessionStorage.removeItem('user_name'); + sessionStorage.removeItem('user_role_id'); + sessionStorage.removeItem('user_role_name'); router.push('/'); } } - return response -}, error => { - // 异常 - return Promise.reject(error) -}) + return response; +}, function (error) { + return Promise.reject(error); +}); new Vue({ el: '#app', router: router, - store, render: h => h(App) }); diff --git a/01.web/src/router.js b/01.web/src/router.js index 3d22872..9897b39 100644 --- a/01.web/src/router.js +++ b/01.web/src/router.js @@ -1,81 +1,120 @@ -const publicRoutes = [ +const routers = [ { name: 'login', path: '/login', meta: { - requireAuth: false, + title: '' }, - component: (resolve) => require(['./views/login/login.vue'], resolve) + component: (resolve) => require(['./views/login/index.vue'], resolve) }, { name: 'manage', path: '/', - redirect: 'repository', + redirect: { name: 'login' }, meta: { - requireAuth: true, - roles: [1, 2] + title: 'SVNAdmin', }, - component: (resolve) => require(['./views/layout/layout.vue'], resolve), + component: (resolve) => require(['./views/layout/basicLayout/index.vue'], resolve), children: [ { - name: 'repository', - path: 'repository', + name: 'index', + path: '/index', meta: { - title: '服务总览', - isNav: true, - requireAuth: true, - roles: [1, 2] + title: '信息统计', + icon: "ios-stats", + user_role_id: ['1'], + group: { + name: "仓库", + num: 1 + } }, - component: (resolve) => require(['./views/analysis/analysis.vue'], resolve) + component: (resolve) => require(['./views/index/index.vue'], resolve) }, { - name: 'analysis', - path: 'analysis', + name: 'repositoryInfo', + path: '/repositoryInfo', meta: { - title: '仓库管理', - isNav: true, - requireAuth: true, - roles: [1, 2] + title: 'SVN仓库', + icon: 'logo-buffer', + user_role_id: ['1', '2'], + group: { + name: "", + num: 1 + } }, - component: (resolve) => require(['./views/repository/repository.vue'], resolve) + component: (resolve) => require(['./views/repositoryInfo/index.vue'], resolve) }, { - name: 'user', - path: 'user', + name: 'repositoryUser', + path: '/repositoryUser', meta: { - title: '用户管理', - isNav: true, - requireAuth: true, - roles: [1] + title: 'SVN用户', + icon: 'md-person', + user_role_id: ['1'], + group: { + name: "", + num: 1 + } }, - component: (resolve) => require(['./views/user/user.vue'], resolve) + component: (resolve) => require(['./views/repositoryUser/index.vue'], resolve), }, { - name: 'group', - path: 'group', + name: 'repositoryGroup', + path: '/repositoryGroup', meta: { - title: '分组管理', - isNav: true, - requireAuth: true, - roles: [1] + title: 'SVN分组', + icon: 'md-people', + user_role_id: ['1'], + group: { + name: "", + num: 1 + } }, - component: (resolve) => require(['./views/group/group.vue'], resolve) + component: (resolve) => require(['./views/repositoryGroup/index.vue'], resolve), }, { - name: 'sys', - path: 'setting', + name: 'systemLog', + path: '/systemLog', meta: { - title: '系统设置', - isNav: true, - requireAuth: true, - roles: [1] + title: '系统日志', + icon: 'md-bug', + user_role_id: ['1'], + group: { + name: "运维", + num: 2 + } }, - component: (resolve) => require(['./views/setting/setting.vue'], resolve), + component: (resolve) => require(['./views/systemLog/index.vue'], resolve), }, + { + name: 'personal', + path: '/personal', + meta: { + title: '个人中心', + icon: 'md-cube', + user_role_id: ['1', '2'], + group: { + name: "高级", + num: 3 + } + }, + component: (resolve) => require(['./views/personal/index.vue'], resolve), + }, + { + name: 'advance', + path: '/advance', + meta: { + title: '系统配置', + icon: 'md-settings', + user_role_id: ['1'], + group: { + name: "", + num: 3 + } + }, + component: (resolve) => require(['./views/advance/index.vue'], resolve), + } ] }, ]; - - - -export default publicRoutes; +export default routers; \ No newline at end of file diff --git a/01.web/src/static/images/logo.png b/01.web/src/static/images/logo.png deleted file mode 100644 index 2a631b1..0000000 Binary files a/01.web/src/static/images/logo.png and /dev/null differ diff --git a/01.web/src/static/images/validate0.jpg b/01.web/src/static/images/validate0.jpg deleted file mode 100644 index 18906ba..0000000 Binary files a/01.web/src/static/images/validate0.jpg and /dev/null differ diff --git a/01.web/src/styles/common.css b/01.web/src/styles/common.css index 73bf920..e69de29 100644 --- a/01.web/src/styles/common.css +++ b/01.web/src/styles/common.css @@ -1,8 +0,0 @@ -/*列表上方操作信息*/ -.page-card-oper { overflow: hidden; margin-top: 10px;} -.page-card-oper .oper {float: left;} -.page-card-oper .search {float: right;} -/*列表中操作信息*/ -.page-table .pager {float: right;margin-top: 20px; } -.page-table {margin-top: 20px;/* overflow: hidden; */margin-bottom: 10px;} -.operButton {margin-right: 5px;} \ No newline at end of file diff --git a/01.web/src/views/advance/index.vue b/01.web/src/views/advance/index.vue new file mode 100644 index 0000000..f55c681 --- /dev/null +++ b/01.web/src/views/advance/index.vue @@ -0,0 +1,530 @@ + + + + + \ No newline at end of file diff --git a/01.web/src/views/analysis/analysis.vue b/01.web/src/views/analysis/analysis.vue deleted file mode 100644 index bcaa661..0000000 --- a/01.web/src/views/analysis/analysis.vue +++ /dev/null @@ -1,798 +0,0 @@ - - - - \ No newline at end of file diff --git a/01.web/src/views/global/token.vue b/01.web/src/views/global/token.vue new file mode 100644 index 0000000..d3db476 --- /dev/null +++ b/01.web/src/views/global/token.vue @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/01.web/src/views/group/group.vue b/01.web/src/views/group/group.vue deleted file mode 100644 index 43ee1b7..0000000 --- a/01.web/src/views/group/group.vue +++ /dev/null @@ -1,463 +0,0 @@ - - \ No newline at end of file diff --git a/01.web/src/views/index/index.vue b/01.web/src/views/index/index.vue new file mode 100644 index 0000000..5d6eea1 --- /dev/null +++ b/01.web/src/views/index/index.vue @@ -0,0 +1,307 @@ + + + + + \ No newline at end of file diff --git a/01.web/src/views/layout/basicLayout/index.css b/01.web/src/views/layout/basicLayout/index.css new file mode 100644 index 0000000..e69de29 diff --git a/01.web/src/views/layout/basicLayout/index.vue b/01.web/src/views/layout/basicLayout/index.vue new file mode 100644 index 0000000..064049b --- /dev/null +++ b/01.web/src/views/layout/basicLayout/index.vue @@ -0,0 +1,238 @@ + + + + + \ No newline at end of file diff --git a/01.web/src/views/layout/blankLayout/index.vue b/01.web/src/views/layout/blankLayout/index.vue new file mode 100644 index 0000000..0847a5c --- /dev/null +++ b/01.web/src/views/layout/blankLayout/index.vue @@ -0,0 +1,12 @@ + + + + + \ No newline at end of file diff --git a/01.web/src/views/layout/layout.less b/01.web/src/views/layout/layout.less deleted file mode 100644 index 670e7c4..0000000 --- a/01.web/src/views/layout/layout.less +++ /dev/null @@ -1,37 +0,0 @@ -.ivu-layout-header { - background: #3377de; - padding: 0 20px; - .layout-logo { - overflow: hidden; - cursor: pointer; - float: left; - - .logo { - margin-top: 19px; - height: 35px; - width: 195px; - float: left; - color: #fff; - } - } - - .layout-role { - float: right; - margin-right: 20px; - - a { - color: #fff; - } - } - .layout-user { - float: right; - } -} - -.breadcrumb { - width: 100%; - height: 49px; - display: block; - line-height: 49px; - text-indent: 20px; -} \ No newline at end of file diff --git a/01.web/src/views/layout/layout.vue b/01.web/src/views/layout/layout.vue deleted file mode 100644 index f9065d8..0000000 --- a/01.web/src/views/layout/layout.vue +++ /dev/null @@ -1,222 +0,0 @@ - - - - - \ No newline at end of file diff --git a/01.web/src/views/login/index.vue b/01.web/src/views/login/index.vue new file mode 100644 index 0000000..645ae37 --- /dev/null +++ b/01.web/src/views/login/index.vue @@ -0,0 +1,203 @@ + + + + + \ No newline at end of file diff --git a/01.web/src/views/login/login.less b/01.web/src/views/login/login.less index a46113e..28a2c89 100644 --- a/01.web/src/views/login/login.less +++ b/01.web/src/views/login/login.less @@ -1,29 +1,29 @@ -.login { - width: 100%; - height: calc(100vh); - background-image: url("../../static/images/login.png"); - background-size: cover; - background-position: center; - position: relative; - &-con { - position: absolute; - right: 320px; - top: 48%; - transform: translateY(-60%); - width: 320px; - &-header { - font-size: 16px; - font-weight: 300; - text-align: center; - padding: 30px 0; +.login{ + width: 100%; + height: 100%; + background-image: url('../../assets/images/login.png'); + background-size: cover; + background-position: center; + position: relative; + &-con{ + position: absolute; + right: 160px; + top: 50%; + transform: translateY(-60%); + width: 300px; + &-header{ + font-size: 16px; + font-weight: 300; + text-align: center; + padding: 30px 0; + } + .form-con{ + padding: 10px 0 0; + } + .login-tip{ + font-size: 10px; + text-align: center; + color: #c3c3c3; + } } - .form-con { - padding: 10px 0 0; - } - .login-tip { - font-size: 10px; - text-align: center; - color: #c3c3c3; - } - } -} \ No newline at end of file +} diff --git a/01.web/src/views/login/login.vue b/01.web/src/views/login/login.vue deleted file mode 100644 index 0fd82fc..0000000 --- a/01.web/src/views/login/login.vue +++ /dev/null @@ -1,137 +0,0 @@ - - - - - \ No newline at end of file diff --git a/01.web/src/views/personal/index.vue b/01.web/src/views/personal/index.vue new file mode 100644 index 0000000..16e3d07 --- /dev/null +++ b/01.web/src/views/personal/index.vue @@ -0,0 +1,270 @@ + + + + + \ No newline at end of file diff --git a/01.web/src/views/repository/repository.vue b/01.web/src/views/repository/repository.vue deleted file mode 100644 index fa628a6..0000000 --- a/01.web/src/views/repository/repository.vue +++ /dev/null @@ -1,657 +0,0 @@ - - \ No newline at end of file diff --git a/01.web/src/views/repositoryGroup/index.vue b/01.web/src/views/repositoryGroup/index.vue new file mode 100644 index 0000000..65018f2 --- /dev/null +++ b/01.web/src/views/repositoryGroup/index.vue @@ -0,0 +1,645 @@ + + + + + \ No newline at end of file diff --git a/01.web/src/views/repositoryInfo/index.vue b/01.web/src/views/repositoryInfo/index.vue new file mode 100644 index 0000000..7bc23e7 --- /dev/null +++ b/01.web/src/views/repositoryInfo/index.vue @@ -0,0 +1,2203 @@ + + + + + \ No newline at end of file diff --git a/01.web/src/views/repositoryUser/index.vue b/01.web/src/views/repositoryUser/index.vue new file mode 100644 index 0000000..8b80e5b --- /dev/null +++ b/01.web/src/views/repositoryUser/index.vue @@ -0,0 +1,464 @@ + + + + + \ No newline at end of file diff --git a/01.web/src/views/setting/setting.vue b/01.web/src/views/setting/setting.vue deleted file mode 100644 index a3cafb8..0000000 --- a/01.web/src/views/setting/setting.vue +++ /dev/null @@ -1,910 +0,0 @@ - - - diff --git a/01.web/src/views/systemLog/index.vue b/01.web/src/views/systemLog/index.vue new file mode 100644 index 0000000..c85fb08 --- /dev/null +++ b/01.web/src/views/systemLog/index.vue @@ -0,0 +1,250 @@ + + + + + \ No newline at end of file diff --git a/01.web/src/views/user/user.vue b/01.web/src/views/user/user.vue deleted file mode 100644 index 6177738..0000000 --- a/01.web/src/views/user/user.vue +++ /dev/null @@ -1,335 +0,0 @@ - - \ No newline at end of file diff --git a/01.web/src/vuex/store.js b/01.web/src/vuex/store.js deleted file mode 100644 index 3ec1889..0000000 --- a/01.web/src/vuex/store.js +++ /dev/null @@ -1,24 +0,0 @@ - -import Vue from 'vue' -import Vuex from 'vuex' -import Routers from '../router'; -Vue.use(Vuex) - - - -// userid: null, -// username:null, -// roleid: null, -// rolename:null, -// token:null - -const state = { - userInfo: "" -}; - -export default new Vuex.Store({ - getters: { - }, - mutations: { - } -}) \ No newline at end of file diff --git a/01.web/webpack.dev.config.js b/01.web/webpack.dev.config.js index d6ca4d2..a7ac354 100644 --- a/01.web/webpack.dev.config.js +++ b/01.web/webpack.dev.config.js @@ -4,19 +4,14 @@ const ExtractTextPlugin = require('extract-text-webpack-plugin'); const merge = require('webpack-merge'); const webpackBaseConfig = require('./webpack.base.config.js'); const fs = require('fs'); -const path = require('path'); + fs.open('./src/config/env.js', 'w', function (err, fd) { const buf = 'export default "development";'; - //fs.write(fd, buf, 0, buf.length, 0, function (err, written, buffer){}); + // fs.write(fd, buf, 0, buf.length, 0, function (err, written, buffer){}); fs.write(fd, buf, 0, 'utf-8', function (err, written, buffer) { }); }); module.exports = merge(webpackBaseConfig, { - resolve: { - alias: { - lib: path.resolve(__dirname, 'src/libs/'), - } - }, devtool: '#source-map', output: { publicPath: '/dist/', @@ -38,7 +33,6 @@ module.exports = merge(webpackBaseConfig, { inject: false }) ], - devServer: { host: '127.0.0.1', port: 8081, @@ -58,5 +52,4 @@ module.exports = merge(webpackBaseConfig, { } } } - }); \ No newline at end of file diff --git a/01.web/webpack.prod.config.js b/01.web/webpack.prod.config.js index f14ca6c..347d38b 100644 --- a/01.web/webpack.prod.config.js +++ b/01.web/webpack.prod.config.js @@ -6,8 +6,8 @@ const webpackBaseConfig = require('./webpack.base.config.js'); const fs = require('fs'); fs.open('./src/config/env.js', 'w', function (err, fd) { - const buf = 'export default "development";'; - //fs.write(fd, buf, 0, buf.length, 0, function (err, written, buffer){}); + const buf = 'export default "production";'; + // fs.write(fd, buf, 0, buf.length, 0, function (err, written, buffer){}); fs.write(fd, buf, 0, 'utf-8', function (err, written, buffer) { }); }); @@ -41,6 +41,5 @@ module.exports = merge(webpackBaseConfig, { template: './src/template/index.ejs', inject: false }) - ], - + ] }); \ No newline at end of file diff --git a/02.php/api.php b/02.php/api.php index 6db7c3c..a516a38 100644 --- a/02.php/api.php +++ b/02.php/api.php @@ -1,6 +1,6 @@ '0', - 'code' => $data['code'], - 'message' => $data['message'] - ); - echo json_encode($result); - return; - } + } else if ($type == 'web') { + if (!in_array($action, unserialize(webWhiteList))) { + FunCheckToken($token); } + } else { + FunMessageExit(401, 0, '无效的接口类型'); + } + + //检查token是否已注销 + (new blacktoken())->CheckBlack(); + + //开始调用 + $controller = new $controller_perifx(); + if (is_callable(array($controller, $action))) { //执行请求 - echo json_encode($controller->$action($requestPayload)); + $controller->$action(); + } else { + FunMessageExit(401, 0, '无效的方法名'); } +} else { + FunMessageExit(401, 0, '无效的控制器名'); } diff --git a/02.php/app/controller/blacktoken.class.php b/02.php/app/controller/blacktoken.class.php new file mode 100644 index 0000000..134d70f --- /dev/null +++ b/02.php/app/controller/blacktoken.class.php @@ -0,0 +1,57 @@ +token); + $this->database->insert('black_token', [ + 'token' => $this->token, + 'start_time' => $arr[2], + 'end_time' => $arr[3], + 'insert_time' => date('Y-m-d H:i:s') + ]); + } + + /** + * 扫描黑名单中的token 发现过期的则删除 + * + * 目的:不给搜索增加压力 + */ + function CleanBlack() + { + $this->database->delete('black_token', [ + 'end_time[<]' => time() + ]); + } + + /** + * 检查token是否存在于黑名单 + */ + function CheckBlack() + { + $result = $this->database->get('black_token', [ + 'token_id' + ], [ + 'token' => $this->token + ]); + if ($result != null) { + FunMessageExit(401, 0, 'token已注销'); + } + } +} diff --git a/02.php/app/controller/client.class.php b/02.php/app/controller/client.class.php deleted file mode 100644 index 55f73b1..0000000 --- a/02.php/app/controller/client.class.php +++ /dev/null @@ -1,169 +0,0 @@ -Config = new Config(); - } - - //获取IP地址 - function GetClientIp() - { - foreach ($this->remotes_keys as $key) { - if (array_key_exists($key, $_SERVER)) { - foreach (explode(',', $_SERVER[$key]) as $ip) { - if ($this->isValid($ip)) { - return $ip; - } - } - } - } - return '127.0.0.1'; - } - - //获取操作系统类型 - function GetClientOS() - { - $agent = $_SERVER['HTTP_USER_AGENT']; - $os = false; - - if (preg_match('/win/i', $agent) && strpos($agent, '95')) { - $os = 'Windows 95'; - } else if (preg_match('/win 9x/i', $agent) && strpos($agent, '4.90')) { - $os = 'Windows ME'; - } else if (preg_match('/win/i', $agent) && preg_match('/98/i', $agent)) { - $os = 'Windows 98'; - } else if (preg_match('/win/i', $agent) && preg_match('/nt 6.0/i', $agent)) { - $os = 'Windows Vista'; - } else if (preg_match('/win/i', $agent) && preg_match('/nt 6.1/i', $agent)) { - $os = 'Windows 7'; - } else if (preg_match('/win/i', $agent) && preg_match('/nt 6.2/i', $agent)) { - $os = 'Windows 8'; - } else if (preg_match('/win/i', $agent) && preg_match('/nt 10.0/i', $agent)) { - $os = 'Windows 10'; #添加win10判断 - } else if (preg_match('/win/i', $agent) && preg_match('/nt 5.1/i', $agent)) { - $os = 'Windows XP'; - } else if (preg_match('/win/i', $agent) && preg_match('/nt 5/i', $agent)) { - $os = 'Windows 2000'; - } else if (preg_match('/win/i', $agent) && preg_match('/nt/i', $agent)) { - $os = 'Windows NT'; - } else if (preg_match('/win/i', $agent) && preg_match('/32/i', $agent)) { - $os = 'Windows 32'; - } else if (preg_match('/linux/i', $agent)) { - $os = 'Linux'; - } else if (preg_match('/unix/i', $agent)) { - $os = 'Unix'; - } else if (preg_match('/sun/i', $agent) && preg_match('/os/i', $agent)) { - $os = 'SunOS'; - } else if (preg_match('/ibm/i', $agent) && preg_match('/os/i', $agent)) { - $os = 'IBM OS/2'; - } else if (preg_match('/Mac/i', $agent) && preg_match('/PC/i', $agent)) { - $os = 'Macintosh'; - } else if (preg_match('/PowerPC/i', $agent)) { - $os = 'PowerPC'; - } else if (preg_match('/AIX/i', $agent)) { - $os = 'AIX'; - } else if (preg_match('/HPUX/i', $agent)) { - $os = 'HPUX'; - } else if (preg_match('/NetBSD/i', $agent)) { - $os = 'NetBSD'; - } else if (preg_match('/BSD/i', $agent)) { - $os = 'BSD'; - } else if (preg_match('/OSF1/i', $agent)) { - $os = 'OSF1'; - } else if (preg_match('/IRIX/i', $agent)) { - $os = 'IRIX'; - } else if (preg_match('/FreeBSD/i', $agent)) { - $os = 'FreeBSD'; - } else if (preg_match('/teleport/i', $agent)) { - $os = 'teleport'; - } else if (preg_match('/flashget/i', $agent)) { - $os = 'flashget'; - } else if (preg_match('/webzip/i', $agent)) { - $os = 'webzip'; - } else if (preg_match('/offline/i', $agent)) { - $os = 'offline'; - } else { - $os = '未知操作系统'; - } - return $os; - } - - //获取浏览器类型 - function GetClientBrowser() - { - $sys = $_SERVER['HTTP_USER_AGENT']; //获取用户代理字符串 - if (stripos($sys, "Firefox/") > 0) { - preg_match("/Firefox\/([^;)]+)+/i", $sys, $b); - $exp[0] = "Firefox"; - $exp[1] = $b[1]; //获取火狐浏览器的版本号 - } elseif (stripos($sys, "Maxthon") > 0) { - preg_match("/Maxthon\/([\d\.]+)/", $sys, $aoyou); - $exp[0] = "傲游"; - $exp[1] = $aoyou[1]; - } elseif (stripos($sys, "MSIE") > 0) { - preg_match("/MSIE\s+([^;)]+)+/i", $sys, $ie); - $exp[0] = "IE"; - $exp[1] = $ie[1]; //获取IE的版本号 - } elseif (stripos($sys, "OPR") > 0) { - preg_match("/OPR\/([\d\.]+)/", $sys, $opera); - $exp[0] = "Opera"; - $exp[1] = $opera[1]; - } elseif (stripos($sys, "Edge") > 0) { - //win10 Edge浏览器 添加了chrome内核标记 在判断Chrome之前匹配 - preg_match("/Edge\/([\d\.]+)/", $sys, $Edge); - $exp[0] = "Edge"; - $exp[1] = $Edge[1]; - } elseif (stripos($sys, "Chrome") > 0) { - preg_match("/Chrome\/([\d\.]+)/", $sys, $google); - $exp[0] = "Chrome"; - $exp[1] = $google[1]; //获取google chrome的版本号 - } elseif (stripos($sys, 'rv:') > 0 && stripos($sys, 'Gecko') > 0) { - preg_match("/rv:([\d\.]+)/", $sys, $IE); - $exp[0] = "IE"; - $exp[1] = $IE[1]; - } else { - $exp[0] = "未知浏览器"; - $exp[1] = ""; - } - return $exp[0] . '(' . $exp[1] . ')'; - } - - //校验IP地址 - private function isValid($ip) - { - if ( - !filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) && !filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 | FILTER_FLAG_NO_PRIV_RANGE) - ) { - return false; - } - return true; - } -} diff --git a/02.php/app/controller/common.class.php b/02.php/app/controller/common.class.php new file mode 100644 index 0000000..496a21d --- /dev/null +++ b/02.php/app/controller/common.class.php @@ -0,0 +1,181 @@ +Svnuser = new svnuser(); + $this->Blacktoken = new blacktoken(); + $this->Logs = new logs(); + } + + /** + * 登录 + */ + function Login() + { + $codeResult = $this->database->get('verification_code', [ + 'end_time' + ], [ + 'uuid' => $this->requestPayload['uuid'], + 'code' => $this->requestPayload['code'], + ]); + if ($codeResult == null) { + FunMessageExit(200, 0, '验证码错误', $codeResult); + } + if ($codeResult['end_time'] < time()) { + FunMessageExit(200, 0, '验证码过期'); + } + + FunCheckForm($this->requestPayload, [ + 'user_name' => ['type' => 'string', 'notNull' => true], + 'user_pass' => ['type' => 'string', 'notNull' => true], + 'user_role' => ['type' => 'string', 'notNull' => true], + ]); + + if ($this->requestPayload['user_role'] == 1) { + $result = $this->database->get('admin_users', [ + 'admin_user_id', + 'admin_user_name', + 'admin_user_phone', + 'admin_user_email' + ], [ + 'admin_user_name' => $this->requestPayload['user_name'], + 'admin_user_password' => $this->requestPayload['user_pass'] + ]); + if ($result == null) { + FunMessageExit(200, 0, '账号密码错误'); + } + } else if ($this->requestPayload['user_role'] == 2) { + //进行用户数据同步 + $this->Svnuser->SyncUserToDb(); + + $result = $this->database->get('svn_users', [ + 'svn_user_id', + 'svn_user_name', + 'svn_user_pass', + 'svn_user_status' + ], [ + 'svn_user_name' => $this->requestPayload['user_name'], + 'svn_user_pass' => $this->requestPayload['user_pass'] + ]); + if ($result == null) { + FunMessageExit(200, 0, '登陆失败'); + } + if ($result['svn_user_status'] == 0) { + FunMessageExit(200, 0, '用户已过期'); + } + } + + $this->Logs->InsertLog( + '用户登录', + '登陆成功 ' + . '账号:' . $this->requestPayload['user_name'] . ' ' + . 'IP地址:' . $_SERVER["REMOTE_ADDR"], + $this->requestPayload['user_name'] + ); + + FunMessageExit(200, 1, '登陆成功', [ + 'token' => FunCreateToken($this->requestPayload['user_role'], $this->requestPayload['user_name']), + 'user_name' => $this->requestPayload['user_name'], + 'user_role_name' => $this->requestPayload['user_role'] == 1 ? '管理人员' : 'SVN用户', + 'user_role_id' => $this->requestPayload['user_role'] + ]); + } + + /** + * 注销 + * + * 注销操作为将用户尚未过期的token加入所谓黑名单 + * 每次注销触发主动扫描黑名单 将名单中过期的token删除 + * 目的:实现用户注销后尚未过期的token无法继续使用 + */ + function Logout() + { + //清理过期token + $this->Blacktoken->CleanBlack(); + + //加入本token + $this->Blacktoken->BlackToken(); + + $this->Logs->InsertLog( + '用户注销', + '账号:' . $this->globalUserName . 'IP地址:' . $_SERVER["REMOTE_ADDR"], + $this->globalUserName + ); + + //退出 + FunMessageExit(); + } + + /** + * 清除过期验证码 + */ + private function Clean() + { + $this->database->delete('verification_code', [ + 'end_time[<]' => time() + ]); + } + + /** + * 获取验证码 + */ + function GetVeryfyCode() + { + //清除过期验证码 + $this->Clean(); + + //生成验证码 + $code = FunGetRandStrL(4); + + //生成唯一标识 + $uuid = time() . FunGetRandStr() . FunGetRandStr(); + + // + $prefix = time(); + + //生效时间 + $startTime = $prefix; + + //有效时间为60s + $endTime = $prefix + 60; + + //写入数据库 + $this->database->insert('verification_code', [ + 'uuid' => $uuid, + 'code' => $code, + 'start_time' => $startTime, + 'end_time' => $endTime, + 'insert_time' => date('Y-m-d H:i:s') + ]); + + require_once BASE_PATH . '/extension/VerifyCode/VerifyCode.class.php'; + + $varification = new verification(134, 32, $code, BASE_PATH . '/data/test.png'); + + $imageString = $varification->CreateVerifacationImage(); + + //返回图片的base64编码 + FunMessageExit(200, 1, 'success', [ + 'uuid' => $uuid, + 'base64' => $imageString + ]); + } +} diff --git a/02.php/app/controller/config.class.php b/02.php/app/controller/config.class.php deleted file mode 100644 index 69c9cfe..0000000 --- a/02.php/app/controller/config.class.php +++ /dev/null @@ -1,218 +0,0 @@ -Update("MANAGE_USER", $manageUser); - $this->Update("MANAGE_PASS", $managePass); - $this->Update("MANAGE_EMAIL", $manageEmail); - - $data['status'] = 1; - $data['message'] = '成功'; - return $data; - } - - //获取管理员信息 - public function GetManageSetting($requestPayload) - { - $result = array( - "manageUser" => MANAGE_USER, - "managePass" => MANAGE_PASS, - "manageEmail" => MANAGE_EMAIL, - ); - - $data['status'] = 1; - $data['data'] = $result; - $data['message'] = '成功'; - return $data; - } - - //获取服务器基本信息 - public function GetBasicSetting($requestPayload) - { - $all_mail_status = ALL_MAIL_STATUS == 1 ? true : false; - $result = array( - "server_ip" => SERVER_IP, - "server_domain" => SERVER_DOMAIN, - "svn_repository_path" => SVN_REPOSITORY_PATH, - "backup_path" => BACKUP_PATH, - "all_mail_status" => $all_mail_status, - "token" => SIGNATURE, - "logs" => LOG_PATH, - "svnserve" => SVN_SERVER_CONF, - "passwd" => SVN_SERVER_PASSWD, - "authz" => SVN_SERVER_AUTHZ - ); - - $data['status'] = 1; - $data['data'] = $result; - $data['message'] = '成功'; - return $data; - } - - //设置服务器基本信息 - public function SetBasicSetting($requestPayload) - { - $server_ip = trim($requestPayload['server_ip']); - $token = trim($requestPayload['token']); - $server_domain = trim($requestPayload['server_domain']); - $all_mail_status = $requestPayload['all_mail_status']; - - if (empty($server_ip) || empty($server_domain) || empty($token)) { - $data['status'] = 0; - $data['message'] = '参数不完整或错误'; - return $data; - } - - $this->Update("SERVER_IP", $server_ip); - $this->Update("SERVER_DOMAIN", $server_domain); - $this->Update("SIGNATURE", $token); - if ($all_mail_status) { - $this->Update("ALL_MAIL_STATUS", 1); - } else { - $this->Update("ALL_MAIL_STATUS", 0); - } - - $data['status'] = 1; - $data['message'] = "成功"; - return $data; - } - - //更改版本库父文件夹后触发的操作 - private function UpdateRepositoryParentPath($old_path, $new_path) - { - FunRequestReplyExec("mkdir $new_path"); - $info = FunRequestReplyExec('ps auxf|grep -v "grep"|grep svnserve'); - if ($info == ISNULL && !file_exists('/usr/bin/svnserve')) { - /* - * 没有安装过svn服务 - */ - //移动仓库 - $file_arr = scandir($old_path); - foreach ($file_arr as $file_item) { - if ($file_item != '.' && $file_item != '..') { - if (is_dir($old_path . '/' . $file_item)) { - $file_arr2 = scandir($old_path . '/' . $file_item); - foreach ($file_arr2 as $file_item2) { - if (($file_item2 == 'conf' || $file_item2 == 'db' || $file_item2 == 'hooks' || $file_item2 == 'locks')) { - FunRequestReplyExec('mv -b -f ' . $old_path . '/' . $file_item . ' ' . $new_path); - } - } - } - } - } - //检查仓库是否已经被移动 - $file_arr = scandir($old_path); - foreach ($file_arr as $file_item) { - if ($file_item != '.' && $file_item != '..') { - if (is_dir($old_path . '/' . $file_item)) { - $file_arr2 = scandir($old_path . '/' . $file_item); - foreach ($file_arr2 as $file_item2) { - if (($file_item2 == 'conf' || $file_item2 == 'db' || $file_item2 == 'hooks' || $file_item2 == 'locks')) { - return false; - } - } - } - } - } - return true; - } else { - /* - * 安装过svn服务 - */ - //停止服务 - FunRequestReplyExec('systemctl stop svnserve'); - //移动仓库 - $file_arr = scandir($old_path); - foreach ($file_arr as $file_item) { - if ($file_item != '.' && $file_item != '..') { - if (is_dir($old_path . '/' . $file_item)) { - $file_arr2 = scandir($old_path . '/' . $file_item); - foreach ($file_arr2 as $file_item2) { - if (($file_item2 == 'conf' || $file_item2 == 'db' || $file_item2 == 'hooks' || $file_item2 == 'locks')) { - FunRequestReplyExec('mv -b -f ' . $old_path . '/' . $file_item . ' ' . $new_path); - } - } - } - } - } - //修改配置文件 - FunRequestReplyExec('sed -i \'s/' . str_replace('/', '\/', $old_path) . '/' . str_replace('/', '\/', $new_path) . '/g\'' . ' /etc/sysconfig/svnserve'); //bug - //启动服务 - FunRequestReplyExec('systemctl start svnserve'); - //检查配置文件是否被正确修改 - $file = fopen("/etc/sysconfig/svnserve", "r") or exit("无法打开文件!"); - $file_content = []; - while (!feof($file)) { - array_push($file_content, fgets($file)); - } - fclose($file); - foreach ($file_content as $key => $value) { - if (strstr($value, $old_path)) { - return false; - } - } - //检查仓库是否已经被移动 - $file_arr = scandir($old_path); - foreach ($file_arr as $file_item) { - if ($file_item != '.' && $file_item != '..') { - if (is_dir($old_path . '/' . $file_item)) { - $file_arr2 = scandir($old_path . '/' . $file_item); - foreach ($file_arr2 as $file_item2) { - if (($file_item2 == 'conf' || $file_item2 == 'db' || $file_item2 == 'hooks' || $file_item2 == 'locks')) { - return false; - } - } - } - } - } - return true; - } - } -} diff --git a/02.php/app/controller/crontab.class.php b/02.php/app/controller/crontab.class.php deleted file mode 100644 index 21a1c3f..0000000 --- a/02.php/app/controller/crontab.class.php +++ /dev/null @@ -1,31 +0,0 @@ -Config = new Config(); - - $this->svn_repository_path = SVN_REPOSITORY_PATH; - $this->backup_path = BACKUP_PATH; - } - - //立即执行计划任务 - function StartCrontab() - { - } -} diff --git a/02.php/app/controller/firewall.class.php b/02.php/app/controller/firewall.class.php deleted file mode 100644 index 558587e..0000000 --- a/02.php/app/controller/firewall.class.php +++ /dev/null @@ -1,145 +0,0 @@ -requestPayload['pageSize']; + $currentPage = $this->requestPayload['currentPage']; + $searchKeyword = trim($this->requestPayload['searchKeyword']); + + //分页 + $begin = $pageSize * ($currentPage - 1); + + $list = $this->database->select('logs', [ + 'log_id', + 'log_type_name', + 'log_content', + 'log_add_user_name', + 'log_add_time', + ], [ + 'AND' => [ + 'OR' => [ + 'log_type_name[~]' => $searchKeyword, + 'log_content[~]' => $searchKeyword, + 'log_add_user_name[~]' => $searchKeyword, + 'log_add_time[~]' => $searchKeyword, + ], + ], + 'LIMIT' => [$begin, $pageSize] + ]); + + $total = $this->database->count('logs', [ + 'log_id' + ], [ + 'AND' => [ + 'OR' => [ + 'log_type_name[~]' => $searchKeyword, + 'log_content[~]' => $searchKeyword, + 'log_add_user_name[~]' => $searchKeyword, + 'log_add_time[~]' => $searchKeyword, + ], + ] + ]); + + FunMessageExit(200, 1, '成功', [ + 'data' => $list, + 'total' => $total + ]); + } + + /** + * 清空日志 + */ + function ClearLogs() + { + $this->database->delete('logs', [ + 'log_id[>]' => 0 + ]); + + FunMessageExit(); + } + + /** + * 写入日志 + */ + function InsertLog($log_type_name = '', $log_content = '', $log_add_user_name = '') + { + $this->database->insert('logs', [ + 'log_type_name' => $log_type_name, + 'log_content' => $log_content, + 'log_add_user_name' => $log_add_user_name, + 'log_add_time' => date('Y-m-d H:i:s') + ]); + } +} diff --git a/02.php/app/controller/mail.class.php b/02.php/app/controller/mail.class.php index daffd3a..4c34f36 100644 --- a/02.php/app/controller/mail.class.php +++ b/02.php/app/controller/mail.class.php @@ -1,24 +1,7 @@ Mail = new PHPMailer(true); - $this->Mail->setLanguage('zh_cn', BASE_PATH . '/extension/PHPMailer/language/'); //加载错误消息翻译包 - - $this->Config = new Config(); - } - - //用户操作触发邮件发送机制 - function SendMail($send_title, $send_content) - { - //系统未开启邮件服务 - if (ALL_MAIL_STATUS == "0") { - return; - } - //未添加邮件服务 - $result = mail_host; - if (empty($result)) { - return; - } - //添加的邮件服务未启用 - if (single_mail_status != "1") { - return; - } - //邮件服务器选项 - $port = mail_port; - $host = mail_host; - $username = mail_user; - $password = mail_password; - $from = send_mail; - $to = MANAGE_EMAIL; - - //设置选项 - try { - //服务器配置 - $this->Mail->SMTPDebug = SMTP::DEBUG_OFF; // 关闭debug模式 - $this->Mail->isSMTP(); // 使用 SMTP - $this->Mail->Host = $host; // SMTP服务器 - $this->Mail->SMTPAuth = true; // 允许 SMTP 认证 - $this->Mail->Username = $username; // SMTP 用户名 - $this->Mail->Password = $password; // SMTP 密码 - $this->Mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // 允许tls协议 - $this->Mail->Port = $port; // TCP 端口 - //接收设置 - $this->Mail->setFrom($from, '发送方:SvnAdmin'); //发件人 - $this->Mail->addAddress($to); //收件人 名字可选 可添加多个收件人 - $this->Mail->addReplyTo($from, '发送方:SvnAdmin'); //回复的时候回复给哪个邮箱 名字可选 建议和发件人一致 - // $this->Mail->addCC('cc@example.com'); //抄送 - // $this->Mail->addBCC('bcc@example.com'); //密送 - //发送附件 - // $this->Mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments - // $this->Mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name - //内容设置 - $this->Mail->isHTML(false); // 是否以HTML文档格式发送 发送后客户端可直接显示对应HTML内容 - $this->Mail->Subject = $send_title; - $this->Mail->Body = $send_content; - // $this->Mail->AltBody = '如果邮件客户端不支持HTML则显示此内容'; - $this->Mail->send(); - } catch (Exception $e) { - // echo "邮件发送失败: {$mail->ErrorInfo}"; - } - } - - //发送测试邮件 - function SendTestMail($requestPayload) - { - $host = trim($requestPayload['host']); - $port = trim($requestPayload['port']); - $username = trim($requestPayload['username']); - $password = trim($requestPayload['password']); - $from = trim($requestPayload['from']); - $to = trim($requestPayload['to']); - - if (empty($host) || empty($port) || empty($username) || empty($password) || empty($from) || empty($to)) { - $data['status'] = 0; - $data['message'] = '参数不完整'; - return $data; - } - - //设置选项 - try { - //服务器配置 - $this->Mail->SMTPDebug = SMTP::DEBUG_OFF; // 关闭debug模式 - $this->Mail->isSMTP(); // 使用 SMTP - $this->Mail->Host = $host; // SMTP服务器 - $this->Mail->SMTPAuth = true; // 允许 SMTP 认证 - $this->Mail->Username = $username; // SMTP 用户名 - $this->Mail->Password = $password; // SMTP 密码 - $this->Mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // 允许tls协议 - $this->Mail->Port = $port; // TCP 端口 - //接收设置 - $this->Mail->setFrom($from, '发送方:SvnAdmin'); //发件人 - $this->Mail->addAddress($to); //收件人 名字可选 可添加多个收件人 - $this->Mail->addReplyTo($from, '发送方:SvnAdmin'); //回复的时候回复给哪个邮箱 名字可选 建议和发件人一致 - // $this->Mail->addCC('cc@example.com'); //抄送 - // $this->Mail->addBCC('bcc@example.com'); //密送 - //发送附件 - // $this->Mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments - // $this->Mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name - //内容设置 - $this->Mail->isHTML(false); // 是否以HTML文档格式发送 发送后客户端可直接显示对应HTML内容 - $this->Mail->Subject = 'Svn Admin系统测试邮件'; - $this->Mail->Body = '尊敬的用户,您好!此邮件为Svn Admin系统的测试邮件,当您收到此邮件,代表您的邮件服务器已经配置正确。'; - // $this->Mail->AltBody = '如果邮件客户端不支持HTML则显示此内容'; - $this->Mail->send(); - $data['status'] = 1; - $data['message'] = '成功'; - return $data; - } catch (Exception $e) { - $data['status'] = 0; - $data['message'] = '发送失败 ' . $this->Mail->ErrorInfo; - return $data; - } - } - - //保存邮件设置 - function SetMailInfo($requestPayload) - { - $this->Config->Update('mail_host', trim($requestPayload['host'])); - $this->Config->Update('mail_port', trim($requestPayload['port'])); - $this->Config->Update('mail_user', trim($requestPayload['username'])); - $this->Config->Update('mail_password', trim($requestPayload['password'])); - $this->Config->Update('send_mail', trim($requestPayload['from'])); - - $data['status'] = 1; - $data['message'] = '成功'; - return $data; - } - - //获取邮件配置 - function GetMailInfo($requestPayload) - { - $data = array( - "protocol_type" => mail_protocol_type, - "smtp_host" => mail_host, - "smtp_port" => (int) mail_port, - "mail_ssl_port" => (int) mail_ssl_port, - "smtp_user" => mail_user, - "smtp_password" => mail_password, - "smtp_send_email" => send_mail, - "single_mail_status" => (int) single_mail_status, - "add_time" => "", - "ps" => "" - ); - $data['status'] = 1; - $data['data'] = $data; - $data['message'] = '成功'; - return $data; } } diff --git a/02.php/app/controller/personal.class.php b/02.php/app/controller/personal.class.php new file mode 100644 index 0000000..875b3e5 --- /dev/null +++ b/02.php/app/controller/personal.class.php @@ -0,0 +1,115 @@ +requestPayload['userName'] != $this->requestPayload['confirm']) { + FunMessageExit(200, 0, '输入不一致'); + } + + if (trim($this->requestPayload['userName']) == '') { + FunMessageExit(200, 0, '用户名不合法'); + } + + $info = $this->database->get('admin_users', [ + 'admin_user_name' + ], [ + 'admin_user_name' => $this->requestPayload['userName'] + ]); + if ($info != null) { + FunMessageExit(200, 0, '与已有用户冲突'); + } + + $this->database->update('admin_users', [ + 'admin_user_name' => $this->requestPayload['userName'] + ], [ + 'admin_user_name' => $this->globalUserName + ]); + + FunMessageExit(); + } + + /** + * 管理人员修改自己的密码 + */ + function EditAdminUserPass() + { + if ($this->requestPayload['password'] != $this->requestPayload['confirm']) { + FunMessageExit(200, 0, '输入不一致'); + } + + if (trim($this->requestPayload['password']) == '') { + FunMessageExit(200, 0, '密码不合法'); + } + + $this->database->update('admin_users', [ + 'admin_user_pass' => $this->requestPayload['password'] + ], [ + 'admin_user_name' => $this->globalUserName + ]); + + FunMessageExit(); + } + + /** + * SVN用户修改自己的密码 + */ + function EditSvnUserPass() + { + if ($this->requestPayload['newPassword'] != $this->requestPayload['confirm']) { + FunMessageExit(200, 0, '输入不一致'); + } + + //获取SVN指定用户的密码 + $result = FunGetPassByUser($this->globalPasswdContent, $this->globalUserName); + if ($result == '0') { + FunMessageExit(200, 0, '文件格式错误(不存在[users]标识)'); + } + if ($result == '1') { + FunMessageExit(200, 0, '用户不存在'); + } + + if (trim($this->requestPayload['newPassword']) == '') { + FunMessageExit(200, 0, '密码不合法'); + } + + if ($result != $this->requestPayload['oldPassword']) { + FunMessageExit(200, 0, '旧密码输入错误'); + } + + //修改SVN指定用户的密码 + $result = FunUpdSvnUserPass($this->globalPasswdContent, $this->globalUserName, $this->requestPayload['newPassword']); + if ($result == '0') { + FunMessageExit(200, 0, '文件格式错误(不存在[users]标识)'); + } + if ($result == '1') { + FunMessageExit(200, 0, '用户不存在'); + } + + FunShellExec('echo \'' . $result . '\' > ' . SVN_PASSWD_FILE); + + $this->database->update('svn_users', [ + 'svn_user_pass' => $this->requestPayload['newPassword'] + ], [ + 'svn_user_name' => $this->globalUserName + ]); + + FunMessageExit(); + } +} diff --git a/02.php/app/controller/safe.class.php b/02.php/app/controller/safe.class.php new file mode 100644 index 0000000..6d653ca --- /dev/null +++ b/02.php/app/controller/safe.class.php @@ -0,0 +1,16 @@ + 100) { + $percent = 100; + } + + /** + * ----------负载计算结束---------- + */ + $data['load'] = [ + 'cpuLoad15Min' => $cpuLoad15Min, + 'cpuLoad5Min' => $cpuLoad5Min, + 'cpuLoad1Min' => $cpuLoad1Min, + 'percent' => $percent, + 'color' => FunGetColor($percent)['color'], + 'title' => FunGetColor($percent)['title'] + ]; + + /** + * ----------cpu计算开始---------- + */ + /** + * cpu使用率 + * + * %Cpu(s): 0.0 us, 3.2 sy, 0.0 ni, 96.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st + * + * us user CPU time 用户空间占用CPU百分比 + * sy system CPU time 内核空间占用CPU百分比 + * ni nice CPU 用户进程空间内改变过优先级的进程占用CPU百分比 + * id idle 空闲CPU百分比 + * wa iowait 等待输入输出的CPU时间百分比 + * hi hardware 硬件中断 + * si software 软件中断 + * st steal 实时 + */ + $topResult = FunShellExec('top -b -n 1 | grep Cpu'); + preg_match('/ni,(.*?)id/', $topResult, $matches); + $id = 100 - (float)trim($matches[1]); + + //cpu型号 + $cpuModelArray = []; + $cpuModelName = FunShellExec("cat /proc/cpuinfo | grep 'model name' | uniq"); + $explodeArray = explode("\n", trim($cpuModelName)); + foreach ($explodeArray as $value) { + if (trim($value) != '') { + $tempArray = explode(':', $value); + array_push($cpuModelArray, trim($tempArray[1])); + } + } + + //物理cpu个数 + $cpuPhysical = FunShellExec("cat /proc/cpuinfo | grep 'physical id' | sort -u | wc -l"); + $cpuPhysical = (int)trim($cpuPhysical); + + //每个物理cpu的物理核心数 + $cpuPhysicalCore = FunShellExec("cat /proc/cpuinfo | grep 'cpu cores' | wc -l"); + $cpuPhysicalCore = (int)trim($cpuPhysicalCore); + + //总物理核心数 = 物理cpu个数 * 每个物理cpu的物理核心数(每个物理cpu的物理核心数都一样吗?) + $cpuCore = $cpuPhysical * $cpuPhysicalCore; + + //逻辑核心总数(线程总数) + $cpuProcessor = FunShellExec("cat /proc/cpuinfo | grep 'processor' | wc -l"); + $cpuProcessor = (int)trim($cpuProcessor); + + /** + * ----------cpu计算结束---------- + */ + $data['cpu'] = [ + 'percent' => $id, + 'cpu' => $cpuModelArray, + 'cpuPhysical' => $cpuPhysical, + 'cpuPhysicalCore' => $cpuPhysicalCore, + 'cpuCore' => $cpuCore, + 'cpuProcessor' => $cpuProcessor, + 'color' => FunGetColor($id)['color'] + ]; + + /** + * ----------内存计算开始---------- + */ + /** + * MemTotal 总内存 + * MemFree 空闲内存 + * MemAvailable 可用内存(MemFree + 可回收的内存),系统中有些内存虽然已被使用但是可以回收,比如cache、buffer、slab都有一部分可以回收 + */ + //物理内存总量 + $memTotal = FunShellExec("cat /proc/meminfo | grep 'MemTotal' | awk '{print $2}'"); + $memTotal = (int)trim($memTotal); + + //操作系统可用内存总量(没有使用空闲内存) + $memFree = FunShellExec("cat /proc/meminfo | grep 'MemAvailable' | awk '{print $2}'"); + $memFree = (int)trim($memFree); + + //操作系统已使用内存总量 + $memUsed = $memTotal - $memFree; + + //内存使用率 + $percent = round($memUsed / $memTotal * 100); + + /** + * ----------内存计算结束---------- + */ + $data['mem'] = [ + 'memTotal' => round($memTotal / 1024), + 'memUsed' => round($memUsed / 1024), + 'memFree' => round($memFree / 1024), + 'percent' => $percent, + 'color' => FunGetColor($percent)['color'] + ]; + + FunMessageExit(200, 1, '成功', $data); + } + + /** + * 获取硬盘 + * + * 获取硬盘数量和每个硬盘的详细信息 + */ + function GetDisk() + { + $rs = FunShellExec('df -lh | grep -E "^(/)"'); + + //将多个连续的空格换为一个 + $result = preg_replace("/\s{2,}/", ' ', $rs); + + //多个硬盘 + $diskArray = explode("\n", $result); + + $data = []; + + //处理 + foreach ($diskArray as $value) { + if (trim($value) != '') { + $diskInfo = explode(" ", $value); + array_push($data, [ + 'fileSystem' => $diskInfo[0], + 'size' => $diskInfo[1], + 'used' => $diskInfo[2], + 'avail' => $diskInfo[3], + 'percent' => (int)str_replace('%', '', $diskInfo[4]), + 'mountedOn' => $diskInfo[5], + 'color' => FunGetColor((int)str_replace('%', '', $diskInfo[4]))['color'] + ]); + } + } + + FunMessageExit(200, 1, '成功', $data); + } + + /** + * 获取统计 + * + * 操作系统类型 + * 仓库占用体积 + * SVN仓库数量 + * SVN用户数量 + * SVN分组数量 + * 计划任务数量 + * 运行日志数量 + */ + function GetSystemAnalysis() + { + //操作系统类型和版本 + $os = FunShellExec("cat /etc/redhat-release"); + + //仓库占用体积 + $repSize = FunFormatSize(FunGetDirSizeDu(SVN_REPOSITORY_PATH)); + + //SVN仓库数量 + $repCount = count(FunGetSimpleRepList()); + + //SVN用户数量 + $userCount = count(FunGetSvnUserList(SVN_PASSWD_FILE)); + + //SVN分组数量 + $groupCount = count(FunGetSvnGroupList(SVN_AUTHZ_FILE)); + + //运行日志数量 + $logCount = $this->database->count('logs', ['log_id[>]' => 0]); + + FunMessageExit(200, 1, '成功', [ + 'os' => trim($os), + 'repSize' => $repSize, + 'repCount' => $repCount, + 'repUser' => $userCount, + 'repGroup' => $groupCount, + 'logCount' => $logCount + ]); + } +} diff --git a/02.php/app/controller/subversion.class.php b/02.php/app/controller/subversion.class.php new file mode 100644 index 0000000..45aeda5 --- /dev/null +++ b/02.php/app/controller/subversion.class.php @@ -0,0 +1,196 @@ + 'svn://', + 'prefix' => $checkoutHost + ]); + } + + /** + * 获取Subversion的详细信息 + */ + function GetDetail() + { + //获取绑定主机、端口等信息 + $bindInfo = FunGetSubversionListen(); + + //检测运行信息 + $runInfo = FunShellExec('ps auxf|grep -v "grep"|grep svnserve'); + + //检测安装信息 + $installInfo = file_exists('/usr/bin/svnserve'); + + //检测安装状态 + //未知状态 + $installInfo = -1; + if ($runInfo == ISNULL && !$installInfo) { + //未安装 + $installed = 0; + } else if ($runInfo == ISNULL && $installInfo) { + //安装未启动 + $installed = 1; + } else if ($runInfo != ISNULL && $installInfo) { + //运行中 + $installed = 2; + } + + //检测subversion版本 + $version = '-'; + if ($installed != 0) { + $versionInfo = FunShellExec('svnserve --version'); + preg_match_all(REG_SUBVERSION_VERSION, $versionInfo, $versionInfoPreg); + if (array_key_exists(0, $versionInfoPreg[0])) { + $version = trim($versionInfoPreg[1][0]); + } else { + $version = '-'; + } + } + + FunMessageExit(200, 1, '成功', [ + 'version' => $version, + 'installed' => $installed, + 'bindPort' => $bindInfo['bindPort'], + 'bindHost' => $bindInfo['bindHost'], + 'manageHost' => $bindInfo['manageHost'], + 'enable' => $bindInfo[$bindInfo['enable']], + 'svnserveLog' => SVNSERVE_LOG_FILE + ]); + } + + /** + * 安装SVN + */ + function Install() + { + } + + /** + * 卸载SVN + */ + function UnInstall() + { + } + + /** + * 启动SVN + */ + function Start() + { + } + + /** + * 停止SVN + */ + function Stop() + { + } + + /** + * 修改svnserve的绑定端口 + */ + function EditPort() + { + } + + /** + * 修改svnserve的绑定主机 + */ + function EditHost() + { + } + + /** + * 修改管理系统主机名 + */ + function EditManageHost() + { + } + + /** + * 修改检出地址 + */ + function EditEnable() + { + } + + /** + * 查看svnserve运行日志 + */ + function ViewSvnserveLog() + { + } + + /** + * 获取配置文件列表 + */ + function GetConfig() + { + FunMessageExit(200, 1, '成功', [ + [ + 'key' => 'SVN仓库父目录', + 'value' => SVN_REPOSITORY_PATH + ], + [ + 'key' => 'svnserve环境变量文件', + 'value' => SVNSERVE_ENV_FILE + ], + [ + 'key' => 'SVN仓库权限配置文件', + 'value' => SVN_CONF_FILE + ], + [ + 'key' => 'authz文件', + 'value' => SVN_AUTHZ_FILE + ], + [ + 'key' => 'passwd文件', + 'value' => SVN_PASSWD_FILE + ], + [ + 'key' => '备份文件夹', + 'value' => SVN_BACHUP_PATH + ], + ]); + } +} diff --git a/02.php/app/controller/svnadmin.class.php b/02.php/app/controller/svnadmin.class.php new file mode 100644 index 0000000..257ad1f --- /dev/null +++ b/02.php/app/controller/svnadmin.class.php @@ -0,0 +1,16 @@ +globalAuthzContent); + + + + if ($svnAndGroupList == 0) { + FunMessageExit(200, 0, '文件格式错误(不存在[groups]标识)'); + } + + $svnGroupList = FunArrayColumn($svnAndGroupList, 'groupName'); + + $dbGroupPassList = $this->database->select('svn_groups', [ + 'svn_group_id', + 'svn_group_name', + 'svn_group_note', + 'include_user_count', + 'include_group_count' + ]); + + $combinArray = array_combine(FunArrayColumn($svnAndGroupList, 'groupName'), FunArrayColumn($svnAndGroupList, 'include')); + + // FunMessageExit(200,0,'调试',$combinArray); + + foreach ($dbGroupPassList as $key => $value) { + if (!in_array($value['svn_group_name'], $svnGroupList)) { + $this->database->delete('svn_groups', [ + 'svn_group_name' => $value['svn_group_name'] + ]); + } else { + //更新数量 + $this->database->update('svn_groups', [ + 'include_user_count' => count($combinArray[$value['svn_group_name']]['users']), + 'include_group_count' => count($combinArray[$value['svn_group_name']]['groups']), + ], [ + 'svn_group_name' => $value['svn_group_name'] + ]); + } + } + + foreach ($svnGroupList as $key => $value) { + if (!in_array($value, FunArrayColumn($dbGroupPassList, 'svn_group_name'))) { + $this->database->insert('svn_groups', [ + 'svn_group_name' => $value, + 'include_user_count' => count($svnAndGroupList[$key]['include']['users']), + 'include_group_count' => count($svnAndGroupList[$key]['include']['groups']), + 'svn_group_note' => '', + ]); + } + } + } + + /** + * 获取所有的分组列表 + */ + function GetAllGroupList() + { + $svnGroupList = FunGetSvnGroupList($this->globalAuthzContent); + if ($svnGroupList == '0') { + FunMessageExit(200, 0, '文件格式错误(不存在[groups]标识)'); + } else { + $newArray = []; + foreach ($svnGroupList as $key => $value) { + array_push($newArray, [ + 'groupName' => $value + ]); + } + FunMessageExit(200, 1, '成功', $newArray); + } + } + + /** + * 获取带有分页的分组列表 + */ + function GetGroupList() + { + //同步 + $this->SyncGroupToDb(); + + $pageSize = $this->requestPayload['pageSize']; + $currentPage = $this->requestPayload['currentPage']; + $searchKeyword = trim($this->requestPayload['searchKeyword']); + + //分页 + $begin = $pageSize * ($currentPage - 1); + + $list = $this->database->select('svn_groups', [ + 'svn_group_id', + 'svn_group_name', + 'svn_group_note', + 'include_user_count', + 'include_group_count' + ], [ + 'AND' => [ + 'OR' => [ + 'svn_group_name[~]' => $searchKeyword, + 'svn_group_note[~]' => $searchKeyword, + ], + ], + 'LIMIT' => [$begin, $pageSize], + 'ORDER' => [ + $this->requestPayload['sortName'] => strtoupper($this->requestPayload['sortType']) + ] + ]); + + $total = $this->database->count('svn_groups', [ + 'svn_group_id' + ], [ + 'AND' => [ + 'OR' => [ + 'svn_group_name[~]' => $searchKeyword, + 'svn_group_note[~]' => $searchKeyword, + ], + ], + ]); + + FunMessageExit(200, 1, '成功', [ + 'data' => $list, + 'total' => $total + ]); + } + + /** + * 编辑分组备注信息 + */ + function EditGroupNote() + { + $this->database->update('svn_groups', [ + 'svn_group_note' => $this->requestPayload['svn_group_note'] + ], [ + 'svn_group_name' => $this->requestPayload['svn_group_name'] + ]); + + FunMessageExit(); + } + + /** + * 新建SVN分组 + */ + function CreateGroup() + { + //检查分组名是否合法 + FunCheckRepGroup($this->requestPayload['svn_group_name']); + + //检查用户是否已存在 + $result = FunAddSvnGroup($this->globalAuthzContent, $this->requestPayload['svn_group_name']); + if ($result == '0') { + FunMessageExit(200, 0, '文件格式错误(不存在[groups]标识)'); + } + if ($result == '1') { + FunMessageExit(200, 0, '分组已存在'); + } + + //写入配置文件 + FunShellExec('echo \'' . $result . '\' > ' . SVN_AUTHZ_FILE); + + //写入数据库 + $this->database->insert('svn_groups', [ + 'svn_group_name' => $this->requestPayload['svn_group_name'], + 'include_user_count' => 0, + 'include_group_count' => 0, + 'svn_group_note' => '' + ]); + + FunMessageExit(); + } + + /** + * 删除SVN分组 + */ + function DelGroup() + { + //从authz文件删除 + $result = FunDelSvnGroup($this->globalAuthzContent, $this->requestPayload['svn_group_name']); + + if ($result == '0') { + FunMessageExit(200, 0, '文件格式错误(不存在[groups]标识)'); + } + if ($result == '1') { + FunMessageExit(200, 0, '分组不存在'); + } + + FunShellExec('echo \'' . $result . '\' > ' . SVN_AUTHZ_FILE); + + //从数据库删除 + $this->database->delete('svn_groups', [ + 'svn_group_name' => $this->requestPayload['svn_group_name'] + ]); + + FunMessageExit(); + } + + /** + * 修改SVN分组的名称 + */ + function EditGroupName() + { + //新分组名称是否合法 + FunCheckRepGroup($this->requestPayload['groupNameNew']); + + $svnGroupList = FunGetSvnGroupList($this->globalAuthzContent); + + //旧分组是否存在 + if (!in_array($this->requestPayload['groupNameOld'], $svnGroupList)) { + FunMessageExit(200, 0, '当前分组不存在'); + } + + //新分组名称是否冲突 + if (in_array($this->requestPayload['groupNameNew'], $svnGroupList)) { + FunMessageExit(200, 0, '要修改的分组名称已经存在'); + } + + $result = FunUpdSvnGroup($this->globalAuthzContent, $this->requestPayload['groupNameOld'], $this->requestPayload['groupNameNew']); + if ($result == '0') { + FunMessageExit(200, 0, '文件格式错误(不存在[groups]标识)'); + } + + FunShellExec('echo \'' . $result . '\' > ' . SVN_AUTHZ_FILE); + + FunMessageExit(); + } + + /** + * 获取SVN分组的用户成员和分组成员 + */ + function GetGroupMember() + { + $memberUserList = FunGetSvnUserListByGroup($this->globalAuthzContent, $this->requestPayload['svn_group_name']); + + $memberGroupList = FunGetSvnGroupListByGroup($this->globalAuthzContent, $this->requestPayload['svn_group_name']); + + $allGroupList = FunGetSvnGroupList($this->globalAuthzContent); + + $allUserList = FunGetSvnUserList($this->globalPasswdContent); + + if ($memberUserList == '0' || $memberGroupList == '0' || $allGroupList == '0' || $allUserList == '0') { + FunMessageExit(200, 0, '文件格式错误(不存在[groups]标识)'); + } + if ($memberUserList == '1' || $memberGroupList == '1' || $allUserList == '1') { + FunMessageExit(200, 0, '分组不存在'); + } + + $group1 = []; + foreach ($allGroupList as $key => $value) { + if (in_array($value, $memberGroupList)) { + array_push($group1, [ + 'groupName' => $value, + 'isMember' => true + ]); + } else { + array_push($group1, [ + 'groupName' => $value, + 'isMember' => false + ]); + } + } + + //排序 + array_multisort(FunArrayColumn($group1, 'isMember'), SORT_DESC, $group1); + + $group2 = []; + foreach ($allUserList as $key => $value) { + if (in_array($value['userName'], $memberUserList)) { + array_push($group2, [ + 'userName' => $value['userName'], + 'isMember' => true, + 'disabled' => $value['disabled'] + ]); + } else { + array_push($group2, [ + 'userName' => $value['userName'], + 'isMember' => false, + 'disabled' => $value['disabled'] + ]); + } + } + + //排序 + array_multisort(FunArrayColumn($group2, 'isMember'), SORT_DESC, $group2); + + FunMessageExit(200, 1, '成功', [ + 'userList' => $group2, + 'groupList' => $group1 + ]); + } + + /** + * 将用户添加为SVN分组的成员 + */ + function GroupAddUser() + { + $result = FunAddSvnGroupUser($this->globalAuthzContent, $this->requestPayload['svn_group_name'], $this->requestPayload['svn_user_name']); + if ($result == '0') { + FunMessageExit(200, 0, '文件格式错误(不存在[groups]标识)'); + } + if ($result == '1') { + FunMessageExit(200, 0, '分组不存在'); + } + if ($result == '2') { + FunMessageExit(200, 0, '要添加的用户已存在该分组'); + } + + FunShellExec('echo \'' . $result . '\' > ' . SVN_AUTHZ_FILE); + + FunMessageExit(); + } + + /** + * 将用户从SVN分组的成员移除 + */ + function GroupRemoveUser() + { + $result = FunDelSvnGroupUser($this->globalAuthzContent, $this->requestPayload['svn_group_name'], $this->requestPayload['svn_user_name']); + if ($result == '0') { + FunMessageExit(200, 0, '文件格式错误(不存在[groups]标识)'); + } + if ($result == '1') { + FunMessageExit(200, 0, '分组不存在'); + } + if ($result == '2') { + FunMessageExit(200, 0, '要删除的用户不在该分组'); + } + + FunShellExec('echo \'' . $result . '\' > ' . SVN_AUTHZ_FILE); + + FunMessageExit(); + } + + /** + * 将分组添加为SVN分组的成员 + */ + function GroupAddGroup() + { + $result = FunAddSvnGroupGroup($this->globalAuthzContent, $this->requestPayload['svn_group_name'], $this->requestPayload['svn_group_name_add']); + if ($result == '0') { + FunMessageExit(200, 0, '文件格式错误(不存在[groups]标识)'); + } + if ($result == '1') { + FunMessageExit(200, 0, '分组不存在'); + } + if ($result == '2') { + FunMessageExit(200, 0, '要添加的分组已存在该分组'); + } + if ($result == '3') { + FunMessageExit(200, 0, '不能添加本身'); + } + + //检查是否存在分组循环嵌套问题 + //获取分组所在的所有分组 + $groupGroupList = $this->GetSvnGroupAllGroupList($this->requestPayload['svn_group_name']); + + if (in_array($this->requestPayload['svn_group_name_add'], $groupGroupList)) { + FunMessageExit(200, 0, '存在分组循环嵌套的情况'); + } + + FunShellExec('echo \'' . $result . '\' > ' . SVN_AUTHZ_FILE); + + FunMessageExit(); + } + + /** + * 将分组从SVN分组的成员移除 + */ + function GroupRemoveGroup() + { + $result = FunDelSvnGroupGroup($this->globalAuthzContent, $this->requestPayload['svn_group_name'], $this->requestPayload['svn_group_name_del']); + if ($result == '0') { + FunMessageExit(200, 0, '文件格式错误(不存在[groups]标识)'); + } + if ($result == '1') { + FunMessageExit(200, 0, '分组不存在'); + } + if ($result == '2') { + FunMessageExit(200, 0, '要删除的分组不在该分组'); + } + + FunShellExec('echo \'' . $result . '\' > ' . SVN_AUTHZ_FILE); + + FunMessageExit(); + } + + /** + * 获取用户所在的所有分组 + * + * 包括直接包含关系 如 + * group1=user1 + * + * 和间接包含关系 如 + * group1=user1 + * group2=@group1 + * group3=@group2 + * group4=@group3 + */ + function GetSvnUserAllGroupList($userName) + { + $authzContent = $this->globalAuthzContent; + + //所有的分组列表 + $allGroupList = FunGetSvnGroupList($authzContent); + + //用户所在的分组列表 + $userGroupList = FunGetSvnUserGroupList($authzContent, $userName); + + //剩余的分组列表 + $leftGroupList = array_diff($allGroupList, $userGroupList); + + //循环匹配 直到匹配到与该用户相关的有权限的用户组为止 + loop: + $userGroupListBack = $userGroupList; + foreach ($userGroupList as $group1) { + $newList = FunGetSvnGroupGroupList($authzContent, $group1); + foreach ($leftGroupList as $group2) { + if (in_array($group2, $newList)) { + array_push($userGroupList, $group2); + unset($leftGroupList[array_search($group2, $leftGroupList)]); + } + } + } + if ($userGroupList != $userGroupListBack) { + goto loop; + } + + return $userGroupList; + } + + /** + * 获取分组所在的所有分组 + * + * 包括直接包含关系 如 + * group2=@group1 + * + * 和间接包含关系 如 + * group2=@group1 + * group3=@group2 + * group4=@group3 + */ + function GetSvnGroupAllGroupList($groupName) + { + $parentGroupName = $groupName; + + $authzContent = $this->globalAuthzContent; + + //所有的分组列表 + $allGroupList = FunGetSvnGroupList($authzContent); + + //分组所在的分组列表 + $groupGroupList = FunGetSvnGroupGroupList($authzContent, $parentGroupName); + + //剩余的分组列表 + $leftGroupList = array_diff($allGroupList, $groupGroupList); + + //循环匹配 + loop: + $userGroupListBack = $groupGroupList; + foreach ($groupGroupList as $group1) { + $newList = FunGetSvnGroupGroupList($authzContent, $group1); + foreach ($leftGroupList as $group2) { + if (in_array($group2, $newList)) { + array_push($groupGroupList, $group2); + unset($leftGroupList[array_search($group2, $leftGroupList)]); + } + } + } + if ($groupGroupList != $userGroupListBack) { + goto loop; + } + + return $groupGroupList; + } +} diff --git a/02.php/app/controller/svnrep.class.php b/02.php/app/controller/svnrep.class.php new file mode 100644 index 0000000..b4c2505 --- /dev/null +++ b/02.php/app/controller/svnrep.class.php @@ -0,0 +1,1119 @@ +Svngorup = new svngroup(); + } + + /** + * 新建仓库 + */ + function CreateRep() + { + //检查表单 + FunCheckForm($this->requestPayload, [ + 'rep_name' => ['type' => 'string', 'notNull' => true], + 'rep_note' => ['type' => 'string', 'notNull' => false], + 'rep_type' => ['type' => 'string', 'notNull' => true], + ]); + + //检查仓库名是否合法 + FunCheckRepName($this->requestPayload['rep_name']); + + //检查仓库是否存在 + FunCheckRepExist($this->requestPayload['rep_name']); + + //创建空仓库 + //解决创建中文仓库乱码问题 + FunShellExec('export LC_CTYPE=en_US.UTF-8 && svnadmin create ' . SVN_REPOSITORY_PATH . $this->requestPayload['rep_name']); + + if ($this->requestPayload['rep_type'] == '2') { + //以指定的目录结构初始化仓库 + FunInitRepStruct($this->requestPayload['rep_name']); + } + + //检查是否创建成功 + FunCheckRepCreate($this->requestPayload['rep_name']); + + //向authz写入仓库信息 + $status = FunSetRepAuthz($this->globalAuthzContent, $this->requestPayload['rep_name'], '/'); + if ($status != '1') { + FunShellExec('echo \'' . $status . '\' > ' . SVN_AUTHZ_FILE); + } + + //写入数据库 + $this->database->insert('svn_reps', [ + 'rep_name' => $this->requestPayload['rep_name'], + 'rep_size' => 0, + 'rep_note' => $this->requestPayload['rep_note'], + 'rep_rev' => 0, + 'rep_uuid' => 0 + ]); + + FunMessageExit(); + } + + /** + * 物理仓库 => svn_reps数据表 + * + * 1、将物理仓库存在而没有写入数据库的记录写入数据库 + * 2、将物理仓库已经删除但是数据库依然存在的从数据库删除 + */ + function SyncRepAndDb() + { + $svnRepList = FunGetSimpleRepList(); + + $dbRepList = $this->database->select('svn_reps', [ + 'rep_name', + ]); + + foreach ($dbRepList as $value) { + if (!in_array($value['rep_name'], $svnRepList)) { + $this->database->delete('svn_reps', [ + 'rep_name' => $value['rep_name'] + ]); + } else { + //更新 + $this->database->update('svn_reps', [ + 'rep_size' => FunGetDirSizeDu(SVN_REPOSITORY_PATH . $value['rep_name']), + 'rep_rev' => FunGetRepRev($value['rep_name']) + ], [ + 'rep_name' => $value['rep_name'] + ]); + } + } + + foreach ($svnRepList as $value) { + if (!in_array($value, FunArrayColumn($dbRepList, 'rep_name'))) { + $this->database->insert('svn_reps', [ + 'rep_name' => $value, + 'rep_size' => FunGetDirSizeDu(SVN_REPOSITORY_PATH . $value), + 'rep_note' => '', + 'rep_rev' => FunGetRepRev($value), + 'rep_uuid' => '' + ]); + } + } + } + + /** + * 物理仓库 => authz文件 + * + * 1、将物理仓库已经删除但是authz文件中依然存在的从authz文件删除 + * 2、将在物理仓库存在但是authz文件中不存在的向authz文件写入 + */ + function SyncRepAndAuthz() + { + $svnRepList = FunGetSimpleRepList(); + + $svnRepAuthzList = FunGetNoPathAndConRepAuthz($this->globalAuthzContent); + + $authzContet = $this->globalAuthzContent; + + foreach ($svnRepList as $key => $value) { + if (!in_array($value, $svnRepAuthzList)) { + $authzContet = FunSetRepAuthz($authzContet, $value, '/'); + if ($authzContet == '1') { + FunMessageExit(200, 0, '同步到配置文件错误'); + } + } + } + + foreach ($svnRepAuthzList as $key => $value) { + if (!in_array($value, $svnRepList)) { + $authzContet = FunDelRepAuthz($authzContet, $value); + if ($authzContet == '1') { + FunMessageExit(200, 0, '同步到配置文件错误'); + } + } + } + + FunShellExec('echo \'' . $authzContet . '\' > ' . SVN_AUTHZ_FILE); + } + + /** + * 用户有权限的仓库路径列表 => svn_user_pri_paths数据表 + * + * 1、列表中存在的但是数据表不存在则向数据表插入 + * 2、列表中不存在的但是数据表存在从数据表删除 + */ + function SyncUserRepAndDb() + { + //获取在authz文件配置的用户有权限的仓库路径列表 + $userRepList = []; + + //获取用户有权限的仓库列表 + $userRepList = array_merge($userRepList, FunGetUserPriRepListWithPriAndPath($this->globalAuthzContent, $this->globalUserName)); + + //获取用户所在的所有分组 + $userGroupList = $this->Svngorup->GetSvnUserAllGroupList($this->globalUserName); + + //获取分组有权限的仓库路径列表 + foreach ($userGroupList as $value) { + $userRepList = array_merge($userRepList, FunGetGroupPriRepListWithPriAndPath($this->globalAuthzContent, $value)); + } + + //按照全路径去重 + $tempArray = []; + foreach ($userRepList as $key => $value) { + if (in_array($value['unique'], $tempArray)) { + unset($userRepList[$key]); + } else { + array_push($tempArray, $value['unique']); + } + } + + //处理不连续的下标 + $userRepList = array_values($userRepList); + + //从数据库中删除该用户的所有权限 + $this->database->delete('svn_user_pri_paths', [ + 'svn_user_name' => $this->globalUserName + ]); + + //处理数据格式为适合插入数据表的格式 + foreach ($userRepList as $key => $value) { + $userRepList[$key]['rep_name'] = $value['repName']; + unset($userRepList[$key]['repName']); + + $userRepList[$key]['pri_path'] = $value['priPath']; + unset($userRepList[$key]['priPath']); + + $userRepList[$key]['rep_pri'] = $value['repPri']; + unset($userRepList[$key]['repPri']); + + $userRepList[$key]['svn_user_name'] = $this->globalUserName; + } + + //向数据库插入该用户的所有权限 + $this->database->insert('svn_user_pri_paths', $userRepList); + } + + /** + * 获取仓库列表 + */ + function GetRepList() + { + /** + * 物理仓库 => authz文件 + * + * 1、将物理仓库已经删除但是authz文件中依然存在的从authz文件删除 + * 2、将在物理仓库存在但是authz文件中不存在的向authz文件写入 + */ + $this->SyncRepAndAuthz(); + + /** + * 物理仓库 => svn_reps数据表 + * + * 1、将物理仓库存在而没有写入数据库的记录写入数据库 + * 2、将物理仓库已经删除但是数据库依然存在的从数据库删除 + */ + $this->SyncRepAndDb(); + + $pageSize = $this->requestPayload['pageSize']; + $currentPage = $this->requestPayload['currentPage']; + $searchKeyword = trim($this->requestPayload['searchKeyword']); + + //分页 + $begin = $pageSize * ($currentPage - 1); + + $list = $this->database->select('svn_reps', [ + 'rep_id', + 'rep_name', + 'rep_size', + 'rep_note', + 'rep_rev', + 'rep_uuid' + ], [ + 'AND' => [ + 'OR' => [ + 'rep_name[~]' => $searchKeyword, + 'rep_note[~]' => $searchKeyword, + ], + ], + 'LIMIT' => [$begin, $pageSize], + 'ORDER' => [ + $this->requestPayload['sortName'] => strtoupper($this->requestPayload['sortType']) + ] + ]); + + $total = $this->database->count('svn_reps', [ + 'rep_id' + ], [ + 'AND' => [ + 'OR' => [ + 'rep_name[~]' => $searchKeyword, + 'rep_note[~]' => $searchKeyword, + ], + ], + ]); + + foreach ($list as $key => $value) { + $list[$key]['rep_size'] = FunFormatSize($value['rep_size']); + } + + FunMessageExit(200, 1, '成功', [ + 'data' => $list, + 'total' => $total + ]); + } + + /** + * SVN用户获取自己有权限的仓库列表 + */ + function GetSvnUserRepList() + { + /** + * 物理仓库 => authz文件 + * + * 1、将物理仓库已经删除但是authz文件中依然存在的从authz文件删除 + * 2、将在物理仓库存在但是authz文件中不存在的向authz文件写入 + */ + $this->SyncRepAndAuthz(); + + /** + * 用户有权限的仓库路径列表 => svn_user_pri_paths数据表 + * + * 1、列表中存在的但是数据表不存在则向数据表插入 + * 2、列表中不存在的但是数据表存在从数据表删除 + */ + $this->SyncUserRepAndDb(); + + $pageSize = $this->requestPayload['pageSize']; + $currentPage = $this->requestPayload['currentPage']; + $searchKeyword = trim($this->requestPayload['searchKeyword']); + + //分页 + $begin = $pageSize * ($currentPage - 1); + + $list = $this->database->select('svn_user_pri_paths', [ + 'svnn_user_pri_path_id', + 'rep_name', + 'pri_path', + 'rep_pri' + ], [ + 'AND' => [ + 'OR' => [ + 'rep_name[~]' => $searchKeyword, + ], + ], + 'LIMIT' => [$begin, $pageSize], + 'ORDER' => [ + 'rep_name' => strtoupper($this->requestPayload['sortType']) + ], + 'svn_user_name' => $this->globalUserName + ]); + + $total = $this->database->count('svn_user_pri_paths', [ + 'svnn_user_pri_path_id' + ], [ + 'AND' => [ + 'OR' => [ + 'rep_name[~]' => $searchKeyword, + ], + ], + ]); + + FunMessageExit(200, 1, '成功', [ + 'data' => $list, + 'total' => $total + ]); + } + + /** + * 修改仓库的备注信息 + */ + function EditRepNote() + { + $this->database->update('svn_reps', [ + 'rep_note' => $this->requestPayload['rep_note'] + ], [ + 'rep_name' => $this->requestPayload['rep_name'] + ]); + + FunMessageExit(); + } + + + /** + * 根据目录名称获取该目录下的文件和文件夹列表 + */ + function GetRepCon() + { + if ($this->globalUserRoleId == 2) { + //获取svn检出地址 + $bindInfo = FunGetSubversionListen(); + $checkoutHost = 'svn://'.$bindInfo['bindHost']; + if ($bindInfo['bindPort'] != '3690') { + $checkoutHost = 'svn://'.$bindInfo['bindHost'] . ':' . $bindInfo['bindPort']; + } + + //获取SVN用户密码 + $svnUserPass = FunGetPassByUser($this->globalPasswdContent, $this->globalUserName); + if ($svnUserPass == '0') { + FunMessageExit(200, 0, '文件格式错误(不存在[users]标识)'); + } else if ($svnUserPass == '1') { + FunMessageExit(200, 0, '用户不存在'); + } + + //检查权限 + if (!CheckSvnUserPathAutzh($checkoutHost, $this->requestPayload['rep_name'], $this->requestPayload['path'], $this->globalUserName, $svnUserPass)) { + FunMessageExit(200, 0, '无权限'); + } + } + /** + * 有权限的开始路径 + * + * 管理员为 / + * SVN用户为管理员设定的路径值 + */ + $path = $this->requestPayload['path']; + + //获取全路径的一层目录树 + $cmdSvnlookTree = sprintf("svnlook tree '%s' --full-paths --non-recursive '%s'", SVN_REPOSITORY_PATH . $this->requestPayload['rep_name'], $path); + $result = FunShellExec($cmdSvnlookTree); + $resultArray = explode("\n", trim($result)); + unset($resultArray[0]); + $resultArray = array_values($resultArray); + + $data = []; + foreach ($resultArray as $key => $value) { + //获取文件或者文件夹最年轻的版本号 + $lastRev = FunGetRepFileRev($this->requestPayload['rep_name'], $value); + + //获取文件或者文件夹最年轻的版本的作者 + $lastRevAuthor = FunGetRepFileAuthor($this->requestPayload['rep_name'], $lastRev); + + //同上 日期 + $lastRevDate = FunGetRepFileDate($this->requestPayload['rep_name'], $lastRev); + + //同上 日志 + $lastRevLog = FunGetRepFileLog($this->requestPayload['rep_name'], $lastRev); + + $pathArray = explode('/', $value); + $pathArray = array_values(array_filter($pathArray, 'FunArrayValueFilter')); + $pathArrayCount = count($pathArray); + if (substr($value, strlen($value) - 1, 1) == '/') { + array_push($data, [ + 'resourceType' => 2, + 'resourceName' => $pathArray[$pathArrayCount - 1], + 'fileSize' => '', + 'revAuthor' => $lastRevAuthor, + 'revNum' => 'r' . $lastRev, + 'revTime' => $lastRevDate, + 'revLog' => $lastRevLog, + 'fullPath' => $value + ]); + } else { + array_push($data, [ + 'resourceType' => 1, + 'resourceName' => $pathArray[$pathArrayCount - 1], + 'fileSize' => FunGetRepRevFileSize($this->requestPayload['rep_name'], $value), + 'revAuthor' => $lastRevAuthor, + 'revNum' => 'r' . $lastRev, + 'revTime' => $lastRevDate, + 'revLog' => $lastRevLog, + 'fullPath' => $value + ]); + } + } + + //处理面包屑 + if ($path == '/') { + $breadPathArray = ['/']; + $breadNameArray = [$this->requestPayload['rep_name']]; + } else { + $pathArray = explode('/', $path); + //将全路径处理为带有/的数组 + $tempArray = []; + array_push($tempArray, '/'); + for ($i = 0; $i < count($pathArray); $i++) { + if ($pathArray[$i] != '') { + array_push($tempArray, $pathArray[$i]); + array_push($tempArray, '/'); + } + } + //处理为递增的路径数组 + $breadPathArray = ['/']; + $breadNameArray = [$this->requestPayload['rep_name']]; + $tempPath = '/'; + for ($i = 1; $i < count($tempArray); $i += 2) { + $tempPath .= $tempArray[$i] . $tempArray[$i + 1]; + array_push($breadPathArray, $tempPath); + array_push($breadNameArray, $tempArray[$i]); + } + } + + FunMessageExit(200, 1, '', [ + 'data' => $data, + 'bread' => [ + 'path' => $breadPathArray, + 'name' => $breadNameArray + ] + ]); + } + + /** + * 根据目录名称获取该目录下的目录树 + * + * 管理员配置目录授权用 + */ + function GetRepTree() + { + $path = $this->requestPayload['path']; + + //获取全路径的一层目录树 + $cmdSvnlookTree = sprintf("svnlook tree '%s' --full-paths --non-recursive '%s'", SVN_REPOSITORY_PATH . $this->requestPayload['rep_name'], $path); + $result = FunShellExec($cmdSvnlookTree); + $resultArray = explode("\n", trim($result)); + unset($resultArray[0]); + $resultArray = array_values($resultArray); + + $data = []; + foreach ($resultArray as $value) { + $pathArray = explode('/', $value); + $pathArray = array_values(array_filter($pathArray, 'FunArrayValueFilter')); + $pathArrayCount = count($pathArray); + if (substr($value, strlen($value) - 1, 1) == '/') { + array_push($data, [ + 'expand' => false, + 'loading' => false, + 'resourceType' => 2, + 'title' => $pathArray[$pathArrayCount - 1] . '/', + 'fullPath' => $value, + 'children' => [] + ]); + } else { + array_push($data, [ + 'resourceType' => 1, + 'title' => $pathArray[$pathArrayCount - 1], + 'fullPath' => $value, + ]); + } + } + + //按照文件夹在前、文件在后的顺序进行字典排序 + array_multisort(FunArrayColumn($data, 'resourceType'), SORT_DESC, $data); + + if ($path == '/') { + FunMessageExit(200, 1, '', [ + [ + 'expand' => true, + 'loading' => false, + 'resourceType' => 2, + 'title' => $this->requestPayload['rep_name'] . '/', + 'fullPath' => '/', + 'children' => $data + ] + ]); + } else { + FunMessageExit(200, 1, '', $data); + } + } + + /** + * 获取某个仓库路径的用户权限列表 + */ + function GetRepPathUserPri() + { + $result = FunGetRepUserListWithPri($this->globalAuthzContent, $this->requestPayload['rep_name'], $this->requestPayload['path']); + if ($result == '0') { + //没有该路径的记录 + if ($this->requestPayload['path'] == '/') { + //不正常 没有写入仓库记录 + FunMessageExit(200, 0, '该仓库没有被写入配置文件!请刷新仓库列表以同步'); + } else { + //正常 无记录 + FunMessageExit(200, 1, '成功', []); + } + } else { + foreach ($result as $key => $value) { + $result[$key]['index'] = $key; + } + if ($value['userPri'] == '') { + $result[$key]['userPri'] = 'no'; + } + FunMessageExit(200, 1, '成功', $result); + } + } + + /** + * 获取某个仓库路径的分组权限列表 + */ + function GetRepPathGroupPri() + { + $result = FunGetRepGroupListWithPri($this->globalAuthzContent, $this->requestPayload['rep_name'], $this->requestPayload['path']); + if ($result == '0') { + //没有该路径的记录 + if ($this->requestPayload['path'] == '/') { + //不正常 没有写入仓库记录 + FunMessageExit(200, 0, '该仓库没有被写入配置文件!请刷新仓库列表以同步'); + } else { + //正常 无记录 + FunMessageExit(200, 1, '成功', []); + } + } else { + foreach ($result as $key => $value) { + $result[$key]['index'] = $key; + if ($value['groupPri'] == '') { + $result[$key]['groupPri'] = 'no'; + } + } + FunMessageExit(200, 1, '成功', $result); + } + } + + /** + * 增加某个仓库路径的用户权限 + */ + function AddRepPathUserPri() + { + $repName = $this->requestPayload['rep_name']; + $path = $this->requestPayload['path']; + $pri = $this->requestPayload['pri']; + $user = $this->requestPayload['user']; + + /** + * 这里要进行重复添加用户的判断操作 + * + * 如果不对用户重复添加进行限制 则会导致用户的权限被重设为rw + */ + //todo or no todo + + /** + * 包括为已有权限的用户修改权限 + * 包括为没有权限的用户增加权限 + */ + $result = FunSetRepUserPri($this->globalAuthzContent, $user, $pri, $repName, $path); + + //没有该仓库路径记录 + if ($result == '0') { + + //没有该仓库路径记录 则进行插入 + $result = FunSetRepAuthz($this->globalAuthzContent, $repName, $path); + + if ($result == '1') { + FunMessageExit(200, 1, '未知错误'); + } + + //重新添加权限 + $result = FunSetRepUserPri($result, $user, $pri, $repName, $path); + + if ($result == '0') { + FunMessageExit(200, 1, '未知错误'); + } + } + + //写入 + FunShellExec('echo \'' . $result . '\' > ' . SVN_AUTHZ_FILE); + + //返回 + FunMessageExit(); + } + + /** + * 删除某个仓库路径的用户权限 + */ + function DelRepPathUserPri() + { + $repName = $this->requestPayload['rep_name']; + $path = $this->requestPayload['path']; + $user = $this->requestPayload['user']; + + $result = FunDelRepUserPri($this->globalAuthzContent, $user, $repName, $path); + + if ($result == '0') { + FunMessageExit(200, 0, '不存在该仓库路径的记录'); + } else if ($result == '1') { + FunMessageExit(200, 0, '已被删除'); + } else { + //写入 + FunShellExec('echo \'' . $result . '\' > ' . SVN_AUTHZ_FILE); + + //返回 + FunMessageExit(); + } + } + + /** + * 修改某个仓库路径的用户权限 + */ + function EditRepPathUserPri() + { + $repName = $this->requestPayload['rep_name']; + $path = $this->requestPayload['path']; + $pri = $this->requestPayload['pri']; + $user = $this->requestPayload['user']; + + $result = FunUpdRepUserPri($this->globalAuthzContent, $user, $pri, $repName, $path); + + if ($result == '0') { + FunMessageExit(200, 0, '不存在该仓库路径的记录'); + } + + //写入 + FunShellExec('echo \'' . $result . '\' > ' . SVN_AUTHZ_FILE); + + //返回 + FunMessageExit(); + } + + /** + * 增加某个仓库路径的分组权限 + */ + function AddRepPathGroupPri() + { + $repName = $this->requestPayload['rep_name']; + $path = $this->requestPayload['path']; + $pri = $this->requestPayload['pri']; + $group = $this->requestPayload['group']; + + /** + * 这里要进行重复添加分组的判断操作 + * + * 如果不对分组重复添加进行限制 则会导致分组的权限被重设为rw + */ + //todo or no todo + + /** + * 包括为已有权限的分组修改权限 + * 包括为没有权限的分组增加权限 + */ + $result = FunSetRepGroupPri($this->globalAuthzContent, $group, $pri, $repName, $path); + + //没有该仓库路径记录 + if ($result == '0') { + + //没有该仓库路径记录 则进行插入 + $result = FunSetRepAuthz($this->globalAuthzContent, $repName, $path); + + if ($result == '1') { + FunMessageExit(200, 1, '未知错误'); + } + + //重新添加权限 + $result = FunSetRepGroupPri($result, $group, $pri, $repName, $path); + + if ($result == '0') { + FunMessageExit(200, 1, '未知错误'); + } + } + + //写入 + FunShellExec('echo \'' . $result . '\' > ' . SVN_AUTHZ_FILE); + + //返回 + FunMessageExit(); + } + + /** + * 删除某个仓库路径的分组权限 + */ + function DelRepPathGroupPri() + { + $repName = $this->requestPayload['rep_name']; + $path = $this->requestPayload['path']; + $group = $this->requestPayload['group']; + + $result = FunDelRepGroupPri($this->globalAuthzContent, $group, $repName, $path); + + if ($result == '0') { + FunMessageExit(200, 0, '不存在该仓库路径的记录'); + } else if ($result == '1') { + FunMessageExit(200, 0, '已被删除'); + } else { + //写入 + FunShellExec('echo \'' . $result . '\' > ' . SVN_AUTHZ_FILE); + + //返回 + FunMessageExit(); + } + } + + /** + * 修改某个仓库路径的分组权限 + */ + function EditRepPathGroupPri() + { + $repName = $this->requestPayload['rep_name']; + $path = $this->requestPayload['path']; + $pri = $this->requestPayload['pri']; + $group = $this->requestPayload['group']; + + $result = FunUpdRepGroupPri($this->globalAuthzContent, $group, $pri, $repName, $path); + + if ($result == '0') { + FunMessageExit(200, 0, '不存在该仓库路径的记录'); + } else if ($result == '1') { + FunMessageExit(200, 0, '该仓库下不存在该分组'); + } + + //写入 + FunShellExec('echo \'' . $result . '\' > ' . SVN_AUTHZ_FILE); + + //返回 + FunMessageExit(); + } + + /** + * 修改仓库名称 + */ + function EditRepName() + { + //检查新仓库名是否合法 + FunCheckRepName($this->requestPayload['new_rep_name']); + + //检查原仓库是否不存在 + FunCheckRepCreate($this->requestPayload['old_rep_name'], '要修改的仓库不存在'); + + //检查新仓库名是否存在 + FunCheckRepExist($this->requestPayload['new_rep_name'], '已经存在同名仓库'); + + //从仓库目录修改仓库名称 + FunShellExec('mv ' . SVN_REPOSITORY_PATH . $this->requestPayload['old_rep_name'] . ' ' . SVN_REPOSITORY_PATH . $this->requestPayload['new_rep_name']); + + //检查修改过的仓库名称是否存在 + FunCheckRepCreate($this->requestPayload['new_rep_name'], '修改仓库名称失败'); + + //从数据库修改仓库名称 + $this->database->update('svn_reps', [ + 'rep_name' => $this->requestPayload['new_rep_name'] + ], [ + 'rep_name' => $this->requestPayload['old_rep_name'] + ]); + + //从配置文件修改仓库名称 + FunUpdRepAuthz($this->globalAuthzContent, $this->requestPayload['old_rep_name'], $this->requestPayload['new_rep_name']); + + FunMessageExit(); + } + + /** + * 删除仓库 + */ + function DelRep() + { + //从配置文件删除指定仓库的所有路径 + $result = FunDelRepAuthz($this->globalAuthzContent, $this->requestPayload['rep_name']); + if ($result != '1') { + FunShellExec('echo \'' . $result . '\' > ' . SVN_AUTHZ_FILE); + } + + //从数据库中删除 + $this->database->delete('svn_reps', [ + 'rep_name' => $this->requestPayload['rep_name'] + ]); + + //从仓库目录删除仓库文件夹 + FunShellExec('cd ' . SVN_REPOSITORY_PATH . ' && rm -rf ./' . $this->requestPayload['rep_name']); + FunCheckRepDelete($this->requestPayload['rep_name']); + + //返回 + FunMessageExit(); + } + + /** + * 获取仓库的属性内容(key-vlaue的形式) + */ + function GetRepDetail() + { + $result = FunGetRepDetail($this->requestPayload['rep_name']); + $resultArray = explode("\n", $result); + + $newArray = []; + foreach ($resultArray as $key => $value) { + if (trim($value) != '') { + $tempArray = explode(':', $value); + if (count($tempArray) == 2) { + array_push($newArray, [ + 'repKey' => $tempArray[0], + 'repValue' => $tempArray[1], + ]); + } + } + } + FunMessageExit(200, 1, '成功', $newArray); + } + + /** + * 获取备份文件夹下的文件列表 + */ + function GetBackupList() + { + $result = FunGetDirFileList(SVN_BACHUP_PATH); + + FunMessageExit(200, 1, '成功', $result); + } + + /** + * 立即备份当前仓库 + */ + function RepDump() + { + FunRepDump($this->requestPayload['rep_name'], $this->requestPayload['rep_name'] . '_' . date('YmdHis') . '_' . FunGetRandStr() . '.dump'); + + FunMessageExit(); + } + + /** + * 删除备份文件 + */ + function DelRepBackup() + { + FunDelRepBackup($this->requestPayload['fileName']); + + FunMessageExit(); + } + + /** + * 下载备份文件 + */ + function DownloadRepBackup() + { + $this->DownloadRepBackup2(); + } + + /** + * 下载备份文件 + */ + function DownloadRepBackup1() + { + $filePath = SVN_BACHUP_PATH . $this->requestPayload['fileName']; + + $fileName = $this->requestPayload['fileName']; + + //以只读和二进制模式打开文件 + $fp = @fopen($filePath, 'rb'); + if ($fp) { + // 获取文件大小 + $file_size = filesize($filePath); + + //告诉浏览器这是一个文件流格式的文件 + header('content-type:application/octet-stream'); + header('Content-Disposition: attachment; filename=' . $fileName); + + // 断点续传 + $range = null; + if (!empty($_SERVER['HTTP_RANGE'])) { + $range = $_SERVER['HTTP_RANGE']; + $range = preg_replace('/[\s|,].*/', '', $range); + $range = explode('-', substr($range, 6)); + if (count($range) < 2) { + $range[1] = $file_size; + } + $range = array_combine(array('start', 'end'), $range); + if (empty($range['start'])) { + $range['start'] = 0; + } + if (empty($range['end'])) { + $range['end'] = $file_size; + } + } + + // 使用续传 + if ($range != null) { + header('HTTP/1.1 206 Partial Content'); + header('Accept-Ranges:bytes'); + + // 计算剩余长度 + header(sprintf('content-length:%u', $range['end'] - $range['start'])); + header(sprintf('content-range:bytes %s-%s/%s', $range['start'], $range['end'], $file_size)); + + // fp指针跳到断点位置 + fseek($fp, sprintf('%u', $range['start'])); + } else { + header('HTTP/1.1 200 OK'); + header('Accept-Ranges:bytes'); + header('content-length:' . $file_size); + } + while (!feof($fp)) { + echo fread($fp, 4096); + ob_flush(); + } + fclose($fp); + } + } + + /** + * 下载备份文件 + */ + function DownloadRepBackup2() + { + $filePath = SVN_BACHUP_PATH . $this->requestPayload['fileName']; + + //文件类型 + $mimeType = 'application/octet-stream'; + + //请求区域 + $range = isset($_SERVER['HTTP_RANGE']) ? $_SERVER['HTTP_RANGE'] : null; + + set_time_limit(0); + + $transfer = new Transfer($filePath, $mimeType, $range); + + $transfer->send(); + } + + /** + * 上传文件到备份文件夹 + */ + function UploadBackup() + { + + if (array_key_exists('file', $_FILES)) { + //扩展名 + $fileType = substr(strrchr($_FILES['file']['name'], '.'), 1); + + //文件名 + $fileName = $_FILES['file']['name']; + + //备份文件夹 + $localFilePath = SVN_BACHUP_PATH . $fileName; + + //保存 + $cmd = sprintf("mv '%s' '%s'", $_FILES['file']['tmp_name'], $localFilePath); + FunShellExec($cmd); + // move_uploaded_file($_FILES['file']['tmp_name'], $localFilePath); + + FunMessageExit(); + } else { + $data['status'] = 0; + $data['message'] = '参数不完整'; + return $data; + } + } + + /** + * 从本地备份文件导入仓库 + */ + function ImportRep() + { + //检查备份文件是否存在 + if (!file_exists(SVN_BACHUP_PATH . $this->requestPayload['fileName'])) { + FunMessageExit(200, 0, '备份文件不存在'); + } + + //检查操作的仓库是否存在 + FunCheckRepCreate($this->requestPayload['rep_name'], '仓库不存在'); + + //使用svndump + $result = FunRepLoad($this->requestPayload['rep_name'], $this->requestPayload['fileName']); + + if ($result == ISNULL) { + FunMessageExit(); + } else { + FunMessageExit(200, 0, '导入错误', $result); + } + } + + /** + * 获取仓库的钩子和对应的内容列表 + */ + function GetRepHooks() + { + //检查仓库是否存在 + FunCheckRepCreate($this->requestPayload['rep_name'], '仓库不存在'); + + clearstatcache(); + if (!is_dir(SVN_REPOSITORY_PATH . $this->requestPayload['rep_name'] . '/' . 'hooks')) { + FunMessageExit(200, 0, '仓库不存在或文件损坏'); + } + + $hooks_type_list = [ + "start-commit" => [ + "value" => "start-commit", + "label" => "start-commit---事务创建前", + "shell" => "" + ], + "pre-commit" => [ + "value" => "pre-commit", + "label" => "pre-commit---事务提交前", + "shell" => "" + ], + "post-commit" => [ + "value" => "post-commit", + "label" => "post-commit---事务提交后", + "shell" => "" + ], + "pre-lock" => [ + "value" => "pre-lock", + "label" => "pre-lock---锁定文件前", + "shell" => "" + ], + "post-lock" => [ + "value" => "post-lock", + "label" => "post-lock---锁定文件后", + "shell" => "" + ], + "pre-unlock" => [ + "value" => "pre-unlock", + "label" => "pre-unlock---解锁文件前", + "shell" => "" + ], + "post-unlock" => [ + "value" => "post-unlock", + "label" => "post-unlock---解锁文件后", + "shell" => "" + ], + "pre-revprop-change" => [ + "value" => "pre-revprop-change", + "label" => "pre-revprop-change---修改修订版属性前", + "shell" => "" + ], + "post-revprop-change" => [ + "value" => "post-revprop-change", + "label" => "post-revprop-change---修改修订版属性后", + "shell" => "" + ], + ]; + + $hooks_file_list = [ + 'start-commit', + 'pre-commit', + 'post-commit', + 'pre-lock', + 'post-lock', + 'pre-unlock', + 'post-unlock', + 'pre-revprop-change', + 'post-revprop-change' + ]; + + $file_arr = scandir(SVN_REPOSITORY_PATH . $this->requestPayload['rep_name'] . '/' . 'hooks'); + + foreach ($file_arr as $file_item) { + if ($file_item != '.' && $file_item != '..') { + if (in_array($file_item, $hooks_file_list)) { + $hooks_type_list[$file_item]['shell'] = FunShellExec(sprintf("cat '%s'", SVN_REPOSITORY_PATH . $this->requestPayload['rep_name'] . '/' . 'hooks' . '/' . $file_item)); + $hooks_type_list[$file_item]['shell'] = trim($hooks_type_list[$file_item]['shell']); + } + } + } + + FunMessageExit(200, 1, '成功', $hooks_type_list); + } + + /** + * 修改仓库的钩子内容(针对单个钩子) + */ + function EditRepHook() + { + $cmd = sprintf("echo '%s' > '%s'", trim($this->requestPayload['content']), SVN_REPOSITORY_PATH . $this->requestPayload['rep_name'] . '/hooks/' . $this->requestPayload['type']); + + FunShellExec($cmd); + + FunMessageExit(); + } +} diff --git a/02.php/app/controller/svnserve.class.php b/02.php/app/controller/svnserve.class.php deleted file mode 100644 index 911f3ec..0000000 --- a/02.php/app/controller/svnserve.class.php +++ /dev/null @@ -1,1704 +0,0 @@ -Config = new Config(); - - $this->Firewall = new Firewall(); - - $this->System = new System(); - - $this->Mail = new Mail(); - - $this->Clientinfo = new Clientinfo(); - - $this->svn_repository_path = SVN_REPOSITORY_PATH; - $this->server_domain = SERVER_DOMAIN; - $this->server_ip = SERVER_IP; - $this->svn_protocol = SVN_PROTOCOL; - $this->svn_port = SVN_PORT; - $this->http_port = HTTP_PORT; - } - - - /** - * 添加仓库用户 - */ - function RepAddUser($requestPayload) - { - $userName = trim($requestPayload['userName']); - $userPass = $requestPayload['userPass']; - $userPass2 = $requestPayload['userPass2']; - - if (empty($userName) || $userPass != $userPass2) { - $data['status'] = 0; - $data['message'] = '参数不完整或错误'; - return $data; - } - - if ($this->globalUserRoleId != 1) { - $data['status'] = 0; - $data['message'] = '非法用户'; - $data['code'] = 401; - return $data; - } - - if (!FunIsValidRepUser($userName)) { - $data['status'] = 0; - $data['message'] = 'SVN用户名只能包含字母、数字、破折号、下划线、点'; - return $data; - } - - $status = FunAddSvnUser($this->globalPasswdContent, $userName, $userPass); - if ($status == '0') { - $data['status'] = 0; - $data['message'] = '文件中不存在[users]标识'; - return $data; - } - if ($status == '1') { - $data['status'] = 0; - $data['message'] = '用户已存在'; - return $data; - } - FunRequestReplyExec('echo \'' . $status . '\' > ' . SVN_SERVER_PASSWD); - - $data['status'] = 1; - $data['message'] = '成功'; - return $data; - } - - /** - * 获取仓库用户列表 - */ - function RepGetUserList($requestPayload) - { - $pageSize = $requestPayload['pageSize']; - $currentPage = $requestPayload['currentPage']; - - if (empty($pageSize) || empty($currentPage)) { - $data['status'] = 0; - $data['message'] = '参数不完整或错误'; - return $data; - } - - if ($this->globalUserRoleId != 1) { - $data['status'] = 0; - $data['message'] = '非法用户'; - $data['code'] = 401; - return $data; - } - - //检查svn状态 - $svn_check_status = $this->CheckSvnserveStatus(); - if ($svn_check_status['status'] == 0) { - $data['status'] = 0; - $data['message'] = $svn_check_status['message']; - return $data; - } - - $userPassList = FunGetSvnUserPassList($this->globalPasswdContent); - - $total = count($userPassList); - - $begin = $pageSize * ($currentPage - 1); - - $userPassList = array_splice($userPassList, $begin, $pageSize); - - $data['status'] = 1; - $data['message'] = '成功'; - $data['data'] = $userPassList; - $data['total'] = $total; - return $data; - } - - /** - * 编辑仓库用户信息 - */ - function RepEditUser($requestPayload) - { - $edit_username = $requestPayload['edit_username']; - $edit_password = $requestPayload['edit_password']; - $edit_password2 = $requestPayload['edit_password2']; - - if (empty(trim($edit_username)) || $edit_password != $edit_password2) { - $data['status'] = 0; - $data['message'] = '参数不完整或错误'; - return $data; - } - - $status = FunUpdSvnUserPass($this->globalPasswdContent, $edit_username, $edit_password); - if ($status == '0') { - $data['status'] = 0; - $data['message'] = '文件中不存在[users]标识'; - return $data; - } - if ($status == '1') { - $data['status'] = 0; - $data['message'] = '用户不存在'; - return $data; - } - FunRequestReplyExec('echo \'' . $status . '\' > ' . SVN_SERVER_PASSWD); - - $data['status'] = 1; - $data['message'] = '成功'; - return $data; - } - - /** - * 删除仓库用户 - */ - function RepUserDel($requestPayload) - { - $del_username = $requestPayload['del_username']; - - if (empty($del_username)) { - $data['status'] = 0; - $data['message'] = '参数不完整或错误'; - return $data; - } - - if ($this->globalUserRoleId != 1) { - $data['status'] = 0; - $data['message'] = '非法用户'; - $data['code'] = 401; - return $data; - } - - $status = FunDelSvnUserPasswd($this->globalPasswdContent, $del_username); - if ($status == '0') { - $data['status'] = 0; - $data['message'] = '文件中不存在[users]标识'; - return $data; - } - if ($status == '1') { - $data['status'] = 0; - $data['message'] = '用户不存在'; - return $data; - } - FunRequestReplyExec('echo \'' . $status . '\' > ' . SVN_SERVER_PASSWD); - - $status = FunDelUserAuthz($this->globalAuthzContent, $del_username); - if ($status == '1') { - $data['status'] = 0; - $data['message'] = '用户不存在'; - return $data; - } - FunRequestReplyExec('echo \'' . $status . '\' > ' . SVN_SERVER_AUTHZ); - - $data['status'] = 1; - $data['message'] = '成功'; - return $data; - } - - /** - * 启用SVN用户 - */ - function RepEnabledUser($requestPayload) - { - $userName = $requestPayload['userName']; - - if (empty($userName)) { - $data['status'] = 0; - $data['message'] = '参数不完整或错误'; - return $data; - } - - $status = FunEnabledUser($this->globalPasswdContent, $userName); - - if ($status == '0') { - $data['status'] = 0; - $data['message'] = '文件中不存在[users]标识'; - return $data; - } - if ($status == '1') { - $data['status'] = 0; - $data['message'] = '要启用的用户不存在'; - return $data; - } - - FunRequestReplyExec('echo \'' . $status . '\' > ' . SVN_SERVER_PASSWD); - - $data['status'] = 1; - $data['message'] = '成功'; - return $data; - } - - /** - * 禁用SVN用户 - */ - function RepDisabledUser($requestPayload) - { - $userName = $requestPayload['userName']; - - if (empty($userName)) { - $data['status'] = 0; - $data['message'] = '参数不完整或错误'; - return $data; - } - - $status = FunDisabledUser($this->globalPasswdContent, $userName); - - if ($status == '0') { - $data['status'] = 0; - $data['message'] = '文件中不存在[users]标识'; - return $data; - } - if ($status == '1') { - $data['status'] = 0; - $data['message'] = '要禁用的用户不存在'; - return $data; - } - - FunRequestReplyExec('echo \'' . $status . '\' > ' . SVN_SERVER_PASSWD); - - $data['status'] = 1; - $data['message'] = '成功'; - return $data; - } - - /** - * 添加仓库分组 - */ - function RepAddGroup($requestPayload) - { - $groupName = trim($requestPayload['groupName']); - - if (empty($groupName)) { - $data['status'] = 0; - $data['message'] = '参数不完整或错误'; - return $data; - } - - if ($this->globalUserRoleId != 1) { - $data['status'] = 0; - $data['message'] = '非法用户'; - $data['code'] = 401; - return $data; - } - - if (!FunIsValidRepGroup($groupName)) { - $data['status'] = 0; - $data['message'] = 'SVN组名称只能包含字母、数字、破折号、下划线、点'; - return $data; - } - - $status = FunAddSvnGroup($this->globalAuthzContent, $groupName); - - if ($status == '0') { - $data['status'] = 0; - $data['message'] = '文件中不存在[groups]标识'; - return $data; - } - if ($status == '1') { - $data['status'] = 0; - $data['message'] = '分组已存在'; - return $data; - } - FunRequestReplyExec('echo \'' . $status . '\' > ' . SVN_SERVER_AUTHZ); - - $data['status'] = 1; - $data['message'] = '成功'; - return $data; - } - - /** - * 获取仓库分组列表 - */ - function RepGetGroupList($requestPayload) - { - $pageSize = $requestPayload['pageSize']; - $currentPage = $requestPayload['currentPage']; - - if (empty($pageSize) || empty($currentPage)) { - $data['status'] = 0; - $data['message'] = '参数不完整或错误'; - return $data; - } - - if ($this->globalUserRoleId != 1) { - $data['status'] = 0; - $data['message'] = '非法用户'; - $data['code'] = 401; - return $data; - } - - //检查svn状态 - $svn_check_status = $this->CheckSvnserveStatus(); - if ($svn_check_status['status'] == 0) { - $data['status'] = 0; - $data['message'] = $svn_check_status['message']; - return $data; - } - - // $groupList = FunGetSvnGroupList($this->globalAuthzContent); - $groupUserList = FunGetSvnGroupUserAndGroupList($this->globalAuthzContent); - - if ($groupUserList == '0') { - $data['status'] = 0; - $data['message'] = '文件格式错误(不存在[groups]标识)'; - return $data; - } - - $total = count($groupUserList); - - $begin = $pageSize * ($currentPage - 1); - - //array_splice会将下标自动转换 使用要注意 - $groupUserList = array_splice($groupUserList, $begin, $pageSize); - - // return $groupUserList; - - // $info = []; - // foreach ($groupList as $key => $value) { - // $usercount = count((array_column($groupUserList, 'include', 'groupName'))[$value]['users']); - // if ($usercount == 1) { - // $usercount = trim((array_column($groupUserList, 'include', 'groupName'))[$value]['users'][0]) == '' ? 0 : 1; - // } else { - // $usercount = count((array_column($groupUserList, 'include', 'groupName'))[$value]['users']); - // } - // array_push($info, array( - // 'groupName' => $value, - // 'includeUserCount' => $usercount, - // 'includeGroupCount'=>'' - // )); - // } - - foreach ($groupUserList as $key => $value) { - $groupUserList[$key]['includeUserCount'] = count($value['include']['users']); - $groupUserList[$key]['includeGroupCount'] = count($value['include']['groups']); - unset($groupUserList[$key]['include']); - } - - - $data['status'] = 1; - $data['message'] = '成功'; - $data['data'] = $groupUserList; - $data['total'] = $total; - return $data; - } - - /** - * 编辑仓库分组信息 - */ - function RepEditGroup($requestPayload) - { - $oldGroup = trim($requestPayload['oldGroup']); - $newGroup = trim($requestPayload['newGroup']); - - if (empty($oldGroup) || empty($newGroup)) { - $data['status'] = 0; - $data['message'] = '参数不完整或错误'; - return $data; - } - - if ($this->globalUserRoleId != 1) { - $data['status'] = 0; - $data['message'] = '非法用户'; - $data['code'] = 401; - return $data; - } - - if (!FunIsValidRepGroup($newGroup)) { - $data['status'] = 0; - $data['message'] = 'SVN组名称只能包含字母、数字、破折号、下划线、点'; - return $data; - } - - if ($oldGroup == $newGroup) { - $data['status'] = 0; - $data['message'] = '无修改'; - return $data; - } - - $status = FunUpdSvnGroup($this->globalAuthzContent, $oldGroup, $newGroup); - FunRequestReplyExec('echo \'' . $status . '\' > ' . SVN_SERVER_AUTHZ); - - $data['status'] = 1; - $data['message'] = '成功'; - return $data; - } - - /** - * 删除仓库分组 - */ - function RepGroupDel($requestPayload) - { - $groupName = $requestPayload['del_groupname']; - - if (empty($groupName)) { - $data['status'] = 0; - $data['message'] = '参数不完整或错误'; - return $data; - } - - if ($this->globalUserRoleId != 1) { - $data['status'] = 0; - $data['message'] = '非法用户'; - $data['code'] = 401; - return $data; - } - - $status = FunDelSvnGroup($this->globalAuthzContent, $groupName); - FunRequestReplyExec('echo \'' . $status . '\' > ' . SVN_SERVER_AUTHZ); - - $data['status'] = 1; - $data['message'] = '成功'; - return $data; - } - - /** - * 获取分组包含的用户列表 - */ - function RepGetGroupUserList($requestPayload) - { - $groupName = $requestPayload['groupName']; - - if (empty($groupName)) { - $data['status'] = 0; - $data['message'] = '参数不完整或错误'; - return $data; - } - - if ($this->globalUserRoleId != 1) { - $data['status'] = 0; - $data['message'] = '非法用户'; - $data['code'] = 401; - return $data; - } - - $status1 = FunGetSvnUserListByGroup($this->globalAuthzContent, $groupName); - if ($status1 == '0') { - $data['status'] = 0; - $data['message'] = '文件中不存在[groups]标识'; - return $data; - } - if ($status1 == '1') { - $data['status'] = 0; - $data['message'] = '分组不存在'; - return $data; - } - $status2 = FunGetSvnUserList($this->globalPasswdContent); - if ($status2 == '0') { - $data['status'] = 0; - $data['message'] = '文件中不存在[users]标识'; - return $data; - } - $userList = array_column($status2, 'userName'); - $list = []; - foreach ($userList as $value) { - if (in_array($value, $status1)) { - array_push($list, array( - 'username' => $value, - 'status' => 'in' - )); - } else { - array_push($list, array( - 'username' => $value, - 'status' => 'no' - )); - } - } - $data['status'] = 1; - $data['message'] = '成功'; - $data['data'] = $list; - return $data; - } - - /** - * 获取分组包含的分组列表 - */ - function RepGetGroupGroupList($requestPayload) - { - $groupName = $requestPayload['groupName']; - - if (empty($groupName)) { - $data['status'] = 0; - $data['message'] = '参数不完整或错误'; - return $data; - } - - if ($this->globalUserRoleId != 1) { - $data['status'] = 0; - $data['message'] = '非法用户'; - $data['code'] = 401; - return $data; - } - - $status1 = FunGetSvnGroupListByGroup($this->globalAuthzContent, $groupName); - if ($status1 == '0') { - $data['status'] = 0; - $data['message'] = '文件中不存在[groups]标识'; - return $data; - } - if ($status1 == '1') { - $data['status'] = 0; - $data['message'] = '分组不存在'; - return $data; - } - $status2 = FunGetSvnGroupList($this->globalAuthzContent); - if ($status2 == '0') { - $data['status'] = 0; - $data['message'] = '文件中不存在[groups]标识'; - return $data; - } - $list = []; - foreach ($status2 as $value) { - if (in_array($value, $status1)) { - array_push($list, array( - 'groupName' => $value, - 'status' => 'in' - )); - } else { - array_push($list, array( - 'groupName' => $value, - 'status' => 'no' - )); - } - } - $data['status'] = 1; - $data['message'] = '成功'; - $data['data'] = $list; - return $data; - } - - /** - * 设置仓库分组的用户 - */ - function RepSetGroupUserList($requestPayload) - { - $group_name = trim($requestPayload['group_name']); - $this_account_list = $requestPayload['this_account_list']; - - if (empty($group_name) || empty($this_account_list)) { - $data['status'] = 0; - $data['message'] = '参数不完整'; - return $data; - } - - if ($this->globalUserRoleId != 1) { - $data['status'] = 0; - $data['message'] = '非法用户'; - $data['code'] = 401; - return $data; - } - - $authzContent = $this->globalAuthzContent; - foreach ($this_account_list as $key => $value) { - if ($value['status'] == 'no') { - $status1 = FunDelSvnGroupUser($authzContent, $group_name, $value['username']); - if ($status1 == '0') { - $data['status'] = 0; - $data['message'] = '文件中不存在[groups]标识'; - return $data; - } elseif ($status1 == '1') { - $data['status'] = 0; - $data['message'] = '用户组不存在'; - return $data; - } elseif ($status1 == '2') { - } else { - $authzContent = $status1; - } - } else if ($value['status'] == 'in') { - $status2 = FunAddSvnGroupUser($authzContent, $group_name, $value['username']); - if ($status2 == '0') { - $data['status'] = 0; - $data['message'] = '文件中不存在[groups]标识'; - return $data; - } elseif ($status2 == '1') { - $data['status'] = 0; - $data['message'] = '用户组不存在'; - return $data; - } elseif ($status2 == '2') { - } else { - $authzContent = $status2; - } - } - } - - FunRequestReplyExec('echo \'' . $authzContent . '\' > ' . SVN_SERVER_AUTHZ); - - $data['status'] = 1; - $data['message'] = '成功'; - return $data; - } - - /** - * 设置仓库分组的分组 - */ - function RepSetGroupGroupList($requestPayload) - { - $parentGroupName = trim($requestPayload['groupName']); - $thisAccountList = $requestPayload['thisAccountList']; - - if (empty($parentGroupName) || empty($thisAccountList)) { - $data['status'] = 0; - $data['message'] = '参数不完整'; - return $data; - } - - if ($this->globalUserRoleId != 1) { - $data['status'] = 0; - $data['message'] = '非法用户'; - $data['code'] = 401; - return $data; - } - - $authzContent = $this->globalAuthzContent; - foreach ($thisAccountList as $key => $value) { - if ($value['status'] == 'no') { - $status1 = FunDelSvnGroupGroup($authzContent, $parentGroupName, $value['groupName']); - if ($status1 == '0') { - $data['status'] = 0; - $data['message'] = '文件中不存在[groups]标识'; - return $data; - } elseif ($status1 == '1') { - $data['status'] = 0; - $data['message'] = '用户组不存在'; - return $data; - } elseif ($status1 == '2') { - } else { - $authzContent = $status1; - } - } else if ($value['status'] == 'in') { - $status2 = FunAddSvnGroupGroup($authzContent, $parentGroupName, $value['groupName']); - if ($status2 == '0') { - $data['status'] = 0; - $data['message'] = '文件中不存在[groups]标识'; - return $data; - } elseif ($status2 == '1') { - $data['status'] = 0; - $data['message'] = '用户组不存在'; - return $data; - } elseif ($status2 == '2') { - } elseif ($status2 == '3') { - $data['status'] = 0; - $data['message'] = '存在分组循环嵌套的情况'; - return $data; - } else { - //获取分组所在的所有分组 - $groupGroupList = $this->GetSvnGroupAllGroupList($parentGroupName); - - if (in_array($value['groupName'], $groupGroupList)) { - $data['status'] = 0; - $data['message'] = '存在分组循环嵌套的情况'; - return $data; - } - - $authzContent = $status2; - } - } - } - - FunRequestReplyExec('echo \'' . $authzContent . '\' > ' . SVN_SERVER_AUTHZ); - - $data['status'] = 1; - $data['message'] = '成功'; - return $data; - } - - /** - * 获取用户所在的所有分组 - * - * 包括直接包含关系 如 - * group1=user1 - * - * 和间接包含关系 如 - * group1=user1 - * group2=@group1 - * group3=@group2 - * group4=@group3 - */ - private function GetSvnUserAllGroupList($userName) - { - $authzContent = $this->globalAuthzContent; - - //所有的分组列表 - $allGroupList = FunGetSvnGroupList($authzContent); - - //用户所在的分组列表 - $userGroupList = FunGetSvnUserGroupList($authzContent, $userName); - - //剩余的分组列表 - $leftGroupList = array_diff($allGroupList, $userGroupList); - - //循环匹配 直到匹配到与该用户相关的有权限的用户组为止 - loop: - $userGroupListBack = $userGroupList; - foreach ($userGroupList as $group1) { - $newList = FunGetSvnGroupGroupList($authzContent, $group1); - foreach ($leftGroupList as $group2) { - if (in_array($group2, $newList)) { - array_push($userGroupList, $group2); - unset($leftGroupList[array_search($group2, $leftGroupList)]); - } - } - } - if ($userGroupList != $userGroupListBack) { - goto loop; - } - - return $userGroupList; - } - - /** - * 获取分组所在的所有分组 - * - * 包括直接包含关系 如 - * group2=@group1 - * - * 和间接包含关系 如 - * group2=@group1 - * group3=@group2 - * group4=@group3 - */ - private function GetSvnGroupAllGroupList($groupName) - { - $parentGroupName = $groupName; - - $authzContent = $this->globalAuthzContent; - - //所有的分组列表 - $allGroupList = FunGetSvnGroupList($authzContent); - - //分组所在的分组列表 - $groupGroupList = FunGetSvnGroupGroupList($authzContent, $parentGroupName); - - //剩余的分组列表 - $leftGroupList = array_diff($allGroupList, $groupGroupList); - - //循环匹配 - loop: - $userGroupListBack = $groupGroupList; - foreach ($groupGroupList as $group1) { - $newList = FunGetSvnGroupGroupList($authzContent, $group1); - foreach ($leftGroupList as $group2) { - if (in_array($group2, $newList)) { - array_push($groupGroupList, $group2); - unset($leftGroupList[array_search($group2, $leftGroupList)]); - } - } - } - if ($groupGroupList != $userGroupListBack) { - goto loop; - } - - return $groupGroupList; - } - - //设置仓库的hooks - function SetRepHooks($requestPayload) - { - $repository_name = trim($requestPayload['repository_name']); - $hooks_type_list = $requestPayload['hooks_type_list']; - - if ($this->globalUserRoleId != 1) { - $data['status'] = 0; - $data['message'] = '非法用户'; - $data['code'] = 401; - return $data; - } - - if (!is_dir(SVN_REPOSITORY_PATH . '/' . $repository_name . '/' . 'hooks')) { - $data['status'] = 0; - $data['message'] = '仓库不存在或文件损坏'; - return $data; - } - - foreach ($hooks_type_list as $key => $value) { - file_put_contents(SVN_REPOSITORY_PATH . '/' . $repository_name . '/' . 'hooks' . '/' . $value['value'], $value["shell"]); - } - - $data['status'] = 1; - $data['message'] = '成功'; - return $data; - } - - //获取仓库的hooks - function GetRepositoryHooks($requestPayload) - { - $repository_name = trim($requestPayload['repository_name']); - - if ($this->globalUserRoleId != 1) { - $data['status'] = 0; - $data['message'] = '非法用户'; - $data['code'] = 401; - return $data; - } - - if (empty($repository_name)) { - $data['status'] = 0; - $data['message'] = '参数不完整'; - return $data; - } - if (!is_dir(SVN_REPOSITORY_PATH . '/' . $repository_name . '/' . 'hooks')) { - $data['status'] = 0; - $data['message'] = '仓库不存在或文件损坏'; - return $data; - } - $hooks_type_list = array( - "start-commit" => array( - "value" => "start-commit", - "label" => "start-commit---事务创建前", - "shell" => "" - ), - "pre-commit" => array( - "value" => "pre-commit", - "label" => "pre-commit---事务提交前", - "shell" => "" - ), - "post-commit" => array( - "value" => "post-commit", - "label" => "post-commit---事务提交后", - "shell" => "" - ), - "pre-lock" => array( - "value" => "pre-lock", - "label" => "pre-lock---锁定文件前", - "shell" => "" - ), - "post-lock" => array( - "value" => "post-lock", - "label" => "post-lock---锁定文件后", - "shell" => "" - ), - "pre-unlock" => array( - "value" => "pre-unlock", - "label" => "pre-unlock---解锁文件前", - "shell" => "" - ), - "post-unlock" => array( - "value" => "post-unlock", - "label" => "post-unlock---解锁文件后", - "shell" => "" - ), - "pre-revprop-change" => array( - "value" => "pre-revprop-change", - "label" => "pre-revprop-change---修改修订版属性前", - "shell" => "" - ), - "post-revprop-change" => array( - "value" => "post-revprop-change", - "label" => "post-revprop-change---修改修订版属性后", - "shell" => "" - ), - ); - $hooks_file_list = array( - "start-commit", - "pre-commit", - "post-commit", - "pre-lock", - "post-lock", - "pre-unlock", - "post-unlock", - "pre-revprop-change", - "post-revprop-change" - ); - $file_arr = scandir(SVN_REPOSITORY_PATH . '/' . $repository_name . '/' . 'hooks'); - foreach ($file_arr as $file_item) { - if ($file_item != '.' && $file_item != '..') { - if (in_array($file_item, $hooks_file_list)) { - $hooks_type_list[$file_item]['shell'] = file_get_contents(SVN_REPOSITORY_PATH . '/' . $repository_name . '/' . 'hooks' . '/' . $file_item); - } - } - } - $data['status'] = 1; - $data['data'] = $hooks_type_list; - $data['message'] = '成功'; - return $data; - } - - //系统首页 获取概览情况 - function GetGailan($requestPayload) - { - $resultlist = array( - 'os_type' => "", //操作系统类型 - 'os_runtime' => "", //系统运行天数 - 'repository_count' => "", //svn仓库数量 - 'admin_count' => "", //系统管理员数量 - 'user_count' => "", //普通用户数量 - ); - - //操作系统类型 - $resultlist['os_type'] = file('/etc/os-release'); - if (file_exists('/etc/redhat-release')) { - $resultlist['os_type'] = "CentOS"; - } elseif (file_exists('etc/lsb-release')) { - $resultlist['os_type'] = "Ubuntu"; - } else { - $resultlist['os_type'] = "-"; - } - //服务器运行天数 - $info = trim(explode(" ", file_get_contents('/proc/uptime'))[0]); //系统自启动开始的秒数 - $resultlist['os_runtime'] = floor($info / 60 / 60 / 24); - //svn仓库数量 - $svn_check_status = $this->CheckSvnserveStatus(); - $resultlist['repository_count'] = 0; - if ($svn_check_status['code'] == '01' || $svn_check_status['code'] == '11') { - $i = 0; - $file_arr = scandir(SVN_REPOSITORY_PATH); - foreach ($file_arr as $file_item) { - if ($file_item != '.' && $file_item != '..') { - if (is_dir(SVN_REPOSITORY_PATH . '/' . $file_item)) { - $file_arr2 = scandir(SVN_REPOSITORY_PATH . '/' . $file_item); - foreach ($file_arr2 as $file_item2) { - if (($file_item2 == 'conf' || $file_item2 == 'db' || $file_item2 == 'hooks' || $file_item2 == 'locks')) { - $i++; - break; - } - } - } - } - } - $resultlist['repository_count'] = $i; - } - //管理员数量 - $resultlist['super_count'] = 1; - //SVN用户数量 - $resultlist['user_count'] = count(array_column(FunGetSvnUserList($this->globalPasswdContent), 'userName')); - - $data['status'] = 1; - $data['data'] = $resultlist; - $data['message'] = '成功'; - return $data; - } - - //安装svnserve服务 - function Install($requestPayload) - { - if ($this->globalUserRoleId != 1) { - $data['status'] = 0; - $data['message'] = '非法用户'; - $data['code'] = 401; - return $data; - } - - //创建svn仓库父目录 - FunRequestReplyExec('mkdir -p ' . SVN_REPOSITORY_PATH); - - //创建数据备份目录 - FunRequestReplyExec('mkdir -p ' . BACKUP_PATH); - - //创建日志目录 - FunRequestReplyExec('mkdir -p ' . LOG_PATH); - - //通过ps auxf|grep -v "grep"|grep svnserve和判断文件/usr/bin/svnserve是否存在这两方面来同时判断 如果没有安装过则进行安装 - $info = FunRequestReplyExec('ps auxf|grep -v "grep"|grep svnserve'); - if ($info == ISNULL && !file_exists('/usr/bin/svnserve')) { - //创建文件 svnserve.conf 并写入内容 - FunRequestReplyExec('touch ' . SVN_SERVER_CONF); - FunRequestReplyExec('echo \'' . file_get_contents(BASE_PATH . '/data/templete/svnserve.conf') . '\' > ' . SVN_SERVER_CONF); - - //创建文件 passwd - FunRequestReplyExec('touch ' . SVN_SERVER_PASSWD); - FunRequestReplyExec('echo \'' . file_get_contents(BASE_PATH . '/data/templete/passwd') . '\' > ' . SVN_SERVER_PASSWD); - - //创建文件 authz - FunRequestReplyExec('touch ' . SVN_SERVER_AUTHZ); - FunRequestReplyExec('echo \'' . file_get_contents(BASE_PATH . '/data/templete/authz') . '\' > ' . SVN_SERVER_AUTHZ); - - //yum 方式安装 subversion - FunRequestReplyExec("yum install -y subversion"); - - //通常cp的别名为cp -i ,取消别名 - FunRequestReplyExec("alias cp='cp'"); - - //备份文件 - FunRequestReplyExec('cp -f /etc/sysconfig/svnserve /etc/sysconfig/svnserve.bak'); - - //更改存储库位置 将配置文件/etc/sysconfig/svnserve中的/var/svn/更换为svn仓库目录 - //增加启动参数 指定所有仓库被一个配置文件管理 - FunRequestReplyExec('sed -i \'s/\/var\/svn/ ' . str_replace('/', '\/', SVN_REPOSITORY_PATH) . ' --config-file ' . str_replace('/', '\/', SVN_SERVER_CONF) . '/g\'' . ' /etc/sysconfig/svnserve'); - - //设置存储密码选项 将以下内容写入文件/etc/subversion/servers servers文件不存在则创建 - /** - * [groups] - * [global] - * store-plaintext-passwords = yes - */ - FunRequestReplyExec("touch /etc/subversion/servers"); - // $con = "[groups]\n[global]\nstore-plaintext-passwords = yes\n"; - FunRequestReplyExec('echo \'' . file_get_contents(BASE_PATH . '/data/templete/servers') . '\' > /etc/subversion/servers'); - - //加入开机启动项 - FunRequestReplyExec("systemctl enable svnserve.service"); - - //启动 - FunRequestReplyExec("systemctl start svnserve.service"); - - //将svn和http默认端口加入防火墙 - $this->Firewall->SetFirewallPolicy(["port" => SVN_PORT, "type" => "add"]); - $this->Firewall->SetFirewallPolicy(["port" => HTTP_PORT, "type" => "add"]); - - //临时关闭selinux - FunRequestReplyExec('setenforce 0'); - - //永久关闭selinux - FunRequestReplyExec("sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config"); - - $data['status'] = 1; - $data['message'] = '成功'; - return $data; - } else { - $data['status'] = 1; - $data['message'] = 'Subversion已存在'; - return $data; - } - } - - //卸载svnserve服务 - function UnInstall($requestPayload) - { - if ($this->globalUserRoleId != 1) { - $data['status'] = 0; - $data['message'] = '非法用户'; - $data['code'] = 401; - return $data; - } - - FunRequestReplyExec('systemctl stop svnserve'); - FunRequestReplyExec('systemctl disable svnserve'); - FunRequestReplyExec('yum remove -y subversion'); - FunRequestReplyExec('rm -f /etc/subversion/servers'); - FunRequestReplyExec('rm -rf /etc/subversion'); - FunRequestReplyExec('rm -rf /usr/bin/svnserve'); - - //清除yum缓存 - FunRequestReplyExec('yum clean all'); - - //is_dir的结果会被缓存,所以需要清除缓存 - clearstatcache(); - - $data['status'] = 1; - $data['message'] = '成功'; - return $data; - } - - //修复svn服务 - function Repaire($requestPayload) - { - } - - /** - * 获取仓库列表 - */ - function GetRepositoryList($requestPayload) - { - $pageSize = $requestPayload['pageSize']; - $currentPage = $requestPayload['currentPage']; - - if (empty($pageSize) || empty($currentPage) || $pageSize == 0) { - $data['status'] = 0; - $data['message'] = '参数不完整或错误'; - return $data; - } - - //检查svn状态 - $svn_check_status = $this->CheckSvnserveStatus(); - if ($svn_check_status['status'] == 0) { - $data['status'] = 0; - $data['message'] = $svn_check_status['message']; - return $data; - } - - $repArray = FunGetRepList(); - - $authzContent = $this->globalAuthzContent; - - $authzContentBackup = $authzContent; - - //检查是否存在没有写入配置文件的仓库字段 - foreach ($repArray as $key => $value) { - $status = FunSetRepAuthz($authzContent, $value['repName'], '/'); - if ($status != '1') { - $authzContent = $status; - } - } - - //写入 - if ($authzContentBackup != $authzContent) { - FunRequestReplyExec('echo \'' . $authzContent . '\' > ' . SVN_SERVER_AUTHZ); - } - - if ($this->globalUserRoleId == 2) { - //获取用户所在的所有分组 - $userGroupList = $this->GetSvnUserAllGroupList($this->globalUserName); - - $allRepList = []; - - //获取分组有权限的仓库列表 - foreach ($userGroupList as $value) { - $allRepList = array_merge($allRepList, FunGetGroupPriRepListWithoutPri($authzContent, $value)); - } - - //获取用户有权限的仓库列表 - $allRepList = array_merge($allRepList, FunGetUserPriRepListWithoutPri($authzContent, $this->globalUserName)); - - //获取所有用户有权限的仓库列表 - $allRepList = array_merge($allRepList, FunGetAllHavePriRepListWithoutPri($authzContent)); - - //处理 - foreach ($repArray as $key => $value) { - if (!in_array($value['repName'], $allRepList)) { - unset($repArray[$key]); - } - } - } - - $begin = $pageSize * ($currentPage - 1); - - $total = count($repArray); - - //array_splice会将下标自动转换 使用要注意 - $list = array_splice($repArray, $begin, (int)$pageSize); - - $data['status'] = 1; - $data['message'] = '成功'; - $data['data'] = $list; - $data['total'] = $total; - return $data; - } - - //项目管理 按钮 添加svn仓库 包括项目标题 - function AddRepository($requestPayload) - { - $repository_name = $requestPayload['repository_name']; - - if ($this->globalUserRoleId != 1) { - $data['status'] = 0; - $data['message'] = '非法用户'; - $data['code'] = 401; - return $data; - } - - $svn_check_status = $this->CheckSvnserveStatus(); - if ($svn_check_status['status'] == 0) { - $data['status'] = 0; - $data['message'] = $svn_check_status['message']; - return $data; - } - - //只能包含字母、数字、破折号、下划线或点字符,不能以句点开头或结尾 - if (!FunIsValidRepName($repository_name)) { - $data['status'] = 0; - $data['message'] = 'SVN仓库名称只能包含字母、数字、破折号、下划线、点,不能以点开头或结尾'; - return $data; - } - - //判断仓库是否存在 - if (is_dir(SVN_REPOSITORY_PATH . '/' . $repository_name)) { - $data['status'] = 0; - $data['message'] = '仓库已经存在'; - return $data; - } - - //创建仓库 - //解决创建中文仓库乱码问题 - FunRequestReplyExec('export LC_CTYPE=en_US.UTF-8 && svnadmin create ' . SVN_REPOSITORY_PATH . '/' . $repository_name); - - //判断是否创建成功 - if (!is_dir(SVN_REPOSITORY_PATH . '/' . $repository_name)) { - $data['status'] = 0; - $data['message'] = '添加仓库失败'; - return $data; - } - - FunRequestReplyExec('setenforce 0'); - - //写入配置文件 - $status = FunSetRepAuthz($this->globalAuthzContent, $repository_name, '/'); - if ($status != '1') { - FunRequestReplyExec('echo \'' . $status . '\' > ' . SVN_SERVER_AUTHZ); - } - - $data['status'] = 1; - $data['message'] = '成功'; - return $data; - } - - //项目管理 按钮 删除svn仓库 - function DeleteRepository($requestPayload) - { - $repository_name = $requestPayload['repository_name']; - - if (empty($repository_name)) { - $data['status'] = 0; - $data['message'] = '参数不完整'; - return $data; - } - - if ($this->globalUserRoleId != 1) { - $data['status'] = 0; - $data['message'] = '非法用户'; - $data['code'] = 401; - return $data; - } - - //删除仓库目录 - if (!is_dir(SVN_REPOSITORY_PATH . '/' . $repository_name)) { - $data['status'] = 0; - $data['message'] = '仓库不存在'; - return $data; - } - FunRequestReplyExec('rm -rf ' . SVN_REPOSITORY_PATH . '/' . $repository_name); - - //检查是否删除成功 - if (!is_dir(SVN_REPOSITORY_PATH . '/' . $repository_name)) { - $data['status'] = 0; - $data['message'] = '删除仓库失败'; - return $data; - } - - //从配置文件删除 - $status = FunDelRepAuthz($this->globalAuthzContent, $repository_name); - if ($status != '1') { - FunRequestReplyExec('echo \'' . $status . '\' > ' . SVN_SERVER_AUTHZ); - } - - $data['status'] = 1; - $data['message'] = '成功'; - return $data; - } - - /** - * 为仓库设置用户的权限 - */ - function SetRepositoryUserPrivilege($requestPayload) - { - $repository_name = trim($requestPayload['repository_name']); - $this_account_list = $requestPayload['this_account_list']; - - if (empty($repository_name) || empty($this_account_list)) { - $data['status'] = 0; - $data['message'] = '参数不完整'; - return $data; - } - - if ($this->globalUserRoleId != 1) { - $data['status'] = 0; - $data['message'] = '非法用户'; - $data['code'] = 401; - return $data; - } - - if (!is_dir(SVN_REPOSITORY_PATH . '/' . $repository_name)) { - $data['status'] = 0; - $data['message'] = '项目不存在'; - return $data; - } - - $authzContent = $this->globalAuthzContent; - foreach ($this_account_list as $key => $value) { - $authzContent = FunSetRepUserPri($authzContent, $value['account'], $value['privilege'] == 'no' ? '' : $value['privilege'], $repository_name, '/'); - if ($authzContent == '0') { - $data['status'] = 0; - $data['message'] = '仓库字段在配置文件中不存在 请刷新修复'; - return $data; - } - } - - FunRequestReplyExec('echo \'' . $authzContent . '\' > ' . SVN_SERVER_AUTHZ); - - $data['status'] = 1; - $data['message'] = '成功'; - return $data; - } - - /** - * 为仓库设置用户组的权限 - */ - function SetRepositoryGroupPrivilege($requestPayload) - { - $repository_name = trim($requestPayload['repository_name']); - $this_account_list = $requestPayload['this_account_list']; - - if (empty($repository_name) || empty($this_account_list)) { - $data['status'] = 0; - $data['message'] = '参数不完整'; - return $data; - } - - if ($this->globalUserRoleId != 1) { - $data['status'] = 0; - $data['message'] = '非法用户'; - $data['code'] = 401; - return $data; - } - - if (!is_dir(SVN_REPOSITORY_PATH . '/' . $repository_name)) { - $data['status'] = 0; - $data['message'] = '项目不存在'; - return $data; - } - - $authzContent = $this->globalAuthzContent; - foreach ($this_account_list as $key => $value) { - if ($authzContent == '0') { - $data['status'] = 0; - $data['message'] = '仓库字段在配置文件中不存在 请刷新修复'; - return $data; - } - $authzContent = FunSetRepGroupPri($authzContent, $value['account'], $value['privilege'] == 'no' ? '' : $value['privilege'], $repository_name, '/'); - } - - FunRequestReplyExec('echo \'' . $authzContent . '\' > ' . SVN_SERVER_AUTHZ); - - $data['status'] = 1; - $data['message'] = '成功'; - return $data; - } - - //项目管理 按钮 编辑svn项目 提交用户对svn项目的标题的修改 - function SetRepositoryInfo($requestPayload) - { - $old_repository_name = trim($requestPayload['old_repository_name']); - $new_repository_name = trim($requestPayload['new_repository_name']); - - if ($this->globalUserRoleId != 1) { - $data['status'] = 0; - $data['message'] = '非法用户'; - $data['code'] = 401; - return $data; - } - - //只能包含字母、数字、破折号、下划线或点字符,不能以句点开头或结尾 - if (!FunIsValidRepName($new_repository_name)) { - $data['status'] = 0; - $data['message'] = 'SVN仓库名称只能包含字母、数字、破折号、下划线、点,不能以点开头或结尾'; - return $data; - } - - //目录是否存在判断 - if (!is_dir(SVN_REPOSITORY_PATH . '/' . $old_repository_name)) { - $data['status'] = 0; - $data['message'] = '要修改的项目不存在'; - return $data; - } - - //是否重复 - if (is_dir(SVN_REPOSITORY_PATH . '/' . $new_repository_name)) { - $data['status'] = 0; - $data['message'] = '项目名称冲突'; - return $data; - } - - //修改仓库文件夹的目录 - FunRequestReplyExec('mv ' . SVN_REPOSITORY_PATH . '/' . $old_repository_name . ' ' . SVN_REPOSITORY_PATH . '/' . $new_repository_name); - - //修改配置文件 - $status = FunUpdRepAuthz($this->globalAuthzContent, $old_repository_name, $new_repository_name); - if ($status != '1') { - FunRequestReplyExec('echo \'' . $status . '\' > ' . SVN_SERVER_AUTHZ); - } - - $data['status'] = 1; - $data['message'] = '成功'; - return $data; - } - - /** - * 获取某个仓库的带有权限的用户列表 - */ - function GetRepositoryUserPrivilegeList($requestPayload) - { - $repository_name = trim($requestPayload['repository_name']); - - if (empty($repository_name)) { - $data['status'] = 0; - $data['message'] = '参数不完整'; - return $data; - } - - if ($this->globalUserRoleId != 1) { - $data['status'] = 0; - $data['message'] = '非法用户'; - $data['code'] = 401; - return $data; - } - - if (!is_dir(SVN_REPOSITORY_PATH . '/' . $repository_name)) { - $data['status'] = 0; - $data['message'] = '项目不存在'; - return $data; - } - - $status1 = FunGetRepUserListWithPri($this->globalAuthzContent, $repository_name, '/'); - if ($status1 == '0') { - $data['status'] = 0; - $data['message'] = '仓库字段在配置文件中不存在 请刷新修复'; - return $data; - } - - $status2 = FunGetSvnUserList($this->globalPasswdContent); - if ($status2 == '0') { - $data['status'] = 0; - $data['message'] = '文件中不存在[users]标识'; - return $data; - } - - $userNamePri = array_column($status1, 'userPri', 'userName'); - - $userList = array_column($status2, 'userName'); - - $list = []; - foreach ($userList as $value) { - if (array_key_exists($value, $userNamePri)) { - array_push($list, array( - 'account' => $value, - 'privilege' => $userNamePri[$value] == '' ? 'no' : $userNamePri[$value] - )); - } else { - array_push($list, array( - 'account' => $value, - 'privilege' => 'no' - )); - } - } - - $data['status'] = 1; - $data['message'] = '成功'; - $data['data'] = $list; - return $data; - } - - /** - * 获取仓库目录树 - */ - public function GetRepTree($requestPayload) - { - $repository_name = trim($requestPayload['repository_name']); - - if (empty($repository_name)) { - $data['status'] = 0; - $data['message'] = '参数不完整'; - return $data; - } - - if (!is_dir(SVN_REPOSITORY_PATH . '/' . $repository_name)) { - $data['status'] = 0; - $data['message'] = '仓库不存在'; - return $data; - } - - $data['status'] = 1; - $data['message'] = '成功'; - $data['data'] = FunGetRepTree($repository_name); - return $data; - } - - /** - * 获取某个仓库的带有权限的用户组列表 - */ - function GetRepositoryGroupPrivilegeList($requestPayload) - { - $repository_name = trim($requestPayload['repository_name']); - - if (empty($repository_name)) { - $data['status'] = 0; - $data['message'] = '参数不完整'; - return $data; - } - - if ($this->globalUserRoleId != 1) { - $data['status'] = 0; - $data['message'] = '非法用户'; - $data['code'] = 401; - return $data; - } - - if (!is_dir(SVN_REPOSITORY_PATH . '/' . $repository_name)) { - $data['status'] = 0; - $data['message'] = '项目不存在'; - return $data; - } - - $status1 = FunGetRepGroupListWithPri($this->globalAuthzContent, $repository_name, '/'); - if ($status1 == '0') { - $data['status'] = 0; - $data['message'] = '仓库字段在配置文件中不存在 请刷新修复'; - return $data; - } else { - $status2 = FunGetSvnGroupList($this->globalAuthzContent); - if ($status2 == '0') { - $data['status'] = 0; - $data['message'] = '文件中不存在[groups]标识'; - return $data; - } else { - $groupList = array_column($status1, 'groupPri', 'groupName'); - $list = []; - foreach ($status2 as $value) { - if (array_key_exists($value, $groupList)) { - array_push($list, array( - 'account' => $value, - 'privilege' => $groupList[$value] - )); - } else { - array_push($list, array( - 'account' => $value, - 'privilege' => 'no' - )); - } - } - $data['status'] = 1; - $data['message'] = '成功'; - $data['data'] = $list; - return $data; - } - } - } - - //高级设置 初始化加载 列出svnserve服务的状态 - function GetSvnserveStatus($requestPayload) - { - //是否安装服务 - $info = FunRequestReplyExec('ps auxf|grep -v "grep"|grep svnserve'); - if ($info == ISNULL && !file_exists('/usr/bin/svnserve')) { - $info = []; - $info['status'] = '未安装'; //未安装 - $info['port'] = '3690'; - $info['type'] = 'error'; - - $data['status'] = 1; - $data['message'] = '成功'; - $data['data'] = $info; - return $data; - } - //是否存在repository目录 - if (!is_dir(SVN_REPOSITORY_PATH)) { - $info = []; - $info['status'] = '异常'; //存储库目录不存在 - $info['port'] = '3690'; - $info['type'] = 'error'; - - $data['status'] = 1; - $data['message'] = '成功'; - $data['data'] = $info; - return $data; - } - //是否启动 - $info = FunRequestReplyExec('ps auxf|grep -v "grep"|grep svnserve'); - if ($info == ISNULL && file_exists('/usr/bin/svnserve')) { - $info = []; - $info['status'] = '已停止'; //svn服务未启动 - $info['port'] = '3690'; - $info['type'] = 'warning'; - - $data['status'] = 1; - $data['message'] = '成功'; - $data['data'] = $info; - return $data; - } - - $info = []; - $info['status'] = '运行中'; //svn服务未启动 - $info['port'] = '3690'; - $info['type'] = 'success'; - - $data['status'] = 1; - $data['message'] = '成功'; - $data['data'] = $info; - return $data; - } - - //高级设置 管理svnserve服务的状态 - function SetSvnserveStatus($requestPayload) - { - $action = $requestPayload['action']; - - if (empty($action)) { - $data['status'] = 0; - $data['message'] = '参数不完整'; - return $data; - } - - if ($this->globalUserRoleId != 1) { - $data['status'] = 0; - $data['message'] = '非法用户'; - $data['code'] = 401; - return $data; - } - - switch ($action) { - case 'startSvn': - FunRequestReplyExec('systemctl start svnserve'); - break; - case 'restartSvn': - FunRequestReplyExec('systemctl restart svnserve'); - break; - case 'stopSvn': - FunRequestReplyExec('systemctl stop svnserve'); - break; - } - - $data['status'] = 1; - $data['message'] = '成功'; - return $data; - } - - //获取服务状态 检查相关的目录文件是否存在 - private function CheckSvnserveStatus() - { - //是否安装服务 - $info = FunRequestReplyExec('ps auxf|grep -v "grep"|grep svnserve'); - if ($info == ISNULL && !file_exists('/usr/bin/svnserve')) { - $data['status'] = 0; - $data['code'] = '00'; - $data['message'] = 'svn服务未安装'; - return $data; - } - //是否存在repository目录 - if (!is_dir(SVN_REPOSITORY_PATH)) { - $data['status'] = 0; - $data['code'] = '00'; - $data['message'] = '存储库目录不存在'; - return $data; - } - //是否启动 - $info = FunRequestReplyExec('ps auxf|grep -v "grep"|grep svnserve'); - if ($info == ISNULL && file_exists('/usr/bin/svnserve')) { - $data['status'] = 0; - $data['code'] = '01'; - $data['message'] = 'svn服务未启动'; - return $data; - } - $data['status'] = 1; - $data['code'] = '11'; - return $data; - } -} diff --git a/02.php/app/controller/svnuser.class.php b/02.php/app/controller/svnuser.class.php new file mode 100644 index 0000000..c21795c --- /dev/null +++ b/02.php/app/controller/svnuser.class.php @@ -0,0 +1,291 @@ +globalPasswdContent); + if ($svnUserPassList == 0) { + FunMessageExit(200, 0, '文件格式错误(不存在[users]标识)'); + } + $dbUserPassList = $this->database->select('svn_users', [ + 'svn_user_id', + 'svn_user_name', + 'svn_user_pass', + 'svn_user_status', + 'svn_user_note' + ]); + + $combinArray1 = array_combine(FunArrayColumn($svnUserPassList, 'userName'), FunArrayColumn($svnUserPassList, 'disabled')); + $combinArray2 = array_combine(FunArrayColumn($svnUserPassList, 'userName'), FunArrayColumn($svnUserPassList, 'userPass')); + foreach ($dbUserPassList as $value) { + if (!in_array($value['svn_user_name'], FunArrayColumn($svnUserPassList, 'userName'))) { + $this->database->delete('svn_users', [ + 'svn_user_name' => $value['svn_user_name'] + ]); + } else { + //更新启用状态和密码 + $this->database->update('svn_users', [ + 'svn_user_pass' => $combinArray2[$value['svn_user_name']], + 'svn_user_status' => !$combinArray1[$value['svn_user_name']] + ], [ + 'svn_user_name' => $value['svn_user_name'] + ]); + } + } + + foreach ($svnUserPassList as $value) { + if (!in_array($value['userName'], FunArrayColumn($dbUserPassList, 'svn_user_name'))) { + $this->database->insert('svn_users', [ + 'svn_user_name' => $value['userName'], + 'svn_user_pass' => $value['userPass'], + 'svn_user_status' => !$value['disabled'], + 'svn_user_note' => '' + ]); + } + } + } + + /** + * 获取全部的SVN用户 + * + * 只包含用户名和启用状态 + */ + function GetAllUserList() + { + $svnUserList = FunGetSvnUserList($this->globalPasswdContent); + if ($svnUserList == '0') { + FunMessageExit(200, 0, '文件格式错误(不存在[users]标识)'); + } else { + FunMessageExit(200, 1, '成功', $svnUserList); + } + } + + /** + * 获取带有分页的SVN用户 + * + * 只包含用户名和启用状态 + */ + function GetUserList() + { + //将SVN用户数据同步到数据库 + $this->SyncUserToDb(); + + $pageSize = $this->requestPayload['pageSize']; + $currentPage = $this->requestPayload['currentPage']; + $searchKeyword = trim($this->requestPayload['searchKeyword']); + + //分页 + $begin = $pageSize * ($currentPage - 1); + + $list = $this->database->select('svn_users', [ + 'svn_user_id', + 'svn_user_name', + 'svn_user_pass', + 'svn_user_status', + 'svn_user_note' + ], [ + 'AND' => [ + 'OR' => [ + 'svn_user_name[~]' => $searchKeyword, + // 'svn_user_pass[~]' => $searchKeyword, + 'svn_user_note[~]' => $searchKeyword, + ], + ], + 'LIMIT' => [$begin, $pageSize], + 'ORDER' => [ + $this->requestPayload['sortName'] => strtoupper($this->requestPayload['sortType']) + ] + ]); + + $total = $this->database->count('svn_users', [ + 'svn_user_id' + ], [ + 'AND' => [ + 'OR' => [ + 'svn_user_name[~]' => $searchKeyword, + // 'svn_user_pass[~]' => $searchKeyword, + 'svn_user_note[~]' => $searchKeyword, + ], + ], + ]); + + foreach ($list as $key => $value) { + $list[$key]['svn_user_status'] = $value['svn_user_status'] == '1' ? true : false; + } + + FunMessageExit(200, 1, '成功', [ + 'data' => $list, + 'total' => $total + ]); + } + + /** + * 启用SVN用户 + */ + function EnableUser() + { + $result = FunEnabledUser($this->globalPasswdContent, $this->requestPayload['svn_user_name']); + if ($result == '0') { + FunMessageExit(200, 0, '文件格式错误(不存在[users]标识)'); + } + if ($result == '1') { + FunMessageExit(200, 0, '要启用的用户不存在'); + } + + FunShellExec('echo \'' . $result . '\' > ' . SVN_PASSWD_FILE); + + FunMessageExit(); + } + + /** + * 禁用SVN用户 + */ + function DisableUser() + { + $result = FunDisabledUser($this->globalPasswdContent, $this->requestPayload['svn_user_name']); + if ($result == '0') { + FunMessageExit(200, 0, '文件格式错误(不存在[users]标识)'); + } + if ($result == '1') { + FunMessageExit(200, 0, '要禁用的用户不存在'); + } + + FunShellExec('echo \'' . $result . '\' > ' . SVN_PASSWD_FILE); + + FunMessageExit(); + } + + /** + * 修改SVN用户的备注信息 + */ + function EditUserNote() + { + $this->database->update('svn_users', [ + 'svn_user_note' => $this->requestPayload['svn_user_note'] + ], [ + 'svn_user_name' => $this->requestPayload['svn_user_name'] + ]); + + FunMessageExit(); + } + + /** + * 新建SVN用户 + */ + function CreateUser() + { + //检查用户名是否合法 + FunCheckRepUser($this->requestPayload['svn_user_name']); + + //检查用户是否已存在 + $result = FunAddSvnUser($this->globalPasswdContent, $this->requestPayload['svn_user_name'], $this->requestPayload['svn_user_pass']); + if ($result == '0') { + FunMessageExit(200, 0, '文件格式错误(不存在[users]标识)'); + } + if ($result == '1') { + FunMessageExit(200, 0, '用户已存在'); + } + + //检查密码是否不为空 + if (trim($this->requestPayload['svn_user_pass']) == '') { + FunMessageExit(200, 0, '密码不能为空'); + } + + //写入配置文件 + FunShellExec('echo \'' . $result . '\' > ' . SVN_PASSWD_FILE); + + //写入数据库 + $this->database->insert('svn_users', [ + 'svn_user_name' => $this->requestPayload['svn_user_name'], + 'svn_user_pass' => $this->requestPayload['svn_user_pass'], + 'svn_user_status' => 1, + 'svn_user_note' => '' + ]); + + FunMessageExit(); + } + + /** + * 修改SVN用户的密码 + */ + function EditUserPass() + { + //检查用户是否已存在 + $result = FunUpdSvnUserPass($this->globalPasswdContent, $this->requestPayload['svn_user_name'], $this->requestPayload['svn_user_pass'], !$this->requestPayload['svn_user_status']); + if ($result == '0') { + FunMessageExit(200, 0, '文件格式错误(不存在[users]标识)'); + } + if ($result == '1') { + FunMessageExit(200, 0, '用户不存在 请刷新重试'); + } + + //检查密码是否不为空 + if (trim($this->requestPayload['svn_user_pass']) == '') { + FunMessageExit(200, 0, '密码不能为空'); + } + + //写入配置文件 + FunShellExec('echo \'' . $result . '\' > ' . SVN_PASSWD_FILE); + + //写入数据库 + $this->database->update('svn_users', [ + 'svn_user_pass' => $this->requestPayload['svn_user_pass'], + ], [ + 'svn_user_name' => $this->requestPayload['svn_user_name'] + ]); + + FunMessageExit(); + } + + /** + * 删除SVN用户 + */ + function DelUser() + { + //从passwd文件中全局删除 + $resultPasswd = FunDelSvnUserPasswd($this->globalPasswdContent, $this->requestPayload['svn_user_name'], !$this->requestPayload['svn_user_status']); + + if ($resultPasswd == '0') { + FunMessageExit(200, 0, '文件格式错误(不存在[users]标识)'); + } + if ($resultPasswd == '1') { + FunMessageExit(200, 0, '用户不存在'); + } + + //从authz文件中删除 + $resultAuthz = FunDelUserAuthz($this->globalAuthzContent, $this->requestPayload['svn_user_name']); + + if ($resultAuthz == '0') { + FunMessageExit(200, 0, '文件格式错误(不存在[users]标识)'); + } + + //从数据删除 + $this->database->delete('svn_users', [ + 'svn_user_name' => $this->requestPayload['svn_user_name'] + ]); + + FunShellExec('echo \'' . $resultAuthz . '\' > ' . SVN_AUTHZ_FILE); + + FunShellExec('echo \'' . $resultPasswd . '\' > ' . SVN_PASSWD_FILE); + + FunMessageExit(); + } +} diff --git a/02.php/app/controller/system.class.php b/02.php/app/controller/system.class.php deleted file mode 100644 index 14b9a1f..0000000 --- a/02.php/app/controller/system.class.php +++ /dev/null @@ -1,328 +0,0 @@ -Config = new Config(); - } - - //判断操作系统类型 - function GetPlatform() - { - if (!PHP_OS == 'Linux') { - $data['status'] = 0; - $data['message'] = '当前操作系统不为Linux'; - return $data; - } - if (file_exists('/etc/redhat-release')) { - $info = file_get_contents('/etc/redhat-release'); - if (!strstr($info, 'CentOS') && (strstr($info, '8.') || strstr($info, '7.'))) { - $data['status'] = 0; - $data['message'] = '当前Linux操作系统版本不符合要求'; - return $data; - } - $data['status'] = 1; - $data['message'] = '成功'; - $data['platform'] = 'CentOS'; - return $data; - } elseif (file_exists('etc/lsb-release')) { - $info = file_get_contents('etc/lsb-release'); - if (1) { - $data['status'] = 0; - $data['message'] = '当前操作系统不受支持'; - return $data; - } - $data['status'] = 1; - $data['message'] = '成功'; - $data['platform'] = 'Ubuntu'; - return $data; - } else { - $data['status'] = 0; - $data['message'] = '当前操作系统不受支持'; - return $data; - } - } - - //获取磁盘信息,如果有多块磁盘如何处理,可以只显示某个目录如根目录对应的磁盘容量 - function GetDiskInfo($requestPayload) - { - $info['DiskTotal'] = round(disk_total_space(".") / 1024 / 1024 / 1024, 1); - $info['DiskFree'] = round(disk_free_space(".") / 1024 / 1024 / 1024, 1); - $info['DiskUsed'] = round($info['DiskTotal'] - $info['DiskFree'], 1); - $info['DiskPercent'] = ($info['DiskTotal'] != 0) ? round($info['DiskUsed'] / $info['DiskTotal'] * 100, 1) : 0; - - $data['status'] = 1; - $data['message'] = '成功'; - $data['data'] = $info; - return $data; - } - - //获取服务器运行时间 - function GetServerUpTime($requestPayload) - { - $temp = file_get_contents('/proc/uptime'); - $info = explode(" ", $temp); - $info = trim($info[0]); //系统自启动开始的秒数 - $min = $info / 60; - $hours = $min / 60; - $days = floor($hours / 24); - $hours = floor($hours - ($days * 24)); - $min = floor($min - ($days * 60 * 24) - ($hours * 60)); - $info = $days . "天" . $hours . "小时" . $min . "分钟"; - - $data['status'] = 1; - $data['message'] = '成功'; - $data['data'] = $info; - return $data; - } - - //计算CPU使用率 - /* - * 第一行为CPU总情况 只需要第一行的值 - * cpu 2032004 102648 238344 167130733 758440 1515917878 0 - * - * user 2032004 从系统启动开始累计到当前时刻,用户态的CPU时间,不包含nice值为负进程 - * nice 102648 从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间 - * system 238344 从系统启动开始累计到当前时刻,核心时间 - * idle 167130733 从系统启动开始累计到当前时刻,除IO等待时间以外其它等待时间 - * iowait 758440 从系统启动开始累计到当前时刻,IO等待时间 - * irq 1515917878 从系统启动开始累计到当前时刻,硬中断时间 - * softirq 0 从系统启动开始累计到当前时刻,软中断时间 - */ - //GetCPURate GetCPUInfo - function GetCPURate($requestPayload) - { - //第一次取值 - $array = file('/proc/stat'); - if (!$array) - return false; - $array = explode(' ', trim(str_replace('cpu', '', trim($array[0])))); - $total_time_1 = $array[0] + $array[1] + $array[2] + $array[3] + $array[4] + $array[5] + $array[6]; - $fiee_time_1 = $array[3]; - - sleep(1); - - //第二次取值 - $array = file('/proc/stat'); - if (!$array) - return false; - $array = explode(' ', trim(str_replace('cpu', '', trim($array[0])))); - $total_time_2 = $array[0] + $array[1] + $array[2] + $array[3] + $array[4] + $array[5] + $array[6]; - $fiee_time_2 = $array[3]; - - //计算 - $result['percent'] = round(round(1.00 - ($fiee_time_2 - $fiee_time_1) / ($total_time_2 - $total_time_1), 2) * 100, 1); - - $data['status'] = 1; - $data['message'] = '成功'; - $data['data'] = $result; - return $data; - } - - //获取内存信息 - function GetMemInfo($requestPayload) - { - $array = file('/proc/meminfo'); - if (!$array) - return false; - foreach ($array as $key => $value) { - $array[$key] = trim($value); - } - foreach ($array as $key => $value) { - $a = explode(':', $value); - $k = trim($a[0]); - $v = trim(str_replace('kB', '', trim($a[1]))); - $info[$k] = $v; - } - $MemTotal = $info['MemTotal']; //总内存 - $MemFree = $info['MemFree']; //空闲内存 - $MeUsed = $MemTotal - $MemFree; //已使用内存 - - $Buffers = $info['Buffers']; //buffer - $Cached = $info['Cached']; //cache - - $MemRealUsed = $MemTotal - $MemFree - $Buffers - $Cached; //真实已使用内存 - $MemRealFree = $MemTotal - $MemRealUsed; //真实空闲内存 - - $MemAvailable = $info['MemAvailable']; - - $result['total'] = round($MemTotal / 1024, 1); - $result['free'] = round($MemRealFree / 1024, 1); - $result['used'] = round($MemRealUsed / 1024, 1); - $result['percent'] = round($MemRealUsed / $MemTotal * 100, 1); - - $data['status'] = 1; - $data['message'] = '成功'; - $data['data'] = $result; - return $data; - } - - //获取系统平均负载,有问题未修复 - function GetLoadAvg($requestPayload) - { - //获取系统总核心数 - $array = file('/proc/cpuinfo'); - if (!$array) - return false; - foreach ($array as $key => $value) { - if (strstr($value, "cpu cores")) { - $result['cpu_cores'] = trim((explode(":", $value))[1]); - break; - } - } - //获取平均负载 - $array = file("/proc/loadavg"); - if (!$array) { - return false; - } - $info = explode(" ", implode("", $array)); - - //负载百分比 = 最近一分钟负载/CPU核心数*100% - $result['minute_1_avg'] = '最近1分钟平均负载:' . round((float)$info[0], 2); - $result['minute_5_avg'] = '最近5分钟平均负载:' . round((float)$info[1], 2); - $result['minute_15_avg'] = '最近15分钟平均负载:' . round((float)$info[2], 2); - $result['avg_percent'] = round(($info[0] / $result['cpu_cores']) * 100, 2); - $result['avg_percent'] = $result['avg_percent'] >= 100 ? 100 : $result['avg_percent']; - - $data['status'] = 1; - $data['message'] = '成功'; - $data['data'] = $result; - return $data; - } - - //根据网卡名称获取实时网速 动态更新使用 - function GetNetworkByName($requestPayload) - { - $network_name = $requestPayload['network_name']; - - //获取时间 作为x坐标轴数据 - $time = date("H:i:s"); - $sleeptime = 1; - //获取时间差值 - $info1 = $this->GetSingleNetwork($network_name); - sleep($sleeptime); - $info2 = $this->GetSingleNetwork($network_name); - //计算 - $result = []; - foreach ($info1 as $key => $value) { - $result[$key]['name'] = $value['name']; - $result[$key]['data'][0]['ReceiveSpeed'] = ($info2[$key]['Receive']['bytes'] - $info1[$key]['Receive']['bytes']) / $sleeptime / 1024; //1s内的网络速度 单位 kbps - $result[$key]['data'][0]['TransmitSpeed'] = ($info2[$key]['Transmit']['bytes'] - $info1[$key]['Transmit']['bytes']) / $sleeptime / 1024; //1s内的网络速度 单位 kbps - $result[$key]['data'][0]['time'] = $time; - } - - $data['status'] = 1; - $data['message'] = '成功'; - $data['data'] = $result; - return $data; - } - - //获取网卡实时网速 第一次加载时使用 - function GetNetwork($requestPayload) - { - //获取时间 作为x坐标轴数据 - $time = date("H:i:s"); - $sleeptime = 1; - //获取时间差值 - $info1 = $this->GetSingleNetwork(""); - sleep($sleeptime); - $info2 = $this->GetSingleNetwork(""); - //计算 - $result = []; - foreach ($info1 as $key => $value) { - // $result[$key]['name'] = $value['name']; - $result[$value['name']][0]['ReceiveSpeed'] = ($info2[$key]['Receive']['bytes'] - $info1[$key]['Receive']['bytes']) / $sleeptime / 1024; //1s内的网络速度 单位 kbps - $result[$value['name']][0]['TransmitSpeed'] = ($info2[$key]['Transmit']['bytes'] - $info1[$key]['Transmit']['bytes']) / $sleeptime / 1024; //1s内的网络速度 单位 kbps - $result[$value['name']][0]['time'] = $time; - } - - $data['status'] = 1; - $data['message'] = '成功'; - $data['data'] = $result; - return $data; - } - - //获取单次网卡的流量 - private function GetSingleNetwork($network_name) - { - /* - * bytes 接口发送或接收的数据的总字节数 - * packets 接口发送或接收的数据包总数 - * errs 由设备驱动程序检测到的发送或接收错误的总数 - * drop 设备驱动程序丢弃的数据包总数 - * fifo FIFO缓冲区错误的数量 - * frame 分组帧错误的数量 - * colls 接口上检测到的冲突数 - * compressed 设备驱动程序发送或接收的压缩数据包数 - * carrier 由设备驱动程序检测到的载波损耗的数量 - * multicast 设备驱动程序发送或接收的多播帧数 - */ - //$network_name为空表示获取除了本地回环外的所有网卡 - $networklist = []; - $info = file("/proc/net/dev"); - //删除不是网卡的元素 - foreach ($info as $key => $value) { - if (strstr($value, 'Receive') || strstr($value, 'bytes')) { - unset($info[$key]); - continue; - } - $info[$key] = trim($info[$key]); - } - //格式化 - $templist = []; - foreach ($info as $key => $value) { - $temp = explode(' ', $value); - foreach ($temp as $key2 => $value2) { - if ($value2 == '') { - unset($temp[$key2]); - continue; - } - $temp[$key2] = trim($temp[$key2]); - } - array_push($templist, array_values($temp)); - } - $temp = []; - //格式化 - foreach ($templist as $key => $value) { - //去除网卡名称中的冒号 - $value[0] = str_replace(':', '', $value[0]); - //删除本地回环口lo的数据 - // if ($value[0] == 'lo') { - // continue; - // } - //只保留特定的网卡 - if ($network_name != '') { - if ($value[0] != $network_name) { - continue; - } - } - //网卡名称 - $temp['name'] = $value[0]; - //Receive 接收 - $temp['Receive']['bytes'] = $value[1]; //总接收 - //Transmit 发送 - $temp['Transmit']['bytes'] = $value[9]; //总发送 - //存入数组 - array_push($networklist, $temp); - } - - return $networklist; - } -} diff --git a/02.php/app/controller/update.class.php b/02.php/app/controller/update.class.php index f99b1d7..a398b2f 100644 --- a/02.php/app/controller/update.class.php +++ b/02.php/app/controller/update.class.php @@ -1,12 +1,6 @@ Config = new Config(); + // $this->Config = new Config(); } /** * 获取当前版本信息 */ - function GetVersionInfo($requestPayload) + function GetVersion() { - $data['status'] = 1; - $data['message'] = '成功'; - $data['data'] = array( - 'current_verson' => VERSION, - 'github' => 'https://github.com/witersen/svnAdminV2.0', - 'gitee' => 'https://gitee.com/witersen/SvnAdminV2.0', - 'author' => 'https://www.witersen.com' - ); - return $data; + return [ + 'status' => 1, + 'message' => '成功', + 'data' => [ + 'current_verson' => VERSION, + 'github' => 'https://github.com/witersen/svnAdminV2.0', + 'gitee' => 'https://gitee.com/witersen/SvnAdminV2.0', + 'author' => 'https://www.witersen.com' + ] + ]; } /** @@ -42,7 +37,7 @@ class Update extends Controller */ function CheckUpdate($requestPayload) { - foreach (UPDATE_SERVER as $key => $value) { + foreach (unserialize(UPDATE_SERVER) as $key => $value) { $versionInfo = FunCurlRequest($value); if ($versionInfo != null) { $versionInfo = json_decode($versionInfo, true); diff --git a/02.php/app/controller/user.class.php b/02.php/app/controller/user.class.php deleted file mode 100644 index f44530d..0000000 --- a/02.php/app/controller/user.class.php +++ /dev/null @@ -1,109 +0,0 @@ -Config = new Config(); - - $this->Mail = new Mail(); - } - - //用户登录 - function Login($requestPayload) - { - $username = trim($requestPayload['username']); - $password = trim($requestPayload['password']); - - if (empty($username) || empty($password)) { - $data['status'] = 0; - $data['message'] = '参数不完整'; - return $data; - } - - if ($username == MANAGE_USER) { - if ($password == MANAGE_PASS) { - $token = FunCreateToken($username); - //发送邮件 - $time = date("Y-m-d-H-i-s"); - $ip = $send_content = "" - . "登录用户:$username \n" - . "服务器已设置域名:" . SERVER_DOMAIN . " \n" - . "服务器已设置IP地址:" . SERVER_IP . " \n" - . "当前时间:$time"; - $send_title = "SVN系统登录通知"; - $this->Mail->SendMail($send_title, $send_content); - - //返回成功信息 - $data['status'] = 1; - $data['code'] = 200; - $data['username'] = $username; - $data['roleid'] = 1; - $data['rolename'] = '管理员'; - $data['token'] = $token; - $data['message'] = '登录成功'; - return $data; - } else { - $data['status'] = 0; - $data['message'] = '密码错误'; - return $data; - } - } - - $svn_user_list = FunGetSvnUserList($this->globalPasswdContent); - if (!in_array($username, array_column($svn_user_list, 'userName'))) { - $data['status'] = 0; - $data['message'] = '用户不存在'; - return $data; - } else { - $svn_user_pass_list = FunGetSvnUserPassList($this->globalPasswdContent); - if ((array_column($svn_user_pass_list, 'userPass', 'userName'))[$username] == $password) { - $token = FunCreateToken($username); - //发送邮件 - $time = date("Y-m-d-H-i-s"); - $ip = $send_content = "" - . "登录用户:$username \n" - . "服务器已设置域名:" . SERVER_DOMAIN . " \n" - . "服务器已设置IP地址:" . SERVER_IP . " \n" - . "当前时间:$time"; - $send_title = "SVN系统登录通知"; - $this->Mail->SendMail($send_title, $send_content); - - //返回成功信息 - $data['status'] = 1; - $data['code'] = 200; - $data['userid'] = 0; - $data['username'] = $username; - $data['roleid'] = 2; - $data['rolename'] = '用户'; - $data['token'] = $token; - $data['message'] = '登录成功'; - return $data; - } else { - $data['status'] = 0; - $data['message'] = '密码错误'; - return $data; - } - } - - $data['status'] = 0; - $data['message'] = '用户不存在'; - return $data; - } -} diff --git a/02.php/app/core/controller.class.php b/02.php/app/core/controller.class.php index b5f0968..1bc054c 100644 --- a/02.php/app/core/controller.class.php +++ b/02.php/app/core/controller.class.php @@ -1,37 +1,37 @@ globalUserName = $this->GetUserInfoByToken(MY_TOKEN)["username"]; - $this->globalUserRoleId = $this->globalUserName == MANAGE_USER ? 1 : 2; - $this->globalAuthzContent = file_exists(SVN_SERVER_AUTHZ) ? file_get_contents(SVN_SERVER_AUTHZ) : ''; - $this->globalPasswdContent = file_exists(SVN_SERVER_PASSWD) ? file_get_contents(SVN_SERVER_PASSWD) : ''; + /** + * token + */ + global $token; + $this->token = $token; + + /** + * 用户身份 + */ + $this->globalUserName = $this->GetUserNameByToken(); + $this->globalUserRoleId = $this->GetUserRoleByToken(); + + /** + * SVN配置文件相关 + */ + $this->globalAuthzContent = file_exists(SVN_AUTHZ_FILE) ? file_get_contents(SVN_AUTHZ_FILE) : ''; + $this->globalPasswdContent = file_exists(SVN_PASSWD_FILE) ? file_get_contents(SVN_PASSWD_FILE) : ''; + + /** + * 请求载体相关 + */ + global $requestPayload; + $this->requestPayload = $requestPayload; + + /** + * 文件 + */ + global $files; + $this->files = $files; + + /** + * 数据库连接 + */ + $this->database = (new conn())->GetConn(); + } + + /** + * 根据token获取用户角色id + */ + final function GetUserRoleByToken() + { + if (!isset($this->token) || empty($this->token)) { + return ''; + } + $arr = explode('.', $this->token); + return $arr[0]; } - //根据token获取用户信息 - final function GetUserInfoByToken($token) + /** + * 根据token获取用户名称 + */ + final function GetUserNameByToken() { - $explode = explode('.', $token); - $data = array( - "username" => $explode[0] - ); - return $data; + if (!isset($this->token) || empty($this->token)) { + return ''; + } + $arr = explode('.', $this->token); + return $arr[1]; } } diff --git a/02.php/app/function/array.function.php b/02.php/app/function/array.function.php index ea92fc4..fe148c0 100644 --- a/02.php/app/function/array.function.php +++ b/02.php/app/function/array.function.php @@ -1,6 +1,6 @@ $value) { + //检查数组中是否包含指定的变量 + if (!array_key_exists($key, $checkedArray)) { + FunMessageExit(200, 0, '参数不完整' . $key); + } + //检查变量类型是否正确 + if ($value['type'] != gettype($checkedArray[$key])) { + FunMessageExit(200, 0, '参数不完整' . $key); + } + //检查是否可以为空 + if ($value['notNull']) { + if (empty($checkedArray[$key])) { + FunMessageExit(200, 0, '参数不完整' . $key); + } + } + } +} + + +/** + * 由于array_column到php5.5+才支持 + * 为了兼容php5.4 + * 这里选择手动实现 可能性能不高 + */ +function FunArrayColumn($array, $columnKey) +{ + $resultArray = []; + foreach ($array as $key => $value) { + if (!array_key_exists($columnKey, $value)) { + return false; + } + array_push($resultArray, $value[$columnKey]); + } + return $resultArray; +} diff --git a/02.php/app/function/color.function.php b/02.php/app/function/color.function.php new file mode 100644 index 0000000..cdfa85c --- /dev/null +++ b/02.php/app/function/color.function.php @@ -0,0 +1,33 @@ + '运行堵塞', + 'value' => 100, + 'color' => '#ed4014' + ], + [ + 'title' => '运行缓慢', + 'value' => 90, + 'color' => '#ff9900' + ], + [ + 'title' => '运行正常', + 'value' => 70, + 'color' => '#28bcfe' + ], + [ + 'title' => '运行流畅', + 'value' => 0, + 'color' => '#28bcfe' + ], + ]; + + foreach ($array as $value) { + if ($percent >= $value['value']) { + return $value; + } + } +} diff --git a/02.php/app/function/config.function.php b/02.php/app/function/config.function.php index b049427..40db33a 100644 --- a/02.php/app/function/config.function.php +++ b/02.php/app/function/config.function.php @@ -1,6 +1,6 @@ 1073741824) { + $size = round($size / 1073741824, 3) . 'GB'; + } else if ($size > 1048576) { + $size = round($size / 1048576, 2) . 'MB'; + } else if ($size > 1024) { + $size = round($size / 1024, 1) . 'KB'; + } else { + $size = $size . 'B'; + } + return $size; +} + +/** + * 获取文件夹体积 + * + * 使用Linux命令 + * + * 返回byte + */ +function FunGetDirSizeDu($path) +{ + $cmd = sprintf("du -s '%s' | awk '{print $1}'", $path); + $result = FunShellExec($cmd); + $result = (int)trim($result) * 1024; + return $result; +} + +/** + * 获取文件夹下的文件列表 + * + * 文件名 + * 文件体积 + * 最后修改时间 + */ +function FunGetDirFileList($path) +{ + $filename = scandir($path); + + $fileArray = []; + + foreach ($filename as $key => $value) { + if ($value == '.' || $value == '..' || is_dir($path . '/' . $value)) { + continue; + } + array_push($fileArray, [ + 'fileName' => $value, + 'fileSize' => FunFormatSize(filesize($path . '/' . $value)), + 'fileEditTime' => date('Y-m-d H:i:s', (int)filemtime($path . '/' . $value)) + ]); + } + + return $fileArray; +} diff --git a/02.php/app/function/json.function.php b/02.php/app/function/json.function.php new file mode 100644 index 0000000..62116c6 --- /dev/null +++ b/02.php/app/function/json.function.php @@ -0,0 +1,7 @@ + $code, + 'status' => $status, + 'message' => $message, + 'data' => $data + ])); +} diff --git a/02.php/app/function/socket.function.php b/02.php/app/function/socket.function.php index aefe6c7..291927c 100644 --- a/02.php/app/function/socket.function.php +++ b/02.php/app/function/socket.function.php @@ -1,11 +1,11 @@ $bindPort == '' ? '3690' : $bindPort, + 'bindHost' => $bindHost == '' ? '0.0.0.0' : $bindHost, + 'manageHost' => '127.0.0.1', + 'enable' => $bindHost == '' ? 'manageHost' : 'bindHost' + ]) . '\' > ' . LISTEN_FILE); + } else { + //更新内容 + $listenArray = json_decode($listenContent, true); + if ($listenArray['bindPort'] != $bindPort) { + $listenArray['bindPort'] = $bindPort == '' ? '3690' : $bindHost; + } + if ($listenArray['bindHost'] != $bindHost) { + $listenArray['bindHost'] = $bindHost == '' ? '0.0.0.0' : $bindHost; + } + FunShellExec('echo \'' . json_encode([ + 'bindPort' => $listenArray['bindPort'], + 'bindHost' => $listenArray['bindHost'], + 'manageHost' => $listenArray['manageHost'] == '' ? '127.0.0.1' : $listenArray['manageHost'], + 'enable' => $listenArray['enable'] + ]) . '\' > ' . LISTEN_FILE); + } + + $listenContent = FunShellExec('cat ' . LISTEN_FILE); + $listenArray = json_decode($listenContent, true); + + return [ + 'bindPort' => $listenArray['bindPort'], + 'bindHost' => $listenArray['bindHost'], + 'manageHost' => $listenArray['manageHost'], + 'enable' => $listenArray['enable'], + ]; +} diff --git a/02.php/app/function/svnGroup.function.php b/02.php/app/function/svnGroup.function.php index 2af745c..07b8b38 100644 --- a/02.php/app/function/svnGroup.function.php +++ b/02.php/app/function/svnGroup.function.php @@ -1,6 +1,6 @@ $value) { + array_push($result, [ + 'repName' => $value, + 'priPath' => $authzContentPreg[2][$key], + 'repPri' => $authzContentPreg[3][$key], + 'unique' => $value . ':' . $authzContentPreg[2][$key] . $authzContentPreg[3][$key] + ]); + } + return $result; + } else { + return []; + } +} + +// require_once '/var/www/html/config/reg.config.php'; +// require_once '/var/www/html/app/function/array.function.php'; + +// $authzContent = file_get_contents('/home/svnadmin/authz'); +// $passwd = file_get_contents('/home/svnadmin/passwd'); +// print_r(FunAddSvnGroup($authzContent, 'group')); +// print_r(FunDelSvnGroup($authzContent, 'group1')); +// print_r(FunUpdSvnGroup($authzContent, 'group1', 'group33')); +// print_r(FunGetSvnGroupList($authzContent)); +// print_r(FunGetSvnGroupGroupList($authzContent, 'group4')); +// print_r(FunGetSvnUserListByGroup($authzContent, 'group1')); +// print_r(FunGetSvnGroupListByGroup($authzContent, 'group2')); +// print_r(FunGetSvnGroupUserAndGroupList($authzContent)); +// print_r(FunAddSvnGroupUser($authzContent, 'group1', 'user')); +// print_r(FunDelSvnGroupUser($authzContent, 'group2', 'user2')); +// print_r(FunAddSvnGroupGroup($authzContent, 'group1', 'group2')); +// print_r(FunDelSvnGroupGroup($authzContent, 'group1', 'group')); +// print_r(FunGetGroupPriRepListWithoutPri($authzContent, 'group4')); +// print_r(FunGetGroupPriRepListWithPri($authzContent, 'group4')); diff --git a/02.php/app/function/svnHooks.function.php b/02.php/app/function/svnHooks.function.php index 174d7fd..812f36a 100644 --- a/02.php/app/function/svnHooks.function.php +++ b/02.php/app/function/svnHooks.function.php @@ -1,3 +1,3 @@ $file_item, - 'repUrl' => SVN_REPOSITORY_PATH . '/' . $file_item, - 'repSize' => round(FunGetDirSize(SVN_REPOSITORY_PATH . '/' . $file_item) / (1024 * 1024), 2), - 'repCheckoutUrl' => 'svn://' . SERVER_DOMAIN . '/' . $file_item, + 'repUrl' => SVN_REPOSITORY_PATH . $file_item, + 'repSize' => round(FunGetDirSize(SVN_REPOSITORY_PATH . $file_item) / (1024 * 1024), 2), + 'repCheckoutUrl' => 'svn://' . 'SERVER_DOMAIN' . '/' . $file_item, )); break; } @@ -730,8 +835,8 @@ function FunGetSimpleRepList() $file_arr = scandir(SVN_REPOSITORY_PATH); foreach ($file_arr as $file_item) { if ($file_item != '.' && $file_item != '..') { - if (is_dir(SVN_REPOSITORY_PATH . '/' . $file_item)) { - $file_arr2 = scandir(SVN_REPOSITORY_PATH . '/' . $file_item); + if (is_dir(SVN_REPOSITORY_PATH . $file_item)) { + $file_arr2 = scandir(SVN_REPOSITORY_PATH . $file_item); foreach ($file_arr2 as $file_item2) { if (($file_item2 == 'conf' || $file_item2 == 'db' || $file_item2 == 'hooks' || $file_item2 == 'locks')) { array_push($repArray, $file_item); @@ -750,8 +855,8 @@ function FunGetSimpleRepList() function FunInitRepStruct($repName, $initUser = "SVNAdmin", $initPass = "SVNAdmin") { $randPrefix = FunGetRandStr(); - $tempPath = TEMP_PATH . '/' . $randPrefix; - $repPath = SVN_REPOSITORY_PATH . '/' . $repName; + $tempPath = TEMP_PATH . $randPrefix; + $repPath = SVN_REPOSITORY_PATH . $repName; $tempMkdirCmd = sprintf("mkdir -p %s", $tempPath); $svnCheckoutCmd = sprintf("svn checkout file:///%s --quiet --username %s --password %s %s", $repPath, $initUser, $initPass, $tempPath); @@ -762,7 +867,7 @@ function FunInitRepStruct($repName, $initUser = "SVNAdmin", $initPass = "SVNAdmi $cmd = implode(';', [$tempMkdirCmd, $svnCheckoutCmd, $repMkdirCmd, $svnAddCmd, $svnCommitCmd, $delDirCmd]); - FunRequestReplyExec($cmd); + FunShellExec($cmd); } /** @@ -781,11 +886,11 @@ function FunInitRepStruct($repName, $initUser = "SVNAdmin", $initPass = "SVNAdmi */ function FunGetRepInfo($repName) { - $repPath = SVN_REPOSITORY_PATH . '/' . $repName; + $repPath = SVN_REPOSITORY_PATH . $repName; - $svnadminInfoCmd = sprintf('svnadmin info %s', $repPath); + $svnadminInfoCmd = sprintf("svnadmin info '%s'", $repPath); - $cmdResult = FunRequestReplyExec($svnadminInfoCmd); + $cmdResult = FunShellExec($svnadminInfoCmd); preg_match_all(REG_REP_INFO, $cmdResult, $svnadminInfoPreg); @@ -801,9 +906,9 @@ function FunGetRepInfo($repName) */ function FunGetRepTree($repName) { - $repPath = SVN_REPOSITORY_PATH . '/' . $repName; - $svnadminInfoCmd = sprintf('svnlook tree %s', $repPath); - $cmdResult = FunRequestReplyExec($svnadminInfoCmd); + $repPath = SVN_REPOSITORY_PATH . $repName; + $svnadminInfoCmd = sprintf("svnlook tree '%s'", $repPath); + $cmdResult = FunShellExec($svnadminInfoCmd); // $cmdResult = shell_exec($svnadminInfoCmd); $treeArray = explode("\n", $cmdResult); //去除数组中的空字符串键值 通常为最后一项 @@ -1067,5 +1172,192 @@ function FunGetFolderDirAndFiles($complateArray, $fileIndex) } +/** + * 检查仓库是否存在或者是否存在同名的文件夹 + */ +function FunCheckRepExist($repName, $message = '仓库已经存在') +{ + clearstatcache(); + if (is_dir(SVN_REPOSITORY_PATH . $repName)) { + FunMessageExit(200, 0, $message); + } +} + +/** + * 检查仓库是否创建成功 + */ +function FunCheckRepCreate($repName, $message = '仓库创建失败') +{ + clearstatcache(); + if (!is_dir(SVN_REPOSITORY_PATH . $repName)) { + FunMessageExit(200, 0, $message); + } +} + +/** + * 检查仓库是否删除成功 + */ +function FunCheckRepDelete($repName, $message = '仓库删除失败') +{ + clearstatcache(); + if (is_dir(SVN_REPOSITORY_PATH . $repName)) { + FunMessageExit(200, 0, $message); + } +} + +/** + * 获取仓库的修订版本数量 + */ +function FunGetRepRev($repName) +{ + $cmd = sprintf("svnadmin info '%s' | grep 'Revisions' | awk '{print $2}'", SVN_REPOSITORY_PATH . $repName); + return (int)trim(FunShellExec($cmd)); +} + +/** + * 获取仓库的属性内容(key-vlaue的形式) + */ +function FunGetRepDetail($repName) +{ + $cmd = sprintf("svnadmin info '%s'", SVN_REPOSITORY_PATH . $repName); + return trim(FunShellExec($cmd)); +} +/** + * 获取仓库下某个文件的体积 + * + * 目前为默认最新版本 + * + * 根据体积大小自动调整单位 + */ +function FunGetRepRevFileSize($repName, $filePath) +{ + $cmd = sprintf("svnlook filesize '%s' '%s'", SVN_REPOSITORY_PATH . $repName, $filePath); + $size = (int)trim(FunShellExec($cmd)); + return FunFormatSize($size); +} + +/** + * 获取仓库下指定文件或者文件夹的最高修订版本 + */ +function FunGetRepFileRev($repName, $filePath) +{ + $cmd = sprintf("svnlook history --limit 1 '%s' '%s'", SVN_REPOSITORY_PATH . $repName, $filePath); + $result = FunShellExec($cmd); + $resultArray = explode("\n", trim($result)); + $content = preg_replace("/\s{2,}/", ' ', $resultArray[2]); + $contentArray = explode(' ', $content); + return trim($contentArray[1]); +} + +/** + * 获取仓库下指定文件或者文件夹的作者 + */ +function FunGetRepFileAuthor($repName, $rev) +{ + $cmd = sprintf("svnlook author -r %s '%s'", $rev, SVN_REPOSITORY_PATH . $repName); + $result = FunShellExec($cmd); + return trim($result); +} + +/** + * 获取仓库下指定文件或者文件夹的提交日期 + */ +function FunGetRepFileDate($repName, $rev) +{ + $cmd = sprintf("svnlook date -r %s '%s'", $rev, SVN_REPOSITORY_PATH . $repName); + $result = FunShellExec($cmd); + return trim($result); +} + +/** + * 获取仓库下指定文件或者文件夹的提交日志 + */ +function FunGetRepFileLog($repName, $rev) +{ + $cmd = sprintf("svnlook log -r %s '%s'", $rev, SVN_REPOSITORY_PATH . $repName); + $result = FunShellExec($cmd); + return trim($result); +} + +/** + * 使用 svnadmin dump 备份仓库 + * + * 默认为全版本 + */ +function FunRepDump($repName, $backupName) +{ + $cmd = sprintf('svnadmin dump %s --quiet > %s', SVN_REPOSITORY_PATH . $repName, SVN_BACHUP_PATH . $backupName); + FunShellExec($cmd); +} + +/** + * 删除备份文件 + */ +function FunDelRepBackup($fileName) +{ + $cmd = sprintf("cd '%s' && rm -f './%s'", SVN_BACHUP_PATH, $fileName); + FunShellExec($cmd); +} + +/** + * 使用 svnadmin load 导入仓库 + */ +function FunRepLoad($repName, $fileName) +{ + $cmd = sprintf("svnadmin load --quiet '%s' < '%s'", SVN_REPOSITORY_PATH . $repName, SVN_BACHUP_PATH . $fileName); + $result = FunShellExec($cmd); + return trim($result); +} + +/** + * 使用 svn list 为用户检查指令 + */ +function CheckSvnUserPathAutzh($checkoutHost, $repName, $repPath, $svnUserName, $svnUserPass) +{ + $cmd = sprintf("svn list '%s' --username '%s' --password '%s' --no-auth-cache --non-interactive --trust-server-cert", $checkoutHost . '/' . $repName . $repPath, $svnUserName, $svnUserPass); + $result = FunShellExec($cmd); + if (strstr($result, 'svn: E170001: Authentication error from server: Password incorrect')) { + //密码错误 + return false; + } + if (strstr($result, 'svn: E170001: Authorization failed')) { + //没有权限 + return false; + } + if (strstr($result, 'svn: E170013: Unable to connect to a repository at URL')) { + //其它错误 + return false; + } + return true; +} +// require_once '/var/www/html/config/reg.config.php'; +// require_once '/var/www/html/app/function/array.function.php'; +// require_once '/var/www/html/app/function/string.function.php'; +// require_once '/var/www/html/app/function/file.function.php'; +// require_once '/var/www/html/config/auto.config.php'; + +// $authzContent = file_get_contents('/home/svnadmin/authz'); +// $passwd = file_get_contents('/home/svnadmin/passwd'); + +// print_r(FunGetRepUserListWithoutPri($authzContent, 'rep1', '/')); +// print_r(FunGetRepUserListWithPri($authzContent, 'rep1', '/')); +// print_r(FunGetRepGroupListWithoutPri($authzContent, 'rep1', '/')); +// print_r(FunGetRepGroupListWithPri($authzContent, 'rep1', '/')); +// print_r(FunSetRepUserPri($authzContent, 'wsp', 'rw', 'rep2', '/')); +// print_r(FunDelRepUserPri($authzContent, 'user3', 'rep3', '/')); +// print_r(FunUpdRepUserPri($authzContent, 'user3', 'r', 'rep3', '/')); +// print_r(FunSetRepGroupPri($authzContent, 'group3', 'r', 'rep3', '/')); +// print_r(FunDelRepGroupPri($authzContent, 'group3', 'rep3', '/')); +// print_r(FunUpdRepGroupPri($authzContent, 'group3', 'r', 'rep3', '/')); +// print_r(FunSetRepAuthz($authzContent, 'rep3666', '/')); +// print_r(FunDelRepAuthz($authzContent, 'rep2')); +// print_r(FunUpdRepAuthz($authzContent, 'rep2', 'rep3')); +// print_r(FunGetRepList()); +// print_r(FunGetSimpleRepList()); +// print_r(FunGetAllHavePriRepListWithPri($authzContent)); +// print_r(FunGetAllHavePriRepListWithoutPri($authzContent)); +// print_r(FunGetAllNoPriRepListWithoutPri($authzContent)); +// print_r(FunGetRepTree('rep46')); +// print_r(FunGetStrSpaceCount(' test')); diff --git a/02.php/app/function/svnUser.function.php b/02.php/app/function/svnUser.function.php index 9ff9fcc..daa9144 100644 --- a/02.php/app/function/svnUser.function.php +++ b/02.php/app/function/svnUser.function.php @@ -1,6 +1,6 @@ Array + * ( + * [repName] => rep1 + * [priPath] => / + * [repPri] => rw + * ) + * [1] => Array + * ( + * [repName] => rep2 + * [priPath] => /branches/taoweitao/计划.md + * [repPri] => rw + * ) + * ) + */ +function FunGetUserPriRepListWithPriAndPath($authzContent, $userName) +{ + $userName = trim($userName); + preg_match_all(sprintf(REG_AUTHZ_USER_PRI_REPS, $userName), $authzContent, $authzContentPreg); + if (array_key_exists(0, $authzContentPreg[1])) { + array_walk($authzContentPreg[1], 'FunArrayValueTrim'); + array_walk($authzContentPreg[2], 'FunArrayValueTrim'); + array_walk($authzContentPreg[3], 'FunArrayValueTrim'); + $result = []; + foreach ($authzContentPreg[1] as $key => $value) { + array_push($result, [ + 'repName' => $value, + 'priPath' => $authzContentPreg[2][$key], + 'repPri' => $authzContentPreg[3][$key], + 'unique' => $value . ':' . $authzContentPreg[2][$key] . $authzContentPreg[3][$key] + ]); + } + return $result; + } else { + return []; + } +} + /** * 从所有仓库路径和分组下修改用户名 * @@ -401,7 +454,8 @@ function FunDelUserAuthz($authzContent, $userName) $content2 = ""; preg_match_all(REG_AUTHZ_GROUP_WITH_CON, $authzContent, $authzContentPreg1); if (array_key_exists(0, $authzContentPreg1[0])) { - if (!empty(trim($authzContentPreg1[1][0]))) { + $temp1 = trim($authzContentPreg1[1][0]); + if (!empty($temp1)) { preg_match_all(REG_AUTHZ_USER_PRI, $authzContentPreg1[1][0], $resultPreg); array_walk($resultPreg[1], 'FunArrayValueTrim'); array_walk($resultPreg[2], 'FunArrayValueTrim'); @@ -435,7 +489,8 @@ function FunDisabledUser($passwdContent, $userName) $userName = trim($userName); preg_match_all(REG_PASSWD_USER_WITH_CON, $passwdContent, $passwdContentPreg); if (array_key_exists(0, $passwdContentPreg[1])) { - if (empty(trim($passwdContentPreg[1][0]))) { + $temp1 = trim($passwdContentPreg[1][0]); + if (empty($temp1)) { return '1'; } else { preg_match_all(sprintf(REG_PASSWD_USER_PASSWD, REG_SVN_USER_DISABLED), $passwdContentPreg[1][0], $resultPreg); @@ -469,7 +524,8 @@ function FunEnabledUser($passwdContent, $userName) $userName = trim($userName); preg_match_all(REG_PASSWD_USER_WITH_CON, $passwdContent, $passwdContentPreg); if (array_key_exists(0, $passwdContentPreg[1])) { - if (empty(trim($passwdContentPreg[1][0]))) { + $temp1 = trim($passwdContentPreg[1][0]); + if (empty($temp1)) { return '1'; } else { preg_match_all(sprintf(REG_PASSWD_USER_PASSWD, REG_SVN_USER_DISABLED), $passwdContentPreg[1][0], $resultPreg); @@ -492,4 +548,21 @@ function FunEnabledUser($passwdContent, $userName) } } +// require_once '/var/www/html/config/reg.config.php'; +// require_once '/var/www/html/app/function/array.function.php'; + +// $authzContent = file_get_contents('/home/svnadmin/authz'); +// $passwd = file_get_contents('/home/svnadmin/passwd'); +// print_r(FunAddSvnUser($passwd, 'user', ' pass ')); +// print_r(FunDelSvnUserPasswd($passwd, 'user3 ', false)); +// print_r(FunGetSvnUserList($passwd)); +// print_r(FunGetSvnUserPassList($passwd)); +// print_r(FunGetPassByUser($passwd, 'user3', true)); +// print_r(FunUpdSvnUserPass($passwd, 'user2 ', '\\\\', false)); +// print_r(FunGetSvnUserGroupList($authzContent, 'user2')); +// print_r(FunGetUserPriRepListWithoutPri($authzContent, 'user2')); +// print_r(FunGetUserPriRepListWithPri($authzContent, 'user2')); +// print_r(FunDelUserAuthz($authzContent, 'user2')); +// print_r(FunDisabledUser($passwd, 'user2')); +// print_r(FunEnabledUser($passwd, 'user3')); diff --git a/02.php/app/function/token.function.php b/02.php/app/function/token.function.php index 94be0cf..2f12f85 100644 --- a/02.php/app/function/token.function.php +++ b/02.php/app/function/token.function.php @@ -1,49 +1,49 @@ $explode[2]) { - $data['code'] = '401'; - $data['message'] = 'token已过期,请重新登录'; - return $data; - } - if ($true_signature == $explode[3]) { - $data['code'] = '200'; - $data['message'] = 'token合法'; - return $data; - } else { - $data['code'] = '400'; - $data['message'] = 'token不合法'; - return $data; + + //校验token格式 + if (substr_count($token, '.') != 4) { + FunMessageExit(401, 0, '非法请求'); + } + + $arr = explode('.', $token); + + //校验token格式 + foreach ($arr as $value) { + if (trim($value) == '') { + FunMessageExit(401, 0, '非法请求'); } - } else { - $data['code'] = '400'; - $data['message'] = 'token不合法'; - return $data; + } + + //检验token内容 + $part1 = hash_hmac('md5', $arr[0] . '.' . $arr[1] . '.' . $arr[2] . '.' . $arr[3], SIGNATURE); + $part2 = $arr[4]; + if ($part1 != $part2) { + FunMessageExit(401, 0, '非法请求'); + } + + //校验是否过期 + if (time() > $arr[3]) { + FunMessageExit(401, 0, '登录过期'); } } diff --git a/02.php/app/function/update.function.php b/02.php/app/function/update.function.php index 3a428af..f462070 100644 --- a/02.php/app/function/update.function.php +++ b/02.php/app/function/update.function.php @@ -1,3 +1,3 @@ database_medoo = new Medoo(unserialize(DATABASE_ENABLE)); + } + + function GetConn() + { + return $this->database_medoo; + } +} diff --git a/02.php/app/model/connModel.class.php b/02.php/app/model/connModel.class.php deleted file mode 100644 index 204e401..0000000 --- a/02.php/app/model/connModel.class.php +++ /dev/null @@ -1,30 +0,0 @@ -database_medoo = new Medoo([ - 'database_type' => DB_TYPE, - 'database' => DB_FILE, - ]); - } - - function GetConn() { - return $this->database_medoo; - } - -} diff --git a/02.php/config/api.config.php b/02.php/config/api.config.php new file mode 100644 index 0000000..87d18dd --- /dev/null +++ b/02.php/config/api.config.php @@ -0,0 +1,21 @@ + 'mysql', + 'database_name' => 'svnadmin', + 'server' => 'sas2.witersen.com', + 'username' => 'svnadmin', + 'password' => 'svnadmin', + 'charset' => 'utf-8', + 'port' => 3306 + ])); + +/** + * SQLite配置信息 + */ +define('SQLITE_CONFIG', serialize([ + 'database_type' => 'sqlite', + 'database_file' => CONFIG_PATH . '/svnadmin.db', +])); + +/** + * 启用信息 + */ +define('DATABASE_ENABLE', MYSQL_CONFIG); diff --git a/02.php/config/reg.config.php b/02.php/config/reg.config.php index 6655d38..80464a8 100644 --- a/02.php/config/reg.config.php +++ b/02.php/config/reg.config.php @@ -1,7 +1,5 @@ value 形式 */ @@ -172,3 +177,8 @@ define('REG_MAIL', "/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a * %s => $key */ define('REG_CONFIG', "/define\(\"*'*%s'*\"*\s*,\s*'*(.*?)'*\)/"); + +/** + * 匹配subversion版本号 + */ +define('REG_SUBVERSION_VERSION', "/\bversion[\s]+(.*?)[\s]+/m"); diff --git a/02.php/config/sign.config.php b/02.php/config/sign.config.php new file mode 100644 index 0000000..7f864c1 --- /dev/null +++ b/02.php/config/sign.config.php @@ -0,0 +1,6 @@ + + */ + private $filePath; + /** + * 文件大小 + * @var Php超大数字 字符串形式描述 + */ + private $fileSize; + /** + * 文件类型 + * @var + */ + private $mimeType; + /** + * 请求区域(范围) + * @var + */ + private $range; + /** + * + * @param $filePath 文件路径 + * @param $mimeType 文件类型 + * @param $range 请求区域(范围) + */ + function __construct($filePath, $mimeType = null, $range = null) + { + $this->filePath = $filePath; + $this->fileSize = sprintf('%u', filesize($filePath)); + $this->mimeType = ($mimeType != null) ? $mimeType : "application/octet-stream"; // bin + $this->range = trim($range); + } + /** + * 获取文件区域 + * @return {'start':long,'end':long} or null + */ + private function getRange() + { + /** + * Range: bytes=-128 + * Range: bytes=-128 + * Range: bytes=28-175,382-399,510-541,644-744,977-980 + * Range: bytes=28-175\n380 + * type 1 + * RANGE: bytes=1000-9999 + * RANGE: bytes=2000-9999 + * type 2 + * RANGE: bytes=1000-1999 + * RANGE: bytes=2000-2999 + * RANGE: bytes=3000-3999 + */ + if (!empty($this->range)) { + $range = preg_replace('/[\s|,].*/', '', $this->range); + $range = explode('-', substr($range, 6)); + if (count($range) < 2) { + $range[1] = $this->fileSize; // Range: bytes=-100 + } + $range = array_combine(array('start', 'end'), $range); + if (empty($range['start'])) { + $range['start'] = 0; + } + if (!isset($range['end']) || empty($range['end'])) { + $range['end'] = $this->fileSize; + } + return $range; + } + return null; + } + /** + * 向客户端发送文件 + */ + public function send() + { + $fileHande = fopen($this->filePath, 'rb'); + if ($fileHande) { + // setting + ob_end_clean(); // clean cache + ob_start(); + ini_set('output_buffering', 'Off'); + ini_set('zlib.output_compression', 'Off'); + // init + $lastModified = gmdate('D, d M Y H:i:s', filemtime($this->filePath)) . ' GMT'; + $etag = sprintf('w/"%s:%s"', md5($lastModified), $this->fileSize); + $ranges = $this->getRange(); + // headers + header(sprintf('Last-Modified: %s', $lastModified)); + header(sprintf('ETag: %s', $etag)); + header(sprintf('Content-Type: %s', $this->mimeType)); + $disposition = 'attachment'; + if (strpos($this->mimeType, 'image/') !== FALSE) { + $disposition = 'inline'; + } + header(sprintf('Content-Disposition: %s; filename="%s"', $disposition, basename($this->filePath))); + if ($ranges != null) { + header('HTTP/1.1 206 Partial Content'); + header('Accept-Ranges: bytes'); + header(sprintf('Content-Length: %u', $ranges['end'] - $ranges['start'])); + header(sprintf('Content-Range: bytes %s-%s/%s', $ranges['start'], $ranges['end'], $this->fileSize)); + // + fseek($fileHande, sprintf('%u', $ranges['start'])); + } else { + header("HTTP/1.1 200 OK"); + header(sprintf('Content-Length: %s', $this->fileSize)); + } + // read file + $lastSize = 0; + while (!feof($fileHande) && !connection_aborted()) { + $lastSize = sprintf("%u", bcsub($this->fileSize, sprintf("%u", ftell($fileHande)))); + if (bccomp($lastSize, self::BUFF_SIZE) > 0) { + $lastSize = self::BUFF_SIZE; + } + echo fread($fileHande, $lastSize); + ob_flush(); + flush(); + } + ob_end_flush(); + } + if ($fileHande != null) { + fclose($fileHande); + } + } +} diff --git a/02.php/extension/Medoo-1.7.10/README.md b/02.php/extension/Medoo-1.7.10/README.md new file mode 100644 index 0000000..5288a75 --- /dev/null +++ b/02.php/extension/Medoo-1.7.10/README.md @@ -0,0 +1,102 @@ +

+ +

+ +

+ Total Downloads + Latest Stable Version + License + Backers on Open Collective + Sponsors on Open Collective +

+ +> The lightweight PHP database framework to accelerate development + +## Features + +* **Lightweight** - Less than 100 KB, portable with only one file + +* **Easy** - Extremely easy to learn and use, friendly construction + +* **Powerful** - Supports various common and complex SQL queries, data mapping, and prevent SQL injection + +* **Compatible** - Supports all SQL databases, including MySQL, MSSQL, SQLite, MariaDB, PostgreSQL, Sybase, Oracle and more + +* **Friendly** - Works well with every PHP frameworks, like Laravel, Codeigniter, Yii, Slim, and framework which supports singleton extension or composer + +* **Free** - Under MIT license, you can use it anywhere whatever you want + +## Requirement + +PHP 5.4+ and PDO extension installed, recommend PHP 7.0+ + +## Get Started + +### Install via composer + +Add Medoo to composer.json configuration file. +``` +$ composer require catfan/medoo +``` + +And update the composer +``` +$ composer update +``` + +```php +// If you installed via composer, just use this code to require autoloader on the top of your projects. +require 'vendor/autoload.php'; + +// Using Medoo namespace +use Medoo\Medoo; + +// Initialize +$database = new Medoo([ + 'database_type' => 'mysql', + 'database_name' => 'name', + 'server' => 'localhost', + 'username' => 'your_username', + 'password' => 'your_password' +]); + +// Enjoy +$database->insert('account', [ + 'user_name' => 'foo', + 'email' => 'foo@bar.com' +]); + +$data = $database->select('account', [ + 'user_name', + 'email' +], [ + 'user_id' => 50 +]); + +echo json_encode($data); + +// [ +// { +// "user_name" : "foo", +// "email" : "foo@bar.com", +// } +// ] +``` + +## Contribution Guides + +For most of time, Medoo is using develop branch for adding feature and fixing bug, and the branch will be merged into master branch while releasing a public version. For contribution, submit your code to the develop branch, and start a pull request into it. + +On develop branch, each commits are started with `[fix]`, `[feature]` or `[update]` tag to indicate the change. + +Keep it simple and keep it clear. + +## License + +Medoo is under the MIT license. + +## Links + +* Official website: [https://medoo.in](https://medoo.in) + +* Documentation: [https://medoo.in/doc](https://medoo.in/doc) \ No newline at end of file diff --git a/02.php/extension/Medoo-1.7.10/src/Medoo.php b/02.php/extension/Medoo-1.7.10/src/Medoo.php new file mode 100644 index 0000000..0164591 --- /dev/null +++ b/02.php/extension/Medoo-1.7.10/src/Medoo.php @@ -0,0 +1,1852 @@ +type = strtolower($options[ 'database_type' ]); + + if ($this->type === 'mariadb') + { + $this->type = 'mysql'; + } + } + + if (isset($options[ 'prefix' ])) + { + $this->prefix = $options[ 'prefix' ]; + } + + if (isset($options[ 'logging' ]) && is_bool($options[ 'logging' ])) + { + $this->logging = $options[ 'logging' ]; + } + + $option = isset($options[ 'option' ]) ? $options[ 'option' ] : []; + $commands = (isset($options[ 'command' ]) && is_array($options[ 'command' ])) ? $options[ 'command' ] : []; + + switch ($this->type) + { + case 'mysql': + // Make MySQL using standard quoted identifier + $commands[] = 'SET SQL_MODE=ANSI_QUOTES'; + + break; + + case 'mssql': + // Keep MSSQL QUOTED_IDENTIFIER is ON for standard quoting + $commands[] = 'SET QUOTED_IDENTIFIER ON'; + + // Make ANSI_NULLS is ON for NULL value + $commands[] = 'SET ANSI_NULLS ON'; + + break; + } + + if (isset($options[ 'pdo' ])) + { + if (!$options[ 'pdo' ] instanceof PDO) + { + throw new InvalidArgumentException('Invalid PDO object supplied'); + } + + $this->pdo = $options[ 'pdo' ]; + + foreach ($commands as $value) + { + $this->pdo->exec($value); + } + + return; + } + + if (isset($options[ 'dsn' ])) + { + if (is_array($options[ 'dsn' ]) && isset($options[ 'dsn' ][ 'driver' ])) + { + $attr = $options[ 'dsn' ]; + } + else + { + throw new InvalidArgumentException('Invalid DSN option supplied'); + } + } + else + { + if ( + isset($options[ 'port' ]) && + is_int($options[ 'port' ] * 1) + ) + { + $port = $options[ 'port' ]; + } + + $is_port = isset($port); + + switch ($this->type) + { + case 'mysql': + $attr = [ + 'driver' => 'mysql', + 'dbname' => $options[ 'database_name' ] + ]; + + if (isset($options[ 'socket' ])) + { + $attr[ 'unix_socket' ] = $options[ 'socket' ]; + } + else + { + $attr[ 'host' ] = $options[ 'server' ]; + + if ($is_port) + { + $attr[ 'port' ] = $port; + } + } + + break; + + case 'pgsql': + $attr = [ + 'driver' => 'pgsql', + 'host' => $options[ 'server' ], + 'dbname' => $options[ 'database_name' ] + ]; + + if ($is_port) + { + $attr[ 'port' ] = $port; + } + + break; + + case 'sybase': + $attr = [ + 'driver' => 'dblib', + 'host' => $options[ 'server' ], + 'dbname' => $options[ 'database_name' ] + ]; + + if ($is_port) + { + $attr[ 'port' ] = $port; + } + + break; + + case 'oracle': + $attr = [ + 'driver' => 'oci', + 'dbname' => $options[ 'server' ] ? + '//' . $options[ 'server' ] . ($is_port ? ':' . $port : ':1521') . '/' . $options[ 'database_name' ] : + $options[ 'database_name' ] + ]; + + if (isset($options[ 'charset' ])) + { + $attr[ 'charset' ] = $options[ 'charset' ]; + } + + break; + + case 'mssql': + if (isset($options[ 'driver' ]) && $options[ 'driver' ] === 'dblib') + { + $attr = [ + 'driver' => 'dblib', + 'host' => $options[ 'server' ] . ($is_port ? ':' . $port : ''), + 'dbname' => $options[ 'database_name' ] + ]; + + if (isset($options[ 'appname' ])) + { + $attr[ 'appname' ] = $options[ 'appname' ]; + } + + if (isset($options[ 'charset' ])) + { + $attr[ 'charset' ] = $options[ 'charset' ]; + } + } + else + { + $attr = [ + 'driver' => 'sqlsrv', + 'Server' => $options[ 'server' ] . ($is_port ? ',' . $port : ''), + 'Database' => $options[ 'database_name' ] + ]; + + if (isset($options[ 'appname' ])) + { + $attr[ 'APP' ] = $options[ 'appname' ]; + } + + $config = [ + 'ApplicationIntent', + 'AttachDBFileName', + 'Authentication', + 'ColumnEncryption', + 'ConnectionPooling', + 'Encrypt', + 'Failover_Partner', + 'KeyStoreAuthentication', + 'KeyStorePrincipalId', + 'KeyStoreSecret', + 'LoginTimeout', + 'MultipleActiveResultSets', + 'MultiSubnetFailover', + 'Scrollable', + 'TraceFile', + 'TraceOn', + 'TransactionIsolation', + 'TransparentNetworkIPResolution', + 'TrustServerCertificate', + 'WSID', + ]; + + foreach ($config as $value) + { + $keyname = strtolower(preg_replace(['/([a-z\d])([A-Z])/', '/([^_])([A-Z][a-z])/'], '$1_$2', $value)); + + if (isset($options[ $keyname ])) + { + $attr[ $value ] = $options[ $keyname ]; + } + } + } + + break; + + case 'sqlite': + $attr = [ + 'driver' => 'sqlite', + $options[ 'database_file' ] + ]; + + break; + } + } + + if (!isset($attr)) + { + throw new InvalidArgumentException('Incorrect connection options'); + } + + $driver = $attr[ 'driver' ]; + + if (!in_array($driver, PDO::getAvailableDrivers())) + { + throw new InvalidArgumentException("Unsupported PDO driver: {$driver}"); + } + + unset($attr[ 'driver' ]); + + $stack = []; + + foreach ($attr as $key => $value) + { + $stack[] = is_int($key) ? $value : $key . '=' . $value; + } + + $dsn = $driver . ':' . implode(';', $stack); + + if ( + in_array($this->type, ['mysql', 'pgsql', 'sybase', 'mssql']) && + isset($options[ 'charset' ]) + ) + { + $commands[] = "SET NAMES '{$options[ 'charset' ]}'" . ( + $this->type === 'mysql' && isset($options[ 'collation' ]) ? + " COLLATE '{$options[ 'collation' ]}'" : '' + ); + } + + $this->dsn = $dsn; + + try { + $this->pdo = new PDO( + $dsn, + isset($options[ 'username' ]) ? $options[ 'username' ] : null, + isset($options[ 'password' ]) ? $options[ 'password' ] : null, + $option + ); + + foreach ($commands as $value) + { + $this->pdo->exec($value); + } + } + catch (PDOException $e) { + throw new PDOException($e->getMessage()); + } + } + + public function query($query, $map = []) + { + $raw = $this->raw($query, $map); + + $query = $this->buildRaw($raw, $map); + + return $this->exec($query, $map); + } + + public function exec($query, $map = []) + { + $this->statement = null; + + if ($this->debug_mode) + { + echo $this->generate($query, $map); + + $this->debug_mode = false; + + return false; + } + + if ($this->logging) + { + $this->logs[] = [$query, $map]; + } + else + { + $this->logs = [[$query, $map]]; + } + + $statement = $this->pdo->prepare($query); + + if (!$statement) + { + $this->errorInfo = $this->pdo->errorInfo(); + $this->statement = null; + + return false; + } + + $this->statement = $statement; + + foreach ($map as $key => $value) + { + $statement->bindValue($key, $value[ 0 ], $value[ 1 ]); + } + + $execute = $statement->execute(); + + $this->errorInfo = $statement->errorInfo(); + + if (!$execute) + { + $this->statement = null; + } + + return $statement; + } + + protected function generate($query, $map) + { + $identifier = [ + 'mysql' => '`$1`', + 'mssql' => '[$1]' + ]; + + $query = preg_replace( + '/"([a-zA-Z0-9_]+)"/i', + isset($identifier[ $this->type ]) ? $identifier[ $this->type ] : '"$1"', + $query + ); + + foreach ($map as $key => $value) + { + if ($value[ 1 ] === PDO::PARAM_STR) + { + $replace = $this->quote($value[ 0 ]); + } + elseif ($value[ 1 ] === PDO::PARAM_NULL) + { + $replace = 'NULL'; + } + elseif ($value[ 1 ] === PDO::PARAM_LOB) + { + $replace = '{LOB_DATA}'; + } + else + { + $replace = $value[ 0 ]; + } + + $query = str_replace($key, $replace, $query); + } + + return $query; + } + + public static function raw($string, $map = []) + { + $raw = new Raw(); + + $raw->map = $map; + $raw->value = $string; + + return $raw; + } + + protected function isRaw($object) + { + return $object instanceof Raw; + } + + protected function buildRaw($raw, &$map) + { + if (!$this->isRaw($raw)) + { + return false; + } + + $query = preg_replace_callback( + '/(([`\']).*?)?((FROM|TABLE|INTO|UPDATE|JOIN)\s*)?\<(([a-zA-Z0-9_]+)(\.[a-zA-Z0-9_]+)?)\>(.*?\2)?/i', + function ($matches) + { + if (!empty($matches[ 2 ]) && isset($matches[ 8 ])) + { + return $matches[ 0 ]; + } + + if (!empty($matches[ 4 ])) + { + return $matches[ 1 ] . $matches[ 4 ] . ' ' . $this->tableQuote($matches[ 5 ]); + } + + return $matches[ 1 ] . $this->columnQuote($matches[ 5 ]); + }, + $raw->value); + + $raw_map = $raw->map; + + if (!empty($raw_map)) + { + foreach ($raw_map as $key => $value) + { + $map[ $key ] = $this->typeMap($value, gettype($value)); + } + } + + return $query; + } + + public function quote($string) + { + return $this->pdo->quote($string); + } + + protected function tableQuote($table) + { + if (!preg_match('/^[a-zA-Z0-9_]+$/i', $table)) + { + throw new InvalidArgumentException("Incorrect table name \"$table\""); + } + + return '"' . $this->prefix . $table . '"'; + } + + protected function mapKey() + { + return ':MeDoO_' . $this->guid++ . '_mEdOo'; + } + + protected function typeMap($value, $type) + { + $map = [ + 'NULL' => PDO::PARAM_NULL, + 'integer' => PDO::PARAM_INT, + 'double' => PDO::PARAM_STR, + 'boolean' => PDO::PARAM_BOOL, + 'string' => PDO::PARAM_STR, + 'object' => PDO::PARAM_STR, + 'resource' => PDO::PARAM_LOB + ]; + + if ($type === 'boolean') + { + $value = ($value ? '1' : '0'); + } + elseif ($type === 'NULL') + { + $value = null; + } + + return [$value, $map[ $type ]]; + } + + protected function columnQuote($string) + { + if (!preg_match('/^[a-zA-Z0-9_]+(\.?[a-zA-Z0-9_]+)?$/i', $string)) + { + throw new InvalidArgumentException("Incorrect column name \"$string\""); + } + + if (strpos($string, '.') !== false) + { + return '"' . $this->prefix . str_replace('.', '"."', $string) . '"'; + } + + return '"' . $string . '"'; + } + + protected function columnPush(&$columns, &$map, $root, $is_join = false) + { + if ($columns === '*') + { + return $columns; + } + + $stack = []; + + if (is_string($columns)) + { + $columns = [$columns]; + } + + foreach ($columns as $key => $value) + { + if (!is_int($key) && is_array($value) && $root && count(array_keys($columns)) === 1) + { + $stack[] = $this->columnQuote($key); + + $stack[] = $this->columnPush($value, $map, false, $is_join); + } + elseif (is_array($value)) + { + $stack[] = $this->columnPush($value, $map, false, $is_join); + } + elseif (!is_int($key) && $raw = $this->buildRaw($value, $map)) + { + preg_match('/(?[a-zA-Z0-9_\.]+)(\s*\[(?(String|Bool|Int|Number))\])?/i', $key, $match); + + $stack[] = $raw . ' AS ' . $this->columnQuote($match[ 'column' ]); + } + elseif (is_int($key) && is_string($value)) + { + if ($is_join && strpos($value, '*') !== false) + { + throw new InvalidArgumentException('Cannot use table.* to select all columns while joining table'); + } + + preg_match('/(?[a-zA-Z0-9_\.]+)(?:\s*\((?[a-zA-Z0-9_]+)\))?(?:\s*\[(?(?:String|Bool|Int|Number|Object|JSON))\])?/i', $value, $match); + + if (!empty($match[ 'alias' ])) + { + $stack[] = $this->columnQuote($match[ 'column' ]) . ' AS ' . $this->columnQuote($match[ 'alias' ]); + + $columns[ $key ] = $match[ 'alias' ]; + + if (!empty($match[ 'type' ])) + { + $columns[ $key ] .= ' [' . $match[ 'type' ] . ']'; + } + } + else + { + $stack[] = $this->columnQuote($match[ 'column' ]); + } + } + } + + return implode(',', $stack); + } + + protected function arrayQuote($array) + { + $stack = []; + + foreach ($array as $value) + { + $stack[] = is_int($value) ? $value : $this->pdo->quote($value); + } + + return implode(',', $stack); + } + + protected function innerConjunct($data, $map, $conjunctor, $outer_conjunctor) + { + $stack = []; + + foreach ($data as $value) + { + $stack[] = '(' . $this->dataImplode($value, $map, $conjunctor) . ')'; + } + + return implode($outer_conjunctor . ' ', $stack); + } + + protected function dataImplode($data, &$map, $conjunctor) + { + $stack = []; + + foreach ($data as $key => $value) + { + $type = gettype($value); + + if ( + $type === 'array' && + preg_match("/^(AND|OR)(\s+#.*)?$/", $key, $relation_match) + ) + { + $relationship = $relation_match[ 1 ]; + + $stack[] = $value !== array_keys(array_keys($value)) ? + '(' . $this->dataImplode($value, $map, ' ' . $relationship) . ')' : + '(' . $this->innerConjunct($value, $map, ' ' . $relationship, $conjunctor) . ')'; + + continue; + } + + $map_key = $this->mapKey(); + + if ( + is_int($key) && + preg_match('/([a-zA-Z0-9_\.]+)\[(?\>\=?|\<\=?|\!?\=)\]([a-zA-Z0-9_\.]+)/i', $value, $match) + ) + { + $stack[] = $this->columnQuote($match[ 1 ]) . ' ' . $match[ 'operator' ] . ' ' . $this->columnQuote($match[ 3 ]); + } + else + { + preg_match('/([a-zA-Z0-9_\.]+)(\[(?\>\=?|\<\=?|\!|\<\>|\>\<|\!?~|REGEXP)\])?/i', $key, $match); + $column = $this->columnQuote($match[ 1 ]); + + if (isset($match[ 'operator' ])) + { + $operator = $match[ 'operator' ]; + + if (in_array($operator, ['>', '>=', '<', '<='])) + { + $condition = $column . ' ' . $operator . ' '; + + if (is_numeric($value)) + { + $condition .= $map_key; + $map[ $map_key ] = [$value, is_float($value) ? PDO::PARAM_STR : PDO::PARAM_INT]; + } + elseif ($raw = $this->buildRaw($value, $map)) + { + $condition .= $raw; + } + else + { + $condition .= $map_key; + $map[ $map_key ] = [$value, PDO::PARAM_STR]; + } + + $stack[] = $condition; + } + elseif ($operator === '!') + { + switch ($type) + { + case 'NULL': + $stack[] = $column . ' IS NOT NULL'; + break; + + case 'array': + $placeholders = []; + + foreach ($value as $index => $item) + { + $stack_key = $map_key . $index . '_i'; + + $placeholders[] = $stack_key; + $map[ $stack_key ] = $this->typeMap($item, gettype($item)); + } + + $stack[] = $column . ' NOT IN (' . implode(', ', $placeholders) . ')'; + break; + + case 'object': + if ($raw = $this->buildRaw($value, $map)) + { + $stack[] = $column . ' != ' . $raw; + } + break; + + case 'integer': + case 'double': + case 'boolean': + case 'string': + $stack[] = $column . ' != ' . $map_key; + $map[ $map_key ] = $this->typeMap($value, $type); + break; + } + } + elseif ($operator === '~' || $operator === '!~') + { + if ($type !== 'array') + { + $value = [ $value ]; + } + + $connector = ' OR '; + $data = array_values($value); + + if (is_array($data[ 0 ])) + { + if (isset($value[ 'AND' ]) || isset($value[ 'OR' ])) + { + $connector = ' ' . array_keys($value)[ 0 ] . ' '; + $value = $data[ 0 ]; + } + } + + $like_clauses = []; + + foreach ($value as $index => $item) + { + $item = strval($item); + + if (!preg_match('/(\[.+\]|[\*\?\!\%#^-_]|%.+|.+%)/', $item)) + { + $item = '%' . $item . '%'; + } + + $like_clauses[] = $column . ($operator === '!~' ? ' NOT' : '') . ' LIKE ' . $map_key . 'L' . $index; + $map[ $map_key . 'L' . $index ] = [$item, PDO::PARAM_STR]; + } + + $stack[] = '(' . implode($connector, $like_clauses) . ')'; + } + elseif ($operator === '<>' || $operator === '><') + { + if ($type === 'array') + { + if ($operator === '><') + { + $column .= ' NOT'; + } + + $stack[] = '(' . $column . ' BETWEEN ' . $map_key . 'a AND ' . $map_key . 'b)'; + + $data_type = (is_numeric($value[ 0 ]) && is_numeric($value[ 1 ])) ? PDO::PARAM_INT : PDO::PARAM_STR; + + $map[ $map_key . 'a' ] = [$value[ 0 ], $data_type]; + $map[ $map_key . 'b' ] = [$value[ 1 ], $data_type]; + } + } + elseif ($operator === 'REGEXP') + { + $stack[] = $column . ' REGEXP ' . $map_key; + $map[ $map_key ] = [$value, PDO::PARAM_STR]; + } + } + else + { + switch ($type) + { + case 'NULL': + $stack[] = $column . ' IS NULL'; + break; + + case 'array': + $placeholders = []; + + foreach ($value as $index => $item) + { + $stack_key = $map_key . $index . '_i'; + + $placeholders[] = $stack_key; + $map[ $stack_key ] = $this->typeMap($item, gettype($item)); + } + + $stack[] = $column . ' IN (' . implode(', ', $placeholders) . ')'; + break; + + case 'object': + if ($raw = $this->buildRaw($value, $map)) + { + $stack[] = $column . ' = ' . $raw; + } + break; + + case 'integer': + case 'double': + case 'boolean': + case 'string': + $stack[] = $column . ' = ' . $map_key; + $map[ $map_key ] = $this->typeMap($value, $type); + break; + } + } + } + } + + return implode($conjunctor . ' ', $stack); + } + + protected function whereClause($where, &$map) + { + $where_clause = ''; + + if (is_array($where)) + { + $where_keys = array_keys($where); + + $conditions = array_diff_key($where, array_flip( + ['GROUP', 'ORDER', 'HAVING', 'LIMIT', 'LIKE', 'MATCH'] + )); + + if (!empty($conditions)) + { + $where_clause = ' WHERE ' . $this->dataImplode($conditions, $map, ' AND'); + } + + if (isset($where[ 'MATCH' ]) && $this->type === 'mysql') + { + $MATCH = $where[ 'MATCH' ]; + + if (is_array($MATCH) && isset($MATCH[ 'columns' ], $MATCH[ 'keyword' ])) + { + $mode = ''; + + $mode_array = [ + 'natural' => 'IN NATURAL LANGUAGE MODE', + 'natural+query' => 'IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION', + 'boolean' => 'IN BOOLEAN MODE', + 'query' => 'WITH QUERY EXPANSION' + ]; + + if (isset($MATCH[ 'mode' ], $mode_array[ $MATCH[ 'mode' ] ])) + { + $mode = ' ' . $mode_array[ $MATCH[ 'mode' ] ]; + } + + $columns = implode(', ', array_map([$this, 'columnQuote'], $MATCH[ 'columns' ])); + $map_key = $this->mapKey(); + $map[ $map_key ] = [$MATCH[ 'keyword' ], PDO::PARAM_STR]; + + $where_clause .= ($where_clause !== '' ? ' AND ' : ' WHERE') . ' MATCH (' . $columns . ') AGAINST (' . $map_key . $mode . ')'; + } + } + + if (isset($where[ 'GROUP' ])) + { + $GROUP = $where[ 'GROUP' ]; + + if (is_array($GROUP)) + { + $stack = []; + + foreach ($GROUP as $column => $value) + { + $stack[] = $this->columnQuote($value); + } + + $where_clause .= ' GROUP BY ' . implode(',', $stack); + } + elseif ($raw = $this->buildRaw($GROUP, $map)) + { + $where_clause .= ' GROUP BY ' . $raw; + } + else + { + $where_clause .= ' GROUP BY ' . $this->columnQuote($GROUP); + } + + if (isset($where[ 'HAVING' ])) + { + if ($raw = $this->buildRaw($where[ 'HAVING' ], $map)) + { + $where_clause .= ' HAVING ' . $raw; + } + else + { + $where_clause .= ' HAVING ' . $this->dataImplode($where[ 'HAVING' ], $map, ' AND'); + } + } + } + + if (isset($where[ 'ORDER' ])) + { + $ORDER = $where[ 'ORDER' ]; + + if (is_array($ORDER)) + { + $stack = []; + + foreach ($ORDER as $column => $value) + { + if (is_array($value)) + { + $stack[] = 'FIELD(' . $this->columnQuote($column) . ', ' . $this->arrayQuote($value) . ')'; + } + elseif ($value === 'ASC' || $value === 'DESC') + { + $stack[] = $this->columnQuote($column) . ' ' . $value; + } + elseif (is_int($column)) + { + $stack[] = $this->columnQuote($value); + } + } + + $where_clause .= ' ORDER BY ' . implode(',', $stack); + } + elseif ($raw = $this->buildRaw($ORDER, $map)) + { + $where_clause .= ' ORDER BY ' . $raw; + } + else + { + $where_clause .= ' ORDER BY ' . $this->columnQuote($ORDER); + } + + if ( + isset($where[ 'LIMIT' ]) && + in_array($this->type, ['oracle', 'mssql']) + ) + { + $LIMIT = $where[ 'LIMIT' ]; + + if (is_numeric($LIMIT)) + { + $LIMIT = [0, $LIMIT]; + } + + if ( + is_array($LIMIT) && + is_numeric($LIMIT[ 0 ]) && + is_numeric($LIMIT[ 1 ]) + ) + { + $where_clause .= ' OFFSET ' . $LIMIT[ 0 ] . ' ROWS FETCH NEXT ' . $LIMIT[ 1 ] . ' ROWS ONLY'; + } + } + } + + if (isset($where[ 'LIMIT' ]) && !in_array($this->type, ['oracle', 'mssql'])) + { + $LIMIT = $where[ 'LIMIT' ]; + + if (is_numeric($LIMIT)) + { + $where_clause .= ' LIMIT ' . $LIMIT; + } + elseif ( + is_array($LIMIT) && + is_numeric($LIMIT[ 0 ]) && + is_numeric($LIMIT[ 1 ]) + ) + { + $where_clause .= ' LIMIT ' . $LIMIT[ 1 ] . ' OFFSET ' . $LIMIT[ 0 ]; + } + } + } + elseif ($raw = $this->buildRaw($where, $map)) + { + $where_clause .= ' ' . $raw; + } + + return $where_clause; + } + + protected function selectContext($table, &$map, $join, &$columns = null, $where = null, $column_fn = null) + { + preg_match('/(?[a-zA-Z0-9_]+)\s*\((?[a-zA-Z0-9_]+)\)/i', $table, $table_match); + + if (isset($table_match[ 'table' ], $table_match[ 'alias' ])) + { + $table = $this->tableQuote($table_match[ 'table' ]); + + $table_query = $table . ' AS ' . $this->tableQuote($table_match[ 'alias' ]); + } + else + { + $table = $this->tableQuote($table); + + $table_query = $table; + } + + $is_join = false; + $join_key = is_array($join) ? array_keys($join) : null; + + if ( + isset($join_key[ 0 ]) && + strpos($join_key[ 0 ], '[') === 0 + ) + { + $is_join = true; + $table_query .= ' ' . $this->buildJoin($table, $join); + } + else + { + if (is_null($columns)) + { + if ( + !is_null($where) || + (is_array($join) && isset($column_fn)) + ) + { + $where = $join; + $columns = null; + } + else + { + $where = null; + $columns = $join; + } + } + else + { + $where = $columns; + $columns = $join; + } + } + + if (isset($column_fn)) + { + if ($column_fn === 1) + { + $column = '1'; + + if (is_null($where)) + { + $where = $columns; + } + } + elseif ($raw = $this->buildRaw($column_fn, $map)) + { + $column = $raw; + } + else + { + if (empty($columns) || $this->isRaw($columns)) + { + $columns = '*'; + $where = $join; + } + + $column = $column_fn . '(' . $this->columnPush($columns, $map, true) . ')'; + } + } + else + { + $column = $this->columnPush($columns, $map, true, $is_join); + } + + return 'SELECT ' . $column . ' FROM ' . $table_query . $this->whereClause($where, $map); + } + + protected function buildJoin($table, $join) + { + $table_join = []; + + $join_array = [ + '>' => 'LEFT', + '<' => 'RIGHT', + '<>' => 'FULL', + '><' => 'INNER' + ]; + + foreach($join as $sub_table => $relation) + { + preg_match('/(\[(?\<\>?|\>\[a-zA-Z0-9_]+)\s?(\((?[a-zA-Z0-9_]+)\))?/', $sub_table, $match); + + if ($match[ 'join' ] !== '' && $match[ 'table' ] !== '') + { + if (is_string($relation)) + { + $relation = 'USING ("' . $relation . '")'; + } + + if (is_array($relation)) + { + // For ['column1', 'column2'] + if (isset($relation[ 0 ])) + { + $relation = 'USING ("' . implode('", "', $relation) . '")'; + } + else + { + $joins = []; + + foreach ($relation as $key => $value) + { + $joins[] = ( + strpos($key, '.') > 0 ? + // For ['tableB.column' => 'column'] + $this->columnQuote($key) : + + // For ['column1' => 'column2'] + $table . '."' . $key . '"' + ) . + ' = ' . + $this->tableQuote(isset($match[ 'alias' ]) ? $match[ 'alias' ] : $match[ 'table' ]) . '."' . $value . '"'; + } + + $relation = 'ON ' . implode(' AND ', $joins); + } + } + + $table_name = $this->tableQuote($match[ 'table' ]) . ' '; + + if (isset($match[ 'alias' ])) + { + $table_name .= 'AS ' . $this->tableQuote($match[ 'alias' ]) . ' '; + } + + $table_join[] = $join_array[ $match[ 'join' ] ] . ' JOIN ' . $table_name . $relation; + } + } + + return implode(' ', $table_join); + } + + protected function columnMap($columns, &$stack, $root) + { + if ($columns === '*') + { + return $stack; + } + + foreach ($columns as $key => $value) + { + if (is_int($key)) + { + preg_match('/([a-zA-Z0-9_]+\.)?(?[a-zA-Z0-9_]+)(?:\s*\((?[a-zA-Z0-9_]+)\))?(?:\s*\[(?(?:String|Bool|Int|Number|Object|JSON))\])?/i', $value, $key_match); + + $column_key = !empty($key_match[ 'alias' ]) ? + $key_match[ 'alias' ] : + $key_match[ 'column' ]; + + if (isset($key_match[ 'type' ])) + { + $stack[ $value ] = [$column_key, $key_match[ 'type' ]]; + } + else + { + $stack[ $value ] = [$column_key, 'String']; + } + } + elseif ($this->isRaw($value)) + { + preg_match('/([a-zA-Z0-9_]+\.)?(?[a-zA-Z0-9_]+)(\s*\[(?(String|Bool|Int|Number))\])?/i', $key, $key_match); + + $column_key = $key_match[ 'column' ]; + + if (isset($key_match[ 'type' ])) + { + $stack[ $key ] = [$column_key, $key_match[ 'type' ]]; + } + else + { + $stack[ $key ] = [$column_key, 'String']; + } + } + elseif (!is_int($key) && is_array($value)) + { + if ($root && count(array_keys($columns)) === 1) + { + $stack[ $key ] = [$key, 'String']; + } + + $this->columnMap($value, $stack, false); + } + } + + return $stack; + } + + protected function dataMap($data, $columns, $column_map, &$stack, $root, &$result) + { + if ($root) + { + $columns_key = array_keys($columns); + + if (count($columns_key) === 1 && is_array($columns[$columns_key[0]])) + { + $index_key = array_keys($columns)[0]; + $data_key = preg_replace("/^[a-zA-Z0-9_]+\./i", "", $index_key); + + $current_stack = []; + + foreach ($data as $item) + { + $this->dataMap($data, $columns[ $index_key ], $column_map, $current_stack, false, $result); + + $index = $data[ $data_key ]; + + $result[ $index ] = $current_stack; + } + } + else + { + $current_stack = []; + + $this->dataMap($data, $columns, $column_map, $current_stack, false, $result); + + $result[] = $current_stack; + } + + return; + } + + foreach ($columns as $key => $value) + { + $isRaw = $this->isRaw($value); + + if (is_int($key) || $isRaw) + { + $map = $column_map[ $isRaw ? $key : $value ]; + + $column_key = $map[ 0 ]; + + $item = $data[ $column_key ]; + + if (isset($map[ 1 ])) + { + if ($isRaw && in_array($map[ 1 ], ['Object', 'JSON'])) + { + continue; + } + + if (is_null($item)) + { + $stack[ $column_key ] = null; + continue; + } + + switch ($map[ 1 ]) + { + case 'Number': + $stack[ $column_key ] = (double) $item; + break; + + case 'Int': + $stack[ $column_key ] = (int) $item; + break; + + case 'Bool': + $stack[ $column_key ] = (bool) $item; + break; + + case 'Object': + $stack[ $column_key ] = unserialize($item); + break; + + case 'JSON': + $stack[ $column_key ] = json_decode($item, true); + break; + + case 'String': + $stack[ $column_key ] = $item; + break; + } + } + else + { + $stack[ $column_key ] = $item; + } + } + else + { + $current_stack = []; + + $this->dataMap($data, $value, $column_map, $current_stack, false, $result); + + $stack[ $key ] = $current_stack; + } + } + } + + public function create($table, $columns, $options = null) + { + $stack = []; + + $tableName = $this->prefix . $table; + + foreach ($columns as $name => $definition) + { + if (is_int($name)) + { + $stack[] = preg_replace('/\<([a-zA-Z0-9_]+)\>/i', '"$1"', $definition); + } + elseif (is_array($definition)) + { + $stack[] = $name . ' ' . implode(' ', $definition); + } + elseif (is_string($definition)) + { + $stack[] = $name . ' ' . $this->query($definition); + } + } + + $table_option = ''; + + if (is_array($options)) + { + $option_stack = []; + + foreach ($options as $key => $value) + { + if (is_string($value) || is_int($value)) + { + $option_stack[] = "$key = $value"; + } + } + + $table_option = ' ' . implode(', ', $option_stack); + } + elseif (is_string($options)) + { + $table_option = ' ' . $options; + } + + return $this->exec("CREATE TABLE IF NOT EXISTS $tableName (" . implode(', ', $stack) . ")$table_option"); + } + + public function drop($table) + { + $tableName = $this->prefix . $table; + + return $this->exec("DROP TABLE IF EXISTS $tableName"); + } + + public function select($table, $join, $columns = null, $where = null) + { + $map = []; + $result = []; + $column_map = []; + + $index = 0; + + $column = $where === null ? $join : $columns; + + $is_single = (is_string($column) && $column !== '*'); + + $query = $this->exec($this->selectContext($table, $map, $join, $columns, $where), $map); + + $this->columnMap($columns, $column_map, true); + + if (!$this->statement) + { + return false; + } + + if ($columns === '*') + { + return $query->fetchAll(PDO::FETCH_ASSOC); + } + + while ($data = $query->fetch(PDO::FETCH_ASSOC)) + { + $current_stack = []; + + $this->dataMap($data, $columns, $column_map, $current_stack, true, $result); + } + + if ($is_single) + { + $single_result = []; + $result_key = $column_map[ $column ][ 0 ]; + + foreach ($result as $item) + { + $single_result[] = $item[ $result_key ]; + } + + return $single_result; + } + + return $result; + } + + public function insert($table, $datas) + { + $stack = []; + $columns = []; + $fields = []; + $map = []; + + if (!isset($datas[ 0 ])) + { + $datas = [$datas]; + } + + foreach ($datas as $data) + { + foreach ($data as $key => $value) + { + $columns[] = $key; + } + } + + $columns = array_unique($columns); + + foreach ($datas as $data) + { + $values = []; + + foreach ($columns as $key) + { + if ($raw = $this->buildRaw($data[ $key ], $map)) + { + $values[] = $raw; + continue; + } + + $map_key = $this->mapKey(); + + $values[] = $map_key; + + if (!isset($data[ $key ])) + { + $map[ $map_key ] = [null, PDO::PARAM_NULL]; + } + else + { + $value = $data[ $key ]; + + $type = gettype($value); + + switch ($type) + { + case 'array': + $map[ $map_key ] = [ + strpos($key, '[JSON]') === strlen($key) - 6 ? + json_encode($value) : + serialize($value), + PDO::PARAM_STR + ]; + break; + + case 'object': + $value = serialize($value); + + case 'NULL': + case 'resource': + case 'boolean': + case 'integer': + case 'double': + case 'string': + $map[ $map_key ] = $this->typeMap($value, $type); + break; + } + } + } + + $stack[] = '(' . implode(', ', $values) . ')'; + } + + foreach ($columns as $key) + { + $fields[] = $this->columnQuote(preg_replace("/(\s*\[JSON\]$)/i", '', $key)); + } + + return $this->exec('INSERT INTO ' . $this->tableQuote($table) . ' (' . implode(', ', $fields) . ') VALUES ' . implode(', ', $stack), $map); + } + + public function update($table, $data, $where = null) + { + $fields = []; + $map = []; + + foreach ($data as $key => $value) + { + $column = $this->columnQuote(preg_replace("/(\s*\[(JSON|\+|\-|\*|\/)\]$)/i", '', $key)); + + if ($raw = $this->buildRaw($value, $map)) + { + $fields[] = $column . ' = ' . $raw; + continue; + } + + $map_key = $this->mapKey(); + + preg_match('/(?[a-zA-Z0-9_]+)(\[(?\+|\-|\*|\/)\])?/i', $key, $match); + + if (isset($match[ 'operator' ])) + { + if (is_numeric($value)) + { + $fields[] = $column . ' = ' . $column . ' ' . $match[ 'operator' ] . ' ' . $value; + } + } + else + { + $fields[] = $column . ' = ' . $map_key; + + $type = gettype($value); + + switch ($type) + { + case 'array': + $map[ $map_key ] = [ + strpos($key, '[JSON]') === strlen($key) - 6 ? + json_encode($value) : + serialize($value), + PDO::PARAM_STR + ]; + break; + + case 'object': + $value = serialize($value); + + case 'NULL': + case 'resource': + case 'boolean': + case 'integer': + case 'double': + case 'string': + $map[ $map_key ] = $this->typeMap($value, $type); + break; + } + } + } + + return $this->exec('UPDATE ' . $this->tableQuote($table) . ' SET ' . implode(', ', $fields) . $this->whereClause($where, $map), $map); + } + + public function delete($table, $where) + { + $map = []; + + return $this->exec('DELETE FROM ' . $this->tableQuote($table) . $this->whereClause($where, $map), $map); + } + + public function replace($table, $columns, $where = null) + { + if (!is_array($columns) || empty($columns)) + { + return false; + } + + $map = []; + $stack = []; + + foreach ($columns as $column => $replacements) + { + if (is_array($replacements)) + { + foreach ($replacements as $old => $new) + { + $map_key = $this->mapKey(); + + $stack[] = $this->columnQuote($column) . ' = REPLACE(' . $this->columnQuote($column) . ', ' . $map_key . 'a, ' . $map_key . 'b)'; + + $map[ $map_key . 'a' ] = [$old, PDO::PARAM_STR]; + $map[ $map_key . 'b' ] = [$new, PDO::PARAM_STR]; + } + } + } + + if (!empty($stack)) + { + return $this->exec('UPDATE ' . $this->tableQuote($table) . ' SET ' . implode(', ', $stack) . $this->whereClause($where, $map), $map); + } + + return false; + } + + public function get($table, $join = null, $columns = null, $where = null) + { + $map = []; + $result = []; + $column_map = []; + $current_stack = []; + + if ($where === null) + { + $column = $join; + unset($columns[ 'LIMIT' ]); + } + else + { + $column = $columns; + unset($where[ 'LIMIT' ]); + } + + $is_single = (is_string($column) && $column !== '*'); + + $query = $this->exec($this->selectContext($table, $map, $join, $columns, $where) . ' LIMIT 1', $map); + + if (!$this->statement) + { + return false; + } + + $data = $query->fetchAll(PDO::FETCH_ASSOC); + + if (isset($data[ 0 ])) + { + if ($column === '*') + { + return $data[ 0 ]; + } + + $this->columnMap($columns, $column_map, true); + + $this->dataMap($data[ 0 ], $columns, $column_map, $current_stack, true, $result); + + if ($is_single) + { + return $result[ 0 ][ $column_map[ $column ][ 0 ] ]; + } + + return $result[ 0 ]; + } + } + + public function has($table, $join, $where = null) + { + $map = []; + $column = null; + + if ($this->type === 'mssql') + { + $query = $this->exec($this->selectContext($table, $map, $join, $column, $where, Medoo::raw('TOP 1 1')), $map); + } + else + { + $query = $this->exec('SELECT EXISTS(' . $this->selectContext($table, $map, $join, $column, $where, 1) . ')', $map); + } + + if (!$this->statement) + { + return false; + } + + $result = $query->fetchColumn(); + + return $result === '1' || $result === 1 || $result === true; + } + + public function rand($table, $join = null, $columns = null, $where = null) + { + $type = $this->type; + + $order = 'RANDOM()'; + + if ($type === 'mysql') + { + $order = 'RAND()'; + } + elseif ($type === 'mssql') + { + $order = 'NEWID()'; + } + + $order_raw = $this->raw($order); + + if ($where === null) + { + if ($columns === null) + { + $columns = [ + 'ORDER' => $order_raw + ]; + } + else + { + $column = $join; + unset($columns[ 'ORDER' ]); + + $columns[ 'ORDER' ] = $order_raw; + } + } + else + { + unset($where[ 'ORDER' ]); + + $where[ 'ORDER' ] = $order_raw; + } + + return $this->select($table, $join, $columns, $where); + } + + private function aggregate($type, $table, $join = null, $column = null, $where = null) + { + $map = []; + + $query = $this->exec($this->selectContext($table, $map, $join, $column, $where, strtoupper($type)), $map); + + if (!$this->statement) + { + return false; + } + + $number = $query->fetchColumn(); + + return is_numeric($number) ? $number + 0 : $number; + } + + public function count($table, $join = null, $column = null, $where = null) + { + return $this->aggregate('count', $table, $join, $column, $where); + } + + public function avg($table, $join, $column = null, $where = null) + { + return $this->aggregate('avg', $table, $join, $column, $where); + } + + public function max($table, $join, $column = null, $where = null) + { + return $this->aggregate('max', $table, $join, $column, $where); + } + + public function min($table, $join, $column = null, $where = null) + { + return $this->aggregate('min', $table, $join, $column, $where); + } + + public function sum($table, $join, $column = null, $where = null) + { + return $this->aggregate('sum', $table, $join, $column, $where); + } + + public function action($actions) + { + if (is_callable($actions)) + { + $this->pdo->beginTransaction(); + + try { + $result = $actions($this); + + if ($result === false) + { + $this->pdo->rollBack(); + } + else + { + $this->pdo->commit(); + } + } + catch (Exception $e) { + $this->pdo->rollBack(); + + throw $e; + } + + return $result; + } + + return false; + } + + public function id() + { + if ($this->statement == null) + { + return null; + } + + $type = $this->type; + + if ($type === 'oracle') + { + return 0; + } + elseif ($type === 'pgsql') + { + return $this->pdo->query('SELECT LASTVAL()')->fetchColumn(); + } + + $lastId = $this->pdo->lastInsertId(); + + if ($lastId != "0" && $lastId != "") + { + return $lastId; + } + + return null; + } + + public function debug() + { + $this->debug_mode = true; + + return $this; + } + + public function error() + { + return $this->errorInfo; + } + + public function last() + { + $log = end($this->logs); + + return $this->generate($log[ 0 ], $log[ 1 ]); + } + + public function log() + { + return array_map(function ($log) + { + return $this->generate($log[ 0 ], $log[ 1 ]); + }, + $this->logs + ); + } + + public function info() + { + $output = [ + 'server' => 'SERVER_INFO', + 'driver' => 'DRIVER_NAME', + 'client' => 'CLIENT_VERSION', + 'version' => 'SERVER_VERSION', + 'connection' => 'CONNECTION_STATUS' + ]; + + foreach ($output as $key => $value) + { + $output[ $key ] = @$this->pdo->getAttribute(constant('PDO::ATTR_' . $value)); + } + + $output[ 'dsn' ] = $this->dsn; + + return $output; + } +} \ No newline at end of file diff --git a/02.php/extension/Medoo/Medoo.php b/02.php/extension/Medoo/Medoo.php deleted file mode 100644 index bfc864b..0000000 --- a/02.php/extension/Medoo/Medoo.php +++ /dev/null @@ -1,2231 +0,0 @@ - 'mysql', - * 'database' => 'name', - * 'host' => 'localhost', - * 'username' => 'your_username', - * 'password' => 'your_password', - * - * // [optional] - * 'charset' => 'utf8mb4', - * 'port' => 3306, - * 'prefix' => 'PREFIX_' - * ]); - * ``` - * - * @param array $options Connection options - * @return Medoo - * @throws PDOException - * @link https://medoo.in/api/new - * @codeCoverageIgnore - */ - - public function __construct(array $options) - { - if (isset($options['prefix'])) { - $this->prefix = $options['prefix']; - } - - if (isset($options['testMode']) && $options['testMode'] == true) { - $this->testMode = true; - return; - } - - $options['type'] = $options['type'] ?? $options['database_type']; - - if (!isset($options['pdo'])) { - $options['database'] = $options['database'] ?? $options['database_name']; - - if (!isset($options['socket'])) { - $options['host'] = $options['host'] ?? $options['server'] ?? false; - } - } - - if (isset($options['type'])) { - $this->type = strtolower($options['type']); - - if ($this->type === 'mariadb') { - $this->type = 'mysql'; - } - } - - if (isset($options['logging']) && is_bool($options['logging'])) { - $this->logging = $options['logging']; - } - - $option = $options['option'] ?? []; - $commands = (isset($options['command']) && is_array($options['command'])) ? - $options['command'] : - []; - - switch ($this->type) { - - case 'mysql': - // Make MySQL using standard quoted identifier. - $commands[] = 'SET SQL_MODE=ANSI_QUOTES'; - - break; - - case 'mssql': - // Keep MSSQL QUOTED_IDENTIFIER is ON for standard quoting. - $commands[] = 'SET QUOTED_IDENTIFIER ON'; - - // Make ANSI_NULLS is ON for NULL value. - $commands[] = 'SET ANSI_NULLS ON'; - - break; - } - - if (isset($options['pdo'])) { - if (!$options['pdo'] instanceof PDO) { - throw new InvalidArgumentException('Invalid PDO object supplied.'); - } - - $this->pdo = $options['pdo']; - - foreach ($commands as $value) { - $this->pdo->exec($value); - } - - return; - } - - if (isset($options['dsn'])) { - if (is_array($options['dsn']) && isset($options['dsn']['driver'])) { - $attr = $options['dsn']; - } else { - throw new InvalidArgumentException('Invalid DSN option supplied.'); - } - } else { - if ( - isset($options['port']) && - is_int($options['port'] * 1) - ) { - $port = $options['port']; - } - - $isPort = isset($port); - - switch ($this->type) { - - case 'mysql': - $attr = [ - 'driver' => 'mysql', - 'dbname' => $options['database'] - ]; - - if (isset($options['socket'])) { - $attr['unix_socket'] = $options['socket']; - } else { - $attr['host'] = $options['host']; - - if ($isPort) { - $attr['port'] = $port; - } - } - - break; - - case 'pgsql': - $attr = [ - 'driver' => 'pgsql', - 'host' => $options['host'], - 'dbname' => $options['database'] - ]; - - if ($isPort) { - $attr['port'] = $port; - } - - break; - - case 'sybase': - $attr = [ - 'driver' => 'dblib', - 'host' => $options['host'], - 'dbname' => $options['database'] - ]; - - if ($isPort) { - $attr['port'] = $port; - } - - break; - - case 'oracle': - $attr = [ - 'driver' => 'oci', - 'dbname' => $options['host'] ? - '//' . $options['host'] . ($isPort ? ':' . $port : ':1521') . '/' . $options['database'] : - $options['database'] - ]; - - if (isset($options['charset'])) { - $attr['charset'] = $options['charset']; - } - - break; - - case 'mssql': - if (isset($options['driver']) && $options['driver'] === 'dblib') { - $attr = [ - 'driver' => 'dblib', - 'host' => $options['host'] . ($isPort ? ':' . $port : ''), - 'dbname' => $options['database'] - ]; - - if (isset($options['appname'])) { - $attr['appname'] = $options['appname']; - } - - if (isset($options['charset'])) { - $attr['charset'] = $options['charset']; - } - } else { - $attr = [ - 'driver' => 'sqlsrv', - 'Server' => $options['host'] . ($isPort ? ',' . $port : ''), - 'Database' => $options['database'] - ]; - - if (isset($options['appname'])) { - $attr['APP'] = $options['appname']; - } - - $config = [ - 'ApplicationIntent', - 'AttachDBFileName', - 'Authentication', - 'ColumnEncryption', - 'ConnectionPooling', - 'Encrypt', - 'Failover_Partner', - 'KeyStoreAuthentication', - 'KeyStorePrincipalId', - 'KeyStoreSecret', - 'LoginTimeout', - 'MultipleActiveResultSets', - 'MultiSubnetFailover', - 'Scrollable', - 'TraceFile', - 'TraceOn', - 'TransactionIsolation', - 'TransparentNetworkIPResolution', - 'TrustServerCertificate', - 'WSID', - ]; - - foreach ($config as $value) { - $keyname = strtolower(preg_replace(['/([a-z\d])([A-Z])/', '/([^_])([A-Z][a-z])/'], '$1_$2', $value)); - - if (isset($options[$keyname])) { - $attr[$value] = $options[$keyname]; - } - } - } - - break; - - case 'sqlite': - $attr = [ - 'driver' => 'sqlite', - $options['database'] - ]; - - break; - } - } - - if (!isset($attr)) { - throw new InvalidArgumentException('Incorrect connection options.'); - } - - $driver = $attr['driver']; - - if (!in_array($driver, PDO::getAvailableDrivers())) { - throw new InvalidArgumentException("Unsupported PDO driver: {$driver}."); - } - - unset($attr['driver']); - - $stack = []; - - foreach ($attr as $key => $value) { - $stack[] = is_int($key) ? $value : $key . '=' . $value; - } - - $dsn = $driver . ':' . implode(';', $stack); - - if ( - in_array($this->type, ['mysql', 'pgsql', 'sybase', 'mssql']) && - isset($options['charset']) - ) { - $commands[] = "SET NAMES '{$options['charset']}'" . ( - $this->type === 'mysql' && isset($options['collation']) ? - " COLLATE '{$options['collation']}'" : '' - ); - } - - $this->dsn = $dsn; - - try { - $this->pdo = new PDO( - $dsn, - $options['username'] ?? null, - $options['password'] ?? null, - $option - ); - - if (isset($options['error'])) { - $this->pdo->setAttribute( - PDO::ATTR_ERRMODE, - in_array($options['error'], [ - PDO::ERRMODE_SILENT, - PDO::ERRMODE_WARNING, - PDO::ERRMODE_EXCEPTION - ]) ? - $options['error'] : - PDO::ERRMODE_SILENT - ); - } - - foreach ($commands as $value) { - $this->pdo->exec($value); - } - } catch (PDOException $e) { - throw new PDOException($e->getMessage()); - } - } - - /** - * Generate a new map key for placeholder. - * - * @return string - */ - protected function mapKey(): string - { - return ':MeD' . $this->guid++ . '_mK'; - } - - /** - * Execute customized raw statement. - * - * @param string $statement The raw SQL statement. - * @param array $map The array of input parameters value for prepared statement. - * @return \PDOStatement|null - */ - public function query(string $statement, array $map = []): ?PDOStatement - { - $raw = $this->raw($statement, $map); - $statement = $this->buildRaw($raw, $map); - - return $this->exec($statement, $map); - } - - /** - * Execute the raw statement. - * - * @param string $statement The SQL statement. - * @param array $map The array of input parameters value for prepared statement. - * @codeCoverageIgnore - * @return \PDOStatement|null - */ - public function exec(string $statement, array $map = [], callable $callback = null): ?PDOStatement - { - $this->statement = null; - $this->errorInfo = null; - $this->error = null; - - if ($this->testMode) { - $this->queryString = $this->generate($statement, $map); - return null; - } - - if ($this->debugMode) { - if ($this->debugLogging) { - $this->debugLogs[] = $this->generate($statement, $map); - return null; - } - - echo $this->generate($statement, $map); - - $this->debugMode = false; - - return null; - } - - if ($this->logging) { - $this->logs[] = [$statement, $map]; - } else { - $this->logs = [[$statement, $map]]; - } - - $statement = $this->pdo->prepare($statement); - $errorInfo = $this->pdo->errorInfo(); - - if ($errorInfo[0] !== '00000') { - $this->errorInfo = $errorInfo; - $this->error = $errorInfo[2]; - - return null; - } - - foreach ($map as $key => $value) { - $statement->bindValue($key, $value[0], $value[1]); - } - - if (is_callable($callback)) { - $this->pdo->beginTransaction(); - $callback($statement); - $execute = $statement->execute(); - $this->pdo->commit(); - } else { - $execute = $statement->execute(); - } - - $errorInfo = $statement->errorInfo(); - - if ($errorInfo[0] !== '00000') { - $this->errorInfo = $errorInfo; - $this->error = $errorInfo[2]; - - return null; - } - - if ($execute) { - $this->statement = $statement; - } - - return $statement; - } - - /** - * Generate readable statement. - * - * @param string $statement - * @param array $map - * @codeCoverageIgnore - * @return string - */ - protected function generate(string $statement, array $map): string - { - $identifier = [ - 'mysql' => '`$1`', - 'mssql' => '[$1]' - ]; - - $statement = preg_replace( - '/(?!\'[^\s]+\s?)"([\p{L}_][\p{L}\p{N}@$#\-_]*)"(?!\s?[^\s]+\')/u', - $identifier[$this->type] ?? '"$1"', - $statement - ); - - foreach ($map as $key => $value) { - if ($value[1] === PDO::PARAM_STR) { - $replace = $this->quote($value[0]); - } elseif ($value[1] === PDO::PARAM_NULL) { - $replace = 'NULL'; - } elseif ($value[1] === PDO::PARAM_LOB) { - $replace = '{LOB_DATA}'; - } else { - $replace = $value[0] . ''; - } - - $statement = str_replace($key, $replace, $statement); - } - - return $statement; - } - - /** - * Build a raw object. - * - * @param string $string The raw string. - * @param array $map The array of mapping data for the raw string. - * @return Medoo::raw - */ - public static function raw(string $string, array $map = []): Raw - { - $raw = new Raw(); - - $raw->map = $map; - $raw->value = $string; - - return $raw; - } - - /** - * Finds whether the object is raw. - * - * @param object $object - * @return bool - */ - protected function isRaw($object): bool - { - return $object instanceof Raw; - } - - /** - * Generate the actual query from the raw object. - * - * @param mixed $raw - * @param array $map - * @return string|null - */ - protected function buildRaw($raw, array &$map): ?string - { - if (!$this->isRaw($raw)) { - return null; - } - - $query = preg_replace_callback( - '/(([`\']).*?)?((FROM|TABLE|INTO|UPDATE|JOIN)\s*)?\<(([\p{L}_][\p{L}\p{N}@$#\-_]*)(\.[\p{L}_][\p{L}\p{N}@$#\-_]*)?)\>([^,]*?\2)?/u', - function ($matches) { - if (!empty($matches[2]) && isset($matches[8])) { - return $matches[0]; - } - - if (!empty($matches[4])) { - return $matches[1] . $matches[4] . ' ' . $this->tableQuote($matches[5]); - } - - return $matches[1] . $this->columnQuote($matches[5]); - }, - $raw->value - ); - - $rawMap = $raw->map; - - if (!empty($rawMap)) { - foreach ($rawMap as $key => $value) { - $map[$key] = $this->typeMap($value, gettype($value)); - } - } - - return $query; - } - - /** - * Quote a string for use in a query. - * - * @param string $string - * @return string - */ - public function quote(string $string): string - { - if ($this->type === 'mysql') { - return "'" . preg_replace(['/([\'"])/', '/(\\\\\\\")/'], ["\\\\\${1}", '\\\${1}'], $string) . "'"; - } - - return "'" . preg_replace('/\'/', '\'\'', $string) . "'"; - } - - /** - * Quote table name for use in a query. - * - * @param string $table - * @return string - */ - public function tableQuote(string $table): string - { - if (preg_match('/^[\p{L}_][\p{L}\p{N}@$#\-_]*$/u', $table)) { - return '"' . $this->prefix . $table . '"'; - } - - throw new InvalidArgumentException("Incorrect table name: {$table}."); - } - - /** - * Quote column name for use in a query. - * - * @param string $column - * @return string - */ - public function columnQuote(string $column): string - { - if (preg_match('/^[\p{L}_][\p{L}\p{N}@$#\-_]*(\.?[\p{L}_][\p{L}\p{N}@$#\-_]*)?$/u', $column)) { - return strpos($column, '.') !== false ? - '"' . $this->prefix . str_replace('.', '"."', $column) . '"' : - '"' . $column . '"'; - } - - throw new InvalidArgumentException("Incorrect column name: {$column}."); - } - - /** - * Mapping the type name as PDO data type. - * - * @param mixed $value - * @param string $type - * @return array - */ - protected function typeMap($value, string $type): array - { - $map = [ - 'NULL' => PDO::PARAM_NULL, - 'integer' => PDO::PARAM_INT, - 'double' => PDO::PARAM_STR, - 'boolean' => PDO::PARAM_BOOL, - 'string' => PDO::PARAM_STR, - 'object' => PDO::PARAM_STR, - 'resource' => PDO::PARAM_LOB - ]; - - if ($type === 'boolean') { - $value = ($value ? '1' : '0'); - } elseif ($type === 'NULL') { - $value = null; - } - - return [$value, $map[$type]]; - } - - /** - * Build the statement part for the column stack. - * - * @param array|string $columns - * @param array $map - * @param bool $root - * @param bool $isJoin - * @return string - */ - protected function columnPush(&$columns, array &$map, bool $root, bool $isJoin = false): string - { - if ($columns === '*') { - return $columns; - } - - $stack = []; - $hasDistinct = false; - - if (is_string($columns)) { - $columns = [$columns]; - } - - foreach ($columns as $key => $value) { - $isIntKey = is_int($key); - $isArrayValue = is_array($value); - - if (!$isIntKey && $isArrayValue && $root && count(array_keys($columns)) === 1) { - $stack[] = $this->columnQuote($key); - $stack[] = $this->columnPush($value, $map, false, $isJoin); - } elseif ($isArrayValue) { - $stack[] = $this->columnPush($value, $map, false, $isJoin); - } elseif (!$isIntKey && $raw = $this->buildRaw($value, $map)) { - preg_match('/(?[\p{L}_][\p{L}\p{N}@$#\-_\.]*)(\s*\[(?(String|Bool|Int|Number))\])?/u', $key, $match); - $stack[] = "{$raw} AS {$this->columnQuote($match['column'])}"; - } elseif ($isIntKey && is_string($value)) { - if ($isJoin && strpos($value, '*') !== false) { - throw new InvalidArgumentException('Cannot use table.* to select all columns while joining table.'); - } - - preg_match('/(?[\p{L}_][\p{L}\p{N}@$#\-_\.]*)(?:\s*\((?[\p{L}_][\p{L}\p{N}@$#\-_]*)\))?(?:\s*\[(?(?:String|Bool|Int|Number|Object|JSON))\])?/u', $value, $match); - - $columnString = ''; - - if (!empty($match['alias'])) { - $columnString = "{$this->columnQuote($match['column'])} AS {$this->columnQuote($match['alias'])}"; - $columns[$key] = $match['alias']; - - if (!empty($match['type'])) { - $columns[$key] .= ' [' . $match['type'] . ']'; - } - } else { - $columnString = $this->columnQuote($match['column']); - } - - if (!$hasDistinct && strpos($value, '@') === 0) { - $columnString = 'DISTINCT ' . $columnString; - $hasDistinct = true; - array_unshift($stack, $columnString); - - continue; - } - - $stack[] = $columnString; - } - } - - return implode(',', $stack); - } - - /** - * Implode where conditions. - * - * @param array $data - * @param array $map - * @param string $conjunctor - * @return string - */ - protected function dataImplode(array $data, array &$map, string $conjunctor): string - { - $stack = []; - - foreach ($data as $key => $value) { - $type = gettype($value); - - if ( - $type === 'array' && - preg_match("/^(AND|OR)(\s+#.*)?$/", $key, $relationMatch) - ) { - $stack[] = '(' . $this->dataImplode($value, $map, ' ' . $relationMatch[1]) . ')'; - continue; - } - - $mapKey = $this->mapKey(); - $isIndex = is_int($key); - - preg_match( - '/([\p{L}_][\p{L}\p{N}@$#\-_\.]*)(\[(?\>\=?|\<\=?|\=|\!\=?|\<\>|\>\<|\!?~|REGEXP)\])?([\p{L}_][\p{L}\p{N}@$#\-_\.]*)?/u', - $isIndex ? $value : $key, - $match - ); - - $column = $this->columnQuote($match[1]); - $operator = $match['operator'] ?? null; - - if ($isIndex && isset($match[4]) && in_array($operator, ['>', '>=', '<', '<=', '=', '!='])) { - $stack[] = "${column} ${operator} " . $this->columnQuote($match[4]); - continue; - } - - if ($operator) { - if (in_array($operator, ['>', '>=', '<', '<='])) { - $condition = "{$column} {$operator} "; - - if (is_numeric($value)) { - $condition .= $mapKey; - $map[$mapKey] = [$value, is_float($value) ? PDO::PARAM_STR : PDO::PARAM_INT]; - } elseif ($raw = $this->buildRaw($value, $map)) { - $condition .= $raw; - } else { - $condition .= $mapKey; - $map[$mapKey] = [$value, PDO::PARAM_STR]; - } - - $stack[] = $condition; - } elseif ($operator === '!') { - switch ($type) { - - case 'NULL': - $stack[] = $column . ' IS NOT NULL'; - break; - - case 'array': - $placeholders = []; - - foreach ($value as $index => $item) { - $stackKey = $mapKey . $index . '_i'; - $placeholders[] = $stackKey; - $map[$stackKey] = $this->typeMap($item, gettype($item)); - } - - $stack[] = $column . ' NOT IN (' . implode(', ', $placeholders) . ')'; - break; - - case 'object': - if ($raw = $this->buildRaw($value, $map)) { - $stack[] = "{$column} != {$raw}"; - } - break; - - case 'integer': - case 'double': - case 'boolean': - case 'string': - $stack[] = "{$column} != {$mapKey}"; - $map[$mapKey] = $this->typeMap($value, $type); - break; - } - } elseif ($operator === '~' || $operator === '!~') { - if ($type !== 'array') { - $value = [$value]; - } - - $connector = ' OR '; - $data = array_values($value); - - if (is_array($data[0])) { - if (isset($value['AND']) || isset($value['OR'])) { - $connector = ' ' . array_keys($value)[0] . ' '; - $value = $data[0]; - } - } - - $likeClauses = []; - - foreach ($value as $index => $item) { - $item = strval($item); - - if (!preg_match('/((?' || $operator === '><') { - if ($type === 'array') { - if ($operator === '><') { - $column .= ' NOT'; - } - - if ($this->isRaw($value[0]) && $this->isRaw($value[1])) { - $stack[] = "({$column} BETWEEN {$this->buildRaw($value[0], $map)} AND {$this->buildRaw($value[1], $map)})"; - } else { - $stack[] = "({$column} BETWEEN {$mapKey}a AND {$mapKey}b)"; - $dataType = (is_numeric($value[0]) && is_numeric($value[1])) ? PDO::PARAM_INT : PDO::PARAM_STR; - - $map[$mapKey . 'a'] = [$value[0], $dataType]; - $map[$mapKey . 'b'] = [$value[1], $dataType]; - } - } - } elseif ($operator === 'REGEXP') { - $stack[] = "{$column} REGEXP {$mapKey}"; - $map[$mapKey] = [$value, PDO::PARAM_STR]; - } - - continue; - } - - switch ($type) { - - case 'NULL': - $stack[] = $column . ' IS NULL'; - break; - - case 'array': - $placeholders = []; - - foreach ($value as $index => $item) { - $stackKey = $mapKey . $index . '_i'; - - $placeholders[] = $stackKey; - $map[$stackKey] = $this->typeMap($item, gettype($item)); - } - - $stack[] = $column . ' IN (' . implode(', ', $placeholders) . ')'; - break; - - case 'object': - if ($raw = $this->buildRaw($value, $map)) { - $stack[] = "{$column} = {$raw}"; - } - break; - - case 'integer': - case 'double': - case 'boolean': - case 'string': - $stack[] = "{$column} = {$mapKey}"; - $map[$mapKey] = $this->typeMap($value, $type); - break; - } - } - - return implode($conjunctor . ' ', $stack); - } - - /** - * Build the where clause. - * - * @param array|null $where - * @param array $map - * @return string - */ - protected function whereClause($where, array &$map): string - { - $clause = ''; - - if (is_array($where)) { - $conditions = array_diff_key($where, array_flip( - ['GROUP', 'ORDER', 'HAVING', 'LIMIT', 'LIKE', 'MATCH'] - )); - - if (!empty($conditions)) { - $clause = ' WHERE ' . $this->dataImplode($conditions, $map, ' AND'); - } - - if (isset($where['MATCH']) && $this->type === 'mysql') { - $match = $where['MATCH']; - - if (is_array($match) && isset($match['columns'], $match['keyword'])) { - $mode = ''; - - $options = [ - 'natural' => 'IN NATURAL LANGUAGE MODE', - 'natural+query' => 'IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION', - 'boolean' => 'IN BOOLEAN MODE', - 'query' => 'WITH QUERY EXPANSION' - ]; - - if (isset($match['mode'], $options[$match['mode']])) { - $mode = ' ' . $options[$match['mode']]; - } - - $columns = implode(', ', array_map([$this, 'columnQuote'], $match['columns'])); - $mapKey = $this->mapKey(); - $map[$mapKey] = [$match['keyword'], PDO::PARAM_STR]; - $clause .= ($clause !== '' ? ' AND ' : ' WHERE') . ' MATCH (' . $columns . ') AGAINST (' . $mapKey . $mode . ')'; - } - } - - if (isset($where['GROUP'])) { - $group = $where['GROUP']; - - if (is_array($group)) { - $stack = []; - - foreach ($group as $column => $value) { - $stack[] = $this->columnQuote($value); - } - - $clause .= ' GROUP BY ' . implode(',', $stack); - } elseif ($raw = $this->buildRaw($group, $map)) { - $clause .= ' GROUP BY ' . $raw; - } else { - $clause .= ' GROUP BY ' . $this->columnQuote($group); - } - } - - if (isset($where['HAVING'])) { - $having = $where['HAVING']; - - if ($raw = $this->buildRaw($having, $map)) { - $clause .= ' HAVING ' . $raw; - } else { - $clause .= ' HAVING ' . $this->dataImplode($having, $map, ' AND'); - } - } - - if (isset($where['ORDER'])) { - $order = $where['ORDER']; - - if (is_array($order)) { - $stack = []; - - foreach ($order as $column => $value) { - if (is_array($value)) { - $valueStack = []; - - foreach ($value as $item) { - $valueStack[] = is_int($item) ? $item : $this->quote($item); - } - - $valueString = implode(',', $valueStack); - $stack[] = "FIELD({$this->columnQuote($column)}, {$valueString})"; - } elseif ($value === 'ASC' || $value === 'DESC') { - $stack[] = $this->columnQuote($column) . ' ' . $value; - } elseif (is_int($column)) { - $stack[] = $this->columnQuote($value); - } - } - - $clause .= ' ORDER BY ' . implode(',', $stack); - } elseif ($raw = $this->buildRaw($order, $map)) { - $clause .= ' ORDER BY ' . $raw; - } else { - $clause .= ' ORDER BY ' . $this->columnQuote($order); - } - } - - if (isset($where['LIMIT'])) { - $limit = $where['LIMIT']; - - if (in_array($this->type, ['oracle', 'mssql'])) { - if ($this->type === 'mssql' && !isset($where['ORDER'])) { - $clause .= ' ORDER BY (SELECT 0)'; - } - - if (is_numeric($limit)) { - $limit = [0, $limit]; - } - - if ( - is_array($limit) && - is_numeric($limit[0]) && - is_numeric($limit[1]) - ) { - $clause .= " OFFSET {$limit[0]} ROWS FETCH NEXT {$limit[1]} ROWS ONLY"; - } - } else { - if (is_numeric($limit)) { - $clause .= ' LIMIT ' . $limit; - } elseif ( - is_array($limit) && - is_numeric($limit[0]) && - is_numeric($limit[1]) - ) { - $clause .= " LIMIT {$limit[1]} OFFSET {$limit[0]}"; - } - } - } - } elseif ($raw = $this->buildRaw($where, $map)) { - $clause .= ' ' . $raw; - } - - return $clause; - } - - /** - * Build statement for the select query. - * - * @param string $table - * @param array $map - * @param array|string $join - * @param array|string $columns - * @param array $where - * @param string $columnFn - * @return string - */ - protected function selectContext( - string $table, - array &$map, - $join, - &$columns = null, - array $where = null, - $columnFn = null - ): string { - preg_match('/(?
[\p{L}_][\p{L}\p{N}@$#\-_]*)\s*\((?[\p{L}_][\p{L}\p{N}@$#\-_]*)\)/u', $table, $tableMatch); - - if (isset($tableMatch['table'], $tableMatch['alias'])) { - $table = $this->tableQuote($tableMatch['table']); - $tableAlias = $this->tableQuote($tableMatch['alias']); - $tableQuery = "{$table} AS {$tableAlias}"; - } else { - $table = $this->tableQuote($table); - $tableQuery = $table; - } - - $isJoin = $this->isJoin($join); - - if ($isJoin) { - $tableQuery .= ' ' . $this->buildJoin($tableAlias ?? $table, $join, $map); - } else { - if (is_null($columns)) { - if ( - !is_null($where) || - (is_array($join) && isset($columnFn)) - ) { - $where = $join; - $columns = null; - } else { - $where = null; - $columns = $join; - } - } else { - $where = $columns; - $columns = $join; - } - } - - if (isset($columnFn)) { - if ($columnFn === 1) { - $column = '1'; - - if (is_null($where)) { - $where = $columns; - } - } elseif ($raw = $this->buildRaw($columnFn, $map)) { - $column = $raw; - } else { - if (empty($columns) || $this->isRaw($columns)) { - $columns = '*'; - $where = $join; - } - - $column = $columnFn . '(' . $this->columnPush($columns, $map, true) . ')'; - } - } else { - $column = $this->columnPush($columns, $map, true, $isJoin); - } - - return 'SELECT ' . $column . ' FROM ' . $tableQuery . $this->whereClause($where, $map); - } - - /** - * Determine the array is with join syntax. - * - * @param mixed $join - * @return string - */ - protected function isJoin($join): bool - { - if (!is_array($join)) { - return false; - } - - $keys = array_keys($join); - - if ( - isset($keys[0]) && - is_string($keys[0]) && - strpos($keys[0], '[') === 0 - ) { - return true; - } - - return false; - } - - /** - * Build the join statement. - * - * @param string $table - * @param array $join - * @param array $map - * @return string - */ - protected function buildJoin(string $table, array $join, array &$map): string - { - $tableJoin = []; - $type = [ - '>' => 'LEFT', - '<' => 'RIGHT', - '<>' => 'FULL', - '><' => 'INNER' - ]; - - foreach ($join as $subtable => $relation) { - preg_match('/(\[(?\<\>?|\>\[\p{L}_][\p{L}\p{N}@$#\-_]*)\s?(\((?[\p{L}_][\p{L}\p{N}@$#\-_]*)\))?/u', $subtable, $match); - - if ($match['join'] === '' || $match['table'] === '') { - continue; - } - - if (is_string($relation)) { - $relation = 'USING ("' . $relation . '")'; - } elseif (is_array($relation)) { - // For ['column1', 'column2'] - if (isset($relation[0])) { - $relation = 'USING ("' . implode('", "', $relation) . '")'; - } else { - $joins = []; - - foreach ($relation as $key => $value) { - if ($key === 'AND' && is_array($value)) { - $joins[] = $this->dataImplode($value, $map, ' AND'); - continue; - } - - $joins[] = ( - strpos($key, '.') > 0 ? - // For ['tableB.column' => 'column'] - $this->columnQuote($key) : - - // For ['column1' => 'column2'] - $table . '.' . $this->columnQuote($key) - ) . - ' = ' . - $this->tableQuote($match['alias'] ?? $match['table']) . '.' . $this->columnQuote($value); - } - - $relation = 'ON ' . implode(' AND ', $joins); - } - } elseif ($raw = $this->buildRaw($relation, $map)) { - $relation = $raw; - } - - $tableName = $this->tableQuote($match['table']); - - if (isset($match['alias'])) { - $tableName .= ' AS ' . $this->tableQuote($match['alias']); - } - - $tableJoin[] = $type[$match['join']] . " JOIN ${tableName} ${relation}"; - } - - return implode(' ', $tableJoin); - } - - /** - * Mapping columns for the stack. - * - * @param array|string $columns - * @param array $stack - * @param bool $root - * @return array - */ - protected function columnMap($columns, array &$stack, bool $root): array - { - if ($columns === '*') { - return $stack; - } - - foreach ($columns as $key => $value) { - if (is_int($key)) { - preg_match('/([\p{L}_][\p{L}\p{N}@$#\-_]*\.)?(?[\p{L}_][\p{L}\p{N}@$#\-_]*)(?:\s*\((?[\p{L}_][\p{L}\p{N}@$#\-_]*)\))?(?:\s*\[(?(?:String|Bool|Int|Number|Object|JSON))\])?/u', $value, $keyMatch); - - $columnKey = !empty($keyMatch['alias']) ? - $keyMatch['alias'] : - $keyMatch['column']; - - $stack[$value] = isset($keyMatch['type']) ? - [$columnKey, $keyMatch['type']] : - [$columnKey, 'String']; - } elseif ($this->isRaw($value)) { - preg_match('/([\p{L}_][\p{L}\p{N}@$#\-_]*\.)?(?[\p{L}_][\p{L}\p{N}@$#\-_]*)(\s*\[(?(String|Bool|Int|Number))\])?/u', $key, $keyMatch); - $columnKey = $keyMatch['column']; - - $stack[$key] = isset($keyMatch['type']) ? - [$columnKey, $keyMatch['type']] : - [$columnKey, 'String']; - } elseif (!is_int($key) && is_array($value)) { - if ($root && count(array_keys($columns)) === 1) { - $stack[$key] = [$key, 'String']; - } - - $this->columnMap($value, $stack, false); - } - } - - return $stack; - } - - /** - * Mapping the data from the table. - * - * @param array $data - * @param array $columns - * @param array $columnMap - * @param array $stack - * @param bool $root - * @param array $result - * @codeCoverageIgnore - * @return void - */ - protected function dataMap( - array $data, - array $columns, - array $columnMap, - array &$stack, - bool $root, - array &$result = null - ): void { - if ($root) { - $columnsKey = array_keys($columns); - - if (count($columnsKey) === 1 && is_array($columns[$columnsKey[0]])) { - $indexKey = array_keys($columns)[0]; - $dataKey = preg_replace("/^[\p{L}_][\p{L}\p{N}@$#\-_]*\./u", '', $indexKey); - $currentStack = []; - - foreach ($data as $item) { - $this->dataMap($data, $columns[$indexKey], $columnMap, $currentStack, false, $result); - $index = $data[$dataKey]; - - if (isset($result)) { - $result[$index] = $currentStack; - } else { - $stack[$index] = $currentStack; - } - } - } else { - $currentStack = []; - $this->dataMap($data, $columns, $columnMap, $currentStack, false, $result); - - if (isset($result)) { - $result[] = $currentStack; - } else { - $stack = $currentStack; - } - } - - return; - } - - foreach ($columns as $key => $value) { - $isRaw = $this->isRaw($value); - - if (is_int($key) || $isRaw) { - $map = $columnMap[$isRaw ? $key : $value]; - $columnKey = $map[0]; - $item = $data[$columnKey]; - - if (isset($map[1])) { - if ($isRaw && in_array($map[1], ['Object', 'JSON'])) { - continue; - } - - if (is_null($item)) { - $stack[$columnKey] = null; - continue; - } - - switch ($map[1]) { - - case 'Number': - $stack[$columnKey] = (float) $item; - break; - - case 'Int': - $stack[$columnKey] = (int) $item; - break; - - case 'Bool': - $stack[$columnKey] = (bool) $item; - break; - - case 'Object': - $stack[$columnKey] = unserialize($item); - break; - - case 'JSON': - $stack[$columnKey] = json_decode($item, true); - break; - - case 'String': - $stack[$columnKey] = $item; - break; - } - } else { - $stack[$columnKey] = $item; - } - } else { - $currentStack = []; - $this->dataMap($data, $value, $columnMap, $currentStack, false, $result); - - $stack[$key] = $currentStack; - } - } - } - - /** - * Build and execute returning query. - * - * @param string $query - * @param array $map - * @param array $data - * @return \PDOStatement|null - */ - private function returningQuery($query, &$map, &$data): ?PDOStatement - { - $returnColumns = array_map( - function ($value) { - return $value[0]; - }, - $data - ); - - $query .= ' RETURNING ' . - implode(', ', array_map([$this, 'columnQuote'], $returnColumns)) . - ' INTO ' . - implode(', ', array_keys($data)); - - return $this->exec($query, $map, function ($statement) use (&$data) { - // @codeCoverageIgnoreStart - foreach ($data as $key => $return) { - if (isset($return[3])) { - $statement->bindParam($key, $data[$key][1], $return[2], $return[3]); - } else { - $statement->bindParam($key, $data[$key][1], $return[2]); - } - } - // @codeCoverageIgnoreEnd - }); - } - - /** - * Create a table. - * - * @param string $table - * @param array $columns Columns definition. - * @param array $options Additional table options for creating a table. - * @return \PDOStatement|null - */ - public function create(string $table, $columns, $options = null): ?PDOStatement - { - $stack = []; - $tableOption = ''; - $tableName = $this->tableQuote($table); - - foreach ($columns as $name => $definition) { - if (is_int($name)) { - $stack[] = preg_replace('/\<([\p{L}_][\p{L}\p{N}@$#\-_]*)\>/u', '"$1"', $definition); - } elseif (is_array($definition)) { - $stack[] = $this->columnQuote($name) . ' ' . implode(' ', $definition); - } elseif (is_string($definition)) { - $stack[] = $this->columnQuote($name) . ' ' . $definition; - } - } - - if (is_array($options)) { - $optionStack = []; - - foreach ($options as $key => $value) { - if (is_string($value) || is_int($value)) { - $optionStack[] = "{$key} = {$value}"; - } - } - - $tableOption = ' ' . implode(', ', $optionStack); - } elseif (is_string($options)) { - $tableOption = ' ' . $options; - } - - $command = 'CREATE TABLE'; - - if (in_array($this->type, ['mysql', 'pgsql', 'sqlite'])) { - $command .= ' IF NOT EXISTS'; - } - - return $this->exec("{$command} {$tableName} (" . implode(', ', $stack) . "){$tableOption}"); - } - - /** - * Drop a table. - * - * @param string $table - * @return \PDOStatement|null - */ - public function drop(string $table): ?PDOStatement - { - return $this->exec('DROP TABLE IF EXISTS ' . $this->tableQuote($this->prefix . $table)); - } - - /** - * Select data from the table. - * - * @param string $table - * @param array $join - * @param array|string $columns - * @param array $where - * @return array|null - */ - public function select(string $table, $join, $columns = null, $where = null): ?array - { - $map = []; - $result = []; - $columnMap = []; - - $args = func_get_args(); - $lastArgs = $args[array_key_last($args)]; - $callback = is_callable($lastArgs) ? $lastArgs : null; - - $where = is_callable($where) ? null : $where; - $columns = is_callable($columns) ? null : $columns; - - $column = $where === null ? $join : $columns; - $isSingle = (is_string($column) && $column !== '*'); - - $statement = $this->exec($this->selectContext($table, $map, $join, $columns, $where), $map); - - $this->columnMap($columns, $columnMap, true); - - if (!$this->statement) { - return $result; - } - - // @codeCoverageIgnoreStart - if ($columns === '*') { - if (isset($callback)) { - while ($data = $statement->fetch(PDO::FETCH_ASSOC)) { - $callback($data); - } - - return null; - } - - return $statement->fetchAll(PDO::FETCH_ASSOC); - } - - while ($data = $statement->fetch(PDO::FETCH_ASSOC)) { - $currentStack = []; - - if (isset($callback)) { - $this->dataMap($data, $columns, $columnMap, $currentStack, true); - - $callback( - $isSingle ? - $currentStack[$columnMap[$column][0]] : - $currentStack - ); - } else { - $this->dataMap($data, $columns, $columnMap, $currentStack, true, $result); - } - } - - if (isset($callback)) { - return null; - } - - if ($isSingle) { - $singleResult = []; - $resultKey = $columnMap[$column][0]; - - foreach ($result as $item) { - $singleResult[] = $item[$resultKey]; - } - - return $singleResult; - } - - return $result; - } - // @codeCoverageIgnoreEnd - - /** - * Insert one or more records into the table. - * - * @param string $table - * @param array $values - * @param string $primaryKey - * @return \PDOStatement|null - */ - public function insert(string $table, array $values, string $primaryKey = null): ?PDOStatement - { - $stack = []; - $columns = []; - $fields = []; - $map = []; - $returnings = []; - - if (!isset($values[0])) { - $values = [$values]; - } - - foreach ($values as $data) { - foreach ($data as $key => $value) { - $columns[] = $key; - } - } - - $columns = array_unique($columns); - - foreach ($values as $data) { - $values = []; - - foreach ($columns as $key) { - $value = $data[$key]; - $type = gettype($value); - - if ($this->type === 'oracle' && $type === 'resource') { - $values[] = 'EMPTY_BLOB()'; - $returnings[$this->mapKey()] = [$key, $value, PDO::PARAM_LOB]; - continue; - } - - if ($raw = $this->buildRaw($data[$key], $map)) { - $values[] = $raw; - continue; - } - - $mapKey = $this->mapKey(); - $values[] = $mapKey; - - switch ($type) { - - case 'array': - $map[$mapKey] = [ - strpos($key, '[JSON]') === strlen($key) - 6 ? - json_encode($value) : - serialize($value), - PDO::PARAM_STR - ]; - break; - - case 'object': - $value = serialize($value); - break; - - case 'NULL': - case 'resource': - case 'boolean': - case 'integer': - case 'double': - case 'string': - $map[$mapKey] = $this->typeMap($value, $type); - break; - } - } - - $stack[] = '(' . implode(', ', $values) . ')'; - } - - foreach ($columns as $key) { - $fields[] = $this->columnQuote(preg_replace("/(\s*\[JSON\]$)/i", '', $key)); - } - - $query = 'INSERT INTO ' . $this->tableQuote($table) . ' (' . implode(', ', $fields) . ') VALUES ' . implode(', ', $stack); - - if ( - $this->type === 'oracle' && (!empty($returnings) || isset($primaryKey)) - ) { - if ($primaryKey) { - $returnings[':RETURNID'] = [$primaryKey, '', PDO::PARAM_INT, 8]; - } - - $statement = $this->returningQuery($query, $map, $returnings); - - if ($primaryKey) { - $this->returnId = $returnings[':RETURNID'][1]; - } - - return $statement; - } - - return $this->exec($query, $map); - } - - /** - * Modify data from the table. - * - * @param string $table - * @param array $data - * @param array $where - * @return \PDOStatement|null - */ - public function update(string $table, $data, $where = null): ?PDOStatement - { - $fields = []; - $map = []; - $returnings = []; - - foreach ($data as $key => $value) { - $column = $this->columnQuote(preg_replace("/(\s*\[(JSON|\+|\-|\*|\/)\]$)/", '', $key)); - $type = gettype($value); - - if ($this->type === 'oracle' && $type === 'resource') { - $fields[] = "{$column} = EMPTY_BLOB()"; - $returnings[$this->mapKey()] = [$key, $value, PDO::PARAM_LOB]; - continue; - } - - if ($raw = $this->buildRaw($value, $map)) { - $fields[] = "{$column} = {$raw}"; - continue; - } - - preg_match('/(?[\p{L}_][\p{L}\p{N}@$#\-_]*)(\[(?\+|\-|\*|\/)\])?/u', $key, $match); - - if (isset($match['operator'])) { - if (is_numeric($value)) { - $fields[] = "{$column} = {$column} {$match['operator']} {$value}"; - } - } else { - $mapKey = $this->mapKey(); - $fields[] = "{$column} = {$mapKey}"; - - switch ($type) { - - case 'array': - $map[$mapKey] = [ - strpos($key, '[JSON]') === strlen($key) - 6 ? - json_encode($value) : - serialize($value), - PDO::PARAM_STR - ]; - break; - - case 'object': - $value = serialize($value); - - break; - case 'NULL': - case 'resource': - case 'boolean': - case 'integer': - case 'double': - case 'string': - $map[$mapKey] = $this->typeMap($value, $type); - break; - } - } - } - - $query = 'UPDATE ' . $this->tableQuote($table) . ' SET ' . implode(', ', $fields) . $this->whereClause($where, $map); - - if ($this->type === 'oracle' && !empty($returnings)) { - return $this->returningQuery($query, $map, $returnings); - } - - return $this->exec($query, $map); - } - - /** - * Delete data from the table. - * - * @param string $table - * @param array|Raw $where - * @return \PDOStatement|null - */ - public function delete(string $table, $where): ?PDOStatement - { - $map = []; - - return $this->exec('DELETE FROM ' . $this->tableQuote($table) . $this->whereClause($where, $map), $map); - } - - /** - * Replace old data with a new one. - * - * @param string $table - * @param array $columns - * @param array $where - * @return \PDOStatement|null - */ - public function replace(string $table, array $columns, $where = null): ?PDOStatement - { - $map = []; - $stack = []; - - foreach ($columns as $column => $replacements) { - if (is_array($replacements)) { - foreach ($replacements as $old => $new) { - $mapKey = $this->mapKey(); - $columnName = $this->columnQuote($column); - $stack[] = "{$columnName} = REPLACE({$columnName}, {$mapKey}a, {$mapKey}b)"; - - $map[$mapKey . 'a'] = [$old, PDO::PARAM_STR]; - $map[$mapKey . 'b'] = [$new, PDO::PARAM_STR]; - } - } - } - - if (empty($stack)) { - throw new InvalidArgumentException('Invalid columns supplied.'); - } - - return $this->exec('UPDATE ' . $this->tableQuote($table) . ' SET ' . implode(', ', $stack) . $this->whereClause($where, $map), $map); - } - - /** - * Get only one record from the table. - * - * @param string $table - * @param array $join - * @param array|string $columns - * @param array $where - * @return mixed - */ - public function get(string $table, $join = null, $columns = null, $where = null) - { - $map = []; - $result = []; - $columnMap = []; - $currentStack = []; - - if ($where === null) { - if ($this->isJoin($join)) { - $where['LIMIT'] = 1; - } else { - $columns['LIMIT'] = 1; - } - - $column = $join; - } else { - $column = $columns; - $where['LIMIT'] = 1; - } - - $isSingle = (is_string($column) && $column !== '*'); - $query = $this->exec($this->selectContext($table, $map, $join, $columns, $where), $map); - - if (!$this->statement) { - return false; - } - - // @codeCoverageIgnoreStart - $data = $query->fetchAll(PDO::FETCH_ASSOC); - - if (isset($data[0])) { - if ($column === '*') { - return $data[0]; - } - - $this->columnMap($columns, $columnMap, true); - $this->dataMap($data[0], $columns, $columnMap, $currentStack, true, $result); - - if ($isSingle) { - return $result[0][$columnMap[$column][0]]; - } - - return $result[0]; - } - } - // @codeCoverageIgnoreEnd - - /** - * Determine whether the target data existed from the table. - * - * @param string $table - * @param array $join - * @param array $where - * @return bool - */ - public function has(string $table, $join, $where = null): bool - { - $map = []; - $column = null; - - $query = $this->exec( - $this->type === 'mssql' ? - $this->selectContext($table, $map, $join, $column, $where, Medoo::raw('TOP 1 1')) : - 'SELECT EXISTS(' . $this->selectContext($table, $map, $join, $column, $where, 1) . ')', - $map - ); - - if (!$this->statement) { - return false; - } - - // @codeCoverageIgnoreStart - $result = $query->fetchColumn(); - - return $result === '1' || $result === 1 || $result === true; - } - // @codeCoverageIgnoreEnd - - /** - * Randomly fetch data from the table. - * - * @param string $table - * @param array $join - * @param array|string $columns - * @param array $where - * @return array - */ - public function rand(string $table, $join = null, $columns = null, $where = null): array - { - $orderRaw = $this->raw( - $this->type === 'mysql' ? 'RAND()' - : ($this->type === 'mssql' ? 'NEWID()' - : 'RANDOM()') - ); - - if ($where === null) { - if ($this->isJoin($join)) { - $where['ORDER'] = $orderRaw; - } else { - $columns['ORDER'] = $orderRaw; - } - } else { - $where['ORDER'] = $orderRaw; - } - - return $this->select($table, $join, $columns, $where); - } - - /** - * Build for the aggregate function. - * - * @param string $type - * @param string $table - * @param array $join - * @param string $column - * @param array $where - * @return string|null - */ - private function aggregate(string $type, string $table, $join = null, $column = null, $where = null): ?string - { - $map = []; - - $query = $this->exec($this->selectContext($table, $map, $join, $column, $where, $type), $map); - - if (!$this->statement) { - return null; - } - - // @codeCoverageIgnoreStart - return (string) $query->fetchColumn(); - } - // @codeCoverageIgnoreEnd - - /** - * Count the number of rows from the table. - * - * @param string $table - * @param array $join - * @param string $column - * @param array $where - * @return int|null - */ - public function count(string $table, $join = null, $column = null, $where = null): ?int - { - return (int) $this->aggregate('COUNT', $table, $join, $column, $where); - } - - /** - * Calculate the average value of the column. - * - * @param string $table - * @param array $join - * @param string $column - * @param array $where - * @return string|null - */ - public function avg(string $table, $join, $column = null, $where = null): ?string - { - return $this->aggregate('AVG', $table, $join, $column, $where); - } - - /** - * Get the maximum value of the column. - * - * @param string $table - * @param array $join - * @param string $column - * @param array $where - * @return string|null - */ - public function max(string $table, $join, $column = null, $where = null): ?string - { - return $this->aggregate('MAX', $table, $join, $column, $where); - } - - /** - * Get the minimum value of the column. - * - * @param string $table - * @param array $join - * @param string $column - * @param array $where - * @return string|null - */ - public function min(string $table, $join, $column = null, $where = null): ?string - { - return $this->aggregate('MIN', $table, $join, $column, $where); - } - - /** - * Calculate the total value of the column. - * - * @param string $table - * @param array $join - * @param string $column - * @param array $where - * @return string|null - */ - public function sum(string $table, $join, $column = null, $where = null): ?string - { - return $this->aggregate('SUM', $table, $join, $column, $where); - } - - /** - * Start a transaction. - * - * @param callable $actions - * @codeCoverageIgnore - * @return void - */ - public function action(callable $actions): void - { - if (is_callable($actions)) { - $this->pdo->beginTransaction(); - - try { - $result = $actions($this); - - if ($result === false) { - $this->pdo->rollBack(); - } else { - $this->pdo->commit(); - } - } catch (Exception $e) { - $this->pdo->rollBack(); - throw $e; - } - } - } - - /** - * Return the ID for the last inserted row. - * - * @param string $name - * @codeCoverageIgnore - * @return string|null - */ - public function id(string $name = null): ?string - { - $type = $this->type; - - if ($type === 'oracle') { - return $this->returnId; - } elseif ($type === 'pgsql') { - $id = $this->pdo->query('SELECT LASTVAL()')->fetchColumn(); - - return (string) $id ?: null; - } - - return $this->pdo->lastInsertId($name); - } - - /** - * Enable debug mode and output readable statement string. - * - * @codeCoverageIgnore - * @return Medoo - */ - public function debug(): self - { - $this->debugMode = true; - - return $this; - } - - /** - * Enable debug logging mode. - * - * @codeCoverageIgnore - * @return void - */ - public function beginDebug(): void - { - $this->debugMode = true; - $this->debugLogging = true; - } - - /** - * Disable debug logging and return all readable statements. - * - * @codeCoverageIgnore - * @return void - */ - public function debugLog(): array - { - $this->debugMode = false; - $this->debugLogging = false; - - return $this->debugLogs; - } - - /** - * Return the last performed statement. - * - * @codeCoverageIgnore - * @return string|null - */ - public function last(): ?string - { - if (empty($this->logs)) { - return null; - } - - $log = $this->logs[array_key_last($this->logs)]; - - return $this->generate($log[0], $log[1]); - } - - /** - * Return all executed statements. - * - * @codeCoverageIgnore - * @return string[] - */ - public function log(): array - { - return array_map( - function ($log) { - return $this->generate($log[0], $log[1]); - }, - $this->logs - ); - } - - /** - * Get information about the database connection. - * - * @codeCoverageIgnore - * @return array - */ - public function info(): array - { - $output = [ - 'server' => 'SERVER_INFO', - 'driver' => 'DRIVER_NAME', - 'client' => 'CLIENT_VERSION', - 'version' => 'SERVER_VERSION', - 'connection' => 'CONNECTION_STATUS' - ]; - - foreach ($output as $key => $value) { - $output[$key] = @$this->pdo->getAttribute(constant('PDO::ATTR_' . $value)); - } - - $output['dsn'] = $this->dsn; - - return $output; - } -} diff --git a/02.php/extension/VerifyCode/VerifyCode.class.php b/02.php/extension/VerifyCode/VerifyCode.class.php new file mode 100644 index 0000000..1f4e791 --- /dev/null +++ b/02.php/extension/VerifyCode/VerifyCode.class.php @@ -0,0 +1,92 @@ +imageWidth = $imageWidth; + $this->imageHeight = $imageHeight; + $this->code = $code; + // $this->file = $file; + } + + function CreateVerifacationImage() + { + + //设置验证码大小的函数 + $image = imagecreatetruecolor($this->imageWidth, $this->imageHeight); + + //验证码颜色RGB为(255,255,255)#ffffff + $bgcolor = imagecolorallocate($image, 255, 255, 255); + + //区域填充 + imagefill($image, 0, 0, $bgcolor); + + $codeArray = str_split($this->code); + + for ($i = 0; $i < count($codeArray); $i++) { + + //设置字体大小 + $fontsize = 7; + + //数字越大,颜色越浅,这里是深颜色0-120 + //0-255可选 + $fontcolor = imagecolorallocate($image, rand(40, 150), rand(40, 150), rand(40, 150)); + + //验证码内容 + $fontcontent = $codeArray[$i]; + + //随机坐标 + $x = ($i * 150 / 4) + rand(5, 10); + $y = rand(5, 10); + + imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor); + } + + //设置干扰元素,设置雪花点 + for ($i = 0; $i < 300; $i++) { + + //设置颜色,20-200颜色比数字浅,不干扰阅读 + $inputcolor = imagecolorallocate($image, rand(50, 200), rand(20, 200), rand(50, 200)); + + //画一个单一像素的元素 + imagesetpixel($image, rand(1, 149), rand(1, 39), $inputcolor); + } + + //增加干扰元素,设置横线(先设置线的颜色,在设置横线) + for ($i = 0; $i < 4; $i++) { + + //设置线的颜色 + $linecolor = imagecolorallocate($image, rand(20, 220), rand(20, 220), rand(20, 220)); + + imageline($image, rand(1, 149), rand(1, 39), rand(1, 299), rand(1, 149), $linecolor); + } + + //建立png函数 输出到文件 + ob_start(); + + imagepng($image); + + $imageString = base64_encode(ob_get_contents()); + + //结束图形函数,消除$image + imagedestroy($image); + + ob_end_clean(); + + return 'data:image/png;base64,' . $imageString; + } +} diff --git a/02.php/server/svnadmind.php b/02.php/server/svnadmind.php index ba7b376..b036622 100644 --- a/02.php/server/svnadmind.php +++ b/02.php/server/svnadmind.php @@ -1,6 +1,6 @@ pidfile = dirname(__FILE__) . '/svnadmind.pid'; + $this->pidFile = dirname(__FILE__) . '/svnadmind.pid'; } - private function init_daemon() + /** + * 将程序变为守护进程 + */ + private function initDaemon() { $pid = pcntl_fork(); if ($pid < 0) { @@ -44,7 +47,7 @@ class Daemon } elseif ($pid > 0) { exit(); } - chdir("/"); + chdir('/'); umask(0); if (defined('STDIN')) { fclose(STDIN); @@ -55,164 +58,199 @@ class Daemon if (defined('STDERR')) { fclose(STDERR); } - file_put_contents($this->pidfile, getmypid()); - return getmypid(); + file_put_contents($this->pidFile, getmypid()); + $this->initSocket(); } - private function init_socket() + /** + * 监听指定端口 + */ + private function initSocket() { //创建套接字 - $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or exit("socket_create 错误\n"); + $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or exit('启动失败:socket_create 错误' . PHP_EOL); //绑定地址和端口 - socket_bind($socket, IPC_ADDRESS, (int)IPC_PORT) or exit("socket_bind 错误 可能是由于频繁启动 端口未释放 请稍后重试或检查端口冲突\n"); + socket_bind($socket, IPC_ADDRESS, IPC_PORT) or exit('启动失败:socket_bind 错误,可能是由于频繁启动,端口未释放,请稍后重试或检查端口冲突' . PHP_EOL); //设置可重复使用端口号 socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1); //监听 设置并发队列的最大长度 - socket_listen($socket, (int)SOCKET_LISTEN_BACKLOG); + socket_listen($socket, SOCKET_LISTEN_BACKLOG); while (true) { //非阻塞式回收僵尸进程 pcntl_wait($status, WNOHANG); - $clien = socket_accept($socket) or exit("socket_accept 错误\n"); + $client = socket_accept($socket) or exit('启动失败:socket_accept 错误' . PHP_EOL); //非阻塞式回收僵尸进程 pcntl_wait($status, WNOHANG); $pid = pcntl_fork(); if ($pid == -1) { - exit("pcntl_fork 错误\n"); + exit('启动失败:pcntl_fork 错误' . PHP_EOL); } else if ($pid == 0) { - $this->handle_request($clien); + $this->handleRequest($client); } else { } } } - private function check_sys_type() + /** + * socket程序接收和处理请求 + */ + private function handleRequest($client) + { + //接收客户端发送的数据 + $data = socket_read($client, SOCKET_READ_LENGTH); + + //console + $this->workMode == 'console' ? print_r(PHP_EOL . '---------receive---------' . PHP_EOL . $data . PHP_EOL) : ''; + + if (trim($data) != '') { + /** + * shell_exec方法拿不到执行指令的错误抛出信息 + */ + // $result = shell_exec($data); + + /** + * passthru会将所有的结果(包括正确的和错误的抛出信息输出) + * 可以使用 ob_start ob_get_contents ob_end_clean 拿到缓冲区的内容 + * + * 此方法在console调试模式下会导致 $result 变量拿不到值; + * 但是在daemon模式下 $result 变量可以拿到值(猜测是输入到终端与输出到缓冲区的影响) + */ + ob_start(); + passthru($data); + $result = ob_get_contents(); + ob_end_clean(); + } else { + //探测程序会发送空信息 + $result = ''; + } + + //console + $this->workMode == 'console' ? print_r(PHP_EOL . '---------result---------' . PHP_EOL . $result . PHP_EOL) : ''; + + //处理没有返回内容的情况 否则 socket_write 遇到空内容会报错 + $result = $result == '' ? ISNULL : $result; + + //将结果返回给客户端 + socket_write($client, $result, strlen($result)) or die('启动失败:socket_write 错误' . PHP_EOL); + + //关闭会话 + socket_close($client); + + //退出进程 + exit(); + } + + /** + * 检查操作系统是否符合要求 + */ + private function checkSysType() { if (PHP_OS != 'Linux') { - exit("启动失败 \n当前操作系统不为Linux\n"); + exit('启动失败:当前操作系统不为Linux' . PHP_EOL); } if (file_exists('/etc/redhat-release')) { $info = file_get_contents('/etc/redhat-release'); if (!strstr($info, 'CentOS') && (strstr($info, '8.') || strstr($info, '7.'))) { - exit("启动失败 \n仅支持CentOS 7 和 CentOS8 系统\n"); + exit('启动失败:当前仅支持 CentOS 7和 CentOS8 操作系统' . PHP_EOL); } return; } - exit("启动失败 \n不支持当前操作系统\n"); + exit('启动失败:当前仅支持 CentOS 7和 CentOS8 操作系统' . PHP_EOL); } - private function check_php_version() + /** + * 检查php版本是否符合要求 + */ + private function checkPhpVersion() { if (PHP_VERSION < Required_PHP_VERSION) { - echo "启动失败 \n当前的PHP版本为 " . PHP_VERSION . " 最低的PHP版本要求为 " . Required_PHP_VERSION . "\n"; - exit(); + exit('启动失败:当前的PHP版本为:' . PHP_VERSION . ',要求的最低PHP版本为:' . Required_PHP_VERSION . PHP_EOL); } } - private function check_disabled_function() + /** + * 检查需要的函数是否被禁用 + */ + private function checkDisabledFunction() { $disabled_function = explode(',', ini_get('disable_functions')); - $needed_function = NEEDED_FUNCTION; - foreach ($needed_function as $key => $value) { + $cli_needed_function = unserialize(CLI_NEEDED_FUNCTION); + foreach ($cli_needed_function as $key => $value) { if (!in_array($value, $disabled_function)) { - unset($needed_function[$key]); + unset($cli_needed_function[$key]); } } - if (!empty($needed_function)) { - echo "启动失败 \n需要的以下PHP函数被禁用:\n" . implode("\n", $needed_function) . "\n"; - exit(); + if (!empty($cli_needed_function)) { + exit('启动失败:需要的以下函数被禁用:' . PHP_EOL . implode(' ', $cli_needed_function) . PHP_EOL); } } - private function handle_request($clien) + /** + * 以守护进程模式工作 + */ + private function startDaemon() { - //接收客户端发送的数据 - $data = socket_read($clien, (int)SOCKET_READ_LENGTH); - - //console - $this->state == "console" ? print_r("\n---------接收内容---------\n" . $data . "\n") : ""; - - if (trim($data) != "") { - //执行 - $result = shell_exec($data); - } else { - //探测程序会发送空信息 - $result = ""; - } - - //console - $this->state == "console" ? print_r("\n---------执行结果---------\n" . $result . "\n") : ""; - - //处理没有返回内容的情况 否则 socket_write 遇到空内容会报错 - $result = $result == "" ? ISNULL : $result; - - //将结果返回给客户端 - socket_write($clien, $result, strlen($result)) or die("socket_write 错误"); - - //关闭会话 - socket_close($clien); - - //退出进程 - exit(); - } - - private function start_daemon() - { - if (file_exists($this->pidfile)) { - $pid = file_get_contents($this->pidfile); + if (file_exists($this->pidFile)) { + $pid = file_get_contents($this->pidFile); $result = trim(shell_exec("ps -ax | awk '{ print $1 }' | grep -e \"^$pid$\"")); if (strstr($result, $pid)) { - echo "进程正在运行中 无需启动\n"; - exit(); + exit('程序正在运行中' . PHP_EOL); } } - return $this->init_daemon(); + $this->initDaemon(); } - private function start() + /** + * 关闭守护进程 + */ + private function stopDaemon() { - $this->start_daemon(); - $this->init_socket(); + if (file_exists($this->pidFile)) { + $pid = file_get_contents($this->pidFile); + posix_kill((int)$pid, 9); + unlink($this->pidFile); + } } - private function stop() + /** + * 以控制台模式工作 用于调试 + */ + private function startConsole() { - if (file_exists($this->pidfile)) { - $pid = file_get_contents($this->pidfile); - posix_kill((int)$pid, 9); - unlink($this->pidfile); - } + $this->initSocket(); } public function run($argv) { - $this->check_sys_type(); - $this->check_php_version(); - $this->check_disabled_function(); + $this->checkSysType(); + $this->checkPhpVersion(); + $this->checkDisabledFunction(); if (isset($argv[1])) { - $this->state = $argv[1]; - if (!in_array($this->state, $this->cmdlist)) { - echo "用法: php svnadmind.php [start] [stop] [console]\n"; - exit(); + $this->workMode = $argv[1]; + if (!in_array($this->workMode, $this->scripts)) { + exit('用法:php svnadmin.php [start | stop | coonsole]' . PHP_EOL); } - if ($this->state == 'start') { - $this->start(); - } else if ($this->state == 'stop') { - $this->stop(); - } else if ($this->state == 'console') { - $this->init_socket(); + if ($this->workMode == 'start') { + $this->startDaemon(); + } else if ($this->workMode == 'stop') { + $this->stopDaemon(); + } else if ($this->workMode == 'console') { + $this->startConsole(); } } else { - echo "用法: php svnadmind.php [start] [stop] [console]\n"; + exit('用法:php svnadmin.php [start | stop | coonsole]' . PHP_EOL); } } } -$deamon = new Daemon(); -$deamon->run($argv); +if (preg_match('/cli/i', php_sapi_name())) { + $deamon = new Daemon(); + $deamon->run($argv); +} diff --git a/02.php/templete/json/listen.json b/02.php/templete/json/listen.json new file mode 100644 index 0000000..cf0c372 --- /dev/null +++ b/02.php/templete/json/listen.json @@ -0,0 +1,6 @@ +{ + "bindPort": "", + "bindHost": "", + "manageHost": "", + "enable": "" +} \ No newline at end of file diff --git a/02.php/templete/json/mail.json b/02.php/templete/json/mail.json new file mode 100644 index 0000000..e69de29 diff --git a/02.php/templete/json/message.json b/02.php/templete/json/message.json new file mode 100644 index 0000000..e69de29 diff --git a/02.php/data/templete/authz b/02.php/templete/svnserve/authz similarity index 95% rename from 02.php/data/templete/authz rename to 02.php/templete/svnserve/authz index bb27943..12377d9 100644 --- a/02.php/data/templete/authz +++ b/02.php/templete/svnserve/authz @@ -1,4 +1,3 @@ [aliases] [groups] - diff --git a/02.php/data/templete/passwd b/02.php/templete/svnserve/passwd similarity index 100% rename from 02.php/data/templete/passwd rename to 02.php/templete/svnserve/passwd diff --git a/02.php/data/templete/servers b/02.php/templete/svnserve/servers similarity index 100% rename from 02.php/data/templete/servers rename to 02.php/templete/svnserve/servers diff --git a/02.php/templete/svnserve/svnserve b/02.php/templete/svnserve/svnserve new file mode 100644 index 0000000..5098851 --- /dev/null +++ b/02.php/templete/svnserve/svnserve @@ -0,0 +1 @@ +OPTIONS="-r /home/svnadmin/rep --config-file /home/svnadmin/svnserve.conf --log-file /home/svnadmin/logs/svnserve/svnserve.log" diff --git a/02.php/data/templete/svnserve.conf b/02.php/templete/svnserve/svnserve.conf similarity index 92% rename from 02.php/data/templete/svnserve.conf rename to 02.php/templete/svnserve/svnserve.conf index 35de829..0553f9d 100644 --- a/02.php/data/templete/svnserve.conf +++ b/02.php/templete/svnserve/svnserve.conf @@ -3,4 +3,4 @@ anon-access = none auth-access = write password-db = passwd authz-db = authz -[sasl] \ No newline at end of file +[sasl] diff --git a/03.database/mysql/svnadmin.mysql.struct.sql b/03.database/mysql/svnadmin.mysql.struct.sql new file mode 100644 index 0000000..0876543 --- /dev/null +++ b/03.database/mysql/svnadmin.mysql.struct.sql @@ -0,0 +1,220 @@ +-- MySQL dump 10.13 Distrib 5.6.50, for Linux (x86_64) +-- +-- Host: localhost Database: svnadmin +-- ------------------------------------------------------ +-- Server version 5.6.50-log + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `admin_users` +-- + +DROP TABLE IF EXISTS `admin_users`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `admin_users` ( + `admin_user_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户id', + `admin_user_name` varchar(45) NOT NULL COMMENT '用户名', + `admin_user_password` varchar(45) NOT NULL COMMENT '用户密码', + `admin_user_phone` char(11) DEFAULT NULL COMMENT '用户手机号', + `admin_user_email` varchar(45) DEFAULT NULL COMMENT '用户邮箱', + `admin_user_salt` varchar(45) NOT NULL COMMENT '盐值', + PRIMARY KEY (`admin_user_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='管理系统用户'; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `admin_users` +-- + +LOCK TABLES `admin_users` WRITE; +/*!40000 ALTER TABLE `admin_users` DISABLE KEYS */; +/*!40000 ALTER TABLE `admin_users` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `black_token` +-- + +DROP TABLE IF EXISTS `black_token`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `black_token` ( + `token_id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'tokenid', + `token` varchar(200) NOT NULL COMMENT 'token内容', + `start_time` varchar(45) NOT NULL COMMENT 'token的生效时间', + `end_time` varchar(45) NOT NULL COMMENT 'token的失效时间', + `insert_time` varchar(45) NOT NULL COMMENT '注销时间', + PRIMARY KEY (`token_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='黑名单token 意思为用户注销后尚未达到过期时间的token将会被加入此黑名单 通过定时的主动扫描来去除过期的token 达到注销即安全的目的'; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `black_token` +-- + +LOCK TABLES `black_token` WRITE; +/*!40000 ALTER TABLE `black_token` DISABLE KEYS */; +/*!40000 ALTER TABLE `black_token` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `logs` +-- + +DROP TABLE IF EXISTS `logs`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `logs` ( + `log_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '日志id', + `log_type_name` varchar(200) NOT NULL COMMENT '日志类型', + `log_content` varchar(5000) NOT NULL COMMENT '日志内容', + `log_add_user_name` varchar(200) NOT NULL COMMENT '操作人', + `log_add_time` varchar(45) NOT NULL COMMENT '操作时间', + PRIMARY KEY (`log_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='日志表'; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `logs` +-- + +LOCK TABLES `logs` WRITE; +/*!40000 ALTER TABLE `logs` DISABLE KEYS */; +/*!40000 ALTER TABLE `logs` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `svn_groups` +-- + +DROP TABLE IF EXISTS `svn_groups`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `svn_groups` ( + `svn_group_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '分组id', + `svn_group_name` varchar(200) NOT NULL COMMENT '分组名称', + `include_user_count` int(11) NOT NULL, + `include_group_count` int(11) NOT NULL, + `svn_group_note` varchar(1000) DEFAULT NULL COMMENT '分组备注信息', + PRIMARY KEY (`svn_group_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='SVN分组表'; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `svn_groups` +-- + +LOCK TABLES `svn_groups` WRITE; +/*!40000 ALTER TABLE `svn_groups` DISABLE KEYS */; +/*!40000 ALTER TABLE `svn_groups` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `svn_reps` +-- + +DROP TABLE IF EXISTS `svn_reps`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `svn_reps` ( + `rep_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '仓库id', + `rep_name` varchar(1000) NOT NULL COMMENT '仓库名称', + `rep_size` double DEFAULT NULL COMMENT '仓库体积', + `rep_note` varchar(1000) DEFAULT NULL COMMENT '仓库备注', + `rep_rev` int(11) DEFAULT NULL COMMENT '仓库修订版本', + `rep_uuid` varchar(45) DEFAULT NULL COMMENT '仓库UUID', + PRIMARY KEY (`rep_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='仓库表'; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `svn_reps` +-- + +LOCK TABLES `svn_reps` WRITE; +/*!40000 ALTER TABLE `svn_reps` DISABLE KEYS */; +/*!40000 ALTER TABLE `svn_reps` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `svn_users` +-- + +DROP TABLE IF EXISTS `svn_users`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `svn_users` ( + `svn_user_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户id', + `svn_user_name` varchar(200) NOT NULL COMMENT '用户名', + `svn_user_pass` varchar(200) NOT NULL COMMENT '用户密码', + `svn_user_status` int(1) NOT NULL COMMENT '用户启用状态\n0 禁用\n1 启用', + `svn_user_note` varchar(1000) DEFAULT NULL COMMENT '用户备注信息', + PRIMARY KEY (`svn_user_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='svn用户表'; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `svn_users` +-- + +LOCK TABLES `svn_users` WRITE; +/*!40000 ALTER TABLE `svn_users` DISABLE KEYS */; +/*!40000 ALTER TABLE `svn_users` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `verification_code` +-- + +DROP TABLE IF EXISTS `verification_code`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `verification_code` ( + `code_id` int(11) NOT NULL AUTO_INCREMENT, + `uuid` varchar(45) NOT NULL COMMENT '每次验证码请求的唯一标识', + `code` varchar(45) NOT NULL COMMENT '验证码', + `start_time` varchar(45) NOT NULL COMMENT '有效开始时间', + `end_time` varchar(45) NOT NULL COMMENT '失效时间', + `insert_time` varchar(45) NOT NULL COMMENT '插入时间', + PRIMARY KEY (`code_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='验证码'; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `verification_code` +-- + +LOCK TABLES `verification_code` WRITE; +/*!40000 ALTER TABLE `verification_code` DISABLE KEYS */; +/*!40000 ALTER TABLE `verification_code` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Dumping events for database 'svnadmin' +-- + +-- +-- Dumping routines for database 'svnadmin' +-- +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2022-04-23 15:07:58 diff --git a/03.database/sqlite/svnadmin.sqlite.struct.db b/03.database/sqlite/svnadmin.sqlite.struct.db new file mode 100644 index 0000000..0f23e45 Binary files /dev/null and b/03.database/sqlite/svnadmin.sqlite.struct.db differ diff --git a/03.database/sqlite/svnadmin.sqlite.struct.sql b/03.database/sqlite/svnadmin.sqlite.struct.sql new file mode 100644 index 0000000..3ca760a --- /dev/null +++ b/03.database/sqlite/svnadmin.sqlite.struct.sql @@ -0,0 +1,114 @@ +/* + Navicat Premium Data Transfer + + Source Server : svnadminv2.3 + Source Server Type : SQLite + Source Server Version : 3030001 + Source Schema : main + + Target Server Type : SQLite + Target Server Version : 3030001 + File Encoding : 65001 + + Date: 23/04/2022 15:03:11 +*/ + +PRAGMA foreign_keys = false; + +-- ---------------------------- +-- Table structure for admin_users +-- ---------------------------- +DROP TABLE IF EXISTS "admin_users"; +CREATE TABLE "admin_users" ( + "admin_user_id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + "admin_user_name" TEXT(45) NOT NULL, + "admin_user_password" TEXT(45) NOT NULL, + "admin_user_phone" TEXT(11), + "admin_user_email" TEXT, + "admin_user_salt" TEXT NOT NULL +); + +-- ---------------------------- +-- Table structure for black_token +-- ---------------------------- +DROP TABLE IF EXISTS "black_token"; +CREATE TABLE "black_token" ( + "token_id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + "token" TEXT(200) NOT NULL, + "start_time" TEXT(45) NOT NULL, + "end_time" TEXT(45) NOT NULL, + "insert_time" TEXT(45) NOT NULL +); + +-- ---------------------------- +-- Table structure for logs +-- ---------------------------- +DROP TABLE IF EXISTS "logs"; +CREATE TABLE "logs" ( + "log_id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + "log_type_name" TEXT(200) NOT NULL, + "log_content" TEXT(5000), + "log_add_user_name" TEXT(200) NOT NULL, + "log_add_time" TEXT(45) NOT NULL +); + +-- ---------------------------- +-- Table structure for sqlite_sequence +-- ---------------------------- +DROP TABLE IF EXISTS "sqlite_sequence"; +CREATE TABLE "sqlite_sequence" ( + "name", + "seq" +); + +-- ---------------------------- +-- Table structure for svn_groups +-- ---------------------------- +DROP TABLE IF EXISTS "svn_groups"; +CREATE TABLE "svn_groups" ( + "svn_group_id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + "svn_group_name" TEXT(200) NOT NULL, + "include_user_count" integer NOT NULL, + "include_group_count" integer NOT NULL, + "svn_group_note" TEXT(1000) +); + +-- ---------------------------- +-- Table structure for svn_users +-- ---------------------------- +DROP TABLE IF EXISTS "svn_users"; +CREATE TABLE "svn_users" ( + "svn_user_id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + "svn_user_name" TEXT(200) NOT NULL, + "svn_user_pass" TEXT(200) NOT NULL, + "svn_user_status" integer(1) NOT NULL, + "svn_user_note" TEXT(1000) +); + +-- ---------------------------- +-- Table structure for verification_code +-- ---------------------------- +DROP TABLE IF EXISTS "verification_code"; +CREATE TABLE "verification_code" ( + "code_id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + "uuid" text(45) NOT NULL, + "code" TEXT(45) NOT NULL, + "start_time" TEXT(45) NOT NULL, + "end_time" TEXT(45) NOT NULL, + "insert_time" TEXT(45) NOT NULL +); + +-- ---------------------------- +-- Table structure for svn_reps +-- ---------------------------- +DROP TABLE IF EXISTS "svn_reps"; +CREATE TABLE "svn_reps" ( + "rep_id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + "rep_name" TEXT(1000) NOT NULL, + "rep_size" integer, + "rep_rev" integer, + "rep_uuid" text, + "rep_note" TEXT(1000) +); + +PRAGMA foreign_keys = true; diff --git a/README.md b/README.md index e97d6b7..fcd9204 100644 --- a/README.md +++ b/README.md @@ -1,134 +1,141 @@ # SVNAdmin 系统部署与使用手册 -1、该系统为使用PHP开发的Subversion(SVN)的web管理界面 是搭建svn服务器的神器 可一分钟安装使用! +1、该系统为使用PHP开发的基于web的Subversion(SVN)服务器端管理工具 -2、目前支持CentOS 8、CentOS7系统 PHP版本要求为 PHP 7 >= 7.3.0, PHP 8 +2、支持操作系统:CentOS7、CentOS8(其它Linux发行版正在测试兼容中) -3、演示地址:http://svnadmin.witersen.com (默认的用户名与密码都为 administrator) +3、支持PHP版本:PHP5.4+ -4、GitHub地址:https://github.com/witersen/SvnAdminV2.0 Gitee地址:https://gitee.com/witersen/SvnAdminV2.0 +4、支持数据库:SQLite、MySQL -5、可以加入群聊讨论遇到的问题 QQ群 633108141 +5、支持Subversion:1.8+ -## 一 、系统部署 - CentOS8.2裸机 +6、支持功能:SVN仓库管理、SVN用户管理、SVN分组管理、目录授权、目录浏览、Hooks管理、在线dump备份、在线备份恢复、SVN用户禁用、服务器状态管理、日志管理、消息通知、更新检测... -### (1)安装 PHP 7.4 及依赖 +7、旧版本演示地址:http://svnadmin.witersen.com (默认的用户名与密码都为 administrator) -``` -yum install -y zip unzip wget #压缩与解压缩和下载工具 -yum module list php #查看可用的PHP模块 -yum module -y enable php:7.4 #启用PHP7.4,默认为启用PHP7.2 -yum install -y php #安装PHP7.4 -yum install -y php-process #pentl扩展和posix扩展 -yum install -y php-json #json相关函数 +8、GitHub地址:https://github.com/witersen/SvnAdminV2.0 Gitee地址:https://gitee.com/witersen/SvnAdminV2.0 -``` +9、可以加入群聊讨论遇到的问题 QQ群 633108141 -### (2)安装 Web 服务器 -``` -yum install -y httpd #安装Apache -systemctl start httpd #开启Apache -systemctl enable httpd #将Apache加入开机自启动 -systemctl restart php-fpm #重启php-fpm +## 一 、新版本v2.3介绍(测试中) -``` +- 登录界面可分角色登录,配合后端实现的登录验证码更安全 -### (3)下载并解压部署程序 -- 在控制台 执行以下命令 -``` -cd /var/www/html -wget https://gitee.com/witersen/SvnAdminV2.0/attach_files/960502/download/v2.2.2.zip -unzip v2.2.2.zip -chmod 777 -R /var/www/html/config -mkdir -p /home/svnadmin/rep + ![](./00.static/01.images/01.jpg) + +- 服务器状态监控和信息统计,对当前服务器状态和SVN仓库信息更加了解 -``` + ![](./00.static/01.images/02.jpg) + +- SVN仓库概览,提供了多种高级功能,还可根据仓库名、版本数、体积等一键排序 -### (4)启动后台程序 + ![](./00.static/01.images/03.jpg) + +- 新建SVN仓库提供两种模式 随意选择 -- 进入程序代码的server目录,在命令行下以root用户身份执行以下命令 + ![](./00.static/01.images/04.jpg) + +- 在线目录浏览更加方便 逐层加载,服务资源占用更低 -``` -cd server -php svnadmind.php start + ![](./00.static/01.images/05.jpg) + +- 通过目录面包屑可以随时回到某级目录 可以看到目录的作者、版本、提交日期、提交日志等,还可一键复制检出地址 -``` + ![](./00.static/01.images/06.jpg) + +- 仓库授权精确到文件级别,可对用户和用户组快速授权和更改权限 -- 执行以下命令用来查看程序的server端是否正常运行 + ![](./00.static/01.images/07.jpg) + +- 支持在线dump方式备份,备份文件可随时下载或删除 -``` -ps aux | grep svnadmind + ![](./00.static/01.images/08.jpg) + +- 支持对SVN仓库钩子的管理 -``` + ![](./00.static/01.images/09.jpg) + +- 可以查看每个仓库的详细信息,一键复制详细信息更加方便 -- 如图所示,可看到服务端程序正常运行在后台 - + ![](./00.static/01.images/10.jpg) + +- 可以将通过dump方式备份的文件再导入仓库 实现SVN仓库的迁移 -### (5)web 访问测试 + ![](./00.static/01.images/11.jpg) + +- 仓库导入过程中如果抛出了错误信息会被收集被显示 方便管理人员更好的定位问题 -- 访问部署主机地址,可看到程序的登录页信息,代表部署成功 + ![](./00.static/01.images/12.jpg) + +- 可以很方便的修改仓库名称,这会自动同步配置文件,所以无需担心 -- 可使用默认的用户名(administrator)与密码(administrator)访问 + ![](./00.static/01.images/13.jpg) + +- 删除仓库也会有风险提示 -## 二 、系统部署 - 基于CentOS的宝塔面板 + ![](./00.static/01.images/14.jpg) + +- SVN用户管理支持启用、禁用、添加备注信息,管理用户更加方便 -### (1)安装 PHP 7.4 + ![](./00.static/01.images/15.jpg) + +- SVN分组支持显示其包含的用户和分组数量 同时支持修改备注信息 - + ![](./00.static/01.images/16.jpg) + +- 可以对分组进行用户成员编辑,系统会贴心的提示用户是否处于禁用状态 -### (2)解禁 PHP7.4 禁用的函数 + ![](./00.static/01.images/17.jpg) + +- 用户管理支持组嵌套,同时如果你不小心搞了一个循环嵌套,系统会提示你 -- 解禁PHP7.4中 pcntl_signal、pcntl_fork、pcntl_wait、shell_exec 四个被宝塔面板默认禁用的函数 - + ![](./00.static/01.images/18.jpg) + +- 分组名支持修改,系统会帮你修改配置文件的一切,无需担心 -### (3)创建站点 关闭网站设置中的 open_basedir + ![](./00.static/01.images/19.jpg) + +- 系统提供了日志功能,可以对系统的运转情况做个记录啦 - + ![](./00.static/01.images/20.jpg) + +- 管理人员可以修改自己的账号和密码,更加安全 -### (4)将PHP的命令行版本更换至安装的PHP7.4 + ![](./00.static/01.images/21.jpg) + +- 系统提供了svnserve主机和端口绑定功能 而且开启了svnserve的运行日志 为你多一层运维保障 - + ![](./00.static/01.images/22.jpg) + +- 看看你的数据都在哪里存储呢 -### (5)记得关闭PHP7.4的 错误输出 + ![](./00.static/01.images/23.jpg) + +- 配置邮件通知服务吧 - + ![](./00.static/01.images/24.jpg) + +- 风险操作可以来个提示 -### (5)下载并解压部署程序 -- 在网站目录切换到宝塔控制台 执行以下命令 -``` -wget https://gitee.com/witersen/SvnAdminV2.0/attach_files/960502/download/v2.2.2.zip -unzip v2.2.2.zip -chmod 777 -R config -mkdir -p /home/svnadmin/rep + ![](./00.static/01.images/25.jpg) + +- 定期修改密钥更安全 -``` + ![](./00.static/01.images/26.jpg) + +- 看看有没有新版本吧 -### (6)启动后台程序 + ![](./00.static/01.images/27.jpg) + +- SVN用户个人的界面 只可看到被授权的仓库路径 -- 进入程序代码的server目录,在宝塔控制台下以root用户身份执行以下命令 + ![](./00.static/01.images/28.jpg) + +- SVN用户可自己修改密码 无需联系管理人员了 -``` -cd server -php svnadmind.php start + ![](./00.static/01.images/29.jpg) -``` - -- 执行以下命令用来查看程序的server端是否正常运行 - -``` -ps aux | grep svnadmind - -``` - -- 如图所示,可看到服务端程序正常运行在后台 - ![](./00.static/01.images/002.png) - -### (7)web 访问测试 - -- 访问部署主机地址,可看到程序的登录页信息,代表部署成功 - -- 可使用默认的用户名(administrator)与密码(administrator)访问 - -## 三、将已有的SVN仓库使用此系统管理 +## 二、将已有的SVN仓库使用此系统管理 - (1)安装本系统 - (2)通过系统服务管理界面安装Subversion