diff --git a/.gitmodules b/.gitmodules index dc85288f252..83c24e9a7d8 100644 --- a/.gitmodules +++ b/.gitmodules @@ -5,3 +5,15 @@ path = external/qooxdoo url = https://github.com/CometVisu/qooxdoo.git branch = cometvisu +[submodule "external/qx-osparc-theme"] + path = external/qx-osparc-theme + url = https://github.com/peuter/qx-osparc-theme.git +[submodule "external/qx-iconfont-material"] + path = external/qx-iconfont-material + url = https://github.com/peuter/qx-iconfont-material.git +[submodule "external/qx-contrib-dialog"] + path = external/qx-contrib-dialog + url = https://github.com/cboulanger/qx-contrib-Dialog.git +[submodule "external/qx-upload-manager"] + path = external/qx-upload-manager + url = https://github.com/johnspackman/UploadMgr.git diff --git a/.jshintignore b/.jshintignore new file mode 100644 index 00000000000..5d77295cbfb --- /dev/null +++ b/.jshintignore @@ -0,0 +1 @@ +source/rest \ No newline at end of file diff --git a/.jshintrc b/.jshintrc index a4a7ee0896b..16b032193c6 100644 --- a/.jshintrc +++ b/.jshintrc @@ -16,6 +16,7 @@ "smarttabs": true, "multistr": true, "jasmine": true, + "worker": true, "globals": { "browser": false, "describe": false, @@ -47,6 +48,12 @@ "EVENT_RECORDER": true, "DOMWindow": false, "Favico": false, - "Sentry": true + "Sentry": true, + "osparc": true, + "monaco": true, + "CRC32": true, + "xmllint": true, + "dialog": true, + "com": true } } \ No newline at end of file diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 23efe529112..0ddf1b0ab5f 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -9,7 +9,8 @@ Preparation The new build system requires python2 and grunt. Also you have to run `npm install` once, because at least the build-task (explained later) includes a grunt task which minifies included -external dependencies. +external dependencies. If you want to use the REST API backend included in the CometVisu you +have to run `grunt composer:rest:install` to load the external dependencies for the PHP code. After cloning the sources or updating from 0.10.x you have to do the following steps once: diff --git a/Gruntfile.js b/Gruntfile.js index 478a508efca..04b3f47872f 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -516,6 +516,14 @@ module.exports = function(grunt) { dest: 'build/resource/libs' }] } + }, + composer : { + rest: { + options : { + flags: ['prefer-dist', 'no-dev'], + cwd: 'source/rest/cv' + } + } } }; grunt.initConfig(config); @@ -642,12 +650,13 @@ module.exports = function(grunt) { grunt.loadNpmTasks('grunt-shell'); grunt.loadNpmTasks('grunt-scaffold'); grunt.loadNpmTasks('grunt-contrib-uglify'); + grunt.loadNpmTasks('grunt-composer'); // Default task runs all code checks, updates the banner and builds the release grunt.registerTask('buildicons', ['clean:iconcache', 'svgmin', 'svgstore', 'handle-kuf-svg']); grunt.registerTask('release-build', [ 'release-cv', 'release-client' ]); grunt.registerTask('release-cv', [ - 'updateicons', 'shell:lint', 'clean', 'file-creator', 'buildicons', 'shell:build', + 'updateicons', 'shell:lint', 'clean', 'file-creator', 'buildicons', 'composer:rest:install', 'shell:build', 'update-demo-config', 'chmod', 'shell:buildToRelease', 'compress:tar', 'compress:zip' ]); grunt.registerTask('release-client', ['shell:buildClient', 'rename-client-build']); diff --git a/config.json b/config.json index c457a9a071b..bd7258d4039 100644 --- a/config.json +++ b/config.json @@ -36,7 +36,8 @@ "validate-config", "validate-manifest", "watch", - "profile" + "profile", + "make-font-map" ], "default-job" : "source-hybrid", @@ -100,7 +101,8 @@ "svg4everybody", "EVENT_RECORDER", "Favico", - "Sentry" + "Sentry", + "Promise" ] }, @@ -163,7 +165,8 @@ "version", "library_version.inc.php", "manifest.json", - "../node_modules/monaco-editor" + "../node_modules/monaco-editor", + "rest/cv" ] } }, @@ -172,7 +175,23 @@ { "library" : [ - { "manifest" : "client/Manifest.json" } + { "manifest" : "client/Manifest.json" }, + { + "manifest" : "external/qx-iconfont-material/Manifest.json", + "uri" : "../external/qx-iconfont-material" + }, + { + "manifest" : "external/qx-osparc-theme/Manifest.json", + "uri" : "../external/qx-osparc-theme" + }, + { + "manifest" : "external/qx-contrib-dialog/Manifest.json", + "uri" : "../external/qx-contrib-dialog" + }, + { + "manifest" : "external/qx-upload-manager/Manifest.json", + "uri" : "../external/qx-upload-manager" + } ] }, @@ -198,6 +217,7 @@ { // "verifier-bombs-on-error" : false, // "separate-loader" : true, + "i18n-as-parts": true, "parts" : { "boot" : @@ -213,6 +233,10 @@ "include": [ "${APPLICATION}.ui.structure.pure.*" ] }, + "manager": { + "include": [ "${APPLICATION}.ui.manager.Main" ] + }, + "plugin-diagram" : { "include" : [ "${APPLICATION}.plugins.diagram.*" ] @@ -283,7 +307,7 @@ }, "plugin-openhab" : { - "include" : [ "${APPLICATION}.plugins.openhab.*", "${QXTHEME}" ] + "include" : [ "${APPLICATION}.plugins.openhab.*" ] } } } @@ -520,6 +544,30 @@ { "qx.aspects" : true } + }, + + "make-font-map" : + { + "desc" : "Build a font mapping from glyphname to unicode id", + + "let" : + { + "RESPATH" : "./external/qx-iconfont-material/source/resource", + "QXRESPATH" : "${QOOXDOO_PATH}/framework/source/resource" + }, + + "font-map" : + { + "fonts" : + { + "${RESPATH}/iconfont/material/MaterialIcons-Regular.ttf" : + { + "prefix": [ "${RESPATH}" ], + "alias" : "MaterialIcons", + "size" : 32 + } + } + } } } } diff --git a/external/qooxdoo b/external/qooxdoo index 69366cee89b..79685e11685 160000 --- a/external/qooxdoo +++ b/external/qooxdoo @@ -1 +1 @@ -Subproject commit 69366cee89bca5972bf0b7350bfe85ec7f4f5ba0 +Subproject commit 79685e11685a2c8953210380af6cf00060d9a8b8 diff --git a/external/qx-contrib-dialog b/external/qx-contrib-dialog new file mode 160000 index 00000000000..d9f9c4f74b1 --- /dev/null +++ b/external/qx-contrib-dialog @@ -0,0 +1 @@ +Subproject commit d9f9c4f74b1e745bab0c3b5864bf52ae2500867a diff --git a/external/qx-iconfont-material b/external/qx-iconfont-material new file mode 160000 index 00000000000..de2cd99c35e --- /dev/null +++ b/external/qx-iconfont-material @@ -0,0 +1 @@ +Subproject commit de2cd99c35e7a45ed66ba66506011b99f5afa656 diff --git a/external/qx-osparc-theme b/external/qx-osparc-theme new file mode 160000 index 00000000000..8154f05a2dc --- /dev/null +++ b/external/qx-osparc-theme @@ -0,0 +1 @@ +Subproject commit 8154f05a2dc5fd1f2d844121036f51acc15f43da diff --git a/external/qx-upload-manager b/external/qx-upload-manager new file mode 160000 index 00000000000..66dfe2def73 --- /dev/null +++ b/external/qx-upload-manager @@ -0,0 +1 @@ +Subproject commit 66dfe2def73e673a7fcb7bb42043fee65cd267e8 diff --git a/package-lock.json b/package-lock.json index f6d5910bcaf..e286107ef51 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,66 +5,66 @@ "requires": true, "dependencies": { "@sentry/browser": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-4.3.4.tgz", - "integrity": "sha512-odRXxnhcSYzyR4YvTolNEyrz3fdDVw308l+9RBRJA9yOFVlezaz1mXH6Gv00F7cIj9yE/JtezDyhP339WsWy3w==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-5.7.1.tgz", + "integrity": "sha512-K0x1XhsHS8PPdtlVOLrKZyYvi5Vexs9WApdd214bO6KaGF296gJvH1mG8XOY0+7aA5i2A7T3ttcaJNDYS49lzw==", "requires": { - "@sentry/core": "4.3.4", - "@sentry/types": "4.3.4", - "@sentry/utils": "4.3.4", + "@sentry/core": "5.7.1", + "@sentry/types": "5.7.1", + "@sentry/utils": "5.7.1", "tslib": "^1.9.3" } }, "@sentry/core": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-4.3.4.tgz", - "integrity": "sha512-KwolQmAnXiFMeXBuxPUM8fW+2bOICdHfpjdf83qD7WSeuKqGvXhxXyApWNSLE+l2DPO6/8UKnIGmR8bEn0G7QA==", - "requires": { - "@sentry/hub": "4.3.4", - "@sentry/minimal": "4.3.4", - "@sentry/types": "4.3.4", - "@sentry/utils": "4.3.4", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.7.1.tgz", + "integrity": "sha512-AOn3k3uVWh2VyajcHbV9Ta4ieDIeLckfo7UMLM+CTk2kt7C89SayDGayJMSsIrsZlL4qxBoLB9QY4W2FgAGJrg==", + "requires": { + "@sentry/hub": "5.7.1", + "@sentry/minimal": "5.7.1", + "@sentry/types": "5.7.1", + "@sentry/utils": "5.7.1", "tslib": "^1.9.3" } }, "@sentry/hub": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-4.3.4.tgz", - "integrity": "sha512-vaBGCnhinLB8N4aQLMiPPhnlTkIUwU/dxWzw/xsuKY3MYWrmfMUyWgMZF60Mz3B4F0lW1lsg5jnJz9xPnjZowg==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.7.1.tgz", + "integrity": "sha512-evGh323WR073WSBCg/RkhlUmCQyzU0xzBzCZPscvcoy5hd4SsLE6t9Zin+WACHB9JFsRQIDwNDn+D+pj3yKsig==", "requires": { - "@sentry/types": "4.3.4", - "@sentry/utils": "4.3.4", + "@sentry/types": "5.7.1", + "@sentry/utils": "5.7.1", "tslib": "^1.9.3" } }, "@sentry/minimal": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-4.3.4.tgz", - "integrity": "sha512-EBmQgdAQgxkhWFsBO4TmsP3cg5yTzg48HmPe3Dyt7PtF5Umw3DFW6qboAqnN1+KF+pHNuxkqevvgBTFp7b4Saw==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.7.1.tgz", + "integrity": "sha512-nS/Dg+jWAZtcxQW8wKbkkw4dYvF6uyY/vDiz/jFCaux0LX0uhgXAC9gMOJmgJ/tYBLJ64l0ca5LzpZa7BMJQ0g==", "requires": { - "@sentry/hub": "4.3.4", - "@sentry/types": "4.3.4", + "@sentry/hub": "5.7.1", + "@sentry/types": "5.7.1", "tslib": "^1.9.3" } }, "@sentry/types": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-4.3.4.tgz", - "integrity": "sha512-qsqrcyNilpbzYjqef+km0Grh5BckSFD4MUdJDNkUE5XU/ImniYddj18bMDlQxluJlTPDjUFQ37FXtEmxLeOwkQ==" + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.7.1.tgz", + "integrity": "sha512-tbUnTYlSliXvnou5D4C8Zr+7/wJrHLbpYX1YkLXuIJRU0NSi81bHMroAuHWILcQKWhVjaV/HZzr7Y/hhWtbXVQ==" }, "@sentry/utils": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-4.3.4.tgz", - "integrity": "sha512-CMGMdIv5RHUCKRF4aWPZ/gFRTfBQpLVVJEGCeFGZLXHBdpgQac0lf3jlu8sND0KZ0S3C5x3tGS/eEqmOZRQ/pw==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.7.1.tgz", + "integrity": "sha512-nhirUKj/qFLsR1i9kJ5BRvNyzdx/E2vorIsukuDrbo8e3iZ11JMgCOVrmC8Eq9YkHBqgwX4UnrPumjFyvGMZ2Q==", "requires": { - "@sentry/types": "4.3.4", + "@sentry/types": "5.7.1", "tslib": "^1.9.3" } }, "@types/node": { - "version": "6.14.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-6.14.2.tgz", - "integrity": "sha512-JWB3xaVfsfnFY8Ofc9rTB/op0fqqTSqy4vBcVk1LuRJvta7KTX+D//fCkiTMeLGhdr2EbFZzQjC97gvmPilk9Q==", + "version": "12.12.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.5.tgz", + "integrity": "sha512-KEjODidV4XYUlJBF3XdjSH5FWoMCtO0utnhtdLf1AgeuZLOrRbvmU/gaRCVg7ZaQDjVf3l84egiY0mRNe5xE4A==", "dev": true }, "@types/q": { @@ -86,13 +86,13 @@ "dev": true }, "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "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.18", - "negotiator": "0.6.1" + "mime-types": "~2.1.24", + "negotiator": "0.6.2" } }, "adm-zip": { @@ -117,9 +117,9 @@ } }, "ajv": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.5.tgz", - "integrity": "sha512-7q7gtRQDJSyuEHjuVgHoUa2VuemFiCMrfQc9Tc08XTAc4Zj/5U1buQJ0HU6i7fKjXU09SVgSmxa4sLvuvS8Iyg==", + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", "dev": true, "requires": { "fast-deep-equal": "^2.0.1", @@ -137,7 +137,7 @@ }, "ansi-escapes": { "version": "1.4.0", - "resolved": "http://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", "dev": true }, @@ -148,21 +148,37 @@ "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 + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } }, "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", "dev": true, "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "dependencies": { + "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 + } } }, + "append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY=" + }, "application-config": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/application-config/-/application-config-0.1.2.tgz", @@ -183,12 +199,11 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true, - "optional": true + "dev": true }, "archiver": { "version": "1.3.0", - "resolved": "http://registry.npmjs.org/archiver/-/archiver-1.3.0.tgz", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-1.3.0.tgz", "integrity": "sha1-TyGU1tj5nfP1MeaIHxTxXVX6ryI=", "dev": true, "requires": { @@ -204,41 +219,42 @@ }, "dependencies": { "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + "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.10" + "lodash": "^4.17.14" } }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "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": { - "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" + "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" } }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "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": { - "brace-expansion": "^1.1.7" + "safe-buffer": "~5.1.0" } } } @@ -257,39 +273,34 @@ "readable-stream": "^2.0.0" }, "dependencies": { - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "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": { - "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" + "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" } }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "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": { - "brace-expansion": "^1.1.7" + "safe-buffer": "~5.1.0" } } } @@ -299,10 +310,41 @@ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", "dev": true, - "optional": true, "requires": { "delegates": "^1.0.0", "readable-stream": "^2.0.6" + }, + "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" + } + } } }, "argparse": { @@ -312,38 +354,22 @@ "dev": true, "requires": { "sprintf-js": "~1.0.2" + }, + "dependencies": { + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + } } }, - "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-slice": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", - "dev": true - }, "array-union": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", @@ -359,12 +385,6 @@ "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 - }, "arraybuffer.slice": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", @@ -378,13 +398,10 @@ "dev": true }, "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz", + "integrity": "sha1-VZvhg3bQik7E2+gId9J4GGObLfc=", + "dev": true }, "assert": { "version": "1.4.1", @@ -396,15 +413,9 @@ } }, "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz", + "integrity": "sha1-7nQAlBMALYTOxyGcasgRgS5yMWA=", "dev": true }, "async": { @@ -413,16 +424,10 @@ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", "dev": true }, - "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", - "dev": true - }, "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", "dev": true }, "asynckit": { @@ -431,12 +436,6 @@ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": 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 - }, "aws-sign": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/aws-sign/-/aws-sign-0.3.0.tgz", @@ -444,10 +443,11 @@ "dev": true }, "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz", + "integrity": "sha1-xXED96F/wDfwLXwuZLYC6iI/fWM=", + "dev": true, + "optional": true }, "aws4": { "version": "1.8.0", @@ -467,67 +467,6 @@ "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-arraybuffer": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", @@ -535,9 +474,9 @@ "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==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", "dev": true }, "base64id": { @@ -586,9 +525,9 @@ } }, "binary-extensions": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz", - "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", + "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", "dev": true }, "bl": { @@ -599,6 +538,38 @@ "requires": { "readable-stream": "^2.3.5", "safe-buffer": "^5.1.1" + }, + "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" + } + } } }, "blob": { @@ -607,16 +578,6 @@ "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", "dev": true }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "dev": true, - "optional": true, - "requires": { - "inherits": "~2.0.0" - } - }, "blocking-proxy": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-1.0.1.tgz", @@ -635,37 +596,59 @@ } }, "bluebird": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-1.0.3.tgz", - "integrity": "sha1-xLRBGEgC47ZKYe7tRXgnG0yL9qw=", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.1.tgz", + "integrity": "sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg==", "dev": true }, "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", "dev": true, "requires": { - "bytes": "3.0.0", + "bytes": "3.1.0", "content-type": "~1.0.4", "debug": "2.6.9", "depd": "~1.1.2", - "http-errors": "~1.6.3", - "iconv-lite": "0.4.23", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", "on-finished": "~2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "~1.6.16" + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" }, "dependencies": { - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", "dev": true, "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true } } }, @@ -677,7 +660,7 @@ }, "boom": { "version": "0.4.2", - "resolved": "http://registry.npmjs.org/boom/-/boom-0.4.2.tgz", + "resolved": "https://registry.npmjs.org/boom/-/boom-0.4.2.tgz", "integrity": "sha1-emNune1O/O+xnO9JR6PGffrukRs=", "dev": true, "requires": { @@ -703,47 +686,27 @@ } }, "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" - } - } + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" } }, "browserstack": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.5.2.tgz", - "integrity": "sha512-+6AFt9HzhKykcPF79W6yjEUJcdvZOV0lIXdkORXMJftGrDl0OKWqRF4GHqpDNkxiceDT/uB7Fb/aDwktvXX7dg==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.5.3.tgz", + "integrity": "sha512-AO+mECXsW4QcqC9bxwM29O7qWa7bJT94uBFzeb5brylIQwawuEziwq20dPYbins95GlWzOawgyDNdjYAo32EKg==", "dev": true, "requires": { "https-proxy-agent": "^2.2.1" } }, "buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", - "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.3.tgz", + "integrity": "sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A==", "dev": true, "requires": { "base64-js": "^1.0.2", @@ -778,76 +741,63 @@ "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", "dev": true }, - "builtin-modules": { + "buffer-from": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" }, - "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, + "busboy": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", + "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=", "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" + "dicer": "0.2.5", + "readable-stream": "1.1.x" } }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, "callsite": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", "dev": true }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + }, "camelcase-keys": { "version": "2.1.0", - "resolved": "http://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "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 - } } }, "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", + "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", "dev": true }, "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "chardet": { @@ -870,6 +820,18 @@ "parse5": "^3.0.1" }, "dependencies": { + "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" + } + }, "dom-serializer": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", @@ -880,71 +842,55 @@ "entities": "^1.1.1" } }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "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" + } + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", "dev": true } } }, "chokidar": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", - "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.0", - "braces": "^2.3.0", - "fsevents": "^1.2.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "lodash.debounce": "^4.0.8", - "normalize-path": "^2.1.1", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0", - "upath": "^1.0.5" + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", + "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.2.0" + }, + "dependencies": { + "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 + } } }, "chownr": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", - "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz", + "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==", "dev": true, "optional": true }, - "circular-json": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.5.9.tgz", - "integrity": "sha512-4ivwqHpIFJZBuhN3g/pEcdbnGUywkBblloGbkglyloVjjR3uT6tieI89MVOfbP2tHX5sgb01FuLgAOzebNlJNQ==", - "dev": true - }, - "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" - } - } - } - }, "cli-cursor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", @@ -960,13 +906,67 @@ "integrity": "sha1-pNKT72frt7iNSk1CwMzwDE0eNm0=", "dev": true }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, "coa": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.1.tgz", - "integrity": "sha512-5wfTTO8E2/ja4jFSxePXlG5nRu5bBtL/r1HCIpJW/lzT6yDtKl0u0Z4o/Vpz32IpKmBn7HerheEZQgA9N2DarQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", "dev": true, "requires": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", "q": "^1.1.2" + }, + "dependencies": { + "@types/q": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz", + "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==", + "dev": true + } } }, "code-point-at": { @@ -981,16 +981,6 @@ "integrity": "sha1-56qDAZF+9iGzXYo580jc3R234z4=", "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-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -1007,37 +997,25 @@ "dev": true }, "colors": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.2.tgz", - "integrity": "sha512-rhP0JSBGYvpcNQj4s5AdShMeE5ahMop96cTeDl/v9qQQm2fYClE2QXZRi8wLzc+GmXSxdIqqbOIAhyObEXDbfQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", "dev": true }, - "combine-lists": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz", - "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", - "dev": true, - "requires": { - "lodash": "^4.5.0" - } - }, "combined-stream": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz", + "integrity": "sha1-ATfmV7qlp1QcV6w3rF/AfXO03B8=", "dev": true, "requires": { - "delayed-stream": "~1.0.0" + "delayed-stream": "0.0.5" } }, "commander": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "dev": true, - "requires": { - "graceful-readlink": ">= 1.0.0" - } + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true }, "component-bind": { "version": "1.0.0", @@ -1067,6 +1045,38 @@ "crc32-stream": "^2.0.0", "normalize-path": "^2.0.0", "readable-stream": "^2.0.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" + } + } } }, "concat-map": { @@ -1075,6 +1085,46 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "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==", + "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==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, "config-chain": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", @@ -1086,29 +1136,28 @@ } }, "connect": { - "version": "3.6.6", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", - "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "dev": true, "requires": { "debug": "2.6.9", - "finalhandler": "1.1.0", - "parseurl": "~1.3.2", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", "utils-merge": "1.0.1" } }, "connect-livereload": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/connect-livereload/-/connect-livereload-0.6.0.tgz", - "integrity": "sha1-+fAJh0rWg3GDr7FwtMTjhXodfOs=", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/connect-livereload/-/connect-livereload-0.6.1.tgz", + "integrity": "sha512-3R0kMOdL7CjJpU66fzAkCe6HNtd3AavCS4m+uW4KtJjrdGPT0SQEZieAYd+cm+lJoBznNQ4lqipYWkhBMgk00g==", "dev": 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=", - "dev": true, - "optional": true + "dev": true }, "content-type": { "version": "1.0.4", @@ -1128,23 +1177,10 @@ "integrity": "sha1-vJon1OK5fhhs1XyeIGPLmfpozMw=", "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 + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "corser": { "version": "2.0.1", @@ -1165,15 +1201,6 @@ "request": "2.79.0" }, "dependencies": { - "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" - } - }, "assert-plus": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", @@ -1188,34 +1215,49 @@ }, "boom": { "version": "2.10.1", - "resolved": "http://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", "dev": true, "requires": { "hoek": "2.x.x" } }, - "caseless": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", - "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", - "dev": true + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } }, "cryptiles": { "version": "2.0.5", - "resolved": "http://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", "dev": true, "requires": { "boom": "2.x.x" } }, + "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 + }, "esprima": { "version": "2.7.3", "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", "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 + }, "form-data": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", @@ -1227,18 +1269,6 @@ "mime-types": "^2.1.12" } }, - "har-validator": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", - "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", - "dev": true, - "requires": { - "chalk": "^1.1.1", - "commander": "^2.9.0", - "is-my-json-valid": "^2.12.4", - "pinkie-promise": "^2.0.0" - } - }, "hawk": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", @@ -1278,6 +1308,12 @@ "esprima": "^2.6.0" } }, + "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 + }, "log-driver": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.5.tgz", @@ -1338,7 +1374,7 @@ }, "sntp": { "version": "1.0.9", - "resolved": "http://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", "dev": true, "requires": { @@ -1359,6 +1395,12 @@ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", "dev": true + }, + "uuid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", + "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", + "dev": true } } }, @@ -1371,6 +1413,15 @@ "buffer": "^5.1.0" } }, + "crc-32": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", + "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", + "requires": { + "exit-on-epipe": "~1.0.1", + "printj": "~1.1.0" + } + }, "crc32-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz", @@ -1379,6 +1430,38 @@ "requires": { "crc": "^3.4.4", "readable-stream": "^2.0.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" + } + } } }, "cross-spawn": { @@ -1390,32 +1473,11 @@ "lru-cache": "^4.0.1", "shebang-command": "^1.2.0", "which": "^1.2.9" - }, - "dependencies": { - "lru-cache": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.4.tgz", - "integrity": "sha512-EPstzZ23znHUVLKj+lcXO1KvZkrlw+ZirdwvOmnAnA/1PB4ggyXJ77LRkCqkff+ShQ+cqoxCxLQOh4cKITO5iA==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^3.0.2" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } } }, "cryptiles": { "version": "0.2.2", - "resolved": "http://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz", "integrity": "sha1-7ZH/HxetE9N0gohZT4pIoNJvMlw=", "dev": true, "requires": { @@ -1423,15 +1485,15 @@ } }, "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.0.2.tgz", + "integrity": "sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ==", "dev": true, "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" + "boolbase": "^1.0.0", + "css-what": "^2.1.2", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" } }, "css-select-base-adapter": { @@ -1450,16 +1512,10 @@ "source-map": "^0.5.3" } }, - "css-url-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/css-url-regex/-/css-url-regex-1.1.0.tgz", - "integrity": "sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w=", - "dev": true - }, "css-what": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.2.tgz", - "integrity": "sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", "dev": true }, "csso": { @@ -1473,7 +1529,7 @@ }, "ctype": { "version": "0.5.3", - "resolved": "http://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz", + "resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz", "integrity": "sha1-gsGMJGH3QRTvFsE1IkrQuRRMoS8=", "dev": true }, @@ -1499,13 +1555,21 @@ "dev": true, "requires": { "assert-plus": "^1.0.0" - } - }, - "date-format": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-1.2.0.tgz", - "integrity": "sha1-YV6CjiM90aubua4JUODOzPpuytg=", - "dev": true + }, + "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 + } + } + }, + "date-format": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", + "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==", + "dev": true }, "dateformat": { "version": "1.0.12", @@ -1532,20 +1596,14 @@ "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 - }, "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", "dev": true, "optional": true, "requires": { - "mimic-response": "^1.0.0" + "mimic-response": "^2.0.0" } }, "deep-extend": { @@ -1571,56 +1629,9 @@ }, "dependencies": { "object-keys": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", - "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", - "dev": true - } - } - }, - "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==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true } } @@ -1641,17 +1652,16 @@ } }, "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz", + "integrity": "sha1-1LH0OpPoKW3+AmlPRoC8N6MTxz8=", "dev": true }, "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true, - "optional": true + "dev": true }, "depd": { "version": "1.1.2", @@ -1666,11 +1676,10 @@ "dev": true }, "detect-libc": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-0.2.0.tgz", - "integrity": "sha1-R/31ZzSKF+wl/L8LnkRjSKdvn7U=", - "dev": true, - "optional": true + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "dev": true }, "di": { "version": "0.0.1", @@ -1678,6 +1687,15 @@ "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", "dev": true }, + "dicer": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz", + "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=", + "requires": { + "readable-stream": "1.1.x", + "streamsearch": "0.1.2" + } + }, "divhide": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/divhide/-/divhide-2.0.1.tgz", @@ -1708,33 +1726,27 @@ } }, "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.1.tgz", + "integrity": "sha512-sK3ujri04WyjwQXVoK4PU3y8ula1stq10GJZpqHIUgoGZdsGzAGu65BnU3d08aTVSvO7mGPZUc0wTEDL+qGE0Q==", "dev": true, "requires": { - "domelementtype": "~1.1.1", - "entities": "~1.1.1" + "domelementtype": "^2.0.1", + "entities": "^2.0.0" }, "dependencies": { "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", - "dev": true - }, - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", + "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==", "dev": true } } }, "domelementtype": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.2.1.tgz", - "integrity": "sha512-SQVCLFS2E7G5CRCMdn6K9bIhRj1bS6QBWZfF0TUPh4V/BbqrQ619IdSS3/izn0FZ+9l+uODzaZjb08fjOfablA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", "dev": true }, "domhandler": { @@ -1747,9 +1759,9 @@ } }, "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", "dev": true, "requires": { "dom-serializer": "0", @@ -1758,7 +1770,7 @@ }, "duplexer": { "version": "0.1.1", - "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", "dev": true }, @@ -1769,75 +1781,63 @@ "dev": true, "requires": { "readable-stream": "~1.1.9" + } + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" }, "dependencies": { "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "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.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "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": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true + "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" + } } } }, - "duplexify": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.1.tgz", - "integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==", - "dev": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "each-async": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/each-async/-/each-async-1.1.1.tgz", - "integrity": "sha1-3uUim98KtrogEqOV4bhpq/iBNHM=", - "dev": true, - "requires": { - "onetime": "^1.0.0", - "set-immediate-shim": "^1.0.0" - } - }, "easyimage": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/easyimage/-/easyimage-3.1.0.tgz", - "integrity": "sha512-yycLx61oU5UOmIR3pVrv1fkoMKHurR2vPo74+iHs2aLkTdvpco0oiCX/ljeuM6VcUocXx7jijWsAupWHRI1e7A==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/easyimage/-/easyimage-3.1.1.tgz", + "integrity": "sha512-W9QFelSdXjDK7ja0+jkDKwtJSrSggN/GDzgDY4+QguF9YElVkcbMZp64H8OinBI0ajow/h2p/MukdFOzpH1Mng==", "dev": true, "requires": { "bluebird": "^3.5.1", "mkdirp": "^0.5.0", "nanoid": "^1.0.2", "tslib": "^1.8.1", - "typescript": "^2.6.2" - }, - "dependencies": { - "bluebird": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", - "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", - "dev": true - } + "typescript": "^3.3.0" } }, "ecc-jsbn": { @@ -1862,12 +1862,6 @@ "url-join": "^2.0.5" }, "dependencies": { - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", @@ -1886,43 +1880,12 @@ "lru-cache": "^4.1.5", "semver": "^5.6.0", "sigmund": "^1.0.1" - }, - "dependencies": { - "commander": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", - "dev": true - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - } } }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "encodeurl": { "version": "1.0.2", @@ -1931,9 +1894,9 @@ "dev": true }, "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, "requires": { "once": "^1.4.0" @@ -1966,7 +1929,7 @@ }, "engine.io-client": { "version": "3.2.1", - "resolved": "http://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", "dev": true, "requires": { @@ -2014,9 +1977,9 @@ "dev": true }, "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", + "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==", "dev": true }, "error-ex": { @@ -2029,16 +1992,29 @@ } }, "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==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.0.tgz", + "integrity": "sha512-xdQnfykZ9JMEiasTAJZJdMWCQ1Vm00NBw79/AWi7ELfZuuPCSOMDZbT9mkOfSctVtfhb+sAAzrm+j//GjjLHLg==", "dev": true, "requires": { - "es-to-primitive": "^1.1.1", + "es-to-primitive": "^1.2.0", "function-bind": "^1.1.1", - "has": "^1.0.1", - "is-callable": "^1.1.3", - "is-regex": "^1.0.4" + "has": "^1.0.3", + "has-symbols": "^1.0.0", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-inspect": "^1.6.0", + "object-keys": "^1.1.1", + "string.prototype.trimleft": "^2.1.0", + "string.prototype.trimright": "^2.1.0" + }, + "dependencies": { + "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 + } } }, "es-to-primitive": { @@ -2117,15 +2093,21 @@ } }, "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "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 + }, + "estraverse": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.8.0.tgz", + "integrity": "sha1-PxJk+2LIUA265eT3NwXNV21q9Cg=", "dev": true }, "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, "etag": { @@ -2136,19 +2118,19 @@ }, "eventemitter2": { "version": "0.4.14", - "resolved": "http://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", "dev": true }, "eventemitter3": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", - "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==", + "version": "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": "http://registry.npmjs.org/events/-/events-1.1.1.tgz", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", "dev": true }, @@ -2179,97 +2161,15 @@ "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", "dev": true }, - "expand-braces": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", - "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", - "dev": true, - "requires": { - "array-slice": "^0.2.3", - "array-unique": "^0.2.1", - "braces": "^0.1.2" - }, - "dependencies": { - "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": "0.1.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", - "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", - "dev": true, - "requires": { - "expand-range": "^0.1.0" - } - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "expand-range": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", - "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", - "dev": true, - "requires": { - "is-number": "^0.1.1", - "repeat-string": "^0.2.2" - }, - "dependencies": { - "is-number": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", - "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=", - "dev": true - }, - "repeat-string": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz", - "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=", - "dev": true - } - } + "exit-on-epipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", + "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==" }, "expand-template": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-1.1.1.tgz", - "integrity": "sha512-cebqLtV8KOZfw0UI8TEFWxtczxxC1jvyUvx6H4fyp1K1FN7A4Q+uggVUlOsI1K8AGU0rwOGqP8nCapdrw8CYQg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", "dev": true, "optional": true }, @@ -2279,30 +2179,9 @@ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": 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": { - "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" - } - } - } - }, "external-editor": { "version": "2.2.0", - "resolved": "http://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", "dev": true, "requires": { @@ -2311,15 +2190,6 @@ "tmp": "^0.0.33" }, "dependencies": { - "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" - } - }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -2331,77 +2201,6 @@ } } }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "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 - } - } - }, "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", @@ -2444,799 +2243,225 @@ "requires": { "glob": "3.x", "minimatch": "0.x" - } - }, - "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=", + "glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", + "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", "dev": true, "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "finalhandler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", - "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.1", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.3.1", - "unpipe": "~1.0.0" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "findup-sync": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", - "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", - "dev": true, - "requires": { - "glob": "~5.0.0" - }, - "dependencies": { - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "follow-redirects": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", - "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", - "dev": true, - "requires": { - "debug": "=3.1.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" - } - } - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", - "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 - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "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-access": { - "version": "1.0.1", - "resolved": "http://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", - "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", - "dev": true, - "requires": { - "null-check": "^1.0.0" - } - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "fs-extra": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.0.0.tgz", - "integrity": "sha1-M3NSve1KC3FPPrhN6M6nZenTdgA=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0" - }, - "dependencies": { - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - } - } - }, - "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": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.0.1", - "bundled": 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": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.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, - "optional": true, - "requires": { - "safe-buffer": "^5.1.1", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.1.0", - "bundled": 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" - } - }, - "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": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.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 - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.0.5" - } - }, - "safe-buffer": { - "version": "5.1.1", - "bundled": 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": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.13", - "resolved": "http://registry.npmjs.org/tar/-/tar-4.4.13.tgz", - "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", - "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" + "inherits": "2", + "minimatch": "0.3" }, "dependencies": { - "chownr": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz", - "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==", - "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==", - "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==", + "minimatch": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", + "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", "dev": true, - "optional": true, "requires": { - "minipass": "^2.9.0" + "lru-cache": "2", + "sigmund": "~1.0.0" } - }, - "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, - "optional": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, - "optional": true } } }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true + "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 }, - "wide-align": { - "version": "1.1.2", - "bundled": true, + "minimatch": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.4.0.tgz", + "integrity": "sha1-vSx9Bg0sjI/Xzefx8u0tWycP2xs=", "dev": true, - "optional": true, "requires": { - "string-width": "^1.0.2" + "lru-cache": "2", + "sigmund": "~1.0.0" } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, + } + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "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-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" + } + }, + "findup-sync": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", + "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", + "dev": true, + "requires": { + "glob": "~5.0.0" + }, + "dependencies": { + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "dev": true, - "optional": true - }, - "yallist": { - "version": "3.0.2", - "bundled": true, - "optional": true + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } } } }, - "fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "flatted": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", + "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", + "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, - "optional": true, "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" + "debug": "^3.0.0" }, "dependencies": { - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, - "optional": 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 + } + } + }, + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true + }, + "forever-agent": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz", + "integrity": "sha1-bQ4JxJIflKJ/Y9O0nF/v8epMUTA=", + "dev": true + }, + "form-data": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.0.8.tgz", + "integrity": "sha1-CJDNEAXFzOzAudJKiAUskkQtDbU=", + "dev": true, + "requires": { + "async": "~0.2.7", + "combined-stream": "~0.0.4", + "mime": "~1.2.2" + }, + "dependencies": { + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "dev": true + }, + "mime": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz", + "integrity": "sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA=", + "dev": true } } }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "fs-access": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", + "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", + "dev": true, + "requires": { + "null-check": "^1.0.0" + } + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-readdir-recursive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz", + "integrity": "sha1-jNF0XItPiinIyuw5JHaSG6GV9WA=", + "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 + }, + "fsevents": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.1.tgz", + "integrity": "sha512-4FRPXWETxtigtJW/gxzEDsX1LVbPAM93VleB83kZB+ellqbHMkyt2aJfuzNLRvFPnGi6bcE5SvfxgbXPeKteJw==", + "dev": true, + "optional": true + }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -3248,7 +2473,6 @@ "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "dev": true, - "optional": true, "requires": { "aproba": "^1.0.3", "console-control-strings": "^1.0.0", @@ -3292,16 +2516,10 @@ }, "get-stream": { "version": "3.0.0", - "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", "dev": true }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, "getobject": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", @@ -3315,6 +2533,14 @@ "dev": 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 + } } }, "ghauth": { @@ -3340,12 +2566,6 @@ "readable-stream": "~1.0.26" } }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, "readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", @@ -3357,12 +2577,6 @@ "isarray": "0.0.1", "string_decoder": "~0.10.x" } - }, - "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 } } }, @@ -3389,6 +2603,12 @@ "semver": "2.2.1" }, "dependencies": { + "bluebird": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-1.0.3.tgz", + "integrity": "sha1-xLRBGEgC47ZKYe7tRXgnG0yL9qw=", + "dev": true + }, "lodash": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz", @@ -3415,91 +2635,18 @@ "through": "~2.3.4" }, "dependencies": { - "asn1": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz", - "integrity": "sha1-VZvhg3bQik7E2+gId9J4GGObLfc=", - "dev": true - }, - "assert-plus": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz", - "integrity": "sha1-7nQAlBMALYTOxyGcasgRgS5yMWA=", - "dev": true - }, "async": { "version": "0.2.10", "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", "dev": true }, - "combined-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz", - "integrity": "sha1-ATfmV7qlp1QcV6w3rF/AfXO03B8=", - "dev": true, - "requires": { - "delayed-stream": "0.0.5" - } - }, - "delayed-stream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz", - "integrity": "sha1-1LH0OpPoKW3+AmlPRoC8N6MTxz8=", - "dev": true - }, - "forever-agent": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz", - "integrity": "sha1-bQ4JxJIflKJ/Y9O0nF/v8epMUTA=", - "dev": true - }, - "form-data": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.0.8.tgz", - "integrity": "sha1-CJDNEAXFzOzAudJKiAUskkQtDbU=", - "dev": true, - "requires": { - "async": "~0.2.7", - "combined-stream": "~0.0.4", - "mime": "~1.2.2" - } - }, - "http-signature": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.1.tgz", - "integrity": "sha1-T72sEyVZqoMjEh5UB3nAoBKyfmY=", - "dev": true, - "requires": { - "asn1": "0.1.11", - "assert-plus": "^0.1.5", - "ctype": "0.5.3" - } - }, - "json-stringify-safe": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-4.0.0.tgz", - "integrity": "sha1-d8JxqupUMC5o7+rMtWq78GqbGlQ=", - "dev": true - }, "mime": { "version": "1.2.11", "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz", "integrity": "sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA=", "dev": true }, - "oauth-sign": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.3.0.tgz", - "integrity": "sha1-y1QPk7srIqfVlBaRoojWDo6pOG4=", - "dev": true - }, - "qs": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/qs/-/qs-0.6.6.tgz", - "integrity": "sha1-bgFQmP9RlouKPIGQAdXyyJvEsQc=", - "dev": true - }, "request": { "version": "2.22.0", "resolved": "https://registry.npmjs.org/request/-/request-2.22.0.tgz", @@ -3536,43 +2683,26 @@ "optional": true }, "glob": { - "version": "3.1.21", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", - "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", + "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", "dev": true, - "requires": { - "graceful-fs": "~1.2.0", - "inherits": "1", - "minimatch": "~0.2.11" - }, - "dependencies": { - "inherits": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", - "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", - "dev": true - } + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", + "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", "dev": true, "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } + "is-glob": "^4.0.1" } }, "globby": { @@ -3587,49 +2717,17 @@ "object-assign": "^4.0.1", "pify": "^2.0.0", "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } } }, "graceful-fs": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", - "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=", - "dev": true - }, - "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 + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", + "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" }, "grunt": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.0.3.tgz", - "integrity": "sha512-/JzmZNPfKorlCrrmxWqQO4JVodO+DVd5XX4DkocL/1WlLlKVLE9+SdEIempOAxDhWPysLle6afvn/hg7Ck2k9g==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.0.4.tgz", + "integrity": "sha512-PYsMOrOC+MsdGEkFVwMaMyc6Ob7pKmq+deg1Sjr+vvMWp35sztfwKE7qoN51V+UEtHsyNuMcGdgMLFkBHvMxHQ==", "dev": true, "requires": { "coffeescript": "~1.10.0", @@ -3643,7 +2741,7 @@ "grunt-legacy-log": "~2.0.0", "grunt-legacy-util": "~1.1.1", "iconv-lite": "~0.4.13", - "js-yaml": "~3.5.2", + "js-yaml": "~3.13.0", "minimatch": "~3.0.2", "mkdirp": "~0.5.1", "nopt": "~3.0.6", @@ -3651,23 +2749,9 @@ "rimraf": "~2.6.2" }, "dependencies": { - "glob": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", - "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.2", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, "grunt-cli": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/grunt-cli/-/grunt-cli-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.2.0.tgz", "integrity": "sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg=", "dev": true, "requires": { @@ -3677,23 +2761,11 @@ "resolve": "~1.1.0" } }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "rimraf": { - "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.0.5" - } + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true } } }, @@ -3704,6 +2776,33 @@ "dev": true, "requires": { "chalk": "^1.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "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" + } + }, + "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 + } } }, "grunt-bump": { @@ -3713,14 +2812,6 @@ "dev": true, "requires": { "semver": "^5.1.0" - }, - "dependencies": { - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - } } }, "grunt-chmod": { @@ -3732,6 +2823,23 @@ "shelljs": "^0.5.3" } }, + "grunt-composer": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/grunt-composer/-/grunt-composer-0.4.5.tgz", + "integrity": "sha1-ksV0FwfRpStTDBL5UY8AmHWh0Lc=", + "dev": true, + "requires": { + "shelljs": "~0.2.6" + }, + "dependencies": { + "shelljs": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.2.6.tgz", + "integrity": "sha1-kEktcv/MgVmXa6umL7D2iE8MM3g=", + "dev": true + } + } + }, "grunt-contrib-clean": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-2.0.0.tgz", @@ -3743,80 +2851,67 @@ }, "dependencies": { "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", - "dev": true, - "requires": { - "lodash": "^4.17.10" - } - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "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": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", "dev": true, "requires": { - "glob": "^7.0.5" + "lodash": "^4.17.14" } } } }, "grunt-contrib-compress": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/grunt-contrib-compress/-/grunt-contrib-compress-1.4.3.tgz", - "integrity": "sha1-Ac7/ucY39S5wgfRjdQmD0KOw+nM=", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-compress/-/grunt-contrib-compress-1.6.0.tgz", + "integrity": "sha512-wIFuvk+/Ny4E+OgEfJYFZgoH7KcU/nnNFbYasB7gRvrcRyW6vmTp3Pj8a4rFSR3tbFMjrGvTUszdO6fgLajgZQ==", "dev": true, "requires": { "archiver": "^1.3.0", "chalk": "^1.1.1", - "iltorb": "^1.0.13", + "iltorb": "^2.4.3", "lodash": "^4.7.0", "pretty-bytes": "^4.0.2", "stream-buffers": "^2.1.0" }, "dependencies": { - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "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" + } + }, + "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 } } }, "grunt-contrib-connect": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-connect/-/grunt-contrib-connect-2.0.0.tgz", - "integrity": "sha512-JVjM9UDP84WbT2S7swkyuwPuxFtT+zry/RUBuP3IT8LZPEQjtzzMwiM+qimswNKQ9plh5WhcFWaaqz2ruB9/DA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-connect/-/grunt-contrib-connect-2.1.0.tgz", + "integrity": "sha512-yeCHdz5zqoibhQDyw/X+E/wTzYPpim+C2p+xYyXUsXVEkfxnKVIWYOWrAKkFHlz9//nIC0S3JbUDd3mVvJcxVA==", "dev": true, "requires": { "async": "^2.6.1", "connect": "^3.6.6", "connect-livereload": "^0.6.0", - "morgan": "^1.9.0", + "morgan": "^1.9.1", "node-http2": "^4.0.1", "opn": "^5.3.0", "portscanner": "^2.2.0", @@ -3825,63 +2920,26 @@ }, "dependencies": { "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + "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.10" + "lodash": "^4.17.14" } } } }, "grunt-contrib-uglify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-4.0.0.tgz", - "integrity": "sha512-vy3Vop2KDqdiwcGOGAjyKvjHFrRD/YK4KPQWR3Yt6OdYlgFw1z7HCuk66+IJ9s7oJmp9uRQXuuSHyawKRAgiMw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-4.0.1.tgz", + "integrity": "sha512-dwf8/+4uW1+7pH72WButOEnzErPGmtUvc8p08B0eQS/6ON0WdeQu0+WFeafaPTbbY1GqtS25lsHWaDeiTQNWPg==", "dev": true, "requires": { "chalk": "^2.4.1", "maxmin": "^2.1.0", - "uglify-js": "~3.4.8", + "uglify-js": "^3.5.0", "uri-path": "^1.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "grunt-file-creator": { @@ -3910,56 +2968,12 @@ "underscore": "~1.5.2" }, "dependencies": { - "asn1": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz", - "integrity": "sha1-VZvhg3bQik7E2+gId9J4GGObLfc=", - "dev": true, - "optional": true - }, - "assert-plus": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz", - "integrity": "sha1-7nQAlBMALYTOxyGcasgRgS5yMWA=", - "dev": true, - "optional": true - }, "async": { "version": "0.2.10", "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", "dev": true }, - "aws-sign2": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz", - "integrity": "sha1-xXED96F/wDfwLXwuZLYC6iI/fWM=", - "dev": true, - "optional": true - }, - "combined-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz", - "integrity": "sha1-ATfmV7qlp1QcV6w3rF/AfXO03B8=", - "dev": true, - "optional": true, - "requires": { - "delayed-stream": "0.0.5" - } - }, - "delayed-stream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz", - "integrity": "sha1-1LH0OpPoKW3+AmlPRoC8N6MTxz8=", - "dev": true, - "optional": true - }, - "forever-agent": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz", - "integrity": "sha1-bQ4JxJIflKJ/Y9O0nF/v8epMUTA=", - "dev": true - }, "form-data": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.1.4.tgz", @@ -4001,17 +3015,11 @@ "dev": true, "optional": true }, - "http-signature": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.1.tgz", - "integrity": "sha1-T72sEyVZqoMjEh5UB3nAoBKyfmY=", - "dev": true, - "optional": true, - "requires": { - "asn1": "0.1.11", - "assert-plus": "^0.1.5", - "ctype": "0.5.3" - } + "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 }, "mime": { "version": "1.2.11", @@ -4019,25 +3027,6 @@ "integrity": "sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA=", "dev": true }, - "node-uuid": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", - "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=", - "dev": true - }, - "oauth-sign": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.3.0.tgz", - "integrity": "sha1-y1QPk7srIqfVlBaRoojWDo6pOG4=", - "dev": true, - "optional": true - }, - "qs": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/qs/-/qs-0.6.6.tgz", - "integrity": "sha1-bgFQmP9RlouKPIGQAdXyyJvEsQc=", - "dev": true - }, "request": { "version": "2.33.0", "resolved": "https://registry.npmjs.org/request/-/request-2.33.0.tgz", @@ -4095,9 +3084,9 @@ } }, "grunt-karma": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/grunt-karma/-/grunt-karma-3.0.1.tgz", - "integrity": "sha512-iNt1Qe5GoePMIfBQmeffvfrvnvwTfJ9/h9p9gqGMIuEdVsUo4PKhTxIwyW5NMbHrgD8p2UEdeTJH4l0QGz4YtA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/grunt-karma/-/grunt-karma-3.0.2.tgz", + "integrity": "sha512-imNhQO1bR1O7X6/3F5vO0o7mKy4xdkpSd40QVfxGO70cBAFcOqjv2Zu5QzsfEsSrppuu3N0vIQPbfBRjeGdpWg==", "dev": true, "requires": { "lodash": "^4.17.10" @@ -4115,16 +3104,6 @@ "log-driver": "^1.2" }, "dependencies": { - "dateformat": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", - "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", - "dev": true, - "requires": { - "get-stdin": "^4.0.1", - "meow": "^3.3.0" - } - }, "glob": { "version": "4.5.3", "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", @@ -4161,6 +3140,12 @@ } } }, + "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 + }, "minimatch": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", @@ -4177,72 +3162,27 @@ "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.1.tgz", "integrity": "sha512-cHwsLqoighpu7TuYj5RonnEuxGVFnztcUqTqp5rXFGYL4OuPFofwC4Ycg7n9fYwvK6F5WbYgeVOwph9Crs2fsQ==", "dev": true - }, - "grunt-legacy-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-2.0.0.tgz", - "integrity": "sha512-1m3+5QvDYfR1ltr8hjiaiNjddxGdQWcH0rw1iKKiQnF0+xtgTazirSTGu68RchPyh1OBng1bBUjLmX8q9NpoCw==", - "dev": true, - "requires": { - "colors": "~1.1.2", - "grunt-legacy-log-utils": "~2.0.0", - "hooker": "~0.2.3", - "lodash": "~4.17.5" - }, - "dependencies": { - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", - "dev": true - } - } - }, - "grunt-legacy-log-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.0.1.tgz", - "integrity": "sha512-o7uHyO/J+i2tXG8r2bZNlVk20vlIFJ9IEYyHMCQGfWYru8Jv3wTqKZzvV30YW9rWEjq0eP3cflQ1qWojIe9VFA==", - "dev": true, - "requires": { - "chalk": "~2.4.1", - "lodash": "~4.17.10" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + }, + "grunt-legacy-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-2.0.0.tgz", + "integrity": "sha512-1m3+5QvDYfR1ltr8hjiaiNjddxGdQWcH0rw1iKKiQnF0+xtgTazirSTGu68RchPyh1OBng1bBUjLmX8q9NpoCw==", + "dev": true, + "requires": { + "colors": "~1.1.2", + "grunt-legacy-log-utils": "~2.0.0", + "hooker": "~0.2.3", + "lodash": "~4.17.5" + } + }, + "grunt-legacy-log-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.0.1.tgz", + "integrity": "sha512-o7uHyO/J+i2tXG8r2bZNlVk20vlIFJ9IEYyHMCQGfWYru8Jv3wTqKZzvV30YW9rWEjq0eP3cflQ1qWojIe9VFA==", + "dev": true, + "requires": { + "chalk": "~2.4.1", + "lodash": "~4.17.10" } }, "grunt-legacy-util": { @@ -4258,17 +3198,6 @@ "lodash": "~4.17.10", "underscore.string": "~3.3.4", "which": "~1.3.0" - }, - "dependencies": { - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } } }, "grunt-prompt": { @@ -4300,6 +3229,36 @@ "through2": "~2.0.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" + } + }, "through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -4331,6 +3290,25 @@ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "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 + }, + "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" + } + }, "cli-cursor": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", @@ -4355,11 +3333,15 @@ "escape-string-regexp": "^1.0.5" } }, - "fs-readdir-recursive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz", - "integrity": "sha1-jNF0XItPiinIyuw5JHaSG6GV9WA=", - "dev": true + "fs-extra": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.0.0.tgz", + "integrity": "sha1-M3NSve1KC3FPPrhN6M6nZenTdgA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0" + } }, "inquirer": { "version": "3.0.1", @@ -4388,10 +3370,19 @@ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", "dev": true }, "onetime": { @@ -4442,75 +3433,60 @@ } } } + }, + "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 } } }, "grunt-shell": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/grunt-shell/-/grunt-shell-2.1.0.tgz", - "integrity": "sha1-Q595FZ7RHmSmUaacyKPQK+v17MI=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/grunt-shell/-/grunt-shell-3.0.1.tgz", + "integrity": "sha512-C8eR4frw/NmIFIwSvzSLS4wOQBUzC+z6QhrKPzwt/tlaIqlzH35i/O2MggVOBj2Sh1tbaAqpASWxGiGsi4JMIQ==", "dev": true, "requires": { - "chalk": "^1.0.0", - "npm-run-path": "^2.0.0" + "chalk": "^2.4.1", + "npm-run-path": "^2.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } } }, "grunt-svgmin": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/grunt-svgmin/-/grunt-svgmin-5.0.0.tgz", - "integrity": "sha1-8O4pOtFi++hcjD5o2xUt/3J3qCQ=", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/grunt-svgmin/-/grunt-svgmin-6.0.0.tgz", + "integrity": "sha512-gSVIzJ9TNUDpsTpZELaAdBkQ5DRMios6SlFKc+S7XwUPFvqx8scCsiYTEiGLeYDEvE9+a2GGsSdJUd5ufIFlGQ==", "dev": true, "requires": { - "chalk": "^2.3.0", - "each-async": "^1.1.1", - "log-symbols": "^2.1.0", - "pretty-bytes": "^4.0.2", - "svgo": "^1.0.3" + "chalk": "^2.4.2", + "log-symbols": "^2.2.0", + "pretty-bytes": "^5.1.0", + "svgo": "^1.2.0" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "pretty-bytes": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.3.0.tgz", + "integrity": "sha512-hjGrh+P926p4R4WbaB6OckyRtO0F0/lQBiT+0gnxjV+5kjPBrfVBFCsCLbMqVQeydvIoouYTCmmEURiH3R1Bdg==", "dev": true - }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "dev": true, - "requires": { - "chalk": "^2.0.1" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -4524,43 +3500,6 @@ "cheerio": "^1.0.0-rc.2", "handlebars": "^4.0.5", "js-beautify": "^1.5.10" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "gzip-size": { @@ -4599,13 +3538,42 @@ "dev": true }, "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", + "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", "dev": true, "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" + "chalk": "^1.1.1", + "commander": "^2.9.0", + "is-my-json-valid": "^2.12.4", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "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" + } + }, + "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 + } } }, "has": { @@ -4650,9 +3618,9 @@ "dev": true }, "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, "has-symbols": { @@ -4665,40 +3633,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true, - "optional": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } + "dev": true }, "hawk": { "version": "0.13.1", @@ -4731,9 +3666,9 @@ "dev": true }, "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", + "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==", "dev": true }, "htmlparser2": { @@ -4750,10 +3685,10 @@ "readable-stream": "^3.1.1" }, "dependencies": { - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", "dev": true }, "readable-stream": { @@ -4766,12 +3701,27 @@ "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==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } } } }, "http-errors": { "version": "1.6.3", - "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "dev": true, "requires": { @@ -4781,21 +3731,21 @@ "statuses": ">= 1.4.0 < 2" }, "dependencies": { - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true } } }, "http-proxy": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", - "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", + "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, "requires": { - "eventemitter3": "^3.0.0", + "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", "requires-port": "^1.0.0" } @@ -4825,14 +3775,14 @@ } }, "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.1.tgz", + "integrity": "sha1-T72sEyVZqoMjEh5UB3nAoBKyfmY=", "dev": true, "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "asn1": "0.1.11", + "assert-plus": "^0.1.5", + "ctype": "0.5.3" } }, "https-browserify": { @@ -4842,9 +3792,9 @@ "dev": true }, "https-proxy-agent": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.2.tgz", - "integrity": "sha512-c8Ndjc9Bkpfx/vCJueCPy0jlP4ccCCSNDp8xwCZzPjKJUm+B+u9WX2x98Qx4n1PiMNTWo3D7KK5ifNV/yJyRzg==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", + "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", "dev": true, "requires": { "agent-base": "^4.3.0", @@ -4906,7 +3856,7 @@ "dependencies": { "mkdirp": { "version": "0.3.5", - "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", "integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc=", "dev": true } @@ -4918,17 +3868,17 @@ "integrity": "sha1-CZNQL+r2aBODJXVvMPmlH+7sEek=", "dev": true }, - "estraverse": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.8.0.tgz", - "integrity": "sha1-PxJk+2LIUA265eT3NwXNV21q9Cg=", - "dev": true - }, "lodash": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", "dev": true + }, + "which": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz", + "integrity": "sha1-RgwdoPgQED0DIam2M6+eV15kSG8=", + "dev": true } } }, @@ -4942,22 +3892,23 @@ } }, "ieee754": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", "dev": true }, "iltorb": { - "version": "1.3.10", - "resolved": "https://registry.npmjs.org/iltorb/-/iltorb-1.3.10.tgz", - "integrity": "sha512-nyB4+ru1u8CQqQ6w7YjasboKN3NQTN8GH/V/eEssNRKhW6UbdxdWhB9fJ5EEdjJfezKY0qPrcwLyIcgjL8hHxA==", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/iltorb/-/iltorb-2.4.4.tgz", + "integrity": "sha512-7Qk6O7TK3rSWVRVRkPehcNTSN+P2i7MsG9pWmw6iVw/W6NcoNj0rFKOuBDM6fbZV6NNGuUW3JBRem6Ozn4KXhg==", "dev": true, "optional": true, "requires": { - "detect-libc": "^0.2.0", - "nan": "^2.6.2", - "node-gyp": "^3.6.2", - "prebuild-install": "^2.3.0" + "detect-libc": "^1.0.3", + "nan": "^2.14.0", + "npmlog": "^4.1.2", + "prebuild-install": "^5.3.2", + "which-pm-runs": "^1.0.0" } }, "immediate": { @@ -4973,17 +3924,6 @@ "dev": true, "requires": { "repeating": "^2.0.0" - }, - "dependencies": { - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } - } } }, "indexof": { @@ -5003,16 +3943,14 @@ } }, "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, "inquirer": { "version": "0.11.4", @@ -5035,11 +3973,36 @@ "through": "^2.3.6" }, "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "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" + } + }, "lodash": { "version": "3.10.1", "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", "dev": true + }, + "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 } } }, @@ -5061,15 +4024,6 @@ "integrity": "sha1-OzSixI81mXLzUEKEkZOucmS2NWI=", "dev": true }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -5077,27 +4031,12 @@ "dev": true }, "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "requires": { - "builtin-modules": "^1.0.0" + "binary-extensions": "^2.0.0" } }, "is-callable": { @@ -5106,46 +4045,12 @@ "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", "dev": true }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, "is-date-object": { "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": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "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 - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -5171,9 +4076,9 @@ } }, "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dev": true, "requires": { "is-extglob": "^2.1.1" @@ -5186,9 +4091,9 @@ "dev": true }, "is-my-json-valid": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.19.0.tgz", - "integrity": "sha512-mG0f/unGX1HZ5ep4uhRaPOS8EkAY8/j6mDRMJrutq4CqhoJWYp7qAlonIPy3TV7p3ju4TK9fo/PbnoksWmsp5Q==", + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.20.0.tgz", + "integrity": "sha512-XTHBZSIIxNsIsZXg7XB5l8z/OBFosl1Wao4tXLpeC7eKU4Vm/kdop2azkPqULwnfGQjmeDIyey9g7afMMtdWAA==", "dev": true, "requires": { "generate-function": "^2.0.0", @@ -5199,13 +4104,10 @@ } }, "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true }, "is-number-like": { "version": "1.0.8", @@ -5246,15 +4148,6 @@ "path-is-inside": "^1.0.1" } }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", @@ -5303,12 +4196,6 @@ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", "dev": true }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, "is-wsl": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", @@ -5316,10 +4203,9 @@ "dev": true }, "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" }, "isbinaryfile": { "version": "3.0.3", @@ -5336,12 +4222,6 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -5376,21 +4256,6 @@ "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", "dev": true }, - "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" - } - }, - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, "esprima": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.5.0.tgz", @@ -5405,17 +4270,6 @@ "requires": { "glob": "5.x", "minimatch": "2.x" - }, - "dependencies": { - "minimatch": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", - "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", - "dev": true, - "requires": { - "brace-expansion": "^1.0.0" - } - } } }, "glob": { @@ -5431,40 +4285,19 @@ "path-is-absolute": "^1.0.0" } }, - "js-yaml": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", - "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", - "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 - } - } + "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 }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", + "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", "dev": true, "requires": { - "abbrev": "1" + "brace-expansion": "^1.0.0" } }, "resolve": { @@ -5482,15 +4315,6 @@ "has-flag": "^1.0.0" } }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", @@ -5510,41 +4334,18 @@ "jasmine-core": "~2.8.0" }, "dependencies": { - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, "jasmine-core": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.8.0.tgz", "integrity": "sha1-vMl5rh+f0FcB5F5S5l06XWPxok4=", "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } } } }, "jasmine-core": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.3.0.tgz", - "integrity": "sha512-3/xSmG/d35hf80BEN66Y6g9Ca5l/Isdeg/j6zvbTYlTzeKinzmaTM4p9am5kYqOmE05D7s1t8FGjzdSnbUbceA==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.5.0.tgz", + "integrity": "sha512-nCeAiw37MIMA9w9IXso7bRaLl+c/ef3wnxsoSAlYrzS+Ot0zTG6nU8G/cIfGkqpkjX2wNaIW9RFG0TwIFnG6bA==", "dev": true }, "jasminewd2": { @@ -5554,9 +4355,9 @@ "dev": true }, "js-beautify": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.10.0.tgz", - "integrity": "sha512-OMwf/tPDpE/BLlYKqZOhqWsd3/z2N3KOlyn1wsCRGFwViE8LOQTcDtathQvHvZc+q+zWmcNAbwKSC+iJoMaH2Q==", + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.10.2.tgz", + "integrity": "sha512-ZtBYyNUYJIsBWERnQP0rPN9KjkrDfJcMjuVGcvXOUJrD1zmOGwhRwQ4msG+HJ+Ni/FA7+sRQEMYVzdTQDvnzvQ==", "dev": true, "requires": { "config-chain": "^1.1.12", @@ -5567,9 +4368,9 @@ }, "dependencies": { "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.5.tgz", + "integrity": "sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -5580,15 +4381,6 @@ "path-is-absolute": "^1.0.0" } }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, "nopt": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", @@ -5602,13 +4394,13 @@ } }, "js-yaml": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.5.5.tgz", - "integrity": "sha1-A3fDgBfKvHMisNH7zSWkkWQfL74=", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, "requires": { - "argparse": "^1.0.2", - "esprima": "^2.6.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, "jsbn": { @@ -5629,6 +4421,42 @@ "plur": "^2.1.0", "string-length": "^1.0.0", "text-table": "^0.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "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" + } + }, + "log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "dev": true, + "requires": { + "chalk": "^1.0.0" + } + }, + "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 + } } }, "json-schema": { @@ -5644,27 +4472,17 @@ "dev": true }, "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-4.0.0.tgz", + "integrity": "sha1-d8JxqupUMC5o7+rMtWq78GqbGlQ=", "dev": true }, "jsonfile": { - "version": "2.4.0", - "resolved": "http://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "dev": true, + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "requires": { "graceful-fs": "^4.1.6" - }, - "dependencies": { - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true, - "optional": true - } } }, "jsonpointer": { @@ -5683,6 +4501,14 @@ "extsprintf": "1.3.0", "json-schema": "0.2.3", "verror": "1.10.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 + } } }, "jszip": { @@ -5695,30 +4521,61 @@ "pako": "~1.0.2", "readable-stream": "~2.3.6", "set-immediate-shim": "~1.0.1" + }, + "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" + } + } } }, "karma": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/karma/-/karma-3.1.1.tgz", - "integrity": "sha512-NetT3wPCQMNB36uiL9LLyhrOt8SQwrEKt0xD3+KpTCfm0VxVyUJdPL5oTq2Ic5ouemgL/Iz4wqXEbF3zea9kQQ==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/karma/-/karma-4.4.1.tgz", + "integrity": "sha512-L5SIaXEYqzrh6b1wqYC42tNsFMx2PWuxky84pK9coK09MvmL7mxii3G3bZBh/0rvD27lqDd0le9jyhzvwif73A==", "dev": true, "requires": { "bluebird": "^3.3.0", "body-parser": "^1.16.1", - "chokidar": "^2.0.3", + "braces": "^3.0.2", + "chokidar": "^3.0.0", "colors": "^1.1.0", - "combine-lists": "^1.0.0", "connect": "^3.6.0", - "core-js": "^2.2.0", "di": "^0.0.1", "dom-serialize": "^2.2.0", - "expand-braces": "^0.1.1", + "flatted": "^2.0.0", "glob": "^7.1.1", "graceful-fs": "^4.1.2", "http-proxy": "^1.13.0", "isbinaryfile": "^3.0.0", - "lodash": "^4.17.4", - "log4js": "^3.0.0", + "lodash": "^4.17.14", + "log4js": "^4.0.0", "mime": "^2.3.1", "minimatch": "^3.0.2", "optimist": "^0.6.1", @@ -5729,19 +4586,13 @@ "socket.io": "2.1.1", "source-map": "^0.6.1", "tmp": "0.0.33", - "useragent": "2.2.1" + "useragent": "2.3.0" }, "dependencies": { - "bluebird": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", - "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", - "dev": true - }, "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.5.tgz", + "integrity": "sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -5752,36 +4603,12 @@ "path-is-absolute": "^1.0.0" } }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, "mime": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", - "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", + "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", "dev": true }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "rimraf": { - "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.0.5" - } - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -5807,17 +4634,6 @@ "requires": { "fs-access": "^1.0.0", "which": "^1.2.1" - }, - "dependencies": { - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } } }, "karma-coverage": { @@ -5839,31 +4655,6 @@ "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", "dev": true }, - "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" - } - }, - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "dateformat": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", - "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", - "dev": true, - "requires": { - "get-stdin": "^4.0.1", - "meow": "^3.3.0" - } - }, "escodegen": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", @@ -5920,6 +4711,12 @@ "path-is-absolute": "^1.0.0" } }, + "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 + }, "istanbul": { "version": "0.4.5", "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", @@ -5942,24 +4739,6 @@ "wordwrap": "^1.0.0" } }, - "js-yaml": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", - "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", - "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 - } - } - }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -5970,30 +4749,6 @@ "type-check": "~0.3.2" } }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "requires": { - "abbrev": "1" - } - }, "optionator": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", @@ -6023,15 +4778,6 @@ "has-flag": "^1.0.0" } }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", @@ -6041,10 +4787,21 @@ } }, "karma-firefox-launcher": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-1.1.0.tgz", - "integrity": "sha512-LbZ5/XlIXLeQ3cqnCbYLn+rOVhuMIK9aZwlP6eOLGzWdo1UVp7t6CN3DP4SafiRLjexKwHeKHDm0c38Mtd3VxA==", - "dev": true + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-1.2.0.tgz", + "integrity": "sha512-j9Zp8M8+VLq1nI/5xZGfzeaEPtGQ/vk3G+Y8vpmFWLvKLNZ2TDjD6cu2dUu7lDbu1HXNgatsAX4jgCZTkR9qhQ==", + "dev": true, + "requires": { + "is-wsl": "^2.1.0" + }, + "dependencies": { + "is-wsl": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.1.1.tgz", + "integrity": "sha512-umZHcSrwlDHo2TGMXv0DZ8dIUGunZ2Iv68YZnrmCiBPkZ4aaOhtv7pXJKeki9k3qJ3RJr0cDyitcl5wEH3AYog==", + "dev": true + } + } }, "karma-jasmine": { "version": "2.0.1", @@ -6070,15 +4827,6 @@ "colors": "^1.1.2" } }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, "lazystream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", @@ -6086,6 +4834,38 @@ "dev": true, "requires": { "readable-stream": "^2.0.5" + }, + "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" + } + } } }, "lcid": { @@ -6124,7 +4904,7 @@ }, "load-json-file": { "version": "1.1.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { @@ -6133,14 +4913,6 @@ "pify": "^2.0.0", "pinkie-promise": "^2.0.0", "strip-bom": "^2.0.0" - }, - "dependencies": { - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - } } }, "locate-path": { @@ -6151,19 +4923,20 @@ "requires": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" + }, + "dependencies": { + "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 + } } }, "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true - }, - "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 + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" }, "lodash.isfinite": { "version": "3.3.2", @@ -6184,40 +4957,40 @@ "dev": true }, "log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", "dev": true, "requires": { - "chalk": "^1.0.0" + "chalk": "^2.0.1" } }, "log4js": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-3.0.6.tgz", - "integrity": "sha512-ezXZk6oPJCWL483zj64pNkMuY/NcRX5MPiB0zE6tjZM137aeusrOnW1ecxgF9cmwMWkBMhjteQxBPoZBh9FDxQ==", + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-4.5.1.tgz", + "integrity": "sha512-EEEgFcE9bLgaYUKuozyFfytQM2wDHtXn4tAN41pkaxpNjAykv11GVdeI4tHtmPWW4Xrgh9R/2d7XYghDVjbKKw==", "dev": true, "requires": { - "circular-json": "^0.5.5", - "date-format": "^1.2.0", - "debug": "^3.1.0", - "rfdc": "^1.1.2", - "streamroller": "0.7.0" + "date-format": "^2.0.0", + "debug": "^4.1.1", + "flatted": "^2.0.0", + "rfdc": "^1.1.4", + "streamroller": "^1.0.6" }, "dependencies": { "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { "ms": "^2.1.1" } }, "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==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true } } @@ -6233,16 +5006,14 @@ } }, "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", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } }, "map-obj": { "version": "1.0.1", @@ -6250,15 +5021,6 @@ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", "dev": true }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, "maxmin": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-2.1.0.tgz", @@ -6271,14 +5033,39 @@ "pretty-bytes": "^3.0.0" }, "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "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" + } + }, "pretty-bytes": { "version": "3.0.1", - "resolved": "http://registry.npmjs.org/pretty-bytes/-/pretty-bytes-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-3.0.1.tgz", "integrity": "sha1-J9AAjXeAY6C0gRuzXHnxvV1fvM8=", "dev": true, "requires": { "number-is-nan": "^1.0.0" } + }, + "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 } } }, @@ -6290,9 +5077,8 @@ }, "media-typer": { "version": "0.3.0", - "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, "mem": { "version": "1.1.0", @@ -6305,7 +5091,7 @@ }, "meow": { "version": "3.7.0", - "resolved": "http://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "dev": true, "requires": { @@ -6329,54 +5115,23 @@ } } }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "dependencies": { - "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 - } - } - }, "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true }, "mime-db": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", - "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==", - "dev": true + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" }, "mime-types": { - "version": "2.1.21", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", - "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", - "dev": true, + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", "requires": { - "mime-db": "~1.37.0" + "mime-db": "1.40.0" } }, "mimic-fn": { @@ -6386,54 +5141,30 @@ "dev": true }, "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.0.0.tgz", + "integrity": "sha512-8ilDoEapqA4uQ3TwS0jakGONKXVJqpy+RpM+3b7pLdOjghCrEiGp9SRkFbUHAmZW9vdnrENWHjaweIoTIJExSQ==", "dev": true, "optional": true }, "minimatch": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", - "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "lru-cache": "2", - "sigmund": "~1.0.0" + "brace-expansion": "^1.1.7" } }, "minimist": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" }, "mkdirp": { "version": "0.5.1", - "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, "requires": { "minimist": "0.0.8" } @@ -6445,9 +5176,9 @@ "dev": true }, "monaco-editor": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.15.6.tgz", - "integrity": "sha512-JoU9V9k6KqT9R9Tiw1RTU8ohZ+Xnf9DMg6Ktqqw5hILumwmq7xqa/KLXw513uTUsWbhtnHoSJYYR++u3pkyxJg==" + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.18.1.tgz", + "integrity": "sha512-fmL+RFZ2Hrezy+X/5ZczQW51LUmvzfcqOurnkCIRFTyjdVjzR7JvENzI6+VKBJzJdPh6EYL4RoWl92b2Hrk9fw==" }, "morgan": { "version": "1.9.1", @@ -6468,22 +5199,37 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, + "multer": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.2.tgz", + "integrity": "sha512-xY8pX7V+ybyUpbYMxtjM9KAiD9ixtg5/JkeKUTD6xilfDv0vzzOFcCp4Ljb1UU3tSOM3VTZtKo63OmzOrGi3Cg==", + "requires": { + "append-field": "^1.0.0", + "busboy": "^0.2.11", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.1", + "object-assign": "^4.1.1", + "on-finished": "^2.3.0", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + } + }, "mustache": { "version": "2.3.0", - "resolved": "http://registry.npmjs.org/mustache/-/mustache-2.3.0.tgz", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-2.3.0.tgz", "integrity": "sha1-QCj3d4sXcIpImTCm5SrDvKDaQdA=", "dev": true }, "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, "nan": { - "version": "2.11.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz", - "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==", + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", "dev": true, "optional": true }, @@ -6493,37 +5239,17 @@ "integrity": "sha512-4ug4BsuHxiVHoRUe1ud6rUFT3WUMmjXt1W0quL0CviZQANdan7D8kqN5/maw53hmAApY/jfzMRkC57BNNs60ZQ==", "dev": true }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "napi-build-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.1.tgz", + "integrity": "sha512-boQj1WFgQH3v4clhu3mTNfP+vOBxorDlE8EKiMjUlLG3C4qAESnn9AxIOkFgTR2c9LtzNjPrjS60cT27ZKBhaA==", "dev": true, - "requires": { - "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" - }, - "dependencies": { - "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 - } - } + "optional": true }, "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", "dev": true }, "neo-async": { @@ -6533,94 +5259,13 @@ "dev": true }, "node-abi": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.5.0.tgz", - "integrity": "sha512-9g2twBGSP6wIR5PW7tXvAWnEWKJDH/VskdXp168xsw9VVxpEGov8K4jsP4/VeoC7b2ZAyzckvMCuQuQlw44lXg==", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.12.0.tgz", + "integrity": "sha512-VhPBXCIcvmo/5K8HPmnWJyyhvgKxnHTUMXR/XwGHV68+wrgkzST4UmQrY/XszSWA5dtnXpNp528zkcyJ/pzVcw==", "dev": true, "optional": true, "requires": { "semver": "^5.4.1" - }, - "dependencies": { - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true, - "optional": true - } - } - }, - "node-gyp": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", - "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", - "dev": true, - "optional": true, - "requires": { - "fstream": "^1.0.0", - "glob": "^7.0.3", - "graceful-fs": "^4.1.2", - "mkdirp": "^0.5.0", - "nopt": "2 || 3", - "npmlog": "0 || 1 || 2 || 3 || 4", - "osenv": "0", - "request": "^2.87.0", - "rimraf": "2", - "semver": "~5.3.0", - "tar": "^2.0.0", - "which": "1" - }, - "dependencies": { - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "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" - } - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "optional": true, - "requires": { - "abbrev": "1" - } - }, - "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "dev": true, - "optional": true - } } }, "node-http2": { @@ -6680,13 +5325,13 @@ } }, "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==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "requires": { "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", + "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } @@ -6714,7 +5359,6 @@ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, - "optional": true, "requires": { "are-we-there-yet": "~1.1.2", "console-control-strings": "~1.1.0", @@ -6744,16 +5388,15 @@ "dev": true }, "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.3.0.tgz", + "integrity": "sha1-y1QPk7srIqfVlBaRoojWDo6pOG4=", "dev": true }, "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 + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, "object-component": { "version": "0.0.3", @@ -6761,27 +5404,11 @@ "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", "dev": true }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "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" - } - } - } + "object-inspect": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", + "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==", + "dev": true }, "object-keys": { "version": "0.2.0", @@ -6794,15 +5421,6 @@ "is": "~0.2.6" } }, - "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, - "requires": { - "isobject": "^3.0.0" - } - }, "object.getownpropertydescriptors": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", @@ -6813,40 +5431,30 @@ "es-abstract": "^1.5.1" } }, - "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, - "requires": { - "isobject": "^3.0.1" - } - }, "object.values": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.0.4.tgz", - "integrity": "sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", + "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.6.1", - "function-bind": "^1.1.0", - "has": "^1.0.1" + "define-properties": "^1.1.3", + "es-abstract": "^1.12.0", + "function-bind": "^1.1.1", + "has": "^1.0.3" } }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, "requires": { "ee-first": "1.1.1" } }, "on-headers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", - "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", "dev": true }, "once": { @@ -6871,9 +5479,9 @@ "dev": true }, "opn": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz", - "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", "dev": true, "requires": { "is-wsl": "^1.1.0" @@ -6905,7 +5513,7 @@ }, "os-homedir": { "version": "1.0.2", - "resolved": "http://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true }, @@ -6922,7 +5530,7 @@ }, "os-tmpdir": { "version": "1.0.2", - "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, @@ -7030,32 +5638,23 @@ } }, "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true }, "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 + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } }, "path-is-absolute": { "version": "1.0.1", - "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, @@ -7071,6 +5670,12 @@ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, "path-type": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", @@ -7080,14 +5685,6 @@ "graceful-fs": "^4.1.2", "pify": "^2.0.0", "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - } } }, "performance-now": { @@ -7096,9 +5693,15 @@ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", "dev": true }, + "picomatch": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.1.0.tgz", + "integrity": "sha512-uhnEDzAbrcJ8R3g2fANnSuXZMBtkpSjxTTgn2LeSiQlfmq72enQJWdQllXW24MBLYnA1SBD2vfvx2o0Zw3Ielw==", + "dev": true + }, "pify": { "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, @@ -7127,14 +5730,40 @@ } }, "portfinder": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.19.tgz", - "integrity": "sha512-23aeQKW9KgHe6citUrG3r9HjeX6vls0h713TAa+CwTKZwNIr/pD2ApaxYF4Um3ZZyq4ar+Siv3+fhoHaIwSOSw==", + "version": "1.0.25", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.25.tgz", + "integrity": "sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg==", "dev": true, "requires": { - "async": "^1.5.2", - "debug": "^2.2.0", - "mkdirp": "0.5.x" + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.1" + }, + "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==", + "dev": true + } } }, "portscanner": { @@ -7148,53 +5777,40 @@ }, "dependencies": { "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + "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.10" + "lodash": "^4.17.14" } } - } - }, - "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 + } }, "prebuild-install": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-2.5.3.tgz", - "integrity": "sha512-/rI36cN2g7vDQnKWN8Uzupi++KjyqS9iS+/fpwG4Ea8d0Pip0PQ5bshUNzVwt+/D2MRfhVAplYMMvWLqWrCF/g==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.2.tgz", + "integrity": "sha512-INDfXzTPnhT+WYQemqnAXlP7SvfiFMopMozSgXCZ+RDLb279gKfIuLk4o7PgEawLp3WrMgIYGBpkxpraROHsSA==", "dev": true, "optional": true, "requires": { "detect-libc": "^1.0.3", - "expand-template": "^1.0.2", + "expand-template": "^2.0.3", "github-from-package": "0.0.0", "minimist": "^1.2.0", "mkdirp": "^0.5.1", - "node-abi": "^2.2.0", + "napi-build-utils": "^1.0.1", + "node-abi": "^2.7.0", "noop-logger": "^0.1.1", "npmlog": "^4.0.1", - "os-homedir": "^1.0.1", - "pump": "^2.0.1", - "rc": "^1.1.6", - "simple-get": "^2.7.0", - "tar-fs": "^1.13.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^3.0.3", + "tar-fs": "^2.0.0", "tunnel-agent": "^0.6.0", "which-pm-runs": "^1.0.0" }, "dependencies": { - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", - "dev": true, - "optional": true - }, "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", @@ -7212,15 +5828,19 @@ }, "pretty-bytes": { "version": "4.0.2", - "resolved": "http://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz", "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=", "dev": true }, + "printj": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", + "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==" + }, "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 + "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==" }, "proto-list": { "version": "1.2.4", @@ -7251,27 +5871,23 @@ "webdriver-manager": "^12.0.6" }, "dependencies": { - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "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" } }, "minimist": { @@ -7280,31 +5896,16 @@ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, - "q": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", - "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", - "dev": true - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "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 }, "webdriver-manager": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.5.tgz", - "integrity": "sha512-f1apDjMpZ8SHlXtXGzqBxOjV+WQcDRz5PN7pWScgjXS7vhUIFcM3V89Shetf4A04n8DDR2MxiVQq6JproFcRZw==", + "version": "12.1.7", + "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.7.tgz", + "integrity": "sha512-XINj6b8CYuUYC93SG3xPkxlyUc3IJbD6Vvo75CVGuG9uzsefDzWQrhz0Lq8vbPxtb4d63CZdYophF8k8Or/YiA==", "dev": true, "requires": { "adm-zip": "^0.4.9", @@ -7329,17 +5930,15 @@ "dev": true }, "psl": { - "version": "1.1.29", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", - "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==", - "dev": true + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.4.0.tgz", + "integrity": "sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw==" }, "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, - "optional": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -7348,13 +5947,12 @@ "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", + "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", "dev": true }, "qjobs": { @@ -7364,9 +5962,9 @@ "dev": true }, "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/qs/-/qs-0.6.6.tgz", + "integrity": "sha1-bgFQmP9RlouKPIGQAdXyyJvEsQc=", "dev": true }, "querystring": { @@ -7376,31 +5974,47 @@ "dev": true }, "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true }, "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", "dev": true, "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, "dependencies": { - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", "dev": true, "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true } } }, @@ -7454,61 +6068,26 @@ "requires": { "find-up": "^1.0.0", "read-pkg": "^1.0.0" - }, - "dependencies": { - "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" - } - }, - "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, - "requires": { - "pinkie-promise": "^2.0.0" - } - } } }, "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, + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "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.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", + "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", "dev": true, "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "dependencies": { - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - } + "picomatch": "^2.0.4" } }, "readline2": { @@ -7540,33 +6119,20 @@ "strip-indent": "^1.0.1" } }, - "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, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, "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 }, - "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 - }, - "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 + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } }, "request": { "version": "2.88.0", @@ -7594,6 +6160,137 @@ "tough-cookie": "~2.4.3", "tunnel-agent": "^0.6.0", "uuid": "^3.3.2" + }, + "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 + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "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 + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "dev": true, + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "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 + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dev": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + } + }, + "uuid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", + "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", + "dev": true + } + } + }, + "request-promise-core": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz", + "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==", + "requires": { + "lodash": "^4.17.11" + } + }, + "request-promise-native": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz", + "integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==", + "requires": { + "request-promise-core": "1.1.2", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" } }, "require-directory": { @@ -7615,16 +6312,13 @@ "dev": true }, "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - }, - "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 + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", + "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } }, "restore-cursor": { "version": "1.0.1", @@ -7636,23 +6330,36 @@ "onetime": "^1.0.0" } }, - "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 - }, "rfdc": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.2.tgz", - "integrity": "sha512-92ktAgvZhBzYTIK0Mja9uen5q5J3NRVMoDkJL2VMwq6SXjVCgqvQeVP2XAaUY6HT+XpQYeLSjb3UoitBryKmdA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.4.tgz", + "integrity": "sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug==", "dev": true }, "rimraf": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", - "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", - "dev": true + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + }, + "dependencies": { + "glob": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.5.tgz", + "integrity": "sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ==", + "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" + } + } + } }, "run-async": { "version": "0.1.0", @@ -7678,17 +6385,7 @@ "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 - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "safer-buffer": { "version": "2.1.2", @@ -7721,52 +6418,18 @@ "rimraf": "^2.5.4", "tmp": "0.0.30", "xml2js": "^0.4.17" - }, - "dependencies": { - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } } }, "semver": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", "dev": true, "requires": { "debug": "2.6.9", @@ -7776,18 +6439,37 @@ "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" + "range-parser": "~1.2.1", + "statuses": "~1.5.0" }, "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", "dev": true } } @@ -7808,15 +6490,15 @@ } }, "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", "dev": true, "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" + "parseurl": "~1.3.3", + "send": "0.17.1" } }, "set-blocking": { @@ -7825,34 +6507,11 @@ "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.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", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^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" - } - } - } + "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 }, "setimmediate": { "version": "1.0.5", @@ -7894,70 +6553,6 @@ "dev": true, "requires": { "yargs": "^10.0.3" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "yargs": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz", - "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==", - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.1.1", - "find-up": "^2.1.0", - "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^8.1.0" - } - } } }, "sigmund": { @@ -7980,122 +6575,20 @@ "optional": true }, "simple-get": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", - "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", + "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", "dev": true, "optional": true, "requires": { - "decompress-response": "^3.3.0", + "decompress-response": "^4.2.0", "once": "^1.3.1", "simple-concat": "^1.0.0" } }, - "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, - "requires": { - "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" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "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, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "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 - } - } - }, - "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, - "requires": { - "kind-of": "^3.2.0" - } - }, "sntp": { "version": "0.2.4", - "resolved": "http://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz", "integrity": "sha1-+4hfGLDzqtGJ+CSGJTa87ux1CQA=", "dev": true, "requires": { @@ -8176,7 +6669,7 @@ }, "socket.io-parser": { "version": "3.2.0", - "resolved": "http://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", "dev": true, "requires": { @@ -8208,19 +6701,6 @@ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true }, - "source-map-resolve": { - "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.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, "source-map-support": { "version": "0.4.18", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", @@ -8230,16 +6710,10 @@ "source-map": "^0.5.6" } }, - "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 - }, "spdx-correct": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.2.tgz", - "integrity": "sha512-q9hedtzyXHr5S0A1vEPoK/7l8NpfkFYTq6iCY+Pno2ZbdZR6WexZFtqeVGkGxW3TEJMN914Z55EnAGMmenlIQQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", @@ -8263,9 +6737,9 @@ } }, "spdx-license-ids": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.2.tgz", - "integrity": "sha512-qky9CVt0lVIECkEsYbNILVnPvycuEBkXoMFLRWsREkomQLevYhtRKC+R91a5TOAQ3bCMjikRwhyaRqj1VYatYg==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", "dev": true }, "split": { @@ -8277,25 +6751,16 @@ "through": "2" } }, - "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, - "requires": { - "extend-shallow": "^3.0.0" - } - }, "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", "dev": true }, "sshpk": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.2.tgz", - "integrity": "sha512-Ra/OXQtuh0/enyl4ETZAfTaeksa6BXks5ZcjpSUNrjBr0DvrJKX+1fsKDPpT9TBXgHAFsa4510aNVgI8g/+SzA==", + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", "dev": true, "requires": { "asn1": "~0.2.3", @@ -8307,49 +6772,82 @@ "jsbn": "~0.1.0", "safer-buffer": "^2.0.2", "tweetnacl": "~0.14.0" - } - }, - "stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "dev": true - }, - "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, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.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=", + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "safer-buffer": "~2.1.0" } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true } } }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" + }, "stream-browserify": { "version": "2.0.1", - "resolved": "http://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", "dev": true, "requires": { "inherits": "~2.0.1", "readable-stream": "^2.0.2" + }, + "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" + } + } } }, "stream-buffers": { @@ -8365,17 +6863,27 @@ "dev": true }, "streamroller": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-0.7.0.tgz", - "integrity": "sha512-WREzfy0r0zUqp3lGO096wRuUp7ho1X6uo/7DJfTlEi0Iv/4gT7YHqXDjKC2ioVGBZtE8QzsQD9nx1nIuoZ57jQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-1.0.6.tgz", + "integrity": "sha512-3QC47Mhv3/aZNFpDDVO44qQb9gwB9QggMEE0sQmkTAwBVYdBRWISdsywlkfm5II1Q5y/pmrHflti/IgmIzdDBg==", "dev": true, "requires": { - "date-format": "^1.2.0", - "debug": "^3.1.0", - "mkdirp": "^0.5.1", - "readable-stream": "^2.3.0" + "async": "^2.6.2", + "date-format": "^2.0.0", + "debug": "^3.2.6", + "fs-extra": "^7.0.1", + "lodash": "^4.17.14" }, "dependencies": { + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, "debug": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", @@ -8385,14 +6893,30 @@ "ms": "^2.1.1" } }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, "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==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true } } }, + "streamsearch": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", + "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" + }, "string-length": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/string-length/-/string-length-1.0.1.tgz", @@ -8413,15 +6937,31 @@ "strip-ansi": "^3.0.0" } }, - "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==", + "string.prototype.trimleft": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", + "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", + "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", + "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=" + }, "stringstream": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", @@ -8448,7 +6988,7 @@ }, "strip-eof": { "version": "1.0.0", - "resolved": "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, @@ -8469,10 +7009,13 @@ "optional": true }, "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 + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } }, "svgmin": { "version": "0.1.0", @@ -8481,139 +7024,120 @@ "dev": true }, "svgo": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.1.1.tgz", - "integrity": "sha512-GBkJbnTuFpM4jFbiERHDWhZc/S/kpHToqmZag3aEBjPYK44JAN2QBjvrGIxLOoCyMZjuFQIfTO2eJd8uwLY/9g==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", "dev": true, "requires": { - "coa": "~2.0.1", - "colors": "~1.1.2", + "chalk": "^2.4.1", + "coa": "^2.0.2", "css-select": "^2.0.0", - "css-select-base-adapter": "~0.1.0", - "css-tree": "1.0.0-alpha.28", - "css-url-regex": "^1.1.0", - "csso": "^3.5.0", - "js-yaml": "^3.12.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", "mkdirp": "~0.5.1", - "object.values": "^1.0.4", + "object.values": "^1.1.0", "sax": "~1.2.4", - "stable": "~0.1.6", + "stable": "^0.1.8", "unquote": "~1.1.1", "util.promisify": "~1.0.0" }, "dependencies": { - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", - "dev": true - }, - "css-select": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.0.2.tgz", - "integrity": "sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^2.1.2", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, "css-tree": { - "version": "1.0.0-alpha.28", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.28.tgz", - "integrity": "sha512-joNNW1gCp3qFFzj4St6zk+Wh/NBv0vM5YbEreZk0SD4S23S+1xBKb6cLDg2uj4P4k/GUMlIm6cKIDqIG+vdt0w==", + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", "dev": true, "requires": { - "mdn-data": "~1.1.0", - "source-map": "^0.5.3" + "mdn-data": "2.0.4", + "source-map": "^0.6.1" } }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "csso": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.2.tgz", + "integrity": "sha512-kS7/oeNVXkHWxby5tHVxlhjizRCSv8QdU7hB2FpdAibDU8FjTAolhNjKNTiLzXtUrKT6HwClE81yXwEk1309wg==", "dev": true, "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "css-tree": "1.0.0-alpha.37" } }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", "dev": true }, - "js-yaml": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", - "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } + "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 } } }, - "tar": { - "version": "2.2.2", - "resolved": "http://registry.npmjs.org/tar/-/tar-2.2.2.tgz", - "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", + "tar-fs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.0.tgz", + "integrity": "sha512-vaY0obB6Om/fso8a8vakQBzwholQ7v5+uy+tF3Ozvxv1KNezmVQAiWtcNmMHFSFPqL3dJA8ha6gdtFbfX9mcxA==", "dev": true, "optional": true, "requires": { - "block-stream": "*", - "fstream": "^1.0.12", - "inherits": "2" + "chownr": "^1.1.1", + "mkdirp": "^0.5.1", + "pump": "^3.0.0", + "tar-stream": "^2.0.0" }, "dependencies": { - "fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "bl": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-3.0.0.tgz", + "integrity": "sha512-EUAyP5UHU5hxF8BPT0LKW8gjYLhq1DQIcneOX/pL/m2Alo+OYDQAJlHq+yseMP50Os2nHXOSic6Ss3vSQeyf4A==", + "dev": true, + "optional": true, + "requires": { + "readable-stream": "^3.0.1" + } + }, + "readable-stream": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "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==", "dev": true, - "optional": true, "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" + "safe-buffer": "~5.2.0" } }, - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", - "dev": true, - "optional": true - } - } - }, - "tar-fs": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz", - "integrity": "sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==", - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.0.1", - "mkdirp": "^0.5.1", - "pump": "^1.0.0", - "tar-stream": "^1.1.2" - }, - "dependencies": { - "pump": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", - "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", + "tar-stream": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.0.tgz", + "integrity": "sha512-+DAn4Nb4+gz6WZigRzKEZl1QuJVOLtAwwF+WUxy1fJ6X63CaGaUAxJRD2KEn1OMfcbCjySTYpNC6WmfQoIEOdw==", "dev": true, "optional": true, "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "bl": "^3.0.0", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" } } } @@ -8631,6 +7155,38 @@ "readable-stream": "^2.3.0", "to-buffer": "^1.1.1", "xtend": "^4.0.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" + } + } } }, "text-table": { @@ -8641,7 +7197,7 @@ }, "through": { "version": "2.3.8", - "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, @@ -8655,12 +7211,6 @@ "xtend": ">=4.0.0 <4.1.0-0" }, "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, "readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", @@ -8672,12 +7222,6 @@ "isarray": "0.0.1", "string_decoder": "~0.10.x" } - }, - "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 } } }, @@ -8711,53 +7255,28 @@ "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", "dev": true }, - "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, - "requires": { - "kind-of": "^3.0.2" - } - }, - "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, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "is-number": "^7.0.0" } }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "dev": true, + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } + "psl": "^1.1.28", + "punycode": "^2.1.1" } }, "trim-newlines": { @@ -8767,9 +7286,9 @@ "dev": true }, "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" }, "tunnel-agent": { "version": "0.6.0", @@ -8796,37 +7315,35 @@ } }, "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", - "dev": true, + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "requires": { "media-typer": "0.3.0", - "mime-types": "~2.1.18" + "mime-types": "~2.1.24" } }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, "typescript": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", - "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.6.4.tgz", + "integrity": "sha512-unoCll1+l+YK4i4F8f22TaNVPRHcD9PA3yCuZ8g5e0qGqlVlJ/8FSateOLLSagn+Yg5+ZwuPkL8LFUc0Jcvksg==", "dev": true }, "uglify-js": { - "version": "3.4.9", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", - "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", + "version": "3.6.7", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.7.tgz", + "integrity": "sha512-4sXQDzmdnoXiO+xvmTzQsfIiwrjUCSA95rSP4SEd8tDb51W2TiDOlL76Hl+Kw0Ie42PSItCW8/t6pBNCF2R48A==", "dev": true, "requires": { - "commander": "~2.17.1", + "commander": "~2.20.3", "source-map": "~0.6.1" }, "dependencies": { - "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 - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -8874,40 +7391,10 @@ } } }, - "union-value": { - "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": "^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" - } - } - } + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" }, "unpipe": { "version": "1.0.0", @@ -8921,52 +7408,6 @@ "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", "dev": true }, - "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, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "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, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "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" - } - } - } - }, - "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 - } - } - }, - "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 - }, "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", @@ -8982,12 +7423,6 @@ "integrity": "sha1-l0fwGDWJM8Md4PzP2C0TjmcmLjI=", "dev": true }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, "url": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", @@ -9012,33 +7447,19 @@ "integrity": "sha1-WvIvGMBSoACkjXuCxenC4v7tpyg=", "dev": true }, - "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 - }, "useragent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.2.1.tgz", - "integrity": "sha1-z1k+9PLRdYdei7ZY6pLhik/QbY4=", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", + "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", "dev": true, "requires": { - "lru-cache": "2.2.x", + "lru-cache": "4.1.x", "tmp": "0.0.x" - }, - "dependencies": { - "lru-cache": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz", - "integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0=", - "dev": true - } } }, "util": { "version": "0.10.3", - "resolved": "http://registry.npmjs.org/util/-/util-0.10.3.tgz", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", "dev": true, "requires": { @@ -9056,8 +7477,7 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "util.promisify": { "version": "1.0.0", @@ -9075,12 +7495,6 @@ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", "dev": true }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true - }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -9100,6 +7514,14 @@ "assert-plus": "^1.0.0", "core-util-is": "1.0.2", "extsprintf": "^1.2.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 + } } }, "void-elements": { @@ -9125,24 +7547,59 @@ } }, "websocket-stream": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/websocket-stream/-/websocket-stream-5.1.2.tgz", - "integrity": "sha512-lchLOk435iDWs0jNuL+hiU14i3ERSrMA0IKSiJh7z6X/i4XNsutBZrtqu2CPOZuA4G/zabiqVAos0vW+S7GEVw==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/websocket-stream/-/websocket-stream-5.5.0.tgz", + "integrity": "sha512-EXy/zXb9kNHI07TIMz1oIUIrPZxQRA8aeJ5XYg5ihV8K4kD1DuA+FY6R96HfdIHzlSzS8HiISAfrm+vVQkZBug==", "dev": true, "requires": { "duplexify": "^3.5.1", "inherits": "^2.0.1", "readable-stream": "^2.3.3", - "safe-buffer": "^5.1.1", + "safe-buffer": "^5.1.2", "ws": "^3.2.0", "xtend": "^4.0.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" + } + } } }, "which": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz", - "integrity": "sha1-RgwdoPgQED0DIam2M6+eV15kSG8=", - "dev": true + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } }, "which-module": { "version": "2.0.0", @@ -9154,28 +7611,26 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", - "dev": true, - "optional": true + "dev": 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==", "dev": true, - "optional": true, "requires": { "string-width": "^1.0.2 || 2" } }, "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", "dev": true }, "wrap-ansi": { "version": "2.1.0", - "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { @@ -9201,19 +7656,20 @@ } }, "xml2js": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "version": "0.4.22", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.22.tgz", + "integrity": "sha512-MWTbxAQqclRSTnehWWe5nMKzI3VmJ8ltiJEco8akcC6j3miOhjjfzKum5sId+CWhfxdOs/1xauYr8/ZDBtQiRw==", "dev": true, "requires": { "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" + "util.promisify": "~1.0.0", + "xmlbuilder": "~11.0.0" } }, "xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", "dev": true }, "xmlhttprequest-ssl": { @@ -9223,10 +7679,9 @@ "dev": true }, "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" }, "y18n": { "version": "3.2.1", @@ -9235,10 +7690,72 @@ "dev": true }, "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", - "dev": true + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz", + "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^8.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } }, "yargs-parser": { "version": "8.1.0", @@ -9275,11 +7792,35 @@ "readable-stream": "^2.0.0" }, "dependencies": { - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "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" + } } } } diff --git a/package.json b/package.json index 1423173fd63..2e665340c88 100644 --- a/package.json +++ b/package.json @@ -20,30 +20,31 @@ ], "devDependencies": { "csso": "^3.5.1", - "easyimage": "^3.1.0", - "grunt": "^1.0.3", + "easyimage": "^3.1.1", + "grunt": "^1.0.4", "grunt-banner": "^0.6.0", "grunt-bump": "^0.8.0", "grunt-chmod": "latest", + "grunt-composer": "^0.4.5", "grunt-contrib-clean": "^2.0.0", - "grunt-contrib-compress": "^1.0.0", + "grunt-contrib-compress": "^1.5.0", "grunt-contrib-connect": "^2.0.0", - "grunt-contrib-uglify": "^4.0.0", + "grunt-contrib-uglify": "^4.0.1", "grunt-file-creator": "^0.1.3", "grunt-github-changes": "latest", "grunt-github-releaser": "^0.1.18", "grunt-http-server": "^2.1.0", - "grunt-karma": "^3.0.1", + "grunt-karma": "^3.0.2", "grunt-karma-coveralls": "^2.5.4", "grunt-prompt": "^1.3.3", "grunt-protractor-runner": "^5.0.0", "grunt-scaffold": "^0.7.0", - "grunt-shell": "^2.1.0", - "grunt-svgmin": "^5.0.0", + "grunt-shell": "^3.0.1", + "grunt-svgmin": "^6.0.0", "grunt-svgstore": "latest", - "jasmine-core": "^3.3.0", + "jasmine-core": "^3.4.0", "jshint-stylish": "^2.1.0", - "karma": "^3.1.1", + "karma": "^4.1.0", "karma-chrome-launcher": "^2.0.0", "karma-coverage": "^1.1.1", "karma-firefox-launcher": "^1.0.0", @@ -51,11 +52,16 @@ "karma-qooxdoo": "^0.6.0", "karma-spec-reporter": "0.0.32", "protractor": "^5.4.2", - "request": "^2.69.0", + "request": "^2.88.0", "svgmin": "^0.1.0" }, "dependencies": { - "@sentry/browser": "^4.0.4", - "monaco-editor": "^0.15.6" + "@sentry/browser": "^5.4.2", + "crc-32": "^1.2.0", + "fs-extra": "^8.0.1", + "ini": "^1.3.5", + "monaco-editor": "^0.18.1", + "multer": "^1.4.1", + "request-promise-native": "^1.0.7" } } diff --git a/source/class/cv/Application.js b/source/class/cv/Application.js index 820fe969343..99da610d76f 100644 --- a/source/class/cv/Application.js +++ b/source/class/cv/Application.js @@ -34,6 +34,20 @@ qx.Class.define("cv.Application", { extend : qx.application.Native, + /* + *********************************************** + CONSTRUCTOR + *********************************************** + */ + construct: function () { + this.base(arguments); + this.initCommandManager(new qx.ui.command.GroupManager()); + var lang = qx.locale.Manager.getInstance().getLanguage(); + if (qx.io.PartLoader.getInstance().hasPart(lang)) { + qx.io.PartLoader.require([lang]); + } + }, + /* ****************************************************** STATICS @@ -42,6 +56,7 @@ qx.Class.define("cv.Application", statics: { HTML_STRUCT: '

', consoleCommands: [], + __commandManager: null, /** * Client factory method -> create a client @@ -93,6 +108,11 @@ qx.Class.define("cv.Application", check: 'Boolean', init: false, event: 'changeStructureLoaded' + }, + + commandManager: { + check: 'qx.ui.command.GroupManager', + deferredInit: true } }, @@ -157,6 +177,14 @@ qx.Class.define("cv.Application", console.log(info); + // add command to load and open the manager + var manCommand = new qx.ui.command.Command('Ctrl+M'); + cv.TemplateEngine.getInstance().getCommands().add("open-manager", manCommand); + manCommand.addListener('execute', this.showManager, this); + if (cv.Config.request.queryKey.manager) { + this.showManager(); + } + if (qx.core.Environment.get("qx.aspects")) { qx.dev.Profile.stop(); qx.dev.Profile.start(); @@ -190,6 +218,12 @@ qx.Class.define("cv.Application", this.__init(); }, + showManager: function () { + qx.io.PartLoader.require(['manager'], function (states) { + cv.ui.manager.Main.getInstance(); + }, this); + }, + __globalErrorHandler: function(ex) { // connect client data for Bug-Report var bugData = cv.report.Record.getClientData(); diff --git a/source/class/cv/Config.js b/source/class/cv/Config.js index d9637c7a6f2..a0329234a73 100644 --- a/source/class/cv/Config.js +++ b/source/class/cv/Config.js @@ -266,6 +266,9 @@ qx.Class.define('cv.Config', { cv.Config.startpage = req.queryKey.startpage; } + // store for later usage + cv.Config.request = req; + if (qx.core.Environment.get('cv.testMode') !== false) { cv.Config.testMode = true; if (qx.core.Environment.get('cv.testMode') !== "true") { diff --git a/source/class/cv/TemplateEngine.js b/source/class/cv/TemplateEngine.js index 250d1a5b938..271a20184f9 100644 --- a/source/class/cv/TemplateEngine.js +++ b/source/class/cv/TemplateEngine.js @@ -36,7 +36,15 @@ qx.Class.define('cv.TemplateEngine', { }, this); this.defaults = {widget: {}, plugin: {}}; - this.setCommands(new qx.ui.command.Group()); + var group = new qx.ui.command.Group(); + this.setCommands(group); + var app = qx.core.Init.getApplication(); + if (app) { + // application is not available in tests + var manager = app.getCommandManager(); + manager.add(group); + manager.setActive(group); + } }, properties: { diff --git a/source/class/cv/io/rest/Client.js b/source/class/cv/io/rest/Client.js new file mode 100644 index 00000000000..d909e3a89a9 --- /dev/null +++ b/source/class/cv/io/rest/Client.js @@ -0,0 +1,208 @@ +/** + * + */ +qx.Class.define('cv.io.rest.Client', { + type: 'static', + + /* + *********************************************** + STATICS + *********************************************** + */ + statics: { + BASE_URL: null, + __configFile: null, + __dirClient: null, + __dpClient: null, + __callbacks: {}, + + getBaseUrl: function () { + if (!this.BASE_URL) { + var path = qx.util.Uri.parseUri(window.location.href).path; + path += 'rest/cv/index.php'; + this.BASE_URL = path; + } + return this.BASE_URL; + }, + + getConfigClient: function() { + if (!this.__configFile) { + var config = { + get: { + method: 'GET', url: '/config/hidden/{section}/{key}' + }, + put: { + method: 'PUT', url: '/config/hidden/{section}/{key}' + }, + post: { + method: 'POST', url: '/config/hidden/{section}/{key}' + }, + "delete": { + method: 'DELETE', url: '/config/hidden/{section}/{key}' + }, + save: { + method: 'PUT', url: '/config/hidden' + } + }; + this.__configFile = new qx.io.rest.Resource(config); + this.__configFile.setBaseUrl(this.getBaseUrl()); + this.__configFile.configureRequest(function (req, action) { + if (action === 'save') { + req.setRequestHeader('Content-Type', 'application/json'); + } + if (action === 'get') { + req.setAccept('text/xml'); + } else { + req.setAccept('application/json'); + } + }); + + this._enableSync(this.__configFile, config); + } + return this.__configFile; + }, + + getFsClient: function () { + if (!this.__dirClient) { + var config = { + read: { + method: 'GET', url: '/fs?path={path}' + }, + update: { + method: 'PUT', url: '/fs?path={path}' + }, + create: { + method: 'POST', url: '/fs?path={path}&type={type}' + }, + "delete": { + method: 'DELETE', url: '/fs?path={path}&force={force}' + }, + move: { + method: 'PUT', url: '/fs/move?src={src}&target={target}' + }, + checkEnvironment: { + method: 'GET', url: '/fs/check' + } + }; + this.__dirClient = new qx.io.rest.Resource(config); + this.__dirClient.setBaseUrl(this.getBaseUrl()); + this.__dirClient.configureRequest(function (req, action, params) { + if (params.hash) { + req.setUrl(req.getUrl() + '&hash=' + params.hash); + } + if (params.recursive === true && action === 'read') { + req.setUrl(req.getUrl() + '&recursive=true'); + } + if (action === 'update' || action === 'create') { + var parts = params.path.split('.'); + if (parts.length > 1) { + var type = parts.pop(); + var mimetype = cv.ui.manager.tree.FileSystem.getMimetypeFromSuffix(type); + req.setRequestHeader('Content-Type', mimetype || 'text/plain'); + } else { + req.setRequestHeader('Content-Type', 'text/plain'); + } + req.setAccept('application/json'); + } + }); + + + this._enableSync(this.__dirClient, config); + + // general listeners + this.__dirClient.addListener('updateSuccess', this._onSaveSuccess, this); + this.__dirClient.addListener('createSuccess', this._onSaveSuccess, this); + this.__dirClient.addListener('updateError', this._onSaveError, this); + this.__dirClient.addListener('createError', this._onSaveError, this); + } + return this.__dirClient; + }, + + getDataProviderClient: function () { + if (!this.__dpClient) { + var config = { + designs: { + method: 'GET', url: '/data/designs' + }, + rrds: { + method: 'GET', url: '/data/rrds' + }, + influxdbs: { + method: 'GET', url: '/data/influxdbs?auth={auth}' + }, + influxdbfields: { + method: 'GET', url: '/data/influxdbfields?auth={auth}&measurement={measurement}' + }, + influxdbtags: { + method: 'GET', url: '/data/influxdbtags?auth={auth}&measurement={measurement}' + } + }; + this.__dpClient = new qx.io.rest.Resource(config); + this.__dpClient.setBaseUrl(this.getBaseUrl()); + + this._enableSync(this.__dpClient, config); + } + return this.__dpClient; + }, + + _enableSync: function (client, config) { + // install the callback calls + Object.keys(config).forEach(function (callName) { + client[callName + 'Sync'] = function () { + var args = qx.lang.Array.fromArguments(arguments); + var callback; + var context = args.pop(); + if (qx.lang.Type.isFunction(context)) { + callback = context; + context = this; + } else { + callback = args.pop(); + } + this.__callbacks[client[callName].apply(client, args)] = callback.bind(context); + }.bind(this); + }, this); + + // add the general listeners + client.addListener('success', function (ev) { + var req = ev.getRequest(); + var id = parseInt(req.toHashCode(), 10); + if (this.__callbacks.hasOwnProperty(id)) { + this.__callbacks[id](null, ev.getData()); + delete this.__callbacks[id]; + } + }, this); + + client.addListener('error', function (ev) { + var req = ev.getRequest(); + var id = parseInt(req.toHashCode(), 10); + if (this.__callbacks.hasOwnProperty(id)) { + qx.log.Logger.error(this, ev.getData()); + this.__callbacks[id](ev.getData().message, null); + delete this.__callbacks[id]; + } + if (req.getPhase() === 'load') { + // error during load phase => backend not reachable + dialog.Dialog.error(qx.locale.Manager.tr('Backend does not respond!')); + } + }, this); + }, + + _onSaveSuccess: function (ev) { + var req = ev.getRequest(); + var id = parseInt(req.toHashCode(), 10); + // only handle this events, when there is no callback for it + if (!this.__callbacks.hasOwnProperty(id)) { + cv.ui.manager.snackbar.Controller.info(qx.locale.Manager.tr('File has been saved')); + } + }, + + _onSaveError: function (ev) { + var req = ev.getRequest(); + var id = parseInt(req.toHashCode(), 10); + // only handle this events, when there is no callback for it + if (!this.__callbacks.hasOwnProperty(id)) { + cv.ui.manager.snackbar.Controller.error(qx.locale.Manager.tr('Error saving file')); + } + } + } +}); diff --git a/source/class/cv/plugins/openhab/Openhab.js b/source/class/cv/plugins/openhab/Openhab.js index a53f57e16a6..98524e3c9a7 100644 --- a/source/class/cv/plugins/openhab/Openhab.js +++ b/source/class/cv/plugins/openhab/Openhab.js @@ -42,16 +42,18 @@ qx.Class.define("cv.plugins.openhab.Openhab", { */ construct: function () { this.base(arguments); + if (!cv.Config.request.queryKey.hasOwnProperty('preview')) { - this.__notificationRouter = cv.core.notifications.Router.getInstance(); + this.__notificationRouter = cv.core.notifications.Router.getInstance(); - // listen to notifications - var client = cv.TemplateEngine.getInstance().visu; - var sse = client.getCurrentTransport && client.getCurrentTransport(); - if (sse) { - sse.subscribe("notifications", this._onNotification, this); + // listen to notifications + var client = cv.TemplateEngine.getInstance().visu; + var sse = client.getCurrentTransport && client.getCurrentTransport(); + if (sse) { + sse.subscribe("notifications", this._onNotification, this); + } + cv.TemplateEngine.getInstance().executeWhenDomFinished(this._createSettings, this); } - cv.TemplateEngine.getInstance().executeWhenDomFinished(this._createSettings, this); }, /* diff --git a/source/class/cv/svg/Element.js b/source/class/cv/svg/Element.js new file mode 100644 index 00000000000..7f5b87dcfc1 --- /dev/null +++ b/source/class/cv/svg/Element.js @@ -0,0 +1,31 @@ +qx.Class.define("cv.svg.Element", { + extend: qx.html.Element, + /* + *********************************************** + CONSTRUCTOR + *********************************************** + */ + construct: function (tagName) { + this.base(arguments); + this.__svgElement = document.createElementNS("http://www.w3.org/2000/svg", tagName); + }, + + /* + *********************************************** + MEMBERS + *********************************************** + */ + members: { + _createDomElement : function() { + return this.__svgElement; + }, + getDomElement : function() { + return this.__svgElement; + } + }, + + destruct : function() { + this.__svgElement.$$widget = null; + this.__svgElement = null; + } +}); diff --git a/source/class/cv/theme/dark/Appearance.js b/source/class/cv/theme/dark/Appearance.js index 8009d722097..389d42b4763 100644 --- a/source/class/cv/theme/dark/Appearance.js +++ b/source/class/cv/theme/dark/Appearance.js @@ -20,9 +20,389 @@ qx.Theme.define("cv.theme.dark.Appearance", { - extend : qx.theme.simple.Appearance, + extend : osparc.theme.osparcdark.Appearance, appearances : { + 'cv-start': 'widget', + 'cv-start/configs-header': { + style: function () { + return { + margin: [20, 10, 0, 10], + decorator: 'cv-start-section-title' + }; + } + }, + 'cv-start/configs-title': { + style: function () { + return { + iconPosition: 'right', + font: 'title', + marginLeft: 10, + allowGrowX: true + }; + } + }, + 'cv-start/configs-toolbar': { + style: function () { + return { + }; + } + }, + 'cv-start/misc-title': { + style: function () { + return { + iconPosition: 'right', + font: 'title', + margin: [20, 10, 0, 10], + paddingTop: 5, + cursor: 'pointer', + allowGrowX: true, + decorator: 'cv-start-section-title' + }; + } + }, + 'cv-start/demo-configs-title': 'cv-start/misc-title', + 'cv-start/media-title': 'cv-start/configs-title', + 'cv-start/media-toolbar': 'cv-start/configs-toolbar', + 'cv-start/media-header': 'cv-start/configs-header', + + 'cv-file-item': { + include: 'listitem', + alias: 'listitem', + + style: function (states) { + return { + iconPosition: states.list ? 'left' : 'top', + show: states.list ? 'label' : 'both', + font: states.list ? 'default' : 'small', + width: states.list ? 500 : 130, + backgroundColor: states.hovered ? 'rgba(255, 255, 255, 0.1)' : 'transparent' + }; + } + }, + 'cv-file-item/atom/label': { + include: 'atom/label', + style: function () { + return { + alignY: 'middle', + allowGrowY: true + }; + } + }, + 'cv-file-item/atom/icon': { + include: 'atom/icon', + style: function () { + return { + width: 70, + height: 70, + scale: true + }; + } + }, + 'cv-file-item/action-menu': 'menu', + 'cv-file-item/download-button': { + include: 'button', + alias: 'button', + + style: function () { + return { + height: 30, + show: 'icon' + }; + } + }, + 'cv-file-item/action-button': 'cv-file-item/download-button', + 'cv-file-item/open-button': 'cv-file-item/download-button', + 'cv-icon': 'cv-file-item', + 'cv-icon/icon': { + include: 'atom/icon', + style: function () { + return { + width: 70, + height: 70 + }; + } + }, + 'cv-file-item-add-file': { + include: 'cv-file-item', + alias: 'cv-file-item', + + style: function (states) { + return { + decorator: 'cv-file-item-add-file', + opacity: states.hovered ? 1.0 : 0.5, + cursor: 'pointer' + }; + } + }, + 'open-file-item': { + alias: "atom", + + style: function (states) { + var padding = [2, 5, 2, 5]; + if (states.lead) { + padding = [1, 4, 1, 4]; + } + if (states.dragover) { + padding[2] -= 1; + } + + var backgroundColor; + if (states.selected) { + backgroundColor = "background-selected"; + if (states.disabled) { + backgroundColor += "-disabled"; + } + } + return { + backgroundColor: backgroundColor, + textColor: states.selected ? "text-selected" : undefined, + decorator: states.lead ? "lead-item" : states.dragover ? "dragover" : undefined, + opacity: states.drag ? 0.5 : undefined, + height: 26, + padding: padding, + margin: 0 + }; + } + }, + 'open-file-item/label': { + include: 'listitem/label', + + style: function () { + return { + alignY: 'middle' + }; + } + }, + 'open-file-item/icon': { + alias: 'listitem/icon', + style: function () { + return { + alignY: 'middle', + padding: [0, 8] + }; + } + }, + 'open-file-item/close': { + + style: function () { + return { + padding: 8, + cursor: 'pointer', + alignY: 'middle' + }; + } + }, + + 'open-with-button': { + include: 'menu-button', + alias: 'menu-button', + + style: function (states) { + return { + font: states.default ? 'bold' : 'default' + }; + } + }, + + 'list': { + style: function () { + return { + decorator: null + }; + } + }, + + 'cv-editor-config': { + style: function () { + return { + padding: 10 + }; + } + }, + + 'cv-editor-config-section': { + style: function () { + return { + padding: 10, + decorator: 'cv-editor-config-section', + marginBottom: 10 + }; + } + }, + + 'cv-editor-config-option': { + style: function () { + return { + marginBottom: 10 + }; + } + }, + + 'cv-config-textfield': { + include: 'textfield', + alias: 'textfield', + + style: function () { + return { + minWidth: 300 + }; + } + }, + + 'cv-editor-config-section/section-title': { + style: function () { + return { + font: 'title', + marginRight: 20 + }; + } + }, + + 'cv-editor-config-section/options-title': 'cv-editor-config-section/section-title', + 'cv-editor-config-section/name': 'cv-config-textfield', + 'cv-editor-config-section/list': { + include: 'list', + alias: 'list', + + style: function() { + return { + height: null + }; + } + }, + 'cv-editor-config-option/value-title': { + style: function () { + return { + allowGrowX: true, + font: 'subtitle' + }; + } + }, + 'cv-editor-config-option/key-title': 'cv-editor-config-option/value-title', + + // snackbar components + 'cv-snackbar': { + style: function () { + return { + zIndex: 1000 + }; + } + }, + + 'cv-snackbar/list': { + style: function () { + return { + height: null, + width: 400, + minWidth: 300 + }; + } + }, + + 'cv-snackbar-msg': { + style: function () { + return { + marginTop: 10, + padding: 10, + textColor: 'text', + decorator: 'cv-snackbar-msg' + }; + } + }, + + 'cv-snackbar-msg/content': { + style: function () { + return { + allowGrowX: true + }; + } + }, + + 'cv-snackbar-msg/close': { + style: function () { + return { + cursor: 'pointer' + }; + } + }, + 'cv-toolbar': { + include: 'toolbar', + alias: 'toolbar', + + style: function () { + return { + // decorator: 'cv-toolbar' + }; + } + }, + 'cv-toolbar-button': { + include: 'toolbar-button', + alias: 'toolbar-button', + + style: function () { + return { + // margin: 1 + }; + } + }, + + 'image-viewer': {}, + 'image-viewer/scroll': 'scrollarea', + 'image-viewer/image': { + include: 'atom', + alias: 'atom', + + style: function () { + return { + iconPosition: 'top', + gap: 10, + center: true + }; + }, + 'image-viewer/image/label': { + style: function () { + return { + margin: 10 + }; + } + } + }, + + 'fs-tree-item': { + include: 'virtual-tree-folder', + alias: 'virtual-tree-folder', + + style: function (states) { + return { + font: states.temporary ? 'italic' : 'default' + }; + } + }, + + 'fs-tree-item/icon': { + include: 'virtual-tree-folder/icon', + alias: 'virtual-tree-folder/icon', + + style: function(states) { + return { + textColor: states.error ? 'invalid-color' : null + }; + } + }, + 'cv-file-contextmenu': 'menu', + 'cv-file-contextmenu/open-with-button': 'menu-button', + 'cv-file-contextmenu/compare-with-button': 'menu-button', + 'open-files-tabs': { + style: function () { + return { + height: 34, + padding: 0, + marginBottom: 5, + decorator: 'open-file-tabs' + }; + } + } } }); \ No newline at end of file diff --git a/source/class/cv/theme/dark/Color.js b/source/class/cv/theme/dark/Color.js index 7bea322e3ab..02904ad75a9 100644 --- a/source/class/cv/theme/dark/Color.js +++ b/source/class/cv/theme/dark/Color.js @@ -20,9 +20,10 @@ qx.Theme.define("cv.theme.dark.Color", { - extend : qx.theme.simple.Color, + extend : osparc.theme.osparcdark.Color, colors : { - + 'valid-color': '#22822d', + 'invalid-color': 'material-textfield-invalid' } }); \ No newline at end of file diff --git a/source/class/cv/theme/dark/Decoration.js b/source/class/cv/theme/dark/Decoration.js index 110a9d66be5..a185e734a3c 100644 --- a/source/class/cv/theme/dark/Decoration.js +++ b/source/class/cv/theme/dark/Decoration.js @@ -20,11 +20,67 @@ qx.Theme.define("cv.theme.dark.Decoration", { - extend : qx.theme.simple.Decoration, + extend : osparc.theme.osparcdark.Decoration, decorations : { "window-caption-active": { + }, + 'cv-editor-config-section': { + style: { + width: 1, + color: 'material-textfield' + } + }, + + 'cv-snackbar-msg': { + style: { + backgroundColor: 'button' + } + }, + + 'cv-snackbar-msg-error': { + style: { + backgroundColor: 'material-textfield-invalid' + } + }, + + 'cv-toolbar': { + style: { + width: [1, 0, 1, 0], + color: 'background-main' + } + }, + + 'file-action-button': { + style: { + width: 1, + color: 'text' + } + }, + + 'cv-start-section-title': { + style: { + width: [1, 0, 0, 0], + color: 'text-placeholder' + } + }, + 'open-file-tabs': { + style: { + shadowSpreadRadius: 0, + shadowBlurRadius: 4, + shadowHorizontalLength: 1, + shadowVerticalLength: 1, + shadowColor: 'rgba(255, 255, 255, 0.1)' + } + }, + + 'cv-file-item-add-file': { + style: { + width: 1, + color: 'text', + style: 'dashed' + } } } }); \ No newline at end of file diff --git a/source/class/cv/theme/dark/Font.js b/source/class/cv/theme/dark/Font.js index 7732d630da7..ce95b7f1cee 100644 --- a/source/class/cv/theme/dark/Font.js +++ b/source/class/cv/theme/dark/Font.js @@ -20,37 +20,98 @@ /** * Font definitions - * + * @asset(iconfont/material/MaterialIcons-Regular.eot) + * @asset(iconfont/material/MaterialIcons-Regular.ttf) + * @asset(iconfont/material/MaterialIcons-Regular.woff) + * @asset(iconfont/material/MaterialIcons-Regular.woff2) + * @asset(iconfont/material/MaterialIcons-Regular.json) */ -qx.Theme.define("cv.theme.dark.Font", -{ - extend : qx.theme.simple.Font, +qx.Theme.define("cv.theme.dark.Font",{ + extend : osparc.theme.osparcdark.Font, fonts : { - "default" : - { - size : 13, - family : ['URW Gothic L','Century Gothic','Apple Gothic',"arial","sans-serif"] + "italic": { + size: 13, + family: ["sans-serif"], + color: "text", + italic: true, + sources: [ + { + family: "Roboto", + source: [ + "osparc/font/roboto-v18-latin_latin-ext-regular.eot", + "osparc/font/roboto-v18-latin_latin-ext-regular.woff2", + "osparc/font/roboto-v18-latin_latin-ext-regular.woff", + "osparc/font/roboto-v18-latin_latin-ext-regular.ttf" + ] + } + ] }, - - "bold" : - { - size : 13, - family : ['URW Gothic L','Century Gothic','Apple Gothic',"arial","sans-serif"], - bold: true - }, - - "subtext" : - { - size : 12, - family : ['URW Gothic L','Century Gothic','Apple Gothic',"arial","sans-serif"] + "title": { + size: 18, + family: ["sans-serif"], + color: "text", + sources: [ + { + family: "Roboto", + source: [ + "osparc/font/roboto-v18-latin_latin-ext-regular.eot", + "osparc/font/roboto-v18-latin_latin-ext-regular.woff2", + "osparc/font/roboto-v18-latin_latin-ext-regular.woff", + "osparc/font/roboto-v18-latin_latin-ext-regular.ttf" + ] + } + ] + }, + "small": { + size: 12, + family: ["sans-serif"], + color: "text", + sources: [ + { + family: "Roboto", + source: [ + "osparc/font/roboto-v18-latin_latin-ext-regular.eot", + "osparc/font/roboto-v18-latin_latin-ext-regular.woff2", + "osparc/font/roboto-v18-latin_latin-ext-regular.woff", + "osparc/font/roboto-v18-latin_latin-ext-regular.ttf" + ] + } + ] + }, + "subtitle": { + size: 16, + family: ["sans-serif"], + color: "text", + sources: [ + { + family: "Roboto", + source: [ + "osparc/font/roboto-v18-latin_latin-ext-regular.eot", + "osparc/font/roboto-v18-latin_latin-ext-regular.woff2", + "osparc/font/roboto-v18-latin_latin-ext-regular.woff", + "osparc/font/roboto-v18-latin_latin-ext-regular.ttf" + ] + } + ] }, - - "title" : - { - size : 18, - bold : true, - family : ['URW Gothic L','Century Gothic','Apple Gothic',"arial","sans-serif"] + "MaterialIcons": { + size: 32, + lineHeight: 1, + comparisonString : "\uf1e3\uf1f7\uf11b\uf19d", + family: ["MaterialIcons"], + sources: [ + { + family: "MaterialIcons", + mapping: "iconfont/material/MaterialIcons-Regular.json", + source: [ + "iconfont/material/MaterialIcons-Regular.eot", + "iconfont/material/MaterialIcons-Regular.woff2", + "iconfont/material/MaterialIcons-Regular.woff", + "iconfont/material/MaterialIcons-Regular.ttf" + ] + } + ] } } }); \ No newline at end of file diff --git a/source/class/cv/theme/dark/Icon.js b/source/class/cv/theme/dark/Icon.js index e2e6779a269..b892ef69529 100644 --- a/source/class/cv/theme/dark/Icon.js +++ b/source/class/cv/theme/dark/Icon.js @@ -19,5 +19,13 @@ qx.Theme.define("cv.theme.dark.Icon", { + extend: qx.theme.icon.Tango, + aliases: { + "dialog.icon.cancel" : "@MaterialIcons/cancel/18", + "dialog.icon.ok" : "@MaterialIcons/check/18", + "dialog.icon.info" : "@MaterialIcons/info/18", + "dialog.icon.error" : "@MaterialIcons/error/18", + "dialog.icon.warning" : "@MaterialIcons/warning/18" + } }); \ No newline at end of file diff --git a/source/class/cv/theme/dark/Images.js b/source/class/cv/theme/dark/Images.js new file mode 100644 index 00000000000..95424b36ccc --- /dev/null +++ b/source/class/cv/theme/dark/Images.js @@ -0,0 +1,59 @@ +/** + * Some icon definitions. + */ +qx.Class.define('cv.theme.dark.Images', { + type: 'static', + + /* + *********************************************** + STATICS + *********************************************** + */ + statics: { + ICONS: { + 'new': '@MaterialIcons/add', + 'new-file': '@MaterialIcons/note_add', + 'new-folder': '@MaterialIcons/create_new_folder', + 'save': '@MaterialIcons/save', + 'delete': '@MaterialIcons/delete', + 'close': '@MaterialIcons/close', + 'quit': '@MaterialIcons/exit_to_app', + 'undo': '@MaterialIcons/undo', + 'redo': '@MaterialIcons/redo', + 'hidden-config': '@MaterialIcons/settings', + 'reload': '@MaterialIcons/sync', + 'add': '@MaterialIcons/add', + 'mounted-folder': '@MaterialIcons/folder_special', + 'folder': '@MaterialIcons/folder', + 'folder-open': '@MaterialIcons/folder_open', + 'file': '@MaterialIcons/insert_drive_file', + 'download': '@MaterialIcons/cloud_download', + 'upload': '@MaterialIcons/cloud_upload', + 'rename': '@MaterialIcons/text_rotation_none', + 'compare': '@MaterialIcons/compare_arrows', + 'preview': '@MaterialIcons/remove_red_eye', + 'trash': '@MaterialIcons/delete', + 'open': '@MaterialIcons/open_in_browser', + 'open-with': '@MaterialIcons/open_with', + 'validate': '@MaterialIcons/spellcheck', + 'valid': '@MaterialIcons/check_circle', + 'error': '@MaterialIcons/error', + 'image': '@MaterialIcons/image', + 'text': '@MaterialIcons/format_align_left', + 'xml': '@MaterialIcons/ballot', + 'icons': '@MaterialIcons/image_search', + 'home': '@MaterialIcons/home', + 'edit': '@MaterialIcons/edit', + 'menu': '@MaterialIcons/menu', + 'drop-down': '@MaterialIcons/arrow_drop_down', + 'drop-up': '@MaterialIcons/arrow_drop_up', + 'clone-file': '@MaterialIcons/file_copy', + 'listViewMode': '@MaterialIcons/view_headline', + 'previewMode': '@MaterialIcons/view_module' + }, + + getIcon: function (name, size) { + return this.ICONS.hasOwnProperty(name) ? this.ICONS[name] + '/' + size : '@MaterialIcons/' + name + '/' + size; + } + } +}); diff --git a/source/class/cv/ui/NotificationCenter.js b/source/class/cv/ui/NotificationCenter.js index dc14c93ac32..d81ef7abd3c 100644 --- a/source/class/cv/ui/NotificationCenter.js +++ b/source/class/cv/ui/NotificationCenter.js @@ -70,7 +70,7 @@ qx.Class.define("cv.ui.NotificationCenter", { cv.core.notifications.Router.getInstance().registerMessageHandler(this, { 'cv.*': {} }); - this._openCommand = new qx.ui.command.Command("Ctrl+M"); + this._openCommand = new qx.ui.command.Command("Ctrl+N"); this._openCommand.addListener("execute", this.toggleVisibility, this); cv.TemplateEngine.getInstance().getCommands().add("open-notificationcenter", this._openCommand); diff --git a/source/class/cv/ui/manager/IActionHandler.js b/source/class/cv/ui/manager/IActionHandler.js new file mode 100644 index 00000000000..aac774f2d1c --- /dev/null +++ b/source/class/cv/ui/manager/IActionHandler.js @@ -0,0 +1,24 @@ +/** + * All Widgets that need to handle actions from the managers action event, need to implement this interface. + */ +qx.Interface.define('cv.ui.manager.IActionHandler', { + /* + *********************************************** + MEMBERS + *********************************************** + */ + members: { + /** + * Checks if the action handle can process the action. + * @param actionName {String} action name + */ + canHandleAction: function(actionName) {}, + + /** + * Executes the action handling. + * @param actionName {String} action name + * @param data {var} action payload + */ + handleAction: function (actionName, data) {} + } +}); diff --git a/source/class/cv/ui/manager/Main.js b/source/class/cv/ui/manager/Main.js new file mode 100644 index 00000000000..66eae4dcffe --- /dev/null +++ b/source/class/cv/ui/manager/Main.js @@ -0,0 +1,817 @@ +/** + * Main class of the CometVisu file manager. + * @author Tobias Bräutigam + * @since 0.12.0 + * + * @asset(manager/*) + */ +qx.Class.define('cv.ui.manager.Main', { + extend: qx.core.Object, + type: "singleton", + include: [ + cv.ui.manager.control.MFileEventHandler + ], + implement: [cv.ui.manager.IActionHandler, cv.ui.manager.control.IFileEventHandler], + + /* + *********************************************** + CONSTRUCTOR + *********************************************** + */ + construct: function () { + this.base(arguments); + this._checkEnvironment(); + this.initOpenFiles(new qx.data.Array()); + this.__actionDispatcher = cv.ui.manager.control.ActionDispatcher.getInstance(); + this.__actionDispatcher.setMain(this); + + this.__initCommands(); + this._draw(); + + qx.event.message.Bus.subscribe('cv.manager.*', this._onManagerEvent, this); + + // Initialize tooltip manager + qx.ui.tooltip.Manager.getInstance(); + }, + + /* + *********************************************** + STATICS + *********************************************** + */ + statics: { + ROOT: null + }, + + /* + *********************************************** + PROPERTIES + *********************************************** + */ + properties: { + openFiles: { + check: 'qx.data.Array', + deferredInit: true + }, + + /** + * Current selected folder (if a file is selected its parent folder) is writeable. + */ + writeableFolder: { + check: 'Boolean', + init: false, + event: 'changeWriteableFolder' + }, + + currentFolder: { + check: 'cv.ui.manager.model.FileItem', + nullable: true, + apply: '_applyCurrentFolder', + event: 'changeCurrentFolder' + }, + + currentSelection: { + check: 'cv.ui.manager.model.FileItem', + nullable: true, + apply: '_applyCurrentSelection', + event: 'changeCurrentSelection' + }, + + deleteableSelection: { + check: 'Boolean', + init: false, + event: 'changeDeleteableSelection' + }, + + renameableSelection: { + check: 'Boolean', + init: false, + event: 'changeRenameableSelection' + } + }, + + /* + *********************************************** + MEMBERS + *********************************************** + */ + members: { + __previewFileIndex: null, + __root: null, + _pane: null, + _tree: null, + _stack: null, + _oldCommandGroup: null, + _mainContent: null, + _openFilesController: null, + _hiddenConfigFakeFile: null, + __actionDispatcher: null, + + _checkEnvironment: function () { + cv.io.rest.Client.getFsClient().checkEnvironmentSync(function (err, res) { + if (err) { + cv.ui.manager.snackbar.Controller.error(err); + } else if (res) { + res.forEach(function (env) { + switch (env.entity) { + case '.': + // config folder must be writeable + if ((env.state & 1) === 0) { + cv.ui.manager.snackbar.Controller.error(qx.locale.Manager.tr('config folder does not exists')); + } else if ((env.state & 2) === 0) { + cv.ui.manager.snackbar.Controller.error(qx.locale.Manager.tr('config folder is not readable')); + } else if ((env.state & 4) === 0) { + cv.ui.manager.snackbar.Controller.error(qx.locale.Manager.tr('config folder is not writeable')); + } + break; + + case 'backup': + if ((env.state & 4) === 0) { + cv.ui.manager.snackbar.Controller.error(qx.locale.Manager.tr('backup folder is not writeable')); + } + break; + + case 'media': + if ((env.state & 4) === 0) { + cv.ui.manager.snackbar.Controller.error(qx.locale.Manager.tr('media folder is not writeable')); + } + break; + + case 'hidden.php': + if ((env.state & 4) === 0) { + cv.ui.manager.snackbar.Controller.error(qx.locale.Manager.tr('Hidden configuration file (hidden.php) not writeable')); + } + break; + } + }, this); + } + }, this); + }, + + canHandleAction: function (actionName) { + return ['close', 'quit', 'hidden-config', 'new-file', 'new-config-file', 'new-folder', 'delete', 'upload', 'clone'].includes(actionName); + }, + + handleAction: function (actionName, data) { + switch (actionName) { + case 'hidden-config': + this._onOpenHiddenConfig(); + break; + + case 'close': + this.closeCurrentFile(); + break; + + case 'quit': + this.dispose(); + break; + + case 'new-file': + this._onCreate('file', null, data); + break; + + case 'new-config-file': + cv.io.rest.Client.getFsClient().readSync({path: '.templates/visu_config.xml'}, function (err, res) { + if (err) { + cv.ui.manager.snackbar.Controller.error(qx.locale.Manager.tr('Cannot load config template')); + } else { + this._onCreate('config', res, data); + } + }, this); + break; + + case 'clone': + cv.io.rest.Client.getFsClient().readSync({path: data.file.getFullPath()}, function (err, res) { + if (err) { + cv.ui.manager.snackbar.Controller.error(qx.locale.Manager.tr('Cannot load file content')); + } else { + if (data.file.isConfigFile()) { + // config files need to be cloned in the root folder + this._onCreate('config', res, cv.ui.manager.model.FileItem.ROOT); + } else { + this._onCreate('file', res); + } + } + }, this); + break; + + case 'new-folder': + this._onCreate('dir', null, data); + break; + + case 'delete': + this._onDelete(data); + break; + + case 'upload': + // nothing to to, this is handled in another way + break; + + default: + this.warn(actionName + ' handling is not implemented yet!'); + break; + } + }, + + _handleFileEvent: function (ev) { + var data = ev.getData(); + if (data.action === 'deleted') { + // check if file is currently opened and close it + var openFiles = this.getOpenFiles().copy(); + openFiles.some(function (openFile) { + if (openFile.getFile().isRelated(data.path)) { + this.closeFile(openFile); + } + }, this); + if (this.getCurrentFolder() && this.getCurrentFolder().getFullPath() === data.path) { + this.resetCurrentFolder(); + } + } else { + this.warn('unhandled file event', data.action); + } + }, + + _onManagerEvent: function (ev) { + var data = ev.getData(); + switch (ev.getName()) { + case 'cv.manager.compareFiles': + this.openFile(data, false); + break; + + case 'cv.manager.openWith': + this.openFile(data.file || this.getCurrentSelection(), false, data.handler); + break; + + case 'cv.manager.open': + this.openFile(data || this.getCurrentSelection(), false); + break; + } + }, + + /** + * open selected file in preview mode + * @private + */ + _onChangeTreeSelection: function (ev) { + var data = ev.getData(); + if ((cv.ui.manager.model.Preferences.getInstance().isQuickPreview() && data.mode === 'tap') || data.mode === 'dbltap') { + this.__openSelectedFile(data.node, data.mode); + } + var node = data.node; + if (node) { + if (data.node.getType() === 'file') { + this.setCurrentFolder(data.node.getParent()); + } else { + this.setCurrentFolder(node); + } + this.setCurrentSelection(node); + } else { + this.resetCurrentFolder(); + this.resetCurrentSelection(); + } + }, + + __openSelectedFile: function (node, mode) { + if (node) { + if (node.getType() === 'file') { + this.openFile(node, mode === 'tap'); + } else if (mode === 'dbltap') { + // edit folder name on dbltap + node.setEditing(true); + } + } + }, + + _applyCurrentFolder: function (value, old) { + if (old) { + old.removeRelatedBindings(this); + } + if (value) { + value.bind('writeable', this, 'writeableFolder'); + } else { + this.resetWriteableFolder(); + } + }, + + _applyCurrentSelection: function (value, old) { + if (old) { + old.removeRelatedBindings(this); + } + if (value) { + value.bind('writeable', this, 'deleteableSelection'); + value.bind('inTrash', this, 'renameableSelection', { + converter: function (value) { + return !value; + } + }); + } else { + this.resetDeleteableSelection(); + } + }, + + _onChangeFileSelection: function () { + var sel = this._openFilesController.getSelection(); + if (sel.length > 0) { + var openFile = sel.getItem(0); + var file = openFile.getFile(); + var editorConfig; + var handlerId = openFile.getHandlerId(); + if (handlerId) { + editorConfig = cv.ui.manager.control.FileHandlerRegistry.getInstance().getFileHandlerById(handlerId); + } else { + editorConfig = cv.ui.manager.control.FileHandlerRegistry.getInstance().getFileHandler(file); + } + if (!editorConfig.instance) { + editorConfig.instance = new editorConfig.Clazz(); + editorConfig.instance.setFile(file); + this._stack.add(editorConfig.instance); + } else { + editorConfig.instance.setFile(file); + } + this._stack.setSelection([editorConfig.instance]); + this.__actionDispatcher.setFocusedWidget(editorConfig.instance); + } + }, + + /** + * + * @param file {cv.ui.manager.model.FileItem} the file to open + * @param preview {Boolean} open the file in preview mode + * @param handlerId {String} use this handler to open the file (classname as string) + * @param handlerType {String} use a special handler type, e.g. 'edit' if you want to open the file with an editor and not a viewer + */ + openFile: function (file, preview, handlerId, handlerType) { + var openFiles = this.getOpenFiles(); + var openFile; + if (!handlerId) { + var handlerConf = cv.ui.manager.control.FileHandlerRegistry.getInstance().getFileHandler(file, handlerType); + + if (!handlerConf) { + // no handler + cv.ui.manager.snackbar.Controller.info(qx.locale.Manager.tr('Cannot open file: "%1"', file.getName())); + return; + } else { + handlerId = handlerConf.Clazz.classname; + } + } + var isOpen = openFiles.some(function (of) { + if (of.getFile() === file && handlerId === of.getHandlerId()) { + openFile = of; + return true; + } + }); + if (!openFile) { + openFile = new cv.ui.manager.model.OpenFile(file, handlerId); + } + if (preview === true) { + if (!openFile.isPermanent()) { + if (this.__previewFileIndex !== null && !openFiles.getItem(this.__previewFileIndex).isPermanent()) { + openFiles.setItem(this.__previewFileIndex, openFile); + } else { + this.__previewFileIndex = openFiles.length; + openFiles.push(openFile); + } + // do not 'downgrade' the permanent state + openFile.setPermanent(false); + } + } else { + if (!isOpen && (this.__previewFileIndex === null || openFiles.indexOf(openFile) !== this.__previewFileIndex)) { + openFiles.push(openFile); + } + openFile.setPermanent(true); + this.__previewFileIndex = null; + } + this._openFilesController.getTarget().setModelSelection([openFile]); + }, + + closeFile: function (openFile, force) { + var file = openFile.getFile(); + if (!openFile.isCloseable()) { + return; + } + + // check if this file is modified + if (file.isModified() && !force) { + // check if temporary + var message = qx.locale.Manager.tr('This file has unsaved changes that will be lost when you close it. Do you really want to close the file?'); + if (file.isTemporary()) { + message = qx.locale.Manager.tr('This file has not been saved on the backend yet. It will be lost when you close it. Do you really want to close the file?'); + } + dialog.Dialog.confirm(message, function (confirmed) { + if (confirmed) { + this.closeFile(openFile, true); + if (file.isTemporary()) { + qx.event.message.Bus.dispatchByName('cv.manager.file', { + action: 'deleted', + path: file.getFullPath() + }); + } + } + }, this, qx.locale.Manager.tr('Unsaved changes')); + return; + } + openFile.resetPermanent(); + var currentSelection = this._openFilesController.getSelection(); + var selectionIndex = -1; + var openFiles = this.getOpenFiles(); + if (currentSelection.length > 0 && currentSelection.getItem(0) === openFile) { + // we need to select another file after this one got closed + selectionIndex = openFiles.indexOf(openFile); + } + openFiles.remove(openFile); + var currentHandler = this._stack.getSelection()[0]; + if (qx.Class.hasInterface(currentHandler.constructor, cv.ui.manager.editor.IEditor)) { + // reset the handlers file + currentHandler.resetFile(); + } + if (this.getOpenFiles().length === 0) { + this._stack.resetSelection(); + this.__actionDispatcher.resetFocusedWidget(); + this.__previewFileIndex = null; + } + if (selectionIndex > 0) { + this._openFilesController.getSelection().replace(openFiles.getItem(selectionIndex - 1)); + } else if (selectionIndex === 0 && openFiles.length > 0) { + this._openFilesController.getSelection().replace(openFiles.getItem(0)); + } + + if (file instanceof cv.ui.manager.model.CompareFiles) { + var fileHandlerConf = cv.ui.manager.control.FileHandlerRegistry.getInstance().getFileHandler(file); + fileHandlerConf.instance.clear(); + if (openFiles.filter(function (openFile) { + return openFile.getFile() instanceof cv.ui.manager.model.CompareFiles; + }).length === 0) { + fileHandlerConf.instance.destroy(); + fileHandlerConf.instance = null; + } + } else if (window.monaco && openFile.getHandlerId() === 'cv.ui.manager.editor.Source') { + // close textmodel in monaco editor if exists + var oldModel = window.monaco.editor.getModel(file.getUri()); + if (oldModel) { + oldModel.dispose(); + } + // dispose the + } + }, + + closeCurrentFile: function () { + var selected = this._openFilesController.getSelection().length > 0 ? this._openFilesController.getSelection().getItem(0) : null; + if (selected) { + this.closeFile(selected); + } + }, + + _onCloseFile: function (ev) { + this.closeFile(ev.getData()); + }, + + __getRoot: function () { + if (!this.__root) { + this.__root = qx.dom.Element.create('div', { + id: 'manager', + style: 'position: absolute; top: 0; left: 0; right: 0; bottom: 0;' + }); + qx.dom.Element.insertEnd(this.__root, document.body); + qx.theme.manager.Meta.getInstance().setTheme(cv.theme.Dark); + } + return this.__root; + }, + + __initCommands: function () { + var group = new qx.ui.command.Group(); + group.add('save', new qx.ui.command.Command('Ctrl+S')); + group.add('save-as', new qx.ui.command.Command('Ctrl+Shift+S')); + // this command will close the browser window, thats not what we want + // group.add('close', new qx.ui.command.Command('Ctrl+W')); + group.add('new-file', new qx.ui.command.Command('Ctrl+N')); + group.add('new-folder', new qx.ui.command.Command('Ctrl+Shift+N')); + group.add('quit', new qx.ui.command.Command('Ctrl+Q')); + // group.add('delete', new qx.ui.command.Command('Del')); + + var renameCommand = new qx.ui.command.Command('F2'); + group.add('rename', renameCommand); + this.bind('renameableSelection', renameCommand, 'enabled'); + + // edit commands (adding cut/copy/paste command will deactivate the native browser functions) + // and as we cannot simulate pasting from clipboard, we do not use them here + // group.add('cut', new qx.ui.command.Command('Ctrl+X')); + // group.add('copy', new qx.ui.command.Command('Ctrl+C')); + // group.add('paste', new qx.ui.command.Command('Ctrl+V')); + + var manager = qx.core.Init.getApplication().getCommandManager(); + this._oldCommandGroup = manager.getActive(); + manager.add(group); + manager.setActive(group); + }, + + _onOpenHiddenConfig: function () { + var fakeFile = new cv.ui.manager.model.FileItem.getHiddenConfigFile(); + if (this.getOpenFiles().includes(fakeFile)) { + this.closeFile(fakeFile); + } else { + this.openFile(fakeFile, false); + } + }, + + _onDelete: function (file) { + var item = file || this.getCurrentSelection(); + if (item) { + cv.ui.manager.control.FileController.getInstance().delete(item); + } + }, + + _onChangeStackSelection: function (ev) { + var selection = ev.getData(); + var openFiles = []; + // sync tab selection with currently visible page + selection.forEach(function(page) { + var openFile = this.getOpenFiles().toArray().find(function (openFile) { + return openFile.getFile() === page.getFile() && openFile.getHandlerId() === page.classname; + }); + if (openFile) { + openFiles.push(openFile); + } + }, this); + + this._openFilesController.getSelection().replace(openFiles); + }, + + _onCreate: function (type, content, folder) { + var currentFolder = folder || this.getCurrentFolder(); + if (!currentFolder) { + return; + } + var message, existsMessage; + if (type === 'config') { + message = qx.locale.Manager.tr('Please enter the name of the new configuration (without "visu_config_" at the beginning and ".xml" at the end)'); + existsMessage = qx.locale.Manager.tr('A configuration with this name already exists.'); + } else if (type === 'file') { + message = qx.locale.Manager.tr('Please enter the file name.'); + existsMessage = qx.locale.Manager.tr('A file with this name already exists.'); + } else { + message = qx.locale.Manager.tr('Please enter the folder name.'); + existsMessage = qx.locale.Manager.tr('A folder with this name already exists.'); + } + var handlePrompt = function (name) { + if (!name) { + // canceled + return; + } + var filename = name; + // add visu_config_..-xml + if (type === 'config') { + var match = /visu[_-]config[_-]([\w\d_-]+)(\.xml)?/.exec(name); + if (match) { + name = match[1]; + } + filename = 'visu_config_' + name + '.xml'; + } + // check if name does not exist + var exists = currentFolder.getChildren().some(function (child) { + if (child.getName() === filename) { + return true; + } + }, this); + + if (exists) { + cv.ui.manager.snackbar.Controller.error(existsMessage); + dialog.Dialog.prompt(message, handlePrompt, this, name); + } else { + var item = new cv.ui.manager.model.FileItem(filename, currentFolder.getPath(), currentFolder); + item.set({ + type: type === 'config' ? 'file' : type, + readable: true, + writeable: true, + loaded: true, + modified: true, + temporary: true, + parentFolder: currentFolder.getFullPath(), + content: content || '' + }); + if (type === 'dir') { + // create directory directly + cv.io.rest.Client.getFsClient().createSync({ + path: item.getFullPath(), + type: type + }, null, function (err) { + if (err) { + cv.ui.manager.snackbar.Controller.error(err); + } else { + cv.ui.manager.snackbar.Controller.info(qx.locale.Manager.tr('Folder has been created')); + item.set({ + modified: false, + temporary: false + }); + qx.event.message.Bus.dispatchByName(item.getBusTopic(), { + type: 'created', + file: item, + data: '', + source: this + }); + } + }, this); + } + currentFolder.addChild(item); + currentFolder.sortElements(); + this._tree.refresh(); + this._tree.setSelection(item); + // do not open new folders + if (type !== 'dir') { + // open the file in an editor + this.openFile(item, false, null, 'edit'); + } + } + }; + + dialog.Dialog.prompt(message, handlePrompt, this); + }, + + /** + * Finds next droppable parent of the given element. Maybe the element itself as well. + * + * Looks for the attribute qxDroppable with the value on. + * + * @param elem {Element} The element to query + * @return {Element} The next parent element which is droppable. May also be null + */ + __findDroppable : function (elem) { + while (elem && elem.nodeType === 1) { + if (elem.getAttribute("qxDroppable") === "on") { + return elem; + } + + elem = elem.parentNode; + } + + return null; + }, + + // overridden + _draw: function () { + var domRoot = this.__getRoot(); + var root = new qx.ui.root.Inline(domRoot, true, true); + root.addListenerOnce('appear', function () { + // disable file drop + var element = root.getContentElement().getDomElement(); + element.addEventListener('drop', function (ev) { + var target = this.__findDroppable(ev.target); + if (!target) { + ev.preventDefault(); + } + }.bind(this)); + element.addEventListener('dragover', function (ev) { + var target = this.__findDroppable(ev.target); + if (!target) { + ev.preventDefault(); + } + }.bind(this)); + }, this); + qx.core.Init.getApplication().setRoot(root); + root.setLayout(new qx.ui.layout.Canvas()); + + var snackbar = cv.ui.manager.snackbar.Controller.getInstance(); + root.add(snackbar, { + bottom: 10, + left: 200 + }); + + function resize() { + var bounds = root.getBounds(); + snackbar.setLayoutProperties({ + bottom: 10, + left: Math.round(bounds.width / 2) - 150 + }); + snackbar.setMaxHeight(bounds.height - 40); + } + root.addListener('resize', resize, this); + root.addListener('appear', resize, this); + window.addEventListener('resize', function () { + // sync window height with manager height + domRoot.style.height = window.innerHeight + 'px'; + }); + + var main = new qx.ui.container.Composite(new qx.ui.layout.Dock()); + root.add(main, {edge: 0}); + // menu on top + var menuBar = cv.ui.manager.MenuBar.getInstance(); + main.add(menuBar, {edge: 'north'}); + + var uploadButton = menuBar.getButton('upload'); + var uploadManager = new cv.ui.manager.upload.UploadMgr(uploadButton); + this.bind('currentFolder', uploadManager, 'folder'); + + this._pane = new qx.ui.splitpane.Pane(); + main.add(this._pane, {edge: 'center'}); + + var rootFolder = cv.ui.manager.model.FileItem.ROOT = new cv.ui.manager.model.FileItem('.'); + var fakeIconFile = cv.ui.manager.model.FileItem.getIconFile(); + // TODO: needs to be verified by the backend + rootFolder.set({ + overrideIcon: true, + writeable: true, + readable: true, + open: true, + fakeChildren: [fakeIconFile], + icon: cv.theme.dark.Images.getIcon('home', 18) + }); + this.setCurrentFolder(rootFolder); + this._tree = new cv.ui.manager.tree.FileSystem(rootFolder); + this._tree.addListener("changeSelection", this._onChangeTreeSelection, this); + + // left container + var leftContainer = new qx.ui.container.Composite(new qx.ui.layout.VBox()); + + // left toolbar + var leftBar = new cv.ui.manager.ToolBar(uploadManager); + this.bind('currentFolder', leftBar, 'folder'); + this.bind('currentSelection', leftBar, 'file'); + leftBar.addListener('reload', this._tree.reload, this._tree); + + // globally bind writeable folder to command for new files + var buttonConfig = menuBar.getButtonConfiguration(); + this.bind('writeableFolder', buttonConfig['new-file'].args[2], 'enabled'); + this.bind('writeableFolder', buttonConfig['new-folder'].args[2], 'enabled'); + + leftContainer.add(leftBar); + leftContainer.add(this._tree, {flex: 1}); + this._pane.add(leftContainer, 0); + cv.ui.manager.model.Preferences.getInstance().bind('expertMode', leftContainer, 'visibility', { + converter: function (value) { + return value ? 'visible' : 'excluded'; + } + }); + + this._mainContent = new qx.ui.container.Composite(new qx.ui.layout.VBox()); + + // tab list + var list = new qx.ui.form.List(true); + list.setAppearance('open-files-tabs'); + this._openFilesController = new qx.data.controller.List(this.getOpenFiles(), list, "file.name"); + this._openFilesController.setDelegate({ + createItem: function () { + var item = new cv.ui.manager.form.FileTabItem(); + item.addListener('close', this._onCloseFile, this); + return item; + }.bind(this), + + bindItem: function (controller, item, index) { + controller.bindDefaultProperties(item, index); + controller.bindProperty('file.permanent', 'permanent', null, item, index); + controller.bindProperty('file.modified', 'modified', null, item, index); + controller.bindProperty('icon', 'icon', null, item, index); + controller.bindProperty('closeable', 'closeable', null, item, index); + } + }); + list.addListener('changeSelection', this._onChangeFileSelection, this); + this._mainContent.add(list); + + this._stack = new qx.ui.container.Stack(); + this._stack.addListener('changeSelection', this._onChangeStackSelection, this); + this._mainContent.add(this._stack, {flex: 1}); + this._pane.add(this._mainContent, 1); + + var startOpenFile = new cv.ui.manager.model.OpenFile(rootFolder, 'cv.ui.manager.Start'); + startOpenFile.setCloseable(false); + this.getOpenFiles().push(startOpenFile); + list.setModelSelection([startOpenFile]); + } + }, + + /* + *********************************************** + DESTRUCTOR + *********************************************** + */ + destruct: function () { + this._disposeObjects( + '_pane', '_tree', '_stack', '_mainContent', '_openFilesController' + ); + // restore former command group + var application = qx.core.Init.getApplication(); + var manager = application.getCommandManager(); + manager.setActive(this._oldCommandGroup); + this._oldCommandGroup = null; + + // defer the reset to let the dispose queue to be emptied before removing the root + new qx.util.DeferredCall(function () { + application.resetRoot(); + }).schedule(); + + document.body.removeChild(this.__root); + this.__root = null; + this.__actionDispatcher = null; + + qx.event.message.Bus.unsubscribe('cv.manager.*', this._onManagerEvent, this); + + // destroy the singleton instance + delete cv.ui.manager.Main.$$instance; + }, + + defer: function(statics) { + // initialize on load + statics.getInstance(); + + // load backupFolder + cv.ui.manager.model.BackupFolder.getInstance(); + } +}); diff --git a/source/class/cv/ui/manager/MenuBar.js b/source/class/cv/ui/manager/MenuBar.js new file mode 100644 index 00000000000..e393d3185eb --- /dev/null +++ b/source/class/cv/ui/manager/MenuBar.js @@ -0,0 +1,315 @@ +/** + * Main toolbar on top. + */ +qx.Class.define('cv.ui.manager.MenuBar', { + extend: qx.ui.menubar.MenuBar, + type: 'singleton', + + /* + *********************************************** + CONSTRUCTOR + *********************************************** + */ + construct: function () { + this.base(arguments); + this._commandGroup = qx.core.Init.getApplication().getCommandManager().getActive(); + this.__buttons = {}; + + this._draw(); + }, + + /* + *********************************************** + MEMBERS + *********************************************** + */ + members: { + _commandGroup: null, + __buttons: null, + __defaultButtonConfiguration: null, + __buttonConfiguration: null, + + _draw: function () { + this._createChildControl('file'); + this._createChildControl('edit'); + this._createChildControl('preferences'); + this.add(new qx.ui.core.Spacer(), {flex: 1}); + + this._createChildControl('title'); + this.add(new qx.ui.core.Spacer(), {flex: 1}); + + var editorGroup = new qx.ui.form.RadioGroup(); + + this.__defaultButtonConfiguration = { + 'new-file': { + menu: 'new-menu', + args: [this.tr('New file'), cv.theme.dark.Images.getIcon('new-file', 18), this._commandGroup.get('new-file')], + enabled: true + }, + 'new-folder': { + menu: 'new-menu', + args: [this.tr('New folder'), cv.theme.dark.Images.getIcon('new-folder', 18), this._commandGroup.get('new-folder')], + enabled: true, + separator: 'after' + }, + 'new-config-file': { + menu: 'new-menu', + args: [this.tr('New config file')], + enabled: true + }, + 'upload': { + menu: 'file-menu', + clazz: com.zenesis.qx.upload.UploadMenuButton, + args: [this.tr('Upload file'), cv.theme.dark.Images.getIcon('upload', 18)], + enabled: true, + separator: 'before' + }, + 'save': { + menu: 'file-menu', + args: [this.tr('Save'), cv.theme.dark.Images.getIcon('save', 18), this._commandGroup.get('save')], + enabled: false, + separator: 'before' + }, + 'save-as': { + menu: 'file-menu', + args: [this.tr('Save as...'), null, this._commandGroup.get('save-as')], + enabled: false + }, + 'delete': { + menu: 'file-menu', + args: [this.tr('Delete'), cv.theme.dark.Images.getIcon('delete', 18), this._commandGroup.get('delete')], + enabled: false, + separator: 'before' + }, + 'close': { + menu: 'file-menu', + args: [this.tr('Close file'), cv.theme.dark.Images.getIcon('close', 18), this._commandGroup.get('close')], + enabled: false, + separator: 'before' + }, + 'quit': { + menu: 'file-menu', + args: [this.tr('Quit'), cv.theme.dark.Images.getIcon('quit', 18), this._commandGroup.get('quit')], + enabled: true, + separator: 'before' + }, + // edit menu basics + 'undo': { + menu: 'edit-menu', + args: [this.tr('Undo'), cv.theme.dark.Images.getIcon('undo', 18), this.tr('Ctrl+Z')], + enabled: true + }, + 'redo': { + menu: 'edit-menu', + args: [this.tr('Redo'), cv.theme.dark.Images.getIcon('redo', 18), this.tr('Ctrl+Y')], + enabled: true + }, + 'cut': { + menu: 'edit-menu', + args: [this.tr('Cut'), null, this.tr('Ctrl+X')], + enabled: false, + separator: 'before' + }, + 'copy': { + menu: 'edit-menu', + args: [this.tr('Copy'), null, this.tr('Ctrl+C')], + enabled: false + }, + 'paste': { + menu: 'edit-menu', + args: [this.tr('Paste'), null, this.tr('Ctrl+V')], + enabled: false + }, + 'hidden-config': { + menu: 'edit-menu', + args: [this.tr('Hidden configuration'), cv.theme.dark.Images.getIcon('hidden-config', 18)], + enabled: true + }, + // preferences + 'source-editor': { + menu: 'preferences-menu', + clazz: qx.ui.menu.RadioButton, + args: [this.tr('Use text editor')], + general: true, + enabled: true, + properties: { + model: 'source', + group: editorGroup + } + }, + 'xml-editor': { + menu: 'preferences-menu', + clazz: qx.ui.menu.RadioButton, + args: [this.tr('Use xml editor')], + general: true, + enabled: true, + properties: { + model: 'xml', + group: editorGroup + } + }, + 'quick-preview': { + menu: 'preferences-menu', + clazz: qx.ui.menu.CheckBox, + args: [this.tr('Enable quick preview')], + general: true, + enabled: true, + separator: 'before' + }, + 'expert-mode': { + menu: 'preferences-menu', + clazz: qx.ui.menu.CheckBox, + args: [this.tr('Expert mode')], + general: true, + enabled: true + } + }; + this.maintainButtons(); + + var prefs = cv.ui.manager.model.Preferences.getInstance(); + + prefs.bind('defaultConfigEditor', editorGroup, 'modelSelection', { + converter: function (value) { + return [value]; + } + }); + editorGroup.getModelSelection().addListener('change', function () { + prefs.setDefaultConfigEditor(editorGroup.getModelSelection().getItem(0)); + }, this); + + this.__bindToPreference('quick-preview', 'quickPreview'); + this.__bindToPreference('expert-mode', 'expertMode'); + }, + + __bindToPreference: function (buttonName, preferenceName) { + var button = this.getButton(buttonName); + var prefs = cv.ui.manager.model.Preferences.getInstance() + prefs.bind(preferenceName, button, 'value'); + button.bind('value', prefs, preferenceName); + }, + + maintainButtons: function (config) { + if (!config) { + config = this.__defaultButtonConfiguration; + } else { + config = Object.merge(this.__defaultButtonConfiguration, config); + this.__buttonConfiguration = config; + } + Object.keys(config).forEach(function (id) { + var button; + var buttonConf = config[id]; + if (!this.__buttons.hasOwnProperty(id)) { + // create button + var label = buttonConf.args[0]; + var icon = buttonConf.args[1]; + var command = buttonConf.args[2]; + var ButtonClass = buttonConf.clazz || qx.ui.menu.Button; + if (qx.lang.Type.isString(command) || !command) { + // no command connected + button = new ButtonClass(label, icon); + if (command) { + // just add the string as shortcut hint + button.getChildControl('shortcut').setValue(command); + } + } else { + button = new ButtonClass(label, icon, command); + } + button.addListener('execute', function () { + qx.event.message.Bus.dispatchByName('cv.manager.action.' + id); + }, this); + var menu = this.getChildControl(buttonConf.menu); + if (!menu) { + throw new Error('no menu named ' + buttonConf.menu + ' found!'); + } + if (buttonConf.separator === 'before') { + menu.add(new qx.ui.menu.Separator()); + } + menu.add(button); + if (buttonConf.separator === 'after') { + menu.add(new qx.ui.menu.Separator()); + } + this.__buttons[id] = button; + + if (buttonConf.hasOwnProperty('onAfterCreate')) { + buttonConf.onAfterCreate(button); + } + } else { + button = this.__buttons[id]; + } + button.setEnabled(buttonConf.enabled); + if (buttonConf.properties) { + button.set(buttonConf.properties); + } + + }, this); + }, + + getButton: function (id) { + return this.__buttons[id]; + }, + + getButtonConfiguration: function () { + return this.__buttonConfiguration || this.__defaultButtonConfiguration; + }, + + // overridden + _createChildControlImpl : function(id) { + var control; + + switch (id) { + case 'title': + control = new qx.ui.basic.Label(this.tr('CometVisu Manager')); + this.add(control); + break; + + case "file": + control = new qx.ui.menubar.Button(this.tr('File'), null, this.getChildControl('file-menu')); + this.add(control); + break; + + case "edit": + control = new qx.ui.menubar.Button(this.tr('Edit'), null, this.getChildControl('edit-menu')); + this.add(control); + break; + + case "new": + control = new qx.ui.menu.Button(this.tr('New'), null, null, this.getChildControl('new-menu')); + break; + + case "preferences": + control = new qx.ui.menubar.Button(this.tr('Preferences'), null, this.getChildControl('preferences-menu')); + this.add(control); + break; + + case 'new-menu': + control = new qx.ui.menu.Menu(); + break; + + case 'file-menu': + control = new qx.ui.menu.Menu(); + control.add(this.getChildControl('new')); + break; + + case 'edit-menu': + control = new qx.ui.menu.Menu(); + break; + + case 'preferences-menu': + control = new qx.ui.menu.Menu(); + break; + + } + + return control || this.base(arguments, id); + } + }, + + /* + *********************************************** + DESTRUCTOR + *********************************************** + */ + destruct: function () { + this._commandGroup = null; + } +}); diff --git a/source/class/cv/ui/manager/Start.js b/source/class/cv/ui/manager/Start.js new file mode 100644 index 00000000000..cde861d6a17 --- /dev/null +++ b/source/class/cv/ui/manager/Start.js @@ -0,0 +1,317 @@ +/** + * Simple view that provides all of the file-related features of the old editor in an easy to use way. + */ +qx.Class.define('cv.ui.manager.Start', { + extend: qx.ui.core.Widget, + implement: [ + cv.ui.manager.editor.IEditor, + cv.ui.manager.IActionHandler + ], + + /* + *********************************************** + CONSTRUCTOR + *********************************************** + */ + construct: function () { + this.base(arguments); + this._setLayout(new qx.ui.layout.VBox()); + this._configRegex = /^visu_config_?([^.]+)?\.xml$/; + [ 'toolbar', 'configs-title', 'configs-toolbar', 'configs', + 'demo-configs-title', 'demo-configs', + 'media-title', 'media-toolbar', 'media', + 'misc-title', 'misc' + ].forEach(this._createChildControl, this); + }, + + /* + *********************************************** + PROPERTIES + *********************************************** + */ + properties: { + file: { + check: 'cv.ui.manager.model.FileItem', + apply: '_loadRoot' + }, + appearance: { + refine: true, + init: 'cv-start' + }, + + selectedItem: { + check: 'cv.ui.manager.model.FileItem', + nullable: true, + apply: '_applySelectedItem' + } + }, + + /* + *********************************************** + MEMBERS + *********************************************** + */ + members: { + _configRegex: null, + _ignoreSelectionChanges: false, + _previewButton: null, + _listButton: null, + _radioGroup: null, + + save: function () {}, + getCurrentContent: function () {}, + canHandleAction: function () { + return false; + }, + handleAction: function () {}, + + _loadRoot: function (value) { + this.getChildControl('configs').setFile(value); + var found = 0; + + value.load(function () { + value.getChildren().some(function (file) { + if (file.getName() === 'media') { + this.getChildControl('media').setFile(file); + this.getChildControl('media-toolbar').setFolder(file); + found++; + } else if (file.getName() === 'demo') { + this.getChildControl('demo-configs').setFile(file); + found++; + } + return found === 2; + }, this); + }, this); + }, + + _onChangeSelection: function (ev) { + if (this._ignoreSelectionChanges === false) { + var list = ev.getTarget(); + var selection = ev.getData(); + this._ignoreSelectionChanges = true; + + // unselect the other lists + ['configs', 'demo-configs', 'media'].forEach(function (name) { + var control = this.getChildControl(name); + if (control !== list) { + control.resetSelection(); + } + }, this); + this._ignoreSelectionChanges = false; + if (selection.length > 0) { + this.setSelectedItem(selection[0].getModel()); + } + } + }, + + _applySelectedItem: function () { + }, + + _onToggleExpand: function (ev) { + var control = this.getChildControl(ev.getTarget().getUserData('control')); + if (control.getVisibility() === 'visible') { + control.exclude(); + ev.getTarget().setIcon(cv.theme.dark.Images.getIcon('drop-down', 18)); + } else { + control.show(); + ev.getTarget().setIcon(cv.theme.dark.Images.getIcon('drop-up', 18)); + } + }, + + _onChangeViewMode: function () { + switch (cv.ui.manager.model.Preferences.getInstance().getStartViewMode()) { + case 'list': + this._radioGroup.setSelection([this._listButton]); + break; + + case 'preview': + this._radioGroup.setSelection([this._previewButton]); + break; + } + + }, + + // overridden + _createChildControlImpl : function(id) { + var control; + + switch (id) { + case 'scroll-container': + control = new qx.ui.container.Scroll(); + this._add(control, {flex: 1}); + break; + + case 'content': + control = new qx.ui.container.Composite(new qx.ui.layout.VBox(8)); + this.getChildControl('scroll-container').add(control); + break; + + case 'toolbar': + control = new qx.ui.toolbar.ToolBar(); + var part = new qx.ui.toolbar.Part(); + var listButton = this._listButton = new qx.ui.toolbar.RadioButton('', cv.theme.dark.Images.getIcon('listViewMode', 22)); + listButton.setUserData('mode', 'list'); + listButton.set({ + show: 'icon', + toolTipText: this.tr('List mode') + }); + var previewButton = this._previewButton = new qx.ui.toolbar.RadioButton('', cv.theme.dark.Images.getIcon('previewMode', 22)); + previewButton.setUserData('mode', 'preview'); + previewButton.set({ + show: 'icon', + toolTipText: this.tr('Preview mode') + }); + part.add(listButton); + part.add(previewButton); + control.add(part); + this._radioGroup = new qx.ui.form.RadioGroup(listButton, previewButton); + this._onChangeViewMode(); + this._radioGroup.addListener('changeSelection', function (ev) { + var selection = ev.getData()[0]; + cv.ui.manager.model.Preferences.getInstance().setStartViewMode(selection.getUserData('mode')); + }, this); + cv.ui.manager.model.Preferences.getInstance().addListener('changeStartViewMode', this._onChangeViewMode, this); + + this._add(control); + break; + + case 'configs-title': + control = new qx.ui.basic.Atom(this.tr('Configurations'), cv.theme.dark.Images.getIcon('drop-up', 18)); + control.setUserData('control', 'configs'); + control.addListener('tap', this._onToggleExpand, this); + this.getChildControl('configs-header').add(control); + break; + + case 'configs-header': + control = new qx.ui.container.Composite(new qx.ui.layout.HBox()); + this.getChildControl('content').add(control); + break; + + case 'configs-toolbar': + control = new cv.ui.manager.ToolBar(null, ['new-config-file', 'upload', 'reload']); + control.setFolder(cv.ui.manager.model.FileItem.ROOT); + control.addListener('reload', function () { + cv.ui.manager.model.FileItem.ROOT.reload(); + }, this); + this.getChildControl('configs-header').add(control); + break; + + case 'configs': + control = new cv.ui.manager.viewer.Folder(); + control.set({ + showTextFilter: false, + permanentFilter: function (file) { + var match = this._configRegex.exec(file.getName()); + return !!match && (!match[1] || !match[1].endsWith('temp')); + }.bind(this), + labelConverter: function (name, file) { + if (file.isFake()) { + return name; + } + var configName = cv.ui.manager.model.FileItem.getConfigName(name); + return configName ? qx.lang.String.firstUp(configName) : ''; + }, + file: cv.ui.manager.model.FileItem.ROOT, + disableScrolling: true + }); + control.addListener('changeSelection', this._onChangeSelection, this); + this.getChildControl('content').add(control); + break; + + case 'demo-configs-title': + control = new qx.ui.basic.Atom(this.tr('Demo configurations'), cv.theme.dark.Images.getIcon('drop-down', 18)); + control.setUserData('control', 'demo-configs'); + control.addListener('tap', this._onToggleExpand, this); + this.getChildControl('content').add(control); + break; + + case 'demo-configs': + control = new cv.ui.manager.viewer.Folder(); + control.set({ + showTextFilter: false, + permanentFilter: function (file) { + return this._configRegex.test(file.getName()); + }.bind(this), + labelConverter: function (name) { + var configName = cv.ui.manager.model.FileItem.getConfigName(name); + return configName ? qx.lang.String.firstUp(configName) : ''; + }, + disableScrolling: true + }); + control.exclude(); + control.addListener('changeSelection', this._onChangeSelection, this); + this.getChildControl('content').add(control); + break; + + case 'media-title': + control = new qx.ui.basic.Atom(this.tr('Media files'), cv.theme.dark.Images.getIcon('drop-up', 18)); + control.setUserData('control', 'media'); + control.addListener('tap', this._onToggleExpand, this); + this.getChildControl('media-header').add(control); + break; + + case 'media-header': + control = new qx.ui.container.Composite(new qx.ui.layout.HBox()); + this.getChildControl('content').add(control); + break; + + case 'media-toolbar': + control = new cv.ui.manager.ToolBar(null, ['new-file', 'upload', 'reload']); + control.addListener('reload', function () { + control.getFolder().reload(); + }, this); + this.getChildControl('media-header').add(control); + break; + + case 'media': + control = new cv.ui.manager.viewer.Folder(); + control.set({ + showTextFilter: false, + disableScrolling: true + }); + control.addListener('changeSelection', this._onChangeSelection, this); + this.getChildControl('content').add(control); + break; + + case 'misc-title': + control = new qx.ui.basic.Atom(this.tr('Miscellaneous'), cv.theme.dark.Images.getIcon('drop-up', 18)); + control.setUserData('control', 'misc'); + control.addListener('tap', this._onToggleExpand, this); + this.getChildControl('content').add(control); + break; + + case 'misc': + control = new cv.ui.manager.viewer.Folder(); + control.set({ + showTextFilter: false, + disableScrolling: true + }); + var fakeFolder = new cv.ui.manager.model.FileItem('fake', 'fake', cv.ui.manager.model.FileItem.ROOT, [ + cv.ui.manager.model.FileItem.getHiddenConfigFile(), + cv.ui.manager.model.FileItem.getIconFile() + ]).set({ + fake: true, + type: 'dir', + loaded: true + }); + control.setFile(fakeFolder); + control.addListener('changeSelection', this._onChangeSelection, this); + this.getChildControl('content').add(control, {flex: 1}); + break; + } + + return control || this.base(arguments, id); + } + }, + + /* + *********************************************** + DESTRUCTOR + *********************************************** + */ + destruct: function () { + this._configRegex = null; + cv.ui.manager.model.Preferences.getInstance().removeListener('changeStartViewMode', this._onChangeViewMode, this); + this._disposeObjects('_previewButton', '_listButton', '_radioGroup'); + } +}); diff --git a/source/class/cv/ui/manager/ToolBar.js b/source/class/cv/ui/manager/ToolBar.js new file mode 100644 index 00000000000..6ed689e1391 --- /dev/null +++ b/source/class/cv/ui/manager/ToolBar.js @@ -0,0 +1,201 @@ +/** + * + */ +qx.Class.define('cv.ui.manager.ToolBar', { + extend: qx.ui.toolbar.ToolBar, + + /* + *********************************************** + CONSTRUCTOR + *********************************************** + */ + construct: function (uploadManager, showOnly) { + this.base(arguments); + + if (showOnly) { + this.__showOnly = showOnly; + } + + this._menuBar = cv.ui.manager.MenuBar.getInstance(); + this._menuButtonConfig = this._menuBar.getButtonConfiguration(); + this._uploadManager = uploadManager; + + this._init(); + }, + + /* + *********************************************** + EVENTS + *********************************************** + */ + events: { + 'reload': 'qx.event.type.Event' + }, + + /* + *********************************************** + PROPERTIES + *********************************************** + */ + properties: { + appearance: { + refine: true, + init: 'cv-toolbar' + }, + + folder: { + check: 'cv.ui.manager.model.FileItem', + nullable: true, + apply: '_applyFolder' + }, + + file: { + check: 'cv.ui.manager.model.FileItem', + nullable: true, + apply: '_applyFile', + event: 'changeFile' + } + }, + + /* + *********************************************** + MEMBERS + *********************************************** + */ + members: { + _menuButtonConfig: null, + _uploadManager: null, + _menuBar: null, + __showOnly: null, + + __show: function (name) { + return this.__showOnly === null || this.__showOnly.includes(name); + }, + + _init: function () { + if (!this._uploadManager) { + this._uploadManager = new cv.ui.manager.upload.UploadMgr(); + } + + var fileController = cv.ui.manager.control.FileController.getInstance(); + + var createPart = new qx.ui.toolbar.Part(); + createPart.set({ + marginLeft: 0 + }); + this.add(createPart); + var newButton; + + if (this.__show('new-menu')) { + newButton = new qx.ui.toolbar.MenuButton(null, + cv.theme.dark.Images.getIcon('new-file', 15), + this._menuBar.getChildControl('new-menu') + ); + createPart.add(newButton); + } else if (this.__show('new-config-file')) { + newButton = this._createButton('new-config-file', cv.theme.dark.Images.getIcon('new-file', 15)); + newButton.addListener('execute', function () { + qx.event.message.Bus.dispatchByName('cv.manager.action.new-config-file',this.getFolder()); + }, this); + createPart.add(newButton); + } else if (this.__show('new-file')) { + newButton = this._createButton('new-file', null, true); + newButton.addListener('execute', function () { + qx.event.message.Bus.dispatchByName('cv.manager.action.new-file',this.getFolder()); + }, this); + createPart.add(newButton); + } + + if (this.__show('upload')) { + var upload = this._createButton('upload'); + this._uploadManager.addWidget(upload); + createPart.add(upload); + } + + if (this.__show('delete')) { + var deleteSelection = this._createButton('delete'); + deleteSelection.addListener('execute', function () { + fileController.delete(this.getFile()); + }, this); + this.bind('file', deleteSelection, 'enabled', { + converter: function (file) { + return !!file && file.isWriteable() && !file.isFake(); + } + }); + this.add(deleteSelection); + } + + if (this.__show('download')) { + var download = new qx.ui.toolbar.Button(null, cv.theme.dark.Images.getIcon('download', 15)); + download.setAppearance('cv-toolbar-button'); + download.setToolTipText(qx.locale.Manager.tr('Download')); + download.addListener('execute', function () { + fileController.download(this.getFile()); + }, this); + // download button is only enabled when a file is selected + this.bind('file', download, 'enabled', { + converter: function (file) { + return !!file && file.getType() === 'file' && !file.isFake(); + } + }); + createPart.add(download); + } + + if (this.__show('validate')) { + // config check + var checkConfig = new qx.ui.toolbar.Button(null, cv.theme.dark.Images.getIcon('validate', 15)); + checkConfig.setAppearance('cv-toolbar-button'); + checkConfig.setToolTipText(qx.locale.Manager.tr('Validate')); + checkConfig.addListener('execute', function () { + fileController.validate(this.getFile()); + }, this); + + // validate button is only enabled when a file is selected + this.bind('file', checkConfig, 'enabled', { + converter: function (file) { + return !!file && file.isConfigFile(); + } + }); + this.add(checkConfig); + } + + if (this.__show('reload')) { + var reload = new qx.ui.toolbar.Button(null, cv.theme.dark.Images.getIcon('reload', 15)); + reload.setAppearance('cv-toolbar-button'); + reload.setToolTipText(qx.locale.Manager.tr('Reload')); + reload.addListener('execute', function () { + this.fireEvent('reload'); + }, this); + this.add(new qx.ui.core.Spacer(), {flex: 1}); + this.add(reload); + } + }, + + _createButton: function (name, icon, doNotUseCommand) { + var args = this._menuButtonConfig[name].args; + var button = new qx.ui.toolbar.Button(null, icon || args[1].replace(/\/[0-9]+$/, '/15'), !doNotUseCommand ? args[2] : null); + button.setAppearance('cv-toolbar-button'); + button.setToolTipText(args[0]); + return button; + }, + + _applyFile: function () { + + }, + + _applyFolder: function () { + + } + }, + + /* + *********************************************** + DESTRUCTOR + *********************************************** + */ + destruct: function () { + this._menuButtonConfig = null; + this._uploadManager = null; + this.__menuBar = null; + } +}); diff --git a/source/class/cv/ui/manager/contextmenu/FileItem.js b/source/class/cv/ui/manager/contextmenu/FileItem.js new file mode 100644 index 00000000000..b4dd5fa4210 --- /dev/null +++ b/source/class/cv/ui/manager/contextmenu/FileItem.js @@ -0,0 +1,336 @@ +/** + * + */ +qx.Class.define('cv.ui.manager.contextmenu.FileItem', { + extend: qx.ui.menu.Menu, + + /* + *********************************************** + CONSTRUCTOR + *********************************************** + */ + construct: function (file) { + this.base(arguments); + this._commandGroup = qx.core.Init.getApplication().getCommandManager().getActive(); + this._init(); + this._dateFormat = new qx.util.format.DateFormat(qx.locale.Date.getDateFormat('medium')); + this._timeFormat = new qx.util.format.DateFormat(qx.locale.Date.getTimeFormat('medium')); + + if (file) { + this.configure(file); + } + + // only react to events when this menu is visible + this.addListener('appear', function () { + this.setActive(true); + }); + this.addListener('disappear', function () { + this.setActive(false); + }); + }, + + /* + *********************************************** + PROPERTIES + *********************************************** + */ + properties: { + appearance: { + refine: true, + init: 'cv-file-contextmenu' + }, + + /* This flag enables the event handling for this menu */ + active: { + check: 'Boolean', + init: false + } + }, + + /* + *********************************************** + MEMBERS + *********************************************** + */ + members: { + _commandGroup: null, + _selectedNode: null, + _dateFormat: null, + _timeFormat: null, + _renameDialog: null, + + configure: function (file) { + this._selectedNode = file; + if (file) { + var folder = file.getType() === 'folder' ? file : file.getParent(); + this.getChildControl('new-file-button').setEnabled(folder ? folder.isWriteable() : false); + this.getChildControl('clone-file-button').setVisibility(file.isConfigFile() ? 'visible' : 'excluded'); + this.getChildControl('new-folder-button').setEnabled(folder ? folder.isWriteable() : false); + this.getChildControl('delete-button').setLabel(file.isTrash() ? + this.tr('Clear') : + this.tr('Delete')); + + // create compare menu + var compareMenu = this.getChildControl('compare-menu'); + compareMenu.removeAll(); + var backups = cv.ui.manager.model.BackupFolder.getInstance().getBackupFiles(file); + this.getChildControl('compare-with-button').setEnabled(backups.length > 0); + backups.sort(function (a, b) { + return b.date.getTime() - a.date.getTime(); + }); + var group = null; + backups.forEach(function (backupEntry) { + var date = this._dateFormat.format(backupEntry.date); + if (group !== date) { + if (group !== null) { + compareMenu.add(new qx.ui.menu.Separator()); + } + var groupButton = new qx.ui.menu.Button(date); + groupButton.setEnabled(false); + compareMenu.add(groupButton); + group = date; + } + var button = new qx.ui.menu.Button(this.tr('Backup from %1', this._timeFormat.format(backupEntry.date))); + button.setUserData('file', backupEntry.file); + button.addListener('execute', this._onCompareWith, this); + compareMenu.add(button); + }, this); + + var defaultHandler = cv.ui.manager.control.FileHandlerRegistry.getInstance().getFileHandler(file); + + // open with menu + var availableHandlers = cv.ui.manager.control.FileHandlerRegistry.getInstance().getAllFileHandlers(file); + var openWithMenu = this.getChildControl('open-with-menu'); + openWithMenu.removeAll(); + // this menu only makes sense when there is more than one option to select from + this.getChildControl('open-with-button').setEnabled(availableHandlers.length > 1); + availableHandlers.sort(function (a, b) { + return a.Clazz.constructor.TITLE.toString().localeCompare(b.Clazz.constructor.TITLE.toString()); + }); + availableHandlers.forEach(function (handlerConf) { + var button = new qx.ui.menu.Button(handlerConf.Clazz.constructor.TITLE, handlerConf.Clazz.constructor.ICON); + button.setAppearance('open-with-button'); + if (defaultHandler.Clazz.classname === handlerConf.Clazz.classname) { + button.addState('default'); + } + button.setUserData('handlerId', handlerConf.Clazz.classname); + button.addListener('execute', this._onOpenWith, this); + openWithMenu.add(button); + }, this); + + // validate button + this.getChildControl('validate-config-button').setVisibility(file.isConfigFile() && !file.isMounted() ? 'visible' : 'excluded'); + + // replacement button + if (file.getType() === 'file') { + this.getChildControl('replace-button').show(); + this._replacementManager.setFilename(file.getName()); + this._replacementManager.setFolder(file.getParent()); + } else { + this.getChildControl('replace-button').exclude(); + } + // buttons that need write access + ['delete-button', 'replace-button', 'rename-button'].forEach(function (controlName) { + this.getChildControl(controlName).setEnabled(file.isWriteable()); + }, this); + this.getChildControl('download-button').setEnabled(!file.isFake()); + + this.getChildControl('restore-button').setVisibility(file.isInTrash() ? 'visible' : 'excluded'); + } else { + this.getChildControl('delete-button').set({ + label: this.tr('Delete'), + enabled: false + }); + this.getChildControl('replace-button').exclude(); + this.getChildControl('download-button').setEnabled(false); + this.getChildControl('restore-button').exclude(); + } + }, + + _init: function () { + this.add(this.getChildControl('new-file-button')); + this.add(this.getChildControl('clone-file-button')); + this.add(this.getChildControl('new-folder-button')); + this.add(new qx.ui.menu.Separator()); + this.add(this.getChildControl('open-button')); + this.add(this.getChildControl('open-with-button')); + this.add(this.getChildControl('compare-with-button')); + this.add(new qx.ui.menu.Separator()); + this.add(this.getChildControl('rename-button')); + this.add(this.getChildControl('delete-button')); + this.add(this.getChildControl('restore-button')); + this.add(new qx.ui.menu.Separator()); + this.add(this.getChildControl('download-button')); + var sep = new qx.ui.menu.Separator(); + var button = this.getChildControl('replace-button'); + this.add(sep); + this.add(button); + button.bind('visibility', sep, 'visibility'); + sep = new qx.ui.menu.Separator(); + button = this.getChildControl('validate-config-button'); + button.bind('visibility', sep, 'visibility'); + this.add(sep); + this.add(button); + }, + + _onCompareWith: function (ev) { + if (this.isActive()) { + var compareWith = ev.getTarget().getUserData('file'); + qx.event.message.Bus.dispatchByName('cv.manager.compareFiles', + new cv.ui.manager.model.CompareFiles(compareWith, this._selectedNode) + ); + } + }, + + _onOpenWith: function (ev) { + if (this.isActive()) { + var handlerId = ev.getTarget().getUserData('handlerId'); + qx.event.message.Bus.dispatchByName('cv.manager.openWith', { + file: this._selectedNode, + handler: handlerId + }); + } + }, + + _onRename: function () { + if (this._selectedNode && !this._renameDialog && this.isActive()) { + this._renameDialog = dialog.Dialog.prompt(this.tr('New name'), function (name) { + if (name && name !== this._selectedNode.getName()) { + cv.ui.manager.control.FileController.getInstance().rename(this._selectedNode, name); + } + this._renameDialog = null; + }, this, this._selectedNode.getName(), this.tr('Rename file')); + } + }, + + _onDownload: function () { + if (this._selectedNode && this.isActive()) { + cv.ui.manager.control.FileController.getInstance().download(this._selectedNode); + } + }, + + _onRestore: function () { + if (this._selectedNode && this.isActive()) { + cv.ui.manager.control.FileController.getInstance().restore(this._selectedNode); + } + }, + + _onValidate: function () { + if (this._selectedNode && this.isActive()) { + cv.ui.manager.control.FileController.getInstance().validate(this._selectedNode); + } + }, + + _onClone: function () { + if (this._selectedNode && this.isActive()) { + qx.event.message.Bus.dispatchByName('cv.manager.action.clone', { + file: this._selectedNode + }); + } + }, + + // overridden + _createChildControlImpl : function(id) { + var control; + + switch (id) { + case 'new-file-button': + control = new qx.ui.menu.Button(this.tr('New file'), cv.theme.dark.Images.getIcon('new-file', 18)); + control.addListener('execute', function () { + if (this._selectedNode.isConfigFile()) { + qx.event.message.Bus.dispatchByName('cv.manager.action.new-config-file', this._selectedNode.getParent()); + } else { + qx.event.message.Bus.dispatchByName('cv.manager.action.new-file', this._selectedNode.getParent()); + } + }, this); + break; + + case 'clone-file-button': + control = new qx.ui.menu.Button(this.tr('Clone file'), cv.theme.dark.Images.getIcon('clone-file', 18)); + control.exclude(); + control.addListener('execute', this._onClone, this); + break; + + case 'new-folder-button': + control = new qx.ui.menu.Button(this.tr('New folder'), cv.theme.dark.Images.getIcon('new-folder', 18)); + control.addListener('execute', function () { + qx.event.message.Bus.dispatchByName('cv.manager.action.new-folder', this._selectedNode.getParent()); + }, this); + break; + + case 'rename-button': + control = new qx.ui.menu.Button(this.tr('Rename'), cv.theme.dark.Images.getIcon('rename', 18)); + control.addListener('execute', this._onRename, this); + break; + + case 'delete-button': + control = new qx.ui.menu.Button(this.tr('Delete'), cv.theme.dark.Images.getIcon('delete', 18)); + control.addListener('execute', function () { + qx.event.message.Bus.dispatchByName('cv.manager.action.delete', this._selectedNode); + }, this); + break; + + case 'download-button': + control = new qx.ui.menu.Button(this.tr('Download'), cv.theme.dark.Images.getIcon('download', 18)); + control.addListener('execute', this._onDownload, this); + break; + + case 'open-button': + control = new qx.ui.menu.Button(this.tr('Open'), cv.theme.dark.Images.getIcon('open', 18)); + control.addListener('execute', function () { + qx.event.message.Bus.dispatchByName('cv.manager.open', this._selectedNode); + }, this); + break; + + case 'restore-button': + control = new qx.ui.menu.Button(this.tr('Restore'), cv.theme.dark.Images.getIcon('trash', 18)); + control.exclude(); + control.addListener('execute', this._onRestore, this); + break; + + case 'validate-config-button': + control = new qx.ui.menu.Button(this.tr('Validate'), cv.theme.dark.Images.getIcon('validate', 18)); + control.exclude(); + control.addListener('execute', this._onValidate, this); + break; + + case 'replace-button': + control = new com.zenesis.qx.upload.UploadMenuButton(this.tr('Replace'), cv.theme.dark.Images.getIcon('upload', 18)); + control.exclude(); + this._replacementManager = new cv.ui.manager.upload.UploadMgr(); + this._replacementManager.setForce(true); + this._replacementManager.addWidget(control); + break; + + case 'compare-menu': + control = new qx.ui.menu.Menu(); + break; + + case 'compare-with-button': + control = new qx.ui.menu.Button(this.tr('Compare with...'), cv.theme.dark.Images.getIcon('compare', 18), null, this.getChildControl('compare-menu')); + break; + + case 'open-with-button': + control = new qx.ui.menu.Button(this.tr('Open with...'), cv.theme.dark.Images.getIcon('open-with', 18), null, this.getChildControl('open-with-menu')); + break; + + case 'open-with-menu': + control = new qx.ui.menu.Menu(); + break; + } + + return control || this.base(arguments, id); + } + }, + + /* + *********************************************** + DESTRUCTOR + *********************************************** + */ + destruct: function () { + this._commandGroup = null; + this._renameDialog = null; + this._disposeObjects('_dateFormat', '_timeFormat'); + } +}); diff --git a/source/class/cv/ui/manager/contextmenu/GlobalFileItem.js b/source/class/cv/ui/manager/contextmenu/GlobalFileItem.js new file mode 100644 index 00000000000..6c475d49e70 --- /dev/null +++ b/source/class/cv/ui/manager/contextmenu/GlobalFileItem.js @@ -0,0 +1,7 @@ +/** + * + */ +qx.Class.define('cv.ui.manager.contextmenu.GlobalFileItem', { + extend: cv.ui.manager.contextmenu.FileItem, + type: 'singleton' +}); diff --git a/source/class/cv/ui/manager/control/ActionDispatcher.js b/source/class/cv/ui/manager/control/ActionDispatcher.js new file mode 100644 index 00000000000..23b4cf259e3 --- /dev/null +++ b/source/class/cv/ui/manager/control/ActionDispatcher.js @@ -0,0 +1,93 @@ +/** + * The ActionDispatcher listens to the events in the 'cv.manager.action' topic and + * dispatched those events to the currently relevant handler (e.g. the save event to the opened editor). + */ +qx.Class.define('cv.ui.manager.control.ActionDispatcher', { + extend: qx.core.Object, + type: 'singleton', + + /* + *********************************************** + CONSTRUCTOR + *********************************************** + */ + construct: function () { + this.base(arguments); + qx.event.message.Bus.subscribe('cv.manager.action.*', this._onAction, this); + }, + + /* + *********************************************** + PROPERTIES + *********************************************** + */ + properties: { + focusedWidget: { + check: 'cv.ui.manager.IActionHandler', + nullable: true, + apply: '_applyFocusedWidget' + }, + + main: { + check: 'cv.ui.manager.Main', + nullable: true + } + }, + + /* + *********************************************** + MEMBERS + *********************************************** + */ + members: { + _applyFocusedWidget: function () { + var menuBar = cv.ui.manager.MenuBar.getInstance(); + var config = menuBar.getButtonConfiguration(); + var button; + Object.keys(config).forEach(function (actionId) { + button = menuBar.getButton(actionId); + if (button) { + button.setEnabled(config[actionId].general || this.hasHandler(actionId)); + } + }, this); + }, + + /** + * Check if there is an existing handler for the given actionName. + * @return {Boolean} + */ + hasHandler: function (actionName) { + return !!this._getHandler(actionName); + }, + + _getHandler: function (actionName) { + var handler = this.getFocusedWidget(); + var main = this.getMain(); + if (handler && handler.canHandleAction(actionName)) { + return handler; + } else if (main && main.canHandleAction(actionName)) { + return main; + } + }, + + _onAction: function (ev) { + var topic = ev.getName(); + var actionName = topic.split('.').pop(); + var handler = this._getHandler(actionName); + if (handler) { + handler.handleAction(actionName, ev.getData()); + } else { + this.warn('no action handler found for action: ' + actionName); + } + } + }, + + /* + *********************************************** + DESTRUCTOR + *********************************************** + */ + destruct: function () { + qx.event.message.Bus.subscribe('cv.manager.action.*', this._onAction, this); + } +}); diff --git a/source/class/cv/ui/manager/control/FileController.js b/source/class/cv/ui/manager/control/FileController.js new file mode 100644 index 00000000000..c83ab2169c9 --- /dev/null +++ b/source/class/cv/ui/manager/control/FileController.js @@ -0,0 +1,230 @@ +/** + * The FileController is responsible for all file operations, like config check, move, replace, delete etc. + */ +qx.Class.define('cv.ui.manager.control.FileController', { + extend: qx.core.Object, + type: 'singleton', + + /* + *********************************************** + CONSTRUCTOR + *********************************************** + */ + construct: function () { + this.base(arguments); + this.__fsClient = cv.io.rest.Client.getFsClient(); + }, + + /* + *********************************************** + MEMBERS + *********************************************** + */ + members: { + __fsClient: null, + + rename: function (file, newName) { + var newPath = file.getPath() || ''; + if (newPath.length > 0 && !newPath.endsWith('/')) { + newPath += '/'; + } + newPath += newName; + if (file.isTemporary()) { + // create new item + this.__fsClient.createSync({path: newPath, type: file.getType()}, function (err) { + if (err) { + cv.ui.manager.snackbar.Controller.error(err); + } else { + cv.ui.manager.snackbar.Controller.info(file.getType() === 'file' ? + qx.locale.Manager.tr('File has been created') : + qx.locale.Manager.tr('Folder has been created') + ); + file.resetTemporary(); + file.resetModified(); + file.setName(newName); + file.reload(); + } + }, this); + } else if (file.getFullPath() !== newPath) { + this.__fsClient.moveSync({src: file.getFullPath(), target: newPath}, function (err) { + if (err) { + cv.ui.manager.snackbar.Controller.error(err); + } else { + cv.ui.manager.snackbar.Controller.info(file.getType() === 'file' ? + qx.locale.Manager.tr('File has been renamed') : + qx.locale.Manager.tr('Folder has been renamed') + ); + file.setName(newName); + file.resetModified(); + file.reload(); + } + file.resetEditing(); + }, this); + } + }, + + /** + * Move file to another path + * @param file {cv.ui.manager.model.FileItem} file to move + * @param target {String} new path of the file + */ + move: function (file, target) { + this.__fsClient.moveSync({src: file.getFullPath(), target: target}, function (err) { + if (err) { + cv.ui.manager.snackbar.Controller.error(err); + } else { + cv.ui.manager.snackbar.Controller.info(file.getType() === 'file' ? + qx.locale.Manager.tr('File has been moved') : + qx.locale.Manager.tr('Folder has been moved') + ); + qx.event.message.Bus.dispatchByName('cv.manager.file', { + action: 'moved', + path: file.getFullPath() + }); + } + }, this); + }, + + /** + * Restore file from trash by moving it out of the trash to the old path + * @param file {cv.ui.manager.model.FileItem} file to restore + */ + restore: function (file) { + if (file.isInTrash()) { + var target = file.getFullPath().replace('.trash/', ''); + this.__fsClient.moveSync({src: file.getFullPath(), target: target}, function (err) { + if (err) { + cv.ui.manager.snackbar.Controller.error(err); + } else { + cv.ui.manager.snackbar.Controller.info(file.getType() === 'file' ? + qx.locale.Manager.tr('File has been restored') : + qx.locale.Manager.tr('Folder has been restored') + ); + qx.event.message.Bus.dispatchByName('cv.manager.file', { + action: 'restored', + path: file.getFullPath() + }); + } + }, this); + } + }, + + 'delete': function(file, callback, context) { + if (file.isTemporary()) { + // new file, no need to call the backend + if (callback) { + callback.apply(context, true); + } + } else { + if (file) { + var message; + if (file.isTrash()) { + message = qx.locale.Manager.tr('Do you really want to clear the trash?'); + } else if (file.isInTrash()) { + message = file.getType() === 'file' ? + qx.locale.Manager.tr('Do you really want to delete this file from the trash?') : + qx.locale.Manager.tr('Do you really want to delete this folder from the trash?'); + } else { + message = file.getType() === 'file' ? + qx.locale.Manager.tr('Do you really want to delete this file?') : + qx.locale.Manager.tr('Do you really want to delete this folder?'); + } + dialog.Dialog.confirm(message, function (confirmed) { + if (confirmed) { + this.__doDelete(file, callback, context); + } else if (callback) { + callback.apply(context, false); + } + }, this, qx.locale.Manager.tr('Confirm deletion')); + } + } + }, + + __doDelete: function (file, callback, context) { + this.__fsClient.deleteSync({path: file.getFullPath(), force: file.isTrash()}, null, function (err) { + if (err) { + cv.ui.manager.snackbar.Controller.error(err); + if (callback) { + callback.apply(context, false); + } + } else { + var message; + if (file.isTrash()) { + message = qx.locale.Manager.tr('Trash has been cleared'); + } else if (file.isInTrash()) { + message = this.getType() === 'file' ? + qx.locale.Manager.tr('File has been removed from trash') : + qx.locale.Manager.tr('Folder has been removed from trash'); + } else { + message = file.getType() === 'file' ? + qx.locale.Manager.tr('File has been deleted') : + qx.locale.Manager.tr('Folder has been deleted'); + } + cv.ui.manager.snackbar.Controller.info(message); + if (callback) { + callback.apply(context, true); + } + qx.event.message.Bus.dispatchByName('cv.manager.file', { + action: 'deleted', + path: file.getFullPath() + }); + } + }, this); + }, + + download: function (file) { + if (file.getType() === 'file') { + var element = document.createElement('a'); + element.setAttribute('href', cv.io.rest.Client.getBaseUrl() + '/fs?download=true&path=' + file.getFullPath()); + element.style.display = 'none'; + document.body.appendChild(element); + element.click(); + document.body.removeChild(element); + } + }, + + validate: function (file) { + if (qx.core.Environment.get('qx.debug')) { + qx.core.Assert.assertInstance(file, cv.ui.manager.model.FileItem); + } + if (file.isConfigFile()) { + this.__validateConfig(file); + } else { + this.info('no validation available for file: ' + file.getFullPath()); + } + }, + + __validateConfig: function (file) { + var d = dialog.Dialog.alert(qx.locale.Manager.tr('Validating %1', file.getFullPath())); + cv.ui.manager.editor.Worker.getInstance().validateConfig(file).then(function (res) { + d.close(); + if (res === true) { + file.setValid(true); + cv.ui.manager.snackbar.Controller.info(qx.locale.Manager.tr('%1 has no errors!', file.getFullPath())); + } else { + file.setValid(false); + qx.event.message.Bus.dispatchByName('cv.manager.openWith', { + file: file, + handler: 'cv.ui.manager.editor.Source' + }); + cv.ui.manager.snackbar.Controller.error(qx.locale.Manager.trn( + '%1 error found in %2!', + '%1 errors found in %2!', + res.length, + res.length, + file.getFullPath()) + ); + } + }.bind(this)); + } + }, + + /* + *********************************************** + DESTRUCTOR + *********************************************** + */ + destruct: function () { + this.__fsClient = null; + } +}); diff --git a/source/class/cv/ui/manager/control/FileHandlerRegistry.js b/source/class/cv/ui/manager/control/FileHandlerRegistry.js new file mode 100644 index 00000000000..f0bd22d825d --- /dev/null +++ b/source/class/cv/ui/manager/control/FileHandlerRegistry.js @@ -0,0 +1,225 @@ +/** + * Central registry for all available file editors/viewers. + */ +qx.Class.define('cv.ui.manager.control.FileHandlerRegistry', { + extend: qx.core.Object, + type: 'singleton', + + /* + *********************************************** + CONSTRUCTOR + *********************************************** + */ + construct: function () { + this.base(arguments); + this.__registry = {}; + this.__defaults = []; + + // register viewers + this.registerFileHandler(new RegExp('\.(' + cv.ui.manager.viewer.Image.SUPPORTED_FILES.join('|') + ')$'), cv.ui.manager.viewer.Image, {type: 'view'}); + this.registerFileHandler(cv.ui.manager.viewer.Config.SUPPORTED_FILES, cv.ui.manager.viewer.Config, {type: 'view'}); + this.registerFileHandler(cv.ui.manager.viewer.Icons.SUPPORTED_FILES, cv.ui.manager.viewer.Icons, {type: 'view'}); + this.registerFileHandler(cv.ui.manager.viewer.Folder.SUPPORTED_FILES, cv.ui.manager.viewer.Folder, {type: 'view'}); + this.registerFileHandler(null, cv.ui.manager.Start, {type: 'view'}); + + // register the basic editors + this.registerFileHandler(new RegExp('\.(' + cv.ui.manager.editor.Source.SUPPORTED_FILES.join('|') + ')$'), cv.ui.manager.editor.Source, {type: 'edit'}); + this.registerFileHandler(/visu_config(_.+)?\.xml/, cv.ui.manager.editor.Xml, { + preview: false, + type: 'edit', + noTemporaryFiles: true // the old XML-Editor cannot handle temporary files + }); + this.registerFileHandler(cv.ui.manager.model.CompareFiles, cv.ui.manager.editor.Diff, {type: 'view'}); + + this.registerFileHandler("hidden.php", cv.ui.manager.editor.Config, {type: 'edit'}); + + cv.ui.manager.model.Preferences.getInstance().addListener('changeDefaultConfigEditor', this._onChangesDefaultConfigEditor, this); + this._onChangesDefaultConfigEditor(); + }, + + /* + *********************************************** + MEMBERS + *********************************************** + */ + members: { + __registry: null, + __defaults: null, + + /** + * Registers an editor for a specific file, that is identified by the given selector. + * @param selector {String|RegExp|Class|Function|null} filename-/path or regular expression. If null this is a special handler that must be loaded manually (like cv.ui.manager.Start) + * @param clazz {qx.ui.core.Widget} widget class that handles those type of files + * @param options {Map?} additional options to store in the registry + */ + registerFileHandler: function (selector, clazz, options) { + if (qx.core.Environment.get('qx.debug')) { + qx.core.Assert.assertTrue(qx.Interface.classImplements(clazz, cv.ui.manager.editor.IEditor)); + } + var config = Object.assign({ + Clazz: clazz, + instance: null + }, options || {}); + if (qx.Class.isClass(selector)) { + config.instanceOf = selector; + config.selectorId = 'instanceOf:' + selector.classname; + // highest priority + config.priority = 0; + } else if (qx.lang.Type.isRegExp(selector)) { + config.regex = selector; + config.selectorId = 'regex:' + selector.toString(); + config.priority = 4; + } else if (qx.lang.Type.isFunction(selector)) { + config.selectorId = 'function:' + selector.name; + config.priority = 3; + config.function = selector; + } else if (qx.lang.Type.isString(selector)) { + // simple file matcher + if (selector.includes('/')) { + config.fullPath = selector; + config.selectorId = 'fullPath:' + selector; + config.priority = 1; + } else { + config.fileName = selector; + config.selectorId = 'fileName:' + selector; + config.priority = 2; + } + } else { + config.selectorId = 'none'; + config.priority = 10; + } + this.__registry[clazz.classname] = config; + }, + + getFileHandler: function (file, type) { + var handlers = []; + if (!(file instanceof cv.ui.manager.model.CompareFiles)) { + // check if there is a default first + var defaultHandler; + Object.keys(this.__defaults).some(function (key) { + if (this.__defaults[key].regex.test(file.getFullPath()) && (!file.isTemporary() || !this.__defaults[key].noTemporaryFiles)) { + if (type) { + var config = this.getFileHandlerById(this.__defaults[key].clazz.classname); + if (config.type === type) { + defaultHandler = config; + } + } else { + defaultHandler = this.getFileHandlerById(this.__defaults[key].clazz.classname); + } + return !!defaultHandler; + } + }, this); + if (defaultHandler) { + return defaultHandler; + } + } + + Object.keys(this.__registry).forEach(function (classname) { + var config = this.__registry[classname]; + if (this.__canHandle(config, file) && (!type || config.type === type)) { + handlers.push(config); + } + }, this); + if (handlers.length === 0) { + // no editors found + return null; + } else if (handlers.length === 1) { + return handlers[0]; + } else { + // sort by selector priority (instance, fullpath, filename, regex) + handlers.sort(function (a, b) { + return a.priority - b.priority; + }); + // no default handler, just take the first one + return handlers[0]; + } + }, + + getFileHandlerById: function (handlerId) { + return this.__registry[handlerId]; + }, + + hasFileHandler: function (file, type) { + return Object.keys(this.__registry).some(function (classname) { + var config = this.__registry[classname]; + return this.__canHandle(config, file) && (!type || config.type === type); + }, this); + }, + + /** + * Mark the handler with the given classname as default for the selector-id and all others with the same selector id not, + * @param selectorId {RegExp} + * @param noTemporaryFiles {Boolean} flag to prevent this default editor from being used to open temporary files. + * @param clazz {qx.Class} + */ + setDefault: function (selector, clazz, noTemporaryFiles) { + if (qx.core.Environment.get('qx.debug')) { + qx.core.Assert.assertRegExp(selector); + qx.core.Assert.assertTrue(qx.Class.isClass(clazz)); + } + this.__defaults[selector.toString()] = { + regex: selector, + clazz: clazz, + noTemporaryFiles: noTemporaryFiles + }; + }, + + _onChangesDefaultConfigEditor: function () { + var selector = /visu_config(_.+)?\.xml/; + switch (cv.ui.manager.model.Preferences.getInstance().getDefaultConfigEditor()) { + case 'source': + this.setDefault(selector, cv.ui.manager.editor.Source); + break; + + case 'xml': + this.setDefault(selector, cv.ui.manager.editor.Xml, true); + break; + } + }, + + __canHandle: function(config, file) { + if (config.noTemporaryFiles === true && file.isTemporary()) { + return false; + } else if (config.fileName && file.getName() === config.fileName) { + return true; + } else if (config.fullPath && file.getFullPath() === config.fullPath) { + return true; + } else if (config.regex && config.regex.test(file.getFullPath().toLowerCase())) { + return true; + } else if (config.instanceOf && file instanceof config.instanceOf) { + return true; + } else if (config.function && config.function(file)) { + return true; + } + return false; + }, + + getAllFileHandlers: function (file, type) { + if (qx.core.Environment.get('qx.debug')) { + qx.core.Assert.assertTrue(file instanceof cv.ui.manager.model.FileItem || file instanceof cv.ui.manager.model.CompareFiles); + } + return Object.keys(this.__registry).filter(function (key) { + return this.__canHandle(this.__registry[key], file) && (!type || this.__registry[key].type === type); + }, this).map(function (key) { + return this.__registry[key]; + }, this); + } + }, + + /* + *********************************************** + DESTRUCTOR + *********************************************** + */ + destruct: function () { + // cleanup handler instances + Object.keys(this.__registry).forEach(function (regex) { + if (this.__registry[regex].instance) { + this.__registry[regex].instance.dispose(); + this.__registry[regex].instance = null; + } + }, this); + + cv.ui.manager.model.Preferences.getInstance().removeListener('changeDefaultConfigEditor', this._onChangesDefaultConfigEditor, this); + } +}); diff --git a/source/class/cv/ui/manager/control/IFileEventHandler.js b/source/class/cv/ui/manager/control/IFileEventHandler.js new file mode 100644 index 00000000000..4c7756d89b4 --- /dev/null +++ b/source/class/cv/ui/manager/control/IFileEventHandler.js @@ -0,0 +1,13 @@ +/** + * + */ +qx.Interface.define('cv.ui.manager.control.IFileEventHandler', { + /* + *********************************************** + MEMBERS + *********************************************** + */ + members: { + _handleFileEvent: function (ev) {} + } +}); diff --git a/source/class/cv/ui/manager/control/MFileEventHandler.js b/source/class/cv/ui/manager/control/MFileEventHandler.js new file mode 100644 index 00000000000..3b58d139163 --- /dev/null +++ b/source/class/cv/ui/manager/control/MFileEventHandler.js @@ -0,0 +1,26 @@ +/** + * Mixin for all classes that have to handle event on the 'cv.manager.file' topic. + * Those classes need to implement the cv.ui.manager.control.IFileEventHandler interface. + */ +qx.Mixin.define('cv.ui.manager.control.MFileEventHandler', { + /* + *********************************************** + CONSTRUCTOR + *********************************************** + */ + construct: function () { + if (qx.core.Environment.get('qx.debug')) { + qx.core.Assert.assertInterface(this, cv.ui.manager.control.IFileEventHandler); + } + qx.event.message.Bus.subscribe('cv.manager.file', this._handleFileEvent, this); + }, + + /* + *********************************************** + DESTRUCTOR + *********************************************** + */ + destruct: function () { + qx.event.message.Bus.unsubscribe('cv.manager.file', this._handleFileEvent, this); + } +}); diff --git a/source/class/cv/ui/manager/core/IconAtom.js b/source/class/cv/ui/manager/core/IconAtom.js new file mode 100644 index 00000000000..d9639b49250 --- /dev/null +++ b/source/class/cv/ui/manager/core/IconAtom.js @@ -0,0 +1,57 @@ +/** + * Atom with cv.ui.manager.viewer.SvgIcon instead ob an qx.ui.basic.Image + */ +qx.Class.define('cv.ui.manager.core.IconAtom', { + extend: qx.ui.basic.Atom, + + /* + *********************************************** + PROPERTIES + *********************************************** + */ + properties: { + appearance: { + refine: true, + init: 'cv-icon' + } + }, + + /* + *********************************************** + MEMBERS + *********************************************** + */ + members: { + _applyLabel: function (value) { + this.base(arguments, value); + this.getChildControl('icon').setName(value); + }, + + /** + * Updates the visibility of the icon + */ + _handleIcon : function() + { + if (!this.getChildControl('icon').getName() || this.getShow() === "label") { + this._excludeChildControl("icon"); + } else { + this._showChildControl("icon"); + } + }, + + // overridden + _createChildControlImpl : function(id) { + var control; + + switch (id) { + case 'icon': + control = new cv.ui.manager.viewer.SvgIcon(); + control.setAnonymous(true); + this._addAt(control, 0); + break; + } + + return control || this.base(arguments, id); + } + } +}); diff --git a/source/class/cv/ui/manager/editor/AbstractEditor.js b/source/class/cv/ui/manager/editor/AbstractEditor.js new file mode 100644 index 00000000000..3215020c105 --- /dev/null +++ b/source/class/cv/ui/manager/editor/AbstractEditor.js @@ -0,0 +1,151 @@ +/** + * Abstract base class for all editors. + */ +qx.Class.define('cv.ui.manager.editor.AbstractEditor', { + extend: qx.ui.core.Widget, + implement: [ + cv.ui.manager.editor.IEditor, + cv.ui.manager.IActionHandler + ], + type: "abstract", + + /* + *********************************************** + CONSTRUCTOR + *********************************************** + */ + construct: function () { + this.base(arguments); + this._initClient(); + }, + + /* + *********************************************** + PROPERTIES + *********************************************** + */ + properties: { + file: { + check: 'cv.ui.manager.model.FileItem || cv.ui.manager.model.CompareFiles', + nullable: true, + apply: '_loadFile' + }, + + content: { + nullable: true, + event: 'changeContent', + apply: '_applyContent' + } + }, + + /* + *********************************************** + MEMBERS + *********************************************** + */ + members: { + _handledActions: null, + + canHandleAction: function (actionName) { + return this._handledActions && this._handledActions.includes(actionName); + }, + + handleAction: function (actionName) { + if (this.canHandleAction(actionName)) { + switch (actionName) { + case 'save': + this.save(); + break; + } + } + }, + + _initClient: function () { + this._client = cv.io.rest.Client.getFsClient(); + }, + + _loadFile: function (file) { + if (file && file.getType() === 'file') { + if (file.getContent() !== null) { + this.setContent(file.getContent()); + } else { + this._client.readSync({path: this.getFile().getFullPath()}, function (err, res) { + if (err) { + cv.ui.manager.snackbar.Controller.error(err); + } else { + this.setContent(res); + } + }, this); + } + } else { + this.resetContent(); + } + }, + + // must be overridden by inheriting classes + _applyContent: function() {}, + + // must be overridden by inheriting classes + getCurrentContent: function () {}, + + save: function () { + var file = this.getFile(); + if (file.isModified()) { + if (file.isTemporary()) { + this._client.createSync({ + path: file.getFullPath(), + hash: file.getHash(), + type: 'file' + }, this.getCurrentContent(), function (err) { + if (err) { + cv.ui.manager.snackbar.Controller.error(err); + } else { + cv.ui.manager.snackbar.Controller.info(this.tr('File has been created')); + this._onSaved(); + qx.event.message.Bus.dispatchByName(file.getBusTopic(), { + type: 'created', + file: file, + data: this.getCurrentContent(), + source: this + }); + } + }, this); + } else { + this._client.updateSync({ + path: file.getFullPath(), + hash: file.getHash() + }, this.getCurrentContent(), function (err) { + if (err) { + cv.ui.manager.snackbar.Controller.error(err); + } else { + cv.ui.manager.snackbar.Controller.info(this.tr('File has been saved')); + this._onSaved(); + qx.event.message.Bus.dispatchByName(file.getBusTopic(), { + type: 'contentChanged', + data: this.getCurrentContent(), + source: this + }); + } + }, this); + } + } + }, + + _onSaved: function () { + var file = this.getFile(); + file.resetModified(); + file.resetTemporary(); + } + }, + + /* + *********************************************** + DESTRUCTOR + *********************************************** + */ + destruct: function () { + if (this._client) { + this._client = null; + } + } +}); diff --git a/source/class/cv/ui/manager/editor/Config.js b/source/class/cv/ui/manager/editor/Config.js new file mode 100644 index 00000000000..29914fd8260 --- /dev/null +++ b/source/class/cv/ui/manager/editor/Config.js @@ -0,0 +1,152 @@ +/** + * Editor for the (hidden) configuration. + */ +qx.Class.define('cv.ui.manager.editor.Config', { + extend: cv.ui.manager.editor.AbstractEditor, + + /* + *********************************************** + CONSTRUCTOR + *********************************************** + */ + construct: function () { + this.base(arguments); + this._handledActions = ['save']; + this._setLayout(new qx.ui.layout.VBox(8)); + this._createChildControl('list'); + this._createChildControl('add-section'); + }, + + /* + *********************************************** + STATICS + *********************************************** + */ + statics: { + TITLE: qx.locale.Manager.tr('Hidden configuration') + }, + + /* + *********************************************** + PROPERTIES + *********************************************** + */ + properties: { + appearance: { + refine: true, + init: 'cv-editor-config' + } + }, + + /* + *********************************************** + MEMBERS + *********************************************** + */ + members: { + _model: null, + _listController: null, + + _initClient: function () { + this._client = cv.io.rest.Client.getConfigClient(); + this._client.addListener('getSuccess', this._onModelValueChange, this); + this._client.addListener('updateSuccess', this._onSaved, this); + }, + + _loadFile: function () { + this._client.get({section: '*', key: '*'}); + }, + + _onModelValueChange: function (ev) { + this.setContent(ev.getData()); + }, + + // overridden + _applyContent: function(value) { + var model = this._listController.getModel(); + model.removeAll(); + + Object.keys(value).forEach(function (sectionName) { + var section = new cv.ui.manager.model.config.Section(sectionName); + Object.keys(value[sectionName]).forEach(function (optionKey) { + section.addOption(optionKey, value[sectionName][optionKey]); + }, this); + model.push(section); + }, this); + }, + + // overridden + getCurrentContent: function () { + return this.getContent(); + }, + + _onDeleteSection: function (ev) { + var section = ev.getData(); + var model = this._listController.getModel(); + model.remove(section); + }, + + save: function () { + var data = qx.util.Serializer.toNativeObject(this._listController.getModel()); + this._client.saveSync(null, data, function (err) { + if (err) { + cv.ui.manager.snackbar.Controller.error(err); + } else { + cv.ui.manager.snackbar.Controller.info(this.tr('Hidden config has been saved')); + this._onSaved(); + } + }, this); + }, + + // overridden + _createChildControlImpl : function(id) { + var control; + + switch (id) { + case 'list': + control = new qx.ui.form.List(); + control.setEnableInlineFind(false); + this._listController = new qx.data.controller.List(new qx.data.Array(), control); + this._listController.setDelegate({ + createItem: function () { + return new cv.ui.manager.form.SectionListItem(); + }, + + configureItem: function (item) { + item.addListener('delete', this._onDeleteSection, this); + }.bind(this), + + bindItem: function (controller, item, index) { + controller.bindProperty('', 'model', null, item, index); + } + }); + this._add(control, {flex: 1}); + break; + + case 'buttons': + control = new qx.ui.container.Composite(new qx.ui.layout.HBox(8)); + this._add(control); + break; + + case 'add-section': + control = new qx.ui.form.Button(this.tr('Add section')); + control.addListener('execute', function () { + this._listController.getModel().push(new cv.ui.manager.model.config.Section('')); + }, this); + this.getChildControl('buttons').add(control); + break; + } + + return control || this.base(arguments, id); + } + }, + + /* + *********************************************** + DESTRUCTOR + *********************************************** + */ + destruct: function () { + this._disposeObjects('_model', '_listController'); + } +}); diff --git a/source/class/cv/ui/manager/editor/Diff.js b/source/class/cv/ui/manager/editor/Diff.js new file mode 100644 index 00000000000..cf5beee160d --- /dev/null +++ b/source/class/cv/ui/manager/editor/Diff.js @@ -0,0 +1,125 @@ +/** + * Monaco Texteditor for file content comparison + */ +qx.Class.define('cv.ui.manager.editor.Diff', { + extend: cv.ui.manager.editor.Source, + + /* + *********************************************** + CONSTRUCTOR + *********************************************** + */ + construct: function () { + this.base(arguments); + this._handledActions = []; + }, + + /* + *********************************************** + STATICS + *********************************************** + */ + statics: { + COUNTER: 0, + TITLE: qx.locale.Manager.tr('File compare'), + ICON: cv.theme.dark.Images.getIcon('compare', 18) + }, + + /* + *********************************************** + PROPERTIES + *********************************************** + */ + properties: { + originalContent: { + check: 'String', + init: '', + apply: '_applyContent' + }, + + modifiedContent: { + check: 'String', + init: '', + apply: '_applyContent' + } + }, + + /* + *********************************************** + MEMBERS + *********************************************** + */ + members: { + + // overridden, diff editor is read only, no worker needed + _initWorker: function () {}, + + _draw: function () { + if (!window.monaco) { + cv.ui.manager.editor.Source.load(this._draw, this); + } else { + var domElement = this.getContentElement().getDomElement(); + if (!domElement) { + this.addListenerOnce('appear', this._draw, this); + } else { + this._editor = window.monaco.editor.createDiffEditor(domElement, { + folding: true, + autoIndent: true, + automaticLayout: true, + theme: 'vs-dark', + readOnly: true + }); + if (this.getFile()) { + this._loadFile(this.getFile()); + } + } + } + }, + + _applyContent: function () { + var original = this.getOriginalContent(); + var modified = this.getModifiedContent(); + if (original && modified) { + var file = this.getFile(); + var originalModel = window.monaco.editor.createModel(original, this._getLanguage(file.getOriginalFile())); + originalModel.updateOptions(this._getDefaultModelOptions()); + var modifiedModel = window.monaco.editor.createModel(modified, this._getLanguage(file.getModifiedFile())); + modifiedModel.updateOptions(this._getDefaultModelOptions()); + this._editor.setModel({ + original: originalModel, + modified: modifiedModel + }); + } + }, + + clear: function () { + this._editor.getModel().original.dispose(); + this._editor.getModel().modified.dispose(); + }, + + _loadFile: function (file) { + if (this._editor) { + if (file && file instanceof cv.ui.manager.model.CompareFiles && this.isSupported(file.getModifiedFile())) { + this._client.readSync({path: file.getModifiedFile().getFullPath()}, function (err, res) { + if (err) { + cv.ui.manager.snackbar.Controller.error(err); + } else { + this.setModifiedContent(res); + } + }, this); + + this._client.readSync({path: file.getOriginalFile().getFullPath()}, function (err, res) { + if (err) { + cv.ui.manager.snackbar.Controller.error(err); + } else { + this.setOriginalContent(res); + } + }, this); + } else { + this.resetOriginalContent(); + this.resetModifiedContent(); + } + } + } + } +}); diff --git a/source/class/cv/ui/manager/editor/IEditor.js b/source/class/cv/ui/manager/editor/IEditor.js new file mode 100644 index 00000000000..7cb27a2537b --- /dev/null +++ b/source/class/cv/ui/manager/editor/IEditor.js @@ -0,0 +1,37 @@ +/** + * Interface all file editors must implement. + */ +qx.Interface.define('cv.ui.manager.editor.IEditor', { + /* + *********************************************** + PROPERTIES + *********************************************** + */ + properties: { + file: { + check: 'cv.ui.manager.model.FileItem', + nullable: true, + apply: '_loadFile' + } + }, + + /* + *********************************************** + STATICS + *********************************************** + */ + statics: { + TITLE: '' + }, + + /* + *********************************************** + MEMBERS + *********************************************** + */ + members: { + save: function () {}, + + getCurrentContent: function () {} + } +}); diff --git a/source/class/cv/ui/manager/editor/Source.js b/source/class/cv/ui/manager/editor/Source.js new file mode 100644 index 00000000000..df02155caab --- /dev/null +++ b/source/class/cv/ui/manager/editor/Source.js @@ -0,0 +1,330 @@ +/** + * Monaco Texteditor integration + */ +qx.Class.define('cv.ui.manager.editor.Source', { + extend: cv.ui.manager.editor.AbstractEditor, + + /* + *********************************************** + CONSTRUCTOR + *********************************************** + */ + construct: function () { + this.base(arguments); + this._handledActions = ['save', 'cut', 'copy', 'paste', 'undo', 'redo']; + this._basePath = window.location.origin + window.location.pathname + qx.util.LibraryManager.getInstance().get("cv", "resourceUri") + '/config/'; + this.getContentElement().setAttribute('contentEditable', 'true'); + this.set({ + droppable: false, + focusable: true + }); + this.addListener('dragover', function (ev) { + ev.preventDefault(); + ev.dataTransfer.effectAllowed = "none"; + ev.dataTransfer.dropEffect = "none"; + }); + this.addListener('drop', function (ev) { + ev.preventDefault(); + }); + this.addListener('appear', function () { + qx.ui.core.FocusHandler.getInstance().setUseTabNavigation(false); + }); + this.addListener('disappear', function () { + qx.ui.core.FocusHandler.getInstance().setUseTabNavigation(true); + }); + this._draw(); + this._initWorker(); + this._currentDecorations = []; + }, + + /* + *********************************************** + STATICS + *********************************************** + */ + statics: { + TITLE: qx.locale.Manager.tr('Texteditor'), + COUNTER: 0, + SUPPORTED_FILES: ['xml', 'php', 'css', 'js', 'svg', 'json', 'md', 'yaml', 'conf', 'ts', 'rst', 'py', 'txt'], + ICON: cv.theme.dark.Images.getIcon('text', 18), + + load: function (callback, context) { + var version = qx.core.Environment.get('qx.debug') ? 'dev' : 'min'; + window.documentationMappingPrefix = "../source/editor/"; // jshint ignore:line + var sourcePath = qx.util.Uri.getAbsolute(qx.util.LibraryManager.getInstance().get('cv', 'resourceUri')+ '/..'); + var loader = new qx.util.DynamicScriptLoader([ + sourcePath + 'editor/dependencies/jquery.min.js', + sourcePath + 'editor/dependencies/jquery.xpath.min.js', + sourcePath + 'editor/lib/Messages.js', + sourcePath + 'editor/lib/Schema.js', + sourcePath + '../node_modules/monaco-editor/' + version + '/vs/loader.js', + 'manager/xml.js' + ]); + loader.addListener('ready', function () { + window.require.config({ + paths: { + 'vs': sourcePath + '../node_modules/monaco-editor/' + version + '/vs' + } + }); + window.require.config({ + 'vs/nls' : { + availableLanguages: { + '*': qx.locale.Manager.getInstance().getLanguage() !== 'en' ? qx.locale.Manager.getInstance().getLanguage() : '' + } + } + }); + var noCacheSuffix = '?' + Math.random(); + window.require([ + 'xml!./resource/visu_config.xsd' + noCacheSuffix, + 'xml!*./resource/manager/completion-libs/qooxdoo.d.ts', // the xml loader can load any file by adding * before the path, + 'vs/editor/editor.main' + ], function (schema, qxLib) { + this.__schema = schema; + callback.apply(context); + window.monaco.languages.typescript.javascriptDefaults.addExtraLib(qxLib, 'qooxdoo.d.ts'); + var parsedSchema = new window.Schema("visu_config.xsd", schema); // jshint ignore:line + var completionProvider = new cv.ui.manager.editor.completion.Config(parsedSchema); + var cvCompletionProvider = new cv.ui.manager.editor.completion.CometVisu(); + window.monaco.languages.registerCompletionItemProvider('xml', completionProvider.getProvider()); + window.monaco.languages.registerCompletionItemProvider('javascript', cvCompletionProvider.getProvider()); + + }.bind(this)); + }, this); + loader.addListener('failed', function (ev) { + qx.log.Logger.error(this, ev.getData()); + }, this); + loader.start(); + } + }, + + /* + *********************************************** + MEMBERS + *********************************************** + */ + members: { + __schema: null, + _editor: null, + _basePath: null, + _workerWrapper: null, + _currentDecorations: null, + + _initWorker: function () { + this._workerWrapper = cv.ui.manager.editor.Worker.getInstance(); + this._workerWrapper.setEditor(this); + }, + + _getDefaultModelOptions: function () { + return { + tabSize: 2, + indentSize: 2, + insertSpaces: true + }; + }, + + _draw: function () { + if (!window.monaco) { + cv.ui.manager.editor.Source.load(this._draw, this); + } else { + var domElement = this.getContentElement().getDomElement(); + if (!domElement) { + this.addListenerOnce('appear', this._draw, this); + } else { + this._editor = window.monaco.editor.create(domElement, { + suggestOnTriggerCharacters: true, + folding: true, + autoIndent: true, + automaticLayout: true, + dragAndDrop: true, + formatOnPaste: true, + formatOnType: true, + minimap: { + enabled: true + }, + theme: 'vs-dark' + }); + if (this.getFile()) { + this._loadFile(this.getFile()); + } + this._editor.onDidChangeModelContent(this._onContentChanged.bind(this)); + } + } + }, + + handleAction: function (actionName) { + if (this.canHandleAction(actionName)) { + var monacoAction; + switch (actionName) { + case 'cut': + monacoAction = this._editor.getAction('editor.action.clipboardCutAction'); + break; + case 'copy': + monacoAction = this._editor.getAction('editor.action.clipboardCopyAction'); + break; + + default: + this.base(arguments, actionName); + break; + } + if (monacoAction) { + monacoAction.run(); + } + } + }, + + _loadFile: function (file, old) { + if (old && this._workerWrapper) { + this._workerWrapper.close(old); + } + if (this._editor) { + if (file && file.getType() === 'file' && this.isSupported(file)) { + this.base(arguments, file, old); + } else { + this.resetContent(); + } + } + }, + + _applyContent: function(value) { + var file = this.getFile(); + if (!file) { + return; + } + var model = this._editor.getModel(); + if (this._workerWrapper) { + this._workerWrapper.open(file, value); + } + var newModel = window.monaco.editor.getModel(file.getUri()); + if (!newModel) { + // create new model + if (qx.xml.Document.isXmlDocument(value)) { + value = value.documentElement.outerHTML; + } + newModel = window.monaco.editor.createModel(value, this._getLanguage(file), file.getUri()); + } + + if (model !== newModel) { + newModel.updateOptions(this._getDefaultModelOptions()); + this._editor.setModel(newModel); + } else { + this._editor.setValue(value); + } + this._editor.updateOptions({ readOnly: !file.isWriteable() }); + }, + + getCurrentContent: function () { + return this._editor.getValue(); + }, + + _onContentChanged: function () { + if (this._workerWrapper) { + this._workerWrapper.contentChanged(this.getFile(), this._editor.getValue()); + } + }, + + isSupported: function (file) { + var fileType = file.getName().split('.').pop(); + return cv.ui.manager.editor.Source.SUPPORTED_FILES.includes(fileType); + }, + + showErrors: function (path, errorList) { + var markers = []; + var model = this._editor.getModel(); + if (!model) { + return; + } + // "file_0.xml:286: element layout: Schemas validity error : Element 'layout': This element is not expected." + if (errorList) { +// console.error(errorList); + var currentMessage = null; + // collect complete error messages + errorList.forEach(function (error) { + if (/.*\.xml:[\d]+:.+/.test(error)) { + if (currentMessage !== null) { + markers.push({ + severity: window.monaco.MarkerSeverity.Error, + startLineNumber: currentMessage.line, + startColumn: 1, + endLineNumber: currentMessage.line, + endColumn: model.getLineContent(currentMessage.line).length, + message: currentMessage.message + }); + } + // add marker for completed message + var parts = error.split(":"); + var file = parts.shift(); + var line = parseInt(parts.shift()); + + // in the last part there might be a more precise line number for the error + var match = /.+line ([\d]+) -+/.exec(parts[parts.length-1]); + if (match) { + line = parseInt(match[1]); + } + if (isNaN(line)) { + return; + } + // new error line + currentMessage = { + line: line, + message: parts.slice(-2).join(":"), + file: file + }; + } else { + currentMessage.message += "\n"+error; + } + }); + if (currentMessage !== null) { + // show last error too + markers.push({ + severity: window.monaco.MarkerSeverity.Error, + startLineNumber: currentMessage.line, + startColumn: 1, + endLineNumber: currentMessage.line, + endColumn: model.getLineContent(currentMessage.line).length, + message: currentMessage.message + }); + } + } + if (this.getFile().getFullPath() === path) { + window.monaco.editor.setModelMarkers(model, '', markers); + } else { + // TODO: save errors for later + } + }, + + showDecorations: function (path, decorators) { + if (this.getFile().getFullPath() === path) { + this._editor.deltaDecorations(this._currentDecorations[path], decorators); + } + this._currentDecorations[path] = decorators; + }, + + _getLanguage: function (file) { + var type = file.getName().split('.').pop(); + switch (type) { + case 'svg': + return 'xml'; + case 'js': + return 'javascript'; + case 'md': + return 'markdown'; + default: + return type; + } + } + }, + + /* + *********************************************** + DESTRUCTOR + *********************************************** + */ + destruct: function () { + this._workerWrapper = null; + if (this._editor) { + this._editor.dispose(); + this._editor = null; + } + qx.ui.core.FocusHandler.getInstance().setUseTabNavigation(true); + } +}); diff --git a/source/class/cv/ui/manager/editor/Worker.js b/source/class/cv/ui/manager/editor/Worker.js new file mode 100644 index 00000000000..f90a3dc627a --- /dev/null +++ b/source/class/cv/ui/manager/editor/Worker.js @@ -0,0 +1,140 @@ +/** + * + */ +qx.Class.define('cv.ui.manager.editor.Worker', { + extend: qx.core.Object, + type: 'singleton', + + /* + *********************************************** + CONSTRUCTOR + *********************************************** + */ + construct: function () { + this.base(arguments); + this._files = {}; + // create WebWorker + this._worker = new Worker(qx.util.ResourceManager.getInstance().toUri('manager/worker.js')); + this._worker.onmessage = this._onMessage.bind(this); + this._validationCallbacks = {}; + }, + + /* + *********************************************** + PROPERTIES + *********************************************** + */ + properties: { + editor: { + check: 'cv.ui.manager.editor.Source', + nullable: true + } + }, + + /* + *********************************************** + MEMBERS + *********************************************** + */ + members: { + _worker: null, + _files: null, + _validationCallbacks: null, + + open: function (file, code, schema) { + this._worker.postMessage(["openFile", { + path: file.getFullPath(), + code: qx.xml.Document.isXmlDocument(code) ? code.documentElement.outerHTML : code, + schema: schema + }]); + this._files[file.getFullPath()] = file; + }, + + close: function (file) { + this._worker.postMessage(["closeFile", { + path: file.getFullPath() + }]); + delete this._files[file.getFullPath()]; + }, + + contentChanged: function (file, content) { + this._worker.postMessage(["contentChange", { + path: file.getFullPath(), + code: content + }]); + }, + + validateConfig: function (file) { + if (file.isConfigFile()) { + return new Promise(function (resolve, reject) { + // check if there is already one validation request ongoing + var url = file.getServerPath(); + if (!this._validationCallbacks.hasOwnProperty(url)) { + this._validationCallbacks[url] = [resolve]; + this._worker.postMessage(["validateConfig", { + path: url + }]); + } else { + this._validationCallbacks[url].push(resolve); + } + }.bind(this)); + } else { + qx.log.Logger.error(this, file.getFullPath() + ' is no configuration file'); + } + }, + + _onMessage: function (e) { + var topic = e.data.shift(); + var data = e.data.shift(); + var path = e.data.shift(); + var file = this._files[path]; + if (!file && topic !== 'validationResult') { + qx.log.Logger.error(this, 'no file found for path ' + path + ' ignoring worker message for topic ' + topic); + return; + } + var editor = this.getEditor(); + switch(topic) { + case "modified": + // new files are always modified, to not override that state + if (!file.isTemporary()) { + file.setModified(data.modified); + } + file.setHash(data.currentHash); + break; + + case "errors": + file.setValid(!data || data.length === 0); + if (editor) { + editor.showErrors(path, data); + } + break; + + case "decorations": + if (editor) { + editor.showDecorations(path, data); + } + break; + + case 'validationResult': + if (this._validationCallbacks.hasOwnProperty(path)) { + var callbacks = this._validationCallbacks[path]; + delete this._validationCallbacks[path]; + callbacks.forEach(function(cb) { + cb(data); + }); + } + break; + } + } + }, + + /* + *********************************************** + DESTRUCTOR + *********************************************** + */ + destruct: function () { + this._worker.terminate(); + this._worker = null; + } +}); diff --git a/source/class/cv/ui/manager/editor/Xml.js b/source/class/cv/ui/manager/editor/Xml.js new file mode 100644 index 00000000000..a5f7ab30773 --- /dev/null +++ b/source/class/cv/ui/manager/editor/Xml.js @@ -0,0 +1,119 @@ +/** + * Default XML-Editor included as iframe. + */ +qx.Class.define('cv.ui.manager.editor.Xml', { + extend: cv.ui.manager.editor.AbstractEditor, + + /* + *********************************************** + CONSTRUCTOR + *********************************************** + */ + construct: function () { + this.base(arguments); + this._setLayout(new qx.ui.layout.Grow()); + this._handledActions = ['save']; + this.__basePath = qx.util.Uri.getAbsolute(window.location.pathname + qx.util.LibraryManager.getInstance().get("cv", "resourceUri") + '/../editor/editor.html'); + this._draw(); + }, + + /* + *********************************************** + STATICS + *********************************************** + */ + statics: { + SUPPORTED_FILES: /visu_config.*\.xml/, + TITLE: qx.locale.Manager.tr('Xml-editor'), + ICON: cv.theme.dark.Images.getIcon('xml', 18) + }, + + /* + *********************************************** + MEMBERS + *********************************************** + */ + members: { + _currentContent: null, + + _draw: function () { + + }, + + _loadFile: function (file) { + if (this._iframe) { + this._iframe.destroy(); + } + var match = /.*visu_config_?(.*)\.xml/.exec(file.getName()); + if (match) { + this._iframe = new qx.ui.embed.Iframe(qx.util.Uri.appendParamsToUrl(this.__basePath, 'embed=0&config=' + match[1])); + this._iframe.addListener('load', function () { + // inject save method + this._iframe.getWindow().saveFromIframe = this.saveFromIframe.bind(this); + }, this); + + this._add(this._iframe); + } + }, + + saveFromIframe: function (data) { + // create XML string from data + var xml = ''; + data.forEach(function (elem) { + xml += this._elemToXml(elem, ''); + }, this); + this._currentContent = xml; + this._onContentChanged(); + this.save(); + }, + + _elemToXml: function (elem) { + var xml = ''; + if (elem.nodeName === '#text') { + xml += elem.nodeValue; + } else { + xml += '<' + elem.nodeName; + Object.keys(elem.attributes).forEach(function (attrName) { + xml += ' ' + attrName + '="' + elem.attributes[attrName] + '"'; + }); + + if (!elem.nodeValue && elem.children.length === 0) { + xml += '/>'; + } else { + xml += '>'; + if (elem.nodeValue) { + xml += elem.nodeValue; + } + var children = []; + elem.children.forEach(function (child) { + children.push(this._elemToXml(child)); + }, this); + xml += children.join(''); + xml += ''; + } + } + return xml; + }, + + getCurrentContent: function () { + return this._currentContent; + }, + + _onContentChanged: function () { + this.getFile().setModified(true); + }, + + isSupported: function (file) { + return cv.ui.manager.editor.Xml.SUPPORTED_FILES.test(file.getName()); + } + }, + + /* + *********************************************** + DESTRUCTOR + *********************************************** + */ + destruct: function () { + + } +}); diff --git a/source/class/cv/ui/manager/editor/completion/CometVisu.js b/source/class/cv/ui/manager/editor/completion/CometVisu.js new file mode 100644 index 00000000000..0f957e1e808 --- /dev/null +++ b/source/class/cv/ui/manager/editor/completion/CometVisu.js @@ -0,0 +1,132 @@ +/** + * + */ +qx.Class.define('cv.ui.manager.editor.completion.CometVisu', { + extend: qx.core.Object, + + /* + *********************************************** + CONSTRUCTOR + *********************************************** + */ + construct: function () { + this.base(arguments); + }, + + /* + *********************************************** + MEMBERS + *********************************************** + */ + members: { + TEMPLATES: null, + + getTemplates: function () { + if (!this.TEMPLATES) { + this.TEMPLATES = [{ + filterText: "cvclass", + label: 'CometVisu-Class', + kind: window.monaco.languages.CompletionItemKind.Class, + detail: "A generic CometVisu class.", + insertText: '/**\n * TODO: Add documentation\n * \n * @since ' + cv.Version.VERSION.replace('-dev', '') + ' ($CURRENT_YEAR)\n */\nqx.Class.define("cv.$0", {\n extend: qx.core.Object,\n\n \n});\n', + insertTextRules: window.monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet | window.monaco.languages.CompletionItemInsertTextRule.KeepWhitespace + }, { + filterText: "cvwidget", + label: 'CometVisu-Widget', + kind: window.monaco.languages.CompletionItemKind.Class, + detail: "A CometVisu class for a widget.", + insertText: '/**\n * TODO: Add documentation\n * \n * @since ' + cv.Version.VERSION.replace('-dev', '') + ' ($CURRENT_YEAR)\n */\nqx.Class.define("cv.ui.structure.pure.$0", {\n extend: cv.ui.structure.AbstractWidget,\n\n \n});\n', + insertTextRules: window.monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet | window.monaco.languages.CompletionItemInsertTextRule.KeepWhitespace + }, { + filterText: "cvinterface", + label: 'CometVisu-Interface', + kind: window.monaco.languages.CompletionItemKind.Interface, + detail: "A generic CometVisu Interface.", + insertText: '/**\n * TODO: Add documentation\n * \n * @since ' + cv.Version.VERSION.replace('-dev', '') + ' ($CURRENT_YEAR)\n */\nqx.Interface.define("cv.$0", {\n \n});\n', + insertTextRules: window.monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet | window.monaco.languages.CompletionItemInsertTextRule.KeepWhitespace + }, { + filterText: "cvmixin", + label: 'CometVisu-Mixin', + kind: window.monaco.languages.CompletionItemKind.Class, + detail: "A generic CometVisu Mixin.", + insertText: '/**\n * TODO: Add documentation\n * \n * @since ' + cv.Version.VERSION.replace('-dev', '') + ' ($CURRENT_YEAR)\n */\nqx.Mixin.define("cv.$0", {\n \n});\n', + insertTextRules: window.monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet | window.monaco.languages.CompletionItemInsertTextRule.KeepWhitespace + }, { + filterText: "cvmembers", + label: 'CometVisu-Class members', + kind: window.monaco.languages.CompletionItemKind.Struct, + detail: "A CometVisu classes members section.", + insertText: ' /*\n ***********************************************\n MEMBERS\n ***********************************************\n */\n members: {\n $0\n },\n', + insertTextRules: window.monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet | window.monaco.languages.CompletionItemInsertTextRule.KeepWhitespace + }, { + filterText: "cvproperties", + label: 'CometVisu-Class properties', + kind: window.monaco.languages.CompletionItemKind.Struct, + detail: "A CometVisu classes properties section.", + insertText: ' /*\n ***********************************************\n PROPERTIES\n ***********************************************\n */\n properties: {\n $0\n },\n', + insertTextRules: window.monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet | window.monaco.languages.CompletionItemInsertTextRule.KeepWhitespace + }, { + filterText: "cvstatics", + label: 'CometVisu-Class statics', + kind: window.monaco.languages.CompletionItemKind.Struct, + detail: "statics section.", + insertText: ' /*\n ***********************************************\n STATICS\n ***********************************************\n */\n statics: {\n $0\n },\n', + insertTextRules: window.monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet | window.monaco.languages.CompletionItemInsertTextRule.KeepWhitespace + }, { + filterText: "cvevents", + label: 'CometVisu-Class events', + kind: window.monaco.languages.CompletionItemKind.Struct, + detail: "events section.", + insertText: ' /*\n ***********************************************\n EVENTS\n ***********************************************\n */\n events: {\n $0\n },\n', + insertTextRules: window.monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet | window.monaco.languages.CompletionItemInsertTextRule.KeepWhitespace + }, { + filterText: "cvconstructor", + label: 'Constructor', + kind: window.monaco.languages.CompletionItemKind.Method, + detail: "constructor.", + insertText: ' /*\n ***********************************************\n CONSTRUCTOR\n ***********************************************\n */\n construct: function () {\n this.base(arguments);\n $0\n },\n', + insertTextRules: window.monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet | window.monaco.languages.CompletionItemInsertTextRule.KeepWhitespace + }, { + filterText: "cvdestructor", + label: 'Destructor', + kind: window.monaco.languages.CompletionItemKind.Method, + detail: "destructor.", + insertText: ' /*\n ***********************************************\n DESTRUCTOR\n ***********************************************\n */\n destruct: function () {\n this.base(arguments);\n $0\n }\n', + insertTextRules: window.monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet | window.monaco.languages.CompletionItemInsertTextRule.KeepWhitespace + }]; + + // load plugin template from backend + return new Promise(function (resolve, reject) { + cv.io.rest.Client.getFsClient().readSync({path: '.templates/Plugin.js'}, function (err, res) { + if (err) { + reject(err); + } else { + this.TEMPLATES.push({ + filterText: "cvplugin", + label: 'CometVisu-Plugin', + kind: window.monaco.languages.CompletionItemKind.Class, + detail: "A CometVisu class for a plugin.", + insertText: res.replace('###SINCE###', cv.Version.VERSION.replace('-dev', '')+ ' ($CURRENT_YEAR)'), + insertTextRules: window.monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet | window.monaco.languages.CompletionItemInsertTextRule.KeepWhitespace + }); + resolve(this.TEMPLATES); + } + }, this); + }.bind(this)); + } + return Promise.resolve(this.TEMPLATES); + }, + + getProvider: function () { + return { + triggerCharacters: ['cv'], + provideCompletionItems: function () { + // get editor content before the pointer + return this.getTemplates().then(function (sugg) { + return {suggestions: sugg}; + }); + }.bind(this) + }; + } + } +}); diff --git a/source/class/cv/ui/manager/editor/completion/Config.js b/source/class/cv/ui/manager/editor/completion/Config.js new file mode 100644 index 00000000000..dd568f2fed9 --- /dev/null +++ b/source/class/cv/ui/manager/editor/completion/Config.js @@ -0,0 +1,503 @@ +/** + * XSD-based code completion provider for the monaco text editor. + * + * @since 0.11.0 + * @author Tobias Bräutigam + */ +qx.Class.define('cv.ui.manager.editor.completion.Config', { + extend: qx.core.Object, + + /* + *********************************************** + CONSTRUCTOR + *********************************************** + */ + construct: function (schemaNode) { + this.base(arguments); + this.__elementCache = {}; + this._schemaNode = schemaNode; + this._dataProvider = cv.ui.manager.editor.data.Provider.getInstance(); + + }, + + /* + *********************************************** + MEMBERS + *********************************************** + */ + members: { + __elementCache: null, + __metaElementCache: null, + _schemaNode: null, + _dataProvider: null, + + getLastOpenedTag: function (text) { + // get all tags inside of the content + var tags = text.match(/<\/*(?=\S*)([a-zA-Z-]+)/g); + if (!tags) { + return undefined; + } + // we need to know which tags are closed + var closingTags = []; + for (var i = tags.length - 1; i >= 0; i--) { + if (tags[i].indexOf('', tagPosition); + // if the tag wasn't closed + if (closingBracketIdx === -1) { + // if there are no closing tags or the current tag wasn't closed + if (!closingTags.length || closingTags[closingTags.length - 1] !== tag) { + // we found our tag, but let's get the information if we are looking for + // a child element or an attribute + text = text.substring(tagPosition); + + var openedTag = text.indexOf('<') > text.indexOf('>'); + var contentSearch = false; + var currentAttribute = null; + if (openedTag) { + var attrMatch = /([\w\-_\.\d]+)="[^"]*$/.exec(text); + contentSearch = !!attrMatch; + currentAttribute = attrMatch ? attrMatch[1] : null; + } + var filteredElementSearch = /<[\w-_\d]+$/.test(text); + return { + tagName: tag, + currentAttribute: currentAttribute, + filteredElementSearch: filteredElementSearch, + isAttributeSearch: !filteredElementSearch && openedTag && !contentSearch, + isContentSearch: contentSearch, + text: text + }; + } + // remove the last closed tag + closingTags.splice(closingTags.length - 1, 1); + } + // remove the last checked tag and continue processing the rest of the content + text = text.substring(0, tagPosition); + } + } + }, + + findElements: function (parent, elementName, maxDepth, currentDepth, inMeta) { + var cache = inMeta === true ? this.__metaElementCache : this.__elementCache; + if (elementName in cache) { + return cache[elementName]; + } + if (maxDepth < currentDepth) { + return null; + } + if (!parent) { + parent = this._schemaNode.allowedRootElements.pages; + } + if (currentDepth === undefined) { + currentDepth = 1; + } + var allowedElements = parent.getAllowedElements(); + // console.log(parent.name+" looking for "+elementName+" in tree level "+currentDepth+ "(<"+maxDepth+") ("+Object.getOwnPropertyNames(allowedElements).join(", ")+")"); + if (elementName in allowedElements) { + // console.log("found "+elementName+" in tree level "+currentDepth); + this.__elementCache[elementName] = allowedElements[elementName]; + return allowedElements[elementName]; + } else { + for (var element in allowedElements) { + if (inMeta !== true && element === 'meta') { + continue; + } + if (maxDepth > currentDepth) { + var result = this.findElements(allowedElements[element], elementName, maxDepth, currentDepth + 1); + if (result) { + cache[elementName] = result; + // console.log("found " + elementName + " in tree level " + currentDepth); + return result; + } + } + } + } + + }, + + isItemAvailable: function (itemName, maxOccurs, items) { + // the default for 'maxOccurs' is 1 + maxOccurs = maxOccurs || '1'; + // the element can appere infinite times, so it is available + if (maxOccurs && maxOccurs === 'unbounded') { + return true; + } + // count how many times the element appeared + var count = 0; + for (var i = 0; i < items.length; i++) { + if (items[i] === itemName) { + count++; + } + } + // if it didn't appear yet, or it can appear again, then it + // is available, otherwise it't not + return count === 0 || parseInt(maxOccurs) > count; + }, + + getElementString: function (element, indent, prefix) { + var insertText = indent+prefix+element.name+" "; + // add all required attributes with default values + Object.getOwnPropertyNames(element.allowedAttributes).forEach(function(attr) { + var attribute = element.allowedAttributes[attr]; + if (!attribute.isOptional) { + insertText += attr+'="'+(attribute.defaultValue ? attribute.defaultValue : "")+'" '; + } + }); + // add mandatory children + var requiredElements = element.getRequiredElements(); + var allowedContent = element.getAllowedContent(); + var isContentAllowed = allowedContent._text || requiredElements.length > 0 || !!allowedContent._grouping; + if (!isContentAllowed) { + // close tag + insertText = insertText.trim()+"/"; + } else { + // close open tag + insertText = insertText.trim()+">"; + + // insert required elements + var children = 0; + requiredElements.forEach(function(elemName) { + var elem = this.findElements(element, elemName, 1, 0); + if (elem) { + insertText += "\n " + this.getElementString(elem, indent + " ", "<") + ">"; + children++; + } + }, this); + // add closing tag + if (children > 0) { + insertText += "\n"+indent; + } + insertText += "'); + var textMeta = metaEndPos > 0 ? completeText.substring(0, metaEndPos) : completeText; + var mappingNames = []; + var stylingNames = []; + var templates = {}; + var map, vmap; + var regex = /'); + if (templatesStart >= 0) { + var templatesString = textMeta.substring(templatesStart + 11, textMeta.indexOf('') - 12).replace(/(?:\r\n|\r|\n)/g, ''); + templatesString.split('').forEach(function (rawTemplate) { + var nameMatch = /